UNPKG

@leosprograms/graphql-client-holochain

Version:

ValueFlows GraphQLClient configurations, providing pluggable backend datasources for different distributed, federated and client/server infrastructure.

81 lines 10.4 kB
/** * GraphQL client interface for Holochain connection * * @package hREA GraphQL client * @since 2020-07-14 */ // @ts-nocheck import { ApolloClient, InMemoryCache } from '@apollo/client/core/index.js'; import { SchemaLink } from '@apollo/link-schema'; import bindSchema, { autoConnect } from '@leosprograms/vf-graphql-holochain'; /* This method creates the GraphQLSchema from the given options, and then builds an Graphql Apollo Client with the basic InMemoryCache with that schema. */ export async function initGraphQLClient(options) { const schema = await bindSchema(options); return new ApolloClient({ cache: new InMemoryCache({ dataIdFromObject(object) { switch (object.__typename) { case 'Unit': return `Unit:${object.id}`; // Custom ID for `Unit` type objects // No default case needed; Apollo handles other types automatically } // Implicitly returns `undefined` for types not handled above, // so Apollo uses the default ID generation logic }, }), defaultOptions: { watchQuery: { fetchPolicy: 'cache-and-network', }, query: { fetchPolicy: 'cache-first', }, }, link: new SchemaLink({ schema }) }); } /* This is a zero-config option method (and the main export) where you can generate a GraphQL Apollo Client and have all configuration handled internally for you. It is intended for the less advanced/customized use cases, but still offers basic levels of configuration. */ async function connect(options = {}) { let bindSchemaOptions; // autodetect `CellId`s if the config is missing some of the necessary values // also autodetect `conductorUri` `adminConductorUri` and `appID` since the caller can leave those undefined // in the options object (and pass them instead from either // environment variables or introspected from the Holochain Launcher) if (!options.dnaConfig || !options.conductorUri || !options.adminConductorUri || !options.appID) { let { dnaConfig, conductorUri, adminConductorUri, appId } = await autoConnect(options.weaveAppAgentClient, options.conductorUri, options.adminConductorUri, options.appID, // traceAppSignals needs to be passed during // the first initialization of the AppWebsocket options.traceAppSignals); bindSchemaOptions = { ...options, weaveAppAgentClient: options.weaveAppAgentClient, dnaConfig, conductorUri, adminConductorUri, appId, }; } else { // the difference between BindSchemaOptions and ClientOptions // is that for BindSchemaOptions `dnaConfig` and `conductorUri` must // be defined, and in this logical branch // we've established that, making this a safe // type cast bindSchemaOptions = { ...options }; } return await initGraphQLClient(bindSchemaOptions); } export default connect; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUNILGNBQWM7QUFFZCxPQUFPLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBeUIsTUFBTSw4QkFBOEIsQ0FBQTtBQUNqRyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFFaEQsT0FBTyxVQUFVLEVBQUUsRUFDakIsV0FBVyxFQUtaLE1BQU0sb0NBQW9DLENBQUE7QUFxQjNDOzs7O0VBSUU7QUFDRixNQUFNLENBQUMsS0FBSyxVQUFVLGlCQUFpQixDQUFDLE9BQTBCO0lBQ2hFLE1BQU0sTUFBTSxHQUFHLE1BQU0sVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBRXhDLE9BQU8sSUFBSSxZQUFZLENBQUM7UUFDdEIsS0FBSyxFQUFFLElBQUksYUFBYSxDQUFDO1lBQ3ZCLGdCQUFnQixDQUFDLE1BQU07Z0JBQ3JCLFFBQVEsTUFBTSxDQUFDLFVBQVUsRUFBRTtvQkFDekIsS0FBSyxNQUFNO3dCQUNULE9BQU8sUUFBUSxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxvQ0FBb0M7b0JBQ2xFLG1FQUFtRTtpQkFDcEU7Z0JBQ0QsK0RBQStEO2dCQUMvRCxpREFBaUQ7WUFDbkQsQ0FBQztTQUNGLENBQUM7UUFDRixjQUFjLEVBQUU7WUFDZCxVQUFVLEVBQUU7Z0JBQ1YsV0FBVyxFQUFFLG1CQUFtQjthQUNqQztZQUNELEtBQUssRUFBRTtnQkFDTCxXQUFXLEVBQUUsYUFBYTthQUMzQjtTQUNGO1FBQ0QsSUFBSSxFQUFFLElBQUksVUFBVSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUM7S0FDakMsQ0FBQyxDQUFBO0FBQ0osQ0FBQztBQUVEOzs7Ozs7RUFNRTtBQUNGLEtBQUssVUFBVSxPQUFPLENBQUMsVUFBeUIsRUFBRTtJQUNoRCxJQUFJLGlCQUFvQyxDQUFBO0lBQ3hDLDZFQUE2RTtJQUM3RSw0R0FBNEc7SUFDNUcsMkRBQTJEO0lBQzNELHFFQUFxRTtJQUNyRSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFO1FBQy9GLElBQUksRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUFFLEtBQUssRUFBRSxHQUFHLE1BQU0sV0FBVyxDQUMzRSxPQUFPLENBQUMsbUJBQW1CLEVBQzNCLE9BQU8sQ0FBQyxZQUFZLEVBQ3BCLE9BQU8sQ0FBQyxpQkFBaUIsRUFDekIsT0FBTyxDQUFDLEtBQUs7UUFDYiw0Q0FBNEM7UUFDNUMsK0NBQStDO1FBQy9DLE9BQU8sQ0FBQyxlQUFlLENBQ3hCLENBQUE7UUFDRCxpQkFBaUIsR0FBRztZQUNsQixHQUFHLE9BQU87WUFDVixtQkFBbUIsRUFBRSxPQUFPLENBQUMsbUJBQW1CO1lBQ2hELFNBQVM7WUFDVCxZQUFZO1lBQ1osaUJBQWlCO1lBQ2pCLEtBQUs7U0FDTixDQUFBO0tBQ0Y7U0FBTTtRQUNMLDZEQUE2RDtRQUM3RCxvRUFBb0U7UUFDcEUseUNBQXlDO1FBQ3pDLDZDQUE2QztRQUM3QyxZQUFZO1FBQ1osaUJBQWlCLEdBQUc7WUFDbEIsR0FBRyxPQUE0QjtTQUNoQyxDQUFBO0tBQ0Y7SUFFRCxPQUFPLE1BQU0saUJBQWlCLENBQUMsaUJBQWlCLENBQUMsQ0FBQTtBQUNuRCxDQUFDO0FBRUQsZUFBZSxPQUFPLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdyYXBoUUwgY2xpZW50IGludGVyZmFjZSBmb3IgSG9sb2NoYWluIGNvbm5lY3Rpb25cbiAqXG4gKiBAcGFja2FnZSAgaFJFQSBHcmFwaFFMIGNsaWVudFxuICogQHNpbmNlICAgIDIwMjAtMDctMTRcbiAqL1xuLy8gQHRzLW5vY2hlY2tcblxuaW1wb3J0IHsgQXBvbGxvQ2xpZW50LCBJbk1lbW9yeUNhY2hlLCBOb3JtYWxpemVkQ2FjaGVPYmplY3QgfSBmcm9tICdAYXBvbGxvL2NsaWVudC9jb3JlL2luZGV4LmpzJ1xuaW1wb3J0IHsgU2NoZW1hTGluayB9IGZyb20gJ0BhcG9sbG8vbGluay1zY2hlbWEnXG5cbmltcG9ydCBiaW5kU2NoZW1hLCB7XG4gIGF1dG9Db25uZWN0LFxuICBCaW5kU2NoZW1hT3B0aW9ucyxcbiAgRE5BSWRNYXBwaW5ncyxcbiAgRXh0ZW5zaW9uT3B0aW9ucyxcbiAgUmVzb2x2ZXJPcHRpb25zXG59IGZyb20gJ0BsZW9zcHJvZ3JhbXMvdmYtZ3JhcGhxbC1ob2xvY2hhaW4nXG5cbi8qIEZvciBleHRlcm5hbCBjbGllbnQuIEFyZSBvcHRpb25hbCBiZWNhdXNlXG4gICBgY29uZHVjdG9yVXJpYCBhbmQgYGFwcElEYFxuICAgbWF5IGJlIGF1dG9kZXRlY3RlZCBvciB0YWtlbiBmcm9tIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICAgYW5kIGBkbmFDb25maWdgIGRpc2NvdmVyZWQgdGhyb3VnaCBhIGZ1bmN0aW9uYWwgY29ubmVjdGlvblxuICAgdG8gaG9sb2NoYWluXG4qL1xuaW50ZXJmYWNlIEF1dG9Db25uZWN0aW9uT3B0aW9ucyB7XG4gIHdlYXZlQXBwQWdlbnRDbGllbnQ/OiBhbnlcbiAgZG5hQ29uZmlnPzogRE5BSWRNYXBwaW5nc1xuICBjb25kdWN0b3JVcmk/OiBzdHJpbmdcbiAgYWRtaW5Db25kdWN0b3JVcmk/OiBzdHJpbmdcbiAgYXBwSUQ/OiBzdHJpbmdcbn1cblxuZXhwb3J0IHR5cGUgQ2xpZW50T3B0aW9ucyA9IFBpY2s8UmVzb2x2ZXJPcHRpb25zLCAndHJhY2VBcHBTaWduYWxzJz5cbiAgJiBQaWNrPEJpbmRTY2hlbWFPcHRpb25zLCAnZW5hYmxlZFZGTW9kdWxlcyc+XG4gICYgRXh0ZW5zaW9uT3B0aW9uc1xuICAmIEF1dG9Db25uZWN0aW9uT3B0aW9uc1xuXG4vKlxuICBUaGlzIG1ldGhvZCBjcmVhdGVzIHRoZSBHcmFwaFFMU2NoZW1hIGZyb21cbiAgdGhlIGdpdmVuIG9wdGlvbnMsIGFuZCB0aGVuIGJ1aWxkcyBhbiBHcmFwaHFsIEFwb2xsbyBDbGllbnRcbiAgd2l0aCB0aGUgYmFzaWMgSW5NZW1vcnlDYWNoZSB3aXRoIHRoYXQgc2NoZW1hLlxuKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbml0R3JhcGhRTENsaWVudChvcHRpb25zOiBCaW5kU2NoZW1hT3B0aW9ucykge1xuICBjb25zdCBzY2hlbWEgPSBhd2FpdCBiaW5kU2NoZW1hKG9wdGlvbnMpXG5cbiAgcmV0dXJuIG5ldyBBcG9sbG9DbGllbnQoe1xuICAgIGNhY2hlOiBuZXcgSW5NZW1vcnlDYWNoZSh7XG4gICAgICBkYXRhSWRGcm9tT2JqZWN0KG9iamVjdCkge1xuICAgICAgICBzd2l0Y2ggKG9iamVjdC5fX3R5cGVuYW1lKSB7XG4gICAgICAgICAgY2FzZSAnVW5pdCc6XG4gICAgICAgICAgICByZXR1cm4gYFVuaXQ6JHtvYmplY3QuaWR9YDsgLy8gQ3VzdG9tIElEIGZvciBgVW5pdGAgdHlwZSBvYmplY3RzXG4gICAgICAgICAgLy8gTm8gZGVmYXVsdCBjYXNlIG5lZWRlZDsgQXBvbGxvIGhhbmRsZXMgb3RoZXIgdHlwZXMgYXV0b21hdGljYWxseVxuICAgICAgICB9XG4gICAgICAgIC8vIEltcGxpY2l0bHkgcmV0dXJucyBgdW5kZWZpbmVkYCBmb3IgdHlwZXMgbm90IGhhbmRsZWQgYWJvdmUsIFxuICAgICAgICAvLyBzbyBBcG9sbG8gdXNlcyB0aGUgZGVmYXVsdCBJRCBnZW5lcmF0aW9uIGxvZ2ljXG4gICAgICB9LFxuICAgIH0pLFxuICAgIGRlZmF1bHRPcHRpb25zOiB7XG4gICAgICB3YXRjaFF1ZXJ5OiB7XG4gICAgICAgIGZldGNoUG9saWN5OiAnY2FjaGUtYW5kLW5ldHdvcmsnLFxuICAgICAgfSxcbiAgICAgIHF1ZXJ5OiB7XG4gICAgICAgIGZldGNoUG9saWN5OiAnY2FjaGUtZmlyc3QnLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGxpbms6IG5ldyBTY2hlbWFMaW5rKHsgc2NoZW1hIH0pXG4gIH0pXG59XG5cbi8qXG4gIFRoaXMgaXMgYSB6ZXJvLWNvbmZpZyBvcHRpb24gbWV0aG9kIChhbmQgdGhlIG1haW4gZXhwb3J0KVxuICB3aGVyZSB5b3UgY2FuIGdlbmVyYXRlIGEgR3JhcGhRTCBBcG9sbG8gQ2xpZW50XG4gIGFuZCBoYXZlIGFsbCBjb25maWd1cmF0aW9uIGhhbmRsZWQgaW50ZXJuYWxseSBmb3IgeW91LlxuICBJdCBpcyBpbnRlbmRlZCBmb3IgdGhlIGxlc3MgYWR2YW5jZWQvY3VzdG9taXplZCB1c2UgY2FzZXMsXG4gIGJ1dCBzdGlsbCBvZmZlcnMgYmFzaWMgbGV2ZWxzIG9mIGNvbmZpZ3VyYXRpb24uXG4qL1xuYXN5bmMgZnVuY3Rpb24gY29ubmVjdChvcHRpb25zOiBDbGllbnRPcHRpb25zID0ge30pIHtcbiAgbGV0IGJpbmRTY2hlbWFPcHRpb25zOiBCaW5kU2NoZW1hT3B0aW9uc1xuICAvLyBhdXRvZGV0ZWN0IGBDZWxsSWRgcyBpZiB0aGUgY29uZmlnIGlzIG1pc3Npbmcgc29tZSBvZiB0aGUgbmVjZXNzYXJ5IHZhbHVlc1xuICAvLyBhbHNvIGF1dG9kZXRlY3QgYGNvbmR1Y3RvclVyaWAgYGFkbWluQ29uZHVjdG9yVXJpYCBhbmQgYGFwcElEYCBzaW5jZSB0aGUgY2FsbGVyIGNhbiBsZWF2ZSB0aG9zZSB1bmRlZmluZWRcbiAgLy8gaW4gdGhlIG9wdGlvbnMgb2JqZWN0IChhbmQgcGFzcyB0aGVtIGluc3RlYWQgZnJvbSBlaXRoZXJcbiAgLy8gZW52aXJvbm1lbnQgdmFyaWFibGVzIG9yIGludHJvc3BlY3RlZCBmcm9tIHRoZSBIb2xvY2hhaW4gTGF1bmNoZXIpXG4gIGlmICghb3B0aW9ucy5kbmFDb25maWcgfHwgIW9wdGlvbnMuY29uZHVjdG9yVXJpIHx8ICFvcHRpb25zLmFkbWluQ29uZHVjdG9yVXJpIHx8ICFvcHRpb25zLmFwcElEKSB7XG4gICAgbGV0IHsgZG5hQ29uZmlnLCBjb25kdWN0b3JVcmksIGFkbWluQ29uZHVjdG9yVXJpLCBhcHBJZCB9ID0gYXdhaXQgYXV0b0Nvbm5lY3QoXG4gICAgICBvcHRpb25zLndlYXZlQXBwQWdlbnRDbGllbnQsXG4gICAgICBvcHRpb25zLmNvbmR1Y3RvclVyaSxcbiAgICAgIG9wdGlvbnMuYWRtaW5Db25kdWN0b3JVcmksXG4gICAgICBvcHRpb25zLmFwcElELFxuICAgICAgLy8gdHJhY2VBcHBTaWduYWxzIG5lZWRzIHRvIGJlIHBhc3NlZCBkdXJpbmdcbiAgICAgIC8vIHRoZSBmaXJzdCBpbml0aWFsaXphdGlvbiBvZiB0aGUgQXBwV2Vic29ja2V0XG4gICAgICBvcHRpb25zLnRyYWNlQXBwU2lnbmFsc1xuICAgIClcbiAgICBiaW5kU2NoZW1hT3B0aW9ucyA9IHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICB3ZWF2ZUFwcEFnZW50Q2xpZW50OiBvcHRpb25zLndlYXZlQXBwQWdlbnRDbGllbnQsXG4gICAgICBkbmFDb25maWcsXG4gICAgICBjb25kdWN0b3JVcmksXG4gICAgICBhZG1pbkNvbmR1Y3RvclVyaSxcbiAgICAgIGFwcElkLFxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIEJpbmRTY2hlbWFPcHRpb25zIGFuZCBDbGllbnRPcHRpb25zXG4gICAgLy8gaXMgdGhhdCBmb3IgQmluZFNjaGVtYU9wdGlvbnMgYGRuYUNvbmZpZ2AgYW5kIGBjb25kdWN0b3JVcmlgIG11c3RcbiAgICAvLyBiZSBkZWZpbmVkLCBhbmQgaW4gdGhpcyBsb2dpY2FsIGJyYW5jaFxuICAgIC8vIHdlJ3ZlIGVzdGFibGlzaGVkIHRoYXQsIG1ha2luZyB0aGlzIGEgc2FmZVxuICAgIC8vIHR5cGUgY2FzdFxuICAgIGJpbmRTY2hlbWFPcHRpb25zID0ge1xuICAgICAgLi4ub3B0aW9ucyBhcyBCaW5kU2NoZW1hT3B0aW9uc1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhd2FpdCBpbml0R3JhcGhRTENsaWVudChiaW5kU2NoZW1hT3B0aW9ucylcbn1cblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdCJdfQ==