viem
Version:
289 lines • 11.3 kB
TypeScript
import * as Address from 'ox/Address';
import * as Hex from 'ox/Hex';
import * as PublicKey from 'ox/PublicKey';
import { Channel, KeyAuthorization, SignatureEnvelope } from 'ox/tempo';
import * as WebAuthnP256 from 'ox/WebAuthnP256';
import * as WebCryptoP256 from 'ox/WebCryptoP256';
import type { LocalAccount, Account as viem_Account } from '../accounts/types.js';
import type { TransactionSerializable } from '../types/transaction.js';
import type { OneOf, RequiredBy } from '../types/utils.js';
import type { SerializeTransactionFn } from '../utils/transaction/serializeTransaction.js';
import * as Transaction from './Transaction.js';
export type Account_base<source extends string = string> = RequiredBy<LocalAccount<source>, 'sign' | 'signAuthorization' | 'signTransaction'> & {
/** Key type. */
keyType: SignatureEnvelope.Type;
/** Sign fn. */
sign: NonNullable<LocalAccount['sign']>;
/** Sign transaction fn. */
signTransaction: <serializer extends SerializeTransactionFn<TransactionSerializable> = SerializeTransactionFn<Transaction.TransactionSerializableTempo>, transaction extends Parameters<serializer>[0] = Parameters<serializer>[0]>(transaction: transaction, options?: {
serializer?: serializer | undefined;
} | undefined) => Promise<Hex.Hex>;
/** Sign voucher fn. */
signVoucher: (parameters: signVoucher.Parameters) => Promise<signVoucher.ReturnValue>;
};
export type RootAccount = Account_base<'root'> & {
/** Sign key authorization. */
signKeyAuthorization: (key: resolveAccessKey.Parameters, parameters: Pick<KeyAuthorization.KeyAuthorization, 'chainId' | 'expiry' | 'limits' | 'scopes'>) => Promise<KeyAuthorization.Signed>;
};
export type AccessKeyAccount = Account_base<'accessKey'> & {
/** Access key ID. */
accessKeyAddress: Address.Address;
/**
* Signs a hash.
*
* By default, access key accounts sign through a keychain envelope so the
* signature authorizes the parent account.
*
* Set `raw` to `true` to sign directly with the access key, without keychain
* hashing or keychain enveloping.
*/
sign: (parameters: {
/** Hash to sign. */
hash: Hex.Hex;
/** Sign directly with the access key, without keychain hashing or enveloping. */
raw?: boolean | undefined;
}) => Promise<Hex.Hex>;
};
export type Account = OneOf<RootAccount | AccessKeyAccount>;
/** Instantiates an Account. */
export declare function from<const parameters extends from.Parameters>(parameters: parameters | from.Parameters): from.ReturnValue<parameters>;
export declare namespace from {
type Parameters = OneOf<fromRoot.Parameters | fromAccessKey.Parameters>;
type ReturnValue<parameters extends {
access?: fromAccessKey.Parameters['access'] | undefined;
} = {
access?: fromAccessKey.Parameters['access'] | undefined;
}> = parameters extends {
access: fromAccessKey.Parameters['access'];
} ? AccessKeyAccount : RootAccount;
}
/**
* Instantiates an Account from a headless WebAuthn credential (P256 private key).
*
* @example
* ```ts
* import { Account } from 'viem/tempo'
*
* const account = Account.fromHeadlessWebAuthn('0x...')
* ```
*
* @param privateKey P256 private key.
* @returns Account.
*/
export declare function fromHeadlessWebAuthn<const options extends fromHeadlessWebAuthn.Options>(privateKey: Hex.Hex, options: options | fromHeadlessWebAuthn.Options): fromHeadlessWebAuthn.ReturnValue<options>;
export declare namespace fromHeadlessWebAuthn {
type Options = Omit<WebAuthnP256.getSignPayload.Options, 'challenge' | 'rpId' | 'origin'> & Pick<from.Parameters, 'access' | 'internal_version'> & {
rpId: string;
origin: string;
};
type ReturnValue<options extends Options = Options> = from.ReturnValue<options>;
}
/**
* Instantiates an Account from a P256 private key.
*
* @example
* ```ts
* import { Account } from 'viem/tempo'
*
* const account = Account.fromP256('0x...')
* ```
*
* @param privateKey P256 private key.
* @returns Account.
*/
export declare function fromP256<const options extends fromP256.Options>(privateKey: Hex.Hex, options?: options | fromP256.Options): fromP256.ReturnValue<options>;
export declare namespace fromP256 {
type Options = Pick<from.Parameters, 'access' | 'internal_version'>;
type ReturnValue<options extends Options = Options> = from.ReturnValue<options>;
}
/**
* Instantiates an Account from a Secp256k1 private key.
*
* @example
* ```ts
* import { Account } from 'viem/tempo'
*
* const account = Account.fromSecp256k1('0x...')
* ```
*
* @param privateKey Secp256k1 private key.
* @returns Account.
*/
export declare function fromSecp256k1<const options extends fromSecp256k1.Options>(privateKey: Hex.Hex, options?: options | fromSecp256k1.Options): fromSecp256k1.ReturnValue<options>;
export declare namespace fromSecp256k1 {
type Options = Pick<from.Parameters, 'access' | 'internal_version'>;
type ReturnValue<options extends Options = Options> = from.ReturnValue<options>;
}
/**
* Instantiates an Account from a WebAuthn credential.
*
* @example
*
* ### Create Passkey + Instantiate Account
*
* Create a credential with `WebAuthnP256.createCredential` and then instantiate
* a Viem Account with `Account.fromWebAuthnP256`.
*
* It is highly recommended to store the credential's public key in an external store
* for future use (ie. for future calls to `WebAuthnP256.getCredential`).
*
* ```ts
* import { Account, WebAuthnP256 } from 'viem/tempo'
* import { publicKeyStore } from './store'
*
* // 1. Create credential
* const credential = await WebAuthnP256.createCredential({ name: 'Example' })
*
* // 2. Instantiate account
* const account = Account.fromWebAuthnP256(credential)
*
* // 3. Store public key
* await publicKeyStore.set(credential.id, credential.publicKey)
*
* ```
*
* @example
*
* ### Get Credential + Instantiate Account
*
* Gets a credential from `WebAuthnP256.getCredential` and then instantiates
* an account with `Account.fromWebAuthnP256`.
*
* The `getPublicKey` function is required to fetch the public key paired with the credential
* from an external store. The public key is required to derive the account's address.
*
* ```ts
* import { Account, WebAuthnP256 } from 'viem/tempo'
* import { publicKeyStore } from './store'
*
* // 1. Get credential
* const credential = await WebAuthnP256.getCredential({
* async getPublicKey(credential) {
* // 2. Get public key from external store.
* return await publicKeyStore.get(credential.id)
* }
* })
*
* // 3. Instantiate account
* const account = Account.fromWebAuthnP256(credential)
* ```
*
* @param credential WebAuthnP256 credential.
* @returns Account.
*/
export declare function fromWebAuthnP256(credential: fromWebAuthnP256.Credential, options?: fromWebAuthnP256.Options): fromWebAuthnP256.ReturnValue;
export declare namespace fromWebAuthnP256 {
type Credential = {
id: WebAuthnP256.P256Credential['id'];
publicKey: Hex.Hex;
};
type Options = {
getFn?: WebAuthnP256.sign.Options['getFn'] | undefined;
rpId?: WebAuthnP256.sign.Options['rpId'] | undefined;
};
type ReturnValue = from.ReturnValue;
}
/**
* Instantiates an Account from a P256 private key.
*
* @example
* ```ts
* import { Account } from 'viem/tempo'
* import { WebCryptoP256 } from 'ox'
*
* const keyPair = await WebCryptoP256.createKeyPair()
*
* const account = Account.fromWebCryptoP256(keyPair)
* ```
*
* @param keyPair WebCryptoP256 key pair.
* @returns Account.
*/
export declare function fromWebCryptoP256<const options extends fromWebCryptoP256.Options>(keyPair: Awaited<ReturnType<typeof WebCryptoP256.createKeyPair>>, options?: options | fromWebCryptoP256.Options): fromWebCryptoP256.ReturnValue<options>;
export declare namespace fromWebCryptoP256 {
type Options = Pick<from.Parameters, 'access' | 'internal_version'>;
type ReturnValue<options extends Options = Options> = from.ReturnValue<options>;
}
export declare function signVoucher(account: LocalAccount, parameters: signVoucher.Parameters): Promise<signVoucher.ReturnValue>;
export declare namespace signVoucher {
type Parameters = {
/** Chain ID. */
chainId: number | bigint;
/** Channel descriptor or ID. */
channel: Channel.computeId.Channel | Hex.Hex;
/** Total voucher amount signed for the channel. */
cumulativeAmount: bigint;
};
type ReturnValue = Hex.Hex;
}
export declare function signKeyAuthorization(account: LocalAccount, parameters: signKeyAuthorization.Parameters): Promise<signKeyAuthorization.ReturnValue>;
export declare namespace signKeyAuthorization {
type Parameters = Pick<KeyAuthorization.KeyAuthorization, 'chainId' | 'expiry' | 'limits' | 'scopes'> & {
key: resolveAccessKey.Parameters;
};
type ReturnValue = KeyAuthorization.Signed;
}
/** @internal */
declare function fromBase(parameters: fromBase.Parameters): Account_base;
declare namespace fromBase {
type Parameters = {
/** Parent address. */
parentAddress?: Address.Address | undefined;
/** Public key. */
publicKey: PublicKey.PublicKey;
/** Key type. */
keyType?: SignatureEnvelope.Type | undefined;
/** Sign function. */
sign: NonNullable<LocalAccount['sign']>;
/** Source. */
source?: string | undefined;
/** Access key version. Will be removed in a future release. @deprecated @internal */
internal_version?: 'v1' | 'v2' | undefined;
};
type ReturnValue = Account_base;
}
/** @internal */
declare function fromRoot(parameters: fromRoot.Parameters): RootAccount;
declare namespace fromRoot {
type Parameters = fromBase.Parameters;
type ReturnValue = RootAccount;
}
declare function fromAccessKey(parameters: fromAccessKey.Parameters): AccessKeyAccount;
declare namespace fromAccessKey {
type Parameters = fromBase.Parameters & {
/**
* Parent account to access.
* If defined, this account will act as an "access key", and use
* the parent account's address as the keychain address.
*/
access: viem_Account | Address.Address;
};
type ReturnValue = AccessKeyAccount;
}
/** @internal */
export declare function resolveAccessKey(accessKey: resolveAccessKey.Parameters): resolveAccessKey.ReturnType;
export declare namespace resolveAccessKey {
type Parameters = Pick<AccessKeyAccount, 'accessKeyAddress' | 'keyType'> | OneOf<{
/** Access key address. */
address: Address.Address;
/** Key type. */
type: SignatureEnvelope.Type;
} | {
/** Access key public key. */
publicKey: Hex.Hex;
/** Key type. */
type: SignatureEnvelope.Type;
}>;
type ReturnType = {
accessKeyAddress: Address.Address;
keyType: SignatureEnvelope.Type;
};
}
export {
/** @deprecated */
KeyAuthorization as z_KeyAuthorization,
/** @deprecated */
SignatureEnvelope as z_SignatureEnvelope,
/** @deprecated */
TxEnvelopeTempo as z_TxEnvelopeTempo, } from 'ox/tempo';
//# sourceMappingURL=Account.d.ts.map