@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
JavaScript
/**
* 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