@geekity/cms 0.28.0 → 0.30.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.
Files changed (195) hide show
  1. package/README.md +355 -53
  2. package/admin/pages/comments/all.njk +3 -1
  3. package/admin/pages/federation/followers.njk +8 -2
  4. package/dist/admin/comments.d.ts +2 -0
  5. package/dist/admin/comments.d.ts.map +1 -1
  6. package/dist/admin/comments.js +19 -49
  7. package/dist/admin/comments.js.map +1 -1
  8. package/dist/admin/documents.d.ts +5 -0
  9. package/dist/admin/documents.d.ts.map +1 -1
  10. package/dist/admin/documents.js +45 -17
  11. package/dist/admin/documents.js.map +1 -1
  12. package/dist/admin/federation.d.ts +21 -1
  13. package/dist/admin/federation.d.ts.map +1 -1
  14. package/dist/admin/federation.js +17 -7
  15. package/dist/admin/federation.js.map +1 -1
  16. package/dist/admin/store.d.ts +95 -14
  17. package/dist/admin/store.d.ts.map +1 -1
  18. package/dist/admin/store.js +206 -17
  19. package/dist/admin/store.js.map +1 -1
  20. package/dist/cli.d.ts.map +1 -1
  21. package/dist/cli.js +8 -1
  22. package/dist/cli.js.map +1 -1
  23. package/dist/comments/form.d.ts +3 -1
  24. package/dist/comments/form.d.ts.map +1 -1
  25. package/dist/comments/form.js +2 -1
  26. package/dist/comments/form.js.map +1 -1
  27. package/dist/comments/index.d.ts +3 -3
  28. package/dist/comments/index.d.ts.map +1 -1
  29. package/dist/comments/index.js +1 -1
  30. package/dist/comments/index.js.map +1 -1
  31. package/dist/comments/records.d.ts +56 -24
  32. package/dist/comments/records.d.ts.map +1 -1
  33. package/dist/comments/records.js +255 -31
  34. package/dist/comments/records.js.map +1 -1
  35. package/dist/comments/reply-notices.d.ts +42 -0
  36. package/dist/comments/reply-notices.d.ts.map +1 -0
  37. package/dist/comments/reply-notices.js +76 -0
  38. package/dist/comments/reply-notices.js.map +1 -0
  39. package/dist/comments/reply-post.d.ts +49 -0
  40. package/dist/comments/reply-post.d.ts.map +1 -0
  41. package/dist/comments/reply-post.js +66 -0
  42. package/dist/comments/reply-post.js.map +1 -0
  43. package/dist/comments/routes.d.ts +6 -1
  44. package/dist/comments/routes.d.ts.map +1 -1
  45. package/dist/comments/routes.js +49 -21
  46. package/dist/comments/routes.js.map +1 -1
  47. package/dist/comments/submission.d.ts +8 -25
  48. package/dist/comments/submission.d.ts.map +1 -1
  49. package/dist/comments/submission.js +19 -38
  50. package/dist/comments/submission.js.map +1 -1
  51. package/dist/comments/viewer.d.ts.map +1 -1
  52. package/dist/comments/viewer.js +1 -0
  53. package/dist/comments/viewer.js.map +1 -1
  54. package/dist/content/citation.d.ts +1 -0
  55. package/dist/content/citation.d.ts.map +1 -1
  56. package/dist/content/citation.js +2 -0
  57. package/dist/content/citation.js.map +1 -1
  58. package/dist/content/original.d.ts +6 -1
  59. package/dist/content/original.d.ts.map +1 -1
  60. package/dist/content/original.js +7 -4
  61. package/dist/content/original.js.map +1 -1
  62. package/dist/content/store.d.ts +43 -11
  63. package/dist/content/store.d.ts.map +1 -1
  64. package/dist/content/store.js +170 -10
  65. package/dist/content/store.js.map +1 -1
  66. package/dist/content/sync.d.ts +8 -0
  67. package/dist/content/sync.d.ts.map +1 -1
  68. package/dist/content/sync.js +164 -71
  69. package/dist/content/sync.js.map +1 -1
  70. package/dist/federation/article.d.ts.map +1 -1
  71. package/dist/federation/article.js +2 -1
  72. package/dist/federation/article.js.map +1 -1
  73. package/dist/federation/backfill.d.ts +114 -0
  74. package/dist/federation/backfill.d.ts.map +1 -0
  75. package/dist/federation/backfill.js +314 -0
  76. package/dist/federation/backfill.js.map +1 -0
  77. package/dist/federation/inbox.js +1 -1
  78. package/dist/federation/inbox.js.map +1 -1
  79. package/dist/federation/records.d.ts +13 -0
  80. package/dist/federation/records.d.ts.map +1 -1
  81. package/dist/federation/records.js +49 -10
  82. package/dist/federation/records.js.map +1 -1
  83. package/dist/federation/replies.d.ts +6 -0
  84. package/dist/federation/replies.d.ts.map +1 -1
  85. package/dist/federation/replies.js +18 -1
  86. package/dist/federation/replies.js.map +1 -1
  87. package/dist/index.d.ts +12 -4
  88. package/dist/index.d.ts.map +1 -1
  89. package/dist/index.js +81 -11
  90. package/dist/index.js.map +1 -1
  91. package/dist/init.d.ts +1 -1
  92. package/dist/init.d.ts.map +1 -1
  93. package/dist/init.js +1 -7
  94. package/dist/init.js.map +1 -1
  95. package/dist/plugin.d.ts +28 -2
  96. package/dist/plugin.d.ts.map +1 -1
  97. package/dist/plugin.js +10 -2
  98. package/dist/plugin.js.map +1 -1
  99. package/dist/plugins/site.d.ts.map +1 -1
  100. package/dist/plugins/site.js +7 -1
  101. package/dist/plugins/site.js.map +1 -1
  102. package/dist/web/context.d.ts +18 -3
  103. package/dist/web/context.d.ts.map +1 -1
  104. package/dist/web/context.js +17 -4
  105. package/dist/web/context.js.map +1 -1
  106. package/dist/web/conversation.d.ts +191 -28
  107. package/dist/web/conversation.d.ts.map +1 -1
  108. package/dist/web/conversation.js +670 -172
  109. package/dist/web/conversation.js.map +1 -1
  110. package/dist/web/documents.d.ts +0 -22
  111. package/dist/web/documents.d.ts.map +1 -1
  112. package/dist/web/documents.js +1 -34
  113. package/dist/web/documents.js.map +1 -1
  114. package/dist/web/feed-item.d.ts +12 -8
  115. package/dist/web/feed-item.d.ts.map +1 -1
  116. package/dist/web/feed-item.js +10 -10
  117. package/dist/web/feed-item.js.map +1 -1
  118. package/dist/web/feed-rss.d.ts.map +1 -1
  119. package/dist/web/feed-rss.js +34 -10
  120. package/dist/web/feed-rss.js.map +1 -1
  121. package/dist/web/feed-source.d.ts +33 -1
  122. package/dist/web/feed-source.d.ts.map +1 -1
  123. package/dist/web/feed-source.js +33 -0
  124. package/dist/web/feed-source.js.map +1 -1
  125. package/dist/web/feeds.d.ts +1 -1
  126. package/dist/web/feeds.d.ts.map +1 -1
  127. package/dist/web/feeds.js +7 -2
  128. package/dist/web/feeds.js.map +1 -1
  129. package/dist/web/guids.d.ts +47 -0
  130. package/dist/web/guids.d.ts.map +1 -0
  131. package/dist/web/guids.js +67 -0
  132. package/dist/web/guids.js.map +1 -0
  133. package/dist/web/index.d.ts +5 -6
  134. package/dist/web/index.d.ts.map +1 -1
  135. package/dist/web/index.js +3 -3
  136. package/dist/web/index.js.map +1 -1
  137. package/dist/web/redirects.d.ts +12 -0
  138. package/dist/web/redirects.d.ts.map +1 -1
  139. package/dist/web/redirects.js +16 -4
  140. package/dist/web/redirects.js.map +1 -1
  141. package/dist/web/render.d.ts +19 -9
  142. package/dist/web/render.d.ts.map +1 -1
  143. package/dist/web/render.js +44 -42
  144. package/dist/web/render.js.map +1 -1
  145. package/dist/web/routes.d.ts +2 -2
  146. package/dist/web/routes.d.ts.map +1 -1
  147. package/dist/web/routes.js +157 -84
  148. package/dist/web/routes.js.map +1 -1
  149. package/dist/webmention/index.d.ts +1 -1
  150. package/dist/webmention/index.d.ts.map +1 -1
  151. package/dist/webmention/index.js +1 -1
  152. package/dist/webmention/index.js.map +1 -1
  153. package/dist/webmention/links.d.ts +55 -0
  154. package/dist/webmention/links.d.ts.map +1 -1
  155. package/dist/webmention/links.js +162 -0
  156. package/dist/webmention/links.js.map +1 -1
  157. package/dist/webmention/microformats.d.ts +15 -0
  158. package/dist/webmention/microformats.d.ts.map +1 -1
  159. package/dist/webmention/microformats.js +63 -1
  160. package/dist/webmention/microformats.js.map +1 -1
  161. package/dist/webmention/pingback.js +2 -1
  162. package/dist/webmention/pingback.js.map +1 -1
  163. package/dist/webmention/receive.d.ts +5 -0
  164. package/dist/webmention/receive.d.ts.map +1 -1
  165. package/dist/webmention/receive.js +99 -3
  166. package/dist/webmention/receive.js.map +1 -1
  167. package/dist/webmention/reply-context.d.ts +15 -0
  168. package/dist/webmention/reply-context.d.ts.map +1 -1
  169. package/dist/webmention/reply-context.js +29 -0
  170. package/dist/webmention/reply-context.js.map +1 -1
  171. package/dist/webmention/reply-contexts.d.ts +6 -0
  172. package/dist/webmention/reply-contexts.d.ts.map +1 -1
  173. package/dist/webmention/reply-contexts.js +16 -10
  174. package/dist/webmention/reply-contexts.js.map +1 -1
  175. package/dist/webmention/routes.d.ts.map +1 -1
  176. package/dist/webmention/routes.js +2 -1
  177. package/dist/webmention/routes.js.map +1 -1
  178. package/dist/webmention/service.d.ts +30 -1
  179. package/dist/webmention/service.d.ts.map +1 -1
  180. package/dist/webmention/service.js +172 -32
  181. package/dist/webmention/service.js.map +1 -1
  182. package/package.json +1 -2
  183. package/themes/default/README.md +269 -95
  184. package/themes/default/layouts/base.njk +8 -0
  185. package/themes/default/layouts/comment.njk +90 -0
  186. package/themes/default/layouts/front-page.njk +9 -47
  187. package/themes/default/layouts/page.njk +2 -0
  188. package/themes/default/layouts/post.njk +14 -2
  189. package/themes/default/partials/backlinks.njk +19 -0
  190. package/themes/default/partials/cited-page.njk +3 -1
  191. package/themes/default/partials/comment-form.njk +10 -0
  192. package/themes/default/partials/comment.njk +79 -0
  193. package/themes/default/partials/conversation.njk +14 -59
  194. package/themes/default/src/style.css +42 -0
  195. package/themes/default/static/style.css +67 -0
