diff --git a/CHANGELOG.md b/CHANGELOG.md index 2d2254d..709c28b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1 +1,33 @@ ## [0.13.0] + +### Features & Modules +#### Send module +- ##### V1 + - `RequestBuilder` exposes `fromPsbtAndUri`, `buildWithAdditionalFee`, `buildRecommended`, `buildNonIncentivizing`, `alwaysDisableOutputSubstitution`. + - `RequestContext` exposes `extractContextV1` & `extractContextV2`. + - `ContextV1` exposes `processResponse`. +- ##### V2 + - `ContextV2` exposes `processResponse`. +#### Receive module +- ##### V1 + - `UncheckedProposal` exposes `fromRequest`, `extractTxToScheduleBroadcast`, `checkBroadcastSuitability`, `buildNonIncentivizing`, + `assumeInteractiveReceiver` &`alwaysDisableOutputSubstitution`. + - `MaybeInputsOwned` exposes `checkInputsNotOwned`. + - `MaybeMixedInputScripts` exposes `checkNoMixedInputScripts`. + - `MaybeInputsSeen` exposes `checkNoInputsSeenBefore`. + - `OutputsUnknown` exposes `identifyReceiverOutputs`. + - `ProvisionalProposal` exposes `substituteOutputAddress`, `contributeNonWitnessInput`, `contributeWitnessInput`, `tryPreservingPrivacy` & + `finalizeProposal`. + - `PayjoinProposal` exposes `isOutputSubstitutionDisabled`, `ownedVouts`, `psbt` & `utxosToBeLocked`. +- ##### V2 + - `Enroller` exposes `fromDirectoryConfig`, `processResponse` & `extractRequest`. + - `Enrolled` exposes `extractRequest`, `processResponse` & `fallbackTarget`. + - `UncheckedProposal` exposes `extractTxToScheduleBroadcast`, `checkBroadcastSuitability` & `assumeInteractiveReceiver`. + - `MaybeInputsOwned` exposes `checkInputsNotOwned`. + - `MaybeMixedInputScripts` exposes `checkNoMixedInputScripts`. + - `MaybeInputsSeen` exposes `checkNoInputsSeenBefore`. + - `OutputsUnknown` exposes `identifyReceiverOutputs`. + - `ProvisionalProposal` exposes `substituteOutputAddress`, `contributeNonWitnessInput`, `contributeWitnessInput`, `tryPreservingPrivacy` & + `finalizeProposal`. + - `PayjoinProposal` exposes `deserializeRes`, `extractV1Req`, `extractV2Request`, `isOutputSubstitutionDisabled`, `ownedVouts`, `psbt` & + `utxosToBeLocked`. diff --git a/example/integration_test/bdk_full_cycle_test.dart b/example/integration_test/bdk_full_cycle_test.dart index 09708c1..6baf746 100644 --- a/example/integration_test/bdk_full_cycle_test.dart +++ b/example/integration_test/bdk_full_cycle_test.dart @@ -5,10 +5,11 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:integration_test/integration_test.dart'; import 'package:payjoin_flutter/common.dart' as common; +import 'package:payjoin_flutter/receive/v1.dart' as v1; +import 'package:payjoin_flutter/send.dart' as send; import 'package:payjoin_flutter/uri.dart' as pay_join_uri; import 'package:payjoin_flutter_example/bdk_client.dart'; import 'package:payjoin_flutter_example/btc_client.dart'; -import 'package:payjoin_flutter_example/payjoin_library.dart'; void main() { IntegrationTestWidgetsFlutterBinding.ensureInitialized(); @@ -16,51 +17,83 @@ void main() { group('v1_to_v1', () { setUp(() async {}); testWidgets('full_cycle', (WidgetTester tester) async { - final payJoinLib = PayJoinLibrary(); final btcClient = BtcClient("sender"); await btcClient.loadWallet(); final sender = BdkClient( - "puppy interest whip tonight dad never sudden response push zone pig patch"); + "wpkh(tprv8ZgxMBicQKsPfNH1PykMg16TAvrZgoxDnxr3eorcbhvZxyZzStwFkvqCJegr8Gbwj3GQum8QpXQPh7DGkoobpTB7YbcnUeUSKRDyX2cNN9h/84'/1'/0'/0/*)#ey7hlgpn"); final receiver = BdkClient( - "cart super leaf clinic pistol plug replace close super tooth wealth usage"); + "wpkh(tprv8ZgxMBicQKsPczV7D2zfMr7oUzHDhNPEuBUgrwRoWM3ijLRvhG87xYiqh9JFLPqojuhmqwMdo1oJzbe5GUpxCbDHnqyGhQa5Jg1Wt6rc9di/84'/1'/0'/0/*)#kdnuw5lq"); await sender.restoreWallet(); await receiver.restoreWallet(); // Receiver creates the payjoin URI final pjReceiverAddress = (await receiver.getNewAddress()).address; final pjSenderAddress = (await sender.getNewAddress()).address; - await btcClient.sendToAddress(await pjSenderAddress.asString(), 10); - await btcClient.sendToAddress(await pjReceiverAddress.asString(), 2); + await btcClient.sendToAddress(await pjSenderAddress.asString(), 1); + await btcClient.sendToAddress(await pjReceiverAddress.asString(), 1); await btcClient.generate(11, await pjSenderAddress.asString()); await receiver.syncWallet(); await sender.syncWallet(); - final pjUri = await payJoinLib.buildPjUri( - 0.0083285, await pjReceiverAddress.asString()); // Sender create a funded PSBT (not broadcast) to address with amount given in the pjUri debugPrint("Sender Balance: ${(await sender.getBalance()).toString()}"); - final uri = await pay_join_uri.Uri.fromString(pjUri); + final uri = await pay_join_uri.Uri.fromString( + "${await pjReceiverAddress.toQrUri()}?amount=${0.0083285}&pj=https://example.com"); final address = await uri.address(); int amount = (((await uri.amount()) ?? 0) * 100000000).toInt(); + final senderPsbt = (await sender.createPsbt(address, amount, 2000)); final senderPsbtBase64 = await senderPsbt.serialize(); debugPrint( "\nOriginal sender psbt: $senderPsbtBase64", ); + // Receiver part - final (provisionalProposal, ctx) = - await payJoinLib.handlePjRequest(senderPsbtBase64, pjUri, (e) async { - final script = ScriptBuf(bytes: e); - return (await receiver.getAddressInfo(script)); + final (req, ctx) = await (await (await send.RequestBuilder.fromPsbtAndUri( + psbtBase64: senderPsbtBase64, uri: uri)) + .buildWithAdditionalFee( + maxFeeContribution: 10000, + minFeeRate: 0, + clampFeeContribution: false)) + .extractContextV1(); + final headers = common.Headers(map: { + 'content-type': 'text/plain', + 'content-length': req.body.length.toString(), + }); + final uncheckedProposal = await v1.UncheckedProposal.fromRequest( + body: req.body.toList(), + query: (await req.url.query())!, + headers: headers); + // in a payment processor where the sender could go offline, this is where you schedule to broadcast the original_tx + var _ = await uncheckedProposal.extractTxToScheduleBroadcast(); + final inputsOwned = await uncheckedProposal.checkBroadcastSuitability( + canBroadcast: (e) async { + return true; + }); + // Receive Check 2: receiver can't sign for proposal inputs + final mixedInputScripts = + await inputsOwned.checkInputsNotOwned(isOwned: (e) async { + return await receiver.getAddressInfo(ScriptBuf(bytes: e)); + }); + + // Receive Check 3: receiver can't sign for proposal inputs + final seenInputs = await mixedInputScripts.checkNoMixedInputScripts(); + // Receive Check 4: have we seen this input before? More of a check for non-interactive i.e. payment processor receivers. + final provisionalProposal = + await (await seenInputs.checkNoInputsSeenBefore(isKnown: (e) async { + return false; + })) + .identifyReceiverOutputs(isReceiverOutput: (e) async { + return await receiver.getAddressInfo(ScriptBuf(bytes: e)); }); - final availableInputs = await receiver.listUnspent(); + final unspent = await receiver.listUnspent(); // Select receiver payjoin inputs. Map candidateInputs = { - for (var input in availableInputs) + for (var input in unspent) input.txout.value: common.OutPoint( txid: input.outpoint.txid.toString(), vout: input.outpoint.vout) }; final selectedOutpoint = await provisionalProposal.tryPreservingPrivacy( candidateInputs: candidateInputs); - var selectedUtxo = availableInputs.firstWhere( + var selectedUtxo = unspent.firstWhere( (i) => i.outpoint.txid.toString() == selectedOutpoint.txid && i.outpoint.vout == selectedOutpoint.vout, @@ -81,6 +114,7 @@ void main() { address: await receiverAddress.asString()); final payJoinProposal = await provisionalProposal.finalizeProposal(processPsbt: (e) async { + debugPrint("\n Original receiver unsigned psbt: $e"); return await (await receiver .signPsbt(await PartiallySignedTransaction.fromString(e))) .serialize(); diff --git a/example/lib/bdk_client.dart b/example/lib/bdk_client.dart index 3d0f4d5..acdd951 100644 --- a/example/lib/bdk_client.dart +++ b/example/lib/bdk_client.dart @@ -1,60 +1,38 @@ -import 'dart:io'; - import 'package:bdk_flutter/bdk_flutter.dart'; import 'package:flutter/cupertino.dart'; class BdkClient { // Bitcoin core credentials - String localEsploraUrl = 'http://0.0.0.0:30000'; + // String localEsploraUrl = 'http://0.0.0.0:30000'; late Wallet wallet; late Blockchain blockchain; - final String mnemonic; - - Future> getDescriptors(String mnemonicStr) async { - final descriptors = []; - try { - for (var e in [KeychainKind.externalChain, KeychainKind.internalChain]) { - final mnemonic = await Mnemonic.fromString(mnemonicStr); - final descriptorSecretKey = await DescriptorSecretKey.create( - network: Network.regtest, - mnemonic: mnemonic, - ); - final descriptor = await Descriptor.newBip86( - secretKey: descriptorSecretKey, - network: Network.regtest, - keychain: e); - descriptors.add(descriptor); - } - return descriptors; - } on Exception { - rethrow; - } - } + final String descriptor; - BdkClient(this.mnemonic); + BdkClient(this.descriptor); Future restoreWallet() async { try { - final descriptors = await getDescriptors(mnemonic); await initBlockchain(); wallet = await Wallet.create( - descriptor: descriptors[0], - changeDescriptor: descriptors[1], - network: Network.regtest, + descriptor: await Descriptor.create( + descriptor: descriptor, network: Network.signet), + network: Network.signet, databaseConfig: const DatabaseConfig.memory()); + debugPrint(await (await getNewAddress()).address.asString()); } on Exception { rethrow; } } Future initBlockchain() async { - String esploraUrl = - Platform.isAndroid ? 'http://10.0.2.2:30000' : localEsploraUrl; + // String esploraUrl = + // Platform.isAndroid ? 'http://10.0.2.2:30000' : localEsploraUrl; try { blockchain = await Blockchain.create( - config: BlockchainConfig.esplora( - config: EsploraConfig(baseUrl: esploraUrl, stopGap: 10))); + config: const BlockchainConfig.esplora( + config: EsploraConfig( + baseUrl: "https://mutinynet.com/api", stopGap: 10))); } on Exception { rethrow; } @@ -66,14 +44,23 @@ class BdkClient { return res; } + Future> listTransactions() async { + final res = await wallet.listTransactions(includeRaw: true); + return res; + } + Future signPsbt( PartiallySignedTransaction psbt) async { - final isFinalized = await wallet.sign(psbt: psbt); - if (isFinalized) { - return psbt; - } else { - throw Exception("PartiallySignedTransaction not finalized!"); - } + await wallet.sign( + psbt: psbt, + signOptions: const SignOptions( + trustWitnessUtxo: true, + allowAllSighashes: false, + removePartialSigs: true, + tryFinalize: true, + signWithTapInternalKey: true, + allowGrinding: false)); + return psbt; } Future createPsbt( @@ -81,9 +68,8 @@ class BdkClient { try { final txBuilder = TxBuilder(); final address = - await Address.fromString(s: addressStr, network: Network.regtest); + await Address.fromString(s: addressStr, network: Network.signet); final script = await address.scriptPubkey(); - final (psbt, _) = await txBuilder .addRecipient(script, amount) .feeAbsolute(fee) diff --git a/example/lib/main.dart b/example/lib/main.dart index 4cd6c83..386d585 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -5,7 +5,7 @@ import 'package:flutter/material.dart'; import 'package:google_fonts/google_fonts.dart'; import 'package:payjoin_flutter/common.dart' as common; import 'package:payjoin_flutter/uri.dart' as pay_join_uri; -import 'package:payjoin_flutter_example/btc_client.dart'; +import 'package:payjoin_flutter_example/bdk_client.dart'; import 'package:payjoin_flutter_example/payjoin_library.dart'; void main() async { @@ -42,13 +42,25 @@ class PayJoin extends StatefulWidget { class _PayJoinState extends State { static const primaryColor = 0xffC71585; PayJoinLibrary payJoinLibrary = PayJoinLibrary(); - BtcClient senderRpc = BtcClient("sender"); - BtcClient receiverRpc = BtcClient("receiver"); + final sender = BdkClient( + "wpkh(tprv8ZgxMBicQKsPdgsqhkRVYkBBULxG3HvyXtwhWKEgfH4bsU8bmaqhdbZvxq4Z7BLFtUrT58ynRDrBcfG3vNpNHsKTV5xCEgRoKaNNzcVW3HW/84'/1'/0'/0/*)#ln3hfgcf"); + final receiver = BdkClient( + "wpkh(tprv8ZgxMBicQKsPfKJjrApLfm2BhWhV1JpL3StS8UPagm91Y215JGZktQKTtvErD92RKxEDYD9Sfc9eGZVkuH94NgEHPhz7rpgzhiNm2UPs1G1/84'/1'/0'/0/*)#h8uywf09"); String displayText = ""; String pjUri = ""; - String senderPsbt = ""; - String processedAndFinalizedPsbt = ""; + late PartiallySignedTransaction senderPsbt; + late PartiallySignedTransaction processedAndFinalizedPsbt; + @override + void initState() { + sender.restoreWallet(); + receiver.restoreWallet(); + setState(() { + displayText = "sender & receiver restored"; + }); + super.initState(); + } + @override Widget build(BuildContext context) { return Scaffold( @@ -95,11 +107,16 @@ class _PayJoinState extends State { ), TextButton( onPressed: () async { - await senderRpc.loadWallet(); - await receiverRpc.loadWallet(); + await sender.syncWallet(); + await receiver.syncWallet(); + setState(() { + displayText = "sync complete"; + }); + debugPrint( + "sender balance: ${(await sender.getBalance()).toString()}"); }, child: Text( - "Init Sender & Receiver", + "Sync wallets", style: GoogleFonts.manrope( color: Colors.black, fontSize: 14, @@ -107,9 +124,9 @@ class _PayJoinState extends State { )), TextButton( onPressed: () async { - final address = await receiverRpc.getNewAddress(); - final res = - await payJoinLibrary.buildPjUri(0.0083285, address); + final address = (await receiver.getNewAddress()).address; + final res = await payJoinLibrary.buildPjUri( + 0.0083285, await address.toQrUri()); setState(() { pjUri = res; displayText = res; @@ -124,15 +141,15 @@ class _PayJoinState extends State { )), TextButton( onPressed: () async { - final balance = await senderRpc.getBalance(); + final balance = await sender.getBalance(); debugPrint("Sender Balance: ${balance.toString()}"); final uri = await pay_join_uri.Uri.fromString(pjUri); final address = await uri.address(); - final amount = await uri.amount(); - final psbt = (await senderRpc.walletCreateFundedPsbt( - amount, address, 2000))["psbt"]; + int amount = + (((await uri.amount()) ?? 0) * 100000000).toInt(); + final psbt = (await sender.createPsbt(address, amount, 2000)); debugPrint( - "\nOriginal sender psbt: $psbt", + "\nOriginal sender psbt: ${await psbt.serialize()}", ); setState(() { senderPsbt = psbt; @@ -148,57 +165,58 @@ class _PayJoinState extends State { TextButton( onPressed: () async { final (provisionalProposal, contextV1) = await payJoinLibrary - .handlePjRequest(senderPsbt, pjUri, (e) async { + .handlePjRequest(await senderPsbt.serialize(), pjUri, + (e) async { final script = ScriptBuf(bytes: e); - final address = await (await Address.fromScript( - script: script, network: Network.regtest)) - .asString(); - return (await receiverRpc - .getAddressInfo(address))["ismine"]; + + return (await receiver.getAddressInfo(script)); }); - final availableInputs = await receiverRpc.listUnspent([]); + final unspent = await receiver.listUnspent(); // Select receiver payjoin inputs. - Map candidateInputs = {}; - for (var e in availableInputs) { - int amount = (e["amount"] * 100000000).toInt(); - candidateInputs[amount] = - common.OutPoint(txid: e["txid"], vout: e["vout"]); - } + Map candidateInputs = { + for (var input in unspent) + input.txout.value: common.OutPoint( + txid: input.outpoint.txid.toString(), + vout: input.outpoint.vout) + }; final selectedOutpoint = await provisionalProposal .tryPreservingPrivacy(candidateInputs: candidateInputs); + var selectedUtxo = unspent.firstWhere( + (i) => + i.outpoint.txid.toString() == selectedOutpoint.txid && + i.outpoint.vout == selectedOutpoint.vout, + orElse: () => throw Exception('UTXO not found')); + var txoToContribute = common.TxOut( + value: selectedUtxo.txout.value, + scriptPubkey: selectedUtxo.txout.scriptPubkey.bytes, + ); - final selectedUtxo = availableInputs.firstWhere((e) => - (e["txid"] == selectedOutpoint.txid) && - (e["vout"] == selectedOutpoint.vout)); - final selectedUtxoScriptPubKey = - await ScriptBuf.fromHex(selectedUtxo["scriptPubKey"]); - int selectedUtxoAmount = - (selectedUtxo["amount"] * 100000000).toInt(); - final txoutToContribute = common.TxOut( - scriptPubkey: selectedUtxoScriptPubKey.bytes, - value: selectedUtxoAmount, + var outpointToContribute = common.OutPoint( + txid: selectedUtxo.outpoint.txid.toString(), + vout: selectedUtxo.outpoint.vout, ); - final outputToContribute = common.OutPoint( - txid: selectedUtxo["txid"], vout: selectedUtxo["vout"]); + await provisionalProposal.contributeWitnessInput( - txo: txoutToContribute, outpoint: outputToContribute); - final newReceiverAddress = await receiverRpc.getNewAddress(); + txo: txoToContribute, outpoint: outpointToContribute); + final newReceiverAddress = await receiver.getNewAddress(); await provisionalProposal.substituteOutputAddress( - address: newReceiverAddress); + address: await newReceiverAddress.address.asString()); final payJoinProposal = await provisionalProposal .finalizeProposal(processPsbt: (e) async { - return (await receiverRpc.walletProcessPsbt(e))["psbt"]; + debugPrint("\n Original receiver unsigned psbt: $e"); + return await (await receiver.signPsbt( + await PartiallySignedTransaction.fromString(e))) + .serialize(); }); final receiverPsbt = await payJoinProposal.psbt(); debugPrint("\n Original receiver psbt: $receiverPsbt"); final receiverProcessedPsbt = await contextV1.processResponse( response: utf8.encode(receiverPsbt)); - final senderProcessedPsbt = (await senderRpc - .walletProcessPsbt(receiverProcessedPsbt))["psbt"]; - final senderFinalizedPsbt = - (await senderRpc.finalizePsbt(senderProcessedPsbt)); + final senderProcessedPsbt = (await sender.signPsbt( + await PartiallySignedTransaction.fromString( + receiverProcessedPsbt))); setState(() { - processedAndFinalizedPsbt = senderFinalizedPsbt["hex"]; + processedAndFinalizedPsbt = senderProcessedPsbt; }); }, child: Text( @@ -210,8 +228,8 @@ class _PayJoinState extends State { )), TextButton( onPressed: () async { - final res = await senderRpc - .sendRawTransaction(processedAndFinalizedPsbt); + final res = + await sender.broadcastPsbt(processedAndFinalizedPsbt); debugPrint("Broadcast success: $res"); }, child: Text( diff --git a/example/lib/payjoin_library.dart b/example/lib/payjoin_library.dart index 4bdcb6a..d4717b4 100644 --- a/example/lib/payjoin_library.dart +++ b/example/lib/payjoin_library.dart @@ -13,7 +13,7 @@ class PayJoinLibrary { static const localCertFile = "localhost.der"; Future buildPjUri(double amount, String address, {String? pj}) async { try { - final pjUri = "bitcoin:$address?amount=$amount&pj=${pj ?? pjUrl}"; + final pjUri = "$address?amount=$amount&pj=${pj ?? pjUrl}"; await pj_uri.Uri.fromString(pjUri); return pjUri; } catch (e) { diff --git a/example/pubspec.lock b/example/pubspec.lock index 63b4401..8c706bb 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -21,10 +21,10 @@ packages: dependency: transitive description: name: args - sha256: eef6c46b622e0494a36c5a12d10d77fb4e855501a91c1b9ef9339326e58f0596 + sha256: "7cf60b9f0cc88203c5a190b4cd62a99feea42759a7fa695010eb5de1c0b2252a" url: "https://pub.dev" source: hosted - version: "2.4.2" + version: "2.5.0" async: dependency: transitive description: @@ -36,11 +36,12 @@ packages: bdk_flutter: dependency: "direct main" description: - name: bdk_flutter - sha256: c912a10a473fc8d378a6fd56f9eeb46f0cacaabee6c51c61a5e4566dadc674a6 - url: "https://pub.dev" - source: hosted - version: "0.31.2-dev.1" + path: "." + ref: "v0.31.2-dev.2" + resolved-ref: "18649436038282f379e9a4679656bcd084434ddd" + url: "https://github.com/LtbLightning/bdk-flutter" + source: git + version: "0.31.2-dev.2" boolean_selector: dependency: transitive description: @@ -133,10 +134,10 @@ packages: dependency: "direct main" description: name: cupertino_icons - sha256: d57953e10f9f8327ce64a508a355f0b1ec902193f66288e8cb5070e7c47eeb2d + sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6 url: "https://pub.dev" source: hosted - version: "1.0.6" + version: "1.0.8" dart_style: dependency: transitive description: @@ -165,10 +166,10 @@ packages: dependency: transitive description: name: ffi - sha256: "7bf0adc28a23d395f19f3f1eb21dd7cfd1dd9f8e1c50051c069122e6853bc878" + sha256: "493f37e7df1804778ff3a53bd691d8692ddf69702cf4c1c1096a2e41b4779e21" url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.2" file: dependency: transitive description: @@ -278,10 +279,10 @@ packages: dependency: transitive description: name: json_annotation - sha256: b10a7b2ff83d83c777edba3c6a0f97045ddadd56c944e1a23a3fdf43a1bf4467 + sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1" url: "https://pub.dev" source: hosted - version: "4.8.1" + version: "4.9.0" leak_tracker: dependency: transitive description: @@ -382,10 +383,10 @@ packages: dependency: transitive description: name: path_provider_android - sha256: a248d8146ee5983446bf03ed5ea8f6533129a12b11f12057ad1b4a67a2b3b41d + sha256: bca87b0165ffd7cdb9cad8edd22d18d2201e886d9a9f19b4fb3452ea7df3a72a url: "https://pub.dev" source: hosted - version: "2.2.4" + version: "2.2.6" path_provider_foundation: dependency: transitive description: @@ -546,10 +547,10 @@ packages: dependency: transitive description: name: uuid - sha256: cd210a09f7c18cbe5a02511718e0334de6559871052c90a90c0cca46a4aa81c8 + sha256: "814e9e88f21a176ae1359149021870e87f7cddaf633ab678a5d2b0bff7fd1ba8" url: "https://pub.dev" source: hosted - version: "4.3.3" + version: "4.4.0" vector_math: dependency: transitive description: @@ -594,10 +595,10 @@ packages: dependency: transitive description: name: win32 - sha256: "464f5674532865248444b4c3daca12bd9bf2d7c47f759ce2617986e7229494a8" + sha256: a79dbe579cb51ecd6d30b17e0cae4e0ea15e2c0e66f69ad4198f22a6789e94f4 url: "https://pub.dev" source: hosted - version: "5.2.0" + version: "5.5.1" xdg_directories: dependency: transitive description: @@ -615,5 +616,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.3.0 <4.0.0" - flutter: ">=3.19.2" + dart: ">=3.4.0 <4.0.0" + flutter: ">=3.22.0" diff --git a/example/pubspec.yaml b/example/pubspec.yaml index c2d0bf2..50cf8ef 100644 --- a/example/pubspec.yaml +++ b/example/pubspec.yaml @@ -42,7 +42,12 @@ dependencies: # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.2 dio: ^5.4.3+1 - bdk_flutter: ^0.31.2-dev.1 + bdk_flutter: + git: + url: https://github.com/LtbLightning/bdk-flutter + ref: v0.31.2-dev.2 + + google_fonts: ^6.2.1 dev_dependencies: diff --git a/ios/Classes/frb_generated.h b/ios/Classes/frb_generated.h index 7d1fd81..2029de9 100644 --- a/ios/Classes/frb_generated.h +++ b/ios/Classes/frb_generated.h @@ -31,10 +31,13 @@ typedef struct wire_cst_enroller { uintptr_t field0; } wire_cst_enroller; -typedef struct wire_cst_list_prim_u_8_strict { - uint8_t *ptr; - int32_t len; -} wire_cst_list_prim_u_8_strict; +typedef struct wire_cst_url { + uintptr_t field0; +} wire_cst_url; + +typedef struct wire_cst_ohttp_keys { + uintptr_t field0; +} wire_cst_ohttp_keys; typedef struct wire_cst_maybe_inputs_owned { uintptr_t field0; @@ -60,6 +63,11 @@ typedef struct wire_cst_provisional_proposal { uintptr_t field0; } wire_cst_provisional_proposal; +typedef struct wire_cst_list_prim_u_8_strict { + uint8_t *ptr; + int32_t len; +} wire_cst_list_prim_u_8_strict; + typedef struct wire_cst_out_point { struct wire_cst_list_prim_u_8_strict *txid; uint32_t vout; @@ -146,10 +154,6 @@ typedef struct wire_cst_request_context { uintptr_t field0; } wire_cst_request_context; -typedef struct wire_cst_url { - uintptr_t field0; -} wire_cst_url; - typedef struct wire_cst_list_out_point { struct wire_cst_out_point *ptr; int32_t len; @@ -283,27 +287,18 @@ void frbgen_payjoin_flutter_wire_enrolled_process_res(int64_t port_, struct wire_cst_list_prim_u_8_loose *body, struct wire_cst_client_response *ctx); -void frbgen_payjoin_flutter_wire_enrolled_subdirectory(int64_t port_, - struct wire_cst_enrolled *that); - void frbgen_payjoin_flutter_wire_enroller_extract_req(int64_t port_, struct wire_cst_enroller *ptr); -void frbgen_payjoin_flutter_wire_enroller_from_relay_config(int64_t port_, - struct wire_cst_list_prim_u_8_strict *relay_url, - struct wire_cst_list_prim_u_8_strict *ohttp_config_base64, - struct wire_cst_list_prim_u_8_strict *ohttp_proxy_url); - -void frbgen_payjoin_flutter_wire_enroller_payjoin_subdir(int64_t port_, - struct wire_cst_enroller *that); +void frbgen_payjoin_flutter_wire_enroller_from_directory_config(int64_t port_, + struct wire_cst_url *directory, + struct wire_cst_ohttp_keys *ohttp_keys, + struct wire_cst_url *ohttp_relay); void frbgen_payjoin_flutter_wire_enroller_process_res(int64_t port_, struct wire_cst_enroller *that, struct wire_cst_list_prim_u_8_loose *body, struct wire_cst_client_response *ctx); -void frbgen_payjoin_flutter_wire_enroller_subdirectory(int64_t port_, - struct wire_cst_enroller *that); - void frbgen_payjoin_flutter_wire_maybe_inputs_owned_check_inputs_not_owned(int64_t port_, struct wire_cst_maybe_inputs_owned *ptr, const void *is_owned); @@ -477,7 +472,10 @@ void frbgen_payjoin_flutter_wire_request_context_extract_v1(int64_t port_, void frbgen_payjoin_flutter_wire_request_context_extract_v2(int64_t port_, struct wire_cst_request_context *ptr, - struct wire_cst_list_prim_u_8_strict *ohttp_proxy_url); + struct wire_cst_url *ohttp_proxy_url); + +void frbgen_payjoin_flutter_wire_ohttp_keys_decode(int64_t port_, + struct wire_cst_list_prim_u_8_loose *bytes); void frbgen_payjoin_flutter_wire_uri_address(int64_t port_, struct wire_cst_uri *that); @@ -585,6 +583,10 @@ void frbgen_payjoin_flutter_rust_arc_increment_strong_count_RustOpaque_payjoin_f void frbgen_payjoin_flutter_rust_arc_decrement_strong_count_RustOpaque_payjoin_ffireceivev2V2UncheckedProposal(const void *ptr); +void frbgen_payjoin_flutter_rust_arc_increment_strong_count_RustOpaque_payjoin_ffitypesOhttpKeys(const void *ptr); + +void frbgen_payjoin_flutter_rust_arc_decrement_strong_count_RustOpaque_payjoin_ffitypesOhttpKeys(const void *ptr); + struct wire_cst_client_response *frbgen_payjoin_flutter_cst_new_box_autoadd_client_response(void); struct wire_cst_context_v_1 *frbgen_payjoin_flutter_cst_new_box_autoadd_context_v_1(void); @@ -605,6 +607,8 @@ struct wire_cst_maybe_inputs_seen *frbgen_payjoin_flutter_cst_new_box_autoadd_ma struct wire_cst_maybe_mixed_input_scripts *frbgen_payjoin_flutter_cst_new_box_autoadd_maybe_mixed_input_scripts(void); +struct wire_cst_ohttp_keys *frbgen_payjoin_flutter_cst_new_box_autoadd_ohttp_keys(void); + struct wire_cst_out_point *frbgen_payjoin_flutter_cst_new_box_autoadd_out_point(void); struct wire_cst_outputs_unknown *frbgen_payjoin_flutter_cst_new_box_autoadd_outputs_unknown(void); @@ -666,6 +670,7 @@ static int64_t dummy_method_to_enforce_bundling(void) { dummy_var ^= ((int64_t) (void*) frbgen_payjoin_flutter_cst_new_box_autoadd_maybe_inputs_owned); dummy_var ^= ((int64_t) (void*) frbgen_payjoin_flutter_cst_new_box_autoadd_maybe_inputs_seen); dummy_var ^= ((int64_t) (void*) frbgen_payjoin_flutter_cst_new_box_autoadd_maybe_mixed_input_scripts); + dummy_var ^= ((int64_t) (void*) frbgen_payjoin_flutter_cst_new_box_autoadd_ohttp_keys); dummy_var ^= ((int64_t) (void*) frbgen_payjoin_flutter_cst_new_box_autoadd_out_point); dummy_var ^= ((int64_t) (void*) frbgen_payjoin_flutter_cst_new_box_autoadd_outputs_unknown); dummy_var ^= ((int64_t) (void*) frbgen_payjoin_flutter_cst_new_box_autoadd_payjoin_proposal); @@ -714,6 +719,7 @@ static int64_t dummy_method_to_enforce_bundling(void) { dummy_var ^= ((int64_t) (void*) frbgen_payjoin_flutter_rust_arc_decrement_strong_count_RustOpaque_payjoin_ffireceivev1UncheckedProposal); dummy_var ^= ((int64_t) (void*) frbgen_payjoin_flutter_rust_arc_decrement_strong_count_RustOpaque_payjoin_ffireceivev2Enroller); dummy_var ^= ((int64_t) (void*) frbgen_payjoin_flutter_rust_arc_decrement_strong_count_RustOpaque_payjoin_ffireceivev2V2UncheckedProposal); + dummy_var ^= ((int64_t) (void*) frbgen_payjoin_flutter_rust_arc_decrement_strong_count_RustOpaque_payjoin_ffitypesOhttpKeys); dummy_var ^= ((int64_t) (void*) frbgen_payjoin_flutter_rust_arc_increment_strong_count_RustOpaque_Arcpayjoin_ffireceivev1MaybeInputsOwned); dummy_var ^= ((int64_t) (void*) frbgen_payjoin_flutter_rust_arc_increment_strong_count_RustOpaque_Arcpayjoin_ffireceivev1MaybeInputsSeen); dummy_var ^= ((int64_t) (void*) frbgen_payjoin_flutter_rust_arc_increment_strong_count_RustOpaque_Arcpayjoin_ffireceivev1MaybeMixedInputScripts); @@ -737,20 +743,19 @@ static int64_t dummy_method_to_enforce_bundling(void) { dummy_var ^= ((int64_t) (void*) frbgen_payjoin_flutter_rust_arc_increment_strong_count_RustOpaque_payjoin_ffireceivev1UncheckedProposal); dummy_var ^= ((int64_t) (void*) frbgen_payjoin_flutter_rust_arc_increment_strong_count_RustOpaque_payjoin_ffireceivev2Enroller); dummy_var ^= ((int64_t) (void*) frbgen_payjoin_flutter_rust_arc_increment_strong_count_RustOpaque_payjoin_ffireceivev2V2UncheckedProposal); + dummy_var ^= ((int64_t) (void*) frbgen_payjoin_flutter_rust_arc_increment_strong_count_RustOpaque_payjoin_ffitypesOhttpKeys); dummy_var ^= ((int64_t) (void*) frbgen_payjoin_flutter_wire_context_v_1_process_response); dummy_var ^= ((int64_t) (void*) frbgen_payjoin_flutter_wire_context_v_2_process_response); dummy_var ^= ((int64_t) (void*) frbgen_payjoin_flutter_wire_enrolled_extract_req); dummy_var ^= ((int64_t) (void*) frbgen_payjoin_flutter_wire_enrolled_fallback_target); dummy_var ^= ((int64_t) (void*) frbgen_payjoin_flutter_wire_enrolled_process_res); - dummy_var ^= ((int64_t) (void*) frbgen_payjoin_flutter_wire_enrolled_subdirectory); dummy_var ^= ((int64_t) (void*) frbgen_payjoin_flutter_wire_enroller_extract_req); - dummy_var ^= ((int64_t) (void*) frbgen_payjoin_flutter_wire_enroller_from_relay_config); - dummy_var ^= ((int64_t) (void*) frbgen_payjoin_flutter_wire_enroller_payjoin_subdir); + dummy_var ^= ((int64_t) (void*) frbgen_payjoin_flutter_wire_enroller_from_directory_config); dummy_var ^= ((int64_t) (void*) frbgen_payjoin_flutter_wire_enroller_process_res); - dummy_var ^= ((int64_t) (void*) frbgen_payjoin_flutter_wire_enroller_subdirectory); dummy_var ^= ((int64_t) (void*) frbgen_payjoin_flutter_wire_maybe_inputs_owned_check_inputs_not_owned); dummy_var ^= ((int64_t) (void*) frbgen_payjoin_flutter_wire_maybe_inputs_seen_check_no_inputs_seen_before); dummy_var ^= ((int64_t) (void*) frbgen_payjoin_flutter_wire_maybe_mixed_input_scripts_check_no_mixed_input_scripts); + dummy_var ^= ((int64_t) (void*) frbgen_payjoin_flutter_wire_ohttp_keys_decode); dummy_var ^= ((int64_t) (void*) frbgen_payjoin_flutter_wire_outputs_unknown_identify_receiver_outputs); dummy_var ^= ((int64_t) (void*) frbgen_payjoin_flutter_wire_payjoin_proposal_is_output_substitution_disabled); dummy_var ^= ((int64_t) (void*) frbgen_payjoin_flutter_wire_payjoin_proposal_owned_vouts); diff --git a/lib/receive/v2.dart b/lib/receive/v2.dart index 46452cc..66b31c2 100644 --- a/lib/receive/v2.dart +++ b/lib/receive/v2.dart @@ -8,44 +8,24 @@ import '../src/exceptions.dart'; import '../src/generated/api/receive.dart' as receive; import '../src/generated/utils/error.dart' as error; import '../uri.dart' as uri; +import '../uri.dart'; class Enroller extends receive.Enroller { Enroller._({required super.field0}); - Future fromRelayConfig( - {required String relayUrl, - required String ohttpConfigBase64, - required String ohttpProxyUrl, - dynamic hint}) async { + Future fromDirectoryConfig( + {required Url directory, + required OhttpKeys ohttpKeys, + required Url ohttpRelay}) async { try { - final res = await receive.Enroller.fromRelayConfig( - relayUrl: relayUrl, - ohttpConfigBase64: ohttpConfigBase64, - ohttpProxyUrl: ohttpProxyUrl); + final res = await receive.Enroller.fromDirectoryConfig( + directory: directory, ohttpKeys: ohttpKeys, ohttpRelay: ohttpRelay); return Enroller._(field0: res.field0); } on error.PayjoinError catch (e) { throw mapPayjoinError(e); } } - @override - Future payjoinSubdir({dynamic hint}) { - try { - return super.payjoinSubdir(); - } on error.PayjoinError catch (e) { - throw mapPayjoinError(e); - } - } - - @override - Future subdirectory({dynamic hint}) { - try { - return super.subdirectory(); - } on error.PayjoinError catch (e) { - throw mapPayjoinError(e); - } - } - Future processResponse( {required List body, required ClientResponse clientResponse}) async { try { diff --git a/lib/send.dart b/lib/send.dart index 692866f..f5f58ac 100644 --- a/lib/send.dart +++ b/lib/send.dart @@ -88,7 +88,7 @@ class RequestContext extends send.RequestContext { } Future<(common.Request, ContextV2)> extractContextV2( - String ohttpProxyUrl) async { + Url ohttpProxyUrl) async { try { final res = await send.RequestContext.extractV2( ohttpProxyUrl: ohttpProxyUrl, ptr: this); diff --git a/lib/src/generated/api/receive.dart b/lib/src/generated/api/receive.dart index 8d9ada6..adfc3e3 100644 --- a/lib/src/generated/api/receive.dart +++ b/lib/src/generated/api/receive.dart @@ -365,6 +365,25 @@ class PayjoinFfiReceiveV2V2UncheckedProposal extends RustOpaque { ); } +// Rust type: RustOpaqueNom +@sealed +class PayjoinFfiTypesOhttpKeys extends RustOpaque { + PayjoinFfiTypesOhttpKeys.dcoDecode(List wire) + : super.dcoDecode(wire, _kStaticData); + + PayjoinFfiTypesOhttpKeys.sseDecode(int ptr, int externalSizeOnNative) + : super.sseDecode(ptr, externalSizeOnNative, _kStaticData); + + static final _kStaticData = RustArcStaticData( + rustArcIncrementStrongCount: PayjoinCore + .instance.api.rust_arc_increment_strong_count_PayjoinFfiTypesOhttpKeys, + rustArcDecrementStrongCount: PayjoinCore + .instance.api.rust_arc_decrement_strong_count_PayjoinFfiTypesOhttpKeys, + rustArcDecrementStrongCountPtr: PayjoinCore.instance.api + .rust_arc_decrement_strong_count_PayjoinFfiTypesOhttpKeysPtr, + ); +} + class ClientResponse { final MutexOptionOhttpClientResponse field0; @@ -404,9 +423,6 @@ class Enrolled { PayjoinCore.instance.api .enrolledProcessRes(that: this, body: body, ctx: ctx, hint: hint); - Future subdirectory({dynamic hint}) => - PayjoinCore.instance.api.enrolledSubdirectory(that: this, hint: hint); - @override int get hashCode => field0.hashCode; @@ -429,20 +445,17 @@ class Enroller { {required Enroller ptr, dynamic hint}) => PayjoinCore.instance.api.enrollerExtractReq(ptr: ptr, hint: hint); - static Future fromRelayConfig( - {required String relayUrl, - required String ohttpConfigBase64, - required String ohttpProxyUrl, + static Future fromDirectoryConfig( + {required Url directory, + required OhttpKeys ohttpKeys, + required Url ohttpRelay, dynamic hint}) => - PayjoinCore.instance.api.enrollerFromRelayConfig( - relayUrl: relayUrl, - ohttpConfigBase64: ohttpConfigBase64, - ohttpProxyUrl: ohttpProxyUrl, + PayjoinCore.instance.api.enrollerFromDirectoryConfig( + directory: directory, + ohttpKeys: ohttpKeys, + ohttpRelay: ohttpRelay, hint: hint); - Future payjoinSubdir({dynamic hint}) => - PayjoinCore.instance.api.enrollerPayjoinSubdir(that: this, hint: hint); - Future processRes( {required List body, required ClientResponse ctx, @@ -450,9 +463,6 @@ class Enroller { PayjoinCore.instance.api .enrollerProcessRes(that: this, body: body, ctx: ctx, hint: hint); - Future subdirectory({dynamic hint}) => - PayjoinCore.instance.api.enrollerSubdirectory(that: this, hint: hint); - @override int get hashCode => field0.hashCode; diff --git a/lib/src/generated/api/send.dart b/lib/src/generated/api/send.dart index af31255..9aca5bd 100644 --- a/lib/src/generated/api/send.dart +++ b/lib/src/generated/api/send.dart @@ -213,7 +213,7 @@ class RequestContext { static Future extractV2( {required RequestContext ptr, - required String ohttpProxyUrl, + required Url ohttpProxyUrl, dynamic hint}) => PayjoinCore.instance.api.requestContextExtractV2( ptr: ptr, ohttpProxyUrl: ohttpProxyUrl, hint: hint); diff --git a/lib/src/generated/api/uri.dart b/lib/src/generated/api/uri.dart index 46bbdd4..81d9d93 100644 --- a/lib/src/generated/api/uri.dart +++ b/lib/src/generated/api/uri.dart @@ -9,6 +9,27 @@ import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated.dart'; import 'receive.dart'; import 'send.dart'; +class OhttpKeys { + final PayjoinFfiTypesOhttpKeys field0; + + const OhttpKeys({ + required this.field0, + }); + + static Future decode({required List bytes, dynamic hint}) => + PayjoinCore.instance.api.ohttpKeysDecode(bytes: bytes, hint: hint); + + @override + int get hashCode => field0.hashCode; + + @override + bool operator ==(Object other) => + identical(this, other) || + other is OhttpKeys && + runtimeType == other.runtimeType && + field0 == other.field0; +} + class Uri { final ArcPayjoinFfiUriUri field0; diff --git a/lib/src/generated/frb_generated.dart b/lib/src/generated/frb_generated.dart index 6cb45cc..b20a161 100644 --- a/lib/src/generated/frb_generated.dart +++ b/lib/src/generated/frb_generated.dart @@ -78,28 +78,21 @@ abstract class PayjoinCoreApi extends BaseApi { required ClientResponse ctx, dynamic hint}); - Future enrolledSubdirectory( - {required Enrolled that, dynamic hint}); - Future<((Url, Uint8List), ClientResponse)> enrollerExtractReq( {required Enroller ptr, dynamic hint}); - Future enrollerFromRelayConfig( - {required String relayUrl, - required String ohttpConfigBase64, - required String ohttpProxyUrl, + Future enrollerFromDirectoryConfig( + {required Url directory, + required OhttpKeys ohttpKeys, + required Url ohttpRelay, dynamic hint}); - Future enrollerPayjoinSubdir({required Enroller that, dynamic hint}); - Future enrollerProcessRes( {required Enroller that, required List body, required ClientResponse ctx, dynamic hint}); - Future enrollerSubdirectory({required Enroller that, dynamic hint}); - Future maybeInputsOwnedCheckInputsNotOwned( {required MaybeInputsOwned ptr, required FutureOr Function(Uint8List) isOwned, @@ -288,9 +281,9 @@ abstract class PayjoinCoreApi extends BaseApi { {required RequestContext ptr, dynamic hint}); Future requestContextExtractV2( - {required RequestContext ptr, - required String ohttpProxyUrl, - dynamic hint}); + {required RequestContext ptr, required Url ohttpProxyUrl, dynamic hint}); + + Future ohttpKeysDecode({required List bytes, dynamic hint}); Future uriAddress({required Uri that, dynamic hint}); @@ -510,6 +503,15 @@ abstract class PayjoinCoreApi extends BaseApi { CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_PayjoinFfiReceiveV2V2UncheckedProposalPtr; + + RustArcIncrementStrongCountFnType + get rust_arc_increment_strong_count_PayjoinFfiTypesOhttpKeys; + + RustArcDecrementStrongCountFnType + get rust_arc_decrement_strong_count_PayjoinFfiTypesOhttpKeys; + + CrossPlatformFinalizerArg + get rust_arc_decrement_strong_count_PayjoinFfiTypesOhttpKeysPtr; } class PayjoinCoreApiImpl extends PayjoinCoreApiImplPlatform @@ -599,30 +601,6 @@ class PayjoinCoreApiImpl extends PayjoinCoreApiImplPlatform argNames: ["that", "body", "ctx"], ); - @override - Future enrolledSubdirectory( - {required Enrolled that, dynamic hint}) { - return handler.executeNormal(NormalTask( - callFfi: (port_) { - var arg0 = cst_encode_box_autoadd_enrolled(that); - return wire.wire_enrolled_subdirectory(port_, arg0); - }, - codec: DcoCodec( - decodeSuccessData: dco_decode_list_prim_u_8_strict, - decodeErrorData: null, - ), - constMeta: kEnrolledSubdirectoryConstMeta, - argValues: [that], - apiImpl: this, - hint: hint, - )); - } - - TaskConstMeta get kEnrolledSubdirectoryConstMeta => const TaskConstMeta( - debugName: "enrolled_subdirectory", - argNames: ["that"], - ); - @override Future<((Url, Uint8List), ClientResponse)> enrollerExtractReq( {required Enroller ptr, dynamic hint}) { @@ -649,55 +627,34 @@ class PayjoinCoreApiImpl extends PayjoinCoreApiImplPlatform ); @override - Future enrollerFromRelayConfig( - {required String relayUrl, - required String ohttpConfigBase64, - required String ohttpProxyUrl, + Future enrollerFromDirectoryConfig( + {required Url directory, + required OhttpKeys ohttpKeys, + required Url ohttpRelay, dynamic hint}) { return handler.executeNormal(NormalTask( callFfi: (port_) { - var arg0 = cst_encode_String(relayUrl); - var arg1 = cst_encode_String(ohttpConfigBase64); - var arg2 = cst_encode_String(ohttpProxyUrl); - return wire.wire_enroller_from_relay_config(port_, arg0, arg1, arg2); + var arg0 = cst_encode_box_autoadd_url(directory); + var arg1 = cst_encode_box_autoadd_ohttp_keys(ohttpKeys); + var arg2 = cst_encode_box_autoadd_url(ohttpRelay); + return wire.wire_enroller_from_directory_config( + port_, arg0, arg1, arg2); }, codec: DcoCodec( decodeSuccessData: dco_decode_enroller, decodeErrorData: null, ), - constMeta: kEnrollerFromRelayConfigConstMeta, - argValues: [relayUrl, ohttpConfigBase64, ohttpProxyUrl], + constMeta: kEnrollerFromDirectoryConfigConstMeta, + argValues: [directory, ohttpKeys, ohttpRelay], apiImpl: this, hint: hint, )); } - TaskConstMeta get kEnrollerFromRelayConfigConstMeta => const TaskConstMeta( - debugName: "enroller_from_relay_config", - argNames: ["relayUrl", "ohttpConfigBase64", "ohttpProxyUrl"], - ); - - @override - Future enrollerPayjoinSubdir({required Enroller that, dynamic hint}) { - return handler.executeNormal(NormalTask( - callFfi: (port_) { - var arg0 = cst_encode_box_autoadd_enroller(that); - return wire.wire_enroller_payjoin_subdir(port_, arg0); - }, - codec: DcoCodec( - decodeSuccessData: dco_decode_String, - decodeErrorData: null, - ), - constMeta: kEnrollerPayjoinSubdirConstMeta, - argValues: [that], - apiImpl: this, - hint: hint, - )); - } - - TaskConstMeta get kEnrollerPayjoinSubdirConstMeta => const TaskConstMeta( - debugName: "enroller_payjoin_subdir", - argNames: ["that"], + TaskConstMeta get kEnrollerFromDirectoryConfigConstMeta => + const TaskConstMeta( + debugName: "enroller_from_directory_config", + argNames: ["directory", "ohttpKeys", "ohttpRelay"], ); @override @@ -729,29 +686,6 @@ class PayjoinCoreApiImpl extends PayjoinCoreApiImplPlatform argNames: ["that", "body", "ctx"], ); - @override - Future enrollerSubdirectory({required Enroller that, dynamic hint}) { - return handler.executeNormal(NormalTask( - callFfi: (port_) { - var arg0 = cst_encode_box_autoadd_enroller(that); - return wire.wire_enroller_subdirectory(port_, arg0); - }, - codec: DcoCodec( - decodeSuccessData: dco_decode_String, - decodeErrorData: null, - ), - constMeta: kEnrollerSubdirectoryConstMeta, - argValues: [that], - apiImpl: this, - hint: hint, - )); - } - - TaskConstMeta get kEnrollerSubdirectoryConstMeta => const TaskConstMeta( - debugName: "enroller_subdirectory", - argNames: ["that"], - ); - @override Future maybeInputsOwnedCheckInputsNotOwned( {required MaybeInputsOwned ptr, @@ -1995,13 +1929,11 @@ class PayjoinCoreApiImpl extends PayjoinCoreApiImplPlatform @override Future requestContextExtractV2( - {required RequestContext ptr, - required String ohttpProxyUrl, - dynamic hint}) { + {required RequestContext ptr, required Url ohttpProxyUrl, dynamic hint}) { return handler.executeNormal(NormalTask( callFfi: (port_) { var arg0 = cst_encode_box_autoadd_request_context(ptr); - var arg1 = cst_encode_String(ohttpProxyUrl); + var arg1 = cst_encode_box_autoadd_url(ohttpProxyUrl); return wire.wire_request_context_extract_v2(port_, arg0, arg1); }, codec: DcoCodec( @@ -2020,6 +1952,29 @@ class PayjoinCoreApiImpl extends PayjoinCoreApiImplPlatform argNames: ["ptr", "ohttpProxyUrl"], ); + @override + Future ohttpKeysDecode({required List bytes, dynamic hint}) { + return handler.executeNormal(NormalTask( + callFfi: (port_) { + var arg0 = cst_encode_list_prim_u_8_loose(bytes); + return wire.wire_ohttp_keys_decode(port_, arg0); + }, + codec: DcoCodec( + decodeSuccessData: dco_decode_ohttp_keys, + decodeErrorData: dco_decode_payjoin_error, + ), + constMeta: kOhttpKeysDecodeConstMeta, + argValues: [bytes], + apiImpl: this, + hint: hint, + )); + } + + TaskConstMeta get kOhttpKeysDecodeConstMeta => const TaskConstMeta( + debugName: "ohttp_keys_decode", + argNames: ["bytes"], + ); + @override Future uriAddress({required Uri that, dynamic hint}) { return handler.executeNormal(NormalTask( @@ -2401,6 +2356,14 @@ class PayjoinCoreApiImpl extends PayjoinCoreApiImplPlatform get rust_arc_decrement_strong_count_PayjoinFfiReceiveV2V2UncheckedProposal => wire.rust_arc_decrement_strong_count_RustOpaque_payjoin_ffireceivev2V2UncheckedProposal; + RustArcIncrementStrongCountFnType + get rust_arc_increment_strong_count_PayjoinFfiTypesOhttpKeys => wire + .rust_arc_increment_strong_count_RustOpaque_payjoin_ffitypesOhttpKeys; + + RustArcDecrementStrongCountFnType + get rust_arc_decrement_strong_count_PayjoinFfiTypesOhttpKeys => wire + .rust_arc_decrement_strong_count_RustOpaque_payjoin_ffitypesOhttpKeys; + @protected FutureOr Function(String) dco_decode_DartFn_Inputs_String_Output_String(dynamic raw) { @@ -2625,6 +2588,13 @@ class PayjoinCoreApiImpl extends PayjoinCoreApiImplPlatform raw as List); } + @protected + PayjoinFfiTypesOhttpKeys dco_decode_RustOpaque_payjoin_ffitypesOhttpKeys( + dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return PayjoinFfiTypesOhttpKeys.dcoDecode(raw as List); + } + @protected String dco_decode_String(dynamic raw) { // Codec=Dco (DartCObject based), see doc to use other codecs @@ -2698,6 +2668,12 @@ class PayjoinCoreApiImpl extends PayjoinCoreApiImplPlatform return dco_decode_maybe_mixed_input_scripts(raw); } + @protected + OhttpKeys dco_decode_box_autoadd_ohttp_keys(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return dco_decode_ohttp_keys(raw); + } + @protected OutPoint dco_decode_box_autoadd_out_point(dynamic raw) { // Codec=Dco (DartCObject based), see doc to use other codecs @@ -2963,6 +2939,17 @@ class PayjoinCoreApiImpl extends PayjoinCoreApiImplPlatform ); } + @protected + OhttpKeys dco_decode_ohttp_keys(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + final arr = raw as List; + if (arr.length != 1) + throw Exception('unexpected arr length: expect 1 but see ${arr.length}'); + return OhttpKeys( + field0: dco_decode_RustOpaque_payjoin_ffitypesOhttpKeys(arr[0]), + ); + } + @protected String? dco_decode_opt_String(dynamic raw) { // Codec=Dco (DartCObject based), see doc to use other codecs @@ -3612,6 +3599,14 @@ class PayjoinCoreApiImpl extends PayjoinCoreApiImplPlatform sse_decode_usize(deserializer), sse_decode_i_32(deserializer)); } + @protected + PayjoinFfiTypesOhttpKeys sse_decode_RustOpaque_payjoin_ffitypesOhttpKeys( + SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return PayjoinFfiTypesOhttpKeys.sseDecode( + sse_decode_usize(deserializer), sse_decode_i_32(deserializer)); + } + @protected String sse_decode_String(SseDeserializer deserializer) { // Codec=Sse (Serialization based), see doc to use other codecs @@ -3689,6 +3684,12 @@ class PayjoinCoreApiImpl extends PayjoinCoreApiImplPlatform return (sse_decode_maybe_mixed_input_scripts(deserializer)); } + @protected + OhttpKeys sse_decode_box_autoadd_ohttp_keys(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return (sse_decode_ohttp_keys(deserializer)); + } + @protected OutPoint sse_decode_box_autoadd_out_point(SseDeserializer deserializer) { // Codec=Sse (Serialization based), see doc to use other codecs @@ -3956,6 +3957,14 @@ class PayjoinCoreApiImpl extends PayjoinCoreApiImplPlatform return MaybeMixedInputScripts(field0: var_field0); } + @protected + OhttpKeys sse_decode_ohttp_keys(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + var var_field0 = + sse_decode_RustOpaque_payjoin_ffitypesOhttpKeys(deserializer); + return OhttpKeys(field0: var_field0); + } + @protected String? sse_decode_opt_String(SseDeserializer deserializer) { // Codec=Sse (Serialization based), see doc to use other codecs @@ -4531,6 +4540,14 @@ class PayjoinCoreApiImpl extends PayjoinCoreApiImplPlatform return raw.cstEncode(); } + @protected + int cst_encode_RustOpaque_payjoin_ffitypesOhttpKeys( + PayjoinFfiTypesOhttpKeys raw) { + // Codec=Cst (C-struct based), see doc to use other codecs +// ignore: invalid_use_of_internal_member + return raw.cstEncode(); + } + @protected bool cst_encode_bool(bool raw) { // Codec=Cst (C-struct based), see doc to use other codecs @@ -4782,6 +4799,13 @@ class PayjoinCoreApiImpl extends PayjoinCoreApiImplPlatform sse_encode_usize(self.sseEncode(move: null), serializer); } + @protected + void sse_encode_RustOpaque_payjoin_ffitypesOhttpKeys( + PayjoinFfiTypesOhttpKeys self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_usize(self.sseEncode(move: null), serializer); + } + @protected void sse_encode_String(String self, SseSerializer serializer) { // Codec=Sse (Serialization based), see doc to use other codecs @@ -4862,6 +4886,13 @@ class PayjoinCoreApiImpl extends PayjoinCoreApiImplPlatform sse_encode_maybe_mixed_input_scripts(self, serializer); } + @protected + void sse_encode_box_autoadd_ohttp_keys( + OhttpKeys self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_ohttp_keys(self, serializer); + } + @protected void sse_encode_box_autoadd_out_point( OutPoint self, SseSerializer serializer) { @@ -5116,6 +5147,12 @@ class PayjoinCoreApiImpl extends PayjoinCoreApiImplPlatform self.field0, serializer); } + @protected + void sse_encode_ohttp_keys(OhttpKeys self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_RustOpaque_payjoin_ffitypesOhttpKeys(self.field0, serializer); + } + @protected void sse_encode_opt_String(String? self, SseSerializer serializer) { // Codec=Sse (Serialization based), see doc to use other codecs diff --git a/lib/src/generated/frb_generated.io.dart b/lib/src/generated/frb_generated.io.dart index 0f1e8f0..ac46a42 100644 --- a/lib/src/generated/frb_generated.io.dart +++ b/lib/src/generated/frb_generated.io.dart @@ -114,6 +114,10 @@ abstract class PayjoinCoreApiImplPlatform extends BaseApiImpl { get rust_arc_decrement_strong_count_PayjoinFfiReceiveV2V2UncheckedProposalPtr => wire._rust_arc_decrement_strong_count_RustOpaque_payjoin_ffireceivev2V2UncheckedProposalPtr; + CrossPlatformFinalizerArg + get rust_arc_decrement_strong_count_PayjoinFfiTypesOhttpKeysPtr => wire + ._rust_arc_decrement_strong_count_RustOpaque_payjoin_ffitypesOhttpKeysPtr; + @protected FutureOr Function(String) dco_decode_DartFn_Inputs_String_Output_String(dynamic raw); @@ -235,6 +239,10 @@ abstract class PayjoinCoreApiImplPlatform extends BaseApiImpl { dco_decode_RustOpaque_payjoin_ffireceivev2V2UncheckedProposal( dynamic raw); + @protected + PayjoinFfiTypesOhttpKeys dco_decode_RustOpaque_payjoin_ffitypesOhttpKeys( + dynamic raw); + @protected String dco_decode_String(dynamic raw); @@ -272,6 +280,9 @@ abstract class PayjoinCoreApiImplPlatform extends BaseApiImpl { MaybeMixedInputScripts dco_decode_box_autoadd_maybe_mixed_input_scripts( dynamic raw); + @protected + OhttpKeys dco_decode_box_autoadd_ohttp_keys(dynamic raw); + @protected OutPoint dco_decode_box_autoadd_out_point(dynamic raw); @@ -380,6 +391,9 @@ abstract class PayjoinCoreApiImplPlatform extends BaseApiImpl { @protected MaybeMixedInputScripts dco_decode_maybe_mixed_input_scripts(dynamic raw); + @protected + OhttpKeys dco_decode_ohttp_keys(dynamic raw); + @protected String? dco_decode_opt_String(dynamic raw); @@ -610,6 +624,10 @@ abstract class PayjoinCoreApiImplPlatform extends BaseApiImpl { sse_decode_RustOpaque_payjoin_ffireceivev2V2UncheckedProposal( SseDeserializer deserializer); + @protected + PayjoinFfiTypesOhttpKeys sse_decode_RustOpaque_payjoin_ffitypesOhttpKeys( + SseDeserializer deserializer); + @protected String sse_decode_String(SseDeserializer deserializer); @@ -650,6 +668,9 @@ abstract class PayjoinCoreApiImplPlatform extends BaseApiImpl { MaybeMixedInputScripts sse_decode_box_autoadd_maybe_mixed_input_scripts( SseDeserializer deserializer); + @protected + OhttpKeys sse_decode_box_autoadd_ohttp_keys(SseDeserializer deserializer); + @protected OutPoint sse_decode_box_autoadd_out_point(SseDeserializer deserializer); @@ -771,6 +792,9 @@ abstract class PayjoinCoreApiImplPlatform extends BaseApiImpl { MaybeMixedInputScripts sse_decode_maybe_mixed_input_scripts( SseDeserializer deserializer); + @protected + OhttpKeys sse_decode_ohttp_keys(SseDeserializer deserializer); + @protected String? sse_decode_opt_String(SseDeserializer deserializer); @@ -996,6 +1020,15 @@ abstract class PayjoinCoreApiImplPlatform extends BaseApiImpl { return ptr; } + @protected + ffi.Pointer cst_encode_box_autoadd_ohttp_keys( + OhttpKeys raw) { + // Codec=Cst (C-struct based), see doc to use other codecs + final ptr = wire.cst_new_box_autoadd_ohttp_keys(); + cst_api_fill_to_wire_ohttp_keys(raw, ptr.ref); + return ptr; + } + @protected ffi.Pointer cst_encode_box_autoadd_out_point( OutPoint raw) { @@ -1317,6 +1350,12 @@ abstract class PayjoinCoreApiImplPlatform extends BaseApiImpl { cst_api_fill_to_wire_maybe_mixed_input_scripts(apiObj, wireObj.ref); } + @protected + void cst_api_fill_to_wire_box_autoadd_ohttp_keys( + OhttpKeys apiObj, ffi.Pointer wireObj) { + cst_api_fill_to_wire_ohttp_keys(apiObj, wireObj.ref); + } + @protected void cst_api_fill_to_wire_box_autoadd_out_point( OutPoint apiObj, ffi.Pointer wireObj) { @@ -1493,6 +1532,13 @@ abstract class PayjoinCoreApiImplPlatform extends BaseApiImpl { apiObj.field0); } + @protected + void cst_api_fill_to_wire_ohttp_keys( + OhttpKeys apiObj, wire_cst_ohttp_keys wireObj) { + wireObj.field0 = + cst_encode_RustOpaque_payjoin_ffitypesOhttpKeys(apiObj.field0); + } + @protected void cst_api_fill_to_wire_out_point( OutPoint apiObj, wire_cst_out_point wireObj) { @@ -1881,6 +1927,10 @@ abstract class PayjoinCoreApiImplPlatform extends BaseApiImpl { int cst_encode_RustOpaque_payjoin_ffireceivev2V2UncheckedProposal( PayjoinFfiReceiveV2V2UncheckedProposal raw); + @protected + int cst_encode_RustOpaque_payjoin_ffitypesOhttpKeys( + PayjoinFfiTypesOhttpKeys raw); + @protected bool cst_encode_bool(bool raw); @@ -2017,6 +2067,10 @@ abstract class PayjoinCoreApiImplPlatform extends BaseApiImpl { void sse_encode_RustOpaque_payjoin_ffireceivev2V2UncheckedProposal( PayjoinFfiReceiveV2V2UncheckedProposal self, SseSerializer serializer); + @protected + void sse_encode_RustOpaque_payjoin_ffitypesOhttpKeys( + PayjoinFfiTypesOhttpKeys self, SseSerializer serializer); + @protected void sse_encode_String(String self, SseSerializer serializer); @@ -2059,6 +2113,10 @@ abstract class PayjoinCoreApiImplPlatform extends BaseApiImpl { void sse_encode_box_autoadd_maybe_mixed_input_scripts( MaybeMixedInputScripts self, SseSerializer serializer); + @protected + void sse_encode_box_autoadd_ohttp_keys( + OhttpKeys self, SseSerializer serializer); + @protected void sse_encode_box_autoadd_out_point( OutPoint self, SseSerializer serializer); @@ -2186,6 +2244,9 @@ abstract class PayjoinCoreApiImplPlatform extends BaseApiImpl { void sse_encode_maybe_mixed_input_scripts( MaybeMixedInputScripts self, SseSerializer serializer); + @protected + void sse_encode_ohttp_keys(OhttpKeys self, SseSerializer serializer); + @protected void sse_encode_opt_String(String? self, SseSerializer serializer); @@ -2417,23 +2478,6 @@ class PayjoinCoreWire implements BaseWire { ffi.Pointer, ffi.Pointer)>(); - void wire_enrolled_subdirectory( - int port_, - ffi.Pointer that, - ) { - return _wire_enrolled_subdirectory( - port_, - that, - ); - } - - late final _wire_enrolled_subdirectoryPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Int64, ffi.Pointer)>>( - 'frbgen_payjoin_flutter_wire_enrolled_subdirectory'); - late final _wire_enrolled_subdirectory = _wire_enrolled_subdirectoryPtr - .asFunction)>(); - void wire_enroller_extract_req( int port_, ffi.Pointer ptr, @@ -2451,52 +2495,32 @@ class PayjoinCoreWire implements BaseWire { late final _wire_enroller_extract_req = _wire_enroller_extract_reqPtr .asFunction)>(); - void wire_enroller_from_relay_config( + void wire_enroller_from_directory_config( int port_, - ffi.Pointer relay_url, - ffi.Pointer ohttp_config_base64, - ffi.Pointer ohttp_proxy_url, + ffi.Pointer directory, + ffi.Pointer ohttp_keys, + ffi.Pointer ohttp_relay, ) { - return _wire_enroller_from_relay_config( + return _wire_enroller_from_directory_config( port_, - relay_url, - ohttp_config_base64, - ohttp_proxy_url, + directory, + ohttp_keys, + ohttp_relay, ); } - late final _wire_enroller_from_relay_configPtr = _lookup< + late final _wire_enroller_from_directory_configPtr = _lookup< ffi.NativeFunction< ffi.Void Function( ffi.Int64, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer)>>( - 'frbgen_payjoin_flutter_wire_enroller_from_relay_config'); - late final _wire_enroller_from_relay_config = - _wire_enroller_from_relay_configPtr.asFunction< - void Function( - int, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer)>(); - - void wire_enroller_payjoin_subdir( - int port_, - ffi.Pointer that, - ) { - return _wire_enroller_payjoin_subdir( - port_, - that, - ); - } - - late final _wire_enroller_payjoin_subdirPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Int64, ffi.Pointer)>>( - 'frbgen_payjoin_flutter_wire_enroller_payjoin_subdir'); - late final _wire_enroller_payjoin_subdir = _wire_enroller_payjoin_subdirPtr - .asFunction)>(); + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>( + 'frbgen_payjoin_flutter_wire_enroller_from_directory_config'); + late final _wire_enroller_from_directory_config = + _wire_enroller_from_directory_configPtr.asFunction< + void Function(int, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); void wire_enroller_process_res( int port_, @@ -2528,23 +2552,6 @@ class PayjoinCoreWire implements BaseWire { ffi.Pointer, ffi.Pointer)>(); - void wire_enroller_subdirectory( - int port_, - ffi.Pointer that, - ) { - return _wire_enroller_subdirectory( - port_, - that, - ); - } - - late final _wire_enroller_subdirectoryPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Int64, ffi.Pointer)>>( - 'frbgen_payjoin_flutter_wire_enroller_subdirectory'); - late final _wire_enroller_subdirectory = _wire_enroller_subdirectoryPtr - .asFunction)>(); - void wire_maybe_inputs_owned_check_inputs_not_owned( int port_, ffi.Pointer ptr, @@ -3565,7 +3572,7 @@ class PayjoinCoreWire implements BaseWire { void wire_request_context_extract_v2( int port_, ffi.Pointer ptr, - ffi.Pointer ohttp_proxy_url, + ffi.Pointer ohttp_proxy_url, ) { return _wire_request_context_extract_v2( port_, @@ -3579,12 +3586,30 @@ class PayjoinCoreWire implements BaseWire { ffi.Void Function( ffi.Int64, ffi.Pointer, - ffi.Pointer)>>( + ffi.Pointer)>>( 'frbgen_payjoin_flutter_wire_request_context_extract_v2'); late final _wire_request_context_extract_v2 = _wire_request_context_extract_v2Ptr.asFunction< void Function(int, ffi.Pointer, - ffi.Pointer)>(); + ffi.Pointer)>(); + + void wire_ohttp_keys_decode( + int port_, + ffi.Pointer bytes, + ) { + return _wire_ohttp_keys_decode( + port_, + bytes, + ); + } + + late final _wire_ohttp_keys_decodePtr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Int64, ffi.Pointer)>>( + 'frbgen_payjoin_flutter_wire_ohttp_keys_decode'); + late final _wire_ohttp_keys_decode = _wire_ohttp_keys_decodePtr.asFunction< + void Function(int, ffi.Pointer)>(); void wire_uri_address( int port_, @@ -4416,6 +4441,36 @@ class PayjoinCoreWire implements BaseWire { _rust_arc_decrement_strong_count_RustOpaque_payjoin_ffireceivev2V2UncheckedProposalPtr .asFunction)>(); + void rust_arc_increment_strong_count_RustOpaque_payjoin_ffitypesOhttpKeys( + ffi.Pointer ptr, + ) { + return _rust_arc_increment_strong_count_RustOpaque_payjoin_ffitypesOhttpKeys( + ptr, + ); + } + + late final _rust_arc_increment_strong_count_RustOpaque_payjoin_ffitypesOhttpKeysPtr = + _lookup)>>( + 'frbgen_payjoin_flutter_rust_arc_increment_strong_count_RustOpaque_payjoin_ffitypesOhttpKeys'); + late final _rust_arc_increment_strong_count_RustOpaque_payjoin_ffitypesOhttpKeys = + _rust_arc_increment_strong_count_RustOpaque_payjoin_ffitypesOhttpKeysPtr + .asFunction)>(); + + void rust_arc_decrement_strong_count_RustOpaque_payjoin_ffitypesOhttpKeys( + ffi.Pointer ptr, + ) { + return _rust_arc_decrement_strong_count_RustOpaque_payjoin_ffitypesOhttpKeys( + ptr, + ); + } + + late final _rust_arc_decrement_strong_count_RustOpaque_payjoin_ffitypesOhttpKeysPtr = + _lookup)>>( + 'frbgen_payjoin_flutter_rust_arc_decrement_strong_count_RustOpaque_payjoin_ffitypesOhttpKeys'); + late final _rust_arc_decrement_strong_count_RustOpaque_payjoin_ffitypesOhttpKeys = + _rust_arc_decrement_strong_count_RustOpaque_payjoin_ffitypesOhttpKeysPtr + .asFunction)>(); + ffi.Pointer cst_new_box_autoadd_client_response() { return _cst_new_box_autoadd_client_response(); } @@ -4532,6 +4587,17 @@ class PayjoinCoreWire implements BaseWire { _cst_new_box_autoadd_maybe_mixed_input_scriptsPtr.asFunction< ffi.Pointer Function()>(); + ffi.Pointer cst_new_box_autoadd_ohttp_keys() { + return _cst_new_box_autoadd_ohttp_keys(); + } + + late final _cst_new_box_autoadd_ohttp_keysPtr = + _lookup Function()>>( + 'frbgen_payjoin_flutter_cst_new_box_autoadd_ohttp_keys'); + late final _cst_new_box_autoadd_ohttp_keys = + _cst_new_box_autoadd_ohttp_keysPtr + .asFunction Function()>(); + ffi.Pointer cst_new_box_autoadd_out_point() { return _cst_new_box_autoadd_out_point(); } @@ -4897,11 +4963,14 @@ final class wire_cst_enroller extends ffi.Struct { external int field0; } -final class wire_cst_list_prim_u_8_strict extends ffi.Struct { - external ffi.Pointer ptr; +final class wire_cst_url extends ffi.Struct { + @ffi.UintPtr() + external int field0; +} - @ffi.Int32() - external int len; +final class wire_cst_ohttp_keys extends ffi.Struct { + @ffi.UintPtr() + external int field0; } final class wire_cst_maybe_inputs_owned extends ffi.Struct { @@ -4934,6 +5003,13 @@ final class wire_cst_provisional_proposal extends ffi.Struct { external int field0; } +final class wire_cst_list_prim_u_8_strict extends ffi.Struct { + external ffi.Pointer ptr; + + @ffi.Int32() + external int len; +} + final class wire_cst_out_point extends ffi.Struct { external ffi.Pointer txid; @@ -5044,11 +5120,6 @@ final class wire_cst_request_context extends ffi.Struct { external int field0; } -final class wire_cst_url extends ffi.Struct { - @ffi.UintPtr() - external int field0; -} - final class wire_cst_list_out_point extends ffi.Struct { external ffi.Pointer ptr; diff --git a/lib/src/generated/frb_generated.web.dart b/lib/src/generated/frb_generated.web.dart index c1d1c51..af2832b 100644 --- a/lib/src/generated/frb_generated.web.dart +++ b/lib/src/generated/frb_generated.web.dart @@ -113,6 +113,10 @@ abstract class PayjoinCoreApiImplPlatform extends BaseApiImpl { get rust_arc_decrement_strong_count_PayjoinFfiReceiveV2V2UncheckedProposalPtr => wire.rust_arc_decrement_strong_count_RustOpaque_payjoin_ffireceivev2V2UncheckedProposal; + CrossPlatformFinalizerArg + get rust_arc_decrement_strong_count_PayjoinFfiTypesOhttpKeysPtr => wire + .rust_arc_decrement_strong_count_RustOpaque_payjoin_ffitypesOhttpKeys; + @protected FutureOr Function(String) dco_decode_DartFn_Inputs_String_Output_String(dynamic raw); @@ -234,6 +238,10 @@ abstract class PayjoinCoreApiImplPlatform extends BaseApiImpl { dco_decode_RustOpaque_payjoin_ffireceivev2V2UncheckedProposal( dynamic raw); + @protected + PayjoinFfiTypesOhttpKeys dco_decode_RustOpaque_payjoin_ffitypesOhttpKeys( + dynamic raw); + @protected String dco_decode_String(dynamic raw); @@ -271,6 +279,9 @@ abstract class PayjoinCoreApiImplPlatform extends BaseApiImpl { MaybeMixedInputScripts dco_decode_box_autoadd_maybe_mixed_input_scripts( dynamic raw); + @protected + OhttpKeys dco_decode_box_autoadd_ohttp_keys(dynamic raw); + @protected OutPoint dco_decode_box_autoadd_out_point(dynamic raw); @@ -379,6 +390,9 @@ abstract class PayjoinCoreApiImplPlatform extends BaseApiImpl { @protected MaybeMixedInputScripts dco_decode_maybe_mixed_input_scripts(dynamic raw); + @protected + OhttpKeys dco_decode_ohttp_keys(dynamic raw); + @protected String? dco_decode_opt_String(dynamic raw); @@ -609,6 +623,10 @@ abstract class PayjoinCoreApiImplPlatform extends BaseApiImpl { sse_decode_RustOpaque_payjoin_ffireceivev2V2UncheckedProposal( SseDeserializer deserializer); + @protected + PayjoinFfiTypesOhttpKeys sse_decode_RustOpaque_payjoin_ffitypesOhttpKeys( + SseDeserializer deserializer); + @protected String sse_decode_String(SseDeserializer deserializer); @@ -649,6 +667,9 @@ abstract class PayjoinCoreApiImplPlatform extends BaseApiImpl { MaybeMixedInputScripts sse_decode_box_autoadd_maybe_mixed_input_scripts( SseDeserializer deserializer); + @protected + OhttpKeys sse_decode_box_autoadd_ohttp_keys(SseDeserializer deserializer); + @protected OutPoint sse_decode_box_autoadd_out_point(SseDeserializer deserializer); @@ -770,6 +791,9 @@ abstract class PayjoinCoreApiImplPlatform extends BaseApiImpl { MaybeMixedInputScripts sse_decode_maybe_mixed_input_scripts( SseDeserializer deserializer); + @protected + OhttpKeys sse_decode_ohttp_keys(SseDeserializer deserializer); + @protected String? sse_decode_opt_String(SseDeserializer deserializer); @@ -970,6 +994,12 @@ abstract class PayjoinCoreApiImplPlatform extends BaseApiImpl { return cst_encode_maybe_mixed_input_scripts(raw); } + @protected + List cst_encode_box_autoadd_ohttp_keys(OhttpKeys raw) { + // Codec=Cst (C-struct based), see doc to use other codecs + return cst_encode_ohttp_keys(raw); + } + @protected List cst_encode_box_autoadd_out_point(OutPoint raw) { // Codec=Cst (C-struct based), see doc to use other codecs @@ -1193,6 +1223,12 @@ abstract class PayjoinCoreApiImplPlatform extends BaseApiImpl { ]; } + @protected + List cst_encode_ohttp_keys(OhttpKeys raw) { + // Codec=Cst (C-struct based), see doc to use other codecs + return [cst_encode_RustOpaque_payjoin_ffitypesOhttpKeys(raw.field0)]; + } + @protected String? cst_encode_opt_String(String? raw) { // Codec=Cst (C-struct based), see doc to use other codecs @@ -1579,6 +1615,10 @@ abstract class PayjoinCoreApiImplPlatform extends BaseApiImpl { int cst_encode_RustOpaque_payjoin_ffireceivev2V2UncheckedProposal( PayjoinFfiReceiveV2V2UncheckedProposal raw); + @protected + int cst_encode_RustOpaque_payjoin_ffitypesOhttpKeys( + PayjoinFfiTypesOhttpKeys raw); + @protected bool cst_encode_bool(bool raw); @@ -1715,6 +1755,10 @@ abstract class PayjoinCoreApiImplPlatform extends BaseApiImpl { void sse_encode_RustOpaque_payjoin_ffireceivev2V2UncheckedProposal( PayjoinFfiReceiveV2V2UncheckedProposal self, SseSerializer serializer); + @protected + void sse_encode_RustOpaque_payjoin_ffitypesOhttpKeys( + PayjoinFfiTypesOhttpKeys self, SseSerializer serializer); + @protected void sse_encode_String(String self, SseSerializer serializer); @@ -1757,6 +1801,10 @@ abstract class PayjoinCoreApiImplPlatform extends BaseApiImpl { void sse_encode_box_autoadd_maybe_mixed_input_scripts( MaybeMixedInputScripts self, SseSerializer serializer); + @protected + void sse_encode_box_autoadd_ohttp_keys( + OhttpKeys self, SseSerializer serializer); + @protected void sse_encode_box_autoadd_out_point( OutPoint self, SseSerializer serializer); @@ -1884,6 +1932,9 @@ abstract class PayjoinCoreApiImplPlatform extends BaseApiImpl { void sse_encode_maybe_mixed_input_scripts( MaybeMixedInputScripts self, SseSerializer serializer); + @protected + void sse_encode_ohttp_keys(OhttpKeys self, SseSerializer serializer); + @protected void sse_encode_opt_String(String? self, SseSerializer serializer); @@ -2026,27 +2077,21 @@ class PayjoinCoreWire implements BaseWire { List body, List ctx) => wasmModule.wire_enrolled_process_res(port_, that, body, ctx); - void wire_enrolled_subdirectory(NativePortType port_, List that) => - wasmModule.wire_enrolled_subdirectory(port_, that); - void wire_enroller_extract_req(NativePortType port_, List ptr) => wasmModule.wire_enroller_extract_req(port_, ptr); - void wire_enroller_from_relay_config(NativePortType port_, String relay_url, - String ohttp_config_base64, String ohttp_proxy_url) => - wasmModule.wire_enroller_from_relay_config( - port_, relay_url, ohttp_config_base64, ohttp_proxy_url); - - void wire_enroller_payjoin_subdir(NativePortType port_, List that) => - wasmModule.wire_enroller_payjoin_subdir(port_, that); + void wire_enroller_from_directory_config( + NativePortType port_, + List directory, + List ohttp_keys, + List ohttp_relay) => + wasmModule.wire_enroller_from_directory_config( + port_, directory, ohttp_keys, ohttp_relay); void wire_enroller_process_res(NativePortType port_, List that, List body, List ctx) => wasmModule.wire_enroller_process_res(port_, that, body, ctx); - void wire_enroller_subdirectory(NativePortType port_, List that) => - wasmModule.wire_enroller_subdirectory(port_, that); - void wire_maybe_inputs_owned_check_inputs_not_owned( NativePortType port_, List ptr, PlatformPointer is_owned) => wasmModule.wire_maybe_inputs_owned_check_inputs_not_owned( @@ -2288,10 +2333,13 @@ class PayjoinCoreWire implements BaseWire { NativePortType port_, List ptr) => wasmModule.wire_request_context_extract_v1(port_, ptr); - void wire_request_context_extract_v2( - NativePortType port_, List ptr, String ohttp_proxy_url) => + void wire_request_context_extract_v2(NativePortType port_, List ptr, + List ohttp_proxy_url) => wasmModule.wire_request_context_extract_v2(port_, ptr, ohttp_proxy_url); + void wire_ohttp_keys_decode(NativePortType port_, List bytes) => + wasmModule.wire_ohttp_keys_decode(port_, bytes); + void wire_uri_address(NativePortType port_, List that) => wasmModule.wire_uri_address(port_, that); @@ -2581,6 +2629,18 @@ class PayjoinCoreWire implements BaseWire { wasmModule .rust_arc_decrement_strong_count_RustOpaque_payjoin_ffireceivev2V2UncheckedProposal( ptr); + + void rust_arc_increment_strong_count_RustOpaque_payjoin_ffitypesOhttpKeys( + dynamic ptr) => + wasmModule + .rust_arc_increment_strong_count_RustOpaque_payjoin_ffitypesOhttpKeys( + ptr); + + void rust_arc_decrement_strong_count_RustOpaque_payjoin_ffitypesOhttpKeys( + dynamic ptr) => + wasmModule + .rust_arc_decrement_strong_count_RustOpaque_payjoin_ffitypesOhttpKeys( + ptr); } @JS('wasm_bindgen') @@ -2604,24 +2664,18 @@ class PayjoinCoreWasmModule implements WasmModule { external void wire_enrolled_process_res(NativePortType port_, List that, List body, List ctx); - external void wire_enrolled_subdirectory( - NativePortType port_, List that); - external void wire_enroller_extract_req( NativePortType port_, List ptr); - external void wire_enroller_from_relay_config(NativePortType port_, - String relay_url, String ohttp_config_base64, String ohttp_proxy_url); - - external void wire_enroller_payjoin_subdir( - NativePortType port_, List that); + external void wire_enroller_from_directory_config( + NativePortType port_, + List directory, + List ohttp_keys, + List ohttp_relay); external void wire_enroller_process_res(NativePortType port_, List that, List body, List ctx); - external void wire_enroller_subdirectory( - NativePortType port_, List that); - external void wire_maybe_inputs_owned_check_inputs_not_owned( NativePortType port_, List ptr, PlatformPointer is_owned); @@ -2788,7 +2842,9 @@ class PayjoinCoreWasmModule implements WasmModule { NativePortType port_, List ptr); external void wire_request_context_extract_v2( - NativePortType port_, List ptr, String ohttp_proxy_url); + NativePortType port_, List ptr, List ohttp_proxy_url); + + external void wire_ohttp_keys_decode(NativePortType port_, List bytes); external void wire_uri_address(NativePortType port_, List that); @@ -2981,4 +3037,12 @@ class PayjoinCoreWasmModule implements WasmModule { external void rust_arc_decrement_strong_count_RustOpaque_payjoin_ffireceivev2V2UncheckedProposal( dynamic ptr); + + external void + rust_arc_increment_strong_count_RustOpaque_payjoin_ffitypesOhttpKeys( + dynamic ptr); + + external void + rust_arc_decrement_strong_count_RustOpaque_payjoin_ffitypesOhttpKeys( + dynamic ptr); } diff --git a/lib/uri.dart b/lib/uri.dart index dc64fbd..fd56bd6 100644 --- a/lib/uri.dart +++ b/lib/uri.dart @@ -17,7 +17,7 @@ class Uri extends generated.Uri { } } - ///Gets the amount in satoshis. + ///Gets the amount in btc. @override Future amount({hint}) { try { @@ -67,3 +67,19 @@ class Url extends generated.Url { } } } + +///The key configuration of a server. This can be used by both client and server. +///An important invariant of this structure is that it does not include any combination of KEM, KDF, and AEAD that is not supported. +class OhttpKeys extends generated.OhttpKeys { + OhttpKeys._({required super.field0}); + + ///Construct a configuration from the encoded server configuration. + static Future decode({required List bytes}) async { + try { + final res = await generated.OhttpKeys.decode(bytes: bytes); + return OhttpKeys._(field0: res.field0); + } on error.PayjoinError catch (e) { + throw mapPayjoinError(e); + } + } +} diff --git a/pubspec.lock b/pubspec.lock index 541ba96..9e88664 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -5,26 +5,26 @@ packages: dependency: transitive description: name: _fe_analyzer_shared - sha256: eb376e9acf6938204f90eb3b1f00b578640d3188b4c8a8ec054f9f479af8d051 + sha256: "0b2f2bd91ba804e53a61d757b986f89f1f9eaed5b11e4b2f5a2468d86d6c9fc7" url: "https://pub.dev" source: hosted - version: "64.0.0" + version: "67.0.0" analyzer: dependency: transitive description: name: analyzer - sha256: "69f54f967773f6c26c7dcb13e93d7ccee8b17a641689da39e878d5cf13b06893" + sha256: "37577842a27e4338429a1cbc32679d508836510b056f1eedf0c8d20e39c1383d" url: "https://pub.dev" source: hosted - version: "6.2.0" + version: "6.4.1" args: dependency: transitive description: name: args - sha256: eef6c46b622e0494a36c5a12d10d77fb4e855501a91c1b9ef9339326e58f0596 + sha256: "7cf60b9f0cc88203c5a190b4cd62a99feea42759a7fa695010eb5de1c0b2252a" url: "https://pub.dev" source: hosted - version: "2.4.2" + version: "2.5.0" async: dependency: transitive description: @@ -69,10 +69,10 @@ packages: dependency: transitive description: name: build_daemon - sha256: "0343061a33da9c5810b2d6cee51945127d8f4c060b7fbdd9d54917f0a3feaaa1" + sha256: "79b2aef6ac2ed00046867ed354c88778c9c0f029df8a20fe10b5436826721ef9" url: "https://pub.dev" source: hosted - version: "4.0.1" + version: "4.0.2" build_resolvers: dependency: transitive description: @@ -85,18 +85,18 @@ packages: dependency: "direct dev" description: name: build_runner - sha256: "581bacf68f89ec8792f5e5a0b2c4decd1c948e97ce659dc783688c8a88fbec21" + sha256: "644dc98a0f179b872f612d3eb627924b578897c629788e858157fa5e704ca0c7" url: "https://pub.dev" source: hosted - version: "2.4.8" + version: "2.4.11" build_runner_core: dependency: transitive description: name: build_runner_core - sha256: "4ae8ffe5ac758da294ecf1802f2aff01558d8b1b00616aa7538ea9a8a5d50799" + sha256: e3c79f69a64bdfcd8a776a3c28db4eb6e3fb5356d013ae5eb2e52007706d5dbe url: "https://pub.dev" source: hosted - version: "7.3.0" + version: "7.3.1" built_collection: dependency: transitive description: @@ -109,10 +109,10 @@ packages: dependency: transitive description: name: built_value - sha256: fedde275e0a6b798c3296963c5cd224e3e1b55d0e478d5b7e65e6b540f363a0e + sha256: c7913a9737ee4007efedaffc968c049fd0f3d0e49109e778edc10de9426005cb url: "https://pub.dev" source: hosted - version: "8.9.1" + version: "8.9.2" characters: dependency: transitive description: @@ -181,10 +181,10 @@ packages: dependency: transitive description: name: dart_style - sha256: "40ae61a5d43feea6d24bd22c0537a6629db858963b99b4bc1c3db80676f32368" + sha256: "99e066ce75c89d6b29903d788a7bb9369cf754f7b24bf70bf4b6d6d6b26853b9" url: "https://pub.dev" source: hosted - version: "2.3.4" + version: "2.3.6" fake_async: dependency: transitive description: @@ -197,10 +197,10 @@ packages: dependency: "direct main" description: name: ffi - sha256: "7bf0adc28a23d395f19f3f1eb21dd7cfd1dd9f8e1c50051c069122e6853bc878" + sha256: "493f37e7df1804778ff3a53bd691d8692ddf69702cf4c1c1096a2e41b4779e21" url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.2" ffigen: dependency: "direct dev" description: @@ -255,10 +255,10 @@ packages: dependency: "direct dev" description: name: freezed - sha256: "57247f692f35f068cae297549a46a9a097100685c6780fe67177503eea5ed4e5" + sha256: a434911f643466d78462625df76fd9eb13e57348ff43fe1f77bbe909522c67a1 url: "https://pub.dev" source: hosted - version: "2.4.7" + version: "2.5.2" freezed_annotation: dependency: "direct main" description: @@ -271,10 +271,10 @@ packages: dependency: transitive description: name: frontend_server_client - sha256: "408e3ca148b31c20282ad6f37ebfa6f4bdc8fede5b74bc2f08d9d92b55db3612" + sha256: f64a0333a82f30b0cca061bc3d143813a486dc086b574bfb233b7c1372427694 url: "https://pub.dev" source: hosted - version: "3.2.0" + version: "4.0.0" glob: dependency: transitive description: @@ -327,10 +327,34 @@ packages: dependency: transitive description: name: json_annotation - sha256: b10a7b2ff83d83c777edba3c6a0f97045ddadd56c944e1a23a3fdf43a1bf4467 + sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1" + url: "https://pub.dev" + source: hosted + version: "4.9.0" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" url: "https://pub.dev" source: hosted - version: "4.8.1" + version: "10.0.4" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" + url: "https://pub.dev" + source: hosted + version: "3.0.3" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" + url: "https://pub.dev" + source: hosted + version: "3.0.1" lints: dependency: transitive description: @@ -351,26 +375,26 @@ packages: dependency: transitive description: name: matcher - sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb url: "https://pub.dev" source: hosted - version: "0.12.16" + version: "0.12.16+1" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" url: "https://pub.dev" source: hosted - version: "0.5.0" + version: "0.8.0" meta: dependency: "direct main" description: name: meta - sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e + sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.12.0" mime: dependency: transitive description: @@ -391,10 +415,10 @@ packages: dependency: transitive description: name: path - sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" url: "https://pub.dev" source: hosted - version: "1.8.3" + version: "1.9.0" pool: dependency: transitive description: @@ -415,10 +439,10 @@ packages: dependency: transitive description: name: pubspec_parse - sha256: c63b2876e58e194e4b0828fcb080ad0e06d051cb607a6be51a9e084f47cb9367 + sha256: c799b721d79eb6ee6fa56f00c04b472dcd44a30d258fac2174a6ec57302678f8 url: "https://pub.dev" source: hosted - version: "1.2.3" + version: "1.3.0" quiver: dependency: transitive description: @@ -439,10 +463,10 @@ packages: dependency: transitive description: name: shelf_web_socket - sha256: "9ca081be41c60190ebcb4766b2486a7d50261db7bd0f5d9615f2d653637a84c1" + sha256: "073c147238594ecd0d193f3456a5fe91c4b0abbcc68bf5cd95b36c4e194ac611" url: "https://pub.dev" source: hosted - version: "1.0.4" + version: "2.0.0" sky_engine: dependency: transitive description: flutter @@ -516,10 +540,10 @@ packages: dependency: transitive description: name: test_api - sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" + sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" url: "https://pub.dev" source: hosted - version: "0.6.1" + version: "0.7.0" timing: dependency: transitive description: @@ -540,10 +564,10 @@ packages: dependency: "direct main" description: name: uuid - sha256: cd210a09f7c18cbe5a02511718e0334de6559871052c90a90c0cca46a4aa81c8 + sha256: "814e9e88f21a176ae1359149021870e87f7cddaf633ab678a5d2b0bff7fd1ba8" url: "https://pub.dev" source: hosted - version: "4.3.3" + version: "4.4.0" vector_math: dependency: transitive description: @@ -552,6 +576,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" + vm_service: + dependency: transitive + description: + name: vm_service + sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" + url: "https://pub.dev" + source: hosted + version: "14.2.1" watcher: dependency: transitive description: @@ -564,18 +596,26 @@ packages: dependency: transitive description: name: web - sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 + sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27" url: "https://pub.dev" source: hosted - version: "0.3.0" + version: "0.5.1" + web_socket: + dependency: transitive + description: + name: web_socket + sha256: "24301d8c293ce6fe327ffe6f59d8fd8834735f0ec36e4fd383ec7ff8a64aa078" + url: "https://pub.dev" + source: hosted + version: "0.1.5" web_socket_channel: dependency: transitive description: name: web_socket_channel - sha256: d88238e5eac9a42bb43ca4e721edba3c08c6354d4a53063afaa568516217621b + sha256: a2d56211ee4d35d9b344d9d4ce60f362e4f5d1aafb988302906bd732bc731276 url: "https://pub.dev" source: hosted - version: "2.4.0" + version: "3.0.0" yaml: dependency: transitive description: @@ -588,10 +628,10 @@ packages: dependency: transitive description: name: yaml_edit - sha256: "1579d4a0340a83cf9e4d580ea51a16329c916973bffd5bd4b45e911b25d46bfd" + sha256: e9c1a3543d2da0db3e90270dbb1e4eebc985ee5e3ffe468d83224472b2194a5f url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.2.1" sdks: - dart: ">=3.2.3 <4.0.0" - flutter: ">=3.3.0" + dart: ">=3.4.0 <4.0.0" + flutter: ">=3.18.0-18.0.pre.54" diff --git a/rust/Cargo.lock b/rust/Cargo.lock index 7ded3b6..305d556 100644 --- a/rust/Cargo.lock +++ b/rust/Cargo.lock @@ -99,9 +99,9 @@ dependencies = [ [[package]] name = "allo-isolate" -version = "0.1.24" +version = "0.1.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2f5a5fd28223e6f3cafb7d9cd685f51eafdd71d33ca1229f8316925d5957240" +checksum = "97b6d794345b06592d0ebeed8e477e41b71e5a0a49df4fc0e4184d5938b99509" dependencies = [ "anyhow", "atomic", @@ -158,9 +158,9 @@ dependencies = [ [[package]] name = "anstyle-query" -version = "1.0.3" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a64c907d4e79225ac72e2a354c9ce84d50ebb4586dee56c82b3ee73004f537f5" +checksum = "ad186efb764318d35165f1758e7dcef3b10628e26d41a44bc5550652e6804391" dependencies = [ "windows-sys", ] @@ -204,7 +204,7 @@ dependencies = [ "proc-macro2", "quote", "serde", - "syn", + "syn 2.0.66", ] [[package]] @@ -222,6 +222,17 @@ dependencies = [ "nom", ] +[[package]] +name = "async-trait" +version = "0.1.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + [[package]] name = "atomic" version = "0.5.3" @@ -236,9 +247,9 @@ checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "backtrace" -version = "0.3.72" +version = "0.3.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17c6a35df3749d2e8bb1b7b21a976d82b15548788d2735b9d82f329268f71a11" +checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" dependencies = [ "addr2line", "cc", @@ -255,6 +266,12 @@ version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + [[package]] name = "base64" version = "0.22.1" @@ -270,12 +287,52 @@ dependencies = [ "serde", ] +[[package]] +name = "bdk" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fc1fc1a92e0943bfbcd6eb7d32c1b2a79f2f1357eb1e2eee9d7f36d6d7ca44a" +dependencies = [ + "async-trait", + "bdk-macros", + "bip39", + "bitcoin 0.30.2", + "electrum-client", + "esplora-client", + "getrandom", + "js-sys", + "log", + "miniscript", + "rand", + "serde", + "serde_json", + "sled", + "tokio", +] + +[[package]] +name = "bdk-macros" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81c1980e50ae23bb6efa9283ae8679d6ea2c6fa6a99fe62533f65f4a25a1a56c" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "bech32" version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d86b93f97252c47b41663388e6d155714a9d0c398b99f1005cbc5f978b29f445" +[[package]] +name = "bech32" +version = "0.10.0-beta" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98f7eed2b2781a6f0b5c903471d48e15f56fb4e1165df8a9a2337fd1a59d45ea" + [[package]] name = "bhttp" version = "0.5.1" @@ -300,10 +357,21 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b9532c632b068e45a478f5e309126b6e2ec1dbf0bbd327b73836f33d9a43ede" dependencies = [ - "bitcoin", + "bitcoin 0.30.2", "percent-encoding-rfc3986", ] +[[package]] +name = "bip39" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93f2635620bf0b9d4576eb7bb9a38a55df78bd1205d26fa994b25911a69f212f" +dependencies = [ + "bitcoin_hashes 0.11.0", + "serde", + "unicode-normalization", +] + [[package]] name = "bitcoin" version = "0.30.2" @@ -311,11 +379,41 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1945a5048598e4189e239d3f809b19bdad4845c4b2ba400d304d2dcf26d2c462" dependencies = [ "base64 0.13.1", - "bech32", + "bech32 0.9.1", "bitcoin-private", - "bitcoin_hashes", + "bitcoin_hashes 0.12.0", + "hex_lit", + "secp256k1 0.27.0", + "serde", +] + +[[package]] +name = "bitcoin" +version = "0.31.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c85783c2fe40083ea54a33aa2f0ba58831d90fcd190f5bdc47e74e84d2a96ae" +dependencies = [ + "bech32 0.10.0-beta", + "bitcoin-internals 0.2.0", + "bitcoin_hashes 0.13.0", + "hex-conservative", "hex_lit", - "secp256k1", + "secp256k1 0.28.2", + "serde", +] + +[[package]] +name = "bitcoin-internals" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f9997f8650dd818369931b5672a18dbef95324d0513aa99aae758de8ce86e5b" + +[[package]] +name = "bitcoin-internals" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9425c3bf7089c983facbae04de54513cce73b41c7f9ff8c845b54e7bc64ebbfb" +dependencies = [ "serde", ] @@ -325,6 +423,12 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73290177011694f38ec25e165d0387ab7ea749a4b81cd4c80dae5988229f7a57" +[[package]] +name = "bitcoin_hashes" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90064b8dee6815a6470d60bad07bbbaee885c0e12d04177138fa3291a01b7bc4" + [[package]] name = "bitcoin_hashes" version = "0.12.0" @@ -335,6 +439,47 @@ dependencies = [ "serde", ] +[[package]] +name = "bitcoin_hashes" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1930a4dabfebb8d7d9992db18ebe3ae2876f0a305fab206fd168df931ede293b" +dependencies = [ + "bitcoin-internals 0.2.0", + "hex-conservative", + "serde", +] + +[[package]] +name = "bitcoincore-rpc" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eb70725a621848c83b3809913d5314c0d20ca84877d99dd909504b564edab00" +dependencies = [ + "bitcoincore-rpc-json", + "jsonrpc", + "log", + "serde", + "serde_json", +] + +[[package]] +name = "bitcoincore-rpc-json" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "856ffbee2e492c23bca715d72ea34aae80d58400f2bda26a82015d6bc2ec3662" +dependencies = [ + "bitcoin 0.31.2", + "serde", + "serde_json", +] + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + [[package]] name = "block-buffer" version = "0.9.0" @@ -417,9 +562,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.98" +version = "1.0.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41c270e7540d725e65ac7f1b212ac8ce349719624d7bcff99f8e2e488e8cf03f" +checksum = "96c51067fd44124faa7f870b4b1c969379ad32b2ba805aa959430ceaa384f695" [[package]] name = "cfg-if" @@ -498,9 +643,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.4" +version = "4.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bc066a67923782aa8515dbaea16946c5bcc5addbd668bb80af688e53e548a0" +checksum = "5db83dced34638ad474f39f250d7fea9598bdd239eaced1bdf45d597da0f433f" dependencies = [ "clap_builder", "clap_derive", @@ -508,9 +653,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.2" +version = "4.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae129e2e766ae0ec03484e609954119f123cc1fe650337e155d03b022f24f7b4" +checksum = "f7e204572485eb3fbf28f871612191521df159bc3e15a9f5064c66dba3a8c05f" dependencies = [ "anstream", "anstyle", @@ -520,21 +665,21 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.4" +version = "4.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "528131438037fd55894f62d6e9f068b8f45ac57ffa77517819645d10aed04f64" +checksum = "c780290ccf4fb26629baa7a1081e68ced113f1d3ec302fa5948f1c381ebf06c6" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn", + "syn 2.0.66", ] [[package]] name = "clap_lex" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" +checksum = "4b82cf0babdbd58558212896d1a4272303a57bdb245c2bf1147185fb45640e70" [[package]] name = "colorchoice" @@ -570,6 +715,30 @@ dependencies = [ "libc", ] +[[package]] +name = "crc32fast" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" + [[package]] name = "crypto-common" version = "0.1.6" @@ -649,7 +818,7 @@ checksum = "51aac4c99b2e6775164b412ea33ae8441b2fde2dbf05a20bc0052a63d08c475b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.66", ] [[package]] @@ -672,6 +841,36 @@ dependencies = [ "subtle", ] +[[package]] +name = "displaydoc" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "electrum-client" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bc133f1c8d829d254f013f946653cbeb2b08674b960146361d1e9b67733ad19" +dependencies = [ + "bitcoin 0.30.2", + "bitcoin-private", + "byteorder", + "libc", + "log", + "rustls", + "serde", + "serde_json", + "webpki", + "webpki-roots 0.22.6", + "winapi", +] + [[package]] name = "env_logger" version = "0.10.2" @@ -682,6 +881,29 @@ dependencies = [ "regex", ] +[[package]] +name = "esplora-client" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cb1f7f2489cce83bc3bd92784f9ba5271eeb6e729b975895fc541f78cbfcdca" +dependencies = [ + "bitcoin 0.30.2", + "bitcoin-internals 0.1.0", + "log", + "serde", + "ureq", +] + +[[package]] +name = "flate2" +version = "1.0.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f54427cfd1c7829e2a139fcefea601bf088ebca651d2bf53ebc600eac295dae" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + [[package]] name = "flutter_rust_bridge" version = "2.0.0-dev.31" @@ -717,7 +939,7 @@ checksum = "e02edfe56f04af804d3145b17dfe7820d46a6753b214160f227dbdfa1073f7cb" dependencies = [ "hex", "quote", - "syn", + "syn 2.0.66", ] [[package]] @@ -738,6 +960,16 @@ dependencies = [ "autocfg", ] +[[package]] +name = "fs2" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213" +dependencies = [ + "libc", + "winapi", +] + [[package]] name = "futures" version = "0.3.30" @@ -794,7 +1026,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.66", ] [[package]] @@ -827,6 +1059,15 @@ dependencies = [ "slab", ] +[[package]] +name = "fxhash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +dependencies = [ + "byteorder", +] + [[package]] name = "generic-array" version = "0.14.7" @@ -915,6 +1156,12 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +[[package]] +name = "hex-conservative" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "212ab92002354b4819390025006c897e8140934349e8635c9b077f47b4dcbd20" + [[package]] name = "hex_lit" version = "0.1.1" @@ -980,14 +1227,134 @@ dependencies = [ "zeroize", ] +[[package]] +name = "icu_collections" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locid" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_locid_transform" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_locid_transform_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_locid_transform_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" + +[[package]] +name = "icu_normalizer" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "utf16_iter", + "utf8_iter", + "write16", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" + +[[package]] +name = "icu_properties" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f8ac670d7422d7f76b32e17a5db556510825b29ec9154f235977c9caba61036" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locid_transform", + "icu_properties_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" + +[[package]] +name = "icu_provider" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_provider_macros", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_provider_macros" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + [[package]] name = "idna" -version = "0.5.0" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +checksum = "4716a3a0933a1d01c2f72450e89596eb51dd34ef3c211ccd875acdf1f8fe47ed" dependencies = [ - "unicode-bidi", - "unicode-normalization", + "icu_normalizer", + "icu_properties", + "smallvec", + "utf8_iter", ] [[package]] @@ -999,6 +1366,15 @@ dependencies = [ "generic-array", ] +[[package]] +name = "instant" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" +dependencies = [ + "cfg-if", +] + [[package]] name = "is_terminal_polyfill" version = "1.70.0" @@ -1020,6 +1396,17 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "jsonrpc" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8128f36b47411cd3f044be8c1f5cc0c9e24d1d1bfdc45f0a57897b32513053f2" +dependencies = [ + "base64 0.13.1", + "serde", + "serde_json", +] + [[package]] name = "lazy_static" version = "1.4.0" @@ -1032,6 +1419,22 @@ version = "0.2.155" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" +[[package]] +name = "litemap" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "643cb0b8d4fcc284004d5fd0d67ccf61dfffadb7f75e1e71bc420f4688a3a704" + +[[package]] +name = "lock_api" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +dependencies = [ + "autocfg", + "scopeguard", +] + [[package]] name = "log" version = "0.4.21" @@ -1040,9 +1443,9 @@ checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" [[package]] name = "memchr" -version = "2.7.2" +version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "mime" @@ -1066,11 +1469,22 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" +[[package]] +name = "miniscript" +version = "10.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1eb102b66b2127a872dbcc73095b7b47aeb9d92f7b03c2b2298253ffc82c7594" +dependencies = [ + "bitcoin 0.30.2", + "bitcoin-private", + "serde", +] + [[package]] name = "miniz_oxide" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87dfd01fe195c66b572b37921ad8803d010623c0aca821bea2302239d155cdae" +checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" dependencies = [ "adler", ] @@ -1097,9 +1511,9 @@ dependencies = [ [[package]] name = "object" -version = "0.35.0" +version = "0.36.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8ec7ab813848ba4522158d5517a6093db1ded27575b070f4177b8d12b41db5e" +checksum = "576dfe1fc8f9df304abb159d767a29d0476f7750fbf8aa7ad07816004a207434" dependencies = [ "memchr", ] @@ -1150,6 +1564,31 @@ dependencies = [ "log", ] +[[package]] +name = "parking_lot" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" +dependencies = [ + "instant", + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" +dependencies = [ + "cfg-if", + "instant", + "libc", + "redox_syscall", + "smallvec", + "winapi", +] + [[package]] name = "paste" version = "1.0.15" @@ -1158,16 +1597,15 @@ checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" [[package]] name = "payjoin" -version = "0.13.0" -source = "git+https://github.com/payjoin/rust-payjoin?rev=e7037b23b0f29beda39f5e161d3d7924d2060dd4#e7037b23b0f29beda39f5e161d3d7924d2060dd4" +version = "0.16.0" +source = "git+https://github.com/payjoin/rust-payjoin?rev=457a0dd5cb212ddd9ea169b7fa3842bfc3d5f373#457a0dd5cb212ddd9ea169b7fa3842bfc3d5f373" dependencies = [ "bhttp", "bip21", - "bitcoin", + "bitcoin 0.30.2", "chacha20poly1305 0.10.1", "log", "ohttp", - "rand", "serde", "serde_json", "url", @@ -1176,9 +1614,10 @@ dependencies = [ [[package]] name = "payjoin_ffi" version = "0.13.0" -source = "git+https://github.com/LtbLightning/payjoin-ffi?branch=main#bfd3bb06435c3a6a4706842dfdfcd5148c6c80a0" +source = "git+https://github.com/LtbLightning/payjoin-ffi?rev=bd9d0b3d514c17a288d2896da3cdd739b4f5c71d#bd9d0b3d514c17a288d2896da3cdd739b4f5c71d" dependencies = [ "base64 0.22.1", + "hex", "ohttp", "payjoin", "thiserror", @@ -1191,6 +1630,9 @@ name = "payjoin_flutter" version = "0.13.0" dependencies = [ "anyhow", + "base64 0.13.1", + "bdk", + "bitcoincore-rpc", "flutter_rust_bridge", "ohttp", "payjoin_ffi", @@ -1281,9 +1723,9 @@ checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" [[package]] name = "proc-macro2" -version = "1.0.84" +version = "1.0.85" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec96c6a92621310b51366f1e28d05ef11489516e93be030060e5fc12024a49d6" +checksum = "22244ce15aa966053a896d1accb3a6e68469b97c7f33f284b99f0d576879fc23" dependencies = [ "unicode-ident", ] @@ -1333,11 +1775,20 @@ dependencies = [ "getrandom", ] +[[package]] +name = "redox_syscall" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +dependencies = [ + "bitflags", +] + [[package]] name = "regex" -version = "1.10.4" +version = "1.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c" +checksum = "b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f" dependencies = [ "aho-corasick", "memchr", @@ -1347,9 +1798,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.6" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" +checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" dependencies = [ "aho-corasick", "memchr", @@ -1358,9 +1809,24 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56" +checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" + +[[package]] +name = "ring" +version = "0.17.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +dependencies = [ + "cc", + "cfg-if", + "getrandom", + "libc", + "spin", + "untrusted", + "windows-sys", +] [[package]] name = "rustc-demangle" @@ -1368,12 +1834,40 @@ version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" +[[package]] +name = "rustls" +version = "0.21.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" +dependencies = [ + "log", + "ring", + "rustls-webpki", + "sct", +] + +[[package]] +name = "rustls-webpki" +version = "0.101.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +dependencies = [ + "ring", + "untrusted", +] + [[package]] name = "ryu" version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + [[package]] name = "scroll" version = "0.12.0" @@ -1391,7 +1885,17 @@ checksum = "7f81c2fde025af7e69b1d1420531c8a8811ca898919db177141a85313b1cb932" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.66", +] + +[[package]] +name = "sct" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" +dependencies = [ + "ring", + "untrusted", ] [[package]] @@ -1400,9 +1904,21 @@ version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "25996b82292a7a57ed3508f052cfff8640d38d32018784acd714758b43da9c8f" dependencies = [ - "bitcoin_hashes", + "bitcoin_hashes 0.12.0", "rand", - "secp256k1-sys", + "secp256k1-sys 0.8.1", + "serde", +] + +[[package]] +name = "secp256k1" +version = "0.28.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d24b59d129cdadea20aea4fb2352fa053712e5d713eee47d700cd4b2bc002f10" +dependencies = [ + "bitcoin_hashes 0.13.0", + "rand", + "secp256k1-sys 0.9.2", "serde", ] @@ -1415,6 +1931,15 @@ dependencies = [ "cc", ] +[[package]] +name = "secp256k1-sys" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5d1746aae42c19d583c3c1a8c646bfad910498e2051c551a7f2e3c0c9fbb7eb" +dependencies = [ + "cc", +] + [[package]] name = "semver" version = "1.0.23" @@ -1441,7 +1966,7 @@ checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.66", ] [[package]] @@ -1494,12 +2019,57 @@ dependencies = [ "autocfg", ] +[[package]] +name = "sled" +version = "0.34.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f96b4737c2ce5987354855aed3797279def4ebf734436c6aa4552cf8e169935" +dependencies = [ + "crc32fast", + "crossbeam-epoch", + "crossbeam-utils", + "fs2", + "fxhash", + "libc", + "log", + "parking_lot", +] + +[[package]] +name = "smallvec" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" + [[package]] name = "smawk" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b7c388c1b5e93756d0c740965c41e8822f866621d41acbdf6336a6a168f8840c" +[[package]] +name = "socks" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0c3dbbd9ae980613c6dd8e28a9407b50509d3803b57624d5dfe8315218cd58b" +dependencies = [ + "byteorder", + "libc", + "winapi", +] + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + [[package]] name = "static_assertions" version = "1.1.0" @@ -1518,6 +2088,17 @@ version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + [[package]] name = "syn" version = "2.0.66" @@ -1529,6 +2110,17 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "synstructure" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + [[package]] name = "textwrap" version = "0.16.1" @@ -1536,8 +2128,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "23d434d3f8967a09480fb04132ebe0a3e088c173e6d0ee7897abbdf4eab0f8b9" dependencies = [ "smawk", - "unicode-linebreak", - "unicode-width", ] [[package]] @@ -1557,7 +2147,7 @@ checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.66", ] [[package]] @@ -1569,6 +2159,16 @@ dependencies = [ "num_cpus", ] +[[package]] +name = "tinystr" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +dependencies = [ + "displaydoc", + "zerovec", +] + [[package]] name = "tinyvec" version = "1.6.0" @@ -1593,6 +2193,18 @@ dependencies = [ "backtrace", "num_cpus", "pin-project-lite", + "tokio-macros", +] + +[[package]] +name = "tokio-macros" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f5ae998a069d4b5aba8ee9dad856af7d520c3699e6159b185c2acd48155d39a" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", ] [[package]] @@ -1619,44 +2231,26 @@ dependencies = [ "version_check", ] -[[package]] -name = "unicode-bidi" -version = "0.3.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" - [[package]] name = "unicode-ident" version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" -[[package]] -name = "unicode-linebreak" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f" - [[package]] name = "unicode-normalization" -version = "0.1.23" +version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" +checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" dependencies = [ "tinyvec", ] -[[package]] -name = "unicode-width" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68f5e5f3158ecfd4b8ff6fe086db7c8467a2dfdac97fe420f2b7c4aa97af66d6" - [[package]] name = "uniffi" -version = "0.27.2" +version = "0.27.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab38ff7ce5037772ca9bf7667e4e8535d110f11c6e2ec8cc9c1a7fc66938650c" +checksum = "cb3a4c447c50fcda7bc5604a8588b7e1f37ffbfd8838a1516a290398efa7c6f0" dependencies = [ "anyhow", "camino", @@ -1669,9 +2263,9 @@ dependencies = [ [[package]] name = "uniffi_bindgen" -version = "0.27.2" +version = "0.27.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "480597c3b4074ab2faa39158f45f87f3ac33ccfd7bc7943ff0877372d9d8db97" +checksum = "0be2bc6bafd82c979b0faca77c7b26630d54017de9f5bd5a686ec6ef038ad5d9" dependencies = [ "anyhow", "askama", @@ -1694,9 +2288,9 @@ dependencies = [ [[package]] name = "uniffi_build" -version = "0.27.2" +version = "0.27.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497391e423074ed5dbd828a2860d6203a333123519a285560c5ae1fd78075de4" +checksum = "1c59b65d59685ff3a10569287c6419f76487b4052ac52d5a0df38b2253d7f440" dependencies = [ "anyhow", "camino", @@ -1705,19 +2299,19 @@ dependencies = [ [[package]] name = "uniffi_checksum_derive" -version = "0.27.2" +version = "0.27.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95e86ccd44c138ba12b9132decbabeed84bf686ebe4b6538a5e489a243a7c2c9" +checksum = "d5c400339a9d1d17be34257d0b407e91d64af335e5b4fa49f4bf28467fc8d635" dependencies = [ "quote", - "syn", + "syn 2.0.66", ] [[package]] name = "uniffi_core" -version = "0.27.2" +version = "0.27.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52fcb15ab907c37fe50163f05f97d497bc4400d8bfbdb7ef56b3a9ef777188d4" +checksum = "a02e67ac9634b10da9e4aa63a29a7920b8f1395eafef1ea659b2dd76dda96906" dependencies = [ "anyhow", "bytes", @@ -1730,9 +2324,9 @@ dependencies = [ [[package]] name = "uniffi_macros" -version = "0.27.2" +version = "0.27.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "865e2144b19552516c288e7c0425553c64724a8e4862bcb0c169355008e0ff0d" +checksum = "b6f08d5592c669b80a8af5066027098bebec4b4af17a9b8b299bac5f518ab89e" dependencies = [ "bincode", "camino", @@ -1741,16 +2335,16 @@ dependencies = [ "proc-macro2", "quote", "serde", - "syn", + "syn 2.0.66", "toml", "uniffi_meta", ] [[package]] name = "uniffi_meta" -version = "0.27.2" +version = "0.27.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7968bda370d74b9bffb9af1e9cdc9a354ce027dc313963860f26dcf6c8efcecf" +checksum = "583bab49f2bdf5681f9732f8b67a7e555ad920dbb5427be21450217bf1818189" dependencies = [ "anyhow", "bytes", @@ -1760,9 +2354,9 @@ dependencies = [ [[package]] name = "uniffi_testing" -version = "0.27.2" +version = "0.27.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cfe857c83a2655412745e31929c05486d02b340336b595b7044eff342cf6c91" +checksum = "13963044ca9bde9b709d2eee68bc11dafc7acea144ae0fdc0cf29ed4add44481" dependencies = [ "anyhow", "camino", @@ -1773,9 +2367,9 @@ dependencies = [ [[package]] name = "uniffi_udl" -version = "0.27.2" +version = "0.27.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af11dd5dd1a60d9af5ef30cd37f37090999d998be0c9d34d5ddaf6cee138ed4a" +checksum = "b92f984bb0d9a06778f256aec963e1e9a80714014f7a90fb0e01008821fe5a97" dependencies = [ "anyhow", "textwrap", @@ -1804,22 +2398,59 @@ dependencies = [ "subtle", ] +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "ureq" +version = "2.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8cdd25c339e200129fe4de81451814e5228c9b771d57378817d6117cc2b3f97" +dependencies = [ + "base64 0.21.7", + "flate2", + "log", + "once_cell", + "rustls", + "rustls-webpki", + "serde", + "serde_json", + "socks", + "url", + "webpki-roots 0.25.4", +] + [[package]] name = "url" -version = "2.5.0" +version = "2.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" +checksum = "f7c25da092f0a868cdf09e8674cd3b7ef3a7d92a24253e663a2fb85e2496de56" dependencies = [ "form_urlencoded", "idna", "percent-encoding", ] +[[package]] +name = "utf16_iter" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + [[package]] name = "utf8parse" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "version_check" @@ -1854,7 +2485,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn", + "syn 2.0.66", "wasm-bindgen-shared", ] @@ -1888,7 +2519,7 @@ checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.66", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -1909,6 +2540,31 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "webpki" +version = "0.22.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed63aea5ce73d0ff405984102c42de94fc55a6b75765d621c65262469b3c9b53" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "webpki-roots" +version = "0.22.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87" +dependencies = [ + "webpki", +] + +[[package]] +name = "webpki-roots" +version = "0.25.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" + [[package]] name = "weedle2" version = "5.0.0" @@ -1918,6 +2574,28 @@ dependencies = [ "nom", ] +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + [[package]] name = "windows-sys" version = "0.52.0" @@ -1991,6 +2669,18 @@ version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" +[[package]] +name = "write16" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" + +[[package]] +name = "writeable" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" + [[package]] name = "x25519-dalek" version = "2.0.0-pre.1" @@ -2002,6 +2692,51 @@ dependencies = [ "zeroize", ] +[[package]] +name = "yoke" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c5b1314b079b0930c31e3af543d8ee1757b1951ae1e1565ec704403a7240ca5" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28cc31741b18cb6f1d5ff12f5b7523e3d6eb0852bbbad19d73905511d9849b95" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", + "synstructure", +] + +[[package]] +name = "zerofrom" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91ec111ce797d0e0784a1116d0ddcdbea84322cd79e5d5ad173daeba4f93ab55" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ea7b4a3637ea8669cedf0f1fd5c286a17f3de97b8dd5a70a6c167a1730e63a5" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", + "synstructure", +] + [[package]] name = "zeroize" version = "1.8.1" @@ -2019,5 +2754,27 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.66", +] + +[[package]] +name = "zerovec" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb2cc8827d6c0994478a15c53f374f46fbd41bea663d809b14744bc42e6b109c" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97cf56601ee5052b4417d90c8755c6683473c926039908196cf35d99f893ebe7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", ] diff --git a/rust/Cargo.toml b/rust/Cargo.toml index 8cf8cca..07ebfa9 100644 --- a/rust/Cargo.toml +++ b/rust/Cargo.toml @@ -6,13 +6,17 @@ edition = "2021" [lib] crate-type = ["cdylib", "staticlib"] +[dev-dependencies] +bdk = { version = "0.29.0", features = ["all-keys", "use-esplora-ureq", "keys-bip39"] } +bitcoincore-rpc = "0.18.0" anyhow = "1.0.68" [dependencies] ohttp = { version = "0.5.1" } -payjoin_ffi = {git = "https://github.com/LtbLightning/payjoin-ffi", branch = "main"} +payjoin_ffi = {git = "https://github.com/LtbLightning/payjoin-ffi", rev="bd9d0b3d514c17a288d2896da3cdd739b4f5c71d"} flutter_rust_bridge = "=2.0.0-dev.31" anyhow = "1.0.68" tokio = "1.36.0" +base64 = "0.13.1" [profile.release] strip = true diff --git a/rust/src/api/receive.rs b/rust/src/api/receive.rs index 4157984..42f99ec 100644 --- a/rust/src/api/receive.rs +++ b/rust/src/api/receive.rs @@ -1,4 +1,4 @@ -use crate::api::uri::Url; +use crate::api::uri::{OhttpKeys, Url}; use crate::frb_generated::RustOpaque; pub use crate::utils::error::PayjoinError; use crate::utils::types::{Headers, OutPoint, TxOut}; @@ -47,12 +47,24 @@ impl UncheckedProposal { ) -> Result { let runtime = tokio::runtime::Runtime::new().unwrap(); ptr.0 - .check_broadcast_suitability_with_callback(min_fee_rate, |x| { + .check_broadcast_suitability(min_fee_rate, |x| { Ok(runtime.block_on(can_broadcast(x.clone()))) }) .map(|e| e.into()) .map_err(|e| e.into()) } + pub(crate) fn _check_broadcast_suitability( + ptr: Self, + min_fee_rate: Option, + can_broadcast: impl Fn(Vec) -> Result, + ) -> Result { + ptr.0 + .check_broadcast_suitability(min_fee_rate, |x| { + can_broadcast(x.clone()).map_err(|e| e.into()) + }) + .map(|e| e.into()) + .map_err(|e| e.into()) + } /// Call this method if the only way to initiate a Payjoin with this receiver requires manual intervention, as in most consumer wallets. /// /// So-called “non-interactive” receivers, like payment processors, that allow arbitrary requests are otherwise vulnerable to probing attacks. Those receivers call get_transaction_to_check_broadcast() and attest_tested_and_scheduled_broadcast() after making those checks downstream. @@ -74,7 +86,16 @@ impl MaybeInputsOwned { ) -> Result { let runtime = tokio::runtime::Runtime::new().unwrap(); ptr.0 - .check_inputs_not_owned_with_callback(|o| Ok(runtime.block_on(is_owned(o.clone())))) + .check_inputs_not_owned(|o| Ok(runtime.block_on(is_owned(o.clone())))) + .map(|e| e.into()) + .map_err(|e| e.into()) + } + pub(crate) fn _check_inputs_not_owned( + ptr: Self, + is_owned: impl Fn(Vec) ->Result, + ) -> Result { + ptr.0 + .check_inputs_not_owned(|o| is_owned(o.clone()).map_err(|e| e.into())) .map(|e| e.into()) .map_err(|e| e.into()) } @@ -110,7 +131,16 @@ impl MaybeInputsSeen { ) -> Result { let runtime = tokio::runtime::Runtime::new().unwrap(); ptr.0 - .check_no_inputs_seen_before_with_callback(|o| Ok(runtime.block_on(is_known(o.into())))) + .check_no_inputs_seen_before(|o| Ok(runtime.block_on(is_known(o.into())))) + .map(|e| e.into()) + .map_err(|e| e.into()) + } + pub(crate) fn _check_no_inputs_seen_before( + ptr: Self, + is_known: impl Fn(OutPoint) -> Result, + ) -> Result { + ptr.0 + .check_no_inputs_seen_before(|o| is_known(o.into()).map_err(|e| e.into())) .map(|e| e.into()) .map_err(|e| e.into()) } @@ -130,12 +160,23 @@ impl OutputsUnknown { ) -> Result { let runtime = tokio::runtime::Runtime::new().unwrap(); ptr.0 - .identify_receiver_outputs_with_callback(|o| { + .identify_receiver_outputs(|o| { Ok(runtime.block_on(is_receiver_output(o.clone()))) }) .map(|e| e.into()) .map_err(|e| e.into()) } + pub(crate) fn _identify_receiver_outputs( + ptr: Self, + is_receiver_output: impl Fn(Vec) -> Result, + ) -> Result { + ptr.0 + .identify_receiver_outputs(|o| { + is_receiver_output(o.clone()).map_err(|e|e.into()) + }) + .map(|e| e.into()) + .map_err(|e| e.into()) + } } pub struct ProvisionalProposal(pub RustOpaque>); @@ -190,13 +231,26 @@ impl ProvisionalProposal { ) -> Result { let runtime = tokio::runtime::Runtime::new().unwrap(); ptr.0 - .finalize_proposal_with_callback( + .finalize_proposal( |o| Ok(runtime.block_on(process_psbt(o.clone()))), min_feerate_sat_per_vb, ) .map(|e| e.into()) .map_err(|e| e.into()) } + pub(crate) fn _finalize_proposal( + ptr: Self, + process_psbt: impl Fn(String) -> Result, + min_feerate_sat_per_vb: Option, + ) -> Result { + ptr.0 + .finalize_proposal( + |o| process_psbt(o.clone()).map_err(|e| e.into()), + min_feerate_sat_per_vb, + ) + .map(|e| e.into()) + .map_err(|e| e.into()) + } } pub struct PayjoinProposal(pub RustOpaque>); @@ -246,28 +300,17 @@ impl From for Enroller { } } impl Enroller { - pub fn from_relay_config( - relay_url: String, - ohttp_config_base64: String, - ohttp_proxy_url: String, + pub fn from_directory_config( + directory: Url, ohttp_keys: OhttpKeys, ohttp_relay:Url ) -> Enroller { - payjoin_ffi::receive::v2::Enroller::from_relay_config( - relay_url, - ohttp_config_base64, - ohttp_proxy_url, - ) - .into() + payjoin_ffi::receive::v2::Enroller::from_directory_config( + (*directory.0).clone(), Arc::new(ohttp_keys.into()), (*ohttp_relay.0).clone() + ).into() } - pub fn subdirectory(&self) -> String { - self.0.subdirectory() - } - pub fn payjoin_subdir(&self) -> String { - self.0.payjoin_subdir() - } pub fn extract_req(ptr: Self) -> Result<((Url, Vec), ClientResponse), PayjoinError> { ptr.0 - .extract_req_as_tuple() + .extract_req() .map(|e| (((*e.0.url).clone().into(), e.0.body), e.1.into())) .map_err(|e| e.into()) } @@ -277,7 +320,7 @@ impl Enroller { ctx: ClientResponse, ) -> Result { self.0 - .process_res_with_ohttp_response(body, ctx.into()) + .process_res(body, ctx.into()) .map(|e| e.into()) .map_err(|e| e.into()) } @@ -291,15 +334,12 @@ impl From> for Enrolled { } } impl Enrolled { - pub fn subdirectory(&self) -> Vec { - self.0.pubkey() - } pub fn fallback_target(&self) -> String { self.0.fallback_target() } pub fn extract_req(ptr: Self) -> Result<((Url, Vec), ClientResponse), PayjoinError> { ptr.0 - .extract_req_as_tuple() + .extract_req() .map(|e| (((*e.0.url).clone().into(), e.0.body), e.1.into())) .map_err(|e| e.into()) } @@ -309,7 +349,7 @@ impl Enrolled { ctx: ClientResponse, ) -> Result, PayjoinError> { self.0 - .process_res_with_ohttp_response(body, ctx.into()) + .process_res(body, ctx.into()) .map(|e| e.map(|o| o.into())) .map_err(|e| e.into()) } @@ -341,7 +381,7 @@ impl V2UncheckedProposal { ) -> Result { let runtime = tokio::runtime::Runtime::new().unwrap(); self.0 - .check_broadcast_suitability_with_callback(min_fee_rate, |x| { + .check_broadcast_suitability(min_fee_rate, |x| { Ok(runtime.block_on(can_broadcast(x.clone()))) }) .map(|e| e.into()) @@ -373,7 +413,7 @@ impl V2MaybeInputsOwned { ) -> Result { let runtime = tokio::runtime::Runtime::new().unwrap(); self.0 - .check_inputs_not_owned_with_callback(|o| Ok(runtime.block_on(is_owned(o.clone())))) + .check_inputs_not_owned(|o| Ok(runtime.block_on(is_owned(o.clone())))) .map(|e| e.into()) .map_err(|e| e.into()) } @@ -419,7 +459,7 @@ impl V2MaybeInputsSeen { ) -> Result { let runtime = tokio::runtime::Runtime::new().unwrap(); self.0 - .check_no_inputs_seen_before_with_callback(|o| Ok(runtime.block_on(is_known(o.into())))) + .check_no_inputs_seen_before(|o| Ok(runtime.block_on(is_known(o.into())))) .map(|e| e.into()) .map_err(|e| e.into()) } @@ -440,7 +480,7 @@ impl V2OutputsUnknown { ) -> Result { let runtime = tokio::runtime::Runtime::new().unwrap(); self.0 - .identify_receiver_outputs_with_callback(|o| { + .identify_receiver_outputs(|o| { Ok(runtime.block_on(is_receiver_output(o.clone()))) }) .map(|e| e.into()) @@ -505,7 +545,7 @@ impl V2ProvisionalProposal { ) -> Result { let runtime = tokio::runtime::Runtime::new().unwrap(); self.0 - .finalize_proposal_with_callback( + .finalize_proposal( |o| Ok(runtime.block_on(process_psbt(o.clone()))), min_feerate_sat_per_vb, ) @@ -542,7 +582,7 @@ impl V2PayjoinProposal { pub fn extract_v2_req(ptr: Self) -> Result<((Url, Vec), ClientResponse), PayjoinError> { ptr.0 .clone() - .extract_v2_req_as_tuple() + .extract_v2_req() .map(|e| (((*e.0.url).clone().into(), e.0.body), e.1.into())) .map_err(|e| e.into()) } @@ -553,7 +593,7 @@ impl V2PayjoinProposal { ohttp_context: ClientResponse, ) -> Result, PayjoinError> { self.0 - .deserialize_res_with_ohttp_response(res, ohttp_context.into()) + .deserialize_res(res, ohttp_context.into()) .map(|e| e) .map_err(|e| e.into()) } diff --git a/rust/src/api/send.rs b/rust/src/api/send.rs index f82dac0..1c25dce 100644 --- a/rust/src/api/send.rs +++ b/rust/src/api/send.rs @@ -93,9 +93,9 @@ impl RequestContext { } pub fn extract_v2( ptr: Self, - ohttp_proxy_url: String, + ohttp_proxy_url: Url, ) -> Result { - match ptr.0.extract_v2(ohttp_proxy_url) { + match ptr.0.extract_v2((*ohttp_proxy_url.0).clone()) { Ok(e) => Ok(e.into()), Err(e) => Err(e.into()), } diff --git a/rust/src/api/uri.rs b/rust/src/api/uri.rs index 47a7f1c..3498b3c 100644 --- a/rust/src/api/uri.rs +++ b/rust/src/api/uri.rs @@ -16,7 +16,7 @@ impl From> for Url { } impl Url { pub fn from_str(url: String) -> anyhow::Result { - match payjoin_ffi::uri::Url::new(url) { + match payjoin_ffi::uri::Url::from_str(url) { Ok(e) => Ok(e.into()), Err(e) => Err(e.into()), } @@ -29,6 +29,8 @@ impl Url { } } + +#[derive(Clone)] pub struct Uri(pub RustOpaque>); impl From for Uri { fn from(value: payjoin_ffi::uri::Uri) -> Self { @@ -57,3 +59,22 @@ impl Uri { self.0.amount() } } +pub struct OhttpKeys(pub RustOpaque); + +impl From for payjoin_ffi::types::OhttpKeys{ + fn from(value: OhttpKeys) -> Self { + (*value.0).clone() + } +} +impl From for OhttpKeys{ + fn from(value:payjoin_ffi::types:: OhttpKeys) -> Self { + Self(RustOpaque::new(value)) + } +} + +impl OhttpKeys { + pub fn decode(bytes: Vec) -> Result { + payjoin_ffi::types::OhttpKeys::decode(bytes).map(|e| e.into()).map_err(|e| e.into()) + } + +} diff --git a/rust/src/frb_generated.io.rs b/rust/src/frb_generated.io.rs index f30ffe1..027613b 100644 --- a/rust/src/frb_generated.io.rs +++ b/rust/src/frb_generated.io.rs @@ -178,6 +178,12 @@ impl CstDecode> for unsafe { decode_rust_opaque_nom(self as _) } } } +impl CstDecode> for usize { + // Codec=Cst (C-struct based), see doc to use other codecs + fn cst_decode(self) -> RustOpaqueNom { + unsafe { decode_rust_opaque_nom(self as _) } + } +} impl CstDecode for *mut wire_cst_list_prim_u_8_strict { // Codec=Cst (C-struct based), see doc to use other codecs fn cst_decode(self) -> String { @@ -256,6 +262,13 @@ impl CstDecode CstDecode::::cst_decode(*wrap).into() } } +impl CstDecode for *mut wire_cst_ohttp_keys { + // Codec=Cst (C-struct based), see doc to use other codecs + fn cst_decode(self) -> crate::api::uri::OhttpKeys { + let wrap = unsafe { flutter_rust_bridge::for_generated::box_from_leak_ptr(self) }; + CstDecode::::cst_decode(*wrap).into() + } +} impl CstDecode for *mut wire_cst_out_point { // Codec=Cst (C-struct based), see doc to use other codecs fn cst_decode(self) -> crate::utils::types::OutPoint { @@ -506,6 +519,12 @@ impl CstDecode for wire_cst_maybe_m crate::api::receive::MaybeMixedInputScripts(self.field0.cst_decode()) } } +impl CstDecode for wire_cst_ohttp_keys { + // Codec=Cst (C-struct based), see doc to use other codecs + fn cst_decode(self) -> crate::api::uri::OhttpKeys { + crate::api::uri::OhttpKeys(self.field0.cst_decode()) + } +} impl CstDecode for wire_cst_out_point { // Codec=Cst (C-struct based), see doc to use other codecs fn cst_decode(self) -> crate::utils::types::OutPoint { @@ -886,6 +905,18 @@ impl Default for wire_cst_maybe_mixed_input_scripts { Self::new_with_null_ptr() } } +impl NewWithNullPtr for wire_cst_ohttp_keys { + fn new_with_null_ptr() -> Self { + Self { + field0: Default::default(), + } + } +} +impl Default for wire_cst_ohttp_keys { + fn default() -> Self { + Self::new_with_null_ptr() + } +} impl NewWithNullPtr for wire_cst_out_point { fn new_with_null_ptr() -> Self { Self { @@ -1210,14 +1241,6 @@ pub extern "C" fn frbgen_payjoin_flutter_wire_enrolled_process_res( wire_enrolled_process_res_impl(port_, that, body, ctx) } -#[no_mangle] -pub extern "C" fn frbgen_payjoin_flutter_wire_enrolled_subdirectory( - port_: i64, - that: *mut wire_cst_enrolled, -) { - wire_enrolled_subdirectory_impl(port_, that) -} - #[no_mangle] pub extern "C" fn frbgen_payjoin_flutter_wire_enroller_extract_req( port_: i64, @@ -1227,21 +1250,13 @@ pub extern "C" fn frbgen_payjoin_flutter_wire_enroller_extract_req( } #[no_mangle] -pub extern "C" fn frbgen_payjoin_flutter_wire_enroller_from_relay_config( - port_: i64, - relay_url: *mut wire_cst_list_prim_u_8_strict, - ohttp_config_base64: *mut wire_cst_list_prim_u_8_strict, - ohttp_proxy_url: *mut wire_cst_list_prim_u_8_strict, -) { - wire_enroller_from_relay_config_impl(port_, relay_url, ohttp_config_base64, ohttp_proxy_url) -} - -#[no_mangle] -pub extern "C" fn frbgen_payjoin_flutter_wire_enroller_payjoin_subdir( +pub extern "C" fn frbgen_payjoin_flutter_wire_enroller_from_directory_config( port_: i64, - that: *mut wire_cst_enroller, + directory: *mut wire_cst_url, + ohttp_keys: *mut wire_cst_ohttp_keys, + ohttp_relay: *mut wire_cst_url, ) { - wire_enroller_payjoin_subdir_impl(port_, that) + wire_enroller_from_directory_config_impl(port_, directory, ohttp_keys, ohttp_relay) } #[no_mangle] @@ -1254,14 +1269,6 @@ pub extern "C" fn frbgen_payjoin_flutter_wire_enroller_process_res( wire_enroller_process_res_impl(port_, that, body, ctx) } -#[no_mangle] -pub extern "C" fn frbgen_payjoin_flutter_wire_enroller_subdirectory( - port_: i64, - that: *mut wire_cst_enroller, -) { - wire_enroller_subdirectory_impl(port_, that) -} - #[no_mangle] pub extern "C" fn frbgen_payjoin_flutter_wire_maybe_inputs_owned_check_inputs_not_owned( port_: i64, @@ -1684,11 +1691,19 @@ pub extern "C" fn frbgen_payjoin_flutter_wire_request_context_extract_v1( pub extern "C" fn frbgen_payjoin_flutter_wire_request_context_extract_v2( port_: i64, ptr: *mut wire_cst_request_context, - ohttp_proxy_url: *mut wire_cst_list_prim_u_8_strict, + ohttp_proxy_url: *mut wire_cst_url, ) { wire_request_context_extract_v2_impl(port_, ptr, ohttp_proxy_url) } +#[no_mangle] +pub extern "C" fn frbgen_payjoin_flutter_wire_ohttp_keys_decode( + port_: i64, + bytes: *mut wire_cst_list_prim_u_8_loose, +) { + wire_ohttp_keys_decode_impl(port_, bytes) +} + #[no_mangle] pub extern "C" fn frbgen_payjoin_flutter_wire_uri_address(port_: i64, that: *mut wire_cst_uri) { wire_uri_address_impl(port_, that) @@ -2167,6 +2182,24 @@ pub extern "C" fn frbgen_payjoin_flutter_rust_arc_decrement_strong_count_RustOpa } } +#[no_mangle] +pub extern "C" fn frbgen_payjoin_flutter_rust_arc_increment_strong_count_RustOpaque_payjoin_ffitypesOhttpKeys( + ptr: *const std::ffi::c_void, +) { + unsafe { + StdArc::::increment_strong_count(ptr as _); + } +} + +#[no_mangle] +pub extern "C" fn frbgen_payjoin_flutter_rust_arc_decrement_strong_count_RustOpaque_payjoin_ffitypesOhttpKeys( + ptr: *const std::ffi::c_void, +) { + unsafe { + StdArc::::decrement_strong_count(ptr as _); + } +} + #[no_mangle] pub extern "C" fn frbgen_payjoin_flutter_cst_new_box_autoadd_client_response( ) -> *mut wire_cst_client_response { @@ -2231,6 +2264,12 @@ pub extern "C" fn frbgen_payjoin_flutter_cst_new_box_autoadd_maybe_mixed_input_s ) } +#[no_mangle] +pub extern "C" fn frbgen_payjoin_flutter_cst_new_box_autoadd_ohttp_keys() -> *mut wire_cst_ohttp_keys +{ + flutter_rust_bridge::for_generated::new_leak_box_ptr(wire_cst_ohttp_keys::new_with_null_ptr()) +} + #[no_mangle] pub extern "C" fn frbgen_payjoin_flutter_cst_new_box_autoadd_out_point() -> *mut wire_cst_out_point { @@ -2524,6 +2563,11 @@ pub struct wire_cst_maybe_mixed_input_scripts { } #[repr(C)] #[derive(Clone, Copy)] +pub struct wire_cst_ohttp_keys { + field0: usize, +} +#[repr(C)] +#[derive(Clone, Copy)] pub struct wire_cst_out_point { txid: *mut wire_cst_list_prim_u_8_strict, vout: u32, diff --git a/rust/src/frb_generated.rs b/rust/src/frb_generated.rs index c51c200..71a0bc7 100644 --- a/rust/src/frb_generated.rs +++ b/rust/src/frb_generated.rs @@ -104,26 +104,6 @@ fn wire_enrolled_process_res_impl( }, ) } -fn wire_enrolled_subdirectory_impl( - port_: flutter_rust_bridge::for_generated::MessagePort, - that: impl CstDecode, -) { - FLUTTER_RUST_BRIDGE_HANDLER.wrap_normal::( - flutter_rust_bridge::for_generated::TaskInfo { - debug_name: "enrolled_subdirectory", - port: Some(port_), - mode: flutter_rust_bridge::for_generated::FfiCallMode::Normal, - }, - move || { - let api_that = that.cst_decode(); - move |context| { - transform_result_dco((move || { - Result::<_, ()>::Ok(crate::api::receive::Enrolled::subdirectory(&api_that)) - })()) - } - }, - ) -} fn wire_enroller_extract_req_impl( port_: flutter_rust_bridge::for_generated::MessagePort, ptr: impl CstDecode, @@ -144,54 +124,34 @@ fn wire_enroller_extract_req_impl( }, ) } -fn wire_enroller_from_relay_config_impl( +fn wire_enroller_from_directory_config_impl( port_: flutter_rust_bridge::for_generated::MessagePort, - relay_url: impl CstDecode, - ohttp_config_base64: impl CstDecode, - ohttp_proxy_url: impl CstDecode, + directory: impl CstDecode, + ohttp_keys: impl CstDecode, + ohttp_relay: impl CstDecode, ) { FLUTTER_RUST_BRIDGE_HANDLER.wrap_normal::( flutter_rust_bridge::for_generated::TaskInfo { - debug_name: "enroller_from_relay_config", + debug_name: "enroller_from_directory_config", port: Some(port_), mode: flutter_rust_bridge::for_generated::FfiCallMode::Normal, }, move || { - let api_relay_url = relay_url.cst_decode(); - let api_ohttp_config_base64 = ohttp_config_base64.cst_decode(); - let api_ohttp_proxy_url = ohttp_proxy_url.cst_decode(); + let api_directory = directory.cst_decode(); + let api_ohttp_keys = ohttp_keys.cst_decode(); + let api_ohttp_relay = ohttp_relay.cst_decode(); move |context| { transform_result_dco((move || { - Result::<_, ()>::Ok(crate::api::receive::Enroller::from_relay_config( - api_relay_url, - api_ohttp_config_base64, - api_ohttp_proxy_url, + Result::<_, ()>::Ok(crate::api::receive::Enroller::from_directory_config( + api_directory, + api_ohttp_keys, + api_ohttp_relay, )) })()) } }, ) } -fn wire_enroller_payjoin_subdir_impl( - port_: flutter_rust_bridge::for_generated::MessagePort, - that: impl CstDecode, -) { - FLUTTER_RUST_BRIDGE_HANDLER.wrap_normal::( - flutter_rust_bridge::for_generated::TaskInfo { - debug_name: "enroller_payjoin_subdir", - port: Some(port_), - mode: flutter_rust_bridge::for_generated::FfiCallMode::Normal, - }, - move || { - let api_that = that.cst_decode(); - move |context| { - transform_result_dco((move || { - Result::<_, ()>::Ok(crate::api::receive::Enroller::payjoin_subdir(&api_that)) - })()) - } - }, - ) -} fn wire_enroller_process_res_impl( port_: flutter_rust_bridge::for_generated::MessagePort, that: impl CstDecode, @@ -216,26 +176,6 @@ fn wire_enroller_process_res_impl( }, ) } -fn wire_enroller_subdirectory_impl( - port_: flutter_rust_bridge::for_generated::MessagePort, - that: impl CstDecode, -) { - FLUTTER_RUST_BRIDGE_HANDLER.wrap_normal::( - flutter_rust_bridge::for_generated::TaskInfo { - debug_name: "enroller_subdirectory", - port: Some(port_), - mode: flutter_rust_bridge::for_generated::FfiCallMode::Normal, - }, - move || { - let api_that = that.cst_decode(); - move |context| { - transform_result_dco((move || { - Result::<_, ()>::Ok(crate::api::receive::Enroller::subdirectory(&api_that)) - })()) - } - }, - ) -} fn wire_maybe_inputs_owned_check_inputs_not_owned_impl( port_: flutter_rust_bridge::for_generated::MessagePort, ptr: impl CstDecode, @@ -1326,7 +1266,7 @@ fn wire_request_context_extract_v1_impl( fn wire_request_context_extract_v2_impl( port_: flutter_rust_bridge::for_generated::MessagePort, ptr: impl CstDecode, - ohttp_proxy_url: impl CstDecode, + ohttp_proxy_url: impl CstDecode, ) { FLUTTER_RUST_BRIDGE_HANDLER.wrap_normal::( flutter_rust_bridge::for_generated::TaskInfo { @@ -1345,6 +1285,24 @@ fn wire_request_context_extract_v2_impl( }, ) } +fn wire_ohttp_keys_decode_impl( + port_: flutter_rust_bridge::for_generated::MessagePort, + bytes: impl CstDecode>, +) { + FLUTTER_RUST_BRIDGE_HANDLER.wrap_normal::( + flutter_rust_bridge::for_generated::TaskInfo { + debug_name: "ohttp_keys_decode", + port: Some(port_), + mode: flutter_rust_bridge::for_generated::FfiCallMode::Normal, + }, + move || { + let api_bytes = bytes.cst_decode(); + move |context| { + transform_result_dco((move || crate::api::uri::OhttpKeys::decode(api_bytes))()) + } + }, + ) +} fn wire_uri_address_impl( port_: flutter_rust_bridge::for_generated::MessagePort, that: impl CstDecode, @@ -1770,6 +1728,14 @@ impl SseDecode for RustOpaqueNom } } +impl SseDecode for RustOpaqueNom { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut inner = ::sse_decode(deserializer); + return unsafe { decode_rust_opaque_nom(inner) }; + } +} + impl SseDecode for String { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { @@ -1940,6 +1906,15 @@ impl SseDecode for crate::api::receive::MaybeMixedInputScripts { } } +impl SseDecode for crate::api::uri::OhttpKeys { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut var_field0 = + >::sse_decode(deserializer); + return crate::api::uri::OhttpKeys(var_field0); + } +} + impl SseDecode for Option { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { @@ -2559,6 +2534,18 @@ impl flutter_rust_bridge::IntoIntoDart flutter_rust_bridge::for_generated::DartAbi { + [self.0.into_into_dart().into_dart()].into_dart() + } +} +impl flutter_rust_bridge::for_generated::IntoDartExceptPrimitive for crate::api::uri::OhttpKeys {} +impl flutter_rust_bridge::IntoIntoDart for crate::api::uri::OhttpKeys { + fn into_into_dart(self) -> crate::api::uri::OhttpKeys { + self + } +} +// Codec=Dco (DartCObject based), see doc to use other codecs impl flutter_rust_bridge::IntoDart for crate::utils::types::OutPoint { fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi { [ @@ -3180,6 +3167,15 @@ impl SseEncode for RustOpaqueNom } } +impl SseEncode for RustOpaqueNom { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + let (ptr, size) = self.sse_encode_raw(); + ::sse_encode(ptr, serializer); + ::sse_encode(size, serializer); + } +} + impl SseEncode for String { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { @@ -3320,6 +3316,13 @@ impl SseEncode for crate::api::receive::MaybeMixedInputScripts { } } +impl SseEncode for crate::api::uri::OhttpKeys { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + >::sse_encode(self.0, serializer); + } +} + impl SseEncode for Option { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { diff --git a/rust/src/frb_generated.web.rs b/rust/src/frb_generated.web.rs index 6563092..308f68c 100644 --- a/rust/src/frb_generated.web.rs +++ b/rust/src/frb_generated.web.rs @@ -235,6 +235,23 @@ impl CstDecode crate::api::receive::MaybeMixedInputScripts(self_.get(0).cst_decode()) } } +impl CstDecode + for flutter_rust_bridge::for_generated::wasm_bindgen::JsValue +{ + // Codec=Cst (C-struct based), see doc to use other codecs + fn cst_decode(self) -> crate::api::uri::OhttpKeys { + let self_ = self + .dyn_into::() + .unwrap(); + assert_eq!( + self_.length(), + 1, + "Expected 1 elements, got {}", + self_.length() + ); + crate::api::uri::OhttpKeys(self_.get(0).cst_decode()) + } +} impl CstDecode> for Option { // Codec=Cst (C-struct based), see doc to use other codecs fn cst_decode(self) -> Option { @@ -1002,6 +1019,18 @@ impl CstDecode> unsafe { decode_rust_opaque_nom((self.as_f64().unwrap() as usize) as _) } } } +impl CstDecode> + for flutter_rust_bridge::for_generated::wasm_bindgen::JsValue +{ + // Codec=Cst (C-struct based), see doc to use other codecs + fn cst_decode(self) -> RustOpaqueNom { + #[cfg(target_pointer_width = "64")] + { + compile_error!("64-bit pointers are not supported."); + } + unsafe { decode_rust_opaque_nom((self.as_f64().unwrap() as usize) as _) } + } +} impl CstDecode for flutter_rust_bridge::for_generated::wasm_bindgen::JsValue { // Codec=Cst (C-struct based), see doc to use other codecs fn cst_decode(self) -> String { @@ -1093,14 +1122,6 @@ pub fn wire_enrolled_process_res( wire_enrolled_process_res_impl(port_, that, body, ctx) } -#[wasm_bindgen] -pub fn wire_enrolled_subdirectory( - port_: flutter_rust_bridge::for_generated::MessagePort, - that: flutter_rust_bridge::for_generated::wasm_bindgen::JsValue, -) { - wire_enrolled_subdirectory_impl(port_, that) -} - #[wasm_bindgen] pub fn wire_enroller_extract_req( port_: flutter_rust_bridge::for_generated::MessagePort, @@ -1110,21 +1131,13 @@ pub fn wire_enroller_extract_req( } #[wasm_bindgen] -pub fn wire_enroller_from_relay_config( +pub fn wire_enroller_from_directory_config( port_: flutter_rust_bridge::for_generated::MessagePort, - relay_url: String, - ohttp_config_base64: String, - ohttp_proxy_url: String, + directory: flutter_rust_bridge::for_generated::wasm_bindgen::JsValue, + ohttp_keys: flutter_rust_bridge::for_generated::wasm_bindgen::JsValue, + ohttp_relay: flutter_rust_bridge::for_generated::wasm_bindgen::JsValue, ) { - wire_enroller_from_relay_config_impl(port_, relay_url, ohttp_config_base64, ohttp_proxy_url) -} - -#[wasm_bindgen] -pub fn wire_enroller_payjoin_subdir( - port_: flutter_rust_bridge::for_generated::MessagePort, - that: flutter_rust_bridge::for_generated::wasm_bindgen::JsValue, -) { - wire_enroller_payjoin_subdir_impl(port_, that) + wire_enroller_from_directory_config_impl(port_, directory, ohttp_keys, ohttp_relay) } #[wasm_bindgen] @@ -1137,14 +1150,6 @@ pub fn wire_enroller_process_res( wire_enroller_process_res_impl(port_, that, body, ctx) } -#[wasm_bindgen] -pub fn wire_enroller_subdirectory( - port_: flutter_rust_bridge::for_generated::MessagePort, - that: flutter_rust_bridge::for_generated::wasm_bindgen::JsValue, -) { - wire_enroller_subdirectory_impl(port_, that) -} - #[wasm_bindgen] pub fn wire_maybe_inputs_owned_check_inputs_not_owned( port_: flutter_rust_bridge::for_generated::MessagePort, @@ -1567,11 +1572,19 @@ pub fn wire_request_context_extract_v1( pub fn wire_request_context_extract_v2( port_: flutter_rust_bridge::for_generated::MessagePort, ptr: flutter_rust_bridge::for_generated::wasm_bindgen::JsValue, - ohttp_proxy_url: String, + ohttp_proxy_url: flutter_rust_bridge::for_generated::wasm_bindgen::JsValue, ) { wire_request_context_extract_v2_impl(port_, ptr, ohttp_proxy_url) } +#[wasm_bindgen] +pub fn wire_ohttp_keys_decode( + port_: flutter_rust_bridge::for_generated::MessagePort, + bytes: Box<[u8]>, +) { + wire_ohttp_keys_decode_impl(port_, bytes) +} + #[wasm_bindgen] pub fn wire_uri_address( port_: flutter_rust_bridge::for_generated::MessagePort, @@ -2055,3 +2068,21 @@ pub fn rust_arc_decrement_strong_count_RustOpaque_payjoin_ffireceivev2V2Unchecke StdArc::::decrement_strong_count(ptr as _); } } + +#[wasm_bindgen] +pub fn rust_arc_increment_strong_count_RustOpaque_payjoin_ffitypesOhttpKeys( + ptr: *const std::ffi::c_void, +) { + unsafe { + StdArc::::increment_strong_count(ptr as _); + } +} + +#[wasm_bindgen] +pub fn rust_arc_decrement_strong_count_RustOpaque_payjoin_ffitypesOhttpKeys( + ptr: *const std::ffi::c_void, +) { + unsafe { + StdArc::::decrement_strong_count(ptr as _); + } +}