@algorandfoundation/algokit-utils 8.2.0-beta.1 → 8.2.0-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/package.json +3 -2
  2. package/types/account-manager.d.ts +33 -18
  3. package/types/account-manager.js +33 -18
  4. package/types/account-manager.js.map +1 -1
  5. package/types/account-manager.mjs +33 -18
  6. package/types/account-manager.mjs.map +1 -1
  7. package/types/account.d.ts +5 -0
  8. package/types/account.js +5 -0
  9. package/types/account.js.map +1 -1
  10. package/types/account.mjs +5 -0
  11. package/types/account.mjs.map +1 -1
  12. package/types/algorand-client-transaction-creator.d.ts +103 -70
  13. package/types/algorand-client-transaction-creator.js +103 -70
  14. package/types/algorand-client-transaction-creator.js.map +1 -1
  15. package/types/algorand-client-transaction-creator.mjs +103 -70
  16. package/types/algorand-client-transaction-creator.mjs.map +1 -1
  17. package/types/algorand-client-transaction-sender.d.ts +107 -20
  18. package/types/algorand-client-transaction-sender.js +107 -21
  19. package/types/algorand-client-transaction-sender.js.map +1 -1
  20. package/types/algorand-client-transaction-sender.mjs +107 -21
  21. package/types/algorand-client-transaction-sender.mjs.map +1 -1
  22. package/types/algorand-client.d.ts +108 -24
  23. package/types/algorand-client.js +107 -23
  24. package/types/algorand-client.js.map +1 -1
  25. package/types/algorand-client.mjs +107 -23
  26. package/types/algorand-client.mjs.map +1 -1
  27. package/types/amount.d.ts +10 -0
  28. package/types/amount.js +10 -0
  29. package/types/amount.js.map +1 -1
  30. package/types/amount.mjs +10 -0
  31. package/types/amount.mjs.map +1 -1
  32. package/types/app-client.d.ts +128 -8
  33. package/types/app-client.js +131 -8
  34. package/types/app-client.js.map +1 -1
  35. package/types/app-client.mjs +131 -8
  36. package/types/app-client.mjs.map +1 -1
  37. package/types/app-deployer.d.ts +33 -1
  38. package/types/app-deployer.js +33 -1
  39. package/types/app-deployer.js.map +1 -1
  40. package/types/app-deployer.mjs +33 -1
  41. package/types/app-deployer.mjs.map +1 -1
  42. package/types/app-factory.d.ts +74 -4
  43. package/types/app-factory.js +74 -4
  44. package/types/app-factory.js.map +1 -1
  45. package/types/app-factory.mjs +74 -4
  46. package/types/app-factory.mjs.map +1 -1
  47. package/types/app-manager.d.ts +64 -0
  48. package/types/app-manager.js +64 -0
  49. package/types/app-manager.js.map +1 -1
  50. package/types/app-manager.mjs +64 -0
  51. package/types/app-manager.mjs.map +1 -1
  52. package/types/app-spec.d.ts +9 -0
  53. package/types/app-spec.js +9 -0
  54. package/types/app-spec.js.map +1 -1
  55. package/types/app-spec.mjs +9 -0
  56. package/types/app-spec.mjs.map +1 -1
  57. package/types/asset-manager.d.ts +5 -5
  58. package/types/asset-manager.js +5 -5
  59. package/types/asset-manager.js.map +1 -1
  60. package/types/asset-manager.mjs +5 -5
  61. package/types/asset-manager.mjs.map +1 -1
  62. package/types/client-manager.d.ts +79 -18
  63. package/types/client-manager.js +79 -18
  64. package/types/client-manager.js.map +1 -1
  65. package/types/client-manager.mjs +79 -18
  66. package/types/client-manager.mjs.map +1 -1
  67. package/types/composer.d.ts +599 -1
  68. package/types/composer.js +575 -1
  69. package/types/composer.js.map +1 -1
  70. package/types/composer.mjs +575 -1
  71. package/types/composer.mjs.map +1 -1
