@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.
Files changed (98) hide show
  1. package/app.d.ts +6 -6
  2. package/app.js +6 -6
  3. package/app.js.map +1 -1
  4. package/app.mjs +6 -6
  5. package/app.mjs.map +1 -1
  6. package/asset.d.ts +3 -3
  7. package/asset.js +3 -3
  8. package/asset.js.map +1 -1
  9. package/asset.mjs +3 -3
  10. package/asset.mjs.map +1 -1
  11. package/package.json +1 -1
  12. package/testing/fixtures/algorand-fixture.js +1 -1
  13. package/testing/fixtures/algorand-fixture.js.map +1 -1
  14. package/testing/fixtures/algorand-fixture.mjs +1 -1
  15. package/testing/fixtures/algorand-fixture.mjs.map +1 -1
  16. package/transaction/legacy-bridge.d.ts +3 -3
  17. package/transaction/legacy-bridge.js.map +1 -1
  18. package/transaction/legacy-bridge.mjs.map +1 -1
  19. package/transaction/transaction.d.ts +1 -3
  20. package/transaction/transaction.js +17 -11
  21. package/transaction/transaction.js.map +1 -1
  22. package/transaction/transaction.mjs +17 -11
  23. package/transaction/transaction.mjs.map +1 -1
  24. package/transfer/transfer-algos.d.ts +1 -1
  25. package/transfer/transfer-algos.js +1 -1
  26. package/transfer/transfer-algos.js.map +1 -1
  27. package/transfer/transfer-algos.mjs +1 -1
  28. package/transfer/transfer-algos.mjs.map +1 -1
  29. package/transfer/transfer.d.ts +1 -1
  30. package/transfer/transfer.js +1 -1
  31. package/transfer/transfer.js.map +1 -1
  32. package/transfer/transfer.mjs +1 -1
  33. package/transfer/transfer.mjs.map +1 -1
  34. package/types/account-manager.d.ts +13 -4
  35. package/types/account-manager.js +17 -3
  36. package/types/account-manager.js.map +1 -1
  37. package/types/account-manager.mjs +17 -3
  38. package/types/account-manager.mjs.map +1 -1
  39. package/types/algorand-client-interface.d.ts +1 -1
  40. package/types/algorand-client-transaction-creator.d.ts +30 -30
  41. package/types/algorand-client-transaction-creator.js +30 -30
  42. package/types/algorand-client-transaction-creator.js.map +1 -1
  43. package/types/algorand-client-transaction-creator.mjs +30 -30
  44. package/types/algorand-client-transaction-creator.mjs.map +1 -1
  45. package/types/algorand-client-transaction-sender.d.ts +18 -18
  46. package/types/algorand-client-transaction-sender.js +1 -1
  47. package/types/algorand-client-transaction-sender.js.map +1 -1
  48. package/types/algorand-client-transaction-sender.mjs +1 -1
  49. package/types/algorand-client-transaction-sender.mjs.map +1 -1
  50. package/types/algorand-client.d.ts +8 -8
  51. package/types/algorand-client.js +8 -8
  52. package/types/algorand-client.js.map +1 -1
  53. package/types/algorand-client.mjs +8 -8
  54. package/types/algorand-client.mjs.map +1 -1
  55. package/types/app-arc56.d.ts +60 -37
  56. package/types/app-arc56.js +37 -16
  57. package/types/app-arc56.js.map +1 -1
  58. package/types/app-arc56.mjs +37 -16
  59. package/types/app-arc56.mjs.map +1 -1
  60. package/types/app-client.d.ts +101 -78
  61. package/types/app-client.js +145 -84
  62. package/types/app-client.js.map +1 -1
  63. package/types/app-client.mjs +145 -84
  64. package/types/app-client.mjs.map +1 -1
  65. package/types/app-deployer.d.ts +2 -2
  66. package/types/app-deployer.js +24 -24
  67. package/types/app-deployer.js.map +1 -1
  68. package/types/app-deployer.mjs +24 -24
  69. package/types/app-deployer.mjs.map +1 -1
  70. package/types/app-factory.d.ts +141 -86
  71. package/types/app-factory.js +106 -34
  72. package/types/app-factory.js.map +1 -1
  73. package/types/app-factory.mjs +107 -35
  74. package/types/app-factory.mjs.map +1 -1
  75. package/types/app-spec.js +15 -9
  76. package/types/app-spec.js.map +1 -1
  77. package/types/app-spec.mjs +15 -9
  78. package/types/app-spec.mjs.map +1 -1
  79. package/types/asset-manager.d.ts +3 -3
  80. package/types/asset-manager.js +2 -2
  81. package/types/asset-manager.js.map +1 -1
  82. package/types/asset-manager.mjs +2 -2
  83. package/types/asset-manager.mjs.map +1 -1
  84. package/types/client-manager.d.ts +30 -8
  85. package/types/client-manager.js +6 -0
  86. package/types/client-manager.js.map +1 -1
  87. package/types/client-manager.mjs +6 -0
  88. package/types/client-manager.mjs.map +1 -1
  89. package/types/composer.d.ts +29 -4
  90. package/types/composer.js +24 -7
  91. package/types/composer.js.map +1 -1
  92. package/types/composer.mjs +24 -7
  93. package/types/composer.mjs.map +1 -1
  94. package/types/kmd-account-manager.js +1 -1
  95. package/types/kmd-account-manager.js.map +1 -1
  96. package/types/kmd-account-manager.mjs +1 -1
  97. package/types/kmd-account-manager.mjs.map +1 -1
  98. package/types/transaction.d.ts +4 -6
