import express from 'express';
import { initialise } from '@prudra/core';
import { walletMiddleware, payMiddleware, vaultMiddleware } from '@prudra/express';
initialise({ apiKey: process.env.PRUDRA_API_KEY! });
const app = express();
app.use(express.json());
app.post(
'/agent/step',
walletMiddleware({ walletId: process.env.BYO_WALLET_ID }),
payMiddleware({
price: '0.01',
description: 'Agent step',
acceptSessions: true, // Enable session payments
}),
vaultMiddleware(),
async (req, res) => {
const { step, query } = req.body as { step: string; query: string };
const vault = req.vault!;
// Simulate step-specific work
const result = { step, query, output: `Completed: ${step}` };
// All session requests share this vault — documents accumulate
await vault.emit('agent.step', { step, completedAt: new Date().toISOString() });
await vault.addDocument(result, `Step: ${step}`);
res.json({
vaultId: vault.id, // same across all session requests
sessionId: req.sessionId, // return so agent can include in next request
step,
result,
});
}
);
app.post(
'/agent/finish',
walletMiddleware({ walletId: process.env.BYO_WALLET_ID }),
payMiddleware({ price: '0.00', acceptSessions: true }),
vaultMiddleware(),
async (req, res) => {
const vault = req.vault!;
// Persist before sealing — keeps vault alive after session expires
await vault.persist();
await vault.seal('Agent session complete');
const manifest = await vault.getManifest();
res.json({
vaultId: vault.id,
status: 'complete',
documents: manifest.documents,
files: manifest.files,
});
}
);