#
tokens: 47601/50000 10/942 files (page 27/93)
lines: on (toggle) GitHub
raw markdown copy reset
This is page 27 of 93. Use http://codebase.md/goplausible/algorand-mcp?lines=true&page={x} to view the full context.

# Directory Structure

```
├── .gitignore
├── CONTRIBUTING.md
├── LICENSE
├── llms-install.md
├── llms.txt
├── package.json
├── packages
│   ├── client
│   │   ├── .env.example
│   │   ├── package.json
│   │   ├── README.md
│   │   ├── src
│   │   │   ├── env.ts
│   │   │   ├── index.ts
│   │   │   └── LocalWallet.ts
│   │   └── tsconfig.json
│   └── server
│       ├── .env.example
│       ├── API specs
│       │   ├── algod_api.json
│       │   ├── indexer_api.json
│       │   ├── mcp.json
│       │   ├── nfd_api.json
│       │   ├── ultrade_api.json
│       │   ├── vestige_api.json
│       │   └── vestige_free_api.json
│       ├── Dockerfile
│       ├── jest.config.js
│       ├── package.json
│       ├── README.md
│       ├── smithery.yaml
│       ├── src
│       │   ├── algorand-client.ts
│       │   ├── env.ts
│       │   ├── index.ts
│       │   ├── resources
│       │   │   ├── index.ts
│       │   │   ├── knowledge
│       │   │   │   ├── ARCs.txt
│       │   │   │   ├── developers-algokit-architecture-decisions.txt
│       │   │   │   ├── developers-algokit-cli.txt
│       │   │   │   ├── developers-algokit-utils-python.txt
│       │   │   │   ├── developers-algokit-utils-typescript.txt
│       │   │   │   ├── developers-clis.txt
│       │   │   │   ├── developers-details.txt
│       │   │   │   ├── developers-liquid-auth.txt
│       │   │   │   ├── developers-nodes.txt
│       │   │   │   ├── developers-puya.txt
│       │   │   │   ├── developers-python.txt
│       │   │   │   ├── developers-sdks-js.txt
│       │   │   │   ├── developers-sdks-python.txt
│       │   │   │   ├── developers-tealscript.txt
│       │   │   │   ├── developers.txt
│       │   │   │   ├── index.ts
│       │   │   │   ├── taxonomy
│       │   │   │   │   ├── algokit-cli:README.md
│       │   │   │   │   ├── algokit:cli:algokit.md
│       │   │   │   │   ├── algokit:cli:architecture-decisions:2022-11-14_sandbox-approach.md
│       │   │   │   │   ├── algokit:cli:architecture-decisions:2022-11-22_beaker-testing-strategy.md
│       │   │   │   │   ├── algokit:cli:architecture-decisions:2023-01-11_beaker_productionisation_review.md
│       │   │   │   │   ├── algokit:cli:architecture-decisions:2023-01-11_brew_install.md
│       │   │   │   │   ├── algokit:cli:architecture-decisions:2023-01-12_smart-contract-deployment.md
│       │   │   │   │   ├── algokit:cli:architecture-decisions:2023-06-06_frontend-templates.md
│       │   │   │   │   ├── algokit:cli:architecture-decisions:2023-07-19_advanced_generate_command.md
│       │   │   │   │   ├── algokit:cli:architecture-decisions:2024-01-13_native_binaries.md
│       │   │   │   │   ├── algokit:cli:architecture-decisions:2024-01-23_init-wizard-v2.md
│       │   │   │   │   ├── algokit:cli:architecture-decisions:2024-01-31_binary_distribution.md
│       │   │   │   │   ├── algokit:cli:architecture-decisions:2024-03-06_local_dev_ui_packaging.md
│       │   │   │   │   ├── algokit:cli:articles:output_stability.md
│       │   │   │   │   ├── algokit:cli:cli:index.md
│       │   │   │   │   ├── algokit:cli:features:compile.md
│       │   │   │   │   ├── algokit:cli:features:completions.md
│       │   │   │   │   ├── algokit:cli:features:config.md
│       │   │   │   │   ├── algokit:cli:features:dispenser.md
│       │   │   │   │   ├── algokit:cli:features:doctor.md
│       │   │   │   │   ├── algokit:cli:features:explore.md
│       │   │   │   │   ├── algokit:cli:features:generate.md
│       │   │   │   │   ├── algokit:cli:features:goal.md
│       │   │   │   │   ├── algokit:cli:features:init.md
│       │   │   │   │   ├── algokit:cli:features:localnet.md
│       │   │   │   │   ├── algokit:cli:features:project:bootstrap.md
│       │   │   │   │   ├── algokit:cli:features:project:deploy.md
│       │   │   │   │   ├── algokit:cli:features:project:link.md
│       │   │   │   │   ├── algokit:cli:features:project:list.md
│       │   │   │   │   ├── algokit:cli:features:project:run.md
│       │   │   │   │   ├── algokit:cli:features:project.md
│       │   │   │   │   ├── algokit:cli:features:tasks:analyze.md
│       │   │   │   │   ├── algokit:cli:features:tasks:ipfs.md
│       │   │   │   │   ├── algokit:cli:features:tasks:mint.md
│       │   │   │   │   ├── algokit:cli:features:tasks:nfd.md
│       │   │   │   │   ├── algokit:cli:features:tasks:opt.md
│       │   │   │   │   ├── algokit:cli:features:tasks:send.md
│       │   │   │   │   ├── algokit:cli:features:tasks:sign.md
│       │   │   │   │   ├── algokit:cli:features:tasks:transfer.md
│       │   │   │   │   ├── algokit:cli:features:tasks:vanity_address.md
│       │   │   │   │   ├── algokit:cli:features:tasks:wallet.md
│       │   │   │   │   ├── algokit:cli:features:tasks.md
│       │   │   │   │   ├── algokit:cli:tutorials:algokit-template.md
│       │   │   │   │   ├── algokit:cli:tutorials:intro.md
│       │   │   │   │   ├── algokit:cli:tutorials:smart-contracts.md
│       │   │   │   │   ├── algokit:docs:testnet_api.md
│       │   │   │   │   ├── algokit:lora:README.md
│       │   │   │   │   ├── algokit:README.md
│       │   │   │   │   ├── algokit:utils:python:markdown:apidocs:algokit_utils:algokit_utils.md
│       │   │   │   │   ├── algokit:utils:python:markdown:capabilities:account.md
│       │   │   │   │   ├── algokit:utils:python:markdown:capabilities:app-client.md
│       │   │   │   │   ├── algokit:utils:python:markdown:capabilities:app-deploy.md
│       │   │   │   │   ├── algokit:utils:python:markdown:capabilities:client.md
│       │   │   │   │   ├── algokit:utils:python:markdown:capabilities:debugger.md
│       │   │   │   │   ├── algokit:utils:python:markdown:capabilities:dispenser-client.md
│       │   │   │   │   ├── algokit:utils:python:markdown:capabilities:transfer.md
│       │   │   │   │   ├── algokit:utils:python:markdown:index.md
│       │   │   │   │   ├── algokit:utils:python:README.md
│       │   │   │   │   ├── algokit:utils:python:source:capabilities:account.md
│       │   │   │   │   ├── algokit:utils:python:source:capabilities:app-client.md
│       │   │   │   │   ├── algokit:utils:python:source:capabilities:app-deploy.md
│       │   │   │   │   ├── algokit:utils:python:source:capabilities:client.md
│       │   │   │   │   ├── algokit:utils:python:source:capabilities:debugger.md
│       │   │   │   │   ├── algokit:utils:python:source:capabilities:dispenser-client.md
│       │   │   │   │   ├── algokit:utils:python:source:capabilities:transfer.md
│       │   │   │   │   ├── algokit:utils:python:source:index.md
│       │   │   │   │   ├── algokit:utils:typescript:capabilities:account.md
│       │   │   │   │   ├── algokit:utils:typescript:capabilities:algorand-client.md
│       │   │   │   │   ├── algokit:utils:typescript:capabilities:amount.md
│       │   │   │   │   ├── algokit:utils:typescript:capabilities:app-client.md
│       │   │   │   │   ├── algokit:utils:typescript:capabilities:app-deploy.md
│       │   │   │   │   ├── algokit:utils:typescript:capabilities:app.md
│       │   │   │   │   ├── algokit:utils:typescript:capabilities:asset.md
│       │   │   │   │   ├── algokit:utils:typescript:capabilities:client.md
│       │   │   │   │   ├── algokit:utils:typescript:capabilities:debugging.md
│       │   │   │   │   ├── algokit:utils:typescript:capabilities:dispenser-client.md
│       │   │   │   │   ├── algokit:utils:typescript:capabilities:event-emitter.md
│       │   │   │   │   ├── algokit:utils:typescript:capabilities:indexer.md
│       │   │   │   │   ├── algokit:utils:typescript:capabilities:testing.md
│       │   │   │   │   ├── algokit:utils:typescript:capabilities:transaction-composer.md
│       │   │   │   │   ├── algokit:utils:typescript:capabilities:transaction.md
│       │   │   │   │   ├── algokit:utils:typescript:capabilities:transfer.md
│       │   │   │   │   ├── algokit:utils:typescript:capabilities:typed-app-clients.md
│       │   │   │   │   ├── algokit:utils:typescript:code:classes:testing.TestLogger.md
│       │   │   │   │   ├── algokit:utils:typescript:code:classes:testing.TransactionLogger.md
│       │   │   │   │   ├── algokit:utils:typescript:code:classes:types_account_manager.AccountManager.md
│       │   │   │   │   ├── algokit:utils:typescript:code:classes:types_account.MultisigAccount.md
│       │   │   │   │   ├── algokit:utils:typescript:code:classes:types_account.SigningAccount.md
│       │   │   │   │   ├── algokit:utils:typescript:code:classes:types_algo_http_client_with_retry.AlgoHttpClientWithRetry.md
│       │   │   │   │   ├── algokit:utils:typescript:code:classes:types_algorand_client_transaction_creator.AlgorandClientTransactionCreator.md
│       │   │   │   │   ├── algokit:utils:typescript:code:classes:types_algorand_client_transaction_sender.AlgorandClientTransactionSender.md
│       │   │   │   │   ├── algokit:utils:typescript:code:classes:types_algorand_client.AlgorandClient.md
│       │   │   │   │   ├── algokit:utils:typescript:code:classes:types_amount.AlgoAmount.md
│       │   │   │   │   ├── algokit:utils:typescript:code:classes:types_app_arc56.Arc56Method.md
│       │   │   │   │   ├── algokit:utils:typescript:code:classes:types_app_client.AppClient.md
│       │   │   │   │   ├── algokit:utils:typescript:code:classes:types_app_client.ApplicationClient.md
│       │   │   │   │   ├── algokit:utils:typescript:code:classes:types_app_deployer.AppDeployer.md
│       │   │   │   │   ├── algokit:utils:typescript:code:classes:types_app_factory.AppFactory.md
│       │   │   │   │   ├── algokit:utils:typescript:code:classes:types_app_manager.AppManager.md
│       │   │   │   │   ├── algokit:utils:typescript:code:classes:types_asset_manager.AssetManager.md
│       │   │   │   │   ├── algokit:utils:typescript:code:classes:types_async_event_emitter.AsyncEventEmitter.md
│       │   │   │   │   ├── algokit:utils:typescript:code:classes:types_client_manager.ClientManager.md
│       │   │   │   │   ├── algokit:utils:typescript:code:classes:types_composer.TransactionComposer.md
│       │   │   │   │   ├── algokit:utils:typescript:code:classes:types_config.UpdatableConfig.md
│       │   │   │   │   ├── algokit:utils:typescript:code:classes:types_dispenser_client.TestNetDispenserApiClient.md
│       │   │   │   │   ├── algokit:utils:typescript:code:classes:types_kmd_account_manager.KmdAccountManager.md
│       │   │   │   │   ├── algokit:utils:typescript:code:classes:types_logic_error.LogicError.md
│       │   │   │   │   ├── algokit:utils:typescript:code:enums:types_app.OnSchemaBreak.md
│       │   │   │   │   ├── algokit:utils:typescript:code:enums:types_app.OnUpdate.md
│       │   │   │   │   ├── algokit:utils:typescript:code:enums:types_indexer.AccountStatus.md
│       │   │   │   │   ├── algokit:utils:typescript:code:enums:types_indexer.ApplicationOnComplete.md
│       │   │   │   │   ├── algokit:utils:typescript:code:enums:types_indexer.SignatureType.md
│       │   │   │   │   ├── algokit:utils:typescript:code:enums:types_lifecycle_events.EventType.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_account_manager.EnsureFundedResult.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_account.AccountConfig.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_account.TransactionSignerAccount.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_algorand_client_interface.AlgorandClientInterface.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_arc56.Arc56Contract.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_arc56.Event.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_arc56.Method.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_arc56.ProgramSourceInfo.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_arc56.StorageKey.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_arc56.StorageMap.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_arc56.StructField.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_client.AppClientCallABIArgs.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_client.AppClientCallCoreParams.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_client.AppClientCompilationParams.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_client.AppClientCompilationResult.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_client.AppClientDeployCallInterfaceParams.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_client.AppClientDeployCoreParams.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_client.AppClientDeployParams.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_client.AppClientParams.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_client.AppSourceMaps.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_client.FundAppAccountParams.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_client.ResolveAppById.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_client.ResolveAppByIdBase.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_client.SourceMapExport.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_deployer.AppLookup.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_deployer.AppMetadata.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_factory.AppFactoryParams.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_manager.AppInformation.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_manager.BoxReference.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_manager.BoxValueRequestParams.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_manager.BoxValuesRequestParams.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_spec.AppSources.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_spec.AppSpec.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_spec.CallConfig.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_spec.DeclaredSchemaValueSpec.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_spec.Hint.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_spec.ReservedSchemaValueSpec.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_spec.Schema.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_spec.SchemaSpec.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_spec.StateSchemaSpec.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_spec.Struct.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app.AppCallParams.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app.AppCallTransactionResultOfType.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app.AppCompilationResult.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app.AppDeploymentParams.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app.AppDeployMetadata.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app.AppLookup.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app.AppMetadata.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app.AppReference.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app.AppState.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app.AppStorageSchema.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app.BoxName.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app.BoxReference.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app.BoxValueRequestParams.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app.BoxValuesRequestParams.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app.CompiledTeal.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app.CoreAppCallArgs.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app.CreateAppParams.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app.RawAppCallArgs.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app.TealTemplateParams.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app.UpdateAppParams.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_asset_manager.AssetInformation.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_asset_manager.BulkAssetOptInOutResult.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_asset.AssetBulkOptInOutParams.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_asset.AssetOptInParams.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_asset.AssetOptOutParams.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_asset.CreateAssetParams.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_client_manager.AlgoSdkClients.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_client_manager.TypedAppClient.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_client_manager.TypedAppFactory.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_composer.BuiltTransactions.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_config.Config.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_debugging.AVMTracesEventData.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_debugging.TealSourceDebugEventData.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_debugging.TealSourcesDebugEventData.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_dispenser_client.DispenserFundResponse.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_dispenser_client.DispenserLimitResponse.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_dispenser_client.TestNetDispenserApiClientParams.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_indexer.LookupAssetHoldingsOptions.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_logic_error.LogicErrorDetails.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_network_client.AlgoClientConfig.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_network_client.AlgoConfig.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_network_client.NetworkDetails.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_testing.AlgoKitLogCaptureFixture.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_testing.AlgorandFixture.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_testing.AlgorandFixtureConfig.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_testing.AlgorandTestAutomationContext.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_testing.GetTestAccountParams.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_testing.LogSnapshotConfig.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_transaction.AtomicTransactionComposerToSend.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_transaction.ConfirmedTransactionResult.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_transaction.ConfirmedTransactionResults.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_transaction.SendAtomicTransactionComposerResults.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_transaction.SendParams.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_transaction.SendTransactionParams.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_transaction.SendTransactionResult.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_transaction.SendTransactionResults.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_transaction.TransactionGroupToSend.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_transaction.TransactionToSign.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_transfer.AlgoRekeyParams.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_transfer.AlgoTransferParams.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_transfer.EnsureFundedParams.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_transfer.EnsureFundedReturnType.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_transfer.TransferAssetParams.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:index.indexer.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:index.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:testing.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_account_manager_spec.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_account_manager.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_account.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_algo_http_client_with_retry.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_algorand_client_asset_spec.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_algorand_client_interface.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_algorand_client_spec.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_algorand_client_transaction_creator.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_algorand_client_transaction_sender.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_algorand_client_transfer_spec.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_algorand_client.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_amount_spec.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_amount.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_app_arc56.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_app_client_spec.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_app_client.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_app_deployer.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_app_factory_and_client_spec.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_app_factory.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_app_manager.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_app_spec.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_app.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_asset_manager.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_asset.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_async_event_emitter_spec.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_async_event_emitter.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_client_manager_spec.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_client_manager.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_composer.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_config.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_debugging.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_dispenser_client_spec.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_dispenser_client.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_expand.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_indexer.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_kmd_account_manager.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_lifecycle_events.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_logging.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_logic_error.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_network_client.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_testing.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_transaction.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_transfer.md
│       │   │   │   │   ├── algokit:utils:typescript:code:README.md
│       │   │   │   │   ├── algokit:utils:typescript:README.md
│       │   │   │   │   ├── algokit:utils:typescript:v7-migration.md
│       │   │   │   │   ├── algokit:utils:typescript:v8-migration.md
│       │   │   │   │   ├── ARCs:ARC-template.md
│       │   │   │   │   ├── ARCs:assets:arc-0012:README.md
│       │   │   │   │   ├── ARCs:assets:arc-0034:TemplateForm.md
│       │   │   │   │   ├── ARCs:assets:arc-0062:README.md
│       │   │   │   │   ├── ARCs:pages:nfts.md
│       │   │   │   │   ├── ARCs:pages:wallets.md
│       │   │   │   │   ├── ARCs:README.md
│       │   │   │   │   ├── ARCs:specs:arc-0000.md
│       │   │   │   │   ├── ARCs:specs:arc-0001.md
│       │   │   │   │   ├── ARCs:specs:arc-0002.md
│       │   │   │   │   ├── ARCs:specs:arc-0003.md
│       │   │   │   │   ├── ARCs:specs:arc-0004.md
│       │   │   │   │   ├── ARCs:specs:arc-0005.md
│       │   │   │   │   ├── ARCs:specs:arc-0006.md
│       │   │   │   │   ├── ARCs:specs:arc-0007.md
│       │   │   │   │   ├── ARCs:specs:arc-0008.md
│       │   │   │   │   ├── ARCs:specs:arc-0009.md
│       │   │   │   │   ├── ARCs:specs:arc-0010.md
│       │   │   │   │   ├── ARCs:specs:arc-0011.md
│       │   │   │   │   ├── ARCs:specs:arc-0012.md
│       │   │   │   │   ├── ARCs:specs:arc-0015.md
│       │   │   │   │   ├── ARCs:specs:arc-0016.md
│       │   │   │   │   ├── ARCs:specs:arc-0018.md
│       │   │   │   │   ├── ARCs:specs:arc-0019.md
│       │   │   │   │   ├── ARCs:specs:arc-0020.md
│       │   │   │   │   ├── ARCs:specs:arc-0021.md
│       │   │   │   │   ├── ARCs:specs:arc-0022.md
│       │   │   │   │   ├── ARCs:specs:arc-0023.md
│       │   │   │   │   ├── ARCs:specs:arc-0025.md
│       │   │   │   │   ├── ARCs:specs:arc-0026.md
│       │   │   │   │   ├── ARCs:specs:arc-0028.md
│       │   │   │   │   ├── ARCs:specs:arc-0032.md
│       │   │   │   │   ├── ARCs:specs:arc-0033.md
│       │   │   │   │   ├── ARCs:specs:arc-0034.md
│       │   │   │   │   ├── ARCs:specs:arc-0035.md
│       │   │   │   │   ├── ARCs:specs:arc-0036.md
│       │   │   │   │   ├── ARCs:specs:arc-0042.md
│       │   │   │   │   ├── ARCs:specs:arc-0047.md
│       │   │   │   │   ├── ARCs:specs:arc-0048.md
│       │   │   │   │   ├── ARCs:specs:arc-0049.md
│       │   │   │   │   ├── ARCs:specs:arc-0054.md
│       │   │   │   │   ├── ARCs:specs:arc-0055.md
│       │   │   │   │   ├── ARCs:specs:arc-0056.md
│       │   │   │   │   ├── ARCs:specs:arc-0059.md
│       │   │   │   │   ├── ARCs:specs:arc-0062.md
│       │   │   │   │   ├── ARCs:specs:arc-0065.md
│       │   │   │   │   ├── ARCs:specs:arc-0069.md
│       │   │   │   │   ├── ARCs:specs:arc-0072.md
│       │   │   │   │   ├── ARCs:specs:arc-0073.md
│       │   │   │   │   ├── ARCs:specs:arc-0074.md
│       │   │   │   │   ├── ARCs:specs:arc-0076.md
│       │   │   │   │   ├── ARCs:specs:arc-0078.md
│       │   │   │   │   ├── ARCs:specs:arc-0079.md
│       │   │   │   │   ├── ARCs:specs:arc-0200.md
│       │   │   │   │   ├── clis_index.md
│       │   │   │   │   ├── developer:docs:about.md
│       │   │   │   │   ├── developer:docs:clis:algokey:algokey.md
│       │   │   │   │   ├── developer:docs:clis:algokey:generate.md
│       │   │   │   │   ├── developer:docs:clis:algokey:import.md
│       │   │   │   │   ├── developer:docs:clis:algokey:multisig:append-auth-addr.md
│       │   │   │   │   ├── developer:docs:clis:algokey:multisig:multisig.md
│       │   │   │   │   ├── developer:docs:clis:algokey:part:info.md
│       │   │   │   │   ├── developer:docs:clis:algokey:part:part.md
│       │   │   │   │   ├── developer:docs:clis:algokey:part:reparent.md
│       │   │   │   │   ├── developer:docs:clis:algokey:sign.md
│       │   │   │   │   ├── developer:docs:clis:conduit:conduit.md
│       │   │   │   │   ├── developer:docs:clis:conduit:init.md
│       │   │   │   │   ├── developer:docs:clis:conduit:list:exporters.md
│       │   │   │   │   ├── developer:docs:clis:conduit:list:importers.md
│       │   │   │   │   ├── developer:docs:clis:conduit:list:list.md
│       │   │   │   │   ├── developer:docs:clis:conduit:list:processors.md
│       │   │   │   │   ├── developer:docs:clis:diagcfg:diagcfg.md
│       │   │   │   │   ├── developer:docs:clis:diagcfg:metric:disable.md
│       │   │   │   │   ├── developer:docs:clis:diagcfg:metric:enable.md
│       │   │   │   │   ├── developer:docs:clis:diagcfg:metric:metric.md
│       │   │   │   │   ├── developer:docs:clis:diagcfg:metric:status.md
│       │   │   │   │   ├── developer:docs:clis:diagcfg:telemetry:disable.md
│       │   │   │   │   ├── developer:docs:clis:diagcfg:telemetry:enable.md
│       │   │   │   │   ├── developer:docs:clis:diagcfg:telemetry:endpoint.md
│       │   │   │   │   ├── developer:docs:clis:diagcfg:telemetry:name.md
│       │   │   │   │   ├── developer:docs:clis:diagcfg:telemetry:status.md
│       │   │   │   │   ├── developer:docs:clis:diagcfg:telemetry:telemetry.md
│       │   │   │   │   ├── developer:docs:clis:goal:node:restart.md
│       │   │   │   │   ├── developer:docs:clis:goal:node:start.md
│       │   │   │   │   ├── developer:docs:clis:goal:node:status.md
│       │   │   │   │   ├── developer:docs:clis:goal:node:stop.md
│       │   │   │   │   ├── developer:docs:clis:goal:node:wait.md
│       │   │   │   │   ├── developer:docs:clis:goal:protocols.md
│       │   │   │   │   ├── developer:docs:clis:goal:report.md
│       │   │   │   │   ├── developer:docs:clis:goal:version.md
│       │   │   │   │   ├── developer:docs:clis:goal:wallet:list.md
│       │   │   │   │   ├── developer:docs:clis:goal:wallet:new.md
│       │   │   │   │   ├── developer:docs:clis:goal:wallet:wallet.md
│       │   │   │   │   ├── developer:docs:clis:indexer:api-config.md
│       │   │   │   │   ├── developer:docs:clis:indexer:daemon.md
│       │   │   │   │   ├── developer:docs:clis:indexer:indexer.md
│       │   │   │   │   ├── developer:docs:clis:indexer:util:util.md
│       │   │   │   │   ├── developer:docs:clis:indexer:util:validator.md
│       │   │   │   │   ├── developer:docs:clis:kmd.md
│       │   │   │   │   ├── developer:docs:clis:tealdbg:debug.md
│       │   │   │   │   ├── developer:docs:clis:tealdbg:remote.md
│       │   │   │   │   ├── developer:docs:clis:tealdbg:tealdbg.md
│       │   │   │   │   ├── developer:docs:details:accounts:create.md
│       │   │   │   │   ├── developer:docs:details:accounts:index.md
│       │   │   │   │   ├── developer:docs:details:accounts:rekey.md
│       │   │   │   │   ├── developer:docs:details:algorand_consensus.md
│       │   │   │   │   ├── developer:docs:details:algorand-networks:betanet.md
│       │   │   │   │   ├── developer:docs:details:algorand-networks:index.md
│       │   │   │   │   ├── developer:docs:details:algorand-networks:mainnet.md
│       │   │   │   │   ├── developer:docs:details:algorand-networks:testnet.md
│       │   │   │   │   ├── developer:docs:details:asa.md
│       │   │   │   │   ├── developer:docs:details:atc.md
│       │   │   │   │   ├── developer:docs:details:atomic_transfers.md
│       │   │   │   │   ├── developer:docs:details:conduit.md
│       │   │   │   │   ├── developer:docs:details:crust.md
│       │   │   │   │   ├── developer:docs:details:dapps:avm:index.md
│       │   │   │   │   ├── developer:docs:details:dapps:avm:teal:guidelines.md
│       │   │   │   │   ├── developer:docs:details:dapps:avm:teal:index.md
│       │   │   │   │   ├── developer:docs:details:dapps:avm:teal:jsonspec.md
│       │   │   │   │   ├── developer:docs:details:dapps:avm:teal:opcodes:index.md
│       │   │   │   │   ├── developer:docs:details:dapps:avm:teal:opcodes:v1.md
│       │   │   │   │   ├── developer:docs:details:dapps:avm:teal:opcodes:v10.md
│       │   │   │   │   ├── developer:docs:details:dapps:avm:teal:opcodes:v2.md
│       │   │   │   │   ├── developer:docs:details:dapps:avm:teal:opcodes:v3.md
│       │   │   │   │   ├── developer:docs:details:dapps:avm:teal:opcodes:v4.md
│       │   │   │   │   ├── developer:docs:details:dapps:avm:teal:opcodes:v5.md
│       │   │   │   │   ├── developer:docs:details:dapps:avm:teal:opcodes:v6.md
│       │   │   │   │   ├── developer:docs:details:dapps:avm:teal:opcodes:v7.md
│       │   │   │   │   ├── developer:docs:details:dapps:avm:teal:opcodes:v8.md
│       │   │   │   │   ├── developer:docs:details:dapps:avm:teal:opcodes:v9.md
│       │   │   │   │   ├── developer:docs:details:dapps:avm:teal:specification.md
│       │   │   │   │   ├── developer:docs:details:dapps:smart-contracts:ABI:index.md
│       │   │   │   │   ├── developer:docs:details:dapps:smart-contracts:apps:create.md
│       │   │   │   │   ├── developer:docs:details:dapps:smart-contracts:apps:index.md
│       │   │   │   │   ├── developer:docs:details:dapps:smart-contracts:apps:innertx.md
│       │   │   │   │   ├── developer:docs:details:dapps:smart-contracts:apps:state.md
│       │   │   │   │   ├── developer:docs:details:dapps:smart-contracts:apps:txs.md
│       │   │   │   │   ├── developer:docs:details:dapps:smart-contracts:debugging.md
│       │   │   │   │   ├── developer:docs:details:dapps:smart-contracts:frontend:apps.md
│       │   │   │   │   ├── developer:docs:details:dapps:smart-contracts:frontend:smartsigs.md
│       │   │   │   │   ├── developer:docs:details:dapps:smart-contracts:guidelines.md
│       │   │   │   │   ├── developer:docs:details:dapps:smart-contracts:index.md
│       │   │   │   │   ├── developer:docs:details:dapps:smart-contracts:smartsigs:index.md
│       │   │   │   │   ├── developer:docs:details:dapps:smart-contracts:smartsigs:modes.md
│       │   │   │   │   ├── developer:docs:details:dapps:smart-contracts:smartsigs:walkthrough.md
│       │   │   │   │   ├── developer:docs:details:dapps:writing-contracts:beaker.md
│       │   │   │   │   ├── developer:docs:details:dapps:writing-contracts:pyteal.md
│       │   │   │   │   ├── developer:docs:details:dapps:writing-contracts:python.md
│       │   │   │   │   ├── developer:docs:details:encoding.md
│       │   │   │   │   ├── developer:docs:details:ethereum_to_algorand.md
│       │   │   │   │   ├── developer:docs:details:index.md
│       │   │   │   │   ├── developer:docs:details:indexer.md
│       │   │   │   │   ├── developer:docs:details:parameter_tables.md
│       │   │   │   │   ├── developer:docs:details:stateproofs:index.md
│       │   │   │   │   ├── developer:docs:details:stateproofs:light_client.md
│       │   │   │   │   ├── developer:docs:details:technical_faq.md
│       │   │   │   │   ├── developer:docs:details:transactions:index.md
│       │   │   │   │   ├── developer:docs:details:transactions:offline_transactions.md
│       │   │   │   │   ├── developer:docs:details:transactions:payment_prompts.md
│       │   │   │   │   ├── developer:docs:details:transactions:signatures.md
│       │   │   │   │   ├── developer:docs:details:transactions:transactions.md
│       │   │   │   │   ├── developer:docs:details:useful_resources.md
│       │   │   │   │   ├── developer:docs:get-started:algokit.md
│       │   │   │   │   ├── developer:docs:get-started:basics:what_is_blockchain.md
│       │   │   │   │   ├── developer:docs:get-started:basics:whats_a_dapp.md
│       │   │   │   │   ├── developer:docs:get-started:basics:where_to_start.md
│       │   │   │   │   ├── developer:docs:get-started:basics:why_algorand.md
│       │   │   │   │   ├── developer:docs:get-started:tokenization:ft.md
│       │   │   │   │   ├── developer:docs:get-started:tokenization:nft.md
│       │   │   │   │   ├── developer:docs:index.md
│       │   │   │   │   ├── developer:docs:rest-apis:algod.md
│       │   │   │   │   ├── developer:docs:rest-apis:indexer.md
│       │   │   │   │   ├── developer:docs:rest-apis:kmd.md
│       │   │   │   │   ├── developer:docs:rest-apis:restendpoints.md
│       │   │   │   │   ├── developer:docs:run-a-node:operations:catchup.md
│       │   │   │   │   ├── developer:docs:run-a-node:operations:switch_networks.md
│       │   │   │   │   ├── developer:docs:run-a-node:participate:generate_keys.md
│       │   │   │   │   ├── developer:docs:run-a-node:participate:index.md
│       │   │   │   │   ├── developer:docs:run-a-node:participate:offline.md
│       │   │   │   │   ├── developer:docs:run-a-node:participate:online.md
│       │   │   │   │   ├── developer:docs:run-a-node:participate:renew.md
│       │   │   │   │   ├── developer:docs:run-a-node:reference:artifacts.md
│       │   │   │   │   ├── developer:docs:run-a-node:reference:config.md
│       │   │   │   │   ├── developer:docs:run-a-node:reference:relay.md
│       │   │   │   │   ├── developer:docs:run-a-node:reference:telemetry-config.md
│       │   │   │   │   ├── developer:docs:run-a-node:setup:indexer.md
│       │   │   │   │   ├── developer:docs:run-a-node:setup:install.md
│       │   │   │   │   ├── developer:docs:run-a-node:setup:node-troubleshooting.md
│       │   │   │   │   ├── developer:docs:run-a-node:setup:types.md
│       │   │   │   │   ├── developer:docs:sdks:go:index.md
│       │   │   │   │   ├── developer:docs:sdks:index.md
│       │   │   │   │   ├── developer:docs:sdks:java:index.md
│       │   │   │   │   ├── developer:docs:sdks:javascript:index.md
│       │   │   │   │   ├── developer:docs:sdks:python:index.md
│       │   │   │   │   ├── developer:python:code:example:accounts.md
│       │   │   │   │   ├── developer:python:code:example:arc4_types.md
│       │   │   │   │   ├── developer:python:code:example:assets.md
│       │   │   │   │   ├── developer:python:code:example:box_storage.md
│       │   │   │   │   ├── developer:python:code:example:control_flow.md
│       │   │   │   │   ├── developer:python:code:example:crypto:merkle_tree.md
│       │   │   │   │   ├── developer:python:code:example:defi:amm.md
│       │   │   │   │   ├── developer:python:code:example:defi:auction.md
│       │   │   │   │   ├── developer:python:code:example:defi:htlc_logicsig.md
│       │   │   │   │   ├── developer:python:code:example:defi:marketplace.md
│       │   │   │   │   ├── developer:python:code:example:events:arc28_events.md
│       │   │   │   │   ├── developer:python:code:example:global_storage.md
│       │   │   │   │   ├── developer:python:code:example:governance:simple_voting.md
│       │   │   │   │   ├── developer:python:code:example:hello_world.md
│       │   │   │   │   ├── developer:python:code:example:inner_transactions.md
│       │   │   │   │   ├── developer:python:code:example:local_storage.md
│       │   │   │   │   ├── developer:python:code:example:nft:proof_of_attendance.md
│       │   │   │   │   ├── developer:python:code:example:privacy:zk_whitelist.md
│       │   │   │   │   ├── developer:python:code:example:scratch_storage.md
│       │   │   │   │   ├── developer:python:code:example:self_payment.md
│       │   │   │   │   ├── developer:python:code:example:struct_in_box.md
│       │   │   │   │   ├── developer:python:code:example:subsidize_app_call.md
│       │   │   │   │   ├── developer:python:code:example:transactions.md
│       │   │   │   │   ├── developer:python:code:example:utility:calculator.md
│       │   │   │   │   ├── devportal-code-examples:projects:python-contract-examples:README.md
│       │   │   │   │   ├── devportal-code-examples:README.md
│       │   │   │   │   ├── docs:.walletconnect:index.md
│       │   │   │   │   ├── docs:.walletconnect:walletconnect-schema.md
│       │   │   │   │   ├── docs:README.md
│       │   │   │   │   ├── docs:scripts:example_tracker:example_list.md
│       │   │   │   │   ├── docs:scripts:README.md
│       │   │   │   │   ├── index.md
│       │   │   │   │   ├── liquid_auth_index.md
│       │   │   │   │   ├── liquid-auth:ARCHITECTURE.md
│       │   │   │   │   ├── liquid-auth:decisions:1-Service-Authentication.md
│       │   │   │   │   ├── liquid-auth:decisions:2-Bidirectional-Communication.md
│       │   │   │   │   ├── liquid-auth:decisions:3-Peer-to-Peer-Signaling.md
│       │   │   │   │   ├── liquid-auth:decisions:4-Fido-Extension.md
│       │   │   │   │   ├── liquid-auth:decisions:README.md
│       │   │   │   │   ├── liquid-auth:docs:architecture.md
│       │   │   │   │   ├── liquid-auth:docs:clients:android:provider-service:authenticate.md
│       │   │   │   │   ├── liquid-auth:docs:clients:android:provider-service:register.md
│       │   │   │   │   ├── liquid-auth:docs:clients:browser:authentication.md
│       │   │   │   │   ├── liquid-auth:docs:clients:browser:example.md
│       │   │   │   │   ├── liquid-auth:docs:introduction.md
│       │   │   │   │   ├── liquid-auth:docs:README.md
│       │   │   │   │   ├── liquid-auth:docs:server:environment-variables.md
│       │   │   │   │   ├── liquid-auth:docs:server:integrations.md
│       │   │   │   │   ├── liquid-auth:docs:server:introduction.md
│       │   │   │   │   ├── liquid-auth:docs:server:running-locally.md
│       │   │   │   │   ├── liquid-auth:README.md
│       │   │   │   │   ├── liquid-auth:SEQUENCE.md
│       │   │   │   │   ├── liquid-auth:services:liquid-auth-api-js:src:assertion:assertion.controller.post.request.md
│       │   │   │   │   ├── liquid-auth:services:liquid-auth-api-js:src:assertion:assertion.controller.post.response.md
│       │   │   │   │   ├── liquid-auth:services:liquid-auth-api-js:src:attestation:attestation.controller.post.request.md
│       │   │   │   │   ├── liquid-auth:services:liquid-auth-api-js:src:auth:auth.controller.get.user.md
│       │   │   │   │   ├── liquid-auth:sites:express-dapp:README.md
│       │   │   │   │   ├── liquid-auth:VISION.md
│       │   │   │   │   ├── puya_index.md
│       │   │   │   │   ├── puya:docs:algopy_testing:index.md
│       │   │   │   │   ├── puya:docs:api-algopy.arc4.md
│       │   │   │   │   ├── puya:docs:api-algopy.gtxn.md
│       │   │   │   │   ├── puya:docs:api-algopy.itxn.md
│       │   │   │   │   ├── puya:docs:api-algopy.md
│       │   │   │   │   ├── puya:docs:api-algopy.op.md
│       │   │   │   │   ├── puya:docs:api.md
│       │   │   │   │   ├── puya:docs:compiler.md
│       │   │   │   │   ├── puya:docs:index.md
│       │   │   │   │   ├── puya:docs:language-guide.md
│       │   │   │   │   ├── puya:docs:lg-arc28.md
│       │   │   │   │   ├── puya:docs:lg-arc4.md
│       │   │   │   │   ├── puya:docs:lg-builtins.md
│       │   │   │   │   ├── puya:docs:lg-calling-apps.md
│       │   │   │   │   ├── puya:docs:lg-compile.md
│       │   │   │   │   ├── puya:docs:lg-control.md
│       │   │   │   │   ├── puya:docs:lg-errors.md
│       │   │   │   │   ├── puya:docs:lg-logs.md
│       │   │   │   │   ├── puya:docs:lg-modules.md
│       │   │   │   │   ├── puya:docs:lg-opcode-budget.md
│       │   │   │   │   ├── puya:docs:lg-ops.md
│       │   │   │   │   ├── puya:docs:lg-storage.md
│       │   │   │   │   ├── puya:docs:lg-structure.md
│       │   │   │   │   ├── puya:docs:lg-transactions.md
│       │   │   │   │   ├── puya:docs:lg-types.md
│       │   │   │   │   ├── puya:docs:lg-unsupported-python-features.md
│       │   │   │   │   ├── puya:docs:principles.md
│       │   │   │   │   ├── puya:examples:auction:README.md
│       │   │   │   │   ├── puya:python:testing:docs:algopy.md
│       │   │   │   │   ├── puya:python:testing:docs:api.md
│       │   │   │   │   ├── puya:python:testing:docs:coverage.md
│       │   │   │   │   ├── puya:python:testing:docs:examples.md
│       │   │   │   │   ├── puya:python:testing:docs:faq.md
│       │   │   │   │   ├── puya:python:testing:docs:index.md
│       │   │   │   │   ├── puya:python:testing:docs:testing-guide:arc4-types.md
│       │   │   │   │   ├── puya:python:testing:docs:testing-guide:avm-types.md
│       │   │   │   │   ├── puya:python:testing:docs:testing-guide:concepts.md
│       │   │   │   │   ├── puya:python:testing:docs:testing-guide:contract-testing.md
│       │   │   │   │   ├── puya:python:testing:docs:testing-guide:index.md
│       │   │   │   │   ├── puya:python:testing:docs:testing-guide:opcodes.md
│       │   │   │   │   ├── puya:python:testing:docs:testing-guide:signature-testing.md
│       │   │   │   │   ├── puya:python:testing:docs:testing-guide:state-management.md
│       │   │   │   │   ├── puya:python:testing:docs:testing-guide:subroutines.md
│       │   │   │   │   ├── puya:python:testing:docs:testing-guide:transactions.md
│       │   │   │   │   ├── puya:python:testing:examples:README.md
│       │   │   │   │   ├── puya:python:testing:README.md
│       │   │   │   │   ├── puya:README.md
│       │   │   │   │   ├── puya:src:puya:ARCHITECTURE.md
│       │   │   │   │   ├── puya:src:puyapy:_typeshed:README.md
│       │   │   │   │   ├── puya:src:puyapy:_vendor:mypy:typeshed:stdlib:_typeshed:README.md
│       │   │   │   │   ├── puya:src:puyapy:awst_build:README.md
│       │   │   │   │   ├── puya:stubs:README.md
│       │   │   │   │   ├── puya:tests:test_expected_output:README.md
│       │   │   │   │   ├── puya:typescript:docs:architecture-decisions:2024-05-21_primitive-bytes-and-strings.md
│       │   │   │   │   ├── puya:typescript:docs:architecture-decisions:2024-05-21_primitive-integer-types.md
│       │   │   │   │   ├── puya:typescript:docs:README.md
│       │   │   │   │   ├── puya:typescript:packages:algo-ts:readme.md
│       │   │   │   │   ├── puya:typescript:README.md
│       │   │   │   │   ├── SDKs:javascript:classes:ABIAddressType.md
│       │   │   │   │   ├── SDKs:javascript:classes:ABIArrayDynamicType.md
│       │   │   │   │   ├── SDKs:javascript:classes:ABIArrayStaticType.md
│       │   │   │   │   ├── SDKs:javascript:classes:ABIBoolType.md
│       │   │   │   │   ├── SDKs:javascript:classes:ABIByteType.md
│       │   │   │   │   ├── SDKs:javascript:classes:ABIContract.md
│       │   │   │   │   ├── SDKs:javascript:classes:ABIInterface.md
│       │   │   │   │   ├── SDKs:javascript:classes:ABIMethod.md
│       │   │   │   │   ├── SDKs:javascript:classes:ABIStringType.md
│       │   │   │   │   ├── SDKs:javascript:classes:ABITupleType.md
│       │   │   │   │   ├── SDKs:javascript:classes:ABIType.md
│       │   │   │   │   ├── SDKs:javascript:classes:ABIUfixedType.md
│       │   │   │   │   ├── SDKs:javascript:classes:ABIUintType.md
│       │   │   │   │   ├── SDKs:javascript:classes:Algodv2.md
│       │   │   │   │   ├── SDKs:javascript:classes:AtomicTransactionComposer.md
│       │   │   │   │   ├── SDKs:javascript:classes:DryrunResult.md
│       │   │   │   │   ├── SDKs:javascript:classes:Indexer.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.Account.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.AccountParticipation.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.AccountResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.AccountsResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.AccountStateDelta.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.Application.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.ApplicationLocalState.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.ApplicationLocalStatesResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.ApplicationLogData.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.ApplicationLogsResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.ApplicationParams.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.ApplicationResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.ApplicationsResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.ApplicationStateSchema.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.Asset.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.AssetBalancesResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.AssetHolding.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.AssetHoldingsResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.AssetParams.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.AssetResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.AssetsResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.Block.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.BlockRewards.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.BlockUpgradeState.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.BlockUpgradeVote.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.Box.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.BoxDescriptor.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.BoxesResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.ErrorResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.EvalDelta.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.EvalDeltaKeyValue.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.HashFactory.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.HealthCheck.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.IndexerStateProofMessage.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.MerkleArrayProof.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.MiniAssetHolding.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.ParticipationUpdates.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.StateProofFields.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.StateProofParticipant.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.StateProofReveal.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.StateProofSignature.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.StateProofSigSlot.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.StateProofTracking.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.StateProofVerifier.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.StateSchema.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.TealKeyValue.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.TealValue.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.Transaction.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.TransactionApplication.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.TransactionAssetConfig.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.TransactionAssetFreeze.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.TransactionAssetTransfer.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.TransactionKeyreg.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.TransactionPayment.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.TransactionResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.TransactionSignature.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.TransactionSignatureLogicsig.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.TransactionSignatureMultisig.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.TransactionSignatureMultisigSubsignature.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.TransactionsResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.TransactionStateProof.md
│       │   │   │   │   ├── SDKs:javascript:classes:Kmd.md
│       │   │   │   │   ├── SDKs:javascript:classes:LogicSig.md
│       │   │   │   │   ├── SDKs:javascript:classes:LogicSigAccount.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.Account.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.AccountApplicationResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.AccountAssetHolding.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.AccountAssetResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.AccountAssetsInformationResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.AccountParticipation.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.AccountStateDelta.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.AppCallLogs.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.Application.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.ApplicationInitialStates.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.ApplicationKVStorage.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.ApplicationLocalReference.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.ApplicationLocalState.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.ApplicationParams.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.ApplicationStateOperation.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.ApplicationStateSchema.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.Asset.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.AssetHolding.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.AssetHoldingReference.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.AssetParams.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.AvmKeyValue.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.AvmValue.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.BlockHashResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.BlockLogsResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.BlockResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.BlockTxidsResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.Box.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.BoxDescriptor.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.BoxesResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.BoxReference.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.BuildVersion.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.CompileResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.DisassembleResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.DryrunRequest.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.DryrunResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.DryrunSource.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.DryrunState.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.DryrunTxnResult.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.ErrorResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.EvalDelta.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.EvalDeltaKeyValue.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.GetBlockTimeStampOffsetResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.GetSyncRoundResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.KvDelta.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.LedgerStateDeltaForTransactionGroup.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.LightBlockHeaderProof.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.NodeStatusResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.PendingTransactionResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.PendingTransactionsResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.PostTransactionsResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.ScratchChange.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.SimulateInitialStates.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.SimulateRequest.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.SimulateRequestTransactionGroup.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.SimulateResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.SimulateTraceConfig.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.SimulateTransactionGroupResult.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.SimulateTransactionResult.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.SimulateUnnamedResourcesAccessed.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.SimulationEvalOverrides.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.SimulationOpcodeTraceUnit.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.SimulationTransactionExecTrace.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.StateProof.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.StateProofMessage.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.SupplyResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.TealKeyValue.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.TealValue.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.TransactionGroupLedgerStateDeltasForRoundResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.TransactionParametersResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.TransactionProofResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.Version.md
│       │   │   │   │   ├── SDKs:javascript:classes:SourceMap.md
│       │   │   │   │   ├── SDKs:javascript:classes:Transaction.md
│       │   │   │   │   ├── SDKs:javascript:enums:ABIReferenceType.md
│       │   │   │   │   ├── SDKs:javascript:enums:ABITransactionType.md
│       │   │   │   │   ├── SDKs:javascript:enums:AtomicTransactionComposerStatus.md
│       │   │   │   │   ├── SDKs:javascript:enums:IntDecoding.md
│       │   │   │   │   ├── SDKs:javascript:enums:OnApplicationComplete.md
│       │   │   │   │   ├── SDKs:javascript:enums:TransactionType.md
│       │   │   │   │   ├── SDKs:javascript:examples:README.md
│       │   │   │   │   ├── SDKs:javascript:FAQ.md
│       │   │   │   │   ├── SDKs:javascript:interfaces:ABIContractNetworkInfo.md
│       │   │   │   │   ├── SDKs:javascript:interfaces:ABIContractNetworks.md
│       │   │   │   │   ├── SDKs:javascript:interfaces:ABIContractParams.md
│       │   │   │   │   ├── SDKs:javascript:interfaces:ABIInterfaceParams.md
│       │   │   │   │   ├── SDKs:javascript:interfaces:ABIMethodArgParams.md
│       │   │   │   │   ├── SDKs:javascript:interfaces:ABIMethodParams.md
│       │   │   │   │   ├── SDKs:javascript:interfaces:ABIMethodReturnParams.md
│       │   │   │   │   ├── SDKs:javascript:interfaces:ABIResult.md
│       │   │   │   │   ├── SDKs:javascript:interfaces:Account.md
│       │   │   │   │   ├── SDKs:javascript:interfaces:Address.md
│       │   │   │   │   ├── SDKs:javascript:interfaces:AlgodTokenHeader.md
│       │   │   │   │   ├── SDKs:javascript:interfaces:BaseHTTPClient.md
│       │   │   │   │   ├── SDKs:javascript:interfaces:BaseHTTPClientError.md
│       │   │   │   │   ├── SDKs:javascript:interfaces:BaseHTTPClientResponse.md
│       │   │   │   │   ├── SDKs:javascript:interfaces:BoxReference.md
│       │   │   │   │   ├── SDKs:javascript:interfaces:CustomTokenHeader.md
│       │   │   │   │   ├── SDKs:javascript:interfaces:EncodedAssetParams.md
│       │   │   │   │   ├── SDKs:javascript:interfaces:EncodedBoxReference.md
│       │   │   │   │   ├── SDKs:javascript:interfaces:EncodedGlobalStateSchema.md
│       │   │   │   │   ├── SDKs:javascript:interfaces:EncodedLocalStateSchema.md
│       │   │   │   │   ├── SDKs:javascript:interfaces:EncodedLogicSig.md
│       │   │   │   │   ├── SDKs:javascript:interfaces:EncodedLogicSigAccount.md
│       │   │   │   │   ├── SDKs:javascript:interfaces:EncodedMultisig.md
│       │   │   │   │   ├── SDKs:javascript:interfaces:EncodedSignedTransaction.md
│       │   │   │   │   ├── SDKs:javascript:interfaces:EncodedSubsig.md
│       │   │   │   │   ├── SDKs:javascript:interfaces:EncodedTransaction.md
│       │   │   │   │   ├── SDKs:javascript:interfaces:IndexerTokenHeader.md
│       │   │   │   │   ├── SDKs:javascript:interfaces:KMDTokenHeader.md
│       │   │   │   │   ├── SDKs:javascript:interfaces:MultisigMetadata.md
│       │   │   │   │   ├── SDKs:javascript:interfaces:SignedTransaction.md
│       │   │   │   │   ├── SDKs:javascript:interfaces:SuggestedParams.md
│       │   │   │   │   ├── SDKs:javascript:interfaces:TransactionParams.md
│       │   │   │   │   ├── SDKs:javascript:interfaces:TransactionWithSigner.md
│       │   │   │   │   ├── SDKs:javascript:modules:indexerModels.md
│       │   │   │   │   ├── SDKs:javascript:modules:modelsv2.md
│       │   │   │   │   ├── SDKs:javascript:modules.md
│       │   │   │   │   ├── SDKs:javascript:README.md
│       │   │   │   │   ├── SDKs:python:algosdk:v2client:harness:README.md
│       │   │   │   │   ├── SDKs:python:examples:README.md
│       │   │   │   │   ├── SDKs:python:README.md
│       │   │   │   │   ├── tealscript:examples_amm_README.md
│       │   │   │   │   ├── tealscript:examples_auction_README.md
│       │   │   │   │   ├── tealscript:examples_big_box_README.md
│       │   │   │   │   ├── tealscript:examples_itxns_README.md
│       │   │   │   │   ├── tealscript:examples_lsig_with_app_README.md
│       │   │   │   │   ├── tealscript:examples_reti_README.md
│       │   │   │   │   ├── tealscript:FEATURES.md
│       │   │   │   │   ├── tealscript:guides_atomic_txn.md
│       │   │   │   │   ├── tealscript:guides_features.md
│       │   │   │   │   ├── tealscript:guides_getting_started.md
│       │   │   │   │   ├── tealscript:guides_inner_transactions.md
│       │   │   │   │   ├── tealscript:guides_lifecycle.md
│       │   │   │   │   ├── tealscript:guides_math.md
│       │   │   │   │   ├── tealscript:guides_methods.md
│       │   │   │   │   ├── tealscript:guides_multiple_contracts.md
│       │   │   │   │   ├── tealscript:guides_pyteal.md
│       │   │   │   │   ├── tealscript:guides_storage.md
│       │   │   │   │   ├── tealscript:guides_Supported Types_arrays.md
│       │   │   │   │   ├── tealscript:guides_Supported Types_numbers.md
│       │   │   │   │   ├── TEALScript:README.md
│       │   │   │   │   ├── tealscript:tests_test_package_README.md
│       │   │   │   │   ├── tealscript:tutorials_Hello World_0001-intro.md
│       │   │   │   │   ├── tealscript:tutorials_Hello World_0002-init.md
│       │   │   │   │   ├── tealscript:tutorials_Hello World_0003-contract.md
│       │   │   │   │   ├── tealscript:tutorials_Hello World_0004-artifacts.md
│       │   │   │   │   ├── tealscript:tutorials_Hello World_0005-hello.md
│       │   │   │   │   └── tealscript:tutorials_Hello World_0006-test.md
│       │   │   │   └── taxonomy-categories
│       │   │   │       ├── algokit-utils.json
│       │   │   │       ├── algokit.json
│       │   │   │       ├── arcs.json
│       │   │   │       ├── clis.json
│       │   │   │       ├── details.json
│       │   │   │       ├── developers.json
│       │   │   │       ├── liquid-auth.json
│       │   │   │       ├── nodes.json
│       │   │   │       ├── puya.json
│       │   │   │       ├── python.json
│       │   │   │       ├── sdks.json
│       │   │   │       └── tealscript.json
│       │   │   └── wallet
│       │   │       └── index.ts
│       │   ├── tools
│       │   │   ├── accountManager.ts
│       │   │   ├── algodManager.ts
│       │   │   ├── apiManager
│       │   │   │   ├── algod
│       │   │   │   │   ├── account.ts
│       │   │   │   │   ├── application.ts
│       │   │   │   │   ├── asset.ts
│       │   │   │   │   ├── index.ts
│       │   │   │   │   └── transaction.ts
│       │   │   │   ├── example
│       │   │   │   │   ├── get-balance.ts
│       │   │   │   │   └── index.ts
│       │   │   │   ├── index.ts
│       │   │   │   ├── indexer
│       │   │   │   │   ├── account.ts
│       │   │   │   │   ├── application.ts
│       │   │   │   │   ├── asset.ts
│       │   │   │   │   ├── index.ts
│       │   │   │   │   └── transaction.ts
│       │   │   │   ├── nfd
│       │   │   │   │   └── index.ts
│       │   │   │   ├── tinyman
│       │   │   │   │   ├── analytics.ts
│       │   │   │   │   ├── bootstrap.ts
│       │   │   │   │   ├── index.ts
│       │   │   │   │   ├── liquidity.ts
│       │   │   │   │   ├── opt_in.ts
│       │   │   │   │   ├── pool.ts
│       │   │   │   │   ├── remove_liquidity.ts
│       │   │   │   │   └── swap.ts
│       │   │   │   ├── ultrade
│       │   │   │   │   ├── index.ts
│       │   │   │   │   ├── market.ts
│       │   │   │   │   ├── system.ts
│       │   │   │   │   └── wallet.ts
│       │   │   │   └── vestige
│       │   │   │       ├── assets.ts
│       │   │   │       ├── balances.ts
│       │   │   │       ├── index.ts
│       │   │   │       ├── networks.ts
│       │   │   │       ├── notes.ts
│       │   │   │       ├── pools.ts
│       │   │   │       ├── protocols.ts
│       │   │   │       ├── swaps.ts
│       │   │   │       └── vaults.ts
│       │   │   ├── arc26Manager.ts
│       │   │   ├── index.ts
│       │   │   ├── knowledgeManager.ts
│       │   │   ├── transactionManager
│       │   │   │   ├── accountTransactions.ts
│       │   │   │   ├── appTransactions
│       │   │   │   │   ├── callTxn.ts
│       │   │   │   │   ├── clearTxn.ts
│       │   │   │   │   ├── closeOutTxn.ts
│       │   │   │   │   ├── createTxn.ts
│       │   │   │   │   ├── deleteTxn.ts
│       │   │   │   │   ├── index.ts
│       │   │   │   │   ├── optInTxn.ts
│       │   │   │   │   ├── test
│       │   │   │   │   │   ├── counter_approval.teal
│       │   │   │   │   │   ├── counter_clear.teal
│       │   │   │   │   │   ├── storage_test_approval_v2.teal
│       │   │   │   │   │   ├── storage_test_approval.teal
│       │   │   │   │   │   └── storage_test_clear.teal
│       │   │   │   │   ├── types.ts
│       │   │   │   │   └── updateTxn.ts
│       │   │   │   ├── assetTransactions.ts
│       │   │   │   ├── generalTransaction.ts
│       │   │   │   └── index.ts
│       │   │   └── utilityManager.ts
│       │   ├── types.ts
│       │   └── utils
│       │       └── responseProcessor.ts
│       ├── tests
│       │   ├── resources
│       │   │   ├── algod
│       │   │   │   ├── account.test.ts
│       │   │   │   ├── application.test.ts
│       │   │   │   ├── asset.test.ts
│       │   │   │   └── transaction.test.ts
│       │   │   └── indexer
│       │   │       ├── account.test.ts
│       │   │       ├── application.test.ts
│       │   │       ├── asset.test.ts
│       │   │       └── transaction.test.ts
│       │   └── tools
│       │       ├── accountManager.test.ts
│       │       ├── algodManager.test.ts
│       │       ├── apiManager
│       │       │   └── example
│       │       │       └── get-balance.test.ts
│       │       ├── transactionManager
│       │       │   ├── accountTransactionManager.test.ts
│       │       │   ├── appTransactionManager.test.ts
│       │       │   ├── assetTransactionManager.test.ts
│       │       │   ├── generalTransactionManager.test.ts
│       │       │   └── transactionManager.test.ts
│       │       └── utilityManager.test.ts
│       └── tsconfig.json
├── README.md
├── rename_files.sh
└── tsconfig.json
```

