UNPKG

@vf-ui/graphql-client-holochain

Version:

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

61 lines 8.18 kB
/** * GraphQL client interface for Holochain connection * * @package hREA GraphQL client * @since 2020-07-14 */ import { ApolloClient, InMemoryCache } from '@apollo/client/core/index.js'; import { SchemaLink } from '@apollo/link-schema'; import bindSchema, { autoConnect } from '@valueflows/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(), 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.conductorUri, options.adminConductorUri, options.appID, // traceAppSignals needs to be passed during // the first initialization of the AppWebsocket options.traceAppSignals); bindSchemaOptions = { ...options, 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUVILE9BQU8sRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUF5QixNQUFNLDhCQUE4QixDQUFBO0FBQ2pHLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUVoRCxPQUFPLFVBQVUsRUFBRSxFQUNqQixXQUFXLEVBS1osTUFBTSxrQ0FBa0MsQ0FBQTtBQW9CekM7Ozs7RUFJRTtBQUNGLE1BQU0sQ0FBQyxLQUFLLFVBQVUsaUJBQWlCLENBQUMsT0FBMEI7SUFDaEUsTUFBTSxNQUFNLEdBQUcsTUFBTSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUE7SUFFeEMsT0FBTyxJQUFJLFlBQVksQ0FBQztRQUN0QixLQUFLLEVBQUUsSUFBSSxhQUFhLEVBQUU7UUFDMUIsSUFBSSxFQUFFLElBQUksVUFBVSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUM7S0FDakMsQ0FBQyxDQUFBO0FBQ0osQ0FBQztBQUVEOzs7Ozs7RUFNRTtBQUNGLEtBQUssVUFBVSxPQUFPLENBQUMsVUFBeUIsRUFBRTtJQUNoRCxJQUFJLGlCQUFvQyxDQUFBO0lBQ3hDLDZFQUE2RTtJQUM3RSw0R0FBNEc7SUFDNUcsMkRBQTJEO0lBQzNELHFFQUFxRTtJQUNyRSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFO1FBQy9GLElBQUksRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUFFLEtBQUssRUFBRSxHQUFHLE1BQU0sV0FBVyxDQUMzRSxPQUFPLENBQUMsWUFBWSxFQUNwQixPQUFPLENBQUMsaUJBQWlCLEVBQ3pCLE9BQU8sQ0FBQyxLQUFLO1FBQ2IsNENBQTRDO1FBQzVDLCtDQUErQztRQUMvQyxPQUFPLENBQUMsZUFBZSxDQUN4QixDQUFBO1FBQ0QsaUJBQWlCLEdBQUc7WUFDbEIsR0FBRyxPQUFPO1lBQ1YsU0FBUztZQUNULFlBQVk7WUFDWixpQkFBaUI7WUFDakIsS0FBSztTQUNOLENBQUE7S0FDRjtTQUFNO1FBQ0wsNkRBQTZEO1FBQzdELG9FQUFvRTtRQUNwRSx5Q0FBeUM7UUFDekMsNkNBQTZDO1FBQzdDLFlBQVk7UUFDWixpQkFBaUIsR0FBRztZQUNsQixHQUFHLE9BQTRCO1NBQ2hDLENBQUE7S0FDRjtJQUVELE9BQU8sTUFBTSxpQkFBaUIsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFBO0FBQ25ELENBQUM7QUFFRCxlQUFlLE9BQU8sQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR3JhcGhRTCBjbGllbnQgaW50ZXJmYWNlIGZvciBIb2xvY2hhaW4gY29ubmVjdGlvblxuICpcbiAqIEBwYWNrYWdlICBoUkVBIEdyYXBoUUwgY2xpZW50XG4gKiBAc2luY2UgICAgMjAyMC0wNy0xNFxuICovXG5cbmltcG9ydCB7IEFwb2xsb0NsaWVudCwgSW5NZW1vcnlDYWNoZSwgTm9ybWFsaXplZENhY2hlT2JqZWN0IH0gZnJvbSAnQGFwb2xsby9jbGllbnQvY29yZS9pbmRleC5qcydcbmltcG9ydCB7IFNjaGVtYUxpbmsgfSBmcm9tICdAYXBvbGxvL2xpbmstc2NoZW1hJ1xuXG5pbXBvcnQgYmluZFNjaGVtYSwge1xuICBhdXRvQ29ubmVjdCxcbiAgQmluZFNjaGVtYU9wdGlvbnMsXG4gIEROQUlkTWFwcGluZ3MsXG4gIEV4dGVuc2lvbk9wdGlvbnMsXG4gIFJlc29sdmVyT3B0aW9uc1xufSBmcm9tICdAdmFsdWVmbG93cy92Zi1ncmFwaHFsLWhvbG9jaGFpbidcblxuLyogRm9yIGV4dGVybmFsIGNsaWVudC4gQXJlIG9wdGlvbmFsIGJlY2F1c2VcbiAgIGBjb25kdWN0b3JVcmlgIGFuZCBgYXBwSURgXG4gICBtYXkgYmUgYXV0b2RldGVjdGVkIG9yIHRha2VuIGZyb20gZW52aXJvbm1lbnQgdmFyaWFibGVzXG4gICBhbmQgYGRuYUNvbmZpZ2AgZGlzY292ZXJlZCB0aHJvdWdoIGEgZnVuY3Rpb25hbCBjb25uZWN0aW9uXG4gICB0byBob2xvY2hhaW5cbiovXG5pbnRlcmZhY2UgQXV0b0Nvbm5lY3Rpb25PcHRpb25zIHtcbiAgZG5hQ29uZmlnPzogRE5BSWRNYXBwaW5nc1xuICBjb25kdWN0b3JVcmk/OiBzdHJpbmdcbiAgYWRtaW5Db25kdWN0b3JVcmk/OiBzdHJpbmdcbiAgYXBwSUQ/OiBzdHJpbmdcbn1cblxuZXhwb3J0IHR5cGUgQ2xpZW50T3B0aW9ucyA9IFBpY2s8UmVzb2x2ZXJPcHRpb25zLCAndHJhY2VBcHBTaWduYWxzJz5cbiAgJiBQaWNrPEJpbmRTY2hlbWFPcHRpb25zLCAnZW5hYmxlZFZGTW9kdWxlcyc+XG4gICYgRXh0ZW5zaW9uT3B0aW9uc1xuICAmIEF1dG9Db25uZWN0aW9uT3B0aW9uc1xuXG4vKlxuICBUaGlzIG1ldGhvZCBjcmVhdGVzIHRoZSBHcmFwaFFMU2NoZW1hIGZyb21cbiAgdGhlIGdpdmVuIG9wdGlvbnMsIGFuZCB0aGVuIGJ1aWxkcyBhbiBHcmFwaHFsIEFwb2xsbyBDbGllbnRcbiAgd2l0aCB0aGUgYmFzaWMgSW5NZW1vcnlDYWNoZSB3aXRoIHRoYXQgc2NoZW1hLlxuKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbml0R3JhcGhRTENsaWVudChvcHRpb25zOiBCaW5kU2NoZW1hT3B0aW9ucykge1xuICBjb25zdCBzY2hlbWEgPSBhd2FpdCBiaW5kU2NoZW1hKG9wdGlvbnMpXG5cbiAgcmV0dXJuIG5ldyBBcG9sbG9DbGllbnQoe1xuICAgIGNhY2hlOiBuZXcgSW5NZW1vcnlDYWNoZSgpLFxuICAgIGxpbms6IG5ldyBTY2hlbWFMaW5rKHsgc2NoZW1hIH0pXG4gIH0pXG59XG5cbi8qXG4gIFRoaXMgaXMgYSB6ZXJvLWNvbmZpZyBvcHRpb24gbWV0aG9kIChhbmQgdGhlIG1haW4gZXhwb3J0KVxuICB3aGVyZSB5b3UgY2FuIGdlbmVyYXRlIGEgR3JhcGhRTCBBcG9sbG8gQ2xpZW50XG4gIGFuZCBoYXZlIGFsbCBjb25maWd1cmF0aW9uIGhhbmRsZWQgaW50ZXJuYWxseSBmb3IgeW91LlxuICBJdCBpcyBpbnRlbmRlZCBmb3IgdGhlIGxlc3MgYWR2YW5jZWQvY3VzdG9taXplZCB1c2UgY2FzZXMsXG4gIGJ1dCBzdGlsbCBvZmZlcnMgYmFzaWMgbGV2ZWxzIG9mIGNvbmZpZ3VyYXRpb24uXG4qL1xuYXN5bmMgZnVuY3Rpb24gY29ubmVjdChvcHRpb25zOiBDbGllbnRPcHRpb25zID0ge30pIHtcbiAgbGV0IGJpbmRTY2hlbWFPcHRpb25zOiBCaW5kU2NoZW1hT3B0aW9uc1xuICAvLyBhdXRvZGV0ZWN0IGBDZWxsSWRgcyBpZiB0aGUgY29uZmlnIGlzIG1pc3Npbmcgc29tZSBvZiB0aGUgbmVjZXNzYXJ5IHZhbHVlc1xuICAvLyBhbHNvIGF1dG9kZXRlY3QgYGNvbmR1Y3RvclVyaWAgYGFkbWluQ29uZHVjdG9yVXJpYCBhbmQgYGFwcElEYCBzaW5jZSB0aGUgY2FsbGVyIGNhbiBsZWF2ZSB0aG9zZSB1bmRlZmluZWRcbiAgLy8gaW4gdGhlIG9wdGlvbnMgb2JqZWN0IChhbmQgcGFzcyB0aGVtIGluc3RlYWQgZnJvbSBlaXRoZXJcbiAgLy8gZW52aXJvbm1lbnQgdmFyaWFibGVzIG9yIGludHJvc3BlY3RlZCBmcm9tIHRoZSBIb2xvY2hhaW4gTGF1bmNoZXIpXG4gIGlmICghb3B0aW9ucy5kbmFDb25maWcgfHwgIW9wdGlvbnMuY29uZHVjdG9yVXJpIHx8ICFvcHRpb25zLmFkbWluQ29uZHVjdG9yVXJpIHx8ICFvcHRpb25zLmFwcElEKSB7XG4gICAgbGV0IHsgZG5hQ29uZmlnLCBjb25kdWN0b3JVcmksIGFkbWluQ29uZHVjdG9yVXJpLCBhcHBJZCB9ID0gYXdhaXQgYXV0b0Nvbm5lY3QoXG4gICAgICBvcHRpb25zLmNvbmR1Y3RvclVyaSxcbiAgICAgIG9wdGlvbnMuYWRtaW5Db25kdWN0b3JVcmksXG4gICAgICBvcHRpb25zLmFwcElELFxuICAgICAgLy8gdHJhY2VBcHBTaWduYWxzIG5lZWRzIHRvIGJlIHBhc3NlZCBkdXJpbmdcbiAgICAgIC8vIHRoZSBmaXJzdCBpbml0aWFsaXphdGlvbiBvZiB0aGUgQXBwV2Vic29ja2V0XG4gICAgICBvcHRpb25zLnRyYWNlQXBwU2lnbmFsc1xuICAgIClcbiAgICBiaW5kU2NoZW1hT3B0aW9ucyA9IHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBkbmFDb25maWcsXG4gICAgICBjb25kdWN0b3JVcmksXG4gICAgICBhZG1pbkNvbmR1Y3RvclVyaSxcbiAgICAgIGFwcElkLFxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIEJpbmRTY2hlbWFPcHRpb25zIGFuZCBDbGllbnRPcHRpb25zXG4gICAgLy8gaXMgdGhhdCBmb3IgQmluZFNjaGVtYU9wdGlvbnMgYGRuYUNvbmZpZ2AgYW5kIGBjb25kdWN0b3JVcmlgIG11c3RcbiAgICAvLyBiZSBkZWZpbmVkLCBhbmQgaW4gdGhpcyBsb2dpY2FsIGJyYW5jaFxuICAgIC8vIHdlJ3ZlIGVzdGFibGlzaGVkIHRoYXQsIG1ha2luZyB0aGlzIGEgc2FmZVxuICAgIC8vIHR5cGUgY2FzdFxuICAgIGJpbmRTY2hlbWFPcHRpb25zID0ge1xuICAgICAgLi4ub3B0aW9ucyBhcyBCaW5kU2NoZW1hT3B0aW9uc1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhd2FpdCBpbml0R3JhcGhRTENsaWVudChiaW5kU2NoZW1hT3B0aW9ucylcbn1cblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdFxuIl19