UNPKG

@leosprograms/vf-graphql-holochain

Version:

GraphQL schema bindings for the Holochain implementation of ValueFlows

60 lines 8.21 kB
/** * HoloREA GraphQL schema interface * * A GraphQL schema (suitable for use with `apollo-link-schema`) which defines * bindings between the ValueFlows protocol and a Holochain backend. * * @package: HoloREA * @since: 2019-05-20 */ import merge from 'deepmerge'; import { makeExecutableSchema } from '@graphql-tools/schema'; import { DEFAULT_VF_MODULES, VfModule } from './types.js'; import generateResolvers from './resolvers/index.js'; import * as hreaExtensionSchemas from './schema-extensions.js'; import { mapZomeFn, autoConnect, openConnection, sniffHolochainAppCells, remapCellId } from './connection.js'; // @ts-ignore import { buildSchema, printSchema } from '@leosprograms/vf-graphql'; export { // direct access to resolver callbacks generator for apps that need to bind to other GraphQL schemas generateResolvers, // schema extensions hreaExtensionSchemas, // connection handling methods autoConnect, openConnection, sniffHolochainAppCells, // direct access to Holochain zome method bindings for authoring own custom resolvers bound to non-REA DNAs mapZomeFn, // valueflows modules and the default configuration VfModule, DEFAULT_VF_MODULES, // :TODO: remove this. After #266 clients should not need to think about differing IDs between Cells. remapCellId, }; /** * Generates a schema ready to be plugged in to a GraphQL client * * @return GraphQLSchema */ const bindSchema = async (options) => { const { weaveAppAgentClient, // assign the default VfModule set, so that this can be optional enabledVFModules = DEFAULT_VF_MODULES, dnaConfig, conductorUri, adminConductorUri, appId, traceAppSignals, extensionSchemas = [], extensionResolvers = {}, } = options; const coreResolvers = await generateResolvers({ weaveAppAgentClient, enabledVFModules, dnaConfig, conductorUri, adminConductorUri, appId, traceAppSignals }); const resolvers = merge(coreResolvers, extensionResolvers); // extend the base vf-graphql schema with one // or more holochain specific schema extensions. // add more here if more are added. const overriddenExtensionSchemas = [...extensionSchemas, hreaExtensionSchemas.associateMyAgentExtension, hreaExtensionSchemas.recipes, hreaExtensionSchemas.hasIds]; return makeExecutableSchema({ typeDefs: printSchema(buildSchema(enabledVFModules, overriddenExtensionSchemas)), resolvers, }); }; export default bindSchema; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUVILE9BQU8sS0FBSyxNQUFNLFdBQVcsQ0FBQTtBQUM3QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTtBQUU1RCxPQUFPLEVBSUwsa0JBQWtCLEVBR2xCLFFBQVEsRUFDVCxNQUFNLFlBQVksQ0FBQTtBQUNuQixPQUFPLGlCQUFpQixNQUFNLHNCQUFzQixDQUFBO0FBQ3BELE9BQU8sS0FBSyxvQkFBb0IsTUFBTSx3QkFBd0IsQ0FBQTtBQUM5RCxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsc0JBQXNCLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDN0csYUFBYTtBQUNiLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUE7QUFFbkUsT0FBTztBQUNMLG9HQUFvRztBQUNwRyxpQkFBaUI7QUFDakIsb0JBQW9CO0FBQ3BCLG9CQUFvQjtBQUNwQiw4QkFBOEI7QUFDOUIsV0FBVyxFQUFFLGNBQWMsRUFBRSxzQkFBc0I7QUFDbkQsMkdBQTJHO0FBQzNHLFNBQVM7QUFHVCxtREFBbUQ7QUFDbkQsUUFBUSxFQUFFLGtCQUFrQjtBQUU1QixxR0FBcUc7QUFDckcsV0FBVyxHQUNaLENBQUE7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLEdBQUcsS0FBSyxFQUFFLE9BQTBCLEVBQUUsRUFBRTtJQUN0RCxNQUFNLEVBQ0osbUJBQW1CO0lBQ25CLGdFQUFnRTtJQUNoRSxnQkFBZ0IsR0FBRyxrQkFBa0IsRUFDckMsU0FBUyxFQUNULFlBQVksRUFDWixpQkFBaUIsRUFDakIsS0FBSyxFQUNMLGVBQWUsRUFDZixnQkFBZ0IsR0FBRyxFQUFFLEVBQ3JCLGtCQUFrQixHQUFHLEVBQUUsR0FDeEIsR0FBRyxPQUFPLENBQUE7SUFFWCxNQUFNLGFBQWEsR0FBRyxNQUFNLGlCQUFpQixDQUFDO1FBQzVDLG1CQUFtQjtRQUNuQixnQkFBZ0I7UUFDaEIsU0FBUztRQUNULFlBQVk7UUFDWixpQkFBaUI7UUFDakIsS0FBSztRQUNMLGVBQWU7S0FDaEIsQ0FBQyxDQUFBO0lBQ0YsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLGFBQWEsRUFBRSxrQkFBa0IsQ0FBQyxDQUFBO0lBRTFELDZDQUE2QztJQUM3QyxnREFBZ0Q7SUFDaEQsbUNBQW1DO0lBQ25DLE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxHQUFHLGdCQUFnQixFQUFFLG9CQUFvQixDQUFDLHlCQUF5QixFQUFFLG9CQUFvQixDQUFDLE9BQU8sRUFBRSxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUVuSyxPQUFPLG9CQUFvQixDQUFDO1FBQzFCLFFBQVEsRUFBRSxXQUFXLENBQUMsV0FBVyxDQUFDLGdCQUFnQixFQUFFLDBCQUEwQixDQUFDLENBQUM7UUFDaEYsU0FBUztLQUNWLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FBQTtBQUVELGVBQWUsVUFBVSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBIb2xvUkVBIEdyYXBoUUwgc2NoZW1hIGludGVyZmFjZVxuICpcbiAqIEEgR3JhcGhRTCBzY2hlbWEgKHN1aXRhYmxlIGZvciB1c2Ugd2l0aCBgYXBvbGxvLWxpbmstc2NoZW1hYCkgd2hpY2ggZGVmaW5lc1xuICogYmluZGluZ3MgYmV0d2VlbiB0aGUgVmFsdWVGbG93cyBwcm90b2NvbCBhbmQgYSBIb2xvY2hhaW4gYmFja2VuZC5cbiAqXG4gKiBAcGFja2FnZTogSG9sb1JFQVxuICogQHNpbmNlOiAgIDIwMTktMDUtMjBcbiAqL1xuXG5pbXBvcnQgbWVyZ2UgZnJvbSAnZGVlcG1lcmdlJ1xuaW1wb3J0IHsgbWFrZUV4ZWN1dGFibGVTY2hlbWEgfSBmcm9tICdAZ3JhcGhxbC10b29scy9zY2hlbWEnXG5cbmltcG9ydCB7XG4gIFJlc29sdmVyT3B0aW9ucyxcbiAgRXh0ZW5zaW9uT3B0aW9ucyxcbiAgQmluZFNjaGVtYU9wdGlvbnMsXG4gIERFRkFVTFRfVkZfTU9EVUxFUyxcbiAgRE5BSWRNYXBwaW5ncyxcbiAgQ2VsbElkLFxuICBWZk1vZHVsZVxufSBmcm9tICcuL3R5cGVzLmpzJ1xuaW1wb3J0IGdlbmVyYXRlUmVzb2x2ZXJzIGZyb20gJy4vcmVzb2x2ZXJzL2luZGV4LmpzJ1xuaW1wb3J0ICogYXMgaHJlYUV4dGVuc2lvblNjaGVtYXMgZnJvbSAnLi9zY2hlbWEtZXh0ZW5zaW9ucy5qcydcbmltcG9ydCB7IG1hcFpvbWVGbiwgYXV0b0Nvbm5lY3QsIG9wZW5Db25uZWN0aW9uLCBzbmlmZkhvbG9jaGFpbkFwcENlbGxzLCByZW1hcENlbGxJZCB9IGZyb20gJy4vY29ubmVjdGlvbi5qcydcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IGJ1aWxkU2NoZW1hLCBwcmludFNjaGVtYSB9IGZyb20gJ0BsZW9zcHJvZ3JhbXMvdmYtZ3JhcGhxbCdcblxuZXhwb3J0IHtcbiAgLy8gZGlyZWN0IGFjY2VzcyB0byByZXNvbHZlciBjYWxsYmFja3MgZ2VuZXJhdG9yIGZvciBhcHBzIHRoYXQgbmVlZCB0byBiaW5kIHRvIG90aGVyIEdyYXBoUUwgc2NoZW1hc1xuICBnZW5lcmF0ZVJlc29sdmVycyxcbiAgLy8gc2NoZW1hIGV4dGVuc2lvbnNcbiAgaHJlYUV4dGVuc2lvblNjaGVtYXMsXG4gIC8vIGNvbm5lY3Rpb24gaGFuZGxpbmcgbWV0aG9kc1xuICBhdXRvQ29ubmVjdCwgb3BlbkNvbm5lY3Rpb24sIHNuaWZmSG9sb2NoYWluQXBwQ2VsbHMsXG4gIC8vIGRpcmVjdCBhY2Nlc3MgdG8gSG9sb2NoYWluIHpvbWUgbWV0aG9kIGJpbmRpbmdzIGZvciBhdXRob3Jpbmcgb3duIGN1c3RvbSByZXNvbHZlcnMgYm91bmQgdG8gbm9uLVJFQSBETkFzXG4gIG1hcFpvbWVGbixcbiAgLy8gdHlwZXMgdGhhdCB3cmFwcGVyIGxpYnJhcmllcyBtYXkgbmVlZCB0byBtYW5hZ2UgY29uZHVjdG9yIEROQSBjb25uZWN0aW9uIGxvZ2ljXG4gIEROQUlkTWFwcGluZ3MsIENlbGxJZCwgQmluZFNjaGVtYU9wdGlvbnMsIEV4dGVuc2lvbk9wdGlvbnMsIFJlc29sdmVyT3B0aW9ucyxcbiAgLy8gdmFsdWVmbG93cyBtb2R1bGVzIGFuZCB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uXG4gIFZmTW9kdWxlLCBERUZBVUxUX1ZGX01PRFVMRVMsXG5cbiAgLy8gOlRPRE86IHJlbW92ZSB0aGlzLiBBZnRlciAjMjY2IGNsaWVudHMgc2hvdWxkIG5vdCBuZWVkIHRvIHRoaW5rIGFib3V0IGRpZmZlcmluZyBJRHMgYmV0d2VlbiBDZWxscy5cbiAgcmVtYXBDZWxsSWQsXG59XG5cbi8qKlxuICogR2VuZXJhdGVzIGEgc2NoZW1hIHJlYWR5IHRvIGJlIHBsdWdnZWQgaW4gdG8gYSBHcmFwaFFMIGNsaWVudFxuICpcbiAqIEByZXR1cm4gR3JhcGhRTFNjaGVtYVxuICovXG5jb25zdCBiaW5kU2NoZW1hID0gYXN5bmMgKG9wdGlvbnM6IEJpbmRTY2hlbWFPcHRpb25zKSA9PiB7XG4gIGNvbnN0IHtcbiAgICB3ZWF2ZUFwcEFnZW50Q2xpZW50LFxuICAgIC8vIGFzc2lnbiB0aGUgZGVmYXVsdCBWZk1vZHVsZSBzZXQsIHNvIHRoYXQgdGhpcyBjYW4gYmUgb3B0aW9uYWxcbiAgICBlbmFibGVkVkZNb2R1bGVzID0gREVGQVVMVF9WRl9NT0RVTEVTLFxuICAgIGRuYUNvbmZpZyxcbiAgICBjb25kdWN0b3JVcmksXG4gICAgYWRtaW5Db25kdWN0b3JVcmksXG4gICAgYXBwSWQsXG4gICAgdHJhY2VBcHBTaWduYWxzLFxuICAgIGV4dGVuc2lvblNjaGVtYXMgPSBbXSxcbiAgICBleHRlbnNpb25SZXNvbHZlcnMgPSB7fSxcbiAgfSA9IG9wdGlvbnNcblxuICBjb25zdCBjb3JlUmVzb2x2ZXJzID0gYXdhaXQgZ2VuZXJhdGVSZXNvbHZlcnMoe1xuICAgIHdlYXZlQXBwQWdlbnRDbGllbnQsXG4gICAgZW5hYmxlZFZGTW9kdWxlcyxcbiAgICBkbmFDb25maWcsXG4gICAgY29uZHVjdG9yVXJpLFxuICAgIGFkbWluQ29uZHVjdG9yVXJpLFxuICAgIGFwcElkLFxuICAgIHRyYWNlQXBwU2lnbmFsc1xuICB9KVxuICBjb25zdCByZXNvbHZlcnMgPSBtZXJnZShjb3JlUmVzb2x2ZXJzLCBleHRlbnNpb25SZXNvbHZlcnMpXG5cbiAgLy8gZXh0ZW5kIHRoZSBiYXNlIHZmLWdyYXBocWwgc2NoZW1hIHdpdGggb25lXG4gIC8vIG9yIG1vcmUgaG9sb2NoYWluIHNwZWNpZmljIHNjaGVtYSBleHRlbnNpb25zLlxuICAvLyBhZGQgbW9yZSBoZXJlIGlmIG1vcmUgYXJlIGFkZGVkLlxuICBjb25zdCBvdmVycmlkZGVuRXh0ZW5zaW9uU2NoZW1hcyA9IFsuLi5leHRlbnNpb25TY2hlbWFzLCBocmVhRXh0ZW5zaW9uU2NoZW1hcy5hc3NvY2lhdGVNeUFnZW50RXh0ZW5zaW9uLCBocmVhRXh0ZW5zaW9uU2NoZW1hcy5yZWNpcGVzLCBocmVhRXh0ZW5zaW9uU2NoZW1hcy5oYXNJZHNdXG5cbiAgcmV0dXJuIG1ha2VFeGVjdXRhYmxlU2NoZW1hKHtcbiAgICB0eXBlRGVmczogcHJpbnRTY2hlbWEoYnVpbGRTY2hlbWEoZW5hYmxlZFZGTW9kdWxlcywgb3ZlcnJpZGRlbkV4dGVuc2lvblNjaGVtYXMpKSxcbiAgICByZXNvbHZlcnMsXG4gIH0pXG59XG5cbmV4cG9ydCBkZWZhdWx0IGJpbmRTY2hlbWFcbiJdfQ==