// lib/secure-storage.cjs - File-based Mnemonic Storage (Bare Runtime)
//
// NOTE: This is a simplified version for Bare runtime.
// Uses file-based storage instead of OS keychain.
// In production, consider using encrypted storage.
const fs = require('fs')
const path = require('path')
const os = require('os')
const STORAGE_DIR = path.join(os.homedir(), '.hyper-wallet')
const MNEMONIC_FILE = path.join(STORAGE_DIR, '.mnemonic')
/**
* Ensure storage directory exists
*/
function ensureStorageDir() {
if (!fs.existsSync(STORAGE_DIR)) {
fs.mkdirSync(STORAGE_DIR, { recursive: true, mode: 0o700 })
}
}
/**
* Store mnemonic in file
* @param {String} mnemonic - BIP39 mnemonic phrase
*/
async function storeMnemonic(mnemonic) {
ensureStorageDir()
fs.writeFileSync(MNEMONIC_FILE, mnemonic, { mode: 0o600 })
}
/**
* Retrieve mnemonic from file
* @returns {String|null} - Mnemonic or null if not found
*/
async function loadMnemonic() {
try {
if (!fs.existsSync(MNEMONIC_FILE)) {
return null
}
return fs.readFileSync(MNEMONIC_FILE, 'utf8').trim()
} catch (err) {
return null
}
}
/**
* Delete mnemonic file
*/
async function deleteMnemonic() {
if (fs.existsSync(MNEMONIC_FILE)) {
fs.unlinkSync(MNEMONIC_FILE)
}
}
/**
* Check if wallet is initialized (mnemonic file exists)
* @returns {Boolean}
*/
async function isInitialized() {
const mnemonic = await loadMnemonic()
return mnemonic !== null
}
module.exports = {
storeMnemonic,
loadMnemonic,
deleteMnemonic,
isInitialized
}