@@ -1 +1 @@
1
- {"version":3,"file":"app-deployer.mjs","sources":["../../src/types/app-deployer.ts"],"sourcesContent":["import algosdk from 'algosdk'\nimport { Config } from '../config'\nimport * as indexer from '../indexer-lookup'\nimport { AlgorandClientTransactionSender } from './algorand-client-transaction-sender'\nimport {\n APP_DEPLOY_NOTE_DAPP,\n OnSchemaBreak,\n OnUpdate,\n type ABIReturn,\n type AppDeployMetadata,\n type SendAppCreateTransactionResult,\n type SendAppUpdateTransactionResult,\n type TealTemplateParams,\n} from './app'\nimport { AppManager } from './app-manager'\nimport AlgoKitComposer, {\n AppCreateMethodCall,\n AppCreateParams,\n AppDeleteMethodCall,\n AppDeleteParams,\n AppUpdateMethodCall,\n AppUpdateParams,\n} from './composer'\nimport { Expand } from './expand'\nimport { ConfirmedTransactionResult, ExecuteParams } from './transaction'\n\n/** Params to specify an update transaction for an app deployment */\nexport type DeployAppUpdateParams = Expand<Omit<AppUpdateParams, 'appId' | 'approvalProgram' | 'clearStateProgram'>>\n/** Params to specify an update method call for an app deployment */\nexport type DeployAppUpdateMethodCall = Expand<Omit<AppUpdateMethodCall, 'appId' | 'approvalProgram' | 'clearStateProgram'>>\n/** Params to specify a transaction for an app deployment */\nexport type DeployAppDeleteParams = Expand<Omit<AppDeleteParams, 'appId'>>\n/** Params to specify a delete method call for an app deployment */\nexport type DeployAppDeleteMethodCall = Expand<Omit<AppDeleteMethodCall, 'appId'>>\n\n/** The parameters to idempotently deploy an app */\nexport type AppDeployParams = Expand<\n ExecuteParams & {\n /** The deployment metadata */\n metadata: AppDeployMetadata\n /** Any deploy-time parameters to replace in the TEAL code before compiling it (used if teal code is passed in as a string) */\n deployTimeParams?: TealTemplateParams\n /** What action to perform if a schema break (storage schema or extra pages change) is detected:\n *\n * * `fail` - Fail the deployment (throw an error, **default**)\n * * `replace` - Delete the old app and create a new one\n * * `append` - Deploy a new app and leave the old one as is\n */\n onSchemaBreak?: 'replace' | 'fail' | 'append' | OnSchemaBreak\n /** What action to perform if a TEAL code update is detected:\n *\n * * `fail` - Fail the deployment (throw an error, **default**)\n * * `update` - Update the app with the new TEAL code\n * * `replace` - Delete the old app and create a new one\n * * `append` - Deploy a new app and leave the old one as is\n */\n onUpdate?: 'update' | 'replace' | 'fail' | 'append' | OnUpdate\n /** Create transaction parameters to use if a create needs to be issued as part of deployment */\n createParams: AppCreateParams | AppCreateMethodCall\n /** Update transaction parameters to use if an update needs to be issued as part of deployment */\n updateParams: DeployAppUpdateParams | DeployAppUpdateMethodCall\n /** Delete transaction parameters to use if a delete needs to be issued as part of deployment */\n deleteParams: DeployAppDeleteParams | DeployAppDeleteMethodCall\n /** Optional cached value of the existing apps for the given creator; use this to avoid an indexer lookup */\n existingDeployments?: AppLookup\n /** Whether or not to ignore the app metadata cache and force a lookup, default: use the cache **/\n ignoreCache?: boolean\n }\n>\n\n/** The metadata that can be collected about a deployed app */\nexport interface AppMetadata extends AppDeployMetadata {\n /** The id of the app */\n appId: bigint\n /** The Algorand address of the account associated with the app */\n appAddress: string\n /** The round the app was created */\n createdRound: bigint\n /** The last round that the app was updated */\n updatedRound: bigint\n /** The metadata when the app was created */\n createdMetadata: AppDeployMetadata\n /** Whether or not the app is deleted */\n deleted: boolean\n}\n\n/** A lookup of name -> Algorand app for a creator */\nexport interface AppLookup {\n /** The address of the creator associated with this lookup */\n creator: Readonly<string>\n /** A hash map of app name to app metadata */\n apps: {\n [name: string]: AppMetadata\n }\n}\n\nexport type AppDeployResult =\n | Expand<{ operationPerformed: 'create' } & Omit<AppMetadata, 'appId' | 'appAddress'> & SendAppCreateTransactionResult>\n | Expand<{ operationPerformed: 'update' } & AppMetadata & SendAppUpdateTransactionResult>\n | Expand<\n { operationPerformed: 'replace' } & Omit<AppMetadata, 'appId' | 'appAddress'> &\n SendAppCreateTransactionResult & {\n deleteReturn?: ABIReturn\n deleteResult: ConfirmedTransactionResult\n }\n >\n | Expand<{ operationPerformed: 'nothing' } & AppMetadata>\n\n/** Allows management of deployment and deployment metadata of applications. */\nexport class AppDeployer {\n private _appManager: AppManager\n private _transactionSender: AlgorandClientTransactionSender\n private _indexer?: algosdk.Indexer\n private _appLookups = new Map<string, AppLookup>()\n\n /**\n * Creates an `AppManager`\n * @param appManager An `AppManager` instance\n * @param transactionSender An `AlgorandClientTransactionSender` instance\n * @param indexer An optional indexer instance; supply if you want to indexer to look up app metadata\n */\n constructor(appManager: AppManager, transactionSender: AlgorandClientTransactionSender, indexer?: algosdk.Indexer) {\n this._appManager = appManager\n this._transactionSender = transactionSender\n this._indexer = indexer\n }\n\n /**\n * Idempotently deploy (create if not exists, update if changed) an app against the given name for the given creator account, including deploy-time TEAL template placeholder substitutions (if specified).\n *\n * To understand the architecture decisions behind this functionality please see https://github.com/algorandfoundation/algokit-cli/blob/main/docs/architecture-decisions/2023-01-12_smart-contract-deployment.md\n *\n * **Note:** When using the return from this function be sure to check `operationPerformed` to get access to various return properties like `transaction`, `confirmation` and `deleteResult`.\n *\n * **Note:** if there is a breaking state schema change to an existing app (and `onSchemaBreak` is set to `'replace'`) the existing app will be deleted and re-created.\n *\n * **Note:** if there is an update (different TEAL code) to an existing app (and `onUpdate` is set to `'replace'`) the existing app will be deleted and re-created.\n * @param deployment The arguments to control the app deployment\n * @returns The app reference of the new/existing app\n */\n async deploy(deployment: AppDeployParams): Promise<AppDeployResult> {\n const {\n metadata,\n deployTimeParams,\n onSchemaBreak,\n onUpdate,\n createParams,\n updateParams,\n deleteParams,\n existingDeployments,\n ignoreCache,\n ...executeParams\n } = deployment\n\n // Set creation note\n\n createParams.note = updateParams.note = AlgoKitComposer.arc2Note({\n dAppName: APP_DEPLOY_NOTE_DAPP,\n data: metadata,\n format: 'j',\n })\n\n // Check for required fields\n\n if (existingDeployments && existingDeployments.creator !== createParams.sender) {\n throw new Error(\n `Received invalid existingDeployments value for creator ${existingDeployments.creator} when attempting to deploy for creator ${createParams.sender}`,\n )\n }\n if (!existingDeployments && !this._indexer) {\n throw new Error(\n `Didn't receive an indexer client when this AppManager was created, but also didn't receive an existingDeployments cache - one of them must be provided`,\n )\n }\n\n Config.getLogger(executeParams?.suppressLog).info(\n `Idempotently deploying app \"${metadata.name}\" from creator ${createParams.sender} using ${createParams.approvalProgram.length} bytes of ${typeof createParams.approvalProgram === 'string' ? 'teal code' : 'AVM bytecode'} and ${createParams.clearStateProgram.length} bytes of ${typeof createParams.approvalProgram === 'string' ? 'teal code' : 'AVM bytecode'}`,\n )\n\n // Compile code if required\n\n const compiledApproval =\n typeof createParams.approvalProgram === 'string'\n ? await this._appManager.compileTealTemplate(createParams.approvalProgram, deployTimeParams, metadata)\n : undefined\n const approvalProgram = compiledApproval ? compiledApproval.compiledBase64ToBytes : createParams.approvalProgram\n\n const compiledClear =\n typeof createParams.clearStateProgram === 'string'\n ? await this._appManager.compileTealTemplate(createParams.clearStateProgram, deployTimeParams)\n : undefined\n const clearStateProgram = compiledClear ? compiledClear.compiledBase64ToBytes : createParams.clearStateProgram\n\n // Define routines for create, update, and replace\n\n const createApp = async () => {\n const result = await ('method' in createParams\n ? this._transactionSender.appCreateMethodCall({ ...createParams, approvalProgram, clearStateProgram, ...executeParams })\n : this._transactionSender.appCreate({ ...createParams, approvalProgram, clearStateProgram, ...executeParams }))\n const appMetadata: AppMetadata = {\n appId: result.appId,\n appAddress: result.appAddress,\n ...metadata,\n createdMetadata: metadata,\n createdRound: BigInt(result.confirmation.confirmedRound!),\n updatedRound: BigInt(result.confirmation.confirmedRound!),\n deleted: false,\n }\n this.updateAppLookup(createParams.sender, appMetadata)\n return {\n operationPerformed: 'create',\n compiledApproval,\n compiledClear,\n ...result,\n ...appMetadata,\n } satisfies SendAppCreateTransactionResult & AppMetadata & { operationPerformed: 'create' }\n }\n const updateApp = async (existingApp: AppMetadata) => {\n Config.getLogger(executeParams?.suppressLog).info(\n `Updating existing ${metadata.name} app for ${createParams.sender} to version ${metadata.version}.`,\n )\n const result = await ('method' in updateParams\n ? this._transactionSender.appUpdateMethodCall({\n appId: existingApp.appId,\n approvalProgram,\n clearStateProgram,\n ...updateParams,\n ...executeParams,\n })\n : this._transactionSender.appUpdate({\n appId: existingApp.appId,\n approvalProgram,\n clearStateProgram,\n ...updateParams,\n ...executeParams,\n }))\n const appMetadata: AppMetadata = {\n appId: existingApp.appId,\n appAddress: existingApp.appAddress,\n createdMetadata: existingApp.createdMetadata,\n createdRound: existingApp.createdRound,\n updatedRound: BigInt(result.confirmation.confirmedRound!),\n ...metadata,\n deleted: false,\n }\n this.updateAppLookup(createParams.sender, appMetadata)\n return {\n operationPerformed: 'update',\n compiledApproval,\n compiledClear,\n ...result,\n ...appMetadata,\n } satisfies SendAppUpdateTransactionResult & AppMetadata & { operationPerformed: 'update' }\n }\n const replaceApp = async (existingApp: AppMetadata) => {\n Config.getLogger(executeParams?.suppressLog).info(\n `Deploying a new ${metadata.name} app for ${createParams.sender}; deploying app with version ${metadata.version}.`,\n )\n\n Config.getLogger(executeParams?.suppressLog).warn(\n `Deleting existing ${metadata.name} app with id ${existingApp.appId} from ${deleteParams.sender} account.`,\n )\n\n const composer = this._transactionSender.newGroup()\n if ('method' in createParams) {\n composer.addAppCreateMethodCall({ ...createParams, approvalProgram, clearStateProgram })\n } else {\n composer.addAppCreate({ ...createParams, approvalProgram, clearStateProgram })\n }\n const createIndex = await composer.count()\n if ('method' in deleteParams) {\n composer.addAppDeleteMethodCall({ appId: existingApp.appId, ...deleteParams })\n } else {\n composer.addAppDelete({ appId: existingApp.appId, ...deleteParams })\n }\n const result = await composer.execute({ ...executeParams, suppressLog: true })\n const confirmation = result.confirmations.at(createIndex - 1)!\n const transaction = result.transactions.at(createIndex - 1)!\n const deleteTransaction = result.transactions.at(-1)!\n\n Config.getLogger(executeParams?.suppressLog).warn(\n `Sent transactions ${transaction.txID()} to create app with id ${confirmation.applicationIndex} and ${deleteTransaction.txID()} to delete app with id ${\n existingApp.appId\n } from ${createParams.sender} account.`,\n )\n\n const appMetadata: AppMetadata = {\n appId: BigInt(confirmation.applicationIndex!),\n appAddress: algosdk.getApplicationAddress(confirmation.applicationIndex!),\n ...metadata,\n createdMetadata: metadata,\n createdRound: BigInt(confirmation.confirmedRound!),\n updatedRound: BigInt(confirmation.confirmedRound!),\n deleted: false,\n }\n this.updateAppLookup(createParams.sender, appMetadata)\n\n return {\n operationPerformed: 'replace',\n ...result,\n compiledApproval,\n compiledClear,\n transaction,\n confirmation,\n return: 'method' in createParams ? result.returns?.[0] : undefined,\n deleteReturn: 'method' in deleteParams ? result.returns?.at(-1) : undefined,\n ...appMetadata,\n deleteResult: { transaction: deleteTransaction, confirmation: result.confirmations.at(-1)! },\n } satisfies { operationPerformed: 'replace' } & AppMetadata &\n SendAppCreateTransactionResult & {\n deleteReturn?: ABIReturn\n deleteResult: ConfirmedTransactionResult\n }\n }\n\n // Lookup existing app metadata\n\n const apps = existingDeployments ?? (await this.getCreatorAppsByName(createParams.sender, ignoreCache))\n\n const existingApp = apps.apps[metadata.name]\n if (!existingApp || existingApp.deleted) {\n Config.getLogger(executeParams?.suppressLog).info(\n `App ${metadata.name} not found in apps created by ${createParams.sender}; deploying app with version ${metadata.version}.`,\n )\n\n return await createApp()\n }\n\n Config.getLogger(executeParams?.suppressLog).info(\n `Existing app ${metadata.name} found by creator ${createParams.sender}, with app id ${existingApp.appId} and version ${existingApp.version}.`,\n )\n\n const existingAppRecord = await this._appManager.getById(existingApp.appId)\n const existingApproval = Buffer.from(existingAppRecord.approvalProgram).toString('base64')\n const existingClear = Buffer.from(existingAppRecord.clearStateProgram).toString('base64')\n\n const newApproval = Buffer.from(approvalProgram).toString('base64')\n const newClear = Buffer.from(clearStateProgram).toString('base64')\n\n // Check for changes\n\n const isUpdate = newApproval !== existingApproval || newClear !== existingClear\n const isSchemaBreak =\n existingAppRecord.localInts < (createParams.schema?.localInts ?? 0) ||\n existingAppRecord.globalInts < (createParams.schema?.globalInts ?? 0) ||\n existingAppRecord.localByteSlices < (createParams.schema?.localByteSlices ?? 0) ||\n existingAppRecord.globalByteSlices < (createParams.schema?.globalByteSlices ?? 0)\n\n if (isSchemaBreak) {\n Config.getLogger(executeParams?.suppressLog).warn(`Detected a breaking app schema change in app ${existingApp.appId}:`, {\n from: {\n globalInts: existingAppRecord.globalInts,\n globalByteSlices: existingAppRecord.globalByteSlices,\n localInts: existingAppRecord.localInts,\n localByteSlices: existingAppRecord.localByteSlices,\n },\n to: createParams.schema,\n })\n\n if (onSchemaBreak === undefined || onSchemaBreak === 'fail' || onSchemaBreak === OnSchemaBreak.Fail) {\n throw new Error(\n 'Schema break detected and onSchemaBreak=OnSchemaBreak.Fail, stopping deployment. ' +\n 'If you want to try deleting and recreating the app then ' +\n 're-run with onSchemaBreak=OnSchemaBreak.ReplaceApp',\n )\n }\n\n if (onSchemaBreak === 'append' || onSchemaBreak === OnSchemaBreak.AppendApp) {\n Config.getLogger(executeParams?.suppressLog).info('onSchemaBreak=AppendApp, will attempt to create a new app')\n return await createApp()\n }\n\n if (existingApp.deletable) {\n Config.getLogger(executeParams?.suppressLog).info(\n 'App is deletable and onSchemaBreak=ReplaceApp, will attempt to create new app and delete old app',\n )\n } else {\n Config.getLogger(executeParams?.suppressLog).info(\n 'App is not deletable but onSchemaBreak=ReplaceApp, will attempt to delete app, delete will most likely fail',\n )\n }\n\n return await replaceApp(existingApp)\n }\n\n if (isUpdate) {\n Config.getLogger(executeParams?.suppressLog).info(\n `Detected a TEAL update in app ${existingApp.appId} for creator ${createParams.sender}`,\n )\n\n if (onUpdate === undefined || onUpdate === 'fail' || onUpdate === OnUpdate.Fail) {\n throw new Error('Update detected and onUpdate=Fail, stopping deployment. Try a different onUpdate value to not fail.')\n }\n\n if (onUpdate === 'append' || onUpdate === OnUpdate.AppendApp) {\n Config.getLogger(executeParams?.suppressLog).info('onUpdate=AppendApp, will attempt to create a new app')\n return await createApp()\n }\n\n if (onUpdate === 'update' || onUpdate === OnUpdate.UpdateApp) {\n if (existingApp.updatable) {\n Config.getLogger(executeParams?.suppressLog).info(`App is updatable and onUpdate=UpdateApp, updating app...`)\n } else {\n Config.getLogger(executeParams?.suppressLog).warn(\n `App is not updatable but onUpdate=UpdateApp, will attempt to update app, update will most likely fail`,\n )\n }\n\n return await updateApp(existingApp)\n }\n\n if (onUpdate === 'replace' || onUpdate === OnUpdate.ReplaceApp) {\n if (existingApp.deletable) {\n Config.getLogger(executeParams?.suppressLog).warn(\n 'App is deletable and onUpdate=ReplaceApp, creating new app and deleting old app...',\n )\n } else {\n Config.getLogger(executeParams?.suppressLog).warn(\n 'App is not deletable and onUpdate=ReplaceApp, will attempt to create new app and delete old app, delete will most likely fail',\n )\n }\n\n return await replaceApp(existingApp)\n }\n }\n\n Config.getLogger(executeParams?.suppressLog).debug('No detected changes in app, nothing to do.')\n\n return { ...existingApp, operationPerformed: 'nothing' }\n }\n\n private updateAppLookup(sender: string, appMetadata: AppMetadata) {\n const lookup = this._appLookups.get(sender)\n if (!lookup) {\n this._appLookups.set(sender, { creator: sender, apps: { [appMetadata.name]: appMetadata } })\n } else {\n lookup.apps[appMetadata.name] = appMetadata\n }\n }\n\n /**\n * Returns a lookup of name => app metadata (id, address, ...metadata) for all apps created by the given account that have\n * an [ARC-2](https://github.com/algorandfoundation/ARCs/blob/main/ARCs/arc-0002.md) `AppDeployNote` as the transaction\n * note of the app creation transaction.\n *\n * This function caches the result for the given creator account so that subsequent calls will not require an indexer lookup.\n *\n * If the `AppManager` instance wasn't created with an indexer client, this function will throw an error.\n *\n * @param creatorAddress The address of the account that is the creator of the apps you want to search for\n * @param ignoreCache Whether or not to ignore the cache and force a lookup, default: use the cache\n * @returns A name-based lookup of the app metadata\n */\n async getCreatorAppsByName(creatorAddress: string, ignoreCache?: boolean): Promise<AppLookup> {\n const appLookup: Record<string, AppMetadata> = {}\n\n if (!ignoreCache && this._appLookups.has(creatorAddress)) {\n return this._appLookups.get(creatorAddress)!\n }\n\n if (!this._indexer) {\n throw new Error(`Didn't receive an indexer client when this AppManager was created, but received a call to getCreatorApps`)\n }\n\n // Extract all apps that account created\n const createdApps = (await indexer.lookupAccountCreatedApplicationByAddress(this._indexer, creatorAddress))\n .map((a) => {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return { id: BigInt(a.id), createdAtRound: a['created-at-round']!, deleted: a.deleted }\n })\n .sort((a, b) => a.createdAtRound - b.createdAtRound)\n\n // For each app that account created (in parallel)...\n const apps = await Promise.all(\n createdApps.map(async (createdApp) => {\n // Find any app transactions for that app in the round it was created (should always just be a single creation transaction)\n const appTransactions = await indexer.searchTransactions(this._indexer!, (s) =>\n s\n .minRound(createdApp.createdAtRound)\n .txType(algosdk.TransactionType.appl)\n .applicationID(Number(createdApp.id))\n .address(creatorAddress)\n .addressRole('sender')\n .notePrefix(Buffer.from(APP_DEPLOY_NOTE_DAPP).toString('base64')),\n )\n\n // Triple check the transaction is intact by filtering for the one we want:\n // * application-id is 0 when the app is first created\n // * also verify the sender to prevent a potential security risk\n const appCreationTransaction = appTransactions.transactions.filter(\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n (t) => t['application-transaction']!['application-id'] === 0 && t.sender === creatorAddress,\n )[0]\n\n const latestAppUpdateTransaction = appTransactions.transactions\n .filter((t) => t.sender === creatorAddress)\n .sort((a, b) =>\n a['confirmed-round'] === b['confirmed-round']\n ? // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n (b['intra-round-offset']! - a['intra-round-offset']!) / 10\n : // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n b['confirmed-round']! - a['confirmed-round']!,\n )[0]\n\n if (!appCreationTransaction?.note)\n // No note; ignoring\n return null\n\n return { createdApp, appCreationTransaction, latestAppUpdateTransaction }\n }),\n )\n\n apps\n .filter((a) => a !== null)\n .forEach((a) => {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const { createdApp, appCreationTransaction, latestAppUpdateTransaction } = a!\n\n const parseNote = (note?: string) => {\n if (!note) {\n // No note; ignoring...\n return\n }\n\n const decoder = new TextDecoder()\n const noteAsBase64 = decoder.decode(Buffer.from(note))\n const noteAsString = Buffer.from(noteAsBase64, 'base64').toString('utf-8')\n\n if (!noteAsString.startsWith(`${APP_DEPLOY_NOTE_DAPP}:j{`))\n // Clearly not APP_DEPLOY JSON; ignoring...\n return\n\n return JSON.parse(noteAsString.substring(APP_DEPLOY_NOTE_DAPP.length + 2)) as AppDeployMetadata\n }\n\n try {\n const creationNote = parseNote(appCreationTransaction.note)\n const updateNote = parseNote(latestAppUpdateTransaction.note)\n if (creationNote?.name) {\n appLookup[creationNote.name] = {\n appId: createdApp.id,\n appAddress: algosdk.getApplicationAddress(createdApp.id),\n createdMetadata: creationNote,\n createdRound: BigInt(appCreationTransaction['confirmed-round'] ?? 0),\n ...(updateNote ?? creationNote),\n updatedRound: BigInt(latestAppUpdateTransaction?.['confirmed-round'] ?? 0),\n deleted: createdApp.deleted ?? false,\n }\n }\n } catch (e) {\n Config.logger.warn(\n `Received error trying to retrieve app with ${createdApp.id} for creator ${creatorAddress}; failing silently`,\n e,\n )\n return\n }\n })\n\n const lookup = {\n creator: creatorAddress,\n apps: appLookup,\n }\n\n this._appLookups.set(creatorAddress, lookup)\n\n return lookup\n }\n}\n"],"names":["indexer.lookupAccountCreatedApplicationByAddress","indexer.searchTransactions"],"mappings":"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"}
1
+ {"version":3,"file":"app-deployer.mjs","sources":["../../src/types/app-deployer.ts"],"sourcesContent":["import algosdk from 'algosdk'\nimport { Config } from '../config'\nimport * as indexer from '../indexer-lookup'\nimport { AlgorandClientTransactionSender } from './algorand-client-transaction-sender'\nimport {\n APP_DEPLOY_NOTE_DAPP,\n OnSchemaBreak,\n OnUpdate,\n type ABIReturn,\n type AppDeployMetadata,\n type SendAppCreateTransactionResult,\n type SendAppUpdateTransactionResult,\n type TealTemplateParams,\n} from './app'\nimport { AppManager } from './app-manager'\nimport AlgoKitComposer, {\n AppCreateMethodCall,\n AppCreateParams,\n AppDeleteMethodCall,\n AppDeleteParams,\n AppUpdateMethodCall,\n AppUpdateParams,\n} from './composer'\nimport { Expand } from './expand'\nimport { ConfirmedTransactionResult, SendParams } from './transaction'\n\n/** Params to specify an update transaction for an app deployment */\nexport type DeployAppUpdateParams = Expand<Omit<AppUpdateParams, 'appId' | 'approvalProgram' | 'clearStateProgram'>>\n/** Params to specify an update method call for an app deployment */\nexport type DeployAppUpdateMethodCall = Expand<Omit<AppUpdateMethodCall, 'appId' | 'approvalProgram' | 'clearStateProgram'>>\n/** Params to specify a transaction for an app deployment */\nexport type DeployAppDeleteParams = Expand<Omit<AppDeleteParams, 'appId'>>\n/** Params to specify a delete method call for an app deployment */\nexport type DeployAppDeleteMethodCall = Expand<Omit<AppDeleteMethodCall, 'appId'>>\n\n/** The parameters to idempotently deploy an app */\nexport type AppDeployParams = Expand<\n SendParams & {\n /** The deployment metadata */\n metadata: AppDeployMetadata\n /** Any deploy-time parameters to replace in the TEAL code before compiling it (used if teal code is passed in as a string) */\n deployTimeParams?: TealTemplateParams\n /** What action to perform if a schema break (storage schema or extra pages change) is detected:\n *\n * * `fail` - Fail the deployment (throw an error, **default**)\n * * `replace` - Delete the old app and create a new one\n * * `append` - Deploy a new app and leave the old one as is\n */\n onSchemaBreak?: 'replace' | 'fail' | 'append' | OnSchemaBreak\n /** What action to perform if a TEAL code update is detected:\n *\n * * `fail` - Fail the deployment (throw an error, **default**)\n * * `update` - Update the app with the new TEAL code\n * * `replace` - Delete the old app and create a new one\n * * `append` - Deploy a new app and leave the old one as is\n */\n onUpdate?: 'update' | 'replace' | 'fail' | 'append' | OnUpdate\n /** Create transaction parameters to use if a create needs to be issued as part of deployment */\n createParams: AppCreateParams | AppCreateMethodCall\n /** Update transaction parameters to use if an update needs to be issued as part of deployment */\n updateParams: DeployAppUpdateParams | DeployAppUpdateMethodCall\n /** Delete transaction parameters to use if a delete needs to be issued as part of deployment */\n deleteParams: DeployAppDeleteParams | DeployAppDeleteMethodCall\n /** Optional cached value of the existing apps for the given creator; use this to avoid an indexer lookup */\n existingDeployments?: AppLookup\n /** Whether or not to ignore the app metadata cache and force a lookup, default: use the cache **/\n ignoreCache?: boolean\n }\n>\n\n/** The metadata that can be collected about a deployed app */\nexport interface AppMetadata extends AppDeployMetadata {\n /** The id of the app */\n appId: bigint\n /** The Algorand address of the account associated with the app */\n appAddress: string\n /** The round the app was created */\n createdRound: bigint\n /** The last round that the app was updated */\n updatedRound: bigint\n /** The metadata when the app was created */\n createdMetadata: AppDeployMetadata\n /** Whether or not the app is deleted */\n deleted: boolean\n}\n\n/** A lookup of name -> Algorand app for a creator */\nexport interface AppLookup {\n /** The address of the creator associated with this lookup */\n creator: Readonly<string>\n /** A hash map of app name to app metadata */\n apps: {\n [name: string]: AppMetadata\n }\n}\n\nexport type AppDeployResult =\n | Expand<{ operationPerformed: 'create' } & Omit<AppMetadata, 'appId' | 'appAddress'> & SendAppCreateTransactionResult>\n | Expand<{ operationPerformed: 'update' } & AppMetadata & SendAppUpdateTransactionResult>\n | Expand<\n { operationPerformed: 'replace' } & Omit<AppMetadata, 'appId' | 'appAddress'> &\n SendAppCreateTransactionResult & {\n deleteReturn?: ABIReturn\n deleteResult: ConfirmedTransactionResult\n }\n >\n | Expand<{ operationPerformed: 'nothing' } & AppMetadata>\n\n/** Allows management of deployment and deployment metadata of applications. */\nexport class AppDeployer {\n private _appManager: AppManager\n private _transactionSender: AlgorandClientTransactionSender\n private _indexer?: algosdk.Indexer\n private _appLookups = new Map<string, AppLookup>()\n\n /**\n * Creates an `AppManager`\n * @param appManager An `AppManager` instance\n * @param transactionSender An `AlgorandClientTransactionSender` instance\n * @param indexer An optional indexer instance; supply if you want to indexer to look up app metadata\n */\n constructor(appManager: AppManager, transactionSender: AlgorandClientTransactionSender, indexer?: algosdk.Indexer) {\n this._appManager = appManager\n this._transactionSender = transactionSender\n this._indexer = indexer\n }\n\n /**\n * Idempotently deploy (create if not exists, update if changed) an app against the given name for the given creator account, including deploy-time TEAL template placeholder substitutions (if specified).\n *\n * To understand the architecture decisions behind this functionality please see https://github.com/algorandfoundation/algokit-cli/blob/main/docs/architecture-decisions/2023-01-12_smart-contract-deployment.md\n *\n * **Note:** When using the return from this function be sure to check `operationPerformed` to get access to various return properties like `transaction`, `confirmation` and `deleteResult`.\n *\n * **Note:** if there is a breaking state schema change to an existing app (and `onSchemaBreak` is set to `'replace'`) the existing app will be deleted and re-created.\n *\n * **Note:** if there is an update (different TEAL code) to an existing app (and `onUpdate` is set to `'replace'`) the existing app will be deleted and re-created.\n * @param deployment The arguments to control the app deployment\n * @returns The app reference of the new/existing app\n */\n async deploy(deployment: AppDeployParams): Promise<AppDeployResult> {\n const {\n metadata,\n deployTimeParams,\n onSchemaBreak,\n onUpdate,\n createParams,\n updateParams,\n deleteParams,\n existingDeployments,\n ignoreCache,\n ...sendParams\n } = deployment\n\n // Set creation note\n\n createParams.note = updateParams.note = AlgoKitComposer.arc2Note({\n dAppName: APP_DEPLOY_NOTE_DAPP,\n data: metadata,\n format: 'j',\n })\n\n // Check for required fields\n\n if (existingDeployments && existingDeployments.creator !== createParams.sender) {\n throw new Error(\n `Received invalid existingDeployments value for creator ${existingDeployments.creator} when attempting to deploy for creator ${createParams.sender}`,\n )\n }\n if (!existingDeployments && !this._indexer) {\n throw new Error(\n `Didn't receive an indexer client when this AppManager was created, but also didn't receive an existingDeployments cache - one of them must be provided`,\n )\n }\n\n Config.getLogger(sendParams?.suppressLog).info(\n `Idempotently deploying app \"${metadata.name}\" from creator ${createParams.sender} using ${createParams.approvalProgram.length} bytes of ${typeof createParams.approvalProgram === 'string' ? 'teal code' : 'AVM bytecode'} and ${createParams.clearStateProgram.length} bytes of ${typeof createParams.approvalProgram === 'string' ? 'teal code' : 'AVM bytecode'}`,\n )\n\n // Compile code if required\n\n const compiledApproval =\n typeof createParams.approvalProgram === 'string'\n ? await this._appManager.compileTealTemplate(createParams.approvalProgram, deployTimeParams, metadata)\n : undefined\n const approvalProgram = compiledApproval ? compiledApproval.compiledBase64ToBytes : createParams.approvalProgram\n\n const compiledClear =\n typeof createParams.clearStateProgram === 'string'\n ? await this._appManager.compileTealTemplate(createParams.clearStateProgram, deployTimeParams)\n : undefined\n const clearStateProgram = compiledClear ? compiledClear.compiledBase64ToBytes : createParams.clearStateProgram\n\n // Define routines for create, update, and replace\n\n const createApp = async () => {\n const result = await ('method' in createParams\n ? this._transactionSender.appCreateMethodCall({ ...createParams, approvalProgram, clearStateProgram, ...sendParams })\n : this._transactionSender.appCreate({ ...createParams, approvalProgram, clearStateProgram, ...sendParams }))\n const appMetadata: AppMetadata = {\n appId: result.appId,\n appAddress: result.appAddress,\n ...metadata,\n createdMetadata: metadata,\n createdRound: BigInt(result.confirmation.confirmedRound!),\n updatedRound: BigInt(result.confirmation.confirmedRound!),\n deleted: false,\n }\n this.updateAppLookup(createParams.sender, appMetadata)\n return {\n operationPerformed: 'create',\n compiledApproval,\n compiledClear,\n ...result,\n ...appMetadata,\n } satisfies SendAppCreateTransactionResult & AppMetadata & { operationPerformed: 'create' }\n }\n const updateApp = async (existingApp: AppMetadata) => {\n Config.getLogger(sendParams?.suppressLog).info(\n `Updating existing ${metadata.name} app for ${createParams.sender} to version ${metadata.version}.`,\n )\n const result = await ('method' in updateParams\n ? this._transactionSender.appUpdateMethodCall({\n appId: existingApp.appId,\n approvalProgram,\n clearStateProgram,\n ...updateParams,\n ...sendParams,\n })\n : this._transactionSender.appUpdate({\n appId: existingApp.appId,\n approvalProgram,\n clearStateProgram,\n ...updateParams,\n ...sendParams,\n }))\n const appMetadata: AppMetadata = {\n appId: existingApp.appId,\n appAddress: existingApp.appAddress,\n createdMetadata: existingApp.createdMetadata,\n createdRound: existingApp.createdRound,\n updatedRound: BigInt(result.confirmation.confirmedRound!),\n ...metadata,\n deleted: false,\n }\n this.updateAppLookup(createParams.sender, appMetadata)\n return {\n operationPerformed: 'update',\n compiledApproval,\n compiledClear,\n ...result,\n ...appMetadata,\n } satisfies SendAppUpdateTransactionResult & AppMetadata & { operationPerformed: 'update' }\n }\n const replaceApp = async (existingApp: AppMetadata) => {\n Config.getLogger(sendParams?.suppressLog).info(\n `Deploying a new ${metadata.name} app for ${createParams.sender}; deploying app with version ${metadata.version}.`,\n )\n\n Config.getLogger(sendParams?.suppressLog).warn(\n `Deleting existing ${metadata.name} app with id ${existingApp.appId} from ${deleteParams.sender} account.`,\n )\n\n const composer = this._transactionSender.newGroup()\n if ('method' in createParams) {\n composer.addAppCreateMethodCall({ ...createParams, approvalProgram, clearStateProgram })\n } else {\n composer.addAppCreate({ ...createParams, approvalProgram, clearStateProgram })\n }\n const createIndex = await composer.count()\n if ('method' in deleteParams) {\n composer.addAppDeleteMethodCall({ appId: existingApp.appId, ...deleteParams })\n } else {\n composer.addAppDelete({ appId: existingApp.appId, ...deleteParams })\n }\n const result = await composer.send({ ...sendParams, suppressLog: true })\n const confirmation = result.confirmations.at(createIndex - 1)!\n const transaction = result.transactions.at(createIndex - 1)!\n const deleteTransaction = result.transactions.at(-1)!\n\n Config.getLogger(sendParams?.suppressLog).warn(\n `Sent transactions ${transaction.txID()} to create app with id ${confirmation.applicationIndex} and ${deleteTransaction.txID()} to delete app with id ${\n existingApp.appId\n } from ${createParams.sender} account.`,\n )\n\n const appMetadata: AppMetadata = {\n appId: BigInt(confirmation.applicationIndex!),\n appAddress: algosdk.getApplicationAddress(confirmation.applicationIndex!),\n ...metadata,\n createdMetadata: metadata,\n createdRound: BigInt(confirmation.confirmedRound!),\n updatedRound: BigInt(confirmation.confirmedRound!),\n deleted: false,\n }\n this.updateAppLookup(createParams.sender, appMetadata)\n\n return {\n operationPerformed: 'replace',\n ...result,\n compiledApproval,\n compiledClear,\n transaction,\n confirmation,\n return: 'method' in createParams ? result.returns?.[0] : undefined,\n deleteReturn: 'method' in deleteParams ? result.returns?.at(-1) : undefined,\n ...appMetadata,\n deleteResult: { transaction: deleteTransaction, confirmation: result.confirmations.at(-1)! },\n } satisfies { operationPerformed: 'replace' } & AppMetadata &\n SendAppCreateTransactionResult & {\n deleteReturn?: ABIReturn\n deleteResult: ConfirmedTransactionResult\n }\n }\n\n // Lookup existing app metadata\n\n const apps = existingDeployments ?? (await this.getCreatorAppsByName(createParams.sender, ignoreCache))\n\n const existingApp = apps.apps[metadata.name]\n if (!existingApp || existingApp.deleted) {\n Config.getLogger(sendParams?.suppressLog).info(\n `App ${metadata.name} not found in apps created by ${createParams.sender}; deploying app with version ${metadata.version}.`,\n )\n\n return await createApp()\n }\n\n Config.getLogger(sendParams?.suppressLog).info(\n `Existing app ${metadata.name} found by creator ${createParams.sender}, with app id ${existingApp.appId} and version ${existingApp.version}.`,\n )\n\n const existingAppRecord = await this._appManager.getById(existingApp.appId)\n const existingApproval = Buffer.from(existingAppRecord.approvalProgram).toString('base64')\n const existingClear = Buffer.from(existingAppRecord.clearStateProgram).toString('base64')\n\n const newApproval = Buffer.from(approvalProgram).toString('base64')\n const newClear = Buffer.from(clearStateProgram).toString('base64')\n\n // Check for changes\n\n const isUpdate = newApproval !== existingApproval || newClear !== existingClear\n const isSchemaBreak =\n existingAppRecord.localInts < (createParams.schema?.localInts ?? 0) ||\n existingAppRecord.globalInts < (createParams.schema?.globalInts ?? 0) ||\n existingAppRecord.localByteSlices < (createParams.schema?.localByteSlices ?? 0) ||\n existingAppRecord.globalByteSlices < (createParams.schema?.globalByteSlices ?? 0)\n\n if (isSchemaBreak) {\n Config.getLogger(sendParams?.suppressLog).warn(`Detected a breaking app schema change in app ${existingApp.appId}:`, {\n from: {\n globalInts: existingAppRecord.globalInts,\n globalByteSlices: existingAppRecord.globalByteSlices,\n localInts: existingAppRecord.localInts,\n localByteSlices: existingAppRecord.localByteSlices,\n },\n to: createParams.schema,\n })\n\n if (onSchemaBreak === undefined || onSchemaBreak === 'fail' || onSchemaBreak === OnSchemaBreak.Fail) {\n throw new Error(\n 'Schema break detected and onSchemaBreak=OnSchemaBreak.Fail, stopping deployment. ' +\n 'If you want to try deleting and recreating the app then ' +\n 're-run with onSchemaBreak=OnSchemaBreak.ReplaceApp',\n )\n }\n\n if (onSchemaBreak === 'append' || onSchemaBreak === OnSchemaBreak.AppendApp) {\n Config.getLogger(sendParams?.suppressLog).info('onSchemaBreak=AppendApp, will attempt to create a new app')\n return await createApp()\n }\n\n if (existingApp.deletable) {\n Config.getLogger(sendParams?.suppressLog).info(\n 'App is deletable and onSchemaBreak=ReplaceApp, will attempt to create new app and delete old app',\n )\n } else {\n Config.getLogger(sendParams?.suppressLog).info(\n 'App is not deletable but onSchemaBreak=ReplaceApp, will attempt to delete app, delete will most likely fail',\n )\n }\n\n return await replaceApp(existingApp)\n }\n\n if (isUpdate) {\n Config.getLogger(sendParams?.suppressLog).info(\n `Detected a TEAL update in app ${existingApp.appId} for creator ${createParams.sender}`,\n )\n\n if (onUpdate === undefined || onUpdate === 'fail' || onUpdate === OnUpdate.Fail) {\n throw new Error('Update detected and onUpdate=Fail, stopping deployment. Try a different onUpdate value to not fail.')\n }\n\n if (onUpdate === 'append' || onUpdate === OnUpdate.AppendApp) {\n Config.getLogger(sendParams?.suppressLog).info('onUpdate=AppendApp, will attempt to create a new app')\n return await createApp()\n }\n\n if (onUpdate === 'update' || onUpdate === OnUpdate.UpdateApp) {\n if (existingApp.updatable) {\n Config.getLogger(sendParams?.suppressLog).info(`App is updatable and onUpdate=UpdateApp, updating app...`)\n } else {\n Config.getLogger(sendParams?.suppressLog).warn(\n `App is not updatable but onUpdate=UpdateApp, will attempt to update app, update will most likely fail`,\n )\n }\n\n return await updateApp(existingApp)\n }\n\n if (onUpdate === 'replace' || onUpdate === OnUpdate.ReplaceApp) {\n if (existingApp.deletable) {\n Config.getLogger(sendParams?.suppressLog).warn(\n 'App is deletable and onUpdate=ReplaceApp, creating new app and deleting old app...',\n )\n } else {\n Config.getLogger(sendParams?.suppressLog).warn(\n 'App is not deletable and onUpdate=ReplaceApp, will attempt to create new app and delete old app, delete will most likely fail',\n )\n }\n\n return await replaceApp(existingApp)\n }\n }\n\n Config.getLogger(sendParams?.suppressLog).debug('No detected changes in app, nothing to do.')\n\n return { ...existingApp, operationPerformed: 'nothing' }\n }\n\n private updateAppLookup(sender: string, appMetadata: AppMetadata) {\n const lookup = this._appLookups.get(sender)\n if (!lookup) {\n this._appLookups.set(sender, { creator: sender, apps: { [appMetadata.name]: appMetadata } })\n } else {\n lookup.apps[appMetadata.name] = appMetadata\n }\n }\n\n /**\n * Returns a lookup of name => app metadata (id, address, ...metadata) for all apps created by the given account that have\n * an [ARC-2](https://github.com/algorandfoundation/ARCs/blob/main/ARCs/arc-0002.md) `AppDeployNote` as the transaction\n * note of the app creation transaction.\n *\n * This function caches the result for the given creator account so that subsequent calls will not require an indexer lookup.\n *\n * If the `AppManager` instance wasn't created with an indexer client, this function will throw an error.\n *\n * @param creatorAddress The address of the account that is the creator of the apps you want to search for\n * @param ignoreCache Whether or not to ignore the cache and force a lookup, default: use the cache\n * @returns A name-based lookup of the app metadata\n */\n async getCreatorAppsByName(creatorAddress: string, ignoreCache?: boolean): Promise<AppLookup> {\n const appLookup: Record<string, AppMetadata> = {}\n\n if (!ignoreCache && this._appLookups.has(creatorAddress)) {\n return this._appLookups.get(creatorAddress)!\n }\n\n if (!this._indexer) {\n throw new Error(`Didn't receive an indexer client when this AppManager was created, but received a call to getCreatorApps`)\n }\n\n // Extract all apps that account created\n const createdApps = (await indexer.lookupAccountCreatedApplicationByAddress(this._indexer, creatorAddress))\n .map((a) => {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return { id: BigInt(a.id), createdAtRound: a['created-at-round']!, deleted: a.deleted }\n })\n .sort((a, b) => a.createdAtRound - b.createdAtRound)\n\n // For each app that account created (in parallel)...\n const apps = await Promise.all(\n createdApps.map(async (createdApp) => {\n // Find any app transactions for that app in the round it was created (should always just be a single creation transaction)\n const appTransactions = await indexer.searchTransactions(this._indexer!, (s) =>\n s\n .minRound(createdApp.createdAtRound)\n .txType(algosdk.TransactionType.appl)\n .applicationID(Number(createdApp.id))\n .address(creatorAddress)\n .addressRole('sender')\n .notePrefix(Buffer.from(APP_DEPLOY_NOTE_DAPP).toString('base64')),\n )\n\n // Triple check the transaction is intact by filtering for the one we want:\n // * application-id is 0 when the app is first created\n // * also verify the sender to prevent a potential security risk\n const appCreationTransaction = appTransactions.transactions.filter(\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n (t) => t['application-transaction']!['application-id'] === 0 && t.sender === creatorAddress,\n )[0]\n\n const latestAppUpdateTransaction = appTransactions.transactions\n .filter((t) => t.sender === creatorAddress)\n .sort((a, b) =>\n a['confirmed-round'] === b['confirmed-round']\n ? // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n (b['intra-round-offset']! - a['intra-round-offset']!) / 10\n : // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n b['confirmed-round']! - a['confirmed-round']!,\n )[0]\n\n if (!appCreationTransaction?.note)\n // No note; ignoring\n return null\n\n return { createdApp, appCreationTransaction, latestAppUpdateTransaction }\n }),\n )\n\n apps\n .filter((a) => a !== null)\n .forEach((a) => {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const { createdApp, appCreationTransaction, latestAppUpdateTransaction } = a!\n\n const parseNote = (note?: string) => {\n if (!note) {\n // No note; ignoring...\n return\n }\n\n const decoder = new TextDecoder()\n const noteAsBase64 = decoder.decode(Buffer.from(note))\n const noteAsString = Buffer.from(noteAsBase64, 'base64').toString('utf-8')\n\n if (!noteAsString.startsWith(`${APP_DEPLOY_NOTE_DAPP}:j{`))\n // Clearly not APP_DEPLOY JSON; ignoring...\n return\n\n return JSON.parse(noteAsString.substring(APP_DEPLOY_NOTE_DAPP.length + 2)) as AppDeployMetadata\n }\n\n try {\n const creationNote = parseNote(appCreationTransaction.note)\n const updateNote = parseNote(latestAppUpdateTransaction.note)\n if (creationNote?.name) {\n appLookup[creationNote.name] = {\n appId: createdApp.id,\n appAddress: algosdk.getApplicationAddress(createdApp.id),\n createdMetadata: creationNote,\n createdRound: BigInt(appCreationTransaction['confirmed-round'] ?? 0),\n ...(updateNote ?? creationNote),\n updatedRound: BigInt(latestAppUpdateTransaction?.['confirmed-round'] ?? 0),\n deleted: createdApp.deleted ?? false,\n }\n }\n } catch (e) {\n Config.logger.warn(\n `Received error trying to retrieve app with ${createdApp.id} for creator ${creatorAddress}; failing silently`,\n e,\n )\n return\n }\n })\n\n const lookup = {\n creator: creatorAddress,\n apps: appLookup,\n }\n\n this._appLookups.set(creatorAddress, lookup)\n\n return lookup\n }\n}\n"],"names":["indexer.lookupAccountCreatedApplicationByAddress","indexer.searchTransactions"],"mappings":"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"}
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  import algosdk from 'algosdk';
3
2
  import { AlgorandClientInterface } from './algorand-client-interface';