# Files

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/SDKs:javascript:classes:indexerModels.TransactionApplication.md:
--------------------------------------------------------------------------------

```markdown
  1 | [algosdk](../README.md) / [Exports](../modules.md) / [indexerModels](../modules/indexerModels.md) / TransactionApplication
  2 | 
  3 | # Class: TransactionApplication
  4 | 
  5 | [indexerModels](../modules/indexerModels.md).TransactionApplication
  6 | 
  7 | Fields for application transactions.
  8 | Definition:
  9 | data/transactions/application.go : ApplicationCallTxnFields
 10 | 
 11 | ## Hierarchy
 12 | 
 13 | - `default`
 14 | 
 15 |   ↳ **`TransactionApplication`**
 16 | 
 17 | ## Table of contents
 18 | 
 19 | ### Constructors
 20 | 
 21 | - [constructor](indexerModels.TransactionApplication.md#constructor)
 22 | 
 23 | ### Properties
 24 | 
 25 | - [accounts](indexerModels.TransactionApplication.md#accounts)
 26 | - [applicationArgs](indexerModels.TransactionApplication.md#applicationargs)
 27 | - [applicationId](indexerModels.TransactionApplication.md#applicationid)
 28 | - [approvalProgram](indexerModels.TransactionApplication.md#approvalprogram)
 29 | - [attribute\_map](indexerModels.TransactionApplication.md#attribute_map)
 30 | - [clearStateProgram](indexerModels.TransactionApplication.md#clearstateprogram)
 31 | - [extraProgramPages](indexerModels.TransactionApplication.md#extraprogrampages)
 32 | - [foreignApps](indexerModels.TransactionApplication.md#foreignapps)
 33 | - [foreignAssets](indexerModels.TransactionApplication.md#foreignassets)
 34 | - [globalStateSchema](indexerModels.TransactionApplication.md#globalstateschema)
 35 | - [localStateSchema](indexerModels.TransactionApplication.md#localstateschema)
 36 | - [onCompletion](indexerModels.TransactionApplication.md#oncompletion)
 37 | 
 38 | ### Methods
 39 | 
 40 | - [get\_obj\_for\_encoding](indexerModels.TransactionApplication.md#get_obj_for_encoding)
 41 | - [from\_obj\_for\_encoding](indexerModels.TransactionApplication.md#from_obj_for_encoding)
 42 | 
 43 | ## Constructors
 44 | 
 45 | ### constructor
 46 | 
 47 | • **new TransactionApplication**(`«destructured»`)
 48 | 
 49 | Creates a new `TransactionApplication` object.
 50 | 
 51 | #### Parameters
 52 | 
 53 | | Name | Type |
 54 | | :------ | :------ |
 55 | | `«destructured»` | `Object` |
 56 | | › `accounts?` | `string`[] |
 57 | | › `applicationArgs?` | `Uint8Array`[] |
 58 | | › `applicationId` | `number` \| `bigint` |
 59 | | › `approvalProgram?` | `string` \| `Uint8Array` |
 60 | | › `clearStateProgram?` | `string` \| `Uint8Array` |
 61 | | › `extraProgramPages?` | `number` \| `bigint` |
 62 | | › `foreignApps?` | (`number` \| `bigint`)[] |
 63 | | › `foreignAssets?` | (`number` \| `bigint`)[] |
 64 | | › `globalStateSchema?` | [`StateSchema`](indexerModels.StateSchema.md) |
 65 | | › `localStateSchema?` | [`StateSchema`](indexerModels.StateSchema.md) |
 66 | | › `onCompletion?` | `string` |
 67 | 
 68 | #### Overrides
 69 | 
 70 | BaseModel.constructor
 71 | 
 72 | #### Defined in
 73 | 
 74 | client/v2/indexer/models/types.ts:4763
 75 | 
 76 | ## Properties
 77 | 
 78 | ### accounts
 79 | 
 80 | • `Optional` **accounts**: `string`[]
 81 | 
 82 | (apat) List of accounts in addition to the sender that may be accessed from the
 83 | application's approval-program and clear-state-program.
 84 | 
 85 | #### Defined in
 86 | 
 87 | client/v2/indexer/models/types.ts:4653
 88 | 
 89 | ___
 90 | 
 91 | ### applicationArgs
 92 | 
 93 | • `Optional` **applicationArgs**: `Uint8Array`[]
 94 | 
 95 | (apaa) transaction specific arguments accessed from the application's
 96 | approval-program and clear-state-program.
 97 | 
 98 | #### Defined in
 99 | 
100 | client/v2/indexer/models/types.ts:4659
101 | 
102 | ___
103 | 
104 | ### applicationId
105 | 
106 | • **applicationId**: `number` \| `bigint`
107 | 
108 | (apid) ID of the application being configured or empty if creating.
109 | 
110 | #### Defined in
111 | 
112 | client/v2/indexer/models/types.ts:4647
113 | 
114 | ___
115 | 
116 | ### approvalProgram
117 | 
118 | • `Optional` **approvalProgram**: `Uint8Array`
119 | 
120 | (apap) Logic executed for every application transaction, except when
121 | on-completion is set to "clear". It can read and write global state for the
122 | application, as well as account-specific local state. Approval programs may
123 | reject the transaction.
124 | 
125 | #### Defined in
126 | 
127 | client/v2/indexer/models/types.ts:4667
128 | 
129 | ___
130 | 
131 | ### attribute\_map
132 | 
133 | • **attribute\_map**: `Record`\<`string`, `string`\>
134 | 
135 | #### Inherited from
136 | 
137 | BaseModel.attribute\_map
138 | 
139 | #### Defined in
140 | 
141 | client/v2/basemodel.ts:56
142 | 
143 | ___
144 | 
145 | ### clearStateProgram
146 | 
147 | • `Optional` **clearStateProgram**: `Uint8Array`
148 | 
149 | (apsu) Logic executed for application transactions with on-completion set to
150 | "clear". It can read and write global state for the application, as well as
151 | account-specific local state. Clear state programs cannot reject the
152 | transaction.
153 | 
154 | #### Defined in
155 | 
156 | client/v2/indexer/models/types.ts:4675
157 | 
158 | ___
159 | 
160 | ### extraProgramPages
161 | 
162 | • `Optional` **extraProgramPages**: `number` \| `bigint`
163 | 
164 | (epp) specifies the additional app program len requested in pages.
165 | 
166 | #### Defined in
167 | 
168 | client/v2/indexer/models/types.ts:4680
169 | 
170 | ___
171 | 
172 | ### foreignApps
173 | 
174 | • `Optional` **foreignApps**: (`number` \| `bigint`)[]
175 | 
176 | (apfa) Lists the applications in addition to the application-id whose global
177 | states may be accessed by this application's approval-program and
178 | clear-state-program. The access is read-only.
179 | 
180 | #### Defined in
181 | 
182 | client/v2/indexer/models/types.ts:4687
183 | 
184 | ___
185 | 
186 | ### foreignAssets
187 | 
188 | • `Optional` **foreignAssets**: (`number` \| `bigint`)[]
189 | 
190 | (apas) lists the assets whose parameters may be accessed by this application's
191 | ApprovalProgram and ClearStateProgram. The access is read-only.
192 | 
193 | #### Defined in
194 | 
195 | client/v2/indexer/models/types.ts:4693
196 | 
197 | ___
198 | 
199 | ### globalStateSchema
200 | 
201 | • `Optional` **globalStateSchema**: [`StateSchema`](indexerModels.StateSchema.md)
202 | 
203 | Represents a (apls) local-state or (apgs) global-state schema. These schemas
204 | determine how much storage may be used in a local-state or global-state for an
205 | application. The more space used, the larger minimum balance must be maintained
206 | in the account holding the data.
207 | 
208 | #### Defined in
209 | 
210 | client/v2/indexer/models/types.ts:4701
211 | 
212 | ___
213 | 
214 | ### localStateSchema
215 | 
216 | • `Optional` **localStateSchema**: [`StateSchema`](indexerModels.StateSchema.md)
217 | 
218 | Represents a (apls) local-state or (apgs) global-state schema. These schemas
219 | determine how much storage may be used in a local-state or global-state for an
220 | application. The more space used, the larger minimum balance must be maintained
221 | in the account holding the data.
222 | 
223 | #### Defined in
224 | 
225 | client/v2/indexer/models/types.ts:4709
226 | 
227 | ___
228 | 
229 | ### onCompletion
230 | 
231 | • `Optional` **onCompletion**: `string`
232 | 
233 | (apan) defines the what additional actions occur with the transaction.
234 | Valid types:
235 | * noop
236 | * optin
237 | * closeout
238 | * clear
239 | * update
240 | * update
241 | * delete
242 | 
243 | #### Defined in
244 | 
245 | client/v2/indexer/models/types.ts:4722
246 | 
247 | ## Methods
248 | 
249 | ### get\_obj\_for\_encoding
250 | 
251 | ▸ **get_obj_for_encoding**(`binary?`): `Record`\<`string`, `any`\>
252 | 
253 | Get an object ready for encoding to either JSON or msgpack.
254 | 
255 | #### Parameters
256 | 
257 | | Name | Type | Default value | Description |
258 | | :------ | :------ | :------ | :------ |
259 | | `binary` | `boolean` | `false` | Use true to indicate that the encoding can handle raw binary objects (Uint8Arrays). Use false to indicate that raw binary objects should be converted to base64 strings. True should be used for objects that will be encoded with msgpack, and false should be used for objects that will be encoded with JSON. |
260 | 
261 | #### Returns
262 | 
263 | `Record`\<`string`, `any`\>
264 | 
265 | #### Inherited from
266 | 
267 | BaseModel.get\_obj\_for\_encoding
268 | 
269 | #### Defined in
270 | 
271 | client/v2/basemodel.ts:65
272 | 
273 | ___
274 | 
275 | ### from\_obj\_for\_encoding
276 | 
277 | ▸ `Static` **from_obj_for_encoding**(`data`): [`TransactionApplication`](indexerModels.TransactionApplication.md)
278 | 
279 | #### Parameters
280 | 
281 | | Name | Type |
282 | | :------ | :------ |
283 | | `data` | `Record`\<`string`, `any`\> |
284 | 
285 | #### Returns
286 | 
287 | [`TransactionApplication`](indexerModels.TransactionApplication.md)
288 | 
289 | #### Defined in
290 | 
291 | client/v2/indexer/models/types.ts:4823
292 | 
```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/algokit:utils:typescript:code:interfaces:types_transfer.AlgoTransferParams.md:
--------------------------------------------------------------------------------

