@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.
- package/README.md +469 -84
- package/admin/layouts/shell.njk +6 -0
- package/admin/pages/comments/all.njk +3 -1
- package/admin/pages/documents/editor.njk +4 -0
- package/admin/pages/federation/followers.njk +8 -2
- package/admin/pages/plugins/installed.njk +1 -1
- package/admin/pages/tools/dev-mode.njk +47 -0
- package/admin/static/admin.css +8 -0
- package/admin/static/editor-actions.js +13 -9
- package/admin/static/editor.js +31 -17
- package/dist/admin/comments.d.ts +2 -0
- package/dist/admin/comments.d.ts.map +1 -1
- package/dist/admin/comments.js +19 -49
- package/dist/admin/comments.js.map +1 -1
- package/dist/admin/dev-mode.d.ts +9 -0
- package/dist/admin/dev-mode.d.ts.map +1 -0
- package/dist/admin/dev-mode.js +42 -0
- package/dist/admin/dev-mode.js.map +1 -0
- package/dist/admin/documents.d.ts +5 -0
- package/dist/admin/documents.d.ts.map +1 -1
- package/dist/admin/documents.js +45 -17
- package/dist/admin/documents.js.map +1 -1
- package/dist/admin/editor-actions.js +3 -1
- package/dist/admin/editor-actions.js.map +1 -1
- package/dist/admin/federation.d.ts +21 -1
- package/dist/admin/federation.d.ts.map +1 -1
- package/dist/admin/federation.js +19 -7
- package/dist/admin/federation.js.map +1 -1
- package/dist/admin/menu.d.ts.map +1 -1
- package/dist/admin/menu.js +2 -0
- package/dist/admin/menu.js.map +1 -1
- package/dist/admin/own-paragraph.d.ts +7 -0
- package/dist/admin/own-paragraph.d.ts.map +1 -0
- package/dist/admin/own-paragraph.js +9 -0
- package/dist/admin/own-paragraph.js.map +1 -0
- package/dist/admin/plugins.d.ts.map +1 -1
- package/dist/admin/plugins.js +19 -8
- package/dist/admin/plugins.js.map +1 -1
- package/dist/admin/preview.d.ts.map +1 -1
- package/dist/admin/preview.js +4 -1
- package/dist/admin/preview.js.map +1 -1
- package/dist/admin/routes.d.ts.map +1 -1
- package/dist/admin/routes.js +4 -0
- package/dist/admin/routes.js.map +1 -1
- package/dist/admin/settings-email.d.ts.map +1 -1
- package/dist/admin/settings-email.js +4 -0
- package/dist/admin/settings-email.js.map +1 -1
- package/dist/admin/store.d.ts +68 -12
- package/dist/admin/store.d.ts.map +1 -1
- package/dist/admin/store.js +167 -18
- package/dist/admin/store.js.map +1 -1
- package/dist/admin/templates.d.ts +1 -0
- package/dist/admin/templates.d.ts.map +1 -1
- package/dist/admin/templates.js +1 -0
- package/dist/admin/templates.js.map +1 -1
- package/dist/admin/uploads.d.ts +7 -1
- package/dist/admin/uploads.d.ts.map +1 -1
- package/dist/admin/uploads.js +33 -30
- package/dist/admin/uploads.js.map +1 -1
- package/dist/cli.d.ts +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +78 -12
- package/dist/cli.js.map +1 -1
- package/dist/comments/form.d.ts +3 -1
- package/dist/comments/form.d.ts.map +1 -1
- package/dist/comments/form.js +2 -1
- package/dist/comments/form.js.map +1 -1
- package/dist/comments/index.d.ts +2 -2
- package/dist/comments/index.d.ts.map +1 -1
- package/dist/comments/index.js +1 -1
- package/dist/comments/index.js.map +1 -1
- package/dist/comments/records.d.ts +25 -20
- package/dist/comments/records.d.ts.map +1 -1
- package/dist/comments/records.js +113 -33
- package/dist/comments/records.js.map +1 -1
- package/dist/comments/reply-notices.d.ts +42 -0
- package/dist/comments/reply-notices.d.ts.map +1 -0
- package/dist/comments/reply-notices.js +76 -0
- package/dist/comments/reply-notices.js.map +1 -0
- package/dist/comments/reply-post.d.ts +49 -0
- package/dist/comments/reply-post.d.ts.map +1 -0
- package/dist/comments/reply-post.js +66 -0
- package/dist/comments/reply-post.js.map +1 -0
- package/dist/comments/routes.d.ts +6 -1
- package/dist/comments/routes.d.ts.map +1 -1
- package/dist/comments/routes.js +49 -21
- package/dist/comments/routes.js.map +1 -1
- package/dist/comments/submission.d.ts +8 -25
- package/dist/comments/submission.d.ts.map +1 -1
- package/dist/comments/submission.js +19 -38
- package/dist/comments/submission.js.map +1 -1
- package/dist/comments/viewer.d.ts.map +1 -1
- package/dist/comments/viewer.js +1 -0
- package/dist/comments/viewer.js.map +1 -1
- package/dist/config.d.ts +21 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +2 -0
- package/dist/config.js.map +1 -1
- package/dist/content/citation.d.ts +1 -0
- package/dist/content/citation.d.ts.map +1 -1
- package/dist/content/citation.js +2 -0
- package/dist/content/citation.js.map +1 -1
- package/dist/content/markdown.d.ts.map +1 -1
- package/dist/content/markdown.js +33 -1
- package/dist/content/markdown.js.map +1 -1
- package/dist/content/migrated.d.ts +6 -0
- package/dist/content/migrated.d.ts.map +1 -0
- package/dist/content/migrated.js +12 -0
- package/dist/content/migrated.js.map +1 -0
- package/dist/content/original.d.ts +8 -0
- package/dist/content/original.d.ts.map +1 -0
- package/dist/content/original.js +15 -0
- package/dist/content/original.js.map +1 -0
- package/dist/content/parser.d.ts +5 -0
- package/dist/content/parser.d.ts.map +1 -1
- package/dist/content/parser.js +1 -1
- package/dist/content/parser.js.map +1 -1
- package/dist/content/schedule.d.ts +7 -0
- package/dist/content/schedule.d.ts.map +1 -1
- package/dist/content/schedule.js +11 -2
- package/dist/content/schedule.js.map +1 -1
- package/dist/content/store.d.ts +43 -11
- package/dist/content/store.d.ts.map +1 -1
- package/dist/content/store.js +170 -10
- package/dist/content/store.js.map +1 -1
- package/dist/content/sync.d.ts +8 -0
- package/dist/content/sync.d.ts.map +1 -1
- package/dist/content/sync.js +172 -57
- package/dist/content/sync.js.map +1 -1
- package/dist/content/video.d.ts +12 -0
- package/dist/content/video.d.ts.map +1 -0
- package/dist/content/video.js +91 -0
- package/dist/content/video.js.map +1 -0
- package/dist/dev-mode.d.ts +28 -0
- package/dist/dev-mode.d.ts.map +1 -0
- package/dist/dev-mode.js +64 -0
- package/dist/dev-mode.js.map +1 -0
- package/dist/drain.d.ts +9 -3
- package/dist/drain.d.ts.map +1 -1
- package/dist/drain.js +24 -3
- package/dist/drain.js.map +1 -1
- package/dist/federation/article.d.ts.map +1 -1
- package/dist/federation/article.js +2 -1
- package/dist/federation/article.js.map +1 -1
- package/dist/federation/backfill.d.ts +114 -0
- package/dist/federation/backfill.d.ts.map +1 -0
- package/dist/federation/backfill.js +312 -0
- package/dist/federation/backfill.js.map +1 -0
- package/dist/federation/delivery.d.ts +2 -0
- package/dist/federation/delivery.d.ts.map +1 -1
- package/dist/federation/delivery.js +46 -16
- package/dist/federation/delivery.js.map +1 -1
- package/dist/federation/inbox.d.ts.map +1 -1
- package/dist/federation/inbox.js +14 -4
- package/dist/federation/inbox.js.map +1 -1
- package/dist/federation/mount.d.ts.map +1 -1
- package/dist/federation/mount.js +8 -4
- package/dist/federation/mount.js.map +1 -1
- package/dist/federation/records.d.ts +13 -0
- package/dist/federation/records.d.ts.map +1 -1
- package/dist/federation/records.js +49 -10
- package/dist/federation/records.js.map +1 -1
- package/dist/federation/relays.d.ts.map +1 -1
- package/dist/federation/relays.js +16 -1
- package/dist/federation/relays.js.map +1 -1
- package/dist/federation/replies.d.ts +6 -0
- package/dist/federation/replies.d.ts.map +1 -1
- package/dist/federation/replies.js +18 -1
- package/dist/federation/replies.js.map +1 -1
- package/dist/index.d.ts +13 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +95 -14
- package/dist/index.js.map +1 -1
- package/dist/indexnow.d.ts +1 -1
- package/dist/indexnow.d.ts.map +1 -1
- package/dist/indexnow.js +7 -0
- package/dist/indexnow.js.map +1 -1
- package/dist/init.d.ts +1 -1
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +1 -7
- package/dist/init.js.map +1 -1
- package/dist/mail/service.d.ts +3 -1
- package/dist/mail/service.d.ts.map +1 -1
- package/dist/mail/service.js +17 -0
- package/dist/mail/service.js.map +1 -1
- package/dist/notify.d.ts +1 -1
- package/dist/notify.d.ts.map +1 -1
- package/dist/notify.js +7 -0
- package/dist/notify.js.map +1 -1
- package/dist/plugin.d.ts +67 -4
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js.map +1 -1
- package/dist/plugins/folder.d.ts +2 -0
- package/dist/plugins/folder.d.ts.map +1 -1
- package/dist/plugins/folder.js +26 -5
- package/dist/plugins/folder.js.map +1 -1
- package/dist/plugins/manage.d.ts +8 -6
- package/dist/plugins/manage.d.ts.map +1 -1
- package/dist/plugins/manage.js +1 -4
- package/dist/plugins/manage.js.map +1 -1
- package/dist/plugins/site.d.ts.map +1 -1
- package/dist/plugins/site.js +56 -0
- package/dist/plugins/site.js.map +1 -1
- package/dist/supervisor/control.d.ts +15 -0
- package/dist/supervisor/control.d.ts.map +1 -0
- package/dist/supervisor/control.js +89 -0
- package/dist/supervisor/control.js.map +1 -0
- package/dist/supervisor/primary.d.ts +18 -4
- package/dist/supervisor/primary.d.ts.map +1 -1
- package/dist/supervisor/primary.js +128 -16
- package/dist/supervisor/primary.js.map +1 -1
- package/dist/supervisor/protocol.d.ts +12 -0
- package/dist/supervisor/protocol.d.ts.map +1 -1
- package/dist/supervisor/protocol.js +21 -2
- package/dist/supervisor/protocol.js.map +1 -1
- package/dist/supervisor/supervision.d.ts +1 -0
- package/dist/supervisor/supervision.d.ts.map +1 -1
- package/dist/supervisor/supervision.js +14 -1
- package/dist/supervisor/supervision.js.map +1 -1
- package/dist/supervisor/worker.d.ts.map +1 -1
- package/dist/supervisor/worker.js +31 -6
- package/dist/supervisor/worker.js.map +1 -1
- package/dist/web/context.d.ts +22 -0
- package/dist/web/context.d.ts.map +1 -1
- package/dist/web/context.js +20 -4
- package/dist/web/context.js.map +1 -1
- package/dist/web/conversation.d.ts +155 -16
- package/dist/web/conversation.d.ts.map +1 -1
- package/dist/web/conversation.js +602 -135
- package/dist/web/conversation.js.map +1 -1
- package/dist/web/documents.d.ts +0 -22
- package/dist/web/documents.d.ts.map +1 -1
- package/dist/web/documents.js +1 -34
- package/dist/web/documents.js.map +1 -1
- package/dist/web/feed-item.d.ts +19 -14
- package/dist/web/feed-item.d.ts.map +1 -1
- package/dist/web/feed-item.js +10 -9
- package/dist/web/feed-item.js.map +1 -1
- package/dist/web/feed-rss.d.ts +2 -2
- package/dist/web/feed-rss.d.ts.map +1 -1
- package/dist/web/feed-rss.js +36 -12
- package/dist/web/feed-rss.js.map +1 -1
- package/dist/web/feed-source.d.ts +30 -1
- package/dist/web/feed-source.d.ts.map +1 -1
- package/dist/web/feed-source.js +25 -0
- package/dist/web/feed-source.js.map +1 -1
- package/dist/web/feeds.d.ts +1 -1
- package/dist/web/feeds.d.ts.map +1 -1
- package/dist/web/feeds.js +7 -2
- package/dist/web/feeds.js.map +1 -1
- package/dist/web/guids.d.ts +59 -0
- package/dist/web/guids.d.ts.map +1 -0
- package/dist/web/guids.js +79 -0
- package/dist/web/guids.js.map +1 -0
- package/dist/web/index.d.ts +5 -6
- package/dist/web/index.d.ts.map +1 -1
- package/dist/web/index.js +3 -3
- package/dist/web/index.js.map +1 -1
- package/dist/web/redirects.d.ts +29 -10
- package/dist/web/redirects.d.ts.map +1 -1
- package/dist/web/redirects.js +99 -53
- package/dist/web/redirects.js.map +1 -1
- package/dist/web/render.d.ts +19 -9
- package/dist/web/render.d.ts.map +1 -1
- package/dist/web/render.js +44 -42
- package/dist/web/render.js.map +1 -1
- package/dist/web/routes.d.ts +2 -2
- package/dist/web/routes.d.ts.map +1 -1
- package/dist/web/routes.js +94 -31
- package/dist/web/routes.js.map +1 -1
- package/dist/webmention/index.d.ts +1 -1
- package/dist/webmention/index.d.ts.map +1 -1
- package/dist/webmention/index.js +1 -1
- package/dist/webmention/index.js.map +1 -1
- package/dist/webmention/links.d.ts +55 -0
- package/dist/webmention/links.d.ts.map +1 -1
- package/dist/webmention/links.js +162 -0
- package/dist/webmention/links.js.map +1 -1
- package/dist/webmention/microformats.d.ts +15 -0
- package/dist/webmention/microformats.d.ts.map +1 -1
- package/dist/webmention/microformats.js +63 -1
- package/dist/webmention/microformats.js.map +1 -1
- package/dist/webmention/pingback.js +2 -1
- package/dist/webmention/pingback.js.map +1 -1
- package/dist/webmention/receive.d.ts +5 -0
- package/dist/webmention/receive.d.ts.map +1 -1
- package/dist/webmention/receive.js +99 -3
- package/dist/webmention/receive.js.map +1 -1
- package/dist/webmention/reply-context.d.ts +15 -0
- package/dist/webmention/reply-context.d.ts.map +1 -1
- package/dist/webmention/reply-context.js +29 -0
- package/dist/webmention/reply-context.js.map +1 -1
- package/dist/webmention/reply-contexts.d.ts +6 -0
- package/dist/webmention/reply-contexts.d.ts.map +1 -1
- package/dist/webmention/reply-contexts.js +16 -10
- package/dist/webmention/reply-contexts.js.map +1 -1
- package/dist/webmention/routes.d.ts.map +1 -1
- package/dist/webmention/routes.js +2 -1
- package/dist/webmention/routes.js.map +1 -1
- package/dist/webmention/service.d.ts +31 -2
- package/dist/webmention/service.d.ts.map +1 -1
- package/dist/webmention/service.js +183 -33
- package/dist/webmention/service.js.map +1 -1
- package/package.json +1 -2
- package/themes/default/README.md +390 -75
- package/themes/default/layouts/base.njk +19 -2
- package/themes/default/layouts/comment.njk +90 -0
- package/themes/default/layouts/front-page.njk +9 -47
- package/themes/default/layouts/page.njk +2 -0
- package/themes/default/layouts/post.njk +22 -4
- package/themes/default/partials/backlinks.njk +19 -0
- package/themes/default/partials/body-end.njk +1 -0
- package/themes/default/partials/cited-page.njk +3 -1
- package/themes/default/partials/comment-form.njk +10 -0
- package/themes/default/partials/comment.njk +79 -0
- package/themes/default/partials/conversation.njk +14 -59
- package/themes/default/partials/head-end.njk +1 -0
- package/themes/default/src/style.css +46 -0
- package/themes/default/static/style.css +75 -0
package/dist/plugins/site.js
CHANGED
|
@@ -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
|
package/dist/plugins/site.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"site.js","sourceRoot":"","sources":["../../src/plugins/site.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;
|
|
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
|
|
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(
|
|
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;
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
90
|
-
|
|
91
|
-
|
|
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
|
|
133
|
-
|
|
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
|
|
201
|
-
exit
|
|
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":"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"}
|
|
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
|
|
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([
|
|
16
|
-
|
|
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
|
|
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"}
|