viem
Version:
48 lines • 2.59 kB
TypeScript
import type { Address } from 'abitype';
import type { KeyAuthorization } from 'ox/tempo';
import * as Selectors from './Selectors.js';
export type Selector = NonNullable<KeyAuthorization.Scope['selector']>;
export type Options = {
/** Recipient allowlist for selectors that support recipient restrictions. */
recipients?: readonly Address[] | undefined;
};
export type Scope<address extends Address = Address, selector extends Selector | undefined = Selector | undefined> = Omit<KeyAuthorization.Scope, 'address' | 'recipients' | 'selector'> & {
address: address;
recipients?: readonly Address[] | undefined;
selector?: selector | undefined;
};
export type Target<address extends Address = Address> = {
/** Allows any selector on the target. */
any: () => Scope<address, undefined>;
/** Allows calls matching the selector on the target. */
selector: <selector extends Selector>(selector: selector, options?: Options | undefined) => Scope<address, selector>;
};
export type SelectorMap = Record<string, Selector | Record<string, Selector>>;
export type Contract<address extends Address = Address, selectors extends SelectorMap = SelectorMap> = Target<address> & {
readonly [name in keyof selectors]: selectors[name] extends Selector ? (options?: Options | undefined) => Scope<address, selectors[name]> : selectors[name] extends Record<string, Selector> ? OverloadedSelector<address, selectors[name]> : never;
};
export type OverloadedSelector<address extends Address = Address, selectors extends Record<string, Selector> = Record<string, Selector>> = {
readonly [signature in keyof selectors]: (options?: Options | undefined) => Scope<address, selectors[signature]>;
} & {
selector: <signature extends keyof selectors>(signature: signature, options?: Options | undefined) => Scope<address, selectors[signature]>;
};
export type Tip20<address extends Address = Address> = Contract<address, typeof Selectors.tip20>;
/**
* Creates a call scope builder for an arbitrary target.
*
* @experimental
*/
export declare function target<address extends Address>(address: address): Target<address>;
/**
* Creates a typed call scope builder from a selector map.
*
* @experimental
*/
export declare function contract<address extends Address, selectors extends SelectorMap>(address: address, selectors: selectors): Contract<address, selectors>;
/**
* Creates a call scope builder for a TIP-20 token.
*
* @experimental
*/
export declare function tip20<address extends Address>(address: address): Tip20<address>;
//# sourceMappingURL=Scopes.d.ts.map