import Long from "long"; import _m0 from "protobufjs/minimal"; import { MerklePrefix } from "../../commitment/v1/commitment"; export declare const protobufPackage = "ibc.core.connection.v1"; /** * State defines if a connection is in one of the following states: * INIT, TRYOPEN, OPEN or UNINITIALIZED. */ export declare enum State { /** STATE_UNINITIALIZED_UNSPECIFIED - Default State */ STATE_UNINITIALIZED_UNSPECIFIED = 0, /** STATE_INIT - A connection end has just started the opening handshake. */ STATE_INIT = 1, /** * STATE_TRYOPEN - A connection end has acknowledged the handshake step on the counterparty * chain. */ STATE_TRYOPEN = 2, /** STATE_OPEN - A connection end has completed the handshake. */ STATE_OPEN = 3, UNRECOGNIZED = -1 } export declare function stateFromJSON(object: any): State; export declare function stateToJSON(object: State): string; /** * ConnectionEnd defines a stateful object on a chain connected to another * separate one. * NOTE: there must only be 2 defined ConnectionEnds to establish * a connection between two chains. */ export interface ConnectionEnd { /** client associated with this connection. */ clientId: string; /** * IBC version which can be utilised to determine encodings or protocols for * channels or packets utilising this connection. */ versions: Version[]; /** current state of the connection end. */ state: State; /** counterparty chain associated with this connection. */ counterparty?: Counterparty; /** * delay period that must pass before a consensus state can be used for * packet-verification NOTE: delay period logic is only implemented by some * clients. */ delayPeriod: Long; } /** * IdentifiedConnection defines a connection with additional connection * identifier field. */ export interface IdentifiedConnection { /** connection identifier. */ id: string; /** client associated with this connection. */ clientId: string; /** * IBC version which can be utilised to determine encodings or protocols for * channels or packets utilising this connection */ versions: Version[]; /** current state of the connection end. */ state: State; /** counterparty chain associated with this connection. */ counterparty?: Counterparty; /** delay period associated with this connection. */ delayPeriod: Long; } /** Counterparty defines the counterparty chain associated with a connection end. */ export interface Counterparty { /** * identifies the client on the counterparty chain associated with a given * connection. */ clientId: string; /** * identifies the connection end on the counterparty chain associated with a * given connection. */ connectionId: string; /** commitment merkle prefix of the counterparty chain. */ prefix?: MerklePrefix; } /** ClientPaths define all the connection paths for a client state. */ export interface ClientPaths { /** list of connection paths */ paths: string[]; } /** ConnectionPaths define all the connection paths for a given client state. */ export interface ConnectionPaths { /** client state unique identifier */ clientId: string; /** list of connection paths */ paths: string[]; } /** * Version defines the versioning scheme used to negotiate the IBC verison in * the connection handshake. */ export interface Version { /** unique version identifier */ identifier: string; /** list of features compatible with the specified identifier */ features: string[]; } /** Params defines the set of Connection parameters. */ export interface Params { /** * maximum expected time per block (in nanoseconds), used to enforce block delay. This parameter should reflect the * largest amount of time that the chain might reasonably take to produce the next block under normal operating * conditions. A safe choice is 3-5x the expected time per block. */ maxExpectedTimePerBlock: Long; } export declare const ConnectionEnd: { encode(message: ConnectionEnd, writer?: _m0.Writer): _m0.Writer; decode(input: _m0.Reader | Uint8Array, length?: number | undefined): ConnectionEnd; fromJSON(object: any): ConnectionEnd; toJSON(message: ConnectionEnd): unknown; create]: never; }) | undefined; } & { [K_1 in Exclude]: never; })[] & { [K_2 in Exclude]: never; }) | undefined; state?: State | undefined; counterparty?: ({ clientId?: string | undefined; connectionId?: string | undefined; prefix?: { keyPrefix?: Uint8Array | undefined; } | undefined; } & { clientId?: string | undefined; connectionId?: string | undefined; prefix?: ({ keyPrefix?: Uint8Array | undefined; } & { keyPrefix?: Uint8Array | undefined; } & { [K_3 in Exclude]: never; }) | undefined; } & { [K_4 in Exclude]: never; }) | undefined; delayPeriod?: string | number | (Long.Long & { high: number; low: number; unsigned: boolean; add: (addend: string | number | Long.Long) => Long.Long; and: (other: string | number | Long.Long) => Long.Long; compare: (other: string | number | Long.Long) => number; comp: (other: string | number | Long.Long) => number; divide: (divisor: string | number | Long.Long) => Long.Long; div: (divisor: string | number | Long.Long) => Long.Long; equals: (other: string | number | Long.Long) => boolean; eq: (other: string | number | Long.Long) => boolean; getHighBits: () => number; getHighBitsUnsigned: () => number; getLowBits: () => number; getLowBitsUnsigned: () => number; getNumBitsAbs: () => number; greaterThan: (other: string | number | Long.Long) => boolean; gt: (other: string | number | Long.Long) => boolean; greaterThanOrEqual: (other: string | number | Long.Long) => boolean; gte: (other: string | number | Long.Long) => boolean; isEven: () => boolean; isNegative: () => boolean; isOdd: () => boolean; isPositive: () => boolean; isZero: () => boolean; lessThan: (other: string | number | Long.Long) => boolean; lt: (other: string | number | Long.Long) => boolean; lessThanOrEqual: (other: string | number | Long.Long) => boolean; lte: (other: string | number | Long.Long) => boolean; modulo: (other: string | number | Long.Long) => Long.Long; mod: (other: string | number | Long.Long) => Long.Long; multiply: (multiplier: string | number | Long.Long) => Long.Long; mul: (multiplier: string | number | Long.Long) => Long.Long; negate: () => Long.Long; neg: () => Long.Long; not: () => Long.Long; notEquals: (other: string | number | Long.Long) => boolean; neq: (other: string | number | Long.Long) => boolean; or: (other: string | number | Long.Long) => Long.Long; shiftLeft: (numBits: number | Long.Long) => Long.Long; shl: (numBits: number | Long.Long) => Long.Long; shiftRight: (numBits: number | Long.Long) => Long.Long; shr: (numBits: number | Long.Long) => Long.Long; shiftRightUnsigned: (numBits: number | Long.Long) => Long.Long; shru: (numBits: number | Long.Long) => Long.Long; subtract: (subtrahend: string | number | Long.Long) => Long.Long; sub: (subtrahend: string | number | Long.Long) => Long.Long; toInt: () => number; toNumber: () => number; toBytes: (le?: boolean | undefined) => number[]; toBytesLE: () => number[]; toBytesBE: () => number[]; toSigned: () => Long.Long; toString: (radix?: number | undefined) => string; toUnsigned: () => Long.Long; xor: (other: string | number | Long.Long) => Long.Long; } & { [K_5 in Exclude]: never; }) | undefined; } & { [K_6 in Exclude]: never; }>(base?: I | undefined): ConnectionEnd; fromPartial]: never; }) | undefined; } & { [K_8 in Exclude]: never; })[] & { [K_9 in Exclude]: never; }) | undefined; state?: State | undefined; counterparty?: ({ clientId?: string | undefined; connectionId?: string | undefined; prefix?: { keyPrefix?: Uint8Array | undefined; } | undefined; } & { clientId?: string | undefined; connectionId?: string | undefined; prefix?: ({ keyPrefix?: Uint8Array | undefined; } & { keyPrefix?: Uint8Array | undefined; } & { [K_10 in Exclude]: never; }) | undefined; } & { [K_11 in Exclude]: never; }) | undefined; delayPeriod?: string | number | (Long.Long & { high: number; low: number; unsigned: boolean; add: (addend: string | number | Long.Long) => Long.Long; and: (other: string | number | Long.Long) => Long.Long; compare: (other: string | number | Long.Long) => number; comp: (other: string | number | Long.Long) => number; divide: (divisor: string | number | Long.Long) => Long.Long; div: (divisor: string | number | Long.Long) => Long.Long; equals: (other: string | number | Long.Long) => boolean; eq: (other: string | number | Long.Long) => boolean; getHighBits: () => number; getHighBitsUnsigned: () => number; getLowBits: () => number; getLowBitsUnsigned: () => number; getNumBitsAbs: () => number; greaterThan: (other: string | number | Long.Long) => boolean; gt: (other: string | number | Long.Long) => boolean; greaterThanOrEqual: (other: string | number | Long.Long) => boolean; gte: (other: string | number | Long.Long) => boolean; isEven: () => boolean; isNegative: () => boolean; isOdd: () => boolean; isPositive: () => boolean; isZero: () => boolean; lessThan: (other: string | number | Long.Long) => boolean; lt: (other: string | number | Long.Long) => boolean; lessThanOrEqual: (other: string | number | Long.Long) => boolean; lte: (other: string | number | Long.Long) => boolean; modulo: (other: string | number | Long.Long) => Long.Long; mod: (other: string | number | Long.Long) => Long.Long; multiply: (multiplier: string | number | Long.Long) => Long.Long; mul: (multiplier: string | number | Long.Long) => Long.Long; negate: () => Long.Long; neg: () => Long.Long; not: () => Long.Long; notEquals: (other: string | number | Long.Long) => boolean; neq: (other: string | number | Long.Long) => boolean; or: (other: string | number | Long.Long) => Long.Long; shiftLeft: (numBits: number | Long.Long) => Long.Long; shl: (numBits: number | Long.Long) => Long.Long; shiftRight: (numBits: number | Long.Long) => Long.Long; shr: (numBits: number | Long.Long) => Long.Long; shiftRightUnsigned: (numBits: number | Long.Long) => Long.Long; shru: (numBits: number | Long.Long) => Long.Long; subtract: (subtrahend: string | number | Long.Long) => Long.Long; sub: (subtrahend: string | number | Long.Long) => Long.Long; toInt: () => number; toNumber: () => number; toBytes: (le?: boolean | undefined) => number[]; toBytesLE: () => number[]; toBytesBE: () => number[]; toSigned: () => Long.Long; toString: (radix?: number | undefined) => string; toUnsigned: () => Long.Long; xor: (other: string | number | Long.Long) => Long.Long; } & { [K_12 in Exclude]: never; }) | undefined; } & { [K_13 in Exclude]: never; }>(object: I_1): ConnectionEnd; }; export declare const IdentifiedConnection: { encode(message: IdentifiedConnection, writer?: _m0.Writer): _m0.Writer; decode(input: _m0.Reader | Uint8Array, length?: number | undefined): IdentifiedConnection; fromJSON(object: any): IdentifiedConnection; toJSON(message: IdentifiedConnection): unknown; create]: never; }) | undefined; } & { [K_1 in Exclude]: never; })[] & { [K_2 in Exclude]: never; }) | undefined; state?: State | undefined; counterparty?: ({ clientId?: string | undefined; connectionId?: string | undefined; prefix?: { keyPrefix?: Uint8Array | undefined; } | undefined; } & { clientId?: string | undefined; connectionId?: string | undefined; prefix?: ({ keyPrefix?: Uint8Array | undefined; } & { keyPrefix?: Uint8Array | undefined; } & { [K_3 in Exclude]: never; }) | undefined; } & { [K_4 in Exclude]: never; }) | undefined; delayPeriod?: string | number | (Long.Long & { high: number; low: number; unsigned: boolean; add: (addend: string | number | Long.Long) => Long.Long; and: (other: string | number | Long.Long) => Long.Long; compare: (other: string | number | Long.Long) => number; comp: (other: string | number | Long.Long) => number; divide: (divisor: string | number | Long.Long) => Long.Long; div: (divisor: string | number | Long.Long) => Long.Long; equals: (other: string | number | Long.Long) => boolean; eq: (other: string | number | Long.Long) => boolean; getHighBits: () => number; getHighBitsUnsigned: () => number; getLowBits: () => number; getLowBitsUnsigned: () => number; getNumBitsAbs: () => number; greaterThan: (other: string | number | Long.Long) => boolean; gt: (other: string | number | Long.Long) => boolean; greaterThanOrEqual: (other: string | number | Long.Long) => boolean; gte: (other: string | number | Long.Long) => boolean; isEven: () => boolean; isNegative: () => boolean; isOdd: () => boolean; isPositive: () => boolean; isZero: () => boolean; lessThan: (other: string | number | Long.Long) => boolean; lt: (other: string | number | Long.Long) => boolean; lessThanOrEqual: (other: string | number | Long.Long) => boolean; lte: (other: string | number | Long.Long) => boolean; modulo: (other: string | number | Long.Long) => Long.Long; mod: (other: string | number | Long.Long) => Long.Long; multiply: (multiplier: string | number | Long.Long) => Long.Long; mul: (multiplier: string | number | Long.Long) => Long.Long; negate: () => Long.Long; neg: () => Long.Long; not: () => Long.Long; notEquals: (other: string | number | Long.Long) => boolean; neq: (other: string | number | Long.Long) => boolean; or: (other: string | number | Long.Long) => Long.Long; shiftLeft: (numBits: number | Long.Long) => Long.Long; shl: (numBits: number | Long.Long) => Long.Long; shiftRight: (numBits: number | Long.Long) => Long.Long; shr: (numBits: number | Long.Long) => Long.Long; shiftRightUnsigned: (numBits: number | Long.Long) => Long.Long; shru: (numBits: number | Long.Long) => Long.Long; subtract: (subtrahend: string | number | Long.Long) => Long.Long; sub: (subtrahend: string | number | Long.Long) => Long.Long; toInt: () => number; toNumber: () => number; toBytes: (le?: boolean | undefined) => number[]; toBytesLE: () => number[]; toBytesBE: () => number[]; toSigned: () => Long.Long; toString: (radix?: number | undefined) => string; toUnsigned: () => Long.Long; xor: (other: string | number | Long.Long) => Long.Long; } & { [K_5 in Exclude]: never; }) | undefined; } & { [K_6 in Exclude]: never; }>(base?: I | undefined): IdentifiedConnection; fromPartial]: never; }) | undefined; } & { [K_8 in Exclude]: never; })[] & { [K_9 in Exclude]: never; }) | undefined; state?: State | undefined; counterparty?: ({ clientId?: string | undefined; connectionId?: string | undefined; prefix?: { keyPrefix?: Uint8Array | undefined; } | undefined; } & { clientId?: string | undefined; connectionId?: string | undefined; prefix?: ({ keyPrefix?: Uint8Array | undefined; } & { keyPrefix?: Uint8Array | undefined; } & { [K_10 in Exclude]: never; }) | undefined; } & { [K_11 in Exclude]: never; }) | undefined; delayPeriod?: string | number | (Long.Long & { high: number; low: number; unsigned: boolean; add: (addend: string | number | Long.Long) => Long.Long; and: (other: string | number | Long.Long) => Long.Long; compare: (other: string | number | Long.Long) => number; comp: (other: string | number | Long.Long) => number; divide: (divisor: string | number | Long.Long) => Long.Long; div: (divisor: string | number | Long.Long) => Long.Long; equals: (other: string | number | Long.Long) => boolean; eq: (other: string | number | Long.Long) => boolean; getHighBits: () => number; getHighBitsUnsigned: () => number; getLowBits: () => number; getLowBitsUnsigned: () => number; getNumBitsAbs: () => number; greaterThan: (other: string | number | Long.Long) => boolean; gt: (other: string | number | Long.Long) => boolean; greaterThanOrEqual: (other: string | number | Long.Long) => boolean; gte: (other: string | number | Long.Long) => boolean; isEven: () => boolean; isNegative: () => boolean; isOdd: () => boolean; isPositive: () => boolean; isZero: () => boolean; lessThan: (other: string | number | Long.Long) => boolean; lt: (other: string | number | Long.Long) => boolean; lessThanOrEqual: (other: string | number | Long.Long) => boolean; lte: (other: string | number | Long.Long) => boolean; modulo: (other: string | number | Long.Long) => Long.Long; mod: (other: string | number | Long.Long) => Long.Long; multiply: (multiplier: string | number | Long.Long) => Long.Long; mul: (multiplier: string | number | Long.Long) => Long.Long; negate: () => Long.Long; neg: () => Long.Long; not: () => Long.Long; notEquals: (other: string | number | Long.Long) => boolean; neq: (other: string | number | Long.Long) => boolean; or: (other: string | number | Long.Long) => Long.Long; shiftLeft: (numBits: number | Long.Long) => Long.Long; shl: (numBits: number | Long.Long) => Long.Long; shiftRight: (numBits: number | Long.Long) => Long.Long; shr: (numBits: number | Long.Long) => Long.Long; shiftRightUnsigned: (numBits: number | Long.Long) => Long.Long; shru: (numBits: number | Long.Long) => Long.Long; subtract: (subtrahend: string | number | Long.Long) => Long.Long; sub: (subtrahend: string | number | Long.Long) => Long.Long; toInt: () => number; toNumber: () => number; toBytes: (le?: boolean | undefined) => number[]; toBytesLE: () => number[]; toBytesBE: () => number[]; toSigned: () => Long.Long; toString: (radix?: number | undefined) => string; toUnsigned: () => Long.Long; xor: (other: string | number | Long.Long) => Long.Long; } & { [K_12 in Exclude]: never; }) | undefined; } & { [K_13 in Exclude]: never; }>(object: I_1): IdentifiedConnection; }; export declare const Counterparty: { encode(message: Counterparty, writer?: _m0.Writer): _m0.Writer; decode(input: _m0.Reader | Uint8Array, length?: number | undefined): Counterparty; fromJSON(object: any): Counterparty; toJSON(message: Counterparty): unknown; create]: never; }) | undefined; } & { [K_1 in Exclude]: never; }>(base?: I | undefined): Counterparty; fromPartial]: never; }) | undefined; } & { [K_3 in Exclude]: never; }>(object: I_1): Counterparty; }; export declare const ClientPaths: { encode(message: ClientPaths, writer?: _m0.Writer): _m0.Writer; decode(input: _m0.Reader | Uint8Array, length?: number | undefined): ClientPaths; fromJSON(object: any): ClientPaths; toJSON(message: ClientPaths): unknown; create]: never; }) | undefined; } & { [K_1 in Exclude]: never; }>(base?: I | undefined): ClientPaths; fromPartial]: never; }) | undefined; } & { [K_3 in Exclude]: never; }>(object: I_1): ClientPaths; }; export declare const ConnectionPaths: { encode(message: ConnectionPaths, writer?: _m0.Writer): _m0.Writer; decode(input: _m0.Reader | Uint8Array, length?: number | undefined): ConnectionPaths; fromJSON(object: any): ConnectionPaths; toJSON(message: ConnectionPaths): unknown; create]: never; }) | undefined; } & { [K_1 in Exclude]: never; }>(base?: I | undefined): ConnectionPaths; fromPartial]: never; }) | undefined; } & { [K_3 in Exclude]: never; }>(object: I_1): ConnectionPaths; }; export declare const Version: { encode(message: Version, writer?: _m0.Writer): _m0.Writer; decode(input: _m0.Reader | Uint8Array, length?: number | undefined): Version; fromJSON(object: any): Version; toJSON(message: Version): unknown; create]: never; }) | undefined; } & { [K_1 in Exclude]: never; }>(base?: I | undefined): Version; fromPartial]: never; }) | undefined; } & { [K_3 in Exclude]: never; }>(object: I_1): Version; }; export declare const Params: { encode(message: Params, writer?: _m0.Writer): _m0.Writer; decode(input: _m0.Reader | Uint8Array, length?: number | undefined): Params; fromJSON(object: any): Params; toJSON(message: Params): unknown; create Long.Long; and: (other: string | number | Long.Long) => Long.Long; compare: (other: string | number | Long.Long) => number; comp: (other: string | number | Long.Long) => number; divide: (divisor: string | number | Long.Long) => Long.Long; div: (divisor: string | number | Long.Long) => Long.Long; equals: (other: string | number | Long.Long) => boolean; eq: (other: string | number | Long.Long) => boolean; getHighBits: () => number; getHighBitsUnsigned: () => number; getLowBits: () => number; getLowBitsUnsigned: () => number; getNumBitsAbs: () => number; greaterThan: (other: string | number | Long.Long) => boolean; gt: (other: string | number | Long.Long) => boolean; greaterThanOrEqual: (other: string | number | Long.Long) => boolean; gte: (other: string | number | Long.Long) => boolean; isEven: () => boolean; isNegative: () => boolean; isOdd: () => boolean; isPositive: () => boolean; isZero: () => boolean; lessThan: (other: string | number | Long.Long) => boolean; lt: (other: string | number | Long.Long) => boolean; lessThanOrEqual: (other: string | number | Long.Long) => boolean; lte: (other: string | number | Long.Long) => boolean; modulo: (other: string | number | Long.Long) => Long.Long; mod: (other: string | number | Long.Long) => Long.Long; multiply: (multiplier: string | number | Long.Long) => Long.Long; mul: (multiplier: string | number | Long.Long) => Long.Long; negate: () => Long.Long; neg: () => Long.Long; not: () => Long.Long; notEquals: (other: string | number | Long.Long) => boolean; neq: (other: string | number | Long.Long) => boolean; or: (other: string | number | Long.Long) => Long.Long; shiftLeft: (numBits: number | Long.Long) => Long.Long; shl: (numBits: number | Long.Long) => Long.Long; shiftRight: (numBits: number | Long.Long) => Long.Long; shr: (numBits: number | Long.Long) => Long.Long; shiftRightUnsigned: (numBits: number | Long.Long) => Long.Long; shru: (numBits: number | Long.Long) => Long.Long; subtract: (subtrahend: string | number | Long.Long) => Long.Long; sub: (subtrahend: string | number | Long.Long) => Long.Long; toInt: () => number; toNumber: () => number; toBytes: (le?: boolean | undefined) => number[]; toBytesLE: () => number[]; toBytesBE: () => number[]; toSigned: () => Long.Long; toString: (radix?: number | undefined) => string; toUnsigned: () => Long.Long; xor: (other: string | number | Long.Long) => Long.Long; } & { [K in Exclude]: never; }) | undefined; } & { [K_1 in Exclude]: never; }>(base?: I | undefined): Params; fromPartial Long.Long; and: (other: string | number | Long.Long) => Long.Long; compare: (other: string | number | Long.Long) => number; comp: (other: string | number | Long.Long) => number; divide: (divisor: string | number | Long.Long) => Long.Long; div: (divisor: string | number | Long.Long) => Long.Long; equals: (other: string | number | Long.Long) => boolean; eq: (other: string | number | Long.Long) => boolean; getHighBits: () => number; getHighBitsUnsigned: () => number; getLowBits: () => number; getLowBitsUnsigned: () => number; getNumBitsAbs: () => number; greaterThan: (other: string | number | Long.Long) => boolean; gt: (other: string | number | Long.Long) => boolean; greaterThanOrEqual: (other: string | number | Long.Long) => boolean; gte: (other: string | number | Long.Long) => boolean; isEven: () => boolean; isNegative: () => boolean; isOdd: () => boolean; isPositive: () => boolean; isZero: () => boolean; lessThan: (other: string | number | Long.Long) => boolean; lt: (other: string | number | Long.Long) => boolean; lessThanOrEqual: (other: string | number | Long.Long) => boolean; lte: (other: string | number | Long.Long) => boolean; modulo: (other: string | number | Long.Long) => Long.Long; mod: (other: string | number | Long.Long) => Long.Long; multiply: (multiplier: string | number | Long.Long) => Long.Long; mul: (multiplier: string | number | Long.Long) => Long.Long; negate: () => Long.Long; neg: () => Long.Long; not: () => Long.Long; notEquals: (other: string | number | Long.Long) => boolean; neq: (other: string | number | Long.Long) => boolean; or: (other: string | number | Long.Long) => Long.Long; shiftLeft: (numBits: number | Long.Long) => Long.Long; shl: (numBits: number | Long.Long) => Long.Long; shiftRight: (numBits: number | Long.Long) => Long.Long; shr: (numBits: number | Long.Long) => Long.Long; shiftRightUnsigned: (numBits: number | Long.Long) => Long.Long; shru: (numBits: number | Long.Long) => Long.Long; subtract: (subtrahend: string | number | Long.Long) => Long.Long; sub: (subtrahend: string | number | Long.Long) => Long.Long; toInt: () => number; toNumber: () => number; toBytes: (le?: boolean | undefined) => number[]; toBytesLE: () => number[]; toBytesBE: () => number[]; toSigned: () => Long.Long; toString: (radix?: number | undefined) => string; toUnsigned: () => Long.Long; xor: (other: string | number | Long.Long) => Long.Long; } & { [K_2 in Exclude]: never; }) | undefined; } & { [K_3 in Exclude]: never; }>(object: I_1): Params; }; declare type Builtin = Date | Function | Uint8Array | string | number | boolean | undefined; export declare type DeepPartial = T extends Builtin ? T : T extends Long ? string | number | Long : T extends Array ? Array> : T extends ReadonlyArray ? ReadonlyArray> : T extends {} ? { [K in keyof T]?: DeepPartial; } : Partial; declare type KeysOfUnion = T extends T ? keyof T : never; export declare type Exact = P extends Builtin ? P : P & { [K in keyof P]: Exact; } & { [K in Exclude>]: never; }; export {};