```markdown
  1 | [@algorandfoundation/algokit-utils](../README.md) / [types/transfer](../modules/types_transfer.md) / AlgoTransferParams
  2 | 
  3 | # Interface: AlgoTransferParams
  4 | 
  5 | [types/transfer](../modules/types_transfer.md).AlgoTransferParams
  6 | 
  7 | **`Deprecated`**
  8 | 
  9 | Parameters for `transferAlgos` call.
 10 | 
 11 | ## Hierarchy
 12 | 
 13 | - [`SendTransactionParams`](types_transaction.SendTransactionParams.md)
 14 | 
 15 |   ↳ **`AlgoTransferParams`**
 16 | 
 17 | ## Table of contents
 18 | 
 19 | ### Properties
 20 | 
 21 | - [amount](types_transfer.AlgoTransferParams.md#amount)
 22 | - [atc](types_transfer.AlgoTransferParams.md#atc)
 23 | - [fee](types_transfer.AlgoTransferParams.md#fee)
 24 | - [from](types_transfer.AlgoTransferParams.md#from)
 25 | - [lease](types_transfer.AlgoTransferParams.md#lease)
 26 | - [maxFee](types_transfer.AlgoTransferParams.md#maxfee)
 27 | - [maxRoundsToWaitForConfirmation](types_transfer.AlgoTransferParams.md#maxroundstowaitforconfirmation)
 28 | - [note](types_transfer.AlgoTransferParams.md#note)
 29 | - [populateAppCallResources](types_transfer.AlgoTransferParams.md#populateappcallresources)
 30 | - [skipSending](types_transfer.AlgoTransferParams.md#skipsending)
 31 | - [skipWaiting](types_transfer.AlgoTransferParams.md#skipwaiting)
 32 | - [suppressLog](types_transfer.AlgoTransferParams.md#suppresslog)
 33 | - [to](types_transfer.AlgoTransferParams.md#to)
 34 | - [transactionParams](types_transfer.AlgoTransferParams.md#transactionparams)
 35 | 
 36 | ## Properties
 37 | 
 38 | ### amount
 39 | 
 40 | • **amount**: [`AlgoAmount`](../classes/types_amount.AlgoAmount.md)
 41 | 
 42 | The amount to send
 43 | 
 44 | #### Defined in
 45 | 
 46 | [src/types/transfer.ts:14](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transfer.ts#L14)
 47 | 
 48 | ___
 49 | 
 50 | ### atc
 51 | 
 52 | • `Optional` **atc**: `AtomicTransactionComposer`
 53 | 
 54 | An optional `AtomicTransactionComposer` to add the transaction to, if specified then `skipSending: undefined` has the same effect as `skipSending: true`
 55 | 
 56 | #### Inherited from
 57 | 
 58 | [SendTransactionParams](types_transaction.SendTransactionParams.md).[atc](types_transaction.SendTransactionParams.md#atc)
 59 | 
 60 | #### Defined in
 61 | 
 62 | [src/types/transaction.ts:36](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L36)
 63 | 
 64 | ___
 65 | 
 66 | ### fee
 67 | 
 68 | • `Optional` **fee**: [`AlgoAmount`](../classes/types_amount.AlgoAmount.md)
 69 | 
 70 | The flat fee you want to pay, useful for covering extra fees in a transaction group or app call
 71 | 
 72 | #### Inherited from
 73 | 
 74 | [SendTransactionParams](types_transaction.SendTransactionParams.md).[fee](types_transaction.SendTransactionParams.md#fee)
 75 | 
 76 | #### Defined in
 77 | 
 78 | [src/types/transaction.ts:40](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L40)
 79 | 
 80 | ___
 81 | 
 82 | ### from
 83 | 
 84 | • **from**: [`SendTransactionFrom`](../modules/types_transaction.md#sendtransactionfrom)
 85 | 
 86 | The account that will send the Algo
 87 | 
 88 | #### Defined in
 89 | 
 90 | [src/types/transfer.ts:10](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transfer.ts#L10)
 91 | 
 92 | ___
 93 | 
 94 | ### lease
 95 | 
 96 | • `Optional` **lease**: `string` \| `Uint8Array`
 97 | 
 98 | An (optional) [transaction lease](https://developer.algorand.org/articles/leased-transactions-securing-advanced-smart-contract-design/) to apply
 99 | 
100 | #### Defined in
101 | 
102 | [src/types/transfer.ts:20](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transfer.ts#L20)
103 | 
104 | ___
105 | 
106 | ### maxFee
107 | 
108 | • `Optional` **maxFee**: [`AlgoAmount`](../classes/types_amount.AlgoAmount.md)
109 | 
110 | The maximum fee that you are happy to pay (default: unbounded) - if this is set it's possible the transaction could get rejected during network congestion
111 | 
112 | #### Inherited from
113 | 
114 | [SendTransactionParams](types_transaction.SendTransactionParams.md).[maxFee](types_transaction.SendTransactionParams.md#maxfee)
115 | 
116 | #### Defined in
117 | 
118 | [src/types/transaction.ts:42](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L42)
119 | 
120 | ___
121 | 
122 | ### maxRoundsToWaitForConfirmation
123 | 
124 | • `Optional` **maxRoundsToWaitForConfirmation**: `number`
125 | 
126 | The maximum number of rounds to wait for confirmation, only applies if `skipWaiting` is `undefined` or `false`, default: wait up to 5 rounds
127 | 
128 | #### Inherited from
129 | 
130 | [SendTransactionParams](types_transaction.SendTransactionParams.md).[maxRoundsToWaitForConfirmation](types_transaction.SendTransactionParams.md#maxroundstowaitforconfirmation)
131 | 
132 | #### Defined in
133 | 
134 | [src/types/transaction.ts:44](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L44)
135 | 
136 | ___
137 | 
138 | ### note
139 | 
140 | • `Optional` **note**: [`TransactionNote`](../modules/types_transaction.md#transactionnote)
141 | 
142 | The (optional) transaction note
143 | 
144 | #### Defined in
145 | 
146 | [src/types/transfer.ts:18](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transfer.ts#L18)
147 | 
148 | ___
149 | 
150 | ### populateAppCallResources
151 | 
152 | • `Optional` **populateAppCallResources**: `boolean`
153 | 
154 | Whether to use simulate to automatically populate app call resources in the txn objects. Defaults to true when there are app calls in the group.
155 | 
156 | #### Inherited from
157 | 
158 | [SendTransactionParams](types_transaction.SendTransactionParams.md).[populateAppCallResources](types_transaction.SendTransactionParams.md#populateappcallresources)
159 | 
160 | #### Defined in
161 | 
162 | [src/types/transaction.ts:46](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L46)
163 | 
164 | ___
165 | 
166 | ### skipSending
167 | 
168 | • `Optional` **skipSending**: `boolean`
169 | 
170 | Whether to skip signing and sending the transaction to the chain (default: transaction signed and sent to chain, unless `atc` specified)
171 | and instead just return the raw transaction, e.g. so you can add it to a group of transactions
172 | 
173 | #### Inherited from
174 | 
175 | [SendTransactionParams](types_transaction.SendTransactionParams.md).[skipSending](types_transaction.SendTransactionParams.md#skipsending)
176 | 
177 | #### Defined in
178 | 
179 | [src/types/transaction.ts:32](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L32)
180 | 
181 | ___
182 | 
183 | ### skipWaiting
184 | 
185 | • `Optional` **skipWaiting**: `boolean`
186 | 
187 | Whether to skip waiting for the submitted transaction (only relevant if `skipSending` is `false` or unset)
188 | 
189 | #### Inherited from
190 | 
191 | [SendTransactionParams](types_transaction.SendTransactionParams.md).[skipWaiting](types_transaction.SendTransactionParams.md#skipwaiting)
192 | 
193 | #### Defined in
194 | 
195 | [src/types/transaction.ts:34](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L34)
196 | 
197 | ___
198 | 
199 | ### suppressLog
200 | 
201 | • `Optional` **suppressLog**: `boolean`
202 | 
203 | Whether to suppress log messages from transaction send, default: do not suppress
204 | 
205 | #### Inherited from
206 | 
207 | [SendTransactionParams](types_transaction.SendTransactionParams.md).[suppressLog](types_transaction.SendTransactionParams.md#suppresslog)
208 | 
209 | #### Defined in
210 | 
211 | [src/types/transaction.ts:38](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L38)
212 | 
213 | ___
214 | 
215 | ### to
216 | 
217 | • **to**: `string` \| [`SendTransactionFrom`](../modules/types_transaction.md#sendtransactionfrom)
218 | 
219 | The account / account address that will receive the Algo
220 | 
221 | #### Defined in
222 | 
223 | [src/types/transfer.ts:12](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transfer.ts#L12)
224 | 
225 | ___
226 | 
227 | ### transactionParams
228 | 
229 | • `Optional` **transactionParams**: `SuggestedParams`
230 | 
231 | Optional transaction parameters
232 | 
233 | #### Defined in
234 | 
235 | [src/types/transfer.ts:16](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transfer.ts#L16)
236 | 
```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/SDKs:javascript:classes:modelsv2.PendingTransactionResponse.md:
--------------------------------------------------------------------------------

