// test-device-management.cjs - Test device management functions
require('bare-node-runtime/global')
const path = require('bare-path')
const os = require('bare-os')
const fs = require('bare-fs')
const IdentityKey = require('keet-identity-key')
const b4a = require('b4a')
const {
initializeStorage,
bootstrapDevice,
createInvite,
getCurrentDevice,
listDevices,
closeStorage
} = require('./lib/wallet-storage.cjs')
// Test storage directory
const TEST_DIR = path.join(os.homedir(), '.hyper-wallet-test', 'device-mgmt')
const MNEMONIC_FILE = path.join(TEST_DIR, '.mnemonic')
// Clean test directory
if (fs.existsSync(TEST_DIR)) {
fs.rmSync(TEST_DIR, { recursive: true })
}
fs.mkdirSync(TEST_DIR, { recursive: true, mode: 0o700 })
// Override storage directory for testing
const originalStorageDir = require('./lib/wallet-storage.cjs')
async function runTest() {
console.log('🧪 Testing Device Management\n')
// Test 1: Generate identity
console.log('Test 1: Generate identity')
const mnemonic = IdentityKey.generateMnemonic()
const identity = await IdentityKey.from({ mnemonic })
console.log('✅ Identity generated')
console.log(' Public key:', b4a.toString(identity.identityKeyPair.publicKey, 'hex').slice(0, 16) + '...')
console.log(' Mnemonic:', mnemonic.split(' ').slice(0, 3).join(' ') + '...')
console.log('')
// Test 2: Initialize storage
console.log('Test 2: Initialize storage')
await initializeStorage(identity)
console.log('✅ Storage initialized')
console.log('')
// Test 3: Bootstrap device
console.log('Test 3: Bootstrap device')
const device = await bootstrapDevice(identity, 'Test Device A')
console.log('✅ Device bootstrapped')
console.log(` Name: ${device.name}`)
console.log(` Writer: ${b4a.toString(device.key, 'hex').slice(0, 16)}...`)
console.log(` Proof: ${device.proof ? 'Present' : 'None'}`)
console.log('')
// Test 4: Get current device
console.log('Test 4: Get current device')
const currentDevice = getCurrentDevice()
if (currentDevice) {
console.log('✅ Current device found')
console.log(` Name: ${currentDevice.name}`)
console.log(` Is local: ${currentDevice.isLocal}`)
} else {
console.log('❌ Current device not found!')
}
console.log('')
// Test 5: List devices
console.log('Test 5: List devices')
const devices = listDevices()
console.log(`✅ Found ${devices.length} device(s)`)
for (const d of devices) {
console.log(` - ${d.name} (${d.isLocal ? 'local' : 'remote'})`)
}
console.log('')
// Test 6: Create invite
console.log('Test 6: Create invite')
const invite = await createInvite(identity)
console.log('✅ Invite created')
console.log(` Length: ${invite.length} characters`)
console.log(` Preview: ${invite.slice(0, 40)}...`)
console.log('')
// Decode invite to verify
const inviteJson = b4a.toString(b4a.from(invite, 'base64'))
const inviteData = JSON.parse(inviteJson)
console.log(' Invite contains:')
console.log(` - discoveryKey: ${inviteData.discoveryKey.slice(0, 16)}...`)
console.log(` - identityKey: ${inviteData.identityKey.slice(0, 16)}...`)
console.log(` - autobaseKey: ${inviteData.autobaseKey.slice(0, 16)}...`)
console.log(` - timestamp: ${new Date(inviteData.timestamp).toLocaleString()}`)
console.log('')
// Cleanup
await closeStorage()
console.log('✅ All device management tests passed!')
console.log('')
console.log('Next: Test multi-device pairing with actual Hyperswarm connections')
}
// Run the test
runTest().catch(err => {
console.error('❌ Test failed:', err)
console.error(err.stack)
process.exit(1)
})