import EventSource from 'eventsource';
async function streamVaultEvents(vaultId: string, accessToken: string) {
return new Promise<void>((resolve, reject) => {
const es = new EventSource(
`https://api.prudra.dev/vaults/${vaultId}/events`,
{ headers: { Authorization: `Bearer ${accessToken}` } }
);
es.onmessage = (event) => {
const data = JSON.parse(event.data);
switch (data.type) {
case 'job.progress':
console.log(`Progress: ${data.payload.current}/${data.payload.total}`);
break;
case 'vault.sealed':
console.log('Job complete:', data.payload.summary);
es.close();
resolve();
break;
}
};
es.onerror = (err) => {
es.close();
reject(new Error('SSE connection failed'));
};
});
}
// Usage
const result = await fetch(serverUrl, { method: 'POST', ... });
const { vaultId, accessToken, streamUrl } = await result.json();
// Subscribe to events while server processes
await streamVaultEvents(vaultId, accessToken);
// Read final results
const vault = await readVault(vaultId, accessToken);