import type { Observable } from 'rxjs'; import type { AccountId, Address, ApplyExtrinsicResult, BlockNumber, Call, DispatchError, DispatchInfo, EventRecord, Extrinsic, ExtrinsicStatus, Hash, RuntimeDispatchInfo } from '@polkadot/types/interfaces'; import type { AnyFunction, AnyNumber, AnyTuple, AnyU8a, Callback, CallBase, Codec, IExtrinsicEra, IKeyringPair, ISubmittableResult, Signer } from '@polkadot/types/types'; import type { ApiTypes, EmptyBase, PromiseOrObs } from './base.js'; export type AugmentedSubmittable = T & CallBase; export type AddressOrPair = IKeyringPair | string | AccountId | Address; export interface SignerOptions { blockHash: Uint8Array | string; era?: IExtrinsicEra | number; nonce: AnyNumber | Codec; signer?: Signer; tip?: AnyNumber; assetId?: AnyNumber | object; mode?: AnyNumber; metadataHash?: AnyU8a; withSignedTransaction?: boolean; } export type SubmittableDryRunResult = ApiType extends 'rxjs' ? Observable : Promise; export type SubmittableResultResult = ApiType extends 'rxjs' ? Observable : Promise; export type SubmittableResultSubscription = ApiType extends 'rxjs' ? Observable : Promise<() => void>; export type SubmittablePaymentResult = ApiType extends 'rxjs' ? Observable : Promise; export interface SubmittableResultValue { dispatchError?: DispatchError | undefined; dispatchInfo?: DispatchInfo | undefined; events?: EventRecord[]; internalError?: Error | undefined; status: ExtrinsicStatus; txHash: Hash; txIndex?: number | undefined; blockNumber?: BlockNumber; } export interface SubmittableExtrinsic extends Extrinsic { /** true if api.rpc.system.dryRun is available, enabling dryRun(...) */ hasDryRun: boolean; /** true if api.call.transactionPaymentApi.queryInfo is available, enabling paymentInfo(...) */ hasPaymentInfo: boolean; dryRun(account: AddressOrPair, options?: Partial): SubmittableDryRunResult; paymentInfo(account: AddressOrPair, options?: Partial): SubmittablePaymentResult; send(): SubmittableResultResult; send(statusCb: Callback): SubmittableResultSubscription; /** * @description Sign the constructed transaction asynchronously. * * The result is a signed extrinsic that is ready to be broadcast to the network via `.send()`, `rpc.author.submitExtrinsic()`, or * any custom submission logic. */ signAsync(account: AddressOrPair, _options?: Partial): PromiseOrObs; /** * @description Sign and broadcast the constructued transaction. * * Note for injected signers: * As of v12.0.1 and up the `SignerResult` return type for `signPayload` allows for the `signedTransaction` field. * This allows the signer to input a signed transaction that will be directly broadcasted. This * bypasses the api adding the signature to the payload. The api will ensure that the Call Data is not changed before it broadcasts the * transaction. This allows for the signer to modify the payload to add things like `mode`, and `metadataHash` for * signedExtensions such as `CheckMetadataHash`. */ signAndSend(account: AddressOrPair, options?: Partial): SubmittableResultResult; signAndSend(account: AddressOrPair, statusCb: Callback): SubmittableResultSubscription; signAndSend(account: AddressOrPair, options: Partial, statusCb?: Callback): SubmittableResultSubscription; withResultTransform(transform: (input: ISubmittableResult) => ISubmittableResult): this; } export interface SubmittableExtrinsicFunction extends CallBase { (...params: any[]): SubmittableExtrinsic; } export interface AugmentedSubmittables extends EmptyBase { } export interface SubmittableExtrinsics extends AugmentedSubmittables { (extrinsic: Call | Extrinsic | Uint8Array | string): SubmittableExtrinsic; [key: string]: SubmittableModuleExtrinsics; } export type SubmittableModuleExtrinsics = Record>;