import type { Account, BaseErrorType } from 'viem' import { Actions } from 'viem/tempo' import { getConnectorClient } from '../../actions/getConnectorClient.js' import type { Config } from '../../createConfig.js' import type { ChainIdParameter, ConnectorParameter, } from '../../types/properties.js' import type { UnionLooseOmit } from '../../types/utils.js' import type { QueryOptions, QueryParameter } from './utils.js' /** * Creates a new policy. * * @example * ```ts * import { createConfig, http } from '@wagmi/core' * import { tempo } from '@wagmi/core/chains' * import { Actions } from '@wagmi/core/tempo' * * const config = createConfig({ * chains: [tempoModerato], * transports: { * [tempo.id]: http(), * }, * }) * * const hash = await Actions.policy.create(config, { * type: 'whitelist', * }) * ``` * * @param config - Config. * @param parameters - Parameters. * @returns Transaction hash. */ export async function create( config: config, parameters: create.Parameters, ): Promise { const { account, chainId, connector } = parameters const client = await getConnectorClient(config, { account, assertChainId: false, chainId, connector, }) return Actions.policy.create(client, parameters as never) } export declare namespace create { export type Parameters = ChainIdParameter & ConnectorParameter & UnionLooseOmit< Actions.policy.create.Parameters, 'chain' | 'admin' > export type ReturnValue = Actions.policy.create.ReturnValue export type ErrorType = BaseErrorType // TODO: Actions.policy.create.ErrorType } /** * Creates a new policy. * * Note: This is a synchronous action that waits for the transaction to * be included on a block before returning a response. * * @example * ```ts * import { createConfig, http } from '@wagmi/core' * import { tempo } from '@wagmi/core/chains' * import { Actions } from '@wagmi/core/tempo' * * const config = createConfig({ * chains: [tempoModerato], * transports: { * [tempo.id]: http(), * }, * }) * * const result = await Actions.policy.createSync(config, { * type: 'whitelist', * }) * ``` * * @param config - Config. * @param parameters - Parameters. * @returns The transaction receipt and event data. */ export async function createSync( config: config, parameters: createSync.Parameters, ): Promise { const { account, chainId, connector } = parameters const client = await getConnectorClient(config, { account, assertChainId: false, chainId, connector, }) return Actions.policy.createSync(client, parameters as never) } export declare namespace createSync { export type Parameters = ChainIdParameter & ConnectorParameter & UnionLooseOmit< Actions.policy.createSync.Parameters, 'chain' | 'admin' > export type ReturnValue = Actions.policy.createSync.ReturnValue export type ErrorType = BaseErrorType // TODO: Actions.policy.createSync.ErrorType } /** * Sets the admin for a policy. * * @example * ```ts * import { createConfig, http } from '@wagmi/core' * import { tempo } from '@wagmi/core/chains' * import { Actions } from '@wagmi/core/tempo' * * const config = createConfig({ * chains: [tempoModerato], * transports: { * [tempo.id]: http(), * }, * }) * * const hash = await Actions.policy.setAdmin(config, { * policyId: 2n, * admin: '0x...', * }) * ``` * * @param config - Config. * @param parameters - Parameters. * @returns Transaction hash. */ export async function setAdmin( config: config, parameters: setAdmin.Parameters, ): Promise { const { account, chainId, connector } = parameters const client = await getConnectorClient(config, { account, assertChainId: false, chainId, connector, }) return Actions.policy.setAdmin(client, parameters as never) } export declare namespace setAdmin { export type Parameters = ChainIdParameter & ConnectorParameter & UnionLooseOmit< Actions.policy.setAdmin.Parameters, 'chain' > export type ReturnValue = Actions.policy.setAdmin.ReturnValue export type ErrorType = BaseErrorType // TODO: Actions.policy.setAdmin.ErrorType } /** * Sets the admin for a policy. * * Note: This is a synchronous action that waits for the transaction to * be included on a block before returning a response. * * @example * ```ts * import { createConfig, http } from '@wagmi/core' * import { tempo } from '@wagmi/core/chains' * import { Actions } from '@wagmi/core/tempo' * * const config = createConfig({ * chains: [tempoModerato], * transports: { * [tempo.id]: http(), * }, * }) * * const result = await Actions.policy.setAdminSync(config, { * policyId: 2n, * admin: '0x...', * }) * ``` * * @param config - Config. * @param parameters - Parameters. * @returns The transaction receipt and event data. */ export async function setAdminSync( config: config, parameters: setAdminSync.Parameters, ): Promise { const { account, chainId, connector } = parameters const client = await getConnectorClient(config, { account, assertChainId: false, chainId, connector, }) return Actions.policy.setAdminSync(client, parameters as never) } export declare namespace setAdminSync { export type Parameters = ChainIdParameter & ConnectorParameter & UnionLooseOmit< Actions.policy.setAdminSync.Parameters, 'chain' > export type ReturnValue = Actions.policy.setAdminSync.ReturnValue export type ErrorType = BaseErrorType // TODO: Actions.policy.setAdminSync.ErrorType } /** * Modifies a policy whitelist. * * @example * ```ts * import { createConfig, http } from '@wagmi/core' * import { tempo } from '@wagmi/core/chains' * import { Actions } from '@wagmi/core/tempo' * * const config = createConfig({ * chains: [tempoModerato], * transports: { * [tempo.id]: http(), * }, * }) * * const hash = await Actions.policy.modifyWhitelist(config, { * policyId: 2n, * address: '0x...', * allowed: true, * }) * ``` * * @param config - Config. * @param parameters - Parameters. * @returns Transaction hash. */ export async function modifyWhitelist( config: config, parameters: modifyWhitelist.Parameters, ): Promise { const { account, chainId, connector } = parameters const client = await getConnectorClient(config, { account, assertChainId: false, chainId, connector, }) return Actions.policy.modifyWhitelist(client, parameters as never) } export declare namespace modifyWhitelist { export type Parameters = ChainIdParameter & ConnectorParameter & UnionLooseOmit< Actions.policy.modifyWhitelist.Parameters< config['chains'][number], Account >, 'chain' > export type ReturnValue = Actions.policy.modifyWhitelist.ReturnValue export type ErrorType = BaseErrorType // TODO: Actions.policy.modifyWhitelist.ErrorType } /** * Modifies a policy whitelist. * * Note: This is a synchronous action that waits for the transaction to * be included on a block before returning a response. * * @example * ```ts * import { createConfig, http } from '@wagmi/core' * import { tempo } from '@wagmi/core/chains' * import { Actions } from '@wagmi/core/tempo' * * const config = createConfig({ * chains: [tempoModerato], * transports: { * [tempo.id]: http(), * }, * }) * * const result = await Actions.policy.modifyWhitelistSync(config, { * policyId: 2n, * address: '0x...', * allowed: true, * }) * ``` * * @param config - Config. * @param parameters - Parameters. * @returns The transaction receipt and event data. */ export async function modifyWhitelistSync( config: config, parameters: modifyWhitelistSync.Parameters, ): Promise { const { account, chainId, connector } = parameters const client = await getConnectorClient(config, { account, assertChainId: false, chainId, connector, }) return Actions.policy.modifyWhitelistSync(client, parameters as never) } export declare namespace modifyWhitelistSync { export type Parameters = ChainIdParameter & ConnectorParameter & UnionLooseOmit< Actions.policy.modifyWhitelistSync.Parameters< config['chains'][number], Account >, 'chain' > export type ReturnValue = Actions.policy.modifyWhitelistSync.ReturnValue export type ErrorType = BaseErrorType // TODO: Actions.policy.modifyWhitelistSync.ErrorType } /** * Modifies a policy blacklist. * * @example * ```ts * import { createConfig, http } from '@wagmi/core' * import { tempo } from '@wagmi/core/chains' * import { Actions } from '@wagmi/core/tempo' * * const config = createConfig({ * chains: [tempoModerato], * transports: { * [tempo.id]: http(), * }, * }) * * const hash = await Actions.policy.modifyBlacklist(config, { * policyId: 2n, * address: '0x...', * restricted: true, * }) * ``` * * @param config - Config. * @param parameters - Parameters. * @returns Transaction hash. */ export async function modifyBlacklist( config: config, parameters: modifyBlacklist.Parameters, ): Promise { const { account, chainId, connector } = parameters const client = await getConnectorClient(config, { account, assertChainId: false, chainId, connector, }) return Actions.policy.modifyBlacklist(client, parameters as never) } export declare namespace modifyBlacklist { export type Parameters = ChainIdParameter & ConnectorParameter & UnionLooseOmit< Actions.policy.modifyBlacklist.Parameters< config['chains'][number], Account >, 'chain' > export type ReturnValue = Actions.policy.modifyBlacklist.ReturnValue export type ErrorType = BaseErrorType // TODO: Actions.policy.modifyBlacklist.ErrorType } /** * Modifies a policy blacklist. * * Note: This is a synchronous action that waits for the transaction to * be included on a block before returning a response. * * @example * ```ts * import { createConfig, http } from '@wagmi/core' * import { tempo } from '@wagmi/core/chains' * import { Actions } from '@wagmi/core/tempo' * * const config = createConfig({ * chains: [tempoModerato], * transports: { * [tempo.id]: http(), * }, * }) * * const result = await Actions.policy.modifyBlacklistSync(config, { * policyId: 2n, * address: '0x...', * restricted: true, * }) * ``` * * @param config - Config. * @param parameters - Parameters. * @returns The transaction receipt and event data. */ export async function modifyBlacklistSync( config: config, parameters: modifyBlacklistSync.Parameters, ): Promise { const { account, chainId, connector } = parameters const client = await getConnectorClient(config, { account, assertChainId: false, chainId, connector, }) return Actions.policy.modifyBlacklistSync(client, parameters as never) } export declare namespace modifyBlacklistSync { export type Parameters = ChainIdParameter & ConnectorParameter & UnionLooseOmit< Actions.policy.modifyBlacklistSync.Parameters< config['chains'][number], Account >, 'chain' > export type ReturnValue = Actions.policy.modifyBlacklistSync.ReturnValue export type ErrorType = BaseErrorType // TODO: Actions.policy.modifyBlacklistSync.ErrorType } /** * Gets policy data. * * @example * ```ts * import { createConfig, http } from '@wagmi/core' * import { tempo } from '@wagmi/core/chains' * import { Actions } from '@wagmi/core/tempo' * * const config = createConfig({ * chains: [tempoModerato], * transports: { * [tempo.id]: http(), * }, * }) * * const data = await Actions.policy.getData(config, { * policyId: 2n, * }) * ``` * * @param config - Config. * @param parameters - Parameters. * @returns The policy data. */ export function getData( config: config, parameters: getData.Parameters, ): Promise { const { chainId, ...rest } = parameters const client = config.getClient({ chainId }) return Actions.policy.getData(client, rest) } export namespace getData { export type Parameters = ChainIdParameter & Actions.policy.getData.Parameters export type ReturnValue = Actions.policy.getData.ReturnValue export type ErrorType = BaseErrorType export function queryKey( parameters: Parameters, ) { return ['getData', parameters] as const } export type QueryKey = ReturnType< typeof queryKey > export function queryOptions( config: Config, parameters: queryOptions.Parameters, ): queryOptions.ReturnValue { const { query, ...rest } = parameters return { ...query, enabled: Boolean(rest.policyId !== undefined && (query?.enabled ?? true)), queryKey: queryKey(rest), async queryFn({ queryKey }) { const [, parameters] = queryKey return await getData(config, parameters) }, } } export declare namespace queryOptions { export type Parameters< config extends Config, selectData = getData.ReturnValue, > = getData.Parameters & QueryParameter< getData.ReturnValue, getData.ErrorType, selectData, getData.QueryKey > export type ReturnValue< config extends Config, selectData = getData.ReturnValue, > = QueryOptions< getData.ReturnValue, getData.ErrorType, selectData, getData.QueryKey > } } /** * Checks if a user is authorized by a policy. * * @example * ```ts * import { createConfig, http } from '@wagmi/core' * import { tempo } from '@wagmi/core/chains' * import { Actions } from '@wagmi/core/tempo' * * const config = createConfig({ * chains: [tempoModerato], * transports: { * [tempo.id]: http(), * }, * }) * * const authorized = await Actions.policy.isAuthorized(config, { * policyId: 2n, * user: '0x...', * }) * ``` * * @param config - Config. * @param parameters - Parameters. * @returns Whether the user is authorized. */ export function isAuthorized( config: config, parameters: isAuthorized.Parameters, ): Promise { const { chainId, ...rest } = parameters const client = config.getClient({ chainId }) return Actions.policy.isAuthorized(client, rest) } export namespace isAuthorized { export type Parameters = ChainIdParameter & Actions.policy.isAuthorized.Parameters export type ReturnValue = Actions.policy.isAuthorized.ReturnValue export type ErrorType = BaseErrorType export function queryKey( parameters: Parameters, ) { return ['isAuthorized', parameters] as const } export type QueryKey = ReturnType< typeof queryKey > export function queryOptions( config: Config, parameters: queryOptions.Parameters, ): queryOptions.ReturnValue { const { query, ...rest } = parameters return { ...query, enabled: Boolean( rest.policyId !== undefined && rest.user && (query?.enabled ?? true), ), queryKey: queryKey(rest), async queryFn({ queryKey }) { const [, parameters] = queryKey return await isAuthorized(config, parameters) }, } } export declare namespace queryOptions { export type Parameters< config extends Config, selectData = isAuthorized.ReturnValue, > = isAuthorized.Parameters & QueryParameter< isAuthorized.ReturnValue, isAuthorized.ErrorType, selectData, isAuthorized.QueryKey > export type ReturnValue< config extends Config, selectData = isAuthorized.ReturnValue, > = QueryOptions< isAuthorized.ReturnValue, isAuthorized.ErrorType, selectData, isAuthorized.QueryKey > } } /** * Watches for policy creation events. * * @example * ```ts * import { createConfig, http } from '@wagmi/core' * import { tempo } from '@wagmi/core/chains' * import { Actions } from '@wagmi/core/tempo' * * const config = createConfig({ * chains: [tempoModerato], * transports: { * [tempo.id]: http(), * }, * }) * * const unwatch = Actions.policy.watchCreate(config, { * onPolicyCreated: (args, log) => { * console.log('Policy created:', args) * }, * }) * ``` * * @param config - Config. * @param parameters - Parameters. * @returns A function to unsubscribe from the event. */ export function watchCreate( config: config, parameters: watchCreate.Parameters, ) { const { chainId, ...rest } = parameters const client = config.getClient({ chainId }) return Actions.policy.watchCreate(client, rest) } export declare namespace watchCreate { export type Parameters = ChainIdParameter & Actions.policy.watchCreate.Parameters } /** * Watches for policy admin update events. * * @example * ```ts * import { createConfig, http } from '@wagmi/core' * import { tempo } from '@wagmi/core/chains' * import { Actions } from '@wagmi/core/tempo' * * const config = createConfig({ * chains: [tempoModerato], * transports: { * [tempo.id]: http(), * }, * }) * * const unwatch = Actions.policy.watchAdminUpdated(config, { * onAdminUpdated: (args, log) => { * console.log('Policy admin updated:', args) * }, * }) * ``` * * @param config - Config. * @param parameters - Parameters. * @returns A function to unsubscribe from the event. */ export function watchAdminUpdated( config: config, parameters: watchAdminUpdated.Parameters, ) { const { chainId, ...rest } = parameters const client = config.getClient({ chainId }) return Actions.policy.watchAdminUpdated(client, rest) } export declare namespace watchAdminUpdated { export type Parameters = ChainIdParameter & Actions.policy.watchAdminUpdated.Parameters } /** * Watches for whitelist update events. * * @example * ```ts * import { createConfig, http } from '@wagmi/core' * import { tempo } from '@wagmi/core/chains' * import { Actions } from '@wagmi/core/tempo' * * const config = createConfig({ * chains: [tempoModerato], * transports: { * [tempo.id]: http(), * }, * }) * * const unwatch = Actions.policy.watchWhitelistUpdated(config, { * onWhitelistUpdated: (args, log) => { * console.log('Whitelist updated:', args) * }, * }) * ``` * * @param config - Config. * @param parameters - Parameters. * @returns A function to unsubscribe from the event. */ export function watchWhitelistUpdated( config: config, parameters: watchWhitelistUpdated.Parameters, ) { const { chainId, ...rest } = parameters const client = config.getClient({ chainId }) return Actions.policy.watchWhitelistUpdated(client, rest) } export declare namespace watchWhitelistUpdated { export type Parameters = ChainIdParameter & Actions.policy.watchWhitelistUpdated.Parameters } /** * Watches for blacklist update events. * * @example * ```ts * import { createConfig, http } from '@wagmi/core' * import { tempo } from '@wagmi/core/chains' * import { Actions } from '@wagmi/core/tempo' * * const config = createConfig({ * chains: [tempoModerato], * transports: { * [tempo.id]: http(), * }, * }) * * const unwatch = Actions.policy.watchBlacklistUpdated(config, { * onBlacklistUpdated: (args, log) => { * console.log('Blacklist updated:', args) * }, * }) * ``` * * @param config - Config. * @param parameters - Parameters. * @returns A function to unsubscribe from the event. */ export function watchBlacklistUpdated( config: config, parameters: watchBlacklistUpdated.Parameters, ) { const { chainId, ...rest } = parameters const client = config.getClient({ chainId }) return Actions.policy.watchBlacklistUpdated(client, rest) } export declare namespace watchBlacklistUpdated { export type Parameters = ChainIdParameter & Actions.policy.watchBlacklistUpdated.Parameters }