#
tokens: 49304/50000 20/942 files (page 16/93)
lines: on (toggle) GitHub
raw markdown copy reset
This is page 16 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/developer:python:code:example:hello_world.md:
--------------------------------------------------------------------------------

```markdown
  1 | # Hello World Smart Contract
  2 | 
  3 | This example demonstrates how to create a basic smart contract using Algorand Python. The contract implements a simple "hello" function that takes a name parameter and returns a greeting.
  4 | 
  5 | ## Contract Implementation
  6 | 
  7 | ```python
  8 | from algopy import ARC4Contract, String
  9 | from algopy.arc4 import abimethod
 10 | 
 11 | class HelloWorld(ARC4Contract):
 12 |     @abimethod()
 13 |     def hello(self, name: String) -> String:
 14 |         return "Hello, " + name
 15 | ```
 16 | 
 17 | ### Key Components
 18 | 
 19 | 1. **Imports**:
 20 |    - `ARC4Contract`: Base class for ARC4-compliant smart contracts
 21 |    - `String`: Type for string values in the contract
 22 |    - `abimethod`: Decorator to define ABI-compliant methods
 23 | 
 24 | 2. **Contract Class**:
 25 |    - Inherits from `ARC4Contract`
 26 |    - Implements a single method `hello`
 27 |    - Uses type hints for parameters and return values
 28 | 
 29 | 3. **Hello Method**:
 30 |    - Takes a `name` parameter of type `String`
 31 |    - Returns a greeting string concatenating "Hello, " with the provided name
 32 |    - Decorated with `@abimethod()` to make it callable from outside the contract
 33 | 
 34 | ## Testing the Contract
 35 | 
 36 | Here's how to interact with the contract using the AlgoKit Utils Python SDK:
 37 | 
 38 | ```python
 39 | from algokit_utils import (
 40 |     AlgoAmount,
 41 |     AlgorandClient,
 42 |     OnSchemaBreak,
 43 |     OnUpdate,
 44 |     PaymentParams,
 45 |     SigningAccount,
 46 | )
 47 | from smart_contracts.artifacts.hello_world.hello_world_client import (
 48 |     HelloArgs,
 49 |     HelloWorldClient,
 50 |     HelloWorldFactory,
 51 | )
 52 | 
 53 | # Deploy the contract
 54 | factory = algorand.client.get_typed_app_factory(
 55 |     HelloWorldFactory,
 56 |     default_sender=creator.address,
 57 |     default_signer=creator.signer,
 58 | )
 59 | 
 60 | client, deploy_result = factory.deploy(
 61 |     on_update=OnUpdate.ReplaceApp,
 62 |     on_schema_break=OnSchemaBreak.Fail,
 63 | )
 64 | 
 65 | # Fund the contract with 1 Algo
 66 | algorand.send.payment(
 67 |     PaymentParams(
 68 |         sender=dispenser.address,
 69 |         receiver=client.app_address,
 70 |         amount=AlgoAmount(algo=1),
 71 |     )
 72 | )
 73 | 
 74 | # Call the hello method
 75 | result = client.send.hello(HelloArgs(name="World"))
 76 | assert result.abi_return == "Hello, World"
 77 | 
 78 | # Simulate multiple calls
 79 | result = (
 80 |     client.new_group()
 81 |     .hello(HelloArgs(name="World"))
 82 |     .hello(HelloArgs(name="Jane"))
 83 |     .simulate()
 84 | )
 85 | ```
 86 | 
 87 | ### Testing Features
 88 | 
 89 | 1. **Basic Call**:
 90 |    - Create an instance of the contract client
 91 |    - Call the `hello` method with a name argument
 92 |    - Verify the returned greeting
 93 | 
 94 | 2. **Transaction Group Simulation**:
 95 |    - Create a group of transactions
 96 |    - Call the `hello` method multiple times
 97 |    - Simulate the execution
 98 |    - Verify the results and check the app budget consumption
 99 | 
100 | ## Key Concepts
101 | 
102 | 1. **ARC4 Compliance**:
103 |    - The contract follows the ARC4 standard for method calls
104 |    - Uses typed parameters and return values
105 |    - Provides ABI-compatible methods
106 | 
107 | 2. **Contract Deployment**:
108 |    - Uses `AlgoKit` for deployment
109 |    - Configures update behavior and schema break handling
110 |    - Funds the contract with initial Algos
111 | 
112 | 3. **Contract Interaction**:
113 |    - Uses generated client code for type-safe interactions
114 |    - Supports both direct calls and transaction group simulations
115 |    - Provides budget consumption insights
116 | 
117 | ## Best Practices
118 | 
119 | 1. **Type Safety**:
120 |    - Use proper type hints for parameters and return values
121 |    - Leverage the generated client code for type-safe interactions
122 | 
123 | 2. **Testing**:
124 |    - Write comprehensive tests for contract methods
125 |    - Use simulation to verify behavior before deployment
126 |    - Check resource consumption through budget metrics
127 | 
128 | 3. **Deployment**:
129 |    - Configure appropriate update and schema break behaviors
130 |    - Ensure proper funding for contract operations
131 |    - Use AlgoKit's deployment utilities for consistency
132 | 
133 | This Hello World example serves as a foundation for understanding basic smart contract development with Algorand Python. It demonstrates the essential components of contract creation, deployment, and interaction while following best practices for development and testing.
134 | 
```

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

