@geekity/cms 0.27.0 → 0.28.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 (187) hide show
  1. package/README.md +168 -33
  2. package/admin/layouts/shell.njk +6 -0
  3. package/admin/pages/documents/editor.njk +4 -0
  4. package/admin/pages/plugins/installed.njk +1 -1
  5. package/admin/pages/tools/dev-mode.njk +47 -0
  6. package/admin/static/admin.css +8 -0
  7. package/admin/static/editor-actions.js +13 -9
  8. package/admin/static/editor.js +31 -17
  9. package/dist/admin/dev-mode.d.ts +9 -0
  10. package/dist/admin/dev-mode.d.ts.map +1 -0
  11. package/dist/admin/dev-mode.js +42 -0
  12. package/dist/admin/dev-mode.js.map +1 -0
  13. package/dist/admin/editor-actions.js +3 -1
  14. package/dist/admin/editor-actions.js.map +1 -1
  15. package/dist/admin/federation.d.ts.map +1 -1
  16. package/dist/admin/federation.js +2 -0
  17. package/dist/admin/federation.js.map +1 -1
  18. package/dist/admin/menu.d.ts.map +1 -1
  19. package/dist/admin/menu.js +2 -0
  20. package/dist/admin/menu.js.map +1 -1
  21. package/dist/admin/own-paragraph.d.ts +7 -0
  22. package/dist/admin/own-paragraph.d.ts.map +1 -0
  23. package/dist/admin/own-paragraph.js +9 -0
  24. package/dist/admin/own-paragraph.js.map +1 -0
  25. package/dist/admin/plugins.d.ts.map +1 -1
  26. package/dist/admin/plugins.js +19 -8
  27. package/dist/admin/plugins.js.map +1 -1
  28. package/dist/admin/preview.d.ts.map +1 -1
  29. package/dist/admin/preview.js +4 -1
  30. package/dist/admin/preview.js.map +1 -1
  31. package/dist/admin/routes.d.ts.map +1 -1
  32. package/dist/admin/routes.js +4 -0
  33. package/dist/admin/routes.js.map +1 -1
  34. package/dist/admin/settings-email.d.ts.map +1 -1
  35. package/dist/admin/settings-email.js +4 -0
  36. package/dist/admin/settings-email.js.map +1 -1
  37. package/dist/admin/store.d.ts +4 -2
  38. package/dist/admin/store.d.ts.map +1 -1
  39. package/dist/admin/store.js +1 -1
  40. package/dist/admin/store.js.map +1 -1
  41. package/dist/admin/templates.d.ts +1 -0
  42. package/dist/admin/templates.d.ts.map +1 -1
  43. package/dist/admin/templates.js +1 -0
  44. package/dist/admin/templates.js.map +1 -1
  45. package/dist/admin/uploads.d.ts +7 -1
  46. package/dist/admin/uploads.d.ts.map +1 -1
  47. package/dist/admin/uploads.js +33 -30
  48. package/dist/admin/uploads.js.map +1 -1
  49. package/dist/cli.d.ts +1 -1
  50. package/dist/cli.d.ts.map +1 -1
  51. package/dist/cli.js +76 -10
  52. package/dist/cli.js.map +1 -1
  53. package/dist/comments/index.d.ts +1 -1
  54. package/dist/comments/index.d.ts.map +1 -1
  55. package/dist/comments/index.js +1 -1
  56. package/dist/comments/index.js.map +1 -1
  57. package/dist/comments/records.d.ts +1 -0
  58. package/dist/comments/records.d.ts.map +1 -1
  59. package/dist/comments/records.js +39 -10
  60. package/dist/comments/records.js.map +1 -1
  61. package/dist/config.d.ts +21 -0
  62. package/dist/config.d.ts.map +1 -1
  63. package/dist/config.js +2 -0
  64. package/dist/config.js.map +1 -1
  65. package/dist/content/markdown.d.ts.map +1 -1
  66. package/dist/content/markdown.js +33 -1
  67. package/dist/content/markdown.js.map +1 -1
  68. package/dist/content/migrated.d.ts +6 -0
  69. package/dist/content/migrated.d.ts.map +1 -0
  70. package/dist/content/migrated.js +12 -0
  71. package/dist/content/migrated.js.map +1 -0
  72. package/dist/content/original.d.ts +3 -0
  73. package/dist/content/original.d.ts.map +1 -0
  74. package/dist/content/original.js +12 -0
  75. package/dist/content/original.js.map +1 -0
  76. package/dist/content/parser.d.ts +5 -0
  77. package/dist/content/parser.d.ts.map +1 -1
  78. package/dist/content/parser.js +1 -1
  79. package/dist/content/parser.js.map +1 -1
  80. package/dist/content/schedule.d.ts +7 -0
  81. package/dist/content/schedule.d.ts.map +1 -1
  82. package/dist/content/schedule.js +11 -2
  83. package/dist/content/schedule.js.map +1 -1
  84. package/dist/content/sync.d.ts.map +1 -1
  85. package/dist/content/sync.js +27 -5
  86. package/dist/content/sync.js.map +1 -1
  87. package/dist/content/video.d.ts +12 -0
  88. package/dist/content/video.d.ts.map +1 -0
  89. package/dist/content/video.js +91 -0
  90. package/dist/content/video.js.map +1 -0
  91. package/dist/dev-mode.d.ts +28 -0
  92. package/dist/dev-mode.d.ts.map +1 -0
  93. package/dist/dev-mode.js +64 -0
  94. package/dist/dev-mode.js.map +1 -0
  95. package/dist/drain.d.ts +9 -3
  96. package/dist/drain.d.ts.map +1 -1
  97. package/dist/drain.js +24 -3
  98. package/dist/drain.js.map +1 -1
  99. package/dist/federation/delivery.d.ts +2 -0
  100. package/dist/federation/delivery.d.ts.map +1 -1
  101. package/dist/federation/delivery.js +46 -16
  102. package/dist/federation/delivery.js.map +1 -1
  103. package/dist/federation/inbox.d.ts.map +1 -1
  104. package/dist/federation/inbox.js +13 -3
  105. package/dist/federation/inbox.js.map +1 -1
  106. package/dist/federation/mount.d.ts.map +1 -1
  107. package/dist/federation/mount.js +8 -4
  108. package/dist/federation/mount.js.map +1 -1
  109. package/dist/federation/relays.d.ts.map +1 -1
  110. package/dist/federation/relays.js +16 -1
  111. package/dist/federation/relays.js.map +1 -1
  112. package/dist/index.d.ts +2 -0
  113. package/dist/index.d.ts.map +1 -1
  114. package/dist/index.js +16 -4
  115. package/dist/index.js.map +1 -1
  116. package/dist/indexnow.d.ts +1 -1
  117. package/dist/indexnow.d.ts.map +1 -1
  118. package/dist/indexnow.js +7 -0
  119. package/dist/indexnow.js.map +1 -1
  120. package/dist/mail/service.d.ts +3 -1
  121. package/dist/mail/service.d.ts.map +1 -1
  122. package/dist/mail/service.js +17 -0
  123. package/dist/mail/service.js.map +1 -1
  124. package/dist/notify.d.ts +1 -1
  125. package/dist/notify.d.ts.map +1 -1
  126. package/dist/notify.js +7 -0
  127. package/dist/notify.js.map +1 -1
  128. package/dist/plugin.d.ts +67 -4
  129. package/dist/plugin.d.ts.map +1 -1
  130. package/dist/plugin.js.map +1 -1
  131. package/dist/plugins/folder.d.ts +2 -0
  132. package/dist/plugins/folder.d.ts.map +1 -1
  133. package/dist/plugins/folder.js +26 -5
  134. package/dist/plugins/folder.js.map +1 -1
  135. package/dist/plugins/manage.d.ts +8 -6
  136. package/dist/plugins/manage.d.ts.map +1 -1
  137. package/dist/plugins/manage.js +1 -4
  138. package/dist/plugins/manage.js.map +1 -1
  139. package/dist/plugins/site.d.ts.map +1 -1
  140. package/dist/plugins/site.js +56 -0
  141. package/dist/plugins/site.js.map +1 -1
  142. package/dist/supervisor/control.d.ts +15 -0
  143. package/dist/supervisor/control.d.ts.map +1 -0
  144. package/dist/supervisor/control.js +89 -0
  145. package/dist/supervisor/control.js.map +1 -0
  146. package/dist/supervisor/primary.d.ts +18 -4
  147. package/dist/supervisor/primary.d.ts.map +1 -1
  148. package/dist/supervisor/primary.js +128 -16
  149. package/dist/supervisor/primary.js.map +1 -1
  150. package/dist/supervisor/protocol.d.ts +12 -0
  151. package/dist/supervisor/protocol.d.ts.map +1 -1
  152. package/dist/supervisor/protocol.js +21 -2
  153. package/dist/supervisor/protocol.js.map +1 -1
  154. package/dist/supervisor/supervision.d.ts +1 -0
  155. package/dist/supervisor/supervision.d.ts.map +1 -1
  156. package/dist/supervisor/supervision.js +14 -1
  157. package/dist/supervisor/supervision.js.map +1 -1
  158. package/dist/supervisor/worker.d.ts.map +1 -1
  159. package/dist/supervisor/worker.js +31 -6
  160. package/dist/supervisor/worker.js.map +1 -1
  161. package/dist/web/context.d.ts +7 -0
  162. package/dist/web/context.d.ts.map +1 -1
  163. package/dist/web/context.js +7 -4
  164. package/dist/web/context.js.map +1 -1
  165. package/dist/web/feed-item.d.ts +7 -6
  166. package/dist/web/feed-item.d.ts.map +1 -1
  167. package/dist/web/feed-item.js +5 -4
  168. package/dist/web/feed-item.js.map +1 -1
  169. package/dist/web/feed-rss.d.ts +2 -2
  170. package/dist/web/feed-rss.js +2 -2
  171. package/dist/web/redirects.d.ts +17 -10
  172. package/dist/web/redirects.d.ts.map +1 -1
  173. package/dist/web/redirects.js +83 -49
  174. package/dist/web/redirects.js.map +1 -1
  175. package/dist/webmention/service.d.ts +1 -1
  176. package/dist/webmention/service.d.ts.map +1 -1
  177. package/dist/webmention/service.js +12 -2
  178. package/dist/webmention/service.js.map +1 -1
  179. package/package.json +1 -1
  180. package/themes/default/README.md +152 -1
  181. package/themes/default/layouts/base.njk +11 -2
  182. package/themes/default/layouts/post.njk +8 -2
  183. package/themes/default/partials/body-end.njk +1 -0
  184. package/themes/default/partials/conversation.njk +1 -1
  185. package/themes/default/partials/head-end.njk +1 -0
  186. package/themes/default/src/style.css +4 -0
  187. package/themes/default/static/style.css +8 -0
