github.com/ethereum-optimism/optimism@v1.7.2/packages/common-ts/src/base-service/validators.ts (about) 1 import { 2 str, 3 bool, 4 num, 5 email, 6 host, 7 port, 8 url, 9 json, 10 makeValidator, 11 } from 'envalid' 12 import { Provider } from '@ethersproject/abstract-provider' 13 import { Signer } from '@ethersproject/abstract-signer' 14 import { ethers } from 'ethers' 15 16 import { LogLevel, logLevels } from '../common' 17 18 const provider = makeValidator<Provider>((input) => { 19 const parsed = url()._parse(input) 20 return new ethers.providers.JsonRpcProvider(parsed) 21 }) 22 23 const jsonRpcProvider = makeValidator<ethers.providers.JsonRpcProvider>( 24 (input) => { 25 const parsed = url()._parse(input) 26 return new ethers.providers.JsonRpcProvider(parsed) 27 } 28 ) 29 30 const staticJsonRpcProvider = 31 makeValidator<ethers.providers.StaticJsonRpcProvider>((input) => { 32 const parsed = url()._parse(input) 33 return new ethers.providers.StaticJsonRpcProvider(parsed) 34 }) 35 36 const wallet = makeValidator<Signer>((input) => { 37 if (!ethers.utils.isHexString(input)) { 38 throw new Error(`expected wallet to be a hex string`) 39 } else { 40 return new ethers.Wallet(input) 41 } 42 }) 43 44 const logLevel = makeValidator<LogLevel>((input) => { 45 if (!logLevels.includes(input as LogLevel)) { 46 throw new Error(`expected log level to be one of ${logLevels.join(', ')}`) 47 } else { 48 return input as LogLevel 49 } 50 }) 51 52 const address = makeValidator<string>((input) => { 53 if (!ethers.utils.isHexString(input, 20)) { 54 throw new Error(`expected input to be an address: ${input}`) 55 } else { 56 return input as `0x${string}` 57 } 58 }) 59 60 export const validators = { 61 str, 62 bool, 63 num, 64 email, 65 host, 66 port, 67 url, 68 json, 69 wallet, 70 provider, 71 jsonRpcProvider, 72 staticJsonRpcProvider, 73 logLevel, 74 address, 75 }