4
3
  import { AppReturn, SendAppTransactionResult, TealTemplateParams } from './app';
@@ -6,8 +5,9 @@ import { ABIStruct, Arc56Contract, Arc56Method } from './app-arc56';
6
5
  import { AppClient, AppClientBareCallParams, AppClientCompilationParams, AppClientMethodCallParams, AppClientParams, AppSourceMaps, ResolveAppClientByCreatorAndName } from './app-client';
7
6
  import { AppDeployParams } from './app-deployer';
8
7
  import { AppSpec } from './app-spec';
8
+ import { AppMethodCall, AppMethodCallTransactionArgument } from './composer';
9
9
  import { Expand } from './expand';
10
- import { ExecuteParams } from './transaction';
10
+ import { SendParams } from './transaction';
11
11
  import OnApplicationComplete = algosdk.OnApplicationComplete;
12
12
  import ABIValue = algosdk.ABIValue;
13
13
  /** Parameters to create an app client */
@@ -76,8 +76,14 @@ export type CreateSchema = {
76
76
  * This is immutable once the app is created. */
77
77
  extraProgramPages?: number;
78
78
  };
79
- /** Parameters to define a create call for an `AppFactory` */
80
- export type AppFactoryCreateParams = Expand<AppClientMethodCallParams & AppClientCompilationParams & CreateOnComplete & ExecuteParams & CreateSchema> | Expand<AppClientBareCallParams & AppClientCompilationParams & CreateOnComplete & ExecuteParams & CreateSchema>;
79
+ /** Params to specify a bare (raw) create call for an app */
80
+ export type AppFactoryCreateParams = Expand<AppClientBareCallParams & AppClientCompilationParams & CreateOnComplete & CreateSchema>;
81
+ /** Params to specify a create method call for an app */
82
+ export type AppFactoryCreateMethodCallParams = Expand<AppClientMethodCallParams & AppClientCompilationParams & CreateOnComplete & CreateSchema>;
83
+ /** Params to get an app client by ID from an app factory. */
84
+ export type AppFactoryAppClientParams = Expand<Omit<AppClientParams, 'algorand' | 'appSpec'>>;
85
+ /** Params to get an app client by creator address and name from an app factory. */
86
+ export type AppFactoryResolveAppClientByCreatorAndNameParams = Expand<Omit<ResolveAppClientByCreatorAndName, 'algorand' | 'appSpec'>>;
81
87
  /** Parameters to define a deployment for an `AppFactory` */
