9
9
} from '@cosmos-kit/core' ;
10
10
import {
11
11
Cosmiframe ,
12
+ Origin ,
12
13
OverrideHandler ,
13
14
ParentMetadata ,
14
15
} from '@dao-dao/cosmiframe' ;
@@ -20,6 +21,12 @@ export type FunctionKeys<T> = {
20
21
[ K in keyof T ] : T [ K ] extends ( ...args : unknown [ ] ) => unknown ? K : never ;
21
22
} [ keyof T ] ;
22
23
24
+ export type UseIframeSignerOverrides = Partial < {
25
+ [ K in keyof ( OfflineAminoSigner & OfflineDirectSigner ) ] : (
26
+ ...params : Parameters < ( OfflineAminoSigner & OfflineDirectSigner ) [ K ] >
27
+ ) => OverrideHandler | Promise < OverrideHandler > ;
28
+ } > ;
29
+
23
30
export type UseIframeOptions = {
24
31
/**
25
32
* Optionally attempt to use a specific wallet. Otherwise get the first active
@@ -47,16 +54,15 @@ export type UseIframeOptions = {
47
54
* should handle the function. By default, if nothing is returned, an error
48
55
* will be thrown with the message "Handled by outer wallet."
49
56
*/
50
- signerOverrides ?: Partial < {
51
- [ K in keyof ( OfflineAminoSigner & OfflineDirectSigner ) ] : (
52
- ...params : Parameters < ( OfflineAminoSigner & OfflineDirectSigner ) [ K ] >
53
- ) => OverrideHandler | Promise < OverrideHandler > ;
54
- } > ;
57
+ signerOverrides ?:
58
+ | UseIframeSignerOverrides
59
+ | ( ( chainId : string ) => UseIframeSignerOverrides )
60
+ | ( ( chainId : string ) => Promise < UseIframeSignerOverrides > ) ;
55
61
/**
56
62
* Optionally only respond to requests from iframes of specific origin. If
57
63
* undefined or empty, all origins are allowed.
58
64
*/
59
- origins ?: string [ ] ;
65
+ origins ?: Origin [ ] ;
60
66
} ;
61
67
62
68
export type UseIframeReturn = {
@@ -151,13 +157,21 @@ export const useIframe = ({
151
157
target : wallet ?. client || { } ,
152
158
getOfflineSignerDirect :
153
159
wallet ?. client . getOfflineSignerDirect . bind ( wallet . client ) ||
154
- ( ( ) => Promise . reject ( COSMIFRAME_NOT_CONNECTED_MESSAGE ) ) ,
160
+ ( ( ) =>
161
+ Promise . reject (
162
+ COSMIFRAME_NOT_CONNECTED_MESSAGE +
163
+ ' No direct signer client function found.'
164
+ ) ) ,
155
165
getOfflineSignerAmino :
156
166
wallet ?. client . getOfflineSignerAmino . bind ( wallet . client ) ||
157
- ( ( ) => Promise . reject ( COSMIFRAME_NOT_CONNECTED_MESSAGE ) ) ,
167
+ ( ( ) =>
168
+ Promise . reject (
169
+ COSMIFRAME_NOT_CONNECTED_MESSAGE +
170
+ ' No amino signer client function found.'
171
+ ) ) ,
158
172
nonSignerOverrides : ( ) => ( {
159
173
...walletClientOverridesRef . current ,
160
- // Override connect to return wallet info .
174
+ // Override connect to return specific error .
161
175
connect : async ( ...params ) => {
162
176
if ( walletClientOverridesRef . current ?. connect ) {
163
177
return await walletClientOverridesRef . current . connect (
@@ -169,12 +183,17 @@ export const useIframe = ({
169
183
} else {
170
184
return {
171
185
type : 'error' ,
172
- error : COSMIFRAME_NOT_CONNECTED_MESSAGE ,
186
+ error :
187
+ COSMIFRAME_NOT_CONNECTED_MESSAGE +
188
+ ' No connect client function found or override provided.' ,
173
189
} ;
174
190
}
175
191
} ,
176
192
} ) ,
177
- signerOverrides : ( ) => signerOverridesRef . current ,
193
+ signerOverrides : async ( chainId ) =>
194
+ typeof signerOverridesRef . current === 'function'
195
+ ? signerOverridesRef . current ( chainId )
196
+ : signerOverridesRef . current ,
178
197
origins,
179
198
metadata : {
180
199
name :
0 commit comments