import { useCallback, useEffect, useState } from 'react'; import memoize from 'lodash.memoize'; enum Status { IDLE = 'IDLE', LOADING = 'LOADING', SUCCESS = 'SUCCESS', FAILURE = 'FAILURE', } interface UseCodeCortexLicenseKeyResponse { isIdle: boolean; isLoading: boolean; isSuccess: boolean; isFailure: boolean; data: string | undefined; } const downloadLicenseKey = memoize(async () => { const response = await fetch( 'https://omg-cc-license.omborigrid.com/licenses/code-cortex-prod.txt', ); const blob = await response.blob(); const key = await blob.text(); return key; }); export const useCodeCortexLicenseKey = (): UseCodeCortexLicenseKeyResponse => { const [status, setStatus] = useState(Status.IDLE); const [data, setData] = useState(); useEffect(() => { const download = async () => { try { setStatus(Status.LOADING); const key = await downloadLicenseKey(); setData(key); setStatus(Status.SUCCESS); } catch (error) { setStatus(Status.FAILURE); } }; download(); }, []); return { isIdle: status === Status.IDLE, isLoading: status === Status.LOADING, isSuccess: status === Status.SUCCESS, isFailure: status === Status.FAILURE, data, }; }