@@ -2,6 +2,7 @@ import { readdir, readFile, stat } from 'node:fs/promises';
2
2
  import path from 'node:path';
3
3
  import { watch as watchPaths } from 'chokidar';
4
4
  import { handleDirectory } from './handles.js';
5
+ import { ORIGINAL_FRONT_MATTER_KEY, originalUrlOf } from './original.js';
5
6
  import { parseDocument } from './parser.js';
6
7
  import { replyTarget } from './post-type.js';
7
8
  import { DuplicatePermalinkError, TRASH_DIRECTORY } from './store.js';
@@ -99,6 +100,10 @@ export function createContentSync(options) {
99
100
  if (document.inReplyTo !== undefined && replyTarget(document) === undefined) {
100
101
  logger.warn(`${relativePath} names in-reply-to "${document.inReplyTo}", which is not an http or https URL, so it is not a reply.`);
101
102
  }
103
+ const original = document.extra[ORIGINAL_FRONT_MATTER_KEY];
104
+ if (original !== undefined && originalUrlOf(document.extra) === undefined) {
105
+ logger.warn(`${relativePath} names ${ORIGINAL_FRONT_MATTER_KEY} ${JSON.stringify(original)}, which is not an absolute http or https URL, so the page stays its own canonical URL.`);
106
+ }
102
107
  try {
103
108
  await index(document, origin);
104
109
  }
@@ -187,6 +192,16 @@ export function createContentSync(options) {
187
192
  });
