@geekity/cms 0.27.0 → 0.29.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 (319) hide show
  1. package/README.md +469 -84
  2. package/admin/layouts/shell.njk +6 -0
  3. package/admin/pages/comments/all.njk +3 -1
  4. package/admin/pages/documents/editor.njk +4 -0
  5. package/admin/pages/federation/followers.njk +8 -2
  6. package/admin/pages/plugins/installed.njk +1 -1
  7. package/admin/pages/tools/dev-mode.njk +47 -0
  8. package/admin/static/admin.css +8 -0
  9. package/admin/static/editor-actions.js +13 -9
  10. package/admin/static/editor.js +31 -17
  11. package/dist/admin/comments.d.ts +2 -0
  12. package/dist/admin/comments.d.ts.map +1 -1
  13. package/dist/admin/comments.js +19 -49
  14. package/dist/admin/comments.js.map +1 -1
  15. package/dist/admin/dev-mode.d.ts +9 -0
  16. package/dist/admin/dev-mode.d.ts.map +1 -0
  17. package/dist/admin/dev-mode.js +42 -0
  18. package/dist/admin/dev-mode.js.map +1 -0
  19. package/dist/admin/documents.d.ts +5 -0
  20. package/dist/admin/documents.d.ts.map +1 -1
  21. package/dist/admin/documents.js +45 -17
  22. package/dist/admin/documents.js.map +1 -1
  23. package/dist/admin/editor-actions.js +3 -1
  24. package/dist/admin/editor-actions.js.map +1 -1
  25. package/dist/admin/federation.d.ts +21 -1
  26. package/dist/admin/federation.d.ts.map +1 -1
  27. package/dist/admin/federation.js +19 -7
  28. package/dist/admin/federation.js.map +1 -1
  29. package/dist/admin/menu.d.ts.map +1 -1
  30. package/dist/admin/menu.js +2 -0
  31. package/dist/admin/menu.js.map +1 -1
  32. package/dist/admin/own-paragraph.d.ts +7 -0
  33. package/dist/admin/own-paragraph.d.ts.map +1 -0
  34. package/dist/admin/own-paragraph.js +9 -0
  35. package/dist/admin/own-paragraph.js.map +1 -0
  36. package/dist/admin/plugins.d.ts.map +1 -1
  37. package/dist/admin/plugins.js +19 -8
  38. package/dist/admin/plugins.js.map +1 -1
  39. package/dist/admin/preview.d.ts.map +1 -1
  40. package/dist/admin/preview.js +4 -1
  41. package/dist/admin/preview.js.map +1 -1
  42. package/dist/admin/routes.d.ts.map +1 -1
  43. package/dist/admin/routes.js +4 -0
  44. package/dist/admin/routes.js.map +1 -1
  45. package/dist/admin/settings-email.d.ts.map +1 -1
  46. package/dist/admin/settings-email.js +4 -0
  47. package/dist/admin/settings-email.js.map +1 -1
  48. package/dist/admin/store.d.ts +68 -12
  49. package/dist/admin/store.d.ts.map +1 -1
  50. package/dist/admin/store.js +167 -18
  51. package/dist/admin/store.js.map +1 -1
  52. package/dist/admin/templates.d.ts +1 -0
  53. package/dist/admin/templates.d.ts.map +1 -1
  54. package/dist/admin/templates.js +1 -0
  55. package/dist/admin/templates.js.map +1 -1
  56. package/dist/admin/uploads.d.ts +7 -1
  57. package/dist/admin/uploads.d.ts.map +1 -1
  58. package/dist/admin/uploads.js +33 -30
  59. package/dist/admin/uploads.js.map +1 -1
  60. package/dist/cli.d.ts +1 -1
  61. package/dist/cli.d.ts.map +1 -1
  62. package/dist/cli.js +78 -12
  63. package/dist/cli.js.map +1 -1
  64. package/dist/comments/form.d.ts +3 -1
  65. package/dist/comments/form.d.ts.map +1 -1
  66. package/dist/comments/form.js +2 -1
  67. package/dist/comments/form.js.map +1 -1
  68. package/dist/comments/index.d.ts +2 -2
  69. package/dist/comments/index.d.ts.map +1 -1
  70. package/dist/comments/index.js +1 -1
  71. package/dist/comments/index.js.map +1 -1
  72. package/dist/comments/records.d.ts +25 -20
  73. package/dist/comments/records.d.ts.map +1 -1
  74. package/dist/comments/records.js +113 -33
  75. package/dist/comments/records.js.map +1 -1
  76. package/dist/comments/reply-notices.d.ts +42 -0
  77. package/dist/comments/reply-notices.d.ts.map +1 -0
  78. package/dist/comments/reply-notices.js +76 -0
  79. package/dist/comments/reply-notices.js.map +1 -0
  80. package/dist/comments/reply-post.d.ts +49 -0
  81. package/dist/comments/reply-post.d.ts.map +1 -0
  82. package/dist/comments/reply-post.js +66 -0
  83. package/dist/comments/reply-post.js.map +1 -0
  84. package/dist/comments/routes.d.ts +6 -1
  85. package/dist/comments/routes.d.ts.map +1 -1
  86. package/dist/comments/routes.js +49 -21
  87. package/dist/comments/routes.js.map +1 -1
  88. package/dist/comments/submission.d.ts +8 -25
  89. package/dist/comments/submission.d.ts.map +1 -1
  90. package/dist/comments/submission.js +19 -38
  91. package/dist/comments/submission.js.map +1 -1
  92. package/dist/comments/viewer.d.ts.map +1 -1
  93. package/dist/comments/viewer.js +1 -0
  94. package/dist/comments/viewer.js.map +1 -1
  95. package/dist/config.d.ts +21 -0
  96. package/dist/config.d.ts.map +1 -1
  97. package/dist/config.js +2 -0
  98. package/dist/config.js.map +1 -1
  99. package/dist/content/citation.d.ts +1 -0
  100. package/dist/content/citation.d.ts.map +1 -1
  101. package/dist/content/citation.js +2 -0
  102. package/dist/content/citation.js.map +1 -1
  103. package/dist/content/markdown.d.ts.map +1 -1
  104. package/dist/content/markdown.js +33 -1
  105. package/dist/content/markdown.js.map +1 -1
  106. package/dist/content/migrated.d.ts +6 -0
  107. package/dist/content/migrated.d.ts.map +1 -0
  108. package/dist/content/migrated.js +12 -0
  109. package/dist/content/migrated.js.map +1 -0
  110. package/dist/content/original.d.ts +8 -0
  111. package/dist/content/original.d.ts.map +1 -0
  112. package/dist/content/original.js +15 -0
  113. package/dist/content/original.js.map +1 -0
  114. package/dist/content/parser.d.ts +5 -0
  115. package/dist/content/parser.d.ts.map +1 -1
  116. package/dist/content/parser.js +1 -1
  117. package/dist/content/parser.js.map +1 -1
  118. package/dist/content/schedule.d.ts +7 -0
  119. package/dist/content/schedule.d.ts.map +1 -1
  120. package/dist/content/schedule.js +11 -2
  121. package/dist/content/schedule.js.map +1 -1
  122. package/dist/content/store.d.ts +43 -11
  123. package/dist/content/store.d.ts.map +1 -1
  124. package/dist/content/store.js +170 -10
  125. package/dist/content/store.js.map +1 -1
  126. package/dist/content/sync.d.ts +8 -0
  127. package/dist/content/sync.d.ts.map +1 -1
  128. package/dist/content/sync.js +172 -57
  129. package/dist/content/sync.js.map +1 -1
  130. package/dist/content/video.d.ts +12 -0
  131. package/dist/content/video.d.ts.map +1 -0
  132. package/dist/content/video.js +91 -0
  133. package/dist/content/video.js.map +1 -0
  134. package/dist/dev-mode.d.ts +28 -0
  135. package/dist/dev-mode.d.ts.map +1 -0
  136. package/dist/dev-mode.js +64 -0
  137. package/dist/dev-mode.js.map +1 -0
  138. package/dist/drain.d.ts +9 -3
  139. package/dist/drain.d.ts.map +1 -1
  140. package/dist/drain.js +24 -3
  141. package/dist/drain.js.map +1 -1
  142. package/dist/federation/article.d.ts.map +1 -1
  143. package/dist/federation/article.js +2 -1
  144. package/dist/federation/article.js.map +1 -1
  145. package/dist/federation/backfill.d.ts +114 -0
  146. package/dist/federation/backfill.d.ts.map +1 -0
  147. package/dist/federation/backfill.js +312 -0
  148. package/dist/federation/backfill.js.map +1 -0
  149. package/dist/federation/delivery.d.ts +2 -0
  150. package/dist/federation/delivery.d.ts.map +1 -1
  151. package/dist/federation/delivery.js +46 -16
  152. package/dist/federation/delivery.js.map +1 -1
  153. package/dist/federation/inbox.d.ts.map +1 -1
  154. package/dist/federation/inbox.js +14 -4
  155. package/dist/federation/inbox.js.map +1 -1
  156. package/dist/federation/mount.d.ts.map +1 -1
  157. package/dist/federation/mount.js +8 -4
  158. package/dist/federation/mount.js.map +1 -1
  159. package/dist/federation/records.d.ts +13 -0
  160. package/dist/federation/records.d.ts.map +1 -1
  161. package/dist/federation/records.js +49 -10
  162. package/dist/federation/records.js.map +1 -1
  163. package/dist/federation/relays.d.ts.map +1 -1
  164. package/dist/federation/relays.js +16 -1
  165. package/dist/federation/relays.js.map +1 -1
  166. package/dist/federation/replies.d.ts +6 -0
  167. package/dist/federation/replies.d.ts.map +1 -1
  168. package/dist/federation/replies.js +18 -1
  169. package/dist/federation/replies.js.map +1 -1
  170. package/dist/index.d.ts +13 -3
  171. package/dist/index.d.ts.map +1 -1
  172. package/dist/index.js +95 -14
  173. package/dist/index.js.map +1 -1
  174. package/dist/indexnow.d.ts +1 -1
  175. package/dist/indexnow.d.ts.map +1 -1
  176. package/dist/indexnow.js +7 -0
  177. package/dist/indexnow.js.map +1 -1
  178. package/dist/init.d.ts +1 -1
  179. package/dist/init.d.ts.map +1 -1
  180. package/dist/init.js +1 -7
  181. package/dist/init.js.map +1 -1
  182. package/dist/mail/service.d.ts +3 -1
  183. package/dist/mail/service.d.ts.map +1 -1
  184. package/dist/mail/service.js +17 -0
  185. package/dist/mail/service.js.map +1 -1
  186. package/dist/notify.d.ts +1 -1
  187. package/dist/notify.d.ts.map +1 -1
  188. package/dist/notify.js +7 -0
  189. package/dist/notify.js.map +1 -1
  190. package/dist/plugin.d.ts +67 -4
  191. package/dist/plugin.d.ts.map +1 -1
  192. package/dist/plugin.js.map +1 -1
  193. package/dist/plugins/folder.d.ts +2 -0
  194. package/dist/plugins/folder.d.ts.map +1 -1
  195. package/dist/plugins/folder.js +26 -5
  196. package/dist/plugins/folder.js.map +1 -1
  197. package/dist/plugins/manage.d.ts +8 -6
  198. package/dist/plugins/manage.d.ts.map +1 -1
  199. package/dist/plugins/manage.js +1 -4
  200. package/dist/plugins/manage.js.map +1 -1
  201. package/dist/plugins/site.d.ts.map +1 -1
  202. package/dist/plugins/site.js +56 -0
  203. package/dist/plugins/site.js.map +1 -1
  204. package/dist/supervisor/control.d.ts +15 -0
  205. package/dist/supervisor/control.d.ts.map +1 -0
  206. package/dist/supervisor/control.js +89 -0
  207. package/dist/supervisor/control.js.map +1 -0
  208. package/dist/supervisor/primary.d.ts +18 -4
  209. package/dist/supervisor/primary.d.ts.map +1 -1
  210. package/dist/supervisor/primary.js +128 -16
  211. package/dist/supervisor/primary.js.map +1 -1
  212. package/dist/supervisor/protocol.d.ts +12 -0
  213. package/dist/supervisor/protocol.d.ts.map +1 -1
  214. package/dist/supervisor/protocol.js +21 -2
  215. package/dist/supervisor/protocol.js.map +1 -1
  216. package/dist/supervisor/supervision.d.ts +1 -0
  217. package/dist/supervisor/supervision.d.ts.map +1 -1
  218. package/dist/supervisor/supervision.js +14 -1
  219. package/dist/supervisor/supervision.js.map +1 -1
  220. package/dist/supervisor/worker.d.ts.map +1 -1
  221. package/dist/supervisor/worker.js +31 -6
  222. package/dist/supervisor/worker.js.map +1 -1
  223. package/dist/web/context.d.ts +22 -0
  224. package/dist/web/context.d.ts.map +1 -1
  225. package/dist/web/context.js +20 -4
  226. package/dist/web/context.js.map +1 -1
  227. package/dist/web/conversation.d.ts +155 -16
  228. package/dist/web/conversation.d.ts.map +1 -1
  229. package/dist/web/conversation.js +602 -135
  230. package/dist/web/conversation.js.map +1 -1
  231. package/dist/web/documents.d.ts +0 -22
  232. package/dist/web/documents.d.ts.map +1 -1
  233. package/dist/web/documents.js +1 -34
  234. package/dist/web/documents.js.map +1 -1
  235. package/dist/web/feed-item.d.ts +19 -14
  236. package/dist/web/feed-item.d.ts.map +1 -1
  237. package/dist/web/feed-item.js +10 -9
  238. package/dist/web/feed-item.js.map +1 -1
  239. package/dist/web/feed-rss.d.ts +2 -2
  240. package/dist/web/feed-rss.d.ts.map +1 -1
  241. package/dist/web/feed-rss.js +36 -12
  242. package/dist/web/feed-rss.js.map +1 -1
  243. package/dist/web/feed-source.d.ts +30 -1
  244. package/dist/web/feed-source.d.ts.map +1 -1
  245. package/dist/web/feed-source.js +25 -0
  246. package/dist/web/feed-source.js.map +1 -1
  247. package/dist/web/feeds.d.ts +1 -1
  248. package/dist/web/feeds.d.ts.map +1 -1
  249. package/dist/web/feeds.js +7 -2
  250. package/dist/web/feeds.js.map +1 -1
  251. package/dist/web/guids.d.ts +59 -0
  252. package/dist/web/guids.d.ts.map +1 -0
  253. package/dist/web/guids.js +79 -0
  254. package/dist/web/guids.js.map +1 -0
  255. package/dist/web/index.d.ts +5 -6
  256. package/dist/web/index.d.ts.map +1 -1
  257. package/dist/web/index.js +3 -3
  258. package/dist/web/index.js.map +1 -1
  259. package/dist/web/redirects.d.ts +29 -10
  260. package/dist/web/redirects.d.ts.map +1 -1
  261. package/dist/web/redirects.js +99 -53
  262. package/dist/web/redirects.js.map +1 -1
  263. package/dist/web/render.d.ts +19 -9
  264. package/dist/web/render.d.ts.map +1 -1
  265. package/dist/web/render.js +44 -42
  266. package/dist/web/render.js.map +1 -1
  267. package/dist/web/routes.d.ts +2 -2
  268. package/dist/web/routes.d.ts.map +1 -1
  269. package/dist/web/routes.js +94 -31
  270. package/dist/web/routes.js.map +1 -1
  271. package/dist/webmention/index.d.ts +1 -1
  272. package/dist/webmention/index.d.ts.map +1 -1
  273. package/dist/webmention/index.js +1 -1
  274. package/dist/webmention/index.js.map +1 -1
  275. package/dist/webmention/links.d.ts +55 -0
  276. package/dist/webmention/links.d.ts.map +1 -1
  277. package/dist/webmention/links.js +162 -0
  278. package/dist/webmention/links.js.map +1 -1
  279. package/dist/webmention/microformats.d.ts +15 -0
  280. package/dist/webmention/microformats.d.ts.map +1 -1
  281. package/dist/webmention/microformats.js +63 -1
  282. package/dist/webmention/microformats.js.map +1 -1
  283. package/dist/webmention/pingback.js +2 -1
  284. package/dist/webmention/pingback.js.map +1 -1
  285. package/dist/webmention/receive.d.ts +5 -0
  286. package/dist/webmention/receive.d.ts.map +1 -1
  287. package/dist/webmention/receive.js +99 -3
  288. package/dist/webmention/receive.js.map +1 -1
  289. package/dist/webmention/reply-context.d.ts +15 -0
  290. package/dist/webmention/reply-context.d.ts.map +1 -1
  291. package/dist/webmention/reply-context.js +29 -0
  292. package/dist/webmention/reply-context.js.map +1 -1
  293. package/dist/webmention/reply-contexts.d.ts +6 -0
  294. package/dist/webmention/reply-contexts.d.ts.map +1 -1
  295. package/dist/webmention/reply-contexts.js +16 -10
  296. package/dist/webmention/reply-contexts.js.map +1 -1
  297. package/dist/webmention/routes.d.ts.map +1 -1
  298. package/dist/webmention/routes.js +2 -1
  299. package/dist/webmention/routes.js.map +1 -1
  300. package/dist/webmention/service.d.ts +31 -2
  301. package/dist/webmention/service.d.ts.map +1 -1
  302. package/dist/webmention/service.js +183 -33
  303. package/dist/webmention/service.js.map +1 -1
  304. package/package.json +1 -2
  305. package/themes/default/README.md +390 -75
  306. package/themes/default/layouts/base.njk +19 -2
  307. package/themes/default/layouts/comment.njk +90 -0
  308. package/themes/default/layouts/front-page.njk +9 -47
  309. package/themes/default/layouts/page.njk +2 -0
  310. package/themes/default/layouts/post.njk +22 -4
  311. package/themes/default/partials/backlinks.njk +19 -0
  312. package/themes/default/partials/body-end.njk +1 -0
  313. package/themes/default/partials/cited-page.njk +3 -1
  314. package/themes/default/partials/comment-form.njk +10 -0
  315. package/themes/default/partials/comment.njk +79 -0
  316. package/themes/default/partials/conversation.njk +14 -59
  317. package/themes/default/partials/head-end.njk +1 -0
  318. package/themes/default/src/style.css +46 -0
  319. package/themes/default/static/style.css +75 -0
