@algorandfoundation/algokit-utils 7.0.0-beta.6 → 7.0.0-beta.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app.d.ts +6 -6
- package/app.js +6 -6
- package/app.js.map +1 -1
- package/app.mjs +6 -6
- package/app.mjs.map +1 -1
- package/asset.d.ts +3 -3
- package/asset.js +3 -3
- package/asset.js.map +1 -1
- package/asset.mjs +3 -3
- package/asset.mjs.map +1 -1
- package/package.json +1 -1
- package/testing/fixtures/algorand-fixture.js +1 -1
- package/testing/fixtures/algorand-fixture.js.map +1 -1
- package/testing/fixtures/algorand-fixture.mjs +1 -1
- package/testing/fixtures/algorand-fixture.mjs.map +1 -1
- package/transaction/legacy-bridge.d.ts +3 -3
- package/transaction/legacy-bridge.js.map +1 -1
- package/transaction/legacy-bridge.mjs.map +1 -1
- package/transaction/transaction.d.ts +1 -3
- package/transaction/transaction.js +17 -11
- package/transaction/transaction.js.map +1 -1
- package/transaction/transaction.mjs +17 -11
- package/transaction/transaction.mjs.map +1 -1
- package/transfer/transfer-algos.d.ts +1 -1
- package/transfer/transfer-algos.js +1 -1
- package/transfer/transfer-algos.js.map +1 -1
- package/transfer/transfer-algos.mjs +1 -1
- package/transfer/transfer-algos.mjs.map +1 -1
- package/transfer/transfer.d.ts +1 -1
- package/transfer/transfer.js +1 -1
- package/transfer/transfer.js.map +1 -1
- package/transfer/transfer.mjs +1 -1
- package/transfer/transfer.mjs.map +1 -1
- package/types/account-manager.d.ts +13 -4
- package/types/account-manager.js +17 -3
- package/types/account-manager.js.map +1 -1
- package/types/account-manager.mjs +17 -3
- package/types/account-manager.mjs.map +1 -1
- package/types/algorand-client-interface.d.ts +1 -1
- package/types/algorand-client-transaction-creator.d.ts +30 -30
- package/types/algorand-client-transaction-creator.js +30 -30
- package/types/algorand-client-transaction-creator.js.map +1 -1
- package/types/algorand-client-transaction-creator.mjs +30 -30
- package/types/algorand-client-transaction-creator.mjs.map +1 -1
- package/types/algorand-client-transaction-sender.d.ts +18 -18
- package/types/algorand-client-transaction-sender.js +1 -1
- package/types/algorand-client-transaction-sender.js.map +1 -1
- package/types/algorand-client-transaction-sender.mjs +1 -1
- package/types/algorand-client-transaction-sender.mjs.map +1 -1
- package/types/algorand-client.d.ts +8 -8
- package/types/algorand-client.js +8 -8
- package/types/algorand-client.js.map +1 -1
- package/types/algorand-client.mjs +8 -8
- package/types/algorand-client.mjs.map +1 -1
- package/types/app-arc56.d.ts +60 -37
- package/types/app-arc56.js +37 -16
- package/types/app-arc56.js.map +1 -1
- package/types/app-arc56.mjs +37 -16
- package/types/app-arc56.mjs.map +1 -1
- package/types/app-client.d.ts +101 -78
- package/types/app-client.js +145 -84
- package/types/app-client.js.map +1 -1
- package/types/app-client.mjs +145 -84
- package/types/app-client.mjs.map +1 -1
- package/types/app-deployer.d.ts +2 -2
- package/types/app-deployer.js +24 -24
- package/types/app-deployer.js.map +1 -1
- package/types/app-deployer.mjs +24 -24
- package/types/app-deployer.mjs.map +1 -1
- package/types/app-factory.d.ts +141 -86
- package/types/app-factory.js +106 -34
- package/types/app-factory.js.map +1 -1
- package/types/app-factory.mjs +107 -35
- package/types/app-factory.mjs.map +1 -1
- package/types/app-spec.js +15 -9
- package/types/app-spec.js.map +1 -1
- package/types/app-spec.mjs +15 -9
- package/types/app-spec.mjs.map +1 -1
- package/types/asset-manager.d.ts +3 -3
- package/types/asset-manager.js +2 -2
- package/types/asset-manager.js.map +1 -1
- package/types/asset-manager.mjs +2 -2
- package/types/asset-manager.mjs.map +1 -1
- package/types/client-manager.d.ts +30 -8
- package/types/client-manager.js +6 -0
- package/types/client-manager.js.map +1 -1
- package/types/client-manager.mjs +6 -0
- package/types/client-manager.mjs.map +1 -1
- package/types/composer.d.ts +29 -4
- package/types/composer.js +24 -7
- package/types/composer.js.map +1 -1
- package/types/composer.mjs +24 -7
- package/types/composer.mjs.map +1 -1
- package/types/kmd-account-manager.js +1 -1
- package/types/kmd-account-manager.js.map +1 -1
- package/types/kmd-account-manager.mjs +1 -1
- package/types/kmd-account-manager.mjs.map +1 -1
- package/types/transaction.d.ts +4 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"algorand-client.js","sources":["../../src/types/algorand-client.ts"],"sourcesContent":["import algosdk from 'algosdk'\nimport { MultisigAccount, SigningAccount, TransactionSignerAccount } from './account'\nimport { AccountManager } from './account-manager'\nimport { AlgorandClientInterface } from './algorand-client-interface'\nimport { AlgorandClientTransactionCreator } from './algorand-client-transaction-creator'\nimport { AlgorandClientTransactionSender } from './algorand-client-transaction-sender'\nimport { AppDeployer } from './app-deployer'\nimport { AppManager } from './app-manager'\nimport { AssetManager } from './asset-manager'\nimport { AlgoSdkClients, ClientManager } from './client-manager'\nimport AlgoKitComposer from './composer'\nimport { AlgoConfig } from './network-client'\nimport Account = algosdk.Account\nimport LogicSigAccount = algosdk.LogicSigAccount\n\n/**\n * A client that brokers easy access to Algorand functionality.\n */\nexport class AlgorandClient implements AlgorandClientInterface {\n private _clientManager: ClientManager\n private _accountManager: AccountManager\n private _appManager: AppManager\n private _appDeployer: AppDeployer\n private _assetManager: AssetManager\n private _transactionSender: AlgorandClientTransactionSender\n private _transactionCreator: AlgorandClientTransactionCreator\n\n private _cachedSuggestedParams?: algosdk.SuggestedParams\n private _cachedSuggestedParamsExpiry?: Date\n private _cachedSuggestedParamsTimeout: number = 3_000 // three seconds\n\n private _defaultValidityWindow: number | undefined = undefined\n\n private constructor(config: AlgoConfig | AlgoSdkClients) {\n this._clientManager = new ClientManager(config, this)\n this._accountManager = new AccountManager(this._clientManager)\n this._appManager = new AppManager(this._clientManager.algod)\n this._assetManager = new AssetManager(this._clientManager.algod, () => this.newGroup())\n this._transactionSender = new AlgorandClientTransactionSender(() => this.newGroup(), this._assetManager, this._appManager)\n this._transactionCreator = new AlgorandClientTransactionCreator(() => this.newGroup())\n this._appDeployer = new AppDeployer(this._appManager, this._transactionSender, this._clientManager.indexerIfPresent)\n }\n\n /**\n * Sets the default validity window for transactions.\n * @param validityWindow The number of rounds between the first and last valid rounds\n * @returns The `AlgorandClient` so method calls can be chained\n */\n public setDefaultValidityWindow(validityWindow: number) {\n this._defaultValidityWindow = validityWindow\n return this\n }\n\n /**\n * Sets the default signer to use if no other signer is specified.\n * @param signer The signer to use, either a `TransactionSigner` or a `TransactionSignerAccount`\n * @returns The `AlgorandClient` so method calls can be chained\n */\n public setDefaultSigner(signer: algosdk.TransactionSigner | TransactionSignerAccount): AlgorandClient {\n this._accountManager.setDefaultSigner(signer)\n return this\n }\n\n /**\n * Tracks the given account for later signing.\n * @param account The account to register, which can be a `TransactionSignerAccount` or\n * a `algosdk.Account`, `algosdk.LogicSigAccount`, `SigningAccount` or `MultisigAccount`\n * @example\n * ```typescript\n * const accountManager = AlgorandClient.mainnet()\n * .setSignerFromAccount(algosdk.generateAccount())\n * .setSignerFromAccount(new algosdk.LogicSigAccount(program, args))\n * .setSignerFromAccount(new SigningAccount(mnemonic, sender))\n * .setSignerFromAccount(new MultisigAccount({version: 1, threshold: 1, addrs: [\"ADDRESS1...\", \"ADDRESS2...\"]}, [account1, account2]))\n * .setSignerFromAccount({addr: \"SENDERADDRESS\", signer: transactionSigner})\n * ```\n * @returns The `AlgorandClient` so method calls can be chained\n */\n public setSignerFromAccount(\n account: TransactionSignerAccount | TransactionSignerAccount | Account | LogicSigAccount | SigningAccount | MultisigAccount,\n ) {\n this._accountManager.setSignerFromAccount(account)\n return this\n }\n\n /**\n * Tracks the given account for later signing.\n * @param sender The sender address to use this signer for\n * @param signer The signer to sign transactions with for the given sender\n * @returns The `AlgorandClient` so method calls can be chained\n */\n public setSigner(sender: string, signer: algosdk.TransactionSigner) {\n this._accountManager.setSigner(sender, signer)\n return this\n }\n\n /**\n * Sets a cache value to use for suggested params.\n * @param suggestedParams The suggested params to use\n * @param until A date until which to cache, or if not specified then the timeout is used\n * @returns The `AlgorandClient` so method calls can be chained\n */\n public setSuggestedParams(suggestedParams: algosdk.SuggestedParams, until?: Date) {\n this._cachedSuggestedParams = suggestedParams\n this._cachedSuggestedParamsExpiry = until ?? new Date(+new Date() + this._cachedSuggestedParamsTimeout)\n return this\n }\n\n /**\n * Sets the timeout for caching suggested params.\n * @param timeout The timeout in milliseconds\n * @returns The `AlgorandClient` so method calls can be chained\n */\n public setSuggestedParamsTimeout(timeout: number) {\n this._cachedSuggestedParamsTimeout = timeout\n return this\n }\n\n /** Get suggested params for a transaction (either cached or from algod if the cache is stale or empty) */\n public async getSuggestedParams(): Promise<algosdk.SuggestedParams> {\n if (this._cachedSuggestedParams && (!this._cachedSuggestedParamsExpiry || this._cachedSuggestedParamsExpiry > new Date())) {\n return {\n ...this._cachedSuggestedParams,\n }\n }\n\n this._cachedSuggestedParams = await this._clientManager.algod.getTransactionParams().do()\n this._cachedSuggestedParamsExpiry = new Date(new Date().getTime() + this._cachedSuggestedParamsTimeout)\n\n return {\n ...this._cachedSuggestedParams,\n }\n }\n\n /** Get clients, including algosdk clients and app clients. */\n public get client() {\n return this._clientManager\n }\n\n /** Get or create accounts that can sign transactions. */\n public get account() {\n return this._accountManager\n }\n\n /** Methods for interacting with assets. */\n public get asset() {\n return this._assetManager\n }\n\n /** Methods for interacting with apps. */\n public get app() {\n return this._appManager\n }\n\n /** Methods for deploying apps and managing app deployment metadata. */\n public get appDeployer() {\n return this._appDeployer\n }\n\n /** Start a new `AlgoKitComposer` transaction group */\n public newGroup() {\n return new AlgoKitComposer({\n algod: this.client.algod,\n getSigner: (addr: string) => this.account.getSigner(addr),\n getSuggestedParams: () => this.getSuggestedParams(),\n defaultValidityWindow: this._defaultValidityWindow,\n appManager: this._appManager,\n })\n }\n\n /**\n * Methods for sending a single transaction.\n */\n public get send() {\n return this._transactionSender\n }\n\n /**\n * Methods for building transactions\n */\n public get transactions() {\n return this._transactionCreator\n }\n\n // Static methods to create an `AlgorandClient`\n\n /**\n * Returns an `AlgorandClient` pointing at default LocalNet ports and API token.\n * @returns The `AlgorandClient`\n */\n public static defaultLocalNet() {\n return new AlgorandClient({\n algodConfig: ClientManager.getDefaultLocalNetConfig('algod'),\n indexerConfig: ClientManager.getDefaultLocalNetConfig('indexer'),\n kmdConfig: ClientManager.getDefaultLocalNetConfig('kmd'),\n })\n }\n\n /**\n * Returns an `AlgorandClient` pointing at TestNet using AlgoNode.\n * @returns The `AlgorandClient`\n */\n public static testNet() {\n return new AlgorandClient({\n algodConfig: ClientManager.getAlgoNodeConfig('testnet', 'algod'),\n indexerConfig: ClientManager.getAlgoNodeConfig('testnet', 'indexer'),\n kmdConfig: undefined,\n })\n }\n\n /**\n * Returns an `AlgorandClient` pointing at MainNet using AlgoNode.\n * @returns The `AlgorandClient`\n */\n public static mainNet() {\n return new AlgorandClient({\n algodConfig: ClientManager.getAlgoNodeConfig('mainnet', 'algod'),\n indexerConfig: ClientManager.getAlgoNodeConfig('mainnet', 'indexer'),\n kmdConfig: undefined,\n })\n }\n\n /**\n * Returns an `AlgorandClient` pointing to the given client(s).\n * @param clients The clients to use\n * @returns The `AlgorandClient`\n */\n public static fromClients(clients: AlgoSdkClients) {\n return new AlgorandClient(clients)\n }\n\n /**\n * Returns an `AlgorandClient` loading the configuration from environment variables.\n *\n * Retrieve configurations from environment variables when defined or get default LocalNet configuration if they aren't defined.\n *\n * Expects to be called from a Node.js environment.\n *\n * If `process.env.ALGOD_SERVER` is defined it will use that along with optional `process.env.ALGOD_PORT` and `process.env.ALGOD_TOKEN`.\n *\n * If `process.env.INDEXER_SERVER` is defined it will use that along with optional `process.env.INDEXER_PORT` and `process.env.INDEXER_TOKEN`.\n *\n * If either aren't defined it will use the default LocalNet config.\n *\n * It will return a KMD configuration that uses `process.env.KMD_PORT` (or port 4002) if `process.env.ALGOD_SERVER` is defined,\n * otherwise it will use the default LocalNet config unless it detects testnet or mainnet.\n * @returns The `AlgorandClient`\n */\n public static fromEnvironment() {\n return new AlgorandClient(ClientManager.getConfigFromEnvironmentOrLocalNet())\n }\n\n /**\n * Returns an `AlgorandClient` from the given config.\n * @param config The config to use\n * @returns The `AlgorandClient`\n */\n public static fromConfig(config: AlgoConfig) {\n return new AlgorandClient(config)\n }\n}\n\nexport default AlgorandClient\n"],"names":["ClientManager","AccountManager","AppManager","AssetManager","AlgorandClientTransactionSender","AlgorandClientTransactionCreator","AppDeployer","AlgoKitComposer"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"algorand-client.js","sources":["../../src/types/algorand-client.ts"],"sourcesContent":["import algosdk from 'algosdk'\nimport { MultisigAccount, SigningAccount, TransactionSignerAccount } from './account'\nimport { AccountManager } from './account-manager'\nimport { AlgorandClientInterface } from './algorand-client-interface'\nimport { AlgorandClientTransactionCreator } from './algorand-client-transaction-creator'\nimport { AlgorandClientTransactionSender } from './algorand-client-transaction-sender'\nimport { AppDeployer } from './app-deployer'\nimport { AppManager } from './app-manager'\nimport { AssetManager } from './asset-manager'\nimport { AlgoSdkClients, ClientManager } from './client-manager'\nimport AlgoKitComposer from './composer'\nimport { AlgoConfig } from './network-client'\nimport Account = algosdk.Account\nimport LogicSigAccount = algosdk.LogicSigAccount\n\n/**\n * A client that brokers easy access to Algorand functionality.\n */\nexport class AlgorandClient implements AlgorandClientInterface {\n private _clientManager: ClientManager\n private _accountManager: AccountManager\n private _appManager: AppManager\n private _appDeployer: AppDeployer\n private _assetManager: AssetManager\n private _transactionSender: AlgorandClientTransactionSender\n private _transactionCreator: AlgorandClientTransactionCreator\n\n private _cachedSuggestedParams?: algosdk.SuggestedParams\n private _cachedSuggestedParamsExpiry?: Date\n private _cachedSuggestedParamsTimeout: number = 3_000 // three seconds\n\n private _defaultValidityWindow: number | undefined = undefined\n\n private constructor(config: AlgoConfig | AlgoSdkClients) {\n this._clientManager = new ClientManager(config, this)\n this._accountManager = new AccountManager(this._clientManager)\n this._appManager = new AppManager(this._clientManager.algod)\n this._assetManager = new AssetManager(this._clientManager.algod, () => this.newGroup())\n this._transactionSender = new AlgorandClientTransactionSender(() => this.newGroup(), this._assetManager, this._appManager)\n this._transactionCreator = new AlgorandClientTransactionCreator(() => this.newGroup())\n this._appDeployer = new AppDeployer(this._appManager, this._transactionSender, this._clientManager.indexerIfPresent)\n }\n\n /**\n * Sets the default validity window for transactions.\n * @param validityWindow The number of rounds between the first and last valid rounds\n * @returns The `AlgorandClient` so method calls can be chained\n */\n public setDefaultValidityWindow(validityWindow: number) {\n this._defaultValidityWindow = validityWindow\n return this\n }\n\n /**\n * Sets the default signer to use if no other signer is specified.\n * @param signer The signer to use, either a `TransactionSigner` or a `TransactionSignerAccount`\n * @returns The `AlgorandClient` so method calls can be chained\n */\n public setDefaultSigner(signer: algosdk.TransactionSigner | TransactionSignerAccount): AlgorandClient {\n this._accountManager.setDefaultSigner(signer)\n return this\n }\n\n /**\n * Tracks the given account (object that encapsulates an address and a signer) for later signing.\n * @param account The account to register, which can be a `TransactionSignerAccount` or\n * a `algosdk.Account`, `algosdk.LogicSigAccount`, `SigningAccount` or `MultisigAccount`\n * @example\n * ```typescript\n * const accountManager = AlgorandClient.mainnet()\n * .setSignerFromAccount(algosdk.generateAccount())\n * .setSignerFromAccount(new algosdk.LogicSigAccount(program, args))\n * .setSignerFromAccount(new SigningAccount(mnemonic, sender))\n * .setSignerFromAccount(new MultisigAccount({version: 1, threshold: 1, addrs: [\"ADDRESS1...\", \"ADDRESS2...\"]}, [account1, account2]))\n * .setSignerFromAccount({addr: \"SENDERADDRESS\", signer: transactionSigner})\n * ```\n * @returns The `AlgorandClient` so method calls can be chained\n */\n public setSignerFromAccount(\n account: TransactionSignerAccount | TransactionSignerAccount | Account | LogicSigAccount | SigningAccount | MultisigAccount,\n ) {\n this._accountManager.setSignerFromAccount(account)\n return this\n }\n\n /**\n * Tracks the given signer against the given sender for later signing.\n * @param sender The sender address to use this signer for\n * @param signer The signer to sign transactions with for the given sender\n * @returns The `AlgorandClient` so method calls can be chained\n */\n public setSigner(sender: string, signer: algosdk.TransactionSigner) {\n this._accountManager.setSigner(sender, signer)\n return this\n }\n\n /**\n * Sets a cache value to use for suggested transaction params.\n * @param suggestedParams The suggested params to use\n * @param until A date until which to cache, or if not specified then the timeout is used\n * @returns The `AlgorandClient` so method calls can be chained\n */\n public setSuggestedParamsCache(suggestedParams: algosdk.SuggestedParams, until?: Date) {\n this._cachedSuggestedParams = suggestedParams\n this._cachedSuggestedParamsExpiry = until ?? new Date(+new Date() + this._cachedSuggestedParamsTimeout)\n return this\n }\n\n /**\n * Sets the timeout for caching suggested params.\n * @param timeout The timeout in milliseconds\n * @returns The `AlgorandClient` so method calls can be chained\n */\n public setSuggestedParamsCacheTimeout(timeout: number) {\n this._cachedSuggestedParamsTimeout = timeout\n return this\n }\n\n /** Get suggested params for a transaction (either cached or from algod if the cache is stale or empty) */\n public async getSuggestedParams(): Promise<algosdk.SuggestedParams> {\n if (this._cachedSuggestedParams && (!this._cachedSuggestedParamsExpiry || this._cachedSuggestedParamsExpiry > new Date())) {\n return {\n ...this._cachedSuggestedParams,\n }\n }\n\n this._cachedSuggestedParams = await this._clientManager.algod.getTransactionParams().do()\n this._cachedSuggestedParamsExpiry = new Date(new Date().getTime() + this._cachedSuggestedParamsTimeout)\n\n return {\n ...this._cachedSuggestedParams,\n }\n }\n\n /** Get clients, including algosdk clients and app clients. */\n public get client() {\n return this._clientManager\n }\n\n /** Get or create accounts that can sign transactions. */\n public get account() {\n return this._accountManager\n }\n\n /** Methods for interacting with assets. */\n public get asset() {\n return this._assetManager\n }\n\n /** Methods for interacting with apps. */\n public get app() {\n return this._appManager\n }\n\n /** Methods for deploying apps and managing app deployment metadata. */\n public get appDeployer() {\n return this._appDeployer\n }\n\n /** Start a new `AlgoKitComposer` transaction group */\n public newGroup() {\n return new AlgoKitComposer({\n algod: this.client.algod,\n getSigner: (addr: string) => this.account.getSigner(addr),\n getSuggestedParams: () => this.getSuggestedParams(),\n defaultValidityWindow: this._defaultValidityWindow,\n appManager: this._appManager,\n })\n }\n\n /**\n * Methods for sending a transaction.\n */\n public get send() {\n return this._transactionSender\n }\n\n /**\n * Methods for creating a transaction.\n */\n public get createTransaction() {\n return this._transactionCreator\n }\n\n // Static methods to create an `AlgorandClient`\n\n /**\n * Returns an `AlgorandClient` pointing at default LocalNet ports and API token.\n * @returns The `AlgorandClient`\n */\n public static defaultLocalNet() {\n return new AlgorandClient({\n algodConfig: ClientManager.getDefaultLocalNetConfig('algod'),\n indexerConfig: ClientManager.getDefaultLocalNetConfig('indexer'),\n kmdConfig: ClientManager.getDefaultLocalNetConfig('kmd'),\n })\n }\n\n /**\n * Returns an `AlgorandClient` pointing at TestNet using AlgoNode.\n * @returns The `AlgorandClient`\n */\n public static testNet() {\n return new AlgorandClient({\n algodConfig: ClientManager.getAlgoNodeConfig('testnet', 'algod'),\n indexerConfig: ClientManager.getAlgoNodeConfig('testnet', 'indexer'),\n kmdConfig: undefined,\n })\n }\n\n /**\n * Returns an `AlgorandClient` pointing at MainNet using AlgoNode.\n * @returns The `AlgorandClient`\n */\n public static mainNet() {\n return new AlgorandClient({\n algodConfig: ClientManager.getAlgoNodeConfig('mainnet', 'algod'),\n indexerConfig: ClientManager.getAlgoNodeConfig('mainnet', 'indexer'),\n kmdConfig: undefined,\n })\n }\n\n /**\n * Returns an `AlgorandClient` pointing to the given client(s).\n * @param clients The clients to use\n * @returns The `AlgorandClient`\n */\n public static fromClients(clients: AlgoSdkClients) {\n return new AlgorandClient(clients)\n }\n\n /**\n * Returns an `AlgorandClient` loading the configuration from environment variables.\n *\n * Retrieve configurations from environment variables when defined or get default LocalNet configuration if they aren't defined.\n *\n * Expects to be called from a Node.js environment.\n *\n * If `process.env.ALGOD_SERVER` is defined it will use that along with optional `process.env.ALGOD_PORT` and `process.env.ALGOD_TOKEN`.\n *\n * If `process.env.INDEXER_SERVER` is defined it will use that along with optional `process.env.INDEXER_PORT` and `process.env.INDEXER_TOKEN`.\n *\n * If either aren't defined it will use the default LocalNet config.\n *\n * It will return a KMD configuration that uses `process.env.KMD_PORT` (or port 4002) if `process.env.ALGOD_SERVER` is defined,\n * otherwise it will use the default LocalNet config unless it detects testnet or mainnet.\n * @returns The `AlgorandClient`\n */\n public static fromEnvironment() {\n return new AlgorandClient(ClientManager.getConfigFromEnvironmentOrLocalNet())\n }\n\n /**\n * Returns an `AlgorandClient` from the given config.\n * @param config The config to use\n * @returns The `AlgorandClient`\n */\n public static fromConfig(config: AlgoConfig) {\n return new AlgorandClient(config)\n }\n}\n\nexport default AlgorandClient\n"],"names":["ClientManager","AccountManager","AppManager","AssetManager","AlgorandClientTransactionSender","AlgorandClientTransactionCreator","AppDeployer","AlgoKitComposer"],"mappings":"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"}
|
|
@@ -41,7 +41,7 @@ class AlgorandClient {
|
|
|
41
41
|
return this;
|
|
42
42
|
}
|
|
43
43
|
/**
|
|
44
|
-
* Tracks the given account for later signing.
|
|
44
|
+
* Tracks the given account (object that encapsulates an address and a signer) for later signing.
|
|
45
45
|
* @param account The account to register, which can be a `TransactionSignerAccount` or
|
|
46
46
|
* a `algosdk.Account`, `algosdk.LogicSigAccount`, `SigningAccount` or `MultisigAccount`
|
|
47
47
|
* @example
|
|
@@ -60,7 +60,7 @@ class AlgorandClient {
|
|
|
60
60
|
return this;
|
|
61
61
|
}
|
|
62
62
|
/**
|
|
63
|
-
* Tracks the given
|
|
63
|
+
* Tracks the given signer against the given sender for later signing.
|
|
64
64
|
* @param sender The sender address to use this signer for
|
|
65
65
|
* @param signer The signer to sign transactions with for the given sender
|
|
66
66
|
* @returns The `AlgorandClient` so method calls can be chained
|
|
@@ -70,12 +70,12 @@ class AlgorandClient {
|
|
|
70
70
|
return this;
|
|
71
71
|
}
|
|
72
72
|
/**
|
|
73
|
-
* Sets a cache value to use for suggested params.
|
|
73
|
+
* Sets a cache value to use for suggested transaction params.
|
|
74
74
|
* @param suggestedParams The suggested params to use
|
|
75
75
|
* @param until A date until which to cache, or if not specified then the timeout is used
|
|
76
76
|
* @returns The `AlgorandClient` so method calls can be chained
|
|
77
77
|
*/
|
|
78
|
-
|
|
78
|
+
setSuggestedParamsCache(suggestedParams, until) {
|
|
79
79
|
this._cachedSuggestedParams = suggestedParams;
|
|
80
80
|
this._cachedSuggestedParamsExpiry = until ?? new Date(+new Date() + this._cachedSuggestedParamsTimeout);
|
|
81
81
|
return this;
|
|
@@ -85,7 +85,7 @@ class AlgorandClient {
|
|
|
85
85
|
* @param timeout The timeout in milliseconds
|
|
86
86
|
* @returns The `AlgorandClient` so method calls can be chained
|
|
87
87
|
*/
|
|
88
|
-
|
|
88
|
+
setSuggestedParamsCacheTimeout(timeout) {
|
|
89
89
|
this._cachedSuggestedParamsTimeout = timeout;
|
|
90
90
|
return this;
|
|
91
91
|
}
|
|
@@ -133,15 +133,15 @@ class AlgorandClient {
|
|
|
133
133
|
});
|
|
134
134
|
}
|
|
135
135
|
/**
|
|
136
|
-
* Methods for sending a
|
|
136
|
+
* Methods for sending a transaction.
|
|
137
137
|
*/
|
|
138
138
|
get send() {
|
|
139
139
|
return this._transactionSender;
|
|
140
140
|
}
|
|
141
141
|
/**
|
|
142
|
-
* Methods for
|
|
142
|
+
* Methods for creating a transaction.
|
|
143
143
|
*/
|
|
144
|
-
get
|
|
144
|
+
get createTransaction() {
|
|
145
145
|
return this._transactionCreator;
|
|
146
146
|
}
|
|
147
147
|
// Static methods to create an `AlgorandClient`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"algorand-client.mjs","sources":["../../src/types/algorand-client.ts"],"sourcesContent":["import algosdk from 'algosdk'\nimport { MultisigAccount, SigningAccount, TransactionSignerAccount } from './account'\nimport { AccountManager } from './account-manager'\nimport { AlgorandClientInterface } from './algorand-client-interface'\nimport { AlgorandClientTransactionCreator } from './algorand-client-transaction-creator'\nimport { AlgorandClientTransactionSender } from './algorand-client-transaction-sender'\nimport { AppDeployer } from './app-deployer'\nimport { AppManager } from './app-manager'\nimport { AssetManager } from './asset-manager'\nimport { AlgoSdkClients, ClientManager } from './client-manager'\nimport AlgoKitComposer from './composer'\nimport { AlgoConfig } from './network-client'\nimport Account = algosdk.Account\nimport LogicSigAccount = algosdk.LogicSigAccount\n\n/**\n * A client that brokers easy access to Algorand functionality.\n */\nexport class AlgorandClient implements AlgorandClientInterface {\n private _clientManager: ClientManager\n private _accountManager: AccountManager\n private _appManager: AppManager\n private _appDeployer: AppDeployer\n private _assetManager: AssetManager\n private _transactionSender: AlgorandClientTransactionSender\n private _transactionCreator: AlgorandClientTransactionCreator\n\n private _cachedSuggestedParams?: algosdk.SuggestedParams\n private _cachedSuggestedParamsExpiry?: Date\n private _cachedSuggestedParamsTimeout: number = 3_000 // three seconds\n\n private _defaultValidityWindow: number | undefined = undefined\n\n private constructor(config: AlgoConfig | AlgoSdkClients) {\n this._clientManager = new ClientManager(config, this)\n this._accountManager = new AccountManager(this._clientManager)\n this._appManager = new AppManager(this._clientManager.algod)\n this._assetManager = new AssetManager(this._clientManager.algod, () => this.newGroup())\n this._transactionSender = new AlgorandClientTransactionSender(() => this.newGroup(), this._assetManager, this._appManager)\n this._transactionCreator = new AlgorandClientTransactionCreator(() => this.newGroup())\n this._appDeployer = new AppDeployer(this._appManager, this._transactionSender, this._clientManager.indexerIfPresent)\n }\n\n /**\n * Sets the default validity window for transactions.\n * @param validityWindow The number of rounds between the first and last valid rounds\n * @returns The `AlgorandClient` so method calls can be chained\n */\n public setDefaultValidityWindow(validityWindow: number) {\n this._defaultValidityWindow = validityWindow\n return this\n }\n\n /**\n * Sets the default signer to use if no other signer is specified.\n * @param signer The signer to use, either a `TransactionSigner` or a `TransactionSignerAccount`\n * @returns The `AlgorandClient` so method calls can be chained\n */\n public setDefaultSigner(signer: algosdk.TransactionSigner | TransactionSignerAccount): AlgorandClient {\n this._accountManager.setDefaultSigner(signer)\n return this\n }\n\n /**\n * Tracks the given account for later signing.\n * @param account The account to register, which can be a `TransactionSignerAccount` or\n * a `algosdk.Account`, `algosdk.LogicSigAccount`, `SigningAccount` or `MultisigAccount`\n * @example\n * ```typescript\n * const accountManager = AlgorandClient.mainnet()\n * .setSignerFromAccount(algosdk.generateAccount())\n * .setSignerFromAccount(new algosdk.LogicSigAccount(program, args))\n * .setSignerFromAccount(new SigningAccount(mnemonic, sender))\n * .setSignerFromAccount(new MultisigAccount({version: 1, threshold: 1, addrs: [\"ADDRESS1...\", \"ADDRESS2...\"]}, [account1, account2]))\n * .setSignerFromAccount({addr: \"SENDERADDRESS\", signer: transactionSigner})\n * ```\n * @returns The `AlgorandClient` so method calls can be chained\n */\n public setSignerFromAccount(\n account: TransactionSignerAccount | TransactionSignerAccount | Account | LogicSigAccount | SigningAccount | MultisigAccount,\n ) {\n this._accountManager.setSignerFromAccount(account)\n return this\n }\n\n /**\n * Tracks the given account for later signing.\n * @param sender The sender address to use this signer for\n * @param signer The signer to sign transactions with for the given sender\n * @returns The `AlgorandClient` so method calls can be chained\n */\n public setSigner(sender: string, signer: algosdk.TransactionSigner) {\n this._accountManager.setSigner(sender, signer)\n return this\n }\n\n /**\n * Sets a cache value to use for suggested params.\n * @param suggestedParams The suggested params to use\n * @param until A date until which to cache, or if not specified then the timeout is used\n * @returns The `AlgorandClient` so method calls can be chained\n */\n public setSuggestedParams(suggestedParams: algosdk.SuggestedParams, until?: Date) {\n this._cachedSuggestedParams = suggestedParams\n this._cachedSuggestedParamsExpiry = until ?? new Date(+new Date() + this._cachedSuggestedParamsTimeout)\n return this\n }\n\n /**\n * Sets the timeout for caching suggested params.\n * @param timeout The timeout in milliseconds\n * @returns The `AlgorandClient` so method calls can be chained\n */\n public setSuggestedParamsTimeout(timeout: number) {\n this._cachedSuggestedParamsTimeout = timeout\n return this\n }\n\n /** Get suggested params for a transaction (either cached or from algod if the cache is stale or empty) */\n public async getSuggestedParams(): Promise<algosdk.SuggestedParams> {\n if (this._cachedSuggestedParams && (!this._cachedSuggestedParamsExpiry || this._cachedSuggestedParamsExpiry > new Date())) {\n return {\n ...this._cachedSuggestedParams,\n }\n }\n\n this._cachedSuggestedParams = await this._clientManager.algod.getTransactionParams().do()\n this._cachedSuggestedParamsExpiry = new Date(new Date().getTime() + this._cachedSuggestedParamsTimeout)\n\n return {\n ...this._cachedSuggestedParams,\n }\n }\n\n /** Get clients, including algosdk clients and app clients. */\n public get client() {\n return this._clientManager\n }\n\n /** Get or create accounts that can sign transactions. */\n public get account() {\n return this._accountManager\n }\n\n /** Methods for interacting with assets. */\n public get asset() {\n return this._assetManager\n }\n\n /** Methods for interacting with apps. */\n public get app() {\n return this._appManager\n }\n\n /** Methods for deploying apps and managing app deployment metadata. */\n public get appDeployer() {\n return this._appDeployer\n }\n\n /** Start a new `AlgoKitComposer` transaction group */\n public newGroup() {\n return new AlgoKitComposer({\n algod: this.client.algod,\n getSigner: (addr: string) => this.account.getSigner(addr),\n getSuggestedParams: () => this.getSuggestedParams(),\n defaultValidityWindow: this._defaultValidityWindow,\n appManager: this._appManager,\n })\n }\n\n /**\n * Methods for sending a single transaction.\n */\n public get send() {\n return this._transactionSender\n }\n\n /**\n * Methods for building transactions\n */\n public get transactions() {\n return this._transactionCreator\n }\n\n // Static methods to create an `AlgorandClient`\n\n /**\n * Returns an `AlgorandClient` pointing at default LocalNet ports and API token.\n * @returns The `AlgorandClient`\n */\n public static defaultLocalNet() {\n return new AlgorandClient({\n algodConfig: ClientManager.getDefaultLocalNetConfig('algod'),\n indexerConfig: ClientManager.getDefaultLocalNetConfig('indexer'),\n kmdConfig: ClientManager.getDefaultLocalNetConfig('kmd'),\n })\n }\n\n /**\n * Returns an `AlgorandClient` pointing at TestNet using AlgoNode.\n * @returns The `AlgorandClient`\n */\n public static testNet() {\n return new AlgorandClient({\n algodConfig: ClientManager.getAlgoNodeConfig('testnet', 'algod'),\n indexerConfig: ClientManager.getAlgoNodeConfig('testnet', 'indexer'),\n kmdConfig: undefined,\n })\n }\n\n /**\n * Returns an `AlgorandClient` pointing at MainNet using AlgoNode.\n * @returns The `AlgorandClient`\n */\n public static mainNet() {\n return new AlgorandClient({\n algodConfig: ClientManager.getAlgoNodeConfig('mainnet', 'algod'),\n indexerConfig: ClientManager.getAlgoNodeConfig('mainnet', 'indexer'),\n kmdConfig: undefined,\n })\n }\n\n /**\n * Returns an `AlgorandClient` pointing to the given client(s).\n * @param clients The clients to use\n * @returns The `AlgorandClient`\n */\n public static fromClients(clients: AlgoSdkClients) {\n return new AlgorandClient(clients)\n }\n\n /**\n * Returns an `AlgorandClient` loading the configuration from environment variables.\n *\n * Retrieve configurations from environment variables when defined or get default LocalNet configuration if they aren't defined.\n *\n * Expects to be called from a Node.js environment.\n *\n * If `process.env.ALGOD_SERVER` is defined it will use that along with optional `process.env.ALGOD_PORT` and `process.env.ALGOD_TOKEN`.\n *\n * If `process.env.INDEXER_SERVER` is defined it will use that along with optional `process.env.INDEXER_PORT` and `process.env.INDEXER_TOKEN`.\n *\n * If either aren't defined it will use the default LocalNet config.\n *\n * It will return a KMD configuration that uses `process.env.KMD_PORT` (or port 4002) if `process.env.ALGOD_SERVER` is defined,\n * otherwise it will use the default LocalNet config unless it detects testnet or mainnet.\n * @returns The `AlgorandClient`\n */\n public static fromEnvironment() {\n return new AlgorandClient(ClientManager.getConfigFromEnvironmentOrLocalNet())\n }\n\n /**\n * Returns an `AlgorandClient` from the given config.\n * @param config The config to use\n * @returns The `AlgorandClient`\n */\n public static fromConfig(config: AlgoConfig) {\n return new AlgorandClient(config)\n }\n}\n\nexport default AlgorandClient\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"algorand-client.mjs","sources":["../../src/types/algorand-client.ts"],"sourcesContent":["import algosdk from 'algosdk'\nimport { MultisigAccount, SigningAccount, TransactionSignerAccount } from './account'\nimport { AccountManager } from './account-manager'\nimport { AlgorandClientInterface } from './algorand-client-interface'\nimport { AlgorandClientTransactionCreator } from './algorand-client-transaction-creator'\nimport { AlgorandClientTransactionSender } from './algorand-client-transaction-sender'\nimport { AppDeployer } from './app-deployer'\nimport { AppManager } from './app-manager'\nimport { AssetManager } from './asset-manager'\nimport { AlgoSdkClients, ClientManager } from './client-manager'\nimport AlgoKitComposer from './composer'\nimport { AlgoConfig } from './network-client'\nimport Account = algosdk.Account\nimport LogicSigAccount = algosdk.LogicSigAccount\n\n/**\n * A client that brokers easy access to Algorand functionality.\n */\nexport class AlgorandClient implements AlgorandClientInterface {\n private _clientManager: ClientManager\n private _accountManager: AccountManager\n private _appManager: AppManager\n private _appDeployer: AppDeployer\n private _assetManager: AssetManager\n private _transactionSender: AlgorandClientTransactionSender\n private _transactionCreator: AlgorandClientTransactionCreator\n\n private _cachedSuggestedParams?: algosdk.SuggestedParams\n private _cachedSuggestedParamsExpiry?: Date\n private _cachedSuggestedParamsTimeout: number = 3_000 // three seconds\n\n private _defaultValidityWindow: number | undefined = undefined\n\n private constructor(config: AlgoConfig | AlgoSdkClients) {\n this._clientManager = new ClientManager(config, this)\n this._accountManager = new AccountManager(this._clientManager)\n this._appManager = new AppManager(this._clientManager.algod)\n this._assetManager = new AssetManager(this._clientManager.algod, () => this.newGroup())\n this._transactionSender = new AlgorandClientTransactionSender(() => this.newGroup(), this._assetManager, this._appManager)\n this._transactionCreator = new AlgorandClientTransactionCreator(() => this.newGroup())\n this._appDeployer = new AppDeployer(this._appManager, this._transactionSender, this._clientManager.indexerIfPresent)\n }\n\n /**\n * Sets the default validity window for transactions.\n * @param validityWindow The number of rounds between the first and last valid rounds\n * @returns The `AlgorandClient` so method calls can be chained\n */\n public setDefaultValidityWindow(validityWindow: number) {\n this._defaultValidityWindow = validityWindow\n return this\n }\n\n /**\n * Sets the default signer to use if no other signer is specified.\n * @param signer The signer to use, either a `TransactionSigner` or a `TransactionSignerAccount`\n * @returns The `AlgorandClient` so method calls can be chained\n */\n public setDefaultSigner(signer: algosdk.TransactionSigner | TransactionSignerAccount): AlgorandClient {\n this._accountManager.setDefaultSigner(signer)\n return this\n }\n\n /**\n * Tracks the given account (object that encapsulates an address and a signer) for later signing.\n * @param account The account to register, which can be a `TransactionSignerAccount` or\n * a `algosdk.Account`, `algosdk.LogicSigAccount`, `SigningAccount` or `MultisigAccount`\n * @example\n * ```typescript\n * const accountManager = AlgorandClient.mainnet()\n * .setSignerFromAccount(algosdk.generateAccount())\n * .setSignerFromAccount(new algosdk.LogicSigAccount(program, args))\n * .setSignerFromAccount(new SigningAccount(mnemonic, sender))\n * .setSignerFromAccount(new MultisigAccount({version: 1, threshold: 1, addrs: [\"ADDRESS1...\", \"ADDRESS2...\"]}, [account1, account2]))\n * .setSignerFromAccount({addr: \"SENDERADDRESS\", signer: transactionSigner})\n * ```\n * @returns The `AlgorandClient` so method calls can be chained\n */\n public setSignerFromAccount(\n account: TransactionSignerAccount | TransactionSignerAccount | Account | LogicSigAccount | SigningAccount | MultisigAccount,\n ) {\n this._accountManager.setSignerFromAccount(account)\n return this\n }\n\n /**\n * Tracks the given signer against the given sender for later signing.\n * @param sender The sender address to use this signer for\n * @param signer The signer to sign transactions with for the given sender\n * @returns The `AlgorandClient` so method calls can be chained\n */\n public setSigner(sender: string, signer: algosdk.TransactionSigner) {\n this._accountManager.setSigner(sender, signer)\n return this\n }\n\n /**\n * Sets a cache value to use for suggested transaction params.\n * @param suggestedParams The suggested params to use\n * @param until A date until which to cache, or if not specified then the timeout is used\n * @returns The `AlgorandClient` so method calls can be chained\n */\n public setSuggestedParamsCache(suggestedParams: algosdk.SuggestedParams, until?: Date) {\n this._cachedSuggestedParams = suggestedParams\n this._cachedSuggestedParamsExpiry = until ?? new Date(+new Date() + this._cachedSuggestedParamsTimeout)\n return this\n }\n\n /**\n * Sets the timeout for caching suggested params.\n * @param timeout The timeout in milliseconds\n * @returns The `AlgorandClient` so method calls can be chained\n */\n public setSuggestedParamsCacheTimeout(timeout: number) {\n this._cachedSuggestedParamsTimeout = timeout\n return this\n }\n\n /** Get suggested params for a transaction (either cached or from algod if the cache is stale or empty) */\n public async getSuggestedParams(): Promise<algosdk.SuggestedParams> {\n if (this._cachedSuggestedParams && (!this._cachedSuggestedParamsExpiry || this._cachedSuggestedParamsExpiry > new Date())) {\n return {\n ...this._cachedSuggestedParams,\n }\n }\n\n this._cachedSuggestedParams = await this._clientManager.algod.getTransactionParams().do()\n this._cachedSuggestedParamsExpiry = new Date(new Date().getTime() + this._cachedSuggestedParamsTimeout)\n\n return {\n ...this._cachedSuggestedParams,\n }\n }\n\n /** Get clients, including algosdk clients and app clients. */\n public get client() {\n return this._clientManager\n }\n\n /** Get or create accounts that can sign transactions. */\n public get account() {\n return this._accountManager\n }\n\n /** Methods for interacting with assets. */\n public get asset() {\n return this._assetManager\n }\n\n /** Methods for interacting with apps. */\n public get app() {\n return this._appManager\n }\n\n /** Methods for deploying apps and managing app deployment metadata. */\n public get appDeployer() {\n return this._appDeployer\n }\n\n /** Start a new `AlgoKitComposer` transaction group */\n public newGroup() {\n return new AlgoKitComposer({\n algod: this.client.algod,\n getSigner: (addr: string) => this.account.getSigner(addr),\n getSuggestedParams: () => this.getSuggestedParams(),\n defaultValidityWindow: this._defaultValidityWindow,\n appManager: this._appManager,\n })\n }\n\n /**\n * Methods for sending a transaction.\n */\n public get send() {\n return this._transactionSender\n }\n\n /**\n * Methods for creating a transaction.\n */\n public get createTransaction() {\n return this._transactionCreator\n }\n\n // Static methods to create an `AlgorandClient`\n\n /**\n * Returns an `AlgorandClient` pointing at default LocalNet ports and API token.\n * @returns The `AlgorandClient`\n */\n public static defaultLocalNet() {\n return new AlgorandClient({\n algodConfig: ClientManager.getDefaultLocalNetConfig('algod'),\n indexerConfig: ClientManager.getDefaultLocalNetConfig('indexer'),\n kmdConfig: ClientManager.getDefaultLocalNetConfig('kmd'),\n })\n }\n\n /**\n * Returns an `AlgorandClient` pointing at TestNet using AlgoNode.\n * @returns The `AlgorandClient`\n */\n public static testNet() {\n return new AlgorandClient({\n algodConfig: ClientManager.getAlgoNodeConfig('testnet', 'algod'),\n indexerConfig: ClientManager.getAlgoNodeConfig('testnet', 'indexer'),\n kmdConfig: undefined,\n })\n }\n\n /**\n * Returns an `AlgorandClient` pointing at MainNet using AlgoNode.\n * @returns The `AlgorandClient`\n */\n public static mainNet() {\n return new AlgorandClient({\n algodConfig: ClientManager.getAlgoNodeConfig('mainnet', 'algod'),\n indexerConfig: ClientManager.getAlgoNodeConfig('mainnet', 'indexer'),\n kmdConfig: undefined,\n })\n }\n\n /**\n * Returns an `AlgorandClient` pointing to the given client(s).\n * @param clients The clients to use\n * @returns The `AlgorandClient`\n */\n public static fromClients(clients: AlgoSdkClients) {\n return new AlgorandClient(clients)\n }\n\n /**\n * Returns an `AlgorandClient` loading the configuration from environment variables.\n *\n * Retrieve configurations from environment variables when defined or get default LocalNet configuration if they aren't defined.\n *\n * Expects to be called from a Node.js environment.\n *\n * If `process.env.ALGOD_SERVER` is defined it will use that along with optional `process.env.ALGOD_PORT` and `process.env.ALGOD_TOKEN`.\n *\n * If `process.env.INDEXER_SERVER` is defined it will use that along with optional `process.env.INDEXER_PORT` and `process.env.INDEXER_TOKEN`.\n *\n * If either aren't defined it will use the default LocalNet config.\n *\n * It will return a KMD configuration that uses `process.env.KMD_PORT` (or port 4002) if `process.env.ALGOD_SERVER` is defined,\n * otherwise it will use the default LocalNet config unless it detects testnet or mainnet.\n * @returns The `AlgorandClient`\n */\n public static fromEnvironment() {\n return new AlgorandClient(ClientManager.getConfigFromEnvironmentOrLocalNet())\n }\n\n /**\n * Returns an `AlgorandClient` from the given config.\n * @param config The config to use\n * @returns The `AlgorandClient`\n */\n public static fromConfig(config: AlgoConfig) {\n return new AlgorandClient(config)\n }\n}\n\nexport default AlgorandClient\n"],"names":[],"mappings":"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"}
|
package/types/app-arc56.d.ts
CHANGED
|
@@ -1,17 +1,21 @@
|
|
|
1
1
|
import algosdk from 'algosdk';
|
|
2
2
|
import { ABIReturn } from './app';
|
|
3
3
|
import { Expand } from './expand';
|
|
4
|
+
/** Type to describe an argument within an `Arc56Method`. */
|
|
5
|
+
export type Arc56MethodArg = Expand<Omit<Method['args'][number], 'type'> & {
|
|
6
|
+
type: algosdk.ABIArgumentType;
|
|
7
|
+
}>;
|
|
8
|
+
/** Type to describe a return type within an `Arc56Method`. */
|
|
9
|
+
export type Arc56MethodReturnType = Expand<Omit<Method['returns'], 'type'> & {
|
|
10
|
+
type: algosdk.ABIReturnType;
|
|
11
|
+
}>;
|
|
4
12
|
/**
|
|
5
13
|
* Wrapper around `algosdk.ABIMethod` that represents an ARC-56 ABI method.
|
|
6
14
|
*/
|
|
7
15
|
export declare class Arc56Method extends algosdk.ABIMethod {
|
|
8
16
|
method: Method;
|
|
9
|
-
readonly args: Array<
|
|
10
|
-
|
|
11
|
-
}>>;
|
|
12
|
-
readonly returns: Expand<Omit<Method['returns'], 'type'> & {
|
|
13
|
-
type: algosdk.ABIReturnType;
|
|
14
|
-
}>;
|
|
17
|
+
readonly args: Array<Arc56MethodArg>;
|
|
18
|
+
readonly returns: Arc56MethodReturnType;
|
|
15
19
|
constructor(method: Method);
|
|
16
20
|
toJSON(): Method;
|
|
17
21
|
}
|
|
@@ -20,21 +24,21 @@ export declare class Arc56Method extends algosdk.ABIMethod {
|
|
|
20
24
|
* @param struct The ARC-56 struct definition
|
|
21
25
|
* @returns The `ABITupleType`
|
|
22
26
|
*/
|
|
23
|
-
export declare function getABITupleTypeFromABIStructDefinition(struct:
|
|
27
|
+
export declare function getABITupleTypeFromABIStructDefinition(struct: StructField[], structs: Record<string, StructField[]>): algosdk.ABITupleType;
|
|
24
28
|
/**
|
|
25
29
|
* Converts a decoded ABI tuple as a struct.
|
|
26
30
|
* @param decodedABITuple The decoded ABI tuple value
|
|
27
31
|
* @param structFields The struct fields from an ARC-56 app spec
|
|
28
32
|
* @returns The struct as a Record<string, any>
|
|
29
33
|
*/
|
|
30
|
-
export declare function getABIStructFromABITuple<TReturn extends ABIStruct = Record<string, any>>(decodedABITuple: algosdk.ABIValue[], structFields:
|
|
34
|
+
export declare function getABIStructFromABITuple<TReturn extends ABIStruct = Record<string, any>>(decodedABITuple: algosdk.ABIValue[], structFields: StructField[], structs: Record<string, StructField[]>): TReturn;
|
|
31
35
|
/**
|
|
32
36
|
* Converts an ARC-56 struct as an ABI tuple.
|
|
33
37
|
* @param struct The struct to convert
|
|
34
38
|
* @param structFields The struct fields from an ARC-56 app spec
|
|
35
39
|
* @returns The struct as a decoded ABI tuple
|
|
36
40
|
*/
|
|
37
|
-
export declare function getABITupleFromABIStruct(struct: ABIStruct, structFields:
|
|
41
|
+
export declare function getABITupleFromABIStruct(struct: ABIStruct, structFields: StructField[], structs: Record<string, StructField[]>): algosdk.ABIValue[];
|
|
38
42
|
/** Decoded ARC-56 struct as a struct rather than a tuple. */
|
|
39
43
|
export type ABIStruct = {
|
|
40
44
|
[key: string]: ABIStruct | algosdk.ABIValue;
|
|
@@ -47,7 +51,7 @@ export type ABIStruct = {
|
|
|
47
51
|
* @param structs The defined ARC-56 structs
|
|
48
52
|
* @returns The decoded ABI value or struct
|
|
49
53
|
*/
|
|
50
|
-
export declare function getABIDecodedValue(value: Uint8Array | number | bigint, type: string, structs: Record<string,
|
|
54
|
+
export declare function getABIDecodedValue(value: Uint8Array | number | bigint, type: string, structs: Record<string, StructField[]>): algosdk.ABIValue | ABIStruct;
|
|
51
55
|
/**
|
|
52
56
|
* Returns the ABI-encoded value for the given value.
|
|
53
57
|
* @param value The value to encode either already in encoded binary form (`Uint8Array`), a decoded ABI value or an ARC-56 struct
|
|
@@ -55,7 +59,7 @@ export declare function getABIDecodedValue(value: Uint8Array | number | bigint,
|
|
|
55
59
|
* @param structs The defined ARC-56 structs
|
|
56
60
|
* @returns The binary ABI-encoded value
|
|
57
61
|
*/
|
|
58
|
-
export declare function getABIEncodedValue(value: Uint8Array | algosdk.ABIValue | ABIStruct, type: string, structs: Record<string,
|
|
62
|
+
export declare function getABIEncodedValue(value: Uint8Array | algosdk.ABIValue | ABIStruct, type: string, structs: Record<string, StructField[]>): Uint8Array;
|
|
59
63
|
/**
|
|
60
64
|
* Returns the ARC-56 ABI method object for a given method name or signature and ARC-56 app spec.
|
|
61
65
|
* @param methodNameOrSignature The method name or method signature to call if an ABI call is being emitted.
|
|
@@ -72,7 +76,7 @@ export declare function getArc56Method(methodNameOrSignature: string, appSpec: A
|
|
|
72
76
|
* @param structs The struct fields from the app spec
|
|
73
77
|
* @returns The smart contract response with an updated return value
|
|
74
78
|
*/
|
|
75
|
-
export declare function getArc56ReturnValue<TReturn extends Uint8Array | algosdk.ABIValue | ABIStruct | undefined>(returnValue: ABIReturn | undefined, method: Method | Arc56Method, structs:
|
|
79
|
+
export declare function getArc56ReturnValue<TReturn extends Uint8Array | algosdk.ABIValue | ABIStruct | undefined>(returnValue: ABIReturn | undefined, method: Method | Arc56Method, structs: Record<string, StructField[]>): TReturn;
|
|
76
80
|
/****************/
|
|
77
81
|
/** ARC-56 spec */
|
|
78
82
|
/****************/
|
|
@@ -85,23 +89,21 @@ export interface Arc56Contract {
|
|
|
85
89
|
/** Optional, user-friendly description for the interface */
|
|
86
90
|
desc?: string;
|
|
87
91
|
/**
|
|
88
|
-
* Optional object listing the contract instances across different networks
|
|
92
|
+
* Optional object listing the contract instances across different networks.
|
|
93
|
+
* The key is the base64 genesis hash of the network, and the value contains
|
|
94
|
+
* information about the deployed contract in the network indicated by the
|
|
95
|
+
* key. A key containing the human-readable name of the network MAY be
|
|
96
|
+
* included, but the corresponding genesis hash key MUST also be define
|
|
89
97
|
*/
|
|
90
98
|
networks?: {
|
|
91
|
-
/**
|
|
92
|
-
* The key is the base64 genesis hash of the network, and the value contains
|
|
93
|
-
* information about the deployed contract in the network indicated by the
|
|
94
|
-
* key. A key containing the human-readable name of the network MAY be
|
|
95
|
-
* included, but the corresponding genesis hash key MUST also be defined
|
|
96
|
-
*/
|
|
97
99
|
[network: string]: {
|
|
98
100
|
/** The app ID of the deployed contract in this network */
|
|
99
101
|
appID: number;
|
|
100
102
|
};
|
|
101
103
|
};
|
|
102
|
-
/** Named structs use by the application */
|
|
104
|
+
/** Named structs use by the application. Each struct field appears in the same order as ABI encoding. */
|
|
103
105
|
structs: {
|
|
104
|
-
[structName: StructName]:
|
|
106
|
+
[structName: StructName]: StructField[];
|
|
105
107
|
};
|
|
106
108
|
/** All of the methods that the contract implements */
|
|
107
109
|
methods: Method[];
|
|
@@ -179,7 +181,7 @@ export interface Arc56Contract {
|
|
|
179
181
|
major: number;
|
|
180
182
|
minor: number;
|
|
181
183
|
patch: number;
|
|
182
|
-
|
|
184
|
+
commitHash?: string;
|
|
183
185
|
};
|
|
184
186
|
};
|
|
185
187
|
/** ARC-28 events that MAY be emitted by this contract */
|
|
@@ -188,7 +190,7 @@ export interface Arc56Contract {
|
|
|
188
190
|
templateVariables?: {
|
|
189
191
|
[name: string]: {
|
|
190
192
|
/** The type of the template variable */
|
|
191
|
-
type: ABIType |
|
|
193
|
+
type: ABIType | AVMType | StructName;
|
|
192
194
|
/** If given, the the base64 encoded value used for the given app/program */
|
|
193
195
|
value?: string;
|
|
194
196
|
};
|
|
@@ -197,7 +199,7 @@ export interface Arc56Contract {
|
|
|
197
199
|
scratchVariables?: {
|
|
198
200
|
[name: string]: {
|
|
199
201
|
slot: number;
|
|
200
|
-
type: ABIType |
|
|
202
|
+
type: ABIType | AVMType | StructName;
|
|
201
203
|
};
|
|
202
204
|
};
|
|
203
205
|
}
|
|
@@ -209,7 +211,7 @@ export interface Method {
|
|
|
209
211
|
desc?: string;
|
|
210
212
|
/** The arguments of the method, in order */
|
|
211
213
|
args: Array<{
|
|
212
|
-
/** The type of the argument */
|
|
214
|
+
/** The type of the argument. The `struct` field should also be checked to determine if this arg is a struct. */
|
|
213
215
|
type: ABIType;
|
|
214
216
|
/** If the type is a struct, the name of the struct */
|
|
215
217
|
struct?: StructName;
|
|
@@ -217,12 +219,24 @@ export interface Method {
|
|
|
217
219
|
name?: string;
|
|
218
220
|
/** Optional, user-friendly description for the argument */
|
|
219
221
|
desc?: string;
|
|
220
|
-
/** The default value that clients should use.
|
|
221
|
-
defaultValue?:
|
|
222
|
+
/** The default value that clients should use. */
|
|
223
|
+
defaultValue?: {
|
|
224
|
+
/** Base64 encoded bytes or uint64 */
|
|
225
|
+
data: string | number;
|
|
226
|
+
/** How the data is encoded. This is the encoding for the data provided here, not the arg type */
|
|
227
|
+
type: ABIType | AVMType;
|
|
228
|
+
/** Where the default value is coming from
|
|
229
|
+
* - box: The data key signifies the box key to read the value from
|
|
230
|
+
* - global: The data key signifies the global state key to read the value from
|
|
231
|
+
* - local: The data key signifies the local state key to read the value from (for the sender)
|
|
232
|
+
* - literal: the value is a literal and should be passed directly as the argument
|
|
233
|
+
*/
|
|
234
|
+
source: 'box' | 'global' | 'local' | 'literal';
|
|
235
|
+
};
|
|
222
236
|
}>;
|
|
223
237
|
/** Information about the method's return value */
|
|
224
238
|
returns: {
|
|
225
|
-
/** The type of the return value, or "void" to indicate no return value. */
|
|
239
|
+
/** The type of the return value, or "void" to indicate no return value. The `struct` field should also be checked to determine if this return value is a struct. */
|
|
226
240
|
type: ABIType;
|
|
227
241
|
/** If the type is a struct, the name of the struct */
|
|
228
242
|
struct?: StructName;
|
|
@@ -271,7 +285,7 @@ export interface Event {
|
|
|
271
285
|
desc?: string;
|
|
272
286
|
/** The arguments of the event, in order */
|
|
273
287
|
args: Array<{
|
|
274
|
-
/** The type of the argument */
|
|
288
|
+
/** The type of the argument. The `struct` field should also be checked to determine if this return value is a struct. */
|
|
275
289
|
type: ABIType;
|
|
276
290
|
/** Optional, user-friendly name for the argument */
|
|
277
291
|
name?: string;
|
|
@@ -286,19 +300,28 @@ export type ABIType = string;
|
|
|
286
300
|
/** The name of a defined struct */
|
|
287
301
|
export type StructName = string;
|
|
288
302
|
/** Raw byteslice without the length prefixed that is specified in ARC-4 */
|
|
289
|
-
export type AVMBytes = '
|
|
290
|
-
/**
|
|
291
|
-
export
|
|
292
|
-
|
|
303
|
+
export type AVMBytes = 'AVMBytes';
|
|
304
|
+
/** A utf-8 string without the length prefix that is specified in ARC-4 */
|
|
305
|
+
export type AVMString = 'AVMString';
|
|
306
|
+
/** A 64-bit unsigned integer */
|
|
307
|
+
export type AVMUint64 = 'AVMUint64';
|
|
308
|
+
/** A native AVM type */
|
|
309
|
+
export type AVMType = AVMBytes | AVMString | AVMUint64;
|
|
310
|
+
/** Information about a single field in a struct */
|
|
311
|
+
export interface StructField {
|
|
312
|
+
/** The name of the struct field */
|
|
313
|
+
name: string;
|
|
314
|
+
/** The type of the struct field's value */
|
|
315
|
+
type: ABIType | StructName | StructField[];
|
|
293
316
|
}
|
|
294
317
|
/** Describes a single key in app storage */
|
|
295
318
|
export interface StorageKey {
|
|
296
319
|
/** Description of what this storage key holds */
|
|
297
320
|
desc?: string;
|
|
298
321
|
/** The type of the key */
|
|
299
|
-
keyType: ABIType |
|
|
322
|
+
keyType: ABIType | AVMType | StructName;
|
|
300
323
|
/** The type of the value */
|
|
301
|
-
valueType: ABIType |
|
|
324
|
+
valueType: ABIType | AVMType | StructName;
|
|
302
325
|
/** The bytes of the key encoded as base64 */
|
|
303
326
|
key: string;
|
|
304
327
|
}
|
|
@@ -307,9 +330,9 @@ export interface StorageMap {
|
|
|
307
330
|
/** Description of what the key-value pairs in this mapping hold */
|
|
308
331
|
desc?: string;
|
|
309
332
|
/** The type of the keys in the map */
|
|
310
|
-
keyType: ABIType |
|
|
333
|
+
keyType: ABIType | AVMType | StructName;
|
|
311
334
|
/** The type of the values in the map */
|
|
312
|
-
valueType: ABIType |
|
|
335
|
+
valueType: ABIType | AVMType | StructName;
|
|
313
336
|
/** The base64-encoded prefix of the map keys*/
|
|
314
337
|
prefix?: string;
|
|
315
338
|
}
|
package/types/app-arc56.js
CHANGED
|
@@ -27,8 +27,12 @@ class Arc56Method extends algosdk.ABIMethod {
|
|
|
27
27
|
* @param struct The ARC-56 struct definition
|
|
28
28
|
* @returns The `ABITupleType`
|
|
29
29
|
*/
|
|
30
|
-
function getABITupleTypeFromABIStructDefinition(struct) {
|
|
31
|
-
return new algosdk.ABITupleType(
|
|
30
|
+
function getABITupleTypeFromABIStructDefinition(struct, structs) {
|
|
31
|
+
return new algosdk.ABITupleType(struct.map((v) => typeof v.type === 'string'
|
|
32
|
+
? structs[v.type]
|
|
33
|
+
? getABITupleTypeFromABIStructDefinition(structs[v.type], structs)
|
|
34
|
+
: algosdk.ABIType.from(v.type)
|
|
35
|
+
: getABITupleTypeFromABIStructDefinition(v.type, structs)));
|
|
32
36
|
}
|
|
33
37
|
/**
|
|
34
38
|
* Converts a decoded ABI tuple as a struct.
|
|
@@ -37,10 +41,15 @@ function getABITupleTypeFromABIStructDefinition(struct) {
|
|
|
37
41
|
* @returns The struct as a Record<string, any>
|
|
38
42
|
*/
|
|
39
43
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
40
|
-
function getABIStructFromABITuple(decodedABITuple, structFields) {
|
|
41
|
-
return Object.fromEntries(
|
|
44
|
+
function getABIStructFromABITuple(decodedABITuple, structFields, structs) {
|
|
45
|
+
return Object.fromEntries(structFields.map(({ name: key, type }, i) => {
|
|
42
46
|
const abiValue = decodedABITuple[i];
|
|
43
|
-
return [
|
|
47
|
+
return [
|
|
48
|
+
key,
|
|
49
|
+
(typeof type === 'string' && !structs[type]) || !Array.isArray(abiValue)
|
|
50
|
+
? decodedABITuple[i]
|
|
51
|
+
: getABIStructFromABITuple(abiValue, typeof type === 'string' ? structs[type] : type, structs),
|
|
52
|
+
];
|
|
44
53
|
}));
|
|
45
54
|
}
|
|
46
55
|
/**
|
|
@@ -49,10 +58,12 @@ function getABIStructFromABITuple(decodedABITuple, structFields) {
|
|
|
49
58
|
* @param structFields The struct fields from an ARC-56 app spec
|
|
50
59
|
* @returns The struct as a decoded ABI tuple
|
|
51
60
|
*/
|
|
52
|
-
function getABITupleFromABIStruct(struct, structFields) {
|
|
53
|
-
return
|
|
61
|
+
function getABITupleFromABIStruct(struct, structFields, structs) {
|
|
62
|
+
return structFields.map(({ name: key, type }) => {
|
|
54
63
|
const value = struct[key];
|
|
55
|
-
return typeof type === 'string'
|
|
64
|
+
return typeof type === 'string' && !structs[type]
|
|
65
|
+
? value
|
|
66
|
+
: getABITupleFromABIStruct(value, typeof type === 'string' ? structs[type] : type, structs);
|
|
56
67
|
});
|
|
57
68
|
}
|
|
58
69
|
/**
|
|
@@ -64,11 +75,15 @@ function getABITupleFromABIStruct(struct, structFields) {
|
|
|
64
75
|
* @returns The decoded ABI value or struct
|
|
65
76
|
*/
|
|
66
77
|
function getABIDecodedValue(value, type, structs) {
|
|
67
|
-
if (type === '
|
|
78
|
+
if (type === 'AVMBytes' || typeof value !== 'object')
|
|
68
79
|
return value;
|
|
80
|
+
if (type === 'AVMString')
|
|
81
|
+
return Buffer.from(value).toString('utf-8');
|
|
82
|
+
if (type === 'AVMUint64')
|
|
83
|
+
return algosdk.ABIType.from('uint64').decode(value);
|
|
69
84
|
if (structs[type]) {
|
|
70
|
-
const tupleValue = getABITupleTypeFromABIStructDefinition(structs[type]).decode(value);
|
|
71
|
-
return getABIStructFromABITuple(tupleValue, structs[type]);
|
|
85
|
+
const tupleValue = getABITupleTypeFromABIStructDefinition(structs[type], structs).decode(value);
|
|
86
|
+
return getABIStructFromABITuple(tupleValue, structs[type], structs);
|
|
72
87
|
}
|
|
73
88
|
return algosdk.ABIType.from(type).decode(value);
|
|
74
89
|
}
|
|
@@ -82,7 +97,9 @@ function getABIDecodedValue(value, type, structs) {
|
|
|
82
97
|
function getABIEncodedValue(value, type, structs) {
|
|
83
98
|
if (typeof value === 'object' && value instanceof Uint8Array)
|
|
84
99
|
return value;
|
|
85
|
-
if (type === '
|
|
100
|
+
if (type === 'AVMUint64')
|
|
101
|
+
return algosdk.ABIType.from('uint64').encode(value);
|
|
102
|
+
if (type === 'AVMBytes' || type === 'AVMString') {
|
|
86
103
|
if (typeof value === 'string')
|
|
87
104
|
return Buffer.from(value, 'utf-8');
|
|
88
105
|
if (typeof value !== 'object' || !(value instanceof Uint8Array))
|
|
@@ -90,12 +107,12 @@ function getABIEncodedValue(value, type, structs) {
|
|
|
90
107
|
return value;
|
|
91
108
|
}
|
|
92
109
|
if (structs[type]) {
|
|
93
|
-
const tupleType = getABITupleTypeFromABIStructDefinition(structs[type]);
|
|
110
|
+
const tupleType = getABITupleTypeFromABIStructDefinition(structs[type], structs);
|
|
94
111
|
if (Array.isArray(value)) {
|
|
95
112
|
tupleType.encode(value);
|
|
96
113
|
}
|
|
97
114
|
else {
|
|
98
|
-
return tupleType.encode(getABITupleFromABIStruct(value, structs[type]));
|
|
115
|
+
return tupleType.encode(getABITupleFromABIStruct(value, structs[type], structs));
|
|
99
116
|
}
|
|
100
117
|
}
|
|
101
118
|
return algosdk.ABIType.from(type).encode(value);
|
|
@@ -144,10 +161,14 @@ function getArc56ReturnValue(returnValue, method, structs) {
|
|
|
144
161
|
}
|
|
145
162
|
if (type === undefined || type === 'void' || returnValue?.returnValue === undefined)
|
|
146
163
|
return undefined;
|
|
147
|
-
if (type === '
|
|
164
|
+
if (type === 'AVMBytes')
|
|
148
165
|
return returnValue.rawReturnValue;
|
|
166
|
+
if (type === 'AVMString')
|
|
167
|
+
return Buffer.from(returnValue.rawReturnValue).toString('utf-8');
|
|
168
|
+
if (type === 'AVMUint64')
|
|
169
|
+
return algosdk.ABIType.from('uint64').decode(returnValue.rawReturnValue);
|
|
149
170
|
if (structs[type]) {
|
|
150
|
-
return getABIStructFromABITuple(returnValue.returnValue, structs[type]);
|
|
171
|
+
return getABIStructFromABITuple(returnValue.returnValue, structs[type], structs);
|
|
151
172
|
}
|
|
152
173
|
return returnValue.returnValue;
|
|
153
174
|
}
|