Main GraphQL types and resolvers for Secure Scuttlebutt. It provides primitives for CurrentIdentity, file-upload, Date handling etc.
npm i -S @ssb-graphql/main
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
})
})
where:
-
ssb
is a scuttlebutt instance -
opts
Object (optional) is of form{ type: String }
where:-
type
is the type of profile created (default:'person'
)
-
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
public
scope are things meant for the public domain,-
public.feedId
is the public id of your scuttlebutt instance (this is not a profileId) -
public.profileId
points to an unecrypted totally public profile
-
- the
personal
scope is for things only you will use-
personal.groupId
is the id of your personal group (for encrypted notes to self) -
personal.profileId
points 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-profile
installed - creating a personal group with a profile in it further requires
ssb-tribes
- if
ssb-tribes
is not installed, this will be skipped - if
type
was set topataka
whenmain
was instantiated, this will also be skipped
- if
An ssb-server
with the following plugins:
ssb-blobs
ssb-serve-blobs
For main.loadContext
:
ssb-profile
-
ssb-tribes
(optional, will skip functions if not present)
Scuttlebutt config that this module listens to:
{
blobs: {
max: Number
},
serveBlobs: {
port: Number,
hostname: String
},
hyperBlobs: {
port: Number
}
}
See /src/typeDefs.js
for the most up to date details on what's offered by this module.
run npm test
to run tests