11import { useContext , useEffect , useMemo , useState } from 'react'
22import debounce from 'lodash/debounce'
33import { useSelector } from 'react-redux'
4+ import isFunction from 'lodash/isFunction'
45
56import { useStreamApi , useEmitter , WellKnownConfigType , useIsMounted , getData } from '../../../common/hooks'
67import { getDevicesDiscoveryTimeout } from './slice'
@@ -9,10 +10,9 @@ import { getOnboardingEndpoint, getResourceRegistrationNotificationKey, hasOnboa
910import { ResourcesType , StreamApiPropsType } from './Devices.types'
1011import AppContext from '../../share/AppContext'
1112import { getHttpGatewayAddress } from '../utils'
12- import { streamApi } from '../../../common/services'
13+ import { security , streamApi } from '../../../common/services'
1314import { DEVICE_AUTH_MODE } from '../constants'
1415import { getJwksData , getOpenIdConfiguration , initializedByPreShared , initializeFinal , initializeJwksData , reset , signIdentityCsr } from '../App/AppRest'
15- import isFunction from 'lodash/isFunction'
1616
1717export type UseApiReturnType = {
1818 data : any
@@ -249,14 +249,14 @@ type ClientDataType = {
249249}
250250
251251export function useAppInitialization ( settings : {
252- wellKnownConfig : WellKnownConfigType
253- loading ?: boolean
254252 clientData ?: ClientDataType
253+ loading ?: boolean
255254 onError ?: ( e : string ) => void
255+ reFetchConfig ?: any
256256 reInitialize ?: boolean
257- changeInitialize ?: ( initializeState : boolean ) => void
257+ wellKnownConfig : WellKnownConfigType
258258} ) {
259- const { wellKnownConfig, loading, clientData, onError, reInitialize, changeInitialize } = settings
259+ const { wellKnownConfig, loading, clientData, onError, reInitialize, reFetchConfig } = settings
260260 const [ initializationLoading , setInitializationLoading ] = useState ( false )
261261 const [ reInitializeLoading , setReInitializeLoading ] = useState ( false )
262262 const [ reInitializeError , setReInitializeError ] = useState ( false )
@@ -267,19 +267,24 @@ export function useAppInitialization(settings: {
267267 setReInitializeLoading ( true )
268268 reset ( )
269269 . then ( ( ) => {
270- isFunction ( changeInitialize ) && changeInitialize ( false )
270+ if ( isFunction ( reFetchConfig ) ) {
271+ reFetchConfig ( )
272+ . then ( ( ) => { } )
273+ . catch ( ( e : any ) => isFunction ( onError ) && onError ( e as string ) )
274+ . finally ( ( ) => setInitializationLoading ( false ) )
275+ }
271276 } )
272277 . catch ( ( ) => {
273278 setReInitializeError ( true )
274279 } )
275280 . finally ( ( ) => setReInitializeLoading ( false ) )
276281 }
277- } , [ changeInitialize , reInitialize , reInitializeError , reInitializeLoading , wellKnownConfig . isInitialized ] )
282+ } , [ reInitialize , reInitializeError , reInitializeLoading , wellKnownConfig . isInitialized , reFetchConfig , onError ] )
278283
279284 // initialize
280285 useEffect ( ( ) => {
281286 if ( wellKnownConfig && ! wellKnownConfig . isInitialized && clientData && ! initializationLoading && ! loading ) {
282- if ( clientData ?. deviceAuthenticationMode === DEVICE_AUTH_MODE . X509 ) {
287+ if ( clientData ?. deviceAuthenticationMode === DEVICE_AUTH_MODE . X509 && security . getAccessToken ( ) ) {
283288 try {
284289 setInitializationLoading ( true )
285290 getOpenIdConfiguration ( wellKnownConfig . remoteProvisioning ?. authority ! ) . then ( ( result ) => {
@@ -292,8 +297,12 @@ export function useAppInitialization(settings: {
292297 identityCertificateChallenge . certificateSigningRequest
293298 ) . then ( ( result ) => {
294299 initializeFinal ( identityCertificateChallenge . state , result . data . certificate ) . then ( ( ) => {
295- setInitializationLoading ( false )
296- isFunction ( changeInitialize ) && changeInitialize ( true )
300+ if ( isFunction ( reFetchConfig ) ) {
301+ reFetchConfig ( )
302+ . then ( ( ) => { } )
303+ . catch ( ( e : any ) => isFunction ( onError ) && onError ( e as string ) )
304+ . finally ( ( ) => setInitializationLoading ( false ) )
305+ }
297306 } )
298307 } )
299308 } )
@@ -310,8 +319,12 @@ export function useAppInitialization(settings: {
310319 setInitializationLoading ( true )
311320 initializedByPreShared ( clientData ?. preSharedSubjectId , clientData ?. preSharedKey ) . then ( ( r ) => {
312321 if ( r . status === 200 ) {
313- setInitializationLoading ( false )
314- isFunction ( changeInitialize ) && changeInitialize ( true )
322+ if ( isFunction ( reFetchConfig ) ) {
323+ reFetchConfig ( )
324+ . then ( ( ) => { } )
325+ . catch ( ( e : any ) => isFunction ( onError ) && onError ( e as string ) )
326+ . finally ( ( ) => setInitializationLoading ( false ) )
327+ }
315328 }
316329 } )
317330 } catch ( e ) {
0 commit comments