@bigmi/core
Version:
TypeScript library for Bitcoin apps.
57 lines (51 loc) • 1.65 kB
text/typescript
import type { ErrorType } from '../errors/utils.js'
import { createTransport } from '../factories/createTransport.js'
import type {
CreateTransportErrorType,
Transport,
TransportConfig,
} from '../types/transport.js'
type BitcoinProvider = { request(...args: any): Promise<any> }
export type CustomTransportConfig = {
/** The key of the transport. */
key?: TransportConfig['key'] | undefined
/** Methods to include or exclude from executing RPC requests. */
methods?: TransportConfig['methods'] | undefined
/** The name of the transport. */
name?: TransportConfig['name'] | undefined
/** The max number of times to retry. */
retryCount?: TransportConfig['retryCount'] | undefined
/** The base delay (in ms) between retries. */
retryDelay?: TransportConfig['retryDelay'] | undefined
}
export type CustomTransport = Transport<
'custom',
// biome-ignore lint/complexity/noBannedTypes: part of the types
{},
BitcoinProvider['request']
>
export type CustomTransportErrorType = CreateTransportErrorType | ErrorType
/**
* @description Creates a custom transport given an EIP-1193 compliant `request` attribute.
*/
export function custom<provider extends BitcoinProvider>(
provider: provider,
config: CustomTransportConfig = {}
): CustomTransport {
const {
key = 'custom',
methods,
name = 'Custom Provider',
retryDelay,
} = config
return ({ retryCount: defaultRetryCount }) =>
createTransport({
key,
methods,
name,
request: provider.request.bind(provider),
retryCount: config.retryCount ?? defaultRetryCount,
retryDelay,
type: 'custom',
})
}