69 lines
3.0 KiB
JavaScript

import { formatBytes } from '@/lib/format'
import { useEffect, useState } from 'react'
import { useKeyHash, useKeyUpdatedAt } from '@/wallets/client/context'
import { useRemoteKeyHash, useRemoteKeyHashUpdatedAt, useWalletsUpdatedAt } from '@/wallets/client/hooks'
import { timeSince } from '@/lib/time'
export function WalletDebugSettings () {
const localKeyHash = useKeyHash()
const localKeyUpdatedAt = useKeyUpdatedAt()
const remoteKeyHash = useRemoteKeyHash()
const remoteKeyHashUpdatedAt = useRemoteKeyHashUpdatedAt()
const walletsUpdatedAt = useWalletsUpdatedAt()
const [persistent, setPersistent] = useState(null)
const [quota, setQuota] = useState(null)
const [usage, setUsage] = useState(null)
useEffect(() => {
async function init () {
try {
const persistent = await navigator.storage.persisted()
setPersistent(persistent)
} catch (err) {
console.error('failed to check persistent storage:', err)
}
try {
const estimate = await navigator.storage.estimate()
setQuota(estimate.quota)
setUsage(estimate.usage)
} catch (err) {
console.error('failed to get estimate:', err)
}
}
init()
}, [])
return (
<div className='d-grid column-gap-2 text-muted mt-3 mx-auto w-fit-content' style={{ gridTemplateColumns: '1fr 1fr' }}>
<div className='text-nowrap'>persistent storage:</div>
<div className='text-end'>{persistent !== null ? persistent?.toString() : 'unknown'}</div>
<div className='text-nowrap'>storage quota:</div>
<div className='text-end'>{quota !== null ? formatBytes(quota) : 'unknown'}</div>
<div className='text-nowrap'>storage usage:</div>
<div className='text-end'>{usage !== null ? formatBytes(usage) : 'unknown'}</div>
<div className='text-nowrap'>storage remaining:</div>
<div className='text-end'>{usage !== null && quota !== null ? formatBytes(quota - usage) : 'unknown'}</div>
<div className='text-nowrap'>device key hash:</div>
<div className='text-end'>{localKeyHash ? shortHash(localKeyHash) : 'unknown'}</div>
<div className='text-nowrap'>server key hash:</div>
<div className='text-end'>{remoteKeyHash ? shortHash(remoteKeyHash) : 'unknown'}</div>
<div className='text-nowrap'>device key update:</div>
<div className='text-end' suppressHydrationWarning>
{localKeyUpdatedAt ? `${timeSince(localKeyUpdatedAt)} ago` : 'unknown'}
</div>
<div className='text-nowrap'>server key update:</div>
<div className='text-end' suppressHydrationWarning>
{remoteKeyHashUpdatedAt ? `${timeSince(new Date(remoteKeyHashUpdatedAt).getTime())} ago` : 'unknown'}
</div>
<div className='text-nowrap'>wallet update:</div>
<div className='text-end' suppressHydrationWarning>
{walletsUpdatedAt ? `${timeSince(new Date(walletsUpdatedAt).getTime())} ago` : 'unknown'}
</div>
</div>
)
}
function shortHash (hash) {
return hash.slice(0, 6) + '...' + hash.slice(-6)
}