@ssb-graphql/main
v11.0.0
Published
Main GraphQL types and resolvers for Secure Scuttlebutt
Downloads
116
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
