AffixIO's picture
Upload folder using huggingface_hub
44f0c63 verified
/**
* Batch Audit Example - Audit Proof Circuit
*
* This example demonstrates how to generate multiple audit proofs
* in batch for compliance reporting or bulk operations.
*
* ⚠️ Note: This example uses sandbox mode. For production, use API key authentication.
*
* Prerequisites:
* - npm install @affixio/sdk
* - npm install typescript @types/node ts-node
*
* Run with: npx ts-node examples/batch-audit.ts
*/
import { AffixIO } from '@affixio/sdk';
interface AuditEvent {
decisionValue: number;
pseudonymisedId: string;
rulesHash: string;
timestamp: string;
description: string;
}
async function generateBatchAuditProofs(sdk: AffixIO, events: AuditEvent[]) {
console.log(`πŸ“‹ Generating audit proofs for ${events.length} events...\n`);
const results = [];
const errors = [];
for (let i = 0; i < events.length; i++) {
const event = events[i];
console.log(`[${i + 1}/${events.length}] Processing: ${event.description}`);
try {
const result = await sdk.circuits.auditProof({
decisionValue: event.decisionValue,
pseudonymisedId: event.pseudonymisedId,
rulesHash: event.rulesHash,
timestamp: event.timestamp
}, true); // Use sandbox mode
results.push({
event: event.description,
proofId: result.proofId,
verified: result.verified,
decision: result.decision
});
console.log(` βœ… Proof generated: ${result.proofId.substring(0, 20)}...`);
} catch (error: any) {
errors.push({
event: event.description,
error: error.message
});
console.log(` ❌ Error: ${error.message}`);
}
}
console.log('\nπŸ“Š Batch Audit Summary:');
console.log(` Total Events: ${events.length}`);
console.log(` Successful: ${results.length}`);
console.log(` Failed: ${errors.length}`);
console.log(` Success Rate: ${((results.length / events.length) * 100).toFixed(1)}%`);
return { results, errors };
}
async function main() {
// Initialize SDK
// For production, use: new AffixIO({ apiKey: process.env.AFFIXIO_API_KEY })
const sdk = new AffixIO({
sandbox: true
});
// Example: Generate audit proofs for multiple compliance events
const auditEvents: AuditEvent[] = [
{
decisionValue: 1,
pseudonymisedId: '0x' + Buffer.from('user001').toString('hex').padStart(64, '0'),
rulesHash: '0x' + Buffer.from('kyc_verified && age >= 18').toString('hex').padStart(64, '0'),
timestamp: new Date().toISOString(),
description: 'User registration - KYC verified'
},
{
decisionValue: 1,
pseudonymisedId: '0x' + Buffer.from('user002').toString('hex').padStart(64, '0'),
rulesHash: '0x' + Buffer.from('balance >= amount').toString('hex').padStart(64, '0'),
timestamp: new Date().toISOString(),
description: 'Payment authorization - Sufficient balance'
},
{
decisionValue: 0,
pseudonymisedId: '0x' + Buffer.from('user003').toString('hex').padStart(64, '0'),
rulesHash: '0x' + Buffer.from('fraud_score < threshold').toString('hex').padStart(64, '0'),
timestamp: new Date().toISOString(),
description: 'Transaction denied - High fraud score'
},
{
decisionValue: 1,
pseudonymisedId: '0x' + Buffer.from('user004').toString('hex').padStart(64, '0'),
rulesHash: '0x' + Buffer.from('consent_given && gdpr_compliant').toString('hex').padStart(64, '0'),
timestamp: new Date().toISOString(),
description: 'Data processing - GDPR consent verified'
}
];
const { results, errors } = await generateBatchAuditProofs(sdk, auditEvents);
// Generate compliance report
console.log('\nπŸ“„ Compliance Report:');
results.forEach((result, index) => {
console.log(`\n Event ${index + 1}: ${result.event}`);
console.log(` Proof ID: ${result.proofId}`);
console.log(` Status: ${result.verified ? 'βœ… Verified' : '❌ Failed'}`);
console.log(` Decision: ${result.decision ? 'Approved' : 'Denied'}`);
});
if (errors.length > 0) {
console.log('\n⚠️ Errors:');
errors.forEach((error, index) => {
console.log(` ${index + 1}. ${error.event}: ${error.error}`);
});
}
console.log('\nπŸ“ For production use, get your API key at: https://dashboard.affix-io.com');
}
// Run the example
main().catch(console.error);