@@ -4,8 +4,13 @@
4
4
  * installs. Shared by requests and the command line, so a plugin's command
5
5
  * and its federation read the same files the same way.
6
6
  */
7
+ import path from 'node:path';
7
8
  import { listUsers, setUserActorId } from '../admin/accounts.js';
8
9
  import { readSiteSettings } from '../admin/settings.js';
10
+ import { acceptUpload, refusedUpload } from '../admin/uploads.js';
11
+ import { renderCommentMarkdown } from '../comments/markdown.js';
12
+ import { commentsFile, putComments, readComments } from '../comments/records.js';
13
+ import { slugForPermalink } from '../content/parser.js';
9
14
  import { readFileIfPresentSync } from '../files/atomic.js';
10
15
  import { actorKeyFile, loadActorKeyPairs, writeActorKeyFile } from '../federation/keys.js';
11
16
  import { addFollower, readFollowers } from '../federation/records.js';
@@ -35,6 +40,7 @@ export function pluginSite(options) {
35
40
  const { contentDir, dataDir } = config;
36
41
  return {
37
42
  baseUrl: config.baseUrl,
43
+ contentDir,
38
44
  users: () => listUsers(dataDir).map((user) => ({
39
45
  username: user.username,
40
46
  ...(user.actorId === undefined ? {} : { actorId: user.actorId }),
@@ -62,6 +68,56 @@ export function pluginSite(options) {
62
68
  async addFollower(username, follower) {
63
69
  await addFollower({ admin, contentDir }, username, follower);
64
70
  },
71
+ checkUpload(name, bytes) {
72
+ const outcome = acceptUpload(name, '', bytes, config);
73
+ return refusedUpload(outcome)
74
+ ? { accepted: false, why: outcome.error }
75
+ : { accepted: true, bytes: outcome.bytes };
76
+ },
77
+ comments(permalink) {
78
+ const slug = postSlug(permalink);
79
+ return {
80
+ file: path.relative(contentDir, commentsFile(contentDir, slug)).split(path.sep).join('/'),
81
+ comments: readComments({ contentDir, dataDir }, slug).map(pluginCommentOf),
82
+ };
83
+ },
84
+ async putComments(permalink, comments) {
85
+ await putComments({ admin, contentDir, dataDir }, postSlug(permalink), permalink, comments.map(commentRecordOf));
86
+ },
87
+ };
88
+ }
89
+ function postSlug(permalink) {
90
+ const slug = slugForPermalink(permalink);
91
+ if (slug === undefined)
92
+ throw new Error(`${permalink} names no post a comment can be on.`);
93
+ return slug;
94
+ }
95
+ function pluginCommentOf(comment) {
96
+ return {
97
+ id: comment.id,
98
+ source: comment.source,
99
+ kind: comment.kind,
100
+ status: comment.status,
101
+ author: { ...comment.author },
102
+ markdown: comment.content.markdown,
103
+ submitted: comment.submitted,
104
+ inReplyTo: comment.inReplyTo,
105
+ url: comment.url,
106
+ };
107
+ }
108
+ function commentRecordOf(comment) {
109
+ return {
110
+ id: comment.id,
111
+ source: comment.source,
112
+ kind: comment.kind,
113
+ status: comment.status,
114
+ author: { ...comment.author },
115
+ content: { markdown: comment.markdown, html: renderCommentMarkdown(comment.markdown) },
116
+ submitted: comment.submitted,
117
+ addressHash: null,
118
+ inReplyTo: comment.inReplyTo,
119
+ url: comment.url,
120
+ notify: false,
65
121
  };
66
122
  }
67
123
  //# sourceMappingURL=site.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"site.js","sourceRoot":"","sources":["../../src/plugins/site.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"site.js","sourceRoot":"","sources":["../../src/plugins/site.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { ReloadOutcome } from './supervision.ts';
2
+ /**
3
+ * The data folder can sit on a bind mount that cannot hold a socket, or at a
4
+ * path longer than the Unix socket path limit, so the socket lives in tmpdir().
5
+ */
6
+ export declare function controlSocketPath(dataDir: string): string;
7
+ export declare function listenForControl(options: {
8
+ dataDir: string;
9
+ reload: () => Promise<ReloadOutcome>;
10
+ log: (line: string) => void;
11
+ }): {
12
+ close(): void;
13
+ };
14
+ export declare function askToReload(dataDir: string): Promise<ReloadOutcome | undefined>;
15
+ //# sourceMappingURL=control.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"control.d.ts","sourceRoot":"","sources":["../../src/supervisor/control.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAItD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAGzD;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,CAAC;IACrC,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7B,GAAG;IAAE,KAAK,IAAI,IAAI,CAAA;CAAE,CAkDpB;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAU/E"}
@@ -0,0 +1,89 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { chmodSync, rmSync } from 'node:fs';
3
+ import net from 'node:net';
4
+ import { tmpdir } from 'node:os';
5
+ import path from 'node:path';
6
+ const RELOAD = 'reload';
7
+ /**
8
+ * The data folder can sit on a bind mount that cannot hold a socket, or at a
9
+ * path longer than the Unix socket path limit, so the socket lives in tmpdir().
10
+ */
11
+ export function controlSocketPath(dataDir) {
12
+ const id = createHash('sha256').update(path.resolve(dataDir)).digest('hex').slice(0, 16);
13
+ return path.join(tmpdir(), `geekity-${id}.sock`);
14
+ }
15
+ export function listenForControl(options) {
16
+ const socketPath = controlSocketPath(options.dataDir);
17
+ let owned = false;
18
+ const server = net.createServer((socket) => {
19
+ let received = '';
20
+ socket.setEncoding('utf8');
21
+ socket.on('error', () => undefined);
22
+ socket.on('data', (chunk) => {
23
+ received += chunk;
24
+ if (!received.includes('\n'))
25
+ return;
26
+ socket.pause();
27
+ const outcome = received.trim() === RELOAD
28
+ ? options.reload()
29
+ : Promise.resolve({ ok: false, error: 'Unknown request.' });
30
+ void outcome.then((answer) => socket.end(`${JSON.stringify(answer)}\n`));
31
+ });
32
+ });
33
+ function listen(retry) {
34
+ server.once('error', (error) => {
35
+ if (error.code !== 'EADDRINUSE' || !retry) {
36
+ options.log(`geekity plugin cannot reach this server (${error.message}).`);
37
+ return;
38
+ }
39
+ const probe = net.connect(socketPath);
40
+ probe.once('connect', () => {
41
+ probe.destroy();
42
+ options.log(`Another geekity serve for this data folder answers on ${socketPath}, so geekity plugin reaches that one.`);
43
+ });
44
+ probe.once('error', () => {
45
+ rmSync(socketPath, { force: true });
46
+ listen(false);
47
+ });
48
+ });
49
+ server.listen(socketPath, () => {
50
+ owned = true;
51
+ chmodSync(socketPath, 0o600);
52
+ });
53
+ }
54
+ listen(true);
55
+ return {
56
+ close() {
57
+ server.close();
58
+ if (owned)
59
+ rmSync(socketPath, { force: true });
60
+ },
61
+ };
62
+ }
63
+ export function askToReload(dataDir) {
64
+ return new Promise((resolve) => {
65
+ const socket = net.connect(controlSocketPath(dataDir));
66
+ let received = '';
67
+ socket.setEncoding('utf8');
68
+ socket.on('connect', () => socket.write(`${RELOAD}\n`));
69
+ socket.on('data', (chunk) => (received += chunk));
70
+ socket.on('error', () => resolve(undefined));
71
+ socket.on('close', () => resolve(parseOutcome(received)));
72
+ });
73
+ }
74
+ function parseOutcome(text) {
75
+ let value;
76
+ try {
77
+ value = JSON.parse(text);
78
+ }
79
+ catch {
80
+ return undefined;
81
+ }
82
+ if (value?.ok === true)
83
+ return { ok: true };
84
+ if (value?.ok === false && typeof value.error === 'string') {
85
+ return { ok: false, error: value.error };
86
+ }
87
+ return undefined;
88
+ }
89
+ //# sourceMappingURL=control.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"control.js","sourceRoot":"","sources":["../../src/supervisor/control.ts"],"names":[],"mappings":"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"}
@@ -9,11 +9,12 @@
9
9
  * empties its queues, goes read-only) before the new one is forked, so the
10
10
  * new worker's boot migrations run alone.
11
11
  *
12
- * This module is the state machine alone. The workers, the clock and the
13
- * process are handed in, so the order of a reload is tested without
12
+ * This module is the state machine alone. The workers, the clock, the folder
13
+ * and the process are handed in, so the order of a reload is tested without
14
14
  * starting a process; {@link superviseCluster} binds it to `node:cluster`.
15
15
  */
16
16
  import type { SupervisorMessage, WorkerMessage } from './protocol.ts';
17
+ import type { ReloadOutcome } from './supervision.ts';
17
18
  /** A running worker, as the supervisor reaches it. */
18
19
  export interface WorkerHandle {
19
20
  readonly id: number;
@@ -23,25 +24,38 @@ export interface WorkerHandle {
23
24
  export interface Cancel {
24
25
  cancel(): void;
25
26
  }
27
+ export interface PluginWatch {
28
+ signature(): string;
29
+ fingerprint(): string;
30
+ }
26
31
  export interface SupervisorOptions {
27
32
  fork(): WorkerHandle;
28
33
  schedule(task: () => void, ms: number): Cancel;
29
34
  now(): number;
30
35
  log(line: string): void;
31
36
  exit(code: number): void;
37
+ watch?: PluginWatch | undefined;
32
38
  }
33
39
  export interface Supervisor {
34
40
  start(): void;
35
41
  message(worker: WorkerHandle, message: WorkerMessage): void;
36
42
  exited(worker: WorkerHandle, code: number | null): void;
43
+ reload(): Promise<ReloadOutcome>;
37
44
  /** SIGTERM or SIGINT: shut every worker down, then exit. */
38
45
  stop(): void;
39
46
  }
47
+ export declare const PLUGIN_POLL_MS = 1000;
48
+ export declare const PLUGIN_SETTLE_MS = 5000;
40
49
  export declare function createSupervisor(options: SupervisorOptions): Supervisor;
41
50
  /**
42
51
  * Run the supervisor over `node:cluster` workers, each of which runs this
43
52
  * same command. SIGTERM and SIGINT reach the supervisor, which is the process
44
- * an image's init signals.
53
+ * an image's init signals. `geekity plugin` reaches it over the control
54
+ * socket for `dataDir`.
45
55
  */
46
- export declare function superviseCluster(): void;
56
+ export declare function superviseCluster(options: {
57
+ dataDir: string;
58
+ pluginsDir: string | undefined;
59
+ pluginWatch: boolean;
60
+ }): void;
47
61
  //# sourceMappingURL=primary.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"primary.d.ts","sourceRoot":"","sources":["../../src/supervisor/primary.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAKH,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEtE,sDAAsD;AACtD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACvC,IAAI,IAAI,IAAI,CAAC;CACd;AAED,MAAM,WAAW,MAAM;IACrB,MAAM,IAAI,IAAI,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,IAAI,YAAY,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,IAAI,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/C,GAAG,IAAI,MAAM,CAAC;IACd,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,IAAI,IAAI,CAAC;IACd,OAAO,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;IAC5D,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IACxD,4DAA4D;IAC5D,IAAI,IAAI,IAAI,CAAC;CACd;AA6BD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,UAAU,CAiJvE;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAkCvC"}
1
+ {"version":3,"file":"primary.d.ts","sourceRoot":"","sources":["../../src/supervisor/primary.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAOH,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACtE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,sDAAsD;AACtD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACvC,IAAI,IAAI,IAAI,CAAC;CACd;AAED,MAAM,WAAW,MAAM;IACrB,MAAM,IAAI,IAAI,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,SAAS,IAAI,MAAM,CAAC;IACpB,WAAW,IAAI,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,IAAI,YAAY,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,IAAI,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/C,GAAG,IAAI,MAAM,CAAC;IACd,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;CACjC;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,IAAI,IAAI,CAAC;IACd,OAAO,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;IAC5D,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IACxD,MAAM,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC;IACjC,4DAA4D;IAC5D,IAAI,IAAI,IAAI,CAAC;CACd;AAED,eAAO,MAAM,cAAc,OAAQ,CAAC;AACpC,eAAO,MAAM,gBAAgB,OAAQ,CAAC;AA6BtC,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,UAAU,CAgOvE;AAUD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,WAAW,EAAE,OAAO,CAAC;CACtB,GAAG,IAAI,CAsDP"}
@@ -9,12 +9,16 @@
9
9
  * empties its queues, goes read-only) before the new one is forked, so the
10
10
  * new worker's boot migrations run alone.
11
11
  *
12
- * This module is the state machine alone. The workers, the clock and the
13
- * process are handed in, so the order of a reload is tested without
12
+ * This module is the state machine alone. The workers, the clock, the folder
13
+ * and the process are handed in, so the order of a reload is tested without
14
14
  * starting a process; {@link superviseCluster} binds it to `node:cluster`.
15
15
  */
16
16
  import cluster from 'node:cluster';
17
+ import { pluginFolderSignature, pluginsFingerprint, scanPluginFolders } from '../plugins/folder.js';
18
+ import { listenForControl } from './control.js';
17
19
  import { isWorkerMessage } from './protocol.js';
20
+ export const PLUGIN_POLL_MS = 1_000;
21
+ export const PLUGIN_SETTLE_MS = 5_000;
18
22
  /** The first respawn waits this long, doubling with each crash after it. */
19
23
  const RESPAWN_BASE_MS = 500;
20
24
  const RESPAWN_MAX_MS = 30_000;
@@ -30,6 +34,14 @@ export function createSupervisor(options) {
30
34
  let state = { phase: 'stopping' };
31
35
  let everServed = false;
32
36
  let crashes = 0;
37
+ let loaded;
38
+ let reloading;
39
+ let failed;
40
+ let waiting = [];
41
+ let queued = [];
42
+ let seen = { signature: undefined, since: 0 };
43
+ let compared;
44
+ let polling;
33
45
  function fork() {
34
46
  const worker = options.fork();
35
47
  live.add(worker);
@@ -46,6 +58,26 @@ export function createSupervisor(options) {
46
58
  }, delay),
47
59
  };
48
60
  }
61
+ function beginReload(worker, folder = fingerprint()) {
62
+ options.log('Reloading: the running server is draining.');
63
+ worker.send({ type: 'drain' });
64
+ state = { phase: 'draining', old: worker };
65
+ reloading = folder;
66
+ waiting = [...waiting, ...queued];
67
+ queued = [];
68
+ }
69
+ function settle(outcome) {
70
+ for (const done of waiting)
71
+ done(outcome);
72
+ waiting = [];
73
+ }
74
+ function serve(worker, plugins) {
75
+ state = { phase: 'serving', worker, since: options.now() };
76
+ if (plugins !== undefined)
77
+ loaded = plugins;
78
+ if (queued.length > 0)
79
+ beginReload(worker);
80
+ }
49
81
  /** The new worker did not boot: the old one carries on, and is told why. */
50
82
  function keepOld(old, next, error) {
51
83
  if (state.phase === 'replacing')
@@ -54,7 +86,39 @@ export function createSupervisor(options) {
54
86
  old.send({ type: 'resume', error });
55
87
  if (live.has(next))
56
88
  next.kill();
57
- state = { phase: 'serving', worker: old, since: options.now() };
89
+ failed = reloading;
90
+ settle({ ok: false, error });
91
+ serve(old, undefined);
92
+ }
93
+ function fingerprint() {
94
+ const { watch } = options;
95
+ return watch === undefined ? undefined : attempt(() => watch.fingerprint());
96
+ }
97
+ function poll(watch) {
98
+ polling = options.schedule(() => {
99
+ look(watch);
100
+ poll(watch);
101
+ }, PLUGIN_POLL_MS);
102
+ }
103
+ function look(watch) {
104
+ const signature = attempt(() => watch.signature());
105
+ const now = options.now();
106
+ if (signature === undefined || signature !== seen.signature) {
107
+ seen = { signature, since: now };
108
+ return;
109
+ }
110
+ if (state.phase !== 'serving' || signature === compared)
111
+ return;
112
+ if (now - seen.since < PLUGIN_SETTLE_MS)
113
+ return;
114
+ const folder = fingerprint();
115
+ if (folder === undefined)
116
+ return;
117
+ compared = signature;
118
+ if (folder === loaded || folder === failed)
119
+ return;
120
+ options.log('The plugins folder changed and has settled.');
121
+ beginReload(state.worker, folder);
58
122
  }
59
123
  function bootError(worker, code) {
60
124
  return (bootErrors.get(worker) ??
@@ -63,19 +127,23 @@ export function createSupervisor(options) {
63
127
  return {
64
128
  start() {
65
129
  state = { phase: 'booting', worker: fork() };
130
+ if (options.watch !== undefined)
131
+ poll(options.watch);
66
132
  },
67
133
  message(worker, message) {
68
134
  switch (message.type) {
69
135
  case 'ready':
70
136
  if (state.phase === 'booting' && state.worker === worker) {
71
137
  everServed = true;
72
- state = { phase: 'serving', worker, since: options.now() };
138
+ settle({ ok: true });
139
+ serve(worker, message.pluginsFingerprint);
73
140
  }
74
141
  else if (state.phase === 'replacing' && state.next === worker) {
75
142
  state.deadline.cancel();
76
143
  state.old.send({ type: 'retire' });
77
144
  options.log('Reloaded: the new server is serving and the old one is retiring.');
78
- state = { phase: 'serving', worker, since: options.now() };
145
+ settle({ ok: true });
146
+ serve(worker, message.pluginsFingerprint);
79
147
  }
80
148
  return;
81
149
  case 'boot-failed':
@@ -85,11 +153,11 @@ export function createSupervisor(options) {
85
153
  }
86
154
  return;
87
155
  case 'reload':
88
- if (state.phase === 'serving' && state.worker === worker) {
89
- options.log('Reloading: the running server is draining.');
90
- worker.send({ type: 'drain' });
91
- state = { phase: 'draining', old: worker };
92
- }
156
+ if (state.phase === 'serving' && state.worker === worker)
157
+ beginReload(worker);
158
+ return;
159
+ case 'closed':
160
+ worker.send({ type: 'exit' });
93
161
  return;
94
162
  case 'drained':
95
163
  if (state.phase === 'draining' && state.old === worker) {
@@ -129,8 +197,10 @@ export function createSupervisor(options) {
129
197
  respawnLater(`The server exited${code === null ? '' : ` with code ${String(code)}`}`);
130
198
  return;
131
199
  case 'draining':
132
- if (state.old === worker)
133
- respawnLater('The server exited while it drained');
200
+ if (state.old !== worker)
201
+ return;
202
+ respawnLater('The server exited while it drained');
203
+ settle({ ok: false, error: 'The server exited while it drained.' });
134
204
  return;
135
205
  case 'replacing':
136
206
  if (state.next === worker) {
@@ -145,12 +215,26 @@ export function createSupervisor(options) {
145
215
  return;
146
216
  }
147
217
  },
218
+ reload() {
219
+ if (state.phase === 'stopping') {
220
+ return Promise.resolve({ ok: false, error: 'The server is shutting down.' });
221
+ }
222
+ return new Promise((resolve) => {
223
+ queued.push(resolve);
224
+ if (state.phase === 'serving')
225
+ beginReload(state.worker);
226
+ });
227
+ },
148
228
  stop() {
149
229
  if (state.phase === 'waiting')
150
230
  state.timer.cancel();
151
231
  if (state.phase === 'replacing')
152
232
  state.deadline.cancel();
233
+ polling?.cancel();
153
234
  state = { phase: 'stopping' };
235
+ waiting = [...waiting, ...queued];
236
+ queued = [];
237
+ settle({ ok: false, error: 'The server is shutting down.' });
154
238
  if (live.size === 0) {
155
239
  options.exit(0);
156
240
  return;
@@ -164,12 +248,23 @@ export function createSupervisor(options) {
164
248
  },
165
249
  };
166
250
  }
251
+ function attempt(read) {
252
+ try {
253
+ return read();
254
+ }
255
+ catch {
256
+ return undefined;
257
+ }
258
+ }
167
259
  /**
168
260
  * Run the supervisor over `node:cluster` workers, each of which runs this
169
261
  * same command. SIGTERM and SIGINT reach the supervisor, which is the process
170
- * an image's init signals.
262
+ * an image's init signals. `geekity plugin` reaches it over the control
263
+ * socket for `dataDir`.
171
264
  */
172
- export function superviseCluster() {
265
+ export function superviseCluster(options) {
266
+ const { pluginsDir } = options;
267
+ const log = (line) => process.stderr.write(`${line}\n`);
173
268
  const supervisor = createSupervisor({
174
269
  fork() {
175
270
  const worker = cluster.fork();
@@ -190,6 +285,9 @@ export function superviseCluster() {
190
285
  worker.on('exit', (code) => {
191
286
  supervisor.exited(handle, code);
192
287
  });
288
+ // A message to a worker that is exiting fails with EPIPE; its exit
289
+ // event follows and is what the supervisor acts on.
290
+ worker.on('error', () => undefined);
193
291
  return handle;
194
292
  },
195
293
  schedule(task, ms) {
@@ -197,8 +295,22 @@ export function superviseCluster() {
197
295
  return { cancel: () => clearTimeout(timer) };
198
296
  },
199
297
  now: () => Date.now(),
200
- log: (line) => process.stderr.write(`${line}\n`),
201
- exit: (code) => process.exit(code),
298
+ log,
299
+ exit(code) {
300
+ control.close();
301
+ process.exit(code);
302
+ },
303
+ watch: pluginsDir === undefined || !options.pluginWatch
304
+ ? undefined
305
+ : {
306
+ signature: () => pluginFolderSignature(pluginsDir),
307
+ fingerprint: () => pluginsFingerprint(scanPluginFolders(pluginsDir)),
308
+ },
309
+ });
310
+ const control = listenForControl({
311
+ dataDir: options.dataDir,
312
+ reload: () => supervisor.reload(),
313
+ log,
202
314
  });
203
315
  for (const signal of ['SIGINT', 'SIGTERM']) {
204
316
  process.on(signal, () => supervisor.stop());
@@ -1 +1 @@
1
- {"version":3,"file":"primary.js","sourceRoot":"","sources":["../../src/supervisor/primary.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,OAAO,MAAM,cAAc,CAAC;AAEnC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AA8BhD,4EAA4E;AAC5E,MAAM,eAAe,GAAG,GAAG,CAAC;AAC5B,MAAM,cAAc,GAAG,MAAM,CAAC;AAC9B,yDAAyD;AACzD,MAAM,SAAS,GAAG,MAAM,CAAC;AACzB,4FAA4F;AAC5F,MAAM,cAAc,GAAG,CAAC,GAAG,MAAM,CAAC;AAClC,iFAAiF;AACjF,MAAM,WAAW,GAAG,MAAM,CAAC;AAmB3B,MAAM,UAAU,gBAAgB,CAAC,OAA0B;IACzD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAgB,CAAC;IACrC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAwB,CAAC;IACnD,IAAI,KAAK,GAAU,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;IACzC,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,SAAS,IAAI;QACX,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAC9B,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACjB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,SAAS,YAAY,CAAC,MAAc;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,GAAG,CAAC,IAAI,OAAO,EAAE,cAAc,CAAC,CAAC;QACvE,OAAO,IAAI,CAAC,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,yBAAyB,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC9E,KAAK,GAAG;YACN,KAAK,EAAE,SAAS;YAChB,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,EAAE;gBAC3B,KAAK,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC;YAC/C,CAAC,EAAE,KAAK,CAAC;SACV,CAAC;IACJ,CAAC;IAED,4EAA4E;IAC5E,SAAS,OAAO,CAAC,GAAiB,EAAE,IAAkB,EAAE,KAAa;QACnE,IAAI,KAAK,CAAC,KAAK,KAAK,WAAW;YAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,oDAAoD,KAAK,EAAE,CAAC,CAAC;QACzE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;QACpC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,IAAI,CAAC,IAAI,EAAE,CAAC;QAChC,KAAK,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;IAClE,CAAC;IAED,SAAS,SAAS,CAAC,MAAoB,EAAE,IAAmB;QAC1D,OAAO,CACL,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC;YACtB,wBAAwB,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,MAAM,CAAC,IAAI,CAAC,EAAE,uBAAuB,CACjG,CAAC;IACJ,CAAC;IAED,OAAO;QACL,KAAK;YACH,KAAK,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC;QAC/C,CAAC;QAED,OAAO,CAAC,MAAM,EAAE,OAAO;YACrB,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;gBACrB,KAAK,OAAO;oBACV,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;wBACzD,UAAU,GAAG,IAAI,CAAC;wBAClB,KAAK,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;oBAC7D,CAAC;yBAAM,IAAI,KAAK,CAAC,KAAK,KAAK,WAAW,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;wBAChE,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;wBACxB,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;wBACnC,OAAO,CAAC,GAAG,CAAC,kEAAkE,CAAC,CAAC;wBAChF,KAAK,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;oBAC7D,CAAC;oBACD,OAAO;gBAET,KAAK,aAAa;oBAChB,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;oBACtC,IAAI,KAAK,CAAC,KAAK,KAAK,WAAW,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;wBACzD,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;oBAC5C,CAAC;oBACD,OAAO;gBAET,KAAK,QAAQ;oBACX,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;wBACzD,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;wBAC1D,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;wBAC/B,KAAK,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;oBAC7C,CAAC;oBACD,OAAO;gBAET,KAAK,SAAS;oBACZ,IAAI,KAAK,CAAC,KAAK,KAAK,UAAU,IAAI,KAAK,CAAC,GAAG,KAAK,MAAM,EAAE,CAAC;wBACvD,MAAM,IAAI,GAAG,IAAI,EAAE,CAAC;wBACpB,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,EAAE;4BACrC,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,uCAAuC,CAAC,CAAC;wBACjE,CAAC,EAAE,cAAc,CAAC,CAAC;wBACnB,KAAK,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;oBAC9D,CAAC;oBACD,OAAO;YACX,CAAC;QACH,CAAC;QAED,MAAM,CAAC,MAAM,EAAE,IAAI;YACjB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACpB,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACtC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAE1B,QAAQ,KAAK,CAAC,KAAK,EAAE,CAAC;gBACpB,KAAK,UAAU;oBACb,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC;wBAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBACrC,OAAO;gBAET,KAAK,SAAS;oBACZ,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM;wBAAE,OAAO;oBACpC,IAAI,CAAC,UAAU,EAAE,CAAC;wBAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;wBACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;wBAChB,OAAO;oBACT,CAAC;oBACD,YAAY,CAAC,6BAA6B,KAAK,EAAE,CAAC,CAAC;oBACnD,OAAO;gBAET,KAAK,SAAS;oBACZ,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM;wBAAE,OAAO;oBACpC,IAAI,OAAO,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,KAAK,IAAI,SAAS;wBAAE,OAAO,GAAG,CAAC,CAAC;oBAC1D,YAAY,CAAC,oBAAoB,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;oBACtF,OAAO;gBAET,KAAK,UAAU;oBACb,IAAI,KAAK,CAAC,GAAG,KAAK,MAAM;wBAAE,YAAY,CAAC,oCAAoC,CAAC,CAAC;oBAC7E,OAAO;gBAET,KAAK,WAAW;oBACd,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;wBAC1B,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;oBACpC,CAAC;yBAAM,IAAI,KAAK,CAAC,GAAG,KAAK,MAAM,EAAE,CAAC;wBAChC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;wBACxB,KAAK,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;oBACnD,CAAC;oBACD,OAAO;gBAET,KAAK,SAAS;oBACZ,OAAO;YACX,CAAC;QACH,CAAC;QAED,IAAI;YACF,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;gBAAE,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YACpD,IAAI,KAAK,CAAC,KAAK,KAAK,WAAW;gBAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YACzD,KAAK,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;YAC9B,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;gBACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChB,OAAO;YACT,CAAC;YACD,KAAK,MAAM,MAAM,IAAI,IAAI;gBAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;YAC7D,OAAO,CAAC,QAAQ,CAAC,GAAG,EAAE;gBACpB,KAAK,MAAM,MAAM,IAAI,IAAI;oBAAE,MAAM,CAAC,IAAI,EAAE,CAAC;YAC3C,CAAC,EAAE,WAAW,CAAC,CAAC;QAClB,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB;IAC9B,MAAM,UAAU,GAAG,gBAAgB,CAAC;QAClC,IAAI;YACF,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAiB;gBAC3B,EAAE,EAAE,MAAM,CAAC,EAAE;gBACb,IAAI,CAAC,OAAO;oBACV,IAAI,MAAM,CAAC,WAAW,EAAE;wBAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACjD,CAAC;gBACD,IAAI;oBACF,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACjC,CAAC;aACF,CAAC;YACF,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,OAAgB,EAAE,EAAE;gBACxC,IAAI,eAAe,CAAC,OAAO,CAAC;oBAAE,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACpE,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAmB,EAAE,EAAE;gBACxC,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAClC,CAAC,CAAC,CAAC;YACH,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,QAAQ,CAAC,IAAI,EAAE,EAAE;YACf,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACnC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/C,CAAC;QACD,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;QACrB,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC;QAChD,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;KACnC,CAAC,CAAC;IAEH,KAAK,MAAM,MAAM,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAU,EAAE,CAAC;QACpD,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;IAC9C,CAAC;IACD,UAAU,CAAC,KAAK,EAAE,CAAC;AACrB,CAAC"}
1
+ {"version":3,"file":"primary.js","sourceRoot":"","sources":["../../src/supervisor/primary.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,13 @@
5
5
  * nothing more; a new worker boots and says `ready`; the old one is told to
6
6
  * `retire`. A new worker that does not boot says `boot-failed`, and the old
7
7
  * one is told to `resume`, with the reason.
8
+ *
9
+ * A worker that has closed says `closed` and exits only when told `exit`.
10
+ * Under `node:cluster`'s round-robin the supervisor may have handed this
11
+ * worker a connection just before it stopped listening; the worker sends
12
+ * such a connection back, but only while it runs. The `exit` comes down the
13
+ * same channel as those connections, after them, so none is lost with the
14
+ * process and left unanswered.
8
15
  */
9
16
  /**
10
17
  * How a worker that cannot carry on gives up: it exits with this code, and the
@@ -14,6 +21,7 @@
14
21
  export declare const EXIT_FOR_REPLACEMENT = 1;
15
22
  export type WorkerMessage = {
16
23
  readonly type: 'ready';
24
+ readonly pluginsFingerprint: string;
17
25
  } | {
18
26
  readonly type: 'boot-failed';
19
27
  readonly error: string;
@@ -21,6 +29,8 @@ export type WorkerMessage = {
21
29
  readonly type: 'reload';
22
30
  } | {
23
31
  readonly type: 'drained';
32
+ } | {
33
+ readonly type: 'closed';
24
34
  };
25
35
  export type SupervisorMessage = {
26
36
  readonly type: 'drain';
@@ -31,6 +41,8 @@ export type SupervisorMessage = {
31
41
  readonly type: 'retire';
32
42
  } | {
33
43
  readonly type: 'shutdown';
44
+ } | {
45
+ readonly type: 'exit';
34
46
  };
35
47
  export declare function isWorkerMessage(value: unknown): value is WorkerMessage;
36
48
  export declare function isSupervisorMessage(value: unknown): value is SupervisorMessage;
@@ -1 +1 @@
1
- {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../src/supervisor/protocol.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,IAAI,CAAC;AAEtC,MAAM,MAAM,aAAa,GACrB;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAC1B;IAAE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACxD;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,GAC3B;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC;AAEjC,MAAM,MAAM,iBAAiB,GACzB;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAC1B;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACnD;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,GAC3B;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;CAAE,CAAC;AAKlC,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,aAAa,CAEtE;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,iBAAiB,CAE9E"}
1
+ {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../src/supervisor/protocol.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,IAAI,CAAC;AAEtC,MAAM,MAAM,aAAa,GACrB;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAA;CAAE,GAC/D;IAAE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACxD;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,GAC3B;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;CAAE,GAC5B;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC;AAEhC,MAAM,MAAM,iBAAiB,GACzB;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAC1B;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACnD;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,GAC3B;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;CAAE,GAC7B;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAiB9B,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,aAAa,CAEtE;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,iBAAiB,CAE9E"}
@@ -5,6 +5,13 @@
5
5
  * nothing more; a new worker boots and says `ready`; the old one is told to
6
6
  * `retire`. A new worker that does not boot says `boot-failed`, and the old
7
7
  * one is told to `resume`, with the reason.
8
+ *
9
+ * A worker that has closed says `closed` and exits only when told `exit`.
10
+ * Under `node:cluster`'s round-robin the supervisor may have handed this
11
+ * worker a connection just before it stopped listening; the worker sends
12
+ * such a connection back, but only while it runs. The `exit` comes down the
13
+ * same channel as those connections, after them, so none is lost with the
14
+ * process and left unanswered.
8
15
  */
9
16
  /**
10
17
  * How a worker that cannot carry on gives up: it exits with this code, and the
@@ -12,8 +19,20 @@
12
19
  * worker that exits without being told to.
13
20
  */
14
21
  export const EXIT_FOR_REPLACEMENT = 1;
15
- const WORKER_TYPES = new Set(['ready', 'boot-failed', 'reload', 'drained']);
16
- const SUPERVISOR_TYPES = new Set(['drain', 'resume', 'retire', 'shutdown']);
22
+ const WORKER_TYPES = new Set([
23
+ 'ready',
24
+ 'boot-failed',
25
+ 'reload',
26
+ 'drained',
27
+ 'closed',
28
+ ]);
29
+ const SUPERVISOR_TYPES = new Set([
30
+ 'drain',
31
+ 'resume',
32
+ 'retire',
33
+ 'shutdown',
34
+ 'exit',
35
+ ]);
17
36
  export function isWorkerMessage(value) {
18
37
  return hasType(value, WORKER_TYPES);
19
38
  }
@@ -1 +1 @@
1
- {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../src/supervisor/protocol.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC;AActC,MAAM,YAAY,GAAwB,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;AACjG,MAAM,gBAAgB,GAAwB,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;AAEjG,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,OAAO,OAAO,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAChD,OAAO,OAAO,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,OAAO,CAAC,KAAc,EAAE,KAA0B;IACzD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC9D,MAAM,IAAI,GAAI,KAA4B,CAAC,IAAI,CAAC;IAChD,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACrD,CAAC"}
1
+ {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../src/supervisor/protocol.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC;AAgBtC,MAAM,YAAY,GAAwB,IAAI,GAAG,CAAC;IAChD,OAAO;IACP,aAAa;IACb,QAAQ;IACR,SAAS;IACT,QAAQ;CACT,CAAC,CAAC;AACH,MAAM,gBAAgB,GAAwB,IAAI,GAAG,CAAC;IACpD,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,UAAU;IACV,MAAM;CACP,CAAC,CAAC;AAEH,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,OAAO,OAAO,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAChD,OAAO,OAAO,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,OAAO,CAAC,KAAc,EAAE,KAA0B;IACzD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC9D,MAAM,IAAI,GAAI,KAA4B,CAAC,IAAI,CAAC;IAChD,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACrD,CAAC"}