@ssb-graphql/main
v11.0.0
Published
Main GraphQL types and resolvers for Secure Scuttlebutt
Readme
GraphQL for Secure Scuttlebutt
Main GraphQL types and resolvers for Secure Scuttlebutt. It provides primitives for CurrentIdentity, file-upload, Date handling etc.
Usage
npm i -S @ssb-graphql/main
Example Usage
const { ApolloServer } = require('apollo-server-express')
const { buildFederatedSchema } = require('@apollo/federation');
const Server = require('ssb-server')
const Config = require('ssb-config/inject')
const config = Config({})
const ssb = Server
.use(require('ssb-blobs')) // << required
.use(require('ssb-serve-blobs')) // << required
.call(null, config)
const main = require('@ssb-graphql/main')(ssb)
main.loadContext((err, context) => {
if (err) throw err
const server = new ApolloServer({
schema: buildFederatedSchema([
{ typeDefs: main.typeDefs, resolvers: main.resolvers },
// add other types + resolvers here!
]),
context
})
})API
require('@ssb-graphql/main')(ssb, opts) => main
where:
ssbis a scuttlebutt instanceoptsObject (optional) is of form{ type: String }where:typeis the type of profile created (default:'person')
main.loadContext(cb)
Where cb is a callback of signature cb(err, context) and context has form
{
public: {
feedId,
profileId // requires ssb-profile
},
personal: {
groupId, // requires ssb-tribes
profileId // requires ssb-profile + ssb-tribes
}
}where:
- the
publicscope are things meant for the public domain,public.feedIdis the public id of your scuttlebutt instance (this is not a profileId)public.profileIdpoints to an unecrypted totally public profile
- the
personalscope is for things only you will usepersonal.groupIdis the id of your personal group (for encrypted notes to self)personal.profileIdpoints to a profile for you which encrypted to your personal group (so no-one else will see these details)
NOTE:
- this will create new records (profiles / private group) and link them to your feed if they do not already exist
- creating profiles requires
ssb-profileinstalled - creating a personal group with a profile in it further requires
ssb-tribes- if
ssb-tribesis not installed, this will be skipped - if
typewas set topatakawhenmainwas instantiated, this will also be skipped
- if
Requirements
An ssb-server with the following plugins:
ssb-blobsssb-serve-blobs
For main.loadContext:
ssb-profilessb-tribes(optional, will skip functions if not present)
Config
Scuttlebutt config that this module listens to:
{
blobs: {
max: Number
},
serveBlobs: {
port: Number,
hostname: String
},
hyperBlobs: {
port: Number
}
}API
See /src/typeDefs.js for the most up to date details on what's offered by this module.
TODO
run npm test to run tests
