@geekity/cms 0.3.0 → 0.4.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 +2091 -214
- package/admin/components/fields.njk +165 -0
- package/admin/layouts/base.njk +1 -1
- package/admin/layouts/settings-page.njk +26 -0
- package/admin/layouts/shell.njk +17 -3
- package/admin/pages/account/forgot.njk +47 -0
- package/admin/pages/account/login.njk +26 -0
- package/admin/pages/account/reset.njk +38 -0
- package/admin/pages/account/setup.njk +28 -0
- package/admin/pages/appearance/themes.njk +69 -0
- package/admin/pages/comments/all.njk +133 -0
- package/admin/{layouts/dashboard.njk → pages/dashboard/home.njk} +8 -15
- package/admin/{layouts/document-conflict.njk → pages/documents/conflict.njk} +1 -0
- package/admin/pages/documents/editor.njk +196 -0
- package/admin/{layouts/document-list.njk → pages/documents/list.njk} +19 -2
- package/admin/pages/documents/taxonomy.njk +95 -0
- package/admin/pages/federation/followers.njk +238 -0
- package/admin/pages/media/library.njk +160 -0
- package/admin/pages/messages/all.njk +110 -0
- package/admin/{layouts → pages}/placeholder.njk +5 -1
- package/admin/pages/settings/discussion.njk +99 -0
- package/admin/pages/settings/email.njk +203 -0
- package/admin/pages/settings/federation.njk +75 -0
- package/admin/pages/settings/general.njk +29 -0
- package/admin/pages/settings/permalinks.njk +50 -0
- package/admin/pages/settings/reading.njk +72 -0
- package/admin/pages/users/edit.njk +239 -0
- package/admin/pages/users/list.njk +48 -0
- package/admin/pages/users/new.njk +41 -0
- package/admin/static/admin.css +498 -3
- package/admin/static/copy.js +52 -0
- package/admin/static/editor.js +16 -16
- package/admin/static/slug.js +61 -0
- package/dist/admin/accounts.d.ts +413 -0
- package/dist/admin/accounts.d.ts.map +1 -0
- package/dist/admin/accounts.js +680 -0
- package/dist/admin/accounts.js.map +1 -0
- package/dist/admin/appearance.d.ts +80 -0
- package/dist/admin/appearance.d.ts.map +1 -0
- package/dist/admin/appearance.js +136 -0
- package/dist/admin/appearance.js.map +1 -0
- package/dist/admin/comments.d.ts +90 -0
- package/dist/admin/comments.d.ts.map +1 -0
- package/dist/admin/comments.js +244 -0
- package/dist/admin/comments.js.map +1 -0
- package/dist/admin/credentials.d.ts +26 -2
- package/dist/admin/credentials.d.ts.map +1 -1
- package/dist/admin/credentials.js +35 -2
- package/dist/admin/credentials.js.map +1 -1
- package/dist/admin/documents.d.ts +127 -10
- package/dist/admin/documents.d.ts.map +1 -1
- package/dist/admin/documents.js +360 -41
- package/dist/admin/documents.js.map +1 -1
- package/dist/admin/federation.d.ts +151 -50
- package/dist/admin/federation.d.ts.map +1 -1
- package/dist/admin/federation.js +225 -93
- package/dist/admin/federation.js.map +1 -1
- package/dist/admin/formatting.d.ts +20 -0
- package/dist/admin/formatting.d.ts.map +1 -0
- package/dist/admin/formatting.js +72 -0
- package/dist/admin/formatting.js.map +1 -0
- package/dist/admin/headers.d.ts +65 -0
- package/dist/admin/headers.d.ts.map +1 -0
- package/dist/admin/headers.js +104 -0
- package/dist/admin/headers.js.map +1 -0
- package/dist/admin/index.d.ts +38 -12
- package/dist/admin/index.d.ts.map +1 -1
- package/dist/admin/index.js +25 -7
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/media.d.ts +168 -0
- package/dist/admin/media.d.ts.map +1 -0
- package/dist/admin/media.js +295 -0
- package/dist/admin/media.js.map +1 -0
- package/dist/admin/menu.d.ts +79 -0
- package/dist/admin/menu.d.ts.map +1 -0
- package/dist/admin/menu.js +126 -0
- package/dist/admin/menu.js.map +1 -0
- package/dist/admin/messages.d.ts +80 -0
- package/dist/admin/messages.d.ts.map +1 -0
- package/dist/admin/messages.js +152 -0
- package/dist/admin/messages.js.map +1 -0
- package/dist/admin/preview.d.ts.map +1 -1
- package/dist/admin/preview.js +31 -7
- package/dist/admin/preview.js.map +1 -1
- package/dist/admin/recovery.d.ts +92 -0
- package/dist/admin/recovery.d.ts.map +1 -0
- package/dist/admin/recovery.js +229 -0
- package/dist/admin/recovery.js.map +1 -0
- package/dist/admin/routes.d.ts +0 -20
- package/dist/admin/routes.d.ts.map +1 -1
- package/dist/admin/routes.js +155 -105
- package/dist/admin/routes.js.map +1 -1
- package/dist/admin/settings-discussion.d.ts +37 -0
- package/dist/admin/settings-discussion.d.ts.map +1 -0
- package/dist/admin/settings-discussion.js +117 -0
- package/dist/admin/settings-discussion.js.map +1 -0
- package/dist/admin/settings-email.d.ts +54 -0
- package/dist/admin/settings-email.d.ts.map +1 -0
- package/dist/admin/settings-email.js +189 -0
- package/dist/admin/settings-email.js.map +1 -0
- package/dist/admin/settings-federation.d.ts +39 -0
- package/dist/admin/settings-federation.d.ts.map +1 -0
- package/dist/admin/settings-federation.js +103 -0
- package/dist/admin/settings-federation.js.map +1 -0
- package/dist/admin/settings-general.d.ts +12 -0
- package/dist/admin/settings-general.d.ts.map +1 -0
- package/dist/admin/settings-general.js +48 -0
- package/dist/admin/settings-general.js.map +1 -0
- package/dist/admin/settings-page.d.ts +102 -0
- package/dist/admin/settings-page.d.ts.map +1 -0
- package/dist/admin/settings-page.js +126 -0
- package/dist/admin/settings-page.js.map +1 -0
- package/dist/admin/settings-pages.d.ts +19 -0
- package/dist/admin/settings-pages.d.ts.map +1 -0
- package/dist/admin/settings-pages.js +33 -0
- package/dist/admin/settings-pages.js.map +1 -0
- package/dist/admin/settings-permalinks.d.ts +16 -0
- package/dist/admin/settings-permalinks.d.ts.map +1 -0
- package/dist/admin/settings-permalinks.js +32 -0
- package/dist/admin/settings-permalinks.js.map +1 -0
- package/dist/admin/settings-reading.d.ts +33 -0
- package/dist/admin/settings-reading.d.ts.map +1 -0
- package/dist/admin/settings-reading.js +48 -0
- package/dist/admin/settings-reading.js.map +1 -0
- package/dist/admin/settings.d.ts +325 -96
- package/dist/admin/settings.d.ts.map +1 -1
- package/dist/admin/settings.js +650 -308
- package/dist/admin/settings.js.map +1 -1
- package/dist/admin/store.d.ts +606 -152
- package/dist/admin/store.d.ts.map +1 -1
- package/dist/admin/store.js +863 -268
- package/dist/admin/store.js.map +1 -1
- package/dist/admin/taxonomy.d.ts +114 -0
- package/dist/admin/taxonomy.d.ts.map +1 -0
- package/dist/admin/taxonomy.js +289 -0
- package/dist/admin/taxonomy.js.map +1 -0
- package/dist/admin/templates.d.ts +44 -14
- package/dist/admin/templates.d.ts.map +1 -1
- package/dist/admin/templates.js +44 -14
- package/dist/admin/templates.js.map +1 -1
- package/dist/admin/throttle.d.ts +84 -0
- package/dist/admin/throttle.d.ts.map +1 -0
- package/dist/admin/throttle.js +143 -0
- package/dist/admin/throttle.js.map +1 -0
- package/dist/admin/uploads.d.ts +28 -2
- package/dist/admin/uploads.d.ts.map +1 -1
- package/dist/admin/uploads.js +43 -4
- package/dist/admin/uploads.js.map +1 -1
- package/dist/admin/users.d.ts +100 -13
- package/dist/admin/users.d.ts.map +1 -1
- package/dist/admin/users.js +412 -39
- package/dist/admin/users.js.map +1 -1
- package/dist/cache.d.ts +141 -0
- package/dist/cache.d.ts.map +1 -0
- package/dist/cache.js +207 -0
- package/dist/cache.js.map +1 -0
- package/dist/cli.d.ts +14 -2
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +424 -21
- package/dist/cli.js.map +1 -1
- package/dist/comments/akismet.d.ts +130 -0
- package/dist/comments/akismet.d.ts.map +1 -0
- package/dist/comments/akismet.js +274 -0
- package/dist/comments/akismet.js.map +1 -0
- package/dist/comments/conversation.d.ts +29 -0
- package/dist/comments/conversation.d.ts.map +1 -0
- package/dist/comments/conversation.js +60 -0
- package/dist/comments/conversation.js.map +1 -0
- package/dist/comments/form.d.ts +75 -0
- package/dist/comments/form.d.ts.map +1 -0
- package/dist/comments/form.js +64 -0
- package/dist/comments/form.js.map +1 -0
- package/dist/comments/index.d.ts +15 -0
- package/dist/comments/index.d.ts.map +1 -0
- package/dist/comments/index.js +9 -0
- package/dist/comments/index.js.map +1 -0
- package/dist/comments/markdown.d.ts +8 -0
- package/dist/comments/markdown.d.ts.map +1 -0
- package/dist/comments/markdown.js +85 -0
- package/dist/comments/markdown.js.map +1 -0
- package/dist/comments/moderate.d.ts +71 -0
- package/dist/comments/moderate.d.ts.map +1 -0
- package/dist/comments/moderate.js +88 -0
- package/dist/comments/moderate.js.map +1 -0
- package/dist/comments/policy.d.ts +57 -0
- package/dist/comments/policy.d.ts.map +1 -0
- package/dist/comments/policy.js +80 -0
- package/dist/comments/policy.js.map +1 -0
- package/dist/comments/records.d.ts +266 -0
- package/dist/comments/records.d.ts.map +1 -0
- package/dist/comments/records.js +487 -0
- package/dist/comments/records.js.map +1 -0
- package/dist/comments/routes.d.ts +58 -0
- package/dist/comments/routes.d.ts.map +1 -0
- package/dist/comments/routes.js +177 -0
- package/dist/comments/routes.js.map +1 -0
- package/dist/comments/submission.d.ts +263 -0
- package/dist/comments/submission.d.ts.map +1 -0
- package/dist/comments/submission.js +241 -0
- package/dist/comments/submission.js.map +1 -0
- package/dist/config.d.ts +190 -5
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +118 -6
- package/dist/config.js.map +1 -1
- package/dist/contact/delivery.d.ts +60 -0
- package/dist/contact/delivery.d.ts.map +1 -0
- package/dist/contact/delivery.js +87 -0
- package/dist/contact/delivery.js.map +1 -0
- package/dist/contact/form.d.ts +130 -0
- package/dist/contact/form.d.ts.map +1 -0
- package/dist/contact/form.js +163 -0
- package/dist/contact/form.js.map +1 -0
- package/dist/contact/index.d.ts +17 -0
- package/dist/contact/index.d.ts.map +1 -0
- package/dist/contact/index.js +13 -0
- package/dist/contact/index.js.map +1 -0
- package/dist/contact/records.d.ts +124 -0
- package/dist/contact/records.d.ts.map +1 -0
- package/dist/contact/records.js +218 -0
- package/dist/contact/records.js.map +1 -0
- package/dist/contact/routes.d.ts +17 -0
- package/dist/contact/routes.d.ts.map +1 -0
- package/dist/contact/routes.js +127 -0
- package/dist/contact/routes.js.map +1 -0
- package/dist/contact/submission.d.ts +103 -0
- package/dist/contact/submission.d.ts.map +1 -0
- package/dist/contact/submission.js +166 -0
- package/dist/contact/submission.js.map +1 -0
- package/dist/content/document.d.ts +7 -2
- package/dist/content/document.d.ts.map +1 -1
- package/dist/content/document.js +1 -0
- package/dist/content/document.js.map +1 -1
- package/dist/content/index.d.ts +7 -2
- package/dist/content/index.d.ts.map +1 -1
- package/dist/content/index.js +4 -1
- package/dist/content/index.js.map +1 -1
- package/dist/content/markdown.d.ts.map +1 -1
- package/dist/content/markdown.js +24 -2
- package/dist/content/markdown.js.map +1 -1
- package/dist/content/parser.d.ts.map +1 -1
- package/dist/content/parser.js +11 -4
- package/dist/content/parser.js.map +1 -1
- package/dist/content/save.d.ts +5 -0
- package/dist/content/save.d.ts.map +1 -1
- package/dist/content/save.js +44 -1
- package/dist/content/save.js.map +1 -1
- package/dist/content/schedule.d.ts +125 -0
- package/dist/content/schedule.d.ts.map +1 -0
- package/dist/content/schedule.js +207 -0
- package/dist/content/schedule.js.map +1 -0
- package/dist/content/search.d.ts +64 -0
- package/dist/content/search.d.ts.map +1 -0
- package/dist/content/search.js +136 -0
- package/dist/content/search.js.map +1 -0
- package/dist/content/store.d.ts +202 -7
- package/dist/content/store.d.ts.map +1 -1
- package/dist/content/store.js +374 -67
- package/dist/content/store.js.map +1 -1
- package/dist/content/sync.d.ts +7 -1
- package/dist/content/sync.d.ts.map +1 -1
- package/dist/content/sync.js +18 -10
- package/dist/content/sync.js.map +1 -1
- package/dist/content/time.d.ts +56 -0
- package/dist/content/time.d.ts.map +1 -0
- package/dist/content/time.js +141 -0
- package/dist/content/time.js.map +1 -0
- package/dist/content/writer.d.ts.map +1 -1
- package/dist/content/writer.js +3 -0
- package/dist/content/writer.js.map +1 -1
- package/dist/env.d.ts +58 -4
- package/dist/env.d.ts.map +1 -1
- package/dist/federation/actor.d.ts +95 -41
- package/dist/federation/actor.d.ts.map +1 -1
- package/dist/federation/actor.js +180 -53
- package/dist/federation/actor.js.map +1 -1
- package/dist/federation/article.d.ts +44 -17
- package/dist/federation/article.d.ts.map +1 -1
- package/dist/federation/article.js +98 -46
- package/dist/federation/article.js.map +1 -1
- package/dist/federation/delivery.d.ts +63 -15
- package/dist/federation/delivery.d.ts.map +1 -1
- package/dist/federation/delivery.js +154 -80
- package/dist/federation/delivery.js.map +1 -1
- package/dist/federation/federation.d.ts +22 -17
- package/dist/federation/federation.d.ts.map +1 -1
- package/dist/federation/federation.js +98 -77
- package/dist/federation/federation.js.map +1 -1
- package/dist/federation/followers.d.ts +3 -2
- package/dist/federation/followers.d.ts.map +1 -1
- package/dist/federation/followers.js +6 -5
- package/dist/federation/followers.js.map +1 -1
- package/dist/federation/import-wordpress.d.ts +128 -0
- package/dist/federation/import-wordpress.d.ts.map +1 -0
- package/dist/federation/import-wordpress.js +426 -0
- package/dist/federation/import-wordpress.js.map +1 -0
- package/dist/federation/inbox.d.ts +36 -13
- package/dist/federation/inbox.d.ts.map +1 -1
- package/dist/federation/inbox.js +120 -49
- package/dist/federation/inbox.js.map +1 -1
- package/dist/federation/index.d.ts +22 -10
- package/dist/federation/index.d.ts.map +1 -1
- package/dist/federation/index.js +13 -8
- package/dist/federation/index.js.map +1 -1
- package/dist/federation/keys.d.ts +98 -20
- package/dist/federation/keys.d.ts.map +1 -1
- package/dist/federation/keys.js +269 -39
- package/dist/federation/keys.js.map +1 -1
- package/dist/federation/mount.d.ts +42 -10
- package/dist/federation/mount.d.ts.map +1 -1
- package/dist/federation/mount.js +266 -26
- package/dist/federation/mount.js.map +1 -1
- package/dist/federation/paths.d.ts +23 -35
- package/dist/federation/paths.d.ts.map +1 -1
- package/dist/federation/paths.js +26 -39
- package/dist/federation/paths.js.map +1 -1
- package/dist/federation/records.d.ts +223 -0
- package/dist/federation/records.d.ts.map +1 -0
- package/dist/federation/records.js +506 -0
- package/dist/federation/records.js.map +1 -0
- package/dist/federation/relays.d.ts +114 -0
- package/dist/federation/relays.d.ts.map +1 -0
- package/dist/federation/relays.js +290 -0
- package/dist/federation/relays.js.map +1 -0
- package/dist/federation/replies.d.ts +80 -0
- package/dist/federation/replies.d.ts.map +1 -0
- package/dist/federation/replies.js +166 -0
- package/dist/federation/replies.js.map +1 -0
- package/dist/federation/wordpress.d.ts +131 -0
- package/dist/federation/wordpress.d.ts.map +1 -0
- package/dist/federation/wordpress.js +341 -0
- package/dist/federation/wordpress.js.map +1 -0
- package/dist/files/atomic.d.ts +103 -0
- package/dist/files/atomic.d.ts.map +1 -0
- package/dist/files/atomic.js +150 -0
- package/dist/files/atomic.js.map +1 -0
- package/dist/files/index.d.ts +3 -0
- package/dist/files/index.d.ts.map +1 -0
- package/dist/files/index.js +2 -0
- package/dist/files/index.js.map +1 -0
- package/dist/forms/protection.d.ts +85 -0
- package/dist/forms/protection.d.ts.map +1 -0
- package/dist/forms/protection.js +116 -0
- package/dist/forms/protection.js.map +1 -0
- package/dist/images/icons.d.ts +59 -0
- package/dist/images/icons.d.ts.map +1 -0
- package/dist/images/icons.js +131 -0
- package/dist/images/icons.js.map +1 -0
- package/dist/images/index.d.ts +7 -0
- package/dist/images/index.d.ts.map +1 -0
- package/dist/images/index.js +4 -0
- package/dist/images/index.js.map +1 -0
- package/dist/images/markup.d.ts +47 -0
- package/dist/images/markup.d.ts.map +1 -0
- package/dist/images/markup.js +175 -0
- package/dist/images/markup.js.map +1 -0
- package/dist/images/paths.d.ts +34 -0
- package/dist/images/paths.d.ts.map +1 -0
- package/dist/images/paths.js +41 -0
- package/dist/images/paths.js.map +1 -0
- package/dist/images/variants.d.ts +104 -0
- package/dist/images/variants.d.ts.map +1 -0
- package/dist/images/variants.js +320 -0
- package/dist/images/variants.js.map +1 -0
- package/dist/index.d.ts +123 -19
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +327 -25
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts +18 -0
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +34 -3
- package/dist/init.js.map +1 -1
- package/dist/mail/brevo.d.ts +35 -0
- package/dist/mail/brevo.d.ts.map +1 -0
- package/dist/mail/brevo.js +85 -0
- package/dist/mail/brevo.js.map +1 -0
- package/dist/mail/credentials.d.ts +62 -0
- package/dist/mail/credentials.d.ts.map +1 -0
- package/dist/mail/credentials.js +86 -0
- package/dist/mail/credentials.js.map +1 -0
- package/dist/mail/index.d.ts +15 -0
- package/dist/mail/index.d.ts.map +1 -0
- package/dist/mail/index.js +8 -0
- package/dist/mail/index.js.map +1 -0
- package/dist/mail/memory.d.ts +35 -0
- package/dist/mail/memory.d.ts.map +1 -0
- package/dist/mail/memory.js +29 -0
- package/dist/mail/memory.js.map +1 -0
- package/dist/mail/provider.d.ts +80 -0
- package/dist/mail/provider.d.ts.map +1 -0
- package/dist/mail/provider.js +23 -0
- package/dist/mail/provider.js.map +1 -0
- package/dist/mail/service.d.ts +156 -0
- package/dist/mail/service.d.ts.map +1 -0
- package/dist/mail/service.js +265 -0
- package/dist/mail/service.js.map +1 -0
- package/dist/mail/smtp.d.ts +39 -0
- package/dist/mail/smtp.d.ts.map +1 -0
- package/dist/mail/smtp.js +58 -0
- package/dist/mail/smtp.js.map +1 -0
- package/dist/mail/templates.d.ts +91 -0
- package/dist/mail/templates.d.ts.map +1 -0
- package/dist/mail/templates.js +69 -0
- package/dist/mail/templates.js.map +1 -0
- package/dist/notifications/comments.d.ts +66 -0
- package/dist/notifications/comments.d.ts.map +1 -0
- package/dist/notifications/comments.js +151 -0
- package/dist/notifications/comments.js.map +1 -0
- package/dist/notifications/digest.d.ts +135 -0
- package/dist/notifications/digest.d.ts.map +1 -0
- package/dist/notifications/digest.js +287 -0
- package/dist/notifications/digest.js.map +1 -0
- package/dist/notifications/index.d.ts +13 -0
- package/dist/notifications/index.d.ts.map +1 -0
- package/dist/notifications/index.js +8 -0
- package/dist/notifications/index.js.map +1 -0
- package/dist/notifications/links.d.ts +60 -0
- package/dist/notifications/links.d.ts.map +1 -0
- package/dist/notifications/links.js +63 -0
- package/dist/notifications/links.js.map +1 -0
- package/dist/notifications/optouts.d.ts +48 -0
- package/dist/notifications/optouts.d.ts.map +1 -0
- package/dist/notifications/optouts.js +93 -0
- package/dist/notifications/optouts.js.map +1 -0
- package/dist/notifications/preferences.d.ts +158 -0
- package/dist/notifications/preferences.d.ts.map +1 -0
- package/dist/notifications/preferences.js +195 -0
- package/dist/notifications/preferences.js.map +1 -0
- package/dist/notifications/routes.d.ts +28 -0
- package/dist/notifications/routes.d.ts.map +1 -0
- package/dist/notifications/routes.js +184 -0
- package/dist/notifications/routes.js.map +1 -0
- package/dist/notifications/tokens.d.ts +60 -0
- package/dist/notifications/tokens.d.ts.map +1 -0
- package/dist/notifications/tokens.js +125 -0
- package/dist/notifications/tokens.js.map +1 -0
- package/dist/notify.d.ts +84 -0
- package/dist/notify.d.ts.map +1 -0
- package/dist/notify.js +149 -0
- package/dist/notify.js.map +1 -0
- package/dist/web/archive.d.ts +49 -0
- package/dist/web/archive.d.ts.map +1 -0
- package/dist/web/archive.js +59 -0
- package/dist/web/archive.js.map +1 -0
- package/dist/web/assets.d.ts +6 -5
- package/dist/web/assets.d.ts.map +1 -1
- package/dist/web/assets.js +5 -7
- package/dist/web/assets.js.map +1 -1
- package/dist/web/authors.d.ts +143 -0
- package/dist/web/authors.d.ts.map +1 -0
- package/dist/web/authors.js +178 -0
- package/dist/web/authors.js.map +1 -0
- package/dist/web/comments.d.ts +60 -0
- package/dist/web/comments.d.ts.map +1 -0
- package/dist/web/comments.js +207 -0
- package/dist/web/comments.js.map +1 -0
- package/dist/web/context.d.ts +162 -28
- package/dist/web/context.d.ts.map +1 -1
- package/dist/web/context.js +123 -26
- package/dist/web/context.js.map +1 -1
- package/dist/web/conversation.d.ts +209 -0
- package/dist/web/conversation.d.ts.map +1 -0
- package/dist/web/conversation.js +557 -0
- package/dist/web/conversation.js.map +1 -0
- package/dist/web/documents.d.ts +36 -6
- package/dist/web/documents.d.ts.map +1 -1
- package/dist/web/documents.js +52 -10
- package/dist/web/documents.js.map +1 -1
- package/dist/web/feed-atom.d.ts +22 -0
- package/dist/web/feed-atom.d.ts.map +1 -0
- package/dist/web/feed-atom.js +83 -0
- package/dist/web/feed-atom.js.map +1 -0
- package/dist/web/feed-item.d.ts +145 -0
- package/dist/web/feed-item.d.ts.map +1 -0
- package/dist/web/feed-item.js +120 -0
- package/dist/web/feed-item.js.map +1 -0
- package/dist/web/feed-json.d.ts +79 -0
- package/dist/web/feed-json.d.ts.map +1 -0
- package/dist/web/feed-json.js +53 -0
- package/dist/web/feed-json.js.map +1 -0
- package/dist/web/feed-rss.d.ts +26 -0
- package/dist/web/feed-rss.d.ts.map +1 -0
- package/dist/web/feed-rss.js +203 -0
- package/dist/web/feed-rss.js.map +1 -0
- package/dist/web/feed-source.d.ts +244 -0
- package/dist/web/feed-source.d.ts.map +1 -0
- package/dist/web/feed-source.js +201 -0
- package/dist/web/feed-source.js.map +1 -0
- package/dist/web/feed-xml.d.ts +63 -0
- package/dist/web/feed-xml.d.ts.map +1 -0
- package/dist/web/feed-xml.js +116 -0
- package/dist/web/feed-xml.js.map +1 -0
- package/dist/web/feeds.d.ts +31 -96
- package/dist/web/feeds.d.ts.map +1 -1
- package/dist/web/feeds.js +94 -198
- package/dist/web/feeds.js.map +1 -1
- package/dist/web/health.d.ts +31 -0
- package/dist/web/health.d.ts.map +1 -0
- package/dist/web/health.js +44 -0
- package/dist/web/health.js.map +1 -0
- package/dist/web/index.d.ts +30 -10
- package/dist/web/index.d.ts.map +1 -1
- package/dist/web/index.js +18 -7
- package/dist/web/index.js.map +1 -1
- package/dist/web/navigation.d.ts +73 -0
- package/dist/web/navigation.d.ts.map +1 -0
- package/dist/web/navigation.js +110 -0
- package/dist/web/navigation.js.map +1 -0
- package/dist/web/negotiate.d.ts +9 -0
- package/dist/web/negotiate.d.ts.map +1 -1
- package/dist/web/negotiate.js +6 -1
- package/dist/web/negotiate.js.map +1 -1
- package/dist/web/recent.d.ts +43 -0
- package/dist/web/recent.d.ts.map +1 -0
- package/dist/web/recent.js +37 -0
- package/dist/web/recent.js.map +1 -0
- package/dist/web/render.d.ts +197 -9
- package/dist/web/render.d.ts.map +1 -1
- package/dist/web/render.js +334 -17
- package/dist/web/render.js.map +1 -1
- package/dist/web/routes.d.ts +25 -8
- package/dist/web/routes.d.ts.map +1 -1
- package/dist/web/routes.js +845 -93
- package/dist/web/routes.js.map +1 -1
- package/dist/web/sanitize.d.ts +19 -0
- package/dist/web/sanitize.d.ts.map +1 -0
- package/dist/web/sanitize.js +272 -0
- package/dist/web/sanitize.js.map +1 -0
- package/dist/web/search.d.ts +79 -0
- package/dist/web/search.d.ts.map +1 -0
- package/dist/web/search.js +94 -0
- package/dist/web/search.js.map +1 -0
- package/dist/web/sitemap.d.ts +120 -0
- package/dist/web/sitemap.d.ts.map +1 -0
- package/dist/web/sitemap.js +199 -0
- package/dist/web/sitemap.js.map +1 -0
- package/dist/web/taxonomy.d.ts +152 -0
- package/dist/web/taxonomy.d.ts.map +1 -0
- package/dist/web/taxonomy.js +237 -0
- package/dist/web/taxonomy.js.map +1 -0
- package/dist/web/templates.d.ts +54 -16
- package/dist/web/templates.d.ts.map +1 -1
- package/dist/web/templates.js +109 -28
- package/dist/web/templates.js.map +1 -1
- package/dist/web/themes.d.ts +205 -0
- package/dist/web/themes.d.ts.map +1 -0
- package/dist/web/themes.js +277 -0
- package/dist/web/themes.js.map +1 -0
- package/dist/webmention/discovery.d.ts +51 -0
- package/dist/webmention/discovery.d.ts.map +1 -0
- package/dist/webmention/discovery.js +176 -0
- package/dist/webmention/discovery.js.map +1 -0
- package/dist/webmention/html.d.ts +71 -0
- package/dist/webmention/html.d.ts.map +1 -0
- package/dist/webmention/html.js +285 -0
- package/dist/webmention/html.js.map +1 -0
- package/dist/webmention/index.d.ts +12 -0
- package/dist/webmention/index.d.ts.map +1 -0
- package/dist/webmention/index.js +8 -0
- package/dist/webmention/index.js.map +1 -0
- package/dist/webmention/links.d.ts +18 -0
- package/dist/webmention/links.d.ts.map +1 -0
- package/dist/webmention/links.js +64 -0
- package/dist/webmention/links.js.map +1 -0
- package/dist/webmention/microformats.d.ts +93 -0
- package/dist/webmention/microformats.d.ts.map +1 -0
- package/dist/webmention/microformats.js +376 -0
- package/dist/webmention/microformats.js.map +1 -0
- package/dist/webmention/receive.d.ts +141 -0
- package/dist/webmention/receive.d.ts.map +1 -0
- package/dist/webmention/receive.js +264 -0
- package/dist/webmention/receive.js.map +1 -0
- package/dist/webmention/routes.d.ts +37 -0
- package/dist/webmention/routes.d.ts.map +1 -0
- package/dist/webmention/routes.js +75 -0
- package/dist/webmention/routes.js.map +1 -0
- package/dist/webmention/service.d.ts +94 -0
- package/dist/webmention/service.d.ts.map +1 -0
- package/dist/webmention/service.js +207 -0
- package/dist/webmention/service.js.map +1 -0
- package/package.json +11 -6
- package/templates/site/content/_data/site.json +1 -0
- package/templates/site/content/posts/2026-01-01-hello-world.md +5 -3
- package/templates/site/geekity.config.ts +11 -1
- package/templates/site/tsconfig.json +1 -1
- package/themes/default/README.md +1096 -50
- package/themes/default/layouts/404.njk +2 -3
- package/themes/default/layouts/author.njk +37 -0
- package/themes/default/layouts/base.njk +172 -31
- package/themes/default/layouts/category.njk +27 -0
- package/themes/default/layouts/front-page.njk +57 -0
- package/themes/default/layouts/home.njk +17 -1
- package/themes/default/layouts/page.njk +57 -5
- package/themes/default/layouts/post.njk +78 -19
- package/themes/default/layouts/search.njk +57 -0
- package/themes/default/layouts/tag.njk +3 -6
- package/themes/default/mail/comment-digest.html.njk +37 -0
- package/themes/default/mail/comment-digest.subject.njk +3 -0
- package/themes/default/mail/comment-digest.txt.njk +40 -0
- package/themes/default/mail/comment-pending.html.njk +27 -0
- package/themes/default/mail/comment-pending.subject.njk +2 -0
- package/themes/default/mail/comment-pending.txt.njk +24 -0
- package/themes/default/mail/comment-reply.html.njk +21 -0
- package/themes/default/mail/comment-reply.subject.njk +2 -0
- package/themes/default/mail/comment-reply.txt.njk +22 -0
- package/themes/default/mail/contact-message.html.njk +24 -0
- package/themes/default/mail/contact-message.subject.njk +5 -0
- package/themes/default/mail/contact-message.txt.njk +20 -0
- package/themes/default/mail/password-changed.html.njk +18 -0
- package/themes/default/mail/password-changed.subject.njk +2 -0
- package/themes/default/mail/password-changed.txt.njk +17 -0
- package/themes/default/mail/password-reset.html.njk +22 -0
- package/themes/default/mail/password-reset.subject.njk +2 -0
- package/themes/default/mail/password-reset.txt.njk +18 -0
- package/themes/default/mail/test.html.njk +14 -0
- package/themes/default/mail/test.subject.njk +2 -0
- package/themes/default/mail/test.txt.njk +12 -0
- package/themes/default/partials/archive.njk +27 -0
- package/themes/default/partials/bio.njk +77 -0
- package/themes/default/partials/comment-form.njk +109 -0
- package/themes/default/partials/contact-form.njk +88 -0
- package/themes/default/partials/conversation.njk +139 -0
- package/themes/default/partials/feeds.njk +26 -0
- package/themes/default/partials/jsonld.njk +120 -0
- package/themes/default/partials/pagination.njk +12 -6
- package/themes/default/partials/post-list.njk +51 -18
- package/themes/default/partials/search-form.njk +17 -0
- package/themes/default/partials/tags.njk +26 -5
- package/themes/default/static/highlight.js +4 -0
- package/themes/default/static/style.css +1119 -194
- package/themes/default/theme.json +5 -0
- package/admin/layouts/document-editor.njk +0 -167
- package/admin/layouts/federation.njk +0 -145
- package/admin/layouts/login.njk +0 -23
- package/admin/layouts/settings.njk +0 -116
- package/admin/layouts/setup.njk +0 -27
- package/admin/layouts/users.njk +0 -91
- /package/admin/{layouts/_flash.njk → components/flash.njk} +0 -0
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
import { ADDRESS_SALT_FILE, FORM_LOADED_FIELD, FORM_TRAP_FIELD, formTimingRefusal, trapped, } from '../forms/protection.js';
|
|
2
|
+
import { renderCommentMarkdown } from './markdown.js';
|
|
3
|
+
import { intakeComment } from './records.js';
|
|
4
|
+
/**
|
|
5
|
+
* What happens between somebody pressing Post and a proposed comment.
|
|
6
|
+
*
|
|
7
|
+
* Three defences run before anything is proposed, in the order that costs least
|
|
8
|
+
* and gives away least — the honeypot, the age of the form and the per-address
|
|
9
|
+
* rate limit. The first two are `forms/protection.ts`, shared with the contact
|
|
10
|
+
* form (TASK-56) so the two public forms cannot drift into different rules; the
|
|
11
|
+
* third is the same limiter the login form uses, over the commenter's address,
|
|
12
|
+
* so one machine cannot post a hundred comments while a moderator sleeps.
|
|
13
|
+
*
|
|
14
|
+
* What survives all three is handed to {@link intakeComment}, which is where
|
|
15
|
+
* every comment on this site is written whatever proposed it: the checker, the
|
|
16
|
+
* verdict-to-status rule, the file, the index and the notice all live there, so
|
|
17
|
+
* a form submission and a webmention cannot be treated by two sets of rules.
|
|
18
|
+
*
|
|
19
|
+
* The {@link CommentChecker} interface stays here because this is where it
|
|
20
|
+
* reads: it is the one seam a third-party service plugs into, everything
|
|
21
|
+
* Akismet's API asks for is on the submission it is handed, and its four
|
|
22
|
+
* answers are the four the intake understands. Nothing else in the CMS has to
|
|
23
|
+
* know such a service exists.
|
|
24
|
+
*/
|
|
25
|
+
// Re-exported where they have always been, so a site that imported them from
|
|
26
|
+
// the package, and the modules in here that did, are unaffected by the move.
|
|
27
|
+
export { hashClientAddress, MAXIMUM_FORM_AGE_SECONDS, MINIMUM_SUBMIT_SECONDS, } from '../forms/protection.js';
|
|
28
|
+
/** Where the salt that hides commenters' addresses lives, under `dataDir`. */
|
|
29
|
+
export const COMMENT_SALT_FILE = ADDRESS_SALT_FILE;
|
|
30
|
+
/** The fields the comment form submits. */
|
|
31
|
+
export const COMMENT_FIELDS = {
|
|
32
|
+
/** The post being commented on, as its slug. */
|
|
33
|
+
post: 'post',
|
|
34
|
+
/** The commenter's name. Required. */
|
|
35
|
+
name: 'name',
|
|
36
|
+
/** Their email. Optional, and never shown. */
|
|
37
|
+
email: 'email',
|
|
38
|
+
/** Their website. Optional. */
|
|
39
|
+
url: 'url',
|
|
40
|
+
/** The comment itself, as Markdown. Required. */
|
|
41
|
+
body: 'body',
|
|
42
|
+
/** The comment being answered, or empty for one answering the post. */
|
|
43
|
+
inReplyTo: 'in_reply_to',
|
|
44
|
+
/** The honeypot, which every public form here spells the same way. */
|
|
45
|
+
trap: FORM_TRAP_FIELD,
|
|
46
|
+
/** When the form was rendered, in epoch milliseconds. */
|
|
47
|
+
loaded: FORM_LOADED_FIELD,
|
|
48
|
+
/**
|
|
49
|
+
* "Tell me when somebody answers this."
|
|
50
|
+
*
|
|
51
|
+
* A checkbox, so any non-empty value is a yes. It only ever means anything
|
|
52
|
+
* alongside an email address, and the form only offers it when the site can
|
|
53
|
+
* actually send mail (TASK-55).
|
|
54
|
+
*/
|
|
55
|
+
notify: 'notify',
|
|
56
|
+
};
|
|
57
|
+
/** How many comments one address may post before it has to wait. */
|
|
58
|
+
export const COMMENT_RATE_LIMIT = 5;
|
|
59
|
+
/** How long that window is, and how long the first wait after it lasts. */
|
|
60
|
+
export const COMMENT_RATE_WINDOW_SECONDS = 600;
|
|
61
|
+
/** The longest a name may be. */
|
|
62
|
+
export const MAXIMUM_NAME_LENGTH = 80;
|
|
63
|
+
/** The longest an email or a website may be. */
|
|
64
|
+
export const MAXIMUM_URL_LENGTH = 500;
|
|
65
|
+
/** The longest a comment may be, in characters. */
|
|
66
|
+
export const MAXIMUM_BODY_LENGTH = 10_000;
|
|
67
|
+
/**
|
|
68
|
+
* What is wrong with a submitted comment, as a person would be told it.
|
|
69
|
+
*
|
|
70
|
+
* Only the things a person can fix. The honeypot, the form's age and the rate
|
|
71
|
+
* limit are not here: none of them is the commenter's mistake, and two of them
|
|
72
|
+
* should not be explained to whoever tripped them.
|
|
73
|
+
*/
|
|
74
|
+
export function commentProblems(form) {
|
|
75
|
+
const problems = {};
|
|
76
|
+
const name = form.name.trim();
|
|
77
|
+
if (name === '')
|
|
78
|
+
problems.name = 'A comment needs a name to go under.';
|
|
79
|
+
else if (name.length > MAXIMUM_NAME_LENGTH) {
|
|
80
|
+
problems.name = `That name is longer than ${String(MAXIMUM_NAME_LENGTH)} characters.`;
|
|
81
|
+
}
|
|
82
|
+
const body = form.body.trim();
|
|
83
|
+
if (body === '')
|
|
84
|
+
problems.body = 'A comment needs something in it.';
|
|
85
|
+
else if (body.length > MAXIMUM_BODY_LENGTH) {
|
|
86
|
+
problems.body = `That comment is longer than ${String(MAXIMUM_BODY_LENGTH)} characters.`;
|
|
87
|
+
}
|
|
88
|
+
const email = form.email.trim();
|
|
89
|
+
if (email !== '' && !isEmail(email)) {
|
|
90
|
+
problems.email =
|
|
91
|
+
'That does not look like an email address. Leave it empty if you would rather.';
|
|
92
|
+
}
|
|
93
|
+
const url = form.url.trim();
|
|
94
|
+
if (url !== '' && normalizeWebsite(url) === undefined) {
|
|
95
|
+
problems.url = 'A website is an http:// or https:// address.';
|
|
96
|
+
}
|
|
97
|
+
return problems;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Take a submitted form and, if it survives everything, store the comment.
|
|
101
|
+
*
|
|
102
|
+
* The caller has already decided that the post is open: whether a form should
|
|
103
|
+
* exist at all is {@link commentsOpen}'s question, and asking it here as well
|
|
104
|
+
* would let the two answers differ.
|
|
105
|
+
*/
|
|
106
|
+
export async function submitComment(options) {
|
|
107
|
+
const { records, document, form, throttle } = options;
|
|
108
|
+
const now = options.now ?? new Date();
|
|
109
|
+
// The honeypot first, because it costs one comparison and because a
|
|
110
|
+
// submission that tripped it should not reach anything that could tell it so.
|
|
111
|
+
if (trapped(form.trap))
|
|
112
|
+
return refused({ kind: 'discarded' });
|
|
113
|
+
const problems = commentProblems(form);
|
|
114
|
+
if (Object.keys(problems).length > 0)
|
|
115
|
+
return refused({ kind: 'invalid', problems });
|
|
116
|
+
const timing = formTimingRefusal(form.loaded, now);
|
|
117
|
+
if (timing !== undefined)
|
|
118
|
+
return refused({ kind: timing });
|
|
119
|
+
const keys = commentKeys(options.address);
|
|
120
|
+
const wait = throttle.retryAfter(keys);
|
|
121
|
+
if (wait !== undefined)
|
|
122
|
+
return refused({ kind: 'rate-limited', retryAfter: wait });
|
|
123
|
+
const markdown = form.body.trim();
|
|
124
|
+
const author = {
|
|
125
|
+
name: form.name.trim(),
|
|
126
|
+
url: normalizeWebsite(form.url.trim()) ?? null,
|
|
127
|
+
email: form.email.trim() === '' ? null : form.email.trim(),
|
|
128
|
+
// A form asks for no picture: only a webmention brings one (TASK-51).
|
|
129
|
+
avatar: null,
|
|
130
|
+
};
|
|
131
|
+
const proposed = {
|
|
132
|
+
slug: document.slug,
|
|
133
|
+
permalink: document.permalink,
|
|
134
|
+
source: 'comment',
|
|
135
|
+
kind: 'reply',
|
|
136
|
+
author,
|
|
137
|
+
content: { markdown, html: renderCommentMarkdown(markdown) },
|
|
138
|
+
submitted: now.toISOString(),
|
|
139
|
+
inReplyTo: parentOf(form.inReplyTo, document.slug, records),
|
|
140
|
+
// A comment written here lives here: only a webmention has a page of its
|
|
141
|
+
// own somewhere else (TASK-51).
|
|
142
|
+
url: null,
|
|
143
|
+
// Only ever true when there is an address to send to. A box ticked with
|
|
144
|
+
// the email field empty is somebody asking to be told at nowhere.
|
|
145
|
+
notify: options.notifiable === true && form.notify.trim() !== '' && author.email !== null,
|
|
146
|
+
};
|
|
147
|
+
const outcome = await intakeComment({
|
|
148
|
+
records,
|
|
149
|
+
origin: 'form',
|
|
150
|
+
comment: proposed,
|
|
151
|
+
post: {
|
|
152
|
+
title: document.title,
|
|
153
|
+
url: absolute(document.permalink, options.baseUrl),
|
|
154
|
+
},
|
|
155
|
+
dataDir: options.dataDir,
|
|
156
|
+
baseUrl: options.baseUrl,
|
|
157
|
+
checker: options.checker,
|
|
158
|
+
notices: options.notices,
|
|
159
|
+
address: options.address,
|
|
160
|
+
userAgent: options.userAgent,
|
|
161
|
+
referrer: options.referrer,
|
|
162
|
+
});
|
|
163
|
+
// Counted against the address whatever became of it: a machine posting
|
|
164
|
+
// rubbish should not get unlimited free attempts because the rubbish was
|
|
165
|
+
// recognised.
|
|
166
|
+
throttle.fail(keys);
|
|
167
|
+
return outcome.kind === 'stored'
|
|
168
|
+
? { kind: 'stored', comment: outcome.comment }
|
|
169
|
+
: refused({ kind: 'discarded' });
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* The comment a submission answers, or `null`.
|
|
173
|
+
*
|
|
174
|
+
* A named parent that is not a comment on this very post is dropped rather
|
|
175
|
+
* than stored: threading a reply under something on another page would put it
|
|
176
|
+
* somewhere nobody can see it, and an id somebody made up is not a parent.
|
|
177
|
+
*/
|
|
178
|
+
function parentOf(submitted, slug, records) {
|
|
179
|
+
const id = submitted.trim();
|
|
180
|
+
if (id === '')
|
|
181
|
+
return null;
|
|
182
|
+
const parent = records.admin.getComment(id);
|
|
183
|
+
return parent !== undefined && parent.slug === slug ? parent.id : null;
|
|
184
|
+
}
|
|
185
|
+
/** The keys a submission is rate limited against. */
|
|
186
|
+
export function commentKeys(address) {
|
|
187
|
+
return address === undefined ? [] : [`comment:${address}`];
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* A submitted website as the absolute URL it means, or `undefined` when it
|
|
191
|
+
* means none.
|
|
192
|
+
*
|
|
193
|
+
* A bare `example.com` becomes `https://example.com/`, because that is what
|
|
194
|
+
* somebody typing it meant and refusing it would be pedantry; anything whose
|
|
195
|
+
* scheme is not http or https is refused, because it is going on a page as a
|
|
196
|
+
* link.
|
|
197
|
+
*/
|
|
198
|
+
export function normalizeWebsite(value) {
|
|
199
|
+
const trimmed = value.trim();
|
|
200
|
+
if (trimmed === '' || trimmed.length > MAXIMUM_URL_LENGTH)
|
|
201
|
+
return undefined;
|
|
202
|
+
const candidate = /^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(trimmed) ? trimmed : `https://${trimmed}`;
|
|
203
|
+
let url;
|
|
204
|
+
try {
|
|
205
|
+
url = new URL(candidate);
|
|
206
|
+
}
|
|
207
|
+
catch {
|
|
208
|
+
return undefined;
|
|
209
|
+
}
|
|
210
|
+
if (url.protocol !== 'http:' && url.protocol !== 'https:')
|
|
211
|
+
return undefined;
|
|
212
|
+
if (url.hostname === '')
|
|
213
|
+
return undefined;
|
|
214
|
+
return url.href;
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Whether something looks like an email address.
|
|
218
|
+
*
|
|
219
|
+
* Deliberately loose. The address is never shown and nothing is ever sent to
|
|
220
|
+
* it (TASK-50 has no email at all), so the only thing checking it buys is
|
|
221
|
+
* catching a typo; a stricter rule would refuse valid addresses and buy
|
|
222
|
+
* nothing.
|
|
223
|
+
*/
|
|
224
|
+
function isEmail(value) {
|
|
225
|
+
if (value.length > MAXIMUM_URL_LENGTH)
|
|
226
|
+
return false;
|
|
227
|
+
return /^[^\s@]+@[^\s@.]+(\.[^\s@.]+)+$/.test(value);
|
|
228
|
+
}
|
|
229
|
+
/** A site-root path as an absolute URL. */
|
|
230
|
+
function absolute(pathname, baseUrl) {
|
|
231
|
+
try {
|
|
232
|
+
return new URL(pathname, baseUrl).href;
|
|
233
|
+
}
|
|
234
|
+
catch {
|
|
235
|
+
return pathname;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
function refused(refusal) {
|
|
239
|
+
return { kind: 'refused', refusal };
|
|
240
|
+
}
|
|
241
|
+
//# sourceMappingURL=submission.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"submission.js","sourceRoot":"","sources":["../../src/comments/submission.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import type { KvStore, MessageQueue } from '@fedify/fedify';
|
|
2
|
+
import type { CommentChecker } from './comments/submission.ts';
|
|
3
|
+
import type { Clock } from './content/store.ts';
|
|
2
4
|
import type { DocumentChange } from './content/sync.ts';
|
|
5
|
+
import type { MailProvider } from './mail/provider.ts';
|
|
6
|
+
import type { MailLogger } from './mail/service.ts';
|
|
3
7
|
/**
|
|
4
8
|
* Something a site wants to happen when the index changes.
|
|
5
9
|
*
|
|
@@ -44,6 +48,36 @@ export interface FederationOverrides {
|
|
|
44
48
|
*/
|
|
45
49
|
allowPrivateAddress?: boolean | undefined;
|
|
46
50
|
}
|
|
51
|
+
/**
|
|
52
|
+
* The mail pieces a site may swap (TASK-53).
|
|
53
|
+
*
|
|
54
|
+
* Everything here has a default that is right for a personal blog: the
|
|
55
|
+
* provider comes from the settings screen and `data/mail.json`, a refused
|
|
56
|
+
* message is tried three times with a growing wait, and attempts go to the
|
|
57
|
+
* console. A site names one of these when it has outgrown that, and a test
|
|
58
|
+
* names them to read back the mail and to not wait for the backoff.
|
|
59
|
+
*/
|
|
60
|
+
export interface MailOverrides {
|
|
61
|
+
/**
|
|
62
|
+
* What carries the site's email.
|
|
63
|
+
*
|
|
64
|
+
* Naming one wins outright over the provider the settings screen chose and
|
|
65
|
+
* the credential in `data/mail.json`, exactly as
|
|
66
|
+
* {@link GeekityConfig.commentChecker} wins over the Akismet key: a site
|
|
67
|
+
* that wrote a provider meant it. `createMemoryMailProvider()` is what a
|
|
68
|
+
* test names here to read back the mail a feature would have sent.
|
|
69
|
+
*/
|
|
70
|
+
provider?: MailProvider | undefined;
|
|
71
|
+
/** How many times one message is tried. Defaults to three. */
|
|
72
|
+
attempts?: number | undefined;
|
|
73
|
+
/**
|
|
74
|
+
* How long to wait before attempt `n + 1`, in milliseconds. Defaults to two
|
|
75
|
+
* seconds, then eight, then eighteen. A test hands in `() => 0`.
|
|
76
|
+
*/
|
|
77
|
+
backoffMs?: ((attempt: number) => number) | undefined;
|
|
78
|
+
/** Where attempts are logged. Defaults to `console`. */
|
|
79
|
+
logger?: MailLogger | undefined;
|
|
80
|
+
}
|
|
47
81
|
/**
|
|
48
82
|
* What a site writes in `geekity.config.ts`. Every field is optional; see
|
|
49
83
|
* {@link DEFAULT_PORT} and friends for what each one falls back to.
|
|
@@ -55,8 +89,17 @@ export interface GeekityConfig {
|
|
|
55
89
|
contentDir?: string;
|
|
56
90
|
/** Directory for derived state such as the SQLite index. Default `<cwd>/data`. Overridden by `GEEKITY_DATA_DIR`. */
|
|
57
91
|
dataDir?: string;
|
|
58
|
-
/**
|
|
59
|
-
|
|
92
|
+
/**
|
|
93
|
+
* Where this site's themes are, one directory per theme, each with a
|
|
94
|
+
* `theme.json` (decision-15). Default `<cwd>/themes`. Overridden by
|
|
95
|
+
* `GEEKITY_THEMES_DIR`. It need not exist: a site using the packaged theme
|
|
96
|
+
* has no themes of its own.
|
|
97
|
+
*
|
|
98
|
+
* Which one is in use is a setting rather than a deployment fact — `theme`
|
|
99
|
+
* in `content/_data/site.json`, chosen on the Appearance screen — because it
|
|
100
|
+
* is a look a site changes, not a path a host decides.
|
|
101
|
+
*/
|
|
102
|
+
themesDir?: string;
|
|
60
103
|
/** Public origin, used for canonical URLs, feeds and ActivityPub ids. Default `http://localhost:<port>`. Overridden by `GEEKITY_BASE_URL`. */
|
|
61
104
|
baseUrl?: string;
|
|
62
105
|
/**
|
|
@@ -84,6 +127,71 @@ export interface GeekityConfig {
|
|
|
84
127
|
* `KNOWN_UPLOAD_TYPES`.
|
|
85
128
|
*/
|
|
86
129
|
uploadTypes?: string[];
|
|
130
|
+
/**
|
|
131
|
+
* Derive smaller and more modern copies of an uploaded raster image, and
|
|
132
|
+
* serve the site's pages a `<picture>` that offers them. Default `true`.
|
|
133
|
+
* Overridden by `GEEKITY_IMAGE_OPTIMIZATION`.
|
|
134
|
+
*
|
|
135
|
+
* Turning it off changes nothing on disk under `content/uploads/` — the
|
|
136
|
+
* original was always the only source of truth (decision-10) — and nothing
|
|
137
|
+
* about the feeds. The pages go back to the plain `<img>` the Markdown
|
|
138
|
+
* asked for, and no encoding happens on upload.
|
|
139
|
+
*/
|
|
140
|
+
imageOptimization?: boolean;
|
|
141
|
+
/**
|
|
142
|
+
* The widths variants are made at, in pixels. Default 320, 640, 960, 1280
|
|
143
|
+
* and 1920, which is 11ty/image's own set. Overridden by
|
|
144
|
+
* `GEEKITY_IMAGE_WIDTHS`, a comma-separated list.
|
|
145
|
+
*
|
|
146
|
+
* Nothing is ever upscaled: a width wider than the original is skipped, and
|
|
147
|
+
* the original's own width is always added, so the `srcset` has a full-size
|
|
148
|
+
* entry whatever the list says.
|
|
149
|
+
*/
|
|
150
|
+
imageWidths?: number[];
|
|
151
|
+
/**
|
|
152
|
+
* The formats variants are made in, besides the original's own. Default
|
|
153
|
+
* `['webp']`. Overridden by `GEEKITY_IMAGE_FORMATS`, a comma-separated list.
|
|
154
|
+
*
|
|
155
|
+
* The original's format is always generated too, because it is what the
|
|
156
|
+
* `<img>` inside the `<picture>` falls back to; these are the `<source>`
|
|
157
|
+
* elements in front of it, in the order they are given. AVIF is opt-in —
|
|
158
|
+
* `['avif', 'webp']` — because its encoder is an order of magnitude slower
|
|
159
|
+
* than WebP's and the encoding happens in the request that uploads the file.
|
|
160
|
+
*/
|
|
161
|
+
imageFormats?: string[];
|
|
162
|
+
/**
|
|
163
|
+
* How many failed sign-ins a username or a client address may make before
|
|
164
|
+
* the admin locks it out. Default 5. Overridden by `GEEKITY_LOGIN_ATTEMPTS`.
|
|
165
|
+
*/
|
|
166
|
+
loginAttempts?: number;
|
|
167
|
+
/**
|
|
168
|
+
* How long the first lockout lasts, in seconds. Default 15 minutes. Each
|
|
169
|
+
* further failure doubles the wait, up to sixteen times the first one.
|
|
170
|
+
* Overridden by `GEEKITY_LOGIN_LOCKOUT`.
|
|
171
|
+
*/
|
|
172
|
+
loginLockout?: number;
|
|
173
|
+
/**
|
|
174
|
+
* Whether an `X-Forwarded-For` header may be believed when the admin decides
|
|
175
|
+
* which client address a failed login belongs to. Default `false`.
|
|
176
|
+
* Overridden by `GEEKITY_TRUST_PROXY`.
|
|
177
|
+
*
|
|
178
|
+
* Off by default because anyone may send that header: believing it on a site
|
|
179
|
+
* reached directly would let an attacker put every guess on a different
|
|
180
|
+
* make-believe address and never be locked out at all. Turn it on only when
|
|
181
|
+
* a reverse proxy in front of the site sets it.
|
|
182
|
+
*/
|
|
183
|
+
trustProxy?: boolean;
|
|
184
|
+
/**
|
|
185
|
+
* Fill a missing or empty content directory with the starter site
|
|
186
|
+
* `geekity init` writes, when `geekity serve` starts. Default `false`.
|
|
187
|
+
* Overridden by `GEEKITY_SEED_CONTENT`.
|
|
188
|
+
*
|
|
189
|
+
* Off by default so a site run from npm never has content written that it
|
|
190
|
+
* did not ask for. The Docker image turns it on, because its content volume
|
|
191
|
+
* is empty on a new box. A directory with anything in it at all, even a lone
|
|
192
|
+
* dotfile, is never touched.
|
|
193
|
+
*/
|
|
194
|
+
seedContent?: boolean;
|
|
87
195
|
/**
|
|
88
196
|
* Called for every `created`, `updated` and `deleted` the index records.
|
|
89
197
|
*
|
|
@@ -98,6 +206,37 @@ export interface GeekityConfig {
|
|
|
98
206
|
* same `origin` caveat as {@link GeekityConfig.onDocumentChange}.
|
|
99
207
|
*/
|
|
100
208
|
onPublish?: DocumentChangeHook;
|
|
209
|
+
/**
|
|
210
|
+
* A third-party opinion on native comments: Akismet, or anything else that
|
|
211
|
+
* answers the same three questions (TASK-50).
|
|
212
|
+
*
|
|
213
|
+
* The whole of the CMS's knowledge of such a service. It is asked about
|
|
214
|
+
* every comment that gets past the honeypot, the form's age and the rate
|
|
215
|
+
* limit, and its `spam`, `discard` and `ham` are the three things it can
|
|
216
|
+
* say; a checker that throws is treated as having no opinion, so a service
|
|
217
|
+
* that is down never stops a site taking comments. The moderation screen
|
|
218
|
+
* tells it when a human disagrees.
|
|
219
|
+
*
|
|
220
|
+
* Naming one here wins outright over the Akismet checker the package ships
|
|
221
|
+
* (TASK-52): `createCms` builds that only when this is not set, so a site
|
|
222
|
+
* that wrote a checker gets the checker it wrote whether or not there is a
|
|
223
|
+
* key in `data/akismet.json`.
|
|
224
|
+
*/
|
|
225
|
+
commentChecker?: CommentChecker;
|
|
226
|
+
/**
|
|
227
|
+
* How the site sends email (TASK-53). Every field has a default; see
|
|
228
|
+
* {@link MailOverrides}.
|
|
229
|
+
*/
|
|
230
|
+
mail?: MailOverrides;
|
|
231
|
+
/**
|
|
232
|
+
* What the CMS reads the time from.
|
|
233
|
+
*
|
|
234
|
+
* A post's date decides whether it is public yet (TASK-44), so the index and
|
|
235
|
+
* the scheduler both need a clock, and it is one clock so they cannot
|
|
236
|
+
* disagree. Defaults to {@link systemClock}. A site has no reason to name
|
|
237
|
+
* one; a test that wants to be somewhere else in time does.
|
|
238
|
+
*/
|
|
239
|
+
now?: Clock;
|
|
101
240
|
/**
|
|
102
241
|
* Federation stores and guards. Every field has a default; see
|
|
103
242
|
* {@link FederationOverrides}.
|
|
@@ -114,7 +253,7 @@ export interface ResolvedConfig {
|
|
|
114
253
|
port: number;
|
|
115
254
|
contentDir: string;
|
|
116
255
|
dataDir: string;
|
|
117
|
-
|
|
256
|
+
themesDir: string;
|
|
118
257
|
baseUrl: string;
|
|
119
258
|
/**
|
|
120
259
|
* Where {@link ResolvedConfig.baseUrl} came from.
|
|
@@ -122,7 +261,7 @@ export interface ResolvedConfig {
|
|
|
122
261
|
* `default` means nobody named one and it is the `http://localhost:<port>`
|
|
123
262
|
* fallback, which is what lets the admin's settings screen offer a base URL
|
|
124
263
|
* of its own: an `environment` or `config` value is a deployment fact and
|
|
125
|
-
* wins over
|
|
264
|
+
* wins over the `url` in `content/_data/site.json`.
|
|
126
265
|
*/
|
|
127
266
|
baseUrlSource: 'environment' | 'config' | 'default';
|
|
128
267
|
watch: boolean;
|
|
@@ -130,8 +269,30 @@ export interface ResolvedConfig {
|
|
|
130
269
|
uploadMaxBytes: number;
|
|
131
270
|
/** Normalised: lower case, each with its leading dot. */
|
|
132
271
|
uploadTypes: string[];
|
|
272
|
+
imageOptimization: boolean;
|
|
273
|
+
/** Ascending and without repeats. */
|
|
274
|
+
imageWidths: number[];
|
|
275
|
+
/** Normalised: lower case, in the order the `<source>` elements go. */
|
|
276
|
+
imageFormats: string[];
|
|
277
|
+
loginAttempts: number;
|
|
278
|
+
loginLockout: number;
|
|
279
|
+
trustProxy: boolean;
|
|
280
|
+
seedContent: boolean;
|
|
133
281
|
onDocumentChange: DocumentChangeHook | undefined;
|
|
134
282
|
onPublish: DocumentChangeHook | undefined;
|
|
283
|
+
/**
|
|
284
|
+
* The comment checker, when the site named one.
|
|
285
|
+
*
|
|
286
|
+
* `undefined` as this leaves {@link resolveConfig}. `createCms` fills it in
|
|
287
|
+
* with the Akismet checker (TASK-52) when the site named none, so by the
|
|
288
|
+
* time a request reads it off the context there is one — and with no key in
|
|
289
|
+
* `data/akismet.json` that one sends nothing anywhere.
|
|
290
|
+
*/
|
|
291
|
+
commentChecker: CommentChecker | undefined;
|
|
292
|
+
/** Mail overrides, empty when the site named none. */
|
|
293
|
+
mail: MailOverrides;
|
|
294
|
+
/** The clock the index and the scheduler read. */
|
|
295
|
+
now: Clock;
|
|
135
296
|
/** Federation stores and guards, empty when the site named none. */
|
|
136
297
|
federation: FederationOverrides;
|
|
137
298
|
}
|
|
@@ -145,7 +306,7 @@ export interface ResolveConfigContext {
|
|
|
145
306
|
export declare const DEFAULT_PORT = 3000;
|
|
146
307
|
export declare const DEFAULT_CONTENT_DIR = "content";
|
|
147
308
|
export declare const DEFAULT_DATA_DIR = "data";
|
|
148
|
-
export declare const
|
|
309
|
+
export declare const DEFAULT_THEMES_DIR = "themes";
|
|
149
310
|
/** How long an admin login lasts by default: fourteen days, in seconds. */
|
|
150
311
|
export declare const DEFAULT_SESSION_LIFETIME: number;
|
|
151
312
|
/** Largest upload a site accepts by default: ten mebibytes. */
|
|
@@ -157,6 +318,30 @@ export declare const DEFAULT_UPLOAD_MAX_BYTES: number;
|
|
|
157
318
|
* and so is opt-in.
|
|
158
319
|
*/
|
|
159
320
|
export declare const DEFAULT_UPLOAD_TYPES: readonly string[];
|
|
321
|
+
/**
|
|
322
|
+
* The widths an image is offered at by default.
|
|
323
|
+
*
|
|
324
|
+
* These are 11ty/image's own defaults, and deliberately so: decision-10 makes
|
|
325
|
+
* that plugin the reference for the markup and the width set, so a site that
|
|
326
|
+
* builds the same `content/` with Eleventy and runs the plugin over the same
|
|
327
|
+
* originals gets an equivalent `srcset` rather than a different one.
|
|
328
|
+
*/
|
|
329
|
+
export declare const DEFAULT_IMAGE_WIDTHS: readonly number[];
|
|
330
|
+
/** The derived formats a site gets without asking. AVIF is not one; see {@link GeekityConfig.imageFormats}. */
|
|
331
|
+
export declare const DEFAULT_IMAGE_FORMATS: readonly string[];
|
|
332
|
+
/**
|
|
333
|
+
* The formats a site may ask for.
|
|
334
|
+
*
|
|
335
|
+
* Every one of them is something sharp can write and every browser that
|
|
336
|
+
* matters can read. There is no `gif` and no `svg`: an animated GIF cannot
|
|
337
|
+
* survive being resized frame by frame into a still, and an SVG has no
|
|
338
|
+
* intrinsic pixels to resize at all, so neither is ever varianted.
|
|
339
|
+
*/
|
|
340
|
+
export declare const KNOWN_IMAGE_FORMATS: readonly string[];
|
|
341
|
+
/** Failed sign-ins allowed before the admin locks a username or an address out. */
|
|
342
|
+
export declare const DEFAULT_LOGIN_ATTEMPTS = 5;
|
|
343
|
+
/** How long the first lockout lasts by default: a quarter of an hour, in seconds. */
|
|
344
|
+
export declare const DEFAULT_LOGIN_LOCKOUT: number;
|
|
160
345
|
/**
|
|
161
346
|
* Identity helper that gives a `geekity.config.ts` file type checking and
|
|
162
347
|
* completion without the site importing the type by hand.
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|