diff --git a/.github/workflows/analyze.yaml b/.github/workflows/analyze.yaml index 98c79a7b..37a16317 100644 --- a/.github/workflows/analyze.yaml +++ b/.github/workflows/analyze.yaml @@ -19,7 +19,11 @@ jobs: - name: Setup Dart SDK uses: dart-lang/setup-dart@v1.6.0 with: - sdk: "stable" + sdk: "3.2.3" + - name: Setup Flutter + uses: subosito/flutter-action@v2 + with: + flutter-version: "3.16.4" - name: Install Melos run: dart pub global activate melos diff --git a/.github/workflows/coverage.yaml b/.github/workflows/coverage.yaml index 04cdccea..ff0a4b4a 100644 --- a/.github/workflows/coverage.yaml +++ b/.github/workflows/coverage.yaml @@ -15,18 +15,17 @@ jobs: steps: - name: Set up Repository uses: actions/checkout@v2 - - name: List Files run: ls -R - name: Setup Dart SDK uses: dart-lang/setup-dart@v1.6.0 with: - sdk: "stable" + sdk: "3.2.3" - name: Setup Flutter uses: subosito/flutter-action@v2 with: - flutter-version: "3.16.0" + flutter-version: "3.16.4" - name: Install Melos run: dart pub global activate melos @@ -37,13 +36,12 @@ jobs: - name: Start TFChain Docker Container run: | sudo docker run -d --network host ghcr.io/threefoldtech/tfchain --dev --rpc-cors all --rpc-external --rpc-methods=safe - - name: Wait for TFChain to be ready run: | while ! nc -z localhost 9944; do echo "Waiting for TFChain to be ready..." sleep 5 - done + done - name: Run unit tests and generate coverage run: | diff --git a/packages/signer/pubspec.lock b/packages/signer/pubspec.lock index 2ef0633c..3649276c 100644 --- a/packages/signer/pubspec.lock +++ b/packages/signer/pubspec.lock @@ -133,10 +133,10 @@ packages: dependency: transitive description: name: ffi - sha256: "493f37e7df1804778ff3a53bd691d8692ddf69702cf4c1c1096a2e41b4779e21" + sha256: "7bf0adc28a23d395f19f3f1eb21dd7cfd1dd9f8e1c50051c069122e6853bc878" url: "https://pub.dev" source: hosted - version: "2.1.2" + version: "2.1.0" file: dependency: transitive description: @@ -517,10 +517,10 @@ packages: dependency: transitive description: name: vm_service - sha256: a75f83f14ad81d5fe4b3319710b90dec37da0e22612326b696c9e1b8f34bbf48 + sha256: a2662fb1f114f4296cf3f5a50786a2d888268d7776cf681aa17d660ffa23b246 url: "https://pub.dev" source: hosted - version: "14.2.0" + version: "14.0.0" watcher: dependency: transitive description: @@ -533,18 +533,18 @@ packages: dependency: transitive description: name: web - sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27" + sha256: "4188706108906f002b3a293509234588823c8c979dc83304e229ff400c996b05" url: "https://pub.dev" source: hosted - version: "0.5.1" + version: "0.4.2" web_socket_channel: dependency: transitive description: name: web_socket_channel - sha256: "58c6666b342a38816b2e7e50ed0f1e261959630becd4c879c4f26bfa14aa5a42" + sha256: "939ab60734a4f8fa95feacb55804fa278de28bdeef38e616dc08e44a84adea23" url: "https://pub.dev" source: hosted - version: "2.4.5" + version: "2.4.3" webkit_inspection_protocol: dependency: transitive description: @@ -562,4 +562,4 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.3.0 <4.0.0" + dart: ">=3.2.3 <4.0.0" diff --git a/packages/signer/pubspec.yaml b/packages/signer/pubspec.yaml index aadc6784..462f7d6e 100644 --- a/packages/signer/pubspec.yaml +++ b/packages/signer/pubspec.yaml @@ -3,7 +3,7 @@ description: A signer to sign and verify raw data version: 0.1.0 environment: - sdk: ^3.2.0 + sdk: ^3.2.3 dependencies: hex: ^0.2.0 diff --git a/packages/stellar_client/CHANGELOG.md b/packages/stellar_client/CHANGELOG.md new file mode 100644 index 00000000..effe43c8 --- /dev/null +++ b/packages/stellar_client/CHANGELOG.md @@ -0,0 +1,3 @@ +## 1.0.0 + +- Initial version. diff --git a/packages/stellar_client/README.md b/packages/stellar_client/README.md new file mode 100644 index 00000000..fbbe0ac1 --- /dev/null +++ b/packages/stellar_client/README.md @@ -0,0 +1,68 @@ +# Stellar Client + +This Dart client allows you to communicate with the Stellar network, enabling the creation or loading of existing Stellar accounts. It supports interactions with both the testnet and public network, and the assets currently supported are TFT (Threefold Token) and XLM (Stellar Lumens). + +## Installation + +To install the necessary dependencies, run: + +```bash +dart pub get +``` + +## Usage + +This client enables you to create new Stellar accounts or load existing ones on the testnet or public network. Once an account is created or loaded, you can manage assets such as TFT and XLM. + +### TESTNET + +Create new testnet account: + +- Use `Client.create(NetworkType.TESTNET)` to create a new client. +- Use `Client.createFromMnemonic(NetworkType.TESTNET, "mnemonic")` to create a client from an existing mnemonic. +- Account can be activated through friendbot (only for testnet). +- After activation, trustlines can be added to the account. + +```dart + import 'package:stellar_client/stellar_client.dart'; + + final stellarClient = Client.create(NetworkType.TESTNET); + // final stellarClient = await Client.createFromMnemonic(NetworkType.TESTNET, "mnemonic"); + + await stellarClient.activateThroughFriendBot(accountId: stellarClient.accountId); + await stellarClient.addTrustLine(); + + final balance = await stellarClient.getBalance(); + print(balance); +``` + +Load previously created account: + +- Accounts can be loaded from secret seed. + +```dart + import 'package:stellar_client/stellar_client.dart'; + + final stellarClient = Client(NetworkType.TESTNET, secretSeed); + final transactions = await stellarClient.getTransactions(); + print(transactions); +``` + +### PUBLIC + +- Activation through Threefold service will add assets automatically. + +```dart + import 'package:stellar_client/stellar_client.dart'; + + final stellarClient = Client.create(NetworkType.PUBLIC); + await stellarClient.activateThroughThreefoldService(); + + await stellarClient.transfer( + destinationAddress: "destination-public-key", + amount: "20", + currency: "TFT", + memoText: "Memo Text"); + + await stellarClient.getTransactions(); +``` diff --git a/packages/stellar_client/bin/stellar_client.dart b/packages/stellar_client/bin/stellar_client.dart new file mode 100644 index 00000000..c66f7d75 --- /dev/null +++ b/packages/stellar_client/bin/stellar_client.dart @@ -0,0 +1,14 @@ +import 'package:stellar_client/stellar_client.dart'; + +void main() async { + final stellarClient = Client.create(NetworkType.PUBLIC); + await stellarClient.activateThroughThreefoldService(); + + await stellarClient.transfer( + destinationAddress: "destination-public-key", + amount: "20", + currency: "TFT", + memoText: "Memo Text"); + + await stellarClient.getTransactions(); +} diff --git a/packages/stellar_client/lib/models/balance.dart b/packages/stellar_client/lib/models/balance.dart new file mode 100644 index 00000000..1a493610 --- /dev/null +++ b/packages/stellar_client/lib/models/balance.dart @@ -0,0 +1,18 @@ +abstract class BalanceInfo { + String get assetCode; + String get balance; +} + +class BalanceData implements BalanceInfo { + @override + final String assetCode; + @override + final String balance; + + BalanceData({required this.assetCode, required this.balance}); + + @override + String toString() { + return 'BalanceData(assetCode: $assetCode, balance: $balance)'; + } +} diff --git a/packages/stellar_client/lib/models/currency.dart b/packages/stellar_client/lib/models/currency.dart new file mode 100644 index 00000000..ef2261fd --- /dev/null +++ b/packages/stellar_client/lib/models/currency.dart @@ -0,0 +1,27 @@ +class Currency { + final String assetCode; + final String issuer; + + Currency({required this.assetCode, required this.issuer}); + + Map toJson() { + return { + 'asset_code': assetCode, + 'issuer': issuer, + }; + } +} + +class Currencies { + late final Map currencies; + + Currencies(this.currencies); + + Map toJson() { + Map jsonMap = {}; + currencies.forEach((key, value) { + jsonMap[key] = value.toJson(); + }); + return jsonMap; + } +} diff --git a/packages/stellar_client/lib/models/transaction_data.dart b/packages/stellar_client/lib/models/transaction_data.dart new file mode 100644 index 00000000..29d9e441 --- /dev/null +++ b/packages/stellar_client/lib/models/transaction_data.dart @@ -0,0 +1,24 @@ +class TransactionData { + final String asset; + final String feeAccountId; + final String feeFixed; + + TransactionData({ + required this.asset, + required this.feeAccountId, + required this.feeFixed, + }); + + factory TransactionData.fromJson(Map json) { + return TransactionData( + asset: json['asset'], + feeAccountId: json['fee_account_id'], + feeFixed: json['fee_fixed'], + ); + } + + @override + String toString() { + return 'TransactionData{asset: $asset, feeAccountId: $feeAccountId, feeFixed: $feeFixed}'; + } +} diff --git a/packages/stellar_client/lib/models/transactions.dart b/packages/stellar_client/lib/models/transactions.dart new file mode 100644 index 00000000..2fab2881 --- /dev/null +++ b/packages/stellar_client/lib/models/transactions.dart @@ -0,0 +1,58 @@ +class PaymentOperationDetails { + final String from; + final String to; + final double amount; + final String assetCode; + final bool isSuccessful; + + PaymentOperationDetails({ + required this.from, + required this.to, + required this.amount, + required this.assetCode, + required this.isSuccessful, + }); + + @override + String toString() { + return 'PaymentOperationDetails(from: $from, to: $to, amount: $amount, assetCode: $assetCode, isSuccessful: $isSuccessful)'; + } +} + +class CreateAccountOperationDetails { + final String account; + final double startingBalance; + + CreateAccountOperationDetails({ + required this.account, + required this.startingBalance, + }); + + @override + String toString() { + return 'CreateAccountOperationDetails(account: $account, startingBalance: $startingBalance)'; + } +} + +class PathPaymentStrictReceiveOperationDetails { + final String from; + final String to; + final double sourceAmount; + final String sourceAssetCode; + final double destinationAmount; + final String destinationAssetCode; + + PathPaymentStrictReceiveOperationDetails({ + required this.from, + required this.to, + required this.sourceAmount, + required this.sourceAssetCode, + required this.destinationAmount, + required this.destinationAssetCode, + }); + + @override + String toString() { + return 'PathPaymentStrictReceiveOperationDetails(from: $from, to: $to, sourceAmount: $sourceAmount, sourceAssetCode: $sourceAssetCode, destinationAmount: $destinationAmount, destinationAssetCode: $destinationAssetCode)'; + } +} diff --git a/packages/stellar_client/lib/src/client.dart b/packages/stellar_client/lib/src/client.dart new file mode 100644 index 00000000..b447c825 --- /dev/null +++ b/packages/stellar_client/lib/src/client.dart @@ -0,0 +1,443 @@ +part of '../stellar_client.dart'; + +class Client { + final NetworkType _network; + late StellarSDK _sdk; + late KeyPair _keyPair; + late currency.Currencies _currencies; + late Map _serviceUrls; + late Network _stellarNetwork; + + String get accountId => _keyPair.accountId; + String get secretSeed => _keyPair.secretSeed; + + Client(this._network, String secretSeed) { + _keyPair = KeyPair.fromSecretSeed(secretSeed); + _initialize(); + } + + factory Client.create(NetworkType network) { + final keyPair = KeyPair.random(); + return Client(network, keyPair.secretSeed); + } + + static Future createFromMnemonic( + NetworkType network, String mnemonic) async { + Wallet wallet = await Wallet.from(mnemonic); + final keyPair = await wallet.getKeyPair(); + return Client(network, keyPair.secretSeed); + } + + void _initialize() { + late final currency.Currency tft; + _serviceUrls = { + 'PUBLIC': 'https://tokenservices.threefold.io/threefoldfoundation', + 'TESTNET': 'https://testnet.threefold.io/threefoldfoundation' + }; + switch (_network) { + case NetworkType.TESTNET: + _sdk = StellarSDK.TESTNET; + _stellarNetwork = Network.TESTNET; + tft = currency.Currency( + assetCode: 'TFT', + issuer: "GA47YZA3PKFUZMPLQ3B5F2E3CJIB57TGGU7SPCQT2WAEYKN766PWIMB3", + ); + break; + case NetworkType.PUBLIC: + _sdk = StellarSDK.PUBLIC; + _stellarNetwork = Network.PUBLIC; + tft = currency.Currency( + assetCode: 'TFT', + issuer: "GBOVQKJYHXRR3DX6NOX2RRYFRCUMSADGDESTDNBDS6CDVLGVESRTAC47", + ); + break; + default: + throw Exception('Unsupported network type'); + } + + _currencies = currency.Currencies({'TFT': tft}); + } + + Future activateThroughThreefoldService() async { + Transaction? transaction = await _getActivationTransaction(); + if (transaction != null) { + transaction.sign(_keyPair, _stellarNetwork); + await _sdk.submitTransaction(transaction); + print("Account Activated Successfully."); + print("TFT Asset was added Successfully "); + return true; + } else { + throw Exception("Failed to retrieve activation transaction."); + } + } + + Future _getActivationTransaction() async { + try { + final response = await http.post( + Uri.parse( + '${_serviceUrls[_network.toString()]}/activation_service/activate_account'), + headers: {'Content-Type': 'application/json'}, + body: jsonEncode({'address': accountId}), + ); + + final data = jsonDecode(jsonDecode(response.body)); + String activationTransaction = data['activation_transaction']; + + XdrTransactionEnvelope xdrTxEnvelope = + XdrTransactionEnvelope.fromEnvelopeXdrString(activationTransaction); + + Transaction transaction = + Transaction.fromV1EnvelopeXdr(xdrTxEnvelope.v1!); + + return transaction; + } catch (error) { + throw Exception("Failed to activate: $error"); + } + } + + Future activateThroughFriendBot({required String accountId}) async { + if (_stellarNetwork != Network.TESTNET) { + throw Exception("Network should be TEST"); + } + try { + bool funded = await FriendBot.fundTestAccount(accountId); + if (funded) { + print("Account funded successfully"); + } else { + print("Failed to fund account"); + } + return funded; + } catch (error) { + print("Error while funding account: $error"); + return false; + } + } + + Future addTrustLine() async { + for (var entry in _currencies.currencies.entries) { + String currencyCode = entry.key; + currency.Currency currentCurrency = entry.value; + + String issuerAccountId = currentCurrency.issuer; + Asset currencyAsset = + AssetTypeCreditAlphaNum4(currentCurrency.assetCode, issuerAccountId); + + ChangeTrustOperationBuilder changeTrustOperation = + ChangeTrustOperationBuilder(currencyAsset, "300000"); + + final account = await _sdk.accounts.account(accountId); + + Transaction transaction = TransactionBuilder(account) + .addOperation(changeTrustOperation.build()) + .build(); + transaction.sign(_keyPair, _stellarNetwork); + + SubmitTransactionResponse response = + await _sdk.submitTransaction(transaction); + + if (!response.success) { + print("Failed to add trustline for $currencyCode"); + return false; + } else { + print("trustline for $currencyCode was added successfully"); + return true; + } + } + + print("No trustlines were processed"); + return false; + } + + Future transfer( + {required String destinationAddress, + required String amount, + required String currency, + String? memoText}) async { + try { + Transaction? transaction = await _buildTransaction( + destinationAddress: destinationAddress, + amount: amount, + currency: currency, + funded: false); + + transaction!.sign(_keyPair, _stellarNetwork); + await _sdk.submitTransaction(transaction); + print("Transaction successful."); + return true; + } catch (error) { + print("Failed to send transaction: $error"); + return false; + } + } + + Future activateThroughActivationWallet( + {required String activationWalletSecretSeed}) async { + try { + KeyPair walletKeyPair = + KeyPair.fromSecretSeed(activationWalletSecretSeed); + AccountResponse existingAccount = + await _sdk.accounts.account(walletKeyPair.accountId); + + Transaction transaction = TransactionBuilder(existingAccount) + .addOperation(CreateAccountOperationBuilder(accountId, "1").build()) + .build(); + + transaction.sign(walletKeyPair, _stellarNetwork); + + await _sdk.submitTransaction(transaction); + return true; + } catch (error) { + print("Failed to create account $error"); + return false; + } + } + + // take asset code && issuer (optional) + Future addTrustLineThroughThreefoldService(String asset_code) async { + final asset = _currencies.currencies[asset_code]; + if (asset == null) { + throw Exception("Asset $asset_code not supported"); + } + + try { + final response = await http.post( + Uri.parse( + '${_serviceUrls[_network.toString()]}/activation_service/fund_trustline'), + headers: {'Content-Type': 'application/json'}, + body: jsonEncode({ + 'asset': '${asset.assetCode}:${asset.issuer}', + 'address': accountId + }), + ); + + final data = jsonDecode(response.body); + + String trustlineTransaction = data['addtrustline_transaction']; + XdrTransactionEnvelope xdrTxEnvelope = + XdrTransactionEnvelope.fromEnvelopeXdrString(trustlineTransaction); + + Transaction transaction = + Transaction.fromV1EnvelopeXdr(xdrTxEnvelope.v1!); + + transaction.sign(_keyPair, _stellarNetwork); + + SubmitTransactionResponse response2 = + await _sdk.submitTransaction(transaction); + + if (response2.success) { + print("Trustline for $asset_code added successfully."); + return true; + } else { + print("Failed to add trustline for $asset_code."); + return false; + } + } catch (error) { + throw Exception("Error funding trustline : $error"); + } + } + + Future _fetchFundDetails( + {required String assetCode}) async { + try { + final response = await http.get( + Uri.parse( + '${_serviceUrls[_network.toString()]}/transactionfunding_service/conditions'), + headers: {'Content-Type': 'application/json'}, + ); + + final body = jsonDecode(response.body); + Map? details; + for (var item in body) { + if (item['asset'].startsWith(assetCode)) { + details = item; + break; + } + } + + if (details != null) { + TransactionData transactionData = TransactionData.fromJson(details); + print(transactionData); + return transactionData; + } else { + print('Failed to details for asset: '); + } + + return null; + } catch (error) { + throw Exception("Failed to get fund details, $error"); + } + } + + Future _makeFundPaymentOperation( + {required String assetCode, required String issuer}) async { + TransactionData? transactionData = + await _fetchFundDetails(assetCode: assetCode); + Asset asset = AssetTypeCreditAlphaNum4(assetCode, issuer); + + return PaymentOperationBuilder( + transactionData!.feeAccountId, asset, transactionData.feeFixed) + .build(); + } + + Future _buildTransaction( + {required String destinationAddress, + required String amount, + required String currency, + String? memoText, + required bool funded}) async { + // check that receiver account exists + final receiver = await _sdk.accounts.account(accountId); + + // check that asset exists + var specificBalance = receiver.balances.firstWhere( + (balance) => balance.assetCode == currency, + orElse: () { + throw Exception('Balance with asset code ${currency} not found.'); + }, + ); + + final asset = _currencies.currencies[currency]; + if (asset == null) { + throw Exception('${currency} not supported'); + } + + AccountResponse sender = await _sdk.accounts.account(accountId); + Asset tftAsset = AssetTypeCreditAlphaNum4(asset.assetCode, asset.issuer); + Transaction? transaction; + + if (funded) { + Operation? paymentOperation = await _makeFundPaymentOperation( + assetCode: asset.assetCode, issuer: asset.issuer); + transaction = TransactionBuilder(sender) + .addOperation(paymentOperation!) + .addOperation( + PaymentOperationBuilder(destinationAddress, tftAsset, amount) + .build()) + .addMemo(memoText != null ? Memo.text(memoText) : Memo.none()) + .build(); + } else { + transaction = TransactionBuilder(sender) + .addOperation( + PaymentOperationBuilder(destinationAddress, tftAsset, amount) + .build()) + .addMemo(memoText != null ? Memo.text(memoText) : Memo.none()) + .build(); + } + + return transaction; + } + + Future transferThroughThreefoldService( + {required String destinationAddress, + required String amount, + required String currency, + String? memoText}) async { + Transaction? fundedTransaction = await _buildTransaction( + destinationAddress: destinationAddress, + amount: amount, + currency: currency, + funded: true); + + fundedTransaction!.sign(_keyPair, _stellarNetwork); + + print('Sending to'); + print( + '${_serviceUrls[_network.toString()]}/transactionfunding_service/fund_transaction'); + + try { + final response = await http.post( + Uri.parse( + '${_serviceUrls[_network.toString()]}/transactionfunding_service/fund_transaction'), + headers: {'Content-Type': 'application/json'}, + body: jsonEncode({'transaction': fundedTransaction.toXdr()}), + ); + + print(response.body); + } catch (error) { + throw Exception('Something went wrong! $error'); + } + } + + Future>> getTransactions() async { + Page payments = await _sdk.payments + .forAccount(accountId) + .order(RequestBuilderOrder.DESC) + .execute(); + List> transactionDetails = []; + + if (payments.records != null && payments.records!.isNotEmpty) { + for (OperationResponse response in payments.records!) { + if (response is PaymentOperationResponse) { + var details = _handlePaymentOperationResponse(response); + transactionDetails.add({'type': 'Payment', 'details': details}); + } else if (response is CreateAccountOperationResponse) { + var details = _handleCreateAccountOperationResponse(response); + transactionDetails.add({'type': 'CreateAccount', 'details': details}); + } else if (response is PathPaymentStrictReceiveOperationResponse) { + var details = + _handlePathPaymentStrictReceiveOperationResponse(response); + transactionDetails + .add({'type': 'PathPaymentStrictReceive', 'details': details}); + } else { + print("Unhandled operation type: ${response.runtimeType}"); + } + } + } else { + print("No payment records found."); + } + + return transactionDetails; + } + + PathPaymentStrictReceiveOperationDetails + _handlePathPaymentStrictReceiveOperationResponse( + PathPaymentStrictReceiveOperationResponse response) { + return PathPaymentStrictReceiveOperationDetails( + from: response.from!, + to: response.to!, + sourceAmount: double.parse(response.sourceAmount!), + sourceAssetCode: response.sourceAssetCode ?? 'XLM', + destinationAmount: double.parse(response.amount!), + destinationAssetCode: response.assetCode!, + ); + } + + PaymentOperationDetails _handlePaymentOperationResponse( + PaymentOperationResponse response) { + return PaymentOperationDetails( + from: response.from!.accountId, + to: response.to!.accountId, + amount: double.parse(response.amount!), + assetCode: response.assetCode ?? 'XLM', + isSuccessful: response.transactionSuccessful!, + ); + } + + CreateAccountOperationDetails _handleCreateAccountOperationResponse( + CreateAccountOperationResponse response) { + return CreateAccountOperationDetails( + account: response.account!, + startingBalance: double.parse(response.startingBalance!), + ); + } + + Future> getBalance() async { + List balancesList = []; + AccountResponse account = await _sdk.accounts.account(accountId); + + for (Balance balance in account.balances) { + BalanceData balanceData; + switch (balance.assetType) { + case Asset.TYPE_NATIVE: + balanceData = BalanceData(assetCode: 'XLM', balance: balance.balance); + break; + default: + balanceData = BalanceData( + assetCode: balance.assetCode!, balance: balance.balance); + } + balancesList.add(balanceData); + } + + return balancesList; + } +} diff --git a/packages/stellar_client/lib/src/network_types.dart b/packages/stellar_client/lib/src/network_types.dart new file mode 100644 index 00000000..dcb89090 --- /dev/null +++ b/packages/stellar_client/lib/src/network_types.dart @@ -0,0 +1,16 @@ +part of '../stellar_client.dart'; + +enum NetworkType { + TESTNET, + PUBLIC; + + @override + String toString() { + switch (this) { + case NetworkType.TESTNET: + return 'TESTNET'; + case NetworkType.PUBLIC: + return 'PUBLIC'; + } + } +} diff --git a/packages/stellar_client/lib/stellar_client.dart b/packages/stellar_client/lib/stellar_client.dart new file mode 100644 index 00000000..2cbdcbe9 --- /dev/null +++ b/packages/stellar_client/lib/stellar_client.dart @@ -0,0 +1,13 @@ +library client; + +import 'dart:convert'; + +import 'package:stellar_client/models/balance.dart'; +import 'package:stellar_client/models/currency.dart' as currency; +import 'package:stellar_client/models/transaction_data.dart'; +import 'package:stellar_client/models/transactions.dart'; +import 'package:stellar_flutter_sdk/stellar_flutter_sdk.dart'; +import 'package:http/http.dart' as http; + +part 'src/client.dart'; +part 'src/network_types.dart'; diff --git a/packages/stellar_client/pubspec.lock b/packages/stellar_client/pubspec.lock new file mode 100644 index 00000000..c3375831 --- /dev/null +++ b/packages/stellar_client/pubspec.lock @@ -0,0 +1,511 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + _fe_analyzer_shared: + dependency: transitive + description: + name: _fe_analyzer_shared + sha256: eb376e9acf6938204f90eb3b1f00b578640d3188b4c8a8ec054f9f479af8d051 + url: "https://pub.dev" + source: hosted + version: "64.0.0" + analyzer: + dependency: transitive + description: + name: analyzer + sha256: "69f54f967773f6c26c7dcb13e93d7ccee8b17a641689da39e878d5cf13b06893" + url: "https://pub.dev" + source: hosted + version: "6.2.0" + args: + dependency: transitive + description: + name: args + sha256: "7cf60b9f0cc88203c5a190b4cd62a99feea42759a7fa695010eb5de1c0b2252a" + url: "https://pub.dev" + source: hosted + version: "2.5.0" + async: + dependency: transitive + description: + name: async + sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" + url: "https://pub.dev" + source: hosted + version: "2.11.0" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + characters: + dependency: transitive + description: + name: characters + sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" + url: "https://pub.dev" + source: hosted + version: "1.3.0" + collection: + dependency: transitive + description: + name: collection + sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a + url: "https://pub.dev" + source: hosted + version: "1.18.0" + convert: + dependency: transitive + description: + name: convert + sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" + url: "https://pub.dev" + source: hosted + version: "3.1.1" + coverage: + dependency: transitive + description: + name: coverage + sha256: "3945034e86ea203af7a056d98e98e42a5518fff200d6e8e6647e1886b07e936e" + url: "https://pub.dev" + source: hosted + version: "1.8.0" + crypto: + dependency: transitive + description: + name: crypto + sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab + url: "https://pub.dev" + source: hosted + version: "3.0.3" + decimal: + dependency: transitive + description: + name: decimal + sha256: "24a261d5d5c87e86c7651c417a5dbdf8bcd7080dd592533910e8d0505a279f21" + url: "https://pub.dev" + source: hosted + version: "2.3.3" + dio: + dependency: transitive + description: + name: dio + sha256: "0dfb6b6a1979dac1c1245e17cef824d7b452ea29bd33d3467269f9bef3715fb0" + url: "https://pub.dev" + source: hosted + version: "5.6.0" + dio_web_adapter: + dependency: transitive + description: + name: dio_web_adapter + sha256: "36c5b2d79eb17cdae41e974b7a8284fec631651d2a6f39a8a2ff22327e90aeac" + url: "https://pub.dev" + source: hosted + version: "1.0.1" + file: + dependency: transitive + description: + name: file + sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c" + url: "https://pub.dev" + source: hosted + version: "7.0.0" + fixnum: + dependency: transitive + description: + name: fixnum + sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1" + url: "https://pub.dev" + source: hosted + version: "1.1.0" + flutter: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + frontend_server_client: + dependency: transitive + description: + name: frontend_server_client + sha256: f64a0333a82f30b0cca061bc3d143813a486dc086b574bfb233b7c1372427694 + url: "https://pub.dev" + source: hosted + version: "4.0.0" + glob: + dependency: transitive + description: + name: glob + sha256: "0e7014b3b7d4dac1ca4d6114f82bf1782ee86745b9b42a92c9289c23d8a0ab63" + url: "https://pub.dev" + source: hosted + version: "2.1.2" + http: + dependency: "direct main" + description: + name: http + sha256: a2bbf9d017fcced29139daa8ed2bba4ece450ab222871df93ca9eec6f80c34ba + url: "https://pub.dev" + source: hosted + version: "1.2.0" + http_multi_server: + dependency: transitive + description: + name: http_multi_server + sha256: "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b" + url: "https://pub.dev" + source: hosted + version: "3.2.1" + http_parser: + dependency: transitive + description: + name: http_parser + sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" + url: "https://pub.dev" + source: hosted + version: "4.0.2" + io: + dependency: transitive + description: + name: io + sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e" + url: "https://pub.dev" + source: hosted + version: "1.0.4" + js: + dependency: transitive + description: + name: js + sha256: c1b2e9b5ea78c45e1a0788d29606ba27dc5f71f019f32ca5140f61ef071838cf + url: "https://pub.dev" + source: hosted + version: "0.7.1" + lints: + dependency: "direct dev" + description: + name: lints + sha256: cbf8d4b858bb0134ef3ef87841abdf8d63bfc255c266b7bf6b39daa1085c4290 + url: "https://pub.dev" + source: hosted + version: "3.0.0" + logging: + dependency: transitive + description: + name: logging + sha256: "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340" + url: "https://pub.dev" + source: hosted + version: "1.2.0" + matcher: + dependency: transitive + description: + name: matcher + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb + url: "https://pub.dev" + source: hosted + version: "0.12.16+1" + material_color_utilities: + dependency: transitive + description: + name: material_color_utilities + sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + url: "https://pub.dev" + source: hosted + version: "0.5.0" + meta: + dependency: transitive + description: + name: meta + sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e + url: "https://pub.dev" + source: hosted + version: "1.10.0" + mime: + dependency: transitive + description: + name: mime + sha256: "2e123074287cc9fd6c09de8336dae606d1ddb88d9ac47358826db698c176a1f2" + url: "https://pub.dev" + source: hosted + version: "1.0.5" + node_preamble: + dependency: transitive + description: + name: node_preamble + sha256: "6e7eac89047ab8a8d26cf16127b5ed26de65209847630400f9aefd7cd5c730db" + url: "https://pub.dev" + source: hosted + version: "2.0.2" + package_config: + dependency: transitive + description: + name: package_config + sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + path: + dependency: transitive + description: + name: path + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" + url: "https://pub.dev" + source: hosted + version: "1.9.0" + petitparser: + dependency: transitive + description: + name: petitparser + sha256: cb3798bef7fc021ac45b308f4b51208a152792445cce0448c9a4ba5879dd8750 + url: "https://pub.dev" + source: hosted + version: "5.4.0" + pinenacl: + dependency: transitive + description: + name: pinenacl + sha256: "3a5503637587d635647c93ea9a8fecf48a420cc7deebe6f1fc85c2a5637ab327" + url: "https://pub.dev" + source: hosted + version: "0.5.1" + pointycastle: + dependency: transitive + description: + name: pointycastle + sha256: "4be0097fcf3fd3e8449e53730c631200ebc7b88016acecab2b0da2f0149222fe" + url: "https://pub.dev" + source: hosted + version: "3.9.1" + pool: + dependency: transitive + description: + name: pool + sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a" + url: "https://pub.dev" + source: hosted + version: "1.5.1" + pub_semver: + dependency: transitive + description: + name: pub_semver + sha256: "40d3ab1bbd474c4c2328c91e3a7df8c6dd629b79ece4c4bd04bee496a224fb0c" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + rational: + dependency: transitive + description: + name: rational + sha256: cb808fb6f1a839e6fc5f7d8cb3b0a10e1db48b3be102de73938c627f0b636336 + url: "https://pub.dev" + source: hosted + version: "2.2.3" + shelf: + dependency: transitive + description: + name: shelf + sha256: ad29c505aee705f41a4d8963641f91ac4cee3c8fad5947e033390a7bd8180fa4 + url: "https://pub.dev" + source: hosted + version: "1.4.1" + shelf_packages_handler: + dependency: transitive + description: + name: shelf_packages_handler + sha256: "89f967eca29607c933ba9571d838be31d67f53f6e4ee15147d5dc2934fee1b1e" + url: "https://pub.dev" + source: hosted + version: "3.0.2" + shelf_static: + dependency: transitive + description: + name: shelf_static + sha256: a41d3f53c4adf0f57480578c1d61d90342cd617de7fc8077b1304643c2d85c1e + url: "https://pub.dev" + source: hosted + version: "1.1.2" + shelf_web_socket: + dependency: transitive + description: + name: shelf_web_socket + sha256: "9ca081be41c60190ebcb4766b2486a7d50261db7bd0f5d9615f2d653637a84c1" + url: "https://pub.dev" + source: hosted + version: "1.0.4" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.99" + source_map_stack_trace: + dependency: transitive + description: + name: source_map_stack_trace + sha256: "84cf769ad83aa6bb61e0aa5a18e53aea683395f196a6f39c4c881fb90ed4f7ae" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + source_maps: + dependency: transitive + description: + name: source_maps + sha256: "708b3f6b97248e5781f493b765c3337db11c5d2c81c3094f10904bfa8004c703" + url: "https://pub.dev" + source: hosted + version: "0.10.12" + source_span: + dependency: transitive + description: + name: source_span + sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" + url: "https://pub.dev" + source: hosted + version: "1.10.0" + stack_trace: + dependency: transitive + description: + name: stack_trace + sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" + url: "https://pub.dev" + source: hosted + version: "1.11.1" + stellar_flutter_sdk: + dependency: "direct main" + description: + name: stellar_flutter_sdk + sha256: "7d505963fe11d0f90b3f798964c485ed9fa64731c38f14c9b2fb76d5d5bd6cd8" + url: "https://pub.dev" + source: hosted + version: "1.8.1" + stream_channel: + dependency: transitive + description: + name: stream_channel + sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 + url: "https://pub.dev" + source: hosted + version: "2.1.2" + string_scanner: + dependency: transitive + description: + name: string_scanner + sha256: "688af5ed3402a4bde5b3a6c15fd768dbf2621a614950b17f04626c431ab3c4c3" + url: "https://pub.dev" + source: hosted + version: "1.3.0" + term_glyph: + dependency: transitive + description: + name: term_glyph + sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + url: "https://pub.dev" + source: hosted + version: "1.2.1" + test: + dependency: "direct dev" + description: + name: test + sha256: "7ee446762c2c50b3bd4ea96fe13ffac69919352bd3b4b17bac3f3465edc58073" + url: "https://pub.dev" + source: hosted + version: "1.25.2" + test_api: + dependency: transitive + description: + name: test_api + sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" + url: "https://pub.dev" + source: hosted + version: "0.7.0" + test_core: + dependency: transitive + description: + name: test_core + sha256: "2bc4b4ecddd75309300d8096f781c0e3280ca1ef85beda558d33fcbedc2eead4" + url: "https://pub.dev" + source: hosted + version: "0.6.0" + toml: + dependency: transitive + description: + name: toml + sha256: "69756bc12eccf279b72217a87310d217efc4b3752f722e890f672801f19ac485" + url: "https://pub.dev" + source: hosted + version: "0.13.1" + typed_data: + dependency: transitive + description: + name: typed_data + sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c + url: "https://pub.dev" + source: hosted + version: "1.3.2" + unorm_dart: + dependency: transitive + description: + name: unorm_dart + sha256: "5b35bff83fce4d76467641438f9e867dc9bcfdb8c1694854f230579d68cd8f4b" + url: "https://pub.dev" + source: hosted + version: "0.2.0" + vector_math: + dependency: transitive + description: + name: vector_math + sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + vm_service: + dependency: transitive + description: + name: vm_service + sha256: a2662fb1f114f4296cf3f5a50786a2d888268d7776cf681aa17d660ffa23b246 + url: "https://pub.dev" + source: hosted + version: "14.0.0" + watcher: + dependency: transitive + description: + name: watcher + sha256: "3d2ad6751b3c16cf07c7fca317a1413b3f26530319181b37e3b9039b84fc01d8" + url: "https://pub.dev" + source: hosted + version: "1.1.0" + web: + dependency: transitive + description: + name: web + sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 + url: "https://pub.dev" + source: hosted + version: "0.3.0" + web_socket_channel: + dependency: transitive + description: + name: web_socket_channel + sha256: d88238e5eac9a42bb43ca4e721edba3c08c6354d4a53063afaa568516217621b + url: "https://pub.dev" + source: hosted + version: "2.4.0" + webkit_inspection_protocol: + dependency: transitive + description: + name: webkit_inspection_protocol + sha256: "87d3f2333bb240704cd3f1c6b5b7acd8a10e7f0bc28c28dcf14e782014f4a572" + url: "https://pub.dev" + source: hosted + version: "1.2.1" + yaml: + dependency: transitive + description: + name: yaml + sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5" + url: "https://pub.dev" + source: hosted + version: "3.1.2" +sdks: + dart: ">=3.2.3 <4.0.0" diff --git a/packages/stellar_client/pubspec.yaml b/packages/stellar_client/pubspec.yaml new file mode 100644 index 00000000..677ed89c --- /dev/null +++ b/packages/stellar_client/pubspec.yaml @@ -0,0 +1,15 @@ +name: stellar_client +description: A sample command-line application. +version: 0.1.0 + +environment: + sdk: ^3.2.3 + +# Add regular dependencies here. +dependencies: + http: 1.2.0 + stellar_flutter_sdk: ^1.7.5 + +dev_dependencies: + lints: ^3.0.0 + test: ^1.24.0 diff --git a/packages/tfchain_client/pubspec.lock b/packages/tfchain_client/pubspec.lock index 5ba701bc..afe54897 100644 --- a/packages/tfchain_client/pubspec.lock +++ b/packages/tfchain_client/pubspec.lock @@ -181,10 +181,10 @@ packages: dependency: transitive description: name: ffi - sha256: "493f37e7df1804778ff3a53bd691d8692ddf69702cf4c1c1096a2e41b4779e21" + sha256: "7bf0adc28a23d395f19f3f1eb21dd7cfd1dd9f8e1c50051c069122e6853bc878" url: "https://pub.dev" source: hosted - version: "2.1.2" + version: "2.1.0" file: dependency: transitive description: @@ -253,10 +253,10 @@ packages: dependency: transitive description: name: http - sha256: "761a297c042deedc1ffbb156d6e2af13886bb305c2a343a4d972504cd67dd938" + sha256: a2bbf9d017fcced29139daa8ed2bba4ece450ab222871df93ca9eec6f80c34ba url: "https://pub.dev" source: hosted - version: "1.2.1" + version: "1.2.0" http_multi_server: dependency: transitive description: @@ -516,12 +516,10 @@ packages: signer: dependency: "direct main" description: - path: "packages/signer" - ref: main - resolved-ref: "3663a356a722c082aa0b68d5405f42b3885beedb" - url: "https://github.com/codescalers/tfgrid-sdk-dart.git" - source: git - version: "1.0.0" + path: "../signer" + relative: true + source: path + version: "0.1.0" source_map_stack_trace: dependency: transitive description: @@ -694,10 +692,10 @@ packages: dependency: transitive description: name: vm_service - sha256: f652077d0bdf60abe4c1f6377448e8655008eef28f128bc023f7b5e8dfeb48fc + sha256: a2662fb1f114f4296cf3f5a50786a2d888268d7776cf681aa17d660ffa23b246 url: "https://pub.dev" source: hosted - version: "14.2.4" + version: "14.0.0" watcher: dependency: transitive description: @@ -710,18 +708,18 @@ packages: dependency: transitive description: name: web - sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27" + sha256: "4188706108906f002b3a293509234588823c8c979dc83304e229ff400c996b05" url: "https://pub.dev" source: hosted - version: "0.5.1" + version: "0.4.2" web_socket_channel: dependency: transitive description: name: web_socket_channel - sha256: "58c6666b342a38816b2e7e50ed0f1e261959630becd4c879c4f26bfa14aa5a42" + sha256: "939ab60734a4f8fa95feacb55804fa278de28bdeef38e616dc08e44a84adea23" url: "https://pub.dev" source: hosted - version: "2.4.5" + version: "2.4.3" webkit_inspection_protocol: dependency: transitive description: @@ -747,4 +745,4 @@ packages: source: hosted version: "1.1.4+10" sdks: - dart: ">=3.3.0 <4.0.0" + dart: ">=3.2.3 <4.0.0" diff --git a/packages/tfchain_client/pubspec.yaml b/packages/tfchain_client/pubspec.yaml index 244faceb..c1a2012e 100644 --- a/packages/tfchain_client/pubspec.yaml +++ b/packages/tfchain_client/pubspec.yaml @@ -3,7 +3,7 @@ description: A sample command-line application. version: 0.1.0 environment: - sdk: ^3.2.0 + sdk: ^3.2.3 dependencies: polkadart: ^0.4.3 diff --git a/packages/tfchain_client/pubspec_overrides.yaml b/packages/tfchain_client/pubspec_overrides.yaml new file mode 100644 index 00000000..d976a4b4 --- /dev/null +++ b/packages/tfchain_client/pubspec_overrides.yaml @@ -0,0 +1,4 @@ +# melos_managed_dependency_overrides: signer +dependency_overrides: + signer: + path: ../signer diff --git a/pubspec.lock b/pubspec.lock index b857d454..ce9e1682 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -141,10 +141,10 @@ packages: dependency: transitive description: name: collection - sha256: a1ace0a119f20aabc852d165077c036cd864315bd99b7eaa10a60100341941bf + sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a url: "https://pub.dev" source: hosted - version: "1.19.0" + version: "1.18.0" conventional_commit: dependency: transitive description: @@ -165,10 +165,10 @@ packages: dependency: "direct main" description: name: coverage - sha256: "576aaab8b1abdd452e0f656c3e73da9ead9d7880e15bdc494189d9c1a1baf0db" + sha256: "3945034e86ea203af7a056d98e98e42a5518fff200d6e8e6647e1886b07e936e" url: "https://pub.dev" source: hosted - version: "1.9.0" + version: "1.8.0" crypto: dependency: transitive description: @@ -221,10 +221,10 @@ packages: dependency: transitive description: name: ffi - sha256: "493f37e7df1804778ff3a53bd691d8692ddf69702cf4c1c1096a2e41b4779e21" + sha256: "7bf0adc28a23d395f19f3f1eb21dd7cfd1dd9f8e1c50051c069122e6853bc878" url: "https://pub.dev" source: hosted - version: "2.1.2" + version: "2.1.0" file: dependency: transitive description: @@ -301,10 +301,10 @@ packages: dependency: transitive description: name: http - sha256: "761a297c042deedc1ffbb156d6e2af13886bb305c2a343a4d972504cd67dd938" + sha256: a2bbf9d017fcced29139daa8ed2bba4ece450ab222871df93ca9eec6f80c34ba url: "https://pub.dev" source: hosted - version: "1.2.1" + version: "1.2.0" http_multi_server: dependency: transitive description: @@ -317,10 +317,10 @@ packages: dependency: transitive description: name: http_parser - sha256: "40f592dd352890c3b60fec1b68e786cefb9603e05ff303dbc4dda49b304ecdf4" + sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" url: "https://pub.dev" source: hosted - version: "4.1.0" + version: "4.0.2" intl: dependency: transitive description: @@ -597,10 +597,10 @@ packages: dependency: transitive description: name: shelf - sha256: e7dd780a7ffb623c57850b33f43309312fc863fb6aa3d276a754bb299839ef12 + sha256: ad29c505aee705f41a4d8963641f91ac4cee3c8fad5947e033390a7bd8180fa4 url: "https://pub.dev" source: hosted - version: "1.4.2" + version: "1.4.1" shelf_packages_handler: dependency: transitive description: @@ -742,26 +742,26 @@ packages: dependency: "direct dev" description: name: test - sha256: "713a8789d62f3233c46b4a90b174737b2c04cb6ae4500f2aa8b1be8f03f5e67f" + sha256: "7ee44229615f8f642b68120165ae4c2a75fe77ae2065b1e55ae4711f6cf0899e" url: "https://pub.dev" source: hosted - version: "1.25.8" + version: "1.25.7" test_api: dependency: transitive description: name: test_api - sha256: "664d3a9a64782fcdeb83ce9c6b39e78fd2971d4e37827b9b06c3aa1edc5e760c" + sha256: "5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb" url: "https://pub.dev" source: hosted - version: "0.7.3" + version: "0.7.2" test_core: dependency: transitive description: name: test_core - sha256: "12391302411737c176b0b5d6491f466b0dd56d4763e347b6714efbaa74d7953d" + sha256: "55ea5a652e38a1dfb32943a7973f3681a60f872f8c3a05a14664ad54ef9c6696" url: "https://pub.dev" source: hosted - version: "0.6.5" + version: "0.6.4" tfchain_client: dependency: "direct main" description: @@ -813,10 +813,10 @@ packages: dependency: transitive description: name: vm_service - sha256: f652077d0bdf60abe4c1f6377448e8655008eef28f128bc023f7b5e8dfeb48fc + sha256: a2662fb1f114f4296cf3f5a50786a2d888268d7776cf681aa17d660ffa23b246 url: "https://pub.dev" source: hosted - version: "14.2.4" + version: "14.0.0" watcher: dependency: transitive description: @@ -829,18 +829,18 @@ packages: dependency: transitive description: name: web - sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27" + sha256: "4188706108906f002b3a293509234588823c8c979dc83304e229ff400c996b05" url: "https://pub.dev" source: hosted - version: "0.5.1" + version: "0.4.2" web_socket_channel: dependency: transitive description: name: web_socket_channel - sha256: "58c6666b342a38816b2e7e50ed0f1e261959630becd4c879c4f26bfa14aa5a42" + sha256: "939ab60734a4f8fa95feacb55804fa278de28bdeef38e616dc08e44a84adea23" url: "https://pub.dev" source: hosted - version: "2.4.5" + version: "2.4.3" webkit_inspection_protocol: dependency: transitive description: @@ -874,4 +874,4 @@ packages: source: hosted version: "1.1.4+10" sdks: - dart: ">=3.4.0 <4.0.0" + dart: ">=3.2.3 <4.0.0" diff --git a/pubspec.yaml b/pubspec.yaml index ae38e66c..45003a69 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -3,7 +3,7 @@ description: A sample command-line application. version: 1.0.0 environment: - sdk: ^3.2.0 + sdk: ^3.2.3 dev_dependencies: lints: ">=3.0.0 <5.0.0"