diff --git a/packages/traceability-schemas/scripts/build-credentials.js b/packages/traceability-schemas/scripts/build-credentials.js index c4427bcb2..6ad9b2c74 100644 --- a/packages/traceability-schemas/scripts/build-credentials.js +++ b/packages/traceability-schemas/scripts/build-credentials.js @@ -9,6 +9,29 @@ const credstatus = require('../src/data/vc/includingcredentialstatus.json'); console.log('🧪 Initializing credential builder'); const schemas = require('../index.js'); +const contextArray = new Set([]); + +// if the key is found, delete the key and add the value to the contextArraySet +// if not available and is an object recurse deeper + +function findAllByKey(obj, keyToFind) { + return Object.entries(obj) + .reduce((acc, [key, value]) => { + if (key === keyToFind) { + value.forEach((contextElement) => { + contextArray.add(contextElement); + }); + // eslint-disable-next-line + delete obj[key]; + return acc.concat(value); + } + if ((typeof value === 'object')) { + return acc.concat(findAllByKey(value, keyToFind)); + } + return acc; + }, []); +} + const issueCreds = async (credTemplate, schemaName) => { try { const key = Ed25519KeyPair.from(require('../src/data/vc/keypair.json')); @@ -21,6 +44,8 @@ const issueCreds = async (credTemplate, schemaName) => { credentialPayload.credentialSubject.type[0] === 'VerifiableCredential' ) { credentialPayload = credentialPayload.credentialSubject; + credentialPayload['@context'] = Array.from(contextArray); + if (typeof credentialPayload.issuer === 'string') { credentialPayload.issuer = key.controller; } else { @@ -64,7 +89,6 @@ const issueCreds = async (credTemplate, schemaName) => { checkStatus: async () => ({ verified: true }) }); } - // console.log(result) if (result.verified) { const vcFile = path.resolve( __dirname, @@ -109,6 +133,11 @@ Object.keys(schemas).forEach((schemaName) => { console.log('Generating credential for:', schemaName); } const credTemplate = JSON.parse(fs.readFileSync(exampleFile)); + findAllByKey(credTemplate, '@context'); + credTemplate['@context'] = Array.from(contextArray); + if (process.env.VERBOSE_BUILD) { + console.log('Credential after context merge:', credTemplate); + } credPromises.push(issueCreds(credTemplate, schemaName)); } catch (fileErr) { console.log('Error reading credential template for schema:', schemaName);