```markdown
  1 | [algosdk](../README.md) / [Exports](../modules.md) / [modelsv2](../modules/modelsv2.md) / PendingTransactionResponse
  2 | 
  3 | # Class: PendingTransactionResponse
  4 | 
  5 | [modelsv2](../modules/modelsv2.md).PendingTransactionResponse
  6 | 
  7 | Details about a pending transaction. If the transaction was recently confirmed,
  8 | includes confirmation details like the round and reward details.
  9 | 
 10 | ## Hierarchy
 11 | 
 12 | - `default`
 13 | 
 14 |   ↳ **`PendingTransactionResponse`**
 15 | 
 16 | ## Table of contents
 17 | 
 18 | ### Constructors
 19 | 
 20 | - [constructor](modelsv2.PendingTransactionResponse.md#constructor)
 21 | 
 22 | ### Properties
 23 | 
 24 | - [applicationIndex](modelsv2.PendingTransactionResponse.md#applicationindex)
 25 | - [assetClosingAmount](modelsv2.PendingTransactionResponse.md#assetclosingamount)
 26 | - [assetIndex](modelsv2.PendingTransactionResponse.md#assetindex)
 27 | - [attribute\_map](modelsv2.PendingTransactionResponse.md#attribute_map)
 28 | - [closeRewards](modelsv2.PendingTransactionResponse.md#closerewards)
 29 | - [closingAmount](modelsv2.PendingTransactionResponse.md#closingamount)
 30 | - [confirmedRound](modelsv2.PendingTransactionResponse.md#confirmedround)
 31 | - [globalStateDelta](modelsv2.PendingTransactionResponse.md#globalstatedelta)
 32 | - [innerTxns](modelsv2.PendingTransactionResponse.md#innertxns)
 33 | - [localStateDelta](modelsv2.PendingTransactionResponse.md#localstatedelta)
 34 | - [logs](modelsv2.PendingTransactionResponse.md#logs)
 35 | - [poolError](modelsv2.PendingTransactionResponse.md#poolerror)
 36 | - [receiverRewards](modelsv2.PendingTransactionResponse.md#receiverrewards)
 37 | - [senderRewards](modelsv2.PendingTransactionResponse.md#senderrewards)
 38 | - [txn](modelsv2.PendingTransactionResponse.md#txn)
 39 | 
 40 | ### Methods
 41 | 
 42 | - [get\_obj\_for\_encoding](modelsv2.PendingTransactionResponse.md#get_obj_for_encoding)
 43 | - [from\_obj\_for\_encoding](modelsv2.PendingTransactionResponse.md#from_obj_for_encoding)
 44 | 
 45 | ## Constructors
 46 | 
 47 | ### constructor
 48 | 
 49 | • **new PendingTransactionResponse**(`«destructured»`)
 50 | 
 51 | Creates a new `PendingTransactionResponse` object.
 52 | 
 53 | #### Parameters
 54 | 
 55 | | Name | Type |
 56 | | :------ | :------ |
 57 | | `«destructured»` | `Object` |
 58 | | › `applicationIndex?` | `number` \| `bigint` |
 59 | | › `assetClosingAmount?` | `number` \| `bigint` |
 60 | | › `assetIndex?` | `number` \| `bigint` |
 61 | | › `closeRewards?` | `number` \| `bigint` |
 62 | | › `closingAmount?` | `number` \| `bigint` |
 63 | | › `confirmedRound?` | `number` \| `bigint` |
 64 | | › `globalStateDelta?` | [`EvalDeltaKeyValue`](modelsv2.EvalDeltaKeyValue.md)[] |
 65 | | › `innerTxns?` | [`PendingTransactionResponse`](modelsv2.PendingTransactionResponse.md)[] |
 66 | | › `localStateDelta?` | [`AccountStateDelta`](modelsv2.AccountStateDelta.md)[] |
 67 | | › `logs?` | `Uint8Array`[] |
 68 | | › `poolError` | `string` |
 69 | | › `receiverRewards?` | `number` \| `bigint` |
 70 | | › `senderRewards?` | `number` \| `bigint` |
 71 | | › `txn` | [`EncodedSignedTransaction`](../interfaces/EncodedSignedTransaction.md) |
 72 | 
 73 | #### Overrides
 74 | 
 75 | BaseModel.constructor
 76 | 
 77 | #### Defined in
 78 | 
 79 | client/v2/algod/models/types.ts:3948
 80 | 
 81 | ## Properties
 82 | 
 83 | ### applicationIndex
 84 | 
 85 | • `Optional` **applicationIndex**: `number` \| `bigint`
 86 | 
 87 | The application index if the transaction was found and it created an
 88 | application.
 89 | 
 90 | #### Defined in
 91 | 
 92 | client/v2/algod/models/types.ts:3867
 93 | 
 94 | ___
 95 | 
 96 | ### assetClosingAmount
 97 | 
 98 | • `Optional` **assetClosingAmount**: `number` \| `bigint`
 99 | 
100 | The number of the asset's unit that were transferred to the close-to address.
101 | 
102 | #### Defined in
103 | 
104 | client/v2/algod/models/types.ts:3872
105 | 
106 | ___
107 | 
108 | ### assetIndex
109 | 
110 | • `Optional` **assetIndex**: `number` \| `bigint`
111 | 
112 | The asset index if the transaction was found and it created an asset.
113 | 
114 | #### Defined in
115 | 
116 | client/v2/algod/models/types.ts:3877
117 | 
118 | ___
119 | 
120 | ### attribute\_map
121 | 
122 | • **attribute\_map**: `Record`\<`string`, `string`\>
123 | 
124 | #### Inherited from
125 | 
126 | BaseModel.attribute\_map
127 | 
128 | #### Defined in
129 | 
130 | client/v2/basemodel.ts:56
131 | 
132 | ___
133 | 
134 | ### closeRewards
135 | 
136 | • `Optional` **closeRewards**: `number` \| `bigint`
137 | 
138 | Rewards in microalgos applied to the close remainder to account.
139 | 
140 | #### Defined in
141 | 
142 | client/v2/algod/models/types.ts:3882
143 | 
144 | ___
145 | 
146 | ### closingAmount
147 | 
148 | • `Optional` **closingAmount**: `number` \| `bigint`
149 | 
150 | Closing amount for the transaction.
151 | 
152 | #### Defined in
153 | 
154 | client/v2/algod/models/types.ts:3887
155 | 
156 | ___
157 | 
158 | ### confirmedRound
159 | 
160 | • `Optional` **confirmedRound**: `number` \| `bigint`
161 | 
162 | The round where this transaction was confirmed, if present.
163 | 
164 | #### Defined in
165 | 
166 | client/v2/algod/models/types.ts:3892
167 | 
168 | ___
169 | 
170 | ### globalStateDelta
171 | 
172 | • `Optional` **globalStateDelta**: [`EvalDeltaKeyValue`](modelsv2.EvalDeltaKeyValue.md)[]
173 | 
174 | Global state key/value changes for the application being executed by this
175 | transaction.
176 | 
177 | #### Defined in
178 | 
179 | client/v2/algod/models/types.ts:3898
180 | 
181 | ___
182 | 
183 | ### innerTxns
184 | 
185 | • `Optional` **innerTxns**: [`PendingTransactionResponse`](modelsv2.PendingTransactionResponse.md)[]
186 | 
187 | Inner transactions produced by application execution.
188 | 
189 | #### Defined in
190 | 
191 | client/v2/algod/models/types.ts:3903
192 | 
193 | ___
194 | 
195 | ### localStateDelta
196 | 
197 | • `Optional` **localStateDelta**: [`AccountStateDelta`](modelsv2.AccountStateDelta.md)[]
198 | 
199 | Local state key/value changes for the application being executed by this
200 | transaction.
201 | 
202 | #### Defined in
203 | 
204 | client/v2/algod/models/types.ts:3909
205 | 
206 | ___
207 | 
208 | ### logs
209 | 
210 | • `Optional` **logs**: `Uint8Array`[]
211 | 
212 | Logs for the application being executed by this transaction.
213 | 
214 | #### Defined in
215 | 
216 | client/v2/algod/models/types.ts:3914
217 | 
218 | ___
219 | 
220 | ### poolError
221 | 
222 | • **poolError**: `string`
223 | 
224 | Indicates that the transaction was kicked out of this node's transaction pool
225 | (and specifies why that happened). An empty string indicates the transaction
226 | wasn't kicked out of this node's txpool due to an error.
227 | 
228 | #### Defined in
229 | 
230 | client/v2/algod/models/types.ts:3856
231 | 
232 | ___
233 | 
234 | ### receiverRewards
235 | 
236 | • `Optional` **receiverRewards**: `number` \| `bigint`
237 | 
238 | Rewards in microalgos applied to the receiver account.
239 | 
240 | #### Defined in
241 | 
242 | client/v2/algod/models/types.ts:3919
243 | 
244 | ___
245 | 
246 | ### senderRewards
247 | 
248 | • `Optional` **senderRewards**: `number` \| `bigint`
249 | 
250 | Rewards in microalgos applied to the sender account.
251 | 
252 | #### Defined in
253 | 
254 | client/v2/algod/models/types.ts:3924
255 | 
256 | ___
257 | 
258 | ### txn
259 | 
260 | • **txn**: [`EncodedSignedTransaction`](../interfaces/EncodedSignedTransaction.md)
261 | 
262 | The raw signed transaction.
263 | 
264 | #### Defined in
265 | 
266 | client/v2/algod/models/types.ts:3861
267 | 
268 | ## Methods
269 | 
270 | ### get\_obj\_for\_encoding
271 | 
272 | ▸ **get_obj_for_encoding**(`binary?`): `Record`\<`string`, `any`\>
273 | 
274 | Get an object ready for encoding to either JSON or msgpack.
275 | 
276 | #### Parameters
277 | 
278 | | Name | Type | Default value | Description |
279 | | :------ | :------ | :------ | :------ |
280 | | `binary` | `boolean` | `false` | Use true to indicate that the encoding can handle raw binary objects (Uint8Arrays). Use false to indicate that raw binary objects should be converted to base64 strings. True should be used for objects that will be encoded with msgpack, and false should be used for objects that will be encoded with JSON. |
281 | 
282 | #### Returns
283 | 
284 | `Record`\<`string`, `any`\>
285 | 
286 | #### Inherited from
287 | 
288 | BaseModel.get\_obj\_for\_encoding
289 | 
290 | #### Defined in
291 | 
292 | client/v2/basemodel.ts:65
293 | 
294 | ___
295 | 
296 | ### from\_obj\_for\_encoding
297 | 
298 | ▸ `Static` **from_obj_for_encoding**(`data`): [`PendingTransactionResponse`](modelsv2.PendingTransactionResponse.md)
299 | 
300 | #### Parameters
301 | 
302 | | Name | Type |
303 | | :------ | :------ |
304 | | `data` | `Record`\<`string`, `any`\> |
305 | 
306 | #### Returns
307 | 
308 | [`PendingTransactionResponse`](modelsv2.PendingTransactionResponse.md)
309 | 
310 | #### Defined in
311 | 
312 | client/v2/algod/models/types.ts:4014
313 | 
```

