import * as _ccamp_canisters_src_declarations_remittance_remittance_did from '@ccamp/canisters/src/declarations/remittance/remittance.did';
import * as _ccamp_canisters_src_declarations_remittance from '@ccamp/canisters/src/declarations/remittance';
import { remittance } from '@ccamp/canisters/src/declarations/remittance';
import * as _ccamp_canisters_src_declarations_protocol_data_collection_protocol_data_collection_did from '@ccamp/canisters/src/declarations/protocol_data_collection/protocol_data_collection.did';
import * as _ccamp_canisters_src_declarations_protocol_data_collection from '@ccamp/canisters/src/declarations/protocol_data_collection';
import { protocol_data_collection } from '@ccamp/canisters/src/declarations/protocol_data_collection';
import * as _dfinity_agent from '@dfinity/agent';
import { Actor, Agent } from '@dfinity/agent';
import * as _ccamp_canisters_src_declarations_data_collection_data_collection_did from '@ccamp/canisters/src/declarations/data_collection/data_collection.did';
import * as _ccamp_canisters_src_declarations_data_collection from '@ccamp/canisters/src/declarations/data_collection';
import { data_collection } from '@ccamp/canisters/src/declarations/data_collection';
import * as _dfinity_principal from '@dfinity/principal';
import { Principal } from '@dfinity/principal';
import { ethers } from 'ethers';

type Environment = 'prod' | 'dev';
type CanisterType = 'dataCollection' | 'protocolDataCollection' | 'remittance';
type CanisterIds = {
    dataCollection: string;
    protocolDataCollection: string;
    remittance: string;
};
type CanisterActors = {
    dataCollection: Actor;
    protocolDataCollection: Actor;
    remittance: Actor;
};
type DataCollectionCanister = typeof data_collection;
type ProtocolDataCollectionCanister = typeof protocol_data_collection;
type RemittanceCanister = typeof remittance;

declare class CCAMPClient {
    agent: Agent;
    canisterIds: CanisterIds;
    actors: {
        dataCollection: (canisterId: string | Principal, options?: _ccamp_canisters_src_declarations_data_collection.CreateActorOptions) => _dfinity_agent.ActorSubclass<_ccamp_canisters_src_declarations_data_collection_data_collection_did._SERVICE>;
        protocolDataCollection: (canisterId: string | Principal, options?: _ccamp_canisters_src_declarations_protocol_data_collection.CreateActorOptions) => _dfinity_agent.ActorSubclass<_ccamp_canisters_src_declarations_protocol_data_collection_protocol_data_collection_did._SERVICE>;
        remittance: (canisterId: string | Principal, options?: _ccamp_canisters_src_declarations_remittance.CreateActorOptions) => _dfinity_agent.ActorSubclass<_ccamp_canisters_src_declarations_remittance_remittance_did._SERVICE>;
    };
    env: Environment;
    constructor(ethereumPrivateKey: string, { env }?: {
        env?: Environment;
    });
    getCanisterInstance(canisterType: CanisterType, overrides?: {
        canisterId?: string;
    }): _dfinity_agent.ActorSubclass<_ccamp_canisters_src_declarations_data_collection_data_collection_did._SERVICE> | _dfinity_agent.ActorSubclass<_ccamp_canisters_src_declarations_remittance_remittance_did._SERVICE>;
    approveLockerContract(erc20TokenAddress: string, amountToApprove: ethers.BigNumberish, signer: ethers.Wallet, overrides?: {
        lockerContract?: string;
    }): Promise<ethers.ContractTransaction>;
    deposit(amount: ethers.BigNumberish, tokenAddress: string, signer: ethers.Wallet, overrides?: {
        lockerContract?: string;
        dcCanister?: string;
    }): Promise<ethers.ContractTransaction>;
    withdraw(amount: ethers.BigNumberish, tokenAddress: string, chain: string, signer: ethers.Wallet, overrides?: {
        lockerContract?: string;
        dcCanister?: string;
        remittanceCanister?: string;
    }): Promise<ethers.ContractTransaction>;
    private _getLockerContractAddress;
    private _logger;
}

declare const ENV: Record<string, Environment>;
declare const HOSTS: {
    [x: string]: string;
};
declare const canisterActors: {
    dataCollection: (canisterId: string | _dfinity_principal.Principal, options?: _ccamp_canisters_src_declarations_data_collection.CreateActorOptions) => _dfinity_agent.ActorSubclass<_ccamp_canisters_src_declarations_data_collection_data_collection_did._SERVICE>;
    protocolDataCollection: (canisterId: string | _dfinity_principal.Principal, options?: _ccamp_canisters_src_declarations_protocol_data_collection.CreateActorOptions) => _dfinity_agent.ActorSubclass<_ccamp_canisters_src_declarations_protocol_data_collection_protocol_data_collection_did._SERVICE>;
    remittance: (canisterId: string | _dfinity_principal.Principal, options?: _ccamp_canisters_src_declarations_remittance.CreateActorOptions) => _dfinity_agent.ActorSubclass<_ccamp_canisters_src_declarations_remittance_remittance_did._SERVICE>;
};
declare const CANISTER_TYPES: Record<string, CanisterType>;

declare const prependKeyWith0x: (privateKey: string) => string;

/**
 * CCAMP JavaScript Client
 *
 * @packageDocumentation
 * @module CCAMPClient
 */

export { CANISTER_TYPES, CCAMPClient, type CanisterActors, type CanisterIds, type CanisterType, type DataCollectionCanister, ENV, type Environment, HOSTS, type ProtocolDataCollectionCanister, type RemittanceCanister, canisterActors, CCAMPClient as default, prependKeyWith0x };
