import { generateRsaKeyPair } from '../activitypub/security' import { activityPub } from '../activitypub/ActivityPub' import as from 'activitystrea.ms' const debug = require('debug')('backend:schema') export default { Mutation: { CreatePost: async (resolve, root, args, context, info) => { args.activityId = activityPub.generateStatusId(context.user.slug) args.objectId = activityPub.generateStatusId(context.user.slug) const post = await resolve(root, args, context, info) const { user: author } = context const actorId = author.actorId debug(`actorId = ${actorId}`) const createActivity = await new Promise((resolve, reject) => { as.create() .id(`${actorId}/status/${args.activityId}`) .actor(`${actorId}`) .object( as .article() .id(`${actorId}/status/${post.id}`) .content(post.content) .to('https://www.w3.org/ns/activitystreams#Public') .publishedNow() .attributedTo(`${actorId}`), ) .prettyWrite((err, doc) => { if (err) { reject(err) } else { debug(doc) const parsedDoc = JSON.parse(doc) parsedDoc.send = true resolve(JSON.stringify(parsedDoc)) } }) }) try { await activityPub.sendActivity(createActivity) } catch (e) { debug(`error sending post activity\n${e}`) } return post }, SignupVerification: async (resolve, root, args, context, info) => { const keys = generateRsaKeyPair() Object.assign(args, keys) args.actorId = `${activityPub.host}/activitypub/users/${args.slug}` return resolve(root, args, context, info) }, }, }