--------------------------------------------------------------------------------
/packages/server/src/resources/wallet/index.ts:
--------------------------------------------------------------------------------

```typescript
  1 | import { env } from '../../env.js';
  2 | import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js';
  3 | import algosdk from 'algosdk';
  4 | 
  5 | // Get account from mnemonic
  6 | const getAccountFromMnemonic = () => {
  7 |   if (!env.algorand_agent_wallet) {
  8 |     throw new McpError(
  9 |       ErrorCode.InvalidRequest,
 10 |       'No active wallet mnemonic configured'
 11 |     );
 12 |   }
 13 |   return algosdk.mnemonicToSecretKey(env.algorand_agent_wallet);
 14 | };
 15 | 
 16 | // Resource definitions
 17 | const resourceDefinitions = [
 18 |   {
 19 |     uri: 'algorand://wallet/secretkey',
 20 |     name: 'Wallet Secret Key',
 21 |     description: 'Secret key of the wallet in hex format',
 22 |     schema: {
 23 |       type: 'object',
 24 |       properties: {
 25 |         secretKey: { type: 'string' }
 26 |       }
 27 |     }
 28 |   },
 29 |   {
 30 |     uri: 'algorand://wallet/publickey',
 31 |     name: 'Wallet Public Key',
 32 |     description: 'Public key of the wallet in hex format',
 33 |     schema: {
 34 |       type: 'object',
 35 |       properties: {
 36 |         publicKey: { type: 'string' }
 37 |       }
 38 |     }
 39 |   },
 40 |   {
 41 |     uri: 'algorand://wallet/mnemonic',
 42 |     name: 'Wallet Mnemonic',
 43 |     description: 'Mnemonic phrase of the wallet',
 44 |     schema: {
 45 |       type: 'object',
 46 |       properties: {
 47 |         mnemonic: { type: 'string' }
 48 |       }
 49 |     }
 50 |   },
 51 |   {
 52 |     uri: 'algorand://wallet/address',
 53 |     name: 'Wallet Address',
 54 |     description: 'Algorand address of the wallet',
 55 |     schema: {
 56 |       type: 'object',
 57 |       properties: {
 58 |         address: { type: 'string' }
 59 |       }
 60 |     }
 61 |   },
 62 |   {
 63 |     uri: 'algorand://wallet/account',
 64 |     name: 'Wallet Account',
 65 |     description: 'Algorand account balance and asset holdings',
 66 |     schema: {
 67 |       type: 'object',
 68 |       properties: {
 69 |         accounts: {
 70 |           type: 'array',
 71 |           items: {
 72 |             type: 'object',
 73 |             properties: {
 74 |               address: { type: 'string' },
 75 |               amount: { type: 'number' },
 76 |               assets: { type: 'array' }
 77 |             }
 78 |           }
 79 |         }
 80 |       }
 81 |     }
 82 |   },
 83 |   {
 84 |     uri: 'algorand://wallet/assets',
 85 |     name: 'Wallet Account Assets',
 86 |     description: 'Asset holdings for Wallet account',
 87 |     schema: {
 88 |       type: 'object',
 89 |       properties: {
 90 |         assets: {
 91 |           type: 'array',
 92 |           items: {
 93 |             type: 'object',
 94 |             properties: {
 95 |               id: { type: 'number' },
 96 |               amount: { type: 'number' },
 97 |               frozen: { type: 'boolean' }
 98 |             }
 99 |           }
100 |         }
101 |       }
102 |     }
103 |   }
104 | ];
105 | 
106 | // Resource module implementation
107 | export const walletResources = {
108 |   canHandle: (uri: string): boolean => {
109 |     return uri.startsWith('algorand://wallet/');
110 |   },
111 | 
112 |   handle: async (uri: string) => {
113 |     if (!env.algorand_agent_wallet) {
114 |       throw new McpError(
115 |         ErrorCode.InvalidRequest,
116 |         'Wallet resources are not available - no active wallet configured'
117 |       );
118 |     }
119 | 
120 |     switch (uri) {
121 |       case 'algorand://wallet/account':
122 |         try {
123 |           const account = getAccountFromMnemonic();
124 |           
125 |           // Get account info from algod
126 |           const algodClient = new algosdk.Algodv2(
127 |             env.algorand_token,
128 |             env.algorand_algod,
129 |             env.algorand_algod_port
130 |           );
131 | 
132 |           const accountInfo = await algodClient.accountInformation(account.addr).do();
133 | 
134 |           return {
135 |             contents: [{
136 |               uri,
137 |               mimeType: 'application/json',
138 |               text: JSON.stringify({
139 |                 accounts: [{
140 |                   address: account.addr,
141 |                   amount: accountInfo.amount,
142 |                   assets: accountInfo.assets || []
143 |                 }]
144 |               }, null, 2)
145 |             }]
146 |           };
147 |         } catch (error) {
148 |           throw new McpError(
149 |             ErrorCode.InternalError,
150 |             `Failed to get account info: ${error instanceof Error ? error.message : String(error)}`
151 |           );
152 |         }
153 | 
154 |       case 'algorand://wallet/assets':
155 |         try {
156 |           const account = getAccountFromMnemonic();
157 |           
158 |           // Get account info from algod
159 |           const algodClient = new algosdk.Algodv2(
160 |             env.algorand_token,
161 |             env.algorand_algod,
162 |             env.algorand_algod_port
163 |           );
164 | 
165 |           const accountInfo = await algodClient.accountInformation(account.addr).do();
166 | 
167 |           return {
168 |             contents: [{
169 |               uri,
170 |               mimeType: 'application/json',
171 |               text: JSON.stringify({
172 |                 assets: accountInfo.assets || []
173 |               }, null, 2)
174 |             }]
175 |           };
176 |         } catch (error) {
177 |           throw new McpError(
178 |             ErrorCode.InternalError,
179 |             `Failed to get asset info: ${error instanceof Error ? error.message : String(error)}`
180 |           );
181 |         }
182 | 
183 |       case 'algorand://wallet/secretkey':
184 |         try {
185 |           const account = getAccountFromMnemonic();
186 |           return {
187 |             contents: [{
188 |               uri,
189 |               mimeType: 'application/json',
190 |               text: JSON.stringify({
191 |                 secretKey: Buffer.from(account.sk).toString('hex')
192 |               }, null, 2)
193 |             }]
194 |           };
195 |         } catch (error) {
196 |           throw new McpError(
197 |             ErrorCode.InternalError,
198 |             `Failed to get secret key: ${error instanceof Error ? error.message : String(error)}`
199 |           );
200 |         }
201 | 
202 |       case 'algorand://wallet/publickey':
203 |         try {
204 |           const account = getAccountFromMnemonic();
205 |           return {
206 |             contents: [{
207 |               uri,
208 |               mimeType: 'application/json',
209 |               text: JSON.stringify({
210 |                 publicKey: Buffer.from(account.sk.slice(32)).toString('hex')
211 |               }, null, 2)
212 |             }]
213 |           };
214 |         } catch (error) {
215 |           throw new McpError(
216 |             ErrorCode.InternalError,
217 |             `Failed to get public key: ${error instanceof Error ? error.message : String(error)}`
218 |           );
219 |         }
220 | 
221 |       case 'algorand://wallet/mnemonic':
222 |         try {
223 |           return {
224 |             contents: [{
225 |               uri,
226 |               mimeType: 'application/json',
227 |               text: JSON.stringify({
228 |                 mnemonic: env.algorand_agent_wallet
229 |               }, null, 2)
230 |             }]
231 |           };
232 |         } catch (error) {
233 |           throw new McpError(
234 |             ErrorCode.InternalError,
235 |             `Failed to get mnemonic: ${error instanceof Error ? error.message : String(error)}`
236 |           );
237 |         }
238 | 
239 |       case 'algorand://wallet/address':
240 |         try {
241 |           const account = getAccountFromMnemonic();
242 |           return {
243 |             contents: [{
244 |               uri,
245 |               mimeType: 'application/json',
246 |               text: JSON.stringify({
247 |                 address: account.addr
248 |               }, null, 2)
249 |             }]
250 |           };
251 |         } catch (error) {
252 |           throw new McpError(
253 |             ErrorCode.InternalError,
254 |             `Failed to get address: ${error instanceof Error ? error.message : String(error)}`
255 |           );
256 |         }
257 | 
258 |       default:
259 |         throw new McpError(
260 |           ErrorCode.InvalidRequest,
261 |           `Unknown wallet resource: ${uri}`
262 |         );
263 |     }
264 |   },
265 | 
266 |   getResourceDefinitions: () => {
267 |     if (!env.algorand_agent_wallet) {
268 |       return [];
269 |     }
270 |     return resourceDefinitions;
271 |   }
272 | };
273 | 
```