@@ -1,10 +1,13 @@
1
- import { randomUUID } from 'node:crypto';
2
- import { readdirSync, rmSync } from 'node:fs';
1
+ import { randomBytes } from 'node:crypto';
2
+ import { readdirSync, readFileSync, rmSync } from 'node:fs';
3
3
  import path from 'node:path';
4
- import { COMMENT_KINDS, COMMENT_SOURCES, COMMENT_STATUSES, REDACTED_FIELDS, rsvpField, } from '../admin/store.js';
4
+ import { COMMENT_KINDS, COMMENT_SOURCES, COMMENT_STATUSES, importedFields, REDACTED_FIELDS, rsvpField, viaField, } from '../admin/store.js';
5
+ import { slugForPermalink } from '../content/parser.js';
5
6
  import { rsvpValue } from '../content/rsvp.js';
6
7
  import { readFileIfPresentSync, withFileLock, writeFileAtomicallySync } from '../files/atomic.js';
7
8
  import { hashClientAddress } from '../forms/protection.js';
9
+ import { isKey, repliesKey, webmentionKey } from '../web/feed-source.js';
10
+ import { COMMENT_PAGE_PREFIX, commentPageHref } from '../web/guids.js';
8
11
  /**
9
12
  * Native comments as the files that hold them, and the one door into them.
10
13
  *
@@ -40,14 +43,14 @@ import { hashClientAddress } from '../forms/protection.js';
40
43
  * and the same thread. So every entry says its `source` and its `kind`, and
41
44
  * nothing here assumes a person filled in a form.
42
45
  *
43
- * Three things write comments — the form under a post, the webmention endpoint
44
- * and a moderator's reply on the admin screen — and they all go through
46
+ * Two things write comments — the form under a post and the webmention
47
+ * endpoint — and both go through
45
48
  * {@link intakeComment}, which is the whole of what happens between a proposed
46
49
  * comment and a comment existing: the address hashed, the approved-author rule,
47
50
  * the {@link CommentChecker}, one verdict-to-status rule, the write, and the
48
51
  * message to whoever was waiting to hear. What the callers keep is what is
49
- * really theirs — parsing a form and its cheap defences, fetching and verifying
50
- * a source, and knowing who is signed in.
52
+ * really theirs — parsing a form and its cheap defences, and fetching and
53
+ * verifying a source.
51
54
  */
