@graphql-mesh/plugin-hive
Version:
101 lines (100 loc) • 3.6 kB
JavaScript
import { createHive, useYogaHive } from '@graphql-hive/client';
import { process } from '@graphql-mesh/cross-helpers';
import { stringInterpolator } from '@graphql-mesh/string-interpolation';
export default function useMeshHive(pluginOptions) {
const enabled = pluginOptions != null && 'enabled' in pluginOptions
? // eslint-disable-next-line no-new-func
new Function(`return ${pluginOptions.enabled}`)()
: true;
if (!enabled) {
return {};
}
const token = stringInterpolator.parse(pluginOptions.token, {
env: process.env,
});
if (!token) {
return {};
}
let usage;
if (pluginOptions.usage) {
usage = {
max: pluginOptions.usage.max,
ttl: pluginOptions.usage.ttl,
exclude: pluginOptions.usage.exclude,
sampleRate: pluginOptions.usage.sampleRate,
processVariables: pluginOptions.usage.processVariables,
};
if (pluginOptions.usage?.clientInfo) {
usage.clientInfo = function (context) {
return {
name: stringInterpolator.parse(pluginOptions.usage.clientInfo.name, {
context,
env: process.env,
}),
version: stringInterpolator.parse(pluginOptions.usage.clientInfo.version, {
context,
env: process.env,
}),
};
};
}
}
let reporting;
if (pluginOptions.reporting) {
reporting = {
author: stringInterpolator.parse(pluginOptions.reporting.author, { env: process.env }),
commit: stringInterpolator.parse(pluginOptions.reporting.commit, { env: process.env }),
serviceName: stringInterpolator.parse(pluginOptions.reporting.serviceName, {
env: process.env,
}),
serviceUrl: stringInterpolator.parse(pluginOptions.reporting.serviceUrl, {
env: process.env,
}),
};
}
let agent;
if (pluginOptions.agent) {
agent = {
timeout: pluginOptions.agent.timeout,
maxRetries: pluginOptions.agent.maxRetries,
minTimeout: pluginOptions.agent.minTimeout,
sendInterval: pluginOptions.agent.sendInterval,
maxSize: pluginOptions.agent.maxSize,
logger: pluginOptions.logger,
};
}
let selfHosting;
if (pluginOptions.selfHosting) {
selfHosting = {
graphqlEndpoint: stringInterpolator.parse(pluginOptions.selfHosting.graphqlEndpoint, {
env: process.env,
}),
usageEndpoint: stringInterpolator.parse(pluginOptions.selfHosting.usageEndpoint, {
env: process.env,
}),
applicationUrl: stringInterpolator.parse(pluginOptions.selfHosting.applicationUrl, {
env: process.env,
}),
};
}
const hiveClient = createHive({
enabled: true,
debug: !!process.env.DEBUG,
token,
agent,
usage,
reporting,
selfHosting,
});
const id = pluginOptions.pubsub.subscribe('destroy', () => {
hiveClient
.dispose()
.catch(e => pluginOptions.logger.error(`Hive client failed to dispose`, e))
.finally(() => pluginOptions.pubsub.unsubscribe(id));
});
return {
onPluginInit({ addPlugin }) {
addPlugin(useYogaHive(hiveClient));
},
};
}