--------------------------------------------------------------------------------
/packages/server/src/index.ts:
--------------------------------------------------------------------------------

```typescript
  1 | import { Server } from '@modelcontextprotocol/sdk/server/index.js';
  2 | import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
  3 | import {
  4 |   CallToolRequestSchema,
  5 |   ErrorCode,
  6 |   ListResourcesRequestSchema,
  7 |   ListToolsRequestSchema,
  8 |   McpError,
  9 |   ReadResourceRequestSchema,
 10 |   PingRequestSchema,
 11 | } from '@modelcontextprotocol/sdk/types.js';
 12 | import {
 13 |   AccountManager,
 14 |   UtilityManager,
 15 |   TransactionManager,
 16 |   AlgodManager,
 17 |   transactionTools,
 18 |   apiManager,
 19 |   handleApiManager,
 20 |   arc26Manager,
 21 |   KnowledgeManager
 22 | } from './tools/index.js';
 23 | import { ResourceManager } from './resources/index.js';
 24 | 
 25 | 
 26 | class AlgorandMcpServer {
 27 |   private server: Server;
 28 |   private name: string;
 29 | 
 30 |   constructor(name = 'algorand-mcp-server', version = '2.7.5') {
 31 |     this.name = name;
 32 |     this.server = new Server(
 33 |       {
 34 |         name,
 35 |         version,
 36 |         heartbeatInterval: 15000, // 15 seconds heartbeat interval
 37 |         requestTimeout: 60000,    // 60 seconds request timeout
 38 |       },
 39 |       {
 40 |         capabilities: {
 41 |           resources: {
 42 |             schemas: ResourceManager.schemas
 43 |           },
 44 |           tools: {
 45 |             schemas: {
 46 |               // Account Management Tools
 47 |               ...AccountManager.accountTools.reduce((acc, tool) => ({
 48 |                 ...acc,
 49 |                 [tool.name]: tool.inputSchema
 50 |               }), {}),
 51 |               // Utility Tools
 52 |               ...UtilityManager.utilityTools.reduce((acc, tool) => ({
 53 |                 ...acc,
 54 |                 [tool.name]: tool.inputSchema
 55 |               }), {}),
 56 |               // Algod Tools
 57 |               ...AlgodManager.algodTools.reduce((acc, tool) => ({
 58 |                 ...acc,
 59 |                 [tool.name]: tool.inputSchema
 60 |               }), {}),
 61 |               // Transaction Tools
 62 |               ...transactionTools.reduce((acc, tool) => ({
 63 |                 ...acc,
 64 |                 [tool.name]: tool.inputSchema
 65 |               }), {}),
 66 |               // API Tools
 67 |               ...apiManager.reduce((acc, tool) => ({
 68 |                 ...acc,
 69 |                 [tool.name]: tool.inputSchema
 70 |               }), {}),
 71 |               // ARC-26 Tools
 72 |               ...arc26Manager.arc26Tools.reduce((acc, tool) => ({
 73 |                 ...acc,
 74 |                 [tool.name]: tool.inputSchema
 75 |               }), {}),
 76 |               // Knowledge Tools
 77 |               ...KnowledgeManager.knowledgeTools.reduce((acc, tool) => ({
 78 |                 ...acc,
 79 |                 [tool.name]: tool.inputSchema
 80 |               }), {})
 81 |             }
 82 |           },
 83 |         },
 84 |       }
 85 |     );
 86 | 
 87 |     this.setupResourceHandlers();
 88 |     this.setupToolHandlers();
 89 |     this.setupPingHandler();
 90 |     
 91 |     // Error handling
 92 |     this.server.onerror = (error) => console.error('[MCP Error]', error);
 93 |     process.on('SIGINT', async () => {
 94 |       await this.server.close();
 95 |       process.exit(0);
 96 |     });
 97 |   }
 98 | 
 99 |   private setupResourceHandlers() {
100 |     // Implement resources/list method
101 |     this.server.setRequestHandler(ListResourcesRequestSchema, async () => {
102 |       return {
103 |         resources: ResourceManager.resources.map(resource => ({
104 |           uri: resource.uri,
105 |           name: resource.name,
106 |           description: resource.description,
107 |           mimeType: 'application/json',
108 |           schema: ResourceManager.schemas[resource.uri]
109 |         }))
110 |       };
111 |     });
112 | 
113 |     // Handle resource reads
114 |     this.server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
115 |       if (!request.params?.uri) {
116 |         throw new McpError(ErrorCode.InvalidRequest, 'URI parameter is required');
117 |       }
118 |       return await ResourceManager.handleResource(request.params.uri);
119 |     });
120 |   }
121 | 
122 |   private setupPingHandler() {
123 |     // Handle ping requests
124 |     this.server.setRequestHandler(PingRequestSchema, async (request) => {
125 |       try {
126 |         console.error('[MCP Debug] Received ping request:', request);
127 |         const response = {};
128 |         console.error('[MCP Debug] Sending ping response:', response);
129 |         return response;
130 |       } catch (error) {
131 |         console.error('[MCP Error] Ping handler error:', error);
132 |         throw new McpError(
133 |           ErrorCode.InternalError,
134 |           `Ping failed: ${error instanceof Error ? error.message : 'Unknown error'}`
135 |         );
136 |       }
137 |     });
138 |   }
139 | 
140 |   private setupToolHandlers() {
141 |     // List available tools
142 |     this.server.setRequestHandler(ListToolsRequestSchema, async () => ({
143 |       tools: [
144 |         // Account Management Tools
145 |         ...AccountManager.accountTools,
146 |         // Utility Tools
147 |         ...UtilityManager.utilityTools,
148 |         // Algod Tools
149 |         ...AlgodManager.algodTools,
150 |         // Transaction Tools
151 |         ...transactionTools,
152 |         // API Tools
153 |         ...apiManager,
154 |         // ARC-26 Tools
155 |         ...arc26Manager.arc26Tools,
156 |         // Knowledge Tools
157 |         ...KnowledgeManager.knowledgeTools,
158 |       ],
159 |     }));
160 | 
161 |     // Handle tool calls
162 |     this.server.setRequestHandler(CallToolRequestSchema, async (request) => {
163 |       const { name, arguments: args = {} } = request.params;
164 | 
165 |       // Handle account tools
166 |       if (
167 |         name.startsWith('create_account') ||
168 |         name.startsWith('rekey_account') ||
169 |         name.startsWith('mnemonic_') ||
170 |         name.startsWith('mdk_') ||
171 |         name.startsWith('seed_') ||
172 |         name.startsWith('secret_key_')
173 |       ) {
174 |         return AccountManager.handleTool(name, args);
175 |       }
176 | 
177 |       // Handle utility tools
178 |       if (
179 |         name === 'ping' ||
180 |         name.startsWith('validate_address') ||
181 |         name.startsWith('encode_address') ||
182 |         name.startsWith('decode_address') ||
183 |         name.startsWith('get_application_address') ||
184 |         name.startsWith('bytes_to_bigint') ||
185 |         name.startsWith('bigint_to_bytes') ||
186 |         name.startsWith('encode_uint64') ||
187 |         name.startsWith('decode_uint64') ||
188 |         name.startsWith('verify_bytes') ||
189 |         name.startsWith('sign_bytes') ||
190 |         name.startsWith('encode_obj') ||
191 |         name.startsWith('decode_obj') 
192 | 
193 |       ) {
194 |         return UtilityManager.handleTool(name, args);
195 |       }
196 | 
197 |       // Handle algod tools
198 |       if (
199 |         name.startsWith('compile_') ||
200 |         name.startsWith('disassemble_') ||
201 |         name.startsWith('send_raw_') ||
202 |         name.startsWith('simulate_')
203 |       ) {
204 |         return AlgodManager.handleTool(name, args);
205 |       }
206 | 
207 |       // Handle transaction tools
208 |       if (
209 |         name.startsWith('make_') ||
210 |         name === 'assign_group_id' ||
211 |         name === 'sign_transaction' 
212 | 
213 |       ) {
214 |         return TransactionManager.handleTool(name, args);
215 |       }
216 | 
217 |       // Handle API tools
218 |       if (name.startsWith('api_')) {
219 |         return handleApiManager(name, args);
220 |       }
221 | 
222 |       // Handle ARC-26 tools
223 |       if (name === 'generate_algorand_uri') {
224 |         return arc26Manager.handleTool(name, args);
225 |       }
226 | 
227 |       // Handle knowledge tools
228 |       if (name.startsWith('get_knowledge_')) {
229 |         return KnowledgeManager.handleTool(name, args);
230 |       }
231 | 
232 |       throw new McpError(ErrorCode.MethodNotFound, `Unknown tool: ${name}`);
233 |     });
234 |   }
235 | 
236 |   async run() {
237 |     const transport = new StdioServerTransport();
238 |     await this.server.connect(transport);
239 |     console.error(`${this.name} running on stdio`);
240 |   }
241 | }
242 | const server = new AlgorandMcpServer();
243 | server.run().catch(console.error);
244 | 
```

--------------------------------------------------------------------------------
/packages/server/src/tools/apiManager/algod/transaction.ts:
--------------------------------------------------------------------------------

```typescript
  1 | import { ErrorCode, McpError } from '@modelcontextprotocol/sdk/types.js';
  2 | import { algodClient } from '../../../algorand-client.js';
  3 | import type { 
  4 |   PendingTransactionResponse,
  5 |   NodeStatusResponse,
  6 |   PendingTransactionsResponse
  7 | } from 'algosdk/dist/types/client/v2/algod/models/types';
  8 | import type { SuggestedParamsWithMinFee } from 'algosdk/dist/types/types/transactions/base';
  9 | 
 10 | export const transactionTools = [
 11 |   {
 12 |     name: 'api_algod_get_pending_transaction',
 13 |     description: 'Get pending transaction information',
 14 |     inputSchema: {
 15 |       type: 'object',
 16 |       properties: {
 17 |         txId: {
 18 |           type: 'string',
 19 |           description: 'Transaction ID'
 20 |         }
 21 |       },
 22 |       required: ['txId']
 23 |     }
 24 |   },
 25 |   {
 26 |     name: 'api_algod_get_pending_transactions_by_address',
 27 |     description: 'Get pending transactions for an address',
 28 |     inputSchema: {
 29 |       type: 'object',
 30 |       properties: {
 31 |         address: {
 32 |           type: 'string',
 33 |           description: 'Account address'
 34 |         }
 35 |       },
 36 |       required: ['address']
 37 |     }
 38 |   },
 39 |   {
 40 |     name: 'api_algod_get_pending_transactions',
 41 |     description: 'Get all pending transactions',
 42 |     inputSchema: {
 43 |       type: 'object',
 44 |       properties: {
 45 |         maxTxns: {
 46 |           type: 'integer',
 47 |           description: 'Maximum number of transactions to return'
 48 |         }
 49 |       }
 50 |     }
 51 |   },
 52 |   {
 53 |     name: 'api_algod_get_transaction_params',
 54 |     description: 'Get suggested transaction parameters',
 55 |     inputSchema: {
 56 |       type: 'object',
 57 |       properties: {}
 58 |     }
 59 |   },
 60 |   {
 61 |     name: 'api_algod_get_node_status',
 62 |     description: 'Get current node status',
 63 |     inputSchema: {
 64 |       type: 'object',
 65 |       properties: {}
 66 |     }
 67 |   },
 68 |   {
 69 |     name: 'api_algod_get_node_status_after_block',
 70 |     description: 'Get node status after a specific round',
 71 |     inputSchema: {
 72 |       type: 'object',
 73 |       properties: {
 74 |         round: {
 75 |           type: 'integer',
 76 |           description: 'Round number'
 77 |         }
 78 |       },
 79 |       required: ['round']
 80 |     }
 81 |   }
 82 | ];
 83 | 
 84 | export async function getPendingTransaction(txId: string): Promise<PendingTransactionResponse> {
 85 |   try {
 86 |     console.log(`Fetching pending transaction info for ID ${txId}`);
 87 |     const response = await algodClient.pendingTransactionInformation(txId).do() as PendingTransactionResponse;
 88 |     console.log('Pending transaction response:', JSON.stringify(response, null, 2));
 89 |     return response;
 90 |   } catch (error) {
 91 |     console.error('Pending transaction fetch error:', error);
 92 |     if (error instanceof McpError) {
 93 |       throw error;
 94 |     }
 95 |     throw new McpError(
 96 |       ErrorCode.InternalError,
 97 |       `Failed to get pending transaction: ${error instanceof Error ? error.message : String(error)}`
 98 |     );
 99 |   }
100 | }
101 | 
102 | export async function getPendingTransactionsByAddress(address: string): Promise<PendingTransactionsResponse> {
103 |   try {
104 |     console.log(`Fetching pending transactions for address ${address}`);
105 |     const response = await algodClient.pendingTransactionByAddress(address).do() as PendingTransactionsResponse;
106 |     console.log('Pending transactions response:', JSON.stringify(response, null, 2));
107 |     return response;
108 |   } catch (error) {
109 |     console.error('Pending transactions fetch error:', error);
110 |     if (error instanceof McpError) {
111 |       throw error;
112 |     }
113 |     throw new McpError(
114 |       ErrorCode.InternalError,
115 |       `Failed to get pending transactions by address: ${error instanceof Error ? error.message : String(error)}`
116 |     );
117 |   }
118 | }
119 | 
120 | export async function getPendingTransactions(maxTxns?: number): Promise<PendingTransactionsResponse> {
121 |   try {
122 |     console.log('Fetching all pending transactions');
123 |     let search = algodClient.pendingTransactionsInformation();
124 |     if (maxTxns !== undefined) {
125 |       search = search.max(maxTxns);
126 |     }
127 |     const response = await search.do() as PendingTransactionsResponse;
128 |     console.log('Pending transactions response:', JSON.stringify(response, null, 2));
129 |     return response;
130 |   } catch (error) {
131 |     console.error('Pending transactions fetch error:', error);
132 |     if (error instanceof McpError) {
133 |       throw error;
134 |     }
135 |     throw new McpError(
136 |       ErrorCode.InternalError,
137 |       `Failed to get pending transactions: ${error instanceof Error ? error.message : String(error)}`
138 |     );
139 |   }
140 | }
141 | 
142 | export async function getTransactionParams(): Promise<SuggestedParamsWithMinFee> {
143 |   try {
144 |     console.log('Fetching transaction parameters');
145 |     const response = await algodClient.getTransactionParams().do();
146 |     console.log('Transaction parameters response:', JSON.stringify(response, null, 2));
147 |     return response;
148 |   } catch (error) {
149 |     console.error('Transaction parameters fetch error:', error);
150 |     if (error instanceof McpError) {
151 |       throw error;
152 |     }
153 |     throw new McpError(
154 |       ErrorCode.InternalError,
155 |       `Failed to get transaction params: ${error instanceof Error ? error.message : String(error)}`
156 |     );
157 |   }
158 | }
159 | 
160 | export async function getNodeStatus(): Promise<NodeStatusResponse> {
161 |   try {
162 |     console.log('Fetching node status');
163 |     const response = await algodClient.status().do() as NodeStatusResponse;
164 |     console.log('Node status response:', JSON.stringify(response, null, 2));
165 |     return response;
166 |   } catch (error) {
167 |     console.error('Node status fetch error:', error);
168 |     if (error instanceof McpError) {
169 |       throw error;
170 |     }
171 |     throw new McpError(
172 |       ErrorCode.InternalError,
173 |       `Failed to get status: ${error instanceof Error ? error.message : String(error)}`
174 |     );
175 |   }
176 | }
177 | 
178 | export async function getNodeStatusAfterBlock(round: number): Promise<NodeStatusResponse> {
179 |   try {
180 |     console.log(`Fetching node status after round ${round}`);
181 |     const response = await algodClient.statusAfterBlock(round).do() as NodeStatusResponse;
182 |     console.log('Node status response:', JSON.stringify(response, null, 2));
183 |     return response;
184 |   } catch (error) {
185 |     console.error('Node status fetch error:', error);
186 |     if (error instanceof McpError) {
187 |       throw error;
188 |     }
189 |     throw new McpError(
190 |       ErrorCode.InternalError,
191 |       `Failed to get status after block: ${error instanceof Error ? error.message : String(error)}`
192 |     );
193 |   }
194 | }
195 | 
196 | export async function handleTransactionTools(name: string, args: any): Promise<any> {
197 |   switch (name) {
198 |     case 'api_algod_get_pending_transaction': {
199 |       const { txId } = args;
200 |       const info = await getPendingTransaction(txId);
201 |       return info;
202 |     }
203 |     case 'api_algod_get_pending_transactions_by_address': {
204 |       const { address } = args;
205 |       const info = await getPendingTransactionsByAddress(address);
206 |       return info;
207 |     }
208 |     case 'api_algod_get_pending_transactions': {
209 |       const { maxTxns } = args;
210 |       const info = await getPendingTransactions(maxTxns);
211 |       return info;
212 |     }
213 |     case 'api_algod_get_transaction_params': {
214 |       const params = await getTransactionParams();
215 |       return params;
216 |     }
217 |     case 'api_algod_get_node_status': {
218 |       const nodeStatus = await getNodeStatus();
219 |       return nodeStatus;
220 |     }
221 |     case 'api_algod_get_node_status_after_block': {
222 |       const { round } = args;
223 |       const nodeStatus = await getNodeStatusAfterBlock(round);
224 |       return nodeStatus;
225 |     }
226 |     default:
227 |       throw new McpError(
228 |         ErrorCode.MethodNotFound,
229 |         `Unknown tool: ${name}`
230 |       );
231 |   }
232 | }
233 | 
```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/developer:docs:details:parameter_tables.md:
--------------------------------------------------------------------------------

