@leosprograms/vf-graphql-holochain
Version:
GraphQL schema bindings for the Holochain implementation of ValueFlows
52 lines • 10.4 kB
JavaScript
/**
* Resolvers for Satisfaction record relationships
*
* @package: HoloREA
* @since: 2019-08-31
*/
import { addTypename, DEFAULT_VF_MODULES, VfModule } from '../types.js';
import { mapZomeFn, remapCellId } from '../connection.js';
async function extractRecordsOrFail(query) {
const val = await query;
if (!val || !val.edges || !val.edges.length || !val.edges[0].node) {
throw new Error('Reference not found');
}
return val.edges[0].node;
}
export default (enabledVFModules = DEFAULT_VF_MODULES, dnaConfig, conductorUri) => {
const hasHistory = -1 !== enabledVFModules.indexOf(VfModule.History);
const hasObservation = -1 !== enabledVFModules.indexOf(VfModule.Observation);
const hasCommitment = -1 !== enabledVFModules.indexOf(VfModule.Commitment);
const hasIntent = -1 !== enabledVFModules.indexOf(VfModule.Intent);
const readRevision = mapZomeFn(dnaConfig, conductorUri, 'combined', 'satisfaction', 'get_revision');
const readEvents = mapZomeFn(dnaConfig, conductorUri, 'combined', 'indexing', 'query_economic_events');
const readCommitments = mapZomeFn(dnaConfig, conductorUri, 'combined', 'indexing', 'query_commitments');
const readIntents = mapZomeFn(dnaConfig, conductorUri, 'combined', 'indexing', 'query_intents');
return Object.assign((hasObservation || hasCommitment ? {
satisfiedBy: async (record) => {
const associatedId = remapCellId(record.id, record.satisfiedBy);
// :NOTE: this presumes a satisfaction will never be erroneously linked to 2 records
return (await Promise.all((hasCommitment ? [
extractRecordsOrFail(readCommitments({ params: { satisfies: associatedId } }))
.then(addTypename('Commitment'))
.catch((e) => e),
] : []).concat(hasObservation ? [
extractRecordsOrFail(readEvents({ params: { satisfies: associatedId } }))
.then(addTypename('EconomicEvent'))
.catch((e) => e),
] : [])))
.filter(r => !(r instanceof Error))
.pop();
}
} : {}), (hasIntent ? {
satisfies: async (record) => {
const results = await readIntents({ params: { satisfiedBy: record.id } });
return results.edges.pop()['node'];
}
} : {}), (hasHistory ? {
revision: async (record, args) => {
return (await readRevision(args)).satisfaction;
},
} : {}));
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2F0aXNmYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vcmVzb2x2ZXJzL3NhdGlzZmFjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUVILE9BQU8sRUFBaUIsV0FBVyxFQUFFLGtCQUFrQixFQUFFLFFBQVEsRUFBcUMsTUFBTSxhQUFhLENBQUE7QUFDekgsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQWF6RCxLQUFLLFVBQVUsb0JBQW9CLENBQUUsS0FBSztJQUN4QyxNQUFNLEdBQUcsR0FBRyxNQUFNLEtBQUssQ0FBQTtJQUN2QixJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUU7UUFDakUsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFBO0tBQ3ZDO0lBQ0QsT0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTtBQUMxQixDQUFDO0FBRUQsZUFBZSxDQUFDLG1CQUErQixrQkFBa0IsRUFBRSxTQUF3QixFQUFFLFlBQW9CLEVBQUUsRUFBRTtJQUNuSCxNQUFNLFVBQVUsR0FBRyxDQUFDLENBQUMsS0FBSyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ3BFLE1BQU0sY0FBYyxHQUFHLENBQUMsQ0FBQyxLQUFLLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUE7SUFDNUUsTUFBTSxhQUFhLEdBQUcsQ0FBQyxDQUFDLEtBQUssZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUMxRSxNQUFNLFNBQVMs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cnMgZm9yIFNhdGlzZmFjdGlvbiByZWNvcmQgcmVsYXRpb25zaGlwc1xuICpcbiAqIEBwYWNrYWdlOiBIb2xvUkVBXG4gKiBAc2luY2U6ICAgMjAxOS0wOC0zMVxuICovXG5cbmltcG9ydCB7IEROQUlkTWFwcGluZ3MsIGFkZFR5cGVuYW1lLCBERUZBVUxUX1ZGX01PRFVMRVMsIFZmTW9kdWxlLCBCeVJldmlzaW9uLCBBZGRyZXNzYWJsZUlkZW50aWZpZXIgfSBmcm9tICcuLi90eXBlcy5qcydcbmltcG9ydCB7IG1hcFpvbWVGbiwgcmVtYXBDZWxsSWQgfSBmcm9tICcuLi9jb25uZWN0aW9uLmpzJ1xuXG5pbXBvcnQge1xuICBTYXRpc2ZhY3Rpb24sXG4gIFNhdGlzZmFjdGlvblJlc3BvbnNlLFxuICBFdmVudE9yQ29tbWl0bWVudCxcbiAgSW50ZW50LFxuICBFY29ub21pY0V2ZW50Q29ubmVjdGlvbixcbiAgQ29tbWl0bWVudENvbm5lY3Rpb24sXG4gIEludGVudENvbm5lY3Rpb24sXG59IGZyb20gJ0BsZW9zcHJvZ3JhbXMvdmYtZ3JhcGhxbCdcbmltcG9ydCB7IENvbW1pdG1lbnRTZWFyY2hJbnB1dCwgRWNvbm9taWNFdmVudFNlYXJjaElucHV0LCBJbnRlbnRTZWFyY2hJbnB1dCB9IGZyb20gJy4vem9tZVNlYXJjaElucHV0VHlwZXMuanMnXG5cbmFzeW5jIGZ1bmN0aW9uIGV4dHJhY3RSZWNvcmRzT3JGYWlsIChxdWVyeSk6IFByb21pc2U8YW55PiB7XG4gIGNvbnN0IHZhbCA9IGF3YWl0IHF1ZXJ5XG4gIGlmICghdmFsIHx8ICF2YWwuZWRnZXMgfHwgIXZhbC5lZGdlcy5sZW5ndGggfHwgIXZhbC5lZGdlc1swXS5ub2RlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdSZWZlcmVuY2Ugbm90IGZvdW5kJylcbiAgfVxuICByZXR1cm4gdmFsLmVkZ2VzWzBdLm5vZGVcbn1cblxuZXhwb3J0IGRlZmF1bHQgKGVuYWJsZWRWRk1vZHVsZXM6IFZmTW9kdWxlW10gPSBERUZBVUxUX1ZGX01PRFVMRVMsIGRuYUNvbmZpZzogRE5BSWRNYXBwaW5ncywgY29uZHVjdG9yVXJpOiBzdHJpbmcpID0+IHtcbiAgY29uc3QgaGFzSGlzdG9yeSA9IC0xICE9PSBlbmFibGVkVkZNb2R1bGVzLmluZGV4T2YoVmZNb2R1bGUuSGlzdG9yeSlcbiAgY29uc3QgaGFzT2JzZXJ2YXRpb24gPSAtMSAhPT0gZW5hYmxlZFZGTW9kdWxlcy5pbmRleE9mKFZmTW9kdWxlLk9ic2VydmF0aW9uKVxuICBjb25zdCBoYXNDb21taXRtZW50ID0gLTEgIT09IGVuYWJsZWRWRk1vZHVsZXMuaW5kZXhPZihWZk1vZHVsZS5Db21taXRtZW50KVxuICBjb25zdCBoYXNJbnRlbnQgPSAtMSAhPT0gZW5hYmxlZFZGTW9kdWxlcy5pbmRleE9mKFZmTW9kdWxlLkludGVudClcblxuICBjb25zdCByZWFkUmV2aXNpb24gPSBtYXBab21lRm48QnlSZXZpc2lvbiwgU2F0aXNmYWN0aW9uUmVzcG9uc2U+KGRuYUNvbmZpZywgY29uZHVjdG9yVXJpLCAnY29tYmluZWQnLCAnc2F0aXNmYWN0aW9uJywgJ2dldF9yZXZpc2lvbicpXG4gIGNvbnN0IHJlYWRFdmVudHMgPSBtYXBab21lRm48RWNvbm9taWNFdmVudFNlYXJjaElucHV0LCBFY29ub21pY0V2ZW50Q29ubmVjdGlvbj4oZG5hQ29uZmlnLCBjb25kdWN0b3JVcmksICdjb21iaW5lZCcsICdpbmRleGluZycsICdxdWVyeV9lY29ub21pY19ldmVudHMnKVxuICBjb25zdCByZWFkQ29tbWl0bWVudHMgPSBtYXBab21lRm48Q29tbWl0bWVudFNlYXJjaElucHV0LCBDb21taXRtZW50Q29ubmVjdGlvbj4oZG5hQ29uZmlnLCBjb25kdWN0b3JVcmksICdjb21iaW5lZCcsICdpbmRleGluZycsICdxdWVyeV9jb21taXRtZW50cycpXG4gIGNvbnN0IHJlYWRJbnRlbnRzID0gbWFwWm9tZUZuPEludGVudFNlYXJjaElucHV0LCBJbnRlbnRDb25uZWN0aW9uPihkbmFDb25maWcsIGNvbmR1Y3RvclVyaSwgJ2NvbWJpbmVkJywgJ2luZGV4aW5nJywgJ3F1ZXJ5X2ludGVudHMnKVxuXG4gIHJldHVybiBPYmplY3QuYXNzaWduKFxuICAgIChoYXNPYnNlcnZhdGlvbiB8fCBoYXNDb21taXRtZW50ID8ge1xuICAgICAgc2F0aXNmaWVkQnk6IGFzeW5jIChyZWNvcmQ6IFNhdGlzZmFjdGlvbik6IFByb21pc2U8RXZlbnRPckNvbW1pdG1lbnQ+ID0+IHtcbiAgICAgICAgY29uc3QgYXNzb2NpYXRlZElkID0gcmVtYXBDZWxsSWQocmVjb3JkLmlkLCByZWNvcmQuc2F0aXNmaWVkQnkpXG4gICAgICAgIC8vIDpOT1RFOiB0aGlzIHByZXN1bWVzIGEgc2F0aXNmYWN0aW9uIHdpbGwgbmV2ZXIgYmUgZXJyb25lb3VzbHkgbGlua2VkIHRvIDIgcmVjb3Jkc1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKChoYXNDb21taXRtZW50ID8gW1xuICAgICAgICAgICAgZXh0cmFjdFJlY29yZHNPckZhaWwocmVhZENvbW1pdG1lbnRzKHsgcGFyYW1zOiB7IHNhdGlzZmllczogYXNzb2NpYXRlZElkIH0gfSkpXG4gICAgICAgICAgICAgIC50aGVuKGFkZFR5cGVuYW1lKCdDb21taXRtZW50JykpXG4gICAgICAgICAgICAgIC5jYXRjaCgoZSkgPT4gZSksXG4gICAgICAgICAgXSA6IFtdKS5jb25jYXQoaGFzT2JzZXJ2YXRpb24gPyBbXG4gICAgICAgICAgICBleHRyYWN0UmVjb3Jkc09yRmFpbChyZWFkRXZlbnRzKHsgcGFyYW1zOiB7IHNhdGlzZmllczogYXNzb2NpYXRlZElkIH0gfSkpXG4gICAgICAgICAgICAgIC50aGVuKGFkZFR5cGVuYW1lKCdFY29ub21pY0V2ZW50JykpXG4gICAgICAgICAgICAgIC5jYXRjaCgoZSkgPT4gZSksXG4gICAgICAgICAgXSA6IFtdKSlcbiAgICAgICAgKVxuICAgICAgICAuZmlsdGVyKHIgPT4gIShyIGluc3RhbmNlb2YgRXJyb3IpKVxuICAgICAgICAucG9wKClcbiAgICAgIH1cbiAgICB9IDoge30pLFxuICAgIChoYXNJbnRlbnQgPyB7XG4gICAgICBzYXRpc2ZpZXM6IGFzeW5jIChyZWNvcmQ6IFNhdGlzZmFjdGlvbik6IFByb21pc2U8SW50ZW50PiA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCByZWFkSW50ZW50cyh7IHBhcmFtczogeyBzYXRpc2ZpZWRCeTogcmVjb3JkLmlkIH0gfSlcbiAgICAgICAgcmV0dXJuIHJlc3VsdHMuZWRnZXMucG9wKCkhWydub2RlJ11cbiAgICAgIH1cbiAgICB9IDoge30pLFxuICAgIChoYXNIaXN0b3J5ID8ge1xuICAgICAgcmV2aXNpb246IGFzeW5jIChyZWNvcmQ6IFNhdGlzZmFjdGlvbiwgYXJnczogeyByZXZpc2lvbklkOiBBZGRyZXNzYWJsZUlkZW50aWZpZXIgfSk6IFByb21pc2U8U2F0aXNmYWN0aW9uPiA9PiB7XG4gICAgICAgIHJldHVybiAoYXdhaXQgcmVhZFJldmlzaW9uKGFyZ3MpKS5zYXRpc2ZhY3Rpb25cbiAgICAgIH0sXG4gICAgfSA6IHt9KSxcbiAgKVxufVxuIl19