tokenbridge/monitor/utils/file.js

70 lines
1.6 KiB
JavaScript

const fs = require('fs')
const path = require('path')
function readFile(filePath, parseJson = true) {
try {
const content = fs.readFileSync(filePath)
if (!parseJson) return content
const json = JSON.parse(content)
const timeDiff = Math.floor(Date.now() / 1000) - json.lastChecked
return Object.assign({}, json, { timeDiff })
} catch (_) {
console.error(`File ${filePath} does not exist`)
return {
error: 'the bridge statistics are not available'
}
}
}
function writeFile(filePath, object, paramOptions = {}) {
const defaultOptions = {
useCwd: true,
stringify: true
}
const { useCwd, stringify } = Object.assign({}, defaultOptions, paramOptions)
const fullPath = useCwd ? path.join(process.cwd(), filePath) : filePath
fs.writeFileSync(fullPath, stringify ? JSON.stringify(object, null, 4) : object)
}
function createDir(dirPath) {
try {
fs.mkdirSync(path.join(process.cwd(), dirPath), { recursive: true })
} catch (e) {
if (!e.message.includes('exists')) {
throw e
}
}
}
function readCacheFile(filePath) {
try {
return JSON.parse(fs.readFileSync(filePath))
} catch (_) {
return false
}
}
function writeCacheFile(filePath, object) {
fs.mkdirSync(path.dirname(filePath), { recursive: true })
fs.writeFileSync(filePath, JSON.stringify(object))
}
function readAccessListFile(filePath) {
const data = fs.readFileSync(filePath)
return data
.toString()
.split('\n')
.map(addr => addr.trim().toLowerCase())
.filter(addr => addr.length === 42)
}
module.exports = {
readFile,
writeFile,
createDir,
readCacheFile,
writeCacheFile,
readAccessListFile
}