Copy // src/routes/wallet.ts
import { Router } from 'express'
import { WalletSessionManager } from '../wallet/WalletSessionManager'
const router = Router()
/**
* POST /api/wallet/connect
* Create session for connected wallet
*/
router.post('/wallet/connect', async (req, res) => {
try {
const { identityKey } = req.body
if (!identityKey) {
return res.status(400).json({
success: false,
error: 'identityKey is required'
})
}
const sessionManager = WalletSessionManager.getInstance()
const sessionId = sessionManager.createSessionWithIdentity(identityKey)
res.json({
success: true,
sessionId,
identityKey,
message: 'Wallet connected successfully'
})
} catch (error: any) {
console.error('Connect wallet error:', error)
res.status(500).json({
success: false,
error: error.message
})
}
})
/**
* GET /api/wallet/status
* Check session status
*/
router.get('/wallet/status', async (req, res) => {
try {
const sessionId = req.headers['x-session-id'] as string
if (!sessionId) {
return res.status(401).json({
success: false,
connected: false,
error: 'Session ID required'
})
}
const sessionManager = WalletSessionManager.getInstance()
const sessionInfo = sessionManager.getSessionInfo(sessionId)
if (!sessionInfo) {
return res.status(401).json({
success: false,
connected: false,
error: 'Invalid or expired session'
})
}
res.json({
success: true,
connected: true,
identityKey: sessionInfo.identityKey,
connectedAt: sessionInfo.createdAt
})
} catch (error: any) {
console.error('Status check error:', error)
res.status(500).json({
success: false,
connected: false,
error: error.message
})
}
})
/**
* POST /api/wallet/disconnect
* Delete session
*/
router.post('/wallet/disconnect', async (req, res) => {
try {
const sessionId = req.headers['x-session-id'] as string
if (!sessionId) {
return res.status(400).json({
success: false,
error: 'Session ID required'
})
}
const sessionManager = WalletSessionManager.getInstance()
const deleted = sessionManager.deleteSession(sessionId)
res.json({
success: true,
disconnected: deleted,
message: deleted ? 'Session deleted' : 'Session not found'
})
} catch (error: any) {
console.error('Disconnect error:', error)
res.status(500).json({
success: false,
error: error.message
})
}
})
export default router