```markdown
 1 | title: Algorand parameter tables
 2 | [comment]: <> (generated from: https://docs.google.com/spreadsheets/d/12E_B6AYBfhrOoylO8NZysqKns4rHKklV8I0fejiwMXE)
 3 | 
 4 | ## Minimum balance
 5 | |Name|Current value|Developer doc|Consensus parameter name in (.go)|Note|
 6 | |-|-|-|-|-|
 7 | |Default|0.1 Algos|[reference](./accounts/index.md#minimum-balance)|MinBalance||
 8 | |Opt-in ASA|+ 0.1 Algos|[reference](./asa.md#assets-overview)|MinBalance||
 9 | |Created ASA|+ 0.1 Algos|[reference](./asa.md#assets-overview)|MinBalance|creator of ASA does not need to opt in|
10 | |Opt-in Application|(see below)|||creator of application only needs to opt in if they use local state|
11 | |Created Application|(see below)||||
12 | 
13 | ## Minimum balance for smart contract
14 | |Name|Current value|Developer doc|Consensus parameter name in (.go)|Note|
15 | |-|-|-|-|-|
16 | |Per page application creation fee|0.1 Algos|[reference](./dapps/smart-contracts/apps/index.md#minimum-balance-requirement-for-a-smart-contract)|AppFlatParamsMinBalance||
17 | |Flat for application opt-in|0.1 Algos|[reference](./dapps/smart-contracts/apps/index.md#minimum-balance-requirement-for-a-smart-contract)|AppFlatOptInMinBalance||
18 | |Per state entry|0.025 Algos|[reference](./dapps/smart-contracts/apps/index.md#minimum-balance-requirement-for-a-smart-contract)|SchemaMinBalancePerEntry||
19 | |Addition per integer entry|0.0035 Algos|[reference](./dapps/smart-contracts/apps/index.md#minimum-balance-requirement-for-a-smart-contract)|SchemaUintMinBalance||
20 | |Addition per byte slice entry|0.025 Algos|[reference](./dapps/smart-contracts/apps/index.md#minimum-balance-requirement-for-a-smart-contract)|SchemaBytesMinBalance||
21 | |Per Box created|0.0025 Algos|[reference](./dapps/smart-contracts/apps/index.md#minimum-balance-requirement-for-a-smart-contract)|BoxFlatMinBalance||
22 | |Per byte in box created|0.0004 Algos|[reference](./dapps/smart-contracts/apps/index.md#minimum-balance-requirement-for-a-smart-contract)|BoxByteMinBalance|Includes the length of the key|
23 | 
24 | ## Transaction fee
25 | |Name|Current value|Developer doc|Consensus parameter name in (.go)|Note|
26 | |-|-|-|-|-|
27 | |Minimum transaction fee, in all cases|0.001 Algos|[reference](./transactions/index.md#fees)|MinTxnFee||
28 | |Additional minimum constraint if congestion|additional fee per byte|[reference](./transactions/index.md#fees)|-||
29 | 
30 | ## Others
31 | |Name|Current value|Developer doc|Consensus parameter name in (.go)|Note|
32 | |-|-|-|-|-|
33 | |Max number transactions in a group / atomic transfer|16|[reference](./atomic_transfers.md)|MaxTxGroupSize||
34 | |Max number of inner transactions|256|[reference](https://developer.algorand.org/docs/get-details/dapps/smart-contracts/apps/#inner-transactions)|MaxInnerTransactions|Whilst the actual value is 16, inner transaction pooling multiplies this value by MaxTxGroupSize.|
35 | |Maximum size of a block|5000000 bytes|-|MaxTxnBytesPerBlock||
36 | |Maximum size of note|1024 bytes|-|MaxTxnNoteBytes||
37 | |Maximum transaction life|1000 rounds|[reference](./transactions/index.md#setting-first-and-last-valid)|MaxTxnLife||
38 | 
39 | ## ASA constraints
40 | |Name|Current value|Developer doc|Consensus parameter name in (.go)|Note|
41 | |-|-|-|-|-|
42 | |Max number of ASAs (create and opt-in)|Unlimited|[reference](./asa.md)|MaxAssetsPerAccount||
43 | |Max asset name size|32 bytes|[reference](./asa.md)|MaxAssetNameBytes||
44 | |Max unit name size|8 bytes|[reference](./asa.md)|MaxAssetUnitNameBytes||
45 | |Max URL size|96 bytes|[reference](./asa.md)|MaxAssetURLBytes||
46 | |Metadata hash|32 bytes|[reference](./asa.md)||padded with zeros|
47 | 
48 | ## Smart signature constraints
49 | |Name|Current value|Developer doc|Consensus parameter name in (.go)|Note|
50 | |-|-|-|-|-|
51 | |Max size of compiled TEAL code combined with arguments|1000 bytes|[reference](../dapps/avm/teal/specification#execution-environment-for-logicsigs)|LogicSigMaxSize||
52 | |Max cost of TEAL code|20000|[reference](../dapps/avm/teal/specification#execution-environment-for-logicsigs)|LogicSigMaxCost||
53 | 
54 | ## Smart contract constraints
55 | |Name|Current value|Developer doc|Consensus parameter name in (.go)|Note|
56 | |-|-|-|-|-|
57 | |Page size of compiled approval + clear TEAL code|2048 bytes|[reference](./dapps/avm/teal/index.md#dynamic-operational-cost-of-teal-opcodes)|MaxAppProgramLen|by default, each application has a single page|
58 | |Max extra app pages |3|[reference](./dapps/smart-contracts/apps/index.md#creating-the-smart-contract)|MaxExtraAppProgramPages|an application can "pay" for additional pages via minimum balance|
59 | |Max cost of approval TEAL code|700|[reference](./dapps/avm/teal/index.md#dynamic-operational-cost-of-teal-opcodes)|MaxAppProgramCost||
60 | |Max cost of clear TEAL code|700|[reference](./dapps/avm/teal/index.md#dynamic-operational-cost-of-teal-opcodes)|MaxAppProgramCost||
61 | |Max number of scratch variables|256|[reference](../dapps/avm/teal/specification/#scratch-space)|||
62 | |Max depth of stack|1000|[reference](../dapps/avm/teal/specification/#the-stack)|MaxStackDepth||
63 | |Max number of arguments|16|[reference](./dapps/smart-contracts/apps/index.md#passing-arguments-to-stateful-smart-contracts)|MaxAppArgs||
64 | |Max combined size of arguments|2048 bytes|[reference](./dapps/smart-contracts/apps/index.md#passing-arguments-to-stateful-smart-contracts)|MaxAppTotalArgLen||
65 | |Max number of global state keys|64|[reference](./dapps/smart-contracts/apps/index.md#creating-the-smart-contract)|MaxGlobalSchemaEntries||
66 | |Max number of local state keys|16|[reference](./dapps/smart-contracts/apps/index.md#creating-the-smart-contract)|MaxLocalSchemaEntries||
67 | |Max number of log messages|32|[reference](../dapps/avm/teal/opcodes/#log)|MaxLogCalls||
68 | |Max size of log messages|1024|[reference](../dapps/avm/teal/opcodes/#log)|MaxLogSize||
69 | |Max key size|64 bytes|[reference](./dapps/smart-contracts/apps/index.md#creating-the-smart-contract)|MaxAppKeyLen||
70 | |Max []byte value size|128 bytes|[reference](./dapps/smart-contracts/apps/index.md#creating-the-smart-contract)|MaxAppBytesValueLen||
71 | |Max key + value size|128 bytes|[reference](./dapps/smart-contracts/apps/index.md#creating-the-smart-contract)|MaxAppSumKeyValueLens||
72 | |Max number of foreign accounts|4|[reference](./dapps/smart-contracts/apps/index.md#stateful-contract-arrays)|MaxAppTxnAccounts||
73 | |Max number of foreign ASAs|8|[reference](./dapps/smart-contracts/apps/index.md#stateful-contract-arrays)|MaxAppTxnForeignAssets||
74 | |Max number of foreign applications|8|[reference](./dapps/smart-contracts/apps/index.md#stateful-contract-arrays)|MaxAppTxnForeignApps||
75 | |Max number of foreign accounts + ASAs + applications + box storage|8|[reference](./dapps/smart-contracts/apps/index.md#stateful-contract-arrays)|MaxAppTotalTxnReferences||
76 | |Max number of created applications|Unlimited|[reference](./dapps/smart-contracts/apps/index.md#opt-into-the-smart-contract)|MaxAppsCreated||
77 | |Max number of opt-in applications|Unlimited|[reference](./dapps/smart-contracts/apps/index.md#opt-into-the-smart-contract)|MaxAppsOptedIn||
78 | 
79 | ## Box Constraints
80 | |Name|Current value|Developer doc|Consensus parameter name in (.go)|Note|
81 | |-|-|-|-|-|
82 | |Max size of box | 32768 |[reference](./dapps/smart-contracts/apps/index.md#box-storage)|MaxBoxSize|Does not include name/key length. That is capped by MaxAppKeyLen|
83 | |Max box references | 8 |[reference](./dapps/smart-contracts/apps/index.md#smart-contract-arrays)|MaxAppBoxReferences||
84 | |Bytes per Box reference | 1024 |[reference](./dapps/smart-contracts/apps/index.md#smart-contract-arrays)|BytesPerBoxReference||
85 | 
```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/puya:python:testing:docs:index.md:
--------------------------------------------------------------------------------

```markdown
  1 | # Algorand Python Testing
  2 | 
  3 | [![docs-repository](https://img.shields.io/badge/url-repository-74dfdc?logo=github&style=flat.svg)](https://github.com/algorandfoundation/algorand-python-testing/)
  4 | [![learn-AlgoKit](https://img.shields.io/badge/learn-AlgoKit-74dfdc?logo=algorand&mac=flat.svg)](https://developer.algorand.org/algokit/)
  5 | [![github-stars](https://img.shields.io/github/stars/algorandfoundation/algorand-python-testing?color=74dfdc&logo=star&style=flat)](https://github.com/algorandfoundation/algorand-python-testing)
  6 | [![visitor-badge](https://api.visitorbadge.io/api/visitors?path=https%3A%2F%2Fgithub.com%2Falgorandfoundation%2Falgorand-python-testing&countColor=%2374dfdc&style=flat)](https://developer.algorand.org/algokit/)
  7 | 
  8 | `algorand-python-testing` is a companion package to [Algorand Python](https://github.com/algorandfoundation/puya) that enables efficient unit testing of Algorand Python smart contracts in an offline environment. This package emulates key AVM behaviors without requiring a network connection, offering fast and reliable testing capabilities with a familiar Pythonic interface.
  9 | 
 10 | The `algorand-python-testing` package provides:
 11 | 
 12 | -   A simple interface for fast and reliable unit testing
 13 | -   An offline testing environment that simulates core AVM functionality
 14 | -   A familiar Pythonic experience, compatible with testing frameworks like [pytest](https://docs.pytest.org/en/latest/), [unittest](https://docs.python.org/3/library/unittest.html), and [hypothesis](https://hypothesis.readthedocs.io/en/latest/)
 15 | 
 16 | ## Quick Start
 17 | 
 18 | `algopy` is a prerequisite for `algorand-python-testing`, providing stubs and type annotations for Algorand Python syntax. It enhances code completion and type checking when writing smart contracts. Note that this code isn't directly executable in standard Python interpreters; it's compiled by `puya` into TEAL for Algorand Network deployment.
 19 | 
 20 | Traditionally, testing Algorand smart contracts involved deployment on sandboxed networks and interacting with live instances. While robust, this approach can be inefficient and lacks versatility for testing Algorand Python code.
 21 | 
 22 | Enter `algorand-python-testing`: it leverages Python's rich testing ecosystem for unit testing without network deployment. This enables rapid iteration and granular logic testing.
 23 | 
 24 | > **NOTE**: While `algorand-python-testing` offers valuable unit testing capabilities, it's not a replacement for comprehensive testing. Use it alongside other test types, particularly those running against the actual Algorand Network, for thorough contract validation.
 25 | 
 26 | ### Prerequisites
 27 | 
 28 | -   Python 3.12 or later
 29 | -   [Algorand Python](https://github.com/algorandfoundation/puya)
 30 | 
 31 | ### Installation
 32 | 
 33 | `algorand-python-testing` is distributed via [PyPI](https://pypi.org/project/algorand-python-testing/). Install the package using `pip`:
 34 | 
 35 | ```bash
 36 | pip install algorand-python-testing
 37 | ```
 38 | 
 39 | or using `poetry`:
 40 | 
 41 | ```bash
 42 | poetry add algorand-python-testing
 43 | ```
 44 | 
 45 | ### Testing your first contract
 46 | 
 47 | Let's write a simple contract and test it using the `algorand-python-testing` framework.
 48 | 
 49 | #### Contract Definition
 50 | 
 51 | ```{testcode}
 52 | import algopy
 53 | from algopy import arc4
 54 | 
 55 | class VotingContract(algopy.ARC4Contract):
 56 |     def __init__(self) -> None:
 57 |         self.topic = algopy.GlobalState(algopy.Bytes(b"default_topic"), key="topic", description="Voting topic")
 58 |         self.votes = algopy.GlobalState(
 59 |             algopy.UInt64(0),
 60 |             key="votes",
 61 |             description="Votes for the option",
 62 |         )
 63 |         self.voted = algopy.LocalState(algopy.UInt64, key="voted", description="Tracks if an account has voted")
 64 | 
 65 |     @arc4.abimethod
 66 |     def set_topic(self, topic: arc4.String) -> None:
 67 |         self.topic.value = topic.bytes
 68 | 
 69 |     @arc4.abimethod
 70 |     def vote(self, pay: algopy.gtxn.PaymentTransaction) -> arc4.Bool:
 71 |         assert algopy.op.Global.group_size == algopy.UInt64(2), "Expected 2 transactions"
 72 |         assert pay.amount == algopy.UInt64(10_000), "Incorrect payment amount"
 73 |         assert pay.sender == algopy.Txn.sender, "Payment sender must match transaction sender"
 74 | 
 75 |         _value, exists = self.voted.maybe(algopy.Txn.sender)
 76 |         if exists:
 77 |             return arc4.Bool(False)  # Already voted
 78 |         self.votes.value += algopy.UInt64(1)
 79 |         self.voted[algopy.Txn.sender] = algopy.UInt64(1)
 80 |         return arc4.Bool(True)
 81 | 
 82 |     @arc4.abimethod(readonly=True)
 83 |     def get_votes(self) -> arc4.UInt64:
 84 |         return arc4.UInt64(self.votes.value)
 85 | 
 86 |     def clear_state_program(self) -> bool:
 87 |         return True
 88 | ```
 89 | 
 90 | #### Test Definition
 91 | 
 92 | ```{testcode}
 93 | from collections.abc import Generator
 94 | import pytest
 95 | from algopy_testing import AlgopyTestContext, algopy_testing_context
 96 | from algopy import arc4
 97 | 
 98 | # Create a test context
 99 | with algopy_testing_context() as context:
100 | 
101 |     # Initialize the contract
102 |     contract = VotingContract()
103 | 
104 |     # Test vote function
105 |     voter = context.default_sender
106 |     payment = context.any.txn.payment(
107 |         sender=voter,
108 |         amount=algopy.UInt64(10_000),
109 |     )
110 | 
111 |     result = contract.vote(payment)
112 |     print(f"Vote result: {result.native}")
113 |     print(f"Total votes: {contract.votes.value}")
114 |     print(f"Voter {voter} voted: {contract.voted[voter]}")
115 | 
116 |     # Test set_topic function
117 |     new_topic = context.any.arc4.string(10)
118 |     contract.set_topic(new_topic)
119 |     print(f"New topic: {new_topic.native}")
120 |     print(f"Contract topic: {contract.topic.value}")
121 | 
122 |     # Test get_votes function
123 |     contract.votes.value = algopy.UInt64(5)
124 |     votes = contract.get_votes()
125 |     print(f"Current votes: {votes.native}")
126 | ```
127 | 
128 | ```{testoutput}
129 | :hide:
130 | 
131 | Vote result: True
132 | Total votes: 1
133 | Voter ... voted: 1
134 | New topic: ...
135 | Contract topic: ...
136 | Current votes: 5
137 | ```
138 | 
139 | This example demonstrates key aspects of testing with `algorand-python-testing` for ARC4-based contracts:
140 | 
141 | 1. ARC4 Contract Features:
142 | 
143 |     - Use of `algopy.ARC4Contract` as the base class for the contract.
144 |     - ABI methods defined using the `@arc4.abimethod` decorator.
145 |     - Use of ARC4-specific types like `arc4.String`, `arc4.Bool`, and `arc4.UInt64`.
146 |     - Readonly method annotation with `@arc4.abimethod(readonly=True)`.
147 | 
148 | 2. Testing ARC4 Contracts:
149 | 
150 |     - Creation of an `ARC4Contract` instance within the test context.
151 |     - Use of `context.any.arc4` for generating ARC4-specific random test data.
152 |     - Direct invocation of ABI methods on the contract instance.
153 | 
154 | 3. Transaction Handling:
155 | 
156 |     - Use of `context.any.txn` to create test transactions.
157 |     - Passing transaction objects as parameters to contract methods.
158 | 
159 | 4. State Verification:
160 |     - Checking global and local state changes after method execution.
161 |     - Verifying return values from ABI methods using ARC4-specific types.
162 | 
163 | > **NOTE**: Thorough testing is crucial in smart contract development due to their immutable nature post-deployment. Comprehensive unit and integration tests ensure contract validity and reliability. Optimizing for efficiency can significantly improve user experience by reducing transaction fees and simplifying interactions. Investing in robust testing and optimization practices is crucial and offers many benefits in the long run.
164 | 
165 | ### Next steps
166 | 
167 | To dig deeper into the capabilities of `algorand-python-testing`, continue with the following sections.
168 | 
169 | ```{toctree}
170 | ---
171 | maxdepth: 2
172 | caption: Contents
173 | hidden: true
174 | ---
175 | 
176 | testing-guide/index
177 | examples
178 | coverage
179 | faq
180 | api
181 | algopy
182 | ```
183 | 
```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/algokit:utils:typescript:code:interfaces:types_asset_manager.AssetInformation.md:
--------------------------------------------------------------------------------

