46 lines
1.5 KiB
JavaScript
46 lines
1.5 KiB
JavaScript
import { useCallback } from 'react'
|
|
import { decode as bolt11Decode } from 'bolt11'
|
|
import { formatMsats } from '@/lib/format'
|
|
import { walletTag } from '@/wallets/common'
|
|
import { useWalletLogManager } from '@/components/wallet-logger'
|
|
|
|
export function useWalletLoggerFactory () {
|
|
const { appendLog } = useWalletLogManager()
|
|
|
|
const log = useCallback((wallet, level) => (message, context = {}) => {
|
|
if (!wallet) {
|
|
return
|
|
}
|
|
|
|
if (context?.bolt11) {
|
|
// automatically populate context from bolt11 to avoid duplicating this code
|
|
const decoded = bolt11Decode(context.bolt11)
|
|
context = {
|
|
...context,
|
|
amount: formatMsats(decoded.millisatoshis),
|
|
payment_hash: decoded.tagsObject.payment_hash,
|
|
description: decoded.tagsObject.description,
|
|
created_at: new Date(decoded.timestamp * 1000).toISOString(),
|
|
expires_at: new Date(decoded.timeExpireDate * 1000).toISOString(),
|
|
// payments should affect wallet status
|
|
status: true
|
|
}
|
|
}
|
|
context.send = true
|
|
|
|
appendLog(wallet, level, message, context)
|
|
console[level !== 'error' ? 'info' : 'error'](`[${walletTag(wallet.def)}]`, message)
|
|
}, [appendLog])
|
|
|
|
return useCallback(wallet => ({
|
|
ok: (message, context) => log(wallet, 'ok')(message, context),
|
|
info: (message, context) => log(wallet, 'info')(message, context),
|
|
error: (message, context) => log(wallet, 'error')(message, context)
|
|
}), [log])
|
|
}
|
|
|
|
export function useWalletLogger (wallet) {
|
|
const factory = useWalletLoggerFactory()
|
|
return factory(wallet)
|
|
}
|