66 BigNumber ,
77 ContractTransaction ,
88 ContractReceipt ,
9+ Signer ,
910} from 'ethers'
1011import { API_ENDPOINT , API_ENDPOINT_DEV } from './config/endpoint'
1112import DropKitCollectionABI from './contracts/DropKitCollection.json'
@@ -19,7 +20,12 @@ import {
1920} from './types/api-responses'
2021import Web3Modal , { IProviderOptions } from 'web3modal'
2122import { PROVIDER_OPTIONS } from './config/providers'
22- import { JsonRpcSigner , Web3Provider } from '@ethersproject/providers'
23+ import {
24+ JsonRpcProvider ,
25+ JsonRpcSigner ,
26+ Provider ,
27+ Web3Provider ,
28+ } from '@ethersproject/providers'
2329import { NETWORKS } from './config/networks'
2430
2531const abis : Record < number , any > = {
@@ -37,7 +43,7 @@ export default class DropKit {
3743 walletAddress ?: string
3844 version : number
3945 maxSupply ?: number
40- provider : Web3Provider = { } as Web3Provider
46+ provider : Web3Provider | JsonRpcProvider = { } as Web3Provider
4147 signer : JsonRpcSigner = { } as JsonRpcSigner
4248 ethInstance : any
4349 chainId = 0
@@ -59,7 +65,10 @@ export default class DropKit {
5965 this . maxSupply = 0
6066 }
6167
62- async init ( providerOptions : IProviderOptions ) : Promise < DropApiResponse > {
68+ async init (
69+ providerOptions : IProviderOptions ,
70+ provider ?: JsonRpcProvider
71+ ) : Promise < DropApiResponse > {
6372 const data = await DropKit . getCollectionData ( this . apiKey , this . dev )
6473
6574 if ( ! data || ! data . address || ! data . collectionId ) {
@@ -74,29 +83,36 @@ export default class DropKit {
7483 this . maxSupply = data . version <= 3 ? data . maxAmount : 0
7584 const abi = abis [ data . version || 1 ]
7685
77- const web3Modal = new Web3Modal ( {
78- network : this . networkName ,
79- providerOptions,
80- } )
81- this . ethInstance = await web3Modal . connect ( )
82- if ( ! this . ethInstance ) {
83- throw new Error ( 'No provider found' )
84- }
86+ let signerOrProvider : Signer | Provider
87+ if ( provider ) {
88+ this . provider = provider
89+ signerOrProvider = provider
90+ } else {
91+ const web3Modal = new Web3Modal ( {
92+ network : this . networkName ,
93+ providerOptions,
94+ } )
95+ this . ethInstance = await web3Modal . connect ( )
96+ if ( ! this . ethInstance ) {
97+ throw new Error ( 'No provider found' )
98+ }
8599
86- await this . _initProvider ( )
87- await this . _checkNetwork ( )
100+ await this . _initProvider ( )
101+ await this . _checkNetwork ( )
88102
89- if ( this . ethInstance . on ) {
90- this . ethInstance . on ( 'disconnect' , ( ) => {
91- window . location . reload ( )
92- } )
93- this . ethInstance . on ( 'accountsChanged' , ( ) => {
94- window . location . reload ( )
95- } )
96- }
103+ if ( this . ethInstance . on ) {
104+ this . ethInstance . on ( 'disconnect' , ( ) => {
105+ window . location . reload ( )
106+ } )
107+ this . ethInstance . on ( 'accountsChanged' , ( ) => {
108+ window . location . reload ( )
109+ } )
110+ }
97111
98- this . walletAddress = await this . signer . getAddress ( )
99- this . contract = new ethers . Contract ( data . address , abi , this . signer )
112+ this . walletAddress = await this . signer . getAddress ( )
113+ signerOrProvider = this . signer
114+ }
115+ this . contract = new ethers . Contract ( data . address , abi , signerOrProvider )
100116 if ( ! this . contract ) {
101117 throw new Error ( 'Initialization failed.' )
102118 }
@@ -107,11 +123,12 @@ export default class DropKit {
107123 static async create (
108124 key : string ,
109125 isDev ?: boolean ,
110- providerOptions ?: IProviderOptions
126+ providerOptions ?: IProviderOptions ,
127+ provider ?: JsonRpcProvider
111128 ) : Promise < DropKit | null > {
112129 try {
113130 const dropKit = new DropKit ( key , isDev )
114- await dropKit . init ( providerOptions || PROVIDER_OPTIONS )
131+ await dropKit . init ( providerOptions || PROVIDER_OPTIONS , provider )
115132 return dropKit
116133 } catch ( error ) {
117134 handleError ( error as EthereumRpcError < unknown > )
0 commit comments