@geekity/cms 0.35.0 → 0.37.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/admin/components/blocks.njk +250 -0
- package/admin/components/card.njk +4 -2
- package/admin/components/job-status.njk +15 -10
- package/admin/components/upload.njk +26 -0
- package/admin/pages/comments/all.njk +1 -1
- package/admin/pages/dashboard/home.njk +33 -32
- package/admin/pages/documents/editor.njk +34 -19
- package/admin/pages/federation/followers.njk +3 -2
- package/admin/pages/media/file.njk +5 -4
- package/admin/pages/media/library.njk +7 -3
- package/admin/pages/plugins/screen.njk +5 -35
- package/admin/pages/settings/general.njk +4 -1
- package/admin/pages/tools/export.njk +54 -51
- package/admin/pages/tools/maintenance.njk +2 -1
- package/admin/pages/users/edit.njk +3 -0
- package/admin/src/admin.css +1 -0
- package/admin/static/admin.css +374 -0
- package/admin/static/job-status.js +158 -0
- package/admin/static/upload-drop.js +225 -0
- package/dist/admin/blocks.d.ts +133 -0
- package/dist/admin/blocks.d.ts.map +1 -0
- package/dist/admin/blocks.js +454 -0
- package/dist/admin/blocks.js.map +1 -0
- package/dist/admin/core-widgets.d.ts +3 -0
- package/dist/admin/core-widgets.d.ts.map +1 -0
- package/dist/admin/core-widgets.js +17 -0
- package/dist/admin/core-widgets.js.map +1 -0
- package/dist/admin/documents.d.ts.map +1 -1
- package/dist/admin/documents.js +0 -2
- package/dist/admin/documents.js.map +1 -1
- package/dist/admin/engagement.d.ts +16 -0
- package/dist/admin/engagement.d.ts.map +1 -0
- package/dist/admin/engagement.js +38 -0
- package/dist/admin/engagement.js.map +1 -0
- package/dist/admin/federation.d.ts +2 -0
- package/dist/admin/federation.d.ts.map +1 -1
- package/dist/admin/federation.js +2 -1
- package/dist/admin/federation.js.map +1 -1
- package/dist/admin/formatting.d.ts +1 -0
- package/dist/admin/formatting.d.ts.map +1 -1
- package/dist/admin/formatting.js +18 -0
- package/dist/admin/formatting.js.map +1 -1
- package/dist/admin/index.d.ts +2 -2
- package/dist/admin/index.d.ts.map +1 -1
- package/dist/admin/index.js +2 -2
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/job-status.d.ts +1 -0
- package/dist/admin/job-status.d.ts.map +1 -1
- package/dist/admin/job-status.js +1 -0
- package/dist/admin/job-status.js.map +1 -1
- package/dist/admin/media.d.ts +6 -9
- package/dist/admin/media.d.ts.map +1 -1
- package/dist/admin/media.js +85 -27
- package/dist/admin/media.js.map +1 -1
- package/dist/admin/posts-by-path.d.ts +11 -0
- package/dist/admin/posts-by-path.d.ts.map +1 -0
- package/dist/admin/posts-by-path.js +59 -0
- package/dist/admin/posts-by-path.js.map +1 -0
- package/dist/admin/routes.d.ts +0 -2
- package/dist/admin/routes.d.ts.map +1 -1
- package/dist/admin/routes.js +24 -12
- package/dist/admin/routes.js.map +1 -1
- package/dist/admin/templates.d.ts.map +1 -1
- package/dist/admin/templates.js +2 -0
- package/dist/admin/templates.js.map +1 -1
- package/dist/admin/tools.js +1 -1
- package/dist/admin/tools.js.map +1 -1
- package/dist/admin/uploads.d.ts +2 -1
- package/dist/admin/uploads.d.ts.map +1 -1
- package/dist/admin/uploads.js +5 -2
- package/dist/admin/uploads.js.map +1 -1
- package/dist/admin/widget-fediverse.d.ts +3 -0
- package/dist/admin/widget-fediverse.d.ts.map +1 -0
- package/dist/admin/widget-fediverse.js +49 -0
- package/dist/admin/widget-fediverse.js.map +1 -0
- package/dist/admin/widget-followers.d.ts +3 -0
- package/dist/admin/widget-followers.d.ts.map +1 -0
- package/dist/admin/widget-followers.js +37 -0
- package/dist/admin/widget-followers.js.map +1 -0
- package/dist/admin/widget-health.d.ts +3 -0
- package/dist/admin/widget-health.d.ts.map +1 -0
- package/dist/admin/widget-health.js +103 -0
- package/dist/admin/widget-health.js.map +1 -0
- package/dist/admin/widget-interactions.d.ts +4 -0
- package/dist/admin/widget-interactions.d.ts.map +1 -0
- package/dist/admin/widget-interactions.js +99 -0
- package/dist/admin/widget-interactions.js.map +1 -0
- package/dist/admin/widget-posting.d.ts +3 -0
- package/dist/admin/widget-posting.d.ts.map +1 -0
- package/dist/admin/widget-posting.js +111 -0
- package/dist/admin/widget-posting.js.map +1 -0
- package/dist/admin/widget-scheduled.d.ts +4 -0
- package/dist/admin/widget-scheduled.d.ts.map +1 -0
- package/dist/admin/widget-scheduled.js +30 -0
- package/dist/admin/widget-scheduled.js.map +1 -0
- package/dist/admin/widget-top-posts.d.ts +4 -0
- package/dist/admin/widget-top-posts.d.ts.map +1 -0
- package/dist/admin/widget-top-posts.js +55 -0
- package/dist/admin/widget-top-posts.js.map +1 -0
- package/dist/admin/widgets.d.ts +35 -0
- package/dist/admin/widgets.d.ts.map +1 -0
- package/dist/admin/widgets.js +103 -0
- package/dist/admin/widgets.js.map +1 -0
- package/dist/cms/app.d.ts.map +1 -1
- package/dist/cms/app.js +2 -1
- package/dist/cms/app.js.map +1 -1
- package/dist/cms/boot.d.ts.map +1 -1
- package/dist/cms/boot.js +3 -2
- package/dist/cms/boot.js.map +1 -1
- package/dist/cms/services.d.ts.map +1 -1
- package/dist/cms/services.js +19 -0
- package/dist/cms/services.js.map +1 -1
- package/dist/content/alt-text.d.ts +1 -0
- package/dist/content/alt-text.d.ts.map +1 -1
- package/dist/content/alt-text.js +26 -1
- package/dist/content/alt-text.js.map +1 -1
- package/dist/content/sqlite/catalog.d.ts.map +1 -1
- package/dist/content/sqlite/catalog.js +15 -2
- package/dist/content/sqlite/catalog.js.map +1 -1
- package/dist/content/store.d.ts +10 -0
- package/dist/content/store.d.ts.map +1 -1
- package/dist/content/store.js.map +1 -1
- package/dist/content/write.d.ts.map +1 -1
- package/dist/content/write.js +3 -1
- package/dist/content/write.js.map +1 -1
- package/dist/federation/backfill.d.ts +1 -1
- package/dist/federation/backfill.d.ts.map +1 -1
- package/dist/federation/backfill.js +5 -1
- package/dist/federation/backfill.js.map +1 -1
- package/dist/federation/follower-history.d.ts +16 -0
- package/dist/federation/follower-history.d.ts.map +1 -0
- package/dist/federation/follower-history.js +61 -0
- package/dist/federation/follower-history.js.map +1 -0
- package/dist/federation/inbox.d.ts.map +1 -1
- package/dist/federation/inbox.js +2 -1
- package/dist/federation/inbox.js.map +1 -1
- package/dist/federation/records.d.ts +1 -0
- package/dist/federation/records.d.ts.map +1 -1
- package/dist/federation/records.js +24 -6
- package/dist/federation/records.js.map +1 -1
- package/dist/files/data-files.d.ts +1 -0
- package/dist/files/data-files.d.ts.map +1 -1
- package/dist/files/data-files.js +6 -0
- package/dist/files/data-files.js.map +1 -1
- package/dist/jobs/queue.d.ts.map +1 -1
- package/dist/jobs/queue.js +5 -0
- package/dist/jobs/queue.js.map +1 -1
- package/dist/jobs/types.d.ts +7 -0
- package/dist/jobs/types.d.ts.map +1 -1
- package/dist/jobs/types.js.map +1 -1
- package/dist/media/library.d.ts +9 -0
- package/dist/media/library.d.ts.map +1 -1
- package/dist/media/library.js +25 -1
- package/dist/media/library.js.map +1 -1
- package/dist/plugin.d.ts +275 -21
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +9 -8
- package/dist/plugin.js.map +1 -1
- package/dist/plugins/fetch.d.ts +0 -5
- package/dist/plugins/fetch.d.ts.map +1 -1
- package/dist/plugins/fetch.js +31 -7
- package/dist/plugins/fetch.js.map +1 -1
- package/dist/plugins/host-api.d.ts +3 -0
- package/dist/plugins/host-api.d.ts.map +1 -0
- package/dist/plugins/host-api.js +8 -0
- package/dist/plugins/host-api.js.map +1 -0
- package/dist/plugins/install.d.ts.map +1 -1
- package/dist/plugins/install.js +4 -2
- package/dist/plugins/install.js.map +1 -1
- package/dist/plugins/page-tags.d.ts +8 -0
- package/dist/plugins/page-tags.d.ts.map +1 -0
- package/dist/plugins/page-tags.js +73 -0
- package/dist/plugins/page-tags.js.map +1 -0
- package/dist/plugins/registry.d.ts +4 -1
- package/dist/plugins/registry.d.ts.map +1 -1
- package/dist/plugins/registry.js +50 -9
- package/dist/plugins/registry.js.map +1 -1
- package/dist/plugins/site.js +1 -1
- package/dist/plugins/site.js.map +1 -1
- package/dist/store/admin-store.d.ts +2 -2
- package/dist/store/admin-store.d.ts.map +1 -1
- package/dist/store/admin-store.js.map +1 -1
- package/dist/store/comments.d.ts +7 -0
- package/dist/store/comments.d.ts.map +1 -1
- package/dist/store/comments.js +21 -0
- package/dist/store/comments.js.map +1 -1
- package/dist/store/deliveries.d.ts +1 -0
- package/dist/store/deliveries.d.ts.map +1 -1
- package/dist/store/deliveries.js +6 -0
- package/dist/store/deliveries.js.map +1 -1
- package/dist/store/inbox.d.ts +16 -0
- package/dist/store/inbox.d.ts.map +1 -1
- package/dist/store/inbox.js +62 -0
- package/dist/store/inbox.js.map +1 -1
- package/dist/store/queue-database.d.ts +6 -0
- package/dist/store/queue-database.d.ts.map +1 -1
- package/dist/store/queue-database.js +16 -1
- package/dist/store/queue-database.js.map +1 -1
- package/dist/store/webmentions.d.ts +1 -0
- package/dist/store/webmentions.d.ts.map +1 -1
- package/dist/store/webmentions.js +6 -0
- package/dist/store/webmentions.js.map +1 -1
- package/dist/web/env.d.ts +3 -0
- package/dist/web/env.d.ts.map +1 -1
- package/dist/web/feed-item.d.ts +4 -3
- package/dist/web/feed-item.d.ts.map +1 -1
- package/dist/web/feed-item.js +8 -2
- package/dist/web/feed-item.js.map +1 -1
- package/dist/web/listing-pages.d.ts.map +1 -1
- package/dist/web/listing-pages.js +7 -2
- package/dist/web/listing-pages.js.map +1 -1
- package/dist/web/page-tags.d.ts +4 -0
- package/dist/web/page-tags.d.ts.map +1 -0
- package/dist/web/page-tags.js +39 -0
- package/dist/web/page-tags.js.map +1 -0
- package/dist/web/render.d.ts +2 -0
- package/dist/web/render.d.ts.map +1 -1
- package/dist/web/render.js +14 -0
- package/dist/web/render.js.map +1 -1
- package/dist/web/routes.d.ts +2 -1
- package/dist/web/routes.d.ts.map +1 -1
- package/dist/web/routes.js +3 -1
- package/dist/web/routes.js.map +1 -1
- package/package.json +6 -1
- package/themes/default/layouts/base.njk +6 -4
- package/dist/comments/routes.d.ts +0 -65
- package/dist/comments/routes.d.ts.map +0 -1
- package/dist/comments/routes.js +0 -235
- package/dist/comments/routes.js.map +0 -1
- package/dist/content/media.d.ts +0 -85
- package/dist/content/media.d.ts.map +0 -1
- package/dist/content/media.js +0 -237
- package/dist/content/media.js.map +0 -1
- package/dist/content/read-form.d.ts +0 -31
- package/dist/content/read-form.d.ts.map +0 -1
- package/dist/content/read-form.js +0 -157
- package/dist/content/read-form.js.map +0 -1
- package/dist/content/read.d.ts +0 -29
- package/dist/content/read.d.ts.map +0 -1
- package/dist/content/read.js +0 -82
- package/dist/content/read.js.map +0 -1
- package/dist/export/export-archives.d.ts +0 -29
- package/dist/export/export-archives.d.ts.map +0 -1
- package/dist/export/export-archives.js +0 -88
- package/dist/export/export-archives.js.map +0 -1
- package/dist/federation/mount.d.ts +0 -53
- package/dist/federation/mount.d.ts.map +0 -1
- package/dist/federation/mount.js +0 -344
- package/dist/federation/mount.js.map +0 -1
- package/dist/mail/credentials.d.ts +0 -62
- package/dist/mail/credentials.d.ts.map +0 -1
- package/dist/mail/credentials.js +0 -86
- package/dist/mail/credentials.js.map +0 -1
- package/dist/site/setting-rows.d.ts +0 -45
- package/dist/site/setting-rows.d.ts.map +0 -1
- package/dist/site/setting-rows.js +0 -361
- package/dist/site/setting-rows.js.map +0 -1
- package/dist/site/settings-form.d.ts +0 -30
- package/dist/site/settings-form.d.ts.map +0 -1
- package/dist/site/settings-form.js +0 -54
- package/dist/site/settings-form.js.map +0 -1
- package/dist/site/site-json.d.ts +0 -38
- package/dist/site/site-json.d.ts.map +0 -1
- package/dist/site/site-json.js +0 -69
- package/dist/site/site-json.js.map +0 -1
- package/dist/webmention/routes.d.ts +0 -37
- package/dist/webmention/routes.d.ts.map +0 -1
- package/dist/webmention/routes.js +0 -75
- package/dist/webmention/routes.js.map +0 -1
package/dist/site/site-json.d.ts
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import type { SiteSettings } from './settings.ts';
|
|
2
|
-
export declare function parseSiteJson(source: string): Record<string, unknown>;
|
|
3
|
-
/** The absolute path of one site's `content/_data/site.json`. */
|
|
4
|
-
export declare function siteDataPath(contentDir: string): string;
|
|
5
|
-
export declare function settingsFromSiteJson(file: Record<string, unknown>): SiteSettings;
|
|
6
|
-
export declare function siteJsonFor(settings: SiteSettings, existing?: Record<string, unknown>): Record<string, unknown>;
|
|
7
|
-
/** The bytes of one settings object, as the file holds them. */
|
|
8
|
-
export declare function siteJsonText(settings: SiteSettings, existing: Record<string, unknown>): string;
|
|
9
|
-
/**
|
|
10
|
-
* Rewrite `content/_data/site.json` as these settings, keeping the keys they
|
|
11
|
-
* do not model.
|
|
12
|
-
*
|
|
13
|
-
* {@link updateSiteSettings} for a caller whose new settings depend on the old
|
|
14
|
-
* ones, which every screen's is: this is for the callers that have the whole
|
|
15
|
-
* object already, a test's set-up among them.
|
|
16
|
-
*/
|
|
17
|
-
export declare function writeSiteJson(options: {
|
|
18
|
-
contentDir: string;
|
|
19
|
-
settings: SiteSettings;
|
|
20
|
-
}): Promise<void>;
|
|
21
|
-
/**
|
|
22
|
-
* Change the settings: re-read the file, apply the change, write it back, with
|
|
23
|
-
* nothing able to write that file in between ({@link updateFileAtomically}).
|
|
24
|
-
*
|
|
25
|
-
* The re-read is what makes the file win the way it wins for a post
|
|
26
|
-
* (decision-9). Two people with the settings screen open both save what they
|
|
27
|
-
* see, and the second save is applied to what the first one actually wrote
|
|
28
|
-
* rather than to what the second one had on screen — so a change to a field
|
|
29
|
-
* the second person did not touch survives. The write is a temporary file and
|
|
30
|
-
* a rename, so a reader — an Eleventy build, the site data source, another
|
|
31
|
-
* process entirely — never sees a half-written file. Keys the settings do not
|
|
32
|
-
* model, `feedSize` and anything a site added, are kept.
|
|
33
|
-
*/
|
|
34
|
-
export declare function updateSiteSettings(options: {
|
|
35
|
-
contentDir: string;
|
|
36
|
-
change: (current: SiteSettings) => SiteSettings;
|
|
37
|
-
}): Promise<SiteSettings>;
|
|
38
|
-
//# sourceMappingURL=site-json.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"site-json.d.ts","sourceRoot":"","sources":["../../src/site/site-json.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAIlD,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAQrE;AAED,iEAAiE;AACjE,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,YAAY,CAEhF;AAED,wBAAgB,WAAW,CACzB,QAAQ,EAAE,YAAY,EACtB,QAAQ,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACrC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAIzB;AAED,gEAAgE;AAChE,wBAAgB,YAAY,CAAC,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAE9F;AAED;;;;;;;GAOG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE;IAC3C,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,YAAY,CAAC;CACxB,GAAG,OAAO,CAAC,IAAI,CAAC,CAEhB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE;IAChD,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,YAAY,CAAC;CACjD,GAAG,OAAO,CAAC,YAAY,CAAC,CAUxB"}
|
package/dist/site/site-json.js
DELETED
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import path from 'node:path';
|
|
2
|
-
import { updateFileAtomically } from '../files/atomic.js';
|
|
3
|
-
import { fileWith, storedValues } from '../settings/registry.js';
|
|
4
|
-
import { isRecord } from '../util/guards.js';
|
|
5
|
-
import { SITE_DATA_FILE } from '../theme/site-data.js';
|
|
6
|
-
import { SITE } from './namespace.js';
|
|
7
|
-
import { DEFAULT_SITE_SETTINGS } from './settings.js';
|
|
8
|
-
const RETIRED_KEYS = ['navigation', 'soloAuthor'];
|
|
9
|
-
export function parseSiteJson(source) {
|
|
10
|
-
let parsed;
|
|
11
|
-
try {
|
|
12
|
-
parsed = JSON.parse(source);
|
|
13
|
-
}
|
|
14
|
-
catch {
|
|
15
|
-
return {};
|
|
16
|
-
}
|
|
17
|
-
return isRecord(parsed) ? parsed : {};
|
|
18
|
-
}
|
|
19
|
-
/** The absolute path of one site's `content/_data/site.json`. */
|
|
20
|
-
export function siteDataPath(contentDir) {
|
|
21
|
-
return path.join(contentDir, ...SITE_DATA_FILE.split('/'));
|
|
22
|
-
}
|
|
23
|
-
export function settingsFromSiteJson(file) {
|
|
24
|
-
return storedValues(SITE, file);
|
|
25
|
-
}
|
|
26
|
-
export function siteJsonFor(settings, existing = {}) {
|
|
27
|
-
const file = fileWith(SITE, settings, existing);
|
|
28
|
-
for (const key of RETIRED_KEYS)
|
|
29
|
-
delete file[key];
|
|
30
|
-
return file;
|
|
31
|
-
}
|
|
32
|
-
/** The bytes of one settings object, as the file holds them. */
|
|
33
|
-
export function siteJsonText(settings, existing) {
|
|
34
|
-
return `${JSON.stringify(siteJsonFor(settings, existing), null, 2)}\n`;
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Rewrite `content/_data/site.json` as these settings, keeping the keys they
|
|
38
|
-
* do not model.
|
|
39
|
-
*
|
|
40
|
-
* {@link updateSiteSettings} for a caller whose new settings depend on the old
|
|
41
|
-
* ones, which every screen's is: this is for the callers that have the whole
|
|
42
|
-
* object already, a test's set-up among them.
|
|
43
|
-
*/
|
|
44
|
-
export async function writeSiteJson(options) {
|
|
45
|
-
await updateSiteSettings({ contentDir: options.contentDir, change: () => options.settings });
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Change the settings: re-read the file, apply the change, write it back, with
|
|
49
|
-
* nothing able to write that file in between ({@link updateFileAtomically}).
|
|
50
|
-
*
|
|
51
|
-
* The re-read is what makes the file win the way it wins for a post
|
|
52
|
-
* (decision-9). Two people with the settings screen open both save what they
|
|
53
|
-
* see, and the second save is applied to what the first one actually wrote
|
|
54
|
-
* rather than to what the second one had on screen — so a change to a field
|
|
55
|
-
* the second person did not touch survives. The write is a temporary file and
|
|
56
|
-
* a rename, so a reader — an Eleventy build, the site data source, another
|
|
57
|
-
* process entirely — never sees a half-written file. Keys the settings do not
|
|
58
|
-
* model, `feedSize` and anything a site added, are kept.
|
|
59
|
-
*/
|
|
60
|
-
export async function updateSiteSettings(options) {
|
|
61
|
-
let written = DEFAULT_SITE_SETTINGS;
|
|
62
|
-
await updateFileAtomically(siteDataPath(options.contentDir), (current) => {
|
|
63
|
-
const existing = parseSiteJson(current ?? '');
|
|
64
|
-
written = options.change(settingsFromSiteJson(existing));
|
|
65
|
-
return siteJsonText(written, existing);
|
|
66
|
-
});
|
|
67
|
-
return written;
|
|
68
|
-
}
|
|
69
|
-
//# sourceMappingURL=site-json.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"site-json.js","sourceRoot":"","sources":["../../src/site/site-json.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAGtD,MAAM,YAAY,GAAG,CAAC,YAAY,EAAE,YAAY,CAAU,CAAC;AAE3D,MAAM,UAAU,aAAa,CAAC,MAAc;IAC1C,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;AACxC,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,YAAY,CAAC,UAAkB;IAC7C,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAA6B;IAChE,OAAO,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,WAAW,CACzB,QAAsB,EACtB,QAAQ,GAA4B,EAAE;IAEtC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAChD,KAAK,MAAM,GAAG,IAAI,YAAY;QAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;IACjD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,YAAY,CAAC,QAAsB,EAAE,QAAiC;IACpF,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;AACzE,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAGnC;IACC,MAAM,kBAAkB,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC/F,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAGxC;IACC,IAAI,OAAO,GAAG,qBAAqB,CAAC;IAEpC,MAAM,oBAAoB,CAAC,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE;QACvE,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QAC9C,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC;QACzD,OAAO,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import type { Hono } from 'hono';
|
|
2
|
-
import type { GeekityEnv } from '../web/env.ts';
|
|
3
|
-
/**
|
|
4
|
-
* The one public endpoint webmentions add.
|
|
5
|
-
*
|
|
6
|
-
* A single path under `/_geekity/`, like the comment form's, so it is out of
|
|
7
|
-
* the way of every permalink a site might ever mint and the route table does
|
|
8
|
-
* not grow with the site. It is what the `Link` header and the `<link>` in
|
|
9
|
-
* every post's head point at, and it takes nothing but a form with a `source`
|
|
10
|
-
* and a `target` in it.
|
|
11
|
-
*/
|
|
12
|
-
/** Where a webmention is sent. */
|
|
13
|
-
export declare const WEBMENTION_PATH = "/_geekity/webmention";
|
|
14
|
-
/** The fields a webmention carries, which the spec fixes. */
|
|
15
|
-
export declare const WEBMENTION_FIELDS: {
|
|
16
|
-
readonly source: 'source';
|
|
17
|
-
readonly target: 'target';
|
|
18
|
-
};
|
|
19
|
-
/**
|
|
20
|
-
* The endpoint a page should advertise, or `undefined` when the site is not
|
|
21
|
-
* taking webmentions.
|
|
22
|
-
*
|
|
23
|
-
* Read off the site data the renderer already has rather than the settings, so
|
|
24
|
-
* a template asks one question and gets the same answer the endpoint gives.
|
|
25
|
-
* A file that does not mention the setting is a site that takes them: that is
|
|
26
|
-
* the default, and an older `site.json` should not quietly stop.
|
|
27
|
-
*/
|
|
28
|
-
export declare function webmentionEndpointFor(site: Record<string, unknown>): string | undefined;
|
|
29
|
-
/**
|
|
30
|
-
* Register the webmention endpoint. Mounted by the public site.
|
|
31
|
-
*
|
|
32
|
-
* The answer is a 202 for anything worth going and looking at and a 400 for
|
|
33
|
-
* anything that is not, and the looking happens afterwards — see
|
|
34
|
-
* `receive.ts` for why that split is the whole design.
|
|
35
|
-
*/
|
|
36
|
-
export declare function mountWebmentions(app: Hono<GeekityEnv>): void;
|
|
37
|
-
//# sourceMappingURL=routes.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/webmention/routes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAGjC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAOhD;;;;;;;;GAQG;AAEH,kCAAkC;AAClC,eAAO,MAAM,eAAe,yBAAyB,CAAC;AAEtD,6DAA6D;AAC7D,eAAO,MAAM,iBAAiB;aAAK,MAAM,EAAE,QAAQ;aAAE,MAAM,EAAE,QAAQ;CAAW,CAAC;AAEjF;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,SAAS,CAEvF;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,CA4C5D"}
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
import { clientAddress } from '../web/throttle.js';
|
|
2
|
-
import { readSiteSettings } from '../site/site-json.js';
|
|
3
|
-
import { stringOrEmpty } from '../util/forms.js';
|
|
4
|
-
import { publicDocumentAt } from '../content/permalinks.js';
|
|
5
|
-
import { checkWebmentionRequest } from './receive.js';
|
|
6
|
-
import { postSyndicatedAt, syndicationCopies } from './syndication.js';
|
|
7
|
-
/**
|
|
8
|
-
* The one public endpoint webmentions add.
|
|
9
|
-
*
|
|
10
|
-
* A single path under `/_geekity/`, like the comment form's, so it is out of
|
|
11
|
-
* the way of every permalink a site might ever mint and the route table does
|
|
12
|
-
* not grow with the site. It is what the `Link` header and the `<link>` in
|
|
13
|
-
* every post's head point at, and it takes nothing but a form with a `source`
|
|
14
|
-
* and a `target` in it.
|
|
15
|
-
*/
|
|
16
|
-
/** Where a webmention is sent. */
|
|
17
|
-
export const WEBMENTION_PATH = '/_geekity/webmention';
|
|
18
|
-
/** The fields a webmention carries, which the spec fixes. */
|
|
19
|
-
export const WEBMENTION_FIELDS = { source: 'source', target: 'target' };
|
|
20
|
-
/**
|
|
21
|
-
* The endpoint a page should advertise, or `undefined` when the site is not
|
|
22
|
-
* taking webmentions.
|
|
23
|
-
*
|
|
24
|
-
* Read off the site data the renderer already has rather than the settings, so
|
|
25
|
-
* a template asks one question and gets the same answer the endpoint gives.
|
|
26
|
-
* A file that does not mention the setting is a site that takes them: that is
|
|
27
|
-
* the default, and an older `site.json` should not quietly stop.
|
|
28
|
-
*/
|
|
29
|
-
export function webmentionEndpointFor(site) {
|
|
30
|
-
return site['webmentionsReceive'] === false ? undefined : WEBMENTION_PATH;
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Register the webmention endpoint. Mounted by the public site.
|
|
34
|
-
*
|
|
35
|
-
* The answer is a 202 for anything worth going and looking at and a 400 for
|
|
36
|
-
* anything that is not, and the looking happens afterwards — see
|
|
37
|
-
* `receive.ts` for why that split is the whole design.
|
|
38
|
-
*/
|
|
39
|
-
export function mountWebmentions(app) {
|
|
40
|
-
app.post(WEBMENTION_PATH, async (c) => {
|
|
41
|
-
const { store, config, webmentions, conversation } = c.var;
|
|
42
|
-
if (!readSiteSettings(config.contentDir).webmentionsReceive) {
|
|
43
|
-
// A 404 rather than a 403: a site that does not take webmentions has no
|
|
44
|
-
// endpoint, and that is what having no endpoint looks like.
|
|
45
|
-
return c.text('This site does not take webmentions.', 404);
|
|
46
|
-
}
|
|
47
|
-
const body = await c.req.parseBody();
|
|
48
|
-
const checked = checkWebmentionRequest(stringOrEmpty(body[WEBMENTION_FIELDS.source]), stringOrEmpty(body[WEBMENTION_FIELDS.target]), {
|
|
49
|
-
baseUrl: config.baseUrl,
|
|
50
|
-
documentAt: (pathname) => publicDocumentAt(store, pathname),
|
|
51
|
-
syndicatedAt: (url) => postSyndicatedAt(url, store, syndicationCopies(config.contentDir)),
|
|
52
|
-
conversation,
|
|
53
|
-
});
|
|
54
|
-
if (!checked.ok)
|
|
55
|
-
return c.text(checked.message, 400);
|
|
56
|
-
// Nothing waits for the check: the sender is answered now and the source
|
|
57
|
-
// is fetched afterwards, and `receive` never rejects.
|
|
58
|
-
void webmentions.receive({
|
|
59
|
-
source: checked.source,
|
|
60
|
-
target: checked.target,
|
|
61
|
-
document: checked.document,
|
|
62
|
-
address: clientAddress(c, config),
|
|
63
|
-
userAgent: c.req.header('user-agent'),
|
|
64
|
-
referrer: c.req.header('referer'),
|
|
65
|
-
});
|
|
66
|
-
return c.text('Accepted. The source will be checked shortly.', 202);
|
|
67
|
-
});
|
|
68
|
-
// A GET on the endpoint is somebody looking rather than sending, and saying
|
|
69
|
-
// so is friendlier than a 404 on a URL that is really there.
|
|
70
|
-
app.get(WEBMENTION_PATH, (c) => {
|
|
71
|
-
c.header('allow', 'POST');
|
|
72
|
-
return c.text('Send a webmention here with a POST carrying source and target.', 405);
|
|
73
|
-
});
|
|
74
|
-
}
|
|
75
|
-
//# sourceMappingURL=routes.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/webmention/routes.ts"],"names":[],"mappings":"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"}
|