permissionless
Version:
A utility library for working with ERC-4337
70 lines (64 loc) • 1.66 kB
text/typescript
import type {
Account,
Chain,
Client,
ClientConfig,
Prettify,
RpcSchema,
Transport
} from "viem"
import { createClient } from "viem"
import type { PasskeyServerRpcSchema } from "../types/passkeyServer.js"
import {
type PasskeyServerActions,
passkeyServerActions
} from "./decorators/passkeyServer.js"
export type PasskeyServerClient<
rpcSchema extends RpcSchema | undefined = undefined
> = Prettify<
Client<
Transport,
Chain | undefined,
Account | undefined,
rpcSchema extends RpcSchema
? [...PasskeyServerRpcSchema, ...rpcSchema]
: [...PasskeyServerRpcSchema],
PasskeyServerActions
>
>
export type PasskeyServerClientConfig<
rpcSchema extends RpcSchema | undefined = undefined
> = Prettify<
Pick<
ClientConfig<
Transport,
Chain | undefined,
Account | undefined,
rpcSchema
>,
| "account"
| "cacheTime"
| "chain"
| "key"
| "name"
| "pollingInterval"
| "rpcSchema"
| "transport"
>
>
export function createPasskeyServerClient<
rpcSchema extends RpcSchema | undefined = undefined
>(
parameters: PasskeyServerClientConfig<rpcSchema>
): PasskeyServerClient<rpcSchema>
export function createPasskeyServerClient(
parameters: PasskeyServerClientConfig
): PasskeyServerClient {
const { key = "public", name = "Passkey Server Client" } = parameters
return createClient({
...parameters,
key,
name,
type: "passkeyServerClient"
}).extend(passkeyServerActions)
}