52
55
  /** Where the comment files live, relative to the content directory. */
53
56
  export const COMMENTS_DATA_DIRECTORY = '_data/comments';
@@ -58,11 +61,9 @@ export function commentsDirectory(contentDir) {
58
61
  /**
59
62
  * The absolute path of one post's comment file.
60
63
  *
61
- * Named by the post's slug, which is what a post keeps for its whole life: the
62
- * editor gives an existing document the slug it already has, so the file that
63
- * holds a post's comments never has to move. A slug carrying anything a
64
- * filename should not is refused rather than sanitised, because two slugs that
65
- * sanitised to one name would silently share a thread.
64
+ * Named by the post's slug. A slug carrying anything a filename should not is
65
+ * refused rather than sanitised, because two slugs that sanitised to one name
66
+ * would silently share a thread.
66
67
  */
67
68
  export function commentsFile(contentDir, slug) {
68
69
  return path.join(commentsDirectory(contentDir), `${fileNameOf(slug)}.json`);
@@ -142,6 +143,12 @@ function readPost(records, slug) {
142
143
  * both places or in `data/` alone, and never in neither.
143
144
  */
144
145
  function writePost(records, slug, permalink, comments) {
146
+ const file = commentsFile(records.contentDir, slug);
147
+ for (const comment of comments) {
148
+ if (!isKey(comment.id)) {
149
+ throw new Error(`${file}: comment id "${comment.id}" is not a key of 16 lowercase hex digits.`);
150
+ }
151
+ }
145
152
  const contacts = new Map();
146
153
  for (const comment of comments) {
147
154
  if (comment.author.email !== null) {
@@ -157,7 +164,7 @@ function writePost(records, slug, permalink, comments) {
157
164
  else {
158
165
  rmSync(privateFile, { force: true });
159
166
  }
160
- writeFileAtomicallySync(commentsFile(records.contentDir, slug), commentsJson(permalink, comments.map(publishedEntryOf)));
167
+ writeFileAtomicallySync(file, commentsJson(permalink, comments.map(publishedEntryOf)));
161
168
  }
162
169
  /** The emails a private file holds, by comment id. A damaged file holds none. */
163
170
  function contactsIn(source) {
@@ -253,6 +260,13 @@ function commentFrom(value) {
253
260
  notify: value['notify'] === true,
254
261
  ...redactedIn(value['redacted']),
255
262
  ...rsvpField(rsvpValue(value['rsvp'])),
263
+ ...viaField(optionalText(value['via'])),
264
+ ...importedFields({
265
+ migrated: value['migrated'] === true,
266
+ origin: optionalText(value['origin']),
267
+ user: optionalText(value['user']),
268
+ actor: optionalText(value['actor']),
269
+ }),
256
270
  };
257
271
  }
258
272
  /** An entry's `redacted` list, kept only when it names something this version knows. */
@@ -265,9 +279,9 @@ function redactedIn(value) {
265
279
  /**
266
280
  * Record a comment: append it to its post's file and index it.
267
281
  *
268
- * The id is minted here unless the caller brought one, and it is a UUID rather
269
- * than a counter so two comments written at once on two machines holding the
270
- * same content directory can never be given the same name.
282
+ * The key is minted here unless the caller brought one, and it is random
283
+ * rather than a counter so two comments written at once on two machines
284
+ * holding the same content directory are never given the same name.
271
285
  */
272
286
  export async function addComment(records, comment) {
273
287
  const file = commentsFile(records.contentDir, comment.slug);
@@ -303,6 +317,41 @@ export async function putComments(records, slug, permalink, comments) {
303
317
  records.admin.putComment({ ...comment, slug, permalink: post });
304
318
  });
305
319
  }
320
+ /**
321
+ * Give comments on one post new ids: each one `renames` maps keeps its place
322
+ * under its new id, its email in `data/` follows it, and every reply naming
323
+ * its old id names the new one. Refuses a new id the post already holds.
324
+ */
325
+ export async function renameComments(records, slug, renames) {
326
+ const file = commentsFile(records.contentDir, slug);
327
+ await withFileLock(file, () => {
328
+ const held = readPost(records, slug);
329
+ const ids = new Set(held.comments.map((comment) => comment.id));
330
+ const moved = new Map([...renames].filter(([from, to]) => from !== to && ids.has(from)));
331
+ if (moved.size === 0)
332
+ return;
333
+ for (const [from, to] of moved) {
334
+ if (ids.has(to)) {
335
+ throw new Error(`${file}: comment "${from}" cannot take id "${to}", which another has.`);
336
+ }
337
+ }
338
+ const changed = [];
339
+ const next = held.comments.map((entry) => {
340
+ const id = moved.get(entry.id) ?? entry.id;
341
+ const inReplyTo = entry.inReplyTo === null ? null : (moved.get(entry.inReplyTo) ?? entry.inReplyTo);
342
+ if (id === entry.id && inReplyTo === entry.inReplyTo)
343
+ return entry;
344
+ const renamed = { ...entry, id, inReplyTo };
345
+ changed.push(renamed);
346
+ return renamed;
347
+ });
348
+ writePost(records, slug, held.post, next);
349
+ for (const from of moved.keys())
350
+ records.admin.deleteComment(from);
351
+ for (const comment of changed)
352
+ records.admin.putComment({ ...comment, slug, permalink: held.post });
353
+ });
354
+ }
306
355
  /**
307
356
  * The one door into `content/_data/comments/`.
308
357
  *
@@ -314,14 +363,11 @@ export async function putComments(records, slug, permalink, comments) {
314
363
  * whose name and email together have been approved before is approved again —
315
364
  * WordPress's rule, and the whole of the auto-approval decision. A webmention
316
365
  * waits, because a page linking here is as much a stranger's words as a form
317
- * submission is. A moderator's reply is approved, because the person writing it
318
- * is the person who would have approved it.
366
+ * submission is.
319
367
  *
320
- * **What the checker says.** Everything but a moderator's own words goes
321
- * through {@link CommentChecker}; a checker that is down or throws is no
322
- * opinion, so a service having a bad afternoon never stops a site taking
323
- * comments. A moderator's reply is not offered to it at all: a spam service has
324
- * no say in what the owner of the site says.
368
+ * **What the checker says.** Everything goes through {@link CommentChecker}; a
369
+ * checker that is down or throws is no opinion, so a service having a bad
370
+ * afternoon never stops a site taking comments.
325
371
  *
326
372
  * **The one verdict-to-status rule.**
327
373
  *
@@ -354,7 +400,7 @@ export async function intakeComment(options) {
354
400
  addressHash: hashClientAddress(options.dataDir, options.address),
355
401
  };
356
402
  const held = origin === 'webmention' ? heldWebmention(records, comment.slug, comment.url) : undefined;
357
- const verdict = origin === 'moderator' ? 'unknown' : await ask(options, proposed);
403
+ const verdict = await ask(options, proposed);
358
404
  if (verdict === 'discard') {
359
405
  if (held === undefined)
360
406
  return { kind: 'discarded', removed: false };
@@ -364,20 +410,27 @@ export async function intakeComment(options) {
364
410
  const status = statusFor(verdict, proposed.status, held);
365
411
  if (held !== undefined) {
366
412
  // Its id, its post and its source never move: that is what makes it the
367
- // same comment. What the page now says about itself replaces what it said.
413
+ // same comment. What the page now says about itself replaces what it said,
414
+ // what it answers included.
368
415
  const moved = await updateComment(records, held.id, {
369
416
  kind: comment.kind,
370
417
  status,
371
418
  author: comment.author,
372
419
  content: comment.content,
373
420
  submitted: comment.submitted,
421
+ inReplyTo: comment.inReplyTo,
374
422
  rsvp: comment.rsvp ?? null,
423
+ via: comment.via ?? null,
375
424
  });
376
425
  return moved === undefined
377
426
  ? { kind: 'gone' }
378
427
  : { kind: 'stored', comment: moved, created: false };
379
428
  }
380
- const stored = await addComment(records, { ...proposed, status });
429
+ const stored = await addComment(records, {
430
+ ...proposed,
431
+ status,
432
+ id: origin === 'webmention' ? webmentionKey(comment.url, comment.permalink) : undefined,
433
+ });
381
434
  announce(options.notices, stored);
382
435
  return { kind: 'stored', comment: stored, created: true };
383
436
  }
@@ -398,8 +451,6 @@ export function heldWebmention(records, slug, source) {
398
451
  }
399
452
  /** Where this site's own rules put a comment, before a checker has spoken. */
400
453
  function siteStatusFor(origin, records, comment) {
401
- if (origin === 'moderator')
402
- return 'approved';
403
454
  if (origin === 'webmention')
404
455
  return 'pending';
405
456
  return records.admin.hasApprovedAuthor(comment.author.name, comment.author.email)
@@ -492,8 +543,8 @@ export async function updateComment(records, id, change) {
492
543
  const at = held.findIndex((entry) => entry.id === id);
493
544
  if (at === -1)
494
545
  return undefined;
495
- const { rsvp, ...fields } = change;
496
- const { rsvp: was, ...merged } = {
546
+ const { rsvp, via, ...fields } = change;
547
+ const { rsvp: was, via: carried, ...merged } = {
497
548
  ...known,
498
549
  ...held[at],
499
550
  ...fields,
@@ -501,6 +552,7 @@ export async function updateComment(records, id, change) {
501
552
  const moved = {
502
553
  ...merged,
503
554
  ...rsvpField(rsvp === undefined ? was : (rsvp ?? undefined)),
555
+ ...viaField(via === undefined ? carried : via),
504
556
  };
505
557
  writePost(records, known.slug, known.permalink, held.with(at, moved));
506
558
  records.admin.putComment(moved);
@@ -560,6 +612,56 @@ export async function rewriteComments(records, slug, change) {
560
612
  return changed.map((comment) => comment.id);
561
613
  });
562
614
  }
615
+ export async function followMovedComments(records, store, document) {
616
+ for (const permalink of document.redirectFrom ?? []) {
617
+ const from = slugForPermalink(permalink);
618
+ if (from !== undefined && from !== document.slug)
619
+ await follow(records, store, from);
620
+ }
621
+ }
622
+ export async function followAllMovedComments(records, store) {
623
+ for (const slug of commentSlugs(records.contentDir))
624
+ await follow(records, store, slug);
625
+ }
626
+ async function follow(records, store, from) {
627
+ const to = permalinkOwner(store, readPost(records, from).post)?.slug;
628
+ if (to === undefined || to === from)
629
+ return;
630
+ const [first = '', second = ''] = [
631
+ commentsFile(records.contentDir, from),
632
+ commentsFile(records.contentDir, to),
633
+ ].sort();
634
+ await withFileLock(first, () => withFileLock(second, () => {
635
+ followFile(records, store, from);
636
+ }));
637
+ }
638
+ function followFile(records, store, from) {
639
+ const left = readPost(records, from);
640
+ const owner = permalinkOwner(store, left.post);
641
+ if (owner === undefined || owner.slug === from)
642
+ return;
643
+ const held = readPost(records, owner.slug).comments;
644
+ const known = new Set(held.map((comment) => comment.id));
645
+ const merged = [...held, ...left.comments.filter((comment) => !known.has(comment.id))];
646
+ writePost(records, owner.slug, owner.permalink, merged);
647
+ rmSync(commentEmailsFile(records.dataDir, from), { force: true });
648
+ rmSync(commentsFile(records.contentDir, from), { force: true });
649
+ const moved = new Set(left.comments.map((comment) => comment.id));
650
+ for (const comment of merged) {
651
+ if (!moved.has(comment.id))
652
+ continue;
653
+ records.admin.putComment({ ...comment, slug: owner.slug, permalink: owner.permalink });
654
+ }
655
+ }
656
+ /**
657
+ * The document a URL of this site belongs to: the one at it, else the one
658
+ * whose `redirect_from` names it.
659
+ */
660
+ export function permalinkOwner(store, permalink) {
661
+ if (permalink === '')
662
+ return undefined;
663
+ return store.getByPermalink(permalink) ?? store.getByFormerPermalink(permalink);
664
+ }
563
665
  /** The slug of every post that has a comment file, in a stable order. */
564
666
  export function commentSlugs(contentDir) {
565
667
  return commentFiles(contentDir).flatMap((file) => slugOfFileName(path.basename(file, '.json')) ?? []);
@@ -651,6 +753,124 @@ export function migrateCommentEmails(records) {
651
753
  }
652
754
  return { files };
653
755
  }
756
+ /**
757
+ * Give every stored comment whose id is not a key the key of that id
758
+ * (decision-51): the first 16 hex digits of its SHA-256, so every boot works
759
+ * out the same one. A UUID a form comment or a webmention was given before
760
+ * keys, and a URL an import wrote, both become keys this way.
761
+ *
762
+ * What names an old id follows it: a comment's `inReplyTo`, the email `data/`
763
+ * keeps for it, and a document naming its old page or anchor, such as a reply
764
+ * post's `in-reply-to`. The documents go first, then for each post the private
765
+ * file with both keys, the comment file, and the private file with the new key
766
+ * alone, so a boot stopped anywhere loses nothing and the next one finishes
767
+ * the job. A site whose ids are all keys has its files read and none written.
768
+ *
769
+ * Synchronous, like the other boot migrations, and run before anything else
770
+ * can be writing a comment.
771
+ */
772
+ export function migrateCommentKeys(records) {
773
+ const keys = new Map();
774
+ const held = [];
775
+ for (const slug of commentSlugs(records.contentDir)) {
776
+ const file = commentsFile(records.contentDir, slug);
777
+ let parsed;
778
+ try {
779
+ parsed = JSON.parse(readFileIfPresentSync(file) ?? '');
780
+ }
781
+ catch {
782
+ continue;
783
+ }
784
+ if (!isRecord(parsed) || !Array.isArray(parsed['comments']))
785
+ continue;
786
+ for (const entry of parsed['comments']) {
787
+ const id = isRecord(entry) ? entry['id'] : undefined;
788
+ if (typeof id === 'string' && id !== '' && !isKey(id))
789
+ keys.set(id, repliesKey(id));
790
+ }
791
+ held.push({ slug, file, parsed, entries: parsed['comments'] });
792
+ }
793
+ const renamed = renamer(keys);
794
+ if (keys.size > 0)
795
+ rewriteDocuments(records.contentDir, renamed);
796
+ for (const { slug, file, parsed, entries } of held) {
797
+ const rekeyed = entries.map((entry) => {
798
+ if (!isRecord(entry))
799
+ return entry;
800
+ const id = entry['id'];
801
+ const inReplyTo = entry['inReplyTo'];
802
+ return {
803
+ ...entry,
804
+ ...(typeof id === 'string' && keys.has(id) ? { id: keys.get(id) } : {}),
805
+ ...(typeof inReplyTo === 'string'
806
+ ? { inReplyTo: keys.get(inReplyTo) ?? renamed(inReplyTo) }
807
+ : {}),
808
+ };
809
+ });
810
+ const changed = JSON.stringify(rekeyed) !== JSON.stringify(entries);
811
+ const privateFile = commentEmailsFile(records.dataDir, slug);
812
+ const contacts = contactsIn(readFileIfPresentSync(privateFile));
813
+ const keyed = new Map();
814
+ for (const [id, contact] of contacts) {
815
+ const key = isKey(id) ? id : repliesKey(id);
816
+ if (!keyed.has(key) || id === key)
817
+ keyed.set(key, contact);
818
+ }
819
+ const stale = [...contacts.keys()].some((id) => !isKey(id));
820
+ const writePrivate = (written) => {
821
+ writeFileAtomicallySync(privateFile, contactsJson(written), {
822
+ mode: COMMENT_EMAILS_FILE_MODE,
823
+ });
824
+ };
825
+ if (changed) {
826
+ if (stale)
827
+ writePrivate(new Map([...contacts, ...keyed]));
828
+ writeFileAtomicallySync(file, `${JSON.stringify({ ...parsed, comments: rekeyed }, null, 2)}\n`);
829
+ }
830
+ if (stale)
831
+ writePrivate(keyed);
832
+ }
833
+ return { comments: keys.size };
834
+ }
835
+ /**
836
+ * Text with every old comment page and anchor in it naming the comment by its
837
+ * key. The longest ids go first, so an id that begins another cannot take a
838
+ * piece of it.
839
+ */
840
+ function renamer(keys) {
841
+ const swaps = [...keys]
842
+ .sort(([left], [right]) => right.length - left.length)
843
+ .flatMap(([id, key]) => [
844
+ [`${COMMENT_PAGE_PREFIX}${encodeURIComponent(id)}/`, commentPageHref(key)],
845
+ [`#comment-${id}`, `#comment-${key}`],
846
+ ]);
847
+ return (text) => swaps.reduce((said, [from = '', to = '']) => said.replaceAll(from, to), text);
848
+ }
849
+ /** Every Markdown file under the content directory, rewritten where `renamed` changes it. */
850
+ function rewriteDocuments(contentDir, renamed) {
851
+ let names;
852
+ try {
853
+ names = readdirSync(contentDir, { recursive: true, encoding: 'utf8' });
854
+ }
855
+ catch {
856
+ return;
857
+ }
858
+ for (const name of names) {
859
+ if (!/\.(md|markdown)$/i.test(name) || name.split(path.sep).includes('node_modules'))
860
+ continue;
861
+ const file = path.join(contentDir, name);
862
+ let text;
863
+ try {
864
+ text = readFileSync(file, 'utf8');
865
+ }
866
+ catch {
867
+ continue;
868
+ }
869
+ const next = renamed(text);
870
+ if (next !== text)
871
+ writeFileAtomicallySync(file, next);
872
+ }
873
+ }
654
874
  /** A copy of a record without one key, every other key where it was. */
655
875
  function without(record, key) {
656
876
  return Object.fromEntries(Object.entries(record).filter(([name]) => name !== key));
@@ -674,7 +894,7 @@ function commentFiles(contentDir) {
674
894
  /** A new comment as the record it becomes, id and all. */
675
895
  function commentRecordOf(comment) {
676
896
  return {
677
- id: comment.id ?? randomUUID(),
897
+ id: comment.id ?? randomBytes(8).toString('hex'),
678
898
  source: comment.source,
679
899
  kind: comment.kind,
680
900
  status: comment.status,
@@ -687,6 +907,8 @@ function commentRecordOf(comment) {
687
907
  notify: comment.notify,
688
908
  ...(comment.redacted === undefined ? {} : { redacted: [...comment.redacted] }),
689
909
  ...rsvpField(comment.rsvp),
910
+ ...viaField(comment.via),
911
+ ...importedFields(comment),
690
912
  };
691
913
  }
692
914
  /**
@@ -707,6 +929,8 @@ function publishedEntryOf(comment) {
707
929
  url: comment.url,
708
930
  ...(comment.redacted === undefined ? {} : { redacted: [...comment.redacted] }),
709
931
  ...rsvpField(comment.rsvp),
932
+ ...viaField(comment.via),
933
+ ...importedFields(comment),
710
934
  };
711
935
  }
712
936
  /** One post's comments as the file spells them: indented, newline ended. */
@@ -1 +1 @@
1
- {"version":3,"file":"records.js","sourceRoot":"","sources":["../../src/comments/records.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"records.js","sourceRoot":"","sources":["../../src/comments/records.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import type { AdminStore, ConversationWrite } from '../admin/store.ts';
2
+ import type { ResolvedConfig } from '../config.ts';
3
+ import type { ContentStore } from '../content/store.ts';
4
+ import type { DocumentChange } from '../content/sync.ts';
5
+ import type { ConversationReader } from '../web/conversation.ts';
6
+ import type { CommentNotices } from './records.ts';
7
+ /**
8
+ * The reply notice for a reply post (TASK-326): a commenter who asked to hear
9
+ * about replies hears about a reply post answering them, once, whichever door
10
+ * it came in by: the thread, the moderation screen, the editor, Micropub or a
11
+ * file. It listens to the index, as federation and webmentions do, so no door
12
+ * has a call of its own to forget.
13
+ *
14
+ * Once is two rules. Only the change that first puts the reply post where a
15
+ * reader can see it is news: an edit, a scan at boot, or a file the watcher
16
+ * re-reads is not. And each notice is recorded before it goes, so a reply post
17
+ * trashed and restored, or drafted and published again, is not news twice.
18
+ *
19
+ * A reply post answering a comment still waiting for a moderator is news when
20
+ * the comment is approved instead (TASK-333), so it listens to the comment
21
+ * index too, and both go through the one record.
22
+ */
23
+ /** What {@link createReplyNotices} needs. */
24
+ export interface CreateReplyNoticesOptions {
25
+ readonly admin: AdminStore;
26
+ readonly store: ContentStore;
27
+ readonly conversation: ConversationReader;
28
+ readonly notices: CommentNotices;
29
+ readonly config: Pick<ResolvedConfig, 'baseUrl' | 'contentDir' | 'dataDir'>;
30
+ }
31
+ /** Listens to the indexes for reply posts that answer a native comment. */
32
+ export interface ReplyNotices {
33
+ handle(change: DocumentChange): void;
34
+ /**
35
+ * Consider one comment write. Run inside the comment file's lock, so it
36
+ * reads the indexes and queues mail, and writes no comment.
37
+ */
38
+ heard(written: ConversationWrite): void;
39
+ }
40
+ /** Build the reply post notices for one site. */
41
+ export declare function createReplyNotices(options: CreateReplyNoticesOptions): ReplyNotices;
42
+ //# sourceMappingURL=reply-notices.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reply-notices.d.ts","sourceRoot":"","sources":["../../src/comments/reply-notices.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAe,MAAM,mBAAmB,CAAC;AACpF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGzD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAGjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD;;;;;;;;;;;;;;;GAeG;AAEH,6CAA6C;AAC7C,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,kBAAkB,CAAC;IAC1C,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,SAAS,GAAG,YAAY,GAAG,SAAS,CAAC,CAAC;CAC7E;AAED,2EAA2E;AAC3E,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAAC;IACrC;;;OAGG;IACH,KAAK,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAAC;CACzC;AAED,iDAAiD;AACjD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,yBAAyB,GAAG,YAAY,CA0CnF"}