@geekity/cms 0.23.0 → 0.25.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +96 -160
- package/admin/pages/documents/editor.njk +45 -0
- package/admin/pages/federation/settings.njk +1 -59
- package/admin/pages/plugins/installed.njk +113 -0
- package/admin/pages/plugins/screen.njk +129 -0
- package/admin/static/admin.css +136 -4
- package/admin/static/editor-actions.js +192 -0
- package/admin/static/editor.js +1 -1
- package/dist/admin/accounts.d.ts +18 -39
- package/dist/admin/accounts.d.ts.map +1 -1
- package/dist/admin/accounts.js +19 -48
- package/dist/admin/accounts.js.map +1 -1
- package/dist/admin/documents.d.ts +5 -0
- package/dist/admin/documents.d.ts.map +1 -1
- package/dist/admin/documents.js +17 -8
- package/dist/admin/documents.js.map +1 -1
- package/dist/admin/editor-actions.d.ts +35 -0
- package/dist/admin/editor-actions.d.ts.map +1 -0
- package/dist/admin/editor-actions.js +168 -0
- package/dist/admin/editor-actions.js.map +1 -0
- package/dist/admin/federation.d.ts +4 -5
- package/dist/admin/federation.d.ts.map +1 -1
- package/dist/admin/federation.js +4 -5
- package/dist/admin/federation.js.map +1 -1
- package/dist/admin/index.d.ts +1 -1
- package/dist/admin/index.d.ts.map +1 -1
- package/dist/admin/index.js +1 -1
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/menu.d.ts +1 -1
- package/dist/admin/menu.d.ts.map +1 -1
- package/dist/admin/menu.js +10 -3
- package/dist/admin/menu.js.map +1 -1
- package/dist/admin/plugins.d.ts +24 -0
- package/dist/admin/plugins.d.ts.map +1 -0
- package/dist/admin/plugins.js +312 -0
- package/dist/admin/plugins.js.map +1 -0
- package/dist/admin/routes.d.ts.map +1 -1
- package/dist/admin/routes.js +5 -1
- package/dist/admin/routes.js.map +1 -1
- package/dist/admin/settings-federation.d.ts +0 -25
- package/dist/admin/settings-federation.d.ts.map +1 -1
- package/dist/admin/settings-federation.js +1 -54
- package/dist/admin/settings-federation.js.map +1 -1
- package/dist/admin/settings.d.ts +2 -14
- package/dist/admin/settings.d.ts.map +1 -1
- package/dist/admin/settings.js +1 -21
- package/dist/admin/settings.js.map +1 -1
- package/dist/admin/store.d.ts +8 -1
- package/dist/admin/store.d.ts.map +1 -1
- package/dist/admin/store.js +7 -3
- package/dist/admin/store.js.map +1 -1
- package/dist/admin/templates.d.ts +2 -0
- package/dist/admin/templates.d.ts.map +1 -1
- package/dist/admin/templates.js +2 -0
- package/dist/admin/templates.js.map +1 -1
- package/dist/cli.d.ts +2 -3
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +278 -212
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +20 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +6 -0
- package/dist/config.js.map +1 -1
- package/dist/content/store.d.ts +6 -0
- package/dist/content/store.d.ts.map +1 -1
- package/dist/content/store.js +3 -0
- package/dist/content/store.js.map +1 -1
- package/dist/drain.d.ts +28 -0
- package/dist/drain.d.ts.map +1 -0
- package/dist/drain.js +106 -0
- package/dist/drain.js.map +1 -0
- package/dist/env.d.ts +11 -0
- package/dist/env.d.ts.map +1 -1
- package/dist/federation/federation.d.ts +4 -2
- package/dist/federation/federation.d.ts.map +1 -1
- package/dist/federation/federation.js +16 -21
- package/dist/federation/federation.js.map +1 -1
- package/dist/federation/inbox.d.ts +23 -3
- package/dist/federation/inbox.d.ts.map +1 -1
- package/dist/federation/inbox.js +63 -1
- package/dist/federation/inbox.js.map +1 -1
- package/dist/federation/index.d.ts +0 -4
- package/dist/federation/index.d.ts.map +1 -1
- package/dist/federation/index.js +0 -2
- package/dist/federation/index.js.map +1 -1
- package/dist/federation/mount.d.ts +6 -12
- package/dist/federation/mount.d.ts.map +1 -1
- package/dist/federation/mount.js +3 -50
- package/dist/federation/mount.js.map +1 -1
- package/dist/federation/queue.d.ts +22 -0
- package/dist/federation/queue.d.ts.map +1 -0
- package/dist/federation/queue.js +58 -0
- package/dist/federation/queue.js.map +1 -0
- package/dist/files/atomic.d.ts +13 -0
- package/dist/files/atomic.d.ts.map +1 -1
- package/dist/files/atomic.js +45 -0
- package/dist/files/atomic.js.map +1 -1
- package/dist/index.d.ts +30 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +156 -79
- package/dist/index.js.map +1 -1
- package/dist/plugin.d.ts +513 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +23 -0
- package/dist/plugin.js.map +1 -0
- package/dist/plugins/enabled.d.ts +23 -0
- package/dist/plugins/enabled.d.ts.map +1 -0
- package/dist/plugins/enabled.js +49 -0
- package/dist/plugins/enabled.js.map +1 -0
- package/dist/plugins/federation.d.ts +26 -0
- package/dist/plugins/federation.d.ts.map +1 -0
- package/dist/plugins/federation.js +114 -0
- package/dist/plugins/federation.js.map +1 -0
- package/dist/plugins/fetch.d.ts +15 -0
- package/dist/plugins/fetch.d.ts.map +1 -0
- package/dist/plugins/fetch.js +33 -0
- package/dist/plugins/fetch.js.map +1 -0
- package/dist/plugins/folder.d.ts +50 -0
- package/dist/plugins/folder.d.ts.map +1 -0
- package/dist/plugins/folder.js +171 -0
- package/dist/plugins/folder.js.map +1 -0
- package/dist/plugins/install.d.ts +45 -0
- package/dist/plugins/install.d.ts.map +1 -0
- package/dist/plugins/install.js +275 -0
- package/dist/plugins/install.js.map +1 -0
- package/dist/plugins/mount.d.ts +17 -0
- package/dist/plugins/mount.d.ts.map +1 -0
- package/dist/plugins/mount.js +44 -0
- package/dist/plugins/mount.js.map +1 -0
- package/dist/plugins/registry.d.ts +110 -0
- package/dist/plugins/registry.d.ts.map +1 -0
- package/dist/plugins/registry.js +447 -0
- package/dist/plugins/registry.js.map +1 -0
- package/dist/plugins/settings.d.ts +64 -0
- package/dist/plugins/settings.d.ts.map +1 -0
- package/dist/plugins/settings.js +219 -0
- package/dist/plugins/settings.js.map +1 -0
- package/dist/plugins/site.d.ts +17 -0
- package/dist/plugins/site.d.ts.map +1 -0
- package/dist/plugins/site.js +67 -0
- package/dist/plugins/site.js.map +1 -0
- package/dist/supervisor/primary.d.ts +47 -0
- package/dist/supervisor/primary.d.ts.map +1 -0
- package/dist/supervisor/primary.js +208 -0
- package/dist/supervisor/primary.js.map +1 -0
- package/dist/supervisor/protocol.d.ts +37 -0
- package/dist/supervisor/protocol.d.ts.map +1 -0
- package/dist/supervisor/protocol.js +29 -0
- package/dist/supervisor/protocol.js.map +1 -0
- package/dist/supervisor/supervision.d.ts +25 -0
- package/dist/supervisor/supervision.d.ts.map +1 -0
- package/dist/supervisor/supervision.js +7 -0
- package/dist/supervisor/supervision.js.map +1 -0
- package/dist/supervisor/worker.d.ts +29 -0
- package/dist/supervisor/worker.d.ts.map +1 -0
- package/dist/supervisor/worker.js +97 -0
- package/dist/supervisor/worker.js.map +1 -0
- package/dist/web/errors.d.ts.map +1 -1
- package/dist/web/errors.js +5 -3
- package/dist/web/errors.js.map +1 -1
- package/dist/web/llms.d.ts +8 -0
- package/dist/web/llms.d.ts.map +1 -1
- package/dist/web/llms.js +25 -7
- package/dist/web/llms.js.map +1 -1
- package/dist/web/maintenance.d.ts +2 -2
- package/dist/web/maintenance.d.ts.map +1 -1
- package/dist/web/maintenance.js +7 -4
- package/dist/web/maintenance.js.map +1 -1
- package/dist/web/negotiate.d.ts +8 -5
- package/dist/web/negotiate.d.ts.map +1 -1
- package/dist/web/negotiate.js +21 -10
- package/dist/web/negotiate.js.map +1 -1
- package/dist/web/routes.d.ts.map +1 -1
- package/dist/web/routes.js +84 -36
- package/dist/web/routes.js.map +1 -1
- package/package.json +11 -5
- package/dist/comments/conversation.d.ts +0 -29
- package/dist/comments/conversation.d.ts.map +0 -1
- package/dist/comments/conversation.js +0 -60
- package/dist/comments/conversation.js.map +0 -1
- package/dist/federation/import-wordpress.d.ts +0 -128
- package/dist/federation/import-wordpress.d.ts.map +0 -1
- package/dist/federation/import-wordpress.js +0 -426
- package/dist/federation/import-wordpress.js.map +0 -1
- package/dist/federation/wordpress.d.ts +0 -131
- package/dist/federation/wordpress.d.ts.map +0 -1
- package/dist/federation/wordpress.js +0 -342
- package/dist/federation/wordpress.js.map +0 -1
- package/dist/web/comments.d.ts +0 -60
- package/dist/web/comments.d.ts.map +0 -1
- package/dist/web/comments.js +0 -207
- package/dist/web/comments.js.map +0 -1
package/dist/web/comments.js
DELETED
|
@@ -1,207 +0,0 @@
|
|
|
1
|
-
import { commentAnchor } from '../comments/conversation.js';
|
|
2
|
-
import { FEDERATION_PREFIX } from '../federation/paths.js';
|
|
3
|
-
import { replyFrom } from '../federation/replies.js';
|
|
4
|
-
import { activityStreamsId, isPublicDocument } from './documents.js';
|
|
5
|
-
import { absoluteUrl } from './negotiate.js';
|
|
6
|
-
/**
|
|
7
|
-
* How many candidates a site-wide page reads for each one it keeps.
|
|
8
|
-
*
|
|
9
|
-
* Replies to a post that has since been unpublished are dropped after the
|
|
10
|
-
* database has already counted them, so the query has to over-read. Four is
|
|
11
|
-
* generous for a site whose posts mostly stay published and bounded for one
|
|
12
|
-
* whose posts do not.
|
|
13
|
-
*/
|
|
14
|
-
const OVERSCAN = 4;
|
|
15
|
-
/**
|
|
16
|
-
* One post's comments, newest first, from both sources.
|
|
17
|
-
*
|
|
18
|
-
* A post that has never been delivered has no object id and so can have no
|
|
19
|
-
* fediverse replies — nothing out there has a name for it yet — but it can
|
|
20
|
-
* still have native ones, which are found by its slug.
|
|
21
|
-
*/
|
|
22
|
-
export function postComments(context, document, limit) {
|
|
23
|
-
const objectId = activityStreamsId(document, context.baseUrl);
|
|
24
|
-
const naming = authorNaming(context.admin);
|
|
25
|
-
const federated = objectId === undefined
|
|
26
|
-
? []
|
|
27
|
-
: context.admin
|
|
28
|
-
.listRepliesTo(objectId, { limit })
|
|
29
|
-
.map((activity) => replyFrom(activity, naming))
|
|
30
|
-
.filter((reply) => reply !== undefined);
|
|
31
|
-
return newestFirst([...federated, ...nativeComments(context, document)], limit);
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* Every post's comments, newest first, each with the post it answers.
|
|
35
|
-
*
|
|
36
|
-
* One about a post that has since been unpublished or trashed is left out,
|
|
37
|
-
* because the post it is about is not there to read: the feed would be showing
|
|
38
|
-
* a conversation about nothing. That filtering happens after the database has
|
|
39
|
-
* paged, so the pages are read until enough survive.
|
|
40
|
-
*/
|
|
41
|
-
export function siteComments(context, limit) {
|
|
42
|
-
const naming = authorNaming(context.admin);
|
|
43
|
-
const posts = new PostsByObjectId(context);
|
|
44
|
-
const comments = [];
|
|
45
|
-
for (let offset = 0; comments.length < limit;) {
|
|
46
|
-
const page = context.admin.listReplies({ limit: limit * OVERSCAN, offset });
|
|
47
|
-
if (page.length === 0)
|
|
48
|
-
break;
|
|
49
|
-
offset += page.length;
|
|
50
|
-
for (const activity of page) {
|
|
51
|
-
const reply = replyFrom(activity, naming);
|
|
52
|
-
if (reply === undefined)
|
|
53
|
-
continue;
|
|
54
|
-
const post = posts.get(reply.inReplyTo);
|
|
55
|
-
if (post === undefined)
|
|
56
|
-
continue;
|
|
57
|
-
comments.push({ ...reply, post });
|
|
58
|
-
if (comments.length === limit)
|
|
59
|
-
break;
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
// The native comments are over-read for the same reason the replies are: one
|
|
63
|
-
// on a post that has since been unpublished is dropped after the index has
|
|
64
|
-
// already counted it.
|
|
65
|
-
for (const stored of context.admin.listComments({
|
|
66
|
-
status: 'approved',
|
|
67
|
-
limit: limit * OVERSCAN,
|
|
68
|
-
})) {
|
|
69
|
-
const post = context.store.getBySlug(stored.slug);
|
|
70
|
-
if (post === undefined || !isPublicDocument(post, context.store.now()))
|
|
71
|
-
continue;
|
|
72
|
-
comments.push({ ...feedCommentOf(stored, post, context.baseUrl), post });
|
|
73
|
-
}
|
|
74
|
-
return newestFirst(comments, limit);
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* How many comments each of these documents has, by permalink: the fediverse
|
|
78
|
-
* replies and the approved native ones together, which is what a reader
|
|
79
|
-
* following `source:comments` would actually find on the page.
|
|
80
|
-
*
|
|
81
|
-
* Resolved rather than counted on demand, because the number goes into the
|
|
82
|
-
* feed's own validator: a feed whose comment counts moved is a changed feed,
|
|
83
|
-
* and a reader holding the old one should be told so.
|
|
84
|
-
*/
|
|
85
|
-
export function commentCounts(context, documents) {
|
|
86
|
-
const counts = new Map();
|
|
87
|
-
for (const document of documents) {
|
|
88
|
-
const objectId = activityStreamsId(document, context.baseUrl);
|
|
89
|
-
const federated = objectId === undefined ? 0 : context.admin.countRepliesTo(objectId);
|
|
90
|
-
counts.set(document.permalink, federated + context.admin.countCommentsFor(document.slug, 'approved'));
|
|
91
|
-
}
|
|
92
|
-
return counts;
|
|
93
|
-
}
|
|
94
|
-
/** One post's approved native comments, in the shape a feed item wants. */
|
|
95
|
-
function nativeComments(context, document) {
|
|
96
|
-
return context.admin
|
|
97
|
-
.listCommentsFor(document.slug)
|
|
98
|
-
.filter((comment) => comment.status === 'approved')
|
|
99
|
-
.map((comment) => feedCommentOf(comment, document, context.baseUrl));
|
|
100
|
-
}
|
|
101
|
-
/**
|
|
102
|
-
* One stored comment as a feed item.
|
|
103
|
-
*
|
|
104
|
-
* Its `url` is where a reader can actually read it — this page, at the
|
|
105
|
-
* comment's own anchor — and its `id` is the comment's own name, which is what
|
|
106
|
-
* a `guid isPermaLink="false"` is for: a reader that has seen it once does not
|
|
107
|
-
* see it again if the post moves.
|
|
108
|
-
*/
|
|
109
|
-
function feedCommentOf(comment, post, baseUrl) {
|
|
110
|
-
return {
|
|
111
|
-
id: comment.id,
|
|
112
|
-
url: `${absoluteUrl(post.permalink, baseUrl)}#${commentAnchor(comment.id)}`,
|
|
113
|
-
author: comment.author.name,
|
|
114
|
-
published: new Date(comment.submitted),
|
|
115
|
-
html: comment.content.html,
|
|
116
|
-
};
|
|
117
|
-
}
|
|
118
|
-
/** The newest `limit` of a mixed list, which is the order every feed shows. */
|
|
119
|
-
function newestFirst(comments, limit) {
|
|
120
|
-
return comments
|
|
121
|
-
.sort((left, right) => right.published.getTime() - left.published.getTime())
|
|
122
|
-
.slice(0, limit);
|
|
123
|
-
}
|
|
124
|
-
/** The name to show for an actor: the follower profile the site holds, if any. */
|
|
125
|
-
function authorNaming(admin) {
|
|
126
|
-
const known = new Map();
|
|
127
|
-
return (actorId) => {
|
|
128
|
-
if (!known.has(actorId)) {
|
|
129
|
-
const follower = admin.getFollower(actorId);
|
|
130
|
-
known.set(actorId, follower?.name ?? follower?.handle ?? undefined);
|
|
131
|
-
}
|
|
132
|
-
return known.get(actorId);
|
|
133
|
-
};
|
|
134
|
-
}
|
|
135
|
-
/**
|
|
136
|
-
* The public post an ActivityStreams object id names, memoised.
|
|
137
|
-
*
|
|
138
|
-
* Almost every id is the one the slug implies, so the slug is tried first and
|
|
139
|
-
* the answer is checked against the document's own id — a post that has been
|
|
140
|
-
* renamed keeps the id it was first delivered under, which no slug spells any
|
|
141
|
-
* more. Only when that fails is the whole index read, once, to find it.
|
|
142
|
-
*/
|
|
143
|
-
class PostsByObjectId {
|
|
144
|
-
#context;
|
|
145
|
-
#found = new Map();
|
|
146
|
-
#all;
|
|
147
|
-
constructor(context) {
|
|
148
|
-
this.#context = context;
|
|
149
|
-
}
|
|
150
|
-
get(objectId) {
|
|
151
|
-
if (!this.#found.has(objectId))
|
|
152
|
-
this.#found.set(objectId, this.#resolve(objectId));
|
|
153
|
-
return this.#found.get(objectId);
|
|
154
|
-
}
|
|
155
|
-
#resolve(objectId) {
|
|
156
|
-
const slug = slugOfObjectId(objectId, this.#context.baseUrl);
|
|
157
|
-
if (slug !== undefined) {
|
|
158
|
-
const document = this.#context.store.getBySlug(slug);
|
|
159
|
-
if (document !== undefined &&
|
|
160
|
-
activityStreamsId(document, this.#context.baseUrl) === objectId) {
|
|
161
|
-
return document;
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
return this.#everything().get(objectId);
|
|
165
|
-
}
|
|
166
|
-
#everything() {
|
|
167
|
-
if (this.#all === undefined) {
|
|
168
|
-
this.#all = new Map();
|
|
169
|
-
for (const document of this.#context.store.listPosts()) {
|
|
170
|
-
const id = activityStreamsId(document, this.#context.baseUrl);
|
|
171
|
-
if (id !== undefined)
|
|
172
|
-
this.#all.set(id, document);
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
return this.#all;
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
/**
|
|
179
|
-
* The slug an object id names, when it is one this site would have minted.
|
|
180
|
-
*
|
|
181
|
-
* An id from another host, or one under some other path, belongs to no post
|
|
182
|
-
* here however it is spelled.
|
|
183
|
-
*/
|
|
184
|
-
function slugOfObjectId(objectId, baseUrl) {
|
|
185
|
-
let url;
|
|
186
|
-
try {
|
|
187
|
-
url = new URL(objectId);
|
|
188
|
-
}
|
|
189
|
-
catch {
|
|
190
|
-
return undefined;
|
|
191
|
-
}
|
|
192
|
-
if (url.origin !== new URL(baseUrl).origin)
|
|
193
|
-
return undefined;
|
|
194
|
-
const prefix = `${FEDERATION_PREFIX}/posts/`;
|
|
195
|
-
if (!url.pathname.startsWith(prefix))
|
|
196
|
-
return undefined;
|
|
197
|
-
const slug = url.pathname.slice(prefix.length);
|
|
198
|
-
if (slug === '' || slug.includes('/'))
|
|
199
|
-
return undefined;
|
|
200
|
-
try {
|
|
201
|
-
return decodeURIComponent(slug);
|
|
202
|
-
}
|
|
203
|
-
catch {
|
|
204
|
-
return undefined;
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
//# sourceMappingURL=comments.js.map
|
package/dist/web/comments.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"comments.js","sourceRoot":"","sources":["../../src/web/comments.ts"],"names":[],"mappings":"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"}
|