@leosprograms/vf-graphql-holochain
Version:
GraphQL schema bindings for the Holochain implementation of ValueFlows
131 lines • 25.3 kB
JavaScript
/**
* Resolvers for Commitment fields
*
* @package: HoloREA
* @since: 2019-08-28
*/
import { DEFAULT_VF_MODULES, VfModule } from '../types.js';
import { extractEdges, mapZomeFn } from '../connection.js';
import agentQueries from '../queries/agent.js';
import agreementQueries from '../queries/agreement.js';
import planQueries from '../queries/plan.js';
export default (enabledVFModules = DEFAULT_VF_MODULES, dnaConfig, conductorUri) => {
const hasHistory = -1 !== enabledVFModules.indexOf(VfModule.History);
const hasAgent = -1 !== enabledVFModules.indexOf(VfModule.Agent);
const hasProcess = -1 !== enabledVFModules.indexOf(VfModule.Process);
const hasResourceSpecification = -1 !== enabledVFModules.indexOf(VfModule.ResourceSpecification);
const hasProcessSpecification = -1 !== enabledVFModules.indexOf(VfModule.ProcessSpecification);
const hasAction = -1 !== enabledVFModules.indexOf(VfModule.Action);
const hasAgreement = -1 !== enabledVFModules.indexOf(VfModule.Agreement);
const hasPlan = -1 !== enabledVFModules.indexOf(VfModule.Plan);
const hasFulfillment = -1 !== enabledVFModules.indexOf(VfModule.Fulfillment);
const hasSatisfaction = -1 !== enabledVFModules.indexOf(VfModule.Satisfaction);
const hasObservation = -1 !== enabledVFModules.indexOf(VfModule.Observation);
const readRevision = mapZomeFn(dnaConfig, conductorUri, 'combined', 'commitment', 'get_revision');
const readFulfillments = mapZomeFn(dnaConfig, conductorUri, 'combined', 'indexing', 'query_fulfillments');
const readSatisfactions = mapZomeFn(dnaConfig, conductorUri, 'combined', 'indexing', 'query_satisfactions');
const readProcesses = mapZomeFn(dnaConfig, conductorUri, 'combined', 'indexing', 'query_processes');
const readResourceSpecification = mapZomeFn(dnaConfig, conductorUri, 'combined', 'resource_specification', 'get_resource_specification');
const readProcessSpecification = mapZomeFn(dnaConfig, conductorUri, 'combined', 'process_specification', 'get_process_specification');
const readAction = mapZomeFn(dnaConfig, conductorUri, 'combined', 'action', 'get_action');
const readPlan = planQueries(dnaConfig, conductorUri)['plan'];
const readAgent = agentQueries(dnaConfig, conductorUri)['agent'];
const readAgreement = agreementQueries(dnaConfig, conductorUri)['agreement'];
return Object.assign((hasFulfillment ? {
fulfilledBy: async (record) => {
const results = await readFulfillments({ params: { fulfills: record.id } });
return extractEdges(results);
},
} : {}), (hasSatisfaction ? {
satisfies: async (record) => {
const results = await readSatisfactions({ params: { satisfiedBy: record.id } });
return extractEdges(results);
},
} : {}), (hasAgent ? {
providerId: async (record) => {
return record.provider ? record.provider : null;
},
provider: async (record) => {
return readAgent(record, { id: record.provider });
},
receiverId: async (record) => {
return record.receiver ? record.receiver : null;
},
receiver: async (record) => {
return readAgent(record, { id: record.receiver });
},
inScopeOf: async (record) => {
return (await Promise.all((record.inScopeOf || []).map((address) => readAgent(record, { address }))));
},
involvedAgents: async (record) => {
return (await Promise.all((record.involvedAgents || []).map((address) => readAgent(record, { address }))));
},
} : {}), (hasProcess ? {
inputOf: async (record) => {
try {
const results = await readProcesses({ params: { committedInputs: record.id } });
console.log("inputOf", results);
return results.edges.pop()['node'];
}
catch (e) {
console.error(`Error fetching inputOf for Commitment ${record.id}`, e);
return null;
}
},
outputOf: async (record) => {
try {
const results = await readProcesses({ params: { committedOutputs: record.id } });
console.log("outputOf", results);
return results.edges.pop()['node'];
}
catch (e) {
console.error(`Error fetching outputOf for Commitment ${record.id}`, e);
return null;
}
},
} : {}), (hasResourceSpecification ? {
resourceConformsTo: async (record) => {
return (await readResourceSpecification({ address: record.resourceConformsTo })).resourceSpecification;
},
} : {}), (hasProcessSpecification ? {
stageId: async (record) => {
return record.stage ? record.stage : "undefined";
},
stage: async (record) => {
return record.stage ? (await readProcessSpecification({ address: record.stage })).processSpecification : {};
},
} : {}), (hasAction ? {
action: async (record) => {
return (await readAction({ id: record.action }));
},
} : {}), (hasAgreement ? {
clauseOf: async (record) => {
if (!record.clauseOf) {
return null;
}
try {
return await readAgreement(record, { id: record.clauseOf });
}
catch (e) {
console.error(`Error fetching clauseOf for Commitment ${record.id}`, e);
return null;
}
},
} : {}), (hasPlan ? {
independentDemandOf: async (record) => {
return readPlan(record, { id: record.independentDemandOf });
},
plannedWithin: async (record) => {
return readPlan(record, { id: record.plannedWithin });
},
} : {}), (hasObservation ? {
resourceInventoriedAs: async (record) => {
throw new Error('resolver unimplemented');
},
} : {}), (hasHistory ? {
revision: async (record, args) => {
return (await readRevision(args)).commitment;
},
} : {}));
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWl0bWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3Jlc29sdmVycy9jb21taXRtZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBRUgsT0FBTyxFQUFpQixrQkFBa0IsRUFBRSxRQUFRLEVBQWdJLE1BQU0sYUFBYSxDQUFBO0FBQ3ZNLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUF3QjFELE9BQU8sWUFBWSxNQUFNLHFCQUFxQixDQUFBO0FBQzlDLE9BQU8sZ0JBQWdCLE1BQU0seUJBQXlCLENBQUE7QUFDdEQsT0FBTyxXQUFXLE1BQU0sb0JBQW9CLENBQUE7QUFHNUMsZUFBZSxDQUFDLG1CQUErQixrQkFBa0IsRUFBRSxTQUF3QixFQUFFLFlBQW9CLEVBQUUsRUFBRTtJQUNuSCxNQUFNLFVBQVUsR0FBRyxDQUFDLENBQUMsS0FBSyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ3BFLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQyxLQUFLLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDaEUsTUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUFDLEtBQUssZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUNwRSxNQUFNLHdCQUF3QixHQUFHLENBQUMsQ0FBQyxLQUFLLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMscUJBQXFCLENBQUMsQ0FBQTtJQUNoRyxNQUFNLHVCQUF1QixHQUFHLENBQUMsQ0FBQyxLQUFLLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQUMsQ0FBQTtJQUM5RixNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUMsS0FBSyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0s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QUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDWixRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQWtCLEVBQUUsSUFBMkMsRUFBdUIsRUFBRTtZQUN2RyxPQUFPLENBQUMsTUFBTSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUE7UUFDOUMsQ0FBQztLQUNGLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUNSLENBQUE7QUFDSCxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFJlc29sdmVycyBmb3IgQ29tbWl0bWVudCBmaWVsZHNcbiAqXG4gKiBAcGFja2FnZTogSG9sb1JFQVxuICogQHNpbmNlOiAgIDIwMTktMDgtMjhcbiAqL1xuXG5pbXBvcnQgeyBETkFJZE1hcHBpbmdzLCBERUZBVUxUX1ZGX01PRFVMRVMsIFZmTW9kdWxlLCBSZWFkUGFyYW1zLCBCeUlkLCBCeVJldmlzaW9uLCBSZXNvdXJjZVNwZWNpZmljYXRpb25BZGRyZXNzLCBBZGRyZXNzYWJsZUlkZW50aWZpZXIsIEFnZW50QWRkcmVzcywgUHJvY2Vzc1NwZWNpZmljYXRpb25BZGRyZXNzIH0gZnJvbSAnLi4vdHlwZXMuanMnXG5pbXBvcnQgeyBleHRyYWN0RWRnZXMsIG1hcFpvbWVGbiB9IGZyb20gJy4uL2Nvbm5lY3Rpb24uanMnXG5cbmltcG9ydCB7XG4gIEFnZW50LFxuICBDb21taXRtZW50LFxuICBDb21taXRtZW50UmVzcG9uc2UsXG4gIEZ1bGZpbGxtZW50LFxuICBTYXRpc2ZhY3Rpb24sXG4gIFByb2Nlc3MsXG4gIFJlc291cmNlU3BlY2lmaWNhdGlvbixcbiAgQWN0aW9uLFxuICBBZ3JlZW1lbnQsXG4gIE1heWJlLFxuICBQbGFuLFxuICBGdWxmaWxsbWVudENvbm5lY3Rpb24sXG4gIFByb2Nlc3NDb25uZWN0aW9uLFxuICBTYXRpc2ZhY3Rpb25Db25uZWN0aW9uLFxuICBSZXNvdXJjZVNwZWNpZmljYXRpb25SZXNwb25zZSxcbiAgUHJvY2Vzc1NwZWNpZmljYXRpb25SZXNwb25zZSxcbiAgQWNjb3VudGluZ1Njb3BlLFxuICBQcm9jZXNzU3BlY2lmaWNhdGlvbixcbiAgRWNvbm9taWNSZXNvdXJjZSxcbn0gZnJvbSAnQGxlb3Nwcm9ncmFtcy92Zi1ncmFwaHFsJ1xuXG5pbXBvcnQgYWdlbnRRdWVyaWVzIGZyb20gJy4uL3F1ZXJpZXMvYWdlbnQuanMnXG5pbXBvcnQgYWdyZWVtZW50UXVlcmllcyBmcm9tICcuLi9xdWVyaWVzL2FncmVlbWVudC5qcydcbmltcG9ydCBwbGFuUXVlcmllcyBmcm9tICcuLi9xdWVyaWVzL3BsYW4uanMnXG5pbXBvcnQgeyBGdWxmaWxsbWVudFNlYXJjaElucHV0LCBQcm9jZXNzU2VhcmNoSW5wdXQsIFNhdGlzZmFjdGlvblNlYXJjaElucHV0IH0gZnJvbSAnLi96b21lU2VhcmNoSW5wdXRUeXBlcy5qcydcblxuZXhwb3J0IGRlZmF1bHQgKGVuYWJsZWRWRk1vZHVsZXM6IFZmTW9kdWxlW10gPSBERUZBVUxUX1ZGX01PRFVMRVMsIGRuYUNvbmZpZzogRE5BSWRNYXBwaW5ncywgY29uZHVjdG9yVXJpOiBzdHJpbmcpID0+IHtcbiAgY29uc3QgaGFzSGlzdG9yeSA9IC0xICE9PSBlbmFibGVkVkZNb2R1bGVzLmluZGV4T2YoVmZNb2R1bGUuSGlzdG9yeSlcbiAgY29uc3QgaGFzQWdlbnQgPSAtMSAhPT0gZW5hYmxlZFZGTW9kdWxlcy5pbmRleE9mKFZmTW9kdWxlLkFnZW50KVxuICBjb25zdCBoYXNQcm9jZXNzID0gLTEgIT09IGVuYWJsZWRWRk1vZHVsZXMuaW5kZXhPZihWZk1vZHVsZS5Qcm9jZXNzKVxuICBjb25zdCBoYXNSZXNvdXJjZVNwZWNpZmljYXRpb24gPSAtMSAhPT0gZW5hYmxlZFZGTW9kdWxlcy5pbmRleE9mKFZmTW9kdWxlLlJlc291cmNlU3BlY2lmaWNhdGlvbilcbiAgY29uc3QgaGFzUHJvY2Vzc1NwZWNpZmljYXRpb24gPSAtMSAhPT0gZW5hYmxlZFZGTW9kdWxlcy5pbmRleE9mKFZmTW9kdWxlLlByb2Nlc3NTcGVjaWZpY2F0aW9uKVxuICBjb25zdCBoYXNBY3Rpb24gPSAtMSAhPT0gZW5hYmxlZFZGTW9kdWxlcy5pbmRleE9mKFZmTW9kdWxlLkFjdGlvbilcbiAgY29uc3QgaGFzQWdyZWVtZW50ID0gLTEgIT09IGVuYWJsZWRWRk1vZHVsZXMuaW5kZXhPZihWZk1vZHVsZS5BZ3JlZW1lbnQpXG4gIGNvbnN0IGhhc1BsYW4gPSAtMSAhPT0gZW5hYmxlZFZGTW9kdWxlcy5pbmRleE9mKFZmTW9kdWxlLlBsYW4pXG4gIGNvbnN0IGhhc0Z1bGZpbGxtZW50ID0gLTEgIT09IGVuYWJsZWRWRk1vZHVsZXMuaW5kZXhPZihWZk1vZHVsZS5GdWxmaWxsbWVudClcbiAgY29uc3QgaGFzU2F0aXNmYWN0aW9uID0gLTEgIT09IGVuYWJsZWRWRk1vZHVsZXMuaW5kZXhPZihWZk1vZHVsZS5TYXRpc2ZhY3Rpb24pXG4gIGNvbnN0IGhhc09ic2VydmF0aW9uID0gLTEgIT09IGVuYWJsZWRWRk1vZHVsZXMuaW5kZXhPZihWZk1vZHVsZS5PYnNlcnZhdGlvbilcblxuICBjb25zdCByZWFkUmV2aXNpb24gPSBtYXBab21lRm48QnlSZXZpc2lvbiwgQ29tbWl0bWVudFJlc3BvbnNlPihkbmFDb25maWcsIGNvbmR1Y3RvclVyaSwgJ2NvbWJpbmVkJywgJ2NvbW1pdG1lbnQnLCAnZ2V0X3JldmlzaW9uJylcbiAgY29uc3QgcmVhZEZ1bGZpbGxtZW50cyA9IG1hcFpvbWVGbjxGdWxmaWxsbWVudFNlYXJjaElucHV0LCBGdWxmaWxsbWVudENvbm5lY3Rpb24+KGRuYUNvbmZpZywgY29uZHVjdG9yVXJpLCAnY29tYmluZWQnLCAnaW5kZXhpbmcnLCAncXVlcnlfZnVsZmlsbG1lbnRzJylcbiAgY29uc3QgcmVhZFNhdGlzZmFjdGlvbnMgPSBtYXBab21lRm48U2F0aXNmYWN0aW9uU2VhcmNoSW5wdXQsIFNhdGlzZmFjdGlvbkNvbm5lY3Rpb24+KGRuYUNvbmZpZywgY29uZHVjdG9yVXJpLCAnY29tYmluZWQnLCAnaW5kZXhpbmcnLCAncXVlcnlfc2F0aXNmYWN0aW9ucycpXG4gIGNvbnN0IHJlYWRQcm9jZXNzZXMgPSBtYXBab21lRm48UHJvY2Vzc1NlYXJjaElucHV0LCBQcm9jZXNzQ29ubmVjdGlvbj4oZG5hQ29uZmlnLCBjb25kdWN0b3JVcmksICdjb21iaW5lZCcsICdpbmRleGluZycsICdxdWVyeV9wcm9jZXNzZXMnKVxuICBjb25zdCByZWFkUmVzb3VyY2VTcGVjaWZpY2F0aW9uID0gbWFwWm9tZUZuPFJlYWRQYXJhbXMsIFJlc291cmNlU3BlY2lmaWNhdGlvblJlc3BvbnNlPihkbmFDb25maWcsIGNvbmR1Y3RvclVyaSwgJ2NvbWJpbmVkJywgJ3Jlc291cmNlX3NwZWNpZmljYXRpb24nLCAnZ2V0X3Jlc291cmNlX3NwZWNpZmljYXRpb24nKVxuICBjb25zdCByZWFkUHJvY2Vzc1NwZWNpZmljYXRpb24gPSBtYXBab21lRm48UmVhZFBhcmFtcywgUHJvY2Vzc1NwZWNpZmljYXRpb25SZXNwb25zZT4oZG5hQ29uZmlnLCBjb25kdWN0b3JVcmksICdjb21iaW5lZCcsICdwcm9jZXNzX3NwZWNpZmljYXRpb24nLCAnZ2V0X3Byb2Nlc3Nfc3BlY2lmaWNhdGlvbicpXG4gIGNvbnN0IHJlYWRBY3Rpb24gPSBtYXBab21lRm48QnlJZCwgQWN0aW9uPihkbmFDb25maWcsIGNvbmR1Y3RvclVyaSwgJ2NvbWJpbmVkJywgJ2FjdGlvbicsICdnZXRfYWN0aW9uJylcbiAgY29uc3QgcmVhZFBsYW4gPSBwbGFuUXVlcmllcyhkbmFDb25maWcsIGNvbmR1Y3RvclVyaSlbJ3BsYW4nXVxuICBjb25zdCByZWFkQWdlbnQgPSBhZ2VudFF1ZXJpZXMoZG5hQ29uZmlnLCBjb25kdWN0b3JVcmkpWydhZ2VudCddXG4gIGNvbnN0IHJlYWRBZ3JlZW1lbnQgPSBhZ3JlZW1lbnRRdWVyaWVzKGRuYUNvbmZpZywgY29uZHVjdG9yVXJpKVsnYWdyZWVtZW50J11cblxuICByZXR1cm4gT2JqZWN0LmFzc2lnbihcbiAgICAoaGFzRnVsZmlsbG1lbnQgPyB7XG4gICAgICBmdWxmaWxsZWRCeTogYXN5bmMgKHJlY29yZDogQ29tbWl0bWVudCk6IFByb21pc2U8RnVsZmlsbG1lbnRbXT4gPT4ge1xuICAgICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgcmVhZEZ1bGZpbGxtZW50cyh7IHBhcmFtczogeyBmdWxmaWxsczogcmVjb3JkLmlkIH0gfSlcbiAgICAgICAgcmV0dXJuIGV4dHJhY3RFZGdlcyhyZXN1bHRzKVxuICAgICAgfSxcbiAgICB9IDoge30pLFxuICAgIChoYXNTYXRpc2ZhY3Rpb24gPyB7XG4gICAgICBzYXRpc2ZpZXM6IGFzeW5jIChyZWNvcmQ6IENvbW1pdG1lbnQpOiBQcm9taXNlPFNhdGlzZmFjdGlvbltdPiA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCByZWFkU2F0aXNmYWN0aW9ucyh7IHBhcmFtczogeyBzYXRpc2ZpZWRCeTogcmVjb3JkLmlkIH0gfSlcbiAgICAgICAgcmV0dXJuIGV4dHJhY3RFZGdlcyhyZXN1bHRzKVxuICAgICAgfSxcbiAgICB9IDoge30pLFxuICAgIChoYXNBZ2VudCA/IHtcbiAgICAgIHByb3ZpZGVySWQ6IGFzeW5jIChyZWNvcmQ6IENvbW1pdG1lbnQpOiBQcm9taXNlPGFueT4gPT4ge1xuICAgICAgICByZXR1cm4gcmVjb3JkLnByb3ZpZGVyID8gcmVjb3JkLnByb3ZpZGVyIDogbnVsbFxuICAgICAgfSxcblxuICAgICAgcHJvdmlkZXI6IGFzeW5jIChyZWNvcmQ6IENvbW1pdG1lbnQpOiBQcm9taXNlPEFnZW50PiA9PiB7XG4gICAgICAgIHJldHVybiByZWFkQWdlbnQocmVjb3JkLCB7IGlkOiByZWNvcmQucHJvdmlkZXIgfSlcbiAgICAgIH0sXG5cbiAgICAgIHJlY2VpdmVySWQ6IGFzeW5jIChyZWNvcmQ6IENvbW1pdG1lbnQpOiBQcm9taXNlPGFueT4gPT4ge1xuICAgICAgICByZXR1cm4gcmVjb3JkLnJlY2VpdmVyID8gcmVjb3JkLnJlY2VpdmVyIDogbnVsbFxuICAgICAgfSxcblxuICAgICAgcmVjZWl2ZXI6IGFzeW5jIChyZWNvcmQ6IENvbW1pdG1lbnQpOiBQcm9taXNlPEFnZW50PiA9PiB7XG4gICAgICAgIHJldHVybiByZWFkQWdlbnQocmVjb3JkLCB7IGlkOiByZWNvcmQucmVjZWl2ZXIgfSlcbiAgICAgIH0sXG4gICAgICBpblNjb3BlT2Y6IGFzeW5jIChyZWNvcmQ6IHsgaW5TY29wZU9mOiBBZ2VudEFkZHJlc3NbXSB9KTogUHJvbWlzZTxBY2NvdW50aW5nU2NvcGVbXT4gPT4ge1xuICAgICAgICByZXR1cm4gKGF3YWl0IFByb21pc2UuYWxsKChyZWNvcmQuaW5TY29wZU9mIHx8IFtdKS5tYXAoKGFkZHJlc3MpPT5yZWFkQWdlbnQocmVjb3JkLCB7YWRkcmVzc30pKSkpXG4gICAgICB9LFxuICAgICAgaW52b2x2ZWRBZ2VudHM6IGFzeW5jIChyZWNvcmQ6IHsgaW52b2x2ZWRBZ2VudHM6IEFnZW50QWRkcmVzc1tdIH0pOiBQcm9taXNlPEFnZW50W10+ID0+IHtcbiAgICAgICAgcmV0dXJuIChhd2FpdCBQcm9taXNlLmFsbCgocmVjb3JkLmludm9sdmVkQWdlbnRzIHx8IFtdKS5tYXAoKGFkZHJlc3MpPT5yZWFkQWdlbnQocmVjb3JkLCB7YWRkcmVzc30pKSkpXG4gICAgICB9LFxuICAgIH0gOiB7fSksXG4gICAgKGhhc1Byb2Nlc3MgPyB7XG4gICAgICBpbnB1dE9mOiBhc3luYyAocmVjb3JkOiBDb21taXRtZW50KTogUHJvbWlzZTxQcm9jZXNzIHwgbnVsbD4gPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCByZWFkUHJvY2Vzc2VzKHsgcGFyYW1zOiB7IGNvbW1pdHRlZElucHV0czogcmVjb3JkLmlkIH0gfSlcbiAgICAgICAgICBjb25zb2xlLmxvZyhcImlucHV0T2ZcIiwgcmVzdWx0cylcbiAgICAgICAgICByZXR1cm4gcmVzdWx0cy5lZGdlcy5wb3AoKSFbJ25vZGUnXVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgRXJyb3IgZmV0Y2hpbmcgaW5wdXRPZiBmb3IgQ29tbWl0bWVudCAke3JlY29yZC5pZH1gLCBlKVxuICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIG91dHB1dE9mOiBhc3luYyAocmVjb3JkOiBDb21taXRtZW50KTogUHJvbWlzZTxQcm9jZXNzIHwgbnVsbD4gPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCByZWFkUHJvY2Vzc2VzKHsgcGFyYW1zOiB7IGNvbW1pdHRlZE91dHB1dHM6IHJlY29yZC5pZCB9IH0pXG4gICAgICAgICAgY29uc29sZS5sb2coXCJvdXRwdXRPZlwiLCByZXN1bHRzKVxuICAgICAgICAgIHJldHVybiByZXN1bHRzLmVkZ2VzLnBvcCgpIVsnbm9kZSddXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBFcnJvciBmZXRjaGluZyBvdXRwdXRPZiBmb3IgQ29tbWl0bWVudCAke3JlY29yZC5pZH1gLCBlKVxuICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSA6IHt9KSxcbiAgICAoaGFzUmVzb3VyY2VTcGVjaWZpY2F0aW9uID8ge1xuICAgICAgcmVzb3VyY2VDb25mb3Jtc1RvOiBhc3luYyAocmVjb3JkOiB7IHJlc291cmNlQ29uZm9ybXNUbzogUmVzb3VyY2VTcGVjaWZpY2F0aW9uQWRkcmVzcyB9KTogUHJvbWlzZTxSZXNvdXJjZVNwZWNpZmljYXRpb24+ID0+IHtcbiAgICAgICAgcmV0dXJuIChhd2FpdCByZWFkUmVzb3VyY2VTcGVjaWZpY2F0aW9uKHsgYWRkcmVzczogcmVjb3JkLnJlc291cmNlQ29uZm9ybXNUbyB9KSkucmVzb3VyY2VTcGVjaWZpY2F0aW9uXG4gICAgICB9LFxuICAgIH0gOiB7fSksXG4gICAgKGhhc1Byb2Nlc3NTcGVjaWZpY2F0aW9uID8ge1xuICAgICAgc3RhZ2VJZDogYXN5bmMgKHJlY29yZDogQ29tbWl0bWVudCk6IFByb21pc2U8YW55PiA9PiB7XG4gICAgICAgIHJldHVybiByZWNvcmQuc3RhZ2UgPyByZWNvcmQuc3RhZ2UgOiBcInVuZGVmaW5lZFwiXG4gICAgICB9LFxuICAgICAgc3RhZ2U6IGFzeW5jIChyZWNvcmQ6IHsgc3RhZ2U6IFByb2Nlc3NTcGVjaWZpY2F0aW9uQWRkcmVzcyB9KTogUHJvbWlzZTxQcm9jZXNzU3BlY2lmaWNhdGlvbiB8IHt9PiA9PiB7XG4gICAgICAgIHJldHVybiByZWNvcmQuc3RhZ2UgPyAoYXdhaXQgcmVhZFByb2Nlc3NTcGVjaWZpY2F0aW9uKHsgYWRkcmVzczogcmVjb3JkLnN0YWdlIH0pKS5wcm9jZXNzU3BlY2lmaWNhdGlvbiA6IHt9XG4gICAgICB9LFxuICAgIH0gOiB7fSksXG4gICAgKGhhc0FjdGlvbiA/IHtcbiAgICAgIGFjdGlvbjogYXN5bmMgKHJlY29yZDogeyBhY3Rpb246IEFkZHJlc3NhYmxlSWRlbnRpZmllciB9KTogUHJvbWlzZTxBY3Rpb24+ID0+IHtcbiAgICAgICAgcmV0dXJuIChhd2FpdCByZWFkQWN0aW9uKHsgaWQ6IHJlY29yZC5hY3Rpb24gfSkpXG4gICAgICB9LFxuICAgIH0gOiB7fSksXG4gICAgKGhhc0FncmVlbWVudCA/IHtcbiAgICAgIGNsYXVzZU9mOiBhc3luYyAocmVjb3JkOiBDb21taXRtZW50KTogUHJvbWlzZTxNYXliZTxBZ3JlZW1lbnQ+PiA9PiB7XG4gICAgICAgIGlmICghcmVjb3JkLmNsYXVzZU9mKSB7IHJldHVybiBudWxsIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gYXdhaXQgcmVhZEFncmVlbWVudChyZWNvcmQsIHsgaWQ6IHJlY29yZC5jbGF1c2VPZiB9KVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgRXJyb3IgZmV0Y2hpbmcgY2xhdXNlT2YgZm9yIENvbW1pdG1lbnQgJHtyZWNvcmQuaWR9YCwgZSlcbiAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0gOiB7fSksXG4gICAgKGhhc1BsYW4gPyB7XG4gICAgICBpbmRlcGVuZGVudERlbWFuZE9mOiBhc3luYyAocmVjb3JkOiBDb21taXRtZW50KTogUHJvbWlzZTxQbGFuPiA9PiB7XG4gICAgICAgIHJldHVybiByZWFkUGxhbihyZWNvcmQsIHsgaWQ6IHJlY29yZC5pbmRlcGVuZGVudERlbWFuZE9mIH0pXG4gICAgICB9LFxuICAgICAgcGxhbm5lZFdpdGhpbjogYXN5bmMgKHJlY29yZDogQ29tbWl0bWVudCk6IFByb21pc2U8UGxhbj4gPT4ge1xuICAgICAgICByZXR1cm4gcmVhZFBsYW4ocmVjb3JkLCB7IGlkOiByZWNvcmQucGxhbm5lZFdpdGhpbiB9KVxuICAgICAgfSxcbiAgICB9IDoge30pLFxuICAgIChoYXNPYnNlcnZhdGlvbiA/IHtcbiAgICAgIHJlc291cmNlSW52ZW50b3JpZWRBczogYXN5bmMgKHJlY29yZDogQ29tbWl0bWVudCk6IFByb21pc2U8RWNvbm9taWNSZXNvdXJjZT4gPT4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Jlc29sdmVyIHVuaW1wbGVtZW50ZWQnKVxuICAgICAgfSxcbiAgICB9IDoge30pLFxuICAgIChoYXNIaXN0b3J5ID8ge1xuICAgICAgcmV2aXNpb246IGFzeW5jIChyZWNvcmQ6IENvbW1pdG1lbnQsIGFyZ3M6IHsgcmV2aXNpb25JZDogQWRkcmVzc2FibGVJZGVudGlmaWVyIH0pOiBQcm9taXNlPENvbW1pdG1lbnQ+ID0+IHtcbiAgICAgICAgcmV0dXJuIChhd2FpdCByZWFkUmV2aXNpb24oYXJncykpLmNvbW1pdG1lbnRcbiAgICAgIH0sXG4gICAgfSA6IHt9KSxcbiAgKVxufVxuIl19