11import { SnapController } from '@metamask/snaps-controllers' ;
2- import { hasProperty , Json } from '@metamask/utils' ;
2+ import { createDeferredPromise , hasProperty , Json } from '@metamask/utils' ;
33import { ControllerInitFunction } from '../types' ;
44import {
55 EndowmentPermissions ,
@@ -13,6 +13,7 @@ import {
1313 SnapControllerMessenger ,
1414} from '../messengers/snaps' ;
1515import { getBooleanFlag } from '../../lib/util' ;
16+ import { OnboardingControllerState } from '../../controllers/onboarding' ;
1617
1718// Copied from `@metamask/snaps-controllers`, since it is not exported.
1819type TrackingEventPayload = {
@@ -93,6 +94,34 @@ export const SnapControllerInit: ControllerInitFunction<
9394 } ;
9495 }
9596
97+ /**
98+ * Async function that resolves when onboarding has been completed.
99+ *
100+ * @returns A promise that resolves when onboarding is complete.
101+ */
102+ async function ensureOnboardingComplete ( ) {
103+ const { completedOnboarding } = initMessenger . call (
104+ 'OnboardingController:getState' ,
105+ ) ;
106+
107+ if ( completedOnboarding ) {
108+ return ;
109+ }
110+
111+ const { promise, resolve } = createDeferredPromise ( ) ;
112+
113+ const listener = ( state : OnboardingControllerState ) => {
114+ if ( state . completedOnboarding ) {
115+ resolve ( ) ;
116+ initMessenger . unsubscribe ( 'OnboardingController:stateChange' , listener ) ;
117+ }
118+ } ;
119+
120+ initMessenger . subscribe ( 'OnboardingController:stateChange' , listener ) ;
121+
122+ await promise ;
123+ }
124+
96125 const controller = new SnapController ( {
97126 environmentEndowmentPermissions : Object . values ( EndowmentPermissions ) ,
98127 excludedPermissions : {
@@ -131,6 +160,8 @@ export const SnapControllerInit: ControllerInitFunction<
131160 preinstalledSnaps,
132161 getFeatureFlags,
133162
163+ ensureOnboardingComplete,
164+
134165 // `TrackEventHook` from `snaps-controllers` uses `Json | undefined` for
135166 // properties, but `MetaMetricsEventPayload` uses `Json`, even though
136167 // `undefined` is supported.
0 commit comments