import { Payment } from '@dfns/datamodel/dist/Assets';
import { BtcBlock, BtcTransaction, EvmBlock, EvmTransaction, TrxBlock, TrxTransaction } from '@dfns/datamodel/dist/Blockchains';
import { IdentityKind, OwnerKind, ResourceKind } from '@dfns/datamodel/dist/Permissions';
import { PublicKeyRecord } from '@dfns/datamodel/dist/PublicKeys';
import { TypedDataDomain, TypedDataField } from '@ethersproject/abstract-signer';
export type EndpointDetails = {
    path: string;
    method: HttpMethod;
};
export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'DELETE';
export type ListApiEndpoint<Item> = {
    items: Item[];
};
export type GetEmployeeByIdRequest = {
    orgId: string;
    employeeId: string;
};
export type GetEmployeeByIdResponse = {
    id: string;
    username: string;
    email: string;
    fullName: string;
    issuer: string;
    dateOfBirth: Date | null;
    status: string;
    dateCreated: Date;
    dateUpdated: Date;
    orgId: string;
    isOrgOwner: boolean;
};
export type SignersCoordinatorSignRequest = {
    orgId: string;
    publicKeyId: string;
    hash: string;
};
export type SignersCoordinatorSignResponse = {
    r: string;
    s: string;
    recid?: number;
};
export type SignersCoordinatorKeygenRequest = {
    orgId: string;
    config: {
        isEddsa: boolean;
        groupSize: number;
        groupThreshold: number;
        keyId?: string;
    };
};
export type SignersCoordinatorKeygenResponse = {
    pubKeyId: string;
    pubKeyHex: string;
};
export type SignersCoordinatorGetPeersRequest = {
    orgId: string;
};
export type SignersCoordinatorGetPeersResponse = {
    orgId: string;
    nodeIdx: number;
    pregeneratedPrimes: number;
    nodeKey: {
        identity: Uint8Array;
    };
};
export type SignersCoordinatorGetPkRequest = {
    orgId: string;
    publicKeyId: string;
};
export type SignersCoordinatorGetPkResponse = {
    id: string;
    publicKey: string;
    groupSize: number;
    groupThreshold: number;
};
export type SignersCoordinatorGetPkAddressRequest = {
    orgId: string;
    publicKeyId: string;
    network: string;
};
export type SignersCoordinatorGetPkAddressResponse = {
    publicKeyId: string;
    network: string;
    address: string;
};
export type PublicKeyGenerateKeyRequest = Omit<PublicKeyRecord, 'id' | 'signerIds' | 'publicKeys'> & {
    assetAccountId?: string;
    keyId?: string;
};
export type PublicKeyGenerateKeyResponse = {
    id: string;
    publicKey: string;
    groupSize: number;
    groupThreshold: number;
};
export type PublicKeyGetKeyRequest = {
    orgId: string;
    keyId: number;
};
export type PublicKeyGetKeyResponse = PublicKeyGenerateKeyResponse;
export type PublicKeyListKeyRequest = {
    orgId: string;
};
export type PublicKeyListKeyResponse = ListApiEndpoint<PublicKeyGetKeyResponse[]>;
export type PublicKeyGetKeyAddressRequest = {
    orgId: string;
    keyId: string;
    network: string;
};
export type PublicKeyGetKeyAddressResponse = {
    publicKeyId: string;
    network: string;
    address: string;
};
export type VerifyAuthorizationRequest = {
    orgId: string;
    identityId: string;
    identityKind: IdentityKind;
    operation: string;
    parameters?: Record<string, string[]>[];
    serviceName: string;
    resourceId?: string;
};
export type VerifyAuthorizationResponse = {
    isAuthorized: boolean;
};
export type ListAssignedPermissionsRequest = {
    orgId: string;
    identityId: string;
    identityKind: IdentityKind;
    operations?: string[];
};
type PermissionPredicate = {
    id: string;
    permissionId: string;
    fieldName: string;
    evaluatorKind: string;
    parameters: string[];
    isImmutable: boolean;
    dateCreated: Date;
    dateUpdated: Date;
    isArchived: boolean;
};
export type ListAssignedPermissionsResponse = {
    id: string;
    orgId: string;
    name: string;
    operations: string[];
    status: string;
    resourceId: string | null;
    predicateIds: string[];
    isImmutable: boolean;
    dateCreated: Date;
    dateUpdated: Date;
    isArchived: boolean;
    predicates: PermissionPredicate[];
}[];
export type CreateResourceOwnershipRequest = {
    orgId: string;
    resourceId: string;
    resourceKind: ResourceKind;
    ownerId: string;
    ownerKind: OwnerKind;
    originatorId: string;
};
export type CreateResourceOwnershipResponse = {
    id: string;
    resourceId: string;
    resourceKind: string;
    ownerId: string;
    ownerKind: string;
    dateCreated: Date;
    dateUpdated: Date;
};
export type GetDynamoPermissionAwareQueryRequest = {
    orgId: string;
    identityId: string;
    identityKind: IdentityKind;
    operation: string;
    serviceName: string;
};
export type GetDynamoPermissionAwareQueryResponse = {
    isAuthorized: boolean;
    query?: {
        expression: string;
        attributeNames: Record<string, string>;
        attributeValues: Record<string, unknown>;
    };
};
export type GetPermittedResourceIdsRequest = {
    orgId: string;
    identityId: string;
    identityKind: IdentityKind;
    operation: string;
    resourceKind: ResourceKind;
};
export type GetPermittedResourceIdsResponse = string[];
export type BlockchainIntegrationsGetAddressRequest = {
    orgId: string;
    publicKeyId: string;
};
export type BlockchainIntegrationsGetAddressResponse = {
    publicKeyId: string;
    address: string;
};
export type BlockchainIntegrationsGetBalanceRequest = {
    orgId: string;
    publicKeyId: string;
    assets: string[];
};
export type BlockchainIntegrationsGetBalanceResponse = {
    publicKeyId: string;
    balance: string;
};
export type BlockchainIntegrationsGetNativeBalanceRequest = {
    orgId: string;
    publicKeyId: string;
    blockNumber?: number;
};
export type BlockchainIntegrationsGetNativeBalanceResponse = {
    publicKeyId: string;
    balance: string;
};
export type BlockchainIntegrationsGetAssetBalanceRequest = {
    orgId: string;
    publicKeyId: string;
    contract: string;
    blockNumber?: number;
};
export type BlockchainIntegrationsGetAssetBalanceResponse = {
    publicKeyId: string;
    balance: string;
};
export type Transaction = {
    from: string;
    to: string;
    amount: string;
    currency: string;
    txHash: string;
    timeStamp: number;
    status: string;
    blockHash: string;
    blockHeight: number;
    confirmations?: number;
};
export type BlockchainIntegrationsListTransactionsRequest = {
    orgId: string;
    publicKeyId: string;
    assets: string[];
};
export type BlockchainIntegrationsListTransactionsResponse = {
    publicKeyId: string;
    transactions: Transaction[];
};
export type Evm20Params = 'EVM20';
export type Evm721Params = 'EVM721';
export type BlockchainIntegrationsGetContractRequest = {
    contract: string;
    params?: Evm20Params | Evm721Params;
};
export declare enum MetadataKind {
    ASSET = "asset",
    NFT = "nft"
}
export type AssetMetadata = {
    kind: MetadataKind.ASSET;
    name?: string;
    symbol?: string;
    decimals: number;
};
export type NftMetadata = {
    kind: MetadataKind.NFT;
    name?: string;
    symbol?: string;
};
export type BlockchainIntegrationsGetContractResponse = {
    contract: string;
    metadata: AssetMetadata | NftMetadata;
};
export type BlockchainIntegrationsCallContractViewRequest = {
    contract: string;
    data: string;
};
export type BlockchainIntegrationsCallContractViewResponse = {
    data: string;
};
export type BlockchainIntegrationsGetTransactionRequest = {
    hash: string;
};
export type BlockchainIntegrationsGetTransactionResponse = {
    transaction: BtcTransaction | EvmTransaction | TrxTransaction;
};
export type BlockchainIntegrationsGetBlockNumberResponse = {
    blockNumber: number;
};
export type BlockchainIntegrationsGetBlockRequest = {
    blockNumber: number;
};
export type BlockchainIntegrationsGetBlockResponse = {
    block: BtcBlock | EvmBlock | TrxBlock;
};
export type TypedData = {
    domain: TypedDataDomain;
    types: Record<string, Array<TypedDataField>>;
    value: Record<string, unknown>;
};
export type SendTransactionParams = {
    to?: string;
    typedData?: TypedData;
    value?: string;
    data?: string;
    gasPrice?: string;
    gasLimit?: string;
    nonce?: string;
    maxFeePerGas?: string;
    maxPriorityFeePerGas?: string;
};
export type SendNftTxParams = {
    contract: string;
    to: string;
    tokenId: string;
};
export type BlockchainIntegrationsSubmitGenericTransactionRequest = {
    orgId: string;
    publicKeyId: string;
    body: SendTransactionParams | SendNftTxParams;
};
export type BlockchainIntegrationsSubmitGenericTransactionResponse = {
    publicKeyId: string;
    tx: string;
    response: unknown;
};
export type BlockchainIntegrationsSubmitPaymentTransactionRequest = {
    orgId: string;
    publicKeyId: string;
    to: string;
    value: string;
    asset: string;
};
export type BlockchainIntegrationsSubmitPaymentTransactionResponse = {
    publicKeyId: string;
    tx: string;
};
export type NonFungibleToken = {
    contract: string;
    name: string;
    symbol: string;
    tokenId: string;
    tokenUri: string;
};
export type BlockchainIntegrationsGetNftRequest = {
    orgId: string;
    publicKeyId: string;
    contract: string;
    tokenId: string;
};
export type BlockchainIntegrationsGetNftResponse = {
    publicKeyId: string;
    nft: NonFungibleToken;
};
export type BlockchainIntegrationsGetNftBalanceRequest = {
    orgId: string;
    publicKeyId: string;
    contract: string;
    blockNumber?: number;
};
export type BlockchainIntegrationsGetNftBalanceResponse = {
    publicKeyId: string;
    balance: number;
    tokenIds: string[];
};
export type BlockchainIntegrationsCheckIsNftRequest = {
    contract: string;
};
export type BlockchainIntegrationsCheckIsNftResponse = {
    contract: string;
    isNft: boolean;
};
export type WalletConnectClientMeta = {
    name: string;
    description: string;
    icons: string[];
};
export type WalletConnectSession = {
    connected: boolean;
    accounts: string[];
    chainId: number;
    bridge: string;
    key: string;
    clientId: string;
    clientMeta: WalletConnectClientMeta | undefined;
    peerId: string;
    peerMeta: WalletConnectClientMeta | undefined;
    handshakeId: number;
    handshakeTopic: string;
};
export type BlockchainIntegrationsStartWalletConnectSessionRequest = {
    orgId: string;
    publicKeyId: string;
    wcUri: string;
};
export type BlockchainIntegrationsStartWalletConnectSessionResponse = {
    session: WalletConnectSession;
};
export type PaymentsExecuteAssetAccountPaymentRequest = {
    orgId: string;
    paymentId: string;
};
export type PaymentsExecuteAssetAccountPaymentResponse = Payment;
export type AuthVerifyApiRequest = {
    headers: {
        Accept: string;
        'Content-Length': number;
        'Content-Type': 'application/json';
        Host: string;
        'User-Agent': 'DFNS Authorizer Lambda';
        'X-DFNS-APPID': string;
        'X-DFNS-APPSECRET': string;
        'X-DFNS-NONCE': string;
        'X-DFNS-APISIGNATURE': string;
        'X-DFNS-ORIGINATINGIP': string;
    };
    body: string;
};
export {};
