@@ -11,11 +11,15 @@ type KeychainIframeOptions = IFrameOptions<Keychain> &
1111 needsSessionCreation ?: boolean ;
1212 username ?: string ;
1313 onSessionCreated ?: ( ) => void ;
14+ onStarterpackPlay ?: ( ) => void ;
1415 encryptedBlob ?: string ;
1516 } ;
1617
18+ const STARTERPACK_PLAY_CALLBACK_DELAY_MS = 200 ;
19+
1720export class KeychainIFrame extends IFrame < Keychain > {
1821 private walletBridge : WalletBridge ;
22+ private onStarterpackPlay ?: ( ) => void ;
1923
2024 constructor ( {
2125 url,
@@ -32,11 +36,13 @@ export class KeychainIFrame extends IFrame<Keychain> {
3236 needsSessionCreation,
3337 username,
3438 onSessionCreated,
39+ onStarterpackPlay,
3540 encryptedBlob,
3641 propagateSessionErrors,
3742 errorDisplayMode,
3843 ...iframeOptions
3944 } : KeychainIframeOptions ) {
45+ let onStarterpackPlayHandler : ( ( ) => Promise < void > ) | undefined ;
4046 const _url = new URL ( url ?? KEYCHAIN_URL ) ;
4147 const walletBridge = new WalletBridge ( ) ;
4248
@@ -118,10 +124,32 @@ export class KeychainIFrame extends IFrame<Keychain> {
118124 onSessionCreated ( ) ;
119125 }
120126 } ,
127+ onStarterpackPlay : ( _origin : string ) => async ( ) => {
128+ if ( onStarterpackPlayHandler ) {
129+ await onStarterpackPlayHandler ( ) ;
130+ }
131+ } ,
121132 } ,
122133 } ) ;
123134
124135 this . walletBridge = walletBridge ;
136+ this . onStarterpackPlay = onStarterpackPlay ;
137+ onStarterpackPlayHandler = async ( ) => {
138+ this . close ( ) ;
139+ const callback = this . onStarterpackPlay ;
140+ this . onStarterpackPlay = undefined ;
141+ if ( ! callback ) {
142+ return ;
143+ }
144+ await new Promise ( ( resolve ) =>
145+ setTimeout ( resolve , STARTERPACK_PLAY_CALLBACK_DELAY_MS ) ,
146+ ) ;
147+ try {
148+ callback ( ) ;
149+ } catch ( error ) {
150+ console . error ( "Failed to run starterpack play callback:" , error ) ;
151+ }
152+ } ;
125153
126154 // Expose the wallet bridge instance globally for WASM interop
127155 if ( typeof window !== "undefined" ) {
@@ -132,4 +160,8 @@ export class KeychainIFrame extends IFrame<Keychain> {
132160 getWalletBridge ( ) : WalletBridge {
133161 return this . walletBridge ;
134162 }
163+
164+ setOnStarterpackPlay ( callback ?: ( ) => void ) {
165+ this . onStarterpackPlay = callback ;
166+ }
135167}
0 commit comments