@geekity/cms 0.30.0 → 0.32.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 +26 -4266
- package/admin/components/badge.njk +4 -0
- package/admin/components/fields.njk +41 -24
- package/admin/components/job-status.njk +45 -0
- package/admin/components/setting-fields.njk +38 -0
- package/admin/layouts/settings-page.njk +16 -0
- package/admin/pages/comments/all.njk +1 -2
- package/admin/pages/documents/editor.njk +17 -15
- package/admin/pages/documents/syndication.njk +4 -4
- package/admin/pages/federation/followers.njk +56 -6
- package/admin/pages/federation/settings.njk +1 -1
- package/admin/pages/media/library.njk +52 -3
- package/admin/pages/navigation/menus.njk +2 -2
- package/admin/pages/plugins/screen.njk +5 -46
- package/admin/pages/settings/discussion.njk +76 -47
- package/admin/pages/settings/email.njk +75 -47
- package/admin/pages/settings/general.njk +15 -15
- package/admin/pages/settings/permalinks.njk +8 -8
- package/admin/pages/settings/privacy.njk +6 -6
- package/admin/pages/settings/reading.njk +36 -36
- package/admin/pages/tools/dev-mode.njk +29 -3
- package/admin/pages/tools/export.njk +89 -0
- package/admin/pages/tools/maintenance.njk +51 -0
- package/admin/pages/users/apps.njk +2 -2
- package/admin/pages/users/edit.njk +3 -3
- package/admin/pages/users/new.njk +2 -2
- package/admin/static/admin.css +80 -0
- package/dist/access-log.d.ts +2 -10
- package/dist/access-log.d.ts.map +1 -1
- package/dist/access-log.js +1 -1
- package/dist/access-log.js.map +1 -1
- package/dist/{web → admin}/admin-bar.d.ts +3 -2
- package/dist/admin/admin-bar.d.ts.map +1 -0
- package/dist/{web → admin}/admin-bar.js +20 -17
- package/dist/admin/admin-bar.js.map +1 -0
- package/dist/{indieauth → admin}/app-activity.d.ts +2 -2
- package/dist/admin/app-activity.d.ts.map +1 -0
- package/dist/{indieauth → admin}/app-activity.js +6 -7
- package/dist/admin/app-activity.js.map +1 -0
- package/dist/admin/appearance.d.ts +4 -8
- package/dist/admin/appearance.d.ts.map +1 -1
- package/dist/admin/appearance.js +19 -20
- package/dist/admin/appearance.js.map +1 -1
- package/dist/admin/assets.d.ts +1 -8
- package/dist/admin/assets.d.ts.map +1 -1
- package/dist/admin/assets.js +2 -9
- package/dist/admin/assets.js.map +1 -1
- package/dist/admin/comments.d.ts +2 -2
- package/dist/admin/comments.d.ts.map +1 -1
- package/dist/admin/comments.js +17 -19
- package/dist/admin/comments.js.map +1 -1
- package/dist/admin/confirm-password.d.ts +4 -0
- package/dist/admin/confirm-password.d.ts.map +1 -0
- package/dist/admin/confirm-password.js +11 -0
- package/dist/admin/confirm-password.js.map +1 -0
- package/dist/{indieauth → admin}/connected-apps.d.ts +2 -2
- package/dist/admin/connected-apps.d.ts.map +1 -0
- package/dist/{indieauth → admin}/connected-apps.js +33 -39
- package/dist/admin/connected-apps.js.map +1 -0
- package/dist/admin/credentials.js +1 -1
- package/dist/admin/credentials.js.map +1 -1
- package/dist/admin/dev-mode.d.ts +1 -1
- package/dist/admin/dev-mode.d.ts.map +1 -1
- package/dist/admin/dev-mode.js +35 -10
- package/dist/admin/dev-mode.js.map +1 -1
- package/dist/admin/documents.d.ts +16 -301
- package/dist/admin/documents.d.ts.map +1 -1
- package/dist/admin/documents.js +94 -1040
- package/dist/admin/documents.js.map +1 -1
- package/dist/admin/editor-actions.d.ts +3 -2
- package/dist/admin/editor-actions.d.ts.map +1 -1
- package/dist/admin/editor-actions.js +8 -9
- package/dist/admin/editor-actions.js.map +1 -1
- package/dist/admin/editor-fields.d.ts +45 -0
- package/dist/admin/editor-fields.d.ts.map +1 -0
- package/dist/admin/editor-fields.js +71 -0
- package/dist/admin/editor-fields.js.map +1 -0
- package/dist/admin/editor-layout.d.ts +2 -10
- package/dist/admin/editor-layout.d.ts.map +1 -1
- package/dist/admin/editor-layout.js +2 -2
- package/dist/admin/editor-layout.js.map +1 -1
- package/dist/admin/export.d.ts +10 -0
- package/dist/admin/export.d.ts.map +1 -0
- package/dist/admin/export.js +72 -0
- package/dist/admin/export.js.map +1 -0
- package/dist/admin/federation.d.ts +6 -17
- package/dist/admin/federation.d.ts.map +1 -1
- package/dist/admin/federation.js +49 -104
- package/dist/admin/federation.js.map +1 -1
- package/dist/admin/flash.d.ts +2 -2
- package/dist/admin/flash.d.ts.map +1 -1
- package/dist/admin/headers.d.ts +1 -1
- package/dist/admin/headers.d.ts.map +1 -1
- package/dist/admin/headers.js +1 -1
- package/dist/admin/headers.js.map +1 -1
- package/dist/admin/index.d.ts +36 -21
- package/dist/admin/index.d.ts.map +1 -1
- package/dist/admin/index.js +26 -14
- package/dist/admin/index.js.map +1 -1
- package/dist/{indieauth/consent.d.ts → admin/indieauth-consent.d.ts} +4 -4
- package/dist/admin/indieauth-consent.d.ts.map +1 -0
- package/dist/{indieauth/consent.js → admin/indieauth-consent.js} +20 -23
- package/dist/admin/indieauth-consent.js.map +1 -0
- package/dist/admin/job-status.d.ts +25 -0
- package/dist/admin/job-status.d.ts.map +1 -0
- package/dist/admin/job-status.js +53 -0
- package/dist/admin/job-status.js.map +1 -0
- package/dist/admin/legacy-migrations.d.ts +131 -0
- package/dist/admin/legacy-migrations.d.ts.map +1 -0
- package/dist/admin/legacy-migrations.js +236 -0
- package/dist/admin/legacy-migrations.js.map +1 -0
- package/dist/admin/maintenance.d.ts +9 -0
- package/dist/admin/maintenance.d.ts.map +1 -0
- package/dist/admin/maintenance.js +42 -0
- package/dist/admin/maintenance.js.map +1 -0
- package/dist/admin/media.d.ts +8 -109
- package/dist/admin/media.d.ts.map +1 -1
- package/dist/admin/media.js +35 -188
- package/dist/admin/media.js.map +1 -1
- package/dist/admin/menu.d.ts.map +1 -1
- package/dist/admin/menu.js +11 -7
- package/dist/admin/menu.js.map +1 -1
- package/dist/admin/messages.d.ts +1 -1
- package/dist/admin/messages.d.ts.map +1 -1
- package/dist/admin/messages.js +11 -14
- package/dist/admin/messages.js.map +1 -1
- package/dist/admin/navigation.d.ts +3 -3
- package/dist/admin/navigation.d.ts.map +1 -1
- package/dist/admin/navigation.js +34 -33
- package/dist/admin/navigation.js.map +1 -1
- package/dist/admin/personal-data.d.ts +1 -1
- package/dist/admin/personal-data.d.ts.map +1 -1
- package/dist/admin/personal-data.js +3 -6
- package/dist/admin/personal-data.js.map +1 -1
- package/dist/admin/plugins.d.ts +1 -1
- package/dist/admin/plugins.d.ts.map +1 -1
- package/dist/admin/plugins.js +28 -79
- package/dist/admin/plugins.js.map +1 -1
- package/dist/admin/preview.d.ts +2 -1
- package/dist/admin/preview.d.ts.map +1 -1
- package/dist/admin/preview.js +31 -36
- package/dist/admin/preview.js.map +1 -1
- package/dist/admin/recovery.d.ts +3 -3
- package/dist/admin/recovery.d.ts.map +1 -1
- package/dist/admin/recovery.js +12 -14
- package/dist/admin/recovery.js.map +1 -1
- package/dist/admin/routes.d.ts +1 -3
- package/dist/admin/routes.d.ts.map +1 -1
- package/dist/admin/routes.js +34 -29
- package/dist/admin/routes.js.map +1 -1
- package/dist/admin/setting-overrides.d.ts +4 -0
- package/dist/admin/setting-overrides.d.ts.map +1 -0
- package/dist/admin/setting-overrides.js +24 -0
- package/dist/admin/setting-overrides.js.map +1 -0
- package/dist/admin/settings-discussion.d.ts +6 -4
- package/dist/admin/settings-discussion.d.ts.map +1 -1
- package/dist/admin/settings-discussion.js +79 -46
- package/dist/admin/settings-discussion.js.map +1 -1
- package/dist/admin/settings-email.d.ts +12 -9
- package/dist/admin/settings-email.d.ts.map +1 -1
- package/dist/admin/settings-email.js +94 -80
- package/dist/admin/settings-email.js.map +1 -1
- package/dist/admin/settings-federation.d.ts +0 -7
- package/dist/admin/settings-federation.d.ts.map +1 -1
- package/dist/admin/settings-federation.js +0 -36
- package/dist/admin/settings-federation.js.map +1 -1
- package/dist/admin/settings-fields.d.ts +32 -0
- package/dist/admin/settings-fields.d.ts.map +1 -0
- package/dist/admin/settings-fields.js +368 -0
- package/dist/admin/settings-fields.js.map +1 -0
- package/dist/admin/settings-general.d.ts.map +1 -1
- package/dist/admin/settings-general.js +17 -23
- package/dist/admin/settings-general.js.map +1 -1
- package/dist/admin/settings-page.d.ts +5 -32
- package/dist/admin/settings-page.d.ts.map +1 -1
- package/dist/admin/settings-page.js +39 -55
- package/dist/admin/settings-page.js.map +1 -1
- package/dist/admin/settings-pages.d.ts +1 -1
- package/dist/admin/settings-pages.d.ts.map +1 -1
- package/dist/admin/settings-permalinks.js +3 -3
- package/dist/admin/settings-permalinks.js.map +1 -1
- package/dist/admin/settings-privacy.js +1 -1
- package/dist/admin/settings-privacy.js.map +1 -1
- package/dist/admin/settings-reading.d.ts +2 -2
- package/dist/admin/settings-reading.d.ts.map +1 -1
- package/dist/admin/settings-reading.js +17 -16
- package/dist/admin/settings-reading.js.map +1 -1
- package/dist/admin/settings-renderer.d.ts +32 -0
- package/dist/admin/settings-renderer.d.ts.map +1 -0
- package/dist/admin/settings-renderer.js +79 -0
- package/dist/admin/settings-renderer.js.map +1 -0
- package/dist/admin/settings.d.ts +0 -579
- package/dist/admin/settings.d.ts.map +1 -1
- package/dist/admin/settings.js +1 -1155
- package/dist/admin/settings.js.map +1 -1
- package/dist/admin/site-setting-edit.d.ts +4 -0
- package/dist/admin/site-setting-edit.d.ts.map +1 -0
- package/dist/admin/site-setting-edit.js +20 -0
- package/dist/admin/site-setting-edit.js.map +1 -0
- package/dist/admin/syndication-targets.d.ts +1 -1
- package/dist/admin/syndication-targets.d.ts.map +1 -1
- package/dist/admin/syndication-targets.js +11 -15
- package/dist/admin/syndication-targets.js.map +1 -1
- package/dist/admin/taxonomy.d.ts +2 -2
- package/dist/admin/taxonomy.d.ts.map +1 -1
- package/dist/admin/taxonomy.js +17 -29
- package/dist/admin/taxonomy.js.map +1 -1
- package/dist/admin/templates.d.ts +2 -0
- package/dist/admin/templates.d.ts.map +1 -1
- package/dist/admin/templates.js +3 -1
- package/dist/admin/templates.js.map +1 -1
- package/dist/admin/tools.d.ts +4 -4
- package/dist/admin/tools.d.ts.map +1 -1
- package/dist/admin/tools.js +3 -6
- package/dist/admin/tools.js.map +1 -1
- package/dist/admin/uploads.d.ts +1 -106
- package/dist/admin/uploads.d.ts.map +1 -1
- package/dist/admin/uploads.js +2 -191
- package/dist/admin/uploads.js.map +1 -1
- package/dist/admin/users.d.ts +20 -15
- package/dist/admin/users.d.ts.map +1 -1
- package/dist/admin/users.js +84 -81
- package/dist/admin/users.js.map +1 -1
- package/dist/avatars/avatars.d.ts +2 -4
- package/dist/avatars/avatars.d.ts.map +1 -1
- package/dist/avatars/avatars.js +15 -19
- package/dist/avatars/avatars.js.map +1 -1
- package/dist/avatars/index.d.ts +1 -2
- package/dist/avatars/index.d.ts.map +1 -1
- package/dist/avatars/index.js +1 -2
- package/dist/avatars/index.js.map +1 -1
- package/dist/cache.d.ts +4 -4
- package/dist/cache.d.ts.map +1 -1
- package/dist/cache.js +13 -9
- package/dist/cache.js.map +1 -1
- package/dist/cli.d.ts +2 -33
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +729 -344
- package/dist/cli.js.map +1 -1
- package/dist/cms/app.d.ts +11 -0
- package/dist/cms/app.d.ts.map +1 -0
- package/dist/cms/app.js +126 -0
- package/dist/cms/app.js.map +1 -0
- package/dist/cms/boot.d.ts +26 -0
- package/dist/cms/boot.d.ts.map +1 -0
- package/dist/cms/boot.js +128 -0
- package/dist/cms/boot.js.map +1 -0
- package/dist/cms/create.d.ts +272 -0
- package/dist/cms/create.d.ts.map +1 -0
- package/dist/cms/create.js +181 -0
- package/dist/cms/create.js.map +1 -0
- package/dist/cms/lifecycle.d.ts +11 -0
- package/dist/cms/lifecycle.d.ts.map +1 -0
- package/dist/cms/lifecycle.js +15 -0
- package/dist/cms/lifecycle.js.map +1 -0
- package/dist/{web/errors.d.ts → cms/server-error.d.ts} +2 -8
- package/dist/cms/server-error.d.ts.map +1 -0
- package/dist/{web/errors.js → cms/server-error.js} +4 -14
- package/dist/cms/server-error.js.map +1 -0
- package/dist/cms/services.d.ts +57 -0
- package/dist/cms/services.d.ts.map +1 -0
- package/dist/cms/services.js +410 -0
- package/dist/cms/services.js.map +1 -0
- package/dist/cms/site-records.d.ts +4 -0
- package/dist/cms/site-records.d.ts.map +1 -0
- package/dist/cms/site-records.js +13 -0
- package/dist/cms/site-records.js.map +1 -0
- package/dist/comments/akismet.d.ts +14 -47
- package/dist/comments/akismet.d.ts.map +1 -1
- package/dist/comments/akismet.js +30 -71
- package/dist/comments/akismet.js.map +1 -1
- package/dist/comments/conversation.d.ts +340 -0
- package/dist/comments/conversation.d.ts.map +1 -0
- package/dist/comments/conversation.js +51 -0
- package/dist/comments/conversation.js.map +1 -0
- package/dist/comments/form.d.ts +2 -2
- package/dist/comments/form.d.ts.map +1 -1
- package/dist/comments/form.js +2 -2
- package/dist/comments/form.js.map +1 -1
- package/dist/comments/index.d.ts +15 -9
- package/dist/comments/index.d.ts.map +1 -1
- package/dist/comments/index.js +9 -6
- package/dist/comments/index.js.map +1 -1
- package/dist/comments/intake.d.ts +147 -0
- package/dist/comments/intake.d.ts.map +1 -0
- package/dist/comments/intake.js +161 -0
- package/dist/comments/intake.js.map +1 -0
- package/dist/comments/markdown.d.ts.map +1 -1
- package/dist/comments/markdown.js +2 -9
- package/dist/comments/markdown.js.map +1 -1
- package/dist/comments/migrations.d.ts +45 -0
- package/dist/comments/migrations.d.ts.map +1 -0
- package/dist/comments/migrations.js +194 -0
- package/dist/comments/migrations.js.map +1 -0
- package/dist/comments/moderate.d.ts +2 -2
- package/dist/comments/moderate.d.ts.map +1 -1
- package/dist/comments/moderate.js +3 -13
- package/dist/comments/moderate.js.map +1 -1
- package/dist/comments/page-form.d.ts +52 -0
- package/dist/comments/page-form.d.ts.map +1 -0
- package/dist/comments/page-form.js +62 -0
- package/dist/comments/page-form.js.map +1 -0
- package/dist/comments/policy.d.ts +24 -35
- package/dist/comments/policy.d.ts.map +1 -1
- package/dist/comments/policy.js +16 -38
- package/dist/comments/policy.js.map +1 -1
- package/dist/comments/records.d.ts +17 -195
- package/dist/comments/records.d.ts.map +1 -1
- package/dist/comments/records.js +24 -394
- package/dist/comments/records.js.map +1 -1
- package/dist/comments/reply-notices.d.ts +10 -11
- package/dist/comments/reply-notices.d.ts.map +1 -1
- package/dist/comments/reply-notices.js +32 -20
- package/dist/comments/reply-notices.js.map +1 -1
- package/dist/comments/reply-post.d.ts +2 -2
- package/dist/comments/reply-post.d.ts.map +1 -1
- package/dist/comments/reply-post.js +8 -7
- package/dist/comments/reply-post.js.map +1 -1
- package/dist/comments/routes.d.ts +3 -3
- package/dist/comments/routes.d.ts.map +1 -1
- package/dist/comments/routes.js +19 -31
- package/dist/comments/routes.js.map +1 -1
- package/dist/comments/submission.d.ts +5 -102
- package/dist/comments/submission.d.ts.map +1 -1
- package/dist/comments/submission.js +5 -22
- package/dist/comments/submission.js.map +1 -1
- package/dist/comments/viewer.d.ts +1 -25
- package/dist/comments/viewer.d.ts.map +1 -1
- package/dist/comments/viewer.js +1 -44
- package/dist/comments/viewer.js.map +1 -1
- package/dist/config-loader.d.ts +35 -0
- package/dist/config-loader.d.ts.map +1 -0
- package/dist/config-loader.js +117 -0
- package/dist/config-loader.js.map +1 -0
- package/dist/config.d.ts +99 -51
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +137 -181
- package/dist/config.js.map +1 -1
- package/dist/contact/delivery.d.ts +3 -5
- package/dist/contact/delivery.d.ts.map +1 -1
- package/dist/contact/delivery.js +5 -14
- package/dist/contact/delivery.js.map +1 -1
- package/dist/contact/form.d.ts +2 -4
- package/dist/contact/form.d.ts.map +1 -1
- package/dist/contact/form.js +3 -4
- package/dist/contact/form.js.map +1 -1
- package/dist/contact/index.d.ts +3 -3
- package/dist/contact/index.d.ts.map +1 -1
- package/dist/contact/index.js +3 -3
- package/dist/contact/index.js.map +1 -1
- package/dist/contact/records.d.ts +0 -2
- package/dist/contact/records.d.ts.map +1 -1
- package/dist/contact/records.js +11 -16
- package/dist/contact/records.js.map +1 -1
- package/dist/contact/submission.d.ts +2 -2
- package/dist/contact/submission.d.ts.map +1 -1
- package/dist/contact/submission.js +7 -16
- package/dist/contact/submission.js.map +1 -1
- package/dist/{images → content}/alt-text.d.ts +1 -1
- package/dist/content/alt-text.d.ts.map +1 -0
- package/dist/{images → content}/alt-text.js +3 -5
- package/dist/content/alt-text.js.map +1 -0
- package/dist/content/authors.d.ts +79 -0
- package/dist/content/authors.d.ts.map +1 -0
- package/dist/content/authors.js +106 -0
- package/dist/content/authors.js.map +1 -0
- package/dist/content/citation.d.ts +4 -0
- package/dist/content/citation.d.ts.map +1 -1
- package/dist/content/citation.js +3 -0
- package/dist/content/citation.js.map +1 -1
- package/dist/content/comments.d.ts +3 -0
- package/dist/content/comments.d.ts.map +1 -0
- package/dist/content/comments.js +3 -0
- package/dist/content/comments.js.map +1 -0
- package/dist/content/contact.d.ts +3 -0
- package/dist/content/contact.d.ts.map +1 -0
- package/dist/content/contact.js +3 -0
- package/dist/content/contact.js.map +1 -0
- package/dist/content/document-form.d.ts +197 -0
- package/dist/content/document-form.d.ts.map +1 -0
- package/dist/content/document-form.js +201 -0
- package/dist/content/document-form.js.map +1 -0
- package/dist/content/document-kind.d.ts +55 -0
- package/dist/content/document-kind.d.ts.map +1 -0
- package/dist/content/document-kind.js +30 -0
- package/dist/content/document-kind.js.map +1 -0
- package/dist/{admin/enclosure-field.d.ts → content/enclosure-form.d.ts} +14 -34
- package/dist/content/enclosure-form.d.ts.map +1 -0
- package/dist/{admin/enclosure-field.js → content/enclosure-form.js} +43 -81
- package/dist/content/enclosure-form.js.map +1 -0
- package/dist/content/enclosure.d.ts.map +1 -1
- package/dist/content/enclosure.js +3 -4
- package/dist/content/enclosure.js.map +1 -1
- package/dist/{admin/event-field.d.ts → content/event-form.d.ts} +6 -5
- package/dist/content/event-form.d.ts.map +1 -0
- package/dist/{admin/event-field.js → content/event-form.js} +45 -12
- package/dist/content/event-form.js.map +1 -0
- package/dist/content/excerpt.d.ts +26 -0
- package/dist/content/excerpt.d.ts.map +1 -0
- package/dist/content/excerpt.js +46 -0
- package/dist/content/excerpt.js.map +1 -0
- package/dist/content/form-error.d.ts +10 -0
- package/dist/content/form-error.d.ts.map +1 -0
- package/dist/content/form-error.js +2 -0
- package/dist/content/form-error.js.map +1 -0
- package/dist/{web → content}/guids.d.ts +12 -5
- package/dist/content/guids.d.ts.map +1 -0
- package/dist/{web → content}/guids.js +28 -5
- package/dist/content/guids.js.map +1 -0
- package/dist/content/image-tags.d.ts +25 -0
- package/dist/content/image-tags.d.ts.map +1 -0
- package/dist/content/image-tags.js +55 -0
- package/dist/content/image-tags.js.map +1 -0
- package/dist/content/index.d.ts +11 -6
- package/dist/content/index.d.ts.map +1 -1
- package/dist/content/index.js +6 -3
- package/dist/content/index.js.map +1 -1
- package/dist/content/kept-properties.d.ts +0 -1
- package/dist/content/kept-properties.d.ts.map +1 -1
- package/dist/content/kept-properties.js +2 -2
- package/dist/content/kept-properties.js.map +1 -1
- package/dist/content/language.d.ts +19 -0
- package/dist/content/language.d.ts.map +1 -0
- package/dist/content/language.js +19 -0
- package/dist/content/language.js.map +1 -0
- package/dist/content/license.d.ts.map +1 -0
- package/dist/content/license.js.map +1 -0
- package/dist/{web → content}/locale.d.ts +0 -6
- package/dist/content/locale.d.ts.map +1 -0
- package/dist/{web → content}/locale.js +1 -6
- package/dist/content/locale.js.map +1 -0
- package/dist/content/location-form.d.ts +17 -0
- package/dist/content/location-form.d.ts.map +1 -0
- package/dist/{admin/location-field.js → content/location-form.js} +2 -23
- package/dist/content/location-form.js.map +1 -0
- package/dist/content/location.d.ts.map +1 -1
- package/dist/content/location.js +1 -3
- package/dist/content/location.js.map +1 -1
- package/dist/content/locations.d.ts +0 -1
- package/dist/content/locations.d.ts.map +1 -1
- package/dist/content/locations.js +2 -2
- package/dist/content/locations.js.map +1 -1
- package/dist/content/markdown-links.d.ts +11 -0
- package/dist/content/markdown-links.d.ts.map +1 -0
- package/dist/content/markdown-links.js +223 -0
- package/dist/content/markdown-links.js.map +1 -0
- package/dist/content/markdown.d.ts +2 -1
- package/dist/content/markdown.d.ts.map +1 -1
- package/dist/content/markdown.js +1 -1
- package/dist/content/markdown.js.map +1 -1
- package/dist/content/media.d.ts +7 -0
- package/dist/content/media.d.ts.map +1 -1
- package/dist/content/media.js +12 -1
- package/dist/content/media.js.map +1 -1
- package/dist/content/metadata/strip-job.d.ts +16 -0
- package/dist/content/metadata/strip-job.d.ts.map +1 -0
- package/dist/content/metadata/strip-job.js +24 -0
- package/dist/content/metadata/strip-job.js.map +1 -0
- package/dist/content/metadata/sweep.d.ts +13 -1
- package/dist/content/metadata/sweep.d.ts.map +1 -1
- package/dist/content/metadata/sweep.js +47 -25
- package/dist/content/metadata/sweep.js.map +1 -1
- package/dist/content/migrated.js +1 -1
- package/dist/content/migrated.js.map +1 -1
- package/dist/content/parser.d.ts.map +1 -1
- package/dist/content/parser.js +1 -12
- package/dist/content/parser.js.map +1 -1
- package/dist/content/permalink-file.d.ts +2 -1
- package/dist/content/permalink-file.d.ts.map +1 -1
- package/dist/content/permalink-file.js +3 -3
- package/dist/content/permalink-file.js.map +1 -1
- package/dist/content/permalinks.d.ts +34 -0
- package/dist/content/permalinks.d.ts.map +1 -0
- package/dist/{web/documents.js → content/permalinks.js} +6 -56
- package/dist/content/permalinks.js.map +1 -0
- package/dist/content/photo-form.d.ts +29 -0
- package/dist/content/photo-form.d.ts.map +1 -0
- package/dist/{admin/photo-field.js → content/photo-form.js} +43 -40
- package/dist/content/photo-form.js.map +1 -0
- package/dist/content/photo.d.ts +2 -1
- package/dist/content/photo.d.ts.map +1 -1
- package/dist/content/photo.js +2 -2
- package/dist/content/photo.js.map +1 -1
- package/dist/content/post-fields.d.ts +40 -0
- package/dist/content/post-fields.d.ts.map +1 -0
- package/dist/content/post-fields.js +252 -0
- package/dist/content/post-fields.js.map +1 -0
- package/dist/content/read-form.d.ts +31 -0
- package/dist/content/read-form.d.ts.map +1 -0
- package/dist/content/read-form.js +157 -0
- package/dist/content/read-form.js.map +1 -0
- package/dist/content/read.d.ts +9 -2
- package/dist/content/read.d.ts.map +1 -1
- package/dist/content/read.js +28 -13
- package/dist/content/read.js.map +1 -1
- package/dist/content/redirects.d.ts +84 -0
- package/dist/content/redirects.d.ts.map +1 -0
- package/dist/content/redirects.js +234 -0
- package/dist/content/redirects.js.map +1 -0
- package/dist/content/sanitize.d.ts +13 -0
- package/dist/content/sanitize.d.ts.map +1 -0
- package/dist/{web → content}/sanitize.js +4 -71
- package/dist/content/sanitize.js.map +1 -0
- package/dist/content/save.d.ts +5 -8
- package/dist/content/save.d.ts.map +1 -1
- package/dist/content/save.js +5 -26
- package/dist/content/save.js.map +1 -1
- package/dist/content/schedule.d.ts +2 -2
- package/dist/content/schedule.d.ts.map +1 -1
- package/dist/content/schedule.js +1 -3
- package/dist/content/schedule.js.map +1 -1
- package/dist/content/served.d.ts +58 -0
- package/dist/content/served.d.ts.map +1 -0
- package/dist/content/served.js +65 -0
- package/dist/content/served.js.map +1 -0
- package/dist/content/site-links.d.ts +72 -0
- package/dist/content/site-links.d.ts.map +1 -0
- package/dist/content/site-links.js +191 -0
- package/dist/content/site-links.js.map +1 -0
- package/dist/content/sqlite/archive.d.ts +4 -0
- package/dist/content/sqlite/archive.d.ts.map +1 -0
- package/dist/content/sqlite/archive.js +96 -0
- package/dist/content/sqlite/archive.js.map +1 -0
- package/dist/content/sqlite/backlinks.d.ts +4 -0
- package/dist/content/sqlite/backlinks.d.ts.map +1 -0
- package/dist/content/sqlite/backlinks.js +46 -0
- package/dist/content/sqlite/backlinks.js.map +1 -0
- package/dist/content/sqlite/catalog.d.ts +4 -0
- package/dist/content/sqlite/catalog.d.ts.map +1 -0
- package/dist/content/sqlite/catalog.js +62 -0
- package/dist/content/sqlite/catalog.js.map +1 -0
- package/dist/content/sqlite/clauses.d.ts +57 -0
- package/dist/content/sqlite/clauses.d.ts.map +1 -0
- package/dist/content/sqlite/clauses.js +76 -0
- package/dist/content/sqlite/clauses.js.map +1 -0
- package/dist/content/sqlite/database.d.ts +26 -0
- package/dist/content/sqlite/database.d.ts.map +1 -0
- package/dist/content/sqlite/database.js +27 -0
- package/dist/content/sqlite/database.js.map +1 -0
- package/dist/content/sqlite/documents.d.ts +12 -0
- package/dist/content/sqlite/documents.d.ts.map +1 -0
- package/dist/content/sqlite/documents.js +40 -0
- package/dist/content/sqlite/documents.js.map +1 -0
- package/dist/content/sqlite/lookups.d.ts +6 -0
- package/dist/content/sqlite/lookups.d.ts.map +1 -0
- package/dist/content/sqlite/lookups.js +25 -0
- package/dist/content/sqlite/lookups.js.map +1 -0
- package/dist/content/sqlite/open.d.ts +8 -0
- package/dist/content/sqlite/open.d.ts.map +1 -0
- package/dist/content/sqlite/open.js +63 -0
- package/dist/content/sqlite/open.js.map +1 -0
- package/dist/content/sqlite/replies.d.ts +4 -0
- package/dist/content/sqlite/replies.d.ts.map +1 -0
- package/dist/content/sqlite/replies.js +21 -0
- package/dist/content/sqlite/replies.js.map +1 -0
- package/dist/content/sqlite/rows.d.ts +22 -0
- package/dist/content/sqlite/rows.d.ts.map +1 -0
- package/dist/content/sqlite/rows.js +93 -0
- package/dist/content/sqlite/rows.js.map +1 -0
- package/dist/content/sqlite/schedule.d.ts +4 -0
- package/dist/content/sqlite/schedule.d.ts.map +1 -0
- package/dist/content/sqlite/schedule.js +16 -0
- package/dist/content/sqlite/schedule.js.map +1 -0
- package/dist/content/sqlite/schema.d.ts +10 -0
- package/dist/content/sqlite/schema.d.ts.map +1 -0
- package/dist/content/sqlite/schema.js +209 -0
- package/dist/content/sqlite/schema.js.map +1 -0
- package/dist/content/sqlite/search.d.ts +4 -0
- package/dist/content/sqlite/search.d.ts.map +1 -0
- package/dist/content/sqlite/search.js +54 -0
- package/dist/content/sqlite/search.js.map +1 -0
- package/dist/content/sqlite/spellings.d.ts +6 -0
- package/dist/content/sqlite/spellings.d.ts.map +1 -0
- package/dist/content/sqlite/spellings.js +80 -0
- package/dist/content/sqlite/spellings.js.map +1 -0
- package/dist/content/sqlite/taxonomy.d.ts +4 -0
- package/dist/content/sqlite/taxonomy.d.ts.map +1 -0
- package/dist/content/sqlite/taxonomy.js +75 -0
- package/dist/content/sqlite/taxonomy.js.map +1 -0
- package/dist/content/sqlite/writes.d.ts +9 -0
- package/dist/content/sqlite/writes.d.ts.map +1 -0
- package/dist/content/sqlite/writes.js +164 -0
- package/dist/content/sqlite/writes.js.map +1 -0
- package/dist/content/store.d.ts +142 -138
- package/dist/content/store.d.ts.map +1 -1
- package/dist/content/store.js +0 -1051
- package/dist/content/store.js.map +1 -1
- package/dist/content/sync.d.ts +12 -4
- package/dist/content/sync.d.ts.map +1 -1
- package/dist/content/sync.js +24 -41
- package/dist/content/sync.js.map +1 -1
- package/dist/content/syndicate-to.d.ts +25 -0
- package/dist/content/syndicate-to.d.ts.map +1 -0
- package/dist/content/syndicate-to.js +8 -0
- package/dist/content/syndicate-to.js.map +1 -0
- package/dist/{web → content}/taxonomy.d.ts +1 -1
- package/dist/content/taxonomy.d.ts.map +1 -0
- package/dist/{web → content}/taxonomy.js +2 -2
- package/dist/content/taxonomy.js.map +1 -0
- package/dist/content/time.d.ts +2 -2
- package/dist/content/time.d.ts.map +1 -1
- package/dist/content/time.js +3 -3
- package/dist/content/time.js.map +1 -1
- package/dist/content/trash.d.ts +35 -0
- package/dist/content/trash.d.ts.map +1 -0
- package/dist/content/trash.js +83 -0
- package/dist/content/trash.js.map +1 -0
- package/dist/content/uploads.d.ts +24 -0
- package/dist/content/uploads.d.ts.map +1 -0
- package/dist/content/uploads.js +32 -0
- package/dist/content/uploads.js.map +1 -0
- package/dist/content/video.d.ts.map +1 -1
- package/dist/content/video.js +3 -5
- package/dist/content/video.js.map +1 -1
- package/dist/content/write.d.ts +84 -0
- package/dist/content/write.d.ts.map +1 -0
- package/dist/content/write.js +570 -0
- package/dist/content/write.js.map +1 -0
- package/dist/content/writer.d.ts.map +1 -1
- package/dist/content/writer.js +1 -2
- package/dist/content/writer.js.map +1 -1
- package/dist/dev-mode.d.ts +6 -26
- package/dist/dev-mode.d.ts.map +1 -1
- package/dist/dev-mode.js +5 -54
- package/dist/dev-mode.js.map +1 -1
- package/dist/drain.d.ts +2 -3
- package/dist/drain.d.ts.map +1 -1
- package/dist/drain.js +2 -1
- package/dist/drain.js.map +1 -1
- package/dist/export/export-archives.d.ts +29 -0
- package/dist/export/export-archives.d.ts.map +1 -0
- package/dist/export/export-archives.js +88 -0
- package/dist/export/export-archives.js.map +1 -0
- package/dist/export/export-job.d.ts +21 -0
- package/dist/export/export-job.d.ts.map +1 -0
- package/dist/export/export-job.js +63 -0
- package/dist/export/export-job.js.map +1 -0
- package/dist/export/site-export.d.ts +101 -0
- package/dist/export/site-export.d.ts.map +1 -0
- package/dist/export/site-export.js +243 -0
- package/dist/export/site-export.js.map +1 -0
- package/dist/export/site-import.d.ts +75 -0
- package/dist/export/site-import.d.ts.map +1 -0
- package/dist/export/site-import.js +492 -0
- package/dist/export/site-import.js.map +1 -0
- package/dist/exports.d.ts +31 -0
- package/dist/exports.d.ts.map +1 -0
- package/dist/exports.js +10 -0
- package/dist/exports.js.map +1 -0
- package/dist/federation/actor.d.ts +1 -1
- package/dist/federation/actor.d.ts.map +1 -1
- package/dist/federation/actor.js +6 -13
- package/dist/federation/actor.js.map +1 -1
- package/dist/federation/article.d.ts +4 -14
- package/dist/federation/article.d.ts.map +1 -1
- package/dist/federation/article.js +40 -51
- package/dist/federation/article.js.map +1 -1
- package/dist/federation/backfill.d.ts +7 -5
- package/dist/federation/backfill.d.ts.map +1 -1
- package/dist/federation/backfill.js +12 -13
- package/dist/federation/backfill.js.map +1 -1
- package/dist/federation/citations.d.ts.map +1 -1
- package/dist/federation/citations.js.map +1 -1
- package/dist/federation/cited-post.d.ts +1 -1
- package/dist/federation/cited-post.d.ts.map +1 -1
- package/dist/federation/cited-post.js +3 -5
- package/dist/federation/cited-post.js.map +1 -1
- package/dist/federation/delivery-plan.d.ts +85 -0
- package/dist/federation/delivery-plan.d.ts.map +1 -0
- package/dist/federation/delivery-plan.js +137 -0
- package/dist/federation/delivery-plan.js.map +1 -0
- package/dist/federation/delivery.d.ts +12 -34
- package/dist/federation/delivery.d.ts.map +1 -1
- package/dist/federation/delivery.js +79 -212
- package/dist/federation/delivery.js.map +1 -1
- package/dist/federation/federation.d.ts +12 -12
- package/dist/federation/federation.d.ts.map +1 -1
- package/dist/federation/federation.js +12 -18
- package/dist/federation/federation.js.map +1 -1
- package/dist/federation/followers.d.ts +1 -1
- package/dist/federation/followers.d.ts.map +1 -1
- package/dist/federation/handles.d.ts +1 -1
- package/dist/federation/handles.d.ts.map +1 -1
- package/dist/federation/handles.js +1 -1
- package/dist/federation/handles.js.map +1 -1
- package/dist/federation/inbox.d.ts +1 -1
- package/dist/federation/inbox.d.ts.map +1 -1
- package/dist/federation/inbox.js +6 -5
- package/dist/federation/inbox.js.map +1 -1
- package/dist/federation/index.d.ts +10 -8
- package/dist/federation/index.d.ts.map +1 -1
- package/dist/federation/index.js +7 -5
- package/dist/federation/index.js.map +1 -1
- package/dist/federation/keys.d.ts +8 -27
- package/dist/federation/keys.d.ts.map +1 -1
- package/dist/federation/keys.js +7 -50
- package/dist/federation/keys.js.map +1 -1
- package/dist/federation/mount.d.ts +2 -2
- package/dist/federation/mount.d.ts.map +1 -1
- package/dist/federation/mount.js +9 -7
- package/dist/federation/mount.js.map +1 -1
- package/dist/federation/paths.d.ts +1 -9
- package/dist/federation/paths.d.ts.map +1 -1
- package/dist/federation/paths.js +2 -12
- package/dist/federation/paths.js.map +1 -1
- package/dist/federation/profiles.d.ts +2 -2
- package/dist/federation/profiles.d.ts.map +1 -1
- package/dist/federation/profiles.js +6 -9
- package/dist/federation/profiles.js.map +1 -1
- package/dist/federation/queue.d.ts +32 -17
- package/dist/federation/queue.d.ts.map +1 -1
- package/dist/federation/queue.js +173 -39
- package/dist/federation/queue.js.map +1 -1
- package/dist/federation/quotes.d.ts +2 -2
- package/dist/federation/quotes.d.ts.map +1 -1
- package/dist/federation/quotes.js +4 -4
- package/dist/federation/quotes.js.map +1 -1
- package/dist/federation/records.d.ts +2 -2
- package/dist/federation/records.d.ts.map +1 -1
- package/dist/federation/records.js +12 -19
- package/dist/federation/records.js.map +1 -1
- package/dist/federation/relays.d.ts +8 -5
- package/dist/federation/relays.d.ts.map +1 -1
- package/dist/federation/relays.js +52 -53
- package/dist/federation/relays.js.map +1 -1
- package/dist/federation/resend-job.d.ts +44 -0
- package/dist/federation/resend-job.d.ts.map +1 -0
- package/dist/federation/resend-job.js +59 -0
- package/dist/federation/resend-job.js.map +1 -0
- package/dist/federation/site-loaders.js +1 -1
- package/dist/federation/site-loaders.js.map +1 -1
- package/dist/federation/webfinger.d.ts +23 -0
- package/dist/federation/webfinger.d.ts.map +1 -0
- package/dist/federation/webfinger.js +70 -0
- package/dist/federation/webfinger.js.map +1 -0
- package/dist/files/atomic.d.ts +9 -0
- package/dist/files/atomic.d.ts.map +1 -1
- package/dist/files/atomic.js +5 -10
- package/dist/files/atomic.js.map +1 -1
- package/dist/files/data-files.d.ts +104 -0
- package/dist/files/data-files.d.ts.map +1 -0
- package/dist/files/data-files.js +330 -0
- package/dist/files/data-files.js.map +1 -0
- package/dist/files/export-archives.d.ts +12 -0
- package/dist/files/export-archives.d.ts.map +1 -0
- package/dist/files/export-archives.js +67 -0
- package/dist/files/export-archives.js.map +1 -0
- package/dist/files/static-files.d.ts +21 -0
- package/dist/files/static-files.d.ts.map +1 -0
- package/dist/files/static-files.js +73 -0
- package/dist/files/static-files.js.map +1 -0
- package/dist/files/tar.d.ts +29 -0
- package/dist/files/tar.d.ts.map +1 -0
- package/dist/files/tar.js +206 -0
- package/dist/files/tar.js.map +1 -0
- package/dist/files/upload-types.d.ts +81 -0
- package/dist/files/upload-types.d.ts.map +1 -0
- package/dist/files/upload-types.js +234 -0
- package/dist/files/upload-types.js.map +1 -0
- package/dist/forms/checker.d.ts +93 -0
- package/dist/forms/checker.d.ts.map +1 -0
- package/dist/forms/checker.js +2 -0
- package/dist/forms/checker.js.map +1 -0
- package/dist/forms/protection.d.ts +3 -9
- package/dist/forms/protection.d.ts.map +1 -1
- package/dist/forms/protection.js +5 -11
- package/dist/forms/protection.js.map +1 -1
- package/dist/images/icons.d.ts.map +1 -1
- package/dist/images/icons.js +4 -2
- package/dist/images/icons.js.map +1 -1
- package/dist/images/index.d.ts +2 -1
- package/dist/images/index.d.ts.map +1 -1
- package/dist/images/index.js +2 -1
- package/dist/images/index.js.map +1 -1
- package/dist/images/markup.d.ts +4 -21
- package/dist/images/markup.d.ts.map +1 -1
- package/dist/images/markup.js +15 -70
- package/dist/images/markup.js.map +1 -1
- package/dist/images/paths.d.ts +1 -14
- package/dist/images/paths.d.ts.map +1 -1
- package/dist/images/paths.js +9 -23
- package/dist/images/paths.js.map +1 -1
- package/dist/images/variants.d.ts +5 -3
- package/dist/images/variants.d.ts.map +1 -1
- package/dist/images/variants.js +23 -22
- package/dist/images/variants.js.map +1 -1
- package/dist/index.d.ts +4 -291
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -839
- package/dist/index.js.map +1 -1
- package/dist/indexnow.d.ts +4 -2
- package/dist/indexnow.d.ts.map +1 -1
- package/dist/indexnow.js +52 -45
- package/dist/indexnow.js.map +1 -1
- package/dist/indieauth/client.d.ts +1 -1
- package/dist/indieauth/client.d.ts.map +1 -1
- package/dist/indieauth/client.js +1 -1
- package/dist/indieauth/client.js.map +1 -1
- package/dist/indieauth/grants.d.ts +1 -1
- package/dist/indieauth/grants.d.ts.map +1 -1
- package/dist/indieauth/identity.d.ts +2 -2
- package/dist/indieauth/identity.d.ts.map +1 -1
- package/dist/indieauth/identity.js +5 -7
- package/dist/indieauth/identity.js.map +1 -1
- package/dist/indieauth/redeem.d.ts +1 -1
- package/dist/indieauth/redeem.d.ts.map +1 -1
- package/dist/indieauth/redeem.js.map +1 -1
- package/dist/indieauth/request.d.ts +5 -1
- package/dist/indieauth/request.d.ts.map +1 -1
- package/dist/indieauth/request.js +6 -2
- package/dist/indieauth/request.js.map +1 -1
- package/dist/indieauth/tokens.d.ts +1 -3
- package/dist/indieauth/tokens.d.ts.map +1 -1
- package/dist/indieauth/tokens.js +4 -6
- package/dist/indieauth/tokens.js.map +1 -1
- package/dist/jobs/file-records.d.ts +13 -0
- package/dist/jobs/file-records.d.ts.map +1 -0
- package/dist/jobs/file-records.js +104 -0
- package/dist/jobs/file-records.js.map +1 -0
- package/dist/jobs/in-process.d.ts +10 -0
- package/dist/jobs/in-process.d.ts.map +1 -0
- package/dist/jobs/in-process.js +45 -0
- package/dist/jobs/in-process.js.map +1 -0
- package/dist/jobs/lock-file.d.ts +13 -0
- package/dist/jobs/lock-file.d.ts.map +1 -0
- package/dist/jobs/lock-file.js +107 -0
- package/dist/jobs/lock-file.js.map +1 -0
- package/dist/jobs/processes.d.ts +11 -0
- package/dist/jobs/processes.d.ts.map +1 -0
- package/dist/jobs/processes.js +50 -0
- package/dist/jobs/processes.js.map +1 -0
- package/dist/jobs/queue.d.ts +18 -0
- package/dist/jobs/queue.d.ts.map +1 -0
- package/dist/jobs/queue.js +220 -0
- package/dist/jobs/queue.js.map +1 -0
- package/dist/jobs/types.d.ts +159 -0
- package/dist/jobs/types.d.ts.map +1 -0
- package/dist/jobs/types.js +22 -0
- package/dist/jobs/types.js.map +1 -0
- package/dist/mail/index.d.ts +1 -7
- package/dist/mail/index.d.ts.map +1 -1
- package/dist/mail/index.js +0 -3
- package/dist/mail/index.js.map +1 -1
- package/dist/mail/provider.d.ts +7 -0
- package/dist/mail/provider.d.ts.map +1 -1
- package/dist/maintenance.d.ts +6 -43
- package/dist/maintenance.d.ts.map +1 -1
- package/dist/maintenance.js +4 -67
- package/dist/maintenance.js.map +1 -1
- package/dist/media/library.d.ts +99 -0
- package/dist/media/library.d.ts.map +1 -0
- package/dist/media/library.js +160 -0
- package/dist/media/library.js.map +1 -0
- package/dist/media/uploads.d.ts +106 -0
- package/dist/media/uploads.d.ts.map +1 -0
- package/dist/media/uploads.js +192 -0
- package/dist/media/uploads.js.map +1 -0
- package/dist/micropub/content.js +1 -1
- package/dist/micropub/content.js.map +1 -1
- package/dist/micropub/create.d.ts +7 -15
- package/dist/micropub/create.d.ts.map +1 -1
- package/dist/micropub/create.js +48 -184
- package/dist/micropub/create.js.map +1 -1
- package/dist/micropub/endpoint.d.ts +2 -2
- package/dist/micropub/endpoint.d.ts.map +1 -1
- package/dist/micropub/endpoint.js +36 -47
- package/dist/micropub/endpoint.js.map +1 -1
- package/dist/micropub/media.d.ts +1 -3
- package/dist/micropub/media.d.ts.map +1 -1
- package/dist/micropub/media.js +10 -12
- package/dist/micropub/media.js.map +1 -1
- package/dist/micropub/update.d.ts +6 -14
- package/dist/micropub/update.d.ts.map +1 -1
- package/dist/micropub/update.js +37 -90
- package/dist/micropub/update.js.map +1 -1
- package/dist/notifications/comments.d.ts +8 -6
- package/dist/notifications/comments.d.ts.map +1 -1
- package/dist/notifications/comments.js +80 -76
- package/dist/notifications/comments.js.map +1 -1
- package/dist/notifications/digest.d.ts +6 -8
- package/dist/notifications/digest.d.ts.map +1 -1
- package/dist/notifications/digest.js +15 -26
- package/dist/notifications/digest.js.map +1 -1
- package/dist/notifications/index.d.ts +9 -6
- package/dist/notifications/index.d.ts.map +1 -1
- package/dist/notifications/index.js +6 -5
- package/dist/notifications/index.js.map +1 -1
- package/dist/notifications/links.d.ts.map +1 -1
- package/dist/notifications/links.js +2 -2
- package/dist/notifications/links.js.map +1 -1
- package/dist/{mail/service.d.ts → notifications/mail-service.d.ts} +16 -20
- package/dist/notifications/mail-service.d.ts.map +1 -0
- package/dist/{mail/service.js → notifications/mail-service.js} +100 -121
- package/dist/notifications/mail-service.js.map +1 -0
- package/dist/{mail/templates.d.ts → notifications/mail-templates.d.ts} +4 -2
- package/dist/notifications/mail-templates.d.ts.map +1 -0
- package/dist/{mail/templates.js → notifications/mail-templates.js} +5 -3
- package/dist/notifications/mail-templates.js.map +1 -0
- package/dist/notifications/optouts.d.ts +0 -2
- package/dist/notifications/optouts.d.ts.map +1 -1
- package/dist/notifications/optouts.js +2 -4
- package/dist/notifications/optouts.js.map +1 -1
- package/dist/notifications/tokens.d.ts +2 -4
- package/dist/notifications/tokens.d.ts.map +1 -1
- package/dist/notifications/tokens.js +4 -30
- package/dist/notifications/tokens.js.map +1 -1
- package/dist/notify.d.ts +4 -2
- package/dist/notify.d.ts.map +1 -1
- package/dist/notify.js +35 -35
- package/dist/notify.js.map +1 -1
- package/dist/plugin.d.ts +59 -19
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +22 -4
- package/dist/plugin.js.map +1 -1
- package/dist/plugins/changes.d.ts +0 -1
- package/dist/plugins/changes.d.ts.map +1 -1
- package/dist/plugins/changes.js +2 -3
- package/dist/plugins/changes.js.map +1 -1
- package/dist/plugins/data.d.ts +19 -0
- package/dist/plugins/data.d.ts.map +1 -0
- package/dist/plugins/data.js +117 -0
- package/dist/plugins/data.js.map +1 -0
- package/dist/plugins/enabled.d.ts +1 -13
- package/dist/plugins/enabled.d.ts.map +1 -1
- package/dist/plugins/enabled.js +12 -26
- package/dist/plugins/enabled.js.map +1 -1
- package/dist/plugins/fetch.d.ts +1 -1
- package/dist/plugins/fetch.d.ts.map +1 -1
- package/dist/plugins/fetch.js +1 -1
- package/dist/plugins/fetch.js.map +1 -1
- package/dist/plugins/folder.d.ts.map +1 -1
- package/dist/plugins/folder.js +1 -3
- package/dist/plugins/folder.js.map +1 -1
- package/dist/plugins/install.d.ts +1 -1
- package/dist/plugins/install.d.ts.map +1 -1
- package/dist/plugins/install.js +14 -45
- package/dist/plugins/install.js.map +1 -1
- package/dist/plugins/manage.d.ts +1 -1
- package/dist/plugins/manage.d.ts.map +1 -1
- package/dist/plugins/migrate-settings.d.ts +7 -0
- package/dist/plugins/migrate-settings.d.ts.map +1 -0
- package/dist/plugins/migrate-settings.js +41 -0
- package/dist/plugins/migrate-settings.js.map +1 -0
- package/dist/plugins/registry.d.ts +10 -14
- package/dist/plugins/registry.d.ts.map +1 -1
- package/dist/plugins/registry.js +63 -45
- package/dist/plugins/registry.js.map +1 -1
- package/dist/plugins/settings.d.ts +5 -57
- package/dist/plugins/settings.d.ts.map +1 -1
- package/dist/plugins/settings.js +47 -181
- package/dist/plugins/settings.js.map +1 -1
- package/dist/plugins/site.d.ts +3 -2
- package/dist/plugins/site.d.ts.map +1 -1
- package/dist/plugins/site.js +8 -8
- package/dist/plugins/site.js.map +1 -1
- package/dist/plugins/upgrade.d.ts.map +1 -1
- package/dist/plugins/upgrade.js +4 -3
- package/dist/plugins/upgrade.js.map +1 -1
- package/dist/privacy/erase.d.ts +1 -1
- package/dist/privacy/erase.d.ts.map +1 -1
- package/dist/privacy/retention.d.ts +6 -2
- package/dist/privacy/retention.d.ts.map +1 -1
- package/dist/privacy/retention.js +20 -15
- package/dist/privacy/retention.js.map +1 -1
- package/dist/settings/akismet.d.ts +9 -0
- package/dist/settings/akismet.d.ts.map +1 -0
- package/dist/settings/akismet.js +46 -0
- package/dist/settings/akismet.js.map +1 -0
- package/dist/settings/declare.d.ts +15 -0
- package/dist/settings/declare.d.ts.map +1 -0
- package/dist/settings/declare.js +20 -0
- package/dist/settings/declare.js.map +1 -0
- package/dist/settings/dev-mode.d.ts +29 -0
- package/dist/settings/dev-mode.d.ts.map +1 -0
- package/dist/settings/dev-mode.js +77 -0
- package/dist/settings/dev-mode.js.map +1 -0
- package/dist/settings/kinds.d.ts +13 -0
- package/dist/settings/kinds.d.ts.map +1 -0
- package/dist/settings/kinds.js +108 -0
- package/dist/settings/kinds.js.map +1 -0
- package/dist/settings/mail.d.ts +10 -0
- package/dist/settings/mail.d.ts.map +1 -0
- package/dist/settings/mail.js +92 -0
- package/dist/settings/mail.js.map +1 -0
- package/dist/settings/maintenance.d.ts +6 -0
- package/dist/settings/maintenance.d.ts.map +1 -0
- package/dist/settings/maintenance.js +33 -0
- package/dist/settings/maintenance.js.map +1 -0
- package/dist/settings/names.d.ts +7 -0
- package/dist/settings/names.d.ts.map +1 -0
- package/dist/settings/names.js +31 -0
- package/dist/settings/names.js.map +1 -0
- package/dist/settings/presence.d.ts +2 -0
- package/dist/settings/presence.d.ts.map +1 -0
- package/dist/settings/presence.js +7 -0
- package/dist/settings/presence.js.map +1 -0
- package/dist/settings/registry.d.ts +14 -0
- package/dist/settings/registry.d.ts.map +1 -0
- package/dist/settings/registry.js +369 -0
- package/dist/settings/registry.js.map +1 -0
- package/dist/settings/types.d.ts +176 -0
- package/dist/settings/types.d.ts.map +1 -0
- package/dist/settings/types.js +2 -0
- package/dist/settings/types.js.map +1 -0
- package/dist/site/admin-paths.d.ts +23 -0
- package/dist/site/admin-paths.d.ts.map +1 -0
- package/dist/site/admin-paths.js +25 -0
- package/dist/site/admin-paths.js.map +1 -0
- package/dist/site/admin-theme.d.ts.map +1 -0
- package/dist/site/admin-theme.js.map +1 -0
- package/dist/{web → site}/authors.d.ts +1 -72
- package/dist/site/authors.d.ts.map +1 -0
- package/dist/site/authors.js +107 -0
- package/dist/site/authors.js.map +1 -0
- package/dist/site/feed-settings.d.ts +28 -0
- package/dist/site/feed-settings.d.ts.map +1 -0
- package/dist/site/feed-settings.js +22 -0
- package/dist/site/feed-settings.js.map +1 -0
- package/dist/{web/indexnow.d.ts → site/indexnow-key.d.ts} +1 -1
- package/dist/site/indexnow-key.d.ts.map +1 -0
- package/dist/{web/indexnow.js → site/indexnow-key.js} +1 -1
- package/dist/site/indexnow-key.js.map +1 -0
- package/dist/site/namespace.d.ts +88 -0
- package/dist/site/namespace.d.ts.map +1 -0
- package/dist/site/namespace.js +471 -0
- package/dist/site/namespace.js.map +1 -0
- package/dist/{web → site}/navigation.d.ts +7 -1
- package/dist/site/navigation.d.ts.map +1 -0
- package/dist/{web → site}/navigation.js +18 -0
- package/dist/site/navigation.js.map +1 -0
- package/dist/{notifications/preferences.d.ts → site/notification-preferences.d.ts} +2 -2
- package/dist/site/notification-preferences.d.ts.map +1 -0
- package/dist/{notifications/preferences.js → site/notification-preferences.js} +1 -1
- package/dist/site/notification-preferences.js.map +1 -0
- package/dist/site/passwords.d.ts.map +1 -0
- package/dist/site/passwords.js.map +1 -0
- package/dist/{privacy/policy.d.ts → site/retention-policy.d.ts} +1 -1
- package/dist/site/retention-policy.d.ts.map +1 -0
- package/dist/{privacy/policy.js → site/retention-policy.js} +1 -1
- package/dist/site/retention-policy.js.map +1 -0
- package/dist/site/robots.d.ts +62 -0
- package/dist/site/robots.d.ts.map +1 -0
- package/dist/site/robots.js +130 -0
- package/dist/site/robots.js.map +1 -0
- package/dist/site/setting-rows.d.ts +45 -0
- package/dist/site/setting-rows.d.ts.map +1 -0
- package/dist/site/setting-rows.js +361 -0
- package/dist/site/setting-rows.js.map +1 -0
- package/dist/site/setting-values.d.ts +63 -0
- package/dist/site/setting-values.d.ts.map +1 -0
- package/dist/site/setting-values.js +170 -0
- package/dist/site/setting-values.js.map +1 -0
- package/dist/site/settings-form.d.ts +30 -0
- package/dist/site/settings-form.d.ts.map +1 -0
- package/dist/site/settings-form.js +54 -0
- package/dist/site/settings-form.js.map +1 -0
- package/dist/site/settings.d.ts +29 -0
- package/dist/site/settings.d.ts.map +1 -0
- package/dist/site/settings.js +44 -0
- package/dist/site/settings.js.map +1 -0
- package/dist/site/site-json.d.ts +38 -0
- package/dist/site/site-json.d.ts.map +1 -0
- package/dist/site/site-json.js +69 -0
- package/dist/site/site-json.js.map +1 -0
- package/dist/{admin/accounts.d.ts → site/users.d.ts} +25 -50
- package/dist/site/users.d.ts.map +1 -0
- package/dist/{admin/accounts.js → site/users.js} +51 -166
- package/dist/site/users.js.map +1 -0
- package/dist/store/admin-store.d.ts +72 -0
- package/dist/store/admin-store.d.ts.map +1 -0
- package/dist/store/admin-store.js +62 -0
- package/dist/store/admin-store.js.map +1 -0
- package/dist/store/comments.d.ts +253 -0
- package/dist/store/comments.d.ts.map +1 -0
- package/dist/store/comments.js +234 -0
- package/dist/store/comments.js.map +1 -0
- package/dist/store/conversation.d.ts +28 -0
- package/dist/store/conversation.d.ts.map +1 -0
- package/dist/store/conversation.js +16 -0
- package/dist/store/conversation.js.map +1 -0
- package/dist/store/deliveries.d.ts +92 -0
- package/dist/store/deliveries.d.ts.map +1 -0
- package/dist/store/deliveries.js +88 -0
- package/dist/store/deliveries.js.map +1 -0
- package/dist/store/followers.d.ts +91 -0
- package/dist/store/followers.d.ts.map +1 -0
- package/dist/store/followers.js +79 -0
- package/dist/store/followers.js.map +1 -0
- package/dist/{federation/replies.d.ts → store/inbox-replies.d.ts} +2 -2
- package/dist/store/inbox-replies.d.ts.map +1 -0
- package/dist/{federation/replies.js → store/inbox-replies.js} +2 -4
- package/dist/store/inbox-replies.js.map +1 -0
- package/dist/store/inbox.d.ts +132 -0
- package/dist/store/inbox.d.ts.map +1 -0
- package/dist/store/inbox.js +157 -0
- package/dist/store/inbox.js.map +1 -0
- package/dist/store/profiles.d.ts +49 -0
- package/dist/store/profiles.d.ts.map +1 -0
- package/dist/store/profiles.js +71 -0
- package/dist/store/profiles.js.map +1 -0
- package/dist/store/queue-database.d.ts +11 -0
- package/dist/store/queue-database.d.ts.map +1 -0
- package/dist/store/queue-database.js +39 -0
- package/dist/store/queue-database.js.map +1 -0
- package/dist/store/relays.d.ts +66 -0
- package/dist/store/relays.d.ts.map +1 -0
- package/dist/store/relays.js +69 -0
- package/dist/store/relays.js.map +1 -0
- package/dist/store/rows.d.ts +33 -0
- package/dist/store/rows.d.ts.map +1 -0
- package/dist/store/rows.js +44 -0
- package/dist/store/rows.js.map +1 -0
- package/dist/store/schema.d.ts +14 -0
- package/dist/store/schema.d.ts.map +1 -0
- package/dist/store/schema.js +588 -0
- package/dist/store/schema.js.map +1 -0
- package/dist/store/sessions.d.ts +90 -0
- package/dist/store/sessions.d.ts.map +1 -0
- package/dist/store/sessions.js +107 -0
- package/dist/store/sessions.js.map +1 -0
- package/dist/store/state.d.ts +18 -0
- package/dist/store/state.d.ts.map +1 -0
- package/dist/store/state.js +19 -0
- package/dist/store/state.js.map +1 -0
- package/dist/store/tokens.d.ts +75 -0
- package/dist/store/tokens.d.ts.map +1 -0
- package/dist/store/tokens.js +82 -0
- package/dist/store/tokens.js.map +1 -0
- package/dist/store/webmentions.d.ts +66 -0
- package/dist/store/webmentions.d.ts.map +1 -0
- package/dist/store/webmentions.js +84 -0
- package/dist/store/webmentions.js.map +1 -0
- package/dist/supervisor/control.d.ts +1 -0
- package/dist/supervisor/control.d.ts.map +1 -1
- package/dist/supervisor/control.js +10 -0
- package/dist/supervisor/control.js.map +1 -1
- package/dist/supervisor/primary.d.ts +1 -1
- package/dist/supervisor/primary.d.ts.map +1 -1
- package/dist/supervisor/primary.js +46 -14
- package/dist/supervisor/primary.js.map +1 -1
- package/dist/supervisor/worker.d.ts +6 -2
- package/dist/supervisor/worker.d.ts.map +1 -1
- package/dist/supervisor/worker.js +4 -4
- package/dist/supervisor/worker.js.map +1 -1
- package/dist/testing.d.ts +8 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +6 -0
- package/dist/testing.js.map +1 -0
- package/dist/{web → theme}/assets.d.ts +1 -32
- package/dist/theme/assets.d.ts.map +1 -0
- package/dist/{web → theme}/assets.js +2 -100
- package/dist/theme/assets.js.map +1 -0
- package/dist/theme/site-data.d.ts +187 -0
- package/dist/theme/site-data.d.ts.map +1 -0
- package/dist/theme/site-data.js +160 -0
- package/dist/theme/site-data.js.map +1 -0
- package/dist/{web → theme}/templates.d.ts +2 -0
- package/dist/theme/templates.d.ts.map +1 -0
- package/dist/{web → theme}/templates.js +9 -32
- package/dist/theme/templates.js.map +1 -0
- package/dist/{web → theme}/themes.d.ts +1 -0
- package/dist/theme/themes.d.ts.map +1 -0
- package/dist/{web → theme}/themes.js +6 -3
- package/dist/theme/themes.js.map +1 -0
- package/dist/util/client-id.d.ts.map +1 -0
- package/dist/util/client-id.js.map +1 -0
- package/dist/util/clock.d.ts +9 -0
- package/dist/util/clock.d.ts.map +1 -0
- package/dist/util/clock.js +2 -0
- package/dist/util/clock.js.map +1 -0
- package/dist/util/errors.d.ts +3 -0
- package/dist/util/errors.d.ts.map +1 -0
- package/dist/util/errors.js +5 -0
- package/dist/util/errors.js.map +1 -0
- package/dist/util/files.d.ts +5 -0
- package/dist/util/files.d.ts.map +1 -0
- package/dist/util/files.js +38 -0
- package/dist/util/files.js.map +1 -0
- package/dist/util/forms.d.ts +5 -0
- package/dist/util/forms.d.ts.map +1 -0
- package/dist/util/forms.js +17 -0
- package/dist/util/forms.js.map +1 -0
- package/dist/util/guards.d.ts +4 -0
- package/dist/util/guards.d.ts.map +1 -0
- package/dist/util/guards.js +12 -0
- package/dist/util/guards.js.map +1 -0
- package/dist/{webmention/html.d.ts → util/html-tree.d.ts} +2 -2
- package/dist/util/html-tree.d.ts.map +1 -0
- package/dist/{webmention/html.js → util/html-tree.js} +3 -64
- package/dist/util/html-tree.js.map +1 -0
- package/dist/util/html.d.ts +4 -0
- package/dist/util/html.d.ts.map +1 -0
- package/dist/util/html.js +34 -0
- package/dist/util/html.js.map +1 -0
- package/dist/util/public-address.d.ts.map +1 -0
- package/dist/util/public-address.js.map +1 -0
- package/dist/util/queue.d.ts +7 -0
- package/dist/util/queue.d.ts.map +1 -0
- package/dist/util/queue.js +23 -0
- package/dist/util/queue.js.map +1 -0
- package/dist/util/retry.d.ts +11 -0
- package/dist/util/retry.d.ts.map +1 -0
- package/dist/util/retry.js +14 -0
- package/dist/util/retry.js.map +1 -0
- package/dist/util/url.d.ts +11 -0
- package/dist/util/url.d.ts.map +1 -0
- package/dist/util/url.js +20 -0
- package/dist/util/url.js.map +1 -0
- package/dist/web/absolute-urls.js +1 -1
- package/dist/web/absolute-urls.js.map +1 -1
- package/dist/web/archive.js +2 -2
- package/dist/web/archive.js.map +1 -1
- package/dist/web/asset-routes.d.ts +52 -0
- package/dist/web/asset-routes.d.ts.map +1 -0
- package/dist/web/asset-routes.js +115 -0
- package/dist/web/asset-routes.js.map +1 -0
- package/dist/{avatars/routes.d.ts → web/avatar-routes.d.ts} +2 -2
- package/dist/web/avatar-routes.d.ts.map +1 -0
- package/dist/{avatars/routes.js → web/avatar-routes.js} +3 -3
- package/dist/web/avatar-routes.js.map +1 -0
- package/dist/web/comment-routes.d.ts +18 -0
- package/dist/web/comment-routes.d.ts.map +1 -0
- package/dist/web/comment-routes.js +177 -0
- package/dist/web/comment-routes.js.map +1 -0
- package/dist/web/compression.d.ts.map +1 -1
- package/dist/web/compression.js +1 -2
- package/dist/web/compression.js.map +1 -1
- package/dist/{contact/routes.d.ts → web/contact-routes.d.ts} +2 -2
- package/dist/web/contact-routes.d.ts.map +1 -0
- package/dist/{contact/routes.js → web/contact-routes.js} +15 -18
- package/dist/web/contact-routes.js.map +1 -0
- package/dist/web/context.d.ts +6 -187
- package/dist/web/context.d.ts.map +1 -1
- package/dist/web/context.js +13 -174
- package/dist/web/context.js.map +1 -1
- package/dist/web/conversation.d.ts +6 -357
- package/dist/web/conversation.d.ts.map +1 -1
- package/dist/web/conversation.js +177 -151
- package/dist/web/conversation.js.map +1 -1
- package/dist/web/document-page.d.ts +13 -0
- package/dist/web/document-page.d.ts.map +1 -0
- package/dist/web/document-page.js +137 -0
- package/dist/web/document-page.js.map +1 -0
- package/dist/web/document-site.d.ts +14 -0
- package/dist/web/document-site.d.ts.map +1 -0
- package/dist/web/document-site.js +29 -0
- package/dist/web/document-site.js.map +1 -0
- package/dist/web/embed.d.ts +13 -0
- package/dist/web/embed.d.ts.map +1 -0
- package/dist/web/embed.js +66 -0
- package/dist/web/embed.js.map +1 -0
- package/dist/{env.d.ts → web/env.d.ts} +36 -26
- package/dist/web/env.d.ts.map +1 -0
- package/dist/web/env.js.map +1 -0
- package/dist/web/federation-routes.d.ts +33 -0
- package/dist/web/federation-routes.d.ts.map +1 -0
- package/dist/web/federation-routes.js +282 -0
- package/dist/web/federation-routes.js.map +1 -0
- package/dist/web/feed-atom.d.ts.map +1 -1
- package/dist/web/feed-atom.js +4 -3
- package/dist/web/feed-atom.js.map +1 -1
- package/dist/web/feed-item.d.ts +4 -39
- package/dist/web/feed-item.d.ts.map +1 -1
- package/dist/web/feed-item.js +9 -73
- package/dist/web/feed-item.js.map +1 -1
- package/dist/web/feed-json.js +2 -2
- package/dist/web/feed-json.js.map +1 -1
- package/dist/web/feed-routes.d.ts +35 -0
- package/dist/web/feed-routes.d.ts.map +1 -0
- package/dist/web/feed-routes.js +126 -0
- package/dist/web/feed-routes.js.map +1 -0
- package/dist/web/feed-rss.d.ts.map +1 -1
- package/dist/web/feed-rss.js +9 -6
- package/dist/web/feed-rss.js.map +1 -1
- package/dist/web/feed-source.d.ts +11 -41
- package/dist/web/feed-source.d.ts.map +1 -1
- package/dist/web/feed-source.js +11 -48
- package/dist/web/feed-source.js.map +1 -1
- package/dist/web/feeds.d.ts +4 -2
- package/dist/web/feeds.d.ts.map +1 -1
- package/dist/web/feeds.js +8 -5
- package/dist/web/feeds.js.map +1 -1
- package/dist/web/health.d.ts +1 -1
- package/dist/web/health.d.ts.map +1 -1
- package/dist/web/health.js +1 -1
- package/dist/web/health.js.map +1 -1
- package/dist/web/index.d.ts +53 -29
- package/dist/web/index.d.ts.map +1 -1
- package/dist/web/index.js +37 -18
- package/dist/web/index.js.map +1 -1
- package/dist/{indieauth/activity-log.d.ts → web/indieauth-activity-log.d.ts} +3 -5
- package/dist/web/indieauth-activity-log.d.ts.map +1 -0
- package/dist/{indieauth/activity-log.js → web/indieauth-activity-log.js} +7 -10
- package/dist/web/indieauth-activity-log.js.map +1 -0
- package/dist/{indieauth/bearer.d.ts → web/indieauth-bearer.d.ts} +5 -5
- package/dist/web/indieauth-bearer.d.ts.map +1 -0
- package/dist/{indieauth/bearer.js → web/indieauth-bearer.js} +5 -5
- package/dist/web/indieauth-bearer.js.map +1 -0
- package/dist/{indieauth/discovery.d.ts → web/indieauth-discovery.d.ts} +2 -11
- package/dist/web/indieauth-discovery.d.ts.map +1 -0
- package/dist/{indieauth/discovery.js → web/indieauth-discovery.js} +7 -17
- package/dist/web/indieauth-discovery.js.map +1 -0
- package/dist/{indieauth/token.d.ts → web/indieauth-token.d.ts} +2 -2
- package/dist/web/indieauth-token.d.ts.map +1 -0
- package/dist/{indieauth/token.js → web/indieauth-token.js} +9 -9
- package/dist/web/indieauth-token.js.map +1 -0
- package/dist/web/listing-pages.d.ts +19 -0
- package/dist/web/listing-pages.d.ts.map +1 -0
- package/dist/web/listing-pages.js +147 -0
- package/dist/web/listing-pages.js.map +1 -0
- package/dist/web/listing-subject.d.ts +58 -0
- package/dist/web/listing-subject.d.ts.map +1 -0
- package/dist/web/listing-subject.js +89 -0
- package/dist/web/listing-subject.js.map +1 -0
- package/dist/web/llms.d.ts +16 -15
- package/dist/web/llms.d.ts.map +1 -1
- package/dist/web/llms.js +23 -35
- package/dist/web/llms.js.map +1 -1
- package/dist/web/maintenance.d.ts +1 -1
- package/dist/web/maintenance.d.ts.map +1 -1
- package/dist/web/maintenance.js +10 -16
- package/dist/web/maintenance.js.map +1 -1
- package/dist/web/manifest.d.ts +1 -1
- package/dist/web/manifest.d.ts.map +1 -1
- package/dist/web/manifest.js +2 -1
- package/dist/web/manifest.js.map +1 -1
- package/dist/web/markdown-page.d.ts +76 -0
- package/dist/web/markdown-page.d.ts.map +1 -0
- package/dist/web/markdown-page.js +79 -0
- package/dist/web/markdown-page.js.map +1 -0
- package/dist/web/markdown-representation.d.ts +15 -0
- package/dist/web/markdown-representation.d.ts.map +1 -0
- package/dist/web/markdown-representation.js +130 -0
- package/dist/web/markdown-representation.js.map +1 -0
- package/dist/web/negotiate.d.ts +5 -12
- package/dist/web/negotiate.d.ts.map +1 -1
- package/dist/web/negotiate.js +11 -18
- package/dist/web/negotiate.js.map +1 -1
- package/dist/{notifications/routes.d.ts → web/notification-routes.d.ts} +2 -2
- package/dist/web/notification-routes.d.ts.map +1 -0
- package/dist/{notifications/routes.js → web/notification-routes.js} +24 -29
- package/dist/web/notification-routes.js.map +1 -0
- package/dist/web/oembed.d.ts +2 -2
- package/dist/web/oembed.d.ts.map +1 -1
- package/dist/web/oembed.js +5 -4
- package/dist/web/oembed.js.map +1 -1
- package/dist/web/opensearch.d.ts.map +1 -1
- package/dist/web/opensearch.js +2 -1
- package/dist/web/opensearch.js.map +1 -1
- package/dist/web/page-sources.d.ts +14 -0
- package/dist/web/page-sources.d.ts.map +1 -0
- package/dist/web/page-sources.js +43 -0
- package/dist/web/page-sources.js.map +1 -0
- package/dist/web/pagination.d.ts +1 -0
- package/dist/web/pagination.d.ts.map +1 -1
- package/dist/web/pagination.js +4 -1
- package/dist/web/pagination.js.map +1 -1
- package/dist/web/paths.d.ts +52 -0
- package/dist/web/paths.d.ts.map +1 -0
- package/dist/web/paths.js +208 -0
- package/dist/web/paths.js.map +1 -0
- package/dist/web/pingback-routes.d.ts +5 -0
- package/dist/web/pingback-routes.d.ts.map +1 -0
- package/dist/web/pingback-routes.js +100 -0
- package/dist/web/pingback-routes.js.map +1 -0
- package/dist/{plugins/federation.d.ts → web/plugin-federation.d.ts} +3 -3
- package/dist/web/plugin-federation.d.ts.map +1 -0
- package/dist/{plugins/federation.js → web/plugin-federation.js} +55 -45
- package/dist/web/plugin-federation.js.map +1 -0
- package/dist/{plugins/mount.d.ts → web/plugin-routes.d.ts} +3 -3
- package/dist/web/plugin-routes.d.ts.map +1 -0
- package/dist/{plugins/mount.js → web/plugin-routes.js} +2 -2
- package/dist/web/plugin-routes.js.map +1 -0
- package/dist/web/redirects.d.ts +1 -84
- package/dist/web/redirects.d.ts.map +1 -1
- package/dist/web/redirects.js +0 -232
- package/dist/web/redirects.js.map +1 -1
- package/dist/web/render.d.ts +55 -12
- package/dist/web/render.d.ts.map +1 -1
- package/dist/web/render.js +123 -65
- package/dist/web/render.js.map +1 -1
- package/dist/web/request.d.ts +44 -0
- package/dist/web/request.d.ts.map +1 -0
- package/dist/web/request.js +82 -0
- package/dist/web/request.js.map +1 -0
- package/dist/web/robots.d.ts +1 -46
- package/dist/web/robots.d.ts.map +1 -1
- package/dist/web/robots.js +5 -131
- package/dist/web/robots.js.map +1 -1
- package/dist/web/routes.d.ts +5 -39
- package/dist/web/routes.d.ts.map +1 -1
- package/dist/web/routes.js +102 -1374
- package/dist/web/routes.js.map +1 -1
- package/dist/web/search.d.ts.map +1 -1
- package/dist/web/search.js +2 -9
- package/dist/web/search.js.map +1 -1
- package/dist/{admin → web}/session.d.ts +1 -5
- package/dist/web/session.d.ts.map +1 -0
- package/dist/{admin → web}/session.js +0 -4
- package/dist/web/session.js.map +1 -0
- package/dist/web/share-image.d.ts.map +1 -1
- package/dist/web/share-image.js +3 -2
- package/dist/web/share-image.js.map +1 -1
- package/dist/web/signed-in.d.ts +27 -0
- package/dist/web/signed-in.d.ts.map +1 -0
- package/dist/web/signed-in.js +45 -0
- package/dist/web/signed-in.js.map +1 -0
- package/dist/web/site-index.d.ts +13 -0
- package/dist/web/site-index.d.ts.map +1 -0
- package/dist/web/site-index.js +142 -0
- package/dist/web/site-index.js.map +1 -0
- package/dist/web/site-view.d.ts +43 -0
- package/dist/web/site-view.d.ts.map +1 -0
- package/dist/web/site-view.js +65 -0
- package/dist/web/site-view.js.map +1 -0
- package/dist/web/sitemap.d.ts.map +1 -1
- package/dist/web/sitemap.js +5 -7
- package/dist/web/sitemap.js.map +1 -1
- package/dist/{admin → web}/throttle.d.ts +3 -4
- package/dist/web/throttle.d.ts.map +1 -0
- package/dist/{admin → web}/throttle.js +1 -2
- package/dist/web/throttle.js.map +1 -0
- package/dist/web/webmention-routes.d.ts +11 -0
- package/dist/web/webmention-routes.d.ts.map +1 -0
- package/dist/web/webmention-routes.js +51 -0
- package/dist/web/webmention-routes.js.map +1 -0
- package/dist/web/well-known.d.ts +2 -2
- package/dist/web/well-known.d.ts.map +1 -1
- package/dist/web/well-known.js +10 -20
- package/dist/web/well-known.js.map +1 -1
- package/dist/webmention/cited-picture.d.ts +1 -2
- package/dist/webmention/cited-picture.d.ts.map +1 -1
- package/dist/webmention/cited-picture.js +5 -7
- package/dist/webmention/cited-picture.js.map +1 -1
- package/dist/webmention/discovery.d.ts +2 -13
- package/dist/webmention/discovery.d.ts.map +1 -1
- package/dist/webmention/discovery.js +18 -73
- package/dist/webmention/discovery.js.map +1 -1
- package/dist/webmention/endpoint.d.ts +27 -0
- package/dist/webmention/endpoint.d.ts.map +1 -0
- package/dist/webmention/endpoint.js +26 -0
- package/dist/webmention/endpoint.js.map +1 -0
- package/dist/webmention/fetch-public.d.ts +18 -1
- package/dist/webmention/fetch-public.d.ts.map +1 -1
- package/dist/webmention/fetch-public.js +57 -23
- package/dist/webmention/fetch-public.js.map +1 -1
- package/dist/webmention/index.d.ts +11 -9
- package/dist/webmention/index.d.ts.map +1 -1
- package/dist/webmention/index.js +7 -6
- package/dist/webmention/index.js.map +1 -1
- package/dist/webmention/links.d.ts +0 -55
- package/dist/webmention/links.d.ts.map +1 -1
- package/dist/webmention/links.js +2 -185
- package/dist/webmention/links.js.map +1 -1
- package/dist/webmention/microformats.d.ts +1 -1
- package/dist/webmention/microformats.d.ts.map +1 -1
- package/dist/webmention/microformats.js +1 -1
- package/dist/webmention/microformats.js.map +1 -1
- package/dist/webmention/pingback.d.ts +13 -12
- package/dist/webmention/pingback.d.ts.map +1 -1
- package/dist/webmention/pingback.js +6 -113
- package/dist/webmention/pingback.js.map +1 -1
- package/dist/webmention/receive.d.ts +9 -4
- package/dist/webmention/receive.d.ts.map +1 -1
- package/dist/webmention/receive.js +35 -41
- package/dist/webmention/receive.js.map +1 -1
- package/dist/webmention/reply-context/fediverse.d.ts +29 -0
- package/dist/webmention/reply-context/fediverse.d.ts.map +1 -0
- package/dist/webmention/reply-context/fediverse.js +59 -0
- package/dist/webmention/reply-context/fediverse.js.map +1 -0
- package/dist/webmention/reply-context/json-ld.d.ts +5 -0
- package/dist/webmention/reply-context/json-ld.d.ts.map +1 -0
- package/dist/webmention/reply-context/json-ld.js +78 -0
- package/dist/webmention/reply-context/json-ld.js.map +1 -0
- package/dist/webmention/reply-context/oembed.d.ts +21 -0
- package/dist/webmention/reply-context/oembed.d.ts.map +1 -0
- package/dist/webmention/reply-context/oembed.js +137 -0
- package/dist/webmention/reply-context/oembed.js.map +1 -0
- package/dist/webmention/reply-context/page.d.ts +30 -0
- package/dist/webmention/reply-context/page.d.ts.map +1 -0
- package/dist/webmention/reply-context/page.js +134 -0
- package/dist/webmention/reply-context/page.js.map +1 -0
- package/dist/webmention/reply-context/source.d.ts +29 -0
- package/dist/webmention/reply-context/source.d.ts.map +1 -0
- package/dist/webmention/reply-context/source.js +46 -0
- package/dist/webmention/reply-context/source.js.map +1 -0
- package/dist/webmention/reply-context.d.ts +5 -34
- package/dist/webmention/reply-context.d.ts.map +1 -1
- package/dist/webmention/reply-context.js +9 -432
- package/dist/webmention/reply-context.js.map +1 -1
- package/dist/webmention/reply-contexts.d.ts +17 -6
- package/dist/webmention/reply-contexts.d.ts.map +1 -1
- package/dist/webmention/reply-contexts.js +19 -20
- package/dist/webmention/reply-contexts.js.map +1 -1
- package/dist/webmention/routes.d.ts +1 -1
- package/dist/webmention/routes.d.ts.map +1 -1
- package/dist/webmention/routes.js +5 -8
- package/dist/webmention/routes.js.map +1 -1
- package/dist/webmention/service.d.ts +9 -7
- package/dist/webmention/service.d.ts.map +1 -1
- package/dist/webmention/service.js +111 -110
- package/dist/webmention/service.js.map +1 -1
- package/dist/webmention/syndication.d.ts +3 -26
- package/dist/webmention/syndication.d.ts.map +1 -1
- package/dist/webmention/syndication.js +6 -20
- package/dist/webmention/syndication.js.map +1 -1
- package/package.json +17 -11
- package/themes/default/README.md +36 -2339
- package/themes/default/layouts/base.njk +5 -4
- package/themes/default/layouts/front-page.njk +4 -3
- package/themes/default/layouts/page.njk +2 -0
- package/themes/default/partials/comment-form.njk +1 -1
- package/themes/default/partials/contact-form.njk +1 -2
- package/themes/default/partials/conversation.njk +1 -2
- package/themes/default/partials/markdown-footer.md.njk +24 -0
- package/themes/default/partials/markdown-header.md.njk +31 -0
- package/themes/default/partials/post-list.njk +11 -11
- package/themes/default/src/style.css +18 -6
- package/themes/default/static/style.css +19 -0
- package/dist/admin/accounts.d.ts.map +0 -1
- package/dist/admin/accounts.js.map +0 -1
- package/dist/admin/admin-theme.d.ts.map +0 -1
- package/dist/admin/admin-theme.js.map +0 -1
- package/dist/admin/enclosure-field.d.ts.map +0 -1
- package/dist/admin/enclosure-field.js.map +0 -1
- package/dist/admin/event-field.d.ts.map +0 -1
- package/dist/admin/event-field.js.map +0 -1
- package/dist/admin/location-field.d.ts +0 -27
- package/dist/admin/location-field.d.ts.map +0 -1
- package/dist/admin/location-field.js.map +0 -1
- package/dist/admin/passwords.d.ts.map +0 -1
- package/dist/admin/passwords.js.map +0 -1
- package/dist/admin/photo-field.d.ts +0 -38
- package/dist/admin/photo-field.d.ts.map +0 -1
- package/dist/admin/photo-field.js.map +0 -1
- package/dist/admin/read-field.d.ts +0 -22
- package/dist/admin/read-field.d.ts.map +0 -1
- package/dist/admin/read-field.js +0 -61
- package/dist/admin/read-field.js.map +0 -1
- package/dist/admin/session.d.ts.map +0 -1
- package/dist/admin/session.js.map +0 -1
- package/dist/admin/store.d.ts +0 -1025
- package/dist/admin/store.d.ts.map +0 -1
- package/dist/admin/store.js +0 -1628
- package/dist/admin/store.js.map +0 -1
- package/dist/admin/throttle.d.ts.map +0 -1
- package/dist/admin/throttle.js.map +0 -1
- package/dist/avatars/routes.d.ts.map +0 -1
- package/dist/avatars/routes.js.map +0 -1
- package/dist/contact/routes.d.ts.map +0 -1
- package/dist/contact/routes.js.map +0 -1
- package/dist/env.d.ts.map +0 -1
- package/dist/env.js.map +0 -1
- package/dist/federation/replies.d.ts.map +0 -1
- package/dist/federation/replies.js.map +0 -1
- package/dist/images/alt-text.d.ts.map +0 -1
- package/dist/images/alt-text.js.map +0 -1
- package/dist/indieauth/activity-log.d.ts.map +0 -1
- package/dist/indieauth/activity-log.js.map +0 -1
- package/dist/indieauth/app-activity.d.ts.map +0 -1
- package/dist/indieauth/app-activity.js.map +0 -1
- package/dist/indieauth/bearer.d.ts.map +0 -1
- package/dist/indieauth/bearer.js.map +0 -1
- package/dist/indieauth/client-id.d.ts.map +0 -1
- package/dist/indieauth/client-id.js.map +0 -1
- package/dist/indieauth/connected-apps.d.ts.map +0 -1
- package/dist/indieauth/connected-apps.js.map +0 -1
- package/dist/indieauth/consent.d.ts.map +0 -1
- package/dist/indieauth/consent.js.map +0 -1
- package/dist/indieauth/discovery.d.ts.map +0 -1
- package/dist/indieauth/discovery.js.map +0 -1
- package/dist/indieauth/token.d.ts.map +0 -1
- package/dist/indieauth/token.js.map +0 -1
- package/dist/mail/service.d.ts.map +0 -1
- package/dist/mail/service.js.map +0 -1
- package/dist/mail/templates.d.ts.map +0 -1
- package/dist/mail/templates.js.map +0 -1
- package/dist/notifications/preferences.d.ts.map +0 -1
- package/dist/notifications/preferences.js.map +0 -1
- package/dist/notifications/routes.d.ts.map +0 -1
- package/dist/notifications/routes.js.map +0 -1
- package/dist/plugins/federation.d.ts.map +0 -1
- package/dist/plugins/federation.js.map +0 -1
- package/dist/plugins/mount.d.ts.map +0 -1
- package/dist/plugins/mount.js.map +0 -1
- package/dist/privacy/policy.d.ts.map +0 -1
- package/dist/privacy/policy.js.map +0 -1
- package/dist/web/admin-bar.d.ts.map +0 -1
- package/dist/web/admin-bar.js.map +0 -1
- package/dist/web/assets.d.ts.map +0 -1
- package/dist/web/assets.js.map +0 -1
- package/dist/web/authors.d.ts.map +0 -1
- package/dist/web/authors.js +0 -211
- package/dist/web/authors.js.map +0 -1
- package/dist/web/documents.d.ts +0 -81
- package/dist/web/documents.d.ts.map +0 -1
- package/dist/web/documents.js.map +0 -1
- package/dist/web/errors.d.ts.map +0 -1
- package/dist/web/errors.js.map +0 -1
- package/dist/web/guids.d.ts.map +0 -1
- package/dist/web/guids.js.map +0 -1
- package/dist/web/indexnow.d.ts.map +0 -1
- package/dist/web/indexnow.js.map +0 -1
- package/dist/web/license.d.ts.map +0 -1
- package/dist/web/license.js.map +0 -1
- package/dist/web/locale.d.ts.map +0 -1
- package/dist/web/locale.js.map +0 -1
- package/dist/web/navigation.d.ts.map +0 -1
- package/dist/web/navigation.js.map +0 -1
- package/dist/web/recent.d.ts +0 -43
- package/dist/web/recent.d.ts.map +0 -1
- package/dist/web/recent.js +0 -37
- package/dist/web/recent.js.map +0 -1
- package/dist/web/sanitize.d.ts +0 -29
- package/dist/web/sanitize.d.ts.map +0 -1
- package/dist/web/sanitize.js.map +0 -1
- package/dist/web/taxonomy.d.ts.map +0 -1
- package/dist/web/taxonomy.js.map +0 -1
- package/dist/web/templates.d.ts.map +0 -1
- package/dist/web/templates.js.map +0 -1
- package/dist/web/themes.d.ts.map +0 -1
- package/dist/web/themes.js.map +0 -1
- package/dist/webmention/html.d.ts.map +0 -1
- package/dist/webmention/html.js.map +0 -1
- package/dist/webmention/public-address.d.ts.map +0 -1
- package/dist/webmention/public-address.js.map +0 -1
- /package/dist/{web → content}/license.d.ts +0 -0
- /package/dist/{web → content}/license.js +0 -0
- /package/dist/{admin → site}/admin-theme.d.ts +0 -0
- /package/dist/{admin → site}/admin-theme.js +0 -0
- /package/dist/{admin → site}/passwords.d.ts +0 -0
- /package/dist/{admin → site}/passwords.js +0 -0
- /package/dist/{indieauth → util}/client-id.d.ts +0 -0
- /package/dist/{indieauth → util}/client-id.js +0 -0
- /package/dist/{webmention → util}/public-address.d.ts +0 -0
- /package/dist/{webmention → util}/public-address.js +0 -0
- /package/dist/{env.js → web/env.js} +0 -0
package/dist/index.js
CHANGED
|
@@ -1,840 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
import { Hono } from 'hono';
|
|
5
|
-
import { createAccessLog } from './access-log.js';
|
|
6
|
-
import { createWriteGate } from './drain.js';
|
|
7
|
-
import { createSettlingQueue } from './federation/queue.js';
|
|
8
|
-
import { leavingWriteGate } from './supervisor/supervision.js';
|
|
9
|
-
import { refuseWritesUnder } from './files/atomic.js';
|
|
10
|
-
import { compression } from './web/compression.js';
|
|
11
|
-
import { createAvatarService } from './avatars/index.js';
|
|
12
|
-
import { createRetentionService } from './privacy/retention.js';
|
|
13
|
-
import { baselineSecurityHeaders, effectiveBaseUrl, listUsers, migrateSettingsToFile, migrateUsersToFile, mountAdmin, openAdminStore, readSiteSettings, } from './admin/index.js';
|
|
14
|
-
import { withRebuiltDatabase } from './cache.js';
|
|
15
|
-
import { resolveConfig } from './config.js';
|
|
16
|
-
import { createContentSync, createScheduler, openContentStore } from './content/index.js';
|
|
17
|
-
import { shareLocation } from './content/location.js';
|
|
18
|
-
import { postLocations } from './content/locations.js';
|
|
19
|
-
import { createMailService } from './mail/index.js';
|
|
20
|
-
import { readEnabledPlugins } from './plugins/enabled.js';
|
|
21
|
-
import { mountPluginRoutes, pluginLifecycle } from './plugins/mount.js';
|
|
22
|
-
import { pluginFederation } from './plugins/federation.js';
|
|
23
|
-
import { sitePluginRegistry } from './plugins/site.js';
|
|
24
|
-
import { createCommentDigest, createCommentNotifier } from './notifications/index.js';
|
|
25
|
-
import { assertActorKeysUsable, createActorProfileService, createDeliveryService, createRelayService, createSiteFederation, migrateActorKeysToFiles, migrateFederationToFiles, mountFederation, rebuildFederationIndexes, signedProfileLoader, } from './federation/index.js';
|
|
26
|
-
import { createReplyBackfill, signedRepliesLoader } from './federation/backfill.js';
|
|
27
|
-
import { citedPostReader } from './federation/cited-post.js';
|
|
28
|
-
import { handleLearner } from './federation/handles.js';
|
|
29
|
-
import { createFeedNotifier } from './notify.js';
|
|
30
|
-
import { createIndexNowNotifier } from './indexnow.js';
|
|
31
|
-
import { commentFormFor, createAkismetChecker, followAllMovedComments, followMovedComments, migrateCommentEmails, migrateCommentKeys, rebuildCommentIndexes, } from './comments/index.js';
|
|
32
|
-
import { contactFormFor } from './contact/index.js';
|
|
33
|
-
import { settleImageVariants } from './images/variants.js';
|
|
34
|
-
import { createMaintenanceSwitch } from './maintenance.js';
|
|
35
|
-
import { enterDevMode } from './dev-mode.js';
|
|
36
|
-
import { createConversation, createRedirectSource, createRenderer, createSiteDataSource, createThemeSource, frontPageSlugs, maintenanceGate, mountHealth, mountPublicSite, mountWellKnown, redirectBy, serverError, themeName, } from './web/index.js';
|
|
37
|
-
import { activityLogSettled } from './indieauth/activity-log.js';
|
|
38
|
-
import { mountAuthorizationEndpoint } from './indieauth/consent.js';
|
|
39
|
-
import { mountIndieAuthDiscovery } from './indieauth/discovery.js';
|
|
40
|
-
import { createIndieAuthState } from './indieauth/grants.js';
|
|
41
|
-
import { mountTokenEndpoint, mountTokenInfoEndpoints } from './indieauth/token.js';
|
|
42
|
-
import { mountMicropub } from './micropub/endpoint.js';
|
|
43
|
-
import { mountMicropubMedia } from './micropub/media.js';
|
|
44
|
-
import { createReplyContextService, createWebmentionService, followMovedWebmentions, } from './webmention/index.js';
|
|
45
|
-
import { heldReplyContext } from './webmention/reply-context.js';
|
|
46
|
-
import { createReplyNotices } from './comments/reply-notices.js';
|
|
47
|
-
import { selectedTargets, syndicationCopies, syndicationTargetProblems, syndicationTargetsReader, } from './webmention/syndication.js';
|
|
48
|
-
export { createFeedNotifier, NOTIFY_TIMEOUT_MS } from './notify.js';
|
|
49
|
-
export { createIndexNowNotifier, defaultIndexNowBackoffMs, INDEXNOW_ENDPOINT } from './indexnow.js';
|
|
50
|
-
export { LANGUAGE_TAG_PATTERN, COMMENT_ACTIONS, COMMENT_ADMIN_FIELDS, COMMENT_KINDS, COMMENT_SOURCES, COMMENT_STATUSES, COMMENT_TABS, COMMENTS_MODERATE_PATH, COMMENTS_PATH, COMMENTS_PER_PAGE, COMMENTS_REPLY_PATH, COMMENTS_SECTION, commentListUrl, mountCommentsScreen, pendingComments, MESSAGE_FIELDS, MESSAGE_TABS, MESSAGES_DELETE_PATH, MESSAGES_PATH, MESSAGES_PER_PAGE, MESSAGES_READ_PATH, MESSAGES_SECTION, messageListUrl, mountMessagesScreen, unreadMessages, DELIVERY_STATUSES, RELAY_STATES, ADMIN_ASSET_MAX_AGE, ADMIN_ASSET_PREFIX, ADMIN_PREFIX, ADMIN_SECTIONS, ADMIN_STATIC_DIR, ADMIN_TEMPLATES, actorSummary, addUserProblems, adminAssetResponse, adminContentSecurityPolicy, adminSecurityHeaders, akismetPanel, AKISMET_FIELDS, AKISMET_PATH, AKISMET_REMOVE, EMAIL_PATTERN, MAIL_FIELDS, MAIL_PATH, MAIL_REMOVE, MAIL_TEST_FIELDS, MAIL_TEST_PATH, MAIL_TEST_TEMPLATE, mailPanel, ARGON2_PARAMETERS, baselineSecurityHeaders, blankForm, CHANGE_PASSWORD_PATH, changePasswordProblems, clearSessionCookie, createAdminTemplateEnvironment, createLoginThrottle, createNonce, credentialProblem, clientAddress, countUsers, createUser, CSRF_FIELD, csrfTokenMatches, DASHBOARD_RECENT_POSTS, describeWait, DEFAULT_SITE_SETTINGS, DELETE_USER_PATH, deleteUser, deleteUserRefusal, deliveryRows, DOCUMENT_FILTERS, documentFilter, DOCUMENTS_PER_PAGE, editorPath, effectiveBaseUrl, EXCLUDE_KEY, DuplicateUsernameError, emailProblem, FEDERATION_FIELDS, FEDERATION_PATH, FEDERATION_RECENT, FEDERATION_SETTINGS_PATH, findAdminAsset, findBySlug, findUser, findUserById, findUserByIdentifier, followerRow, FORGOT_PATH, formatInTimezone, formFor, applyTermChange, CATEGORY_KIND, deletePath, formFromSettings, flash, GENERATED_PASSWORD_ALPHABET, GENERATED_PASSWORD_LENGTH, generatePassword, guard, hashPassword, HSTS_MAX_AGE, HSTS_VALUE, INBOX_INTERACTIONS, inboxRows, LOCKOUT_GROWTH_LIMIT, LOGIN_PATH, LOGOUT_PATH, listingUrl, listOptionsFor, listUsers, localPosts, loginKeys, MAXIMUM_USERNAME_LENGTH, migrateSettingsToFile, migrateUsersToFile, MINIMUM_PASSWORD_LENGTH, mountAdmin, mountDocumentScreens, mountFederationScreen, mountPreview, mountRecovery, mountSettings, mountTaxonomyScreens, mountUploads, mountUsers, newEditorPath, newPasswordProblem, NONCE_BYTES, openAdminStore, PAGE_KIND, PACKAGED_ADMIN_DIR, PASSWORD_CHANGED_TEMPLATE, passwordProblem, postEditorPath, POST_KIND, primaryUser, PREVIEW_PATH, readSiteSettings, RECOVERY_ANSWER, RECOVERY_FIELDS, RELAY_RETRY_PATH, RELAY_STATE_LABELS, relayList, relayRow, renamePath, renameProblem, RESEND_PATH, resendMessage, RESET_PATH, RESET_TEMPLATE, RESET_TOKEN_LIFETIME_SECONDS, resetLink, rewriteTerm, MEDIA_DELETE_PATH, MEDIA_FIELDS, MEDIA_PATH, MEDIA_PER_PAGE, MEDIA_SECTION, MEDIA_UPLOAD_PATH, mediaPageUrl, mentionsUpload, mountMediaScreen, deleteUpload, describeUpload, listUploads, referencesTo, resolveUpload, uploadMarkdown, normalizeRelayInbox, refusedUpload, refuseOversizedUpload, returnPath, SECURE_SESSION_COOKIE, SESSION_COOKIE, sessionCookieName, SESSION_ID_BYTES, sessionIdFrom, setSessionCookie, SETTINGS_FIELDS, SETTINGS_PATH, settingsFromForm, settingsFromSiteJson, settingsProblems, SETUP_PATH, siteDataPath, siteJsonFor, splitTags, storeUpload, TAG_KIND, takeFlash, TAXONOMY_FIELDS, TAXONOMY_KINDS, tooLargeMessage, updateSiteSettings, UPLOAD_ENVELOPE_BYTES, UPLOAD_FIELD, UPLOADS_PATH, setUserEmail, setUserPassword, setUserProfile, setUserActorId, ConflictingActorIdError, UnknownUserError, USER_EMAIL_PATH, USER_FIELDS, USERNAME_PATTERN, usernameProblem, USERS_FILE, USERS_FILE_MODE, usersFile, USERS_PATH, usesSecureCookies, verifyPasswordHash, verifyUserPassword, writeSiteJson, } from './admin/index.js';
|
|
51
|
-
// The database as a file a site may act on: where it is, how to throw it away,
|
|
52
|
-
// and the two refusals a boot can raise over one. The migration machinery
|
|
53
|
-
// behind them stays inside the package, because a site has no business running
|
|
54
|
-
// somebody else's ledger.
|
|
55
|
-
export { databaseFile, databaseFiles, DATABASE_SUFFIXES, discardDatabase, OutdatedDatabaseError, UnusableDatabaseError, } from './cache.js';
|
|
56
|
-
export { DEFAULT_IMAGE_FORMATS, DEFAULT_IMAGE_WIDTHS, DEFAULT_SECURITY_HEADERS, DEFAULT_UPLOAD_MAX_BYTES, DEFAULT_UPLOAD_MEDIA_MAX_BYTES, DEFAULT_UPLOAD_TYPES, defineConfig, KNOWN_IMAGE_FORMATS, resolveConfig, } from './config.js';
|
|
57
|
-
// Native comments: the files they live in, the restricted Markdown they are
|
|
58
|
-
// rendered with, the rules that decide whether a post is still taking them, the
|
|
59
|
-
// one seam a spam checker plugs into, and the Akismet checker that plugs into
|
|
60
|
-
// it when the site has a key.
|
|
61
|
-
export { addComment, AKISMET_ENDPOINT, AKISMET_KEY_FILE, AKISMET_TIMEOUT_MS, AKISMET_USER_AGENT, akismetKeyPath, blankValues, COMMENT_FIELDS, COMMENT_NOTICE_PARAM, COMMENT_NOTICES, COMMENT_POST_PATH, COMMENT_RATE_LIMIT, COMMENT_RATE_WINDOW_SECONDS, COMMENT_REPLY_PARAM, COMMENT_EMAILS_DIRECTORY, COMMENT_EMAILS_FILE_MODE, COMMENT_SALT_FILE, COMMENTS_DATA_DIRECTORY, COMMENTS_FRONT_MATTER_KEY, commentForm, commentFormFor, commentKeys, commentNoticeFor, commentPolicyOf, commentProblems, commentEmailsFile, commentsDirectory, commentsFile, commentsOpen, createAkismetChecker, DEFAULT_COMMENTS_CLOSE_AFTER_DAYS, deleteComment, hashClientAddress, heldWebmention, intakeComment, isModerationAction, migrateCommentEmails, migrateCommentKeys, MAXIMUM_BODY_LENGTH, MAXIMUM_FORM_AGE_SECONDS, MAXIMUM_NAME_LENGTH, MAXIMUM_URL_LENGTH, MINIMUM_SUBMIT_SECONDS, moderateComment, MODERATION_ACTIONS, mountComments, normalizeWebsite, readAkismetKey, readComments, rebuildCommentIndexes, refilledCommentForm, removeAkismetKey, renderCommentMarkdown, signedInCommenter, signedInCommentForm, submitComment, updateComment, valuesOf, verifyAkismetKey, writeAkismetKey, } from './comments/index.js';
|
|
62
|
-
// The contact form (TASK-56): the front matter key a page opts in with, the
|
|
63
|
-
// endpoint the form posts to, the files under `data/contact/` that hold what
|
|
64
|
-
// it collected, and the message that carries one on to the site's address.
|
|
65
|
-
export { addContactMessage, blankContactValues, CONTACT_ANCHOR, CONTACT_DATA_DIRECTORY, CONTACT_FIELDS, CONTACT_FRONT_MATTER_KEY, CONTACT_MESSAGE_TEMPLATE, CONTACT_NOTICE_PARAM, CONTACT_NOTICES, CONTACT_POST_PATH, CONTACT_RATE_LIMIT, CONTACT_RATE_WINDOW_SECONDS, contactDirectory, contactForm, contactFormFor, contactKeys, contactMessageFile, contactMessageId, contactNoticeFor, contactOpen, contactProblems, contactRecipient, contactValuesOf, countContactMessagesByStatus, countUnreadContactMessages, deleteContactMessage, listContactMessages, MAXIMUM_CONTACT_EMAIL_LENGTH, MAXIMUM_CONTACT_MESSAGE_LENGTH, MAXIMUM_CONTACT_NAME_LENGTH, MAXIMUM_CONTACT_SUBJECT_LENGTH, mountContact, readContactMessage, refilledContactForm, sendContactMessage, setContactMessageRead, submitContactMessage, } from './contact/index.js';
|
|
66
|
-
// The defences every public form here shares (TASK-56): the honeypot, the age
|
|
67
|
-
// of a rendered form, and the salted hash of where a submission came from.
|
|
68
|
-
export { ADDRESS_SALT_FILE, FORM_LOADED_FIELD, FORM_TRAP_FIELD, formAgeSeconds, formTimingRefusal, trapped, } from './forms/protection.js';
|
|
69
|
-
export { readFileIfPresentSync, updateFileAtomically, withFileLock, writeFileAtomically, writeFileAtomicallySync, } from './files/index.js';
|
|
70
|
-
export { DirectoryNotEmptyError, initSite, SITE_TEMPLATE_DIR, siteManifest } from './init.js';
|
|
71
|
-
export { definePlugin, HOST_API_VERSION } from './plugin.js';
|
|
72
|
-
export { DuplicatePluginError, pluginDataFolder } from './plugins/registry.js';
|
|
73
|
-
export { pluginSite } from './plugins/site.js';
|
|
74
|
-
export { PLUGINS_PATH } from './admin/plugins.js';
|
|
75
|
-
export { describeImage, findImageVariant, generateImageVariants, imageMediaType, IMAGE_DIRECTORY, IMAGE_RECORD_NAME, IMAGE_SIZES, removeImageVariants, responsiveImages, iconSetting, manifestIcons, siteIcons, siteImageMarkup, variantUrl, VARIANT_ASSET_PREFIX, } from './images/index.js';
|
|
76
|
-
export { calendarDayIn, contentFilePath, createContentSync, createScheduler, DATABASE_FILE, dateSortKey, DEFAULT_DEBOUNCE_MS, DEFAULT_TIMEZONE, defaultPermalink, documentContent, documentFrontMatter, ENCLOSURE_FRONT_MATTER_KEY, enclosureOf, freeSlug, DuplicatePermalinkError, hashDocument, htmlToText, isCaptions, isScheduled, isTrashedPath, KNOWN_FRONT_MATTER_KEYS, KNOWN_UPLOAD_TYPES, matchesSignature, MAXIMUM_DELAY_MS, MAXIMUM_QUERY_TERMS, normalizeBody, normalizeUploadType, openContentStore, parseDocument, PHOTO_FRONT_MATTER_KEY, photoAlt, photosOf, playsAsVideo, renderMarkdown, saveDocument, SCHEDULE_ORIGIN, scheduledFor, searchExpression, searchText, serializeDocument, slugify, SNIPPET_CLOSE, SNIPPET_OPEN, systemClock, systemTimers, toUtcInstant, TRANSCRIPT_TYPES, TRASH_DIRECTORY, typeForPath, UPLOAD_MEDIA_TYPES, wallClockIn, zoneLabel, } from './content/index.js';
|
|
77
|
-
// Notifications: who is told about a comment, the switchboard that decides,
|
|
78
|
-
// and the signed one-click links the messages carry (TASK-55).
|
|
79
|
-
export { addCommentOptOut, COMMENT_DIGEST_TEMPLATE, COMMENT_OPTOUTS_FILE, COMMENT_PENDING_TEMPLATE, COMMENT_REPLY_TEMPLATE, commentOptOutsFile, COMMENTS_NOTIFICATION, createCommentDigest, createCommentNotifier, DEFAULT_DELIVERY_MODE, DELIVERY_MODE_LABELS, DELIVERY_WINDOW_MS, deliveryMode, DIGEST_MAX_ITEMS, DIGEST_TICK_MS, DIGEST_TIMES_FILE, digestTimesFile, hasOptedOut, isBatchedMode, MODERATE_PATH, MODERATION_TOKEN_LIFETIME_SECONDS, moderationLink, mountNotificationLinks, NOTIFICATION_DELIVERY_MODES, NOTIFICATION_EVENTS, NOTIFICATION_FIELDS, NOTIFICATION_SECRET_FILE, notificationEvent, notificationMode, notificationRecipients, notificationSwitches, notificationTokenExpiry, notificationWanted, readCommentOptOuts, readDigestTimes, readNotificationToken, recordDigestTimes, signNotificationToken, systemNotificationTimers, UNSUBSCRIBE_ACTION, UNSUBSCRIBE_PATH, UNSUBSCRIBE_TOKEN_LIFETIME_SECONDS, unsubscribeLink, withNotification, withNotificationMode, } from './notifications/index.js';
|
|
80
|
-
// Email: the one seam a mail service plugs into, the two providers the package
|
|
81
|
-
// ships, the in-memory one a test observes, and the service every feature that
|
|
82
|
-
// emails goes through.
|
|
83
|
-
export { BREVO_ENDPOINT, BREVO_TIMEOUT_MS, createBrevoProvider, createMailService, createMailTemplates, createMemoryMailProvider, createSmtpProvider, DEFAULT_MAIL_ATTEMPTS, defaultMailBackoffMs, MAIL_CREDENTIALS_FILE, MAIL_PROVIDERS, mailCredentialsPath, mailTemplateFiles, readMailCredentials, removeMailCredentials, SMTP_TIMEOUT_MS, writeMailCredentials, } from './mail/index.js';
|
|
84
|
-
export { acceptedRelays, acceptRelay, addFollower, appendInboxActivity, ACTOR_KEY_ALGORITHMS, ACTOR_PATH, assertActorKeysUsable, actorKeyFile, actorKeysDir, articleObjectId, actorAliases, actorId, avatarUrl, keyIdFor, mainKeyId, multikeyId, senderKeyPairs, userActor, userByUsername, createActivityId, createDeliveryService, createRelayService, createSiteFederation, deleteActivityId, deliveryTargets, documentAuthor, federatedPost, federatedUsernames, FEDERATION_DATA_DIRECTORY, federationOrigin, acctOf, handleHref, userDirectory, webFingerSubject, WEBFINGER_PATH, followerFrom, followerRecipient, FOLLOWERS_FILE, FOLLOWERS_PAGE_SIZE, FOLLOWERS_PATH, actorHandle, followersFile, followersPage, FOLLOWING_PATH, groupByInbox, handleAccept, handleDelete, handleFollow, handleLoggedActivity, handleReject, handleUndo, INBOX_PATH, isFederatedDocument, lastFollowersCursor, inboxDirectory, inboxFile, inboxMonth, INBOX_DIRECTORY, inboxRowFrom, loadActorKeyPairs, logActivity, migrateActorKeysToFiles, migrateFederationToFiles, mountFederation, NODEINFO_PATH, OUTBOX_PAGE_SIZE, OUTBOX_PATH, postCreateActivity, postDeleteActivity, postObject, postUpdateActivity, readFollowers, readInboxLog, rebuildFederationIndexes, rejectRelay, relayAnswering, relayRecipient, REPLY_ACTIVITY_TYPE, replyFrom, replyTargetOf, SHARED_INBOX_PATH, SOFTWARE_NAME, SOURCE_MEDIA_TYPE, toInstant, updateActivityId, } from './federation/index.js';
|
|
85
|
-
export { absoluteUrl, ACTIVITY_STREAMS_MEDIA_TYPES, activityStreamsId, alternateLinks, archiveMonths, ARCHIVE_FRONT_MATTER_KEY, archiveOpen, assetNotModified, assetResponse, atomEntry, atomFeed, AUTHOR_BASE, authorContext, authorFeedHref, authorHref, authorName, authorNames, categoryHref, commentAnchor, commentsFeedHref, commentsFeedPath, REPLIES_ROOT, repliesFeedPath, repliesKey, commentsFeedResponse, commentsRssFeed, COMMENTS_ROOT, COMMENTS_TITLE_PREFIX, contentEtag, createConversation, createRenderer, createSiteDataSource, createTemplateEnvironment, CREATIVE_COMMONS_LICENSES, CREATIVE_COMMONS_NAMESPACE, DEFAULT_FEED_SIZE, DEFAULT_MENU_NAME, DEFAULT_TAXONOMY_BASES, DEFAULT_POSTS_PER_PAGE, DOCUMENT_REPRESENTATIONS, documentContext, cdata, contentTypeOf, DC_NAMESPACE, DEFAULT_FEED_LANGUAGE, DEFAULT_NOTIFY_SERVER, documentJson, escapeXml, excerptFromHtml, EXCERPT_WORDS, FEED_ALIASES, FEED_CONTENT_TYPES, FEED_FORMATS, FEED_GENERATOR, FEED_GENERATOR_URI, FEED_ITEM_REVISION, FEED_SEGMENT, FEED_SEGMENTS, feedComments, feedExcerpt, feedHref, feedItem, feedItems, feedLanguage, feedLinkHeader, feedPathUnder, feedResponse, feedSize, findAsset, findThemeAsset, findThemeFile, findUpload, forgetTerm, formatDate, frontPageSlugs, homeHref, INBOX_BASE, isLinkUrl, isNotModified, isListed, isServed, ITUNES_NAMESPACE, JSON_FEED_VERSION, JSON_SCHEMA_VERSION, jsonFeed, jsonFeedItem, lastModifiedOf, latestModified, LINK_REL_RULE, LINK_URL_RULE, listingPageHref, LISTING_REPRESENTATIONS, matchesEtag, MAXIMUM_QUERY_LENGTH, MEDIA_TYPES, MENU_NAME_MAX_LENGTH, MENU_NAME_PATTERN, menuItemLineProblem, menuItemOf, menuItemsFromText, menuItemsText, menuNameProblem, menusOf, mountPublicSite, navigationItems, navigationItemsOf, navigationMenu, navigationMenus, notAcceptableResponse, NOTIFY_CLOUD_PORT, NOTIFY_CLOUD_PROTOCOL, NOTIFY_PATHS, notifyEndpoints, notifyServerOf, offsetForPage, PACKAGED_THEME_DIR, PAGE_SEGMENT, paginate, parseAccept, parseAuthorPath, PODCAST_NAMESPACE, postObjectId, postsPerPage, prefersActivityStreams, profileContext, publicDocumentAt, resolveLicense, recordTermRename, redirectedTerm, REPRESENTATION_EXTENSIONS, representationEtag, REL_VALUE_PATTERN, relText, relValuesOf, representationHref, representationResponse, RESERVED_TOP_LEVEL_PATHS, rfc822, spokenIn, robotsResponse, robotsTxt, ROBOTS_CONTENT_TYPE, ROBOTS_PATH, rssFeed, rssItem, readTheme, sanitizeCommentHtml, searchHref, searchJson, searchPageIndex, searchQuery, SEARCH_PAGE_PARAM, SEARCH_PATH, SEARCH_QUERY_PARAM, selectRepresentation, SITE_DATA_FILE, SITE_THEME_KIND, sitemapChildPath, sitemapDate, sitemapIndexXml, sitemapResponse, sitemapXml, SITEMAP_CHILD_ROUTE, SITEMAP_CONTENT_TYPE, SITEMAP_MAX_URLS, SITEMAP_NAMESPACE, SITEMAP_PATH, snippetHtml, SOURCE_NAMESPACE, siteAuthorContext, siteAuthorName, siteMenus, siteTimezone, splitFeedPath, splitLinkRel, splitRepresentationExtension, tagHref, TAXONOMIES, userForAuthor, TAXONOMY_BASE_PATTERN, TAXONOMY_LABELS, taxonomyBaseProblems, taxonomyBases, taxonomyBasesOrDefault, taxonomyForSegment, taxonomyRedirectsOf, OPTIONAL_TEMPLATES, TEMPLATES, termHref, termRedirects, themeAssetNotModified, themeAssetResponse, THEME_ASSET_MAX_AGE, THEME_ASSET_PREFIX, THEME_STATIC_DIR, THEME_MANIFEST_FILE, themeSearchPath, UPLOAD_ASSET_MAX_AGE, UPLOAD_ASSET_PREFIX, UPLOAD_DIRECTORY, WFW_NAMESPACE, } from './web/index.js';
|
|
86
|
-
export { classesOf, createWebmentionService, discoverEndpoint, DISCOVERY_MAX_BYTES, DISCOVERY_TIMEOUT_MS, elementsIn, endpointInHeader, endpointInHtml, externalLinks, innerHtmlOf, isElement, itemsIn, linksTo, parseHtml, rawTextOf, readCapped, SEND_TIMEOUT_MS, sourceEntry, textOf, WEBMENTION_USER_AGENT, createReplyContextService, fetchReplyContext, readReplyContext, REPLY_CONTEXTS_FILE, systemHostLookup, parseSyndicationTargets, selectedTargets, SYNDICATE_TO_FRONT_MATTER_KEY, SYNDICATION_FILE, SYNDICATION_FRONT_MATTER_KEY, SYNDICATION_TARGETS_FILE, syndicationTargetsReader, } from './webmention/index.js';
|
|
87
|
-
export { AVATAR_PATH_PREFIX, AVATAR_SIZE, avatarHref, avatarSourceOf, createAvatarService, mountAvatars, } from './avatars/index.js';
|
|
88
|
-
export { RECOMMENDED_ADDRESS_HASH_RETENTION_DAYS, RECOMMENDED_COMMENT_EMAIL_RETENTION_DAYS, RECOMMENDED_CONTACT_MESSAGE_RETENTION_DAYS, } from './privacy/policy.js';
|
|
89
|
-
export { createRetentionService, RETENTION_SWEEP_MS } from './privacy/retention.js';
|
|
90
|
-
/**
|
|
91
|
-
* Where the scheduler's watermark lives in {@link AdminStore.getState}: the
|
|
92
|
-
* instant up to which scheduled documents have been announced.
|
|
93
|
-
*/
|
|
94
|
-
export const SCHEDULE_WATERMARK_KEY = 'schedule.watermark';
|
|
95
|
-
/** Where the instant the scheduler first ran on this site lives in {@link AdminStore.getState}. */
|
|
96
|
-
export const SCHEDULE_FIRST_RUN_KEY = 'schedule.firstRun';
|
|
97
|
-
/**
|
|
98
|
-
* The two connections a boot takes on the one database, opened together so
|
|
99
|
-
* that either both of them survive it or neither does.
|
|
100
|
-
*
|
|
101
|
-
* The database is a cache (decision-9), so a version of it this package cannot
|
|
102
|
-
* carry forward is thrown away and read back from the files rather than being
|
|
103
|
-
* a thing anybody has to do something about. That is what
|
|
104
|
-
* {@link withRebuiltDatabase} does with an {@link OutdatedDatabaseError} — and
|
|
105
|
-
* why the content store is closed before the admin store's failure is allowed
|
|
106
|
-
* to leave here: the file cannot be deleted while a connection holds it.
|
|
107
|
-
*
|
|
108
|
-
* The failure it does not recover from is a database written by a newer
|
|
109
|
-
* `@geekity/cms`, or one damaged past opening. Both refuse the boot naming the
|
|
110
|
-
* file, because a downgrade is usually a mistake and because a database from
|
|
111
|
-
* before decision-9 still carries the settings, key and account rows the
|
|
112
|
-
* migrations below write out as files — deleting one of those to get past an
|
|
113
|
-
* error would destroy an actor's private keys. `geekity rebuild` is the door
|
|
114
|
-
* for a person who has looked and decided.
|
|
115
|
-
*/
|
|
116
|
-
function openCache(resolved) {
|
|
117
|
-
return withRebuiltDatabase(resolved.dataDir, () => {
|
|
118
|
-
const { dataDir, baseUrl } = resolved;
|
|
119
|
-
const store = openContentStore({ dataDir, baseUrl, now: resolved.now });
|
|
120
|
-
try {
|
|
121
|
-
return { store, admin: openAdminStore({ dataDir }) };
|
|
122
|
-
}
|
|
123
|
-
catch (error) {
|
|
124
|
-
store.close();
|
|
125
|
-
throw error;
|
|
126
|
-
}
|
|
127
|
-
});
|
|
128
|
-
}
|
|
129
|
-
/**
|
|
130
|
-
* Build a CMS around a site's config.
|
|
131
|
-
*
|
|
132
|
-
* The returned app is a plain Hono app: the public site, the admin UI and the
|
|
133
|
-
* federation endpoints are all mounted on it as later milestones land. Booting
|
|
134
|
-
* opens the SQLite cache under `dataDir` (creating the directory) and applies
|
|
135
|
-
* any migrations, so `close()` has to be called to release it. A missing
|
|
136
|
-
* database is built and read back out of the files; see {@link openCache} for
|
|
137
|
-
* what happens to one this version cannot use.
|
|
138
|
-
*/
|
|
139
|
-
export function createCms(config = {}, context = {}) {
|
|
140
|
-
const resolved = resolveConfig(config);
|
|
141
|
-
if (resolved.devMode)
|
|
142
|
-
enterDevMode(resolved.dataDir, 'config');
|
|
143
|
-
const plugins = sitePluginRegistry(resolved, context.folderPlugins);
|
|
144
|
-
const { store, admin } = openCache(resolved);
|
|
145
|
-
// A site upgrading from the version that kept its settings in SQLite has
|
|
146
|
-
// rows nothing would read again: they become content/_data/site.json here,
|
|
147
|
-
// once, and the table goes (decision-9). A site that has already been
|
|
148
|
-
// through it does nothing but check.
|
|
149
|
-
migrateSettingsToFile({ admin, contentDir: resolved.contentDir });
|
|
150
|
-
// And the same for its actor's key pairs, which become JWK files under
|
|
151
|
-
// data/keys. This is the migration that must not fail: an actor whose
|
|
152
|
-
// private key is lost is one every follower stops being able to verify, so
|
|
153
|
-
// the rows are written out before the table is dropped, and a file that is
|
|
154
|
-
// already there always wins.
|
|
155
|
-
migrateActorKeysToFiles({ admin, dataDir: resolved.dataDir });
|
|
156
|
-
// And the accounts, which become data/users.json. The ids come with them, so
|
|
157
|
-
// a session the database already holds still names the person it was made
|
|
158
|
-
// for, and the file wins where there already is one.
|
|
159
|
-
migrateUsersToFile({ admin, dataDir: resolved.dataDir });
|
|
160
|
-
// And the log of what the inbox was told, which becomes
|
|
161
|
-
// content/_data/federation/inbox/{yyyy}-{mm}.jsonl. Unlike the three above,
|
|
162
|
-
// no table is dropped: `ap_inbox` and `followers` stay as indexes of the
|
|
163
|
-
// files, which is why the rebuild is next and runs on every boot rather than
|
|
164
|
-
// once. The site actor's followers are not migrated: decision-14 replaced it
|
|
165
|
-
// with one actor per user, and nobody inherits a follow made with somebody
|
|
166
|
-
// who no longer exists.
|
|
167
|
-
migrateFederationToFiles({ admin, contentDir: resolved.contentDir });
|
|
168
|
-
rebuildFederationIndexes({ admin, contentDir: resolved.contentDir });
|
|
169
|
-
// And the comments, which are files under content/_data/comments/ with
|
|
170
|
-
// their authors' emails under data/comments/ (TASK-50, TASK-182). A comment
|
|
171
|
-
// file that still holds an email, from before they moved or from a hand
|
|
172
|
-
// edit, has it moved first; then the index is rebuilt, on every boot for the
|
|
173
|
-
// same reason the federation one is.
|
|
174
|
-
const commentRecords = { admin, contentDir: resolved.contentDir, dataDir: resolved.dataDir };
|
|
175
|
-
migrateCommentEmails(commentRecords);
|
|
176
|
-
migrateCommentKeys(commentRecords);
|
|
177
|
-
rebuildCommentIndexes(commentRecords);
|
|
178
|
-
// And, once the files are the whole story, that every user's keys are
|
|
179
|
-
// readable. This is the one thing here that can stop a boot: an actor that
|
|
180
|
-
// publishes no key is one no follower can verify, and Fedify would serve
|
|
181
|
-
// exactly that rather than complain. A minute of downtime with the file
|
|
182
|
-
// named is the better failure. A user who has never federated has no key
|
|
183
|
-
// files at all, which is not damage and does not stop anything.
|
|
184
|
-
for (const user of listUsers(resolved.dataDir)) {
|
|
185
|
-
assertActorKeysUsable(resolved.dataDir, user.username);
|
|
186
|
-
}
|
|
187
|
-
// The one thing the settings decide before a request arrives. It is settled
|
|
188
|
-
// here, at boot, rather than per request: `baseUrl` also decides whether the
|
|
189
|
-
// session cookie is `Secure`, and flipping that under a signed-in admin
|
|
190
|
-
// would log them out of the form they just submitted.
|
|
191
|
-
resolved.baseUrl = effectiveBaseUrl(resolved, readSiteSettings(resolved.contentDir));
|
|
192
|
-
// Akismet, when the site has not named a checker of its own (TASK-52). A
|
|
193
|
-
// config that names one wins outright, because a site that has written a
|
|
194
|
-
// checker meant it; this is the one the settings screen turns on with a key
|
|
195
|
-
// rather than a deployment.
|
|
196
|
-
//
|
|
197
|
-
// Built whether or not there is a key in `data/akismet.json`: it reads that
|
|
198
|
-
// file on every call, so a key pasted into the settings screen filters the
|
|
199
|
-
// next comment and a key removed stops filtering at once, neither of them
|
|
200
|
-
// needing a restart. With no key it sends nothing anywhere.
|
|
201
|
-
resolved.commentChecker ??= createAkismetChecker({
|
|
202
|
-
dataDir: resolved.dataDir,
|
|
203
|
-
// Read when a comment arrives rather than now, so a change of language on
|
|
204
|
-
// the settings screen reaches Akismet without a restart either.
|
|
205
|
-
language: () => readSiteSettings(resolved.contentDir).language,
|
|
206
|
-
});
|
|
207
|
-
// Which theme this site renders through (decision-15). One source for the
|
|
208
|
-
// whole CMS: the pages, the `/theme/` assets and the site's email all read
|
|
209
|
-
// it, so they cannot disagree about which theme is in use and a choice that
|
|
210
|
-
// cannot be honoured is reported once rather than three times. It reads the
|
|
211
|
-
// site data rather than holding a directory, so a theme chosen on the
|
|
212
|
-
// Appearance screen — or written into `site.json` by hand — is the one the
|
|
213
|
-
// next request renders through, with no restart and with the watcher off.
|
|
214
|
-
const siteData = createSiteDataSource(resolved);
|
|
215
|
-
const themes = createThemeSource({
|
|
216
|
-
themesDir: resolved.themesDir,
|
|
217
|
-
chosen: () => themeName(siteData.read()),
|
|
218
|
-
});
|
|
219
|
-
// Asked once here so a site whose chosen theme is missing says so at boot,
|
|
220
|
-
// rather than at whatever moment the first request happens to arrive.
|
|
221
|
-
themes.current();
|
|
222
|
-
// The site's declared redirects (TASK-128), read per request for the reason
|
|
223
|
-
// the site data is. Asked once here for the reason the theme is: an entry
|
|
224
|
-
// that cannot be served, or a loop, is reported at boot.
|
|
225
|
-
const redirects = createRedirectSource({ contentDir: resolved.contentDir });
|
|
226
|
-
redirects.current();
|
|
227
|
-
const content = createContentSync({
|
|
228
|
-
store,
|
|
229
|
-
contentDir: resolved.contentDir,
|
|
230
|
-
watch: resolved.watch,
|
|
231
|
-
});
|
|
232
|
-
// A watched change waits for its burst to settle, as a scan does: a git
|
|
233
|
-
// pull that moves a post and adds another at its old URL must not hand the
|
|
234
|
-
// new post's comments to the moved one before the new one is indexed.
|
|
235
|
-
content.events.on('change', async (change) => {
|
|
236
|
-
if (change.origin === 'scan' || change.origin === 'watch' || change.next === undefined) {
|
|
237
|
-
return;
|
|
238
|
-
}
|
|
239
|
-
await followMovedComments(commentRecords, store, change.next);
|
|
240
|
-
followMovedWebmentions(admin, store, resolved.baseUrl);
|
|
241
|
-
});
|
|
242
|
-
content.onSettled(async () => {
|
|
243
|
-
await followAllMovedComments(commentRecords, store);
|
|
244
|
-
followMovedWebmentions(admin, store, resolved.baseUrl);
|
|
245
|
-
});
|
|
246
|
-
// Email. Built whether or not the site has a provider or a credential, for
|
|
247
|
-
// the reason the Akismet checker is: the settings and `data/mail.json` are
|
|
248
|
-
// read per send, so a key pasted into the settings screen sends the next
|
|
249
|
-
// message and one removed stops the message after it, neither needing a
|
|
250
|
-
// restart. With nothing configured, sending is a line in the log.
|
|
251
|
-
const mail = createMailService({ config: resolved, themes, ...resolved.mail });
|
|
252
|
-
// The one reader of the two indexes a conversation is made of. The page, the
|
|
253
|
-
// per-post comments feed, `/comments/feed/` and the `source:comments` count
|
|
254
|
-
// on a post feed are all drawn from it, so a reader cannot be shown one
|
|
255
|
-
// thing on the page and another in the feed (TASK-62).
|
|
256
|
-
const conversation = createConversation({
|
|
257
|
-
admin,
|
|
258
|
-
store,
|
|
259
|
-
contentDir: resolved.contentDir,
|
|
260
|
-
baseUrl: resolved.baseUrl,
|
|
261
|
-
users: () => listUsers(resolved.dataDir),
|
|
262
|
-
});
|
|
263
|
-
// What a reply shows of the post it answers. Built before the renderer,
|
|
264
|
-
// which reads the stored contexts, and subscribed to the index below with
|
|
265
|
-
// the other services that reach out to the web.
|
|
266
|
-
// The syndication targets the site declares and the copies they answered
|
|
267
|
-
// with, both files in the content directory (TASK-155, decision-26).
|
|
268
|
-
const syndicationTargets = syndicationTargetsReader(resolved.contentDir);
|
|
269
|
-
const copies = syndicationCopies(resolved.contentDir);
|
|
270
|
-
const locations = postLocations(resolved.dataDir);
|
|
271
|
-
const replyContexts = createReplyContextService({
|
|
272
|
-
store,
|
|
273
|
-
config: resolved,
|
|
274
|
-
lookup: resolved.hostLookup,
|
|
275
|
-
fediverse: citedPostReader(() => federationContext()),
|
|
276
|
-
held: (target) => {
|
|
277
|
-
const found = conversation.heldAt(target);
|
|
278
|
-
return found === undefined ? undefined : heldReplyContext(target, found);
|
|
279
|
-
},
|
|
280
|
-
onStored: (target, previous) => {
|
|
281
|
-
delivery.citedPageStored(target, previous);
|
|
282
|
-
const original = replyContexts.read(target)?.original;
|
|
283
|
-
if (original !== undefined && original !== previous?.original) {
|
|
284
|
-
webmentions.originalFound(target, original);
|
|
285
|
-
}
|
|
286
|
-
},
|
|
287
|
-
});
|
|
288
|
-
// The faces in a conversation, fetched here and served from here so a
|
|
289
|
-
// reader's address never reaches the servers they live on (TASK-134).
|
|
290
|
-
const avatars = createAvatarService({ admin, config: resolved });
|
|
291
|
-
// What keeps a site from holding its readers' personal data for longer than
|
|
292
|
-
// its settings say (TASK-135).
|
|
293
|
-
const retention = createRetentionService({ admin, config: resolved });
|
|
294
|
-
const renderer = createRenderer({
|
|
295
|
-
config: resolved,
|
|
296
|
-
themes,
|
|
297
|
-
// The stored context of a reply's target: a file read, never a fetch, so
|
|
298
|
-
// a page is drawn without waiting on anybody's server (TASK-123).
|
|
299
|
-
replyContext: (target) => replyContexts.read(target),
|
|
300
|
-
// The targets a post links to and the copies they made of it (TASK-155),
|
|
301
|
-
// read from the site's files like the reply contexts.
|
|
302
|
-
syndication: (document) => ({
|
|
303
|
-
targets: selectedTargets(document, syndicationTargets(), readSiteSettings(resolved.contentDir).language),
|
|
304
|
-
copies: Object.values(copies.read(document.permalink)),
|
|
305
|
-
}),
|
|
306
|
-
location: (document) => shareLocation(locations.read(document.permalink), readSiteSettings(resolved.contentDir).locationSharing),
|
|
307
|
-
// The pages that put themselves in the site menu are found by asking for
|
|
308
|
-
// every public page and reading their front matter, rather than by an
|
|
309
|
-
// index of their own: a site has a handful of pages, the query is the
|
|
310
|
-
// same one the listing index already serves, and doing it per render is
|
|
311
|
-
// what makes a page flagged in the editor appear in the menu at once.
|
|
312
|
-
pages: () => store.listAll({ type: 'page', draft: false, trashed: false, scheduled: false }),
|
|
313
|
-
// Who may sign in, for the byline under a post and the heading of an
|
|
314
|
-
// author archive (TASK-67). Read per render for the reason the pages are:
|
|
315
|
-
// `data/users.json` is the truth about who exists (decision-9), and a
|
|
316
|
-
// display name saved on the users screen a second ago belongs on the very
|
|
317
|
-
// next page drawn.
|
|
318
|
-
users: () => listUsers(resolved.dataDir),
|
|
319
|
-
// What has been said about a post, from every source at once and read per
|
|
320
|
-
// render for the same reason: a reply logged or a comment approved a
|
|
321
|
-
// second ago is on the page the next request draws (TASK-49, TASK-50).
|
|
322
|
-
// One dependency, and the very reader the comments feeds are published
|
|
323
|
-
// from, so the page and the feed cannot disagree.
|
|
324
|
-
conversation: conversation.thread,
|
|
325
|
-
// And the form under it, when the post is still taking comments. Asked per
|
|
326
|
-
// render because whether it is depends on the clock: a post that closed an
|
|
327
|
-
// hour ago stops offering one on the very next request.
|
|
328
|
-
commentForm: (document, viewer) => commentFormFor({
|
|
329
|
-
document,
|
|
330
|
-
site: renderer.site(),
|
|
331
|
-
now: resolved.now(),
|
|
332
|
-
// And who is reading it, when a session says: the short form for
|
|
333
|
-
// somebody signed in to this site, the stranger's form for everybody
|
|
334
|
-
// else (TASK-103). The route reads the session and hands it down, so
|
|
335
|
-
// one render of one request cannot disagree with itself.
|
|
336
|
-
viewer,
|
|
337
|
-
// Whether "tell me about replies" is worth offering, asked per render
|
|
338
|
-
// for the same reason: a credential pasted into the settings screen
|
|
339
|
-
// puts the box on the next page drawn (TASK-55).
|
|
340
|
-
notifiable: mail.configured(),
|
|
341
|
-
}),
|
|
342
|
-
// And the contact form, for a page whose front matter asks for one. Asked
|
|
343
|
-
// per render for the same reason: a `contact: true` saved in the editor a
|
|
344
|
-
// moment ago puts a form on the page the next request draws (TASK-56).
|
|
345
|
-
contactForm: (document) => contactFormFor({ document, now: resolved.now() }),
|
|
346
|
-
// The posts either side of one, for the links under an entry (TASK-79).
|
|
347
|
-
// Two indexed lookups per post rather than a walk of the archive, and
|
|
348
|
-
// asked per render for the reason the conversation is: a post published a
|
|
349
|
-
// minute ago is already the neighbour of the one before it.
|
|
350
|
-
neighbours: (document) => store.neighbours(document),
|
|
351
|
-
// And the site's own posts and pages that link to it (TASK-322), asked per
|
|
352
|
-
// render for the same reason: a post published a minute ago that cites
|
|
353
|
-
// this one is already one of its backlinks, and so does one whose link
|
|
354
|
-
// reaches it through a redirect declared a minute ago (TASK-330). A link
|
|
355
|
-
// to `/` lands on the page the Reading setting puts there, which is the
|
|
356
|
-
// page its slug names, as the routes resolve it.
|
|
357
|
-
backlinks: (document) => {
|
|
358
|
-
const { homepage } = frontPageSlugs(siteData.read());
|
|
359
|
-
return store.listBacklinks(document, {
|
|
360
|
-
redirects: redirects.current(),
|
|
361
|
-
home: document.type === 'page' &&
|
|
362
|
-
homepage !== '' &&
|
|
363
|
-
store.getBySlug(homepage)?.path === document.path,
|
|
364
|
-
});
|
|
365
|
-
},
|
|
366
|
-
newestPosts: (count) => store.listPosts({ limit: count }),
|
|
367
|
-
// And every published post, for a page that says `archive: true`. The one
|
|
368
|
-
// listing with no paging, so it is asked for only by the page that prints
|
|
369
|
-
// it (TASK-85).
|
|
370
|
-
archivePosts: () => store.listPosts(),
|
|
371
|
-
});
|
|
372
|
-
const federationKv = resolved.federation.kv ?? new MemoryKvStore();
|
|
373
|
-
const federationQueue = resolved.federation.queue === undefined ? createSettlingQueue() : undefined;
|
|
374
|
-
const federation = createSiteFederation({
|
|
375
|
-
baseUrl: resolved.baseUrl,
|
|
376
|
-
...resolved.federation,
|
|
377
|
-
...(federationQueue === undefined ? {} : { queue: federationQueue }),
|
|
378
|
-
kv: federationKv,
|
|
379
|
-
});
|
|
380
|
-
// Federation listens to the index rather than to the admin, so a post edited
|
|
381
|
-
// on disk federates exactly as one saved through the editor does (doc-4).
|
|
382
|
-
// It is built before the app because a handler reads it off the context: the
|
|
383
|
-
// admin's Resend button is a request that sends a post out again.
|
|
384
|
-
// The names and faces of the actors who are not followers (TASK-184),
|
|
385
|
-
// fetched in the background when one is heard from and on a sweep.
|
|
386
|
-
const actorProfiles = createActorProfileService({
|
|
387
|
-
admin,
|
|
388
|
-
config: resolved,
|
|
389
|
-
load: signedProfileLoader(() => federation.createContext(new URL(resolved.baseUrl), {
|
|
390
|
-
admin,
|
|
391
|
-
store,
|
|
392
|
-
config: resolved,
|
|
393
|
-
actorProfiles,
|
|
394
|
-
cited: (url) => replyContexts.read(url),
|
|
395
|
-
})),
|
|
396
|
-
});
|
|
397
|
-
const federationContext = () => federation.createContext(new URL(resolved.baseUrl), {
|
|
398
|
-
admin,
|
|
399
|
-
store,
|
|
400
|
-
config: resolved,
|
|
401
|
-
actorProfiles,
|
|
402
|
-
cited: (url) => replyContexts.read(url),
|
|
403
|
-
});
|
|
404
|
-
const learnHandles = handleLearner(federationContext);
|
|
405
|
-
const replyBackfill = createReplyBackfill({
|
|
406
|
-
admin,
|
|
407
|
-
store,
|
|
408
|
-
conversation,
|
|
409
|
-
config: resolved,
|
|
410
|
-
load: signedRepliesLoader(federationContext),
|
|
411
|
-
heard: (actorId) => {
|
|
412
|
-
actorProfiles.capture(actorId);
|
|
413
|
-
},
|
|
414
|
-
});
|
|
415
|
-
const delivery = createDeliveryService({
|
|
416
|
-
federation,
|
|
417
|
-
admin,
|
|
418
|
-
store,
|
|
419
|
-
config: resolved,
|
|
420
|
-
actorProfiles,
|
|
421
|
-
cited: (url) => replyContexts.read(url),
|
|
422
|
-
});
|
|
423
|
-
content.events.on('change', (change) => delivery.handle(change));
|
|
424
|
-
// Who hears about a comment (TASK-55). It reads the users file and the mail
|
|
425
|
-
// settings per message rather than at boot, so an address added on the users
|
|
426
|
-
// screen is written to by the very next comment.
|
|
427
|
-
const notifications = createCommentNotifier({
|
|
428
|
-
admin,
|
|
429
|
-
store,
|
|
430
|
-
mail,
|
|
431
|
-
config: resolved,
|
|
432
|
-
cited: (url) => replyContexts.read(url),
|
|
433
|
-
});
|
|
434
|
-
const replyNotices = createReplyNotices({
|
|
435
|
-
admin,
|
|
436
|
-
store,
|
|
437
|
-
conversation,
|
|
438
|
-
notices: notifications,
|
|
439
|
-
config: resolved,
|
|
440
|
-
});
|
|
441
|
-
content.events.on('change', (change) => {
|
|
442
|
-
replyNotices.handle(change);
|
|
443
|
-
});
|
|
444
|
-
admin.onConversationWrite((written) => {
|
|
445
|
-
replyNotices.heard(written);
|
|
446
|
-
});
|
|
447
|
-
// And the other half of it (TASK-60): a user who asked for an hourly or a
|
|
448
|
-
// daily digest hears nothing above and one message per window from here,
|
|
449
|
-
// listing whatever is still pending when their window comes up. It reads the
|
|
450
|
-
// users file and the record of what it has sent per run, for the same
|
|
451
|
-
// reason: a mode chosen on the users screen takes effect at the next tick.
|
|
452
|
-
const digests = createCommentDigest({
|
|
453
|
-
admin,
|
|
454
|
-
store,
|
|
455
|
-
mail,
|
|
456
|
-
config: resolved,
|
|
457
|
-
cited: (url) => replyContexts.read(url),
|
|
458
|
-
});
|
|
459
|
-
// And so does the webmention sender: telling the pages a post links to is
|
|
460
|
-
// the same news as telling the followers, and it should not matter which
|
|
461
|
-
// door the post came in by (TASK-51).
|
|
462
|
-
const webmentions = createWebmentionService({
|
|
463
|
-
admin,
|
|
464
|
-
store,
|
|
465
|
-
config: resolved,
|
|
466
|
-
notifications,
|
|
467
|
-
originalOf: (url) => replyContexts.read(url)?.original,
|
|
468
|
-
conversation,
|
|
469
|
-
});
|
|
470
|
-
content.events.on('change', (change) => {
|
|
471
|
-
webmentions.handle(change);
|
|
472
|
-
});
|
|
473
|
-
// A reply under a reply post or a comment's page changes what its page
|
|
474
|
-
// says, whichever door it came in by, and the page tells what it answers
|
|
475
|
-
// (a salmention, TASK-320).
|
|
476
|
-
admin.onConversationWrite((written) => {
|
|
477
|
-
webmentions.heard(written);
|
|
478
|
-
});
|
|
479
|
-
content.events.on('change', (change) => {
|
|
480
|
-
replyContexts.handle(change);
|
|
481
|
-
});
|
|
482
|
-
// The notify server listens to the index for the same reason: a post edited
|
|
483
|
-
// on disk changed the same feeds as one saved through the editor.
|
|
484
|
-
const notifier = createFeedNotifier({ config: resolved });
|
|
485
|
-
content.events.on('change', (change) => notifier.handle(change));
|
|
486
|
-
// IndexNow listens for the same reason, and wants the pages as well as the
|
|
487
|
-
// posts: a search engine indexes both (TASK-151).
|
|
488
|
-
const indexNow = createIndexNowNotifier({ config: resolved });
|
|
489
|
-
content.events.on('change', (change) => {
|
|
490
|
-
indexNow.handle(change);
|
|
491
|
-
});
|
|
492
|
-
// A post whose date is in the future is held back (TASK-44), and nothing
|
|
493
|
-
// watches a clock: this is what notices that one has come due and reports it
|
|
494
|
-
// as the publish it is, so delivery, the notifier and a site's `onPublish`
|
|
495
|
-
// all run without knowing a timer was involved. Subscribed to every change
|
|
496
|
-
// so a save that moves a date moves the timer with it.
|
|
497
|
-
const scheduler = createScheduler({
|
|
498
|
-
store,
|
|
499
|
-
announce: (change) => content.announce(change),
|
|
500
|
-
watermark: {
|
|
501
|
-
read: () => admin.getState(SCHEDULE_WATERMARK_KEY),
|
|
502
|
-
write: (instant) => {
|
|
503
|
-
admin.setState(SCHEDULE_WATERMARK_KEY, instant);
|
|
504
|
-
},
|
|
505
|
-
readFirstRun: () => admin.getState(SCHEDULE_FIRST_RUN_KEY),
|
|
506
|
-
writeFirstRun: (instant) => {
|
|
507
|
-
admin.setState(SCHEDULE_FIRST_RUN_KEY, instant);
|
|
508
|
-
},
|
|
509
|
-
},
|
|
510
|
-
});
|
|
511
|
-
content.events.on('change', (change) => {
|
|
512
|
-
scheduler.handle(change);
|
|
513
|
-
});
|
|
514
|
-
// Relay subscriptions (FEP-ae0c). The list is a setting and the handshake is
|
|
515
|
-
// a record, so booting reconciles the two: a relay the file names and the
|
|
516
|
-
// database has never heard of is followed here, which is what makes a
|
|
517
|
-
// rebuilt database catch up rather than silently stop federating to it.
|
|
518
|
-
const relays = createRelayService({
|
|
519
|
-
federation,
|
|
520
|
-
admin,
|
|
521
|
-
store,
|
|
522
|
-
config: resolved,
|
|
523
|
-
actorProfiles,
|
|
524
|
-
cited: (url) => replyContexts.read(url),
|
|
525
|
-
});
|
|
526
|
-
relays.sync();
|
|
527
|
-
const maintenance = createMaintenanceSwitch({
|
|
528
|
-
dataDir: resolved.dataDir,
|
|
529
|
-
forced: resolved.maintenance,
|
|
530
|
-
now: resolved.now,
|
|
531
|
-
});
|
|
532
|
-
const indieauth = createIndieAuthState(resolved.now);
|
|
533
|
-
const app = new Hono();
|
|
534
|
-
// A handler that throws is answered here rather than with Hono's plain-text
|
|
535
|
-
// 500. The middleware above the handler still runs on the way out, so the
|
|
536
|
-
// baseline and admin headers land on this response like any other.
|
|
537
|
-
app.onError(serverError);
|
|
538
|
-
// One line per request, before anything else is registered so that every
|
|
539
|
-
// route is on it: /healthz, the federation endpoints, the admin and the
|
|
540
|
-
// public site alike, and a request whose handler threw as well. Off unless
|
|
541
|
-
// the site asked for it; `geekity serve` asks.
|
|
542
|
-
if (resolved.accessLog) {
|
|
543
|
-
app.use('*', createAccessLog({
|
|
544
|
-
config: resolved,
|
|
545
|
-
...(resolved.accessLogWriter === undefined ? {} : { write: resolved.accessLogWriter }),
|
|
546
|
-
}));
|
|
547
|
-
}
|
|
548
|
-
// Outside everything after it, so it compresses the body the client is
|
|
549
|
-
// about to get, the error pages and the 503 included (TASK-139).
|
|
550
|
-
if (resolved.compression)
|
|
551
|
-
app.use('*', compression());
|
|
552
|
-
const writes = createWriteGate();
|
|
553
|
-
app.use('*', writes.middleware);
|
|
554
|
-
app.use('*', async (c, next) => {
|
|
555
|
-
c.set('store', store);
|
|
556
|
-
c.set('admin', admin);
|
|
557
|
-
c.set('config', resolved);
|
|
558
|
-
c.set('renderer', renderer);
|
|
559
|
-
c.set('conversation', conversation);
|
|
560
|
-
c.set('avatars', avatars);
|
|
561
|
-
c.set('actorProfiles', actorProfiles);
|
|
562
|
-
c.set('announce', (change) => content.announce(change));
|
|
563
|
-
c.set('rescan', () => content.sync());
|
|
564
|
-
c.set('delivery', delivery);
|
|
565
|
-
c.set('relays', relays);
|
|
566
|
-
c.set('webmentions', webmentions);
|
|
567
|
-
c.set('replyContexts', replyContexts);
|
|
568
|
-
c.set('learnHandles', learnHandles);
|
|
569
|
-
c.set('mail', mail);
|
|
570
|
-
c.set('notifications', notifications);
|
|
571
|
-
c.set('redirects', redirects);
|
|
572
|
-
c.set('maintenance', maintenance);
|
|
573
|
-
c.set('indieauth', indieauth);
|
|
574
|
-
c.set('supervision', leavingWriteGate(context.supervision, () => writes.leave(c)));
|
|
575
|
-
await next();
|
|
576
|
-
});
|
|
577
|
-
app.use('*', pluginLifecycle(plugins, () => writes.refusing));
|
|
578
|
-
// The baseline on everything the CMS answers, admin and public alike, and
|
|
579
|
-
// outside everything below so redirects, the 503, 404s and the onError 500
|
|
580
|
-
// carry it too. The admin sets stricter values of its own inside it; none of
|
|
581
|
-
// it restricts what a theme may reference.
|
|
582
|
-
app.use('*', baselineSecurityHeaders);
|
|
583
|
-
// And one on every redirect, whichever part of the CMS sent it.
|
|
584
|
-
app.use('*', redirectBy);
|
|
585
|
-
// Maintenance mode (TASK-130) turns away everything after it but the health
|
|
586
|
-
// checks, the admin and the theme's files, so it goes in front of all of
|
|
587
|
-
// them: federation's inboxes included.
|
|
588
|
-
app.use('*', maintenanceGate);
|
|
589
|
-
app.get('/_geekity/health', (c) => c.json({ status: 'ok' }));
|
|
590
|
-
// The health check a container orchestrator or an uptime monitor probes
|
|
591
|
-
// (TASK-87). It goes on before federation, the admin and the public site,
|
|
592
|
-
// so no permalink can ever shadow it.
|
|
593
|
-
mountHealth(app);
|
|
594
|
-
// The two well-known files a site answers for itself (TASK-133), before the
|
|
595
|
-
// public site can claim either path as a permalink.
|
|
596
|
-
mountWellKnown(app);
|
|
597
|
-
// IndieAuth's authorization server metadata (TASK-157), the endpoint that
|
|
598
|
-
// starts a sign-in (TASK-158), the one that issues tokens (TASK-160) and
|
|
599
|
-
// the ones that answer for a token once issued (TASK-161), here for the
|
|
600
|
-
// reason the well-known files are.
|
|
601
|
-
mountIndieAuthDiscovery(app);
|
|
602
|
-
mountAuthorizationEndpoint(app);
|
|
603
|
-
mountTokenEndpoint(app);
|
|
604
|
-
mountTokenInfoEndpoints(app);
|
|
605
|
-
// Micropub (TASK-163) and its media endpoint (TASK-165), which stand on
|
|
606
|
-
// those tokens.
|
|
607
|
-
mountMicropub(app);
|
|
608
|
-
mountMicropubMedia(app);
|
|
609
|
-
// Federation goes on first. It answers its own paths and falls through on
|
|
610
|
-
// every other, so putting it in front costs the rest of the app nothing and
|
|
611
|
-
// is the only place it can go: the public site claims every unmatched path
|
|
612
|
-
// in its not-found handler.
|
|
613
|
-
mountFederation(app, federation, {
|
|
614
|
-
plugins: pluginFederation({
|
|
615
|
-
registry: plugins,
|
|
616
|
-
canonical: federation,
|
|
617
|
-
kv: federationKv,
|
|
618
|
-
allowPrivateAddress: resolved.federation.allowPrivateAddress ?? false,
|
|
619
|
-
}),
|
|
620
|
-
});
|
|
621
|
-
// The admin goes on before the public site, for the same reason.
|
|
622
|
-
mountAdmin(app);
|
|
623
|
-
mountPluginRoutes(app, plugins);
|
|
624
|
-
mountPublicSite(app);
|
|
625
|
-
/**
|
|
626
|
-
* Subscribe a site's hook to one event.
|
|
627
|
-
*
|
|
628
|
-
* The emitter already contains a hook that throws; this also contains one
|
|
629
|
-
* that rejects, so an `async` hook whose delivery fails is reported rather
|
|
630
|
-
* than surfacing as an unhandled rejection that would take the process down.
|
|
631
|
-
*/
|
|
632
|
-
function subscribe(event, hook) {
|
|
633
|
-
return content.events.on(event, (change) => {
|
|
634
|
-
// A hook's return is ignored, but an `async` one hands back a promise
|
|
635
|
-
// whose unhandled rejection would take the whole process down.
|
|
636
|
-
const result = hook(change);
|
|
637
|
-
if (result instanceof Promise) {
|
|
638
|
-
result.catch((error) => {
|
|
639
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
640
|
-
console.warn(`A ${event} hook rejected: ${message}`);
|
|
641
|
-
});
|
|
642
|
-
}
|
|
643
|
-
});
|
|
644
|
-
}
|
|
645
|
-
if (resolved.onDocumentChange !== undefined)
|
|
646
|
-
subscribe('change', resolved.onDocumentChange);
|
|
647
|
-
if (resolved.onPublish !== undefined)
|
|
648
|
-
subscribe('published', resolved.onPublish);
|
|
649
|
-
let server;
|
|
650
|
-
let releaseFiles;
|
|
651
|
-
/** Everything that runs on its own once the site serves, after the scan. */
|
|
652
|
-
async function startServices() {
|
|
653
|
-
// The index is brought up to date before the first request, so a site
|
|
654
|
-
// never serves a stale document, and the watcher takes over from there.
|
|
655
|
-
await content.start();
|
|
656
|
-
// After the scan, because the catch-up reads the index: a post whose
|
|
657
|
-
// date passed while nothing was running is published here, once.
|
|
658
|
-
await scheduler.start();
|
|
659
|
-
// And a reply whose target the contexts file holds nothing for is
|
|
660
|
-
// fetched now, in the background, for the same reason (TASK-123).
|
|
661
|
-
replyContexts.catchUp();
|
|
662
|
-
// And the avatars the conversations show are fetched or refreshed in the
|
|
663
|
-
// background now and on a timer from here on, so a reader almost never
|
|
664
|
-
// waits on a stranger's server for one (TASK-134).
|
|
665
|
-
avatars.start();
|
|
666
|
-
// And the profiles of whoever is in the inbox log without being a
|
|
667
|
-
// follower: missing ones are fetched now, which is the backfill of a log
|
|
668
|
-
// written before profiles were kept, and stale ones on a timer (TASK-184).
|
|
669
|
-
actorProfiles.start();
|
|
670
|
-
replyBackfill.start();
|
|
671
|
-
// And whatever personal data has outlived its period is removed now and
|
|
672
|
-
// every few hours from here on (TASK-135).
|
|
673
|
-
retention.start();
|
|
674
|
-
// The digests tick from here on. Nothing is caught up first: a digest is
|
|
675
|
-
// whatever is pending when a window comes up, so a site that was down
|
|
676
|
-
// over one simply sends the next one, with everything still waiting in it.
|
|
677
|
-
digests.start();
|
|
678
|
-
await plugins.reconcile(readEnabledPlugins(resolved.contentDir));
|
|
679
|
-
}
|
|
680
|
-
function stopTimers() {
|
|
681
|
-
scheduler.stop();
|
|
682
|
-
digests.stop();
|
|
683
|
-
avatars.stop();
|
|
684
|
-
actorProfiles.stop();
|
|
685
|
-
replyBackfill.stop();
|
|
686
|
-
retention.stop();
|
|
687
|
-
}
|
|
688
|
-
/**
|
|
689
|
-
* Anything already on its way out is allowed to finish, so stopping never
|
|
690
|
-
* leaves a delivery half recorded or a queued one unsent.
|
|
691
|
-
*/
|
|
692
|
-
async function settleQueues() {
|
|
693
|
-
await scheduler.settled();
|
|
694
|
-
await digests.settled();
|
|
695
|
-
await delivery.settled();
|
|
696
|
-
await relays.settled();
|
|
697
|
-
await federationQueue?.settled();
|
|
698
|
-
await webmentions.settled();
|
|
699
|
-
await replyContexts.settled();
|
|
700
|
-
await avatars.settled();
|
|
701
|
-
await actorProfiles.settled();
|
|
702
|
-
await replyBackfill.settled();
|
|
703
|
-
await retention.settled();
|
|
704
|
-
await notifier.settled();
|
|
705
|
-
}
|
|
706
|
-
/** What is left once the queues are empty: the mail, the image encodes, the activity log. */
|
|
707
|
-
async function settleWrites() {
|
|
708
|
-
await mail.settled();
|
|
709
|
-
// A page render derives an upload's variants in the background; the
|
|
710
|
-
// encode finishes before the directories it writes into can be removed.
|
|
711
|
-
await settleImageVariants(resolved);
|
|
712
|
-
await activityLogSettled(resolved.dataDir);
|
|
713
|
-
}
|
|
714
|
-
return {
|
|
715
|
-
app,
|
|
716
|
-
config: resolved,
|
|
717
|
-
store,
|
|
718
|
-
admin,
|
|
719
|
-
federation,
|
|
720
|
-
delivery,
|
|
721
|
-
relays,
|
|
722
|
-
webmentions,
|
|
723
|
-
replyContexts,
|
|
724
|
-
avatars,
|
|
725
|
-
actorProfiles,
|
|
726
|
-
replyBackfill,
|
|
727
|
-
retention,
|
|
728
|
-
notifier,
|
|
729
|
-
indexNow,
|
|
730
|
-
mail,
|
|
731
|
-
notifications,
|
|
732
|
-
digests,
|
|
733
|
-
scheduler,
|
|
734
|
-
events: content.events,
|
|
735
|
-
onDocumentChange(hook) {
|
|
736
|
-
return subscribe('change', hook);
|
|
737
|
-
},
|
|
738
|
-
onPublish(hook) {
|
|
739
|
-
return subscribe('published', hook);
|
|
740
|
-
},
|
|
741
|
-
notifyFeeds(urls) {
|
|
742
|
-
return notifier.notify(urls);
|
|
743
|
-
},
|
|
744
|
-
sync() {
|
|
745
|
-
return content.sync();
|
|
746
|
-
},
|
|
747
|
-
async serve() {
|
|
748
|
-
if (server !== undefined) {
|
|
749
|
-
throw new Error('This CMS is already serving; call close() before serving again.');
|
|
750
|
-
}
|
|
751
|
-
await startServices();
|
|
752
|
-
// A syndication target the site declares badly is ignored everywhere,
|
|
753
|
-
// and said so once here rather than on every page (TASK-155).
|
|
754
|
-
for (const problem of syndicationTargetProblems(resolved.contentDir))
|
|
755
|
-
console.warn(problem);
|
|
756
|
-
return new Promise((resolve) => {
|
|
757
|
-
server = serveNode({ fetch: app.fetch, port: resolved.port }, (info) => {
|
|
758
|
-
resolve({ port: info.port });
|
|
759
|
-
});
|
|
760
|
-
});
|
|
761
|
-
},
|
|
762
|
-
async drain() {
|
|
763
|
-
await writes.refuse();
|
|
764
|
-
await plugins.reconcile(new Set());
|
|
765
|
-
stopTimers();
|
|
766
|
-
await content.stop();
|
|
767
|
-
await settleQueues();
|
|
768
|
-
await indexNow.settled();
|
|
769
|
-
await settleWrites();
|
|
770
|
-
store.setReadOnly(true);
|
|
771
|
-
admin.setReadOnly(true);
|
|
772
|
-
releaseFiles ??= refuseWritesUnder([resolved.dataDir, resolved.contentDir]);
|
|
773
|
-
},
|
|
774
|
-
async resume() {
|
|
775
|
-
releaseFiles?.();
|
|
776
|
-
releaseFiles = undefined;
|
|
777
|
-
store.setReadOnly(false);
|
|
778
|
-
admin.setReadOnly(false);
|
|
779
|
-
await startServices();
|
|
780
|
-
writes.reopen();
|
|
781
|
-
},
|
|
782
|
-
async close() {
|
|
783
|
-
const running = server;
|
|
784
|
-
server = undefined;
|
|
785
|
-
const handingOver = running !== undefined && writes.refusing ? closeServer(running, true) : undefined;
|
|
786
|
-
if (writes.refusing)
|
|
787
|
-
writes.handOver();
|
|
788
|
-
await plugins.close();
|
|
789
|
-
stopTimers();
|
|
790
|
-
await content.stop();
|
|
791
|
-
await settleQueues();
|
|
792
|
-
// What was gathered and not yet sent is dropped rather than sent on the
|
|
793
|
-
// way down; a batch already going out finishes.
|
|
794
|
-
indexNow.close();
|
|
795
|
-
await indexNow.settled();
|
|
796
|
-
await settleWrites();
|
|
797
|
-
federationQueue?.close();
|
|
798
|
-
if (running !== undefined)
|
|
799
|
-
await (handingOver ?? closeServer(running, false));
|
|
800
|
-
releaseFiles?.();
|
|
801
|
-
releaseFiles = undefined;
|
|
802
|
-
admin.close();
|
|
803
|
-
store.close();
|
|
804
|
-
},
|
|
805
|
-
};
|
|
806
|
-
}
|
|
807
|
-
/** How long a drained server waits for its connections to end before it closes them. */
|
|
808
|
-
const GENTLE_CLOSE_MS = 30_000;
|
|
809
|
-
/**
|
|
810
|
-
* Stop listening and resolve once every connection has ended.
|
|
811
|
-
*
|
|
812
|
-
* A drained server closes gently. `http.Server#close` closes idle keep-alive
|
|
813
|
-
* connections at once, racing a client that is about to reuse one, which
|
|
814
|
-
* then sees a reset. `net.Server#close` leaves them: each one either carries
|
|
815
|
-
* `Connection: close` on its next response or ends on the keep-alive timeout
|
|
816
|
-
* the client was told, which a client honours by closing first.
|
|
817
|
-
*/
|
|
818
|
-
function closeServer(running, gently) {
|
|
819
|
-
return new Promise((resolve, reject) => {
|
|
820
|
-
const done = (err) => {
|
|
821
|
-
if (err)
|
|
822
|
-
reject(err);
|
|
823
|
-
else
|
|
824
|
-
resolve();
|
|
825
|
-
};
|
|
826
|
-
if (!gently) {
|
|
827
|
-
running.close(done);
|
|
828
|
-
return;
|
|
829
|
-
}
|
|
830
|
-
const timer = setTimeout(() => running.closeAllConnections(), GENTLE_CLOSE_MS);
|
|
831
|
-
NetServer.prototype.close.call(running, (err) => {
|
|
832
|
-
clearTimeout(timer);
|
|
833
|
-
// The http server's own close clears its connection-checking interval;
|
|
834
|
-
// the listener is already gone, so the error it reports is expected.
|
|
835
|
-
running.close(() => undefined);
|
|
836
|
-
done(err);
|
|
837
|
-
});
|
|
838
|
-
});
|
|
839
|
-
}
|
|
1
|
+
export * from './exports.js';
|
|
2
|
+
export { settleConfig } from './cms/boot.js';
|
|
3
|
+
export { createCms } from './cms/create.js';
|
|
840
4
|
//# sourceMappingURL=index.js.map
|