@leosprograms/vf-graphql-holochain
Version:
GraphQL schema bindings for the Holochain implementation of ValueFlows
166 lines (147 loc) • 6.38 kB
text/typescript
/**
* Resolver callbacks to bind vf-graphql with HoloREA DNAs
*
* @package: HoloREA
* @since: 2019-05-20
*/
import { DNAIdMappings, ResolverOptions, URI, Decimal, DEFAULT_VF_MODULES, VfModule } from '../types.js'
import { DateTimeResolver as DateTime } from 'graphql-scalars'
import { autoConnect, openConnection } from '../connection.js'
import Query from '../queries/index.js'
import Mutation from '../mutations/index.js'
import Revision from './revision.js'
import Measure from './measure.js'
import Unit from './unit.js'
import ResourceSpecification from './resourceSpecification.js'
import Agent from './agent.js'
import Process from './process.js'
import ProcessSpecification from './processSpecification.js'
import EconomicResource from './economicResource.js'
import EconomicEvent from './economicEvent.js'
import Commitment from './commitment.js'
import Fulfillment from './fulfillment.js'
import Intent from './intent.js'
import Satisfaction from './satisfaction.js'
import Proposal from './proposal.js'
import ProposedTo from './proposedTo.js'
import ProposedIntent from './proposedIntent.js'
import Agreement from './agreement.js'
import Plan from './plan.js'
import RecipeFlow from './recipeFlow.js'
import RecipeProcess from './recipeProcess.js'
import RecipeExchange from './recipeExchange.js'
// union type disambiguation
const EventOrCommitment = {
__resolveType: (obj, ctx, info) => obj.__typename,
}
const ProductionFlowItem = {
__resolveType: (obj, ctx, info) => obj.__typename,
}
const AccountingScope = {
__resolveType: (obj, ctx, info) => obj.__typename,
}
const TrackTraceItem = {
__resolveType: (obj, ctx, info) => obj.__typename,
}
// the default export
const generateResolvers = async (options: ResolverOptions) => {
const {
weaveAppAgentClient,
enabledVFModules,
conductorUri,
adminConductorUri,
appId,
dnaConfig,
traceAppSignals = undefined,
origin = undefined,
} = options
const hasHistory = -1 !== enabledVFModules.indexOf(VfModule.History)
const hasAgent = -1 !== enabledVFModules.indexOf(VfModule.Agent)
const hasMeasurement = -1 !== enabledVFModules.indexOf(VfModule.Measurement)
const hasResourceSpecification = -1 !== enabledVFModules.indexOf(VfModule.ResourceSpecification)
const hasObservation = -1 !== enabledVFModules.indexOf(VfModule.Observation)
const hasProcess = -1 !== enabledVFModules.indexOf(VfModule.Process)
const hasProcessSpecification = -1 !== enabledVFModules.indexOf(VfModule.ProcessSpecification)
const hasCommitment = -1 !== enabledVFModules.indexOf(VfModule.Commitment)
const hasFulfillment = -1 !== enabledVFModules.indexOf(VfModule.Fulfillment)
const hasIntent = -1 !== enabledVFModules.indexOf(VfModule.Intent)
const hasSatisfaction = -1 !== enabledVFModules.indexOf(VfModule.Satisfaction)
const hasProposal = -1 !== enabledVFModules.indexOf(VfModule.Proposal)
const hasAgreement = -1 !== enabledVFModules.indexOf(VfModule.Agreement)
const hasPlan = -1 !== enabledVFModules.indexOf(VfModule.Plan)
const hasRecipe = -1 !== enabledVFModules.indexOf(VfModule.Recipe)
// prefetch connection for this API schema
// and also this makes calls to the admin conductor to authorize a set of signing
// credentials for each Cell
if (origin) {
console.log("autoconnecting with origin", origin)
await autoConnect(weaveAppAgentClient, conductorUri, adminConductorUri, appId, traceAppSignals, origin)
} else {
console.log("autoconnecting no origin")
await autoConnect(weaveAppAgentClient, conductorUri, adminConductorUri, appId, traceAppSignals)
}
return Object.assign({
// scalars
URI, DateTime,
// root schemas
Query: Query(enabledVFModules, dnaConfig, conductorUri),
Mutation: Mutation(enabledVFModules, dnaConfig, conductorUri),
},
// union type disambiguators
(hasObservation && hasProcess ? { ProductionFlowItem } : {}),
(hasAgent ? { AccountingScope } : {}),
(hasSatisfaction ? { EventOrCommitment } : {}),
(hasObservation ? { TrackTraceItem } : {}),
// object field resolvers
(hasHistory ? {
Revision: Revision(enabledVFModules, dnaConfig, conductorUri),
} : {}),
(hasAgent ? {
Agent: Agent(enabledVFModules, dnaConfig, conductorUri),
Person: Agent(enabledVFModules, dnaConfig, conductorUri),
Organization: Agent(enabledVFModules, dnaConfig, conductorUri),
} : {}),
(hasMeasurement ? {
Measure: Measure(enabledVFModules, dnaConfig, conductorUri),
Unit: Unit(enabledVFModules, dnaConfig, conductorUri)
} : {}),
(hasResourceSpecification ? { ResourceSpecification: ResourceSpecification(enabledVFModules, dnaConfig, conductorUri) } : {}),
(hasObservation ? {
EconomicEvent: EconomicEvent(enabledVFModules, dnaConfig, conductorUri),
EconomicResource: EconomicResource(enabledVFModules, dnaConfig, conductorUri),
} : {}),
(hasProcess ? {
Process: Process(enabledVFModules, dnaConfig, conductorUri),
} : {}),
(hasProcessSpecification ? {
ProcessSpecification: ProcessSpecification(enabledVFModules, dnaConfig, conductorUri),
} : {}),
(hasCommitment ? {
Commitment: Commitment(enabledVFModules, dnaConfig, conductorUri),
} : {}),
(hasFulfillment ? {
Fulfillment: Fulfillment(enabledVFModules, dnaConfig, conductorUri),
} : {}),
(hasIntent ? {
Intent: Intent(enabledVFModules, dnaConfig, conductorUri),
} : {}),
(hasSatisfaction ? {
Satisfaction: Satisfaction(enabledVFModules, dnaConfig, conductorUri),
} : {}),
(hasProposal ? {
Proposal: Proposal(enabledVFModules, dnaConfig, conductorUri),
ProposedIntent: ProposedIntent(enabledVFModules, dnaConfig, conductorUri),
} : {}),
(hasProposal && hasAgent ? {
ProposedTo: ProposedTo(enabledVFModules, dnaConfig, conductorUri),
} : {}),
(hasAgreement ? { Agreement: Agreement(enabledVFModules, dnaConfig, conductorUri) } : {}),
(hasPlan ? { Plan: Plan(enabledVFModules, dnaConfig, conductorUri) } : {}),
(hasRecipe ? {
RecipeFlow: RecipeFlow(enabledVFModules, dnaConfig, conductorUri),
RecipeProcess: RecipeProcess(enabledVFModules, dnaConfig, conductorUri),
RecipeExchange: RecipeExchange(enabledVFModules, dnaConfig, conductorUri),
} : {}),
)
}
export default generateResolvers