{"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'\nimport { containsNonVoidMethod } from './helpers/contains-non-void-method'\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  if (containsNonVoidMethod(app.methods)) {\n    yield `\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  yield `\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(): AlgorandClient {\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  if (ctx.mode === 'full') {\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  }\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 unknown as ${name}Returns['${methodSigSafe}']`\n        : `return {...result, return: result.return as unknown 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    if (storageType === 'local') {\n      yield \"const encodedAddress = typeof address === 'string' ? address : encodeAddress(address.publicKey)\"\n      yield 'return {'\n      yield IncIndent\n    }\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' ? '(encodedAddress)' : ''}.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' ? '(encodedAddress)' : ''}.getValue(\"${sanitizer.makeSafeStringTypeLiteral(n)}\"))${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' ? '(encodedAddress)' : ''}.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' ? '(encodedAddress)' : ''}.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    if (storageType === 'local') {\n      yield '}'\n      yield DecIndent\n    }\n    yield '},'\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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"}