@@ -127,6 +127,17 @@ export declare class AppFactory {
127
127
  private _approvalSourceMap;
128
128
  private _clearSourceMap;
129
129
  private _paramsMethods;
130
+ /**
131
+ * Create a new app factory.
132
+ * @param params The parameters to create the app factory
133
+ * @returns The `AppFactory` instance
134
+ * @example
135
+ * ```typescript
136
+ * const appFactory = new AppFactory({
137
+ * appSpec: appSpec,
138
+ * algorand: AlgorandClient.mainNet(),
139
+ * })
140
+ */
130
141
  constructor(params: AppFactoryParams);
131
142
  /** The name of the app (from the ARC-32 / ARC-56 app spec or override). */
132
143
  get appName(): string;
@@ -623,10 +634,22 @@ export declare class AppFactory {
623
634
  readonly createTransaction: {
624
635
  /** Create bare (raw) transactions for the current app */
625
636
  bare: {
626
- /** Create a create call transaction, including deploy-time TEAL template replacements and compilation if provided */
637
+ /**
638
+ * Create a create app call transaction using a bare (raw) create call.
639
+ *
640
+ * Performs deploy-time TEAL template placeholder substitutions (if specified).
641
+ * @param params The parameters to create the create call transaction
642
+ * @returns The create call transaction
643
+ */
627
644
  create: (params?: AppFactoryCreateParams) => Promise<algosdk.Transaction>;
628
645
  };
629
- /** Create a create ABI call transaction, including deploy-time TEAL template replacements and compilation if provided */
646
+ /**
647
+ * Create a create app call transaction using an ABI create call.
648
+ *
649
+ * Performs deploy-time TEAL template placeholder substitutions (if specified).
650
+ * @param params The parameters to create the create call transaction
651
+ * @returns The create call transaction
652
+ */
630
653
  create: (params: AppFactoryCreateMethodCallParams) => Promise<{
631
654
  transactions: algosdk.Transaction[];
632
655
  methodCalls: Map<number, algosdk.ABIMethod>;
@@ -637,6 +660,14 @@ export declare class AppFactory {
637
660
  readonly send: {
638
661
  /** Send bare (raw) transactions for the current app */
639
662
  bare: {
663
+ /**
664
+ * Creates an instance of the app using a bare (raw) create call and returns the result
665
+ * of the creation transaction and an app client to interact with that app instance.
666
+ *
667
+ * Performs deploy-time TEAL template placeholder substitutions (if specified).
668
+ * @param params The parameters to create the app
669
+ * @returns The app client and the result of the creation transaction
670
+ */
640
671
  create: (params?: AppFactoryCreateParams & SendParams) => Promise<{
641
672
  appClient: AppClient;
642
673
  result: {
@@ -691,6 +722,31 @@ export declare class AppFactory {
691
722
  * **Note:** if there is an update (different TEAL code) to an existing app (and `onUpdate` is set to `'replace'`) the existing app will be deleted and re-created.
692
723
  * @param params The arguments to control the app deployment
693
724
  * @returns The app client and the result of the deployment
725
+ * @example
726
+ * ```ts
727
+ * const { appClient, result } = await factory.deploy({
728
+ * createParams: {
729
+ * sender: 'SENDER_ADDRESS',
730
+ * approvalProgram: 'APPROVAL PROGRAM',
731
+ * clearStateProgram: 'CLEAR PROGRAM',
732
+ * schema: {
733
+ * globalByteSlices: 0,
734
+ * globalInts: 0,
735
+ * localByteSlices: 0,
736
+ * localInts: 0
737
+ * }
738
+ * },
739
+ * updateParams: {
740
+ * sender: 'SENDER_ADDRESS'
741
+ * },
742
+ * deleteParams: {
743
+ * sender: 'SENDER_ADDRESS'
744
+ * },
745
+ * metadata: { name: 'my_app', version: '2.0', updatable: false, deletable: false },
746
+ * onSchemaBreak: 'append',
747
+ * onUpdate: 'append'
748
+ * })
749
+ * ```
694
750
  */
695
751
  deploy(params: AppFactoryDeployParams): Promise<{
696
752
  appClient: AppClient;
@@ -788,7 +844,11 @@ export declare class AppFactory {
788
844
  * Automatically populates appName, defaultSender and source maps from the factory
789
845
  * if not specified in the params.
790
846
  * @param params The parameters to create the app client
791
- * @returns The `AppClient`
847
+ * @returns The `AppClient` instance
848
+ * @example
849
+ * ```typescript
850
+ * const appClient = factory.getAppClientById({ appId: 12345n })
851
+ * ```
792
852
  */
793
853
  getAppClientById(params: AppFactoryAppClientParams): AppClient;
794
854
  /**
@@ -798,7 +858,11 @@ export declare class AppFactory {
798
858
  * Automatically populates appName, defaultSender and source maps from the factory
799
859
  * if not specified in the params.
800
860
  * @param params The parameters to create the app client
801
- * @returns The `AppClient`
861
+ * @returns The `AppClient` instance
862
+ * @example
863
+ * ```typescript
864
+ * const appClient = factory.getAppClientByCreatorAndName({ creatorAddress: 'CREATOR_ADDRESS', appName: 'my_app' })
865
+ * ```
802
866
  */
803
867
  getAppClientByCreatorAndName(params: AppFactoryResolveAppClientByCreatorAndNameParams): Promise<AppClient>;
804
868
  /**
@@ -831,6 +895,12 @@ export declare class AppFactory {
831
895
  * If no TEAL templates provided it will use any byte code provided in the app spec.
832
896
  *
833
897
  * Will store any generated source maps for later use in debugging.
898
+ * @param compilation Optional compilation parameters to use for the compilation
899
+ * @returns The compilation result
900
+ * @example
901
+ * ```typescript
902
+ * const result = await factory.compile()
903
+ * ```
834
904
  */
835
905
  compile(compilation?: AppClientCompilationParams): Promise<import("./app-client").AppClientCompilationResult>;
836
906
  private getBareParams;
@@ -13,17 +13,40 @@ var OnApplicationComplete = algosdk.OnApplicationComplete;
13
13
  * to interact with those (or other) app instances.
14
14
  */
15
15
  class AppFactory {
16
+ /**
17
+ * Create a new app factory.
18
+ * @param params The parameters to create the app factory
19
+ * @returns The `AppFactory` instance
20
+ * @example
21
+ * ```typescript
22
+ * const appFactory = new AppFactory({
23
+ * appSpec: appSpec,
24
+ * algorand: AlgorandClient.mainNet(),
25
+ * })
26
+ */
16
27
  constructor(params) {
17
28
  /** Create transactions for the current app */
18
29
  this.createTransaction = {
19
30
  /** Create bare (raw) transactions for the current app */
20
31
  bare: {
21
- /** Create a create call transaction, including deploy-time TEAL template replacements and compilation if provided */
32
+ /**
33
+ * Create a create app call transaction using a bare (raw) create call.
34
+ *
35
+ * Performs deploy-time TEAL template placeholder substitutions (if specified).
36
+ * @param params The parameters to create the create call transaction
37
+ * @returns The create call transaction
38
+ */
22
39
  create: async (params) => {
23
40
  return this._algorand.createTransaction.appCreate(await this.params.bare.create(params));
24
41
  },
25
42
  },
26
- /** Create a create ABI call transaction, including deploy-time TEAL template replacements and compilation if provided */
43
+ /**
44
+ * Create a create app call transaction using an ABI create call.
45
+ *
46
+ * Performs deploy-time TEAL template placeholder substitutions (if specified).
47
+ * @param params The parameters to create the create call transaction
48
+ * @returns The create call transaction
49
+ */
27
50
  create: async (params) => {
28
51
  return this._algorand.createTransaction.appCreateMethodCall(await this.params.create(params));
29
52
  },
@@ -32,6 +55,14 @@ class AppFactory {
32
55
  this.send = {
33
56
  /** Send bare (raw) transactions for the current app */
34
57
  bare: {
58
+ /**
59
+ * Creates an instance of the app using a bare (raw) create call and returns the result
60
+ * of the creation transaction and an app client to interact with that app instance.
61
+ *
62
+ * Performs deploy-time TEAL template placeholder substitutions (if specified).
63
+ * @param params The parameters to create the app
64
+ * @returns The app client and the result of the creation transaction
65
+ */
35
66
  create: async (params) => {
36
67
  const updatable = params?.updatable ?? this._updatable;
37
68
  const deletable = params?.deletable ?? this._deletable;
@@ -128,6 +159,31 @@ class AppFactory {
128
159
  * **Note:** if there is an update (different TEAL code) to an existing app (and `onUpdate` is set to `'replace'`) the existing app will be deleted and re-created.
129
160
  * @param params The arguments to control the app deployment
130
161
  * @returns The app client and the result of the deployment
162
+ * @example
163
+ * ```ts
164
+ * const { appClient, result } = await factory.deploy({
165
+ * createParams: {
166
+ * sender: 'SENDER_ADDRESS',
167
+ * approvalProgram: 'APPROVAL PROGRAM',
168
+ * clearStateProgram: 'CLEAR PROGRAM',
169
+ * schema: {
170
+ * globalByteSlices: 0,
171
+ * globalInts: 0,
172
+ * localByteSlices: 0,
173
+ * localInts: 0
174
+ * }
175
+ * },
176
+ * updateParams: {
177
+ * sender: 'SENDER_ADDRESS'
178
+ * },
179
+ * deleteParams: {
180
+ * sender: 'SENDER_ADDRESS'
181
+ * },
182
+ * metadata: { name: 'my_app', version: '2.0', updatable: false, deletable: false },
183
+ * onSchemaBreak: 'append',
184
+ * onUpdate: 'append'
185
+ * })
186
+ * ```
131
187
  */
132
188
  async deploy(params) {
133
189
  const updatable = params.updatable ?? this._updatable ?? this.getDeployTimeControl('updatable');
@@ -185,7 +241,11 @@ class AppFactory {
185
241
  * Automatically populates appName, defaultSender and source maps from the factory
186
242
  * if not specified in the params.
187
243
  * @param params The parameters to create the app client
188
- * @returns The `AppClient`
244
+ * @returns The `AppClient` instance
245
+ * @example
246
+ * ```typescript
247
+ * const appClient = factory.getAppClientById({ appId: 12345n })
248
+ * ```
189
249
  */
190
250
  getAppClientById(params) {
191
251
  return new types_appClient.AppClient({
@@ -206,7 +266,11 @@ class AppFactory {
206
266
  * Automatically populates appName, defaultSender and source maps from the factory
207
267
  * if not specified in the params.
208
268
  * @param params The parameters to create the app client
209
- * @returns The `AppClient`
269
+ * @returns The `AppClient` instance
270
+ * @example
271
+ * ```typescript
272
+ * const appClient = factory.getAppClientByCreatorAndName({ creatorAddress: 'CREATOR_ADDRESS', appName: 'my_app' })
273
+ * ```
210
274
  */
211
275
  getAppClientByCreatorAndName(params) {
212
276
  return types_appClient.AppClient.fromCreatorAndName({
@@ -332,6 +396,12 @@ class AppFactory {
332
396
  * If no TEAL templates provided it will use any byte code provided in the app spec.
333
397
  *
334
398
  * Will store any generated source maps for later use in debugging.
399
+ * @param compilation Optional compilation parameters to use for the compilation
400
+ * @returns The compilation result
401
+ * @example
402
+ * ```typescript
403
+ * const result = await factory.compile()
404
+ * ```
335
405
  */
336
406
  async compile(compilation) {
337
407
  const result = await types_appClient.AppClient.compile(this._appSpec, this._algorand.app, compilation);
@@ -1 +1 @@
1
- {"version":3,"file":"app-factory.js","sources":["../../src/types/app-factory.ts"],"sourcesContent":["import algosdk, { Address } from 'algosdk'\nimport { TransactionSignerAccount } from './account'\nimport { AlgorandClientInterface } from './algorand-client-interface'\nimport {\n AppCompilationResult,\n AppReturn,\n DELETABLE_TEMPLATE_NAME,\n SendAppTransactionResult,\n TealTemplateParams,\n UPDATABLE_TEMPLATE_NAME,\n} from './app'\nimport {\n ABIStruct,\n Arc56Contract,\n Arc56Method,\n getABIDecodedValue,\n getABITupleFromABIStruct,\n getArc56Method,\n getArc56ReturnValue,\n} from './app-arc56'\nimport {\n AppClient,\n AppClientBareCallParams,\n AppClientCompilationParams,\n AppClientMethodCallParams,\n AppClientParams,\n AppSourceMaps,\n ResolveAppClientByCreatorAndName,\n} from './app-client'\nimport {\n AppDeployParams,\n DeployAppDeleteMethodCall,\n DeployAppDeleteParams,\n DeployAppUpdateMethodCall,\n DeployAppUpdateParams,\n} from './app-deployer'\nimport { AppSpec } from './app-spec'\nimport { AppCreateMethodCall, AppCreateParams, AppMethodCall, AppMethodCallTransactionArgument, CommonAppCallParams } from './composer'\nimport { Expand } from './expand'\nimport { SendParams } from './transaction'\nimport SourceMap = algosdk.ProgramSourceMap\nimport OnApplicationComplete = algosdk.OnApplicationComplete\nimport ABIValue = algosdk.ABIValue\nimport TransactionSigner = algosdk.TransactionSigner\n\n/** Parameters to create an app client */\nexport interface AppFactoryParams {\n /** The ARC-56 or ARC-32 application spec as either:\n * * Parsed JSON ARC-56 `Contract`\n * * Parsed JSON ARC-32 `AppSpec`\n * * Raw JSON string (in either ARC-56 or ARC-32 format)\n */\n appSpec: Arc56Contract | AppSpec | string\n\n /** `AlgorandClient` instance */\n algorand: AlgorandClientInterface\n\n /**\n * Optional override for the app name; used for on-chain metadata and lookups.\n * Defaults to the ARC-32/ARC-56 app spec name.\n */\n appName?: string\n\n /** Optional address to use for the account to use as the default sender for calls. */\n defaultSender?: Address | string\n\n /** Optional signer to use as the default signer for default sender calls (if not specified then the signer will be resolved from `AlgorandClient`). */\n defaultSigner?: TransactionSigner\n\n /** The version of app that is / will be deployed; defaults to 1.0 */\n version?: string\n\n /**\n * Whether or not the contract should have deploy-time immutability control set, undefined = ignore.\n * If specified here will get used in calls to `deploy` and `create` calls unless overridden in those calls.\n *\n * Useful if you want to vend multiple contracts from the same factory without specifying this value\n * for each call.\n */\n updatable?: boolean\n\n /**\n * Whether or not the contract should have deploy-time permanence control set, undefined = ignore.\n * If specified here will get used in calls to `deploy` and `create` calls unless overridden in those calls.\n *\n * Useful if you want to vend multiple contracts from the same factory without specifying this value\n * for each call.\n */\n deletable?: boolean\n\n /**\n * Optional deploy-time TEAL template replacement parameters.\n * If specified here will get used in calls to `deploy` and `create` calls unless overridden in those calls.\n *\n * Useful if you want to vend multiple contracts from the same factory without specifying this value\n * for each call.\n */\n deployTimeParams?: TealTemplateParams\n}\n\n/** onComplete parameter for a create app call */\nexport type CreateOnComplete = {\n onComplete?: Exclude<OnApplicationComplete, OnApplicationComplete.ClearStateOC>\n}\n\n/** Specifies a schema used for creating an app */\nexport type CreateSchema = {\n /** The state schema for the app. This is immutable once the app is created. By default uses the ARC32/ARC-56 spec. */\n schema?: {\n /** The number of integers saved in global state. */\n globalInts: number\n /** The number of byte slices saved in global state. */\n globalByteSlices: number\n /** The number of integers saved in local state. */\n localInts: number\n /** The number of byte slices saved in local state. */\n localByteSlices: number\n }\n /** Number of extra pages required for the programs.\n * Defaults to the number needed for the programs in this call if not specified.\n * This is immutable once the app is created. */\n extraProgramPages?: number\n}\n\n/** Params to specify a bare (raw) create call for an app */\nexport type AppFactoryCreateParams = Expand<AppClientBareCallParams & AppClientCompilationParams & CreateOnComplete & CreateSchema>\n\n/** Params to specify a create method call for an app */\nexport type AppFactoryCreateMethodCallParams = Expand<\n AppClientMethodCallParams & AppClientCompilationParams & CreateOnComplete & CreateSchema\n>\n\n/** Params to get an app client by ID from an app factory. */\nexport type AppFactoryAppClientParams = Expand<Omit<AppClientParams, 'algorand' | 'appSpec'>>\n\n/** Params to get an app client by creator address and name from an app factory. */\nexport type AppFactoryResolveAppClientByCreatorAndNameParams = Expand<Omit<ResolveAppClientByCreatorAndName, 'algorand' | 'appSpec'>>\n\n/** Parameters to define a deployment for an `AppFactory` */\nexport type AppFactoryDeployParams = Expand<\n Omit<AppDeployParams, 'createParams' | 'updateParams' | 'deleteParams' | 'metadata'> & {\n /** Create transaction parameters to use if a create needs to be issued as part of deployment */\n createParams?:\n | Expand<AppClientMethodCallParams & CreateOnComplete & CreateSchema>\n | Expand<AppClientBareCallParams & CreateOnComplete & CreateSchema>\n /** Update transaction parameters to use if a create needs to be issued as part of deployment */\n updateParams?: AppClientMethodCallParams | AppClientBareCallParams\n /** Delete transaction parameters to use if a create needs to be issued as part of deployment */\n deleteParams?: AppClientMethodCallParams | AppClientBareCallParams\n /**\n * Whether or not the contract should have deploy-time immutability control set.\n * `undefined` = use AppFactory constructor value if set or base it on the app spec.\n */\n updatable?: boolean\n /**\n * Whether or not the contract should have deploy-time permanence control set.\n * `undefined` = use AppFactory constructor value if set or base it on the app spec.\n */\n deletable?: boolean\n /** Override the app name for this deployment */\n appName?: string\n }\n>\n\n/**\n * ARC-56/ARC-32 app factory that, for a given app spec, allows you to create\n * and deploy one or more app instances and to create one or more app clients\n * to interact with those (or other) app instances.\n */\nexport class AppFactory {\n private _appSpec: Arc56Contract\n private _appName: string\n private _algorand: AlgorandClientInterface\n private _version: string\n private _defaultSender?: Address\n private _defaultSigner?: TransactionSigner\n private _deployTimeParams?: TealTemplateParams\n private _updatable?: boolean\n private _deletable?: boolean\n\n private _approvalSourceMap: SourceMap | undefined\n private _clearSourceMap: SourceMap | undefined\n\n private _paramsMethods: ReturnType<AppFactory['getParamsMethods']>\n\n constructor(params: AppFactoryParams) {\n this._appSpec = AppClient.normaliseAppSpec(params.appSpec)\n this._appName = params.appName ?? this._appSpec.name\n this._algorand = params.algorand\n this._version = params.version ?? '1.0'\n this._defaultSender = typeof params.defaultSender === 'string' ? Address.fromString(params.defaultSender) : params.defaultSender\n this._defaultSigner = params.defaultSigner\n this._deployTimeParams = params.deployTimeParams\n this._updatable = params.updatable\n this._deletable = params.deletable\n this._paramsMethods = this.getParamsMethods()\n }\n\n /** The name of the app (from the ARC-32 / ARC-56 app spec or override). */\n public get appName() {\n return this._appName\n }\n\n /** The ARC-56 app spec being used */\n get appSpec() {\n return this._appSpec\n }\n\n /** Return the algorand client this factory is using. */\n get algorand() {\n return this._algorand\n }\n\n /** Get parameters to create transactions (create and deploy related calls) for the current app.\n *\n * A good mental model for this is that these parameters represent a deferred transaction creation.\n * @example Create a transaction in the future using Algorand Client\n * ```typescript\n * const createAppParams = appFactory.params.create({method: 'create_method', args: [123, 'hello']})\n * // ...\n * await algorand.send.AppCreateMethodCall(createAppParams)\n * ```\n * @example Define a nested transaction as an ABI argument\n * ```typescript\n * const createAppParams = appFactory.params.create({method: 'create_method', args: [123, 'hello']})\n * await appClient.send.call({method: 'my_method', args: [createAppParams]})\n * ```\n */\n get params() {\n return this._paramsMethods\n }\n\n /** Create transactions for the current app */\n readonly createTransaction = {\n /** Create bare (raw) transactions for the current app */\n bare: {\n /** Create a create call transaction, including deploy-time TEAL template replacements and compilation if provided */\n create: async (params?: AppFactoryCreateParams) => {\n return this._algorand.createTransaction.appCreate(await this.params.bare.create(params))\n },\n },\n\n /** Create a create ABI call transaction, including deploy-time TEAL template replacements and compilation if provided */\n create: async (params: AppFactoryCreateMethodCallParams) => {\n return this._algorand.createTransaction.appCreateMethodCall(await this.params.create(params))\n },\n }\n\n /** Send transactions to the current app */\n readonly send = {\n /** Send bare (raw) transactions for the current app */\n bare: {\n create: async (params?: AppFactoryCreateParams & SendParams) => {\n const updatable = params?.updatable ?? this._updatable\n const deletable = params?.deletable ?? this._deletable\n const deployTimeParams = params?.deployTimeParams ?? this._deployTimeParams\n const compiled = await this.compile({ deployTimeParams, updatable, deletable })\n const result = await this.handleCallErrors(async () => ({\n ...(await this._algorand.send.appCreate(await this.params.bare.create({ ...params, updatable, deletable, deployTimeParams }))),\n return: undefined,\n }))\n return {\n appClient: this.getAppClientById({\n appId: result.appId,\n }),\n result: {\n ...result,\n ...(compiled as Partial<AppCompilationResult>),\n },\n }\n },\n },\n\n /**\n * Creates an instance of the app and returns the result of the creation\n * transaction and an app client to interact with that app instance.\n *\n * Performs deploy-time TEAL template placeholder substitutions (if specified).\n * @param params The parameters to create the app\n * @returns The app client and the result of the creation transaction\n */\n create: async (params: AppFactoryCreateMethodCallParams & SendParams) => {\n const updatable = params?.updatable ?? this._updatable\n const deletable = params?.deletable ?? this._deletable\n const deployTimeParams = params?.deployTimeParams ?? this._deployTimeParams\n const compiled = await this.compile({ deployTimeParams, updatable, deletable })\n const result = await this.handleCallErrors(async () =>\n this.parseMethodCallReturn(\n this._algorand.send.appCreateMethodCall(await this.params.create({ ...params, updatable, deletable, deployTimeParams })),\n getArc56Method(params.method, this._appSpec),\n ),\n )\n return {\n appClient: this.getAppClientById({\n appId: result.appId,\n }),\n result: {\n ...result,\n ...(compiled as Partial<AppCompilationResult>),\n },\n }\n },\n }\n\n /**\n * Idempotently deploy (create if not exists, update if changed) an app against the given name for the given creator account, including deploy-time TEAL template placeholder substitutions (if specified).\n *\n * **Note:** When using the return from this function be sure to check `operationPerformed` to get access to various return properties like `transaction`, `confirmation` and `deleteResult`.\n *\n * **Note:** if there is a breaking state schema change to an existing app (and `onSchemaBreak` is set to `'replace'`) the existing app will be deleted and re-created.\n *\n * **Note:** if there is an update (different TEAL code) to an existing app (and `onUpdate` is set to `'replace'`) the existing app will be deleted and re-created.\n * @param params The arguments to control the app deployment\n * @returns The app client and the result of the deployment\n */\n public async deploy(params: AppFactoryDeployParams) {\n const updatable = params.updatable ?? this._updatable ?? this.getDeployTimeControl('updatable')\n const deletable = params.deletable ?? this._deletable ?? this.getDeployTimeControl('deletable')\n const deployTimeParams = params.deployTimeParams ?? this._deployTimeParams\n const compiled = await this.compile({ deployTimeParams, updatable, deletable })\n const deployResult = await this._algorand.appDeployer.deploy({\n ...params,\n createParams: await (params.createParams && 'method' in params.createParams\n ? this.params.create({ ...params.createParams, updatable, deletable, deployTimeParams })\n : this.params.bare.create({ ...params.createParams, updatable, deletable, deployTimeParams })),\n updateParams:\n params.updateParams && 'method' in params.updateParams\n ? this.params.deployUpdate(params.updateParams)\n : this.params.bare.deployUpdate(params.updateParams),\n deleteParams:\n params.deleteParams && 'method' in params.deleteParams\n ? this.params.deployDelete(params.deleteParams)\n : this.params.bare.deployDelete(params.deleteParams),\n metadata: {\n name: params.appName ?? this._appName,\n version: this._version,\n updatable,\n deletable,\n },\n })\n const appClient = this.getAppClientById({\n appId: deployResult.appId,\n appName: params.appName,\n })\n const result = {\n ...deployResult,\n ...(compiled as Partial<AppCompilationResult>),\n }\n return {\n appClient,\n result: {\n ...result,\n return:\n 'return' in result\n ? result.operationPerformed === 'update'\n ? params.updateParams && 'method' in params.updateParams\n ? getArc56ReturnValue(result.return, getArc56Method(params.updateParams.method, this._appSpec), this._appSpec.structs)\n : undefined\n : params.createParams && 'method' in params.createParams\n ? getArc56ReturnValue(result.return, getArc56Method(params.createParams.method, this._appSpec), this._appSpec.structs)\n : undefined\n : undefined,\n deleteReturn:\n 'deleteReturn' in result && params.deleteParams && 'method' in params.deleteParams\n ? getArc56ReturnValue(result.deleteReturn, getArc56Method(params.deleteParams.method, this._appSpec), this._appSpec.structs)\n : undefined,\n },\n }\n }\n\n /**\n * Returns a new `AppClient` client for an app instance of the given ID.\n *\n * Automatically populates appName, defaultSender and source maps from the factory\n * if not specified in the params.\n * @param params The parameters to create the app client\n * @returns The `AppClient`\n */\n public getAppClientById(params: AppFactoryAppClientParams) {\n return new AppClient({\n ...params,\n algorand: this._algorand,\n appSpec: this._appSpec,\n appName: params.appName ?? this._appName,\n defaultSender: params.defaultSender ?? this._defaultSender,\n defaultSigner: params.defaultSigner ?? this._defaultSigner,\n approvalSourceMap: params.approvalSourceMap ?? this._approvalSourceMap,\n clearSourceMap: params.clearSourceMap ?? this._clearSourceMap,\n })\n }\n\n /**\n * Returns a new `AppClient` client, resolving the app by creator address and name\n * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note).\n *\n * Automatically populates appName, defaultSender and source maps from the factory\n * if not specified in the params.\n * @param params The parameters to create the app client\n * @returns The `AppClient`\n */\n public getAppClientByCreatorAndName(params: AppFactoryResolveAppClientByCreatorAndNameParams) {\n return AppClient.fromCreatorAndName({\n ...params,\n algorand: this._algorand,\n appSpec: this._appSpec,\n appName: params.appName ?? this._appName,\n defaultSender: params.defaultSender ?? this._defaultSender,\n approvalSourceMap: params.approvalSourceMap ?? this._approvalSourceMap,\n clearSourceMap: params.clearSourceMap ?? this._clearSourceMap,\n })\n }\n\n /**\n * Takes an error that may include a logic error from a call to the current app and re-exposes the\n * error to include source code information via the source map and ARC-56 spec.\n * @param e The error to parse\n * @param isClearStateProgram Whether or not the code was running the clear state program (defaults to approval program)\n * @returns The new error, or if there was no logic error or source map then the wrapped error with source details\n */\n exposeLogicError(e: Error, isClearStateProgram?: boolean): Error {\n return AppClient.exposeLogicError(e, this._appSpec, {\n isClearStateProgram,\n approvalSourceMap: this._approvalSourceMap,\n clearSourceMap: this._clearSourceMap,\n })\n }\n\n /**\n * Export the current source maps for the app.\n * @returns The source maps\n */\n exportSourceMaps(): AppSourceMaps {\n if (!this._approvalSourceMap || !this._clearSourceMap) {\n throw new Error(\n \"Unable to export source maps; they haven't been loaded into this client - you need to call create, update, or deploy first\",\n )\n }\n\n return {\n approvalSourceMap: this._approvalSourceMap,\n clearSourceMap: this._clearSourceMap,\n }\n }\n\n /**\n * Import source maps for the app.\n * @param sourceMaps The source maps to import\n */\n importSourceMaps(sourceMaps: AppSourceMaps) {\n this._approvalSourceMap = new SourceMap(sourceMaps.approvalSourceMap)\n this._clearSourceMap = new SourceMap(sourceMaps.clearSourceMap)\n }\n\n private getDeployTimeControl(control: 'updatable' | 'deletable'): boolean | undefined {\n const approval = this._appSpec.source?.approval ? Buffer.from(this._appSpec.source.approval, 'base64').toString('utf-8') : undefined\n // variable not present, so unknown control value\n if (!approval || !approval.includes(control === 'updatable' ? UPDATABLE_TEMPLATE_NAME : DELETABLE_TEMPLATE_NAME)) return undefined\n\n // A call is present and configured\n return (\n this._appSpec.bareActions.call.includes(control === 'updatable' ? 'UpdateApplication' : 'DeleteApplication') ||\n Object.values(this._appSpec.methods).some((c) =>\n c.actions.call.includes(control === 'updatable' ? 'UpdateApplication' : 'DeleteApplication'),\n )\n )\n }\n\n private getParamsMethods() {\n return {\n /** Return params for a create ABI call, including deploy-time TEAL template replacements and compilation if provided */\n create: async (params: AppFactoryCreateMethodCallParams) => {\n const compiled = await this.compile({ ...params, deployTimeParams: params.deployTimeParams ?? this._deployTimeParams })\n return this.getABIParams(\n {\n ...params,\n deployTimeParams: params.deployTimeParams ?? this._deployTimeParams,\n schema: params.schema ?? {\n globalByteSlices: this._appSpec.state.schema.global.bytes,\n globalInts: this._appSpec.state.schema.global.ints,\n localByteSlices: this._appSpec.state.schema.local.bytes,\n localInts: this._appSpec.state.schema.local.ints,\n },\n approvalProgram: compiled.approvalProgram,\n clearStateProgram: compiled.clearStateProgram,\n },\n params.onComplete ?? OnApplicationComplete.NoOpOC,\n ) satisfies AppCreateMethodCall\n },\n /** Return params for a deployment update ABI call */\n deployUpdate: (params: AppClientMethodCallParams) => {\n return this.getABIParams(params, OnApplicationComplete.UpdateApplicationOC) satisfies DeployAppUpdateMethodCall\n },\n /** Return params for a deployment delete ABI call */\n deployDelete: (params: AppClientMethodCallParams) => {\n return this.getABIParams(params, OnApplicationComplete.DeleteApplicationOC) satisfies DeployAppDeleteMethodCall\n },\n bare: {\n /** Return params for a create bare call, including deploy-time TEAL template replacements and compilation if provided */\n create: async (params?: AppFactoryCreateParams) => {\n return this.getBareParams(\n {\n ...params,\n deployTimeParams: params?.deployTimeParams ?? this._deployTimeParams,\n schema: params?.schema ?? {\n globalByteSlices: this._appSpec.state.schema.global.bytes,\n globalInts: this._appSpec.state.schema.global.ints,\n localByteSlices: this._appSpec.state.schema.local.bytes,\n localInts: this._appSpec.state.schema.local.ints,\n },\n ...(await this.compile({ ...params, deployTimeParams: params?.deployTimeParams ?? this._deployTimeParams })),\n },\n params?.onComplete ?? OnApplicationComplete.NoOpOC,\n ) satisfies AppCreateParams\n },\n /** Return params for a deployment update bare call */\n deployUpdate: (params?: AppClientBareCallParams) => {\n return this.getBareParams(params, OnApplicationComplete.UpdateApplicationOC) satisfies DeployAppUpdateParams\n },\n /** Return params for a deployment delete bare call */\n deployDelete: (params?: AppClientBareCallParams) => {\n return this.getBareParams(params, OnApplicationComplete.DeleteApplicationOC) satisfies DeployAppDeleteParams\n },\n },\n }\n }\n\n /** Make the given call and catch any errors, augmenting with debugging information before re-throwing. */\n private async handleCallErrors<TResult>(call: () => Promise<TResult>) {\n try {\n return await call()\n } catch (e) {\n throw this.exposeLogicError(e as Error)\n }\n }\n\n /**\n * Compiles the approval and clear state programs (if TEAL templates provided),\n * performing any provided deploy-time parameter replacement and stores\n * the source maps.\n *\n * If no TEAL templates provided it will use any byte code provided in the app spec.\n *\n * Will store any generated source maps for later use in debugging.\n */\n public async compile(compilation?: AppClientCompilationParams) {\n const result = await AppClient.compile(this._appSpec, this._algorand.app, compilation)\n\n if (result.compiledApproval) {\n this._approvalSourceMap = result.compiledApproval.sourceMap\n }\n if (result.compiledClear) {\n this._clearSourceMap = result.compiledClear.sourceMap\n }\n\n return result\n }\n\n private getBareParams<\n TParams extends { sender?: Address | string; signer?: TransactionSigner | TransactionSignerAccount } | undefined,\n TOnComplete extends OnApplicationComplete,\n >(params: TParams, onComplete: TOnComplete) {\n return {\n ...params,\n sender: this.getSender(params?.sender),\n signer: this.getSigner(params?.sender, params?.signer),\n onComplete,\n }\n }\n\n private getABIParams<\n TParams extends {\n method: string\n sender?: Address | string\n signer?: TransactionSigner | TransactionSignerAccount\n args?: AppClientMethodCallParams['args']\n },\n TOnComplete extends OnApplicationComplete,\n >(params: TParams, onComplete: TOnComplete) {\n return {\n ...params,\n sender: this.getSender(params.sender),\n signer: this.getSigner(params.sender, params.signer),\n method: getArc56Method(params.method, this._appSpec),\n args: this.getCreateABIArgsWithDefaultValues(params.method, params.args),\n onComplete,\n }\n }\n\n private getCreateABIArgsWithDefaultValues(\n methodNameOrSignature: string,\n args: AppClientMethodCallParams['args'] | undefined,\n ): AppMethodCall<CommonAppCallParams>['args'] {\n const m = getArc56Method(methodNameOrSignature, this._appSpec)\n return args?.map((a, i) => {\n const arg = m.args[i]\n if (a !== undefined) {\n // If a struct then convert to tuple for the underlying call\n return arg.struct && typeof a === 'object' && !Array.isArray(a)\n ? getABITupleFromABIStruct(a as ABIStruct, this._appSpec.structs[arg.struct], this._appSpec.structs)\n : (a as ABIValue | AppMethodCallTransactionArgument)\n }\n const defaultValue = arg.defaultValue\n if (defaultValue) {\n switch (defaultValue.source) {\n case 'literal':\n return getABIDecodedValue(Buffer.from(defaultValue.data, 'base64'), m.method.args[i].type, this._appSpec.structs) as ABIValue\n default:\n throw new Error(`Can't provide default value for ${defaultValue.source} for a contract creation call`)\n }\n }\n throw new Error(`No value provided for required argument ${arg.name ?? `arg${i + 1}`} in call to method ${m.name}`)\n })\n }\n\n /** Returns the sender for a call, using the `defaultSender`\n * if none provided and throws an error if neither provided */\n private getSender(sender: string | Address | undefined): Address {\n if (!sender && !this._defaultSender) {\n throw new Error(`No sender provided and no default sender present in app factory for call to app ${this._appName}`)\n }\n return typeof sender === 'string' ? Address.fromString(sender) : (sender ?? this._defaultSender!)\n }\n\n /** Returns the signer for a call, using the provided signer or the `defaultSigner`\n * if no signer was provided and the sender resolves to the default sender, the call will use default signer\n * or `undefined` otherwise (so the signer is resolved from `AlgorandClient`) */\n private getSigner(\n sender: Address | string | undefined,\n signer: TransactionSigner | TransactionSignerAccount | undefined,\n ): TransactionSigner | TransactionSignerAccount | undefined {\n return signer ?? (!sender || sender === this._defaultSender ? this._defaultSigner : undefined)\n }\n\n /**\n * Checks for decode errors on the SendAppTransactionResult and maps the return value to the specified type\n * on the ARC-56 method.\n *\n * If the return type is a struct then the struct will be returned.\n *\n * @param result The SendAppTransactionResult to be mapped\n * @param method The method that was called\n * @returns The smart contract response with an updated return value\n */\n async parseMethodCallReturn<\n TReturn extends Uint8Array | ABIValue | ABIStruct | undefined,\n TResult extends SendAppTransactionResult = SendAppTransactionResult,\n >(result: Promise<TResult> | TResult, method: Arc56Method): Promise<Omit<TResult, 'return'> & AppReturn<TReturn>> {\n const resultValue = await result\n return { ...resultValue, return: getArc56ReturnValue(resultValue.return, method, this._appSpec.structs) }\n }\n}\n"],"names":["getArc56Method","AppClient","Address","getArc56ReturnValue","UPDATABLE_TEMPLATE_NAME","DELETABLE_TEMPLATE_NAME","getABITupleFromABIStruct","getABIDecodedValue"],"mappings":"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"}
1
+ {"version":3,"file":"app-factory.js","sources":["../../src/types/app-factory.ts"],"sourcesContent":["import algosdk, { Address } from 'algosdk'\nimport { TransactionSignerAccount } from './account'\nimport { AlgorandClientInterface } from './algorand-client-interface'\nimport {\n AppCompilationResult,\n AppReturn,\n DELETABLE_TEMPLATE_NAME,\n SendAppTransactionResult,\n TealTemplateParams,\n UPDATABLE_TEMPLATE_NAME,\n} from './app'\nimport {\n ABIStruct,\n Arc56Contract,\n Arc56Method,\n getABIDecodedValue,\n getABITupleFromABIStruct,\n getArc56Method,\n getArc56ReturnValue,\n} from './app-arc56'\nimport {\n AppClient,\n AppClientBareCallParams,\n AppClientCompilationParams,\n AppClientMethodCallParams,\n AppClientParams,\n AppSourceMaps,\n ResolveAppClientByCreatorAndName,\n} from './app-client'\nimport {\n AppDeployParams,\n DeployAppDeleteMethodCall,\n DeployAppDeleteParams,\n DeployAppUpdateMethodCall,\n DeployAppUpdateParams,\n} from './app-deployer'\nimport { AppSpec } from './app-spec'\nimport { AppCreateMethodCall, AppCreateParams, AppMethodCall, AppMethodCallTransactionArgument, CommonAppCallParams } from './composer'\nimport { Expand } from './expand'\nimport { SendParams } from './transaction'\nimport SourceMap = algosdk.ProgramSourceMap\nimport OnApplicationComplete = algosdk.OnApplicationComplete\nimport ABIValue = algosdk.ABIValue\nimport TransactionSigner = algosdk.TransactionSigner\n\n/** Parameters to create an app client */\nexport interface AppFactoryParams {\n /** The ARC-56 or ARC-32 application spec as either:\n * * Parsed JSON ARC-56 `Contract`\n * * Parsed JSON ARC-32 `AppSpec`\n * * Raw JSON string (in either ARC-56 or ARC-32 format)\n */\n appSpec: Arc56Contract | AppSpec | string\n\n /** `AlgorandClient` instance */\n algorand: AlgorandClientInterface\n\n /**\n * Optional override for the app name; used for on-chain metadata and lookups.\n * Defaults to the ARC-32/ARC-56 app spec name.\n */\n appName?: string\n\n /** Optional address to use for the account to use as the default sender for calls. */\n defaultSender?: Address | string\n\n /** Optional signer to use as the default signer for default sender calls (if not specified then the signer will be resolved from `AlgorandClient`). */\n defaultSigner?: TransactionSigner\n\n /** The version of app that is / will be deployed; defaults to 1.0 */\n version?: string\n\n /**\n * Whether or not the contract should have deploy-time immutability control set, undefined = ignore.\n * If specified here will get used in calls to `deploy` and `create` calls unless overridden in those calls.\n *\n * Useful if you want to vend multiple contracts from the same factory without specifying this value\n * for each call.\n */\n updatable?: boolean\n\n /**\n * Whether or not the contract should have deploy-time permanence control set, undefined = ignore.\n * If specified here will get used in calls to `deploy` and `create` calls unless overridden in those calls.\n *\n * Useful if you want to vend multiple contracts from the same factory without specifying this value\n * for each call.\n */\n deletable?: boolean\n\n /**\n * Optional deploy-time TEAL template replacement parameters.\n * If specified here will get used in calls to `deploy` and `create` calls unless overridden in those calls.\n *\n * Useful if you want to vend multiple contracts from the same factory without specifying this value\n * for each call.\n */\n deployTimeParams?: TealTemplateParams\n}\n\n/** onComplete parameter for a create app call */\nexport type CreateOnComplete = {\n onComplete?: Exclude<OnApplicationComplete, OnApplicationComplete.ClearStateOC>\n}\n\n/** Specifies a schema used for creating an app */\nexport type CreateSchema = {\n /** The state schema for the app. This is immutable once the app is created. By default uses the ARC32/ARC-56 spec. */\n schema?: {\n /** The number of integers saved in global state. */\n globalInts: number\n /** The number of byte slices saved in global state. */\n globalByteSlices: number\n /** The number of integers saved in local state. */\n localInts: number\n /** The number of byte slices saved in local state. */\n localByteSlices: number\n }\n /** Number of extra pages required for the programs.\n * Defaults to the number needed for the programs in this call if not specified.\n * This is immutable once the app is created. */\n extraProgramPages?: number\n}\n\n/** Params to specify a bare (raw) create call for an app */\nexport type AppFactoryCreateParams = Expand<AppClientBareCallParams & AppClientCompilationParams & CreateOnComplete & CreateSchema>\n\n/** Params to specify a create method call for an app */\nexport type AppFactoryCreateMethodCallParams = Expand<\n AppClientMethodCallParams & AppClientCompilationParams & CreateOnComplete & CreateSchema\n>\n\n/** Params to get an app client by ID from an app factory. */\nexport type AppFactoryAppClientParams = Expand<Omit<AppClientParams, 'algorand' | 'appSpec'>>\n\n/** Params to get an app client by creator address and name from an app factory. */\nexport type AppFactoryResolveAppClientByCreatorAndNameParams = Expand<Omit<ResolveAppClientByCreatorAndName, 'algorand' | 'appSpec'>>\n\n/** Parameters to define a deployment for an `AppFactory` */\nexport type AppFactoryDeployParams = Expand<\n Omit<AppDeployParams, 'createParams' | 'updateParams' | 'deleteParams' | 'metadata'> & {\n /** Create transaction parameters to use if a create needs to be issued as part of deployment */\n createParams?:\n | Expand<AppClientMethodCallParams & CreateOnComplete & CreateSchema>\n | Expand<AppClientBareCallParams & CreateOnComplete & CreateSchema>\n /** Update transaction parameters to use if a create needs to be issued as part of deployment */\n updateParams?: AppClientMethodCallParams | AppClientBareCallParams\n /** Delete transaction parameters to use if a create needs to be issued as part of deployment */\n deleteParams?: AppClientMethodCallParams | AppClientBareCallParams\n /**\n * Whether or not the contract should have deploy-time immutability control set.\n * `undefined` = use AppFactory constructor value if set or base it on the app spec.\n */\n updatable?: boolean\n /**\n * Whether or not the contract should have deploy-time permanence control set.\n * `undefined` = use AppFactory constructor value if set or base it on the app spec.\n */\n deletable?: boolean\n /** Override the app name for this deployment */\n appName?: string\n }\n>\n\n/**\n * ARC-56/ARC-32 app factory that, for a given app spec, allows you to create\n * and deploy one or more app instances and to create one or more app clients\n * to interact with those (or other) app instances.\n */\nexport class AppFactory {\n private _appSpec: Arc56Contract\n private _appName: string\n private _algorand: AlgorandClientInterface\n private _version: string\n private _defaultSender?: Address\n private _defaultSigner?: TransactionSigner\n private _deployTimeParams?: TealTemplateParams\n private _updatable?: boolean\n private _deletable?: boolean\n\n private _approvalSourceMap: SourceMap | undefined\n private _clearSourceMap: SourceMap | undefined\n\n private _paramsMethods: ReturnType<AppFactory['getParamsMethods']>\n\n /**\n * Create a new app factory.\n * @param params The parameters to create the app factory\n * @returns The `AppFactory` instance\n * @example\n * ```typescript\n * const appFactory = new AppFactory({\n * appSpec: appSpec,\n * algorand: AlgorandClient.mainNet(),\n * })\n */\n constructor(params: AppFactoryParams) {\n this._appSpec = AppClient.normaliseAppSpec(params.appSpec)\n this._appName = params.appName ?? this._appSpec.name\n this._algorand = params.algorand\n this._version = params.version ?? '1.0'\n this._defaultSender = typeof params.defaultSender === 'string' ? Address.fromString(params.defaultSender) : params.defaultSender\n this._defaultSigner = params.defaultSigner\n this._deployTimeParams = params.deployTimeParams\n this._updatable = params.updatable\n this._deletable = params.deletable\n this._paramsMethods = this.getParamsMethods()\n }\n\n /** The name of the app (from the ARC-32 / ARC-56 app spec or override). */\n public get appName() {\n return this._appName\n }\n\n /** The ARC-56 app spec being used */\n get appSpec() {\n return this._appSpec\n }\n\n /** Return the algorand client this factory is using. */\n get algorand() {\n return this._algorand\n }\n\n /** Get parameters to create transactions (create and deploy related calls) for the current app.\n *\n * A good mental model for this is that these parameters represent a deferred transaction creation.\n * @example Create a transaction in the future using Algorand Client\n * ```typescript\n * const createAppParams = appFactory.params.create({method: 'create_method', args: [123, 'hello']})\n * // ...\n * await algorand.send.AppCreateMethodCall(createAppParams)\n * ```\n * @example Define a nested transaction as an ABI argument\n * ```typescript\n * const createAppParams = appFactory.params.create({method: 'create_method', args: [123, 'hello']})\n * await appClient.send.call({method: 'my_method', args: [createAppParams]})\n * ```\n */\n get params() {\n return this._paramsMethods\n }\n\n /** Create transactions for the current app */\n readonly createTransaction = {\n /** Create bare (raw) transactions for the current app */\n bare: {\n /**\n * Create a create app call transaction using a bare (raw) create call.\n *\n * Performs deploy-time TEAL template placeholder substitutions (if specified).\n * @param params The parameters to create the create call transaction\n * @returns The create call transaction\n */\n create: async (params?: AppFactoryCreateParams) => {\n return this._algorand.createTransaction.appCreate(await this.params.bare.create(params))\n },\n },\n\n /**\n * Create a create app call transaction using an ABI create call.\n *\n * Performs deploy-time TEAL template placeholder substitutions (if specified).\n * @param params The parameters to create the create call transaction\n * @returns The create call transaction\n */\n create: async (params: AppFactoryCreateMethodCallParams) => {\n return this._algorand.createTransaction.appCreateMethodCall(await this.params.create(params))\n },\n }\n\n /** Send transactions to the current app */\n readonly send = {\n /** Send bare (raw) transactions for the current app */\n bare: {\n /**\n * Creates an instance of the app using a bare (raw) create call and returns the result\n * of the creation transaction and an app client to interact with that app instance.\n *\n * Performs deploy-time TEAL template placeholder substitutions (if specified).\n * @param params The parameters to create the app\n * @returns The app client and the result of the creation transaction\n */\n create: async (params?: AppFactoryCreateParams & SendParams) => {\n const updatable = params?.updatable ?? this._updatable\n const deletable = params?.deletable ?? this._deletable\n const deployTimeParams = params?.deployTimeParams ?? this._deployTimeParams\n const compiled = await this.compile({ deployTimeParams, updatable, deletable })\n const result = await this.handleCallErrors(async () => ({\n ...(await this._algorand.send.appCreate(await this.params.bare.create({ ...params, updatable, deletable, deployTimeParams }))),\n return: undefined,\n }))\n return {\n appClient: this.getAppClientById({\n appId: result.appId,\n }),\n result: {\n ...result,\n ...(compiled as Partial<AppCompilationResult>),\n },\n }\n },\n },\n\n /**\n * Creates an instance of the app and returns the result of the creation\n * transaction and an app client to interact with that app instance.\n *\n * Performs deploy-time TEAL template placeholder substitutions (if specified).\n * @param params The parameters to create the app\n * @returns The app client and the result of the creation transaction\n */\n create: async (params: AppFactoryCreateMethodCallParams & SendParams) => {\n const updatable = params?.updatable ?? this._updatable\n const deletable = params?.deletable ?? this._deletable\n const deployTimeParams = params?.deployTimeParams ?? this._deployTimeParams\n const compiled = await this.compile({ deployTimeParams, updatable, deletable })\n const result = await this.handleCallErrors(async () =>\n this.parseMethodCallReturn(\n this._algorand.send.appCreateMethodCall(await this.params.create({ ...params, updatable, deletable, deployTimeParams })),\n getArc56Method(params.method, this._appSpec),\n ),\n )\n return {\n appClient: this.getAppClientById({\n appId: result.appId,\n }),\n result: {\n ...result,\n ...(compiled as Partial<AppCompilationResult>),\n },\n }\n },\n }\n\n /**\n * Idempotently deploy (create if not exists, update if changed) an app against the given name for the given creator account, including deploy-time TEAL template placeholder substitutions (if specified).\n *\n * **Note:** When using the return from this function be sure to check `operationPerformed` to get access to various return properties like `transaction`, `confirmation` and `deleteResult`.\n *\n * **Note:** if there is a breaking state schema change to an existing app (and `onSchemaBreak` is set to `'replace'`) the existing app will be deleted and re-created.\n *\n * **Note:** if there is an update (different TEAL code) to an existing app (and `onUpdate` is set to `'replace'`) the existing app will be deleted and re-created.\n * @param params The arguments to control the app deployment\n * @returns The app client and the result of the deployment\n * @example\n * ```ts\n * const { appClient, result } = await factory.deploy({\n * createParams: {\n * sender: 'SENDER_ADDRESS',\n * approvalProgram: 'APPROVAL PROGRAM',\n * clearStateProgram: 'CLEAR PROGRAM',\n * schema: {\n * globalByteSlices: 0,\n * globalInts: 0,\n * localByteSlices: 0,\n * localInts: 0\n * }\n * },\n * updateParams: {\n * sender: 'SENDER_ADDRESS'\n * },\n * deleteParams: {\n * sender: 'SENDER_ADDRESS'\n * },\n * metadata: { name: 'my_app', version: '2.0', updatable: false, deletable: false },\n * onSchemaBreak: 'append',\n * onUpdate: 'append'\n * })\n * ```\n */\n public async deploy(params: AppFactoryDeployParams) {\n const updatable = params.updatable ?? this._updatable ?? this.getDeployTimeControl('updatable')\n const deletable = params.deletable ?? this._deletable ?? this.getDeployTimeControl('deletable')\n const deployTimeParams = params.deployTimeParams ?? this._deployTimeParams\n const compiled = await this.compile({ deployTimeParams, updatable, deletable })\n const deployResult = await this._algorand.appDeployer.deploy({\n ...params,\n createParams: await (params.createParams && 'method' in params.createParams\n ? this.params.create({ ...params.createParams, updatable, deletable, deployTimeParams })\n : this.params.bare.create({ ...params.createParams, updatable, deletable, deployTimeParams })),\n updateParams:\n params.updateParams && 'method' in params.updateParams\n ? this.params.deployUpdate(params.updateParams)\n : this.params.bare.deployUpdate(params.updateParams),\n deleteParams:\n params.deleteParams && 'method' in params.deleteParams\n ? this.params.deployDelete(params.deleteParams)\n : this.params.bare.deployDelete(params.deleteParams),\n metadata: {\n name: params.appName ?? this._appName,\n version: this._version,\n updatable,\n deletable,\n },\n })\n const appClient = this.getAppClientById({\n appId: deployResult.appId,\n appName: params.appName,\n })\n const result = {\n ...deployResult,\n ...(compiled as Partial<AppCompilationResult>),\n }\n return {\n appClient,\n result: {\n ...result,\n return:\n 'return' in result\n ? result.operationPerformed === 'update'\n ? params.updateParams && 'method' in params.updateParams\n ? getArc56ReturnValue(result.return, getArc56Method(params.updateParams.method, this._appSpec), this._appSpec.structs)\n : undefined\n : params.createParams && 'method' in params.createParams\n ? getArc56ReturnValue(result.return, getArc56Method(params.createParams.method, this._appSpec), this._appSpec.structs)\n : undefined\n : undefined,\n deleteReturn:\n 'deleteReturn' in result && params.deleteParams && 'method' in params.deleteParams\n ? getArc56ReturnValue(result.deleteReturn, getArc56Method(params.deleteParams.method, this._appSpec), this._appSpec.structs)\n : undefined,\n },\n }\n }\n\n /**\n * Returns a new `AppClient` client for an app instance of the given ID.\n *\n * Automatically populates appName, defaultSender and source maps from the factory\n * if not specified in the params.\n * @param params The parameters to create the app client\n * @returns The `AppClient` instance\n * @example\n * ```typescript\n * const appClient = factory.getAppClientById({ appId: 12345n })\n * ```\n */\n public getAppClientById(params: AppFactoryAppClientParams) {\n return new AppClient({\n ...params,\n algorand: this._algorand,\n appSpec: this._appSpec,\n appName: params.appName ?? this._appName,\n defaultSender: params.defaultSender ?? this._defaultSender,\n defaultSigner: params.defaultSigner ?? this._defaultSigner,\n approvalSourceMap: params.approvalSourceMap ?? this._approvalSourceMap,\n clearSourceMap: params.clearSourceMap ?? this._clearSourceMap,\n })\n }\n\n /**\n * Returns a new `AppClient` client, resolving the app by creator address and name\n * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note).\n *\n * Automatically populates appName, defaultSender and source maps from the factory\n * if not specified in the params.\n * @param params The parameters to create the app client\n * @returns The `AppClient` instance\n * @example\n * ```typescript\n * const appClient = factory.getAppClientByCreatorAndName({ creatorAddress: 'CREATOR_ADDRESS', appName: 'my_app' })\n * ```\n */\n public getAppClientByCreatorAndName(params: AppFactoryResolveAppClientByCreatorAndNameParams) {\n return AppClient.fromCreatorAndName({\n ...params,\n algorand: this._algorand,\n appSpec: this._appSpec,\n appName: params.appName ?? this._appName,\n defaultSender: params.defaultSender ?? this._defaultSender,\n approvalSourceMap: params.approvalSourceMap ?? this._approvalSourceMap,\n clearSourceMap: params.clearSourceMap ?? this._clearSourceMap,\n })\n }\n\n /**\n * Takes an error that may include a logic error from a call to the current app and re-exposes the\n * error to include source code information via the source map and ARC-56 spec.\n * @param e The error to parse\n * @param isClearStateProgram Whether or not the code was running the clear state program (defaults to approval program)\n * @returns The new error, or if there was no logic error or source map then the wrapped error with source details\n */\n exposeLogicError(e: Error, isClearStateProgram?: boolean): Error {\n return AppClient.exposeLogicError(e, this._appSpec, {\n isClearStateProgram,\n approvalSourceMap: this._approvalSourceMap,\n clearSourceMap: this._clearSourceMap,\n })\n }\n\n /**\n * Export the current source maps for the app.\n * @returns The source maps\n */\n exportSourceMaps(): AppSourceMaps {\n if (!this._approvalSourceMap || !this._clearSourceMap) {\n throw new Error(\n \"Unable to export source maps; they haven't been loaded into this client - you need to call create, update, or deploy first\",\n )\n }\n\n return {\n approvalSourceMap: this._approvalSourceMap,\n clearSourceMap: this._clearSourceMap,\n }\n }\n\n /**\n * Import source maps for the app.\n * @param sourceMaps The source maps to import\n */\n importSourceMaps(sourceMaps: AppSourceMaps) {\n this._approvalSourceMap = new SourceMap(sourceMaps.approvalSourceMap)\n this._clearSourceMap = new SourceMap(sourceMaps.clearSourceMap)\n }\n\n private getDeployTimeControl(control: 'updatable' | 'deletable'): boolean | undefined {\n const approval = this._appSpec.source?.approval ? Buffer.from(this._appSpec.source.approval, 'base64').toString('utf-8') : undefined\n // variable not present, so unknown control value\n if (!approval || !approval.includes(control === 'updatable' ? UPDATABLE_TEMPLATE_NAME : DELETABLE_TEMPLATE_NAME)) return undefined\n\n // A call is present and configured\n return (\n this._appSpec.bareActions.call.includes(control === 'updatable' ? 'UpdateApplication' : 'DeleteApplication') ||\n Object.values(this._appSpec.methods).some((c) =>\n c.actions.call.includes(control === 'updatable' ? 'UpdateApplication' : 'DeleteApplication'),\n )\n )\n }\n\n private getParamsMethods() {\n return {\n /** Return params for a create ABI call, including deploy-time TEAL template replacements and compilation if provided */\n create: async (params: AppFactoryCreateMethodCallParams) => {\n const compiled = await this.compile({ ...params, deployTimeParams: params.deployTimeParams ?? this._deployTimeParams })\n return this.getABIParams(\n {\n ...params,\n deployTimeParams: params.deployTimeParams ?? this._deployTimeParams,\n schema: params.schema ?? {\n globalByteSlices: this._appSpec.state.schema.global.bytes,\n globalInts: this._appSpec.state.schema.global.ints,\n localByteSlices: this._appSpec.state.schema.local.bytes,\n localInts: this._appSpec.state.schema.local.ints,\n },\n approvalProgram: compiled.approvalProgram,\n clearStateProgram: compiled.clearStateProgram,\n },\n params.onComplete ?? OnApplicationComplete.NoOpOC,\n ) satisfies AppCreateMethodCall\n },\n /** Return params for a deployment update ABI call */\n deployUpdate: (params: AppClientMethodCallParams) => {\n return this.getABIParams(params, OnApplicationComplete.UpdateApplicationOC) satisfies DeployAppUpdateMethodCall\n },\n /** Return params for a deployment delete ABI call */\n deployDelete: (params: AppClientMethodCallParams) => {\n return this.getABIParams(params, OnApplicationComplete.DeleteApplicationOC) satisfies DeployAppDeleteMethodCall\n },\n bare: {\n /** Return params for a create bare call, including deploy-time TEAL template replacements and compilation if provided */\n create: async (params?: AppFactoryCreateParams) => {\n return this.getBareParams(\n {\n ...params,\n deployTimeParams: params?.deployTimeParams ?? this._deployTimeParams,\n schema: params?.schema ?? {\n globalByteSlices: this._appSpec.state.schema.global.bytes,\n globalInts: this._appSpec.state.schema.global.ints,\n localByteSlices: this._appSpec.state.schema.local.bytes,\n localInts: this._appSpec.state.schema.local.ints,\n },\n ...(await this.compile({ ...params, deployTimeParams: params?.deployTimeParams ?? this._deployTimeParams })),\n },\n params?.onComplete ?? OnApplicationComplete.NoOpOC,\n ) satisfies AppCreateParams\n },\n /** Return params for a deployment update bare call */\n deployUpdate: (params?: AppClientBareCallParams) => {\n return this.getBareParams(params, OnApplicationComplete.UpdateApplicationOC) satisfies DeployAppUpdateParams\n },\n /** Return params for a deployment delete bare call */\n deployDelete: (params?: AppClientBareCallParams) => {\n return this.getBareParams(params, OnApplicationComplete.DeleteApplicationOC) satisfies DeployAppDeleteParams\n },\n },\n }\n }\n\n /** Make the given call and catch any errors, augmenting with debugging information before re-throwing. */\n private async handleCallErrors<TResult>(call: () => Promise<TResult>) {\n try {\n return await call()\n } catch (e) {\n throw this.exposeLogicError(e as Error)\n }\n }\n\n /**\n * Compiles the approval and clear state programs (if TEAL templates provided),\n * performing any provided deploy-time parameter replacement and stores\n * the source maps.\n *\n * If no TEAL templates provided it will use any byte code provided in the app spec.\n *\n * Will store any generated source maps for later use in debugging.\n * @param compilation Optional compilation parameters to use for the compilation\n * @returns The compilation result\n * @example\n * ```typescript\n * const result = await factory.compile()\n * ```\n */\n public async compile(compilation?: AppClientCompilationParams) {\n const result = await AppClient.compile(this._appSpec, this._algorand.app, compilation)\n\n if (result.compiledApproval) {\n this._approvalSourceMap = result.compiledApproval.sourceMap\n }\n if (result.compiledClear) {\n this._clearSourceMap = result.compiledClear.sourceMap\n }\n\n return result\n }\n\n private getBareParams<\n TParams extends { sender?: Address | string; signer?: TransactionSigner | TransactionSignerAccount } | undefined,\n TOnComplete extends OnApplicationComplete,\n >(params: TParams, onComplete: TOnComplete) {\n return {\n ...params,\n sender: this.getSender(params?.sender),\n signer: this.getSigner(params?.sender, params?.signer),\n onComplete,\n }\n }\n\n private getABIParams<\n TParams extends {\n method: string\n sender?: Address | string\n signer?: TransactionSigner | TransactionSignerAccount\n args?: AppClientMethodCallParams['args']\n },\n TOnComplete extends OnApplicationComplete,\n >(params: TParams, onComplete: TOnComplete) {\n return {\n ...params,\n sender: this.getSender(params.sender),\n signer: this.getSigner(params.sender, params.signer),\n method: getArc56Method(params.method, this._appSpec),\n args: this.getCreateABIArgsWithDefaultValues(params.method, params.args),\n onComplete,\n }\n }\n\n private getCreateABIArgsWithDefaultValues(\n methodNameOrSignature: string,\n args: AppClientMethodCallParams['args'] | undefined,\n ): AppMethodCall<CommonAppCallParams>['args'] {\n const m = getArc56Method(methodNameOrSignature, this._appSpec)\n return args?.map((a, i) => {\n const arg = m.args[i]\n if (a !== undefined) {\n // If a struct then convert to tuple for the underlying call\n return arg.struct && typeof a === 'object' && !Array.isArray(a)\n ? getABITupleFromABIStruct(a as ABIStruct, this._appSpec.structs[arg.struct], this._appSpec.structs)\n : (a as ABIValue | AppMethodCallTransactionArgument)\n }\n const defaultValue = arg.defaultValue\n if (defaultValue) {\n switch (defaultValue.source) {\n case 'literal':\n return getABIDecodedValue(Buffer.from(defaultValue.data, 'base64'), m.method.args[i].type, this._appSpec.structs) as ABIValue\n default:\n throw new Error(`Can't provide default value for ${defaultValue.source} for a contract creation call`)\n }\n }\n throw new Error(`No value provided for required argument ${arg.name ?? `arg${i + 1}`} in call to method ${m.name}`)\n })\n }\n\n /** Returns the sender for a call, using the `defaultSender`\n * if none provided and throws an error if neither provided */\n private getSender(sender: string | Address | undefined): Address {\n if (!sender && !this._defaultSender) {\n throw new Error(`No sender provided and no default sender present in app factory for call to app ${this._appName}`)\n }\n return typeof sender === 'string' ? Address.fromString(sender) : (sender ?? this._defaultSender!)\n }\n\n /** Returns the signer for a call, using the provided signer or the `defaultSigner`\n * if no signer was provided and the sender resolves to the default sender, the call will use default signer\n * or `undefined` otherwise (so the signer is resolved from `AlgorandClient`) */\n private getSigner(\n sender: Address | string | undefined,\n signer: TransactionSigner | TransactionSignerAccount | undefined,\n ): TransactionSigner | TransactionSignerAccount | undefined {\n return signer ?? (!sender || sender === this._defaultSender ? this._defaultSigner : undefined)\n }\n\n /**\n * Checks for decode errors on the SendAppTransactionResult and maps the return value to the specified type\n * on the ARC-56 method.\n *\n * If the return type is a struct then the struct will be returned.\n *\n * @param result The SendAppTransactionResult to be mapped\n * @param method The method that was called\n * @returns The smart contract response with an updated return value\n */\n async parseMethodCallReturn<\n TReturn extends Uint8Array | ABIValue | ABIStruct | undefined,\n TResult extends SendAppTransactionResult = SendAppTransactionResult,\n >(result: Promise<TResult> | TResult, method: Arc56Method): Promise<Omit<TResult, 'return'> & AppReturn<TReturn>> {\n const resultValue = await result\n return { ...resultValue, return: getArc56ReturnValue(resultValue.return, method, this._appSpec.structs) }\n }\n}\n"],"names":["getArc56Method","AppClient","Address","getArc56ReturnValue","UPDATABLE_TEMPLATE_NAME","DELETABLE_TEMPLATE_NAME","getABITupleFromABIStruct","getABIDecodedValue"],"mappings":"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"}
@@ -11,17 +11,40 @@ var OnApplicationComplete = algosdk.OnApplicationComplete;
11
11
  * to interact with those (or other) app instances.
12
12
  */
13
13
  class AppFactory {
14
+ /**
15
+ * Create a new app factory.
16
+ * @param params The parameters to create the app factory
17
+ * @returns The `AppFactory` instance
18
+ * @example
19
+ * ```typescript
20
+ * const appFactory = new AppFactory({
21
+ * appSpec: appSpec,
22
+ * algorand: AlgorandClient.mainNet(),
23
+ * })
24
+ */
14
25
  constructor(params) {
15
26
  /** Create transactions for the current app */
16
27
  this.createTransaction = {
17
28
  /** Create bare (raw) transactions for the current app */
18
29
  bare: {
19
- /** Create a create call transaction, including deploy-time TEAL template replacements and compilation if provided */
30
+ /**
31
+ * Create a create app call transaction using a bare (raw) create call.
32
+ *
33
+ * Performs deploy-time TEAL template placeholder substitutions (if specified).
34
+ * @param params The parameters to create the create call transaction
35
+ * @returns The create call transaction
36
+ */
20
37
  create: async (params) => {
21
38
  return this._algorand.createTransaction.appCreate(await this.params.bare.create(params));
22
39
  },
23
40
  },
24
- /** Create a create ABI call transaction, including deploy-time TEAL template replacements and compilation if provided */
41
+ /**
42
+ * Create a create app call transaction using an ABI create call.
43
+ *
44
+ * Performs deploy-time TEAL template placeholder substitutions (if specified).
45
+ * @param params The parameters to create the create call transaction
46
+ * @returns The create call transaction
47
+ */
25
48
  create: async (params) => {
26
49
  return this._algorand.createTransaction.appCreateMethodCall(await this.params.create(params));
27
50
  },
@@ -30,6 +53,14 @@ class AppFactory {
30
53
  this.send = {
31
54
  /** Send bare (raw) transactions for the current app */
32
55
  bare: {
56
+ /**
57
+ * Creates an instance of the app using a bare (raw) create call and returns the result
58
+ * of the creation transaction and an app client to interact with that app instance.
59
+ *
60
+ * Performs deploy-time TEAL template placeholder substitutions (if specified).
61
+ * @param params The parameters to create the app
62
+ * @returns The app client and the result of the creation transaction
63
+ */
33
64
  create: async (params) => {
34
65
  const updatable = params?.updatable ?? this._updatable;
35
66
  const deletable = params?.deletable ?? this._deletable;
@@ -126,6 +157,31 @@ class AppFactory {
126
157
  * **Note:** if there is an update (different TEAL code) to an existing app (and `onUpdate` is set to `'replace'`) the existing app will be deleted and re-created.
127
158
  * @param params The arguments to control the app deployment
128
159
  * @returns The app client and the result of the deployment
160
+ * @example
161
+ * ```ts
162
+ * const { appClient, result } = await factory.deploy({
163
+ * createParams: {
164
+ * sender: 'SENDER_ADDRESS',
165
+ * approvalProgram: 'APPROVAL PROGRAM',
166
+ * clearStateProgram: 'CLEAR PROGRAM',
167
+ * schema: {
168
+ * globalByteSlices: 0,
169
+ * globalInts: 0,
170
+ * localByteSlices: 0,
171
+ * localInts: 0
172
+ * }
173
+ * },
174
+ * updateParams: {
175
+ * sender: 'SENDER_ADDRESS'
176
+ * },
177
+ * deleteParams: {
178
+ * sender: 'SENDER_ADDRESS'
179
+ * },
180
+ * metadata: { name: 'my_app', version: '2.0', updatable: false, deletable: false },
181
+ * onSchemaBreak: 'append',
182
+ * onUpdate: 'append'
183
+ * })
184
+ * ```
129
185
  */
130
186
  async deploy(params) {
131
187
  const updatable = params.updatable ?? this._updatable ?? this.getDeployTimeControl('updatable');
@@ -183,7 +239,11 @@ class AppFactory {
183
239
  * Automatically populates appName, defaultSender and source maps from the factory
184
240
  * if not specified in the params.
185
241
  * @param params The parameters to create the app client
186
- * @returns The `AppClient`
242
+ * @returns The `AppClient` instance
243
+ * @example
244
+ * ```typescript
245
+ * const appClient = factory.getAppClientById({ appId: 12345n })
246
+ * ```
187
247
  */
188
248
  getAppClientById(params) {
189
249
  return new AppClient({
@@ -204,7 +264,11 @@ class AppFactory {
204
264
  * Automatically populates appName, defaultSender and source maps from the factory
205
265
  * if not specified in the params.
206
266
  * @param params The parameters to create the app client
207
- * @returns The `AppClient`
267
+ * @returns The `AppClient` instance
268
+ * @example
269
+ * ```typescript
270
+ * const appClient = factory.getAppClientByCreatorAndName({ creatorAddress: 'CREATOR_ADDRESS', appName: 'my_app' })
271
+ * ```
208
272
  */
209
273
  getAppClientByCreatorAndName(params) {
210
274
  return AppClient.fromCreatorAndName({
@@ -330,6 +394,12 @@ class AppFactory {
330
394
  * If no TEAL templates provided it will use any byte code provided in the app spec.
331
395
  *
332
396
  * Will store any generated source maps for later use in debugging.
397
+ * @param compilation Optional compilation parameters to use for the compilation
398
+ * @returns The compilation result
399
+ * @example
400
+ * ```typescript
401
+ * const result = await factory.compile()
402
+ * ```
333
403
  */
334
404
  async compile(compilation) {
335
405
  const result = await AppClient.compile(this._appSpec, this._algorand.app, compilation);