/** * Test suite for OAP VC conversion tools */ import { exportPassportToVC, exportDecisionToVC, importVCToPassport, importVCToDecision, OAPPassport, OAPDecision, RegistryKey, } from "./index.js"; // Sample OAP Passport const samplePassport: OAPPassport = { agent_id: "550e8400-e29b-41d4-a716-446655440000", kind: "template", spec_version: "oap/1.0", owner_id: "org_12345678", owner_type: "org", assurance_level: "L2", status: "active", capabilities: [ { id: "finance.payment.refund", params: { currency_limits: { USD: { max_per_tx: 5000 } } }, }, { id: "data.export", params: { max_rows: 100000 } }, ], limits: { "finance.payment.refund": { currency_limits: { USD: { max_per_tx: 5000, daily_cap: 50000 }, }, reason_codes: ["customer_request", "defective_product"], idempotency_required: true, }, }, regions: ["US", "CA"], metadata: { name: "Customer Support AI", description: "AI agent for customer support operations", }, created_at: "2024-01-01T00:00:00Z", updated_at: "2024-01-15T10:30:00Z", version: "1.0.0", }; // Sample OAP Decision const sampleDecision: OAPDecision = { decision_id: "550e8400-e29b-41d4-a716-446655440002", policy_id: "finance.payment.refund.v1", agent_id: "550e8400-e29b-41d4-a716-446655440000", owner_id: "org_12345678", assurance_level: "L2", allow: true, reasons: [{ code: "oap.allowed", message: "Transaction within limits" }], created_at: "2024-01-15T10:30:00Z", expires_in: 3600, passport_digest: "sha256:abcd1234efgh5678ijkl9012mnop3456qrst7890uvwx1234yzab5678cdef", signature: "eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9...", kid: "oap:registry:key-2025-01", decision_token: "eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9...", }; // Sample Registry Key const sampleRegistryKey: RegistryKey = { issuer: "https://aport.io", kid: "key-2025-01", publicKey: "placeholder-public-key", privateKey: "placeholder-private-key", }; async function runTests() { console.log("๐Ÿงช Running OAP VC Conversion Tests\n"); try { // Test 1: Export Passport to VC console.log("1. Testing Passport โ†’ VC conversion..."); const passportVC = await exportPassportToVC(samplePassport, sampleRegistryKey); console.log(" โœ… Passport exported to VC successfully"); console.log(` ๐Ÿ“„ VC Type: ${passportVC.type.join(", ")}`); console.log(` ๐Ÿข Issuer: ${passportVC.issuer}`); console.log(` ๐Ÿ“… Issuance Date: ${passportVC.issuanceDate}`); console.log(` โฐ Expiration Date: ${passportVC.expirationDate}\n`); // Test 2: Export Decision to VC console.log("2. Testing Decision โ†’ VC conversion..."); const decisionVC = await exportDecisionToVC(sampleDecision, sampleRegistryKey); console.log(" โœ… Decision exported to VC successfully"); console.log(` ๐Ÿ“„ VC Type: ${decisionVC.type.join(", ")}`); console.log(` ๐Ÿข Issuer: ${decisionVC.issuer}`); console.log(` ๐Ÿ“… Issuance Date: ${decisionVC.issuanceDate}`); console.log(` โฐ Expiration Date: ${decisionVC.expirationDate}\n`); // Test 3: Import VC to Passport console.log("3. Testing VC โ†’ Passport conversion..."); const importedPassport = await importVCToPassport(passportVC); console.log(" โœ… VC imported to Passport successfully"); console.log(` ๐Ÿ†” Agent ID: ${importedPassport.agent_id}`); console.log(` ๐Ÿ“‹ Kind: ${importedPassport.kind}`); console.log(` ๐Ÿ” Assurance Level: ${importedPassport.assurance_level}`); console.log( ` ๐Ÿ“Š Capabilities: ${importedPassport.capabilities.length} capabilities\n` ); // Test 4: Import VC to Decision console.log("4. Testing VC โ†’ Decision conversion..."); const importedDecision = await importVCToDecision(decisionVC); console.log(" โœ… VC imported to Decision successfully"); console.log(` ๐Ÿ†” Decision ID: ${importedDecision.decision_id}`); console.log(` ๐Ÿ“‹ Policy ID: ${importedDecision.policy_id}`); console.log(` โœ… Allow: ${importedDecision.allow}`); console.log(` ๐Ÿ“ Reasons: ${importedDecision.reasons.length} reasons\n`); // Test 5: Round-trip conversion console.log( "5. Testing round-trip conversion (Passport โ†’ VC โ†’ Passport)..." ); const roundTripPassport = await importVCToPassport( await exportPassportToVC(samplePassport, sampleRegistryKey) ); const isEqual = JSON.stringify(samplePassport) === JSON.stringify(roundTripPassport); console.log( ` ${isEqual ? "โœ…" : "โŒ"} Round-trip conversion ${ isEqual ? "preserved" : "modified" } data` ); console.log(` ๐Ÿ†” Original Agent ID: ${samplePassport.agent_id}`); console.log(` ๐Ÿ†” Round-trip Agent ID: ${roundTripPassport.agent_id}\n`); console.log( "๐ŸŽ‰ All tests passed! OAP VC conversion tools are working correctly." ); } catch (error) { console.error( "โŒ Test failed:", error instanceof Error ? error.message : "Unknown error" ); process.exit(1); } } // Run tests runTests();