accounts
Version:
Tempo Accounts SDK
214 lines • 9.32 kB
TypeScript
import { Hex } from 'ox';
import { MultisigConfig } from 'ox/tempo';
import type { Address, Client } from 'viem';
import type { LocalAccount } from 'viem/accounts';
import * as Sponsorship from './sponsorship.js';
/** Default submission-claim TTL in milliseconds. */
export declare const defaultClaimTtl = 30000;
/** Returns whether a raw transaction carries a native multisig signature. */
export declare function isMultisigTransaction(serialized: Hex.Hex): boolean;
/** Handles a native multisig raw transaction submission. */
export declare function handleRawTransaction(options: handleRawTransaction.Options): Promise<handleRawTransaction.ReturnType>;
export declare namespace handleRawTransaction {
/** Options for handling a raw multisig transaction submission. */
type Options = collect.Options;
/** Raw transaction handler return value. */
type ReturnType = Hex.Hex | unknown;
}
declare function collect(options: collect.Options): Promise<collect.ReturnType>;
/** Resolves a multisig operation id for standard transaction lookup methods. */
export declare function handleGetTransaction(options: handleGetTransaction.Options): Promise<handleGetTransaction.ReturnType>;
export declare namespace handleGetTransaction {
/** Options for resolving a multisig operation id through transaction lookup methods. */
type Options = {
/** Client resolver keyed by transaction `chainId`. */
getClient: (chainId?: number | undefined) => Client;
/** Standard transaction lookup method to handle. */
method: 'eth_getTransactionByHash' | 'eth_getTransactionReceipt';
/** Incoming JSON-RPC request. */
request: {
params?: readonly unknown[] | undefined;
};
/** Pending multisig operation store. */
store: Store;
};
/** Transaction lookup result wrapper. */
type ReturnType = {
result: unknown;
} | undefined;
}
declare namespace collect {
type Options = {
/** Submission claim TTL in milliseconds. @default 30000 */
claimTtl?: number | undefined;
/** How to broadcast once quorum is met. @default 'sync' */
finalize?: 'submitted' | 'sync' | undefined;
/** Client resolver keyed by transaction `chainId`. */
getClient: (chainId?: number | undefined) => Client;
/** Raw transaction method to handle. */
method: 'eth_sendRawTransaction' | 'eth_sendRawTransactionSync';
/** Incoming JSON-RPC request. */
request: {
params?: readonly unknown[] | undefined;
};
/** Resolves the genesis multisig config for quorum checks. */
resolveConfig?: ResolveConfig | undefined;
/** Optional fee payer used to sponsor finalized multisig transactions. */
sponsor?: Sponsor | undefined;
/** Pending multisig operation store. */
store: Store;
};
type ReturnType = {
/** Raw broadcast result once quorum is met and this caller claimed submission. */
broadcastResult?: unknown;
/** Structured operation claim status. */
status: ClaimSubmissionResult | {
operation: Operation;
status: 'claimed';
};
};
}
/** Returns a stored native multisig operation status. */
export declare function getStatus(options: getStatus.Options): Promise<Status | null>;
export declare namespace getStatus {
/** Options for reading one multisig operation status. */
type Options = {
/** Operation id returned by a pending multisig submission. */
id: Hex.Hex;
/** Resolves the genesis multisig config for quorum status. */
resolveConfig?: ResolveConfig | undefined;
/** Pending multisig operation store. */
store: Store;
};
}
/** Returns pending native multisig operation statuses for an account. */
export declare function listStatuses(options: listStatuses.Options): Promise<readonly Status[]>;
export declare namespace listStatuses {
/** Options for listing multisig operation statuses. */
type Options = {
/** Native multisig account address. */
account: Address;
/** Resolves the genesis multisig config for quorum status. */
resolveConfig?: ResolveConfig | undefined;
/** Pending multisig operation store. */
store: Store;
};
}
/** Creates an in-memory multisig operation store for development and tests only. */
export declare function memoryStore(): Store;
/** Native multisig relay options. */
export type Options = {
/** Submission claim TTL in milliseconds. @default 30000 */
claimTtl?: number | undefined;
/** How to broadcast once quorum is met. @default 'sync' */
finalize?: 'submitted' | 'sync' | undefined;
/** Resolves the genesis multisig config for quorum checks. */
resolveConfig?: ResolveConfig | undefined;
/** Pending multisig operation store. */
store: Store;
};
/** Resolves the genesis multisig config for quorum checks. */
export type ResolveConfig = (request: {
/** Native multisig account address. */
account: Address;
/** Transaction chain id. */
chainId: number;
/** Bootstrap config carried by the transaction, when present. */
init?: MultisigConfig.Config | undefined;
}) => MultisigConfig.Config | Promise<MultisigConfig.Config | undefined> | undefined;
/** Optional fee payer used to sponsor finalized multisig transactions. */
export type Sponsor = {
/** Account used as the fee payer. */
account: LocalAccount;
/** Fee token to set before fee payer signing. */
feeToken?: Address | undefined;
/** Resolves the default fee token for raw sponsorship. */
resolveFeeToken?: ((chainId: number) => Address | Promise<Address | undefined> | undefined) | undefined;
/** Optional sponsorship approval callback. */
validate?: Sponsorship.handleRawTransaction.Options['validate'];
};
/** Storage for native multisig operation approvals and submission claims. */
export type Store = {
/** Atomically claims submission for a quorum-ready operation. Only a `claimed` result may broadcast. */
claimSubmission: (operation: Operation, options: claimSubmission.Options) => Promise<ClaimSubmissionResult>;
/** Reads a stored operation. */
get: (id: Hex.Hex) => Promise<Operation | undefined>;
/** Lists non-submitted operations for a native multisig account address. */
listPendingByAddress: (address: Address) => Promise<readonly Operation[]>;
/** Saves a pending operation, preserving already-stored approvals. */
savePending: (operation: Operation) => Promise<Operation>;
/** Marks a claimed operation submitted with its real transaction hash. */
setSubmitted: (id: Hex.Hex, submittedHash: Hex.Hex) => Promise<Operation>;
};
/** `Store.claimSubmission` types. */
export declare namespace claimSubmission {
/** Options for claiming submission. */
type Options = {
/** Claim TTL in milliseconds. */
ttl: number;
};
}
/** Result of atomically claiming a multisig operation for submission. */
export type ClaimSubmissionResult = {
/** Operation this caller may broadcast. */
operation: Operation;
/** Claim status. */
status: 'claimed';
} | {
/** Current stored operation. */
operation: Operation;
/** Current non-claimed status. */
status: 'pending' | 'submitting' | 'submitted';
};
/** Stored native multisig operation. */
export type Operation = {
/** Native multisig account address. */
account: Address;
/** Transaction chain id. */
chainId: number;
/** Submission claim expiry timestamp in milliseconds. */
claimExpiresAt?: number | undefined;
/** Resolved genesis config used for approval checks. */
config?: MultisigConfig.Config | undefined;
/** Creation timestamp in milliseconds. */
createdAt: number;
/** Deterministic operation id. */
id: Hex.Hex;
/** Whether the finalized transaction must carry the genesis init config. */
init?: boolean | undefined;
/** Genesis init config to attach when finalizing a bootstrap transaction. */
initConfig?: MultisigConfig.Config | undefined;
/** Unsigned Tempo transaction sign payload. */
payload: Hex.Hex;
/** Collected owner approval signatures. */
signatures: readonly Hex.Hex[];
/** Operation state. */
status: 'pending' | 'submitting' | 'submitted';
/** Transaction hash once submitted. */
submittedHash?: Hex.Hex | undefined;
/** Last submitted serialized transaction carrying this operation. */
transaction: Hex.Hex;
/** Last update timestamp in milliseconds. */
updatedAt: number;
};
/** Native multisig operation status. */
export type Status = {
/** Native multisig account address. */
account: Address;
/** Transaction chain id. */
chainId: number;
/** Deterministic operation id. */
id: Hex.Hex;
/** Number of collected owner approvals. */
signatures: number;
/** Operation state. */
status: Operation['status'];
/** Submitted transaction hash. */
submittedHash?: Hex.Hex | undefined;
/** Required owner weight. */
threshold?: number | undefined;
/** Collected owner weight. */
weight?: number | undefined;
};
export {};
//# sourceMappingURL=multisig.d.ts.map