@algorandfoundation/algokit-utils 7.0.0 → 8.0.0-beta.1
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/README.md +14 -3
- package/account/account.d.ts +4 -1
- package/account/account.js +4 -3
- package/account/account.js.map +1 -1
- package/account/account.mjs +5 -4
- package/account/account.mjs.map +1 -1
- package/account/get-dispenser-account.d.ts +1 -1
- package/amount.d.ts +1 -0
- package/amount.js +3 -2
- package/amount.js.map +1 -1
- package/amount.mjs +3 -3
- package/amount.mjs.map +1 -1
- package/app-client.d.ts +4 -4
- package/app-client.js +4 -4
- package/app-client.js.map +1 -1
- package/app-client.mjs +4 -4
- package/app-client.mjs.map +1 -1
- package/app-deploy.js +23 -5
- package/app-deploy.js.map +1 -1
- package/app-deploy.mjs +24 -6
- package/app-deploy.mjs.map +1 -1
- package/app.js +7 -4
- package/app.js.map +1 -1
- package/app.mjs +7 -4
- package/app.mjs.map +1 -1
- package/index.js +1 -1
- package/index.mjs +2 -2
- package/indexer-lookup.d.ts +10 -8
- package/indexer-lookup.js +14 -10
- package/indexer-lookup.js.map +1 -1
- package/indexer-lookup.mjs +14 -10
- package/indexer-lookup.mjs.map +1 -1
- package/network-client.d.ts +1 -7
- package/network-client.js +2 -9
- package/network-client.js.map +1 -1
- package/network-client.mjs +2 -9
- package/network-client.mjs.map +1 -1
- package/package.json +2 -2
- package/testing/_asset.d.ts +2 -1
- package/testing/account.d.ts +4 -3
- package/testing/account.js +8 -2
- package/testing/account.js.map +1 -1
- package/testing/account.mjs +9 -3
- package/testing/account.mjs.map +1 -1
- package/testing/fixtures/algorand-fixture.js +5 -6
- package/testing/fixtures/algorand-fixture.js.map +1 -1
- package/testing/fixtures/algorand-fixture.mjs +5 -6
- package/testing/fixtures/algorand-fixture.mjs.map +1 -1
- package/testing/test-logger.js +7 -1
- package/testing/test-logger.js.map +1 -1
- package/testing/test-logger.mjs +7 -1
- package/testing/test-logger.mjs.map +1 -1
- package/transaction/perform-atomic-transaction-composer-simulate.d.ts +4 -1
- package/transaction/perform-atomic-transaction-composer-simulate.js +14 -10
- package/transaction/perform-atomic-transaction-composer-simulate.js.map +1 -1
- package/transaction/perform-atomic-transaction-composer-simulate.mjs +15 -11
- package/transaction/perform-atomic-transaction-composer-simulate.mjs.map +1 -1
- package/transaction/transaction.d.ts +1 -17
- package/transaction/transaction.js +110 -82
- package/transaction/transaction.js.map +1 -1
- package/transaction/transaction.mjs +112 -83
- package/transaction/transaction.mjs.map +1 -1
- package/transfer/transfer.js +3 -1
- package/transfer/transfer.js.map +1 -1
- package/transfer/transfer.mjs +3 -1
- package/transfer/transfer.mjs.map +1 -1
- package/types/account-manager.d.ts +20 -20
- package/types/account-manager.js +27 -20
- package/types/account-manager.js.map +1 -1
- package/types/account-manager.mjs +28 -21
- package/types/account-manager.mjs.map +1 -1
- package/types/account.d.ts +8 -8
- package/types/account.js +2 -2
- package/types/account.js.map +1 -1
- package/types/account.mjs +3 -3
- package/types/account.mjs.map +1 -1
- package/types/algo-http-client-with-retry.d.ts +1 -2
- package/types/algo-http-client-with-retry.js +33 -3
- package/types/algo-http-client-with-retry.js.map +1 -1
- package/types/algo-http-client-with-retry.mjs +32 -2
- package/types/algo-http-client-with-retry.mjs.map +1 -1
- package/types/algorand-client-transaction-creator.d.ts +11 -11
- package/types/algorand-client-transaction-sender.d.ts +97 -97
- package/types/algorand-client-transaction-sender.js.map +1 -1
- package/types/algorand-client-transaction-sender.mjs.map +1 -1
- package/types/algorand-client.d.ts +3 -3
- package/types/algorand-client.js +1 -1
- package/types/algorand-client.js.map +1 -1
- package/types/algorand-client.mjs +1 -1
- package/types/algorand-client.mjs.map +1 -1
- package/types/app-client.d.ts +280 -279
- package/types/app-client.js +10 -10
- package/types/app-client.js.map +1 -1
- package/types/app-client.mjs +11 -11
- package/types/app-client.mjs.map +1 -1
- package/types/app-deployer.d.ts +4 -4
- package/types/app-deployer.js +22 -23
- package/types/app-deployer.js.map +1 -1
- package/types/app-deployer.mjs +23 -24
- package/types/app-deployer.mjs.map +1 -1
- package/types/app-factory.d.ts +128 -138
- package/types/app-factory.js +4 -3
- package/types/app-factory.js.map +1 -1
- package/types/app-factory.mjs +5 -4
- package/types/app-factory.mjs.map +1 -1
- package/types/app-manager.d.ts +5 -5
- package/types/app-manager.js +11 -15
- package/types/app-manager.js.map +1 -1
- package/types/app-manager.mjs +12 -16
- package/types/app-manager.mjs.map +1 -1
- package/types/app.d.ts +4 -4
- package/types/app.js.map +1 -1
- package/types/app.mjs.map +1 -1
- package/types/asset-manager.d.ts +5 -5
- package/types/asset-manager.js +8 -11
- package/types/asset-manager.js.map +1 -1
- package/types/asset-manager.mjs +8 -11
- package/types/asset-manager.mjs.map +1 -1
- package/types/client-manager.d.ts +2 -9
- package/types/client-manager.js +9 -19
- package/types/client-manager.js.map +1 -1
- package/types/client-manager.mjs +9 -19
- package/types/client-manager.mjs.map +1 -1
- package/types/composer.d.ts +22 -22
- package/types/composer.js +73 -83
- package/types/composer.js.map +1 -1
- package/types/composer.mjs +74 -84
- package/types/composer.mjs.map +1 -1
- package/types/dispenser-client.d.ts +2 -1
- package/types/dispenser-client.js +5 -1
- package/types/dispenser-client.js.map +1 -1
- package/types/dispenser-client.mjs +5 -1
- package/types/dispenser-client.mjs.map +1 -1
- package/types/indexer.d.ts +74 -755
- package/types/indexer.js.map +1 -1
- package/types/indexer.mjs.map +1 -1
- package/types/kmd-account-manager.d.ts +2 -2
- package/types/kmd-account-manager.js.map +1 -1
- package/types/kmd-account-manager.mjs.map +1 -1
- package/types/network-client.d.ts +1 -1
- package/types/network-client.js.map +1 -1
- package/types/network-client.mjs.map +1 -1
- package/types/testing.d.ts +5 -6
- package/types/urlTokenBaseHTTPClient.d.ts +0 -40
- package/types/urlTokenBaseHTTPClient.js +0 -153
- package/types/urlTokenBaseHTTPClient.js.map +0 -1
- package/types/urlTokenBaseHTTPClient.mjs +0 -151
- package/types/urlTokenBaseHTTPClient.mjs.map +0 -1
package/types/app-manager.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-manager.js","sources":["../../src/types/app-manager.ts"],"sourcesContent":["import algosdk from 'algosdk'\nimport { getABIReturnValue } from '../transaction/transaction'\nimport { TransactionSignerAccount } from './account'\nimport {\n BoxName,\n DELETABLE_TEMPLATE_NAME,\n UPDATABLE_TEMPLATE_NAME,\n type ABIReturn,\n type AppState,\n type CompiledTeal,\n type TealTemplateParams,\n} from './app'\nimport modelsv2 = algosdk.modelsv2\n\n/** Information about an app. */\nexport interface AppInformation {\n /** The ID of the app. */\n appId: bigint\n /** The escrow address that the app operates with. */\n appAddress: string\n /**\n * Approval program.\n */\n approvalProgram: Uint8Array\n /**\n * Clear state program.\n */\n clearStateProgram: Uint8Array\n /**\n * The address that created this application. This is the address where the\n * parameters and global state for this application can be found.\n */\n creator: string\n /**\n * Current global state values.\n */\n globalState: AppState\n /** The number of allocated ints in per-user local state. */\n localInts: number\n /** The number of allocated byte slices in per-user local state. */\n localByteSlices: number\n /** The number of allocated ints in global state. */\n globalInts: number\n /** The number of allocated byte slices in global state. */\n globalByteSlices: number\n /** Any extra pages that are needed for the smart contract. */\n extraProgramPages?: number\n}\n\n/**\n * Something that identifies an app box name - either a:\n * * `Uint8Array` (the actual binary of the box name)\n * * `string` (that will be encoded to a `Uint8Array`)\n * * `TransactionSignerAccount` (that will be encoded into the\n * public key address of the corresponding account)\n */\nexport type BoxIdentifier = string | Uint8Array | TransactionSignerAccount\n\n/**\n * A grouping of the app ID and name identifier to reference an app box.\n */\nexport interface BoxReference {\n /**\n * A unique application id\n */\n appId: bigint\n /**\n * Identifier for a box name\n */\n name: BoxIdentifier\n}\n\n/**\n * Parameters to get and decode a box value as an ABI type.\n */\nexport interface BoxValueRequestParams {\n /** The ID of the app return box names for */\n appId: bigint\n /** The name of the box to return either as a string, binary array or `BoxName` */\n boxName: BoxIdentifier\n /** The ABI type to decode the value using */\n type: algosdk.ABIType\n}\n\n/**\n * Parameters to get and decode a box value as an ABI type.\n */\nexport interface BoxValuesRequestParams {\n /** The ID of the app return box names for */\n appId: bigint\n /** The names of the boxes to return either as a string, binary array or BoxName` */\n boxNames: BoxIdentifier[]\n /** The ABI type to decode the value using */\n type: algosdk.ABIType\n}\n\n/** Allows management of application information. */\nexport class AppManager {\n private _algod: algosdk.Algodv2\n private _compilationResults: Record<string, CompiledTeal> = {}\n\n /**\n * Creates an `AppManager`\n * @param algod An algod instance\n */\n constructor(algod: algosdk.Algodv2) {\n this._algod = algod\n }\n\n /**\n * Compiles the given TEAL using algod and returns the result, including source map.\n *\n * The result of this compilation is also cached keyed by the TEAL\n * code so it can be retrieved via `getCompilationResult`.\n *\n * This function is re-entrant; it will only compile the same code once.\n *\n * @param tealCode The TEAL code\n * @returns The information about the compiled file\n */\n async compileTeal(tealCode: string): Promise<CompiledTeal> {\n if (this._compilationResults[tealCode]) {\n return this._compilationResults[tealCode]\n }\n\n const compiled = await this._algod.compile(tealCode).sourcemap(true).do()\n const result = {\n teal: tealCode,\n compiled: compiled.result,\n compiledHash: compiled.hash,\n compiledBase64ToBytes: new Uint8Array(Buffer.from(compiled.result, 'base64')),\n sourceMap: new algosdk.SourceMap(compiled['sourcemap']),\n }\n this._compilationResults[tealCode] = result\n\n return result\n }\n\n /**\n * Performs template substitution of a teal template and compiles it, returning the compiled result.\n *\n * Looks for `TMPL_{parameter}` for template replacements and replaces AlgoKit deploy-time control parameters\n * if deployment metadata is specified.\n *\n * * `TMPL_UPDATABLE` for updatability / immutability control\n * * `TMPL_DELETABLE` for deletability / permanence control\n *\n * @param tealTemplateCode The TEAL logic to compile\n * @param templateParams Any parameters to replace in the .teal file before compiling\n * @param deploymentMetadata The deployment metadata the app will be deployed with\n * @returns The information about the compiled code\n */\n async compileTealTemplate(\n tealTemplateCode: string,\n templateParams?: TealTemplateParams,\n deploymentMetadata?: { updatable?: boolean; deletable?: boolean },\n ): Promise<CompiledTeal> {\n let tealCode = AppManager.stripTealComments(tealTemplateCode)\n\n tealCode = AppManager.replaceTealTemplateParams(tealCode, templateParams)\n\n if (deploymentMetadata) {\n tealCode = AppManager.replaceTealTemplateDeployTimeControlParams(tealCode, deploymentMetadata)\n }\n\n return await this.compileTeal(tealCode)\n }\n\n /**\n * Returns a previous compilation result.\n * @param tealCode The TEAL code\n * @returns The information about the previously compiled file\n * or `undefined` if that TEAL code wasn't previously compiled\n */\n getCompilationResult(tealCode: string): CompiledTeal | undefined {\n return this._compilationResults[tealCode]\n }\n\n /**\n * Returns the current app information for the app with the given ID.\n *\n * @example\n * ```typescript\n * const appInfo = await appManager.getById(12353n);\n * ```\n *\n * @param appId The ID of the app\n * @returns The app information\n */\n public async getById(appId: bigint): Promise<AppInformation> {\n const app = modelsv2.Application.from_obj_for_encoding(await this._algod.getApplicationByID(Number(appId)).do())\n return {\n appId: BigInt(app.id),\n appAddress: algosdk.getApplicationAddress(app.id),\n approvalProgram: app.params.approvalProgram,\n clearStateProgram: app.params.clearStateProgram,\n creator: app.params.creator,\n localInts: Number(app.params.localStateSchema?.numUint ?? 0),\n localByteSlices: Number(app.params.localStateSchema?.numByteSlice ?? 0),\n globalInts: Number(app.params.globalStateSchema?.numUint ?? 0),\n globalByteSlices: Number(app.params.globalStateSchema?.numByteSlice ?? 0),\n extraProgramPages: Number(app.params.extraProgramPages ?? 0),\n globalState: AppManager.decodeAppState(app.params.globalState ?? []),\n }\n }\n\n /**\n * Returns the current global state values for the given app ID and account address\n *\n * @param appId The ID of the app to return global state for\n * @returns The current global state for the given app\n */\n public async getGlobalState(appId: bigint) {\n return (await this.getById(appId)).globalState\n }\n\n /**\n * Returns the current local state values for the given app ID and account address\n *\n * @param appId The ID of the app to return local state for\n * @param address The string address of the account to get local state for the given app\n * @returns The current local state for the given (app, account) combination\n */\n public async getLocalState(appId: bigint, address: string) {\n const appInfo = modelsv2.AccountApplicationResponse.from_obj_for_encoding(\n await this._algod.accountApplicationInformation(address, Number(appId)).do(),\n )\n\n if (!appInfo.appLocalState?.keyValue) {\n throw new Error(\"Couldn't find local state\")\n }\n\n return AppManager.decodeAppState(appInfo.appLocalState.keyValue)\n }\n\n /**\n * Returns the names of the current boxes for the given app.\n * @param appId The ID of the app return box names for\n * @returns The current box names\n */\n public async getBoxNames(appId: bigint): Promise<BoxName[]> {\n const boxResult = await this._algod.getApplicationBoxes(Number(appId)).do()\n return boxResult.boxes.map((b) => {\n return {\n nameRaw: b.name,\n nameBase64: Buffer.from(b.name).toString('base64'),\n name: Buffer.from(b.name).toString('utf-8'),\n }\n })\n }\n\n /**\n * Returns the value of the given box name for the given app.\n * @param appId The ID of the app return box names for\n * @param boxName The name of the box to return either as a string, binary array or `BoxName`\n * @returns The current box value as a byte array\n */\n public async getBoxValue(appId: bigint, boxName: BoxIdentifier): Promise<Uint8Array> {\n const name = AppManager.getBoxReference(boxName).name\n const boxResult = await this._algod.getApplicationBoxByName(Number(appId), name).do()\n return boxResult.value\n }\n\n /**\n * Returns the value of the given box names for the given app.\n * @param appId The ID of the app return box names for\n * @param boxNames The names of the boxes to return either as a string, binary array or `BoxName`\n * @returns The current box values as a byte array in the same order as the passed in box names\n */\n public async getBoxValues(appId: bigint, boxNames: BoxIdentifier[]): Promise<Uint8Array[]> {\n return await Promise.all(boxNames.map(async (boxName) => await this.getBoxValue(appId, boxName)))\n }\n\n /**\n * Returns the value of the given box name for the given app decoded based on the given ABI type.\n * @param request The parameters for the box value request\n * @returns The current box value as an ABI value\n */\n public async getBoxValueFromABIType(request: BoxValueRequestParams): Promise<algosdk.ABIValue> {\n const { appId, boxName, type } = request\n const value = await this.getBoxValue(appId, boxName)\n return type.decode(value)\n }\n\n /**\n * Returns the value of the given box names for the given app decoded based on the given ABI type.\n * @param request The parameters for the box value request\n * @returns The current box values as an ABI value in the same order as the passed in box names\n */\n public async getBoxValuesFromABIType(request: BoxValuesRequestParams): Promise<algosdk.ABIValue[]> {\n const { appId, boxNames, type } = request\n return await Promise.all(boxNames.map(async (boxName) => await this.getBoxValueFromABIType({ appId, boxName, type })))\n }\n\n /**\n * Returns a `algosdk.BoxReference` given a `BoxIdentifier` or `BoxReference`.\n * @param boxId The box to return a reference for\n * @returns The box reference ready to pass into a `algosdk.Transaction`\n */\n public static getBoxReference(boxId: BoxIdentifier | BoxReference): algosdk.BoxReference {\n const ref = typeof boxId === 'object' && 'appId' in boxId ? boxId : { appId: 0n, name: boxId }\n return {\n appIndex: Number(ref.appId),\n name:\n typeof ref.name === 'string'\n ? new TextEncoder().encode(ref.name)\n : 'length' in ref.name\n ? ref.name\n : algosdk.decodeAddress(ref.name.addr).publicKey,\n } as algosdk.BoxReference\n }\n\n /**\n * Converts an array of global/local state values from the algod api to a more friendly\n * generic object keyed by the UTF-8 value of the key.\n * @param state A `global-state`, `local-state`, `global-state-deltas` or `local-state-deltas`\n * @returns An object keyeed by the UTF-8 representation of the key with various parsings of the values\n */\n public static decodeAppState(state: { key: string; value: modelsv2.TealValue | modelsv2.EvalDelta }[]): AppState {\n const stateValues = {} as AppState\n\n // Start with empty set\n for (const stateVal of state) {\n const keyBase64 = stateVal.key\n const keyRaw = Buffer.from(keyBase64, 'base64')\n const key = keyRaw.toString('utf-8')\n const tealValue = stateVal.value\n\n const dataTypeFlag = 'action' in tealValue ? tealValue.action : tealValue.type\n let valueBase64: string\n let valueRaw: Buffer\n switch (dataTypeFlag) {\n case 1:\n valueBase64 = tealValue.bytes ?? ''\n valueRaw = Buffer.from(valueBase64, 'base64')\n stateValues[key] = {\n keyRaw,\n keyBase64,\n valueRaw: new Uint8Array(valueRaw),\n valueBase64: valueBase64,\n value: valueRaw.toString('utf-8'),\n }\n break\n case 2: {\n const value = tealValue.uint ?? 0\n stateValues[key] = {\n keyRaw,\n keyBase64,\n value: BigInt(value),\n }\n break\n }\n default:\n throw new Error(`Received unknown state data type of ${dataTypeFlag}`)\n }\n }\n\n return stateValues\n }\n\n /**\n * Returns any ABI return values for the given app call arguments and transaction confirmation.\n * @param confirmation The transaction confirmation from algod\n * @param method The ABI method\n * @returns The return value for the method call\n */\n public static getABIReturn(\n confirmation: modelsv2.PendingTransactionResponse | undefined,\n method: algosdk.ABIMethod | undefined,\n ): ABIReturn | undefined {\n if (!method || !confirmation || method.returns.type === 'void') {\n return undefined\n }\n\n // The parseMethodResponse method mutates the second parameter :(\n const resultDummy: algosdk.ABIResult = {\n txID: '',\n method,\n rawReturnValue: new Uint8Array(),\n }\n return getABIReturnValue(algosdk.AtomicTransactionComposer.parseMethodResponse(method, resultDummy, confirmation))\n }\n\n /**\n * Replaces AlgoKit deploy-time deployment control parameters within the given TEAL template code.\n *\n * * `TMPL_UPDATABLE` for updatability / immutability control\n * * `TMPL_DELETABLE` for deletability / permanence control\n *\n * Note: If these values are defined, but the corresponding `TMPL_*` value\n * isn't in the teal code it will throw an exception.\n *\n * @param tealTemplateCode The TEAL template code to substitute\n * @param params The deploy-time deployment control parameter value to replace\n * @returns The replaced TEAL code\n */\n static replaceTealTemplateDeployTimeControlParams(tealTemplateCode: string, params: { updatable?: boolean; deletable?: boolean }) {\n if (params.updatable !== undefined) {\n if (!tealTemplateCode.includes(UPDATABLE_TEMPLATE_NAME)) {\n throw new Error(\n `Deploy-time updatability control requested for app deployment, but ${UPDATABLE_TEMPLATE_NAME} not present in TEAL code`,\n )\n }\n tealTemplateCode = replaceTemplateVariable(tealTemplateCode, UPDATABLE_TEMPLATE_NAME, (params.updatable ? 1 : 0).toString())\n }\n\n if (params.deletable !== undefined) {\n if (!tealTemplateCode.includes(DELETABLE_TEMPLATE_NAME)) {\n throw new Error(\n `Deploy-time deletability control requested for app deployment, but ${DELETABLE_TEMPLATE_NAME} not present in TEAL code`,\n )\n }\n tealTemplateCode = replaceTemplateVariable(tealTemplateCode, DELETABLE_TEMPLATE_NAME, (params.deletable ? 1 : 0).toString())\n }\n\n return tealTemplateCode\n }\n\n /**\n * Performs template substitution of a teal file.\n *\n * Looks for `TMPL_{parameter}` for template replacements.\n *\n * @param tealTemplateCode The TEAL template code to make parameter replacements in\n * @param templateParams Any parameters to replace in the teal code\n * @returns The TEAL code with replacements\n */\n static replaceTealTemplateParams(tealTemplateCode: string, templateParams?: TealTemplateParams) {\n if (templateParams !== undefined) {\n for (const key in templateParams) {\n const value = templateParams[key]\n const token = `TMPL_${key.replace(/^TMPL_/, '')}`\n\n // If this is a number, first replace any byte representations of the number\n // These may appear in the TEAL in order to circumvent int compression and preserve PC values\n if (typeof value === 'number' || typeof value === 'bigint') {\n tealTemplateCode = tealTemplateCode.replace(new RegExp(`(?<=bytes )${token}`, 'g'), `0x${value.toString(16).padStart(16, '0')}`)\n\n // We could probably return here since mixing pushint and pushbytes is likely not going to happen, but might as well do both\n }\n\n tealTemplateCode = replaceTemplateVariable(\n tealTemplateCode,\n token,\n typeof value === 'string'\n ? `0x${Buffer.from(value, 'utf-8').toString('hex')}`\n : ArrayBuffer.isView(value)\n ? `0x${Buffer.from(value).toString('hex')}`\n : value.toString(),\n )\n }\n }\n\n return tealTemplateCode\n }\n\n /**\n * Remove comments from TEAL code (useful to reduce code size before compilation).\n *\n * @param tealCode The TEAL logic to strip\n * @returns The TEAL without comments\n */\n static stripTealComments(tealCode: string) {\n const stripCommentFromLine = (line: string) => {\n const commentIndex = findUnquotedString(line, '//')\n if (commentIndex === undefined) {\n return line\n }\n return line.slice(0, commentIndex).trimEnd()\n }\n\n return tealCode\n .split('\\n')\n .map((line) => stripCommentFromLine(line))\n .join('\\n')\n }\n}\n\n/**\n * Find the first string within a line of TEAL. Only matches outside of quotes and base64 are returned.\n * Returns undefined if not found\n */\nconst findUnquotedString = (line: string, token: string, startIndex: number = 0, _endIndex?: number): number | undefined => {\n const endIndex = _endIndex === undefined ? line.length : _endIndex\n let index = startIndex\n let inQuotes = false\n let inBase64 = false\n\n while (index < endIndex) {\n const currentChar = line[index]\n if ((currentChar === ' ' || currentChar === '(') && !inQuotes && lastTokenBase64(line, index)) {\n // enter base64\n inBase64 = true\n } else if ((currentChar === ' ' || currentChar === ')') && !inQuotes && inBase64) {\n // exit base64\n inBase64 = false\n } else if (currentChar === '\\\\' && inQuotes) {\n // escaped char, skip next character\n index += 1\n } else if (currentChar === '\"') {\n // quote boundary\n inQuotes = !inQuotes\n } else if (!inQuotes && !inBase64 && line.startsWith(token, index)) {\n // can test for match\n return index\n }\n index += 1\n }\n return undefined\n}\n\nconst lastTokenBase64 = (line: string, index: number): boolean => {\n try {\n const tokens = line.slice(0, index).split(/\\s+/)\n const last = tokens[tokens.length - 1]\n return ['base64', 'b64'].includes(last)\n } catch {\n return false\n }\n}\n\nfunction replaceTemplateVariable(program: string, token: string, replacement: string): string {\n const result: string[] = []\n const tokenIndexOffset = replacement.length - token.length\n\n const programLines = program.split('\\n')\n\n for (const line of programLines) {\n const _commentIndex = findUnquotedString(line, '//')\n const commentIndex = _commentIndex === undefined ? line.length : _commentIndex\n let code = line.substring(0, commentIndex)\n const comment = line.substring(commentIndex)\n let trailingIndex = 0\n\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const tokenIndex = findTemplateToken(code, token, trailingIndex)\n if (tokenIndex === undefined) {\n break\n }\n trailingIndex = tokenIndex + token.length\n const prefix = code.substring(0, tokenIndex)\n const suffix = code.substring(trailingIndex)\n code = `${prefix}${replacement}${suffix}`\n trailingIndex += tokenIndexOffset\n }\n result.push(code + comment)\n }\n\n return result.join('\\n')\n}\n\nconst findTemplateToken = (line: string, token: string, startIndex: number = 0, _endIndex?: number): number | undefined => {\n const endIndex = _endIndex === undefined ? line.length : _endIndex\n\n let index = startIndex\n while (index < endIndex) {\n const tokenIndex = findUnquotedString(line, token, index, endIndex)\n if (tokenIndex === undefined) {\n break\n }\n const trailingIndex = tokenIndex + token.length\n if (\n (tokenIndex === 0 || !isValidTokenCharacter(line[tokenIndex - 1])) &&\n (trailingIndex >= line.length || !isValidTokenCharacter(line[trailingIndex]))\n ) {\n return tokenIndex\n }\n index = trailingIndex\n }\n return undefined\n}\n\nfunction isValidTokenCharacter(char: string): boolean {\n return char.length === 1 && (/\\w/.test(char) || char === '_')\n}\n"],"names":["getABIReturnValue","UPDATABLE_TEMPLATE_NAME","DELETABLE_TEMPLATE_NAME"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"app-manager.js","sources":["../../src/types/app-manager.ts"],"sourcesContent":["import algosdk, { Address, ProgramSourceMap } from 'algosdk'\nimport { getABIReturnValue } from '../transaction/transaction'\nimport { TransactionSignerAccount } from './account'\nimport {\n BoxName,\n DELETABLE_TEMPLATE_NAME,\n UPDATABLE_TEMPLATE_NAME,\n type ABIReturn,\n type AppState,\n type CompiledTeal,\n type TealTemplateParams,\n} from './app'\nimport modelsv2 = algosdk.modelsv2\n\n/** Information about an app. */\nexport interface AppInformation {\n /** The ID of the app. */\n appId: bigint\n /** The escrow address that the app operates with. */\n appAddress: Address\n /**\n * Approval program.\n */\n approvalProgram: Uint8Array\n /**\n * Clear state program.\n */\n clearStateProgram: Uint8Array\n /**\n * The address that created this application. This is the address where the\n * parameters and global state for this application can be found.\n */\n creator: Address\n /**\n * Current global state values.\n */\n globalState: AppState\n /** The number of allocated ints in per-user local state. */\n localInts: number\n /** The number of allocated byte slices in per-user local state. */\n localByteSlices: number\n /** The number of allocated ints in global state. */\n globalInts: number\n /** The number of allocated byte slices in global state. */\n globalByteSlices: number\n /** Any extra pages that are needed for the smart contract. */\n extraProgramPages?: number\n}\n\n/**\n * Something that identifies an app box name - either a:\n * * `Uint8Array` (the actual binary of the box name)\n * * `string` (that will be encoded to a `Uint8Array`)\n * * `TransactionSignerAccount` (that will be encoded into the\n * public key address of the corresponding account)\n */\nexport type BoxIdentifier = string | Uint8Array | TransactionSignerAccount\n\n/**\n * A grouping of the app ID and name identifier to reference an app box.\n */\nexport interface BoxReference {\n /**\n * A unique application id\n */\n appId: bigint\n /**\n * Identifier for a box name\n */\n name: BoxIdentifier\n}\n\n/**\n * Parameters to get and decode a box value as an ABI type.\n */\nexport interface BoxValueRequestParams {\n /** The ID of the app return box names for */\n appId: bigint\n /** The name of the box to return either as a string, binary array or `BoxName` */\n boxName: BoxIdentifier\n /** The ABI type to decode the value using */\n type: algosdk.ABIType\n}\n\n/**\n * Parameters to get and decode a box value as an ABI type.\n */\nexport interface BoxValuesRequestParams {\n /** The ID of the app return box names for */\n appId: bigint\n /** The names of the boxes to return either as a string, binary array or BoxName` */\n boxNames: BoxIdentifier[]\n /** The ABI type to decode the value using */\n type: algosdk.ABIType\n}\n\n/** Allows management of application information. */\nexport class AppManager {\n private _algod: algosdk.Algodv2\n private _compilationResults: Record<string, CompiledTeal> = {}\n\n /**\n * Creates an `AppManager`\n * @param algod An algod instance\n */\n constructor(algod: algosdk.Algodv2) {\n this._algod = algod\n }\n\n /**\n * Compiles the given TEAL using algod and returns the result, including source map.\n *\n * The result of this compilation is also cached keyed by the TEAL\n * code so it can be retrieved via `getCompilationResult`.\n *\n * This function is re-entrant; it will only compile the same code once.\n *\n * @param tealCode The TEAL code\n * @returns The information about the compiled file\n */\n async compileTeal(tealCode: string): Promise<CompiledTeal> {\n if (this._compilationResults[tealCode]) {\n return this._compilationResults[tealCode]\n }\n\n const compiled = await this._algod.compile(tealCode).sourcemap(true).do()\n const result = {\n teal: tealCode,\n compiled: compiled.result,\n compiledHash: compiled.hash,\n compiledBase64ToBytes: new Uint8Array(Buffer.from(compiled.result, 'base64')),\n sourceMap: new ProgramSourceMap(JSON.parse(algosdk.encodeJSON(compiled.sourcemap!))),\n }\n this._compilationResults[tealCode] = result\n\n return result\n }\n\n /**\n * Performs template substitution of a teal template and compiles it, returning the compiled result.\n *\n * Looks for `TMPL_{parameter}` for template replacements and replaces AlgoKit deploy-time control parameters\n * if deployment metadata is specified.\n *\n * * `TMPL_UPDATABLE` for updatability / immutability control\n * * `TMPL_DELETABLE` for deletability / permanence control\n *\n * @param tealTemplateCode The TEAL logic to compile\n * @param templateParams Any parameters to replace in the .teal file before compiling\n * @param deploymentMetadata The deployment metadata the app will be deployed with\n * @returns The information about the compiled code\n */\n async compileTealTemplate(\n tealTemplateCode: string,\n templateParams?: TealTemplateParams,\n deploymentMetadata?: { updatable?: boolean; deletable?: boolean },\n ): Promise<CompiledTeal> {\n let tealCode = AppManager.stripTealComments(tealTemplateCode)\n\n tealCode = AppManager.replaceTealTemplateParams(tealCode, templateParams)\n\n if (deploymentMetadata) {\n tealCode = AppManager.replaceTealTemplateDeployTimeControlParams(tealCode, deploymentMetadata)\n }\n\n return await this.compileTeal(tealCode)\n }\n\n /**\n * Returns a previous compilation result.\n * @param tealCode The TEAL code\n * @returns The information about the previously compiled file\n * or `undefined` if that TEAL code wasn't previously compiled\n */\n getCompilationResult(tealCode: string): CompiledTeal | undefined {\n return this._compilationResults[tealCode]\n }\n\n /**\n * Returns the current app information for the app with the given ID.\n *\n * @example\n * ```typescript\n * const appInfo = await appManager.getById(12353n);\n * ```\n *\n * @param appId The ID of the app\n * @returns The app information\n */\n public async getById(appId: bigint): Promise<AppInformation> {\n const app = await this._algod.getApplicationByID(Number(appId)).do()\n return {\n appId: BigInt(app.id),\n appAddress: algosdk.getApplicationAddress(app.id),\n approvalProgram: app.params.approvalProgram,\n clearStateProgram: app.params.clearStateProgram,\n creator: app.params.creator,\n localInts: Number(app.params.localStateSchema?.numUint ?? 0),\n localByteSlices: Number(app.params.localStateSchema?.numByteSlice ?? 0),\n globalInts: Number(app.params.globalStateSchema?.numUint ?? 0),\n globalByteSlices: Number(app.params.globalStateSchema?.numByteSlice ?? 0),\n extraProgramPages: Number(app.params.extraProgramPages ?? 0),\n globalState: AppManager.decodeAppState(app.params.globalState ?? []),\n }\n }\n\n /**\n * Returns the current global state values for the given app ID and account address\n *\n * @param appId The ID of the app to return global state for\n * @returns The current global state for the given app\n */\n public async getGlobalState(appId: bigint) {\n return (await this.getById(appId)).globalState\n }\n\n /**\n * Returns the current local state values for the given app ID and account address\n *\n * @param appId The ID of the app to return local state for\n * @param address The string address of the account to get local state for the given app\n * @returns The current local state for the given (app, account) combination\n */\n public async getLocalState(appId: bigint, address: Address | string) {\n const appInfo = await this._algod.accountApplicationInformation(address, appId).do()\n\n if (!appInfo.appLocalState?.keyValue) {\n throw new Error(\"Couldn't find local state\")\n }\n\n return AppManager.decodeAppState(appInfo.appLocalState.keyValue)\n }\n\n /**\n * Returns the names of the current boxes for the given app.\n * @param appId The ID of the app return box names for\n * @returns The current box names\n */\n public async getBoxNames(appId: bigint): Promise<BoxName[]> {\n const boxResult = await this._algod.getApplicationBoxes(appId).do()\n return boxResult.boxes.map((b) => {\n return {\n nameRaw: b.name,\n nameBase64: Buffer.from(b.name).toString('base64'),\n name: Buffer.from(b.name).toString('utf-8'),\n }\n })\n }\n\n /**\n * Returns the value of the given box name for the given app.\n * @param appId The ID of the app return box names for\n * @param boxName The name of the box to return either as a string, binary array or `BoxName`\n * @returns The current box value as a byte array\n */\n public async getBoxValue(appId: bigint, boxName: BoxIdentifier): Promise<Uint8Array> {\n const name = AppManager.getBoxReference(boxName).name\n const boxResult = await this._algod.getApplicationBoxByName(Number(appId), name).do()\n return boxResult.value\n }\n\n /**\n * Returns the value of the given box names for the given app.\n * @param appId The ID of the app return box names for\n * @param boxNames The names of the boxes to return either as a string, binary array or `BoxName`\n * @returns The current box values as a byte array in the same order as the passed in box names\n */\n public async getBoxValues(appId: bigint, boxNames: BoxIdentifier[]): Promise<Uint8Array[]> {\n return await Promise.all(boxNames.map(async (boxName) => await this.getBoxValue(appId, boxName)))\n }\n\n /**\n * Returns the value of the given box name for the given app decoded based on the given ABI type.\n * @param request The parameters for the box value request\n * @returns The current box value as an ABI value\n */\n public async getBoxValueFromABIType(request: BoxValueRequestParams): Promise<algosdk.ABIValue> {\n const { appId, boxName, type } = request\n const value = await this.getBoxValue(appId, boxName)\n return type.decode(value)\n }\n\n /**\n * Returns the value of the given box names for the given app decoded based on the given ABI type.\n * @param request The parameters for the box value request\n * @returns The current box values as an ABI value in the same order as the passed in box names\n */\n public async getBoxValuesFromABIType(request: BoxValuesRequestParams): Promise<algosdk.ABIValue[]> {\n const { appId, boxNames, type } = request\n return await Promise.all(boxNames.map(async (boxName) => await this.getBoxValueFromABIType({ appId, boxName, type })))\n }\n\n /**\n * Returns a `algosdk.BoxReference` given a `BoxIdentifier` or `BoxReference`.\n * @param boxId The box to return a reference for\n * @returns The box reference ready to pass into a `algosdk.Transaction`\n */\n public static getBoxReference(boxId: BoxIdentifier | BoxReference): algosdk.BoxReference {\n const ref = typeof boxId === 'object' && 'appId' in boxId ? boxId : { appId: 0n, name: boxId }\n return {\n appIndex: ref.appId,\n name: typeof ref.name === 'string' ? new TextEncoder().encode(ref.name) : 'length' in ref.name ? ref.name : ref.name.addr.publicKey,\n } as algosdk.BoxReference\n }\n\n /**\n * Converts an array of global/local state values from the algod api to a more friendly\n * generic object keyed by the UTF-8 value of the key.\n * @param state A `global-state`, `local-state`, `global-state-deltas` or `local-state-deltas`\n * @returns An object keyeed by the UTF-8 representation of the key with various parsings of the values\n */\n public static decodeAppState(state: { key: Uint8Array; value: modelsv2.TealValue | modelsv2.EvalDelta }[]): AppState {\n const stateValues = {} as AppState\n\n // Start with empty set\n for (const stateVal of state) {\n const keyBase64 = Buffer.from(stateVal.key).toString('base64')\n const keyRaw = stateVal.key\n const key = Buffer.from(stateVal.key).toString('utf-8')\n const tealValue = stateVal.value\n\n const dataTypeFlag = 'action' in tealValue ? tealValue.action : tealValue.type\n let valueBase64: string\n let valueRaw: Buffer\n switch (dataTypeFlag) {\n case 1:\n valueBase64 =\n typeof tealValue.bytes === 'string' ? tealValue.bytes : tealValue.bytes ? Buffer.from(tealValue.bytes).toString('base64') : ''\n valueRaw = Buffer.from(valueBase64, 'base64')\n stateValues[key] = {\n keyRaw,\n keyBase64,\n valueRaw: new Uint8Array(valueRaw),\n valueBase64: valueBase64,\n value: valueRaw.toString('utf-8'),\n }\n break\n case 2: {\n const value = tealValue.uint ?? 0\n stateValues[key] = {\n keyRaw,\n keyBase64,\n value: BigInt(value),\n }\n break\n }\n default:\n throw new Error(`Received unknown state data type of ${dataTypeFlag}`)\n }\n }\n\n return stateValues\n }\n\n /**\n * Returns any ABI return values for the given app call arguments and transaction confirmation.\n * @param confirmation The transaction confirmation from algod\n * @param method The ABI method\n * @returns The return value for the method call\n */\n public static getABIReturn(\n confirmation: modelsv2.PendingTransactionResponse | undefined,\n method: algosdk.ABIMethod | undefined,\n ): ABIReturn | undefined {\n if (!method || !confirmation || method.returns.type === 'void') {\n return undefined\n }\n\n // The parseMethodResponse method mutates the second parameter :(\n const resultDummy: algosdk.ABIResult = {\n txID: '',\n method,\n rawReturnValue: new Uint8Array(),\n }\n return getABIReturnValue(algosdk.AtomicTransactionComposer.parseMethodResponse(method, resultDummy, confirmation))\n }\n\n /**\n * Replaces AlgoKit deploy-time deployment control parameters within the given TEAL template code.\n *\n * * `TMPL_UPDATABLE` for updatability / immutability control\n * * `TMPL_DELETABLE` for deletability / permanence control\n *\n * Note: If these values are defined, but the corresponding `TMPL_*` value\n * isn't in the teal code it will throw an exception.\n *\n * @param tealTemplateCode The TEAL template code to substitute\n * @param params The deploy-time deployment control parameter value to replace\n * @returns The replaced TEAL code\n */\n static replaceTealTemplateDeployTimeControlParams(tealTemplateCode: string, params: { updatable?: boolean; deletable?: boolean }) {\n if (params.updatable !== undefined) {\n if (!tealTemplateCode.includes(UPDATABLE_TEMPLATE_NAME)) {\n throw new Error(\n `Deploy-time updatability control requested for app deployment, but ${UPDATABLE_TEMPLATE_NAME} not present in TEAL code`,\n )\n }\n tealTemplateCode = replaceTemplateVariable(tealTemplateCode, UPDATABLE_TEMPLATE_NAME, (params.updatable ? 1 : 0).toString())\n }\n\n if (params.deletable !== undefined) {\n if (!tealTemplateCode.includes(DELETABLE_TEMPLATE_NAME)) {\n throw new Error(\n `Deploy-time deletability control requested for app deployment, but ${DELETABLE_TEMPLATE_NAME} not present in TEAL code`,\n )\n }\n tealTemplateCode = replaceTemplateVariable(tealTemplateCode, DELETABLE_TEMPLATE_NAME, (params.deletable ? 1 : 0).toString())\n }\n\n return tealTemplateCode\n }\n\n /**\n * Performs template substitution of a teal file.\n *\n * Looks for `TMPL_{parameter}` for template replacements.\n *\n * @param tealTemplateCode The TEAL template code to make parameter replacements in\n * @param templateParams Any parameters to replace in the teal code\n * @returns The TEAL code with replacements\n */\n static replaceTealTemplateParams(tealTemplateCode: string, templateParams?: TealTemplateParams) {\n if (templateParams !== undefined) {\n for (const key in templateParams) {\n const value = templateParams[key]\n const token = `TMPL_${key.replace(/^TMPL_/, '')}`\n\n // If this is a number, first replace any byte representations of the number\n // These may appear in the TEAL in order to circumvent int compression and preserve PC values\n if (typeof value === 'number' || typeof value === 'bigint') {\n tealTemplateCode = tealTemplateCode.replace(new RegExp(`(?<=bytes )${token}`, 'g'), `0x${value.toString(16).padStart(16, '0')}`)\n\n // We could probably return here since mixing pushint and pushbytes is likely not going to happen, but might as well do both\n }\n\n tealTemplateCode = replaceTemplateVariable(\n tealTemplateCode,\n token,\n typeof value === 'string'\n ? `0x${Buffer.from(value, 'utf-8').toString('hex')}`\n : ArrayBuffer.isView(value)\n ? `0x${Buffer.from(value).toString('hex')}`\n : value.toString(),\n )\n }\n }\n\n return tealTemplateCode\n }\n\n /**\n * Remove comments from TEAL code (useful to reduce code size before compilation).\n *\n * @param tealCode The TEAL logic to strip\n * @returns The TEAL without comments\n */\n static stripTealComments(tealCode: string) {\n const stripCommentFromLine = (line: string) => {\n const commentIndex = findUnquotedString(line, '//')\n if (commentIndex === undefined) {\n return line\n }\n return line.slice(0, commentIndex).trimEnd()\n }\n\n return tealCode\n .split('\\n')\n .map((line) => stripCommentFromLine(line))\n .join('\\n')\n }\n}\n\n/**\n * Find the first string within a line of TEAL. Only matches outside of quotes and base64 are returned.\n * Returns undefined if not found\n */\nconst findUnquotedString = (line: string, token: string, startIndex: number = 0, _endIndex?: number): number | undefined => {\n const endIndex = _endIndex === undefined ? line.length : _endIndex\n let index = startIndex\n let inQuotes = false\n let inBase64 = false\n\n while (index < endIndex) {\n const currentChar = line[index]\n if ((currentChar === ' ' || currentChar === '(') && !inQuotes && lastTokenBase64(line, index)) {\n // enter base64\n inBase64 = true\n } else if ((currentChar === ' ' || currentChar === ')') && !inQuotes && inBase64) {\n // exit base64\n inBase64 = false\n } else if (currentChar === '\\\\' && inQuotes) {\n // escaped char, skip next character\n index += 1\n } else if (currentChar === '\"') {\n // quote boundary\n inQuotes = !inQuotes\n } else if (!inQuotes && !inBase64 && line.startsWith(token, index)) {\n // can test for match\n return index\n }\n index += 1\n }\n return undefined\n}\n\nconst lastTokenBase64 = (line: string, index: number): boolean => {\n try {\n const tokens = line.slice(0, index).split(/\\s+/)\n const last = tokens[tokens.length - 1]\n return ['base64', 'b64'].includes(last)\n } catch {\n return false\n }\n}\n\nfunction replaceTemplateVariable(program: string, token: string, replacement: string): string {\n const result: string[] = []\n const tokenIndexOffset = replacement.length - token.length\n\n const programLines = program.split('\\n')\n\n for (const line of programLines) {\n const _commentIndex = findUnquotedString(line, '//')\n const commentIndex = _commentIndex === undefined ? line.length : _commentIndex\n let code = line.substring(0, commentIndex)\n const comment = line.substring(commentIndex)\n let trailingIndex = 0\n\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const tokenIndex = findTemplateToken(code, token, trailingIndex)\n if (tokenIndex === undefined) {\n break\n }\n trailingIndex = tokenIndex + token.length\n const prefix = code.substring(0, tokenIndex)\n const suffix = code.substring(trailingIndex)\n code = `${prefix}${replacement}${suffix}`\n trailingIndex += tokenIndexOffset\n }\n result.push(code + comment)\n }\n\n return result.join('\\n')\n}\n\nconst findTemplateToken = (line: string, token: string, startIndex: number = 0, _endIndex?: number): number | undefined => {\n const endIndex = _endIndex === undefined ? line.length : _endIndex\n\n let index = startIndex\n while (index < endIndex) {\n const tokenIndex = findUnquotedString(line, token, index, endIndex)\n if (tokenIndex === undefined) {\n break\n }\n const trailingIndex = tokenIndex + token.length\n if (\n (tokenIndex === 0 || !isValidTokenCharacter(line[tokenIndex - 1])) &&\n (trailingIndex >= line.length || !isValidTokenCharacter(line[trailingIndex]))\n ) {\n return tokenIndex\n }\n index = trailingIndex\n }\n return undefined\n}\n\nfunction isValidTokenCharacter(char: string): boolean {\n return char.length === 1 && (/\\w/.test(char) || char === '_')\n}\n"],"names":["ProgramSourceMap","getABIReturnValue","UPDATABLE_TEMPLATE_NAME","DELETABLE_TEMPLATE_NAME"],"mappings":"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"}
|
package/types/app-manager.mjs
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import algosdk from 'algosdk';
|
|
1
|
+
import algosdk, { ProgramSourceMap } from 'algosdk';
|
|
2
2
|
import { getABIReturnValue } from '../transaction/transaction.mjs';
|
|
3
3
|
import { UPDATABLE_TEMPLATE_NAME, DELETABLE_TEMPLATE_NAME } from './app.mjs';
|
|
4
4
|
|
|
5
|
-
var modelsv2 = algosdk.modelsv2;
|
|
6
5
|
/** Allows management of application information. */
|
|
7
6
|
class AppManager {
|
|
8
7
|
/**
|
|
@@ -34,7 +33,7 @@ class AppManager {
|
|
|
34
33
|
compiled: compiled.result,
|
|
35
34
|
compiledHash: compiled.hash,
|
|
36
35
|
compiledBase64ToBytes: new Uint8Array(Buffer.from(compiled.result, 'base64')),
|
|
37
|
-
sourceMap: new algosdk.
|
|
36
|
+
sourceMap: new ProgramSourceMap(JSON.parse(algosdk.encodeJSON(compiled.sourcemap))),
|
|
38
37
|
};
|
|
39
38
|
this._compilationResults[tealCode] = result;
|
|
40
39
|
return result;
|
|
@@ -82,7 +81,7 @@ class AppManager {
|
|
|
82
81
|
* @returns The app information
|
|
83
82
|
*/
|
|
84
83
|
async getById(appId) {
|
|
85
|
-
const app =
|
|
84
|
+
const app = await this._algod.getApplicationByID(Number(appId)).do();
|
|
86
85
|
return {
|
|
87
86
|
appId: BigInt(app.id),
|
|
88
87
|
appAddress: algosdk.getApplicationAddress(app.id),
|
|
@@ -114,7 +113,7 @@ class AppManager {
|
|
|
114
113
|
* @returns The current local state for the given (app, account) combination
|
|
115
114
|
*/
|
|
116
115
|
async getLocalState(appId, address) {
|
|
117
|
-
const appInfo =
|
|
116
|
+
const appInfo = await this._algod.accountApplicationInformation(address, appId).do();
|
|
118
117
|
if (!appInfo.appLocalState?.keyValue) {
|
|
119
118
|
throw new Error("Couldn't find local state");
|
|
120
119
|
}
|
|
@@ -126,7 +125,7 @@ class AppManager {
|
|
|
126
125
|
* @returns The current box names
|
|
127
126
|
*/
|
|
128
127
|
async getBoxNames(appId) {
|
|
129
|
-
const boxResult = await this._algod.getApplicationBoxes(
|
|
128
|
+
const boxResult = await this._algod.getApplicationBoxes(appId).do();
|
|
130
129
|
return boxResult.boxes.map((b) => {
|
|
131
130
|
return {
|
|
132
131
|
nameRaw: b.name,
|
|
@@ -182,12 +181,8 @@ class AppManager {
|
|
|
182
181
|
static getBoxReference(boxId) {
|
|
183
182
|
const ref = typeof boxId === 'object' && 'appId' in boxId ? boxId : { appId: 0n, name: boxId };
|
|
184
183
|
return {
|
|
185
|
-
appIndex:
|
|
186
|
-
name: typeof ref.name === 'string'
|
|
187
|
-
? new TextEncoder().encode(ref.name)
|
|
188
|
-
: 'length' in ref.name
|
|
189
|
-
? ref.name
|
|
190
|
-
: algosdk.decodeAddress(ref.name.addr).publicKey,
|
|
184
|
+
appIndex: ref.appId,
|
|
185
|
+
name: typeof ref.name === 'string' ? new TextEncoder().encode(ref.name) : 'length' in ref.name ? ref.name : ref.name.addr.publicKey,
|
|
191
186
|
};
|
|
192
187
|
}
|
|
193
188
|
/**
|
|
@@ -200,16 +195,17 @@ class AppManager {
|
|
|
200
195
|
const stateValues = {};
|
|
201
196
|
// Start with empty set
|
|
202
197
|
for (const stateVal of state) {
|
|
203
|
-
const keyBase64 = stateVal.key;
|
|
204
|
-
const keyRaw =
|
|
205
|
-
const key =
|
|
198
|
+
const keyBase64 = Buffer.from(stateVal.key).toString('base64');
|
|
199
|
+
const keyRaw = stateVal.key;
|
|
200
|
+
const key = Buffer.from(stateVal.key).toString('utf-8');
|
|
206
201
|
const tealValue = stateVal.value;
|
|
207
202
|
const dataTypeFlag = 'action' in tealValue ? tealValue.action : tealValue.type;
|
|
208
203
|
let valueBase64;
|
|
209
204
|
let valueRaw;
|
|
210
205
|
switch (dataTypeFlag) {
|
|
211
206
|
case 1:
|
|
212
|
-
valueBase64 =
|
|
207
|
+
valueBase64 =
|
|
208
|
+
typeof tealValue.bytes === 'string' ? tealValue.bytes : tealValue.bytes ? Buffer.from(tealValue.bytes).toString('base64') : '';
|
|
213
209
|
valueRaw = Buffer.from(valueBase64, 'base64');
|
|
214
210
|
stateValues[key] = {
|
|
215
211
|
keyRaw,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-manager.mjs","sources":["../../src/types/app-manager.ts"],"sourcesContent":["import algosdk from 'algosdk'\nimport { getABIReturnValue } from '../transaction/transaction'\nimport { TransactionSignerAccount } from './account'\nimport {\n BoxName,\n DELETABLE_TEMPLATE_NAME,\n UPDATABLE_TEMPLATE_NAME,\n type ABIReturn,\n type AppState,\n type CompiledTeal,\n type TealTemplateParams,\n} from './app'\nimport modelsv2 = algosdk.modelsv2\n\n/** Information about an app. */\nexport interface AppInformation {\n /** The ID of the app. */\n appId: bigint\n /** The escrow address that the app operates with. */\n appAddress: string\n /**\n * Approval program.\n */\n approvalProgram: Uint8Array\n /**\n * Clear state program.\n */\n clearStateProgram: Uint8Array\n /**\n * The address that created this application. This is the address where the\n * parameters and global state for this application can be found.\n */\n creator: string\n /**\n * Current global state values.\n */\n globalState: AppState\n /** The number of allocated ints in per-user local state. */\n localInts: number\n /** The number of allocated byte slices in per-user local state. */\n localByteSlices: number\n /** The number of allocated ints in global state. */\n globalInts: number\n /** The number of allocated byte slices in global state. */\n globalByteSlices: number\n /** Any extra pages that are needed for the smart contract. */\n extraProgramPages?: number\n}\n\n/**\n * Something that identifies an app box name - either a:\n * * `Uint8Array` (the actual binary of the box name)\n * * `string` (that will be encoded to a `Uint8Array`)\n * * `TransactionSignerAccount` (that will be encoded into the\n * public key address of the corresponding account)\n */\nexport type BoxIdentifier = string | Uint8Array | TransactionSignerAccount\n\n/**\n * A grouping of the app ID and name identifier to reference an app box.\n */\nexport interface BoxReference {\n /**\n * A unique application id\n */\n appId: bigint\n /**\n * Identifier for a box name\n */\n name: BoxIdentifier\n}\n\n/**\n * Parameters to get and decode a box value as an ABI type.\n */\nexport interface BoxValueRequestParams {\n /** The ID of the app return box names for */\n appId: bigint\n /** The name of the box to return either as a string, binary array or `BoxName` */\n boxName: BoxIdentifier\n /** The ABI type to decode the value using */\n type: algosdk.ABIType\n}\n\n/**\n * Parameters to get and decode a box value as an ABI type.\n */\nexport interface BoxValuesRequestParams {\n /** The ID of the app return box names for */\n appId: bigint\n /** The names of the boxes to return either as a string, binary array or BoxName` */\n boxNames: BoxIdentifier[]\n /** The ABI type to decode the value using */\n type: algosdk.ABIType\n}\n\n/** Allows management of application information. */\nexport class AppManager {\n private _algod: algosdk.Algodv2\n private _compilationResults: Record<string, CompiledTeal> = {}\n\n /**\n * Creates an `AppManager`\n * @param algod An algod instance\n */\n constructor(algod: algosdk.Algodv2) {\n this._algod = algod\n }\n\n /**\n * Compiles the given TEAL using algod and returns the result, including source map.\n *\n * The result of this compilation is also cached keyed by the TEAL\n * code so it can be retrieved via `getCompilationResult`.\n *\n * This function is re-entrant; it will only compile the same code once.\n *\n * @param tealCode The TEAL code\n * @returns The information about the compiled file\n */\n async compileTeal(tealCode: string): Promise<CompiledTeal> {\n if (this._compilationResults[tealCode]) {\n return this._compilationResults[tealCode]\n }\n\n const compiled = await this._algod.compile(tealCode).sourcemap(true).do()\n const result = {\n teal: tealCode,\n compiled: compiled.result,\n compiledHash: compiled.hash,\n compiledBase64ToBytes: new Uint8Array(Buffer.from(compiled.result, 'base64')),\n sourceMap: new algosdk.SourceMap(compiled['sourcemap']),\n }\n this._compilationResults[tealCode] = result\n\n return result\n }\n\n /**\n * Performs template substitution of a teal template and compiles it, returning the compiled result.\n *\n * Looks for `TMPL_{parameter}` for template replacements and replaces AlgoKit deploy-time control parameters\n * if deployment metadata is specified.\n *\n * * `TMPL_UPDATABLE` for updatability / immutability control\n * * `TMPL_DELETABLE` for deletability / permanence control\n *\n * @param tealTemplateCode The TEAL logic to compile\n * @param templateParams Any parameters to replace in the .teal file before compiling\n * @param deploymentMetadata The deployment metadata the app will be deployed with\n * @returns The information about the compiled code\n */\n async compileTealTemplate(\n tealTemplateCode: string,\n templateParams?: TealTemplateParams,\n deploymentMetadata?: { updatable?: boolean; deletable?: boolean },\n ): Promise<CompiledTeal> {\n let tealCode = AppManager.stripTealComments(tealTemplateCode)\n\n tealCode = AppManager.replaceTealTemplateParams(tealCode, templateParams)\n\n if (deploymentMetadata) {\n tealCode = AppManager.replaceTealTemplateDeployTimeControlParams(tealCode, deploymentMetadata)\n }\n\n return await this.compileTeal(tealCode)\n }\n\n /**\n * Returns a previous compilation result.\n * @param tealCode The TEAL code\n * @returns The information about the previously compiled file\n * or `undefined` if that TEAL code wasn't previously compiled\n */\n getCompilationResult(tealCode: string): CompiledTeal | undefined {\n return this._compilationResults[tealCode]\n }\n\n /**\n * Returns the current app information for the app with the given ID.\n *\n * @example\n * ```typescript\n * const appInfo = await appManager.getById(12353n);\n * ```\n *\n * @param appId The ID of the app\n * @returns The app information\n */\n public async getById(appId: bigint): Promise<AppInformation> {\n const app = modelsv2.Application.from_obj_for_encoding(await this._algod.getApplicationByID(Number(appId)).do())\n return {\n appId: BigInt(app.id),\n appAddress: algosdk.getApplicationAddress(app.id),\n approvalProgram: app.params.approvalProgram,\n clearStateProgram: app.params.clearStateProgram,\n creator: app.params.creator,\n localInts: Number(app.params.localStateSchema?.numUint ?? 0),\n localByteSlices: Number(app.params.localStateSchema?.numByteSlice ?? 0),\n globalInts: Number(app.params.globalStateSchema?.numUint ?? 0),\n globalByteSlices: Number(app.params.globalStateSchema?.numByteSlice ?? 0),\n extraProgramPages: Number(app.params.extraProgramPages ?? 0),\n globalState: AppManager.decodeAppState(app.params.globalState ?? []),\n }\n }\n\n /**\n * Returns the current global state values for the given app ID and account address\n *\n * @param appId The ID of the app to return global state for\n * @returns The current global state for the given app\n */\n public async getGlobalState(appId: bigint) {\n return (await this.getById(appId)).globalState\n }\n\n /**\n * Returns the current local state values for the given app ID and account address\n *\n * @param appId The ID of the app to return local state for\n * @param address The string address of the account to get local state for the given app\n * @returns The current local state for the given (app, account) combination\n */\n public async getLocalState(appId: bigint, address: string) {\n const appInfo = modelsv2.AccountApplicationResponse.from_obj_for_encoding(\n await this._algod.accountApplicationInformation(address, Number(appId)).do(),\n )\n\n if (!appInfo.appLocalState?.keyValue) {\n throw new Error(\"Couldn't find local state\")\n }\n\n return AppManager.decodeAppState(appInfo.appLocalState.keyValue)\n }\n\n /**\n * Returns the names of the current boxes for the given app.\n * @param appId The ID of the app return box names for\n * @returns The current box names\n */\n public async getBoxNames(appId: bigint): Promise<BoxName[]> {\n const boxResult = await this._algod.getApplicationBoxes(Number(appId)).do()\n return boxResult.boxes.map((b) => {\n return {\n nameRaw: b.name,\n nameBase64: Buffer.from(b.name).toString('base64'),\n name: Buffer.from(b.name).toString('utf-8'),\n }\n })\n }\n\n /**\n * Returns the value of the given box name for the given app.\n * @param appId The ID of the app return box names for\n * @param boxName The name of the box to return either as a string, binary array or `BoxName`\n * @returns The current box value as a byte array\n */\n public async getBoxValue(appId: bigint, boxName: BoxIdentifier): Promise<Uint8Array> {\n const name = AppManager.getBoxReference(boxName).name\n const boxResult = await this._algod.getApplicationBoxByName(Number(appId), name).do()\n return boxResult.value\n }\n\n /**\n * Returns the value of the given box names for the given app.\n * @param appId The ID of the app return box names for\n * @param boxNames The names of the boxes to return either as a string, binary array or `BoxName`\n * @returns The current box values as a byte array in the same order as the passed in box names\n */\n public async getBoxValues(appId: bigint, boxNames: BoxIdentifier[]): Promise<Uint8Array[]> {\n return await Promise.all(boxNames.map(async (boxName) => await this.getBoxValue(appId, boxName)))\n }\n\n /**\n * Returns the value of the given box name for the given app decoded based on the given ABI type.\n * @param request The parameters for the box value request\n * @returns The current box value as an ABI value\n */\n public async getBoxValueFromABIType(request: BoxValueRequestParams): Promise<algosdk.ABIValue> {\n const { appId, boxName, type } = request\n const value = await this.getBoxValue(appId, boxName)\n return type.decode(value)\n }\n\n /**\n * Returns the value of the given box names for the given app decoded based on the given ABI type.\n * @param request The parameters for the box value request\n * @returns The current box values as an ABI value in the same order as the passed in box names\n */\n public async getBoxValuesFromABIType(request: BoxValuesRequestParams): Promise<algosdk.ABIValue[]> {\n const { appId, boxNames, type } = request\n return await Promise.all(boxNames.map(async (boxName) => await this.getBoxValueFromABIType({ appId, boxName, type })))\n }\n\n /**\n * Returns a `algosdk.BoxReference` given a `BoxIdentifier` or `BoxReference`.\n * @param boxId The box to return a reference for\n * @returns The box reference ready to pass into a `algosdk.Transaction`\n */\n public static getBoxReference(boxId: BoxIdentifier | BoxReference): algosdk.BoxReference {\n const ref = typeof boxId === 'object' && 'appId' in boxId ? boxId : { appId: 0n, name: boxId }\n return {\n appIndex: Number(ref.appId),\n name:\n typeof ref.name === 'string'\n ? new TextEncoder().encode(ref.name)\n : 'length' in ref.name\n ? ref.name\n : algosdk.decodeAddress(ref.name.addr).publicKey,\n } as algosdk.BoxReference\n }\n\n /**\n * Converts an array of global/local state values from the algod api to a more friendly\n * generic object keyed by the UTF-8 value of the key.\n * @param state A `global-state`, `local-state`, `global-state-deltas` or `local-state-deltas`\n * @returns An object keyeed by the UTF-8 representation of the key with various parsings of the values\n */\n public static decodeAppState(state: { key: string; value: modelsv2.TealValue | modelsv2.EvalDelta }[]): AppState {\n const stateValues = {} as AppState\n\n // Start with empty set\n for (const stateVal of state) {\n const keyBase64 = stateVal.key\n const keyRaw = Buffer.from(keyBase64, 'base64')\n const key = keyRaw.toString('utf-8')\n const tealValue = stateVal.value\n\n const dataTypeFlag = 'action' in tealValue ? tealValue.action : tealValue.type\n let valueBase64: string\n let valueRaw: Buffer\n switch (dataTypeFlag) {\n case 1:\n valueBase64 = tealValue.bytes ?? ''\n valueRaw = Buffer.from(valueBase64, 'base64')\n stateValues[key] = {\n keyRaw,\n keyBase64,\n valueRaw: new Uint8Array(valueRaw),\n valueBase64: valueBase64,\n value: valueRaw.toString('utf-8'),\n }\n break\n case 2: {\n const value = tealValue.uint ?? 0\n stateValues[key] = {\n keyRaw,\n keyBase64,\n value: BigInt(value),\n }\n break\n }\n default:\n throw new Error(`Received unknown state data type of ${dataTypeFlag}`)\n }\n }\n\n return stateValues\n }\n\n /**\n * Returns any ABI return values for the given app call arguments and transaction confirmation.\n * @param confirmation The transaction confirmation from algod\n * @param method The ABI method\n * @returns The return value for the method call\n */\n public static getABIReturn(\n confirmation: modelsv2.PendingTransactionResponse | undefined,\n method: algosdk.ABIMethod | undefined,\n ): ABIReturn | undefined {\n if (!method || !confirmation || method.returns.type === 'void') {\n return undefined\n }\n\n // The parseMethodResponse method mutates the second parameter :(\n const resultDummy: algosdk.ABIResult = {\n txID: '',\n method,\n rawReturnValue: new Uint8Array(),\n }\n return getABIReturnValue(algosdk.AtomicTransactionComposer.parseMethodResponse(method, resultDummy, confirmation))\n }\n\n /**\n * Replaces AlgoKit deploy-time deployment control parameters within the given TEAL template code.\n *\n * * `TMPL_UPDATABLE` for updatability / immutability control\n * * `TMPL_DELETABLE` for deletability / permanence control\n *\n * Note: If these values are defined, but the corresponding `TMPL_*` value\n * isn't in the teal code it will throw an exception.\n *\n * @param tealTemplateCode The TEAL template code to substitute\n * @param params The deploy-time deployment control parameter value to replace\n * @returns The replaced TEAL code\n */\n static replaceTealTemplateDeployTimeControlParams(tealTemplateCode: string, params: { updatable?: boolean; deletable?: boolean }) {\n if (params.updatable !== undefined) {\n if (!tealTemplateCode.includes(UPDATABLE_TEMPLATE_NAME)) {\n throw new Error(\n `Deploy-time updatability control requested for app deployment, but ${UPDATABLE_TEMPLATE_NAME} not present in TEAL code`,\n )\n }\n tealTemplateCode = replaceTemplateVariable(tealTemplateCode, UPDATABLE_TEMPLATE_NAME, (params.updatable ? 1 : 0).toString())\n }\n\n if (params.deletable !== undefined) {\n if (!tealTemplateCode.includes(DELETABLE_TEMPLATE_NAME)) {\n throw new Error(\n `Deploy-time deletability control requested for app deployment, but ${DELETABLE_TEMPLATE_NAME} not present in TEAL code`,\n )\n }\n tealTemplateCode = replaceTemplateVariable(tealTemplateCode, DELETABLE_TEMPLATE_NAME, (params.deletable ? 1 : 0).toString())\n }\n\n return tealTemplateCode\n }\n\n /**\n * Performs template substitution of a teal file.\n *\n * Looks for `TMPL_{parameter}` for template replacements.\n *\n * @param tealTemplateCode The TEAL template code to make parameter replacements in\n * @param templateParams Any parameters to replace in the teal code\n * @returns The TEAL code with replacements\n */\n static replaceTealTemplateParams(tealTemplateCode: string, templateParams?: TealTemplateParams) {\n if (templateParams !== undefined) {\n for (const key in templateParams) {\n const value = templateParams[key]\n const token = `TMPL_${key.replace(/^TMPL_/, '')}`\n\n // If this is a number, first replace any byte representations of the number\n // These may appear in the TEAL in order to circumvent int compression and preserve PC values\n if (typeof value === 'number' || typeof value === 'bigint') {\n tealTemplateCode = tealTemplateCode.replace(new RegExp(`(?<=bytes )${token}`, 'g'), `0x${value.toString(16).padStart(16, '0')}`)\n\n // We could probably return here since mixing pushint and pushbytes is likely not going to happen, but might as well do both\n }\n\n tealTemplateCode = replaceTemplateVariable(\n tealTemplateCode,\n token,\n typeof value === 'string'\n ? `0x${Buffer.from(value, 'utf-8').toString('hex')}`\n : ArrayBuffer.isView(value)\n ? `0x${Buffer.from(value).toString('hex')}`\n : value.toString(),\n )\n }\n }\n\n return tealTemplateCode\n }\n\n /**\n * Remove comments from TEAL code (useful to reduce code size before compilation).\n *\n * @param tealCode The TEAL logic to strip\n * @returns The TEAL without comments\n */\n static stripTealComments(tealCode: string) {\n const stripCommentFromLine = (line: string) => {\n const commentIndex = findUnquotedString(line, '//')\n if (commentIndex === undefined) {\n return line\n }\n return line.slice(0, commentIndex).trimEnd()\n }\n\n return tealCode\n .split('\\n')\n .map((line) => stripCommentFromLine(line))\n .join('\\n')\n }\n}\n\n/**\n * Find the first string within a line of TEAL. Only matches outside of quotes and base64 are returned.\n * Returns undefined if not found\n */\nconst findUnquotedString = (line: string, token: string, startIndex: number = 0, _endIndex?: number): number | undefined => {\n const endIndex = _endIndex === undefined ? line.length : _endIndex\n let index = startIndex\n let inQuotes = false\n let inBase64 = false\n\n while (index < endIndex) {\n const currentChar = line[index]\n if ((currentChar === ' ' || currentChar === '(') && !inQuotes && lastTokenBase64(line, index)) {\n // enter base64\n inBase64 = true\n } else if ((currentChar === ' ' || currentChar === ')') && !inQuotes && inBase64) {\n // exit base64\n inBase64 = false\n } else if (currentChar === '\\\\' && inQuotes) {\n // escaped char, skip next character\n index += 1\n } else if (currentChar === '\"') {\n // quote boundary\n inQuotes = !inQuotes\n } else if (!inQuotes && !inBase64 && line.startsWith(token, index)) {\n // can test for match\n return index\n }\n index += 1\n }\n return undefined\n}\n\nconst lastTokenBase64 = (line: string, index: number): boolean => {\n try {\n const tokens = line.slice(0, index).split(/\\s+/)\n const last = tokens[tokens.length - 1]\n return ['base64', 'b64'].includes(last)\n } catch {\n return false\n }\n}\n\nfunction replaceTemplateVariable(program: string, token: string, replacement: string): string {\n const result: string[] = []\n const tokenIndexOffset = replacement.length - token.length\n\n const programLines = program.split('\\n')\n\n for (const line of programLines) {\n const _commentIndex = findUnquotedString(line, '//')\n const commentIndex = _commentIndex === undefined ? line.length : _commentIndex\n let code = line.substring(0, commentIndex)\n const comment = line.substring(commentIndex)\n let trailingIndex = 0\n\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const tokenIndex = findTemplateToken(code, token, trailingIndex)\n if (tokenIndex === undefined) {\n break\n }\n trailingIndex = tokenIndex + token.length\n const prefix = code.substring(0, tokenIndex)\n const suffix = code.substring(trailingIndex)\n code = `${prefix}${replacement}${suffix}`\n trailingIndex += tokenIndexOffset\n }\n result.push(code + comment)\n }\n\n return result.join('\\n')\n}\n\nconst findTemplateToken = (line: string, token: string, startIndex: number = 0, _endIndex?: number): number | undefined => {\n const endIndex = _endIndex === undefined ? line.length : _endIndex\n\n let index = startIndex\n while (index < endIndex) {\n const tokenIndex = findUnquotedString(line, token, index, endIndex)\n if (tokenIndex === undefined) {\n break\n }\n const trailingIndex = tokenIndex + token.length\n if (\n (tokenIndex === 0 || !isValidTokenCharacter(line[tokenIndex - 1])) &&\n (trailingIndex >= line.length || !isValidTokenCharacter(line[trailingIndex]))\n ) {\n return tokenIndex\n }\n index = trailingIndex\n }\n return undefined\n}\n\nfunction isValidTokenCharacter(char: string): boolean {\n return char.length === 1 && (/\\w/.test(char) || char === '_')\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"app-manager.mjs","sources":["../../src/types/app-manager.ts"],"sourcesContent":["import algosdk, { Address, ProgramSourceMap } from 'algosdk'\nimport { getABIReturnValue } from '../transaction/transaction'\nimport { TransactionSignerAccount } from './account'\nimport {\n BoxName,\n DELETABLE_TEMPLATE_NAME,\n UPDATABLE_TEMPLATE_NAME,\n type ABIReturn,\n type AppState,\n type CompiledTeal,\n type TealTemplateParams,\n} from './app'\nimport modelsv2 = algosdk.modelsv2\n\n/** Information about an app. */\nexport interface AppInformation {\n /** The ID of the app. */\n appId: bigint\n /** The escrow address that the app operates with. */\n appAddress: Address\n /**\n * Approval program.\n */\n approvalProgram: Uint8Array\n /**\n * Clear state program.\n */\n clearStateProgram: Uint8Array\n /**\n * The address that created this application. This is the address where the\n * parameters and global state for this application can be found.\n */\n creator: Address\n /**\n * Current global state values.\n */\n globalState: AppState\n /** The number of allocated ints in per-user local state. */\n localInts: number\n /** The number of allocated byte slices in per-user local state. */\n localByteSlices: number\n /** The number of allocated ints in global state. */\n globalInts: number\n /** The number of allocated byte slices in global state. */\n globalByteSlices: number\n /** Any extra pages that are needed for the smart contract. */\n extraProgramPages?: number\n}\n\n/**\n * Something that identifies an app box name - either a:\n * * `Uint8Array` (the actual binary of the box name)\n * * `string` (that will be encoded to a `Uint8Array`)\n * * `TransactionSignerAccount` (that will be encoded into the\n * public key address of the corresponding account)\n */\nexport type BoxIdentifier = string | Uint8Array | TransactionSignerAccount\n\n/**\n * A grouping of the app ID and name identifier to reference an app box.\n */\nexport interface BoxReference {\n /**\n * A unique application id\n */\n appId: bigint\n /**\n * Identifier for a box name\n */\n name: BoxIdentifier\n}\n\n/**\n * Parameters to get and decode a box value as an ABI type.\n */\nexport interface BoxValueRequestParams {\n /** The ID of the app return box names for */\n appId: bigint\n /** The name of the box to return either as a string, binary array or `BoxName` */\n boxName: BoxIdentifier\n /** The ABI type to decode the value using */\n type: algosdk.ABIType\n}\n\n/**\n * Parameters to get and decode a box value as an ABI type.\n */\nexport interface BoxValuesRequestParams {\n /** The ID of the app return box names for */\n appId: bigint\n /** The names of the boxes to return either as a string, binary array or BoxName` */\n boxNames: BoxIdentifier[]\n /** The ABI type to decode the value using */\n type: algosdk.ABIType\n}\n\n/** Allows management of application information. */\nexport class AppManager {\n private _algod: algosdk.Algodv2\n private _compilationResults: Record<string, CompiledTeal> = {}\n\n /**\n * Creates an `AppManager`\n * @param algod An algod instance\n */\n constructor(algod: algosdk.Algodv2) {\n this._algod = algod\n }\n\n /**\n * Compiles the given TEAL using algod and returns the result, including source map.\n *\n * The result of this compilation is also cached keyed by the TEAL\n * code so it can be retrieved via `getCompilationResult`.\n *\n * This function is re-entrant; it will only compile the same code once.\n *\n * @param tealCode The TEAL code\n * @returns The information about the compiled file\n */\n async compileTeal(tealCode: string): Promise<CompiledTeal> {\n if (this._compilationResults[tealCode]) {\n return this._compilationResults[tealCode]\n }\n\n const compiled = await this._algod.compile(tealCode).sourcemap(true).do()\n const result = {\n teal: tealCode,\n compiled: compiled.result,\n compiledHash: compiled.hash,\n compiledBase64ToBytes: new Uint8Array(Buffer.from(compiled.result, 'base64')),\n sourceMap: new ProgramSourceMap(JSON.parse(algosdk.encodeJSON(compiled.sourcemap!))),\n }\n this._compilationResults[tealCode] = result\n\n return result\n }\n\n /**\n * Performs template substitution of a teal template and compiles it, returning the compiled result.\n *\n * Looks for `TMPL_{parameter}` for template replacements and replaces AlgoKit deploy-time control parameters\n * if deployment metadata is specified.\n *\n * * `TMPL_UPDATABLE` for updatability / immutability control\n * * `TMPL_DELETABLE` for deletability / permanence control\n *\n * @param tealTemplateCode The TEAL logic to compile\n * @param templateParams Any parameters to replace in the .teal file before compiling\n * @param deploymentMetadata The deployment metadata the app will be deployed with\n * @returns The information about the compiled code\n */\n async compileTealTemplate(\n tealTemplateCode: string,\n templateParams?: TealTemplateParams,\n deploymentMetadata?: { updatable?: boolean; deletable?: boolean },\n ): Promise<CompiledTeal> {\n let tealCode = AppManager.stripTealComments(tealTemplateCode)\n\n tealCode = AppManager.replaceTealTemplateParams(tealCode, templateParams)\n\n if (deploymentMetadata) {\n tealCode = AppManager.replaceTealTemplateDeployTimeControlParams(tealCode, deploymentMetadata)\n }\n\n return await this.compileTeal(tealCode)\n }\n\n /**\n * Returns a previous compilation result.\n * @param tealCode The TEAL code\n * @returns The information about the previously compiled file\n * or `undefined` if that TEAL code wasn't previously compiled\n */\n getCompilationResult(tealCode: string): CompiledTeal | undefined {\n return this._compilationResults[tealCode]\n }\n\n /**\n * Returns the current app information for the app with the given ID.\n *\n * @example\n * ```typescript\n * const appInfo = await appManager.getById(12353n);\n * ```\n *\n * @param appId The ID of the app\n * @returns The app information\n */\n public async getById(appId: bigint): Promise<AppInformation> {\n const app = await this._algod.getApplicationByID(Number(appId)).do()\n return {\n appId: BigInt(app.id),\n appAddress: algosdk.getApplicationAddress(app.id),\n approvalProgram: app.params.approvalProgram,\n clearStateProgram: app.params.clearStateProgram,\n creator: app.params.creator,\n localInts: Number(app.params.localStateSchema?.numUint ?? 0),\n localByteSlices: Number(app.params.localStateSchema?.numByteSlice ?? 0),\n globalInts: Number(app.params.globalStateSchema?.numUint ?? 0),\n globalByteSlices: Number(app.params.globalStateSchema?.numByteSlice ?? 0),\n extraProgramPages: Number(app.params.extraProgramPages ?? 0),\n globalState: AppManager.decodeAppState(app.params.globalState ?? []),\n }\n }\n\n /**\n * Returns the current global state values for the given app ID and account address\n *\n * @param appId The ID of the app to return global state for\n * @returns The current global state for the given app\n */\n public async getGlobalState(appId: bigint) {\n return (await this.getById(appId)).globalState\n }\n\n /**\n * Returns the current local state values for the given app ID and account address\n *\n * @param appId The ID of the app to return local state for\n * @param address The string address of the account to get local state for the given app\n * @returns The current local state for the given (app, account) combination\n */\n public async getLocalState(appId: bigint, address: Address | string) {\n const appInfo = await this._algod.accountApplicationInformation(address, appId).do()\n\n if (!appInfo.appLocalState?.keyValue) {\n throw new Error(\"Couldn't find local state\")\n }\n\n return AppManager.decodeAppState(appInfo.appLocalState.keyValue)\n }\n\n /**\n * Returns the names of the current boxes for the given app.\n * @param appId The ID of the app return box names for\n * @returns The current box names\n */\n public async getBoxNames(appId: bigint): Promise<BoxName[]> {\n const boxResult = await this._algod.getApplicationBoxes(appId).do()\n return boxResult.boxes.map((b) => {\n return {\n nameRaw: b.name,\n nameBase64: Buffer.from(b.name).toString('base64'),\n name: Buffer.from(b.name).toString('utf-8'),\n }\n })\n }\n\n /**\n * Returns the value of the given box name for the given app.\n * @param appId The ID of the app return box names for\n * @param boxName The name of the box to return either as a string, binary array or `BoxName`\n * @returns The current box value as a byte array\n */\n public async getBoxValue(appId: bigint, boxName: BoxIdentifier): Promise<Uint8Array> {\n const name = AppManager.getBoxReference(boxName).name\n const boxResult = await this._algod.getApplicationBoxByName(Number(appId), name).do()\n return boxResult.value\n }\n\n /**\n * Returns the value of the given box names for the given app.\n * @param appId The ID of the app return box names for\n * @param boxNames The names of the boxes to return either as a string, binary array or `BoxName`\n * @returns The current box values as a byte array in the same order as the passed in box names\n */\n public async getBoxValues(appId: bigint, boxNames: BoxIdentifier[]): Promise<Uint8Array[]> {\n return await Promise.all(boxNames.map(async (boxName) => await this.getBoxValue(appId, boxName)))\n }\n\n /**\n * Returns the value of the given box name for the given app decoded based on the given ABI type.\n * @param request The parameters for the box value request\n * @returns The current box value as an ABI value\n */\n public async getBoxValueFromABIType(request: BoxValueRequestParams): Promise<algosdk.ABIValue> {\n const { appId, boxName, type } = request\n const value = await this.getBoxValue(appId, boxName)\n return type.decode(value)\n }\n\n /**\n * Returns the value of the given box names for the given app decoded based on the given ABI type.\n * @param request The parameters for the box value request\n * @returns The current box values as an ABI value in the same order as the passed in box names\n */\n public async getBoxValuesFromABIType(request: BoxValuesRequestParams): Promise<algosdk.ABIValue[]> {\n const { appId, boxNames, type } = request\n return await Promise.all(boxNames.map(async (boxName) => await this.getBoxValueFromABIType({ appId, boxName, type })))\n }\n\n /**\n * Returns a `algosdk.BoxReference` given a `BoxIdentifier` or `BoxReference`.\n * @param boxId The box to return a reference for\n * @returns The box reference ready to pass into a `algosdk.Transaction`\n */\n public static getBoxReference(boxId: BoxIdentifier | BoxReference): algosdk.BoxReference {\n const ref = typeof boxId === 'object' && 'appId' in boxId ? boxId : { appId: 0n, name: boxId }\n return {\n appIndex: ref.appId,\n name: typeof ref.name === 'string' ? new TextEncoder().encode(ref.name) : 'length' in ref.name ? ref.name : ref.name.addr.publicKey,\n } as algosdk.BoxReference\n }\n\n /**\n * Converts an array of global/local state values from the algod api to a more friendly\n * generic object keyed by the UTF-8 value of the key.\n * @param state A `global-state`, `local-state`, `global-state-deltas` or `local-state-deltas`\n * @returns An object keyeed by the UTF-8 representation of the key with various parsings of the values\n */\n public static decodeAppState(state: { key: Uint8Array; value: modelsv2.TealValue | modelsv2.EvalDelta }[]): AppState {\n const stateValues = {} as AppState\n\n // Start with empty set\n for (const stateVal of state) {\n const keyBase64 = Buffer.from(stateVal.key).toString('base64')\n const keyRaw = stateVal.key\n const key = Buffer.from(stateVal.key).toString('utf-8')\n const tealValue = stateVal.value\n\n const dataTypeFlag = 'action' in tealValue ? tealValue.action : tealValue.type\n let valueBase64: string\n let valueRaw: Buffer\n switch (dataTypeFlag) {\n case 1:\n valueBase64 =\n typeof tealValue.bytes === 'string' ? tealValue.bytes : tealValue.bytes ? Buffer.from(tealValue.bytes).toString('base64') : ''\n valueRaw = Buffer.from(valueBase64, 'base64')\n stateValues[key] = {\n keyRaw,\n keyBase64,\n valueRaw: new Uint8Array(valueRaw),\n valueBase64: valueBase64,\n value: valueRaw.toString('utf-8'),\n }\n break\n case 2: {\n const value = tealValue.uint ?? 0\n stateValues[key] = {\n keyRaw,\n keyBase64,\n value: BigInt(value),\n }\n break\n }\n default:\n throw new Error(`Received unknown state data type of ${dataTypeFlag}`)\n }\n }\n\n return stateValues\n }\n\n /**\n * Returns any ABI return values for the given app call arguments and transaction confirmation.\n * @param confirmation The transaction confirmation from algod\n * @param method The ABI method\n * @returns The return value for the method call\n */\n public static getABIReturn(\n confirmation: modelsv2.PendingTransactionResponse | undefined,\n method: algosdk.ABIMethod | undefined,\n ): ABIReturn | undefined {\n if (!method || !confirmation || method.returns.type === 'void') {\n return undefined\n }\n\n // The parseMethodResponse method mutates the second parameter :(\n const resultDummy: algosdk.ABIResult = {\n txID: '',\n method,\n rawReturnValue: new Uint8Array(),\n }\n return getABIReturnValue(algosdk.AtomicTransactionComposer.parseMethodResponse(method, resultDummy, confirmation))\n }\n\n /**\n * Replaces AlgoKit deploy-time deployment control parameters within the given TEAL template code.\n *\n * * `TMPL_UPDATABLE` for updatability / immutability control\n * * `TMPL_DELETABLE` for deletability / permanence control\n *\n * Note: If these values are defined, but the corresponding `TMPL_*` value\n * isn't in the teal code it will throw an exception.\n *\n * @param tealTemplateCode The TEAL template code to substitute\n * @param params The deploy-time deployment control parameter value to replace\n * @returns The replaced TEAL code\n */\n static replaceTealTemplateDeployTimeControlParams(tealTemplateCode: string, params: { updatable?: boolean; deletable?: boolean }) {\n if (params.updatable !== undefined) {\n if (!tealTemplateCode.includes(UPDATABLE_TEMPLATE_NAME)) {\n throw new Error(\n `Deploy-time updatability control requested for app deployment, but ${UPDATABLE_TEMPLATE_NAME} not present in TEAL code`,\n )\n }\n tealTemplateCode = replaceTemplateVariable(tealTemplateCode, UPDATABLE_TEMPLATE_NAME, (params.updatable ? 1 : 0).toString())\n }\n\n if (params.deletable !== undefined) {\n if (!tealTemplateCode.includes(DELETABLE_TEMPLATE_NAME)) {\n throw new Error(\n `Deploy-time deletability control requested for app deployment, but ${DELETABLE_TEMPLATE_NAME} not present in TEAL code`,\n )\n }\n tealTemplateCode = replaceTemplateVariable(tealTemplateCode, DELETABLE_TEMPLATE_NAME, (params.deletable ? 1 : 0).toString())\n }\n\n return tealTemplateCode\n }\n\n /**\n * Performs template substitution of a teal file.\n *\n * Looks for `TMPL_{parameter}` for template replacements.\n *\n * @param tealTemplateCode The TEAL template code to make parameter replacements in\n * @param templateParams Any parameters to replace in the teal code\n * @returns The TEAL code with replacements\n */\n static replaceTealTemplateParams(tealTemplateCode: string, templateParams?: TealTemplateParams) {\n if (templateParams !== undefined) {\n for (const key in templateParams) {\n const value = templateParams[key]\n const token = `TMPL_${key.replace(/^TMPL_/, '')}`\n\n // If this is a number, first replace any byte representations of the number\n // These may appear in the TEAL in order to circumvent int compression and preserve PC values\n if (typeof value === 'number' || typeof value === 'bigint') {\n tealTemplateCode = tealTemplateCode.replace(new RegExp(`(?<=bytes )${token}`, 'g'), `0x${value.toString(16).padStart(16, '0')}`)\n\n // We could probably return here since mixing pushint and pushbytes is likely not going to happen, but might as well do both\n }\n\n tealTemplateCode = replaceTemplateVariable(\n tealTemplateCode,\n token,\n typeof value === 'string'\n ? `0x${Buffer.from(value, 'utf-8').toString('hex')}`\n : ArrayBuffer.isView(value)\n ? `0x${Buffer.from(value).toString('hex')}`\n : value.toString(),\n )\n }\n }\n\n return tealTemplateCode\n }\n\n /**\n * Remove comments from TEAL code (useful to reduce code size before compilation).\n *\n * @param tealCode The TEAL logic to strip\n * @returns The TEAL without comments\n */\n static stripTealComments(tealCode: string) {\n const stripCommentFromLine = (line: string) => {\n const commentIndex = findUnquotedString(line, '//')\n if (commentIndex === undefined) {\n return line\n }\n return line.slice(0, commentIndex).trimEnd()\n }\n\n return tealCode\n .split('\\n')\n .map((line) => stripCommentFromLine(line))\n .join('\\n')\n }\n}\n\n/**\n * Find the first string within a line of TEAL. Only matches outside of quotes and base64 are returned.\n * Returns undefined if not found\n */\nconst findUnquotedString = (line: string, token: string, startIndex: number = 0, _endIndex?: number): number | undefined => {\n const endIndex = _endIndex === undefined ? line.length : _endIndex\n let index = startIndex\n let inQuotes = false\n let inBase64 = false\n\n while (index < endIndex) {\n const currentChar = line[index]\n if ((currentChar === ' ' || currentChar === '(') && !inQuotes && lastTokenBase64(line, index)) {\n // enter base64\n inBase64 = true\n } else if ((currentChar === ' ' || currentChar === ')') && !inQuotes && inBase64) {\n // exit base64\n inBase64 = false\n } else if (currentChar === '\\\\' && inQuotes) {\n // escaped char, skip next character\n index += 1\n } else if (currentChar === '\"') {\n // quote boundary\n inQuotes = !inQuotes\n } else if (!inQuotes && !inBase64 && line.startsWith(token, index)) {\n // can test for match\n return index\n }\n index += 1\n }\n return undefined\n}\n\nconst lastTokenBase64 = (line: string, index: number): boolean => {\n try {\n const tokens = line.slice(0, index).split(/\\s+/)\n const last = tokens[tokens.length - 1]\n return ['base64', 'b64'].includes(last)\n } catch {\n return false\n }\n}\n\nfunction replaceTemplateVariable(program: string, token: string, replacement: string): string {\n const result: string[] = []\n const tokenIndexOffset = replacement.length - token.length\n\n const programLines = program.split('\\n')\n\n for (const line of programLines) {\n const _commentIndex = findUnquotedString(line, '//')\n const commentIndex = _commentIndex === undefined ? line.length : _commentIndex\n let code = line.substring(0, commentIndex)\n const comment = line.substring(commentIndex)\n let trailingIndex = 0\n\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const tokenIndex = findTemplateToken(code, token, trailingIndex)\n if (tokenIndex === undefined) {\n break\n }\n trailingIndex = tokenIndex + token.length\n const prefix = code.substring(0, tokenIndex)\n const suffix = code.substring(trailingIndex)\n code = `${prefix}${replacement}${suffix}`\n trailingIndex += tokenIndexOffset\n }\n result.push(code + comment)\n }\n\n return result.join('\\n')\n}\n\nconst findTemplateToken = (line: string, token: string, startIndex: number = 0, _endIndex?: number): number | undefined => {\n const endIndex = _endIndex === undefined ? line.length : _endIndex\n\n let index = startIndex\n while (index < endIndex) {\n const tokenIndex = findUnquotedString(line, token, index, endIndex)\n if (tokenIndex === undefined) {\n break\n }\n const trailingIndex = tokenIndex + token.length\n if (\n (tokenIndex === 0 || !isValidTokenCharacter(line[tokenIndex - 1])) &&\n (trailingIndex >= line.length || !isValidTokenCharacter(line[trailingIndex]))\n ) {\n return tokenIndex\n }\n index = trailingIndex\n }\n return undefined\n}\n\nfunction isValidTokenCharacter(char: string): boolean {\n return char.length === 1 && (/\\w/.test(char) || char === '_')\n}\n"],"names":[],"mappings":";;;;AAgGA;MACa,UAAU,CAAA;AAIrB;;;AAGG;AACH,IAAA,WAAA,CAAY,KAAsB,EAAA;QAN1B,IAAmB,CAAA,mBAAA,GAAiC,EAAE;AAO5D,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;;AAGrB;;;;;;;;;;AAUG;IACH,MAAM,WAAW,CAAC,QAAgB,EAAA;AAChC,QAAA,IAAI,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,EAAE;AACtC,YAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC;;AAG3C,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE;AACzE,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,QAAQ,CAAC,MAAM;YACzB,YAAY,EAAE,QAAQ,CAAC,IAAI;AAC3B,YAAA,qBAAqB,EAAE,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AAC7E,YAAA,SAAS,EAAE,IAAI,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAU,CAAC,CAAC,CAAC;SACrF;AACD,QAAA,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,GAAG,MAAM;AAE3C,QAAA,OAAO,MAAM;;AAGf;;;;;;;;;;;;;AAaG;AACH,IAAA,MAAM,mBAAmB,CACvB,gBAAwB,EACxB,cAAmC,EACnC,kBAAiE,EAAA;QAEjE,IAAI,QAAQ,GAAG,UAAU,CAAC,iBAAiB,CAAC,gBAAgB,CAAC;QAE7D,QAAQ,GAAG,UAAU,CAAC,yBAAyB,CAAC,QAAQ,EAAE,cAAc,CAAC;QAEzE,IAAI,kBAAkB,EAAE;YACtB,QAAQ,GAAG,UAAU,CAAC,0CAA0C,CAAC,QAAQ,EAAE,kBAAkB,CAAC;;AAGhG,QAAA,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;;AAGzC;;;;;AAKG;AACH,IAAA,oBAAoB,CAAC,QAAgB,EAAA;AACnC,QAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC;;AAG3C;;;;;;;;;;AAUG;IACI,MAAM,OAAO,CAAC,KAAa,EAAA;AAChC,QAAA,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;QACpE,OAAO;AACL,YAAA,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YACrB,UAAU,EAAE,OAAO,CAAC,qBAAqB,CAAC,GAAG,CAAC,EAAE,CAAC;AACjD,YAAA,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,eAAe;AAC3C,YAAA,iBAAiB,EAAE,GAAG,CAAC,MAAM,CAAC,iBAAiB;AAC/C,YAAA,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,OAAO;AAC3B,YAAA,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,gBAAgB,EAAE,OAAO,IAAI,CAAC,CAAC;AAC5D,YAAA,eAAe,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,gBAAgB,EAAE,YAAY,IAAI,CAAC,CAAC;AACvE,YAAA,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,iBAAiB,EAAE,OAAO,IAAI,CAAC,CAAC;AAC9D,YAAA,gBAAgB,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,iBAAiB,EAAE,YAAY,IAAI,CAAC,CAAC;YACzE,iBAAiB,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,iBAAiB,IAAI,CAAC,CAAC;AAC5D,YAAA,WAAW,EAAE,UAAU,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC;SACrE;;AAGH;;;;;AAKG;IACI,MAAM,cAAc,CAAC,KAAa,EAAA;QACvC,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,WAAW;;AAGhD;;;;;;AAMG;AACI,IAAA,MAAM,aAAa,CAAC,KAAa,EAAE,OAAyB,EAAA;AACjE,QAAA,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,6BAA6B,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE;AAEpF,QAAA,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,QAAQ,EAAE;AACpC,YAAA,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC;;QAG9C,OAAO,UAAU,CAAC,cAAc,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC;;AAGlE;;;;AAIG;IACI,MAAM,WAAW,CAAC,KAAa,EAAA;AACpC,QAAA,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE;QACnE,OAAO,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;YAC/B,OAAO;gBACL,OAAO,EAAE,CAAC,CAAC,IAAI;AACf,gBAAA,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAClD,gBAAA,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;aAC5C;AACH,SAAC,CAAC;;AAGJ;;;;;AAKG;AACI,IAAA,MAAM,WAAW,CAAC,KAAa,EAAE,OAAsB,EAAA;QAC5D,MAAM,IAAI,GAAG,UAAU,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,IAAI;AACrD,QAAA,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE;QACrF,OAAO,SAAS,CAAC,KAAK;;AAGxB;;;;;AAKG;AACI,IAAA,MAAM,YAAY,CAAC,KAAa,EAAE,QAAyB,EAAA;QAChE,OAAO,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,OAAO,KAAK,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;;AAGnG;;;;AAIG;IACI,MAAM,sBAAsB,CAAC,OAA8B,EAAA;QAChE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,OAAO;QACxC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC;AACpD,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;;AAG3B;;;;AAIG;IACI,MAAM,uBAAuB,CAAC,OAA+B,EAAA;QAClE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,OAAO;AACzC,QAAA,OAAO,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,OAAO,KAAK,MAAM,IAAI,CAAC,sBAAsB,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;;AAGxH;;;;AAIG;IACI,OAAO,eAAe,CAAC,KAAmC,EAAA;QAC/D,MAAM,GAAG,GAAG,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,GAAG,KAAK,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;QAC9F,OAAO;YACL,QAAQ,EAAE,GAAG,CAAC,KAAK;AACnB,YAAA,IAAI,EAAE,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,QAAQ,IAAI,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS;SAC5G;;AAG3B;;;;;AAKG;IACI,OAAO,cAAc,CAAC,KAA4E,EAAA;QACvG,MAAM,WAAW,GAAG,EAAc;;AAGlC,QAAA,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE;AAC5B,YAAA,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAC9D,YAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG;AAC3B,YAAA,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;AACvD,YAAA,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK;AAEhC,YAAA,MAAM,YAAY,GAAG,QAAQ,IAAI,SAAS,GAAG,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,IAAI;AAC9E,YAAA,IAAI,WAAmB;AACvB,YAAA,IAAI,QAAgB;YACpB,QAAQ,YAAY;AAClB,gBAAA,KAAK,CAAC;oBACJ,WAAW;AACT,wBAAA,OAAO,SAAS,CAAC,KAAK,KAAK,QAAQ,GAAG,SAAS,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE;oBAChI,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC;oBAC7C,WAAW,CAAC,GAAG,CAAC,GAAG;wBACjB,MAAM;wBACN,SAAS;AACT,wBAAA,QAAQ,EAAE,IAAI,UAAU,CAAC,QAAQ,CAAC;AAClC,wBAAA,WAAW,EAAE,WAAW;AACxB,wBAAA,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC;qBAClC;oBACD;gBACF,KAAK,CAAC,EAAE;AACN,oBAAA,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,IAAI,CAAC;oBACjC,WAAW,CAAC,GAAG,CAAC,GAAG;wBACjB,MAAM;wBACN,SAAS;AACT,wBAAA,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;qBACrB;oBACD;;AAEF,gBAAA;AACE,oBAAA,MAAM,IAAI,KAAK,CAAC,uCAAuC,YAAY,CAAA,CAAE,CAAC;;;AAI5E,QAAA,OAAO,WAAW;;AAGpB;;;;;AAKG;AACI,IAAA,OAAO,YAAY,CACxB,YAA6D,EAC7D,MAAqC,EAAA;AAErC,QAAA,IAAI,CAAC,MAAM,IAAI,CAAC,YAAY,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE;AAC9D,YAAA,OAAO,SAAS;;;AAIlB,QAAA,MAAM,WAAW,GAAsB;AACrC,YAAA,IAAI,EAAE,EAAE;YACR,MAAM;YACN,cAAc,EAAE,IAAI,UAAU,EAAE;SACjC;AACD,QAAA,OAAO,iBAAiB,CAAC,OAAO,CAAC,yBAAyB,CAAC,mBAAmB,CAAC,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;;AAGpH;;;;;;;;;;;;AAYG;AACH,IAAA,OAAO,0CAA0C,CAAC,gBAAwB,EAAE,MAAoD,EAAA;AAC9H,QAAA,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,EAAE;YAClC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAAE;AACvD,gBAAA,MAAM,IAAI,KAAK,CACb,sEAAsE,uBAAuB,CAAA,yBAAA,CAA2B,CACzH;;YAEH,gBAAgB,GAAG,uBAAuB,CAAC,gBAAgB,EAAE,uBAAuB,EAAE,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC;;AAG9H,QAAA,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,EAAE;YAClC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAAE;AACvD,gBAAA,MAAM,IAAI,KAAK,CACb,sEAAsE,uBAAuB,CAAA,yBAAA,CAA2B,CACzH;;YAEH,gBAAgB,GAAG,uBAAuB,CAAC,gBAAgB,EAAE,uBAAuB,EAAE,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC;;AAG9H,QAAA,OAAO,gBAAgB;;AAGzB;;;;;;;;AAQG;AACH,IAAA,OAAO,yBAAyB,CAAC,gBAAwB,EAAE,cAAmC,EAAA;AAC5F,QAAA,IAAI,cAAc,KAAK,SAAS,EAAE;AAChC,YAAA,KAAK,MAAM,GAAG,IAAI,cAAc,EAAE;AAChC,gBAAA,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC;AACjC,gBAAA,MAAM,KAAK,GAAG,CAAQ,KAAA,EAAA,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA,CAAE;;;gBAIjD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC1D,oBAAA,gBAAgB,GAAG,gBAAgB,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,CAAc,WAAA,EAAA,KAAK,CAAE,CAAA,EAAE,GAAG,CAAC,EAAE,CAAK,EAAA,EAAA,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA,CAAE,CAAC;;;gBAKlI,gBAAgB,GAAG,uBAAuB,CACxC,gBAAgB,EAChB,KAAK,EACL,OAAO,KAAK,KAAK;AACf,sBAAE,CAAA,EAAA,EAAK,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAE;AACpD,sBAAE,WAAW,CAAC,MAAM,CAAC,KAAK;AACxB,0BAAE,CAAA,EAAA,EAAK,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAE;AAC3C,0BAAE,KAAK,CAAC,QAAQ,EAAE,CACvB;;;AAIL,QAAA,OAAO,gBAAgB;;AAGzB;;;;;AAKG;IACH,OAAO,iBAAiB,CAAC,QAAgB,EAAA;AACvC,QAAA,MAAM,oBAAoB,GAAG,CAAC,IAAY,KAAI;YAC5C,MAAM,YAAY,GAAG,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC;AACnD,YAAA,IAAI,YAAY,KAAK,SAAS,EAAE;AAC9B,gBAAA,OAAO,IAAI;;YAEb,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,OAAO,EAAE;AAC9C,SAAC;AAED,QAAA,OAAO;aACJ,KAAK,CAAC,IAAI;aACV,GAAG,CAAC,CAAC,IAAI,KAAK,oBAAoB,CAAC,IAAI,CAAC;aACxC,IAAI,CAAC,IAAI,CAAC;;AAEhB;AAED;;;AAGG;AACH,MAAM,kBAAkB,GAAG,CAAC,IAAY,EAAE,KAAa,EAAE,UAAA,GAAqB,CAAC,EAAE,SAAkB,KAAwB;AACzH,IAAA,MAAM,QAAQ,GAAG,SAAS,KAAK,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,SAAS;IAClE,IAAI,KAAK,GAAG,UAAU;IACtB,IAAI,QAAQ,GAAG,KAAK;IACpB,IAAI,QAAQ,GAAG,KAAK;AAEpB,IAAA,OAAO,KAAK,GAAG,QAAQ,EAAE;AACvB,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC;QAC/B,IAAI,CAAC,WAAW,KAAK,GAAG,IAAI,WAAW,KAAK,GAAG,KAAK,CAAC,QAAQ,IAAI,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE;;YAE7F,QAAQ,GAAG,IAAI;;AACV,aAAA,IAAI,CAAC,WAAW,KAAK,GAAG,IAAI,WAAW,KAAK,GAAG,KAAK,CAAC,QAAQ,IAAI,QAAQ,EAAE;;YAEhF,QAAQ,GAAG,KAAK;;AACX,aAAA,IAAI,WAAW,KAAK,IAAI,IAAI,QAAQ,EAAE;;YAE3C,KAAK,IAAI,CAAC;;AACL,aAAA,IAAI,WAAW,KAAK,GAAG,EAAE;;YAE9B,QAAQ,GAAG,CAAC,QAAQ;;AACf,aAAA,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;;AAElE,YAAA,OAAO,KAAK;;QAEd,KAAK,IAAI,CAAC;;AAEZ,IAAA,OAAO,SAAS;AAClB,CAAC;AAED,MAAM,eAAe,GAAG,CAAC,IAAY,EAAE,KAAa,KAAa;AAC/D,IAAA,IAAI;AACF,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;QAChD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QACtC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;;AACvC,IAAA,MAAM;AACN,QAAA,OAAO,KAAK;;AAEhB,CAAC;AAED,SAAS,uBAAuB,CAAC,OAAe,EAAE,KAAa,EAAE,WAAmB,EAAA;IAClF,MAAM,MAAM,GAAa,EAAE;IAC3B,MAAM,gBAAgB,GAAG,WAAW,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM;IAE1D,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;AAExC,IAAA,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE;QAC/B,MAAM,aAAa,GAAG,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC;AACpD,QAAA,MAAM,YAAY,GAAG,aAAa,KAAK,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,aAAa;QAC9E,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,YAAY,CAAC;QAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC;QAC5C,IAAI,aAAa,GAAG,CAAC;;QAGrB,OAAO,IAAI,EAAE;YACX,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,EAAE,KAAK,EAAE,aAAa,CAAC;AAChE,YAAA,IAAI,UAAU,KAAK,SAAS,EAAE;gBAC5B;;AAEF,YAAA,aAAa,GAAG,UAAU,GAAG,KAAK,CAAC,MAAM;YACzC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC;YAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC;YAC5C,IAAI,GAAG,GAAG,MAAM,CAAA,EAAG,WAAW,CAAG,EAAA,MAAM,EAAE;YACzC,aAAa,IAAI,gBAAgB;;AAEnC,QAAA,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;;AAG7B,IAAA,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;AAC1B;AAEA,MAAM,iBAAiB,GAAG,CAAC,IAAY,EAAE,KAAa,EAAE,UAAA,GAAqB,CAAC,EAAE,SAAkB,KAAwB;AACxH,IAAA,MAAM,QAAQ,GAA6B,IAAI,CAAC,MAAM,CAAY;IAElE,IAAI,KAAK,GAAG,UAAU;AACtB,IAAA,OAAO,KAAK,GAAG,QAAQ,EAAE;AACvB,QAAA,MAAM,UAAU,GAAG,kBAAkB,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC;AACnE,QAAA,IAAI,UAAU,KAAK,SAAS,EAAE;YAC5B;;AAEF,QAAA,MAAM,aAAa,GAAG,UAAU,GAAG,KAAK,CAAC,MAAM;AAC/C,QAAA,IACE,CAAC,UAAU,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;AACjE,aAAC,aAAa,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,EAC7E;AACA,YAAA,OAAO,UAAU;;QAEnB,KAAK,GAAG,aAAa;;AAEvB,IAAA,OAAO,SAAS;AAClB,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAY,EAAA;AACzC,IAAA,OAAO,IAAI,CAAC,MAAM,KAAK,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,GAAG,CAAC;AAC/D;;;;"}
|
package/types/app.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ import ABIType = algosdk.ABIType;
|
|
|
8
8
|
import ABIValue = algosdk.ABIValue;
|
|
9
9
|
import Address = algosdk.Address;
|
|
10
10
|
import OnApplicationComplete = algosdk.OnApplicationComplete;
|
|
11
|
-
import SourceMap = algosdk.
|
|
11
|
+
import SourceMap = algosdk.ProgramSourceMap;
|
|
12
12
|
import SuggestedParams = algosdk.SuggestedParams;
|
|
13
13
|
import Transaction = algosdk.Transaction;
|
|
14
14
|
/** The name of the TEAL template variable for deploy-time immutability control */
|
|
@@ -288,9 +288,9 @@ export interface AppDeploymentParams extends Omit<CreateAppParams, 'onCompleteAc
|
|
|
288
288
|
}
|
|
289
289
|
/** The result of compiling the approval and clear state TEAL programs for an app */
|
|
290
290
|
export interface AppCompilationResult {
|
|
291
|
-
/** The
|
|
291
|
+
/** The result of compiling the approval program */
|
|
292
292
|
compiledApproval: CompiledTeal;
|
|
293
|
-
/** The
|
|
293
|
+
/** The result of compiling the clear state program */
|
|
294
294
|
compiledClear: CompiledTeal;
|
|
295
295
|
}
|
|
296
296
|
export type AppReturn<TReturn> = {
|
|
@@ -309,7 +309,7 @@ export type SendAppCreateTransactionResult = Expand<SendAppUpdateTransactionResu
|
|
|
309
309
|
/** The id of the created app */
|
|
310
310
|
appId: bigint;
|
|
311
311
|
/** The Algorand address of the account associated with the app */
|
|
312
|
-
appAddress:
|
|
312
|
+
appAddress: Address;
|
|
313
313
|
}>;
|
|
314
314
|
/** Object holding app state values */
|
|
315
315
|
export interface AppState {
|
package/types/app.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.js","sources":["../../src/types/app.ts"],"sourcesContent":["import algosdk from 'algosdk'\nimport { Expand } from './expand'\nimport {\n SendSingleTransactionResult,\n SendTransactionFrom,\n SendTransactionParams,\n SendTransactionResult,\n SendTransactionResults,\n TransactionNote,\n TransactionToSign,\n} from './transaction'\nimport ABIArgument = algosdk.ABIArgument\nimport ABIMethod = algosdk.ABIMethod\nimport ABIMethodParams = algosdk.ABIMethodParams\nimport ABIType = algosdk.ABIType\nimport ABIValue = algosdk.ABIValue\nimport Address = algosdk.Address\nimport OnApplicationComplete = algosdk.OnApplicationComplete\nimport SourceMap = algosdk.SourceMap\nimport SuggestedParams = algosdk.SuggestedParams\nimport Transaction = algosdk.Transaction\n\n/** The name of the TEAL template variable for deploy-time immutability control */\nexport const UPDATABLE_TEMPLATE_NAME = 'TMPL_UPDATABLE'\n\n/** The name of the TEAL template variable for deploy-time permanence control */\nexport const DELETABLE_TEMPLATE_NAME = 'TMPL_DELETABLE'\n\n/** The app create/update [ARC-2](https://github.com/algorandfoundation/ARCs/blob/main/ARCs/arc-0002.md) transaction note prefix */\nexport const APP_DEPLOY_NOTE_DAPP = 'ALGOKIT_DEPLOYER'\n\n/** The maximum number of bytes in a single app code page */\nexport const APP_PAGE_MAX_SIZE = 2048\n\n/** First 4 bytes of SHA-512/256 hash of \"return\" for retrieving ABI return values */\nexport const ABI_RETURN_PREFIX = new Uint8Array([21, 31, 124, 117])\n\n/** Information about an Algorand app */\nexport interface AppReference {\n /** The id of the app */\n appId: number | bigint\n /** The Algorand address of the account associated with the app */\n appAddress: string\n}\n\n/**\n * @deprecated Use `types/app-manager/BoxReference` instead.\n *\n * A grouping of the app ID and name of the box in an Uint8Array\n */\nexport interface BoxReference {\n /**\n * A unique application id\n */\n appId: number | bigint\n /**\n * Name of box to reference\n */\n name: BoxIdentifier\n}\n\n/**\n * @deprecated Use `types/app-manager/BoxIdentifier` instead.\n *\n * Something that identifies a box name - either a:\n * * `Uint8Array`\n * * `string` (that will be encoded to a Uint8Array)\n * * `SendTransactionFrom` (encoded into the public key address of the corresponding account)\n */\nexport type BoxIdentifier = string | Uint8Array | SendTransactionFrom\n\n/** Common app call arguments for ABI and non-ABI (raw) calls */\nexport interface CoreAppCallArgs {\n /** The optional lease for the transaction */\n lease?: string | Uint8Array\n /** Any box references to load */\n boxes?: (algosdk.BoxReference | BoxReference | BoxIdentifier)[]\n /** The address of any accounts to load in */\n accounts?: (string | Address)[]\n /** IDs of any apps to load into the foreignApps array */\n apps?: number[]\n /** IDs of any assets to load into the foreignAssets array */\n assets?: number[]\n /** Optional account / account address that should be authorised to transact on behalf of the from account the app call is sent from after this transaction.\n *\n * **Note:** Use with extreme caution and review the [official rekey guidance](https://developer.algorand.org/docs/get-details/accounts/rekey/) first.\n */\n rekeyTo?: SendTransactionFrom | string\n}\n\n/**\n * App call args with non-ABI (raw) values (minus some processing like encoding strings as binary)\n */\nexport interface RawAppCallArgs extends CoreAppCallArgs {\n /** Any application arguments to pass through */\n appArgs?: (Uint8Array | string)[]\n /** Property to aid intellisense */\n method?: undefined\n}\n\n/** An argument for an ABI method, either a primitive value, or a transaction with or without signer, or the unawaited async return value of an algokit method that returns a `SendTransactionResult` */\nexport type ABIAppCallArg =\n | ABIArgument\n | TransactionToSign\n | Transaction\n | Promise<SendTransactionResult>\n | SendTransactionResult\n | undefined\n\n/**\n * App call args for an ABI call\n */\nexport type ABIAppCallArgs = CoreAppCallArgs & {\n /** The ABI method to call */\n method: ABIMethodParams | ABIMethod\n /** The ABI method args to pass in */\n methodArgs: ABIAppCallArg[]\n}\n\n/** Arguments to pass to an app call either:\n * * The raw app call values to pass through into the transaction (after processing); or\n * * An ABI method definition (method and args)\n **/\nexport type AppCallArgs = RawAppCallArgs | ABIAppCallArgs\n\n/**\n * @deprecated Use `TransactionComposer` to construct create app transactions instead.\n *\n * Base interface for common data passed to an app create or update.\n */\ninterface CreateOrUpdateAppParams extends SendTransactionParams {\n /** The account (with private key loaded) that will send the transaction */\n from: SendTransactionFrom\n /** The approval program as raw teal (string) or compiled teal, base 64 encoded as a byte array (Uint8Array) */\n approvalProgram: Uint8Array | string\n /** The clear state program as raw teal (string) or compiled teal, base 64 encoded as a byte array (Uint8Array) */\n clearStateProgram: Uint8Array | string\n /** Optional transaction parameters */\n transactionParams?: SuggestedParams\n /** The (optional) transaction note */\n note?: TransactionNote\n /** The arguments passed in to the app call */\n args?: AppCallArgs\n}\n\n/**\n * @deprecated Use `TransactionComposer` to construct create app transactions instead.\n *\n * Parameters that are passed in when creating an app. */\nexport interface CreateAppParams extends CreateOrUpdateAppParams {\n /** The storage schema to request for the created app */\n schema: AppStorageSchema\n /** Override the on-completion action for the create call; defaults to NoOp */\n onCompleteAction?: Exclude<AppCallType, 'clear_state'> | Exclude<OnApplicationComplete, OnApplicationComplete.ClearStateOC>\n}\n\n/**\n * @deprecated Use `TransactionComposer` to construct update app transactions instead.\n *\n * Parameters that are passed in when updating an app. */\nexport interface UpdateAppParams extends CreateOrUpdateAppParams {\n /** The id of the app to update */\n appId: number | bigint\n}\n\n/**\n * @deprecated Use `algosdk.OnApplicationComplete` directly instead.\n *\n * The type of call / [on-completion action](https://developer.algorand.org/docs/get-details/dapps/smart-contracts/apps/#the-lifecycle-of-a-smart-contract) for a smart contract call.\n *\n * Equivalent of `algosdk.OnApplicationComplete`, but as a more convenient string enum.\n *\n * * `no_op`: Normal smart contract call, no special on-complete action\n * * `opt_in`: Opt-in to smart contract local storage\n * * `close_out`: Close-out local storage storage\n * * `clear_state`: Clear local storage state\n * * `update_application`: Update the smart contract\n * * `delete_application`: Delete the smart contract\n */\nexport type AppCallType = 'no_op' | 'opt_in' | 'close_out' | 'clear_state' | 'update_application' | 'delete_application'\n\n/** Parameters representing a call to an app. */\nexport interface AppCallParams extends SendTransactionParams {\n /** The id of the app to call */\n appId: number | bigint\n /** The type of call, everything except create (see `createApp`) and update (see `updateApp`) */\n callType: Exclude<AppCallType, 'update_application'> | Exclude<OnApplicationComplete, OnApplicationComplete.UpdateApplicationOC>\n /** The account to make the call from */\n from: SendTransactionFrom\n /** Optional transaction parameters */\n transactionParams?: SuggestedParams\n /** The (optional) transaction note */\n note?: TransactionNote\n /** The arguments passed in to the app call */\n args?: AppCallArgs\n}\n\n/** Parameters representing the storage schema of an app. */\nexport interface AppStorageSchema {\n /** Restricts number of ints in per-user local state */\n localInts: number\n /** Restricts number of byte slices in per-user local state */\n localByteSlices: number\n /** Restricts number of ints in global state */\n globalInts: number\n /** Restricts number of byte slices in global state */\n globalByteSlices: number\n /** Any extra pages that are needed for the smart contract; if left blank then the right number of pages will be calculated based on the teal code size */\n extraPages?: number\n}\n\n/** Information about a compiled teal program */\nexport interface CompiledTeal {\n /** Original TEAL code */\n teal: string\n /** The compiled code */\n compiled: string\n /** The hash returned by the compiler */\n compiledHash: string\n /** The base64 encoded code as a byte array */\n compiledBase64ToBytes: Uint8Array\n /** Source map from the compilation */\n sourceMap: SourceMap\n}\n\nexport interface AppCallTransactionResultOfType<T> extends SendTransactionResults, SendTransactionResult {\n /** If an ABI method was called the processed return value */\n return?: T\n}\n\n/** Result from calling an app */\nexport type AppCallTransactionResult = AppCallTransactionResultOfType<ABIReturn>\n\n/** The return value of an ABI method call */\nexport type ABIReturn =\n | {\n rawReturnValue: Uint8Array\n returnValue: ABIValue\n method: ABIMethod\n decodeError: undefined\n }\n | { rawReturnValue?: undefined; returnValue?: undefined; method?: undefined; decodeError: Error }\n\n/**\n * The payload of the metadata to add to the transaction note when deploying an app, noting it will be prefixed with `APP_DEPLOY_NOTE_PREFIX`.\n */\nexport interface AppDeployMetadata {\n /** The unique name identifier of the app within the creator account */\n name: string\n /** The version of app that is / will be deployed */\n version: string\n /** Whether or not the app is deletable / permanent / unspecified */\n deletable?: boolean\n /** Whether or not the app is updatable / immutable / unspecified */\n updatable?: boolean\n}\n\n/** The metadata that can be collected about a deployed app */\nexport interface AppMetadata extends AppReference, AppDeployMetadata {\n /** The round the app was created */\n createdRound: number\n /** The last round that the app was updated */\n updatedRound: number\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 creator: Readonly<string>\n apps: Readonly<{\n [name: string]: AppMetadata\n }>\n}\n\n/** Dictionary of deploy-time parameters to replace in a teal template.\n *\n * Note: Looks for `TMPL_{parameter}` for template replacements i.e. you can leave out the `TMPL_`.\n *\n */\nexport interface TealTemplateParams {\n [key: string]: string | bigint | number | Uint8Array\n}\n\n/** What action to perform when deploying an app and an update is detected in the TEAL code */\nexport enum OnUpdate {\n /** Fail the deployment */\n Fail,\n /** Update the app */\n UpdateApp,\n /** Delete the app and create a new one in its place */\n ReplaceApp,\n /** Create a new app */\n AppendApp,\n}\n\n/** What action to perform when deploying an app and a breaking schema change is detected */\nexport enum OnSchemaBreak {\n /** Fail the deployment */\n Fail,\n /** Delete the app and create a new one in its place */\n ReplaceApp,\n /** Create a new app */\n AppendApp,\n}\n\n/** The parameters to deploy an app */\nexport interface AppDeploymentParams\n extends Omit<CreateAppParams, 'onCompleteAction' | 'args' | 'note' | 'skipSending' | 'skipWaiting' | 'atc'> {\n /** The deployment metadata */\n metadata: AppDeployMetadata\n /** Any deploy-time parameters to replace in the TEAL code */\n deployTimeParams?: TealTemplateParams\n /** What action to perform if a schema break is detected */\n onSchemaBreak?: 'replace' | 'fail' | 'append' | OnSchemaBreak\n /** What action to perform if a TEAL update is detected */\n onUpdate?: 'update' | 'replace' | 'fail' | 'append' | OnUpdate\n /** Optional cached value of the existing apps for the given creator */\n existingDeployments?: AppLookup\n /** Any args to pass to any create transaction that is issued as part of deployment */\n createArgs?: AppCallArgs\n /** Override the on-completion action for the create call; defaults to NoOp */\n createOnCompleteAction?: Exclude<AppCallType, 'clear_state'> | Exclude<OnApplicationComplete, OnApplicationComplete.ClearStateOC>\n /** Any args to pass to any update transaction that is issued as part of deployment */\n updateArgs?: AppCallArgs\n /** Any args to pass to any delete transaction that is issued as part of deployment */\n deleteArgs?: AppCallArgs\n}\n\n/** The result of compiling the approval and clear state TEAL programs for an app */\nexport interface AppCompilationResult {\n /** The compilation result of approval */\n compiledApproval: CompiledTeal\n /** The compilation result of clear */\n compiledClear: CompiledTeal\n}\n\nexport type AppReturn<TReturn> = {\n /** The ABI method call return value */\n return?: TReturn\n}\n\n/** Result from sending a single app transaction. */\nexport type SendAppTransactionResult = Expand<\n SendSingleTransactionResult & {\n /** If an ABI method was called the processed return value */\n return?: ABIReturn\n }\n>\n\n/** Result from sending a single app transaction. */\nexport type SendAppUpdateTransactionResult = Expand<SendAppTransactionResult & Partial<AppCompilationResult>>\n\n/** Result from sending a single app transaction. */\nexport type SendAppCreateTransactionResult = Expand<\n SendAppUpdateTransactionResult & {\n /** The id of the created app */\n appId: bigint\n /** The Algorand address of the account associated with the app */\n appAddress: string\n }\n>\n\n/** Object holding app state values */\nexport interface AppState {\n [key: string]:\n | {\n value: bigint\n keyRaw: Uint8Array\n keyBase64: string\n }\n | {\n value: string\n valueRaw: Uint8Array\n valueBase64: string\n keyRaw: Uint8Array\n keyBase64: string\n }\n}\n\n/**\n * The name of a box storage box */\nexport interface BoxName {\n /** Name in UTF-8 */\n name: string\n /** Name in binary bytes */\n nameRaw: Uint8Array\n /** Name in Base64 */\n nameBase64: string\n}\n\n/**\n * @deprecated Use `types/app-manager/BoxValueRequestParams` instead.\n * Parameters to get and decode a box value as an ABI type.\n */\nexport interface BoxValueRequestParams {\n /** The ID of the app return box names for */\n appId: number | bigint\n /** The name of the box to return either as a string, binary array or `BoxName` */\n boxName: string | Uint8Array | BoxName\n /** The ABI type to decode the value using */\n type: ABIType\n}\n\n/**\n * @deprecated Use `types/app-manager/BoxValuesRequestParams` instead.\n * Parameters to get and decode a box value as an ABI type.\n */\nexport interface BoxValuesRequestParams {\n /** The ID of the app return box names for */\n appId: number\n /** The names of the boxes to return either as a string, binary array or BoxName` */\n boxNames: (string | Uint8Array | BoxName)[]\n /** The ABI type to decode the value using */\n type: ABIType\n}\n"],"names":["OnUpdate","OnSchemaBreak"],"mappings":";;AAsBA;AACO,MAAM,uBAAuB,GAAG;AAEvC;AACO,MAAM,uBAAuB,GAAG;AAEvC;AACO,MAAM,oBAAoB,GAAG;AAEpC;AACO,MAAM,iBAAiB,GAAG;AAEjC;AACa,MAAA,iBAAiB,GAAG,IAAI,UAAU,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;AA2PlE;AACYA;AAAZ,CAAA,UAAY,QAAQ,EAAA;;AAElB,IAAA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI;;AAEJ,IAAA,QAAA,CAAA,QAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAS;;AAET,IAAA,QAAA,CAAA,QAAA,CAAA,YAAA,CAAA,GAAA,CAAA,CAAA,GAAA,YAAU;;AAEV,IAAA,QAAA,CAAA,QAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAS;AACX,CAAC,EATWA,gBAAQ,KAARA,gBAAQ,GASnB,EAAA,CAAA,CAAA;AAED;AACYC;AAAZ,CAAA,UAAY,aAAa,EAAA;;AAEvB,IAAA,aAAA,CAAA,aAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI;;AAEJ,IAAA,aAAA,CAAA,aAAA,CAAA,YAAA,CAAA,GAAA,CAAA,CAAA,GAAA,YAAU;;AAEV,IAAA,aAAA,CAAA,aAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAS;AACX,CAAC,EAPWA,qBAAa,KAAbA,qBAAa,GAOxB,EAAA,CAAA,CAAA;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"app.js","sources":["../../src/types/app.ts"],"sourcesContent":["import algosdk from 'algosdk'\nimport { Expand } from './expand'\nimport {\n SendSingleTransactionResult,\n SendTransactionFrom,\n SendTransactionParams,\n SendTransactionResult,\n SendTransactionResults,\n TransactionNote,\n TransactionToSign,\n} from './transaction'\nimport ABIArgument = algosdk.ABIArgument\nimport ABIMethod = algosdk.ABIMethod\nimport ABIMethodParams = algosdk.ABIMethodParams\nimport ABIType = algosdk.ABIType\nimport ABIValue = algosdk.ABIValue\nimport Address = algosdk.Address\nimport OnApplicationComplete = algosdk.OnApplicationComplete\nimport SourceMap = algosdk.ProgramSourceMap\nimport SuggestedParams = algosdk.SuggestedParams\nimport Transaction = algosdk.Transaction\n\n/** The name of the TEAL template variable for deploy-time immutability control */\nexport const UPDATABLE_TEMPLATE_NAME = 'TMPL_UPDATABLE'\n\n/** The name of the TEAL template variable for deploy-time permanence control */\nexport const DELETABLE_TEMPLATE_NAME = 'TMPL_DELETABLE'\n\n/** The app create/update [ARC-2](https://github.com/algorandfoundation/ARCs/blob/main/ARCs/arc-0002.md) transaction note prefix */\nexport const APP_DEPLOY_NOTE_DAPP = 'ALGOKIT_DEPLOYER'\n\n/** The maximum number of bytes in a single app code page */\nexport const APP_PAGE_MAX_SIZE = 2048\n\n/** First 4 bytes of SHA-512/256 hash of \"return\" for retrieving ABI return values */\nexport const ABI_RETURN_PREFIX = new Uint8Array([21, 31, 124, 117])\n\n/** Information about an Algorand app */\nexport interface AppReference {\n /** The id of the app */\n appId: number | bigint\n /** The Algorand address of the account associated with the app */\n appAddress: string\n}\n\n/**\n * @deprecated Use `types/app-manager/BoxReference` instead.\n *\n * A grouping of the app ID and name of the box in an Uint8Array\n */\nexport interface BoxReference {\n /**\n * A unique application id\n */\n appId: number | bigint\n /**\n * Name of box to reference\n */\n name: BoxIdentifier\n}\n\n/**\n * @deprecated Use `types/app-manager/BoxIdentifier` instead.\n *\n * Something that identifies a box name - either a:\n * * `Uint8Array`\n * * `string` (that will be encoded to a Uint8Array)\n * * `SendTransactionFrom` (encoded into the public key address of the corresponding account)\n */\nexport type BoxIdentifier = string | Uint8Array | SendTransactionFrom\n\n/** Common app call arguments for ABI and non-ABI (raw) calls */\nexport interface CoreAppCallArgs {\n /** The optional lease for the transaction */\n lease?: string | Uint8Array\n /** Any box references to load */\n boxes?: (algosdk.BoxReference | BoxReference | BoxIdentifier)[]\n /** The address of any accounts to load in */\n accounts?: (string | Address)[]\n /** IDs of any apps to load into the foreignApps array */\n apps?: number[]\n /** IDs of any assets to load into the foreignAssets array */\n assets?: number[]\n /** Optional account / account address that should be authorised to transact on behalf of the from account the app call is sent from after this transaction.\n *\n * **Note:** Use with extreme caution and review the [official rekey guidance](https://developer.algorand.org/docs/get-details/accounts/rekey/) first.\n */\n rekeyTo?: SendTransactionFrom | string\n}\n\n/**\n * App call args with non-ABI (raw) values (minus some processing like encoding strings as binary)\n */\nexport interface RawAppCallArgs extends CoreAppCallArgs {\n /** Any application arguments to pass through */\n appArgs?: (Uint8Array | string)[]\n /** Property to aid intellisense */\n method?: undefined\n}\n\n/** An argument for an ABI method, either a primitive value, or a transaction with or without signer, or the unawaited async return value of an algokit method that returns a `SendTransactionResult` */\nexport type ABIAppCallArg =\n | ABIArgument\n | TransactionToSign\n | Transaction\n | Promise<SendTransactionResult>\n | SendTransactionResult\n | undefined\n\n/**\n * App call args for an ABI call\n */\nexport type ABIAppCallArgs = CoreAppCallArgs & {\n /** The ABI method to call */\n method: ABIMethodParams | ABIMethod\n /** The ABI method args to pass in */\n methodArgs: ABIAppCallArg[]\n}\n\n/** Arguments to pass to an app call either:\n * * The raw app call values to pass through into the transaction (after processing); or\n * * An ABI method definition (method and args)\n **/\nexport type AppCallArgs = RawAppCallArgs | ABIAppCallArgs\n\n/**\n * @deprecated Use `TransactionComposer` to construct create app transactions instead.\n *\n * Base interface for common data passed to an app create or update.\n */\ninterface CreateOrUpdateAppParams extends SendTransactionParams {\n /** The account (with private key loaded) that will send the transaction */\n from: SendTransactionFrom\n /** The approval program as raw teal (string) or compiled teal, base 64 encoded as a byte array (Uint8Array) */\n approvalProgram: Uint8Array | string\n /** The clear state program as raw teal (string) or compiled teal, base 64 encoded as a byte array (Uint8Array) */\n clearStateProgram: Uint8Array | string\n /** Optional transaction parameters */\n transactionParams?: SuggestedParams\n /** The (optional) transaction note */\n note?: TransactionNote\n /** The arguments passed in to the app call */\n args?: AppCallArgs\n}\n\n/**\n * @deprecated Use `TransactionComposer` to construct create app transactions instead.\n *\n * Parameters that are passed in when creating an app. */\nexport interface CreateAppParams extends CreateOrUpdateAppParams {\n /** The storage schema to request for the created app */\n schema: AppStorageSchema\n /** Override the on-completion action for the create call; defaults to NoOp */\n onCompleteAction?: Exclude<AppCallType, 'clear_state'> | Exclude<OnApplicationComplete, OnApplicationComplete.ClearStateOC>\n}\n\n/**\n * @deprecated Use `TransactionComposer` to construct update app transactions instead.\n *\n * Parameters that are passed in when updating an app. */\nexport interface UpdateAppParams extends CreateOrUpdateAppParams {\n /** The id of the app to update */\n appId: number | bigint\n}\n\n/**\n * @deprecated Use `algosdk.OnApplicationComplete` directly instead.\n *\n * The type of call / [on-completion action](https://developer.algorand.org/docs/get-details/dapps/smart-contracts/apps/#the-lifecycle-of-a-smart-contract) for a smart contract call.\n *\n * Equivalent of `algosdk.OnApplicationComplete`, but as a more convenient string enum.\n *\n * * `no_op`: Normal smart contract call, no special on-complete action\n * * `opt_in`: Opt-in to smart contract local storage\n * * `close_out`: Close-out local storage storage\n * * `clear_state`: Clear local storage state\n * * `update_application`: Update the smart contract\n * * `delete_application`: Delete the smart contract\n */\nexport type AppCallType = 'no_op' | 'opt_in' | 'close_out' | 'clear_state' | 'update_application' | 'delete_application'\n\n/** Parameters representing a call to an app. */\nexport interface AppCallParams extends SendTransactionParams {\n /** The id of the app to call */\n appId: number | bigint\n /** The type of call, everything except create (see `createApp`) and update (see `updateApp`) */\n callType: Exclude<AppCallType, 'update_application'> | Exclude<OnApplicationComplete, OnApplicationComplete.UpdateApplicationOC>\n /** The account to make the call from */\n from: SendTransactionFrom\n /** Optional transaction parameters */\n transactionParams?: SuggestedParams\n /** The (optional) transaction note */\n note?: TransactionNote\n /** The arguments passed in to the app call */\n args?: AppCallArgs\n}\n\n/** Parameters representing the storage schema of an app. */\nexport interface AppStorageSchema {\n /** Restricts number of ints in per-user local state */\n localInts: number\n /** Restricts number of byte slices in per-user local state */\n localByteSlices: number\n /** Restricts number of ints in global state */\n globalInts: number\n /** Restricts number of byte slices in global state */\n globalByteSlices: number\n /** Any extra pages that are needed for the smart contract; if left blank then the right number of pages will be calculated based on the teal code size */\n extraPages?: number\n}\n\n/** Information about a compiled teal program */\nexport interface CompiledTeal {\n /** Original TEAL code */\n teal: string\n /** The compiled code */\n compiled: string\n /** The hash returned by the compiler */\n compiledHash: string\n /** The base64 encoded code as a byte array */\n compiledBase64ToBytes: Uint8Array\n /** Source map from the compilation */\n sourceMap: SourceMap\n}\n\nexport interface AppCallTransactionResultOfType<T> extends SendTransactionResults, SendTransactionResult {\n /** If an ABI method was called the processed return value */\n return?: T\n}\n\n/** Result from calling an app */\nexport type AppCallTransactionResult = AppCallTransactionResultOfType<ABIReturn>\n\n/** The return value of an ABI method call */\nexport type ABIReturn =\n | {\n rawReturnValue: Uint8Array\n returnValue: ABIValue\n method: ABIMethod\n decodeError: undefined\n }\n | { rawReturnValue?: undefined; returnValue?: undefined; method?: undefined; decodeError: Error }\n\n/**\n * The payload of the metadata to add to the transaction note when deploying an app, noting it will be prefixed with `APP_DEPLOY_NOTE_PREFIX`.\n */\nexport interface AppDeployMetadata {\n /** The unique name identifier of the app within the creator account */\n name: string\n /** The version of app that is / will be deployed */\n version: string\n /** Whether or not the app is deletable / permanent / unspecified */\n deletable?: boolean\n /** Whether or not the app is updatable / immutable / unspecified */\n updatable?: boolean\n}\n\n/** The metadata that can be collected about a deployed app */\nexport interface AppMetadata extends AppReference, AppDeployMetadata {\n /** The round the app was created */\n createdRound: number\n /** The last round that the app was updated */\n updatedRound: number\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 creator: Readonly<string>\n apps: Readonly<{\n [name: string]: AppMetadata\n }>\n}\n\n/** Dictionary of deploy-time parameters to replace in a teal template.\n *\n * Note: Looks for `TMPL_{parameter}` for template replacements i.e. you can leave out the `TMPL_`.\n *\n */\nexport interface TealTemplateParams {\n [key: string]: string | bigint | number | Uint8Array\n}\n\n/** What action to perform when deploying an app and an update is detected in the TEAL code */\nexport enum OnUpdate {\n /** Fail the deployment */\n Fail,\n /** Update the app */\n UpdateApp,\n /** Delete the app and create a new one in its place */\n ReplaceApp,\n /** Create a new app */\n AppendApp,\n}\n\n/** What action to perform when deploying an app and a breaking schema change is detected */\nexport enum OnSchemaBreak {\n /** Fail the deployment */\n Fail,\n /** Delete the app and create a new one in its place */\n ReplaceApp,\n /** Create a new app */\n AppendApp,\n}\n\n/** The parameters to deploy an app */\nexport interface AppDeploymentParams\n extends Omit<CreateAppParams, 'onCompleteAction' | 'args' | 'note' | 'skipSending' | 'skipWaiting' | 'atc'> {\n /** The deployment metadata */\n metadata: AppDeployMetadata\n /** Any deploy-time parameters to replace in the TEAL code */\n deployTimeParams?: TealTemplateParams\n /** What action to perform if a schema break is detected */\n onSchemaBreak?: 'replace' | 'fail' | 'append' | OnSchemaBreak\n /** What action to perform if a TEAL update is detected */\n onUpdate?: 'update' | 'replace' | 'fail' | 'append' | OnUpdate\n /** Optional cached value of the existing apps for the given creator */\n existingDeployments?: AppLookup\n /** Any args to pass to any create transaction that is issued as part of deployment */\n createArgs?: AppCallArgs\n /** Override the on-completion action for the create call; defaults to NoOp */\n createOnCompleteAction?: Exclude<AppCallType, 'clear_state'> | Exclude<OnApplicationComplete, OnApplicationComplete.ClearStateOC>\n /** Any args to pass to any update transaction that is issued as part of deployment */\n updateArgs?: AppCallArgs\n /** Any args to pass to any delete transaction that is issued as part of deployment */\n deleteArgs?: AppCallArgs\n}\n\n/** The result of compiling the approval and clear state TEAL programs for an app */\nexport interface AppCompilationResult {\n /** The result of compiling the approval program */\n compiledApproval: CompiledTeal\n /** The result of compiling the clear state program */\n compiledClear: CompiledTeal\n}\n\nexport type AppReturn<TReturn> = {\n /** The ABI method call return value */\n return?: TReturn\n}\n\n/** Result from sending a single app transaction. */\nexport type SendAppTransactionResult = Expand<\n SendSingleTransactionResult & {\n /** If an ABI method was called the processed return value */\n return?: ABIReturn\n }\n>\n\n/** Result from sending a single app transaction. */\nexport type SendAppUpdateTransactionResult = Expand<SendAppTransactionResult & Partial<AppCompilationResult>>\n\n/** Result from sending a single app transaction. */\nexport type SendAppCreateTransactionResult = Expand<\n SendAppUpdateTransactionResult & {\n /** The id of the created app */\n appId: bigint\n /** The Algorand address of the account associated with the app */\n appAddress: Address\n }\n>\n\n/** Object holding app state values */\nexport interface AppState {\n [key: string]:\n | {\n value: bigint\n keyRaw: Uint8Array\n keyBase64: string\n }\n | {\n value: string\n valueRaw: Uint8Array\n valueBase64: string\n keyRaw: Uint8Array\n keyBase64: string\n }\n}\n\n/**\n * The name of a box storage box */\nexport interface BoxName {\n /** Name in UTF-8 */\n name: string\n /** Name in binary bytes */\n nameRaw: Uint8Array\n /** Name in Base64 */\n nameBase64: string\n}\n\n/**\n * @deprecated Use `types/app-manager/BoxValueRequestParams` instead.\n * Parameters to get and decode a box value as an ABI type.\n */\nexport interface BoxValueRequestParams {\n /** The ID of the app return box names for */\n appId: number | bigint\n /** The name of the box to return either as a string, binary array or `BoxName` */\n boxName: string | Uint8Array | BoxName\n /** The ABI type to decode the value using */\n type: ABIType\n}\n\n/**\n * @deprecated Use `types/app-manager/BoxValuesRequestParams` instead.\n * Parameters to get and decode a box value as an ABI type.\n */\nexport interface BoxValuesRequestParams {\n /** The ID of the app return box names for */\n appId: number\n /** The names of the boxes to return either as a string, binary array or BoxName` */\n boxNames: (string | Uint8Array | BoxName)[]\n /** The ABI type to decode the value using */\n type: ABIType\n}\n"],"names":["OnUpdate","OnSchemaBreak"],"mappings":";;AAsBA;AACO,MAAM,uBAAuB,GAAG;AAEvC;AACO,MAAM,uBAAuB,GAAG;AAEvC;AACO,MAAM,oBAAoB,GAAG;AAEpC;AACO,MAAM,iBAAiB,GAAG;AAEjC;AACa,MAAA,iBAAiB,GAAG,IAAI,UAAU,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;AA2PlE;AACYA;AAAZ,CAAA,UAAY,QAAQ,EAAA;;AAElB,IAAA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI;;AAEJ,IAAA,QAAA,CAAA,QAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAS;;AAET,IAAA,QAAA,CAAA,QAAA,CAAA,YAAA,CAAA,GAAA,CAAA,CAAA,GAAA,YAAU;;AAEV,IAAA,QAAA,CAAA,QAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAS;AACX,CAAC,EATWA,gBAAQ,KAARA,gBAAQ,GASnB,EAAA,CAAA,CAAA;AAED;AACYC;AAAZ,CAAA,UAAY,aAAa,EAAA;;AAEvB,IAAA,aAAA,CAAA,aAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI;;AAEJ,IAAA,aAAA,CAAA,aAAA,CAAA,YAAA,CAAA,GAAA,CAAA,CAAA,GAAA,YAAU;;AAEV,IAAA,aAAA,CAAA,aAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAS;AACX,CAAC,EAPWA,qBAAa,KAAbA,qBAAa,GAOxB,EAAA,CAAA,CAAA;;;;;;;;"}
|
package/types/app.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.mjs","sources":["../../src/types/app.ts"],"sourcesContent":["import algosdk from 'algosdk'\nimport { Expand } from './expand'\nimport {\n SendSingleTransactionResult,\n SendTransactionFrom,\n SendTransactionParams,\n SendTransactionResult,\n SendTransactionResults,\n TransactionNote,\n TransactionToSign,\n} from './transaction'\nimport ABIArgument = algosdk.ABIArgument\nimport ABIMethod = algosdk.ABIMethod\nimport ABIMethodParams = algosdk.ABIMethodParams\nimport ABIType = algosdk.ABIType\nimport ABIValue = algosdk.ABIValue\nimport Address = algosdk.Address\nimport OnApplicationComplete = algosdk.OnApplicationComplete\nimport SourceMap = algosdk.SourceMap\nimport SuggestedParams = algosdk.SuggestedParams\nimport Transaction = algosdk.Transaction\n\n/** The name of the TEAL template variable for deploy-time immutability control */\nexport const UPDATABLE_TEMPLATE_NAME = 'TMPL_UPDATABLE'\n\n/** The name of the TEAL template variable for deploy-time permanence control */\nexport const DELETABLE_TEMPLATE_NAME = 'TMPL_DELETABLE'\n\n/** The app create/update [ARC-2](https://github.com/algorandfoundation/ARCs/blob/main/ARCs/arc-0002.md) transaction note prefix */\nexport const APP_DEPLOY_NOTE_DAPP = 'ALGOKIT_DEPLOYER'\n\n/** The maximum number of bytes in a single app code page */\nexport const APP_PAGE_MAX_SIZE = 2048\n\n/** First 4 bytes of SHA-512/256 hash of \"return\" for retrieving ABI return values */\nexport const ABI_RETURN_PREFIX = new Uint8Array([21, 31, 124, 117])\n\n/** Information about an Algorand app */\nexport interface AppReference {\n /** The id of the app */\n appId: number | bigint\n /** The Algorand address of the account associated with the app */\n appAddress: string\n}\n\n/**\n * @deprecated Use `types/app-manager/BoxReference` instead.\n *\n * A grouping of the app ID and name of the box in an Uint8Array\n */\nexport interface BoxReference {\n /**\n * A unique application id\n */\n appId: number | bigint\n /**\n * Name of box to reference\n */\n name: BoxIdentifier\n}\n\n/**\n * @deprecated Use `types/app-manager/BoxIdentifier` instead.\n *\n * Something that identifies a box name - either a:\n * * `Uint8Array`\n * * `string` (that will be encoded to a Uint8Array)\n * * `SendTransactionFrom` (encoded into the public key address of the corresponding account)\n */\nexport type BoxIdentifier = string | Uint8Array | SendTransactionFrom\n\n/** Common app call arguments for ABI and non-ABI (raw) calls */\nexport interface CoreAppCallArgs {\n /** The optional lease for the transaction */\n lease?: string | Uint8Array\n /** Any box references to load */\n boxes?: (algosdk.BoxReference | BoxReference | BoxIdentifier)[]\n /** The address of any accounts to load in */\n accounts?: (string | Address)[]\n /** IDs of any apps to load into the foreignApps array */\n apps?: number[]\n /** IDs of any assets to load into the foreignAssets array */\n assets?: number[]\n /** Optional account / account address that should be authorised to transact on behalf of the from account the app call is sent from after this transaction.\n *\n * **Note:** Use with extreme caution and review the [official rekey guidance](https://developer.algorand.org/docs/get-details/accounts/rekey/) first.\n */\n rekeyTo?: SendTransactionFrom | string\n}\n\n/**\n * App call args with non-ABI (raw) values (minus some processing like encoding strings as binary)\n */\nexport interface RawAppCallArgs extends CoreAppCallArgs {\n /** Any application arguments to pass through */\n appArgs?: (Uint8Array | string)[]\n /** Property to aid intellisense */\n method?: undefined\n}\n\n/** An argument for an ABI method, either a primitive value, or a transaction with or without signer, or the unawaited async return value of an algokit method that returns a `SendTransactionResult` */\nexport type ABIAppCallArg =\n | ABIArgument\n | TransactionToSign\n | Transaction\n | Promise<SendTransactionResult>\n | SendTransactionResult\n | undefined\n\n/**\n * App call args for an ABI call\n */\nexport type ABIAppCallArgs = CoreAppCallArgs & {\n /** The ABI method to call */\n method: ABIMethodParams | ABIMethod\n /** The ABI method args to pass in */\n methodArgs: ABIAppCallArg[]\n}\n\n/** Arguments to pass to an app call either:\n * * The raw app call values to pass through into the transaction (after processing); or\n * * An ABI method definition (method and args)\n **/\nexport type AppCallArgs = RawAppCallArgs | ABIAppCallArgs\n\n/**\n * @deprecated Use `TransactionComposer` to construct create app transactions instead.\n *\n * Base interface for common data passed to an app create or update.\n */\ninterface CreateOrUpdateAppParams extends SendTransactionParams {\n /** The account (with private key loaded) that will send the transaction */\n from: SendTransactionFrom\n /** The approval program as raw teal (string) or compiled teal, base 64 encoded as a byte array (Uint8Array) */\n approvalProgram: Uint8Array | string\n /** The clear state program as raw teal (string) or compiled teal, base 64 encoded as a byte array (Uint8Array) */\n clearStateProgram: Uint8Array | string\n /** Optional transaction parameters */\n transactionParams?: SuggestedParams\n /** The (optional) transaction note */\n note?: TransactionNote\n /** The arguments passed in to the app call */\n args?: AppCallArgs\n}\n\n/**\n * @deprecated Use `TransactionComposer` to construct create app transactions instead.\n *\n * Parameters that are passed in when creating an app. */\nexport interface CreateAppParams extends CreateOrUpdateAppParams {\n /** The storage schema to request for the created app */\n schema: AppStorageSchema\n /** Override the on-completion action for the create call; defaults to NoOp */\n onCompleteAction?: Exclude<AppCallType, 'clear_state'> | Exclude<OnApplicationComplete, OnApplicationComplete.ClearStateOC>\n}\n\n/**\n * @deprecated Use `TransactionComposer` to construct update app transactions instead.\n *\n * Parameters that are passed in when updating an app. */\nexport interface UpdateAppParams extends CreateOrUpdateAppParams {\n /** The id of the app to update */\n appId: number | bigint\n}\n\n/**\n * @deprecated Use `algosdk.OnApplicationComplete` directly instead.\n *\n * The type of call / [on-completion action](https://developer.algorand.org/docs/get-details/dapps/smart-contracts/apps/#the-lifecycle-of-a-smart-contract) for a smart contract call.\n *\n * Equivalent of `algosdk.OnApplicationComplete`, but as a more convenient string enum.\n *\n * * `no_op`: Normal smart contract call, no special on-complete action\n * * `opt_in`: Opt-in to smart contract local storage\n * * `close_out`: Close-out local storage storage\n * * `clear_state`: Clear local storage state\n * * `update_application`: Update the smart contract\n * * `delete_application`: Delete the smart contract\n */\nexport type AppCallType = 'no_op' | 'opt_in' | 'close_out' | 'clear_state' | 'update_application' | 'delete_application'\n\n/** Parameters representing a call to an app. */\nexport interface AppCallParams extends SendTransactionParams {\n /** The id of the app to call */\n appId: number | bigint\n /** The type of call, everything except create (see `createApp`) and update (see `updateApp`) */\n callType: Exclude<AppCallType, 'update_application'> | Exclude<OnApplicationComplete, OnApplicationComplete.UpdateApplicationOC>\n /** The account to make the call from */\n from: SendTransactionFrom\n /** Optional transaction parameters */\n transactionParams?: SuggestedParams\n /** The (optional) transaction note */\n note?: TransactionNote\n /** The arguments passed in to the app call */\n args?: AppCallArgs\n}\n\n/** Parameters representing the storage schema of an app. */\nexport interface AppStorageSchema {\n /** Restricts number of ints in per-user local state */\n localInts: number\n /** Restricts number of byte slices in per-user local state */\n localByteSlices: number\n /** Restricts number of ints in global state */\n globalInts: number\n /** Restricts number of byte slices in global state */\n globalByteSlices: number\n /** Any extra pages that are needed for the smart contract; if left blank then the right number of pages will be calculated based on the teal code size */\n extraPages?: number\n}\n\n/** Information about a compiled teal program */\nexport interface CompiledTeal {\n /** Original TEAL code */\n teal: string\n /** The compiled code */\n compiled: string\n /** The hash returned by the compiler */\n compiledHash: string\n /** The base64 encoded code as a byte array */\n compiledBase64ToBytes: Uint8Array\n /** Source map from the compilation */\n sourceMap: SourceMap\n}\n\nexport interface AppCallTransactionResultOfType<T> extends SendTransactionResults, SendTransactionResult {\n /** If an ABI method was called the processed return value */\n return?: T\n}\n\n/** Result from calling an app */\nexport type AppCallTransactionResult = AppCallTransactionResultOfType<ABIReturn>\n\n/** The return value of an ABI method call */\nexport type ABIReturn =\n | {\n rawReturnValue: Uint8Array\n returnValue: ABIValue\n method: ABIMethod\n decodeError: undefined\n }\n | { rawReturnValue?: undefined; returnValue?: undefined; method?: undefined; decodeError: Error }\n\n/**\n * The payload of the metadata to add to the transaction note when deploying an app, noting it will be prefixed with `APP_DEPLOY_NOTE_PREFIX`.\n */\nexport interface AppDeployMetadata {\n /** The unique name identifier of the app within the creator account */\n name: string\n /** The version of app that is / will be deployed */\n version: string\n /** Whether or not the app is deletable / permanent / unspecified */\n deletable?: boolean\n /** Whether or not the app is updatable / immutable / unspecified */\n updatable?: boolean\n}\n\n/** The metadata that can be collected about a deployed app */\nexport interface AppMetadata extends AppReference, AppDeployMetadata {\n /** The round the app was created */\n createdRound: number\n /** The last round that the app was updated */\n updatedRound: number\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 creator: Readonly<string>\n apps: Readonly<{\n [name: string]: AppMetadata\n }>\n}\n\n/** Dictionary of deploy-time parameters to replace in a teal template.\n *\n * Note: Looks for `TMPL_{parameter}` for template replacements i.e. you can leave out the `TMPL_`.\n *\n */\nexport interface TealTemplateParams {\n [key: string]: string | bigint | number | Uint8Array\n}\n\n/** What action to perform when deploying an app and an update is detected in the TEAL code */\nexport enum OnUpdate {\n /** Fail the deployment */\n Fail,\n /** Update the app */\n UpdateApp,\n /** Delete the app and create a new one in its place */\n ReplaceApp,\n /** Create a new app */\n AppendApp,\n}\n\n/** What action to perform when deploying an app and a breaking schema change is detected */\nexport enum OnSchemaBreak {\n /** Fail the deployment */\n Fail,\n /** Delete the app and create a new one in its place */\n ReplaceApp,\n /** Create a new app */\n AppendApp,\n}\n\n/** The parameters to deploy an app */\nexport interface AppDeploymentParams\n extends Omit<CreateAppParams, 'onCompleteAction' | 'args' | 'note' | 'skipSending' | 'skipWaiting' | 'atc'> {\n /** The deployment metadata */\n metadata: AppDeployMetadata\n /** Any deploy-time parameters to replace in the TEAL code */\n deployTimeParams?: TealTemplateParams\n /** What action to perform if a schema break is detected */\n onSchemaBreak?: 'replace' | 'fail' | 'append' | OnSchemaBreak\n /** What action to perform if a TEAL update is detected */\n onUpdate?: 'update' | 'replace' | 'fail' | 'append' | OnUpdate\n /** Optional cached value of the existing apps for the given creator */\n existingDeployments?: AppLookup\n /** Any args to pass to any create transaction that is issued as part of deployment */\n createArgs?: AppCallArgs\n /** Override the on-completion action for the create call; defaults to NoOp */\n createOnCompleteAction?: Exclude<AppCallType, 'clear_state'> | Exclude<OnApplicationComplete, OnApplicationComplete.ClearStateOC>\n /** Any args to pass to any update transaction that is issued as part of deployment */\n updateArgs?: AppCallArgs\n /** Any args to pass to any delete transaction that is issued as part of deployment */\n deleteArgs?: AppCallArgs\n}\n\n/** The result of compiling the approval and clear state TEAL programs for an app */\nexport interface AppCompilationResult {\n /** The compilation result of approval */\n compiledApproval: CompiledTeal\n /** The compilation result of clear */\n compiledClear: CompiledTeal\n}\n\nexport type AppReturn<TReturn> = {\n /** The ABI method call return value */\n return?: TReturn\n}\n\n/** Result from sending a single app transaction. */\nexport type SendAppTransactionResult = Expand<\n SendSingleTransactionResult & {\n /** If an ABI method was called the processed return value */\n return?: ABIReturn\n }\n>\n\n/** Result from sending a single app transaction. */\nexport type SendAppUpdateTransactionResult = Expand<SendAppTransactionResult & Partial<AppCompilationResult>>\n\n/** Result from sending a single app transaction. */\nexport type SendAppCreateTransactionResult = Expand<\n SendAppUpdateTransactionResult & {\n /** The id of the created app */\n appId: bigint\n /** The Algorand address of the account associated with the app */\n appAddress: string\n }\n>\n\n/** Object holding app state values */\nexport interface AppState {\n [key: string]:\n | {\n value: bigint\n keyRaw: Uint8Array\n keyBase64: string\n }\n | {\n value: string\n valueRaw: Uint8Array\n valueBase64: string\n keyRaw: Uint8Array\n keyBase64: string\n }\n}\n\n/**\n * The name of a box storage box */\nexport interface BoxName {\n /** Name in UTF-8 */\n name: string\n /** Name in binary bytes */\n nameRaw: Uint8Array\n /** Name in Base64 */\n nameBase64: string\n}\n\n/**\n * @deprecated Use `types/app-manager/BoxValueRequestParams` instead.\n * Parameters to get and decode a box value as an ABI type.\n */\nexport interface BoxValueRequestParams {\n /** The ID of the app return box names for */\n appId: number | bigint\n /** The name of the box to return either as a string, binary array or `BoxName` */\n boxName: string | Uint8Array | BoxName\n /** The ABI type to decode the value using */\n type: ABIType\n}\n\n/**\n * @deprecated Use `types/app-manager/BoxValuesRequestParams` instead.\n * Parameters to get and decode a box value as an ABI type.\n */\nexport interface BoxValuesRequestParams {\n /** The ID of the app return box names for */\n appId: number\n /** The names of the boxes to return either as a string, binary array or BoxName` */\n boxNames: (string | Uint8Array | BoxName)[]\n /** The ABI type to decode the value using */\n type: ABIType\n}\n"],"names":[],"mappings":"AAsBA;AACO,MAAM,uBAAuB,GAAG;AAEvC;AACO,MAAM,uBAAuB,GAAG;AAEvC;AACO,MAAM,oBAAoB,GAAG;AAEpC;AACO,MAAM,iBAAiB,GAAG;AAEjC;AACa,MAAA,iBAAiB,GAAG,IAAI,UAAU,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;AA2PlE;IACY;AAAZ,CAAA,UAAY,QAAQ,EAAA;;AAElB,IAAA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI;;AAEJ,IAAA,QAAA,CAAA,QAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAS;;AAET,IAAA,QAAA,CAAA,QAAA,CAAA,YAAA,CAAA,GAAA,CAAA,CAAA,GAAA,YAAU;;AAEV,IAAA,QAAA,CAAA,QAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAS;AACX,CAAC,EATW,QAAQ,KAAR,QAAQ,GASnB,EAAA,CAAA,CAAA;AAED;IACY;AAAZ,CAAA,UAAY,aAAa,EAAA;;AAEvB,IAAA,aAAA,CAAA,aAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI;;AAEJ,IAAA,aAAA,CAAA,aAAA,CAAA,YAAA,CAAA,GAAA,CAAA,CAAA,GAAA,YAAU;;AAEV,IAAA,aAAA,CAAA,aAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAS;AACX,CAAC,EAPW,aAAa,KAAb,aAAa,GAOxB,EAAA,CAAA,CAAA;;;;"}
|
|
1
|
+
{"version":3,"file":"app.mjs","sources":["../../src/types/app.ts"],"sourcesContent":["import algosdk from 'algosdk'\nimport { Expand } from './expand'\nimport {\n SendSingleTransactionResult,\n SendTransactionFrom,\n SendTransactionParams,\n SendTransactionResult,\n SendTransactionResults,\n TransactionNote,\n TransactionToSign,\n} from './transaction'\nimport ABIArgument = algosdk.ABIArgument\nimport ABIMethod = algosdk.ABIMethod\nimport ABIMethodParams = algosdk.ABIMethodParams\nimport ABIType = algosdk.ABIType\nimport ABIValue = algosdk.ABIValue\nimport Address = algosdk.Address\nimport OnApplicationComplete = algosdk.OnApplicationComplete\nimport SourceMap = algosdk.ProgramSourceMap\nimport SuggestedParams = algosdk.SuggestedParams\nimport Transaction = algosdk.Transaction\n\n/** The name of the TEAL template variable for deploy-time immutability control */\nexport const UPDATABLE_TEMPLATE_NAME = 'TMPL_UPDATABLE'\n\n/** The name of the TEAL template variable for deploy-time permanence control */\nexport const DELETABLE_TEMPLATE_NAME = 'TMPL_DELETABLE'\n\n/** The app create/update [ARC-2](https://github.com/algorandfoundation/ARCs/blob/main/ARCs/arc-0002.md) transaction note prefix */\nexport const APP_DEPLOY_NOTE_DAPP = 'ALGOKIT_DEPLOYER'\n\n/** The maximum number of bytes in a single app code page */\nexport const APP_PAGE_MAX_SIZE = 2048\n\n/** First 4 bytes of SHA-512/256 hash of \"return\" for retrieving ABI return values */\nexport const ABI_RETURN_PREFIX = new Uint8Array([21, 31, 124, 117])\n\n/** Information about an Algorand app */\nexport interface AppReference {\n /** The id of the app */\n appId: number | bigint\n /** The Algorand address of the account associated with the app */\n appAddress: string\n}\n\n/**\n * @deprecated Use `types/app-manager/BoxReference` instead.\n *\n * A grouping of the app ID and name of the box in an Uint8Array\n */\nexport interface BoxReference {\n /**\n * A unique application id\n */\n appId: number | bigint\n /**\n * Name of box to reference\n */\n name: BoxIdentifier\n}\n\n/**\n * @deprecated Use `types/app-manager/BoxIdentifier` instead.\n *\n * Something that identifies a box name - either a:\n * * `Uint8Array`\n * * `string` (that will be encoded to a Uint8Array)\n * * `SendTransactionFrom` (encoded into the public key address of the corresponding account)\n */\nexport type BoxIdentifier = string | Uint8Array | SendTransactionFrom\n\n/** Common app call arguments for ABI and non-ABI (raw) calls */\nexport interface CoreAppCallArgs {\n /** The optional lease for the transaction */\n lease?: string | Uint8Array\n /** Any box references to load */\n boxes?: (algosdk.BoxReference | BoxReference | BoxIdentifier)[]\n /** The address of any accounts to load in */\n accounts?: (string | Address)[]\n /** IDs of any apps to load into the foreignApps array */\n apps?: number[]\n /** IDs of any assets to load into the foreignAssets array */\n assets?: number[]\n /** Optional account / account address that should be authorised to transact on behalf of the from account the app call is sent from after this transaction.\n *\n * **Note:** Use with extreme caution and review the [official rekey guidance](https://developer.algorand.org/docs/get-details/accounts/rekey/) first.\n */\n rekeyTo?: SendTransactionFrom | string\n}\n\n/**\n * App call args with non-ABI (raw) values (minus some processing like encoding strings as binary)\n */\nexport interface RawAppCallArgs extends CoreAppCallArgs {\n /** Any application arguments to pass through */\n appArgs?: (Uint8Array | string)[]\n /** Property to aid intellisense */\n method?: undefined\n}\n\n/** An argument for an ABI method, either a primitive value, or a transaction with or without signer, or the unawaited async return value of an algokit method that returns a `SendTransactionResult` */\nexport type ABIAppCallArg =\n | ABIArgument\n | TransactionToSign\n | Transaction\n | Promise<SendTransactionResult>\n | SendTransactionResult\n | undefined\n\n/**\n * App call args for an ABI call\n */\nexport type ABIAppCallArgs = CoreAppCallArgs & {\n /** The ABI method to call */\n method: ABIMethodParams | ABIMethod\n /** The ABI method args to pass in */\n methodArgs: ABIAppCallArg[]\n}\n\n/** Arguments to pass to an app call either:\n * * The raw app call values to pass through into the transaction (after processing); or\n * * An ABI method definition (method and args)\n **/\nexport type AppCallArgs = RawAppCallArgs | ABIAppCallArgs\n\n/**\n * @deprecated Use `TransactionComposer` to construct create app transactions instead.\n *\n * Base interface for common data passed to an app create or update.\n */\ninterface CreateOrUpdateAppParams extends SendTransactionParams {\n /** The account (with private key loaded) that will send the transaction */\n from: SendTransactionFrom\n /** The approval program as raw teal (string) or compiled teal, base 64 encoded as a byte array (Uint8Array) */\n approvalProgram: Uint8Array | string\n /** The clear state program as raw teal (string) or compiled teal, base 64 encoded as a byte array (Uint8Array) */\n clearStateProgram: Uint8Array | string\n /** Optional transaction parameters */\n transactionParams?: SuggestedParams\n /** The (optional) transaction note */\n note?: TransactionNote\n /** The arguments passed in to the app call */\n args?: AppCallArgs\n}\n\n/**\n * @deprecated Use `TransactionComposer` to construct create app transactions instead.\n *\n * Parameters that are passed in when creating an app. */\nexport interface CreateAppParams extends CreateOrUpdateAppParams {\n /** The storage schema to request for the created app */\n schema: AppStorageSchema\n /** Override the on-completion action for the create call; defaults to NoOp */\n onCompleteAction?: Exclude<AppCallType, 'clear_state'> | Exclude<OnApplicationComplete, OnApplicationComplete.ClearStateOC>\n}\n\n/**\n * @deprecated Use `TransactionComposer` to construct update app transactions instead.\n *\n * Parameters that are passed in when updating an app. */\nexport interface UpdateAppParams extends CreateOrUpdateAppParams {\n /** The id of the app to update */\n appId: number | bigint\n}\n\n/**\n * @deprecated Use `algosdk.OnApplicationComplete` directly instead.\n *\n * The type of call / [on-completion action](https://developer.algorand.org/docs/get-details/dapps/smart-contracts/apps/#the-lifecycle-of-a-smart-contract) for a smart contract call.\n *\n * Equivalent of `algosdk.OnApplicationComplete`, but as a more convenient string enum.\n *\n * * `no_op`: Normal smart contract call, no special on-complete action\n * * `opt_in`: Opt-in to smart contract local storage\n * * `close_out`: Close-out local storage storage\n * * `clear_state`: Clear local storage state\n * * `update_application`: Update the smart contract\n * * `delete_application`: Delete the smart contract\n */\nexport type AppCallType = 'no_op' | 'opt_in' | 'close_out' | 'clear_state' | 'update_application' | 'delete_application'\n\n/** Parameters representing a call to an app. */\nexport interface AppCallParams extends SendTransactionParams {\n /** The id of the app to call */\n appId: number | bigint\n /** The type of call, everything except create (see `createApp`) and update (see `updateApp`) */\n callType: Exclude<AppCallType, 'update_application'> | Exclude<OnApplicationComplete, OnApplicationComplete.UpdateApplicationOC>\n /** The account to make the call from */\n from: SendTransactionFrom\n /** Optional transaction parameters */\n transactionParams?: SuggestedParams\n /** The (optional) transaction note */\n note?: TransactionNote\n /** The arguments passed in to the app call */\n args?: AppCallArgs\n}\n\n/** Parameters representing the storage schema of an app. */\nexport interface AppStorageSchema {\n /** Restricts number of ints in per-user local state */\n localInts: number\n /** Restricts number of byte slices in per-user local state */\n localByteSlices: number\n /** Restricts number of ints in global state */\n globalInts: number\n /** Restricts number of byte slices in global state */\n globalByteSlices: number\n /** Any extra pages that are needed for the smart contract; if left blank then the right number of pages will be calculated based on the teal code size */\n extraPages?: number\n}\n\n/** Information about a compiled teal program */\nexport interface CompiledTeal {\n /** Original TEAL code */\n teal: string\n /** The compiled code */\n compiled: string\n /** The hash returned by the compiler */\n compiledHash: string\n /** The base64 encoded code as a byte array */\n compiledBase64ToBytes: Uint8Array\n /** Source map from the compilation */\n sourceMap: SourceMap\n}\n\nexport interface AppCallTransactionResultOfType<T> extends SendTransactionResults, SendTransactionResult {\n /** If an ABI method was called the processed return value */\n return?: T\n}\n\n/** Result from calling an app */\nexport type AppCallTransactionResult = AppCallTransactionResultOfType<ABIReturn>\n\n/** The return value of an ABI method call */\nexport type ABIReturn =\n | {\n rawReturnValue: Uint8Array\n returnValue: ABIValue\n method: ABIMethod\n decodeError: undefined\n }\n | { rawReturnValue?: undefined; returnValue?: undefined; method?: undefined; decodeError: Error }\n\n/**\n * The payload of the metadata to add to the transaction note when deploying an app, noting it will be prefixed with `APP_DEPLOY_NOTE_PREFIX`.\n */\nexport interface AppDeployMetadata {\n /** The unique name identifier of the app within the creator account */\n name: string\n /** The version of app that is / will be deployed */\n version: string\n /** Whether or not the app is deletable / permanent / unspecified */\n deletable?: boolean\n /** Whether or not the app is updatable / immutable / unspecified */\n updatable?: boolean\n}\n\n/** The metadata that can be collected about a deployed app */\nexport interface AppMetadata extends AppReference, AppDeployMetadata {\n /** The round the app was created */\n createdRound: number\n /** The last round that the app was updated */\n updatedRound: number\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 creator: Readonly<string>\n apps: Readonly<{\n [name: string]: AppMetadata\n }>\n}\n\n/** Dictionary of deploy-time parameters to replace in a teal template.\n *\n * Note: Looks for `TMPL_{parameter}` for template replacements i.e. you can leave out the `TMPL_`.\n *\n */\nexport interface TealTemplateParams {\n [key: string]: string | bigint | number | Uint8Array\n}\n\n/** What action to perform when deploying an app and an update is detected in the TEAL code */\nexport enum OnUpdate {\n /** Fail the deployment */\n Fail,\n /** Update the app */\n UpdateApp,\n /** Delete the app and create a new one in its place */\n ReplaceApp,\n /** Create a new app */\n AppendApp,\n}\n\n/** What action to perform when deploying an app and a breaking schema change is detected */\nexport enum OnSchemaBreak {\n /** Fail the deployment */\n Fail,\n /** Delete the app and create a new one in its place */\n ReplaceApp,\n /** Create a new app */\n AppendApp,\n}\n\n/** The parameters to deploy an app */\nexport interface AppDeploymentParams\n extends Omit<CreateAppParams, 'onCompleteAction' | 'args' | 'note' | 'skipSending' | 'skipWaiting' | 'atc'> {\n /** The deployment metadata */\n metadata: AppDeployMetadata\n /** Any deploy-time parameters to replace in the TEAL code */\n deployTimeParams?: TealTemplateParams\n /** What action to perform if a schema break is detected */\n onSchemaBreak?: 'replace' | 'fail' | 'append' | OnSchemaBreak\n /** What action to perform if a TEAL update is detected */\n onUpdate?: 'update' | 'replace' | 'fail' | 'append' | OnUpdate\n /** Optional cached value of the existing apps for the given creator */\n existingDeployments?: AppLookup\n /** Any args to pass to any create transaction that is issued as part of deployment */\n createArgs?: AppCallArgs\n /** Override the on-completion action for the create call; defaults to NoOp */\n createOnCompleteAction?: Exclude<AppCallType, 'clear_state'> | Exclude<OnApplicationComplete, OnApplicationComplete.ClearStateOC>\n /** Any args to pass to any update transaction that is issued as part of deployment */\n updateArgs?: AppCallArgs\n /** Any args to pass to any delete transaction that is issued as part of deployment */\n deleteArgs?: AppCallArgs\n}\n\n/** The result of compiling the approval and clear state TEAL programs for an app */\nexport interface AppCompilationResult {\n /** The result of compiling the approval program */\n compiledApproval: CompiledTeal\n /** The result of compiling the clear state program */\n compiledClear: CompiledTeal\n}\n\nexport type AppReturn<TReturn> = {\n /** The ABI method call return value */\n return?: TReturn\n}\n\n/** Result from sending a single app transaction. */\nexport type SendAppTransactionResult = Expand<\n SendSingleTransactionResult & {\n /** If an ABI method was called the processed return value */\n return?: ABIReturn\n }\n>\n\n/** Result from sending a single app transaction. */\nexport type SendAppUpdateTransactionResult = Expand<SendAppTransactionResult & Partial<AppCompilationResult>>\n\n/** Result from sending a single app transaction. */\nexport type SendAppCreateTransactionResult = Expand<\n SendAppUpdateTransactionResult & {\n /** The id of the created app */\n appId: bigint\n /** The Algorand address of the account associated with the app */\n appAddress: Address\n }\n>\n\n/** Object holding app state values */\nexport interface AppState {\n [key: string]:\n | {\n value: bigint\n keyRaw: Uint8Array\n keyBase64: string\n }\n | {\n value: string\n valueRaw: Uint8Array\n valueBase64: string\n keyRaw: Uint8Array\n keyBase64: string\n }\n}\n\n/**\n * The name of a box storage box */\nexport interface BoxName {\n /** Name in UTF-8 */\n name: string\n /** Name in binary bytes */\n nameRaw: Uint8Array\n /** Name in Base64 */\n nameBase64: string\n}\n\n/**\n * @deprecated Use `types/app-manager/BoxValueRequestParams` instead.\n * Parameters to get and decode a box value as an ABI type.\n */\nexport interface BoxValueRequestParams {\n /** The ID of the app return box names for */\n appId: number | bigint\n /** The name of the box to return either as a string, binary array or `BoxName` */\n boxName: string | Uint8Array | BoxName\n /** The ABI type to decode the value using */\n type: ABIType\n}\n\n/**\n * @deprecated Use `types/app-manager/BoxValuesRequestParams` instead.\n * Parameters to get and decode a box value as an ABI type.\n */\nexport interface BoxValuesRequestParams {\n /** The ID of the app return box names for */\n appId: number\n /** The names of the boxes to return either as a string, binary array or BoxName` */\n boxNames: (string | Uint8Array | BoxName)[]\n /** The ABI type to decode the value using */\n type: ABIType\n}\n"],"names":[],"mappings":"AAsBA;AACO,MAAM,uBAAuB,GAAG;AAEvC;AACO,MAAM,uBAAuB,GAAG;AAEvC;AACO,MAAM,oBAAoB,GAAG;AAEpC;AACO,MAAM,iBAAiB,GAAG;AAEjC;AACa,MAAA,iBAAiB,GAAG,IAAI,UAAU,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;AA2PlE;IACY;AAAZ,CAAA,UAAY,QAAQ,EAAA;;AAElB,IAAA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI;;AAEJ,IAAA,QAAA,CAAA,QAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAS;;AAET,IAAA,QAAA,CAAA,QAAA,CAAA,YAAA,CAAA,GAAA,CAAA,CAAA,GAAA,YAAU;;AAEV,IAAA,QAAA,CAAA,QAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAS;AACX,CAAC,EATW,QAAQ,KAAR,QAAQ,GASnB,EAAA,CAAA,CAAA;AAED;IACY;AAAZ,CAAA,UAAY,aAAa,EAAA;;AAEvB,IAAA,aAAA,CAAA,aAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI;;AAEJ,IAAA,aAAA,CAAA,aAAA,CAAA,YAAA,CAAA,GAAA,CAAA,CAAA,GAAA,YAAU;;AAEV,IAAA,aAAA,CAAA,aAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAS;AACX,CAAC,EAPW,aAAa,KAAb,aAAa,GAOxB,EAAA,CAAA,CAAA;;;;"}
|