```markdown
  1 | [@algorandfoundation/algokit-utils](../README.md) / [types/asset-manager](../modules/types_asset_manager.md) / AssetInformation
  2 | 
  3 | # Interface: AssetInformation
  4 | 
  5 | [types/asset-manager](../modules/types_asset_manager.md).AssetInformation
  6 | 
  7 | Information about an asset.
  8 | 
  9 | ## Table of contents
 10 | 
 11 | ### Properties
 12 | 
 13 | - [assetId](types_asset_manager.AssetInformation.md#assetid)
 14 | - [assetName](types_asset_manager.AssetInformation.md#assetname)
 15 | - [assetNameAsBytes](types_asset_manager.AssetInformation.md#assetnameasbytes)
 16 | - [clawback](types_asset_manager.AssetInformation.md#clawback)
 17 | - [creator](types_asset_manager.AssetInformation.md#creator)
 18 | - [decimals](types_asset_manager.AssetInformation.md#decimals)
 19 | - [defaultFrozen](types_asset_manager.AssetInformation.md#defaultfrozen)
 20 | - [freeze](types_asset_manager.AssetInformation.md#freeze)
 21 | - [manager](types_asset_manager.AssetInformation.md#manager)
 22 | - [metadataHash](types_asset_manager.AssetInformation.md#metadatahash)
 23 | - [reserve](types_asset_manager.AssetInformation.md#reserve)
 24 | - [total](types_asset_manager.AssetInformation.md#total)
 25 | - [unitName](types_asset_manager.AssetInformation.md#unitname)
 26 | - [unitNameAsBytes](types_asset_manager.AssetInformation.md#unitnameasbytes)
 27 | - [url](types_asset_manager.AssetInformation.md#url)
 28 | - [urlAsBytes](types_asset_manager.AssetInformation.md#urlasbytes)
 29 | 
 30 | ## Properties
 31 | 
 32 | ### assetId
 33 | 
 34 | • **assetId**: `bigint`
 35 | 
 36 | The ID of the asset.
 37 | 
 38 | #### Defined in
 39 | 
 40 | [src/types/asset-manager.ts:19](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/asset-manager.ts#L19)
 41 | 
 42 | ___
 43 | 
 44 | ### assetName
 45 | 
 46 | • `Optional` **assetName**: `string`
 47 | 
 48 | The optional name of the asset.
 49 | 
 50 | Max size is 32 bytes.
 51 | 
 52 | #### Defined in
 53 | 
 54 | [src/types/asset-manager.ts:110](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/asset-manager.ts#L110)
 55 | 
 56 | ___
 57 | 
 58 | ### assetNameAsBytes
 59 | 
 60 | • `Optional` **assetNameAsBytes**: `Uint8Array`
 61 | 
 62 | The optional name of the asset.
 63 | 
 64 | Max size is 32 bytes.
 65 | 
 66 | #### Defined in
 67 | 
 68 | [src/types/asset-manager.ts:116](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/asset-manager.ts#L116)
 69 | 
 70 | ___
 71 | 
 72 | ### clawback
 73 | 
 74 | • `Optional` **clawback**: `string`
 75 | 
 76 | The address of the optional account that can clawback holdings of this asset from any account.
 77 | 
 78 | The clawback account has the ability to **unconditionally take assets from any account**.
 79 | 
 80 | If empty, clawback is not permitted.
 81 | 
 82 | If not set the field is permanently empty.
 83 | 
 84 | #### Defined in
 85 | 
 86 | [src/types/asset-manager.ts:92](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/asset-manager.ts#L92)
 87 | 
 88 | ___
 89 | 
 90 | ### creator
 91 | 
 92 | • **creator**: `string`
 93 | 
 94 | The address of the account that created the asset.
 95 | 
 96 | This is the address where the parameters for this asset can be found,
 97 | and also the address where unwanted asset units can be sent when
 98 | closing out an asset position and opting-out of the asset.
 99 | 
100 | #### Defined in
101 | 
102 | [src/types/asset-manager.ts:27](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/asset-manager.ts#L27)
103 | 
104 | ___
105 | 
106 | ### decimals
107 | 
108 | • **decimals**: `number`
109 | 
110 | The amount of decimal places the asset was created with.
111 | 
112 | * If 0, the asset is not divisible;
113 | * If 1, the base unit of the asset is in tenths;
114 | * If 2, the base unit of the asset is in hundredths;
115 | * If 3, the base unit of the asset is in thousandths;
116 | * and so on up to 19 decimal places.
117 | 
118 | #### Defined in
119 | 
120 | [src/types/asset-manager.ts:43](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/asset-manager.ts#L43)
121 | 
122 | ___
123 | 
124 | ### defaultFrozen
125 | 
126 | • `Optional` **defaultFrozen**: `boolean`
127 | 
128 | Whether the asset was frozen by default for all accounts.
129 | 
130 | If `true` then for anyone apart from the creator to hold the
131 | asset it needs to be unfrozen per account using an asset freeze
132 | transaction from the `freeze` account.
133 | 
134 | #### Defined in
135 | 
136 | [src/types/asset-manager.ts:51](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/asset-manager.ts#L51)
137 | 
138 | ___
139 | 
140 | ### freeze
141 | 
142 | • `Optional` **freeze**: `string`
143 | 
144 | The address of the optional account that can be used to freeze or unfreeze holdings of this asset for any account.
145 | 
146 | If empty, freezing is not permitted.
147 | 
148 | If not set the field is permanently empty.
149 | 
150 | #### Defined in
151 | 
152 | [src/types/asset-manager.ts:81](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/asset-manager.ts#L81)
153 | 
154 | ___
155 | 
156 | ### manager
157 | 
158 | • `Optional` **manager**: `string`
159 | 
160 | The address of the optional account that can manage the configuration of the asset and destroy it.
161 | 
162 | If not set the asset is permanently immutable.
163 | 
164 | #### Defined in
165 | 
166 | [src/types/asset-manager.ts:57](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/asset-manager.ts#L57)
167 | 
168 | ___
169 | 
170 | ### metadataHash
171 | 
172 | • `Optional` **metadataHash**: `Uint8Array`
173 | 
174 | 32-byte hash of some metadata that is relevant to the asset and/or asset holders.
175 | 
176 | The format of this metadata is up to the application.
177 | 
178 | #### Defined in
179 | 
180 | [src/types/asset-manager.ts:134](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/asset-manager.ts#L134)
181 | 
182 | ___
183 | 
184 | ### reserve
185 | 
186 | • `Optional` **reserve**: `string`
187 | 
188 | The address of the optional account that holds the reserve (uncirculated supply) units of the asset.
189 | 
190 | This address has no specific authority in the protocol itself and is informational only.
191 | 
192 | Some standards like [ARC-19](https://github.com/algorandfoundation/ARCs/blob/main/ARCs/arc-0019.md)
193 | rely on this field to hold meaningful data.
194 | 
195 | It can be used in the case where you want to signal to holders of your asset that the uncirculated units
196 | of the asset reside in an account that is different from the default creator account.
197 | 
198 | If not set the field is permanently empty.
199 | 
200 | #### Defined in
201 | 
202 | [src/types/asset-manager.ts:72](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/asset-manager.ts#L72)
203 | 
204 | ___
205 | 
206 | ### total
207 | 
208 | • **total**: `bigint`
209 | 
210 | The total amount of the smallest divisible (decimal) units that were created of the asset.
211 | 
212 | For example, if `decimals` is, say, 2, then for every 100 `total` there is 1 whole unit.
213 | 
214 | #### Defined in
215 | 
216 | [src/types/asset-manager.ts:33](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/asset-manager.ts#L33)
217 | 
218 | ___
219 | 
220 | ### unitName
221 | 
222 | • `Optional` **unitName**: `string`
223 | 
224 | The optional name of the unit of this asset (e.g. ticker name).
225 | 
226 | Max size is 8 bytes.
227 | 
228 | #### Defined in
229 | 
230 | [src/types/asset-manager.ts:98](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/asset-manager.ts#L98)
231 | 
232 | ___
233 | 
234 | ### unitNameAsBytes
235 | 
236 | • `Optional` **unitNameAsBytes**: `Uint8Array`
237 | 
238 | The optional name of the unit of this asset (e.g. ticker name).
239 | 
240 | Max size is 8 bytes.
241 | 
242 | #### Defined in
243 | 
244 | [src/types/asset-manager.ts:104](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/asset-manager.ts#L104)
245 | 
246 | ___
247 | 
248 | ### url
249 | 
250 | • `Optional` **url**: `string`
251 | 
252 | Optional URL where more information about the asset can be retrieved (e.g. metadata).
253 | 
254 | Max size is 96 bytes.
255 | 
256 | #### Defined in
257 | 
258 | [src/types/asset-manager.ts:122](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/asset-manager.ts#L122)
259 | 
260 | ___
261 | 
262 | ### urlAsBytes
263 | 
264 | • `Optional` **urlAsBytes**: `Uint8Array`
265 | 
266 | Optional URL where more information about the asset can be retrieved (e.g. metadata).
267 | 
268 | Max size is 96 bytes.
269 | 
270 | #### Defined in
271 | 
272 | [src/types/asset-manager.ts:128](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/asset-manager.ts#L128)
273 | 
```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/liquid-auth:ARCHITECTURE.md:
--------------------------------------------------------------------------------

```markdown
  1 | ## Overview
  2 | 
  3 | ### Components
  4 | - Nest.js (Microservices/REST API)
  5 | - Redis (Events/WebSockets)
  6 | - MongoDB (SessionStore/Users)
  7 | 
  8 | This service uses [FIDO2 REST API]() endpoints for credential creation and assertions.
  9 | 
 10 | ## FIDO2 Endpoints
 11 | 
 12 | Two main components, Assertion and Attestation. 
 13 | The purposed liquid extension is used to sign the FIDO2 responses with a different key pair and allow remote authentication
 14 | 
 15 | ### Liquid FIDO2 Extension
 16 | 
 17 | ```typescript
 18 | // Authenticator Create Response
 19 | interface LiquidClientAttestationExtensionResults {
 20 |   liquid: {
 21 |     type: string; // Currently only "algorand" supported
 22 |     address: string; // Wallet Address
 23 |     signature: string; // Base64URL Encoded Signature
 24 |     requestId?: string // Optional Request ID , authenticate a remote user simaltaneously
 25 |     device?: string // Optional Device Name
 26 |   }
 27 | }
 28 | // Authenticator Get Response
 29 | interface LiquidClientAssertionExtensionResults {
 30 |   liquid: {
 31 |     requestId?: string; // Optional Request ID
 32 |   }
 33 | }
 34 | 
 35 | // Selector Options
 36 | interface LiquidExtensionOptions {
 37 |   liquid: boolean;
 38 | }
 39 | ```
 40 | 
 41 | ### POST /attestation/request
 42 | 
 43 | Returns the credential creation options supported by the service. It accepts
 44 | the standard PublicKeyCreateOptions as the `body`. The response can be passed 
 45 | to an available authenticator which will generate the credentials.
 46 | 
 47 | The request must enable the `liquid` extension in order to sign the response.
 48 | 
 49 | #### BODY
 50 | 
 51 | ```json
 52 | {
 53 |   "username": "2SPDE6XLJNXFTOO7OIGNRNKSEDOHJWVD3HBSEAPHONZQ4IQEYOGYTP6LXA",
 54 |   "displayName": "Liquid Auth User",
 55 |   "authenticatorSelection": {
 56 |     "userVerification": "required"
 57 |   },
 58 |   "extensions": {
 59 |     "liquid": true
 60 |   }
 61 | }
 62 | ```
 63 | 
 64 | #### Example CredentialCreateOptions Response
 65 | ```json
 66 | {
 67 |   "challenge": "35JYpoXGnM4s8IICakWSLllcXy3Z_lc3AaLSl872qXM",
 68 |   "rp": {
 69 |     "name": "Algorand Foundation FIDO2 Server",
 70 |     "id": "catfish-pro-wolf.ngrok-free.app"
 71 |   },
 72 |   "user": {
 73 |     "id": "2SPDE6XLJNXFTOO7OIGNRNKSEDOHJWVD3HBSEAPHONZQ4IQEYOGYTP6LXA",
 74 |     "name": "2SPDE6XLJNXFTOO7OIGNRNKSEDOHJWVD3HBSEAPHONZQ4IQEYOGYTP6LXA",
 75 |     "displayName": "2SPDE6XLJNXFTOO7OIGNRNKSEDOHJWVD3HBSEAPHONZQ4IQEYOGYTP6LXA"
 76 |   },
 77 |   "pubKeyCredParams": [
 78 |     {
 79 |       "type": "public-key",
 80 |       "alg": -7
 81 |     },
 82 |     {
 83 |       "type": "public-key",
 84 |       "alg": -257
 85 |     }
 86 |   ],
 87 |   "timeout": 1800000,
 88 |   "attestation": "none",
 89 |   "excludeCredentials": [],
 90 |   "authenticatorSelection": {
 91 |     "userVerification": "required"
 92 |   },
 93 |   "extensions": {
 94 |     "liquid": true
 95 |   }
 96 | }
 97 | ```
 98 | ### POST /attestation/response
 99 | 
100 | Receives the PublicKeyCredential result from the authenticator and validates the credential signature.
101 | `body` uses base64URL encoding for keys.
102 | 
103 | The authenticator must include the `liquid` extension in the response with the signature and address.
104 | This will associate the credential with the wallet address and the credential can be used for future assertions without the need for signing with the wallet keys
105 | 
106 | #### BODY
107 | ```json
108 | {
109 |   "id": "AYMPi2Rbhcnu2gSHOO1TNvzDJ38iU00rrlCqyH874XCIEoIotRc7eVRFpx0TvsQurg7BAnXy5KnWdKC8LeWs0k0",
110 |   "type": "public-key",
111 |   "rawId": "AYMPi2Rbhcnu2gSHOO1TNvzDJ38iU00rrlCqyH874XCIEoIotRc7eVRFpx0TvsQurg7BAnXy5KnWdKC8LeWs0k0",
112 |   "clientExtensionResults": {
113 |     "liquid": {
114 |       "type": "algorand",
115 |       "requestId": "019097ff-bb8c-7c42-9700-f11b9446fad7",
116 |       "address": "2SPDE6XLJNXFTOO7OIGNRNKSEDOHJWVD3HBSEAPHONZQ4IQEYOGYTP6LXA",
117 |       "signature": "QY31mdH8AwpJ9p4pCXBO2iA5WdU-BjG52xEtJNuSJNHJIaJ10uzqk3FdR0fvYVfb_rzXTuWn4k1PFFeg-vpEDw",
118 |       "device": "Pixel 8 Pro"
119 |     }
120 |   },
121 |   "response": {
122 |     "clientDataJSON": "eyJ0eXBlIjoid2ViYXV0aG4uY3JlYXRlIiwiY2hhbGxlbmdlIjoiMzVKWXBvWEduTTRzOElJQ2FrV1NMbGxjWHkzWl9sYzNBYUxTbDg3MnFYTSIsIm9yaWdpbiI6ImFuZHJvaWQ6YXBrLWtleS1oYXNoOlI4eE83cmxRV2FXTDRCbEZ5Z3B0V1JiNXFjS1dkZmp6WklhU1JpdDlYVnciLCJhbmRyb2lkUGFja2FnZU5hbWUiOiJmb3VuZGF0aW9uLmFsZ29yYW5kLmRlbW8ifQ",
123 |     "attestationObject": "o2NmbXRkbm9uZWdhdHRTdG10oGhhdXRoRGF0YVjFlpPmT7RcYTDeFJdKhDtiKwzb05n-ojlcqqYw5SomXZBFAAAAAAAAAAAAAAAAAAAAAAAAAAAAQQGDD4tkW4XJ7toEhzjtUzb8wyd_IlNNK65Qqsh_O-FwiBKCKLUXO3lURacdE77ELq4OwQJ18uSp1nSgvC3lrNJNpQECAyYgASFYIB2dcp3wanhReRhgRIpJCUfRSwkCvyE9OdvEL_NlncSJIlggkSIz7h7O5nrAXGJrkCOmeolChSc09eHzniCFLFxaKH0"
124 |   },
125 |   "device": "Pixel 8 Pro"
126 | }
127 | ```
128 | 
129 | 
130 | ### POST /assertion/request/:credId
131 | 
132 | Request a PublicKeyGetCredentialOptions from the service. This differs slightly from the FIDO2 API conformance in order to limit
133 | allowed credentials.
134 | 
135 | #### BODY (Optional)
136 | ```json
137 | {
138 |   "authenticatorSelection": {
139 |     "userVerification": "required"
140 |   },
141 |   "extensions": {
142 |     "liquid": true
143 |   }
144 | }
145 | ```
146 | 
147 | #### Example Response
148 | ```json
149 | {
150 |   "challenge": "0TXu4G4iu3sbAQopheoPe_CpnLJOB-QlIUvwFBC317Q",
151 |   "allowCredentials": [
152 |     {
153 |       "id": "AYMPi2Rbhcnu2gSHOO1TNvzDJ38iU00rrlCqyH874XCIEoIotRc7eVRFpx0TvsQurg7BAnXy5KnWdKC8LeWs0k0",
154 |       "type": "public-key"
155 |     }
156 |   ],
157 |   "timeout": 1800000,
158 |   "userVerification": "required",
159 |   "rpId": "catfish-pro-wolf.ngrok-free.app",
160 |   "extensions": {
161 |     "liquid": true
162 |   }
163 | }
164 | ```
165 | 
166 | ### POST /assertion/response
167 | 
168 | Base64URL encoded response from the authenticator. 
169 | Optionally add a `requestId` to also authenticate a remote session
170 | 
171 | #### BODY
172 | ```json
173 |  {
174 |   "id": "AYMPi2Rbhcnu2gSHOO1TNvzDJ38iU00rrlCqyH874XCIEoIotRc7eVRFpx0TvsQurg7BAnXy5KnWdKC8LeWs0k0",
175 |   "type": "public-key",
176 |   "rawId": "AYMPi2Rbhcnu2gSHOO1TNvzDJ38iU00rrlCqyH874XCIEoIotRc7eVRFpx0TvsQurg7BAnXy5KnWdKC8LeWs0k0",
177 |   "clientExtensionResults": {
178 |     "liquid": {
179 |       "requestId": "019097ff-bb8d-75d8-b950-33de977c2d3f"
180 |     }
181 |   },
182 |   "response": {
183 |     "clientDataJSON": "eyJ0eXBlIjoid2ViYXV0aG4uZ2V0IiwiY2hhbGxlbmdlIjoiMFRYdTRHNGl1M3NiQVFvcGhlb1BlX0NwbkxKT0ItUWxJVXZ3RkJDMzE3USIsIm9yaWdpbiI6ImFuZHJvaWQ6YXBrLWtleS1oYXNoOlI4eE83cmxRV2FXTDRCbEZ5Z3B0V1JiNXFjS1dkZmp6WklhU1JpdDlYVnciLCJhbmRyb2lkUGFja2FnZU5hbWUiOiJmb3VuZGF0aW9uLmFsZ29yYW5kLmRlbW8ifQ",
184 |     "authenticatorData": "lpPmT7RcYTDeFJdKhDtiKwzb05n-ojlcqqYw5SomXZAFAAAAAQ",
185 |     "signature": "MEUCIQDcV2y6ub3Qh8pyTCCLdWKRH_cmR2xlFuNy1Fn1QsSUygIgTZh9b6mB77C-aQrBj7Evb8u3S4j3vjlnSPAKcR7Kld4"
186 |   }
187 | }
188 | ```
189 | 
190 | #### Example Response
191 | ```json
192 | {
193 |   "id": "M6RT4iT5FkNDM2i57MXzBhLDt9zl2CrLt2p4Ar03t2Q",
194 |   "wallet": "2SPDE6XLJNXFTOO7OIGNRNKSEDOHJWVD3HBSEAPHONZQ4IQEYOGYTP6LXA",
195 |   "credentials": [
196 |     {
197 |       "device": "Pixel 8 Pro",
198 |       "publicKey": "pQECAyYgASFYIB2dcp3wanhReRhgRIpJCUfRSwkCvyE9OdvEL_NlncSJIlggkSIz7h7O5nrAXGJrkCOmeolChSc09eHzniCFLFxaKH0",
199 |       "credId": "AYMPi2Rbhcnu2gSHOO1TNvzDJ38iU00rrlCqyH874XCIEoIotRc7eVRFpx0TvsQurg7BAnXy5KnWdKC8LeWs0k0",
200 |       "prevCounter": 0
201 |     }
202 |   ]
203 | }
204 | ```
205 | ## Signaling Service
206 | 
207 | The signaling service is used to establish a WebRTC connection between the wallet and the website.
208 | 
209 | ### Events
210 | 
211 | #### microservice:auth
212 | 
213 | Emits to the event bus when a client attests or asserts a credential with a requestId.
214 | 
215 | #### wss:link
216 | 
217 | Submit a request to link the current client to a remote wallet. 
218 | The server will acknowledge the request when the `microservice:auth` event is received.
219 | 
220 | ```typescript
221 | const response: LinkMessage = await client.link(requestId)
222 | ```
223 | 
224 | #### wss:offer-description | wss:answer-description
225 | 
226 | Wait for the server to emit an offer or answer description to the client.
227 | 
228 | ```typescript
229 | const response: string = await client.signal('offer' | 'answer')
230 | ```
231 | 
232 | #### wss:offer-candidate | wss:answer-candidate
233 | 
234 | Emits the offer or answer ICE Candidates to connected clients.
235 | 
236 | ```typescript
237 | client.peerClient.onicecandidate=(event)=>{
238 |   client.socket.emit('offer-candidate', event.candidate.toJSON())
239 | }
240 | 
241 | ```
242 | 
```
Page 27/93FirstPrevNextLast