@valueflows/vf-graphql-holochain
Version:
GraphQL schema bindings for the Holochain implementation of ValueFlows
59 lines • 7.86 kB
JavaScript
/**
* 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 '@valueflows/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 {
// 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({
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];
return makeExecutableSchema({
typeDefs: printSchema(buildSchema(enabledVFModules, overriddenExtensionSchemas)),
resolvers,
});
};
export default bindSchema;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUVILE9BQU8sS0FBSyxNQUFNLFdBQVcsQ0FBQTtBQUM3QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTtBQUU1RCxPQUFPLEVBSUwsa0JBQWtCLEVBR2xCLFFBQVEsRUFDVCxNQUFNLFlBQVksQ0FBQTtBQUNuQixPQUFPLGlCQUFpQixNQUFNLHNCQUFzQixDQUFBO0FBQ3BELE9BQU8sS0FBSyxvQkFBb0IsTUFBTSx3QkFBd0IsQ0FBQTtBQUM5RCxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsc0JBQXNCLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDN0csYUFBYTtBQUNiLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUE7QUFFakUsT0FBTztBQUNMLG9HQUFvRztBQUNwRyxpQkFBaUI7QUFDakIsb0JBQW9CO0FBQ3BCLG9CQUFvQjtBQUNwQiw4QkFBOEI7QUFDOUIsV0FBVyxFQUFFLGNBQWMsRUFBRSxzQkFBc0I7QUFDbkQsMkdBQTJHO0FBQzNHLFNBQVM7QUFHVCxtREFBbUQ7QUFDbkQsUUFBUSxFQUFFLGtCQUFrQjtBQUU1QixxR0FBcUc7QUFDckcsV0FBVyxHQUNaLENBQUE7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLEdBQUcsS0FBSyxFQUFFLE9BQTBCLEVBQUUsRUFBRTtJQUN0RCxNQUFNO0lBQ0osZ0VBQWdFO0lBQ2hFLGdCQUFnQixHQUFHLGtCQUFrQixFQUNyQyxTQUFTLEVBQ1QsWUFBWSxFQUNaLGlCQUFpQixFQUNqQixLQUFLLEVBQ0wsZUFBZSxFQUNmLGdCQUFnQixHQUFHLEVBQUUsRUFDckIsa0JBQWtCLEdBQUcsRUFBRSxHQUN4QixHQUFHLE9BQU8sQ0FBQTtJQUVYLE1BQU0sYUFBYSxHQUFHLE1BQU0saUJBQWlCLENBQUM7UUFDNUMsZ0JBQWdCO1FBQ2hCLFNBQVM7UUFDVCxZQUFZO1FBQ1osaUJBQWlCO1FBQ2pCLEtBQUs7UUFDTCxlQUFlO0tBQ2hCLENBQUMsQ0FBQTtJQUNGLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxhQUFhLEVBQUUsa0JBQWtCLENBQUMsQ0FBQTtJQUUxRCw2Q0FBNkM7SUFDN0MsZ0RBQWdEO0lBQ2hELG1DQUFtQztJQUNuQyxNQUFNLDBCQUEwQixHQUFHLENBQUMsR0FBRyxnQkFBZ0IsRUFBRSxvQkFBb0IsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFBO0lBRXhHLE9BQU8sb0JBQW9CLENBQUM7UUFDMUIsUUFBUSxFQUFFLFdBQVcsQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLEVBQUUsMEJBQTBCLENBQUMsQ0FBQztRQUNoRixTQUFTO0tBQ1YsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFBO0FBRUQsZUFBZSxVQUFVLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEhvbG9SRUEgR3JhcGhRTCBzY2hlbWEgaW50ZXJmYWNlXG4gKlxuICogQSBHcmFwaFFMIHNjaGVtYSAoc3VpdGFibGUgZm9yIHVzZSB3aXRoIGBhcG9sbG8tbGluay1zY2hlbWFgKSB3aGljaCBkZWZpbmVzXG4gKiBiaW5kaW5ncyBiZXR3ZWVuIHRoZSBWYWx1ZUZsb3dzIHByb3RvY29sIGFuZCBhIEhvbG9jaGFpbiBiYWNrZW5kLlxuICpcbiAqIEBwYWNrYWdlOiBIb2xvUkVBXG4gKiBAc2luY2U6ICAgMjAxOS0wNS0yMFxuICovXG5cbmltcG9ydCBtZXJnZSBmcm9tICdkZWVwbWVyZ2UnXG5pbXBvcnQgeyBtYWtlRXhlY3V0YWJsZVNjaGVtYSB9IGZyb20gJ0BncmFwaHFsLXRvb2xzL3NjaGVtYSdcblxuaW1wb3J0IHtcbiAgUmVzb2x2ZXJPcHRpb25zLFxuICBFeHRlbnNpb25PcHRpb25zLFxuICBCaW5kU2NoZW1hT3B0aW9ucyxcbiAgREVGQVVMVF9WRl9NT0RVTEVTLFxuICBETkFJZE1hcHBpbmdzLFxuICBDZWxsSWQsXG4gIFZmTW9kdWxlXG59IGZyb20gJy4vdHlwZXMuanMnXG5pbXBvcnQgZ2VuZXJhdGVSZXNvbHZlcnMgZnJvbSAnLi9yZXNvbHZlcnMvaW5kZXguanMnXG5pbXBvcnQgKiBhcyBocmVhRXh0ZW5zaW9uU2NoZW1hcyBmcm9tICcuL3NjaGVtYS1leHRlbnNpb25zLmpzJ1xuaW1wb3J0IHsgbWFwWm9tZUZuLCBhdXRvQ29ubmVjdCwgb3BlbkNvbm5lY3Rpb24sIHNuaWZmSG9sb2NoYWluQXBwQ2VsbHMsIHJlbWFwQ2VsbElkIH0gZnJvbSAnLi9jb25uZWN0aW9uLmpzJ1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgYnVpbGRTY2hlbWEsIHByaW50U2NoZW1hIH0gZnJvbSAnQHZhbHVlZmxvd3MvdmYtZ3JhcGhxbCdcblxuZXhwb3J0IHtcbiAgLy8gZGlyZWN0IGFjY2VzcyB0byByZXNvbHZlciBjYWxsYmFja3MgZ2VuZXJhdG9yIGZvciBhcHBzIHRoYXQgbmVlZCB0byBiaW5kIHRvIG90aGVyIEdyYXBoUUwgc2NoZW1hc1xuICBnZW5lcmF0ZVJlc29sdmVycyxcbiAgLy8gc2NoZW1hIGV4dGVuc2lvbnNcbiAgaHJlYUV4dGVuc2lvblNjaGVtYXMsXG4gIC8vIGNvbm5lY3Rpb24gaGFuZGxpbmcgbWV0aG9kc1xuICBhdXRvQ29ubmVjdCwgb3BlbkNvbm5lY3Rpb24sIHNuaWZmSG9sb2NoYWluQXBwQ2VsbHMsXG4gIC8vIGRpcmVjdCBhY2Nlc3MgdG8gSG9sb2NoYWluIHpvbWUgbWV0aG9kIGJpbmRpbmdzIGZvciBhdXRob3Jpbmcgb3duIGN1c3RvbSByZXNvbHZlcnMgYm91bmQgdG8gbm9uLVJFQSBETkFzXG4gIG1hcFpvbWVGbixcbiAgLy8gdHlwZXMgdGhhdCB3cmFwcGVyIGxpYnJhcmllcyBtYXkgbmVlZCB0byBtYW5hZ2UgY29uZHVjdG9yIEROQSBjb25uZWN0aW9uIGxvZ2ljXG4gIEROQUlkTWFwcGluZ3MsIENlbGxJZCwgQmluZFNjaGVtYU9wdGlvbnMsIEV4dGVuc2lvbk9wdGlvbnMsIFJlc29sdmVyT3B0aW9ucyxcbiAgLy8gdmFsdWVmbG93cyBtb2R1bGVzIGFuZCB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uXG4gIFZmTW9kdWxlLCBERUZBVUxUX1ZGX01PRFVMRVMsXG5cbiAgLy8gOlRPRE86IHJlbW92ZSB0aGlzLiBBZnRlciAjMjY2IGNsaWVudHMgc2hvdWxkIG5vdCBuZWVkIHRvIHRoaW5rIGFib3V0IGRpZmZlcmluZyBJRHMgYmV0d2VlbiBDZWxscy5cbiAgcmVtYXBDZWxsSWQsXG59XG5cbi8qKlxuICogR2VuZXJhdGVzIGEgc2NoZW1hIHJlYWR5IHRvIGJlIHBsdWdnZWQgaW4gdG8gYSBHcmFwaFFMIGNsaWVudFxuICpcbiAqIEByZXR1cm4gR3JhcGhRTFNjaGVtYVxuICovXG5jb25zdCBiaW5kU2NoZW1hID0gYXN5bmMgKG9wdGlvbnM6IEJpbmRTY2hlbWFPcHRpb25zKSA9PiB7XG4gIGNvbnN0IHtcbiAgICAvLyBhc3NpZ24gdGhlIGRlZmF1bHQgVmZNb2R1bGUgc2V0LCBzbyB0aGF0IHRoaXMgY2FuIGJlIG9wdGlvbmFsXG4gICAgZW5hYmxlZFZGTW9kdWxlcyA9IERFRkFVTFRfVkZfTU9EVUxFUyxcbiAgICBkbmFDb25maWcsXG4gICAgY29uZHVjdG9yVXJpLFxuICAgIGFkbWluQ29uZHVjdG9yVXJpLFxuICAgIGFwcElkLFxuICAgIHRyYWNlQXBwU2lnbmFscyxcbiAgICBleHRlbnNpb25TY2hlbWFzID0gW10sXG4gICAgZXh0ZW5zaW9uUmVzb2x2ZXJzID0ge30sXG4gIH0gPSBvcHRpb25zXG5cbiAgY29uc3QgY29yZVJlc29sdmVycyA9IGF3YWl0IGdlbmVyYXRlUmVzb2x2ZXJzKHtcbiAgICBlbmFibGVkVkZNb2R1bGVzLFxuICAgIGRuYUNvbmZpZyxcbiAgICBjb25kdWN0b3JVcmksXG4gICAgYWRtaW5Db25kdWN0b3JVcmksXG4gICAgYXBwSWQsXG4gICAgdHJhY2VBcHBTaWduYWxzXG4gIH0pXG4gIGNvbnN0IHJlc29sdmVycyA9IG1lcmdlKGNvcmVSZXNvbHZlcnMsIGV4dGVuc2lvblJlc29sdmVycylcblxuICAvLyBleHRlbmQgdGhlIGJhc2UgdmYtZ3JhcGhxbCBzY2hlbWEgd2l0aCBvbmVcbiAgLy8gb3IgbW9yZSBob2xvY2hhaW4gc3BlY2lmaWMgc2NoZW1hIGV4dGVuc2lvbnMuXG4gIC8vIGFkZCBtb3JlIGhlcmUgaWYgbW9yZSBhcmUgYWRkZWQuXG4gIGNvbnN0IG92ZXJyaWRkZW5FeHRlbnNpb25TY2hlbWFzID0gWy4uLmV4dGVuc2lvblNjaGVtYXMsIGhyZWFFeHRlbnNpb25TY2hlbWFzLmFzc29jaWF0ZU15QWdlbnRFeHRlbnNpb25dXG5cbiAgcmV0dXJuIG1ha2VFeGVjdXRhYmxlU2NoZW1hKHtcbiAgICB0eXBlRGVmczogcHJpbnRTY2hlbWEoYnVpbGRTY2hlbWEoZW5hYmxlZFZGTW9kdWxlcywgb3ZlcnJpZGRlbkV4dGVuc2lvblNjaGVtYXMpKSxcbiAgICByZXNvbHZlcnMsXG4gIH0pXG59XG5cbmV4cG9ydCBkZWZhdWx0IGJpbmRTY2hlbWFcbiJdfQ==