require('dotenv').config({ quiet: true }) const { jlincInit, jlincProduceEvent, jlincProcessEvent, jlincProduceAgreement, jlincProcessAgreement, } = require("../src/index.js"); const printResults = true; function generateRandomString(length) { const characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; let result = ""; const charactersLength = characters.length; for (let i = 0; i < length; i++) { result += characters.charAt(Math.floor(Math.random() * charactersLength)); } return result; } async function main() { const config = { dataStoreApiUrl: process.env.JLINC_DATA_STORE_API_URL ?? "http://localhost:9090", dataStoreApiKey: process.env.JLINC_DATA_STORE_API_KEY, archiveApiUrl: process.env.JLINC_ARCHIVE_API_URL ?? "http://localhost:9090", archiveApiKey: process.env.JLINC_ARCHIVE_API_KEY, defaultAgreementId: "00000000-0000-0000-0000-000000000000", systemPrefix: process.env.JLINC_SYSTEM_PREFIX ?? "TestJlinc", debug: false, } jlincInit(config); try { let data; let r; // Define participants const entity1 = generateRandomString(11); const entity2 = generateRandomString(11); console.log(`\nAction: Produce (create and sign) agreement`) data = { uri: 'http://localhost:9090/agreements/05c93a30cc699cfaee9185f23a5f68ffb12305acce1ca4b9444758fc4d594828', validRoles: ['provider', 'user'], purposes: ['testing'], caveats: ['production'], requiredSigners: [entity1], signer: entity1, role: 'provider', } r = await jlincProduceAgreement(data) if (r) { if (printResults) { console.log(`Result:`) console.log(`---------------------------------------------`) console.log(JSON.stringify(r, null, 2)) console.log(`---------------------------------------------`) } if (r.created && r.processed) { console.log('PASS') } else { throw new Error('FAIL') } } const agreementId = r.created.agreementId console.log(`\nAction: Process (cross sign) agreement`) data = { agreementId, signer: entity2, role: 'user', } r = await jlincProcessAgreement(data) if (r) { if (printResults) { console.log(`Result:`) console.log(`---------------------------------------------`) console.log(JSON.stringify(r, null, 2)) console.log(`---------------------------------------------`) } if (r.auditData && r.auditData.audit.agreementId === agreementId) { console.log('PASS') } else { throw new Error('FAIL') } } console.log(`\nAction: Produce (create and sign) event for data to be sent`) data = { from: entity1, to: entity2, agreementId, payload: { data: "testing", }, } r = await jlincProduceEvent(data) if (r) { if (printResults) { console.log(`Result:`) console.log(`---------------------------------------------`) console.log(JSON.stringify(r, null, 2)) console.log(`---------------------------------------------`) } if (r.created && r.processed && r.created.agreementId === agreementId) { console.log('PASS') } else { throw new Error('FAIL') } } const eventId = r.created.eventId; console.log(`\nAction: Process (sign) by the receiver after data is sent`) data = { to: entity2, eventId, } r = await jlincProcessEvent(data) if (r) { console.log(`Result:`) if (printResults) { console.log(`---------------------------------------------`) console.log(JSON.stringify(r, null, 2)) console.log(`---------------------------------------------`) } if (r.auditData && r.auditData.audit.eventId === eventId) { console.log('PASS') } else { throw new Error('FAIL') } } console.log(`\nAction: Produce (create and sign) event for data to be sent with successful auth`) data = { from: entity1, to: entity2, auth: { subject: { type: "user", id: "tester", }, action: { name: "read", }, resource: { type: "data", id: "1234", properties: { ownerID: "tester@test.com", } } }, payload: { data: "testing", }, } r = await jlincProduceEvent(data) if (r) { if (printResults) { console.log(`Result:`) console.log(`---------------------------------------------`) console.log(JSON.stringify(r, null, 2)) console.log(`---------------------------------------------`) } if (r.created && r.processed) { console.log('PASS') } else { throw new Error('FAIL') } } console.log(`\nAction: Produce (create and sign) event for data to be sent with failed auth`) data = { from: entity1, to: entity2, auth: { subject: { type: "user", id: "tester", }, action: { name: "write", }, resource: { type: "data", id: "1234", properties: { ownerID: "tester@test.com", } } }, payload: { data: "testing", }, } r = await jlincProduceEvent(data) if (r) { if (printResults) { console.log(`Result:`) console.log(`---------------------------------------------`) console.log(JSON.stringify(r, null, 2)) console.log(`---------------------------------------------`) } if (r.decision != undefined && r.decision == false) { console.log('PASS') } else { throw new Error('FAIL') } } } catch (err) { console.error("[*] ERROR:", err); } } main()