Handle deviceCode expiry

This commit is contained in:
Neeraj Gupta 2024-01-29 15:25:12 +05:30
parent 8f954e0d1b
commit a3bb85599a

View file

@ -32,10 +32,10 @@ const convertDataToDecimalString = (data: Uint8Array): string => {
export default function PairingMode() { export default function PairingMode() {
const [digits, setDigits] = useState<string[]>([]); const [digits, setDigits] = useState<string[]>([]);
const [publicKeyB64, setPublicKeyB64] = useState(''); const [publicKeyB64, setPublicKeyB64] = useState('');
const [privateKeyB64, setPrivateKeyB64] = useState('');
const [codePending, setCodePending] = useState(true); const [codePending, setCodePending] = useState(true);
const [isCastReady, setIsCastReady] = useState(false);
const { cast } = useCastReceiver(); const { cast } = useCastReceiver();
@ -45,24 +45,25 @@ export default function PairingMode() {
useEffect(() => { useEffect(() => {
if (!cast) return; if (!cast) return;
if (isCastReady) return;
const context = cast.framework.CastReceiverContext.getInstance(); const context = cast.framework.CastReceiverContext.getInstance();
if (!context.isInitialized) {
const options = new cast.framework.CastReceiverOptions();
options.customNamespaces = Object.assign({});
options.customNamespaces['urn:x-cast:pair-request'] =
cast.framework.system.MessageType.JSON;
options.disableIdleTimeout = true; const options = new cast.framework.CastReceiverOptions();
options.customNamespaces = Object.assign({});
options.customNamespaces['urn:x-cast:pair-request'] =
cast.framework.system.MessageType.JSON;
context.addCustomMessageListener( options.disableIdleTimeout = true;
'urn:x-cast:pair-request',
messageReceiveHandler context.addCustomMessageListener(
); 'urn:x-cast:pair-request',
context.start(options); messageReceiveHandler
return () => { );
context.stop(options); context.start(options);
}; setIsCastReady(true);
} return () => {
context.stop(options);
};
}, [cast]); }, [cast]);
const messageReceiveHandler = (message: { const messageReceiveHandler = (message: {
@ -82,14 +83,11 @@ export default function PairingMode() {
const init = async () => { const init = async () => {
const data = generateSecureData(6); const data = generateSecureData(6);
setDigits(convertDataToDecimalString(data).split('')); setDigits(convertDataToDecimalString(data).split(''));
const keypair = await generateKeyPair(); const keypair = await generateKeyPair();
setPublicKeyB64(await toB64(keypair.publicKey)); setPublicKeyB64(await toB64(keypair.publicKey));
setPrivateKeyB64(await toB64(keypair.privateKey)); setPrivateKeyB64(await toB64(keypair.privateKey));
}; };
const [privateKeyB64, setPrivateKeyB64] = useState('');
const generateKeyPair = async () => { const generateKeyPair = async () => {
await _sodium.ready; await _sodium.ready;
@ -113,6 +111,8 @@ export default function PairingMode() {
if (!encDastData) return; if (!encDastData) return;
devicePayload = encDastData; devicePayload = encDastData;
} catch (e) { } catch (e) {
setCodePending(true);
init();
return; return;
} }
@ -145,10 +145,9 @@ export default function PairingMode() {
`${digits.join('')}`, `${digits.join('')}`,
publicKeyB64 publicKeyB64
); );
setCodeGeneratedAt(new Date());
setCodePending(false); setCodePending(false);
} catch (e) { } catch (e) {
// schedule init after 5 seconds // schedule re-try after 5 seconds
setTimeout(() => { setTimeout(() => {
init(); init();
}, 5000); }, 5000);
@ -175,7 +174,6 @@ export default function PairingMode() {
useEffect(() => { useEffect(() => {
if (!publicKeyB64) return; if (!publicKeyB64) return;
advertisePublicKey(publicKeyB64); advertisePublicKey(publicKeyB64);
}, [publicKeyB64]); }, [publicKeyB64]);