UNPKG

@ssb-graphql/whakapapa

Version:

GraphQL types and resolvers for the ssb-whakapapa plugin

102 lines (86 loc) 2.48 kB
import AhauClient from 'ahau-graphql-client' const Stack = require('scuttle-testbot') const ahauServer = require('ahau-graphql-server') const fetch = require('node-fetch') module.exports = async function (opts = {}) { // opts = { // name: String, // startUnclean: Boolean, // loadContext: Boolean, // keys: SecretKeys // // recpsGuard: Boolean, // isPataka: Boolean // } opts.serveBlobs = opts.serveBlobs || {} opts.serveBlobs.port = opts.serveBlobs.port || (4000 + Math.floor(Math.random() * 1e3)) let stack = Stack // eslint-disable-line .use(require('ssb-db2/core')) .use(require('ssb-classic')) .use(require('ssb-db2/compat/db')) .use(require('ssb-db2/compat/feedstate')) .use(require('ssb-db2/compat/log-stream')) .use(require('ssb-db2/compat/post')) /* @ssb-graphql/main deps */ .use(require('ssb-blobs')) // .use(require('ssb-serve-blobs')) /* @ssb-graphql/profile deps */ .use(require('ssb-profile')) .use(require('ssb-whakapapa')) .use(require('ssb-artefact')) .use(require('ssb-story')) .use(require('ssb-settings')) if (!opts.isPataka) { stack.use(require('ssb-box2')) stack = stack.use(require('ssb-tribes')) // required for loadContext atm } if (opts.recpsGuard || opts.loadContext) { stack = stack.use(require('ssb-recps-guard')) } const ssb = stack({ ...opts, noDefaultUse: true, box2: { ...opts.box2, legacyMode: true } }) const main = require('@ssb-graphql/main')(ssb, { type: opts.isPataka ? 'pataka' : 'person' }) const profile = require('@ssb-graphql/profile')(ssb) const tribes = require('@ssb-graphql/tribes')(ssb, { ...profile.gettersWithCache }) const artefact = require('@ssb-graphql/artefact')(ssb) const story = require('@ssb-graphql/story')(ssb) const whakapapa = require('../')(ssb, { ...profile.gettersWithCache, ...artefact.gettersWithCache, ...story.gettersWithCache }) const context = opts.loadContext ? await main.loadContext() : {} const port = 3000 + Math.random() * 7000 | 0 const httpServer = await ahauServer({ schemas: [ main, tribes, profile, artefact, story, whakapapa ], context, port }) ssb.close.hook((close, [cb]) => { httpServer.close() close(cb) }) const apollo = new AhauClient(port, { isTesting: true, fetch }) return { ssb, apollo } }