@algorandfoundation/algokit-client-generator 3.1.0-beta.1 → 4.0.0-alpha.2

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 (139) hide show
  1. package/README.md +1 -1
  2. package/cli.d.ts +6 -0
  3. package/{src/cli.js → cli.js} +47 -16
  4. package/cli.js.map +1 -0
  5. package/cli.mjs +86 -0
  6. package/cli.mjs.map +1 -0
  7. package/{src/client → client}/app-client.js +101 -44
  8. package/client/app-client.js.map +1 -0
  9. package/{src/client → client}/app-client.mjs +101 -44
  10. package/client/app-client.mjs.map +1 -0
  11. package/{src/client → client}/app-factory.js +49 -35
  12. package/client/app-factory.js.map +1 -0
  13. package/{src/client → client}/app-factory.mjs +49 -35
  14. package/client/app-factory.mjs.map +1 -0
  15. package/{src/client → client}/app-types.js +98 -102
  16. package/client/app-types.js.map +1 -0
  17. package/{src/client → client}/app-types.mjs +100 -104
  18. package/client/app-types.mjs.map +1 -0
  19. package/{src/client → client}/call-composer-types.js +9 -9
  20. package/client/call-composer-types.js.map +1 -0
  21. package/{src/client → client}/call-composer-types.mjs +9 -9
  22. package/client/call-composer-types.mjs.map +1 -0
  23. package/{src/client → client}/call-composer.js +25 -23
  24. package/client/call-composer.js.map +1 -0
  25. package/{src/client → client}/call-composer.mjs +25 -23
  26. package/client/call-composer.mjs.map +1 -0
  27. package/{src/client → client}/deploy-types.js +9 -9
  28. package/client/deploy-types.js.map +1 -0
  29. package/{src/client → client}/deploy-types.mjs +9 -9
  30. package/client/deploy-types.mjs.map +1 -0
  31. package/{src/client → client}/generate.js +6 -7
  32. package/client/generate.js.map +1 -0
  33. package/{src/client → client}/generate.mjs +6 -7
  34. package/client/generate.mjs.map +1 -0
  35. package/client/generator-context.js.map +1 -0
  36. package/client/generator-context.mjs.map +1 -0
  37. package/client/helpers/get-call-config-summary.js.map +1 -0
  38. package/client/helpers/get-call-config-summary.mjs.map +1 -0
  39. package/{src/client → client}/helpers/get-equivalent-type.js +9 -3
  40. package/client/helpers/get-equivalent-type.js.map +1 -0
  41. package/{src/client → client}/helpers/get-equivalent-type.mjs +9 -3
  42. package/client/helpers/get-equivalent-type.mjs.map +1 -0
  43. package/client/imports.js +28 -0
  44. package/client/imports.js.map +1 -0
  45. package/client/imports.mjs +26 -0
  46. package/client/imports.mjs.map +1 -0
  47. package/{src/client → client}/params-factory.js +12 -12
  48. package/client/params-factory.js.map +1 -0
  49. package/{src/client → client}/params-factory.mjs +12 -12
  50. package/client/params-factory.mjs.map +1 -0
  51. package/client/utility-types.js.map +1 -0
  52. package/client/utility-types.mjs.map +1 -0
  53. package/output/writer.d.ts +5 -5
  54. package/{src/output → output}/writer.js +9 -3
  55. package/output/writer.js.map +1 -0
  56. package/{src/output → output}/writer.mjs +9 -3
  57. package/output/writer.mjs.map +1 -0
  58. package/package.json +9 -5
  59. package/schema/arc56.schema.json.js +751 -0
  60. package/{src/schema → schema}/arc56.schema.json.js.map +1 -1
  61. package/schema/arc56.schema.json.mjs +741 -0
  62. package/{src/schema → schema}/arc56.schema.json.mjs.map +1 -1
  63. package/{src/schema → schema}/load.js +8 -2
  64. package/schema/load.js.map +1 -0
  65. package/{src/schema → schema}/load.mjs +8 -2
  66. package/schema/load.mjs.map +1 -0
  67. package/util/boom.js.map +1 -0
  68. package/util/boom.mjs.map +1 -0
  69. package/util/color-console.js.map +1 -0
  70. package/util/color-console.mjs.map +1 -0
  71. package/{src/util → util}/sanitization.js +13 -8
  72. package/util/sanitization.js.map +1 -0
  73. package/{src/util → util}/sanitization.mjs +13 -8
  74. package/util/sanitization.mjs.map +1 -0
  75. package/src/cli.js.map +0 -1
  76. package/src/cli.mjs +0 -56
  77. package/src/cli.mjs.map +0 -1
  78. package/src/client/app-client.js.map +0 -1
  79. package/src/client/app-client.mjs.map +0 -1
  80. package/src/client/app-factory.js.map +0 -1
  81. package/src/client/app-factory.mjs.map +0 -1
  82. package/src/client/app-types.js.map +0 -1
  83. package/src/client/app-types.mjs.map +0 -1
  84. package/src/client/call-composer-types.js.map +0 -1
  85. package/src/client/call-composer-types.mjs.map +0 -1
  86. package/src/client/call-composer.js.map +0 -1
  87. package/src/client/call-composer.mjs.map +0 -1
  88. package/src/client/deploy-types.js.map +0 -1
  89. package/src/client/deploy-types.mjs.map +0 -1
  90. package/src/client/generate.js.map +0 -1
  91. package/src/client/generate.mjs.map +0 -1
  92. package/src/client/generator-context.js.map +0 -1
  93. package/src/client/generator-context.mjs.map +0 -1
  94. package/src/client/helpers/get-call-config-summary.js.map +0 -1
  95. package/src/client/helpers/get-call-config-summary.mjs.map +0 -1
  96. package/src/client/helpers/get-equivalent-type.js.map +0 -1
  97. package/src/client/helpers/get-equivalent-type.mjs.map +0 -1
  98. package/src/client/imports.js +0 -25
  99. package/src/client/imports.js.map +0 -1
  100. package/src/client/imports.mjs +0 -23
  101. package/src/client/imports.mjs.map +0 -1
  102. package/src/client/params-factory.js.map +0 -1
  103. package/src/client/params-factory.mjs.map +0 -1
  104. package/src/client/utility-types.js.map +0 -1
  105. package/src/client/utility-types.mjs.map +0 -1
  106. package/src/output/writer.js.map +0 -1
  107. package/src/output/writer.mjs.map +0 -1
  108. package/src/schema/arc56.schema.json.js +0 -787
  109. package/src/schema/arc56.schema.json.mjs +0 -780
  110. package/src/schema/load.js.map +0 -1
  111. package/src/schema/load.mjs.map +0 -1
  112. package/src/util/boom.js.map +0 -1
  113. package/src/util/boom.mjs.map +0 -1
  114. package/src/util/color-console.js.map +0 -1
  115. package/src/util/color-console.mjs.map +0 -1
  116. package/src/util/sanitization.js.map +0 -1
  117. package/src/util/sanitization.mjs.map +0 -1
  118. /package/{src/client → client}/generator-context.js +0 -0
  119. /package/{src/client → client}/generator-context.mjs +0 -0
  120. /package/{src/client → client}/helpers/get-call-config-summary.js +0 -0
  121. /package/{src/client → client}/helpers/get-call-config-summary.mjs +0 -0
  122. /package/{src/client → client}/utility-types.js +0 -0
  123. /package/{src/client → client}/utility-types.mjs +0 -0
  124. /package/{src/index.js → index.js} +0 -0
  125. /package/{src/index.js.map → index.js.map} +0 -0
  126. /package/{src/index.mjs → index.mjs} +0 -0
  127. /package/{src/index.mjs.map → index.mjs.map} +0 -0
  128. /package/{src/schema → schema}/application.schema.json.js +0 -0
  129. /package/{src/schema → schema}/application.schema.json.js.map +0 -0
  130. /package/{src/schema → schema}/application.schema.json.mjs +0 -0
  131. /package/{src/schema → schema}/application.schema.json.mjs.map +0 -0
  132. /package/{src/schema → schema}/contract.schema.json.js +0 -0
  133. /package/{src/schema → schema}/contract.schema.json.js.map +0 -0
  134. /package/{src/schema → schema}/contract.schema.json.mjs +0 -0
  135. /package/{src/schema → schema}/contract.schema.json.mjs.map +0 -0
  136. /package/{src/util → util}/boom.js +0 -0
  137. /package/{src/util → util}/boom.mjs +0 -0
  138. /package/{src/util → util}/color-console.js +0 -0
  139. /package/{src/util → util}/color-console.mjs +0 -0
