@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
package/dist/admin/federation.js
CHANGED
|
@@ -1,17 +1,28 @@
|
|
|
1
|
+
import { isTrashedPath } from '../content/store.js';
|
|
2
|
+
import { listUsers } from './accounts.js';
|
|
1
3
|
import { avatarUrl } from '../federation/actor.js';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
+
import { ACTOR_PATH, federationOrigin } from '../federation/paths.js';
|
|
5
|
+
import { authorHref, profileContext, userForAuthor } from '../web/authors.js';
|
|
6
|
+
import { postObjectId, publicDocumentAt } from '../web/documents.js';
|
|
7
|
+
import { absoluteUrl } from '../web/negotiate.js';
|
|
4
8
|
import { editorPath, POST_KIND } from './documents.js';
|
|
5
9
|
import { flash } from './flash.js';
|
|
6
|
-
import { readSiteSettings } from './settings.js';
|
|
7
10
|
import { ADMIN_PREFIX } from './session.js';
|
|
8
11
|
import { ADMIN_TEMPLATES } from './templates.js';
|
|
9
12
|
/** Where the federation screen lives. */
|
|
10
13
|
export const FEDERATION_PATH = `${ADMIN_PREFIX}/federation`;
|
|
11
|
-
/** Where a post's
|
|
12
|
-
export const
|
|
13
|
-
/**
|
|
14
|
-
export const
|
|
14
|
+
/** Where a post's Resend button posts. */
|
|
15
|
+
export const RESEND_PATH = `${FEDERATION_PATH}/resend`;
|
|
16
|
+
/** Where a relay's Retry button posts. */
|
|
17
|
+
export const RELAY_RETRY_PATH = `${FEDERATION_PATH}/relays/retry`;
|
|
18
|
+
/** The fields the screen's forms submit. */
|
|
19
|
+
export const FEDERATION_FIELDS = { slug: 'slug', relay: 'relay' };
|
|
20
|
+
/** What each relay state reads as on the screen. */
|
|
21
|
+
export const RELAY_STATE_LABELS = {
|
|
22
|
+
pending: 'Waiting',
|
|
23
|
+
accepted: 'Accepted',
|
|
24
|
+
rejected: 'Rejected',
|
|
25
|
+
};
|
|
15
26
|
/**
|
|
16
27
|
* How many rows each of the screen's lists holds.
|
|
17
28
|
*
|
|
@@ -24,9 +35,17 @@ export const FEDERATION_RECENT = 50;
|
|
|
24
35
|
* Register `/admin/federation`: who the site is to the fediverse, who follows
|
|
25
36
|
* it, what arrived in the inbox, and how the posts that went out landed.
|
|
26
37
|
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
38
|
+
* Nothing on it is fetched: the followers and the inbox log are indexed in
|
|
39
|
+
* SQLite from the files that hold them precisely so the admin can show them
|
|
40
|
+
* without dereferencing a remote actor per row.
|
|
41
|
+
*
|
|
42
|
+
* The delivery panel is the one that reads two sources at once. Which posts
|
|
43
|
+
* belong on it is a question for the content index — the posts carrying an
|
|
44
|
+
* `activitypub.published`, which is the same thing as the posts a follower
|
|
45
|
+
* holds a copy of — and how each of them last landed is a question for the outcome
|
|
46
|
+
* cache. That order matters: the cache is disposable (decision-9), so a site
|
|
47
|
+
* that has just deleted its database sees every federated post listed with
|
|
48
|
+
* nothing yet recorded against it, rather than an empty panel.
|
|
30
49
|
*/
|
|
31
50
|
export function mountFederationScreen(app, options) {
|
|
32
51
|
const { render } = options;
|
|
@@ -34,46 +53,83 @@ export function mountFederationScreen(app, options) {
|
|
|
34
53
|
const admin = c.var.admin;
|
|
35
54
|
const baseUrl = c.var.config.baseUrl;
|
|
36
55
|
const post = localPosts(c.var.store, baseUrl);
|
|
56
|
+
const users = listUsers(c.var.config.dataDir);
|
|
37
57
|
return render(c, ADMIN_TEMPLATES.federation, {
|
|
38
58
|
section: 'federation',
|
|
39
|
-
|
|
59
|
+
child: 'followers',
|
|
60
|
+
resendUrl: RESEND_PATH,
|
|
40
61
|
fields: FEDERATION_FIELDS,
|
|
41
|
-
|
|
62
|
+
actors: users.map((user) => actorSummary(user, {
|
|
42
63
|
baseUrl,
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
64
|
+
followerCount: admin.countFollowers(user.username),
|
|
65
|
+
followers: admin
|
|
66
|
+
.listFollowers(user.username, { limit: FEDERATION_RECENT })
|
|
67
|
+
.map((follower) => followerRow(follower)),
|
|
68
|
+
})),
|
|
48
69
|
// The inbox log holds the follow traffic as well, and only a fraction of
|
|
49
70
|
// it survives {@link inboxRows}, so more is read than is shown.
|
|
50
71
|
inbox: inboxRows(admin.listInboxActivities({ limit: FEDERATION_RECENT * 4 }), {
|
|
51
72
|
followers: admin.listFollowers(),
|
|
52
73
|
post,
|
|
53
74
|
}),
|
|
54
|
-
|
|
75
|
+
relayRetryUrl: RELAY_RETRY_PATH,
|
|
76
|
+
relays: admin
|
|
77
|
+
.listRelays()
|
|
78
|
+
.map((relay) => relayRow(relay, admin.lastDeliveryToInbox(relay.inboxId))),
|
|
79
|
+
posts: deliveryRows(c.var.store.listFederated({ limit: FEDERATION_RECENT }), {
|
|
80
|
+
baseUrl,
|
|
81
|
+
author: (document) => userForAuthor(users, document.author)?.username ?? null,
|
|
82
|
+
lastDelivery: (objectId) => admin.lastDeliveryToObject(objectId),
|
|
55
83
|
counts: (activityId) => admin.countDeliveriesByStatus(activityId),
|
|
56
|
-
|
|
57
|
-
})
|
|
84
|
+
webmentions: (slug) => admin.countSentWebmentionsByStatus(slug),
|
|
85
|
+
}),
|
|
58
86
|
});
|
|
59
87
|
});
|
|
60
88
|
/**
|
|
61
|
-
* Send one
|
|
89
|
+
* Send one relay's `Follow` again.
|
|
90
|
+
*
|
|
91
|
+
* The relay is named by its inbox, which is what the settings hold and what
|
|
92
|
+
* the row shows: a subscription is identified by where it was made, not by
|
|
93
|
+
* the follow it is currently waiting on, which is the thing a retry replaces.
|
|
94
|
+
*/
|
|
95
|
+
app.post(RELAY_RETRY_PATH, async (c) => {
|
|
96
|
+
const body = await c.req.parseBody();
|
|
97
|
+
const inboxId = body[FEDERATION_FIELDS.relay];
|
|
98
|
+
const relay = typeof inboxId === 'string' ? await c.var.relays.retry(inboxId) : undefined;
|
|
99
|
+
if (relay === undefined) {
|
|
100
|
+
flash(c, 'error', 'The site does not subscribe to that relay, so there is nothing to retry.');
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
flash(c, 'notice', `The follow has been sent to ${relay.inboxId} again. A relay may take a while to answer.`);
|
|
104
|
+
}
|
|
105
|
+
return c.redirect(FEDERATION_PATH, 303);
|
|
106
|
+
});
|
|
107
|
+
/**
|
|
108
|
+
* Send one post as it now reads to every follower and every accepted relay.
|
|
62
109
|
*
|
|
63
|
-
* The
|
|
64
|
-
*
|
|
65
|
-
*
|
|
66
|
-
*
|
|
110
|
+
* The post is named rather than an activity, which is the whole of what
|
|
111
|
+
* decision-9 changed here: the activity is built from the file when the
|
|
112
|
+
* button is pressed, so a post edited between the page load and the click
|
|
113
|
+
* goes out as it is now — which is what somebody pressing Resend is asking
|
|
114
|
+
* for — rather than as the row said it was.
|
|
67
115
|
*/
|
|
68
|
-
app.post(
|
|
116
|
+
app.post(RESEND_PATH, async (c) => {
|
|
69
117
|
const body = await c.req.parseBody();
|
|
70
|
-
const
|
|
71
|
-
const report = typeof
|
|
72
|
-
|
|
73
|
-
|
|
118
|
+
const slug = body[FEDERATION_FIELDS.slug];
|
|
119
|
+
const report = typeof slug === 'string' ? await c.var.delivery.resend(slug) : undefined;
|
|
120
|
+
// The webmentions go with it, because "send this post out again" is one
|
|
121
|
+
// thing to the person pressing the button and the links are as much a part
|
|
122
|
+
// of a post going out as the followers are (TASK-51). It is asked for
|
|
123
|
+
// separately because it answers for a post that has never federated at
|
|
124
|
+
// all, which `resend` says nothing about.
|
|
125
|
+
const links = typeof slug === 'string' ? await c.var.webmentions.send(slug) : undefined;
|
|
126
|
+
if (report === undefined && links === undefined) {
|
|
127
|
+
flash(c, 'error', 'There is no post to send under that name, so nothing was sent.');
|
|
74
128
|
}
|
|
75
129
|
else {
|
|
76
|
-
|
|
130
|
+
const failedSomewhere = (report?.deliveries.some(failed) ?? false) ||
|
|
131
|
+
(links?.sent.some((one) => one.status === 'failed') ?? false);
|
|
132
|
+
flash(c, failedSomewhere ? 'error' : 'notice', resendMessage(report, links));
|
|
77
133
|
}
|
|
78
134
|
return c.redirect(FEDERATION_PATH, 303);
|
|
79
135
|
});
|
|
@@ -83,15 +139,27 @@ function failed(delivery) {
|
|
|
83
139
|
return delivery.status === 'failed';
|
|
84
140
|
}
|
|
85
141
|
/**
|
|
86
|
-
* What a
|
|
142
|
+
* What a resend came to, in one line.
|
|
87
143
|
*
|
|
88
144
|
* The failures are counted even when there are none, because that zero is the
|
|
89
|
-
* answer to the question the button was pressed to ask.
|
|
145
|
+
* answer to the question the button was pressed to ask. The activity type is
|
|
146
|
+
* named because it is not something the person choosing to resend chose: it
|
|
147
|
+
* follows from the state the post is in, and a `Delete` where somebody
|
|
148
|
+
* expected an `Update` is worth reading about.
|
|
90
149
|
*/
|
|
91
|
-
export function
|
|
150
|
+
export function resendMessage(report, links) {
|
|
151
|
+
return [deliveryMessage(report), webmentionMessage(links)]
|
|
152
|
+
.filter((part) => part !== undefined)
|
|
153
|
+
.join(' ');
|
|
154
|
+
}
|
|
155
|
+
/** What the ActivityPub half of a resend came to. */
|
|
156
|
+
function deliveryMessage(report) {
|
|
157
|
+
if (report === undefined)
|
|
158
|
+
return undefined;
|
|
92
159
|
const total = report.deliveries.length;
|
|
93
160
|
if (total === 0) {
|
|
94
|
-
return `Nobody follows the site
|
|
161
|
+
return (`Nobody follows the site and no relay has accepted it, ` +
|
|
162
|
+
`so the ${report.activityType} had nowhere to go.`);
|
|
95
163
|
}
|
|
96
164
|
const counts = { sent: 0, queued: 0, failed: 0 };
|
|
97
165
|
for (const delivery of report.deliveries)
|
|
@@ -100,66 +168,97 @@ export function redeliveryMessage(report) {
|
|
|
100
168
|
if (counts.queued > 0)
|
|
101
169
|
parts.push(`${String(counts.queued)} queued`);
|
|
102
170
|
parts.push(`${String(counts.failed)} failed`);
|
|
103
|
-
|
|
104
|
-
|
|
171
|
+
// "Recipients" rather than "followers": a relay is one of them too, and it
|
|
172
|
+
// is not a follower.
|
|
173
|
+
const recipients = total === 1 ? '1 recipient' : `${String(total)} recipients`;
|
|
174
|
+
return `Sent ${report.activityType} to ${recipients}: ${parts.join(', ')}.`;
|
|
105
175
|
}
|
|
106
176
|
/**
|
|
107
|
-
*
|
|
108
|
-
*
|
|
177
|
+
* What the webmention half came to, or nothing at all when the post links
|
|
178
|
+
* nowhere outside the site.
|
|
109
179
|
*
|
|
110
|
-
*
|
|
111
|
-
*
|
|
112
|
-
*
|
|
113
|
-
* missed everything is owed. The activities arrive newest first, so the first
|
|
114
|
-
* one seen for an object is that one.
|
|
180
|
+
* Silence rather than "0 webmentions", because most posts link to nothing and
|
|
181
|
+
* a line about it on every resend would be noise about a thing that did not
|
|
182
|
+
* happen.
|
|
115
183
|
*/
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
rows.push({
|
|
129
|
-
post,
|
|
130
|
-
activityId: activity.activityId,
|
|
131
|
-
activityType: activity.activityType,
|
|
132
|
-
createdAt: activity.createdAt,
|
|
133
|
-
counts: context.counts(activity.activityId),
|
|
134
|
-
});
|
|
135
|
-
}
|
|
136
|
-
return rows;
|
|
184
|
+
function webmentionMessage(links) {
|
|
185
|
+
if (links === undefined || links.sent.length === 0)
|
|
186
|
+
return undefined;
|
|
187
|
+
const counts = { sent: 0, none: 0, failed: 0 };
|
|
188
|
+
for (const one of links.sent)
|
|
189
|
+
counts[one.status] += 1;
|
|
190
|
+
const linked = links.sent.length === 1 ? '1 linked page' : `${String(links.sent.length)} linked pages`;
|
|
191
|
+
const parts = [`${String(counts.sent)} told`];
|
|
192
|
+
if (counts.none > 0)
|
|
193
|
+
parts.push(`${String(counts.none)} take none`);
|
|
194
|
+
parts.push(`${String(counts.failed)} failed`);
|
|
195
|
+
return `Webmentions to ${linked}: ${parts.join(', ')}.`;
|
|
137
196
|
}
|
|
138
|
-
/**
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
197
|
+
/**
|
|
198
|
+
* One row per post the site has announced, newest post first.
|
|
199
|
+
*
|
|
200
|
+
* The posts come from the content index and the outcomes from the cache, in
|
|
201
|
+
* that order and not the other way round, because they are answers to two
|
|
202
|
+
* different questions. Which posts belong here is a fact about the files: a
|
|
203
|
+
* post carrying an `activitypub.published` is one some follower holds a copy
|
|
204
|
+
* of, and that stays true however often the database is thrown away. How each of them
|
|
205
|
+
* landed is a fact about the last delivery, which is exactly the sort of thing
|
|
206
|
+
* a cache is allowed to forget.
|
|
207
|
+
*
|
|
208
|
+
* A post is usually several activities — a `Create` and every `Update` since —
|
|
209
|
+
* and the newest is the only one worth showing: it is the version a follower
|
|
210
|
+
* who missed everything is owed, and the one a resend supersedes anyway.
|
|
211
|
+
*/
|
|
212
|
+
export function deliveryRows(documents, context) {
|
|
213
|
+
return documents.map((document) => {
|
|
214
|
+
const last = context.lastDelivery(postObjectId(document, context.baseUrl));
|
|
215
|
+
return {
|
|
216
|
+
post: {
|
|
217
|
+
slug: document.slug,
|
|
218
|
+
title: document.title,
|
|
219
|
+
editUrl: editorPath(POST_KIND, document.slug),
|
|
220
|
+
},
|
|
221
|
+
author: context.author(document),
|
|
222
|
+
slug: document.slug,
|
|
223
|
+
trashed: isTrashedPath(document.path),
|
|
224
|
+
lastActivity: last === undefined
|
|
225
|
+
? null
|
|
226
|
+
: {
|
|
227
|
+
activityType: last.activityType,
|
|
228
|
+
attemptedAt: last.attemptedAt,
|
|
229
|
+
counts: context.counts(last.activityId),
|
|
230
|
+
},
|
|
231
|
+
webmentions: context.webmentions(document.slug),
|
|
232
|
+
};
|
|
233
|
+
});
|
|
143
234
|
}
|
|
144
235
|
/**
|
|
145
|
-
*
|
|
236
|
+
* One user's actor as the screen shows it (decision-14).
|
|
146
237
|
*
|
|
147
238
|
* The handle's host and the actor's id both come from the base URL's origin
|
|
148
239
|
* rather than from the whole of it, because that is where the federation
|
|
149
|
-
* endpoints are served: a site under `/blog`
|
|
240
|
+
* endpoints are served: a site under `/blog` still answers `@ada@example.com`.
|
|
241
|
+
* The id is built from {@link ACTOR_PATH} rather than from `authorHref` for
|
|
242
|
+
* the same reason — it is the path Fedify dispatches the actor at, and the
|
|
243
|
+
* screen should say what a peer would get. Which is also why a user with a
|
|
244
|
+
* stored actor id (TASK-69) is shown under that: it is the id their followers
|
|
245
|
+
* hold, and a screen naming the other one would be describing a document
|
|
246
|
+
* nobody fetches.
|
|
150
247
|
*/
|
|
151
|
-
export function actorSummary(
|
|
248
|
+
export function actorSummary(user, context) {
|
|
152
249
|
const baseUrl = context.baseUrl === '' ? 'http://localhost' : context.baseUrl;
|
|
153
250
|
const origin = federationOrigin(baseUrl);
|
|
251
|
+
const profile = profileContext(user);
|
|
154
252
|
return {
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
name:
|
|
159
|
-
summary:
|
|
160
|
-
actorId:
|
|
161
|
-
.href,
|
|
162
|
-
url: baseUrl,
|
|
253
|
+
username: user.username,
|
|
254
|
+
handle: `@${user.username}@${origin.handleHost}`,
|
|
255
|
+
avatarUrl: profile.avatar === undefined ? null : (avatarUrl(profile.avatar, baseUrl) ?? null),
|
|
256
|
+
name: profile.name,
|
|
257
|
+
summary: profile.bio ?? '',
|
|
258
|
+
actorId: user.actorId ??
|
|
259
|
+
new URL(ACTOR_PATH.replace('{identifier}', encodeURIComponent(user.username)), origin.webOrigin).href,
|
|
260
|
+
url: absoluteUrl(authorHref(user.username), baseUrl),
|
|
261
|
+
followerCount: context.followerCount,
|
|
163
262
|
followers: context.followers,
|
|
164
263
|
};
|
|
165
264
|
}
|
|
@@ -238,13 +337,14 @@ function replyObject(activity) {
|
|
|
238
337
|
/**
|
|
239
338
|
* Resolve one of the site's own ActivityStreams ids to the post behind it.
|
|
240
339
|
*
|
|
241
|
-
*
|
|
242
|
-
*
|
|
243
|
-
*
|
|
340
|
+
* A post's id is its permalink (decision-13), so this is a lookup by URL
|
|
341
|
+
* against the content index: an id from anywhere else — a like of somebody
|
|
342
|
+
* else's post that reached the shared inbox, a reply to a reply — is `null`
|
|
343
|
+
* rather than a guess, and so is one whose path the index has never heard of.
|
|
244
344
|
*/
|
|
245
345
|
export function localPosts(store, baseUrl) {
|
|
246
|
-
const
|
|
247
|
-
const
|
|
346
|
+
const site = baseUrl === '' ? 'http://localhost' : baseUrl;
|
|
347
|
+
const origin = new URL(site).origin;
|
|
248
348
|
return (objectId) => {
|
|
249
349
|
if (objectId === null)
|
|
250
350
|
return null;
|
|
@@ -255,16 +355,16 @@ export function localPosts(store, baseUrl) {
|
|
|
255
355
|
catch {
|
|
256
356
|
return null;
|
|
257
357
|
}
|
|
258
|
-
if (url.origin !== origin
|
|
358
|
+
if (url.origin !== origin)
|
|
259
359
|
return null;
|
|
260
|
-
const
|
|
261
|
-
|
|
360
|
+
const document = store.getByStoredObjectId(objectId) ??
|
|
361
|
+
publicDocumentAt(store, decodeURIComponent(url.pathname));
|
|
362
|
+
if (document === undefined || document.type !== 'post')
|
|
262
363
|
return null;
|
|
263
|
-
const document = store.getBySlug(slug);
|
|
264
364
|
return {
|
|
265
|
-
slug,
|
|
266
|
-
title: document
|
|
267
|
-
editUrl: editorPath(POST_KIND, slug),
|
|
365
|
+
slug: document.slug,
|
|
366
|
+
title: document.title,
|
|
367
|
+
editUrl: editorPath(POST_KIND, document.slug),
|
|
268
368
|
};
|
|
269
369
|
};
|
|
270
370
|
}
|
|
@@ -278,6 +378,38 @@ function property(value, key) {
|
|
|
278
378
|
function text(value) {
|
|
279
379
|
return typeof value === 'string' && value !== '' ? value : null;
|
|
280
380
|
}
|
|
381
|
+
/**
|
|
382
|
+
* One stored relay as the screen shows it.
|
|
383
|
+
*
|
|
384
|
+
* The last outcome is looked up by inbox rather than by actor, because that is
|
|
385
|
+
* the column a relay is guaranteed to have: a subscription that has not been
|
|
386
|
+
* accepted has no actor id at all, and the point of the row is to say so. The
|
|
387
|
+
* outcome carries what the activity was, so there is nothing else to look up.
|
|
388
|
+
*/
|
|
389
|
+
export function relayRow(relay, lastDelivery) {
|
|
390
|
+
return {
|
|
391
|
+
inboxId: relay.inboxId,
|
|
392
|
+
state: relay.state,
|
|
393
|
+
stateLabel: RELAY_STATE_LABELS[relay.state],
|
|
394
|
+
actorId: relay.actorId,
|
|
395
|
+
createdAt: relay.createdAt,
|
|
396
|
+
updatedAt: relay.updatedAt,
|
|
397
|
+
reason: relay.reason,
|
|
398
|
+
lastDelivery: lastDelivery === undefined
|
|
399
|
+
? null
|
|
400
|
+
: {
|
|
401
|
+
activityId: lastDelivery.activityId,
|
|
402
|
+
activityType: lastDelivery.activityType,
|
|
403
|
+
status: lastDelivery.status,
|
|
404
|
+
error: lastDelivery.error,
|
|
405
|
+
attemptedAt: lastDelivery.attemptedAt,
|
|
406
|
+
},
|
|
407
|
+
// A rejected relay is not retried from here: it said no, and asking again
|
|
408
|
+
// is a decision to take by removing it and adding it back, not a button
|
|
409
|
+
// that quietly re-asks a server that refused.
|
|
410
|
+
retriable: relay.state === 'pending',
|
|
411
|
+
};
|
|
412
|
+
}
|
|
281
413
|
/**
|
|
282
414
|
* One stored follower as the screen shows it.
|
|
283
415
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"federation.js","sourceRoot":"","sources":["../../src/admin/federation.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"federation.js","sourceRoot":"","sources":["../../src/admin/federation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* An instant as a person in this site's time zone would read it: `4 September
|
|
3
|
+
* 2026 at 09:00 UTC`.
|
|
4
|
+
*
|
|
5
|
+
* The public site prints dates in UTC, because a theme ported from an Eleventy
|
|
6
|
+
* build using Luxon with `zone: 'utc'` does. The admin is the one place that
|
|
7
|
+
* should not: an author scheduling a post for nine in the morning means nine
|
|
8
|
+
* in *their* morning, and the site's `timezone` setting is what says which one
|
|
9
|
+
* that is. The zone is printed with it so the two readings can never be
|
|
10
|
+
* confused: an abbreviation where the zone has a well known one (`CDT`, `UTC`)
|
|
11
|
+
* and an offset where it does not (`GMT+1`), which is what `Intl` answers and
|
|
12
|
+
* is unambiguous either way.
|
|
13
|
+
*
|
|
14
|
+
* A zone name the runtime does not know falls back to UTC rather than
|
|
15
|
+
* throwing: the settings screen refuses an unknown zone, so anything that
|
|
16
|
+
* reaches here came from a hand-edited database and should not take the
|
|
17
|
+
* editor down.
|
|
18
|
+
*/
|
|
19
|
+
export declare function formatInTimezone(instant: string, timezone: string): string;
|
|
20
|
+
//# sourceMappingURL=formatting.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatting.d.ts","sourceRoot":"","sources":["../../src/admin/formatting.ts"],"names":[],"mappings":"AAgBA;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAY1E"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/** The months, spelled the way the theme's `date` filter spells them. */
|
|
2
|
+
const MONTHS = [
|
|
3
|
+
'January',
|
|
4
|
+
'February',
|
|
5
|
+
'March',
|
|
6
|
+
'April',
|
|
7
|
+
'May',
|
|
8
|
+
'June',
|
|
9
|
+
'July',
|
|
10
|
+
'August',
|
|
11
|
+
'September',
|
|
12
|
+
'October',
|
|
13
|
+
'November',
|
|
14
|
+
'December',
|
|
15
|
+
];
|
|
16
|
+
/**
|
|
17
|
+
* An instant as a person in this site's time zone would read it: `4 September
|
|
18
|
+
* 2026 at 09:00 UTC`.
|
|
19
|
+
*
|
|
20
|
+
* The public site prints dates in UTC, because a theme ported from an Eleventy
|
|
21
|
+
* build using Luxon with `zone: 'utc'` does. The admin is the one place that
|
|
22
|
+
* should not: an author scheduling a post for nine in the morning means nine
|
|
23
|
+
* in *their* morning, and the site's `timezone` setting is what says which one
|
|
24
|
+
* that is. The zone is printed with it so the two readings can never be
|
|
25
|
+
* confused: an abbreviation where the zone has a well known one (`CDT`, `UTC`)
|
|
26
|
+
* and an offset where it does not (`GMT+1`), which is what `Intl` answers and
|
|
27
|
+
* is unambiguous either way.
|
|
28
|
+
*
|
|
29
|
+
* A zone name the runtime does not know falls back to UTC rather than
|
|
30
|
+
* throwing: the settings screen refuses an unknown zone, so anything that
|
|
31
|
+
* reaches here came from a hand-edited database and should not take the
|
|
32
|
+
* editor down.
|
|
33
|
+
*/
|
|
34
|
+
export function formatInTimezone(instant, timezone) {
|
|
35
|
+
const date = new Date(instant);
|
|
36
|
+
if (Number.isNaN(date.getTime()))
|
|
37
|
+
return '';
|
|
38
|
+
const parts = partsIn(date, timezone) ?? partsIn(date, 'UTC');
|
|
39
|
+
if (parts === undefined)
|
|
40
|
+
return date.toISOString();
|
|
41
|
+
const month = MONTHS[Number(parts['month']) - 1] ?? '';
|
|
42
|
+
return (`${String(Number(parts['day']))} ${month} ${parts['year'] ?? ''} ` +
|
|
43
|
+
`at ${parts['hour'] ?? ''}:${parts['minute'] ?? ''} ${parts['timeZoneName'] ?? ''}`);
|
|
44
|
+
}
|
|
45
|
+
/** The instant's fields in one zone, or `undefined` when the zone is not one. */
|
|
46
|
+
function partsIn(date, timezone) {
|
|
47
|
+
let formatter;
|
|
48
|
+
try {
|
|
49
|
+
// `en-US` only for the zone abbreviation: it is the locale whose short
|
|
50
|
+
// names are the ones people recognise — `CDT` where `en-GB` says `GMT-5`.
|
|
51
|
+
// Everything else on the line is assembled from the parts below, so the
|
|
52
|
+
// locale decides nothing about the order or the spelling of the date.
|
|
53
|
+
formatter = new Intl.DateTimeFormat('en-US', {
|
|
54
|
+
timeZone: timezone,
|
|
55
|
+
year: 'numeric',
|
|
56
|
+
month: '2-digit',
|
|
57
|
+
day: '2-digit',
|
|
58
|
+
hour: '2-digit',
|
|
59
|
+
minute: '2-digit',
|
|
60
|
+
hourCycle: 'h23',
|
|
61
|
+
timeZoneName: 'short',
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
return undefined;
|
|
66
|
+
}
|
|
67
|
+
const parts = {};
|
|
68
|
+
for (const part of formatter.formatToParts(date))
|
|
69
|
+
parts[part.type] = part.value;
|
|
70
|
+
return parts;
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=formatting.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatting.js","sourceRoot":"","sources":["../../src/admin/formatting.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,MAAM,MAAM,GAAG;IACb,SAAS;IACT,UAAU;IACV,OAAO;IACP,OAAO;IACP,KAAK;IACL,MAAM;IACN,MAAM;IACN,QAAQ;IACR,WAAW;IACX,SAAS;IACT,UAAU;IACV,UAAU;CACX,CAAC;AAEF;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe,EAAE,QAAgB;IAChE,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/B,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAAE,OAAO,EAAE,CAAC;IAE5C,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC9D,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;IAEnD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACvD,OAAO,CACL,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG;QAClE,MAAM,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,EAAE,CACpF,CAAC;AACJ,CAAC;AAED,iFAAiF;AACjF,SAAS,OAAO,CAAC,IAAU,EAAE,QAAgB;IAC3C,IAAI,SAA8B,CAAC;IACnC,IAAI,CAAC;QACH,uEAAuE;QACvE,0EAA0E;QAC1E,wEAAwE;QACxE,sEAAsE;QACtE,SAAS,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;YAC3C,QAAQ,EAAE,QAAQ;YAClB,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,SAAS;YAChB,GAAG,EAAE,SAAS;YACd,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,SAAS;YACjB,SAAS,EAAE,KAAK;YAChB,YAAY,EAAE,OAAO;SACtB,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,KAAK,GAA2B,EAAE,CAAC;IACzC,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;IAChF,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import type { MiddlewareHandler } from 'hono';
|
|
2
|
+
import type { GeekityEnv } from '../env.ts';
|
|
3
|
+
/**
|
|
4
|
+
* How long a browser is told to insist on https, in seconds. One year, which
|
|
5
|
+
* is what every preload list asks for.
|
|
6
|
+
*/
|
|
7
|
+
export declare const HSTS_MAX_AGE = 31536000;
|
|
8
|
+
/** The value of `Strict-Transport-Security`, sent only under an https base URL. */
|
|
9
|
+
export declare const HSTS_VALUE = "max-age=31536000; includeSubDomains";
|
|
10
|
+
/** Bytes behind one CSP nonce. Sixteen is what the CSP specification asks for. */
|
|
11
|
+
export declare const NONCE_BYTES = 16;
|
|
12
|
+
/**
|
|
13
|
+
* The headers every response gets, admin or not.
|
|
14
|
+
*
|
|
15
|
+
* Deliberately two of them. `nosniff` says the `Content-Type` the CMS sends is
|
|
16
|
+
* the one to believe, which constrains nothing a theme might want to do, and
|
|
17
|
+
* HSTS is about the host rather than the page — the admin and the public site
|
|
18
|
+
* are the same origin, so sending it on one and not the other would be a
|
|
19
|
+
* distinction the browser does not make. Everything else that would tell a
|
|
20
|
+
* browser what a page may load stays off the public site: a theme is somebody
|
|
21
|
+
* else's HTML and the CMS has no business deciding what it may reference.
|
|
22
|
+
*/
|
|
23
|
+
export declare const baselineSecurityHeaders: MiddlewareHandler<GeekityEnv>;
|
|
24
|
+
/**
|
|
25
|
+
* The headers an admin response gets, on top of the baseline.
|
|
26
|
+
*
|
|
27
|
+
* A nonce is minted before the handler runs, because the templates put it on
|
|
28
|
+
* the editor's script tag, and the policy naming it is written afterwards, so
|
|
29
|
+
* a handler that replaced the response cannot lose the headers.
|
|
30
|
+
*/
|
|
31
|
+
export declare const adminSecurityHeaders: MiddlewareHandler<GeekityEnv>;
|
|
32
|
+
/**
|
|
33
|
+
* One nonce: 128 random bits, fresh for every response.
|
|
34
|
+
*
|
|
35
|
+
* base64url rather than plain base64. CSP's `base64-value` accepts both, and
|
|
36
|
+
* the url alphabet has no `+` or `/`, which are the two characters that would
|
|
37
|
+
* otherwise need escaping every time the value is put in a pattern or a URL.
|
|
38
|
+
*/
|
|
39
|
+
export declare function createNonce(): string;
|
|
40
|
+
/**
|
|
41
|
+
* The admin's Content-Security-Policy.
|
|
42
|
+
*
|
|
43
|
+
* Everything the admin loads is its own: the stylesheet and the editor bundle
|
|
44
|
+
* come from `/admin/_static/`, the editor's preview and upload calls are
|
|
45
|
+
* same-origin `fetch`, and the preview frame renders the site's own theme and
|
|
46
|
+
* uploads. So `'self'` is the whole allowlist, with three exceptions worth
|
|
47
|
+
* naming:
|
|
48
|
+
*
|
|
49
|
+
* - `style-src` also carries a per-response nonce. CodeMirror 6 injects its
|
|
50
|
+
* themes as `<style>` elements at runtime through `style-mod`, which is an
|
|
51
|
+
* inline style however it is written; the nonce is threaded to it through
|
|
52
|
+
* `EditorView.cspNonce` so the admin never has to say `'unsafe-inline'`.
|
|
53
|
+
* - `img-src` also allows `data:`, because a preview of a post somebody is
|
|
54
|
+
* writing may hold a data URI image and refusing it would make the preview
|
|
55
|
+
* lie about what publishing would show.
|
|
56
|
+
* - `frame-ancestors` is `'self'` rather than `'none'`: the editor's preview
|
|
57
|
+
* is a `srcdoc` iframe, which inherits this policy, and its ancestor is the
|
|
58
|
+
* admin page itself.
|
|
59
|
+
*
|
|
60
|
+
* There is no inline script at all — the slug and permalink enhancement moved
|
|
61
|
+
* into `admin/static/slug.js` — so `script-src` needs neither a nonce nor
|
|
62
|
+
* `'unsafe-inline'`.
|
|
63
|
+
*/
|
|
64
|
+
export declare function adminContentSecurityPolicy(nonce: string): string;
|
|
65
|
+
//# sourceMappingURL=headers.d.ts.map
|