82
88
  export type AppFactoryDeployParams = Expand<Omit<AppDeployParams, 'createParams' | 'updateParams' | 'deleteParams' | 'metadata'> & {
83
89
  /** Create transaction parameters to use if a create needs to be issued as part of deployment */
@@ -115,7 +121,21 @@ export declare class AppFactory {
115
121
  private _clearSourceMap;
116
122
  private _paramsMethods;
117
123
  constructor(params: AppFactoryParams);
118
- /** Get parameters to define create and deploy related calls to the current app */
124
+ /** Get parameters to create transactions (create and deploy related calls) for the current app.
125
+ *
126
+ * A good mental model for this is that these parameters represent a deferred transaction creation.
127
+ * @example Create a transaction in the future using Algorand Client
128
+ * ```typescript
129
+ * const createAppParams = appFactory.params.create({method: 'create_method', args: [123, 'hello']})
130
+ * // ...
131
+ * await algorand.send.AppCreateMethodCall(createAppParams)
132
+ * ```
133
+ * @example Define a nested transaction as an ABI argument
134
+ * ```typescript
135
+ * const createAppParams = appFactory.params.create({method: 'create_method', args: [123, 'hello']})
136
+ * await appClient.send.call({method: 'my_method', args: [createAppParams]})
137
+ * ```
138
+ */
119
139
  get params(): {
120
140
  /** Return params for a create ABI call, including deploy-time TEAL template replacements and compilation if provided */
121
141
  create: (params: {
@@ -136,7 +156,7 @@ export declare class AppFactory {
136
156
  boxReferences?: (import("./app-manager").BoxIdentifier | import("./app-manager").BoxReference)[] | undefined;
137
157
  sender?: string | undefined;
138
158
  method: string;
139
- args?: (algosdk.ABIValue | import("./composer").AppMethodCallTransactionArgument | ABIStruct | undefined)[] | undefined;
159
+ args?: (algosdk.ABIValue | AppMethodCallTransactionArgument | ABIStruct | undefined)[] | undefined;
140
160
  deployTimeParams?: TealTemplateParams | undefined;
141
161
  updatable?: boolean | undefined;
142
162
  deletable?: boolean | undefined;
@@ -152,10 +172,10 @@ export declare class AppFactory {
152
172
  } | undefined;
153
173
  extraProgramPages?: number | undefined;
154
174
  }) => Promise<({
155
- approvalProgram: Buffer;
156
- clearStateProgram: Buffer;
157
- compiledApproval?: undefined;
158
- compiledClear?: undefined;
175
+ approvalProgram: Uint8Array;
176
+ compiledApproval: undefined;
177
+ clearStateProgram: Uint8Array;
178
+ compiledClear: undefined;
159
179
  deployTimeParams: TealTemplateParams | undefined;
160
180
  schema: {
161
181
  /** The number of integers saved in global state. */
@@ -184,7 +204,7 @@ export declare class AppFactory {
184
204
  boxReferences?: (import("./app-manager").BoxIdentifier | import("./app-manager").BoxReference)[] | undefined;
185
205
  sender?: string | undefined;
186
206
  method: string;
187
- args?: (algosdk.ABIValue | import("./composer").AppMethodCallTransactionArgument | ABIStruct | undefined)[] | undefined;
207
+ args?: (algosdk.ABIValue | AppMethodCallTransactionArgument | ABIStruct | undefined)[] | undefined;
188
208
  updatable?: boolean | undefined;
189
209
  deletable?: boolean | undefined;
190
210
  extraProgramPages?: number | undefined;
@@ -221,14 +241,14 @@ export declare class AppFactory {
221
241
  boxReferences?: (import("./app-manager").BoxIdentifier | import("./app-manager").BoxReference)[] | undefined;
222
242
  sender?: string | undefined;
223
243
  method: string;
224
- args?: (algosdk.ABIValue | import("./composer").AppMethodCallTransactionArgument | ABIStruct | undefined)[] | undefined;
244
+ args?: (algosdk.ABIValue | AppMethodCallTransactionArgument | ABIStruct | undefined)[] | undefined;
225
245
  updatable?: boolean | undefined;
226
246
  deletable?: boolean | undefined;
227
247
  extraProgramPages?: number | undefined;
228
248
  }) & {
229
249
  sender: string;
230
250
  method: Arc56Method;
231
- args: (algosdk.Transaction | algosdk.ABIValue | algosdk.TransactionWithSigner | Promise<algosdk.Transaction> | import("./composer").AppMethodCall<{
251
+ args: (algosdk.Transaction | algosdk.ABIValue | algosdk.TransactionWithSigner | Promise<algosdk.Transaction> | AppMethodCall<{
232
252
  lease?: string | Uint8Array | undefined;
233
253
  note?: string | Uint8Array | undefined;
234
254
  maxFee?: import("./amount").AlgoAmount | undefined;
@@ -255,7 +275,7 @@ export declare class AppFactory {
255
275
  localByteSlices: number;
256
276
  } | undefined;
257
277
  extraProgramPages?: number | undefined;
258
- }> | import("./composer").AppMethodCall<{
278
+ }> | AppMethodCall<{
259
279
  sender: string;
260
280
  signer?: algosdk.TransactionSigner | import("./account").TransactionSignerAccount | undefined;
261
281
  rekeyTo?: string | undefined;
@@ -276,7 +296,7 @@ export declare class AppFactory {
276
296
  boxReferences?: (import("./app-manager").BoxIdentifier | import("./app-manager").BoxReference)[] | undefined;
277
297
  approvalProgram: string | Uint8Array;
278
298
  clearStateProgram: string | Uint8Array;
279
- }> | import("./composer").AppMethodCall<import("./composer").AppMethodCallParams>)[] | undefined;
299
+ }> | AppMethodCall<import("./composer").AppMethodCallParams>)[] | undefined;
280
300
  onComplete: algosdk.OnApplicationComplete.NoOpOC | algosdk.OnApplicationComplete.OptInOC | algosdk.OnApplicationComplete.CloseOutOC | algosdk.OnApplicationComplete.UpdateApplicationOC | algosdk.OnApplicationComplete.DeleteApplicationOC;
281
301
  }>;
282
302
  /** Return params for a deployment update ABI call */
@@ -298,7 +318,7 @@ export declare class AppFactory {
298
318
  boxReferences?: (import("./app-manager").BoxIdentifier | import("./app-manager").BoxReference)[] | undefined;
299
319
  sender?: string | undefined;
300
320
  method: string;
301
- args?: (algosdk.ABIValue | import("./composer").AppMethodCallTransactionArgument | ABIStruct | undefined)[] | undefined;
321
+ args?: (algosdk.ABIValue | AppMethodCallTransactionArgument | ABIStruct | undefined)[] | undefined;
302
322
  }) => {
303
323
  lease?: string | Uint8Array | undefined;
304
324
  note?: string | Uint8Array | undefined;
@@ -317,11 +337,11 @@ export declare class AppFactory {
317
337
  boxReferences?: (import("./app-manager").BoxIdentifier | import("./app-manager").BoxReference)[] | undefined;
318
338
  sender?: string | undefined;
319
339
  method: string;
320
- args?: (algosdk.ABIValue | import("./composer").AppMethodCallTransactionArgument | ABIStruct | undefined)[] | undefined;
340
+ args?: (algosdk.ABIValue | AppMethodCallTransactionArgument | ABIStruct | undefined)[] | undefined;
321
341
  } & {
322
342
  sender: string;
323
343
  method: Arc56Method;
324
- args: (algosdk.Transaction | algosdk.ABIValue | algosdk.TransactionWithSigner | Promise<algosdk.Transaction> | import("./composer").AppMethodCall<{
344
+ args: (algosdk.Transaction | algosdk.ABIValue | algosdk.TransactionWithSigner | Promise<algosdk.Transaction> | AppMethodCall<{
325
345
  lease?: string | Uint8Array | undefined;
326
346
  note?: string | Uint8Array | undefined;
327
347
  maxFee?: import("./amount").AlgoAmount | undefined;
@@ -348,7 +368,7 @@ export declare class AppFactory {
348
368
  localByteSlices: number;
349
369
  } | undefined;
350
370
  extraProgramPages?: number | undefined;
351
- }> | import("./composer").AppMethodCall<{
371
+ }> | AppMethodCall<{
352
372
  sender: string;
353
373
  signer?: algosdk.TransactionSigner | import("./account").TransactionSignerAccount | undefined;
354
374
  rekeyTo?: string | undefined;
@@ -369,7 +389,7 @@ export declare class AppFactory {
369
389
  boxReferences?: (import("./app-manager").BoxIdentifier | import("./app-manager").BoxReference)[] | undefined;
370
390
  approvalProgram: string | Uint8Array;
371
391
  clearStateProgram: string | Uint8Array;
372
- }> | import("./composer").AppMethodCall<import("./composer").AppMethodCallParams>)[] | undefined;
392
+ }> | AppMethodCall<import("./composer").AppMethodCallParams>)[] | undefined;
373
393
  onComplete: algosdk.OnApplicationComplete.UpdateApplicationOC;
374
394
  };
375
395
  /** Return params for a deployment delete ABI call */
@@ -391,7 +411,7 @@ export declare class AppFactory {
391
411
  boxReferences?: (import("./app-manager").BoxIdentifier | import("./app-manager").BoxReference)[] | undefined;
392
412
  sender?: string | undefined;
393
413
  method: string;
394
- args?: (algosdk.ABIValue | import("./composer").AppMethodCallTransactionArgument | ABIStruct | undefined)[] | undefined;
414
+ args?: (algosdk.ABIValue | AppMethodCallTransactionArgument | ABIStruct | undefined)[] | undefined;
395
415
  }) => {
396
416
  lease?: string | Uint8Array | undefined;
397
417
  note?: string | Uint8Array | undefined;
@@ -410,11 +430,11 @@ export declare class AppFactory {
410
430
  boxReferences?: (import("./app-manager").BoxIdentifier | import("./app-manager").BoxReference)[] | undefined;
411
431
  sender?: string | undefined;
412
432
  method: string;
413
- args?: (algosdk.ABIValue | import("./composer").AppMethodCallTransactionArgument | ABIStruct | undefined)[] | undefined;
433
+ args?: (algosdk.ABIValue | AppMethodCallTransactionArgument | ABIStruct | undefined)[] | undefined;
414
434
  } & {
415
435
  sender: string;
416
436
  method: Arc56Method;
417
- args: (algosdk.Transaction | algosdk.ABIValue | algosdk.TransactionWithSigner | Promise<algosdk.Transaction> | import("./composer").AppMethodCall<{
437
+ args: (algosdk.Transaction | algosdk.ABIValue | algosdk.TransactionWithSigner | Promise<algosdk.Transaction> | AppMethodCall<{
418
438
  lease?: string | Uint8Array | undefined;
419
439
  note?: string | Uint8Array | undefined;
420
440
  maxFee?: import("./amount").AlgoAmount | undefined;
@@ -441,7 +461,7 @@ export declare class AppFactory {
441
461
  localByteSlices: number;
442
462
  } | undefined;
443
463
  extraProgramPages?: number | undefined;
444
- }> | import("./composer").AppMethodCall<{
464
+ }> | AppMethodCall<{
445
465
  sender: string;
446
466
  signer?: algosdk.TransactionSigner | import("./account").TransactionSignerAccount | undefined;
447
467
  rekeyTo?: string | undefined;
@@ -462,7 +482,7 @@ export declare class AppFactory {
462
482
  boxReferences?: (import("./app-manager").BoxIdentifier | import("./app-manager").BoxReference)[] | undefined;
463
483
  approvalProgram: string | Uint8Array;
464
484
  clearStateProgram: string | Uint8Array;
465
- }> | import("./composer").AppMethodCall<import("./composer").AppMethodCallParams>)[] | undefined;
485
+ }> | AppMethodCall<import("./composer").AppMethodCallParams>)[] | undefined;
466
486
  onComplete: algosdk.OnApplicationComplete.DeleteApplicationOC;
467
487
  };
468
488
  bare: {
@@ -500,10 +520,10 @@ export declare class AppFactory {
500
520
  } | undefined;
501
521
  extraProgramPages?: number | undefined;
502
522
  } | undefined) => Promise<({
503
- approvalProgram: Buffer;
504
- clearStateProgram: Buffer;
505
- compiledApproval?: undefined;
506
- compiledClear?: undefined;
523
+ approvalProgram: Uint8Array;
524
+ compiledApproval: undefined;
525
+ clearStateProgram: Uint8Array;
526
+ compiledClear: undefined;
507
527
  deployTimeParams: TealTemplateParams | undefined;
508
528
  schema: {
509
529
  /** The number of integers saved in global state. */
@@ -655,44 +675,68 @@ export declare class AppFactory {
655
675
  };
656
676
  };
657
677
  };
658
- /**
659
- * Creates an instance of the app and returns the result of the creation
660
- * transaction and an app client to interact with that app instance.
661
- *
662
- * Performs deploy-time TEAL template placeholder substitutions (if specified).
663
- * @param params The parameters to create the app
664
- * @returns The app client and the result of the creation transaction
665
- */
666
- create(params?: AppFactoryCreateParams): Promise<{
667
- app: AppClient;
668
- result: {
669
- compiledApproval?: import("./app").CompiledTeal | undefined;
670
- compiledClear?: import("./app").CompiledTeal | undefined;
671
- appId: bigint;
672
- groupId: string;
673
- txIds: string[];
674
- returns?: import("./app").ABIReturn[] | undefined;
675
- confirmations: algosdk.modelsv2.PendingTransactionResponse[];
676
- transactions: algosdk.Transaction[];
677
- confirmation: algosdk.modelsv2.PendingTransactionResponse;
678
- transaction: algosdk.Transaction;
679
- appAddress: string;
680
- return?: algosdk.ABIValue | ABIStruct | undefined;
681
- } | {
682
- compiledApproval?: import("./app").CompiledTeal | undefined;
683
- compiledClear?: import("./app").CompiledTeal | undefined;
684
- return: undefined;
685
- groupId: string;
686
- txIds: string[];
687
- returns?: import("./app").ABIReturn[] | undefined;
688
- confirmations: algosdk.modelsv2.PendingTransactionResponse[];
678
+ /** Create transactions for the current app */
679
+ readonly createTransaction: {
680
+ /** Create bare (raw) transactions for the current app */
681
+ bare: {
682
+ /** Create a create call transaction, including deploy-time TEAL template replacements and compilation if provided */
683
+ create: (params?: AppFactoryCreateParams) => Promise<algosdk.Transaction>;
684
+ };
685
+ /** Create a create ABI call transaction, including deploy-time TEAL template replacements and compilation if provided */
686
+ create: (params: AppFactoryCreateMethodCallParams) => Promise<{
689
687
  transactions: algosdk.Transaction[];
690
- confirmation: algosdk.modelsv2.PendingTransactionResponse;
691
- transaction: algosdk.Transaction;
692
- appId: bigint;
693
- appAddress: string;
688
+ methodCalls: Map<number, algosdk.ABIMethod>;
689
+ signers: Map<number, algosdk.TransactionSigner>;
690
+ }>;
691
+ };
692
+ /** Send transactions to the current app */
693
+ readonly send: {
694
+ /** Send bare (raw) transactions for the current app */
695
+ bare: {
696
+ create: (params?: AppFactoryCreateParams & SendParams) => Promise<{
697
+ appClient: AppClient;
698
+ result: {
699
+ compiledApproval?: import("./app").CompiledTeal | undefined;
700
+ compiledClear?: import("./app").CompiledTeal | undefined;
701
+ return: undefined;
702
+ groupId: string;
703
+ txIds: string[];
704
+ returns?: import("./app").ABIReturn[] | undefined;
705
+ confirmations: algosdk.modelsv2.PendingTransactionResponse[];
706
+ transactions: algosdk.Transaction[];
707
+ confirmation: algosdk.modelsv2.PendingTransactionResponse;
708
+ transaction: algosdk.Transaction;
709
+ appId: bigint;
710
+ appAddress: string;
711
+ };
712
+ }>;
694
713
  };
695
- }>;
714
+ /**
715
+ * Creates an instance of the app and returns the result of the creation
716
+ * transaction and an app client to interact with that app instance.
717
+ *
718
+ * Performs deploy-time TEAL template placeholder substitutions (if specified).
719
+ * @param params The parameters to create the app
720
+ * @returns The app client and the result of the creation transaction
721
+ */
722
+ create: (params: AppFactoryCreateMethodCallParams & SendParams) => Promise<{
723
+ appClient: AppClient;
724
+ result: {
725
+ compiledApproval?: import("./app").CompiledTeal | undefined;
726
+ compiledClear?: import("./app").CompiledTeal | undefined;
727
+ appId: bigint;
728
+ groupId: string;
729
+ txIds: string[];
730
+ returns?: import("./app").ABIReturn[] | undefined;
731
+ confirmations: algosdk.modelsv2.PendingTransactionResponse[];
732
+ transactions: algosdk.Transaction[];
733
+ confirmation: algosdk.modelsv2.PendingTransactionResponse;
734
+ transaction: algosdk.Transaction;
735
+ appAddress: string;
736
+ return?: algosdk.ABIValue | ABIStruct | undefined;
737
+ };
738
+ }>;
739
+ };
696
740
  /**
697
741
  * Idempotently deploy (create if not exists, update if changed) an app against the given name for the given creator account, including deploy-time TEAL template placeholder substitutions (if specified).
698
742
  *
@@ -705,14 +749,14 @@ export declare class AppFactory {
705
749
  * @returns The app client and the result of the deployment
706
750
  */
707
751
  deploy(params: AppFactoryDeployParams): Promise<{
708
- app: AppClient;
752
+ appClient: AppClient;
709
753
  result: {
710
754
  return: algosdk.ABIValue | ABIStruct | undefined;
711
755
  deleteReturn: algosdk.ABIValue | ABIStruct | undefined;
712
- approvalProgram: Buffer;
713
- clearStateProgram: Buffer;
714
- compiledApproval?: import("./app").CompiledTeal | undefined;
715
- compiledClear?: import("./app").CompiledTeal | undefined;
756
+ approvalProgram: Uint8Array;
757
+ compiledApproval: undefined;
758
+ clearStateProgram: Uint8Array;
759
+ compiledClear: undefined;
716
760
  operationPerformed: "create";
717
761
  version: string;
718
762
  name: string;
@@ -759,10 +803,10 @@ export declare class AppFactory {
759
803
  } | {
760
804
  return: algosdk.ABIValue | ABIStruct | undefined;
761
805
  deleteReturn: algosdk.ABIValue | ABIStruct | undefined;
762
- approvalProgram: Buffer;
763
- clearStateProgram: Buffer;
764
- compiledApproval?: import("./app").CompiledTeal | undefined;
765
- compiledClear?: import("./app").CompiledTeal | undefined;
806
+ approvalProgram: Uint8Array;
807
+ compiledApproval: undefined;
808
+ clearStateProgram: Uint8Array;
809
+ compiledClear: undefined;
766
810
  operationPerformed: "update";
767
811
  appId: bigint;
768
812
  appAddress: string;
@@ -809,10 +853,10 @@ export declare class AppFactory {
809
853
  } | {
810
854
  return: algosdk.ABIValue | ABIStruct | undefined;
811
855
  deleteReturn: algosdk.ABIValue | ABIStruct | undefined;
812
- approvalProgram: Buffer;
813
- clearStateProgram: Buffer;
814
- compiledApproval?: import("./app").CompiledTeal | undefined;
815
- compiledClear?: import("./app").CompiledTeal | undefined;
856
+ approvalProgram: Uint8Array;
857
+ compiledApproval: undefined;
858
+ clearStateProgram: Uint8Array;
859
+ compiledClear: undefined;
816
860
  operationPerformed: "replace";
817
861
  version: string;
818
862
  name: string;
@@ -861,10 +905,10 @@ export declare class AppFactory {
861
905
  } | {
862
906
  return: algosdk.ABIValue | ABIStruct | undefined;
863
907
  deleteReturn: algosdk.ABIValue | ABIStruct | undefined;
864
- approvalProgram: Buffer;
865
- clearStateProgram: Buffer;
866
- compiledApproval?: undefined;
867
- compiledClear?: undefined;
908
+ approvalProgram: Uint8Array;
909
+ compiledApproval: undefined;
910
+ clearStateProgram: Uint8Array;
911
+ compiledClear: undefined;
868
912
  operationPerformed: "nothing";
869
913
  appId: bigint;
870
914
  appAddress: string;
@@ -904,7 +948,7 @@ export declare class AppFactory {
904
948
  * @param params The parameters to create the app client
905
949
  * @returns The `AppClient`
906
950
  */
907
- getAppClientById(params: Expand<Omit<AppClientParams, 'algorand' | 'appSpec'>>): AppClient;
951
+ getAppClientById(params: AppFactoryAppClientParams): AppClient;
908
952
  /**
909
953
  * Returns a new `AppClient` client, resolving the app by creator address and name
910
954
  * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note).
@@ -914,7 +958,7 @@ export declare class AppFactory {
914
958
  * @param params The parameters to create the app client
915
959
  * @returns The `AppClient`
916
960
  */
917
- getAppClientByCreatorAddressAndName(params: Expand<Omit<AppClientParams, 'algorand' | 'appSpec' | 'appId'> & ResolveAppClientByCreatorAndName>): Promise<AppClient>;
961
+ getAppClientByCreatorAndName(params: AppFactoryResolveAppClientByCreatorAndNameParams): Promise<AppClient>;
918
962
  /**
919
963
  * Takes an error that may include a logic error from a call to the current app and re-exposes the
920
964
  * error to include source code information via the source map and ARC-56 spec.
@@ -946,9 +990,20 @@ export declare class AppFactory {
946
990
  *
947
991
  * Will store any generated source maps for later use in debugging.
948
992
  */
949
- private compile;
993
+ compile(compilation?: AppClientCompilationParams): Promise<{
994
+ approvalProgram: Uint8Array;
995
+ compiledApproval: undefined;
996
+ clearStateProgram: Uint8Array;
997
+ compiledClear: undefined;
998
+ } | {
999
+ approvalProgram: Uint8Array;
1000
+ compiledApproval: import("./app").CompiledTeal;
1001
+ clearStateProgram: Uint8Array;
1002
+ compiledClear: import("./app").CompiledTeal;
1003
+ }>;
950
1004
  private getBareParams;
951
1005
  private getABIParams;
1006
+ private getCreateABIArgsWithDefaultValues;
952
1007
  /** Returns the sender for a call, using the `defaultSender`
953
1008
  * if none provided and throws an error if neither provided */
954
1009
  private getSender;
@@ -962,5 +1017,5 @@ export declare class AppFactory {
962
1017
  * @param method The method that was called
963
1018
  * @returns The smart contract response with an updated return value
964
1019
  */
965
- parseMethodCallReturn<TReturn extends Uint8Array | ABIValue | ABIStruct | undefined, TResult extends SendAppTransactionResult = SendAppTransactionResult>(result: Promise<TResult> | TResult, method: Arc56Method): Promise<Expand<Omit<TResult, 'return'> & AppReturn<TReturn>>>;
1020
+ parseMethodCallReturn<TReturn extends Uint8Array | ABIValue | ABIStruct | undefined, TResult extends SendAppTransactionResult = SendAppTransactionResult>(result: Promise<TResult> | TResult, method: Arc56Method): Promise<Omit<TResult, 'return'> & AppReturn<TReturn>>;
966
1021
  }