@@ -25,8 +25,8 @@ function* appClient(ctx) {
25
25
  *
26
26
  * @param params The parameters to initialise the app client with
27
27
  */
28
- constructor(params: Expand<Omit<AppClientParams, 'appSpec'>>)
29
- constructor(appClientOrParams: AppClient | Expand<Omit<AppClientParams, 'appSpec'>>) {
28
+ constructor(params: Omit<AppClientParams, 'appSpec'>)
29
+ constructor(appClientOrParams: AppClient | Omit<AppClientParams, 'appSpec'>) {
30
30
  this.appClient = appClientOrParams instanceof AppClient ? appClientOrParams : new AppClient({
31
31
  ...appClientOrParams,
32
32
  appSpec: APP_SPEC,
@@ -46,7 +46,7 @@ function* appClient(ctx) {
46
46
  * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note).
47
47
  * @param params The parameters to create the app client
48
48
  */
49
- public static async fromCreatorAndName(params: Expand<Omit<ResolveAppClientByCreatorAndName, 'appSpec'>>): Promise<${name}Client> {
49
+ public static async fromCreatorAndName(params: Omit<ResolveAppClientByCreatorAndName, 'appSpec'>): Promise<${name}Client> {
50
50
  return new ${name}Client(await AppClient.fromCreatorAndName({...params, appSpec: APP_SPEC}))
51
51
  }
52
52
 
@@ -58,62 +58,77 @@ function* appClient(ctx) {
58
58
  * @param params The parameters to create the app client
59
59
  */
60
60
  static async fromNetwork(
61
- params: Expand<Omit<AppClientParams, 'appSpec' | 'appId'>>
61
+ params: Omit<ResolveAppClientByNetwork, 'appSpec'>
62
62
  ): Promise<${name}Client> {
63
63
  return new ${name}Client(await AppClient.fromNetwork({...params, appSpec: APP_SPEC}))
64
64
  }
65
65
 
66
+ /** The ID of the app instance this client is linked to. */
67
+ public get appId() {
68
+ return this.appClient.appId
69
+ }
70
+
71
+ /** The app address of the app instance this client is linked to. */
72
+ public get appAddress() {
73
+ return this.appClient.appAddress
74
+ }
75
+
76
+ /** The name of the app. */
77
+ public get appName() {
78
+ return this.appClient.appName
79
+ }
80
+
81
+ /** The ARC-56 app spec being used */
82
+ public get appSpec() {
83
+ return this.appClient.appSpec
84
+ }
85
+
86
+ /** A reference to the underlying \`AlgorandClient\` this app client is using. */
87
+ public get algorand(): AlgorandClientInterface {
88
+ return this.appClient.algorand
89
+ }
90
+
66
91
  `;
67
92
  yield* params(ctx);
68
- yield* transactions(ctx);
93
+ yield* createTransaction(ctx);
69
94
  yield* send(ctx);
95
+ yield* cloneMethod(ctx);
96
+ yield* readonlyMethods(ctx);
70
97
  yield* getStateMethods(ctx);
71
98
  yield* composeMethod(ctx);
72
99
  yield DecIndentAndCloseBlock;
73
100
  }
74
101
  function* params(ctx) {
75
- yield* jsDoc(`Get parameters to define transactions to the current app`);
76
- yield `readonly params = (($this) => {`;
77
- yield IncIndent;
78
- yield `return {`;
102
+ yield* jsDoc(`Get parameters to create transactions for the current app. A good mental model for this is that these parameters represent a deferred transaction creation.`);
103
+ yield `readonly params = {`;
79
104
  yield IncIndent;
80
105
  yield* opMethods(ctx, 'params');
81
106
  yield* clearState(ctx, 'params');
82
107
  yield* call(ctx, 'params');
83
108
  yield* noopMethods(ctx, 'params');
84
109
  yield DecIndentAndCloseBlock;
85
- yield DecIndent;
86
- yield `})(this)`;
87
110
  yield NewLine;
88
111
  }
89
- function* transactions(ctx) {
90
- yield* jsDoc(`Get parameters to define transactions to the current app`);
91
- yield `readonly transactions = (($this) => {`;
92
- yield IncIndent;
93
- yield `return {`;
112
+ function* createTransaction(ctx) {
113
+ yield* jsDoc(`Create transactions for the current app`);
114
+ yield `readonly createTransaction = {`;
94
115
  yield IncIndent;
95
- yield* opMethods(ctx, 'transactions');
96
- yield* clearState(ctx, 'transactions');
97
- yield* call(ctx, 'transactions');
98
- yield* noopMethods(ctx, 'transactions');
116
+ yield* opMethods(ctx, 'createTransaction');
117
+ yield* clearState(ctx, 'createTransaction');
118
+ yield* call(ctx, 'createTransaction');
119
+ yield* noopMethods(ctx, 'createTransaction');
99
120
  yield DecIndentAndCloseBlock;
100
- yield DecIndent;
101
- yield `})(this)`;
102
121
  yield NewLine;
103
122
  }
104
123
  function* send(ctx) {
105
124
  yield* jsDoc(`Send calls to the current app`);
106
- yield `readonly send = (($this) => {`;
107
- yield IncIndent;
108
- yield `return {`;
125
+ yield `readonly send = {`;
109
126
  yield IncIndent;
110
127
  yield* opMethods(ctx, 'send');
111
128
  yield* clearState(ctx, 'send');
112
129
  yield* call(ctx, 'send');
113
130
  yield* noopMethods(ctx, 'send');
114
131
  yield DecIndentAndCloseBlock;
115
- yield DecIndent;
116
- yield `})(this)`;
117
132
  yield NewLine;
118
133
  }
119
134
  function* opMethods(ctx, type) {
@@ -128,44 +143,55 @@ function* bareMethodCall({ generator: { app }, name, description, verb, type, in
128
143
  yield* jsDoc({
129
144
  description: `${description}.`,
130
145
  params: {
131
- params: `The params for the bare (non-ABI) call`,
146
+ params: `The params for the bare (raw) call`,
132
147
  },
133
148
  returns: `The ${verb} result`,
134
149
  });
135
- yield `${name}(params?: Expand<AppClientBareCallParams${includeCompilation ? ' & AppClientCompilationParams' : ''}${verb === 'create' ? ' & CreateSchema' : ''}${type === 'send' ? ' & ExecuteParams' : ''}${onComplete?.type ? ` & ${onComplete.type}` : ''}>) {`;
136
- yield* indent(`return $this.appClient.${type}.bare.${verb}(params)`);
150
+ yield `${name}: (params?: Expand<AppClientBareCallParams${includeCompilation ? ' & AppClientCompilationParams' : ''}${verb === 'create' ? ' & CreateSchema' : ''}${type === 'send' ? ' & SendParams' : ''}${onComplete?.type ? ` & ${onComplete.type}` : ''}>) => {`;
151
+ yield* indent(`return this.appClient.${type}.bare.${verb}(params)`);
137
152
  yield '},';
138
153
  }
139
- function* abiMethodCall({ generator: { app, methodSignatureToUniqueName, name, sanitizer }, method, description, verb, type, includeCompilation, }) {
154
+ function* abiMethodCall({ generator: { app, methodSignatureToUniqueName, name, sanitizer }, method, description, verb, type, includeCompilation, readonly, }) {
140
155
  const methodSig = new ABIMethod(method).getSignature();
141
156
  const uniqueName = methodSignatureToUniqueName[methodSig];
142
- const onComplete = verb === 'create' ? getCreateOnCompleteOptions(methodSig, app) : verb === 'call' ? getCallOnCompleteOptions(methodSig, app) : undefined;
157
+ const onComplete = verb === 'create'
158
+ ? getCreateOnCompleteOptions(methodSig, app)
159
+ : verb === 'call' && !readonly
160
+ ? getCallOnCompleteOptions(methodSig, app)
161
+ : undefined;
143
162
  yield* jsDoc({
144
- description: `${description} using the ${methodSig} ABI method.`,
163
+ description: verb === 'call' && method.readonly
164
+ ? [
165
+ `${description} using the \`${methodSig}\` ABI method.`,
166
+ '',
167
+ 'This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.',
168
+ ]
169
+ : `${description} using the \`${methodSig}\` ABI method.`,
145
170
  abiDescription: method?.desc,
146
171
  params: {
147
172
  params: `The params for the smart contract call`,
148
173
  },
149
- returns: `The ${verb} ${type === 'params' ? 'params' : type === 'transactions' ? 'transaction' : 'result'}${method?.returns?.desc ? `: ${method.returns.desc}` : ''}`,
174
+ returns: `The ${verb} ${type === 'params' ? 'params' : type === 'createTransaction' ? 'transaction' : 'result'}${method?.returns?.desc ? `: ${method.returns.desc}` : ''}`,
150
175
  });
151
176
  const methodName = sanitizer.makeSafeMethodIdentifier(uniqueName);
152
177
  const methodNameAccessor = sanitizer.getSafeMemberAccessor(methodName);
153
178
  const methodSigSafe = sanitizer.makeSafeStringTypeLiteral(methodSig);
154
- yield `${type === 'send' ? 'async ' : ''}${methodName}(params: Expand<CallParams<'${methodSigSafe}'>${includeCompilation ? ' & AppClientCompilationParams' : ''}${verb === 'create' ? ' & CreateSchema' : ''}${type === 'send' ? ' & ExecuteParams' : ''}${onComplete?.type ? ` & ${onComplete.type}` : ''}>${onComplete?.isOptional !== false && (method.args.length === 0 || !method.args.some((a) => !a.defaultValue)) ? ` = {args: [${method.args.map((_) => 'undefined').join(', ')}]}` : ''}) {`;
179
+ yield `${!readonly ? `${methodName}: ` : ''}${type === 'send' ? 'async ' : ''}${readonly ? `${methodName}` : ''}(params: CallParams<${name}Args['obj']['${methodSigSafe}'] | ${name}Args['tuple']['${methodSigSafe}']>${includeCompilation ? ' &' + ' AppClientCompilationParams' : ''}${verb === 'create' ? ' & CreateSchema' : ''}${type === 'send' && !readonly ? ' & SendParams' : ''}${onComplete?.type && !readonly ? ` & ${onComplete.type}` : ''}${onComplete?.isOptional !== false && (method.args.length === 0 || !method.args.some((a) => !a.defaultValue)) ? ` = {args: [${method.args.map((_) => 'undefined').join(', ')}]}` : ''})${!readonly ? ' =>' : ''} {`;
155
180
  if (type === 'send') {
156
- yield* indent(`const result = await $this.appClient.${type}.${verb}(${name}ParamsFactory${verb !== 'call' ? `.${verb}` : ''}${methodNameAccessor}(params))`, `return {...result, return: result.return as undefined | MethodReturn<'${methodSigSafe}'>}`);
181
+ yield* indent(`const result = await this.appClient.${type}.${verb}(${name}ParamsFactory${verb !== 'call' ? `.${verb}` : ''}${methodNameAccessor}(params))`, readonly
182
+ ? `return result.return as ${name}Returns['${methodSigSafe}']`
183
+ : `return {...result, return: result.return as undefined | ${name}Returns['${methodSigSafe}']}`);
157
184
  }
158
185
  else {
159
- yield* indent(`return $this.appClient.${type}.${verb}(${name}ParamsFactory${verb !== 'call' ? `.${verb}` : ''}${methodNameAccessor}(params))`);
186
+ yield* indent(`return this.appClient.${type}.${verb}(${name}ParamsFactory${verb !== 'call' ? `.${verb}` : ''}${methodNameAccessor}(params))`);
160
187
  }
161
- yield '},';
188
+ yield `}${!readonly ? ',' : ''}`;
189
+ yield NewLine;
162
190
  }
163
191
  function* operationMethods(generator, description, methods, verb, type, includeCompilation) {
164
192
  if (methods.length) {
165
193
  yield* jsDoc(`Gets available ${verb} methods`);
166
- yield `get ${verb}() {`;
167
- yield IncIndent;
168
- yield `return {`;
194
+ yield `${verb}: {`;
169
195
  yield IncIndent;
170
196
  for (const methodSig of methods) {
171
197
  if (methodSig === BARE_CALL) {
@@ -190,7 +216,6 @@ function* operationMethods(generator, description, methods, verb, type, includeC
190
216
  });
191
217
  }
192
218
  }
193
- yield DecIndentAndCloseBlock;
194
219
  yield DecIndent;
195
220
  yield '},';
196
221
  yield NewLine;
@@ -218,6 +243,24 @@ function* call(generator, type) {
218
243
  yield NewLine;
219
244
  }
220
245
  }
246
+ function* readonlyMethods(generator) {
247
+ const { app, callConfig } = generator;
248
+ for (const method of app.methods) {
249
+ const methodSignature = new ABIMethod(method).getSignature();
250
+ // Skip non readonly methods
251
+ if (!callConfig.callMethods.includes(methodSignature) || !method.readonly)
252
+ continue;
253
+ yield* abiMethodCall({
254
+ generator,
255
+ description: `Makes a readonly (simulated) call to the ${generator.app.name} smart contract`,
256
+ method,
257
+ verb: 'call',
258
+ type: 'send',
259
+ includeCompilation: false,
260
+ readonly: true,
261
+ });
262
+ }
263
+ }
221
264
  function* noopMethods(generator, type) {
222
265
  const { app, callConfig } = generator;
223
266
  for (const method of app.methods) {
@@ -253,14 +296,14 @@ function* getStateMethods({ app, sanitizer }) {
253
296
  yield* jsDoc(`Get all current keyed values from ${storageType} state`);
254
297
  yield `getAll: async (): Promise<Partial<Expand<${storageType[0].toUpperCase()}${storageType.substring(1)}KeysState>>> => {`;
255
298
  yield* indent(`const result = await this.appClient.state.${storageType}${storageType === 'local' ? '(address)' : ''}.getAll()`, `return {`, ...Object.keys(app.state.keys[storageType]).map((n) => {
256
- return ` ${sanitizer.makeSafePropertyIdentifier(n)}: ${app.state.keys[storageType][n].valueType === 'bytes' ? `new BinaryStateValue(result${sanitizer.getSafeMemberAccessor(n)})` : `result${sanitizer.getSafeMemberAccessor(n)}`},`;
299
+ return ` ${sanitizer.makeSafePropertyIdentifier(n)}: ${app.state.keys[storageType][n].valueType === 'AVMBytes' ? `new BinaryStateValue(result${sanitizer.getSafeMemberAccessor(n)})` : `result${sanitizer.getSafeMemberAccessor(n)}`},`;
257
300
  }), `}`);
258
301
  yield `},`;
259
302
  for (const n of Object.keys(app.state.keys[storageType])) {
260
303
  const name = sanitizer.makeSafePropertyIdentifier(n);
261
304
  const k = app.state.keys[storageType][n];
262
305
  yield* jsDoc(`Get the current value of the ${n} key in ${storageType} state`);
263
- yield `${name}: async (): Promise<${k.valueType === 'bytes' ? 'BinaryState' : `${getEquivalentType(k.valueType, 'output', { app, sanitizer })} | undefined`}> => { return ${k.valueType === 'bytes' ? 'new BinaryStateValue(' : ''}(await this.appClient.state.${storageType}${storageType === 'local' ? '(address)' : ''}.getValue("${name}"))${k.valueType === 'bytes' ? ' as Uint8Array | undefined)' : ` as ${getEquivalentType(k.valueType, 'output', { app, sanitizer })} | undefined`} },`;
306
+ yield `${name}: async (): Promise<${k.valueType === 'AVMBytes' ? 'BinaryState' : `${getEquivalentType(k.valueType, 'output', { app, sanitizer })} | undefined`}> => { return ${k.valueType === 'AVMBytes' ? 'new BinaryStateValue(' : ''}(await this.appClient.state.${storageType}${storageType === 'local' ? '(address)' : ''}.getValue("${name}"))${k.valueType === 'AVMBytes' ? ' as Uint8Array | undefined)' : ` as ${getEquivalentType(k.valueType, 'output', { app, sanitizer })} | undefined`} },`;
264
307
  }
265
308
  for (const n of Object.keys(app.state.maps[storageType])) {
266
309
  const name = sanitizer.makeSafePropertyIdentifier(app.state.keys[storageType][n] ? `${n}Map` : n);
@@ -281,6 +324,20 @@ function* getStateMethods({ app, sanitizer }) {
281
324
  yield DecIndentAndCloseBlock;
282
325
  yield NewLine;
283
326
  }
327
+ function* cloneMethod({ name }) {
328
+ yield* jsDoc({
329
+ description: 'Clone this app client with different params',
330
+ params: {
331
+ params: 'The params to use for the the cloned app client. Omit a param to keep the original value. Set a param to override the original value. Setting to undefined will clear the original value.',
332
+ },
333
+ returns: 'A new app client with the altered params',
334
+ });
335
+ yield `public clone(params: CloneAppClientParams) {`;
336
+ yield IncIndent;
337
+ yield `return new ${name}Client(this.appClient.clone(params))`;
338
+ yield DecIndentAndCloseBlock;
339
+ yield NewLine;
340
+ }
284
341
 
285
342
  export { appClient };
286
343
  //# sourceMappingURL=app-client.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-client.mjs","sources":["../../src/client/app-client.ts"],"sourcesContent":["import { DecIndent, DecIndentAndCloseBlock, DocumentParts, IncIndent, indent, jsDoc, NewLine } from '../output/writer'\nimport { BARE_CALL, MethodList } from './helpers/get-call-config-summary'\nimport { GeneratorContext } from './generator-context'\nimport { getCallOnCompleteOptions, getCreateOnCompleteOptions } from './deploy-types'\nimport { composeMethod } from './call-composer'\nimport { ABIMethod } from 'algosdk'\nimport { Method } from '@algorandfoundation/algokit-utils/types/app-arc56'\nimport { getEquivalentType } from './helpers/get-equivalent-type'\n\nexport function* appClient(ctx: GeneratorContext): DocumentParts {\n const { app, name } = ctx\n\n yield* jsDoc(`A client to make calls to the ${app.name} smart contract`)\n yield `export class ${name}Client {`\n yield IncIndent\n yield* jsDoc(`The underlying \\`AppClient\\` for when you want to have more flexibility`)\n yield 'public readonly appClient: AppClient'\n yield NewLine\n\n yield `\n /**\n * Creates a new instance of \\`${name}Client\\`\n *\n * @param appClient An \\`AppClient\\` instance which has been created with the ${name} app spec\n */\n constructor(appClient: AppClient)\n /**\n * Creates a new instance of \\`${name}Client\\`\n *\n * @param params The parameters to initialise the app client with\n */\n constructor(params: Omit<AppClientParams, 'appSpec'>)\n constructor(appClientOrParams: AppClient | Omit<AppClientParams, 'appSpec'>) {\n this.appClient = appClientOrParams instanceof AppClient ? appClientOrParams : new AppClient({\n ...appClientOrParams,\n appSpec: APP_SPEC,\n })\n }\n\n /**\n * Checks for decode errors on the given return value and maps the return value to the return type for the given method\n * @returns The typed return value or undefined if there was no value\n */\n decodeReturnValue<TSignature extends ${name}NonVoidMethodSignatures>(method: TSignature, returnValue: ABIReturn | undefined) {\n return returnValue !== undefined ? getArc56ReturnValue<MethodReturn<TSignature>>(returnValue, this.appClient.getABIMethod(method), APP_SPEC.structs) : undefined\n }\n\n /**\n * Returns a new \\`${name}Client\\` 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 * @param params The parameters to create the app client\n */\n public static async fromCreatorAndName(params: Omit<ResolveAppClientByCreatorAndName, 'appSpec'>): Promise<${name}Client> {\n return new ${name}Client(await AppClient.fromCreatorAndName({...params, appSpec: APP_SPEC}))\n }\n\n /**\n * Returns an \\`${name}Client\\` instance for the current network based on\n * pre-determined network-specific app IDs specified in the ARC-56 app spec.\n *\n * If no IDs are in the app spec or the network isn't recognised, an error is thrown.\n * @param params The parameters to create the app client\n */\n static async fromNetwork(\n params: Omit<ResolveAppClientByNetwork, 'appSpec'>\n ): Promise<${name}Client> {\n return new ${name}Client(await AppClient.fromNetwork({...params, appSpec: APP_SPEC}))\n }\n\n /** The ID of the app instance this client is linked to. */\n public get appId() {\n return this.appClient.appId\n }\n\n /** The app address of the app instance this client is linked to. */\n public get appAddress() {\n return this.appClient.appAddress\n }\n\n /** The name of the app. */\n public get appName() {\n return this.appClient.appName\n }\n\n /** The ARC-56 app spec being used */\n public get appSpec() {\n return this.appClient.appSpec\n }\n\n /** A reference to the underlying \\`AlgorandClient\\` this app client is using. */\n public get algorand(): AlgorandClientInterface {\n return this.appClient.algorand\n }\n\n `\n\n yield* params(ctx)\n yield* createTransaction(ctx)\n yield* send(ctx)\n yield* cloneMethod(ctx)\n yield* readonlyMethods(ctx)\n yield* getStateMethods(ctx)\n yield* composeMethod(ctx)\n yield DecIndentAndCloseBlock\n}\n\nfunction* params(ctx: GeneratorContext): DocumentParts {\n yield* jsDoc(\n `Get parameters to create transactions for the current app. A good mental model for this is that these parameters represent a deferred transaction creation.`,\n )\n yield `readonly params = {`\n yield IncIndent\n yield* opMethods(ctx, 'params')\n yield* clearState(ctx, 'params')\n yield* call(ctx, 'params')\n yield* noopMethods(ctx, 'params')\n yield DecIndentAndCloseBlock\n yield NewLine\n}\n\nfunction* createTransaction(ctx: GeneratorContext): DocumentParts {\n yield* jsDoc(`Create transactions for the current app`)\n yield `readonly createTransaction = {`\n yield IncIndent\n yield* opMethods(ctx, 'createTransaction')\n yield* clearState(ctx, 'createTransaction')\n yield* call(ctx, 'createTransaction')\n yield* noopMethods(ctx, 'createTransaction')\n yield DecIndentAndCloseBlock\n yield NewLine\n}\n\nfunction* send(ctx: GeneratorContext): DocumentParts {\n yield* jsDoc(`Send calls to the current app`)\n yield `readonly send = {`\n yield IncIndent\n yield* opMethods(ctx, 'send')\n yield* clearState(ctx, 'send')\n yield* call(ctx, 'send')\n yield* noopMethods(ctx, 'send')\n yield DecIndentAndCloseBlock\n yield NewLine\n}\n\nfunction* opMethods(ctx: GeneratorContext, type: 'params' | 'createTransaction' | 'send'): DocumentParts {\n const { app, callConfig } = ctx\n\n yield* operationMethods(\n ctx,\n `Updates an existing instance of the ${app.name} smart contract`,\n callConfig.updateMethods,\n 'update',\n type,\n true,\n )\n yield* operationMethods(ctx, `Deletes an existing instance of the ${app.name} smart contract`, callConfig.deleteMethods, 'delete', type)\n yield* operationMethods(\n ctx,\n `Opts the user into an existing instance of the ${app.name} smart contract`,\n callConfig.optInMethods,\n 'optIn',\n type,\n )\n yield* operationMethods(\n ctx,\n `Makes a close out call to an existing instance of the ${app.name} smart contract`,\n callConfig.closeOutMethods,\n 'closeOut',\n type,\n )\n}\n\nfunction* bareMethodCall({\n generator: { app },\n name,\n description,\n verb,\n type,\n includeCompilation,\n}: {\n generator: GeneratorContext\n name: string\n description: string\n verb: 'create' | 'update' | 'optIn' | 'closeOut' | 'delete' | 'clearState' | 'call'\n type: 'params' | 'createTransaction' | 'send'\n includeCompilation?: boolean\n}): DocumentParts {\n const onComplete =\n verb === 'create' ? getCreateOnCompleteOptions(BARE_CALL, app) : verb === 'call' ? getCallOnCompleteOptions(BARE_CALL, app) : undefined\n yield* jsDoc({\n description: `${description}.`,\n params: {\n params: `The params for the bare (raw) call`,\n },\n returns: `The ${verb} result`,\n })\n yield `${name}: (params?: Expand<AppClientBareCallParams${includeCompilation ? ' & AppClientCompilationParams' : ''}${\n verb === 'create' ? ' & CreateSchema' : ''\n }${type === 'send' ? ' & SendParams' : ''}${onComplete?.type ? ` & ${onComplete.type}` : ''}>) => {`\n yield* indent(`return this.appClient.${type}.bare.${verb}(params)`)\n yield '},'\n}\n\nfunction* abiMethodCall({\n generator: { app, methodSignatureToUniqueName, name, sanitizer },\n method,\n description,\n verb,\n type,\n includeCompilation,\n readonly,\n}: {\n generator: GeneratorContext\n method: Method\n description: string\n verb: 'create' | 'update' | 'optIn' | 'closeOut' | 'delete' | 'call'\n type: 'params' | 'createTransaction' | 'send'\n includeCompilation?: boolean\n readonly?: boolean\n}) {\n const methodSig = new ABIMethod(method).getSignature()\n const uniqueName = methodSignatureToUniqueName[methodSig]\n const onComplete =\n verb === 'create'\n ? getCreateOnCompleteOptions(methodSig, app)\n : verb === 'call' && !readonly\n ? getCallOnCompleteOptions(methodSig, app)\n : undefined\n yield* jsDoc({\n description:\n verb === 'call' && method.readonly\n ? [\n `${description} using the \\`${methodSig}\\` ABI method.`,\n '',\n 'This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.',\n ]\n : `${description} using the \\`${methodSig}\\` ABI method.`,\n abiDescription: method?.desc,\n params: {\n params: `The params for the smart contract call`,\n },\n returns: `The ${verb} ${type === 'params' ? 'params' : type === 'createTransaction' ? 'transaction' : 'result'}${method?.returns?.desc ? `: ${method.returns.desc}` : ''}`,\n })\n const methodName = sanitizer.makeSafeMethodIdentifier(uniqueName)\n const methodNameAccessor = sanitizer.getSafeMemberAccessor(methodName)\n const methodSigSafe = sanitizer.makeSafeStringTypeLiteral(methodSig)\n yield `${!readonly ? `${methodName}: ` : ''}${type === 'send' ? 'async ' : ''}${readonly ? `${methodName}` : ''}(params: CallParams<${name}Args['obj']['${methodSigSafe}'] | ${name}Args['tuple']['${methodSigSafe}']>${\n includeCompilation ? ' &' + ' AppClientCompilationParams' : ''\n }${\n verb === 'create' ? ' & CreateSchema' : ''\n }${type === 'send' && !readonly ? ' & SendParams' : ''}${onComplete?.type && !readonly ? ` & ${onComplete.type}` : ''}${onComplete?.isOptional !== false && (method.args.length === 0 || !method.args.some((a) => !a.defaultValue)) ? ` = {args: [${method.args.map((_) => 'undefined').join(', ')}]}` : ''})${!readonly ? ' =>' : ''} {`\n if (type === 'send') {\n yield* indent(\n `const result = await this.appClient.${type}.${verb}(${name}ParamsFactory${verb !== 'call' ? `.${verb}` : ''}${methodNameAccessor}(params))`,\n readonly\n ? `return result.return as ${name}Returns['${methodSigSafe}']`\n : `return {...result, return: result.return as undefined | ${name}Returns['${methodSigSafe}']}`,\n )\n } else {\n yield* indent(\n `return this.appClient.${type}.${verb}(${name}ParamsFactory${verb !== 'call' ? `.${verb}` : ''}${methodNameAccessor}(params))`,\n )\n }\n yield `}${!readonly ? ',' : ''}`\n yield NewLine\n}\n\nfunction* operationMethods(\n generator: GeneratorContext,\n description: string,\n methods: MethodList,\n verb: 'create' | 'update' | 'optIn' | 'closeOut' | 'delete',\n type: 'params' | 'createTransaction' | 'send',\n includeCompilation?: boolean,\n): DocumentParts {\n if (methods.length) {\n yield* jsDoc(`Gets available ${verb} methods`)\n yield `${verb}: {`\n yield IncIndent\n for (const methodSig of methods) {\n if (methodSig === BARE_CALL) {\n yield* bareMethodCall({\n generator,\n name: 'bare',\n description: `${description} using a bare call`,\n verb,\n type,\n includeCompilation,\n })\n } else {\n const method = generator.app.methods.find((m) => new ABIMethod(m).getSignature() === methodSig)!\n yield* abiMethodCall({\n generator,\n method,\n description,\n verb,\n type,\n includeCompilation,\n })\n }\n }\n yield DecIndent\n yield '},'\n yield NewLine\n }\n}\n\nfunction* clearState(generator: GeneratorContext, type: 'params' | 'createTransaction' | 'send'): DocumentParts {\n yield* bareMethodCall({\n generator,\n name: 'clearState',\n description: `Makes a clear_state call to an existing instance of the ${generator.app.name} smart contract`,\n verb: 'clearState',\n type,\n })\n yield NewLine\n}\n\nfunction* call(generator: GeneratorContext, type: 'params' | 'createTransaction' | 'send'): DocumentParts {\n if (generator.callConfig.callMethods.includes(BARE_CALL)) {\n yield* bareMethodCall({\n generator,\n name: 'bare',\n description: `Makes a call to the ${generator.app.name} smart contract using a bare call`,\n verb: 'call',\n type,\n })\n yield NewLine\n }\n}\n\nfunction* readonlyMethods(generator: GeneratorContext): DocumentParts {\n const { app, callConfig } = generator\n for (const method of app.methods) {\n const methodSignature = new ABIMethod(method).getSignature()\n // Skip non readonly methods\n if (!callConfig.callMethods.includes(methodSignature) || !method.readonly) continue\n\n yield* abiMethodCall({\n generator,\n description: `Makes a readonly (simulated) call to the ${generator.app.name} smart contract`,\n method,\n verb: 'call',\n type: 'send',\n includeCompilation: false,\n readonly: true,\n })\n }\n}\n\nfunction* noopMethods(generator: GeneratorContext, type: 'params' | 'createTransaction' | 'send'): DocumentParts {\n const { app, callConfig } = generator\n for (const method of app.methods) {\n const methodSignature = new ABIMethod(method).getSignature()\n // Skip methods which don't support a no_op call config\n if (!callConfig.callMethods.includes(methodSignature)) continue\n\n yield* abiMethodCall({\n generator,\n description: `Makes a call to the ${generator.app.name} smart contract`,\n method,\n verb: 'call',\n type,\n includeCompilation: false,\n })\n }\n}\n\nfunction* getStateMethods({ app, sanitizer }: GeneratorContext): DocumentParts {\n if (Object.keys(app.state).length === 0) return\n\n yield* jsDoc(`Methods to access state for the current ${app.name} app`)\n yield 'state = {'\n yield IncIndent\n\n const storageTypes = ['global', 'local', 'box'] as const\n\n for (const storageType of storageTypes) {\n const hasKeys = Object.keys(app.state.keys[storageType]).length > 0\n const hasMaps = Object.keys(app.state.maps[storageType]).length > 0\n if (!hasKeys && !hasMaps) continue\n\n yield* jsDoc(`Methods to access ${storageType} state for the current ${app.name} app`)\n yield `${storageType}${storageType === 'local' ? ': (address: string) => ({' : ': {'}`\n yield IncIndent\n\n yield* jsDoc(`Get all current keyed values from ${storageType} state`)\n yield `getAll: async (): Promise<Partial<Expand<${storageType[0].toUpperCase()}${storageType.substring(1)}KeysState>>> => {`\n yield* indent(\n `const result = await this.appClient.state.${storageType}${storageType === 'local' ? '(address)' : ''}.getAll()`,\n `return {`,\n ...Object.keys(app.state.keys[storageType]).map((n) => {\n return ` ${sanitizer.makeSafePropertyIdentifier(n)}: ${app.state.keys[storageType][n].valueType === 'AVMBytes' ? `new BinaryStateValue(result${sanitizer.getSafeMemberAccessor(n)})` : `result${sanitizer.getSafeMemberAccessor(n)}`},`\n }),\n `}`,\n )\n yield `},`\n\n for (const n of Object.keys(app.state.keys[storageType])) {\n const name = sanitizer.makeSafePropertyIdentifier(n)\n const k = app.state.keys[storageType][n]\n yield* jsDoc(`Get the current value of the ${n} key in ${storageType} state`)\n yield `${name}: async (): Promise<${k.valueType === 'AVMBytes' ? 'BinaryState' : `${getEquivalentType(k.valueType, 'output', { app, sanitizer })} | undefined`}> => { return ${k.valueType === 'AVMBytes' ? 'new BinaryStateValue(' : ''}(await this.appClient.state.${storageType}${storageType === 'local' ? '(address)' : ''}.getValue(\"${name}\"))${k.valueType === 'AVMBytes' ? ' as Uint8Array | undefined)' : ` as ${getEquivalentType(k.valueType, 'output', { app, sanitizer })} | undefined`} },`\n }\n\n for (const n of Object.keys(app.state.maps[storageType])) {\n const name = sanitizer.makeSafePropertyIdentifier(app.state.keys[storageType][n] ? `${n}Map` : n)\n const m = app.state.maps[storageType][n]\n yield* jsDoc(`Get values from the ${n} map in ${storageType} state`)\n yield `${name}: {`\n yield IncIndent\n\n yield* jsDoc(`Get all current values of the ${n} map in ${storageType} state`)\n yield `getMap: async (): Promise<Map<${getEquivalentType(m.keyType, 'output', { app, sanitizer })}, ${getEquivalentType(m.valueType, 'output', { app, sanitizer })}>> => { return (await this.appClient.state.${storageType}${storageType === 'local' ? '(address)' : ''}.getMap(\"${sanitizer.makeSafeStringTypeLiteral(n)}\")) as Map<${getEquivalentType(m.keyType, 'output', { app, sanitizer })}, ${getEquivalentType(m.valueType, 'output', { app, sanitizer })}> },`\n\n yield* jsDoc(`Get a current value of the ${n} map by key from ${storageType} state`)\n yield `value: async (key: ${getEquivalentType(m.keyType, 'input', { app, sanitizer })}): Promise<${getEquivalentType(m.valueType, 'output', { app, sanitizer })} | undefined> => { return await this.appClient.state.${storageType}${storageType === 'local' ? '(address)' : ''}.getMapValue(\"${sanitizer.makeSafeStringTypeLiteral(n)}\", key) as ${getEquivalentType(m.valueType, 'output', { app, sanitizer })} | undefined },`\n\n yield DecIndent\n yield `},`\n }\n\n yield DecIndent\n yield `}${storageType === 'local' ? ')' : ''},`\n }\n\n yield DecIndentAndCloseBlock\n yield NewLine\n}\n\nfunction* cloneMethod({ name }: GeneratorContext): DocumentParts {\n yield* jsDoc({\n description: 'Clone this app client with different params',\n params: {\n params:\n 'The params to use for the the cloned app client. Omit a param to keep the original value. Set a param to override the original value. Setting to undefined will clear the original value.',\n },\n returns: 'A new app client with the altered params',\n })\n yield `public clone(params: CloneAppClientParams) {`\n yield IncIndent\n yield `return new ${name}Client(this.appClient.clone(params))`\n yield DecIndentAndCloseBlock\n yield NewLine\n}\n"],"names":[],"mappings":"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"}
@@ -20,13 +20,28 @@ function* appFactory(ctx) {
20
20
  },
21
21
  });
22
22
  yield `
23
- constructor(params: Expand<Omit<AppFactoryParams, 'appSpec'>>) {
23
+ constructor(params: Omit<AppFactoryParams, 'appSpec'>) {
24
24
  this.appFactory = new AppFactory({
25
25
  ...params,
26
26
  appSpec: APP_SPEC,
27
27
  })
28
28
  }
29
29
 
30
+ /** The name of the app (from the ARC-32 / ARC-56 app spec or override). */
31
+ public get appName() {
32
+ return this.appFactory.appName
33
+ }
34
+
35
+ /** The ARC-56 app spec being used */
36
+ get appSpec() {
37
+ return APP_SPEC
38
+ }
39
+
40
+ /** A reference to the underlying \`AlgorandClient\` this app factory is using. */
41
+ public get algorand(): AlgorandClientInterface {
42
+ return this.appFactory.algorand
43
+ }
44
+
30
45
  /**
31
46
  * Returns a new \`AppClient\` client for an app instance of the given ID.
32
47
  *
@@ -35,7 +50,7 @@ function* appFactory(ctx) {
35
50
  * @param params The parameters to create the app client
36
51
  * @returns The \`AppClient\`
37
52
  */
38
- public getAppClientById(params: Expand<Omit<AppClientParams, 'algorand' | 'appSpec'>>) {
53
+ public getAppClientById(params: AppFactoryAppClientParams) {
39
54
  return new ${name}Client(this.appFactory.getAppClientById(params))
40
55
  }
41
56
 
@@ -48,48 +63,47 @@ function* appFactory(ctx) {
48
63
  * @param params The parameters to create the app client
49
64
  * @returns The \`AppClient\`
50
65
  */
51
- public async getAppClientByCreatorAddressAndName(
52
- params: Expand<Omit<AppClientParams, 'algorand' | 'appSpec' | 'appId'> & ResolveAppClientByCreatorAndName>,
66
+ public async getAppClientByCreatorAndName(
67
+ params: AppFactoryResolveAppClientByCreatorAndNameParams,
53
68
  ) {
54
- return new ${name}Client(await this.appFactory.getAppClientByCreatorAddressAndName(params))
69
+ return new ${name}Client(await this.appFactory.getAppClientByCreatorAndName(params))
55
70
  }
56
71
  `;
57
72
  yield* deployMethod(ctx);
58
73
  yield* params(ctx);
74
+ yield* createTransaction(ctx);
59
75
  yield* send(ctx);
60
76
  yield writer.DecIndentAndCloseBlock;
61
77
  }
62
78
  function* params(ctx) {
63
- yield* writer.jsDoc(`Get parameters to define transactions to the current app`);
64
- yield `readonly params = (($this) => {`;
65
- yield writer.IncIndent;
66
- yield `return {`;
79
+ yield* writer.jsDoc(`Get parameters to create transactions (create and deploy related calls) for the current app. A good mental model for this is that these parameters represent a deferred transaction creation.`);
80
+ yield `readonly params = {`;
67
81
  yield writer.IncIndent;
68
82
  yield* paramMethods(ctx);
69
83
  yield writer.DecIndentAndCloseBlock;
70
- yield writer.DecIndent;
71
- yield `})(this)`;
84
+ yield writer.NewLine;
85
+ }
86
+ function* createTransaction(ctx) {
87
+ yield* writer.jsDoc(`Create transactions for the current app`);
88
+ yield `readonly createTransaction = {`;
89
+ yield writer.IncIndent;
90
+ yield* createTransactionMethods(ctx);
91
+ yield writer.DecIndentAndCloseBlock;
72
92
  yield writer.NewLine;
73
93
  }
74
94
  function* send(ctx) {
75
95
  yield* writer.jsDoc(`Send calls to the current app`);
76
- yield `readonly send = (($this) => {`;
77
- yield writer.IncIndent;
78
- yield `return {`;
96
+ yield `readonly send = {`;
79
97
  yield writer.IncIndent;
80
98
  yield* createMethods(ctx);
81
99
  yield writer.DecIndentAndCloseBlock;
82
- yield writer.DecIndent;
83
- yield `})(this)`;
84
100
  yield writer.NewLine;
85
101
  }
86
102
  function* createMethods(generator) {
87
103
  const { app } = generator;
88
104
  if (generator.callConfig.createMethods.length) {
89
105
  yield* writer.jsDoc(`Gets available create methods`);
90
- yield `get create() {`;
91
- yield writer.IncIndent;
92
- yield `return {`;
106
+ yield `create: {`;
93
107
  yield writer.IncIndent;
94
108
  for (const methodSig of generator.callConfig.createMethods) {
95
109
  if (methodSig === getCallConfigSummary.BARE_CALL) {
@@ -114,7 +128,6 @@ function* createMethods(generator) {
114
128
  });
115
129
  }
116
130
  }
117
- yield writer.DecIndentAndCloseBlock;
118
131
  yield writer.DecIndent;
119
132
  yield '},';
120
133
  yield writer.NewLine;
@@ -126,21 +139,25 @@ function* paramMethods(ctx) {
126
139
  yield* operationMethods(ctx, `Updates an existing instance of the ${app.name} smart contract`, callConfig.updateMethods, 'deployUpdate', true);
127
140
  yield* operationMethods(ctx, `Deletes an existing instance of the ${app.name} smart contract`, callConfig.deleteMethods, 'deployDelete');
128
141
  }
142
+ function* createTransactionMethods(ctx) {
143
+ const { app, callConfig } = ctx;
144
+ yield* operationMethods(ctx, `Creates a new instance of the ${app.name} smart contract`, callConfig.createMethods, 'create', true);
145
+ }
129
146
  function* bareMethodCallParams({ generator: { app, name: clientName }, name, description, verb, type, includeCompilation, }) {
130
147
  const onComplete = verb === 'create' ? deployTypes.getCreateOnCompleteOptions(getCallConfigSummary.BARE_CALL, app) : undefined;
131
148
  yield* writer.jsDoc({
132
149
  description: `${description}.`,
133
150
  params: {
134
- params: `The params for the bare (non-ABI) call`,
151
+ params: `The params for the bare (raw) call`,
135
152
  },
136
153
  returns: type === 'params' ? `The params for a ${verb} call` : `The ${verb} result`,
137
154
  });
138
- yield `${type === 'send' ? 'async ' : ''}${name}(params?: Expand<AppClientBareCallParams${includeCompilation ? ' & AppClientCompilationParams' : ''}${verb === 'create' ? ' & CreateSchema' : ''}${type === 'send' ? ' & ExecuteParams' : ''}${onComplete?.type ? ` & ${onComplete.type}` : ''}>) {`;
139
- if (type === 'params') {
140
- yield* writer.indent(`return $this.appFactory.params.bare.${verb}(params)`);
155
+ yield `${name}: ${type === 'send' ? 'async ' : ''}(params?: Expand<AppClientBareCallParams${includeCompilation ? ' &' + ' AppClientCompilationParams' : ''}${verb === 'create' ? ' & CreateSchema' : ''}${type === 'send' ? ' & SendParams' : ''}${onComplete?.type ? ` & ${onComplete.type}` : ''}>) => {`;
156
+ if (type === 'params' || type === 'createTransaction') {
157
+ yield* writer.indent(`return this.appFactory.${type}.bare.${verb}(params)`);
141
158
  }
142
159
  else {
143
- yield* writer.indent(`const result = await $this.appFactory.create(params)`, `return { result: result.result, app: new ${clientName}Client(result.app) }`);
160
+ yield* writer.indent(`const result = await this.appFactory.send.bare.create(params)`, `return { result: result.result, appClient: new ${clientName}Client(result.appClient) }`);
144
161
  }
145
162
  yield '},';
146
163
  }
@@ -154,26 +171,24 @@ function* abiMethodCallParams({ generator: { app, methodSignatureToUniqueName, n
154
171
  params: {
155
172
  params: `The params for the smart contract call`,
156
173
  },
157
- returns: `The ${verb} ${type === 'params' ? 'params' : 'result'}${method?.returns?.desc ? `: ${method.returns.desc}` : ''}`,
174
+ returns: `The ${verb} ${type === 'params' ? 'params' : type === 'createTransaction' ? 'transaction' : 'result'}${method?.returns?.desc ? `: ${method.returns.desc}` : ''}`,
158
175
  });
159
176
  const methodName = sanitizer.makeSafeMethodIdentifier(uniqueName);
160
177
  const methodNameAccessor = sanitizer.getSafeMemberAccessor(methodName);
161
178
  const methodSigSafe = sanitizer.makeSafeStringTypeLiteral(methodSig);
162
- yield `${type === 'send' ? 'async ' : ''}${methodName}(params: Expand<CallParams<'${methodSigSafe}'>${includeCompilation ? ' & AppClientCompilationParams' : ''}${verb === 'create' ? ' & CreateSchema' : ''}${type === 'send' ? ' & ExecuteParams' : ''}${onComplete?.type ? ` & ${onComplete.type}` : ''}>${onComplete?.isOptional !== false && (method.args.length === 0 || !method.args.some((a) => !a.defaultValue)) ? ` = {args: [${method.args.map((_) => 'undefined').join(', ')}]}` : ''}) {`;
163
- if (type === 'params') {
164
- yield* writer.indent(`return $this.appFactory.params.${verb}(${name}ParamsFactory.${verb == 'deployDelete' ? 'delete' : verb === 'deployUpdate' ? 'update' : verb}${methodNameAccessor}(params))`);
179
+ yield `${methodName}: ${type === 'send' ? 'async ' : ''}(params: CallParams<${name}Args['obj']['${methodSigSafe}'] | ${name}Args['tuple']['${methodSigSafe}']>${includeCompilation ? ' &' + ' AppClientCompilationParams' : ''}${verb === 'create' ? ' & CreateSchema' : ''}${type === 'send' ? ' & SendParams' : ''}${onComplete?.type ? ` & ${onComplete.type}` : ''}${onComplete?.isOptional !== false && (method.args.length === 0 || !method.args.some((a) => !a.defaultValue)) ? ` = {args: [${method.args.map((_) => 'undefined').join(', ')}]}` : ''}) => {`;
180
+ if (type === 'params' || type === 'createTransaction') {
181
+ yield* writer.indent(`return this.appFactory.${type}.${verb}(${name}ParamsFactory.${verb == 'deployDelete' ? 'delete' : verb === 'deployUpdate' ? 'update' : verb}${methodNameAccessor}(params))`);
165
182
  }
166
183
  else {
167
- yield* writer.indent(`const result = await $this.appFactory.create(${name}ParamsFactory.${verb}${methodNameAccessor}(params))`, `return { result: { ...result.result, return: result.result.return as undefined | MethodReturn<'${methodSigSafe}'> }, app: new ${name}Client(result.app) }`);
184
+ yield* writer.indent(`const result = await this.appFactory.send.create(${name}ParamsFactory.${verb}${methodNameAccessor}(params))`, `return { result: { ...result.result, return: result.result.return as undefined | ${name}Returns['${methodSigSafe}'] }, appClient: new ${name}Client(result.appClient) }`);
168
185
  }
169
186
  yield '},';
170
187
  }
171
188
  function* operationMethods(generator, description, methods, verb, includeCompilation) {
172
189
  if (methods.length) {
173
190
  yield* writer.jsDoc(`Gets available ${verb} methods`);
174
- yield `get ${verb}() {`;
175
- yield writer.IncIndent;
176
- yield `return {`;
191
+ yield `${verb}: {`;
177
192
  yield writer.IncIndent;
178
193
  for (const methodSig of methods) {
179
194
  if (methodSig === getCallConfigSummary.BARE_CALL) {
@@ -198,7 +213,6 @@ function* operationMethods(generator, description, methods, verb, includeCompila
198
213
  });
199
214
  }
200
215
  }
201
- yield writer.DecIndentAndCloseBlock;
202
216
  yield writer.DecIndent;
203
217
  yield '},';
204
218
  yield writer.NewLine;
@@ -229,7 +243,7 @@ function* deployMethod(ctx) {
229
243
  }
230
244
  yield writer.DecIndent;
231
245
  yield `})`;
232
- yield `return { result: result.result, app: new ${name}Client(result.app) }`;
246
+ yield `return { result: result.result, appClient: new ${name}Client(result.appClient) }`;
233
247
  yield writer.DecIndentAndCloseBlock;
234
248
  yield writer.NewLine;
235
249
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-factory.js","sources":["../../src/client/app-factory.ts"],"sourcesContent":["import { DecIndent, DecIndentAndCloseBlock, DocumentParts, IncIndent, indent, jsDoc, NewLine } from '../output/writer'\nimport { BARE_CALL, MethodList } from './helpers/get-call-config-summary'\nimport { GeneratorContext } from './generator-context'\nimport { getCreateOnCompleteOptions } from './deploy-types'\nimport { ABIMethod } from 'algosdk'\nimport { Method } from '@algorandfoundation/algokit-utils/types/app-arc56'\n\nexport function* appFactory(ctx: GeneratorContext): DocumentParts {\n const { app, name } = ctx\n\n yield* jsDoc(\n `A factory to create and deploy one or more instance of the ${app.name} smart contract and to create one or more app clients to interact with those (or other) app instances`,\n )\n yield `export class ${name}Factory {`\n yield IncIndent\n yield* jsDoc(`The underlying \\`AppFactory\\` for when you want to have more flexibility`)\n yield 'public readonly appFactory: AppFactory'\n yield NewLine\n\n yield* jsDoc({\n description: `Creates a new instance of \\`${name}Factory\\``,\n params: {\n params: 'The parameters to initialise the app factory with',\n },\n })\n\n yield `\n constructor(params: Omit<AppFactoryParams, 'appSpec'>) {\n this.appFactory = new AppFactory({\n ...params,\n appSpec: APP_SPEC,\n })\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.appFactory.appName\n }\n\n /** The ARC-56 app spec being used */\n get appSpec() {\n return APP_SPEC\n }\n\n /** A reference to the underlying \\`AlgorandClient\\` this app factory is using. */\n public get algorand(): AlgorandClientInterface {\n return this.appFactory.algorand\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 ${name}Client(this.appFactory.getAppClientById(params))\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 async getAppClientByCreatorAndName(\n params: AppFactoryResolveAppClientByCreatorAndNameParams,\n ) {\n return new ${name}Client(await this.appFactory.getAppClientByCreatorAndName(params))\n }\n `\n\n yield* deployMethod(ctx)\n yield* params(ctx)\n yield* createTransaction(ctx)\n yield* send(ctx)\n yield DecIndentAndCloseBlock\n}\n\nfunction* params(ctx: GeneratorContext): DocumentParts {\n yield* jsDoc(\n `Get parameters to create transactions (create and deploy related calls) for the current app. A good mental model for this is that these parameters represent a deferred transaction creation.`,\n )\n yield `readonly params = {`\n yield IncIndent\n yield* paramMethods(ctx)\n yield DecIndentAndCloseBlock\n yield NewLine\n}\n\nfunction* createTransaction(ctx: GeneratorContext): DocumentParts {\n yield* jsDoc(`Create transactions for the current app`)\n yield `readonly createTransaction = {`\n yield IncIndent\n yield* createTransactionMethods(ctx)\n yield DecIndentAndCloseBlock\n yield NewLine\n}\n\nfunction* send(ctx: GeneratorContext): DocumentParts {\n yield* jsDoc(`Send calls to the current app`)\n yield `readonly send = {`\n yield IncIndent\n yield* createMethods(ctx)\n yield DecIndentAndCloseBlock\n yield NewLine\n}\n\nfunction* createMethods(generator: GeneratorContext): DocumentParts {\n const { app } = generator\n if (generator.callConfig.createMethods.length) {\n yield* jsDoc(`Gets available create methods`)\n yield `create: {`\n yield IncIndent\n for (const methodSig of generator.callConfig.createMethods) {\n if (methodSig === BARE_CALL) {\n yield* bareMethodCallParams({\n generator,\n name: 'bare',\n description: `Creates a new instance of the ${app.name} smart contract using a bare call`,\n verb: 'create',\n type: 'send',\n includeCompilation: true,\n })\n } else {\n const method = generator.app.methods.find((m) => new ABIMethod(m).getSignature() === methodSig)!\n yield* abiMethodCallParams({\n generator,\n method,\n description: `Creates a new instance of the ${app.name} smart contract using an ABI method call`,\n verb: 'create',\n type: 'send',\n includeCompilation: true,\n })\n }\n }\n yield DecIndent\n yield '},'\n yield NewLine\n }\n}\n\nfunction* paramMethods(ctx: GeneratorContext): DocumentParts {\n const { app, callConfig } = ctx\n\n yield* operationMethods(ctx, `Creates a new instance of the ${app.name} smart contract`, callConfig.createMethods, 'create', true)\n\n yield* operationMethods(\n ctx,\n `Updates an existing instance of the ${app.name} smart contract`,\n callConfig.updateMethods,\n 'deployUpdate',\n true,\n )\n yield* operationMethods(ctx, `Deletes an existing instance of the ${app.name} smart contract`, callConfig.deleteMethods, 'deployDelete')\n}\n\nfunction* createTransactionMethods(ctx: GeneratorContext): DocumentParts {\n const { app, callConfig } = ctx\n\n yield* operationMethods(ctx, `Creates a new instance of the ${app.name} smart contract`, callConfig.createMethods, 'create', true)\n}\n\nfunction* bareMethodCallParams({\n generator: { app, name: clientName },\n name,\n description,\n verb,\n type,\n includeCompilation,\n}: {\n generator: GeneratorContext\n name: string\n description: string\n verb: 'create' | 'deployUpdate' | 'deployDelete'\n type: 'params' | 'createTransaction' | 'send'\n includeCompilation?: boolean\n}): DocumentParts {\n const onComplete = verb === 'create' ? getCreateOnCompleteOptions(BARE_CALL, app) : undefined\n yield* jsDoc({\n description: `${description}.`,\n params: {\n params: `The params for the bare (raw) call`,\n },\n returns: type === 'params' ? `The params for a ${verb} call` : `The ${verb} result`,\n })\n yield `${name}: ${type === 'send' ? 'async ' : ''}(params?: Expand<AppClientBareCallParams${\n includeCompilation ? ' &' + ' AppClientCompilationParams' : ''\n }${\n verb === 'create' ? ' & CreateSchema' : ''\n }${type === 'send' ? ' & SendParams' : ''}${onComplete?.type ? ` & ${onComplete.type}` : ''}>) => {`\n if (type === 'params' || type === 'createTransaction') {\n yield* indent(`return this.appFactory.${type}.bare.${verb}(params)`)\n } else {\n yield* indent(\n `const result = await this.appFactory.send.bare.create(params)`,\n `return { result: result.result, appClient: new ${clientName}Client(result.appClient) }`,\n )\n }\n yield '},'\n}\n\nfunction* abiMethodCallParams({\n generator: { app, methodSignatureToUniqueName, name, sanitizer },\n method,\n description,\n verb,\n type,\n includeCompilation,\n}: {\n generator: GeneratorContext\n method: Method\n description: string\n verb: 'create' | 'deployUpdate' | 'deployDelete'\n type: 'params' | 'createTransaction' | 'send'\n includeCompilation?: boolean\n}) {\n const methodSig = new ABIMethod(method).getSignature()\n const uniqueName = methodSignatureToUniqueName[methodSig]\n const onComplete = verb === 'create' ? getCreateOnCompleteOptions(methodSig, app) : undefined\n yield* jsDoc({\n description: `${description} using the ${methodSig} ABI method.`,\n abiDescription: method?.desc,\n params: {\n params: `The params for the smart contract call`,\n },\n returns: `The ${verb} ${type === 'params' ? 'params' : type === 'createTransaction' ? 'transaction' : 'result'}${method?.returns?.desc ? `: ${method.returns.desc}` : ''}`,\n })\n const methodName = sanitizer.makeSafeMethodIdentifier(uniqueName)\n const methodNameAccessor = sanitizer.getSafeMemberAccessor(methodName)\n const methodSigSafe = sanitizer.makeSafeStringTypeLiteral(methodSig)\n yield `${methodName}: ${type === 'send' ? 'async ' : ''}(params: CallParams<${name}Args['obj']['${methodSigSafe}'] | ${name}Args['tuple']['${methodSigSafe}']>${\n includeCompilation ? ' &' + ' AppClientCompilationParams' : ''\n }${\n verb === 'create' ? ' & CreateSchema' : ''\n }${type === 'send' ? ' & SendParams' : ''}${onComplete?.type ? ` & ${onComplete.type}` : ''}${onComplete?.isOptional !== false && (method.args.length === 0 || !method.args.some((a) => !a.defaultValue)) ? ` = {args: [${method.args.map((_) => 'undefined').join(', ')}]}` : ''}) => {`\n if (type === 'params' || type === 'createTransaction') {\n yield* indent(\n `return this.appFactory.${type}.${verb}(${name}ParamsFactory.${verb == 'deployDelete' ? 'delete' : verb === 'deployUpdate' ? 'update' : verb}${methodNameAccessor}(params))`,\n )\n } else {\n yield* indent(\n `const result = await this.appFactory.send.create(${name}ParamsFactory.${verb}${methodNameAccessor}(params))`,\n `return { result: { ...result.result, return: result.result.return as undefined | ${name}Returns['${methodSigSafe}'] }, appClient: new ${name}Client(result.appClient) }`,\n )\n }\n yield '},'\n}\n\nfunction* operationMethods(\n generator: GeneratorContext,\n description: string,\n methods: MethodList,\n verb: 'create' | 'deployUpdate' | 'deployDelete',\n includeCompilation?: boolean,\n): DocumentParts {\n if (methods.length) {\n yield* jsDoc(`Gets available ${verb} methods`)\n yield `${verb}: {`\n yield IncIndent\n for (const methodSig of methods) {\n if (methodSig === BARE_CALL) {\n yield* bareMethodCallParams({\n generator,\n name: 'bare',\n description: `${description} using a bare call`,\n verb,\n type: 'params',\n includeCompilation,\n })\n } else {\n const method = generator.app.methods.find((m) => new ABIMethod(m).getSignature() === methodSig)!\n yield* abiMethodCallParams({\n generator,\n method,\n description,\n verb,\n type: 'params',\n includeCompilation,\n })\n }\n }\n yield DecIndent\n yield '},'\n yield NewLine\n }\n}\n\nfunction* deployMethod(ctx: GeneratorContext): DocumentParts {\n const { app, callConfig, name } = ctx\n yield* jsDoc({\n description: `Idempotently deploys the ${app.name} smart contract.`,\n params: {\n params: 'The arguments for the contract calls and any additional parameters for the call',\n },\n returns: 'The deployment result',\n })\n yield `public async deploy(params: ${name}DeployParams = {}) {`\n yield IncIndent\n\n yield `const result = await this.appFactory.deploy({`\n yield IncIndent\n yield `...params,`\n if (callConfig.createMethods.filter((m) => m !== BARE_CALL).length) {\n yield `createParams: params.createParams?.method ? ${name}ParamsFactory.create._resolveByMethod(params.createParams) : params.createParams,`\n }\n if (callConfig.updateMethods.filter((m) => m !== BARE_CALL).length) {\n yield `updateParams: params.updateParams?.method ? ${name}ParamsFactory.update._resolveByMethod(params.updateParams) : params.updateParams,`\n }\n if (callConfig.deleteMethods.filter((m) => m !== BARE_CALL).length) {\n yield `deleteParams: params.deleteParams?.method ? ${name}ParamsFactory.delete._resolveByMethod(params.deleteParams) : params.deleteParams,`\n }\n yield DecIndent\n yield `})`\n yield `return { result: result.result, appClient: new ${name}Client(result.appClient) }`\n yield DecIndentAndCloseBlock\n yield NewLine\n}\n"],"names":["jsDoc","IncIndent","NewLine","DecIndentAndCloseBlock","BARE_CALL","ABIMethod","DecIndent","getCreateOnCompleteOptions","indent"],"mappings":"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"}