@algorandfoundation/algokit-client-generator 3.0.6 → 4.0.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/README.md +4 -2
  2. package/cli.d.ts +6 -0
  3. package/cli.js +47 -16
  4. package/cli.js.map +1 -1
  5. package/cli.mjs +47 -17
  6. package/cli.mjs.map +1 -1
  7. package/client/{call-factory.d.ts → app-client.d.ts} +1 -1
  8. package/client/app-client.js +345 -0
  9. package/client/app-client.js.map +1 -0
  10. package/client/app-client.mjs +343 -0
  11. package/client/app-client.mjs.map +1 -0
  12. package/client/{call-client.d.ts → app-factory.d.ts} +1 -1
  13. package/client/app-factory.js +252 -0
  14. package/client/app-factory.js.map +1 -0
  15. package/client/app-factory.mjs +250 -0
  16. package/client/app-factory.mjs.map +1 -0
  17. package/client/app-types.js +206 -112
  18. package/client/app-types.js.map +1 -1
  19. package/client/app-types.mjs +210 -97
  20. package/client/app-types.mjs.map +1 -1
  21. package/client/call-composer-types.js +27 -57
  22. package/client/call-composer-types.js.map +1 -1
  23. package/client/call-composer-types.mjs +27 -38
  24. package/client/call-composer-types.mjs.map +1 -1
  25. package/client/call-composer.js +47 -59
  26. package/client/call-composer.js.map +1 -1
  27. package/client/call-composer.mjs +49 -42
  28. package/client/call-composer.mjs.map +1 -1
  29. package/client/deploy-types.d.ts +8 -4
  30. package/client/deploy-types.js +52 -34
  31. package/client/deploy-types.js.map +1 -1
  32. package/client/deploy-types.mjs +53 -36
  33. package/client/deploy-types.mjs.map +1 -1
  34. package/client/generate.d.ts +2 -2
  35. package/client/generate.js +18 -7
  36. package/client/generate.js.map +1 -1
  37. package/client/generate.mjs +18 -7
  38. package/client/generate.mjs.map +1 -1
  39. package/client/generator-context.d.ts +4 -4
  40. package/client/generator-context.js +5 -24
  41. package/client/generator-context.js.map +1 -1
  42. package/client/generator-context.mjs +5 -5
  43. package/client/generator-context.mjs.map +1 -1
  44. package/client/helpers/get-call-config-summary.d.ts +8 -3
  45. package/client/helpers/get-call-config-summary.js +22 -20
  46. package/client/helpers/get-call-config-summary.js.map +1 -1
  47. package/client/helpers/get-call-config-summary.mjs +22 -20
  48. package/client/helpers/get-call-config-summary.mjs.map +1 -1
  49. package/client/helpers/get-equivalent-type.d.ts +6 -1
  50. package/client/helpers/get-equivalent-type.js +20 -10
  51. package/client/helpers/get-equivalent-type.js.map +1 -1
  52. package/client/helpers/get-equivalent-type.mjs +20 -10
  53. package/client/helpers/get-equivalent-type.mjs.map +1 -1
  54. package/client/imports.js +21 -24
  55. package/client/imports.js.map +1 -1
  56. package/client/imports.mjs +21 -24
  57. package/client/imports.mjs.map +1 -1
  58. package/client/params-factory.d.ts +3 -0
  59. package/client/params-factory.js +126 -0
  60. package/client/params-factory.js.map +1 -0
  61. package/client/params-factory.mjs +124 -0
  62. package/client/params-factory.mjs.map +1 -0
  63. package/client/utility-types.d.ts +0 -7
  64. package/client/utility-types.js +37 -50
  65. package/client/utility-types.js.map +1 -1
  66. package/client/utility-types.mjs +38 -50
  67. package/client/utility-types.mjs.map +1 -1
  68. package/output/writer.d.ts +5 -5
  69. package/output/writer.js +26 -6
  70. package/output/writer.js.map +1 -1
  71. package/output/writer.mjs +26 -6
  72. package/output/writer.mjs.map +1 -1
  73. package/package.json +7 -5
  74. package/schema/application.schema.json.js +2 -2
  75. package/schema/application.schema.json.mjs +2 -2
  76. package/schema/arc56.schema.json.js +751 -0
  77. package/schema/arc56.schema.json.js.map +1 -0
  78. package/schema/arc56.schema.json.mjs +741 -0
  79. package/schema/arc56.schema.json.mjs.map +1 -0
  80. package/schema/load.d.ts +3 -3
  81. package/schema/load.js +28 -8
  82. package/schema/load.js.map +1 -1
  83. package/schema/load.mjs +29 -9
  84. package/schema/load.mjs.map +1 -1
  85. package/util/sanitization.js +13 -8
  86. package/util/sanitization.js.map +1 -1
  87. package/util/sanitization.mjs +13 -8
  88. package/util/sanitization.mjs.map +1 -1
  89. package/client/call-client.js +0 -341
  90. package/client/call-client.js.map +0 -1
  91. package/client/call-client.mjs +0 -320
  92. package/client/call-client.mjs.map +0 -1
  93. package/client/call-factory.js +0 -142
  94. package/client/call-factory.js.map +0 -1
  95. package/client/call-factory.mjs +0 -121
  96. package/client/call-factory.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-client.js","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 | Address) => ({' : ': {'}`\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":["jsDoc","IncIndent","NewLine","composeMethod","DecIndentAndCloseBlock","getCreateOnCompleteOptions","BARE_CALL","getCallOnCompleteOptions","indent","ABIMethod","DecIndent","getEquivalentType"],"mappings":"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"}
@@ -0,0 +1,343 @@
1
+ import { jsDoc, IncIndent, NewLine, DecIndentAndCloseBlock, DecIndent, indent } from '../output/writer.mjs';
2
+ import { BARE_CALL } from './helpers/get-call-config-summary.mjs';
3
+ import { getCreateOnCompleteOptions, getCallOnCompleteOptions } from './deploy-types.mjs';
4
+ import { composeMethod } from './call-composer.mjs';
5
+ import { ABIMethod } from 'algosdk';
6
+ import { getEquivalentType } from './helpers/get-equivalent-type.mjs';
7
+
8
+ function* appClient(ctx) {
9
+ const { app, name } = ctx;
10
+ yield* jsDoc(`A client to make calls to the ${app.name} smart contract`);
11
+ yield `export class ${name}Client {`;
12
+ yield IncIndent;
13
+ yield* jsDoc(`The underlying \`AppClient\` for when you want to have more flexibility`);
14
+ yield 'public readonly appClient: AppClient';
15
+ yield NewLine;
16
+ yield `
17
+ /**
18
+ * Creates a new instance of \`${name}Client\`
19
+ *
20
+ * @param appClient An \`AppClient\` instance which has been created with the ${name} app spec
21
+ */
22
+ constructor(appClient: AppClient)
23
+ /**
24
+ * Creates a new instance of \`${name}Client\`
25
+ *
26
+ * @param params The parameters to initialise the app client with
27
+ */
28
+ constructor(params: Omit<AppClientParams, 'appSpec'>)
29
+ constructor(appClientOrParams: AppClient | Omit<AppClientParams, 'appSpec'>) {
30
+ this.appClient = appClientOrParams instanceof AppClient ? appClientOrParams : new AppClient({
31
+ ...appClientOrParams,
32
+ appSpec: APP_SPEC,
33
+ })
34
+ }
35
+
36
+ /**
37
+ * Checks for decode errors on the given return value and maps the return value to the return type for the given method
38
+ * @returns The typed return value or undefined if there was no value
39
+ */
40
+ decodeReturnValue<TSignature extends ${name}NonVoidMethodSignatures>(method: TSignature, returnValue: ABIReturn | undefined) {
41
+ return returnValue !== undefined ? getArc56ReturnValue<MethodReturn<TSignature>>(returnValue, this.appClient.getABIMethod(method), APP_SPEC.structs) : undefined
42
+ }
43
+
44
+ /**
45
+ * Returns a new \`${name}Client\` client, resolving the app by creator address and name
46
+ * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note).
47
+ * @param params The parameters to create the app client
48
+ */
49
+ public static async fromCreatorAndName(params: Omit<ResolveAppClientByCreatorAndName, 'appSpec'>): Promise<${name}Client> {
50
+ return new ${name}Client(await AppClient.fromCreatorAndName({...params, appSpec: APP_SPEC}))
51
+ }
52
+
53
+ /**
54
+ * Returns an \`${name}Client\` instance for the current network based on
55
+ * pre-determined network-specific app IDs specified in the ARC-56 app spec.
56
+ *
57
+ * If no IDs are in the app spec or the network isn't recognised, an error is thrown.
58
+ * @param params The parameters to create the app client
59
+ */
60
+ static async fromNetwork(
61
+ params: Omit<ResolveAppClientByNetwork, 'appSpec'>
62
+ ): Promise<${name}Client> {
63
+ return new ${name}Client(await AppClient.fromNetwork({...params, appSpec: APP_SPEC}))
64
+ }
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
+
91
+ `;
92
+ yield* params(ctx);
93
+ yield* createTransaction(ctx);
94
+ yield* send(ctx);
95
+ yield* cloneMethod(ctx);
96
+ yield* readonlyMethods(ctx);
97
+ yield* getStateMethods(ctx);
98
+ yield* composeMethod(ctx);
99
+ yield DecIndentAndCloseBlock;
100
+ }
101
+ function* params(ctx) {
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 = {`;
104
+ yield IncIndent;
105
+ yield* opMethods(ctx, 'params');
106
+ yield* clearState(ctx, 'params');
107
+ yield* call(ctx, 'params');
108
+ yield* noopMethods(ctx, 'params');
109
+ yield DecIndentAndCloseBlock;
110
+ yield NewLine;
111
+ }
112
+ function* createTransaction(ctx) {
113
+ yield* jsDoc(`Create transactions for the current app`);
114
+ yield `readonly createTransaction = {`;
115
+ yield IncIndent;
116
+ yield* opMethods(ctx, 'createTransaction');
117
+ yield* clearState(ctx, 'createTransaction');
118
+ yield* call(ctx, 'createTransaction');
119
+ yield* noopMethods(ctx, 'createTransaction');
120
+ yield DecIndentAndCloseBlock;
121
+ yield NewLine;
122
+ }
123
+ function* send(ctx) {
124
+ yield* jsDoc(`Send calls to the current app`);
125
+ yield `readonly send = {`;
126
+ yield IncIndent;
127
+ yield* opMethods(ctx, 'send');
128
+ yield* clearState(ctx, 'send');
129
+ yield* call(ctx, 'send');
130
+ yield* noopMethods(ctx, 'send');
131
+ yield DecIndentAndCloseBlock;
132
+ yield NewLine;
133
+ }
134
+ function* opMethods(ctx, type) {
135
+ const { app, callConfig } = ctx;
136
+ yield* operationMethods(ctx, `Updates an existing instance of the ${app.name} smart contract`, callConfig.updateMethods, 'update', type, true);
137
+ yield* operationMethods(ctx, `Deletes an existing instance of the ${app.name} smart contract`, callConfig.deleteMethods, 'delete', type);
138
+ yield* operationMethods(ctx, `Opts the user into an existing instance of the ${app.name} smart contract`, callConfig.optInMethods, 'optIn', type);
139
+ yield* operationMethods(ctx, `Makes a close out call to an existing instance of the ${app.name} smart contract`, callConfig.closeOutMethods, 'closeOut', type);
140
+ }
141
+ function* bareMethodCall({ generator: { app }, name, description, verb, type, includeCompilation, }) {
142
+ const onComplete = verb === 'create' ? getCreateOnCompleteOptions(BARE_CALL, app) : verb === 'call' ? getCallOnCompleteOptions(BARE_CALL, app) : undefined;
143
+ yield* jsDoc({
144
+ description: `${description}.`,
145
+ params: {
146
+ params: `The params for the bare (raw) call`,
147
+ },
148
+ returns: `The ${verb} result`,
149
+ });
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)`);
152
+ yield '},';
153
+ }
154
+ function* abiMethodCall({ generator: { app, methodSignatureToUniqueName, name, sanitizer }, method, description, verb, type, includeCompilation, readonly, }) {
155
+ const methodSig = new ABIMethod(method).getSignature();
156
+ const uniqueName = methodSignatureToUniqueName[methodSig];
157
+ const onComplete = verb === 'create'
158
+ ? getCreateOnCompleteOptions(methodSig, app)
159
+ : verb === 'call' && !readonly
160
+ ? getCallOnCompleteOptions(methodSig, app)
161
+ : undefined;
162
+ yield* jsDoc({
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.`,
170
+ abiDescription: method?.desc,
171
+ params: {
172
+ params: `The params for the smart contract call`,
173
+ },
174
+ returns: `The ${verb} ${type === 'params' ? 'params' : type === 'createTransaction' ? 'transaction' : 'result'}${method?.returns?.desc ? `: ${method.returns.desc}` : ''}`,
175
+ });
176
+ const methodName = sanitizer.makeSafeMethodIdentifier(uniqueName);
177
+ const methodNameAccessor = sanitizer.getSafeMemberAccessor(methodName);
178
+ const methodSigSafe = sanitizer.makeSafeStringTypeLiteral(methodSig);
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 ? ' =>' : ''} {`;
180
+ if (type === 'send') {
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}']}`);
184
+ }
185
+ else {
186
+ yield* indent(`return this.appClient.${type}.${verb}(${name}ParamsFactory${verb !== 'call' ? `.${verb}` : ''}${methodNameAccessor}(params))`);
187
+ }
188
+ yield `}${!readonly ? ',' : ''}`;
189
+ yield NewLine;
190
+ }
191
+ function* operationMethods(generator, description, methods, verb, type, includeCompilation) {
192
+ if (methods.length) {
193
+ yield* jsDoc(`Gets available ${verb} methods`);
194
+ yield `${verb}: {`;
195
+ yield IncIndent;
196
+ for (const methodSig of methods) {
197
+ if (methodSig === BARE_CALL) {
198
+ yield* bareMethodCall({
199
+ generator,
200
+ name: 'bare',
201
+ description: `${description} using a bare call`,
202
+ verb,
203
+ type,
204
+ includeCompilation,
205
+ });
206
+ }
207
+ else {
208
+ const method = generator.app.methods.find((m) => new ABIMethod(m).getSignature() === methodSig);
209
+ yield* abiMethodCall({
210
+ generator,
211
+ method,
212
+ description,
213
+ verb,
214
+ type,
215
+ includeCompilation,
216
+ });
217
+ }
218
+ }
219
+ yield DecIndent;
220
+ yield '},';
221
+ yield NewLine;
222
+ }
223
+ }
224
+ function* clearState(generator, type) {
225
+ yield* bareMethodCall({
226
+ generator,
227
+ name: 'clearState',
228
+ description: `Makes a clear_state call to an existing instance of the ${generator.app.name} smart contract`,
229
+ verb: 'clearState',
230
+ type,
231
+ });
232
+ yield NewLine;
233
+ }
234
+ function* call(generator, type) {
235
+ if (generator.callConfig.callMethods.includes(BARE_CALL)) {
236
+ yield* bareMethodCall({
237
+ generator,
238
+ name: 'bare',
239
+ description: `Makes a call to the ${generator.app.name} smart contract using a bare call`,
240
+ verb: 'call',
241
+ type,
242
+ });
243
+ yield NewLine;
244
+ }
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
+ }
264
+ function* noopMethods(generator, type) {
265
+ const { app, callConfig } = generator;
266
+ for (const method of app.methods) {
267
+ const methodSignature = new ABIMethod(method).getSignature();
268
+ // Skip methods which don't support a no_op call config
269
+ if (!callConfig.callMethods.includes(methodSignature))
270
+ continue;
271
+ yield* abiMethodCall({
272
+ generator,
273
+ description: `Makes a call to the ${generator.app.name} smart contract`,
274
+ method,
275
+ verb: 'call',
276
+ type,
277
+ includeCompilation: false,
278
+ });
279
+ }
280
+ }
281
+ function* getStateMethods({ app, sanitizer }) {
282
+ if (Object.keys(app.state).length === 0)
283
+ return;
284
+ yield* jsDoc(`Methods to access state for the current ${app.name} app`);
285
+ yield 'state = {';
286
+ yield IncIndent;
287
+ const storageTypes = ['global', 'local', 'box'];
288
+ for (const storageType of storageTypes) {
289
+ const hasKeys = Object.keys(app.state.keys[storageType]).length > 0;
290
+ const hasMaps = Object.keys(app.state.maps[storageType]).length > 0;
291
+ if (!hasKeys && !hasMaps)
292
+ continue;
293
+ yield* jsDoc(`Methods to access ${storageType} state for the current ${app.name} app`);
294
+ yield `${storageType}${storageType === 'local' ? ': (address: string | Address) => ({' : ': {'}`;
295
+ yield IncIndent;
296
+ yield* jsDoc(`Get all current keyed values from ${storageType} state`);
297
+ yield `getAll: async (): Promise<Partial<Expand<${storageType[0].toUpperCase()}${storageType.substring(1)}KeysState>>> => {`;
298
+ yield* indent(`const result = await this.appClient.state.${storageType}${storageType === 'local' ? '(address)' : ''}.getAll()`, `return {`, ...Object.keys(app.state.keys[storageType]).map((n) => {
299
+ return ` ${sanitizer.makeSafePropertyIdentifier(n)}: ${app.state.keys[storageType][n].valueType === 'AVMBytes' ? `new BinaryStateValue(result${sanitizer.getSafeMemberAccessor(n)})` : `result${sanitizer.getSafeMemberAccessor(n)}`},`;
300
+ }), `}`);
301
+ yield `},`;
302
+ for (const n of Object.keys(app.state.keys[storageType])) {
303
+ const name = sanitizer.makeSafePropertyIdentifier(n);
304
+ const k = app.state.keys[storageType][n];
305
+ yield* jsDoc(`Get the current value of the ${n} key in ${storageType} state`);
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`} },`;
307
+ }
308
+ for (const n of Object.keys(app.state.maps[storageType])) {
309
+ const name = sanitizer.makeSafePropertyIdentifier(app.state.keys[storageType][n] ? `${n}Map` : n);
310
+ const m = app.state.maps[storageType][n];
311
+ yield* jsDoc(`Get values from the ${n} map in ${storageType} state`);
312
+ yield `${name}: {`;
313
+ yield IncIndent;
314
+ yield* jsDoc(`Get all current values of the ${n} map in ${storageType} state`);
315
+ 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 })}> },`;
316
+ yield* jsDoc(`Get a current value of the ${n} map by key from ${storageType} state`);
317
+ 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 },`;
318
+ yield DecIndent;
319
+ yield `},`;
320
+ }
321
+ yield DecIndent;
322
+ yield `}${storageType === 'local' ? ')' : ''},`;
323
+ }
324
+ yield DecIndentAndCloseBlock;
325
+ yield NewLine;
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
+ }
341
+
342
+ export { appClient };
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 | Address) => ({' : ': {'}`\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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"}
@@ -1,3 +1,3 @@
1
1
  import { DocumentParts } from '../output/writer';
2
2
  import { GeneratorContext } from './generator-context';
3
- export declare function callClient(ctx: GeneratorContext): DocumentParts;
3
+ export declare function appFactory(ctx: GeneratorContext): DocumentParts;