diff --git a/package-lock.json b/package-lock.json index 959cf4c..57b736c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2645,7 +2645,8 @@ "ansi-regex": { "version": "2.1.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "aproba": { "version": "1.2.0", @@ -3060,7 +3061,8 @@ "safe-buffer": { "version": "5.1.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "safer-buffer": { "version": "2.1.2", @@ -3116,6 +3118,7 @@ "version": "3.0.1", "bundled": true, "dev": true, + "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -3159,12 +3162,14 @@ "wrappy": { "version": "1.0.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "yallist": { "version": "3.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true } } }, diff --git a/routes/inbox.js b/routes/inbox.js index 109ceb7..26151b3 100644 --- a/routes/inbox.js +++ b/routes/inbox.js @@ -28,7 +28,7 @@ router.post('/', net.validators.activity, net.security.verifySignature, function .catch(e => console.log(e)) break case 'Create': - toDo.saveObject = true + // toDo.saveObject = true pub.actor.getOrCreateActor(req.user, true) .then(user => { const to = [ @@ -40,6 +40,7 @@ router.post('/', net.validators.activity, net.security.verifySignature, function return pub.activity.addToOutbox(user, announce) }).catch(e => console.log(e)) break + case 'Delete': case 'Undo': pub.activity.undo(req.body.object, req.body.actor) .catch(err => console.log(err.message)) diff --git a/web/dist/css/app.bf8cceb6.css b/web/dist/css/app.bf8cceb6.css new file mode 100644 index 0000000..a49382a --- /dev/null +++ b/web/dist/css/app.bf8cceb6.css @@ -0,0 +1 @@ +#app{font-family:Avenir,Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:#2c3e50}.fas[data-v-520300bd]{margin-right:8px}h2[data-v-520300bd]{overflow:hidden;text-overflow:ellipsis}.profile[data-v-12d255e1]{width:300px}.profile-grid[data-v-12d255e1]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-ms-flex-line-pack:justify;align-content:space-between}.profile-image{width:75px}.icon[data-v-4bd8f499]{width:32px;height:32px}.invisible{display:none}.ellipsis:after{content:"\2026"}.w3-container.w3-content[data-v-335c9ffa]{max-width:800px}.profile-main[data-v-335c9ffa]{height:256px;width:256px} \ No newline at end of file diff --git a/web/dist/css/app.d86bd55d.css b/web/dist/css/app.d86bd55d.css deleted file mode 100644 index 5bcfba0..0000000 --- a/web/dist/css/app.d86bd55d.css +++ /dev/null @@ -1 +0,0 @@ -#app{font-family:Avenir,Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:#2c3e50}.fas[data-v-c1288b72]{margin-right:8px}.profile[data-v-9c330358]{width:300px}.profile-grid[data-v-9c330358]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-ms-flex-line-pack:justify;align-content:space-between}.profile-image{width:75px}.icon[data-v-26eca70a]{width:32px;height:32px}.invisible{display:none}.ellipsis:after{content:"\2026"}.w3-container.w3-content[data-v-94492214]{max-width:800px}.profile-main[data-v-94492214]{height:256px;width:256px} \ No newline at end of file diff --git a/web/dist/index.html b/web/dist/index.html index 3482b4c..f0d7bd3 100644 --- a/web/dist/index.html +++ b/web/dist/index.html @@ -1 +1 @@ -
{{ actor.summary }}
\r\n\r\n Guppe brings social groups to the fediverse — making it easy to connect and meet new\r\n people based on shared\r\n interests without the maniuplation of your attention to maximize ad revenue nor the\r\n walled garden lock-in of capitalist social media.\r\n
\r\n\r\n Guppe groups look like regular users you can interact with using your existing account on any\r\n ActivityPub service, but they automatically share anything you send them with all of their followers.\r\n
\r\nTo join {{ actor.preferredUsername }}, enter your handle below and you'll be\r\n redirected back to this group's profile in your app where you can follow it.
\r\n \r\ne.g. you@yourhost.com
\r\nCouldn't connect with your host.
\r\nYou could try going back to your app and entering @{{ groupHandle }} in the search instead
\r\n{{ actor.summary }}
\r\n\r\n Guppe brings social groups to the fediverse — making it easy to connect and meet new\r\n people based on shared\r\n interests without the maniuplation of your attention to maximize ad revenue nor the\r\n walled garden lock-in of capitalist social media.\r\n
\r\n\r\n Guppe groups look like regular users you can interact with using your existing account on any\r\n ActivityPub service, but they automatically share anything you send them with all of their followers.\r\n
\r\nTo join {{ actor.preferredUsername }}, enter your handle below and you'll be\r\n redirected back to this group's profile in your app where you can follow it.
\r\n \r\ne.g. you@yourhost.com
\r\nCouldn't connect with your host.
\r\nYou could try going back to your app and entering @{{ groupHandle }} in the search instead
\r\n{{ actor.summary }}
\n\n Guppe brings social groups to the fediverse — making it easy to connect and meet new\n people based on shared\n interests without the maniuplation of your attention to maximize ad revenue nor the\n walled garden lock-in of capitalist social media.\n
\n\n Guppe groups look like regular users you can interact with using your existing account on any\n ActivityPub service, but they automatically share anything you send them with all of their followers.\n
\nTo join {{ actor.preferredUsername }}, enter your handle below and you'll be\n redirected back to this group's profile in your app where you can follow it.
\n \ne.g. you@yourhost.com
\nCouldn't connect with your host.
\nYou could try going back to your app and entering @{{ groupHandle }} in the search instead
\n, or missing
. Bailing hydration and performing ' +\n 'full client-side render.'\n );\n }\n }\n // either not server-rendered, or hydration failed.\n // create an empty node and replace it\n oldVnode = emptyNodeAt(oldVnode);\n }\n\n // replacing existing element\n var oldElm = oldVnode.elm;\n var parentElm = nodeOps.parentNode(oldElm);\n\n // create new node\n createElm(\n vnode,\n insertedVnodeQueue,\n // extremely rare edge case: do not insert if old element is in a\n // leaving transition. Only happens when combining transition +\n // keep-alive + HOCs. (#4590)\n oldElm._leaveCb ? null : parentElm,\n nodeOps.nextSibling(oldElm)\n );\n\n // update parent placeholder node element, recursively\n if (isDef(vnode.parent)) {\n var ancestor = vnode.parent;\n var patchable = isPatchable(vnode);\n while (ancestor) {\n for (var i = 0; i < cbs.destroy.length; ++i) {\n cbs.destroy[i](ancestor);\n }\n ancestor.elm = vnode.elm;\n if (patchable) {\n for (var i$1 = 0; i$1 < cbs.create.length; ++i$1) {\n cbs.create[i$1](emptyNode, ancestor);\n }\n // #6513\n // invoke insert hooks that may have been merged by create hooks.\n // e.g. for directives that uses the \"inserted\" hook.\n var insert = ancestor.data.hook.insert;\n if (insert.merged) {\n // start at index 1 to avoid re-invoking component mounted hook\n for (var i$2 = 1; i$2 < insert.fns.length; i$2++) {\n insert.fns[i$2]();\n }\n }\n } else {\n registerRef(ancestor);\n }\n ancestor = ancestor.parent;\n }\n }\n\n // destroy old node\n if (isDef(parentElm)) {\n removeVnodes(parentElm, [oldVnode], 0, 0);\n } else if (isDef(oldVnode.tag)) {\n invokeDestroyHook(oldVnode);\n }\n }\n }\n\n invokeInsertHook(vnode, insertedVnodeQueue, isInitialPatch);\n return vnode.elm\n }\n}\n\n/* */\n\nvar directives = {\n create: updateDirectives,\n update: updateDirectives,\n destroy: function unbindDirectives (vnode) {\n updateDirectives(vnode, emptyNode);\n }\n};\n\nfunction updateDirectives (oldVnode, vnode) {\n if (oldVnode.data.directives || vnode.data.directives) {\n _update(oldVnode, vnode);\n }\n}\n\nfunction _update (oldVnode, vnode) {\n var isCreate = oldVnode === emptyNode;\n var isDestroy = vnode === emptyNode;\n var oldDirs = normalizeDirectives$1(oldVnode.data.directives, oldVnode.context);\n var newDirs = normalizeDirectives$1(vnode.data.directives, vnode.context);\n\n var dirsWithInsert = [];\n var dirsWithPostpatch = [];\n\n var key, oldDir, dir;\n for (key in newDirs) {\n oldDir = oldDirs[key];\n dir = newDirs[key];\n if (!oldDir) {\n // new directive, bind\n callHook$1(dir, 'bind', vnode, oldVnode);\n if (dir.def && dir.def.inserted) {\n dirsWithInsert.push(dir);\n }\n } else {\n // existing directive, update\n dir.oldValue = oldDir.value;\n dir.oldArg = oldDir.arg;\n callHook$1(dir, 'update', vnode, oldVnode);\n if (dir.def && dir.def.componentUpdated) {\n dirsWithPostpatch.push(dir);\n }\n }\n }\n\n if (dirsWithInsert.length) {\n var callInsert = function () {\n for (var i = 0; i < dirsWithInsert.length; i++) {\n callHook$1(dirsWithInsert[i], 'inserted', vnode, oldVnode);\n }\n };\n if (isCreate) {\n mergeVNodeHook(vnode, 'insert', callInsert);\n } else {\n callInsert();\n }\n }\n\n if (dirsWithPostpatch.length) {\n mergeVNodeHook(vnode, 'postpatch', function () {\n for (var i = 0; i < dirsWithPostpatch.length; i++) {\n callHook$1(dirsWithPostpatch[i], 'componentUpdated', vnode, oldVnode);\n }\n });\n }\n\n if (!isCreate) {\n for (key in oldDirs) {\n if (!newDirs[key]) {\n // no longer present, unbind\n callHook$1(oldDirs[key], 'unbind', oldVnode, oldVnode, isDestroy);\n }\n }\n }\n}\n\nvar emptyModifiers = Object.create(null);\n\nfunction normalizeDirectives$1 (\n dirs,\n vm\n) {\n var res = Object.create(null);\n if (!dirs) {\n // $flow-disable-line\n return res\n }\n var i, dir;\n for (i = 0; i < dirs.length; i++) {\n dir = dirs[i];\n if (!dir.modifiers) {\n // $flow-disable-line\n dir.modifiers = emptyModifiers;\n }\n res[getRawDirName(dir)] = dir;\n dir.def = resolveAsset(vm.$options, 'directives', dir.name, true);\n }\n // $flow-disable-line\n return res\n}\n\nfunction getRawDirName (dir) {\n return dir.rawName || ((dir.name) + \".\" + (Object.keys(dir.modifiers || {}).join('.')))\n}\n\nfunction callHook$1 (dir, hook, vnode, oldVnode, isDestroy) {\n var fn = dir.def && dir.def[hook];\n if (fn) {\n try {\n fn(vnode.elm, dir, vnode, oldVnode, isDestroy);\n } catch (e) {\n handleError(e, vnode.context, (\"directive \" + (dir.name) + \" \" + hook + \" hook\"));\n }\n }\n}\n\nvar baseModules = [\n ref,\n directives\n];\n\n/* */\n\nfunction updateAttrs (oldVnode, vnode) {\n var opts = vnode.componentOptions;\n if (isDef(opts) && opts.Ctor.options.inheritAttrs === false) {\n return\n }\n if (isUndef(oldVnode.data.attrs) && isUndef(vnode.data.attrs)) {\n return\n }\n var key, cur, old;\n var elm = vnode.elm;\n var oldAttrs = oldVnode.data.attrs || {};\n var attrs = vnode.data.attrs || {};\n // clone observed objects, as the user probably wants to mutate it\n if (isDef(attrs.__ob__)) {\n attrs = vnode.data.attrs = extend({}, attrs);\n }\n\n for (key in attrs) {\n cur = attrs[key];\n old = oldAttrs[key];\n if (old !== cur) {\n setAttr(elm, key, cur);\n }\n }\n // #4391: in IE9, setting type can reset value for input[type=radio]\n // #6666: IE/Edge forces progress value down to 1 before setting a max\n /* istanbul ignore if */\n if ((isIE || isEdge) && attrs.value !== oldAttrs.value) {\n setAttr(elm, 'value', attrs.value);\n }\n for (key in oldAttrs) {\n if (isUndef(attrs[key])) {\n if (isXlink(key)) {\n elm.removeAttributeNS(xlinkNS, getXlinkProp(key));\n } else if (!isEnumeratedAttr(key)) {\n elm.removeAttribute(key);\n }\n }\n }\n}\n\nfunction setAttr (el, key, value) {\n if (el.tagName.indexOf('-') > -1) {\n baseSetAttr(el, key, value);\n } else if (isBooleanAttr(key)) {\n // set attribute for blank value\n // e.g. \n if (isFalsyAttrValue(value)) {\n el.removeAttribute(key);\n } else {\n // technically allowfullscreen is a boolean attribute for