188
193
  }, options.debounceMs ?? DEFAULT_DEBOUNCE_MS));
189
194
  }
195
+ async function walkDirectory(absolutePath) {
196
+ const from = toRelative(contentDir, absolutePath);
197
+ if (from === undefined || watcher === undefined)
198
+ return;
199
+ const found = await walk(contentDir, logger, from);
200
+ if (watcher === undefined)
201
+ return;
202
+ for (const relativePath of found)
203
+ handle(path.join(contentDir, relativePath));
204
+ }
190
205
  async function startWatching() {
191
206
  if (watcher !== undefined)
192
207
  return;
@@ -199,6 +214,13 @@ export function createContentSync(options) {
199
214
  started.on('add', handle);
200
215
  started.on('change', handle);
201
216
  started.on('unlink', handle);
217
+ // chokidar can miss a file written into a directory it has only just seen
218
+ // appear, so a new directory is walked once its own watch is in place.
219
+ started.on('addDir', (absolutePath) => {
220
+ setTimeout(() => {
221
+ void walkDirectory(absolutePath);
222
+ }, options.debounceMs ?? DEFAULT_DEBOUNCE_MS);
223
+ });
202
224
  started.on('error', (error) => {
203
225
  logger.warn(`Content watcher error: ${messageOf(error)}`);
204
226
  });
@@ -317,11 +339,11 @@ function messageOf(error) {
317
339
  return error instanceof Error ? error.message : String(error);
318
340
  }
319
341
  /**
320
- * Every document file under the content directory, content-relative and
321
- * sorted. A directory that cannot be read is reported and skipped rather than
322
- * failing the whole walk.
342
+ * Every document file under the content directory, or under `from` inside it,
343
+ * content-relative and sorted. A directory that cannot be read is reported and
344
+ * skipped rather than failing the whole walk.
323
345
  */
324
- async function walk(contentDir, logger) {
346
+ async function walk(contentDir, logger, from = '') {
325
347
  const found = [];
326
348
  async function visit(directory, prefix) {
327
349
  let entries;
@@ -347,7 +369,7 @@ async function walk(contentDir, logger) {
347
369
  found.push(relativePath);
348
370
  }
349
371
  }
350
- await visit(contentDir, '');
372
+ await visit(path.join(contentDir, from), from);
351
373
  return found.sort();
352
374
  }
353
375
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/content/sync.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/content/sync.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export type Video = {
2
+ provider: 'youtube';
3
+ id: string;
4
+ start?: number;
5
+ } | {
6
+ provider: 'vimeo';
7
+ id: string;
8
+ hash?: string;
9
+ };
10
+ export declare function videoOf(href: string): Video | undefined;
11
+ export declare function videoEmbedHtml(video: Video, href: string): string;
12
+ //# sourceMappingURL=video.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"video.d.ts","sourceRoot":"","sources":["../../src/content/video.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,KAAK,GACb;IAAE,QAAQ,EAAE,SAAS,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GACnD;IAAE,QAAQ,EAAE,OAAO,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAYrD,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,CAKvD;AAyCD,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAWjE"}
@@ -0,0 +1,91 @@
1
+ const YOUTUBE_HOSTS = ['youtube.com', 'www.youtube.com', 'm.youtube.com'];
2
+ const YOUTUBE_ID = /^[\w-]{11}$/;
3
+ const YOUTUBE_PATH = /^\/(?:shorts|embed|live)\/([^/]+)\/?$/;
4
+ const YOUTUBE_TIME = /^(?:(\d+)h)?(?:(\d+)m)?(?:(\d+)s?)?$/;
5
+ const VIMEO_HOSTS = ['vimeo.com', 'www.vimeo.com'];
6
+ const VIMEO_PATH = /^\/(?:channels\/[\w-]+\/)?(\d+)(?:\/([\da-f]+))?\/?$/;
7
+ const VIMEO_PLAYER_PATH = /^\/video\/(\d+)\/?$/;
8
+ const VIMEO_HASH = /^[\da-f]+$/;
9
+ export function videoOf(href) {
10
+ const url = URL.canParse(href) ? new URL(href) : undefined;
11
+ if (url === undefined || (url.protocol !== 'https:' && url.protocol !== 'http:'))
12
+ return undefined;
13
+ return youtubeOf(url) ?? vimeoOf(url);
14
+ }
15
+ function youtubeOf(url) {
16
+ const id = youtubeIdOf(url);
17
+ if (id === undefined || !YOUTUBE_ID.test(id))
18
+ return undefined;
19
+ const start = secondsOf(url.searchParams.get('t') ?? url.searchParams.get('start'));
20
+ return { provider: 'youtube', id, ...(start === undefined ? {} : { start }) };
21
+ }
22
+ function youtubeIdOf(url) {
23
+ if (url.hostname === 'youtu.be')
24
+ return url.pathname.slice(1).replace(/\/$/, '');
25
+ if (url.hostname === 'www.youtube-nocookie.com') {
26
+ return /^\/embed\/([^/]+)$/.exec(url.pathname)?.[1];
27
+ }
28
+ if (!YOUTUBE_HOSTS.includes(url.hostname))
29
+ return undefined;
30
+ if (url.pathname === '/watch')
31
+ return url.searchParams.get('v') ?? undefined;
32
+ return YOUTUBE_PATH.exec(url.pathname)?.[1];
33
+ }
34
+ function secondsOf(value) {
35
+ const match = value === null ? null : YOUTUBE_TIME.exec(value);
36
+ if (match === null)
37
+ return undefined;
38
+ const [, hours = '0', minutes = '0', seconds = '0'] = match;
39
+ const total = Number(hours) * 3600 + Number(minutes) * 60 + Number(seconds);
40
+ return total > 0 ? total : undefined;
41
+ }
42
+ function vimeoOf(url) {
43
+ if (url.hostname === 'player.vimeo.com') {
44
+ const id = VIMEO_PLAYER_PATH.exec(url.pathname)?.[1];
45
+ if (id === undefined)
46
+ return undefined;
47
+ const hash = url.searchParams.get('h');
48
+ return { provider: 'vimeo', id, ...(hash !== null && VIMEO_HASH.test(hash) ? { hash } : {}) };
49
+ }
50
+ if (!VIMEO_HOSTS.includes(url.hostname))
51
+ return undefined;
52
+ const match = VIMEO_PATH.exec(url.pathname);
53
+ if (match === null)
54
+ return undefined;
55
+ const [, id = '', hash] = match;
56
+ return { provider: 'vimeo', id, ...(hash === undefined ? {} : { hash }) };
57
+ }
58
+ export function videoEmbedHtml(video, href) {
59
+ const { src, title } = playerOf(video);
60
+ return [
61
+ `<figure class="video-embed video-embed-${video.provider}">`,
62
+ `<iframe src="${escapeHtml(src)}" width="560" height="315"`,
63
+ ` title="${title}" loading="lazy"`,
64
+ ' allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"',
65
+ ' referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>',
66
+ `<figcaption><a href="${escapeHtml(href)}">${escapeHtml(href)}</a></figcaption>`,
67
+ '</figure>',
68
+ ].join('');
69
+ }
70
+ function playerOf(video) {
71
+ switch (video.provider) {
72
+ case 'youtube': {
73
+ const start = video.start === undefined ? '' : `?start=${String(video.start)}`;
74
+ return {
75
+ src: `https://www.youtube-nocookie.com/embed/${video.id}${start}`,
76
+ title: 'YouTube video',
77
+ };
78
+ }
79
+ case 'vimeo': {
80
+ const hash = video.hash === undefined ? '' : `h=${video.hash}&`;
81
+ return {
82
+ src: `https://player.vimeo.com/video/${video.id}?${hash}dnt=1`,
83
+ title: 'Vimeo video',
84
+ };
85
+ }
86
+ }
87
+ }
88
+ function escapeHtml(text) {
89
+ return text.replaceAll('&', '&amp;').replaceAll('"', '&quot;').replaceAll('<', '&lt;');
90
+ }
91
+ //# sourceMappingURL=video.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"video.js","sourceRoot":"","sources":["../../src/content/video.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ export type HeldKind = 'activitypub' | 'webmention' | 'feed-ping' | 'indexnow' | 'mail';
2
+ export interface OutboundEffect {
3
+ readonly kind: HeldKind;
4
+ readonly what: string;
5
+ readonly to: readonly string[];
6
+ }
7
+ export type DevModeSource = 'config' | 'command';
8
+ export type DevModeEntry = {
9
+ readonly type: 'on';
10
+ readonly at: string;
11
+ readonly by: DevModeSource;
12
+ } | {
13
+ readonly type: 'off';
14
+ readonly at: string;
15
+ } | ({
16
+ readonly type: 'held';
17
+ readonly at: string;
18
+ } & OutboundEffect);
19
+ export interface DevModeConfig {
20
+ readonly dataDir: string;
21
+ readonly devMode: boolean;
22
+ }
23
+ export declare function devModeOn(config: DevModeConfig): boolean;
24
+ export declare function enterDevMode(dataDir: string, by: DevModeSource, now?: Date): boolean;
25
+ export declare function leaveDevMode(dataDir: string, now?: Date): boolean;
26
+ export declare function holdOutbound(config: DevModeConfig, effect: OutboundEffect): boolean;
27
+ export declare function readDevModeRecord(dataDir: string): DevModeEntry[];
28
+ //# sourceMappingURL=dev-mode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-mode.d.ts","sourceRoot":"","sources":["../src/dev-mode.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,QAAQ,GAAG,aAAa,GAAG,YAAY,GAAG,WAAW,GAAG,UAAU,GAAG,MAAM,CAAC;AAExF,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,EAAE,SAAS,MAAM,EAAE,CAAC;CAChC;AAED,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEjD,MAAM,MAAM,YAAY,GACpB;IAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,aAAa,CAAA;CAAE,GACxE;IAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAC7C,CAAC;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG,cAAc,CAAC,CAAC;AAEtE,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAGD,wBAAgB,SAAS,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAExD;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,aAAa,EAAE,GAAG,OAAa,GAAG,OAAO,CAQ1F;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAa,GAAG,OAAO,CAKvE;AAGD,wBAAgB,YAAY,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,cAAc,GAAG,OAAO,CAUnF;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,EAAE,CAajE"}
@@ -0,0 +1,64 @@
1
+ import { appendFileSync, existsSync, mkdirSync, rmSync } from 'node:fs';
2
+ import path from 'node:path';
3
+ import { readFileIfPresentSync, writeFileAtomicallySync } from './files/atomic.js';
4
+ const DEV_MODE_FILE = 'dev-mode.json';
5
+ const DEV_MODE_RECORD_FILE = 'dev-mode.jsonl';
6
+ // Looked for on every call, so `geekity dev-mode off` takes a running site live at once.
7
+ export function devModeOn(config) {
8
+ return config.devMode || existsSync(stateFile(config.dataDir));
9
+ }
10
+ export function enterDevMode(dataDir, by, now = new Date()) {
11
+ if (existsSync(stateFile(dataDir)))
12
+ return false;
13
+ writeFileAtomicallySync(stateFile(dataDir), `${JSON.stringify({ since: now.toISOString(), by }, null, 2)}\n`);
14
+ append(dataDir, { type: 'on', at: now.toISOString(), by });
15
+ return true;
16
+ }
17
+ export function leaveDevMode(dataDir, now = new Date()) {
18
+ if (!existsSync(stateFile(dataDir)))
19
+ return false;
20
+ rmSync(stateFile(dataDir), { force: true });
21
+ append(dataDir, { type: 'off', at: now.toISOString() });
22
+ return true;
23
+ }
24
+ // A held effect is dropped, never queued, so going live replays nothing.
25
+ export function holdOutbound(config, effect) {
26
+ if (!devModeOn(config))
27
+ return false;
28
+ append(config.dataDir, {
29
+ type: 'held',
30
+ at: new Date().toISOString(),
31
+ kind: effect.kind,
32
+ what: effect.what,
33
+ to: [...effect.to],
34
+ });
35
+ return true;
36
+ }
37
+ export function readDevModeRecord(dataDir) {
38
+ const text = readFileIfPresentSync(recordFile(dataDir));
39
+ if (text === undefined)
40
+ return [];
41
+ const entries = [];
42
+ for (const line of text.split('\n')) {
43
+ if (line.trim() === '')
44
+ continue;
45
+ try {
46
+ entries.push(JSON.parse(line));
47
+ }
48
+ catch {
49
+ continue;
50
+ }
51
+ }
52
+ return entries;
53
+ }
54
+ function append(dataDir, entry) {
55
+ mkdirSync(dataDir, { recursive: true });
56
+ appendFileSync(recordFile(dataDir), `${JSON.stringify(entry)}\n`, 'utf8');
57
+ }
58
+ function stateFile(dataDir) {
59
+ return path.join(dataDir, DEV_MODE_FILE);
60
+ }
61
+ function recordFile(dataDir) {
62
+ return path.join(dataDir, DEV_MODE_RECORD_FILE);
63
+ }
64
+ //# sourceMappingURL=dev-mode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-mode.js","sourceRoot":"","sources":["../src/dev-mode.ts"],"names":[],"mappings":"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"}
package/dist/drain.d.ts CHANGED
@@ -19,10 +19,16 @@ export interface WriteGate {
19
19
  /** Refuse new writes, and resolve once those in flight have finished. */
20
20
  refuse(): Promise<void>;
21
21
  reopen(): void;
22
+ /** Stop counting a request as a write in flight, so the drain it is about to wait on does not wait on it. */
23
+ leave(request: object): void;
24
+ /**
25
+ * The new worker serves: answer a GET or HEAD that still reaches this one,
26
+ * on a keep-alive connection, with a redirect to the same URL on a new
27
+ * connection, which the new worker takes.
28
+ */
29
+ handOver(): void;
22
30
  }
23
- export declare function createWriteGate(options: {
24
- /** A write that is not counted as in flight: the reload request, which waits on the drain. */
25
- exempt: (pathname: string) => boolean;
31
+ export declare function createWriteGate(options?: {
26
32
  waitMs?: number;
27
33
  }): WriteGate;
28
34
  //# sourceMappingURL=drain.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"drain.d.ts","sourceRoot":"","sources":["../src/drain.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAW,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAEvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAG3C,2FAA2F;AAC3F,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAa3C,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,iBAAiB,CAAC,UAAU,CAAC,CAAC;IACnD,yEAAyE;IACzE,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,MAAM,IAAI,IAAI,CAAC;CAChB;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE;IACvC,8FAA8F;IAC9F,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,SAAS,CA8DZ"}
1
+ {"version":3,"file":"drain.d.ts","sourceRoot":"","sources":["../src/drain.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAW,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAEvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAG3C,2FAA2F;AAC3F,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAa3C,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,iBAAiB,CAAC,UAAU,CAAC,CAAC;IACnD,yEAAyE;IACzE,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,MAAM,IAAI,IAAI,CAAC;IACf,6GAA6G;IAC7G,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B;;;;OAIG;IACH,QAAQ,IAAI,IAAI,CAAC;CAClB;AAED,wBAAgB,eAAe,CAAC,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,SAAS,CA0E5E"}
package/dist/drain.js CHANGED
@@ -21,10 +21,12 @@ export const DRAIN_RETRY_AFTER_SECONDS = 5;
21
21
  const WRITE_WAIT_MS = 75_000;
22
22
  /** SQLite's result code for a write on a `query_only` connection. */
23
23
  const SQLITE_READONLY = 8;
24
- export function createWriteGate(options) {
24
+ export function createWriteGate(options = {}) {
25
25
  let refusing = false;
26
+ let handedOver = false;
26
27
  let inFlight = 0;
27
28
  let idle = [];
29
+ const counted = new WeakSet();
28
30
  function finished() {
29
31
  inFlight -= 1;
30
32
  if (inFlight > 0)
@@ -39,6 +41,8 @@ export function createWriteGate(options) {
39
41
  if (refusing) {
40
42
  if (writing)
41
43
  return refusal(c);
44
+ if (handedOver)
45
+ return sentOn(c);
42
46
  await next();
43
47
  if (c.error !== undefined && isRefusedWrite(c.error)) {
44
48
  c.res = refusal(c);
@@ -47,16 +51,18 @@ export function createWriteGate(options) {
47
51
  closeConnection(c);
48
52
  return;
49
53
  }
50
- if (!writing || options.exempt(c.req.path)) {
54
+ if (!writing) {
51
55
  await next();
52
56
  return;
53
57
  }
54
58
  inFlight += 1;
59
+ counted.add(c);
55
60
  try {
56
61
  await next();
57
62
  }
58
63
  finally {
59
- finished();
64
+ if (counted.delete(c))
65
+ finished();
60
66
  }
61
67
  };
62
68
  return {
@@ -80,6 +86,13 @@ export function createWriteGate(options) {
80
86
  reopen() {
81
87
  refusing = false;
82
88
  },
89
+ leave(request) {
90
+ if (counted.delete(request))
91
+ finished();
92
+ },
93
+ handOver() {
94
+ handedOver = true;
95
+ },
83
96
  };
84
97
  }
85
98
  function refusal(c) {
@@ -89,6 +102,14 @@ function refusal(c) {
89
102
  'Cache-Control': 'no-store',
90
103
  });
91
104
  }
105
+ function sentOn(c) {
106
+ const { pathname, search } = new URL(c.req.url);
107
+ return c.body(null, 307, {
108
+ Location: `${pathname}${search}`,
109
+ Connection: 'close',
110
+ 'Cache-Control': 'no-store',
111
+ });
112
+ }
92
113
  function closeConnection(c) {
93
114
  try {
94
115
  c.res.headers.set('Connection', 'close');
package/dist/drain.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"drain.js","sourceRoot":"","sources":["../src/drain.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"drain.js","sourceRoot":"","sources":["../src/drain.ts"],"names":[],"mappings":"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"}
@@ -22,6 +22,8 @@ export interface DeliveryReport {
22
22
  * author has no followers and the site has no relay.
23
23
  */
24
24
  readonly deliveries: readonly Delivery[];
25
+ /** Whether dev mode held it, in which case nobody was sent anything. */
26
+ readonly held: boolean;
25
27
  }
26
28
  /** Where a delivery service reports what it could not do. `console` will do. */
27
29
  export interface DeliveryLogger {
@@ -1 +1 @@
1
- {"version":3,"file":"delivery.d.ts","sourceRoot":"","sources":["../../src/federation/delivery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"delivery.d.ts","sourceRoot":"","sources":["../../src/federation/delivery.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,9 @@ import { createHash } from 'node:crypto';
2
2
  import { Activity, getTypeId, PUBLIC_COLLECTION } from '@fedify/vocab';
3
3
  import { listUsers } from '../admin/accounts.js';
4
4
  import { readSiteSettings } from '../admin/settings.js';
5
+ import { holdOutbound } from '../dev-mode.js';
5
6
  import { citationsOf } from '../content/citation.js';
7
+ import { isMigrated } from '../content/migrated.js';
6
8
  import { pinnedAt } from '../content/pinned.js';
7
9
  import { replyTarget } from '../content/post-type.js';
8
10
  import { saveDocument } from '../content/save.js';
@@ -94,6 +96,14 @@ export function createDeliveryService(options) {
94
96
  },
95
97
  });
96
98
  }
99
+ function requireSender(context, document) {
100
+ const author = documentAuthor(context, document);
101
+ if (author === undefined) {
102
+ throw new Error(`The post "${document.slug}" cannot be delivered: the site has no accounts, ` +
103
+ 'and decision-14 makes a user the actor a post is announced by.');
104
+ }
105
+ return author;
106
+ }
97
107
  /**
98
108
  * Fan one activity about one post out to the followers.
99
109
  *
@@ -107,12 +117,7 @@ export function createDeliveryService(options) {
107
117
  if (activityId === undefined) {
108
118
  throw new TypeError('An activity cannot be delivered without an id.');
109
119
  }
110
- const author = documentAuthor(context, about);
111
- if (author === undefined) {
112
- throw new Error(`The post "${about.slug}" cannot be delivered: the site has no accounts, ` +
113
- 'and decision-14 makes a user the actor a post is announced by.');
114
- }
115
- return await fanOut(context, author, activity, {
120
+ return await fanOut(context, requireSender(context, about), activity, {
116
121
  activityId,
117
122
  activityType: typeNameOf(activity),
118
123
  objectId: articleObjectId(context, about).href,
@@ -180,11 +185,26 @@ export function createDeliveryService(options) {
180
185
  */
181
186
  async function fanOut(context, sender, activity, about, also = [], { relays = true } = {}) {
182
187
  const deliveries = [];
183
- const keys = await senderKeyPairs(context, sender);
184
188
  const targets = deliveryTargets(admin, sender.username, { relays });
185
189
  // One POST to an inbox the followers already share is enough.
186
190
  const reached = new Set(targets.map((target) => target.inboxId));
187
191
  targets.push(...also.filter((target) => !reached.has(target.inboxId)));
192
+ const held = targets.length > 0 &&
193
+ holdOutbound(config, {
194
+ kind: 'activitypub',
195
+ what: `${about.activityType} ${about.objectId}`,
196
+ to: targets.map((target) => target.inboxId),
197
+ });
198
+ const report = {
199
+ activityId: about.activityId,
200
+ activityType: about.activityType,
201
+ objectId: about.objectId,
202
+ deliveries,
203
+ held,
204
+ };
205
+ if (held)
206
+ return report;
207
+ const keys = await senderKeyPairs(context, sender);
188
208
  for (const target of targets) {
189
209
  let status = synchronous ? 'sent' : 'queued';
190
210
  let error = null;
@@ -210,12 +230,7 @@ export function createDeliveryService(options) {
210
230
  }));
211
231
  }
212
232
  }
213
- return {
214
- activityId: about.activityId,
215
- activityType: about.activityType,
216
- objectId: about.objectId,
217
- deliveries,
218
- };
233
+ return report;
219
234
  }
220
235
  /**
221
236
  * Tell the followers a published post went into its author's featured
@@ -253,7 +268,16 @@ export function createDeliveryService(options) {
253
268
  const after = federatedOrUndefined(change.next, now);
254
269
  if (before === undefined && after === undefined)
255
270
  return;
271
+ const subject = change.next ?? change.previous;
272
+ if (subject !== undefined && isMigrated(subject)) {
273
+ const followersHoldIt = wasAnnounced(subject);
274
+ const comingIntoView = before === undefined;
275
+ if (!followersHoldIt || comingIntoView)
276
+ return;
277
+ }
256
278
  const context = deliveryContext();
279
+ if (subject === undefined || documentAuthor(context, subject) === undefined)
280
+ return;
257
281
  if (after === undefined) {
258
282
  // Unpublished, trashed or deleted; `before` is the post as it last
259
283
  // stood, and the only version there is to build a Tombstone from.
@@ -329,8 +353,8 @@ export function createDeliveryService(options) {
329
353
  // Read before the queue rather than inside it, so a post with nothing to
330
354
  // send answers `undefined` rather than joining a queue to find that out.
331
355
  const published = isFederatedDocument(document, store.now());
332
- const announced = (document.activitypub?.published ?? '') !== '';
333
- if (!published && !announced)
356
+ const announced = wasAnnounced(document);
357
+ if (!announced && (!published || isMigrated(document)))
334
358
  return undefined;
335
359
  return await enqueue(async () => {
336
360
  const context = deliveryContext();
@@ -340,6 +364,7 @@ export function createDeliveryService(options) {
340
364
  // file still carries the id their copy is filed under.
341
365
  return await withdraw(context, document, await shapeOf(context, document));
342
366
  }
367
+ requireSender(context, document);
343
368
  const stamped = await stamp(document);
344
369
  const shape = await shapeOf(context, stamped);
345
370
  // A like or a repost is sent again as it is: its id is one a peer
@@ -360,7 +385,9 @@ export function createDeliveryService(options) {
360
385
  const before = deliveryContext((url) => (url === target ? previous : options.cited(url)));
361
386
  const citing = store
362
387
  .listFederated()
363
- .filter((document) => isFederatedDocument(document, now) && cites(document, target));
388
+ .filter((document) => isFederatedDocument(document, now) &&
389
+ cites(document, target) &&
390
+ documentAuthor(context, document) !== undefined);
364
391
  for (const document of citing) {
365
392
  const shape = await shapeOf(context, document);
366
393
  if (shape.kind !== 'object')
@@ -508,6 +535,9 @@ function postBySlug(store, slug) {
508
535
  return direct;
509
536
  return store.listFederated().find((document) => document.slug === slug);
510
537
  }
538
+ function wasAnnounced(document) {
539
+ return (document.activitypub?.published ?? '') !== '';
540
+ }
511
541
  /** The document, when it is one this site federates, and `undefined` otherwise. */
512
542
  function federatedOrUndefined(document, now) {
513
543
  if (document === undefined)