@leosprograms/vf-graphql-holochain
Version:
GraphQL schema bindings for the Holochain implementation of ValueFlows
114 lines • 21.5 kB
JavaScript
/**
* Resolvers for agent fields
*
* @package: hREA
* @since: 2020-05-28
*/
import { mapZomeFn } from '../connection.js';
import { DEFAULT_VF_MODULES, VfModule } from '../types.js';
export default (enabledVFModules = DEFAULT_VF_MODULES, dnaConfig, conductorUri) => {
const hasHistory = -1 !== enabledVFModules.indexOf(VfModule.History);
const hasProcess = -1 !== enabledVFModules.indexOf(VfModule.Process);
const hasCommitment = -1 !== enabledVFModules.indexOf(VfModule.Commitment);
const hasIntent = -1 !== enabledVFModules.indexOf(VfModule.Intent);
const hasObservation = -1 !== enabledVFModules.indexOf(VfModule.Observation);
const hasPlan = -1 !== enabledVFModules.indexOf(VfModule.Plan);
const hasProposal = -1 !== enabledVFModules.indexOf(VfModule.Proposal);
const readRevision = mapZomeFn(dnaConfig, conductorUri, 'combined', 'agent', 'get_revision');
const readProcesses = mapZomeFn(dnaConfig, conductorUri, 'combined', 'indexing', 'query_processes');
const queryCommitments = mapZomeFn(dnaConfig, conductorUri, 'combined', 'commitment_index', 'query_commitments');
const queryIntents = mapZomeFn(dnaConfig, conductorUri, 'combined', 'indexing', 'query_intents');
const queryEconomicEvents = mapZomeFn(dnaConfig, conductorUri, 'combined', 'indexing', 'query_economic_events');
const queryEconomicResources = mapZomeFn(dnaConfig, conductorUri, 'combined', 'indexing', 'query_economic_resources');
const queryPlans = mapZomeFn(dnaConfig, conductorUri, 'combined', 'indexing', 'query_plans');
const queryProposals = mapZomeFn(dnaConfig, conductorUri, 'combined', 'indexing', 'query_plans');
return Object.assign({ __resolveType: (obj, ctx, info) => obj.__typename }, {
relationships: async (record) => {
throw new Error('resolver unimplemented');
},
relationshipsAsSubject: async (record) => {
throw new Error('resolver unimplemented');
},
relationshipsAsObject: async (record) => {
throw new Error('resolver unimplemented');
},
roles: async (record) => {
throw new Error('resolver unimplemented');
},
}, (hasProcess ? {
processes: async (record) => {
// const results = await readProcesses({ params: { inScopeOf: record.id } })
// return results
throw new Error('resolver unimplemented');
},
} : {}), (hasCommitment ? {
commitments: async (record) => {
// const commitments = await queryCommitments({ params: { inScopeOf: record.id } })
// return commitments
throw new Error('resolver unimplemented');
},
commitmentsInScope: async (record) => {
throw new Error('resolver unimplemented');
},
commitmentsAsProvider: async (record) => {
return await queryCommitments({ params: { provider: record.id } });
},
commitmentsAsReceiver: async (record) => {
return await queryCommitments({ params: { receiver: record.id } });
},
} : {}), (hasIntent ? {
intents: async (record) => {
// const intents = await queryIntents({ params: { inScopeOf: record.id } })
// return intents
throw new Error('resolver unimplemented');
},
intentsAsProvider: async (record) => {
return await queryIntents({ params: { provider: record.id } });
},
intentsAsReceiver: async (record) => {
return await queryIntents({ params: { receiver: record.id } });
},
} : {}), (hasObservation ? {
economicEvents: async (record) => {
// const economicEvents = await queryEconomicEvents({ params: { inScopeOf: record.id } })
// return economicEvents
throw new Error('resolver unimplemented');
},
economicEventsInScope: async (record) => {
throw new Error('resolver unimplemented');
},
inventoriedEconomicResources: async (record) => {
const economicResources = await queryEconomicResources({ params: { primaryAccountable: record.id } });
return economicResources;
},
economicEventsAsProvider: async (record) => {
return await queryEconomicEvents({ params: { provider: record.id } });
},
economicEventsAsReceiver: async (record) => {
return await queryEconomicEvents({ params: { receiver: record.id } });
},
} : {}), (hasPlan ? {
plans: async (record) => {
// const plans = await queryPlans({ params: { inScopeOf: record.id } })
// return plans
throw new Error('resolver unimplemented');
},
} : {}), (hasProposal ? {
proposals: async (record) => {
// const proposals = await queryProposals({ params: { inScopeOf: record.id } })
// return proposals
throw new Error('resolver unimplemented');
},
proposalsInScope: async (record) => {
throw new Error('resolver unimplemented');
},
proposalsTo: async (record) => {
throw new Error('resolver unimplemented');
},
} : {}), (hasHistory ? {
revision: async (record, args) => {
return (await readRevision(args)).agent;
},
} : {}));
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9yZXNvbHZlcnMvYWdlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFtQkgsT0FBTyxFQUFnQixTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUMxRCxPQUFPLEVBQWlCLGtCQUFrQixFQUFFLFFBQVEsRUFBcUMsTUFBTSxhQUFhLENBQUE7QUFJNUcsZUFBZSxDQUFDLG1CQUErQixrQkFBa0IsRUFBRSxTQUF3QixFQUFFLFlBQW9CLEVBQUUsRUFBRTtJQUNuSCxNQUFNLFVBQVUsR0FBRyxDQUFDLENBQUMsS0FBSyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ3BFLE1BQU0sVUFBVSxHQUFHLENBQUMsQ0FBQyxLQUFLLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDcEUsTUFBTSxhQUFhLEdBQUcsQ0FBQyxDQUFDLEtBQUssZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUMxRSxNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUMsS0FBSyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ2xFLE1BQU0sY0FBYyxHQUFHLENBQUMsQ0FBQyxLQUFLLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUE7SUFDNUUsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLEtBQUssZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUM5RCxNQUFNLFdBQVcsR0FBRyxDQUFDLENBQUMsS0FBSyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBRXRFLE1BQU0sWUFBWSxHQUFHLFNBQVMsQ0FBb0QsU0FB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LEVBQUUsS0FBSyxFQUFFLE1BQWEsRUFBK0IsRUFBRTtZQUNoRSxNQUFNLElBQUksS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUE7UUFDM0MsQ0FBQztLQUNGLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUNQLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUNaLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBYSxFQUFFLElBQTJDLEVBQWtCLEVBQUU7WUFDN0YsT0FBTyxDQUFDLE1BQU0sWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFBO1FBQ3pDLENBQUM7S0FDRixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FDUixDQUFBO0FBQ0gsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZXNvbHZlcnMgZm9yIGFnZW50IGZpZWxkc1xuICpcbiAqIEBwYWNrYWdlOiBoUkVBXG4gKiBAc2luY2U6ICAgMjAyMC0wNS0yOFxuICovXG5cbmltcG9ydCB7XG4gIFByb2Nlc3MsXG4gIFBsYW5Qcm9jZXNzRmlsdGVyUGFyYW1zLFxuICBQbGFuLFxuICBDb21taXRtZW50LFxuICBQcm9jZXNzQ29ubmVjdGlvbixcbiAgQ29tbWl0bWVudENvbm5lY3Rpb24sXG4gIEFnZW50LFxuICBQZXJzb25SZXNwb25zZSwgT3JnYW5pemF0aW9uUmVzcG9uc2UsXG4gIEludGVudENvbm5lY3Rpb24sXG4gIEVjb25vbWljRXZlbnRDb25uZWN0aW9uLFxuICBFY29ub21pY1Jlc291cmNlQ29ubmVjdGlvbixcbiAgUGxhbkNvbm5lY3Rpb24sXG4gIFByb3Bvc2FsQ29ubmVjdGlvbixcbiAgQWdlbnRSZWxhdGlvbnNoaXBDb25uZWN0aW9uLFxuICBBZ2VudFJlbGF0aW9uc2hpcFJvbGVcbn0gZnJvbSAnQGxlb3Nwcm9ncmFtcy92Zi1ncmFwaHFsJ1xuaW1wb3J0IHsgZXh0cmFjdEVkZ2VzLCBtYXBab21lRm4gfSBmcm9tICcuLi9jb25uZWN0aW9uLmpzJ1xuaW1wb3J0IHsgRE5BSWRNYXBwaW5ncywgREVGQVVMVF9WRl9NT0RVTEVTLCBWZk1vZHVsZSwgQnlSZXZpc2lvbiwgQWRkcmVzc2FibGVJZGVudGlmaWVyIH0gZnJvbSAnLi4vdHlwZXMuanMnXG5pbXBvcnQgeyBDb21taXRtZW50U2VhcmNoSW5wdXQsIEVjb25vbWljRXZlbnRTZWFyY2hJbnB1dCwgRWNvbm9taWNSZXNvdXJjZVNlYXJjaElucHV0LCBJbnRlbnRTZWFyY2hJbnB1dCwgUGxhblNlYXJjaElucHV0LCBQcm9jZXNzU2VhcmNoSW5wdXQsIFByb3Bvc2FsU2VhcmNoSW5wdXQgfSBmcm9tICcuL3pvbWVTZWFyY2hJbnB1dFR5cGVzLmpzJ1xuXG5cbmV4cG9ydCBkZWZhdWx0IChlbmFibGVkVkZNb2R1bGVzOiBWZk1vZHVsZVtdID0gREVGQVVMVF9WRl9NT0RVTEVTLCBkbmFDb25maWc6IEROQUlkTWFwcGluZ3MsIGNvbmR1Y3RvclVyaTogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IGhhc0hpc3RvcnkgPSAtMSAhPT0gZW5hYmxlZFZGTW9kdWxlcy5pbmRleE9mKFZmTW9kdWxlLkhpc3RvcnkpXG4gIGNvbnN0IGhhc1Byb2Nlc3MgPSAtMSAhPT0gZW5hYmxlZFZGTW9kdWxlcy5pbmRleE9mKFZmTW9kdWxlLlByb2Nlc3MpXG4gIGNvbnN0IGhhc0NvbW1pdG1lbnQgPSAtMSAhPT0gZW5hYmxlZFZGTW9kdWxlcy5pbmRleE9mKFZmTW9kdWxlLkNvbW1pdG1lbnQpXG4gIGNvbnN0IGhhc0ludGVudCA9IC0xICE9PSBlbmFibGVkVkZNb2R1bGVzLmluZGV4T2YoVmZNb2R1bGUuSW50ZW50KVxuICBjb25zdCBoYXNPYnNlcnZhdGlvbiA9IC0xICE9PSBlbmFibGVkVkZNb2R1bGVzLmluZGV4T2YoVmZNb2R1bGUuT2JzZXJ2YXRpb24pXG4gIGNvbnN0IGhhc1BsYW4gPSAtMSAhPT0gZW5hYmxlZFZGTW9kdWxlcy5pbmRleE9mKFZmTW9kdWxlLlBsYW4pXG4gIGNvbnN0IGhhc1Byb3Bvc2FsID0gLTEgIT09IGVuYWJsZWRWRk1vZHVsZXMuaW5kZXhPZihWZk1vZHVsZS5Qcm9wb3NhbClcblxuICBjb25zdCByZWFkUmV2aXNpb24gPSBtYXBab21lRm48QnlSZXZpc2lvbiwgUGVyc29uUmVzcG9uc2UgfCBPcmdhbml6YXRpb25SZXNwb25zZT4oZG5hQ29uZmlnLCBjb25kdWN0b3JVcmksICdjb21iaW5lZCcsICdhZ2VudCcsICdnZXRfcmV2aXNpb24nKVxuICBjb25zdCByZWFkUHJvY2Vzc2VzID0gbWFwWm9tZUZuPFByb2Nlc3NTZWFyY2hJbnB1dCwgUHJvY2Vzc0Nvbm5lY3Rpb24+KGRuYUNvbmZpZywgY29uZHVjdG9yVXJpLCAnY29tYmluZWQnLCAnaW5kZXhpbmcnLCAncXVlcnlfcHJvY2Vzc2VzJylcbiAgY29uc3QgcXVlcnlDb21taXRtZW50cyA9IG1hcFpvbWVGbjxDb21taXRtZW50U2VhcmNoSW5wdXQsIENvbW1pdG1lbnRDb25uZWN0aW9uPihkbmFDb25maWcsIGNvbmR1Y3RvclVyaSwgJ2NvbWJpbmVkJywgJ2NvbW1pdG1lbnRfaW5kZXgnLCAncXVlcnlfY29tbWl0bWVudHMnKVxuICBjb25zdCBxdWVyeUludGVudHMgPSBtYXBab21lRm48SW50ZW50U2VhcmNoSW5wdXQsIEludGVudENvbm5lY3Rpb24+KGRuYUNvbmZpZywgY29uZHVjdG9yVXJpLCAnY29tYmluZWQnLCAnaW5kZXhpbmcnLCAncXVlcnlfaW50ZW50cycpXG4gIGNvbnN0IHF1ZXJ5RWNvbm9taWNFdmVudHMgPSBtYXBab21lRm48RWNvbm9taWNFdmVudFNlYXJjaElucHV0LCBFY29ub21pY0V2ZW50Q29ubmVjdGlvbj4oZG5hQ29uZmlnLCBjb25kdWN0b3JVcmksICdjb21iaW5lZCcsICdpbmRleGluZycsICdxdWVyeV9lY29ub21pY19ldmVudHMnKVxuICBjb25zdCBxdWVyeUVjb25vbWljUmVzb3VyY2VzID0gbWFwWm9tZUZuPEVjb25vbWljUmVzb3VyY2VTZWFyY2hJbnB1dCwgRWNvbm9taWNSZXNvdXJjZUNvbm5lY3Rpb24+KGRuYUNvbmZpZywgY29uZHVjdG9yVXJpLCAnY29tYmluZWQnLCAnaW5kZXhpbmcnLCAncXVlcnlfZWNvbm9taWNfcmVzb3VyY2VzJylcbiAgY29uc3QgcXVlcnlQbGFucyA9IG1hcFpvbWVGbjxQbGFuU2VhcmNoSW5wdXQsIFBsYW5Db25uZWN0aW9uPihkbmFDb25maWcsIGNvbmR1Y3RvclVyaSwgJ2NvbWJpbmVkJywgJ2luZGV4aW5nJywgJ3F1ZXJ5X3BsYW5zJylcbiAgY29uc3QgcXVlcnlQcm9wb3NhbHMgPSBtYXBab21lRm48UHJvcG9zYWxTZWFyY2hJbnB1dCwgUHJvcG9zYWxDb25uZWN0aW9uPihkbmFDb25maWcsIGNvbmR1Y3RvclVyaSwgJ2NvbWJpbmVkJywgJ2luZGV4aW5nJywgJ3F1ZXJ5X3BsYW5zJylcblxuICByZXR1cm4gT2JqZWN0LmFzc2lnbihcbiAgICB7IF9fcmVzb2x2ZVR5cGU6IChvYmosIGN0eCwgaW5mbykgPT4gb2JqLl9fdHlwZW5hbWUgfSxcbiAgICB7XG4gICAgICByZWxhdGlvbnNoaXBzOiBhc3luYyAocmVjb3JkOiBBZ2VudCk6IFByb21pc2U8QWdlbnRSZWxhdGlvbnNoaXBDb25uZWN0aW9uPiA9PiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigncmVzb2x2ZXIgdW5pbXBsZW1lbnRlZCcpXG4gICAgICB9LFxuICAgICAgcmVsYXRpb25zaGlwc0FzU3ViamVjdDogYXN5bmMgKHJlY29yZDogQWdlbnQpOiBQcm9taXNlPEFnZW50UmVsYXRpb25zaGlwQ29ubmVjdGlvbj4gPT4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Jlc29sdmVyIHVuaW1wbGVtZW50ZWQnKVxuICAgICAgfSxcbiAgICAgIHJlbGF0aW9uc2hpcHNBc09iamVjdDogYXN5bmMgKHJlY29yZDogQWdlbnQpOiBQcm9taXNlPEFnZW50UmVsYXRpb25zaGlwQ29ubmVjdGlvbj4gPT4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Jlc29sdmVyIHVuaW1wbGVtZW50ZWQnKVxuICAgICAgfSxcbiAgICAgIHJvbGVzOiBhc3luYyAocmVjb3JkOiBBZ2VudCk6IFByb21pc2U8QWdlbnRSZWxhdGlvbnNoaXBSb2xlW10+ID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyZXNvbHZlciB1bmltcGxlbWVudGVkJylcbiAgICAgIH0sXG4gICAgfSxcbiAgICAoaGFzUHJvY2VzcyA/IHtcbiAgICAgIHByb2Nlc3NlczogYXN5bmMgKHJlY29yZDogQWdlbnQpOiBQcm9taXNlPFByb2Nlc3NDb25uZWN0aW9uPiA9PiB7XG4gICAgICAgIC8vIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCByZWFkUHJvY2Vzc2VzKHsgcGFyYW1zOiB7IGluU2NvcGVPZjogcmVjb3JkLmlkIH0gfSlcbiAgICAgICAgLy8gcmV0dXJuIHJlc3VsdHNcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyZXNvbHZlciB1bmltcGxlbWVudGVkJylcbiAgICAgIH0sXG4gICAgfSA6IHt9KSxcbiAgICAoaGFzQ29tbWl0bWVudCA/IHtcbiAgICAgIGNvbW1pdG1lbnRzOiBhc3luYyAocmVjb3JkOiBBZ2VudCk6IFByb21pc2U8Q29tbWl0bWVudENvbm5lY3Rpb24+ID0+IHtcbiAgICAgICAgLy8gY29uc3QgY29tbWl0bWVudHMgPSBhd2FpdCBxdWVyeUNvbW1pdG1lbnRzKHsgcGFyYW1zOiB7IGluU2NvcGVPZjogcmVjb3JkLmlkIH0gfSlcbiAgICAgICAgLy8gcmV0dXJuIGNvbW1pdG1lbnRzXG4gICAgICAgIHRocm93IG5ldyBFcnJvcigncmVzb2x2ZXIgdW5pbXBsZW1lbnRlZCcpXG4gICAgICB9LFxuICAgICAgY29tbWl0bWVudHNJblNjb3BlOiBhc3luYyAocmVjb3JkOiBBZ2VudCk6IFByb21pc2U8Q29tbWl0bWVudENvbm5lY3Rpb24+ID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyZXNvbHZlciB1bmltcGxlbWVudGVkJylcbiAgICAgIH0sXG4gICAgICBjb21taXRtZW50c0FzUHJvdmlkZXI6IGFzeW5jIChyZWNvcmQ6IEFnZW50KTogUHJvbWlzZTxDb21taXRtZW50Q29ubmVjdGlvbj4gPT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgcXVlcnlDb21taXRtZW50cyh7IHBhcmFtczogeyBwcm92aWRlcjogcmVjb3JkLmlkIH0gfSlcbiAgICAgIH0sXG4gICAgICBjb21taXRtZW50c0FzUmVjZWl2ZXI6IGFzeW5jIChyZWNvcmQ6IEFnZW50KTogUHJvbWlzZTxDb21taXRtZW50Q29ubmVjdGlvbj4gPT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgcXVlcnlDb21taXRtZW50cyh7IHBhcmFtczogeyByZWNlaXZlcjogcmVjb3JkLmlkIH0gfSlcbiAgICAgIH0sXG4gICAgfSA6IHt9KSxcbiAgICAoaGFzSW50ZW50ID8ge1xuICAgICAgaW50ZW50czogYXN5bmMgKHJlY29yZDogQWdlbnQpOiBQcm9taXNlPEludGVudENvbm5lY3Rpb24+ID0+IHtcbiAgICAgICAgLy8gY29uc3QgaW50ZW50cyA9IGF3YWl0IHF1ZXJ5SW50ZW50cyh7IHBhcmFtczogeyBpblNjb3BlT2Y6IHJlY29yZC5pZCB9IH0pXG4gICAgICAgIC8vIHJldHVybiBpbnRlbnRzXG4gICAgICAgIHRocm93IG5ldyBFcnJvcigncmVzb2x2ZXIgdW5pbXBsZW1lbnRlZCcpXG4gICAgICB9LFxuICAgICAgaW50ZW50c0FzUHJvdmlkZXI6IGFzeW5jIChyZWNvcmQ6IEFnZW50KTogUHJvbWlzZTxJbnRlbnRDb25uZWN0aW9uPiA9PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCBxdWVyeUludGVudHMoeyBwYXJhbXM6IHsgcHJvdmlkZXI6IHJlY29yZC5pZCB9IH0pXG4gICAgICB9LFxuICAgICAgaW50ZW50c0FzUmVjZWl2ZXI6IGFzeW5jIChyZWNvcmQ6IEFnZW50KTogUHJvbWlzZTxJbnRlbnRDb25uZWN0aW9uPiA9PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCBxdWVyeUludGVudHMoeyBwYXJhbXM6IHsgcmVjZWl2ZXI6IHJlY29yZC5pZCB9IH0pXG4gICAgICB9LFxuICAgIH0gOiB7fSksXG4gICAgKGhhc09ic2VydmF0aW9uID8ge1xuICAgICAgZWNvbm9taWNFdmVudHM6IGFzeW5jIChyZWNvcmQ6IEFnZW50KTogUHJvbWlzZTxFY29ub21pY0V2ZW50Q29ubmVjdGlvbj4gPT4ge1xuICAgICAgICAvLyBjb25zdCBlY29ub21pY0V2ZW50cyA9IGF3YWl0IHF1ZXJ5RWNvbm9taWNFdmVudHMoeyBwYXJhbXM6IHsgaW5TY29wZU9mOiByZWNvcmQuaWQgfSB9KVxuICAgICAgICAvLyByZXR1cm4gZWNvbm9taWNFdmVudHNcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyZXNvbHZlciB1bmltcGxlbWVudGVkJylcbiAgICAgIH0sXG4gICAgICBlY29ub21pY0V2ZW50c0luU2NvcGU6IGFzeW5jIChyZWNvcmQ6IEFnZW50KTogUHJvbWlzZTxFY29ub21pY0V2ZW50Q29ubmVjdGlvbj4gPT4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Jlc29sdmVyIHVuaW1wbGVtZW50ZWQnKVxuICAgICAgfSxcbiAgICAgIGludmVudG9yaWVkRWNvbm9taWNSZXNvdXJjZXM6IGFzeW5jIChyZWNvcmQ6IEFnZW50KTogUHJvbWlzZTxFY29ub21pY1Jlc291cmNlQ29ubmVjdGlvbj4gPT4ge1xuICAgICAgICBjb25zdCBlY29ub21pY1Jlc291cmNlcyA9IGF3YWl0IHF1ZXJ5RWNvbm9taWNSZXNvdXJjZXMoeyBwYXJhbXM6IHsgcHJpbWFyeUFjY291bnRhYmxlOiByZWNvcmQuaWQgfSB9KVxuICAgICAgICByZXR1cm4gZWNvbm9taWNSZXNvdXJjZXNcbiAgICAgIH0sXG4gICAgICBlY29ub21pY0V2ZW50c0FzUHJvdmlkZXI6IGFzeW5jIChyZWNvcmQ6IEFnZW50KTogUHJvbWlzZTxFY29ub21pY0V2ZW50Q29ubmVjdGlvbj4gPT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgcXVlcnlFY29ub21pY0V2ZW50cyh7IHBhcmFtczogeyBwcm92aWRlcjogcmVjb3JkLmlkIH0gfSlcbiAgICAgIH0sXG4gICAgICBlY29ub21pY0V2ZW50c0FzUmVjZWl2ZXI6IGFzeW5jIChyZWNvcmQ6IEFnZW50KTogUHJvbWlzZTxFY29ub21pY0V2ZW50Q29ubmVjdGlvbj4gPT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgcXVlcnlFY29ub21pY0V2ZW50cyh7IHBhcmFtczogeyByZWNlaXZlcjogcmVjb3JkLmlkIH0gfSlcbiAgICAgIH0sXG4gICAgfSA6IHt9KSxcbiAgICAoaGFzUGxhbiA/IHtcbiAgICAgIHBsYW5zOiBhc3luYyAocmVjb3JkOiBBZ2VudCk6IFByb21pc2U8UGxhbkNvbm5lY3Rpb24+ID0+IHtcbiAgICAgICAgLy8gY29uc3QgcGxhbnMgPSBhd2FpdCBxdWVyeVBsYW5zKHsgcGFyYW1zOiB7IGluU2NvcGVPZjogcmVjb3JkLmlkIH0gfSlcbiAgICAgICAgLy8gcmV0dXJuIHBsYW5zXG4gICAgICAgIHRocm93IG5ldyBFcnJvcigncmVzb2x2ZXIgdW5pbXBsZW1lbnRlZCcpXG4gICAgICB9LFxuICAgIH0gOiB7fSksXG4gICAgKGhhc1Byb3Bvc2FsID8ge1xuICAgICAgcHJvcG9zYWxzOiBhc3luYyAocmVjb3JkOiBBZ2VudCk6IFByb21pc2U8UHJvcG9zYWxDb25uZWN0aW9uPiA9PiB7XG4gICAgICAgIC8vIGNvbnN0IHByb3Bvc2FscyA9IGF3YWl0IHF1ZXJ5UHJvcG9zYWxzKHsgcGFyYW1zOiB7IGluU2NvcGVPZjogcmVjb3JkLmlkIH0gfSlcbiAgICAgICAgLy8gcmV0dXJuIHByb3Bvc2Fsc1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Jlc29sdmVyIHVuaW1wbGVtZW50ZWQnKVxuICAgICAgfSxcbiAgICAgIHByb3Bvc2Fsc0luU2NvcGU6IGFzeW5jIChyZWNvcmQ6IEFnZW50KTogUHJvbWlzZTxQcm9wb3NhbENvbm5lY3Rpb24+ID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyZXNvbHZlciB1bmltcGxlbWVudGVkJylcbiAgICAgIH0sXG4gICAgICBwcm9wb3NhbHNUbzogYXN5bmMgKHJlY29yZDogQWdlbnQpOiBQcm9taXNlPFByb3Bvc2FsQ29ubmVjdGlvbj4gPT4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Jlc29sdmVyIHVuaW1wbGVtZW50ZWQnKVxuICAgICAgfSxcbiAgICB9IDoge30pLFxuICAgIChoYXNIaXN0b3J5ID8ge1xuICAgICAgcmV2aXNpb246IGFzeW5jIChyZWNvcmQ6IEFnZW50LCBhcmdzOiB7IHJldmlzaW9uSWQ6IEFkZHJlc3NhYmxlSWRlbnRpZmllciB9KTogUHJvbWlzZTxBZ2VudD4gPT4ge1xuICAgICAgICByZXR1cm4gKGF3YWl0IHJlYWRSZXZpc2lvbihhcmdzKSkuYWdlbnRcbiAgICAgIH0sXG4gICAgfSA6IHt9KSxcbiAgKVxufVxuXG4iXX0=