```markdown
  1 | [algosdk](../README.md) / [Exports](../modules.md) / [indexerModels](../modules/indexerModels.md) / BlockUpgradeState
  2 | 
  3 | # Class: BlockUpgradeState
  4 | 
  5 | [indexerModels](../modules/indexerModels.md).BlockUpgradeState
  6 | 
  7 | Fields relating to a protocol upgrade.
  8 | 
  9 | ## Hierarchy
 10 | 
 11 | - `default`
 12 | 
 13 |   ↳ **`BlockUpgradeState`**
 14 | 
 15 | ## Table of contents
 16 | 
 17 | ### Constructors
 18 | 
 19 | - [constructor](indexerModels.BlockUpgradeState.md#constructor)
 20 | 
 21 | ### Properties
 22 | 
 23 | - [attribute\_map](indexerModels.BlockUpgradeState.md#attribute_map)
 24 | - [currentProtocol](indexerModels.BlockUpgradeState.md#currentprotocol)
 25 | - [nextProtocol](indexerModels.BlockUpgradeState.md#nextprotocol)
 26 | - [nextProtocolApprovals](indexerModels.BlockUpgradeState.md#nextprotocolapprovals)
 27 | - [nextProtocolSwitchOn](indexerModels.BlockUpgradeState.md#nextprotocolswitchon)
 28 | - [nextProtocolVoteBefore](indexerModels.BlockUpgradeState.md#nextprotocolvotebefore)
 29 | 
 30 | ### Methods
 31 | 
 32 | - [get\_obj\_for\_encoding](indexerModels.BlockUpgradeState.md#get_obj_for_encoding)
 33 | - [from\_obj\_for\_encoding](indexerModels.BlockUpgradeState.md#from_obj_for_encoding)
 34 | 
 35 | ## Constructors
 36 | 
 37 | ### constructor
 38 | 
 39 | • **new BlockUpgradeState**(`«destructured»`)
 40 | 
 41 | Creates a new `BlockUpgradeState` object.
 42 | 
 43 | #### Parameters
 44 | 
 45 | | Name | Type |
 46 | | :------ | :------ |
 47 | | `«destructured»` | `Object` |
 48 | | › `currentProtocol` | `string` |
 49 | | › `nextProtocol?` | `string` |
 50 | | › `nextProtocolApprovals?` | `number` \| `bigint` |
 51 | | › `nextProtocolSwitchOn?` | `number` \| `bigint` |
 52 | | › `nextProtocolVoteBefore?` | `number` \| `bigint` |
 53 | 
 54 | #### Overrides
 55 | 
 56 | BaseModel.constructor
 57 | 
 58 | #### Defined in
 59 | 
 60 | client/v2/indexer/models/types.ts:2632
 61 | 
 62 | ## Properties
 63 | 
 64 | ### attribute\_map
 65 | 
 66 | • **attribute\_map**: `Record`\<`string`, `string`\>
 67 | 
 68 | #### Inherited from
 69 | 
 70 | BaseModel.attribute\_map
 71 | 
 72 | #### Defined in
 73 | 
 74 | client/v2/basemodel.ts:56
 75 | 
 76 | ___
 77 | 
 78 | ### currentProtocol
 79 | 
 80 | • **currentProtocol**: `string`
 81 | 
 82 | (proto) The current protocol version.
 83 | 
 84 | #### Defined in
 85 | 
 86 | client/v2/indexer/models/types.ts:2600
 87 | 
 88 | ___
 89 | 
 90 | ### nextProtocol
 91 | 
 92 | • `Optional` **nextProtocol**: `string`
 93 | 
 94 | (nextproto) The next proposed protocol version.
 95 | 
 96 | #### Defined in
 97 | 
 98 | client/v2/indexer/models/types.ts:2605
 99 | 
100 | ___
101 | 
102 | ### nextProtocolApprovals
103 | 
104 | • `Optional` **nextProtocolApprovals**: `number` \| `bigint`
105 | 
106 | (nextyes) Number of blocks which approved the protocol upgrade.
107 | 
108 | #### Defined in
109 | 
110 | client/v2/indexer/models/types.ts:2610
111 | 
112 | ___
113 | 
114 | ### nextProtocolSwitchOn
115 | 
116 | • `Optional` **nextProtocolSwitchOn**: `number` \| `bigint`
117 | 
118 | (nextswitch) Round on which the protocol upgrade will take effect.
119 | 
120 | #### Defined in
121 | 
122 | client/v2/indexer/models/types.ts:2615
123 | 
124 | ___
125 | 
126 | ### nextProtocolVoteBefore
127 | 
128 | • `Optional` **nextProtocolVoteBefore**: `number` \| `bigint`
129 | 
130 | (nextbefore) Deadline round for this protocol upgrade (No votes will be consider
131 | after this round).
132 | 
133 | #### Defined in
134 | 
135 | client/v2/indexer/models/types.ts:2621
136 | 
137 | ## Methods
138 | 
139 | ### get\_obj\_for\_encoding
140 | 
141 | ▸ **get_obj_for_encoding**(`binary?`): `Record`\<`string`, `any`\>
142 | 
143 | Get an object ready for encoding to either JSON or msgpack.
144 | 
145 | #### Parameters
146 | 
147 | | Name | Type | Default value | Description |
148 | | :------ | :------ | :------ | :------ |
149 | | `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. |
150 | 
151 | #### Returns
152 | 
153 | `Record`\<`string`, `any`\>
154 | 
155 | #### Inherited from
156 | 
157 | BaseModel.get\_obj\_for\_encoding
158 | 
159 | #### Defined in
160 | 
161 | client/v2/basemodel.ts:65
162 | 
163 | ___
164 | 
165 | ### from\_obj\_for\_encoding
166 | 
167 | ▸ `Static` **from_obj_for_encoding**(`data`): [`BlockUpgradeState`](indexerModels.BlockUpgradeState.md)
168 | 
169 | #### Parameters
170 | 
171 | | Name | Type |
172 | | :------ | :------ |
173 | | `data` | `Record`\<`string`, `any`\> |
174 | 
175 | #### Returns
176 | 
177 | [`BlockUpgradeState`](indexerModels.BlockUpgradeState.md)
178 | 
179 | #### Defined in
180 | 
181 | client/v2/indexer/models/types.ts:2662
182 | 
```

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

```markdown
  1 | [@algorandfoundation/algokit-utils](../README.md) / [types/app](../modules/types_app.md) / AppMetadata
  2 | 
  3 | # Interface: AppMetadata
  4 | 
  5 | [types/app](../modules/types_app.md).AppMetadata
  6 | 
  7 | The metadata that can be collected about a deployed app
  8 | 
  9 | ## Hierarchy
 10 | 
 11 | - [`AppReference`](types_app.AppReference.md)
 12 | 
 13 | - [`AppDeployMetadata`](types_app.AppDeployMetadata.md)
 14 | 
 15 |   ↳ **`AppMetadata`**
 16 | 
 17 | ## Table of contents
 18 | 
 19 | ### Properties
 20 | 
 21 | - [appAddress](types_app.AppMetadata.md#appaddress)
 22 | - [appId](types_app.AppMetadata.md#appid)
 23 | - [createdMetadata](types_app.AppMetadata.md#createdmetadata)
 24 | - [createdRound](types_app.AppMetadata.md#createdround)
 25 | - [deletable](types_app.AppMetadata.md#deletable)
 26 | - [deleted](types_app.AppMetadata.md#deleted)
 27 | - [name](types_app.AppMetadata.md#name)
 28 | - [updatable](types_app.AppMetadata.md#updatable)
 29 | - [updatedRound](types_app.AppMetadata.md#updatedround)
 30 | - [version](types_app.AppMetadata.md#version)
 31 | 
 32 | ## Properties
 33 | 
 34 | ### appAddress
 35 | 
 36 | • **appAddress**: `string`
 37 | 
 38 | The Algorand address of the account associated with the app
 39 | 
 40 | #### Inherited from
 41 | 
 42 | [AppReference](types_app.AppReference.md).[appAddress](types_app.AppReference.md#appaddress)
 43 | 
 44 | #### Defined in
 45 | 
 46 | [src/types/app.ts:43](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/app.ts#L43)
 47 | 
 48 | ___
 49 | 
 50 | ### appId
 51 | 
 52 | • **appId**: `number` \| `bigint`
 53 | 
 54 | The id of the app
 55 | 
 56 | #### Inherited from
 57 | 
 58 | [AppReference](types_app.AppReference.md).[appId](types_app.AppReference.md#appid)
 59 | 
 60 | #### Defined in
 61 | 
 62 | [src/types/app.ts:41](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/app.ts#L41)
 63 | 
 64 | ___
 65 | 
 66 | ### createdMetadata
 67 | 
 68 | • **createdMetadata**: [`AppDeployMetadata`](types_app.AppDeployMetadata.md)
 69 | 
 70 | The metadata when the app was created
 71 | 
 72 | #### Defined in
 73 | 
 74 | [src/types/app.ts:265](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/app.ts#L265)
 75 | 
 76 | ___
 77 | 
 78 | ### createdRound
 79 | 
 80 | • **createdRound**: `number`
 81 | 
 82 | The round the app was created
 83 | 
 84 | #### Defined in
 85 | 
 86 | [src/types/app.ts:261](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/app.ts#L261)
 87 | 
 88 | ___
 89 | 
 90 | ### deletable
 91 | 
 92 | • `Optional` **deletable**: `boolean`
 93 | 
 94 | Whether or not the app is deletable / permanent / unspecified
 95 | 
 96 | #### Inherited from
 97 | 
 98 | [AppDeployMetadata](types_app.AppDeployMetadata.md).[deletable](types_app.AppDeployMetadata.md#deletable)
 99 | 
100 | #### Defined in
101 | 
102 | [src/types/app.ts:253](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/app.ts#L253)
103 | 
104 | ___
105 | 
106 | ### deleted
107 | 
108 | • **deleted**: `boolean`
109 | 
110 | Whether or not the app is deleted
111 | 
112 | #### Defined in
113 | 
114 | [src/types/app.ts:267](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/app.ts#L267)
115 | 
116 | ___
117 | 
118 | ### name
119 | 
120 | • **name**: `string`
121 | 
122 | The unique name identifier of the app within the creator account
123 | 
124 | #### Inherited from
125 | 
126 | [AppDeployMetadata](types_app.AppDeployMetadata.md).[name](types_app.AppDeployMetadata.md#name)
127 | 
128 | #### Defined in
129 | 
130 | [src/types/app.ts:249](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/app.ts#L249)
131 | 
132 | ___
133 | 
134 | ### updatable
135 | 
136 | • `Optional` **updatable**: `boolean`
137 | 
138 | Whether or not the app is updatable / immutable / unspecified
139 | 
140 | #### Inherited from
141 | 
142 | [AppDeployMetadata](types_app.AppDeployMetadata.md).[updatable](types_app.AppDeployMetadata.md#updatable)
143 | 
144 | #### Defined in
145 | 
146 | [src/types/app.ts:255](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/app.ts#L255)
147 | 
148 | ___
149 | 
150 | ### updatedRound
151 | 
152 | • **updatedRound**: `number`
153 | 
154 | The last round that the app was updated
155 | 
156 | #### Defined in
157 | 
158 | [src/types/app.ts:263](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/app.ts#L263)
159 | 
160 | ___
161 | 
162 | ### version
163 | 
164 | • **version**: `string`
165 | 
166 | The version of app that is / will be deployed
167 | 
168 | #### Inherited from
169 | 
170 | [AppDeployMetadata](types_app.AppDeployMetadata.md).[version](types_app.AppDeployMetadata.md#version)
171 | 
172 | #### Defined in
173 | 
174 | [src/types/app.ts:251](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/app.ts#L251)
175 | 
```

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

```markdown
 1 | # Concepts
 2 | 
 3 | The following sections provide an overview of key concepts and features in the Algorand Python Testing framework.
 4 | 
 5 | ## Test Context
 6 | 
 7 | The main abstraction for interacting with the testing framework is the [`AlgopyTestContext`](../api-context.md#algopy_testing.AlgopyTestContext). It creates an emulated Algorand environment that closely mimics AVM behavior relevant to unit testing the contracts and provides a Pythonic interface for interacting with the emulated environment.
 8 | 
 9 | ```python
10 | from algopy_testing import algopy_testing_context
11 | 
12 | def test_my_contract():
13 |     # Recommended way to instantiate the test context
14 |     with algopy_testing_context() as ctx:
15 |         # Your test code here
16 |         pass
17 |     # ctx is automatically reset after the test code is executed
18 | ```
19 | 
20 | The context manager interface exposes three main properties:
21 | 
22 | 1. `ledger`: An instance of `LedgerContext` for interacting with and querying the emulated Algorand ledger state.
23 | 2. `txn`: An instance of `TransactionContext` for creating and managing transaction groups, submitting transactions, and accessing transaction results.
24 | 3. `any`: An instance of `AlgopyValueGenerator` for generating randomized test data.
25 | 
26 | For detailed method signatures, parameters, and return types, refer to the following API sections:
27 | - [`algopy_testing.LedgerContext`](../api.md)
28 | - [`algopy_testing.TransactionContext`](../api.md)
29 | - [`algopy_testing.AVMValueGenerator`, `algopy_testing.TxnValueGenerator`, `algopy_testing.ARC4ValueGenerator`](../api.md)
30 | 
31 | The `any` property provides access to different value generators:
32 | 
33 | - `AVMValueGenerator`: Base abstractions for AVM types. All methods are available directly on the instance returned from `any`.
34 | - `TxnValueGenerator`: Accessible via `any.txn`, for transaction-related data.
35 | - `ARC4ValueGenerator`: Accessible via `any.arc4`, for ARC4 type data.
36 | 
37 | These generators allow creation of constrained random values for various AVM entities (accounts, assets, applications, etc.) when specific values are not required.
38 | 
39 | ```{hint}
40 | Value generators are powerful tools for generating test data for specified AVM types. They allow further constraints on random value generation via arguments, making it easier to generate test data when exact values are not necessary.
41 | 
42 | When used with the 'Arrange, Act, Assert' pattern, value generators can be especially useful in setting up clear and concise test data in arrange steps.
43 | 
44 | They can also serve as a base building block that can be integrated/reused with popular Python property-based testing frameworks like [`hypothesis`](https://hypothesis.readthedocs.io/en/latest/).
45 | ```
46 | 
47 | ## Types of `algopy` stub implementations
48 | 
49 | As explained in the [introduction](index.md), `algorand-python-testing` _injects_ test implementations for stubs available in the `algorand-python` package. However, not all of the stubs are implemented in the same manner:
50 | 
51 | 1. **Native**: Fully matches AVM computation in Python. For example, `algopy.op.sha256` and other cryptographic operations behave identically in AVM and unit tests. This implies that the majority of opcodes that are 'pure' functions in AVM also have a native Python implementation provided by this package. These abstractions and opcodes can be used within and outside of the testing context.
52 | 
53 | 2. **Emulated**: Uses `AlgopyTestContext` to mimic AVM behavior. For example, `Box.put` on an `algopy.Box` within a test context stores data in the test manager, not the real Algorand network, but provides the same interface.
54 | 
55 | 3. **Mockable**: Not implemented, but can be mocked or patched. For example, `algopy.abi_call` can be mocked to return specific values or behaviors; otherwise, it raises a `NotImplementedError`. This category covers cases where native or emulated implementation in a unit test context is impractical or overly complex.
56 | 
57 | For a full list of all public `algopy` types and their corresponding implementation category, refer to the [Coverage](coverage.md) section.
58 | ```
59 | 
```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/algokit:utils:python:markdown:capabilities:debugger.md:
--------------------------------------------------------------------------------

```markdown
 1 | # Debugger
 2 | 
 3 | The AlgoKit Python Utilities package provides a set of debugging tools that can be used to simulate and trace transactions on the Algorand blockchain. These tools and methods are optimized for developers who are building applications on Algorand and need to test and debug their smart contracts via [AlgoKit AVM Debugger extension](https://marketplace.visualstudio.com/items?itemName=algorandfoundation.algokit-avm-vscode-debugger).
 4 | 
 5 | ## Configuration
 6 | 
 7 | The `config.py` file contains the `UpdatableConfig` class which manages and updates configuration settings for the AlgoKit project. The class has the following attributes:
 8 | 
 9 | - `debug`: Indicates whether debug mode is enabled.
10 | - `project_root`: The path to the project root directory. Can be ignored if you are using `algokit_utils` inside an `algokit` compliant project (containing `.algokit.toml` file). For non algokit compliant projects, simply provide the path to the folder where you want to store sourcemaps and traces to be used with [`AlgoKit AVM Debugger`](https://github.com/algorandfoundation/algokit-avm-vscode-debugger). Alternatively you can also set the value via the `ALGOKIT_PROJECT_ROOT` environment variable.
11 | - `trace_all`: Indicates whether to trace all operations. Defaults to false, this means that when debug mode is enabled, any (or all) application client calls performed via `algokit_utils` will store responses from `simulate` endpoint. These files are called traces, and can be used with `AlgoKit AVM Debugger` to debug TEAL source codes, transactions in the atomic group and etc.
12 | - `trace_buffer_size_mb`: The size of the trace buffer in megabytes. By default uses 256 megabytes. When output folder containing debug trace files exceedes the size, oldest files are removed to optimize for storage consumption.
13 | - `max_search_depth`: The maximum depth to search for a an `algokit` config file. By default it will traverse at most 10 folders searching for `.algokit.toml` file which will be used to assume algokit compliant project root path.
14 | 
15 | The `configure` method can be used to set these attributes.
16 | 
17 | To enable debug mode in your project you can configure it as follows:
18 | 
19 | ```py
20 | from algokit_utils.config import config
21 | 
22 | config.configure(debug=True)
23 | ```
24 | 
25 | ## Debugging Utilities
26 | 
27 | Debugging utilities can be used to simplify gathering artifacts to be used with [AlgoKit AVM Debugger](https://github.com/algorandfoundation/algokit-avm-vscode-debugger) in non algokit compliant projects. The following methods are provided:
28 | 
29 | - `simulate_and_persist_response`: This method simulates the atomic transactions using the provided `AtomicTransactionComposer` object and `AlgodClient` object, and persists the simulation response to an AVM Debugger compliant JSON file. It takes an `AtomicTransactionComposer` object representing the atomic transactions to be simulated and persisted, a `Path` object representing the root directory of the project, an `AlgodClient` object representing the Algorand client, and a float representing the size of the trace buffer in megabytes.
30 | 
31 | ### Trace filename format
32 | 
33 | The trace files are named in a specific format to provide useful information about the transactions they contain. The format is as follows:
34 | 
35 | ```ts
36 | `${timestamp}_lr${last_round}_${transaction_types}.trace.avm.json`;
37 | ```
38 | 
39 | Where:
40 | 
41 | - `timestamp`: The time when the trace file was created, in ISO 8601 format, with colons and periods removed.
42 | - `last_round`: The last round when the simulation was performed.
43 | - `transaction_types`: A string representing the types and counts of transactions in the atomic group. Each transaction type is represented as `${count}${type}`, and different transaction types are separated by underscores.
44 | 
45 | For example, a trace file might be named `20220301T123456Z_lr1000_2pay_1axfer.trace.avm.json`, indicating that the trace file was created at `2022-03-01T12:34:56Z`, the last round was `1000`, and the atomic group contained 2 payment transactions and 1 asset transfer transaction.
46 | 
```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/algokit:utils:python:source:capabilities:debugger.md:
--------------------------------------------------------------------------------

```markdown
 1 | # Debugger
 2 | 
 3 | The AlgoKit Python Utilities package provides a set of debugging tools that can be used to simulate and trace transactions on the Algorand blockchain. These tools and methods are optimized for developers who are building applications on Algorand and need to test and debug their smart contracts via [AlgoKit AVM Debugger extension](https://marketplace.visualstudio.com/items?itemName=algorandfoundation.algokit-avm-vscode-debugger).
 4 | 
 5 | ## Configuration
 6 | 
 7 | The `config.py` file contains the `UpdatableConfig` class which manages and updates configuration settings for the AlgoKit project. The class has the following attributes:
 8 | 
 9 | - `debug`: Indicates whether debug mode is enabled.
10 | - `project_root`: The path to the project root directory. Can be ignored if you are using `algokit_utils` inside an `algokit` compliant project (containing `.algokit.toml` file). For non algokit compliant projects, simply provide the path to the folder where you want to store sourcemaps and traces to be used with [`AlgoKit AVM Debugger`](https://github.com/algorandfoundation/algokit-avm-vscode-debugger). Alternatively you can also set the value via the `ALGOKIT_PROJECT_ROOT` environment variable.
11 | - `trace_all`: Indicates whether to trace all operations. Defaults to false, this means that when debug mode is enabled, any (or all) application client calls performed via `algokit_utils` will store responses from `simulate` endpoint. These files are called traces, and can be used with `AlgoKit AVM Debugger` to debug TEAL source codes, transactions in the atomic group and etc.
12 | - `trace_buffer_size_mb`: The size of the trace buffer in megabytes. By default uses 256 megabytes. When output folder containing debug trace files exceedes the size, oldest files are removed to optimize for storage consumption.
13 | - `max_search_depth`: The maximum depth to search for a an `algokit` config file. By default it will traverse at most 10 folders searching for `.algokit.toml` file which will be used to assume algokit compliant project root path.
14 | 
15 | The `configure` method can be used to set these attributes.
16 | 
17 | To enable debug mode in your project you can configure it as follows:
18 | 
19 | ```py
20 | from algokit_utils.config import config
21 | 
22 | config.configure(debug=True)
23 | ```
24 | 
25 | ## Debugging Utilities
26 | 
27 | Debugging utilities can be used to simplify gathering artifacts to be used with [AlgoKit AVM Debugger](https://github.com/algorandfoundation/algokit-avm-vscode-debugger) in non algokit compliant projects. The following methods are provided:
28 | 
29 | - `simulate_and_persist_response`: This method simulates the atomic transactions using the provided `AtomicTransactionComposer` object and `AlgodClient` object, and persists the simulation response to an AVM Debugger compliant JSON file. It takes an `AtomicTransactionComposer` object representing the atomic transactions to be simulated and persisted, a `Path` object representing the root directory of the project, an `AlgodClient` object representing the Algorand client, and a float representing the size of the trace buffer in megabytes.
30 | 
31 | ### Trace filename format
32 | 
33 | The trace files are named in a specific format to provide useful information about the transactions they contain. The format is as follows:
34 | 
35 | ```ts
36 | `${timestamp}_lr${last_round}_${transaction_types}.trace.avm.json`;
37 | ```
38 | 
39 | Where:
40 | 
41 | - `timestamp`: The time when the trace file was created, in ISO 8601 format, with colons and periods removed.
42 | - `last_round`: The last round when the simulation was performed.
43 | - `transaction_types`: A string representing the types and counts of transactions in the atomic group. Each transaction type is represented as `${count}${type}`, and different transaction types are separated by underscores.
44 | 
45 | For example, a trace file might be named `20220301T123456Z_lr1000_2pay_1axfer.trace.avm.json`, indicating that the trace file was created at `2022-03-01T12:34:56Z`, the last round was `1000`, and the atomic group contained 2 payment transactions and 1 asset transfer transaction.
46 | 
```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/ARCs:pages:wallets.md:
--------------------------------------------------------------------------------

```markdown
 1 | ---
 2 | layout: page
 3 | title: Algorand Wallet Compatiblity Matrix
 4 | permalink: /wallets
 5 | ---
 6 | ## Status
 7 | Allowed Status are:
 8 | - Supported
 9 | - Not Supported
10 | - Planned
11 | - EXPERIMENTAL
12 | - UNKNOWN
13 | - DEPRECATED
14 | 
15 | ## Wallet ARCs
16 | 
17 | | ARCS           | Daffi         | Defly         | Exodus        | Pera Wallet   |
18 | | -------------- | ------------- | ------------- | ------------- | ------------- |
19 | | [1][ARC-1]     | UNKNOWN       | Supported     | Supported     | Supported     |
20 | | [5][ARC-5]     | UNKNOWN       | Supported     | Supported     | Supported     |
21 | | [6][ARC-6]     | UNKNOWN       | Not Supported | Not Supported | Not Supported |
22 | | [7][ARC-7]     | UNKNOWN       | Not Supported | Supported     | Not Supported |
23 | | [8][ARC-8]     | UNKNOWN       | Not Supported | Supported     | Not Supported |
24 | | [9][ARC-9]     | UNKNOWN       | Not Supported | Supported     | Not Supported |
25 | | [10][ARC-10]   | UNKNOWN       | Not Supported | Supported     | Not Supported |
26 | | [11][ARC-11]   | UNKNOWN       | Not Supported | Supported     | Not Supported |
27 | | [25][ARC-25]   | UNKNOWN       | Supported     | Supported     | Supported     |
28 | | [35][ARC-35]   | UNKNOWN       | Supported     | Not Supported | Planned       |
29 | 
30 | [ARC-1]: ../ARCs/arc-0001.md "Algorand Wallet Transaction Signing API"
31 | [ARC-5]: ../ARCs/arc-0005.md "Wallet Transaction Signing API (Functional)"
32 | [ARC-6]: ../ARCs/arc-0006.md "Algorand Wallet Address Discovery API"
33 | [ARC-7]: ../ARCs/arc-0007.md "Algorand Wallet Post Transactions API"
34 | [ARC-8]: ../ARCs/arc-0008.md "Algorand Wallet Sign and Post API"
35 | [ARC-9]: ../ARCs/arc-0009.md "Algorand Wallet Algodv2 and Indexer API"
36 | [ARC-10]: ../ARCs/arc-0010.md "Algorand Wallet Reach Minimum Requirements"
37 | [ARC-11]: ../ARCs/arc-0011.md "Algorand Wallet Reach Browser Spec"
38 | [ARC-25]: ../ARCs/arc-0025.md "Algorand WalletConnect v1 API"
39 | [ARC-35]: ../ARCs/arc-0035.md "Algorand Offline Wallet Backup Protocol"
40 | 
41 | ## NFT & Token ARCs
42 | 
43 | | ARCS           | Daffi         | Defly         | Exodus        | Pera Wallet   |
44 | | -------------- | ------------- | ------------- | ------------- | ------------- |
45 | | [3][ARC-3]     | UNKNOWN       | UNKNOWN       | Supported     | UNKNOWN       |
46 | | [16][ARC-16]   | UNKNOWN       | UNKNOWN       | Supported     | UNKNOWN       |
47 | | [19][ARC-19]   | UNKNOWN       | UNKNOWN       | Supported     | UNKNOWN       |
48 | | [20][ARC-20]   | UNKNOWN       | UNKNOWN       | Not Supported | UNKNOWN       |
49 | | [69][ARC-69]   | UNKNOWN       | UNKNOWN       | Supported     | UNKNOWN       |
50 | | [72][ARC-72]   | UNKNOWN       | UNKNOWN       | Not Supported | UNKNOWN       |
51 | | [200][ARC-200] | UNKNOWN       | UNKNOWN       | Not Supported | UNKNOWN       |
52 | 
53 | [ARC-3]: ../ARCs/arc-0003.md "Conventions Fungible/Non-Fungible Tokens"
54 | [ARC-16]: ../ARCs/arc-0016.md "Convention for declaring traits of an NFT's"
55 | [ARC-19]: ../ARCs/arc-0019.md "Templating of NFT ASA URLs for mutability"
56 | [ARC-20]: ../ARCs/arc-0020.md "Smart ASA"
57 | [ARC-69]: ../ARCs/arc-0069.md "ASA Parameters Conventions, Digital Media"
58 | [ARC-72]: ../ARCs/arc-0072.md "Algorand Smart Contract NFT Specification"
59 | [ARC-200]: ../ARCs/arc-0200.md "Algorand Smart Contract Token Specification"
60 | 
61 | 
62 | ## BIPS
63 | 
64 | | BIPS           | Daffi         | Defly         | Exodus        | Pera Wallet   |
65 | | -------------- | ------------- | ------------- | ------------- | ------------- |
66 | | [32][BIP-32]   | UNKNOWN       | Not supported | Supported     | Not supported |
67 | | [39][BIP-39]   | UNKNOWN       | Planned       | Supported     | Planned       |
68 | | [44][BIP-44]   | UNKNOWN       | Not supported | Supported     | Not supported |
69 | 
70 | [BIP-32]: https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki "Hierarchical Deterministic Wallets"
71 | [BIP-39]: https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki "Mnemonic code for generating deterministic keys"
72 | [BIP-44]: https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki "Multi-Account Hierarchy for Deterministic Wallets"
73 | 
74 | **Disclaimer:** This website is under constant modification.
75 | 
```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/algokit:utils:typescript:code:classes:types_account.MultisigAccount.md:
--------------------------------------------------------------------------------

```markdown
  1 | [@algorandfoundation/algokit-utils](../README.md) / [types/account](../modules/types_account.md) / MultisigAccount
  2 | 
  3 | # Class: MultisigAccount
  4 | 
  5 | [types/account](../modules/types_account.md).MultisigAccount
  6 | 
  7 | Account wrapper that supports partial or full multisig signing.
  8 | 
  9 | ## Table of contents
 10 | 
 11 | ### Constructors
 12 | 
 13 | - [constructor](types_account.MultisigAccount.md#constructor)
 14 | 
 15 | ### Properties
 16 | 
 17 | - [\_addr](types_account.MultisigAccount.md#_addr)
 18 | - [\_params](types_account.MultisigAccount.md#_params)
 19 | - [\_signer](types_account.MultisigAccount.md#_signer)
 20 | - [\_signingAccounts](types_account.MultisigAccount.md#_signingaccounts)
 21 | 
 22 | ### Accessors
 23 | 
 24 | - [addr](types_account.MultisigAccount.md#addr)
 25 | - [params](types_account.MultisigAccount.md#params)
 26 | - [signer](types_account.MultisigAccount.md#signer)
 27 | - [signingAccounts](types_account.MultisigAccount.md#signingaccounts)
 28 | 
 29 | ### Methods
 30 | 
 31 | - [sign](types_account.MultisigAccount.md#sign)
 32 | 
 33 | ## Constructors
 34 | 
 35 | ### constructor
 36 | 
 37 | • **new MultisigAccount**(`multisigParams`, `signingAccounts`): [`MultisigAccount`](types_account.MultisigAccount.md)
 38 | 
 39 | #### Parameters
 40 | 
 41 | | Name | Type |
 42 | | :------ | :------ |
 43 | | `multisigParams` | `MultisigMetadata` |
 44 | | `signingAccounts` | (`default` \| [`SigningAccount`](types_account.SigningAccount.md))[] |
 45 | 
 46 | #### Returns
 47 | 
 48 | [`MultisigAccount`](types_account.MultisigAccount.md)
 49 | 
 50 | #### Defined in
 51 | 
 52 | [src/types/account.ts:45](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/account.ts#L45)
 53 | 
 54 | ## Properties
 55 | 
 56 | ### \_addr
 57 | 
 58 | • **\_addr**: `Address`
 59 | 
 60 | #### Defined in
 61 | 
 62 | [src/types/account.ts:23](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/account.ts#L23)
 63 | 
 64 | ___
 65 | 
 66 | ### \_params
 67 | 
 68 | • **\_params**: `MultisigMetadata`
 69 | 
 70 | #### Defined in
 71 | 
 72 | [src/types/account.ts:21](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/account.ts#L21)
 73 | 
 74 | ___
 75 | 
 76 | ### \_signer
 77 | 
 78 | • **\_signer**: `TransactionSigner`
 79 | 
 80 | #### Defined in
 81 | 
 82 | [src/types/account.ts:24](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/account.ts#L24)
 83 | 
 84 | ___
 85 | 
 86 | ### \_signingAccounts
 87 | 
 88 | • **\_signingAccounts**: (`default` \| [`SigningAccount`](types_account.SigningAccount.md))[]
 89 | 
 90 | #### Defined in
 91 | 
 92 | [src/types/account.ts:22](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/account.ts#L22)
 93 | 
 94 | ## Accessors
 95 | 
 96 | ### addr
 97 | 
 98 | • `get` **addr**(): `Readonly`\<`Address`\>
 99 | 
100 | The address of the multisig account
101 | 
102 | #### Returns
103 | 
104 | `Readonly`\<`Address`\>
105 | 
106 | #### Defined in
107 | 
108 | [src/types/account.ts:37](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/account.ts#L37)
109 | 
110 | ___
111 | 
112 | ### params
113 | 
114 | • `get` **params**(): `Readonly`\<`MultisigMetadata`\>
115 | 
116 | The parameters for the multisig account
117 | 
118 | #### Returns
119 | 
120 | `Readonly`\<`MultisigMetadata`\>
121 | 
122 | #### Defined in
123 | 
124 | [src/types/account.ts:27](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/account.ts#L27)
125 | 
126 | ___
127 | 
128 | ### signer
129 | 
130 | • `get` **signer**(): `TransactionSigner`
131 | 
132 | #### Returns
133 | 
134 | `TransactionSigner`
135 | 
136 | #### Defined in
137 | 
138 | [src/types/account.ts:41](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/account.ts#L41)
139 | 
140 | ___
141 | 
142 | ### signingAccounts
143 | 
144 | • `get` **signingAccounts**(): readonly (`default` \| [`SigningAccount`](types_account.SigningAccount.md))[]
145 | 
146 | The list of accounts that are present to sign
147 | 
148 | #### Returns
149 | 
150 | readonly (`default` \| [`SigningAccount`](types_account.SigningAccount.md))[]
151 | 
152 | #### Defined in
153 | 
154 | [src/types/account.ts:32](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/account.ts#L32)
155 | 
156 | ## Methods
157 | 
158 | ### sign
159 | 
160 | ▸ **sign**(`transaction`): `Uint8Array`
161 | 
162 | Sign the given transaction
163 | 
164 | #### Parameters
165 | 
166 | | Name | Type | Description |
167 | | :------ | :------ | :------ |
168 | | `transaction` | `Uint8Array` \| `Transaction` | Either a transaction object or a raw, partially signed transaction |
169 | 
170 | #### Returns
171 | 
172 | `Uint8Array`
173 | 
174 | The transaction signed by the present signers
175 | 
176 | #### Defined in
177 | 
178 | [src/types/account.ts:60](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/account.ts#L60)
179 | 
```

--------------------------------------------------------------------------------
/packages/server/src/tools/transactionManager/appTransactions/callTxn.ts:
--------------------------------------------------------------------------------

```typescript
  1 | import { Transaction, makeApplicationNoOpTxnFromObject, OnApplicationComplete } from 'algosdk';
  2 | import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js';
  3 | import { AppCallTxnParams } from './types.js';
  4 | 
  5 | /**
  6 |  * Creates an application call (NoOp) transaction
  7 |  * @param params The parameters for calling the application
  8 |  * @returns The created transaction
  9 |  * @throws {McpError} If the transaction creation fails
 10 |  */
 11 | export function makeApplicationCallTxn(params: AppCallTxnParams): Transaction {
 12 |   try {
 13 |     // Create a new object with the required structure
 14 |     const txnParams = {
 15 |       from: params.from,
 16 |       appIndex: params.appIndex,
 17 |       suggestedParams: params.suggestedParams,
 18 |       note: params.note,
 19 |       lease: params.lease,
 20 |       rekeyTo: params.rekeyTo,
 21 |       appArgs: params.appArgs,
 22 |       accounts: params.accounts,
 23 |       foreignApps: params.foreignApps,
 24 |       foreignAssets: params.foreignAssets,
 25 |       boxes: params.boxes
 26 |     };
 27 | 
 28 |     // Pass the onComplete parameter separately
 29 |     return makeApplicationNoOpTxnFromObject({
 30 |       ...txnParams,
 31 |       onComplete: OnApplicationComplete.NoOpOC
 32 |     } as any); // Use type assertion since the types are not perfectly aligned
 33 |   } catch (error) {
 34 |     console.error('[MCP Error] Failed to create application call transaction:', error);
 35 |     throw new McpError(
 36 |       ErrorCode.InternalError,
 37 |       `Failed to create application call transaction: ${error instanceof Error ? error.message : 'Unknown error'}`
 38 |     );
 39 |   }
 40 | }
 41 | 
 42 | /**
 43 |  * Handles the application call tool request
 44 |  * @param args The tool arguments
 45 |  * @param suggestedParams The suggested transaction parameters
 46 |  * @returns The transaction parameters
 47 |  * @throws {McpError} If the parameters are invalid
 48 |  */
 49 | export function handleCallTxn(args: Record<string, unknown>, suggestedParams: any): Record<string, any> {
 50 |   try {
 51 |     if (!args.from || !args.appIndex) {
 52 |       console.error('[MCP Error] Invalid application call parameters');
 53 |       throw new McpError(ErrorCode.InvalidParams, 'Invalid application call parameters');
 54 |     }
 55 | 
 56 |     // Create transaction with proper parameter handling
 57 |     const txnParams: Record<string, any> = {
 58 |       from: String(args.from),
 59 |       appIndex: Number(args.appIndex),
 60 |       fee: suggestedParams.fee,
 61 |       firstRound: suggestedParams.firstRound,
 62 |       lastRound: suggestedParams.lastRound,
 63 |       genesisID: suggestedParams.genesisID,
 64 |       genesisHash: suggestedParams.genesisHash,
 65 |       type: 'appl',
 66 |       onComplete: OnApplicationComplete.NoOpOC
 67 |     };
 68 | 
 69 |     // Handle optional fields
 70 |     if (typeof args.note === 'string') {
 71 |       const noteBytes = new TextEncoder().encode(args.note);
 72 |       txnParams.note = Buffer.from(noteBytes).toString('base64');
 73 |     }
 74 |     if (typeof args.lease === 'string') {
 75 |       const leaseBytes = new TextEncoder().encode(args.lease);
 76 |       txnParams.lease = Buffer.from(leaseBytes).toString('base64');
 77 |     }
 78 |     if (typeof args.rekeyTo === 'string') {
 79 |       txnParams.rekeyTo = String(args.rekeyTo);
 80 |     }
 81 |     if (Array.isArray(args.appArgs)) {
 82 |       txnParams.appArgs = args.appArgs.map(arg => {
 83 |         const bytes = new TextEncoder().encode(String(arg));
 84 |         return Buffer.from(bytes).toString('base64');
 85 |       });
 86 |     }
 87 |     if (Array.isArray(args.accounts)) {
 88 |       txnParams.accounts = args.accounts.filter((acc): acc is string => typeof acc === 'string');
 89 |     }
 90 |     if (Array.isArray(args.foreignApps)) {
 91 |       txnParams.foreignApps = args.foreignApps.filter((app): app is number => typeof app === 'number');
 92 |     }
 93 |     if (Array.isArray(args.foreignAssets)) {
 94 |       txnParams.foreignAssets = args.foreignAssets.filter((asset): asset is number => typeof asset === 'number');
 95 |     }
 96 | 
 97 |     return txnParams;
 98 |   } catch (error) {
 99 |     if (error instanceof McpError) {
100 |       throw error;
101 |     }
102 |     console.error('[MCP Error] Failed to handle application call:', error);
103 |     throw new McpError(
104 |       ErrorCode.InternalError,
105 |       `Failed to handle application call: ${error instanceof Error ? error.message : 'Unknown error'}`
106 |     );
107 |   }
108 | }
109 | 
```

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

```markdown
  1 | [@algorandfoundation/algokit-utils](../README.md) / [types/testing](../modules/types_testing.md) / AlgorandFixtureConfig
  2 | 
  3 | # Interface: AlgorandFixtureConfig
  4 | 
  5 | [types/testing](../modules/types_testing.md).AlgorandFixtureConfig
  6 | 
  7 | Configuration for creating an Algorand testing fixture.
  8 | 
  9 | ## Hierarchy
 10 | 
 11 | - `Partial`\<[`AlgoConfig`](types_network_client.AlgoConfig.md)\>
 12 | 
 13 |   ↳ **`AlgorandFixtureConfig`**
 14 | 
 15 | ## Table of contents
 16 | 
 17 | ### Properties
 18 | 
 19 | - [accountGetter](types_testing.AlgorandFixtureConfig.md#accountgetter)
 20 | - [algod](types_testing.AlgorandFixtureConfig.md#algod)
 21 | - [algodConfig](types_testing.AlgorandFixtureConfig.md#algodconfig)
 22 | - [indexer](types_testing.AlgorandFixtureConfig.md#indexer)
 23 | - [indexerConfig](types_testing.AlgorandFixtureConfig.md#indexerconfig)
 24 | - [kmd](types_testing.AlgorandFixtureConfig.md#kmd)
 25 | - [kmdConfig](types_testing.AlgorandFixtureConfig.md#kmdconfig)
 26 | - [testAccountFunding](types_testing.AlgorandFixtureConfig.md#testaccountfunding)
 27 | 
 28 | ## Properties
 29 | 
 30 | ### accountGetter
 31 | 
 32 | • `Optional` **accountGetter**: (`algod`: `AlgodClient`, `kmd?`: `KmdClient`) => `Promise`\<`default`\>
 33 | 
 34 | Optional override for how to get an account; this allows you to retrieve accounts from a known or cached list of accounts.
 35 | 
 36 | #### Type declaration
 37 | 
 38 | ▸ (`algod`, `kmd?`): `Promise`\<`default`\>
 39 | 
 40 | ##### Parameters
 41 | 
 42 | | Name | Type |
 43 | | :------ | :------ |
 44 | | `algod` | `AlgodClient` |
 45 | | `kmd?` | `KmdClient` |
 46 | 
 47 | ##### Returns
 48 | 
 49 | `Promise`\<`default`\>
 50 | 
 51 | #### Defined in
 52 | 
 53 | [src/types/testing.ts:62](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/testing.ts#L62)
 54 | 
 55 | ___
 56 | 
 57 | ### algod
 58 | 
 59 | • `Optional` **algod**: `AlgodClient`
 60 | 
 61 | An optional algod client, if not specified then it will create one against `algodConfig` (if present) then environment variables defined network (if present) or default LocalNet.
 62 | 
 63 | #### Defined in
 64 | 
 65 | [src/types/testing.ts:54](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/testing.ts#L54)
 66 | 
 67 | ___
 68 | 
 69 | ### algodConfig
 70 | 
 71 | • `Optional` **algodConfig**: [`AlgoClientConfig`](types_network_client.AlgoClientConfig.md)
 72 | 
 73 | Algod client configuration
 74 | 
 75 | #### Inherited from
 76 | 
 77 | Partial.algodConfig
 78 | 
 79 | #### Defined in
 80 | 
 81 | [src/types/network-client.ts:16](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/network-client.ts#L16)
 82 | 
 83 | ___
 84 | 
 85 | ### indexer
 86 | 
 87 | • `Optional` **indexer**: `IndexerClient`
 88 | 
 89 | An optional indexer client, if not specified then it will create one against `indexerConfig` (if present) then environment variables defined network (if present) or default LocalNet.
 90 | 
 91 | #### Defined in
 92 | 
 93 | [src/types/testing.ts:56](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/testing.ts#L56)
 94 | 
 95 | ___
 96 | 
 97 | ### indexerConfig
 98 | 
 99 | • `Optional` **indexerConfig**: [`AlgoClientConfig`](types_network_client.AlgoClientConfig.md)
100 | 
101 | Indexer client configuration
102 | 
103 | #### Inherited from
104 | 
105 | Partial.indexerConfig
106 | 
107 | #### Defined in
108 | 
109 | [src/types/network-client.ts:18](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/network-client.ts#L18)
110 | 
111 | ___
112 | 
113 | ### kmd
114 | 
115 | • `Optional` **kmd**: `KmdClient`
116 | 
117 | An optional kmd client, if not specified then it will create one against `kmdConfig` (if present) then environment variables defined network (if present) or default LocalNet.
118 | 
119 | #### Defined in
120 | 
121 | [src/types/testing.ts:58](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/testing.ts#L58)
122 | 
123 | ___
124 | 
125 | ### kmdConfig
126 | 
127 | • `Optional` **kmdConfig**: [`AlgoClientConfig`](types_network_client.AlgoClientConfig.md)
128 | 
129 | Kmd configuration
130 | 
131 | #### Inherited from
132 | 
133 | Partial.kmdConfig
134 | 
135 | #### Defined in
136 | 
137 | [src/types/network-client.ts:20](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/network-client.ts#L20)
138 | 
139 | ___
140 | 
141 | ### testAccountFunding
142 | 
143 | • `Optional` **testAccountFunding**: [`AlgoAmount`](../classes/types_amount.AlgoAmount.md)
144 | 
145 | The amount of funds to allocate to the default testing account, if not specified then it will get 10 ALGO.
146 | 
147 | #### Defined in
148 | 
149 | [src/types/testing.ts:60](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/testing.ts#L60)
150 | 
```

--------------------------------------------------------------------------------
/packages/server/src/tools/transactionManager/appTransactions/optInTxn.ts:
--------------------------------------------------------------------------------

```typescript
  1 | import { Transaction, makeApplicationOptInTxnFromObject, OnApplicationComplete } from 'algosdk';
  2 | import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js';
  3 | import { AppOptInTxnParams } from './types.js';
  4 | 
  5 | /**
  6 |  * Creates an application opt-in transaction
  7 |  * @param params The parameters for opting into the application
  8 |  * @returns The created transaction
  9 |  * @throws {McpError} If the transaction creation fails
 10 |  */
 11 | export function makeApplicationOptInTxn(params: AppOptInTxnParams): Transaction {
 12 |   try {
 13 |     // Create a new object with the required structure
 14 |     const txnParams = {
 15 |       from: params.from,
 16 |       appIndex: params.appIndex,
 17 |       suggestedParams: params.suggestedParams,
 18 |       note: params.note,
 19 |       lease: params.lease,
 20 |       rekeyTo: params.rekeyTo,
 21 |       appArgs: params.appArgs,
 22 |       accounts: params.accounts,
 23 |       foreignApps: params.foreignApps,
 24 |       foreignAssets: params.foreignAssets,
 25 |       boxes: params.boxes
 26 |     };
 27 | 
 28 |     // Pass the onComplete parameter separately
 29 |     return makeApplicationOptInTxnFromObject({
 30 |       ...txnParams,
 31 |       onComplete: OnApplicationComplete.OptInOC
 32 |     } as any); // Use type assertion since the types are not perfectly aligned
 33 |   } catch (error) {
 34 |     console.error('[MCP Error] Failed to create application opt-in transaction:', error);
 35 |     throw new McpError(
 36 |       ErrorCode.InternalError,
 37 |       `Failed to create application opt-in transaction: ${error instanceof Error ? error.message : 'Unknown error'}`
 38 |     );
 39 |   }
 40 | }
 41 | 
 42 | /**
 43 |  * Handles the application opt-in tool request
 44 |  * @param args The tool arguments
 45 |  * @param suggestedParams The suggested transaction parameters
 46 |  * @returns The transaction parameters
 47 |  * @throws {McpError} If the parameters are invalid
 48 |  */
 49 | export function handleOptInTxn(args: Record<string, unknown>, suggestedParams: any): Record<string, any> {
 50 |   try {
 51 |     if (!args.from || !args.appIndex) {
 52 |       console.error('[MCP Error] Invalid application opt-in parameters');
 53 |       throw new McpError(ErrorCode.InvalidParams, 'Invalid application opt-in parameters');
 54 |     }
 55 | 
 56 |     // Create transaction with proper parameter handling
 57 |     const txnParams: Record<string, any> = {
 58 |       from: String(args.from),
 59 |       appIndex: Number(args.appIndex),
 60 |       fee: suggestedParams.fee,
 61 |       firstRound: suggestedParams.firstRound,
 62 |       lastRound: suggestedParams.lastRound,
 63 |       genesisID: suggestedParams.genesisID,
 64 |       genesisHash: suggestedParams.genesisHash,
 65 |       type: 'appl',
 66 |       onComplete: OnApplicationComplete.OptInOC
 67 |     };
 68 | 
 69 |     // Handle optional fields
 70 |     if (typeof args.note === 'string') {
 71 |       const noteBytes = new TextEncoder().encode(args.note);
 72 |       txnParams.note = Buffer.from(noteBytes).toString('base64');
 73 |     }
 74 |     if (typeof args.lease === 'string') {
 75 |       const leaseBytes = new TextEncoder().encode(args.lease);
 76 |       txnParams.lease = Buffer.from(leaseBytes).toString('base64');
 77 |     }
 78 |     if (typeof args.rekeyTo === 'string') {
 79 |       txnParams.rekeyTo = String(args.rekeyTo);
 80 |     }
 81 |     if (Array.isArray(args.appArgs)) {
 82 |       txnParams.appArgs = args.appArgs.map(arg => {
 83 |         const bytes = new TextEncoder().encode(String(arg));
 84 |         return Buffer.from(bytes).toString('base64');
 85 |       });
 86 |     }
 87 |     if (Array.isArray(args.accounts)) {
 88 |       txnParams.accounts = args.accounts.filter((acc): acc is string => typeof acc === 'string');
 89 |     }
 90 |     if (Array.isArray(args.foreignApps)) {
 91 |       txnParams.foreignApps = args.foreignApps.filter((app): app is number => typeof app === 'number');
 92 |     }
 93 |     if (Array.isArray(args.foreignAssets)) {
 94 |       txnParams.foreignAssets = args.foreignAssets.filter((asset): asset is number => typeof asset === 'number');
 95 |     }
 96 | 
 97 |     return txnParams;
 98 |   } catch (error) {
 99 |     if (error instanceof McpError) {
100 |       throw error;
101 |     }
102 |     console.error('[MCP Error] Failed to handle application opt-in:', error);
103 |     throw new McpError(
104 |       ErrorCode.InternalError,
105 |       `Failed to handle application opt-in: ${error instanceof Error ? error.message : 'Unknown error'}`
106 |     );
107 |   }
108 | }
109 | 
```

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

```markdown
  1 | ---
  2 | title: "Server: Integrations"
  3 | sidebar:
  4 |   order: 3
  5 |   label: 'Integrations'
  6 | next: false
  7 | ---
  8 | 
  9 | ### NGINX
 10 | 
 11 | The official Docker image supports ENV variable substitution in the template folder.
 12 | Add your distribution to the container under `/usr/share/nginx/html`
 13 | Make sure to configure a `LIQUID_API_HOST` ENV variable that points to your deployed Liquid Auth API.
 14 | 
 15 | ```nginx
 16 | ///etc/nginx/template/default.conf.template
 17 | 
 18 | server {
 19 |     listen            80;
 20 |     listen       [::]:80;
 21 |     server_name  localhost;
 22 |     
 23 |     root   /usr/share/nginx/html;
 24 | 
 25 |     location / {
 26 |         index  index.html index.htm;
 27 |         expires -1;
 28 |         try_files $uri $uri/ @fallback;
 29 |     }
 30 | 
 31 |     location @fallback  {
 32 |         proxy_set_header Host ${LIQUID_API_HOST};
 33 |         proxy_set_header X-Real-IP $remote_addr;
 34 |         proxy_ssl_server_name on;
 35 |         proxy_pass https://${LIQUID_API_HOST};
 36 |     }
 37 | }
 38 | 
 39 | ```
 40 | 
 41 | ### Vite
 42 | > We recommend running a proxy server like Nginx in production. This will work for local development
 43 | 
 44 | ```typescript
 45 | //vite.config.ts
 46 | 
 47 | const DEFAULT_PROXY_URL = 'http://localhost:3000';
 48 | const DEFAULT_WSS_PROXY_URL = 'ws://localhost:3000';
 49 | export default defineConfig({
 50 |   server: {
 51 |     proxy: {
 52 |       '^/auth/.*': process.env.PROXY_URL || DEFAULT_PROXY_URL,
 53 |       '^/.well-known/.*': process.env.PROXY_URL || DEFAULT_PROXY_URL,
 54 |       '^/attestation/.*': process.env.PROXY_URL || DEFAULT_PROXY_URL,
 55 |       '^/assertion/.*': process.env.PROXY_URL || DEFAULT_PROXY_URL,
 56 |       '/socket.io': {
 57 |         target: process.env.WSS_PROXY_SERVER || DEFAULT_WSS_PROXY_URL,
 58 |         ws: true,
 59 |       },
 60 |     }
 61 |   },
 62 | })
 63 | ```
 64 | 
 65 | ### Next.js
 66 | > We recommend running a proxy server like Nginx in production. This will work in a pinch or to test locally.
 67 | 
 68 | Deploy the service to a platform like Render or AWS then configure the Proxy in `next.config.js`.
 69 | 
 70 | ```typescript
 71 | //next.config.js
 72 | /** @type {import('next').NextConfig} */
 73 | 
 74 | const serverURL = "https://my-liquid-service.com";
 75 | 
 76 | const nextConfig = {
 77 |   trailingSlash: true,
 78 |   async rewrites() {
 79 |     return [
 80 |       {
 81 |         source: '/auth/:path*',
 82 |         destination: `${serverURL}/auth/:path*`,
 83 |       },
 84 |       {
 85 |         source: '/.well-known/:path*',
 86 |         destination: `${serverURL}/.well-known/:path*`,
 87 |       },
 88 |       {
 89 |         source: '/attestation/:path*',
 90 |         destination: `${serverURL}/attestation/:path*`,
 91 |       },
 92 | 
 93 |       {
 94 |         source: '/assertion/:path*',
 95 |         destination: `${serverURL}/assertion/:path*`,
 96 |       },
 97 |       {
 98 |         source: '/socket.io/',
 99 |         destination: `${serverURL}/socket.io/`,
100 |       },
101 |       {
102 |         source: '/socket.io',
103 |         destination: `${serverURL}/socket.io/`,
104 |       },
105 |     ]
106 |   },
107 | };
108 | 
109 | export default nextConfig;
110 | ```
111 | 
112 | ### Nest.js[WIP]
113 | > Warning, the Service package is not available publicly.
114 | > Please contact if you are interested in mounting the server
115 | 
116 | See the [Demo Express](https://github.com/algorandfoundation/liquid-auth/blob/develop/sites/express-dapp/src/main.ts) app for an example of how to mount the server.
117 | 
118 | ```shell
119 | npm install @algorandfoundation/liquid-server --save
120 | ```
121 | 
122 | ```typescript
123 | //src/main.ts
124 | import { AppModule, RedisIoAdapter } from '@algorandfoundation/liquid-server';
125 | 
126 | async function bootstrap() {
127 |   const app = await NestFactory.create(AppModule);
128 |   app.useWebSocketAdapter(new RedisIoAdapter(app));
129 |   await app.listen(3000);
130 | }
131 | ```
132 | 
133 | ### Vercel
134 | > We recommend running a proxy server like Nginx in production. This will work in a pinch
135 | 
136 | ```json
137 | //vercel.json
138 | {
139 |   "rewrites": [
140 |     {
141 |       "source": "/auth/:path*",
142 |       "destination": "${serverURL}/auth/:path*"
143 |     },
144 |     {
145 |       "source": "/.well-known/:path*",
146 |       "destination": "${serverURL}/.well-known/:path*"
147 |     },
148 |     {
149 |       "source": "/attestation/:path*",
150 |       "destination": "/attestation/:path*"
151 |     },
152 | 
153 |     {
154 |       "source": "/assertion/:path*",
155 |       "destination": "${serverURL}/assertion/:path*"
156 |     },
157 |     {
158 |       "source": "/socket.io/",
159 |       "destination": "${serverURL}/socket.io/"
160 |     },
161 |     {
162 |       "source": "/socket.io",
163 |       "destination": "${serverURL}/socket.io/"
164 |     }
165 |   ]
166 | }
167 | ```
168 | 
169 | 
```

--------------------------------------------------------------------------------
/packages/server/src/tools/transactionManager/appTransactions/deleteTxn.ts:
--------------------------------------------------------------------------------

```typescript
  1 | import { Transaction, makeApplicationDeleteTxnFromObject, OnApplicationComplete } from 'algosdk';
  2 | import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js';
  3 | import { AppDeleteTxnParams } from './types.js';
  4 | 
  5 | /**
  6 |  * Creates an application delete transaction
  7 |  * @param params The parameters for deleting the application
  8 |  * @returns The created transaction
  9 |  * @throws {McpError} If the transaction creation fails
 10 |  */
 11 | export function makeApplicationDeleteTxn(params: AppDeleteTxnParams): Transaction {
 12 |   try {
 13 |     // Create a new object with the required structure
 14 |     const txnParams = {
 15 |       from: params.from,
 16 |       appIndex: params.appIndex,
 17 |       suggestedParams: params.suggestedParams,
 18 |       note: params.note,
 19 |       lease: params.lease,
 20 |       rekeyTo: params.rekeyTo,
 21 |       appArgs: params.appArgs,
 22 |       accounts: params.accounts,
 23 |       foreignApps: params.foreignApps,
 24 |       foreignAssets: params.foreignAssets,
 25 |       boxes: params.boxes
 26 |     };
 27 | 
 28 |     // Pass the onComplete parameter separately
 29 |     return makeApplicationDeleteTxnFromObject({
 30 |       ...txnParams,
 31 |       onComplete: OnApplicationComplete.DeleteApplicationOC
 32 |     } as any); // Use type assertion since the types are not perfectly aligned
 33 |   } catch (error) {
 34 |     console.error('[MCP Error] Failed to create application delete transaction:', error);
 35 |     throw new McpError(
 36 |       ErrorCode.InternalError,
 37 |       `Failed to create application delete transaction: ${error instanceof Error ? error.message : 'Unknown error'}`
 38 |     );
 39 |   }
 40 | }
 41 | 
 42 | /**
 43 |  * Handles the application delete tool request
 44 |  * @param args The tool arguments
 45 |  * @param suggestedParams The suggested transaction parameters
 46 |  * @returns The transaction parameters
 47 |  * @throws {McpError} If the parameters are invalid
 48 |  */
 49 | export function handleDeleteTxn(args: Record<string, unknown>, suggestedParams: any): Record<string, any> {
 50 |   try {
 51 |     if (!args.from || !args.appIndex) {
 52 |       console.error('[MCP Error] Invalid application delete parameters');
 53 |       throw new McpError(ErrorCode.InvalidParams, 'Invalid application delete parameters');
 54 |     }
 55 | 
 56 |     // Create transaction with proper parameter handling
 57 |     const txnParams: Record<string, any> = {
 58 |       from: String(args.from),
 59 |       appIndex: Number(args.appIndex),
 60 |       fee: suggestedParams.fee,
 61 |       firstRound: suggestedParams.firstRound,
 62 |       lastRound: suggestedParams.lastRound,
 63 |       genesisID: suggestedParams.genesisID,
 64 |       genesisHash: suggestedParams.genesisHash,
 65 |       type: 'appl',
 66 |       onComplete: OnApplicationComplete.DeleteApplicationOC
 67 |     };
 68 | 
 69 |     // Handle optional fields
 70 |     if (typeof args.note === 'string') {
 71 |       const noteBytes = new TextEncoder().encode(args.note);
 72 |       txnParams.note = Buffer.from(noteBytes).toString('base64');
 73 |     }
 74 |     if (typeof args.lease === 'string') {
 75 |       const leaseBytes = new TextEncoder().encode(args.lease);
 76 |       txnParams.lease = Buffer.from(leaseBytes).toString('base64');
 77 |     }
 78 |     if (typeof args.rekeyTo === 'string') {
 79 |       txnParams.rekeyTo = String(args.rekeyTo);
 80 |     }
 81 |     if (Array.isArray(args.appArgs)) {
 82 |       txnParams.appArgs = args.appArgs.map(arg => {
 83 |         const bytes = new TextEncoder().encode(String(arg));
 84 |         return Buffer.from(bytes).toString('base64');
 85 |       });
 86 |     }
 87 |     if (Array.isArray(args.accounts)) {
 88 |       txnParams.accounts = args.accounts.filter((acc): acc is string => typeof acc === 'string');
 89 |     }
 90 |     if (Array.isArray(args.foreignApps)) {
 91 |       txnParams.foreignApps = args.foreignApps.filter((app): app is number => typeof app === 'number');
 92 |     }
 93 |     if (Array.isArray(args.foreignAssets)) {
 94 |       txnParams.foreignAssets = args.foreignAssets.filter((asset): asset is number => typeof asset === 'number');
 95 |     }
 96 | 
 97 |     return txnParams;
 98 |   } catch (error) {
 99 |     if (error instanceof McpError) {
100 |       throw error;
101 |     }
102 |     console.error('[MCP Error] Failed to handle application delete:', error);
103 |     throw new McpError(
104 |       ErrorCode.InternalError,
105 |       `Failed to handle application delete: ${error instanceof Error ? error.message : 'Unknown error'}`
106 |     );
107 |   }
108 | }
109 | 
```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/algokit:cli:features:tasks:wallet.md:
--------------------------------------------------------------------------------

```markdown
 1 | # AlgoKit Task Wallet
 2 | 
 3 | Manage your Algorand addresses and accounts effortlessly with the AlgoKit Wallet feature. This feature allows you to create short aliases for your addresses and accounts on AlgoKit CLI.
 4 | 
 5 | ## Usage
 6 | 
 7 | Available commands and possible usage as follows:
 8 | 
 9 | ```bash
10 | $ ~ algokit task wallet
11 | Usage: algokit task wallet [OPTIONS] COMMAND [ARGS]...
12 | 
13 | Create short aliases for your addresses and accounts on AlgoKit CLI.
14 | 
15 | Options:
16 | -h, --help Show this message and exit.
17 | 
18 | Commands:
19 | add Add an address or account to be stored against a named alias.
20 | get Get an address or account stored against a named alias.
21 | list List all addresses and accounts stored against a named alias.
22 | remove Remove an address or account stored against a named alias.
23 | reset Remove all aliases.
24 | ```
25 | 
26 | ## Commands
27 | 
28 | ### Add
29 | 
30 | This command adds an address or account to be stored against a named alias. If the `--mnemonic` flag is used, it will prompt the user for a mnemonic phrase interactively using masked input. If the `--force` flag is used, it will allow overwriting an existing alias. Maximum number of aliases that can be stored at a time is 50.
31 | 
32 | ```bash
33 | $ algokit wallet add [OPTIONS] ALIAS_NAME
34 | ```
35 | 
36 | > Please note, the command is not designed to be used in CI scope, there is no option to skip interactive masked input of the mnemonic, if you want to alias an `Account` (both private and public key) entity.
37 | 
38 | #### Options
39 | 
40 | - `--address, -a TEXT`: Specifies the address of the account. This option is required.
41 | - `--mnemonic, -m`: If specified, it prompts the user for a mnemonic phrase interactively using masked input.
42 | - `--force, -f`: If specified, it allows overwriting an existing alias without interactive confirmation prompt.
43 | 
44 | ### Get
45 | 
46 | This command retrieves an address or account stored against a named alias.
47 | 
48 | ```bash
49 | $ algokit wallet get ALIAS
50 | ```
51 | 
52 | ### List
53 | 
54 | This command lists all addresses and accounts stored against a named alias. If a record contains a `private_key` it will show a boolean flag indicating whether it exists, actual private key values are never exposed. As a user you can obtain the content of the stored aliases by navigating to your dedicated password manager (see [keyring details](https://pypi.org/project/keyring/)).
55 | 
56 | ```bash
57 | $ algokit wallet list
58 | ```
59 | 
60 | ### Remove
61 | 
62 | This command removes an address or account stored against a named alias.
63 | You must confirm the prompt interactively or pass `--force` | `-f` flag to ignore the prompt.
64 | 
65 | ```bash
66 | $ algokit wallet remove ALIAS  [--force | -f]
67 | ```
68 | 
69 | ### Reset
70 | 
71 | This command removes all aliases. You must confirm the prompt interactively or pass `--force` | `-f` flag to ignore the prompt.
72 | 
73 | ```bash
74 | $ algokit wallet reset [--force | -f]
75 | ```
76 | 
77 | ## Keyring
78 | 
79 | AlgoKit relies on the [keyring](https://pypi.org/project/keyring/) library, which provides an easy way to interact with the operating system's password manager. This abstraction allows AlgoKit to securely manage sensitive information such as mnemonics and private keys.
80 | 
81 | When you use AlgoKit to store a mnemonic, it is never printed or exposed directly in the console. Instead, the mnemonic is converted and stored as a private key in the password manager. This ensures that your sensitive information is kept secure.
82 | 
83 | To retrieve the stored mnemonic, you will need to manually navigate to your operating system's password manager. The keyring library supports a variety of password managers across different operating systems. Here are some examples:
84 | 
85 | - On macOS, it uses the Keychain Access app.
86 | - On Windows, it uses the Credential Manager.
87 | - On Linux, it can use Secret Service API, KWallet, or an in-memory store depending on your setup.
88 | 
89 | > Remember, AlgoKit is designed to keep your sensitive information secure however your storage is only as secure as the device on which it is stored. Always ensure to maintain good security practices on your device, especially when dealing with mnemonics that are to be used on MainNet.
90 | 
91 | ## Further Reading
92 | 
93 | For in-depth details, visit the [wallet section](../../cli/index.md#wallet) in the AlgoKit CLI reference documentation.
94 | 
```

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

```markdown
  1 | [algosdk](../README.md) / [Exports](../modules.md) / [indexerModels](../modules/indexerModels.md) / ApplicationLocalState
  2 | 
  3 | # Class: ApplicationLocalState
  4 | 
  5 | [indexerModels](../modules/indexerModels.md).ApplicationLocalState
  6 | 
  7 | Stores local state associated with an application.
  8 | 
  9 | ## Hierarchy
 10 | 
 11 | - `default`
 12 | 
 13 |   ↳ **`ApplicationLocalState`**
 14 | 
 15 | ## Table of contents
 16 | 
 17 | ### Constructors
 18 | 
 19 | - [constructor](indexerModels.ApplicationLocalState.md#constructor)
 20 | 
 21 | ### Properties
 22 | 
 23 | - [attribute\_map](indexerModels.ApplicationLocalState.md#attribute_map)
 24 | - [closedOutAtRound](indexerModels.ApplicationLocalState.md#closedoutatround)
 25 | - [deleted](indexerModels.ApplicationLocalState.md#deleted)
 26 | - [id](indexerModels.ApplicationLocalState.md#id)
 27 | - [keyValue](indexerModels.ApplicationLocalState.md#keyvalue)
 28 | - [optedInAtRound](indexerModels.ApplicationLocalState.md#optedinatround)
 29 | - [schema](indexerModels.ApplicationLocalState.md#schema)
 30 | 
 31 | ### Methods
 32 | 
 33 | - [get\_obj\_for\_encoding](indexerModels.ApplicationLocalState.md#get_obj_for_encoding)
 34 | - [from\_obj\_for\_encoding](indexerModels.ApplicationLocalState.md#from_obj_for_encoding)
 35 | 
 36 | ## Constructors
 37 | 
 38 | ### constructor
 39 | 
 40 | • **new ApplicationLocalState**(`«destructured»`)
 41 | 
 42 | Creates a new `ApplicationLocalState` object.
 43 | 
 44 | #### Parameters
 45 | 
 46 | | Name | Type |
 47 | | :------ | :------ |
 48 | | `«destructured»` | `Object` |
 49 | | › `closedOutAtRound?` | `number` \| `bigint` |
 50 | | › `deleted?` | `boolean` |
 51 | | › `id` | `number` \| `bigint` |
 52 | | › `keyValue?` | [`TealKeyValue`](indexerModels.TealKeyValue.md)[] |
 53 | | › `optedInAtRound?` | `number` \| `bigint` |
 54 | | › `schema` | [`ApplicationStateSchema`](indexerModels.ApplicationStateSchema.md) |
 55 | 
 56 | #### Overrides
 57 | 
 58 | BaseModel.constructor
 59 | 
 60 | #### Defined in
 61 | 
 62 | client/v2/indexer/models/types.ts:908
 63 | 
 64 | ## Properties
 65 | 
 66 | ### attribute\_map
 67 | 
 68 | • **attribute\_map**: `Record`\<`string`, `string`\>
 69 | 
 70 | #### Inherited from
 71 | 
 72 | BaseModel.attribute\_map
 73 | 
 74 | #### Defined in
 75 | 
 76 | client/v2/basemodel.ts:56
 77 | 
 78 | ___
 79 | 
 80 | ### closedOutAtRound
 81 | 
 82 | • `Optional` **closedOutAtRound**: `number` \| `bigint`
 83 | 
 84 | Round when account closed out of the application.
 85 | 
 86 | #### Defined in
 87 | 
 88 | client/v2/indexer/models/types.ts:880
 89 | 
 90 | ___
 91 | 
 92 | ### deleted
 93 | 
 94 | • `Optional` **deleted**: `boolean`
 95 | 
 96 | Whether or not the application local state is currently deleted from its
 97 | account.
 98 | 
 99 | #### Defined in
100 | 
101 | client/v2/indexer/models/types.ts:886
102 | 
103 | ___
104 | 
105 | ### id
106 | 
107 | • **id**: `number` \| `bigint`
108 | 
109 | The application which this local state is for.
110 | 
111 | #### Defined in
112 | 
113 | client/v2/indexer/models/types.ts:870
114 | 
115 | ___
116 | 
117 | ### keyValue
118 | 
119 | • `Optional` **keyValue**: [`TealKeyValue`](indexerModels.TealKeyValue.md)[]
120 | 
121 | storage.
122 | 
123 | #### Defined in
124 | 
125 | client/v2/indexer/models/types.ts:891
126 | 
127 | ___
128 | 
129 | ### optedInAtRound
130 | 
131 | • `Optional` **optedInAtRound**: `number` \| `bigint`
132 | 
133 | Round when the account opted into the application.
134 | 
135 | #### Defined in
136 | 
137 | client/v2/indexer/models/types.ts:896
138 | 
139 | ___
140 | 
141 | ### schema
142 | 
143 | • **schema**: [`ApplicationStateSchema`](indexerModels.ApplicationStateSchema.md)
144 | 
145 | schema.
146 | 
147 | #### Defined in
148 | 
149 | client/v2/indexer/models/types.ts:875
150 | 
151 | ## Methods
152 | 
153 | ### get\_obj\_for\_encoding
154 | 
155 | ▸ **get_obj_for_encoding**(`binary?`): `Record`\<`string`, `any`\>
156 | 
157 | Get an object ready for encoding to either JSON or msgpack.
158 | 
159 | #### Parameters
160 | 
161 | | Name | Type | Default value | Description |
162 | | :------ | :------ | :------ | :------ |
163 | | `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. |
164 | 
165 | #### Returns
166 | 
167 | `Record`\<`string`, `any`\>
168 | 
169 | #### Inherited from
170 | 
171 | BaseModel.get\_obj\_for\_encoding
172 | 
173 | #### Defined in
174 | 
175 | client/v2/basemodel.ts:65
176 | 
177 | ___
178 | 
179 | ### from\_obj\_for\_encoding
180 | 
181 | ▸ `Static` **from_obj_for_encoding**(`data`): [`ApplicationLocalState`](indexerModels.ApplicationLocalState.md)
182 | 
183 | #### Parameters
184 | 
185 | | Name | Type |
186 | | :------ | :------ |
187 | | `data` | `Record`\<`string`, `any`\> |
188 | 
189 | #### Returns
190 | 
191 | [`ApplicationLocalState`](indexerModels.ApplicationLocalState.md)
192 | 
193 | #### Defined in
194 | 
195 | client/v2/indexer/models/types.ts:942
196 | 
```

--------------------------------------------------------------------------------
/packages/server/src/tools/transactionManager/appTransactions/closeOutTxn.ts:
--------------------------------------------------------------------------------

```typescript
  1 | import { Transaction, makeApplicationCloseOutTxnFromObject, OnApplicationComplete } from 'algosdk';
  2 | import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js';
  3 | import { AppCloseOutTxnParams } from './types.js';
  4 | 
  5 | /**
  6 |  * Creates an application close-out transaction
  7 |  * @param params The parameters for closing out from the application
  8 |  * @returns The created transaction
  9 |  * @throws {McpError} If the transaction creation fails
 10 |  */
 11 | export function makeApplicationCloseOutTxn(params: AppCloseOutTxnParams): Transaction {
 12 |   try {
 13 |     // Create a new object with the required structure
 14 |     const txnParams = {
 15 |       from: params.from,
 16 |       appIndex: params.appIndex,
 17 |       suggestedParams: params.suggestedParams,
 18 |       note: params.note,
 19 |       lease: params.lease,
 20 |       rekeyTo: params.rekeyTo,
 21 |       appArgs: params.appArgs,
 22 |       accounts: params.accounts,
 23 |       foreignApps: params.foreignApps,
 24 |       foreignAssets: params.foreignAssets,
 25 |       boxes: params.boxes
 26 |     };
 27 | 
 28 |     // Pass the onComplete parameter separately
 29 |     return makeApplicationCloseOutTxnFromObject({
 30 |       ...txnParams,
 31 |       onComplete: OnApplicationComplete.CloseOutOC
 32 |     } as any); // Use type assertion since the types are not perfectly aligned
 33 |   } catch (error) {
 34 |     console.error('[MCP Error] Failed to create application close-out transaction:', error);
 35 |     throw new McpError(
 36 |       ErrorCode.InternalError,
 37 |       `Failed to create application close-out transaction: ${error instanceof Error ? error.message : 'Unknown error'}`
 38 |     );
 39 |   }
 40 | }
 41 | 
 42 | /**
 43 |  * Handles the application close-out tool request
 44 |  * @param args The tool arguments
 45 |  * @param suggestedParams The suggested transaction parameters
 46 |  * @returns The transaction parameters
 47 |  * @throws {McpError} If the parameters are invalid
 48 |  */
 49 | export function handleCloseOutTxn(args: Record<string, unknown>, suggestedParams: any): Record<string, any> {
 50 |   try {
 51 |     if (!args.from || !args.appIndex) {
 52 |       console.error('[MCP Error] Invalid application close-out parameters');
 53 |       throw new McpError(ErrorCode.InvalidParams, 'Invalid application close-out parameters');
 54 |     }
 55 | 
 56 |     // Create transaction with proper parameter handling
 57 |     const txnParams: Record<string, any> = {
 58 |       from: String(args.from),
 59 |       appIndex: Number(args.appIndex),
 60 |       fee: suggestedParams.fee,
 61 |       firstRound: suggestedParams.firstRound,
 62 |       lastRound: suggestedParams.lastRound,
 63 |       genesisID: suggestedParams.genesisID,
 64 |       genesisHash: suggestedParams.genesisHash,
 65 |       type: 'appl',
 66 |       onComplete: OnApplicationComplete.CloseOutOC
 67 |     };
 68 | 
 69 |     // Handle optional fields
 70 |     if (typeof args.note === 'string') {
 71 |       const noteBytes = new TextEncoder().encode(args.note);
 72 |       txnParams.note = Buffer.from(noteBytes).toString('base64');
 73 |     }
 74 |     if (typeof args.lease === 'string') {
 75 |       const leaseBytes = new TextEncoder().encode(args.lease);
 76 |       txnParams.lease = Buffer.from(leaseBytes).toString('base64');
 77 |     }
 78 |     if (typeof args.rekeyTo === 'string') {
 79 |       txnParams.rekeyTo = String(args.rekeyTo);
 80 |     }
 81 |     if (Array.isArray(args.appArgs)) {
 82 |       txnParams.appArgs = args.appArgs.map(arg => {
 83 |         const bytes = new TextEncoder().encode(String(arg));
 84 |         return Buffer.from(bytes).toString('base64');
 85 |       });
 86 |     }
 87 |     if (Array.isArray(args.accounts)) {
 88 |       txnParams.accounts = args.accounts.filter((acc): acc is string => typeof acc === 'string');
 89 |     }
 90 |     if (Array.isArray(args.foreignApps)) {
 91 |       txnParams.foreignApps = args.foreignApps.filter((app): app is number => typeof app === 'number');
 92 |     }
 93 |     if (Array.isArray(args.foreignAssets)) {
 94 |       txnParams.foreignAssets = args.foreignAssets.filter((asset): asset is number => typeof asset === 'number');
 95 |     }
 96 | 
 97 |     return txnParams;
 98 |   } catch (error) {
 99 |     if (error instanceof McpError) {
100 |       throw error;
101 |     }
102 |     console.error('[MCP Error] Failed to handle application close-out:', error);
103 |     throw new McpError(
104 |       ErrorCode.InternalError,
105 |       `Failed to handle application close-out: ${error instanceof Error ? error.message : 'Unknown error'}`
106 |     );
107 |   }
108 | }
109 | 
```

--------------------------------------------------------------------------------
/packages/server/src/tools/transactionManager/appTransactions/clearTxn.ts:
--------------------------------------------------------------------------------

```typescript
  1 | import { Transaction, makeApplicationClearStateTxnFromObject, OnApplicationComplete } from 'algosdk';
  2 | import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js';
  3 | import { AppClearStateTxnParams } from './types.js';
  4 | 
  5 | /**
  6 |  * Creates an application clear state transaction
  7 |  * @param params The parameters for clearing application state
  8 |  * @returns The created transaction
  9 |  * @throws {McpError} If the transaction creation fails
 10 |  */
 11 | export function makeApplicationClearStateTxn(params: AppClearStateTxnParams): Transaction {
 12 |   try {
 13 |     // Create a new object with the required structure
 14 |     const txnParams = {
 15 |       from: params.from,
 16 |       appIndex: params.appIndex,
 17 |       suggestedParams: params.suggestedParams,
 18 |       note: params.note,
 19 |       lease: params.lease,
 20 |       rekeyTo: params.rekeyTo,
 21 |       appArgs: params.appArgs,
 22 |       accounts: params.accounts,
 23 |       foreignApps: params.foreignApps,
 24 |       foreignAssets: params.foreignAssets,
 25 |       boxes: params.boxes
 26 |     };
 27 | 
 28 |     // Pass the onComplete parameter separately
 29 |     return makeApplicationClearStateTxnFromObject({
 30 |       ...txnParams,
 31 |       onComplete: OnApplicationComplete.ClearStateOC
 32 |     } as any); // Use type assertion since the types are not perfectly aligned
 33 |   } catch (error) {
 34 |     console.error('[MCP Error] Failed to create application clear state transaction:', error);
 35 |     throw new McpError(
 36 |       ErrorCode.InternalError,
 37 |       `Failed to create application clear state transaction: ${error instanceof Error ? error.message : 'Unknown error'}`
 38 |     );
 39 |   }
 40 | }
 41 | 
 42 | /**
 43 |  * Handles the application clear state tool request
 44 |  * @param args The tool arguments
 45 |  * @param suggestedParams The suggested transaction parameters
 46 |  * @returns The transaction parameters
 47 |  * @throws {McpError} If the parameters are invalid
 48 |  */
 49 | export function handleClearTxn(args: Record<string, unknown>, suggestedParams: any): Record<string, any> {
 50 |   try {
 51 |     if (!args.from || !args.appIndex) {
 52 |       console.error('[MCP Error] Invalid application clear state parameters');
 53 |       throw new McpError(ErrorCode.InvalidParams, 'Invalid application clear state parameters');
 54 |     }
 55 | 
 56 |     // Create transaction with proper parameter handling
 57 |     const txnParams: Record<string, any> = {
 58 |       from: String(args.from),
 59 |       appIndex: Number(args.appIndex),
 60 |       fee: suggestedParams.fee,
 61 |       firstRound: suggestedParams.firstRound,
 62 |       lastRound: suggestedParams.lastRound,
 63 |       genesisID: suggestedParams.genesisID,
 64 |       genesisHash: suggestedParams.genesisHash,
 65 |       type: 'appl',
 66 |       onComplete: OnApplicationComplete.ClearStateOC
 67 |     };
 68 | 
 69 |     // Handle optional fields
 70 |     if (typeof args.note === 'string') {
 71 |       const noteBytes = new TextEncoder().encode(args.note);
 72 |       txnParams.note = Buffer.from(noteBytes).toString('base64');
 73 |     }
 74 |     if (typeof args.lease === 'string') {
 75 |       const leaseBytes = new TextEncoder().encode(args.lease);
 76 |       txnParams.lease = Buffer.from(leaseBytes).toString('base64');
 77 |     }
 78 |     if (typeof args.rekeyTo === 'string') {
 79 |       txnParams.rekeyTo = String(args.rekeyTo);
 80 |     }
 81 |     if (Array.isArray(args.appArgs)) {
 82 |       txnParams.appArgs = args.appArgs.map(arg => {
 83 |         const bytes = new TextEncoder().encode(String(arg));
 84 |         return Buffer.from(bytes).toString('base64');
 85 |       });
 86 |     }
 87 |     if (Array.isArray(args.accounts)) {
 88 |       txnParams.accounts = args.accounts.filter((acc): acc is string => typeof acc === 'string');
 89 |     }
 90 |     if (Array.isArray(args.foreignApps)) {
 91 |       txnParams.foreignApps = args.foreignApps.filter((app): app is number => typeof app === 'number');
 92 |     }
 93 |     if (Array.isArray(args.foreignAssets)) {
 94 |       txnParams.foreignAssets = args.foreignAssets.filter((asset): asset is number => typeof asset === 'number');
 95 |     }
 96 | 
 97 |     return txnParams;
 98 |   } catch (error) {
 99 |     if (error instanceof McpError) {
100 |       throw error;
101 |     }
102 |     console.error('[MCP Error] Failed to handle application clear state:', error);
103 |     throw new McpError(
104 |       ErrorCode.InternalError,
105 |       `Failed to handle application clear state: ${error instanceof Error ? error.message : 'Unknown error'}`
106 |     );
107 |   }
108 | }
109 | 
```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/ARCs:specs:arc-0026.md:
--------------------------------------------------------------------------------

```markdown
  1 | ---
  2 | arc: 26
  3 | title: URI scheme
  4 | description: A specification for encoding Transactions in a URI format.
  5 | author: Fabrice Benhamouda (@fabrice102), Ben Guidarelli (@barnjamin)
  6 | status: Final
  7 | type: Standards Track
  8 | category: Interface
  9 | sub-category: General
 10 | created: 2022-04-21
 11 | extended-by: 78, 79
 12 | ---
 13 | 
 14 | ## Abstract
 15 | 
 16 | This URI specification represents a standardized way for applications and websites to send requests and information through deeplinks, QR codes, etc. It is heavily based on Bitcoin’s <a href="https://github.com/bitcoin/bips/blob/master/bip-0021.mediawiki">BIP-0021</a> and should be seen as derivative of it. The decision to base it on BIP-0021 was made to make it easy and compatible as possible for any other application.
 17 | 
 18 | ## Specification
 19 | 
 20 | ### General format
 21 | 
 22 | Algorand URIs follow the general format for URIs as set forth in <a href="https://www.rfc-editor.org/rfc/rfc3986">RFC 3986</a>. The path component consists of an Algorand address, and the query component provides additional payment options.
 23 | 
 24 | Elements of the query component may contain characters outside the valid range. These must first be encoded according to UTF-8, and then each octet of the corresponding UTF-8 sequence must be percent-encoded as described in RFC 3986.
 25 | 
 26 | ### ABNF Grammar
 27 | 
 28 | ```
 29 | algorandurn     = "algorand://" algorandaddress [ "?" algorandparams ]
 30 | algorandaddress = *base32
 31 | algorandparams  = algorandparam [ "&" algorandparams ]
 32 | algorandparam   = [ amountparam / labelparam / noteparam / assetparam / otherparam ]
 33 | amountparam     = "amount=" *digit
 34 | labelparam      = "label=" *qchar
 35 | assetparam      = "asset=" *digit
 36 | noteparam       = (xnote | note)
 37 | xnote           = "xnote=" *qchar
 38 | note            = "note=" *qchar
 39 | otherparam      = qchar *qchar [ "=" *qchar ]
 40 | ```
 41 | 
 42 | Here, "qchar" corresponds to valid characters of an RFC 3986 URI query component, excluding the "=" and "&" characters, which this specification takes as separators.
 43 | 
 44 | The scheme component ("algorand:") is case-insensitive, and implementations must accept any combination of uppercase and lowercase letters. The rest of the URI is case-sensitive, including the query parameter keys.
 45 | 
 46 | !!! Caveat
 47 |     When it comes to generation of an address' QR,  many exchanges and wallets encodes the address w/o the scheme component (“algorand:”). This is not a URI so it is OK.
 48 | 
 49 | ### Query Keys
 50 | 
 51 | - label: Label for that address (e.g. name of receiver)
 52 | 
 53 | - address: Algorand address
 54 | 
 55 | - xnote: A URL-encoded notes field value that must not be modifiable by the user when displayed to users.
 56 | 
 57 | - note: A URL-encoded default notes field value that the the user interface may optionally make editable by the user.
 58 | 
 59 | - amount: microAlgos or smallest unit of asset
 60 | 
 61 | - asset: The asset id this request refers to (if Algos, simply omit this parameter)
 62 | 
 63 | - (others): optional, for future extensions
 64 | 
 65 | ### Transfer amount/size
 66 | 
 67 | !!! Note
 68 |     This is DIFFERENT than Bitcoin’s BIP-0021
 69 | 
 70 | If an amount is provided, it MUST be specified in basic unit of the asset. For example, if it’s Algos (Algorand native unit), the amount should be specified in microAlgos. All amounts MUST NOT contain commas nor a period (.) Strictly non negative integers.
 71 | 
 72 | e.g. for 100 Algos, the amount needs to be 100000000, for 54.1354 Algos the amount needs to be 54135400.
 73 | 
 74 | Algorand Clients should display the amount in whole Algos. Where needed, microAlgos can be used as well. In any case, the units shall be clear for the user.
 75 | 
 76 | ### Appendix
 77 | 
 78 | This section contains several examples
 79 | 
 80 | address -
 81 | 
 82 | ```
 83 | algorand://TMTAD6N22HCS2LKH7677L2KFLT3PAQWY6M4JFQFXQS32ECBFC23F57RYX4
 84 | ```
 85 | 
 86 | address with label -
 87 | 
 88 | ```
 89 | algorand://TMTAD6N22HCS2LKH7677L2KFLT3PAQWY6M4JFQFXQS32ECBFC23F57RYX4?label=Silvio
 90 | ```
 91 | 
 92 | Request 150.5 Algos from an address
 93 | 
 94 | ```
 95 | algorand://TMTAD6N22HCS2LKH7677L2KFLT3PAQWY6M4JFQFXQS32ECBFC23F57RYX4?amount=150500000
 96 | ```
 97 | 
 98 | Request 150 units of Asset ID 45 from an address
 99 | 
100 | ```
101 | algorand://TMTAD6N22HCS2LKH7677L2KFLT3PAQWY6M4JFQFXQS32ECBFC23F57RYX4?amount=150&asset=45
102 | ```
103 | 
104 | ## Rationale
105 | 
106 | ## Security Considerations
107 | 
108 | None.
109 | 
110 | ## Copyright
111 | 
112 | Copyright and related rights waived via <a href="https://creativecommons.org/publicdomain/zero/1.0/">CCO</a>.
113 | 
```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/ARCs:ARC-template.md:
--------------------------------------------------------------------------------

```markdown
 1 | ---
 2 | arc: <to be assigned>
 3 | title: <The ARC title is a few words, not a complete sentence>
 4 | description: <Description is one full (short) sentence>
 5 | author: <a comma separated list of the author's or authors' name + GitHub username (in parenthesis), or name and email (in angle brackets).  Example, FirstName LastName (@GitHubUsername), FirstName LastName <[email protected]>, FirstName (@GitHubUsername) and GitHubUsername (@GitHubUsername)>
 6 | discussions-to: <URL>
 7 | status: Draft
 8 | type: <Standards Track, Meta, or Informational>
 9 | category (*only required for Standards Track): <Interface, or ARC>
10 | subcategory: <General, Asa, Application, Explorer or Wallet>
11 | created: <date created on, in ISO 8601 (yyyy-mm-dd) format>
12 | requires (*optional): <ARC number(s)>
13 | ---
14 | 
15 | This is the suggested template for new ARCs.
16 | 
17 | Note that an ARC number will be assigned by an editor. When opening a pull request to submit your ARC, please use an abbreviated title in the filename, `arc-draft_title_abbrev.md`.
18 | 
19 | The title should be 44 characters or less. It should not repeat the ARC number in title, irrespective of the category.
20 | 
21 | ## Abstract
22 | Abstract is a multi-sentence (short paragraph) technical summary. This should be a very terse and human-readable version of the specification section. Someone should be able to read only the abstract to get the gist of what this specification does.
23 | 
24 | ## Motivation
25 | The motivation section should describe the "why" of this ARC. What problem does it solve? Why should someone want to implement this standard? What benefit does it provide to the Algorand ecosystem? What use cases does this ARC address?
26 | 
27 | ## Specification
28 | The key words "**MUST**", "**MUST NOT**", "**REQUIRED**", "**SHALL**", "**SHALL NOT**", "**SHOULD**", "**SHOULD NOT**", "**RECOMMENDED**", "**MAY**", and "**OPTIONAL**" in this document are to be interpreted as described in <a href="https://www.ietf.org/rfc/rfc2119.txt">RFC-2119</a>.
29 | 
30 | The technical specification should describe the syntax and semantics of any new feature. The specification should be detailed enough to allow competing, interoperable implementations for any of the current Algorand platforms (go-algorand, ...).
31 | 
32 | ## Rationale
33 | The rationale fleshes out the specification by describing what motivated the design and why particular design decisions were made. It should describe alternate designs that were considered and related work, e.g. how the feature is supported in other languages.
34 | 
35 | ## Backwards Compatibility
36 | All ARCs that introduce backwards incompatibilities must include a section describing these incompatibilities and their severity. The ARC must explain how the author proposes to deal with these incompatibilities. ARC submissions without a sufficient backwards compatibility treatise may be rejected outright.
37 | 
38 | ## Test Cases
39 | Test cases for an implementation are mandatory for ARCs that are affecting consensus changes.  If the test suite is too large to reasonably be included inline, then consider adding it as one or more files in `../assets/arc-####/`.
40 | 
41 | ## Reference Implementation
42 | An optional section that contains a reference/example implementation that people can use to assist in understanding or implementing this specification.  If the implementation is too large to reasonably be included inline, then consider adding it as one or more files in `../assets/arc-####/`.
43 | 
44 | ## Security Considerations
45 | All ARCs must contain a section that discusses the security implications/considerations relevant to the proposed change. Include information that might be important for security discussions, surfaces risks and can be used throughout the life cycle of the proposal. E.g. include security-relevant design decisions, concerns, important discussions, implementation-specific guidance and pitfalls, an outline of threats and risks and how they are being addressed. ARC submissions missing the "Security Considerations" section will be rejected. An ARC cannot proceed to status "Final" without a Security Considerations discussion deemed sufficient by the reviewers.
46 | 
47 | ## Copyright
48 | Copyright and related rights waived via <a href="https://creativecommons.org/publicdomain/zero/1.0/">CCO</a>.
49 | 
```

--------------------------------------------------------------------------------
/packages/server/src/tools/transactionManager/appTransactions/updateTxn.ts:
--------------------------------------------------------------------------------

```typescript
  1 | import { Transaction, makeApplicationUpdateTxnFromObject, OnApplicationComplete } from 'algosdk';
  2 | import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js';
  3 | import { AppUpdateTxnParams } from './types.js';
  4 | 
  5 | /**
  6 |  * Creates an application update transaction
  7 |  * @param params The parameters for updating the application
  8 |  * @returns The created transaction
  9 |  * @throws {McpError} If the transaction creation fails
 10 |  */
 11 | export function makeApplicationUpdateTxn(params: AppUpdateTxnParams): Transaction {
 12 |   try {
 13 |     // Create a new object with the required structure
 14 |     const txnParams = {
 15 |       from: params.from,
 16 |       appIndex: params.appIndex,
 17 |       approvalProgram: params.approvalProgram,
 18 |       clearProgram: params.clearProgram,
 19 |       suggestedParams: params.suggestedParams,
 20 |       note: params.note,
 21 |       lease: params.lease,
 22 |       rekeyTo: params.rekeyTo,
 23 |       appArgs: params.appArgs,
 24 |       accounts: params.accounts,
 25 |       foreignApps: params.foreignApps,
 26 |       foreignAssets: params.foreignAssets,
 27 |       boxes: params.boxes,
 28 |       onComplete: 4
 29 |     };
 30 | 
 31 |     return makeApplicationUpdateTxnFromObject(txnParams);
 32 |   } catch (error) {
 33 |     console.error('[MCP Error] Failed to create application update transaction:', error);
 34 |     throw new McpError(
 35 |       ErrorCode.InternalError,
 36 |       `Failed to create application update transaction: ${error instanceof Error ? error.message : 'Unknown error'}`
 37 |     );
 38 |   }
 39 | }
 40 | 
 41 | /**
 42 |  * Handles the application update tool request
 43 |  * @param args The tool arguments
 44 |  * @param suggestedParams The suggested transaction parameters
 45 |  * @returns The transaction parameters
 46 |  * @throws {McpError} If the parameters are invalid
 47 |  */
 48 | export function handleUpdateTxn(args: Record<string, unknown>, suggestedParams: any): Record<string, any> {
 49 |   try {
 50 |     if (!args.from || !args.appIndex || !args.approvalProgram || !args.clearProgram) {
 51 |       console.error('[MCP Error] Invalid application update parameters');
 52 |       throw new McpError(ErrorCode.InvalidParams, 'Invalid application update parameters');
 53 |     }
 54 | 
 55 |     // Create transaction with proper parameter handling
 56 |     const txnParams: Record<string, any> = {
 57 |       from: String(args.from),
 58 |       appIndex: Number(args.appIndex),
 59 |       fee: suggestedParams.fee,
 60 |       firstRound: suggestedParams.firstRound,
 61 |       lastRound: suggestedParams.lastRound,
 62 |       genesisID: suggestedParams.genesisID,
 63 |       genesisHash: suggestedParams.genesisHash,
 64 |       type: 'appl',
 65 |       onComplete: 4,
 66 |       // Programs are already base64 encoded
 67 |       approvalProgram: args.approvalProgram as string,
 68 |       clearProgram: args.clearProgram as string
 69 |     };
 70 | 
 71 |     // Handle optional fields
 72 |     if (typeof args.note === 'string') {
 73 |       const noteBytes = new TextEncoder().encode(args.note);
 74 |       txnParams.note = Buffer.from(noteBytes).toString('base64');
 75 |     }
 76 |     if (typeof args.lease === 'string') {
 77 |       const leaseBytes = new TextEncoder().encode(args.lease);
 78 |       txnParams.lease = Buffer.from(leaseBytes).toString('base64');
 79 |     }
 80 |     if (typeof args.rekeyTo === 'string') {
 81 |       txnParams.rekeyTo = String(args.rekeyTo);
 82 |     }
 83 |     if (Array.isArray(args.appArgs)) {
 84 |       txnParams.appArgs = args.appArgs.map(arg => {
 85 |         const bytes = new TextEncoder().encode(String(arg));
 86 |         return Buffer.from(bytes).toString('base64');
 87 |       });
 88 |     }
 89 |     if (Array.isArray(args.accounts)) {
 90 |       txnParams.accounts = args.accounts.filter((acc): acc is string => typeof acc === 'string');
 91 |     }
 92 |     if (Array.isArray(args.foreignApps)) {
 93 |       txnParams.foreignApps = args.foreignApps.filter((app): app is number => typeof app === 'number');
 94 |     }
 95 |     if (Array.isArray(args.foreignAssets)) {
 96 |       txnParams.foreignAssets = args.foreignAssets.filter((asset): asset is number => typeof asset === 'number');
 97 |     }
 98 | 
 99 |     return txnParams;
100 |   } catch (error) {
101 |     if (error instanceof McpError) {
102 |       throw error;
103 |     }
104 |     console.error('[MCP Error] Failed to handle application update:', error);
105 |     throw new McpError(
106 |       ErrorCode.InternalError,
107 |       `Failed to handle application update: ${error instanceof Error ? error.message : 'Unknown error'}`
108 |     );
109 |   }
110 | }
111 | 
```
Page 16/93FirstPrevNextLast