export declare const contractContextBase = "\nimport {\n  CosmWasmClient,\n  SigningCosmWasmClient,\n} from '@cosmjs/cosmwasm-stargate';\n\nexport interface IContractConstructor {\n  address: string | undefined;\n  cosmWasmClient: CosmWasmClient | undefined;\n  signingCosmWasmClient: SigningCosmWasmClient | undefined;\n}\n\nexport const NO_SINGING_ERROR_MESSAGE = 'signingCosmWasmClient not connected';\n\nexport const NO_COSMWASW_CLIENT_ERROR_MESSAGE = 'cosmWasmClient not connected';\n\nexport const NO_ADDRESS_ERROR_MESSAGE = \"address doesn't exist\";\n\nexport const NO_SIGNING_CLIENT_ERROR_MESSAGE =\n  'Signing client is not generated. Please check ts-codegen config';\n\nexport const NO_QUERY_CLIENT_ERROR_MESSAGE =\n  'Query client is not generated. Please check ts-codegen config';\n\nexport const NO_MESSAGE_COMPOSER_ERROR_MESSAGE =\n  'Message composer client is not generated. Please check ts-codegen config';\n\n/**\n * a placeholder for non-generated classes\n */\nexport interface IEmptyClient {}\n\nexport interface ISigningClientProvider<T> {\n  getSigningClient(contractAddr: string): T;\n}\n\nexport interface IQueryClientProvider<T> {\n  getQueryClient(contractAddr: string): T;\n}\n\nexport interface IMessageComposerProvider<T> {\n  getMessageComposer(contractAddr: string): T;\n}\n\nexport class ContractBase<\n  TSign = IEmptyClient,\n  TQuery = IEmptyClient,\n  TMsgComposer = IEmptyClient\n> {\n\n  address: string | undefined;\n  cosmWasmClient: CosmWasmClient | undefined;\n  signingCosmWasmClient: SigningCosmWasmClient | undefined;\n  TSign?: new (\n    client: SigningCosmWasmClient,\n    sender: string,\n    contractAddress: string\n  ) => TSign;\n  TQuery?: new (\n    client: CosmWasmClient,\n    contractAddress: string\n  ) => TQuery;\n  TMsgComposer?: new (\n    sender: string,\n    contractAddress: string\n  ) => TMsgComposer;\n\n  constructor(\n    address: string | undefined,\n    cosmWasmClient: CosmWasmClient | undefined,\n    signingCosmWasmClient: SigningCosmWasmClient | undefined,\n    TSign?: new (\n      client: SigningCosmWasmClient,\n      sender: string,\n      contractAddress: string\n    ) => TSign,\n    TQuery?: new (\n      client: CosmWasmClient,\n      contractAddress: string\n    ) => TQuery,\n    TMsgComposer?: new (\n      sender: string,\n      contractAddress: string\n    ) => TMsgComposer\n  ) {\n    this.address = address;\n    this.cosmWasmClient = cosmWasmClient;\n    this.signingCosmWasmClient = signingCosmWasmClient;\n    this.TSign = TSign;\n    this.TQuery = TQuery;\n    this.TMsgComposer = TMsgComposer;\n  }\n\n  public getSigningClient(contractAddr: string): TSign {\n    if (!this.signingCosmWasmClient) throw new Error(NO_SINGING_ERROR_MESSAGE);\n    if (!this.address) throw new Error(NO_ADDRESS_ERROR_MESSAGE);\n    if (!this.TSign) throw new Error(NO_SIGNING_CLIENT_ERROR_MESSAGE);\n    return new this.TSign(\n      this.signingCosmWasmClient,\n      this.address,\n      contractAddr\n    );\n  }\n\n  public getQueryClient(contractAddr: string): TQuery {\n    if (!this.cosmWasmClient) throw new Error(NO_COSMWASW_CLIENT_ERROR_MESSAGE);\n    if (!this.TQuery) throw new Error(NO_QUERY_CLIENT_ERROR_MESSAGE);\n    return new this.TQuery(this.cosmWasmClient, contractAddr);\n  }\n\n  public getMessageComposer(contractAddr: string): TMsgComposer {\n    if (!this.address) throw new Error(NO_ADDRESS_ERROR_MESSAGE);\n    if (!this.TMsgComposer) throw new Error(NO_MESSAGE_COMPOSER_ERROR_MESSAGE);\n    return new this.TMsgComposer(this.address, contractAddr);\n  }\n}\n";
