viem 3.0.0-next.0 → 3.0.0-next.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core/Client.d.ts +235 -1
- package/dist/core/Client.d.ts.map +1 -1
- package/dist/core/Client.js +141 -0
- package/dist/core/Client.js.map +1 -1
- package/dist/core/actions/decorators/public.d.ts +52 -48
- package/dist/core/actions/decorators/public.d.ts.map +1 -1
- package/dist/core/actions/decorators/public.js +8 -4
- package/dist/core/actions/decorators/public.js.map +1 -1
- package/dist/core/actions/decorators/wallet.d.ts +25 -23
- package/dist/core/actions/decorators/wallet.d.ts.map +1 -1
- package/dist/core/actions/decorators/wallet.js +4 -2
- package/dist/core/actions/decorators/wallet.js.map +1 -1
- package/dist/core/actions/index.d.ts +2 -3
- package/dist/core/actions/index.d.ts.map +1 -1
- package/dist/core/actions/index.js +2 -3
- package/dist/core/actions/index.js.map +1 -1
- package/dist/core/actions/siwe/index.d.ts +2 -0
- package/dist/core/actions/siwe/index.d.ts.map +1 -0
- package/dist/core/actions/siwe/index.js +2 -0
- package/dist/core/actions/siwe/index.js.map +1 -0
- package/dist/core/actions/{verifySiweMessage.d.ts → siwe/verify.d.ts} +6 -6
- package/dist/core/actions/siwe/verify.d.ts.map +1 -0
- package/dist/core/actions/{verifySiweMessage.js → siwe/verify.js} +4 -4
- package/dist/core/actions/siwe/verify.js.map +1 -0
- package/dist/core/actions/typedData/index.d.ts +3 -0
- package/dist/core/actions/typedData/index.d.ts.map +1 -0
- package/dist/core/actions/typedData/index.js +3 -0
- package/dist/core/actions/typedData/index.js.map +1 -0
- package/dist/core/actions/{signTypedData.d.ts → typedData/sign.d.ts} +6 -6
- package/dist/core/actions/typedData/sign.d.ts.map +1 -0
- package/dist/core/actions/{signTypedData.js → typedData/sign.js} +4 -4
- package/dist/core/actions/typedData/sign.js.map +1 -0
- package/dist/core/actions/{verifyTypedData.d.ts → typedData/verify.d.ts} +6 -6
- package/dist/core/actions/typedData/verify.d.ts.map +1 -0
- package/dist/core/actions/{verifyTypedData.js → typedData/verify.js} +4 -4
- package/dist/core/actions/typedData/verify.js.map +1 -0
- package/dist/erc4337/internal/erc7739.js +1 -1
- package/dist/erc4337/internal/erc7739.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
- package/src/core/Client.ts +444 -1
- package/src/core/actions/decorators/public.ts +64 -57
- package/src/core/actions/decorators/wallet.ts +34 -29
- package/src/core/actions/index.ts +2 -3
- package/src/core/actions/siwe/index.ts +1 -0
- package/src/core/actions/{verifySiweMessage.ts → siwe/verify.ts} +7 -7
- package/src/core/actions/typedData/index.ts +2 -0
- package/src/core/actions/{signTypedData.ts → typedData/sign.ts} +8 -8
- package/src/core/actions/{verifyTypedData.ts → typedData/verify.ts} +8 -8
- package/src/erc4337/internal/erc7739.ts +1 -1
- package/src/version.ts +1 -1
- package/dist/core/actions/signTypedData.d.ts.map +0 -1
- package/dist/core/actions/signTypedData.js.map +0 -1
- package/dist/core/actions/verifySiweMessage.d.ts.map +0 -1
- package/dist/core/actions/verifySiweMessage.js.map +0 -1
- package/dist/core/actions/verifyTypedData.d.ts.map +0 -1
- package/dist/core/actions/verifyTypedData.js.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { TypedData } from 'ox';
|
|
2
|
-
import { verifyHash } from '
|
|
2
|
+
import { verifyHash } from '../verifyHash.js';
|
|
3
3
|
/**
|
|
4
4
|
* Verifies that typed data was signed by the provided address, supporting
|
|
5
5
|
* Smart Contract Accounts (ERC-1271/6492/8010) and Externally Owned Accounts.
|
|
@@ -13,7 +13,7 @@ import { verifyHash } from './verifyHash.js';
|
|
|
13
13
|
* chain: mainnet,
|
|
14
14
|
* transport: http(),
|
|
15
15
|
* })
|
|
16
|
-
* const valid = await Actions.
|
|
16
|
+
* const valid = await Actions.typedData.verify(client, {
|
|
17
17
|
* address: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',
|
|
18
18
|
* domain: { name: 'Ether Mail', version: '1', chainId: 1 },
|
|
19
19
|
* types: {
|
|
@@ -25,7 +25,7 @@ import { verifyHash } from './verifyHash.js';
|
|
|
25
25
|
* })
|
|
26
26
|
* ```
|
|
27
27
|
*/
|
|
28
|
-
export async function
|
|
28
|
+
export async function verify(client, options) {
|
|
29
29
|
const { address, blockHash, blockNumber, blockTag, erc6492VerifierAddress, factory, factoryData, mode, multicallAddress, requestOptions, requireCanonical, signature, ...typedData } = options;
|
|
30
30
|
return verifyHash(client, {
|
|
31
31
|
address,
|
|
@@ -43,4 +43,4 @@ export async function verifyTypedData(client, options) {
|
|
|
43
43
|
signature,
|
|
44
44
|
});
|
|
45
45
|
}
|
|
46
|
-
//# sourceMappingURL=
|
|
46
|
+
//# sourceMappingURL=verify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../../../src/core/actions/typedData/verify.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAA;AAI9B,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAE7C;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAI1B,MAAqB,EACrB,OAA+C;IAE/C,MAAM,EACJ,OAAO,EACP,SAAS,EACT,WAAW,EACX,QAAQ,EACR,sBAAsB,EACtB,OAAO,EACP,WAAW,EACX,IAAI,EACJ,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,SAAS,EACT,GAAG,SAAS,EACb,GAAG,OAAyB,CAAA;IAE7B,OAAO,UAAU,CAAC,MAAM,EAAE;QACxB,OAAO;QACP,SAAS;QACT,WAAW;QACX,QAAQ;QACR,sBAAsB;QACtB,OAAO;QACP,WAAW;QACX,IAAI,EAAE,SAAS,CAAC,cAAc,CAAC,SAAmC,CAAC;QACnE,IAAI;QACJ,gBAAgB;QAChB,cAAc;QACd,gBAAgB;QAChB,SAAS;KACY,CAAC,CAAA;AAC1B,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { AbiParameters, Hex, PersonalMessage, TypedData } from 'ox';
|
|
2
2
|
import { getEip712Domain } from '../../core/actions/contract/getEip712Domain.js';
|
|
3
|
-
import {
|
|
3
|
+
import { sign as signTypedData_ } from '../../core/actions/typedData/sign.js';
|
|
4
4
|
/** Signs a personal message with ERC-7739 nested EIP-712. */
|
|
5
5
|
export async function signMessage(client, options) {
|
|
6
6
|
const { account, factory, factoryData, message, verifier } = options;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"erc7739.js","sourceRoot":"","sources":["../../../src/erc4337/internal/erc7739.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,GAAG,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,IAAI,CAAA;AAKnE,OAAO,EAAE,eAAe,EAAE,MAAM,gDAAgD,CAAA;AAChF,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"erc7739.js","sourceRoot":"","sources":["../../../src/erc4337/internal/erc7739.ts"],"names":[],"mappings":"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"}
|
package/dist/version.d.ts
CHANGED
package/dist/version.js
CHANGED
package/package.json
CHANGED
package/src/core/Client.ts
CHANGED
|
@@ -1,4 +1,9 @@
|
|
|
1
|
-
import
|
|
1
|
+
import {
|
|
2
|
+
type Address,
|
|
3
|
+
type Errors as ox_Errors,
|
|
4
|
+
Provider,
|
|
5
|
+
type RpcSchema,
|
|
6
|
+
} from 'ox'
|
|
2
7
|
|
|
3
8
|
import type * as CcipRead from '../utils/CcipRead.js'
|
|
4
9
|
import * as Account from './Account.js'
|
|
@@ -464,6 +469,444 @@ export declare namespace createResolver {
|
|
|
464
469
|
| create.ErrorType
|
|
465
470
|
}
|
|
466
471
|
|
|
472
|
+
/**
|
|
473
|
+
* Creates a v3 {@link Client} from a v2-compatible base Client. The returned
|
|
474
|
+
* Client forwards requests through the v2 Client and can be extended with v3
|
|
475
|
+
* action decorators.
|
|
476
|
+
*
|
|
477
|
+
* The adapted Client derives its Chain from the source chain ID and carries
|
|
478
|
+
* only JSON-RPC Accounts by default. Pass v3-native values to preserve full
|
|
479
|
+
* Chain or Account behavior.
|
|
480
|
+
* The returned Client owns retries: forwarded requests disable the v2 Client's
|
|
481
|
+
* retry layer. Forwarded errors are normalized with `Provider.parseError`.
|
|
482
|
+
*
|
|
483
|
+
* @example
|
|
484
|
+
* ```ts
|
|
485
|
+
* import { createClient as createClientV2, http as httpV2 } from 'viem'
|
|
486
|
+
* import { Client, publicActions } from 'viem-v3'
|
|
487
|
+
*
|
|
488
|
+
* const clientV2 = createClientV2({ transport: httpV2() })
|
|
489
|
+
* const publicClient = Client.fromV2(clientV2).extend(publicActions())
|
|
490
|
+
* ```
|
|
491
|
+
*
|
|
492
|
+
* @param client - The v2-compatible base Client.
|
|
493
|
+
* @param options - Optional v3 Chain and Account overrides.
|
|
494
|
+
* @returns A v3 Client.
|
|
495
|
+
*/
|
|
496
|
+
export function fromV2<
|
|
497
|
+
const source extends V2SourceClient,
|
|
498
|
+
chainOrId extends Chain.Chain | number | undefined = never,
|
|
499
|
+
accountOrAddress extends Account.Account | Address.Address | undefined =
|
|
500
|
+
never,
|
|
501
|
+
>(
|
|
502
|
+
client: source,
|
|
503
|
+
options: fromV2.Options<chainOrId, accountOrAddress> = {},
|
|
504
|
+
): fromV2.ReturnType<
|
|
505
|
+
V2ResolveChain<source['chain'], chainOrId>,
|
|
506
|
+
V2ResolveAccount<source['account'], accountOrAddress>
|
|
507
|
+
> {
|
|
508
|
+
const chain = (
|
|
509
|
+
'chain' in options ? options.chain : client.chain?.id
|
|
510
|
+
) as V2ResolveChain<source['chain'], chainOrId>
|
|
511
|
+
const account = (
|
|
512
|
+
'account' in options
|
|
513
|
+
? options.account
|
|
514
|
+
: client.account?.type === 'json-rpc'
|
|
515
|
+
? client.account
|
|
516
|
+
: undefined
|
|
517
|
+
) as V2ResolveAccount<source['account'], accountOrAddress>
|
|
518
|
+
const request = client.request as unknown as V2Request
|
|
519
|
+
|
|
520
|
+
const transport = Transport.from({
|
|
521
|
+
key: 'v2',
|
|
522
|
+
name: 'Viem v2 Client',
|
|
523
|
+
type: 'custom',
|
|
524
|
+
setup() {
|
|
525
|
+
return {
|
|
526
|
+
async request(parameters, options) {
|
|
527
|
+
try {
|
|
528
|
+
return await request(parameters, { ...options, retryCount: 0 })
|
|
529
|
+
} catch (error) {
|
|
530
|
+
throw Provider.parseError(error)
|
|
531
|
+
}
|
|
532
|
+
},
|
|
533
|
+
}
|
|
534
|
+
},
|
|
535
|
+
})
|
|
536
|
+
|
|
537
|
+
// The runtime branches above mirror the conditional target types.
|
|
538
|
+
return create({
|
|
539
|
+
account,
|
|
540
|
+
batch: client.batch,
|
|
541
|
+
blockTag: client.experimental_blockTag,
|
|
542
|
+
cacheTime: client.cacheTime,
|
|
543
|
+
ccipRead: client.ccipRead === false ? false : undefined,
|
|
544
|
+
chain,
|
|
545
|
+
dataSuffix: client.dataSuffix,
|
|
546
|
+
key: client.key,
|
|
547
|
+
name: client.name,
|
|
548
|
+
pollingInterval: client.pollingInterval,
|
|
549
|
+
transport,
|
|
550
|
+
type: client.type,
|
|
551
|
+
}) as unknown as Client<
|
|
552
|
+
V2ResolveChain<source['chain'], chainOrId>,
|
|
553
|
+
V2ResolveAccount<source['account'], accountOrAddress>,
|
|
554
|
+
Transport.Transport<'custom'>
|
|
555
|
+
>
|
|
556
|
+
}
|
|
557
|
+
|
|
558
|
+
export declare namespace fromV2 {
|
|
559
|
+
/** Options for {@link fromV2}. */
|
|
560
|
+
type Options<
|
|
561
|
+
chainOrId extends Chain.Chain | number | undefined = never,
|
|
562
|
+
accountOrAddress extends Account.Account | Address.Address | undefined =
|
|
563
|
+
never,
|
|
564
|
+
> = {
|
|
565
|
+
/** v3 Account or address to use instead of the v2 Client's Account. */
|
|
566
|
+
account?: accountOrAddress | undefined
|
|
567
|
+
/** v3 Chain or chain ID to use instead of the v2 Client's chain ID. */
|
|
568
|
+
chain?: chainOrId | undefined
|
|
569
|
+
}
|
|
570
|
+
|
|
571
|
+
/** Return type of {@link fromV2}. */
|
|
572
|
+
type ReturnType<
|
|
573
|
+
chain extends Chain.Chain | undefined = Chain.Chain | undefined,
|
|
574
|
+
account extends Account.Account | undefined = Account.Account | undefined,
|
|
575
|
+
> = Client<chain, account, Transport.Transport<'custom'>>
|
|
576
|
+
|
|
577
|
+
/** Errors thrown while adapting a v2 Client. */
|
|
578
|
+
type ErrorType = create.ErrorType | ox_Errors.GlobalErrorType
|
|
579
|
+
}
|
|
580
|
+
|
|
581
|
+
/**
|
|
582
|
+
* Creates a v2-compatible base Client from a v3 {@link Client}. Extend the
|
|
583
|
+
* result with v2 action decorators to create a v2 Public, Wallet, or custom
|
|
584
|
+
* Client.
|
|
585
|
+
*
|
|
586
|
+
* The one-argument form creates a chainless Client and only preserves
|
|
587
|
+
* JSON-RPC Accounts. Pass v2-native values to preserve full Chain or local
|
|
588
|
+
* Account behavior. Requests preserve the v3 Client's error identities.
|
|
589
|
+
*
|
|
590
|
+
* @example
|
|
591
|
+
* ```ts
|
|
592
|
+
* import { publicActions as publicActionsV2 } from 'viem'
|
|
593
|
+
* import { Client, http } from 'viem-v3'
|
|
594
|
+
*
|
|
595
|
+
* const client = Client.create({ transport: http() })
|
|
596
|
+
* const publicClientV2 = Client.toV2(client).extend(publicActionsV2)
|
|
597
|
+
* ```
|
|
598
|
+
*
|
|
599
|
+
* @param client - The v3 Client.
|
|
600
|
+
* @param options - Optional v2 Chain and Account overrides.
|
|
601
|
+
* @returns A v2-compatible base Client.
|
|
602
|
+
*/
|
|
603
|
+
export function toV2<
|
|
604
|
+
const source extends Client,
|
|
605
|
+
chain extends V2Chain | undefined = never,
|
|
606
|
+
account extends V2Account | undefined = never,
|
|
607
|
+
>(
|
|
608
|
+
client: source,
|
|
609
|
+
options: toV2.Options<chain, account> = {},
|
|
610
|
+
): toV2.ReturnType<
|
|
611
|
+
V2ResolveTargetChain<chain>,
|
|
612
|
+
V2ResolveTargetAccount<source['account'], account>
|
|
613
|
+
> {
|
|
614
|
+
const request = client.request as unknown as V2Request
|
|
615
|
+
const account = (
|
|
616
|
+
'account' in options
|
|
617
|
+
? options.account
|
|
618
|
+
: client.account?.type === 'json-rpc'
|
|
619
|
+
? client.account
|
|
620
|
+
: undefined
|
|
621
|
+
) as V2ResolveTargetAccount<source['account'], account>
|
|
622
|
+
|
|
623
|
+
const base: V2Base<
|
|
624
|
+
V2ResolveTargetChain<chain>,
|
|
625
|
+
V2ResolveTargetAccount<source['account'], account>
|
|
626
|
+
> = {
|
|
627
|
+
account,
|
|
628
|
+
batch: client.batch,
|
|
629
|
+
cacheTime: client.cacheTime,
|
|
630
|
+
ccipRead: client.ccipRead === false ? false : undefined,
|
|
631
|
+
chain: options.chain as V2ResolveTargetChain<chain>,
|
|
632
|
+
dataSuffix: client.dataSuffix,
|
|
633
|
+
experimental_blockTag: client.blockTag,
|
|
634
|
+
key: client.key,
|
|
635
|
+
name: client.name,
|
|
636
|
+
pollingInterval: client.pollingInterval,
|
|
637
|
+
request,
|
|
638
|
+
tokens: undefined,
|
|
639
|
+
transport: {
|
|
640
|
+
key: 'custom',
|
|
641
|
+
name: 'Viem v3 Client',
|
|
642
|
+
request,
|
|
643
|
+
retryCount: 0,
|
|
644
|
+
type: 'custom',
|
|
645
|
+
},
|
|
646
|
+
type: client.type,
|
|
647
|
+
uid: uid(),
|
|
648
|
+
}
|
|
649
|
+
|
|
650
|
+
return withV2Extend(base)
|
|
651
|
+
}
|
|
652
|
+
|
|
653
|
+
export declare namespace toV2 {
|
|
654
|
+
/** Options for {@link toV2}. */
|
|
655
|
+
type Options<
|
|
656
|
+
chain extends V2Chain | undefined = never,
|
|
657
|
+
account extends V2Account | undefined = never,
|
|
658
|
+
> = {
|
|
659
|
+
/** v2 JSON-RPC or local Account to use instead of the v3 Client's Account. */
|
|
660
|
+
account?: account | undefined
|
|
661
|
+
/** v2 Chain to attach to the adapted Client. */
|
|
662
|
+
chain?: chain | undefined
|
|
663
|
+
}
|
|
664
|
+
|
|
665
|
+
/** Return type of {@link toV2}. */
|
|
666
|
+
type ReturnType<
|
|
667
|
+
chain extends V2Chain | undefined = undefined,
|
|
668
|
+
account extends V2Account | undefined = undefined,
|
|
669
|
+
> = V2Client<chain, account, undefined>
|
|
670
|
+
}
|
|
671
|
+
|
|
672
|
+
type V2Base<
|
|
673
|
+
chain extends V2Chain | undefined,
|
|
674
|
+
account extends V2Account | undefined,
|
|
675
|
+
> = {
|
|
676
|
+
/** The Account of the Client. */
|
|
677
|
+
account: account
|
|
678
|
+
/** `eth_call` multicall aggregation flags. */
|
|
679
|
+
batch?: { multicall?: boolean | MulticallOptions | undefined } | undefined
|
|
680
|
+
/** Time (in ms) cached data stays in memory. */
|
|
681
|
+
cacheTime: number
|
|
682
|
+
/** Whether CCIP Read is disabled. */
|
|
683
|
+
ccipRead?: false | undefined
|
|
684
|
+
/** Chain for the Client. */
|
|
685
|
+
chain: chain
|
|
686
|
+
/** Data suffix appended to transaction calldata. */
|
|
687
|
+
dataSuffix?: DataSuffix | undefined
|
|
688
|
+
/** Default block tag for RPC requests. */
|
|
689
|
+
experimental_blockTag?: BlockTag | undefined
|
|
690
|
+
/** A key for the Client. */
|
|
691
|
+
key: string
|
|
692
|
+
/** A name for the Client. */
|
|
693
|
+
name: string
|
|
694
|
+
/** Polling frequency (ms) for actions and events. */
|
|
695
|
+
pollingInterval: number
|
|
696
|
+
/** Request function forwarded to the v3 Client. */
|
|
697
|
+
request: V2Request
|
|
698
|
+
/** Token functions are not adapted between versions. */
|
|
699
|
+
tokens: undefined
|
|
700
|
+
/** Synthetic custom transport backed by the v3 Client. */
|
|
701
|
+
transport: V2Transport
|
|
702
|
+
/** The type of Client. */
|
|
703
|
+
type: string
|
|
704
|
+
/** A unique id for the Client. */
|
|
705
|
+
uid: string
|
|
706
|
+
}
|
|
707
|
+
|
|
708
|
+
type V2Extended = Prettify<
|
|
709
|
+
{ [key in keyof V2Base<any, any>]?: undefined } & {
|
|
710
|
+
[key: string]: unknown
|
|
711
|
+
}
|
|
712
|
+
>
|
|
713
|
+
|
|
714
|
+
type V2Client<
|
|
715
|
+
chain extends V2Chain | undefined,
|
|
716
|
+
account extends V2Account | undefined,
|
|
717
|
+
extended extends V2Extended | undefined,
|
|
718
|
+
> = V2Base<chain, account> &
|
|
719
|
+
(extended extends V2Extended ? extended : unknown) & {
|
|
720
|
+
/**
|
|
721
|
+
* Extends the Client with a v2 decorator. The installed v2 Client type
|
|
722
|
+
* supplies target-version protected-action constraints.
|
|
723
|
+
*/
|
|
724
|
+
extend: <const extension extends V2Extended>(
|
|
725
|
+
fn: (client: V2Client<chain, account, extended>) => extension,
|
|
726
|
+
) => V2Client<
|
|
727
|
+
chain,
|
|
728
|
+
account,
|
|
729
|
+
Prettify<extension> & (extended extends V2Extended ? extended : unknown)
|
|
730
|
+
>
|
|
731
|
+
}
|
|
732
|
+
|
|
733
|
+
function withV2Extend<
|
|
734
|
+
chain extends V2Chain | undefined,
|
|
735
|
+
account extends V2Account | undefined,
|
|
736
|
+
>(client: V2Base<chain, account>): V2Client<chain, account, undefined> {
|
|
737
|
+
function extend(base: Record<string, unknown>) {
|
|
738
|
+
return (
|
|
739
|
+
fn: (client: Record<string, unknown>) => Record<string, unknown>,
|
|
740
|
+
) => {
|
|
741
|
+
const extended = fn(base)
|
|
742
|
+
for (const key in client) delete extended[key]
|
|
743
|
+
const combined = { ...base, ...extended }
|
|
744
|
+
for (const key in extended) {
|
|
745
|
+
const a = base[key]
|
|
746
|
+
const b = extended[key]
|
|
747
|
+
if (isPlainObject(a) && isPlainObject(b)) combined[key] = { ...a, ...b }
|
|
748
|
+
}
|
|
749
|
+
return Object.assign(combined, { extend: extend(combined) })
|
|
750
|
+
}
|
|
751
|
+
}
|
|
752
|
+
|
|
753
|
+
const base = client as unknown as Record<string, unknown>
|
|
754
|
+
return Object.assign(base, {
|
|
755
|
+
extend: extend(base),
|
|
756
|
+
}) as V2Client<chain, account, undefined>
|
|
757
|
+
}
|
|
758
|
+
|
|
759
|
+
type V2Account = V2JsonRpcAccount | V2LocalAccount
|
|
760
|
+
|
|
761
|
+
type V2JsonRpcAccount = {
|
|
762
|
+
address: Address.Address
|
|
763
|
+
type: 'json-rpc'
|
|
764
|
+
}
|
|
765
|
+
|
|
766
|
+
type V2LocalAccount = {
|
|
767
|
+
address: Address.Address
|
|
768
|
+
nonceManager?: object | undefined
|
|
769
|
+
publicKey: `0x${string}`
|
|
770
|
+
sign?: V2SignFn | undefined
|
|
771
|
+
signAuthorization?: V2SignFn | undefined
|
|
772
|
+
signMessage: V2SignFn
|
|
773
|
+
signTransaction: V2SignFn
|
|
774
|
+
signTypedData: V2SignFn
|
|
775
|
+
source: string
|
|
776
|
+
type: 'local'
|
|
777
|
+
}
|
|
778
|
+
|
|
779
|
+
type V2Chain = {
|
|
780
|
+
id: number
|
|
781
|
+
name: string
|
|
782
|
+
nativeCurrency: {
|
|
783
|
+
decimals: number
|
|
784
|
+
name: string
|
|
785
|
+
symbol: string
|
|
786
|
+
}
|
|
787
|
+
rpcUrls: {
|
|
788
|
+
[key: string]: V2RpcUrls
|
|
789
|
+
default: V2RpcUrls
|
|
790
|
+
}
|
|
791
|
+
}
|
|
792
|
+
|
|
793
|
+
type V2RpcUrls = {
|
|
794
|
+
http: readonly string[]
|
|
795
|
+
webSocket?: readonly string[] | undefined
|
|
796
|
+
}
|
|
797
|
+
|
|
798
|
+
type V2RequestOptions = {
|
|
799
|
+
dedupe?: boolean | undefined
|
|
800
|
+
methods?:
|
|
801
|
+
| { include?: string[] | undefined }
|
|
802
|
+
| { exclude?: string[] | undefined }
|
|
803
|
+
| undefined
|
|
804
|
+
retryDelay?: number | undefined
|
|
805
|
+
retryCount?: number | undefined
|
|
806
|
+
signal?: AbortSignal | undefined
|
|
807
|
+
uid?: string | undefined
|
|
808
|
+
}
|
|
809
|
+
|
|
810
|
+
type V2Request = <
|
|
811
|
+
schemaOverride extends V2RequestOverride | undefined = undefined,
|
|
812
|
+
parameters extends V2RequestParameters = V2RequestParameters,
|
|
813
|
+
returnType = schemaOverride extends { ReturnType: infer returnType }
|
|
814
|
+
? returnType
|
|
815
|
+
: unknown,
|
|
816
|
+
>(
|
|
817
|
+
parameters: parameters,
|
|
818
|
+
options?: V2RequestOptions | undefined,
|
|
819
|
+
) => Promise<returnType>
|
|
820
|
+
|
|
821
|
+
type V2RequestOverride = {
|
|
822
|
+
Parameters?: unknown | undefined
|
|
823
|
+
ReturnType: unknown
|
|
824
|
+
}
|
|
825
|
+
|
|
826
|
+
type V2RequestParameters = {
|
|
827
|
+
method: string
|
|
828
|
+
params?: unknown | undefined
|
|
829
|
+
}
|
|
830
|
+
|
|
831
|
+
type V2SourceClient<
|
|
832
|
+
chain extends { id: number } | undefined = { id: number } | undefined,
|
|
833
|
+
account extends V2SourceAccount | undefined = V2SourceAccount | undefined,
|
|
834
|
+
> = {
|
|
835
|
+
account: account
|
|
836
|
+
batch?: { multicall?: boolean | MulticallOptions | undefined } | undefined
|
|
837
|
+
cacheTime: number
|
|
838
|
+
ccipRead?: object | false | undefined
|
|
839
|
+
chain: chain
|
|
840
|
+
dataSuffix?: DataSuffix | undefined
|
|
841
|
+
experimental_blockTag?: BlockTag | undefined
|
|
842
|
+
key: string
|
|
843
|
+
name: string
|
|
844
|
+
pollingInterval: number
|
|
845
|
+
request: (...args: never[]) => Promise<unknown>
|
|
846
|
+
type: string
|
|
847
|
+
}
|
|
848
|
+
|
|
849
|
+
type V2SourceAccount = {
|
|
850
|
+
address: Address.Address
|
|
851
|
+
type: string
|
|
852
|
+
}
|
|
853
|
+
|
|
854
|
+
type V2SignFn = (...args: never[]) => Promise<unknown>
|
|
855
|
+
|
|
856
|
+
type V2Transport = {
|
|
857
|
+
key: string
|
|
858
|
+
methods?:
|
|
859
|
+
| { include?: string[] | undefined }
|
|
860
|
+
| { exclude?: string[] | undefined }
|
|
861
|
+
| undefined
|
|
862
|
+
name: string
|
|
863
|
+
request: V2Request
|
|
864
|
+
retryCount?: number | undefined
|
|
865
|
+
retryDelay?: number | undefined
|
|
866
|
+
timeout?: number | undefined
|
|
867
|
+
type: 'custom'
|
|
868
|
+
}
|
|
869
|
+
|
|
870
|
+
type V2ResolveAccount<
|
|
871
|
+
account extends V2SourceAccount | undefined,
|
|
872
|
+
accountOrAddress extends Account.Account | Address.Address | undefined,
|
|
873
|
+
> = [accountOrAddress] extends [never]
|
|
874
|
+
? account extends {
|
|
875
|
+
address: infer address extends Address.Address
|
|
876
|
+
type: 'json-rpc'
|
|
877
|
+
}
|
|
878
|
+
? Account.JsonRpc<address>
|
|
879
|
+
: undefined
|
|
880
|
+
: accountOrAddress extends Address.Address
|
|
881
|
+
? Account.JsonRpc<accountOrAddress>
|
|
882
|
+
: accountOrAddress
|
|
883
|
+
|
|
884
|
+
type V2ResolveChain<
|
|
885
|
+
chain extends { id: number } | undefined,
|
|
886
|
+
chainOrId extends Chain.Chain | number | undefined,
|
|
887
|
+
> = [chainOrId] extends [never]
|
|
888
|
+
? chain extends { id: infer id extends number }
|
|
889
|
+
? Chain.Chain & { id: id }
|
|
890
|
+
: undefined
|
|
891
|
+
: chainOrId extends number
|
|
892
|
+
? Chain.Chain & { id: chainOrId }
|
|
893
|
+
: chainOrId
|
|
894
|
+
|
|
895
|
+
type V2ResolveTargetAccount<
|
|
896
|
+
account extends Account.Account | undefined,
|
|
897
|
+
accountOverride extends V2Account | undefined,
|
|
898
|
+
> = [accountOverride] extends [never]
|
|
899
|
+
? account extends Account.JsonRpc<infer address>
|
|
900
|
+
? { address: address; type: 'json-rpc' }
|
|
901
|
+
: undefined
|
|
902
|
+
: accountOverride
|
|
903
|
+
|
|
904
|
+
type V2ResolveTargetChain<chain extends V2Chain | undefined> = [chain] extends [
|
|
905
|
+
never,
|
|
906
|
+
]
|
|
907
|
+
? undefined
|
|
908
|
+
: chain
|
|
909
|
+
|
|
467
910
|
type ResolvedChain<
|
|
468
911
|
chains extends ResolverChains,
|
|
469
912
|
chainId extends chains[number]['id'],
|