@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
|
@@ -2,11 +2,11 @@ import { Activity, getTypeId, PUBLIC_COLLECTION, Update } from '@fedify/vocab';
|
|
|
2
2
|
import { readSiteSettings } from '../admin/settings.js';
|
|
3
3
|
import { saveDocument } from '../content/save.js';
|
|
4
4
|
import { documentContent } from '../content/writer.js';
|
|
5
|
-
import {
|
|
6
|
-
import { articleObjectId, isFederatedDocument, postCreateActivity, postDeleteActivity, postUpdateActivity, } from './article.js';
|
|
5
|
+
import { actorId, senderKeyPairs, userActor } from './actor.js';
|
|
6
|
+
import { articleObjectId, documentAuthor, isFederatedDocument, postCreateActivity, postDeleteActivity, postUpdateActivity, } from './article.js';
|
|
7
7
|
import { followerRecipient } from './followers.js';
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
8
|
+
import { updateActivityId } from './paths.js';
|
|
9
|
+
import { acceptedRelays, relayRecipient } from './relays.js';
|
|
10
10
|
/**
|
|
11
11
|
* Build the delivery service for one site.
|
|
12
12
|
*
|
|
@@ -45,72 +45,86 @@ export function createDeliveryService(options) {
|
|
|
45
45
|
return federation.createContext(new URL(config.baseUrl), { admin, store, config });
|
|
46
46
|
}
|
|
47
47
|
/**
|
|
48
|
-
* Write `activitypub.
|
|
49
|
-
*
|
|
48
|
+
* Write `activitypub.published` into the post's file, and answer with the
|
|
49
|
+
* document as it now reads.
|
|
50
50
|
*
|
|
51
|
-
*
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
*
|
|
51
|
+
* That one key is the whole of the record: it says the post has been
|
|
52
|
+
* announced and when, which is what decides `Create` against `Update` and
|
|
53
|
+
* what a resend needs. No id is minted — decision-13 makes the post's id its
|
|
54
|
+
* permalink, so there is nothing to freeze — and an `activitypub.id` the
|
|
55
|
+
* file already carries is left exactly where it is, because it is the name
|
|
56
|
+
* the post's followers already hold.
|
|
57
|
+
*
|
|
58
|
+
* It is written through the same {@link saveDocument} the admin writes
|
|
59
|
+
* through, which corrects the index in the same breath — so the watcher's
|
|
60
|
+
* re-read of the file finds a hash that already matches and this write
|
|
61
|
+
* federates nothing of its own.
|
|
57
62
|
*/
|
|
58
63
|
async function stamp(document) {
|
|
59
64
|
const existing = document.activitypub;
|
|
60
|
-
const
|
|
61
|
-
|
|
62
|
-
if (existing?.id === id && existing.published === published)
|
|
65
|
+
const published = existing?.published ?? document.date ?? store.now().toISOString();
|
|
66
|
+
if (existing?.published === published)
|
|
63
67
|
return document;
|
|
68
|
+
// The zone only matters for a date somebody wrote by hand with no offset;
|
|
69
|
+
// `saveDocument` is what turns every date in the file into an instant.
|
|
64
70
|
return await saveDocument({
|
|
65
71
|
contentDir: config.contentDir,
|
|
66
72
|
store,
|
|
73
|
+
timezone: readSiteSettings(config.contentDir).timezone,
|
|
67
74
|
path: document.path,
|
|
68
|
-
content: {
|
|
75
|
+
content: {
|
|
76
|
+
...documentContent(document),
|
|
77
|
+
activitypub: { ...existing, published },
|
|
78
|
+
},
|
|
69
79
|
});
|
|
70
80
|
}
|
|
71
81
|
/**
|
|
72
|
-
*
|
|
82
|
+
* Fan one activity about one post out to the followers.
|
|
73
83
|
*
|
|
74
|
-
*
|
|
75
|
-
*
|
|
84
|
+
* What the activity was — its type, the object it named, the post's slug —
|
|
85
|
+
* is written onto every outcome row rather than into a table of its own,
|
|
86
|
+
* because the activity itself is not kept: it is rebuilt from the file
|
|
87
|
+
* whenever it is wanted again (decision-9).
|
|
76
88
|
*/
|
|
77
89
|
async function send(context, activity, about) {
|
|
78
90
|
const activityId = activity.id?.href;
|
|
79
91
|
if (activityId === undefined) {
|
|
80
92
|
throw new TypeError('An activity cannot be delivered without an id.');
|
|
81
93
|
}
|
|
82
|
-
const
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
admin.putOutboundActivity({
|
|
94
|
+
const author = documentAuthor(context, about);
|
|
95
|
+
if (author === undefined) {
|
|
96
|
+
throw new Error(`The post "${about.slug}" cannot be delivered: the site has no accounts, ` +
|
|
97
|
+
'and decision-14 makes a user the actor a post is announced by.');
|
|
98
|
+
}
|
|
99
|
+
return await fanOut(context, author, activity, {
|
|
89
100
|
activityId,
|
|
90
|
-
activityType,
|
|
91
|
-
objectId,
|
|
101
|
+
activityType: typeNameOf(activity),
|
|
102
|
+
objectId: articleObjectId(context, about).href,
|
|
92
103
|
slug: about.slug,
|
|
93
|
-
json: JSON.stringify(json),
|
|
94
104
|
});
|
|
95
|
-
return await fanOut(context, activity, { activityId, activityType, objectId });
|
|
96
105
|
}
|
|
97
106
|
/**
|
|
98
|
-
* Deliver one activity to every follower, one inbox
|
|
107
|
+
* Deliver one activity to every follower and every accepted relay, one inbox
|
|
108
|
+
* at a time.
|
|
99
109
|
*
|
|
100
|
-
* Fedify's own `sendActivity(…, 'followers', …)` would reach the
|
|
110
|
+
* Fedify's own `sendActivity(…, 'followers', …)` would reach the follower
|
|
101
111
|
* inboxes in one call, but it answers `void`: there would be no way of
|
|
102
112
|
* saying which follower did not get it, which is the thing decision-5
|
|
103
|
-
* promised to record. So the
|
|
104
|
-
*
|
|
105
|
-
* written against every
|
|
113
|
+
* promised to record. So the recipients are grouped into the inboxes one
|
|
114
|
+
* POST reaches — the instance shared inbox where followers publish one, and
|
|
115
|
+
* a relay's own inbox — and each group's outcome is written against every
|
|
116
|
+
* actor behind it. It is also why the sender is an explicit key pair list
|
|
117
|
+
* rather than `{ identifier }`: doc-8 makes that the one shape a stored
|
|
118
|
+
* actor id can sign under.
|
|
106
119
|
*/
|
|
107
|
-
async function fanOut(context, activity, about) {
|
|
120
|
+
async function fanOut(context, sender, activity, about) {
|
|
108
121
|
const deliveries = [];
|
|
109
|
-
|
|
122
|
+
const keys = await senderKeyPairs(context, sender);
|
|
123
|
+
for (const target of deliveryTargets(admin, sender.username)) {
|
|
110
124
|
let status = synchronous ? 'sent' : 'queued';
|
|
111
125
|
let error = null;
|
|
112
126
|
try {
|
|
113
|
-
await context.sendActivity(
|
|
127
|
+
await context.sendActivity(keys, target.recipients, activity,
|
|
114
128
|
// The object id keeps a post's activities in order per server, so a
|
|
115
129
|
// follower cannot be shown an Update of something it has not been
|
|
116
130
|
// told about yet.
|
|
@@ -119,27 +133,33 @@ export function createDeliveryService(options) {
|
|
|
119
133
|
catch (thrown) {
|
|
120
134
|
status = 'failed';
|
|
121
135
|
error = messageOf(thrown);
|
|
122
|
-
logger.warn(`Could not deliver ${about.activityId} to ${inboxId}: ${error}`);
|
|
136
|
+
logger.warn(`Could not deliver ${about.activityId} to ${target.inboxId}: ${error}`);
|
|
123
137
|
}
|
|
124
|
-
for (const
|
|
138
|
+
for (const actorId of target.actorIds) {
|
|
125
139
|
deliveries.push(admin.recordDelivery({
|
|
126
|
-
|
|
127
|
-
actorId
|
|
128
|
-
inboxId,
|
|
140
|
+
...about,
|
|
141
|
+
actorId,
|
|
142
|
+
inboxId: target.inboxId,
|
|
129
143
|
status,
|
|
130
144
|
error,
|
|
131
145
|
}));
|
|
132
146
|
}
|
|
133
147
|
}
|
|
134
|
-
return {
|
|
148
|
+
return {
|
|
149
|
+
activityId: about.activityId,
|
|
150
|
+
activityType: about.activityType,
|
|
151
|
+
objectId: about.objectId,
|
|
152
|
+
deliveries,
|
|
153
|
+
};
|
|
135
154
|
}
|
|
136
155
|
return {
|
|
137
156
|
async handle(change) {
|
|
138
157
|
// A full scan is a rebuild of the index, not news about the site.
|
|
139
158
|
if (change.origin === 'scan')
|
|
140
159
|
return;
|
|
141
|
-
const
|
|
142
|
-
const
|
|
160
|
+
const now = store.now();
|
|
161
|
+
const before = federatedOrUndefined(change.previous, now);
|
|
162
|
+
const after = federatedOrUndefined(change.next, now);
|
|
143
163
|
if (before === undefined && after === undefined)
|
|
144
164
|
return;
|
|
145
165
|
const context = deliveryContext();
|
|
@@ -172,45 +192,38 @@ export function createDeliveryService(options) {
|
|
|
172
192
|
queue(() => send(context, postCreateActivity(context, stamped), stamped));
|
|
173
193
|
}
|
|
174
194
|
},
|
|
175
|
-
async updateActor() {
|
|
195
|
+
async updateActor(user) {
|
|
176
196
|
// Building the actor loads — and on a cold database generates — the key
|
|
177
|
-
// pairs, so a
|
|
178
|
-
//
|
|
179
|
-
if (admin.
|
|
197
|
+
// pairs, so a user with nowhere to send a profile update does not pay
|
|
198
|
+
// for one. A relay counts: it is holding a copy of the profile too.
|
|
199
|
+
if (deliveryTargets(admin, user.username).length === 0)
|
|
180
200
|
return undefined;
|
|
181
201
|
return await enqueue(async () => {
|
|
182
202
|
const context = deliveryContext();
|
|
183
|
-
const
|
|
184
|
-
const actor = await
|
|
185
|
-
settings: readSiteSettings(admin),
|
|
186
|
-
baseUrl: config.baseUrl,
|
|
187
|
-
});
|
|
203
|
+
const id = actorId(context, user);
|
|
204
|
+
const actor = await userActor(context, user, { baseUrl: config.baseUrl });
|
|
188
205
|
// The revision is the moment rather than a hash of the profile: an
|
|
189
206
|
// avatar removed and put back is the same profile twice, and both
|
|
190
207
|
// times the followers have to be told rather than recognise an id
|
|
191
208
|
// they have already seen and skip it.
|
|
192
|
-
const activityId = updateActivityId(
|
|
209
|
+
const activityId = updateActivityId(id, new Date().toISOString());
|
|
193
210
|
const activity = new Update({
|
|
194
211
|
id: activityId,
|
|
195
|
-
actor:
|
|
212
|
+
actor: id,
|
|
196
213
|
object: actor,
|
|
197
214
|
to: PUBLIC_COLLECTION,
|
|
198
|
-
cc: context.getFollowersUri(
|
|
215
|
+
cc: context.getFollowersUri(user.username),
|
|
199
216
|
});
|
|
200
|
-
|
|
217
|
+
return await fanOut(context, user, activity, {
|
|
201
218
|
activityId: activityId.href,
|
|
202
219
|
activityType: 'Update',
|
|
203
220
|
// The object is the actor, not a post, and there is no slug to
|
|
204
221
|
// record: that is what keeps an actor Update out of the federation
|
|
205
|
-
// screen's per-post delivery table
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
admin.putOutboundActivity({
|
|
209
|
-
...about,
|
|
222
|
+
// screen's per-post delivery table, which is built from the posts
|
|
223
|
+
// the content index holds.
|
|
224
|
+
objectId: id.href,
|
|
210
225
|
slug: null,
|
|
211
|
-
json: JSON.stringify(await activity.toJsonLd({ format: 'compact', contextLoader: context.contextLoader })),
|
|
212
226
|
});
|
|
213
|
-
return await fanOut(context, activity, about);
|
|
214
227
|
}).catch((thrown) => {
|
|
215
228
|
// A profile update is a side effect of saving the settings, and losing
|
|
216
229
|
// it must not lose the save.
|
|
@@ -218,21 +231,33 @@ export function createDeliveryService(options) {
|
|
|
218
231
|
return undefined;
|
|
219
232
|
});
|
|
220
233
|
},
|
|
221
|
-
async
|
|
222
|
-
const
|
|
223
|
-
if (
|
|
234
|
+
async resend(slug) {
|
|
235
|
+
const document = postBySlug(store, slug);
|
|
236
|
+
if (document === undefined)
|
|
237
|
+
return undefined;
|
|
238
|
+
// Read before the queue rather than inside it, so a post with nothing to
|
|
239
|
+
// send answers `undefined` rather than joining a queue to find that out.
|
|
240
|
+
const published = isFederatedDocument(document, store.now());
|
|
241
|
+
const announced = (document.activitypub?.published ?? '') !== '';
|
|
242
|
+
if (!published && !announced)
|
|
224
243
|
return undefined;
|
|
225
244
|
return await enqueue(async () => {
|
|
226
245
|
const context = deliveryContext();
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
246
|
+
if (!published) {
|
|
247
|
+
// A draft, a trashed post, or one re-dated into the future: every
|
|
248
|
+
// one of them is gone as far as a follower is concerned, and the
|
|
249
|
+
// file still carries the id their copy is filed under.
|
|
250
|
+
return await send(context, postDeleteActivity(context, document, new Date().toISOString()), document);
|
|
251
|
+
}
|
|
252
|
+
const stamped = await stamp(document);
|
|
253
|
+
if (!announced) {
|
|
254
|
+
return await send(context, postCreateActivity(context, stamped), stamped);
|
|
255
|
+
}
|
|
256
|
+
// The moment rather than the content hash, which is what a save uses:
|
|
257
|
+
// the point of a resend is that the followers hear about a revision
|
|
258
|
+
// they have already been sent and ignored, or never received at all,
|
|
259
|
+
// and an activity id a peer has seen is one it is entitled to drop.
|
|
260
|
+
return await send(context, postUpdateActivity(context, stamped, new Date().toISOString()), stamped);
|
|
236
261
|
});
|
|
237
262
|
},
|
|
238
263
|
settled() {
|
|
@@ -252,6 +277,40 @@ export function createDeliveryService(options) {
|
|
|
252
277
|
});
|
|
253
278
|
}
|
|
254
279
|
}
|
|
280
|
+
/**
|
|
281
|
+
* Everywhere one public activity goes: one user's followers, grouped by the
|
|
282
|
+
* inbox they share, and every accepted relay.
|
|
283
|
+
*
|
|
284
|
+
* The followers are one person's (decision-14) and the relays are the site's:
|
|
285
|
+
* a relay subscribes to everything public this site sends, whoever wrote it,
|
|
286
|
+
* so it is a target of every author's activities.
|
|
287
|
+
*
|
|
288
|
+
* A relay is one target of its own rather than a member of a group, because it
|
|
289
|
+
* is one inbox with one actor behind it and no shared inbox to fold into. A
|
|
290
|
+
* pending or rejected relay is not here at all — {@link acceptedRelays} is
|
|
291
|
+
* where that rule lives.
|
|
292
|
+
*/
|
|
293
|
+
export function deliveryTargets(admin, username) {
|
|
294
|
+
const targets = [];
|
|
295
|
+
for (const [inboxId, members] of groupByInbox(admin.listFollowers(username))) {
|
|
296
|
+
targets.push({
|
|
297
|
+
inboxId,
|
|
298
|
+
recipients: members.map(followerRecipient),
|
|
299
|
+
actorIds: members.map((member) => member.actorId),
|
|
300
|
+
});
|
|
301
|
+
}
|
|
302
|
+
for (const relay of acceptedRelays(admin)) {
|
|
303
|
+
targets.push({
|
|
304
|
+
inboxId: relay.inboxId,
|
|
305
|
+
recipients: [relayRecipient(relay)],
|
|
306
|
+
// The relay's own id, so its outcomes sit in the same table as a
|
|
307
|
+
// follower's and the screen can find them. It has one by the time it is
|
|
308
|
+
// accepted; the inbox is the fallback for a record from somewhere else.
|
|
309
|
+
actorIds: [relay.actorId ?? relay.inboxId],
|
|
310
|
+
});
|
|
311
|
+
}
|
|
312
|
+
return targets;
|
|
313
|
+
}
|
|
255
314
|
/**
|
|
256
315
|
* Followers keyed by the inbox one POST to which reaches them: the instance's
|
|
257
316
|
* shared inbox where it published one, and the follower's own where it did not.
|
|
@@ -268,11 +327,26 @@ export function groupByInbox(followers) {
|
|
|
268
327
|
}
|
|
269
328
|
return groups;
|
|
270
329
|
}
|
|
330
|
+
/**
|
|
331
|
+
* The post a slug names, the trash included, or `undefined`.
|
|
332
|
+
*
|
|
333
|
+
* The index's slug lookup answers across both kinds and both states and takes
|
|
334
|
+
* the newest, which is the post nine times out of ten. The federated list is
|
|
335
|
+
* the fallback for the tenth — a page, or a live post of the same name,
|
|
336
|
+
* standing in front of a trashed one — and it is the right fallback because a
|
|
337
|
+
* post that was never announced is not one a resend has anything to say about.
|
|
338
|
+
*/
|
|
339
|
+
function postBySlug(store, slug) {
|
|
340
|
+
const direct = store.getBySlug(slug);
|
|
341
|
+
if (direct?.type === 'post')
|
|
342
|
+
return direct;
|
|
343
|
+
return store.listFederated().find((document) => document.slug === slug);
|
|
344
|
+
}
|
|
271
345
|
/** The document, when it is one this site federates, and `undefined` otherwise. */
|
|
272
|
-
function federatedOrUndefined(document) {
|
|
346
|
+
function federatedOrUndefined(document, now) {
|
|
273
347
|
if (document === undefined)
|
|
274
348
|
return undefined;
|
|
275
|
-
return isFederatedDocument(document) ? document : undefined;
|
|
349
|
+
return isFederatedDocument(document, now) ? document : undefined;
|
|
276
350
|
}
|
|
277
351
|
/** An activity's short type name — `Create`, `Update`, `Delete` — from its type URI. */
|
|
278
352
|
function typeNameOf(activity) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delivery.js","sourceRoot":"","sources":["../../src/federation/delivery.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"delivery.js","sourceRoot":"","sources":["../../src/federation/delivery.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type { Federation, FederationOptions } from '@fedify/fedify';
|
|
1
|
+
import type { Context, Federation, FederationOptions, PageItems } from '@fedify/fedify';
|
|
2
|
+
import { Create } from '@fedify/vocab';
|
|
2
3
|
import type { AdminStore } from '../admin/store.ts';
|
|
3
4
|
import type { FederationOverrides, ResolvedConfig } from '../config.ts';
|
|
4
5
|
import type { Document } from '../content/document.ts';
|
|
@@ -15,9 +16,9 @@ export declare const SOFTWARE_NAME = "geekity-cms";
|
|
|
15
16
|
export declare const OUTBOX_PAGE_SIZE = 20;
|
|
16
17
|
/** What every Fedify dispatcher in the CMS is handed. */
|
|
17
18
|
export interface FederationContextData {
|
|
18
|
-
/**
|
|
19
|
+
/** The followers, the inbox log and the relay records. */
|
|
19
20
|
readonly admin: AdminStore;
|
|
20
|
-
/** The content index, which the outbox and the post
|
|
21
|
+
/** The content index, which the outbox and the post articles are built from. */
|
|
21
22
|
readonly store: ContentStore;
|
|
22
23
|
/** Config after defaults and environment overrides. */
|
|
23
24
|
readonly config: ResolvedConfig;
|
|
@@ -41,14 +42,18 @@ export interface CreateSiteFederationOptions extends FederationOverrides {
|
|
|
41
42
|
federationOptions?: Partial<FederationOptions<FederationContextData>> | undefined;
|
|
42
43
|
}
|
|
43
44
|
/**
|
|
44
|
-
* Build the site's `Federation` object:
|
|
45
|
-
*
|
|
45
|
+
* Build the site's `Federation` object: one actor per user, their keys, their
|
|
46
|
+
* collections, WebFinger's neighbours and NodeInfo.
|
|
47
|
+
*
|
|
48
|
+
* A post's object is not here — it is its permalink (decision-13), served by
|
|
49
|
+
* the middleware in `mount.ts`, which also owns `/.well-known/webfinger`
|
|
50
|
+
* (doc-8) because Fedify's own cannot publish the aliases decision-14 wants.
|
|
46
51
|
*
|
|
47
52
|
* It is a factory rather than a module-level singleton so the KV store and the
|
|
48
53
|
* queue are arguments (decision-5), so a test can build one per data directory,
|
|
49
54
|
* and so a site that outgrows the in-memory pair changes a call rather than
|
|
50
|
-
* this file. The followers come out of SQLite; the following
|
|
51
|
-
* empty, and doc-4 says it always will be.
|
|
55
|
+
* this file. The followers come out of SQLite, per user; the following
|
|
56
|
+
* collection is empty, and doc-4 says it always will be.
|
|
52
57
|
*/
|
|
53
58
|
export declare function createSiteFederation(options: CreateSiteFederationOptions): SiteFederation;
|
|
54
59
|
/**
|
|
@@ -60,16 +65,16 @@ export declare function createSiteFederation(options: CreateSiteFederationOption
|
|
|
60
65
|
*/
|
|
61
66
|
export declare function federatedPost(store: ContentStore, slug: string): Document | undefined;
|
|
62
67
|
/**
|
|
63
|
-
*
|
|
68
|
+
* One page of one user's outbox: the `Create` that announced each of their
|
|
69
|
+
* posts, newest first.
|
|
70
|
+
*
|
|
71
|
+
* The cursor is the offset into the archive as a decimal string. That keeps a
|
|
72
|
+
* page URL meaning what it meant when it was minted, which a cursor derived
|
|
73
|
+
* from the site's page size would not: the size is a setting somebody may
|
|
74
|
+
* change between two requests.
|
|
64
75
|
*
|
|
65
|
-
*
|
|
66
|
-
*
|
|
67
|
-
* `activitypub.id` (doc-4), so the old URL has to keep answering or every
|
|
68
|
-
* follower's copy points at a 404. That case is found by searching the
|
|
69
|
-
* archive for the post holding the id, which is a walk rather than an index
|
|
70
|
-
* lookup — the front matter is the source of truth (decision-1) and the index
|
|
71
|
-
* has no column for it — but it is only reached when the slug itself does not
|
|
72
|
-
* answer.
|
|
76
|
+
* Exported for the WordPress compatibility federation (TASK-70), which serves
|
|
77
|
+
* the same page at the plugin's own outbox path.
|
|
73
78
|
*/
|
|
74
|
-
export declare function
|
|
79
|
+
export declare function outboxPage(context: Context<FederationContextData>, names: readonly string[], cursor: string | null): PageItems<Create>;
|
|
75
80
|
//# sourceMappingURL=federation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"federation.d.ts","sourceRoot":"","sources":["../../src/federation/federation.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"federation.d.ts","sourceRoot":"","sources":["../../src/federation/federation.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACxF,OAAO,EAAoB,MAAM,EAAsC,MAAM,eAAe,CAAC;AAI7F,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACxE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAyBxD,2FAA2F;AAC3F,eAAO,MAAM,aAAa,gBAAgB,CAAC;AAE3C;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAEnC,yDAAyD;AACzD,MAAM,WAAW,qBAAqB;IACpC,0DAA0D;IAC1D,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,gFAAgF;IAChF,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,uDAAuD;IACvD,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;CACjC;AAED,6EAA6E;AAC7E,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,qBAAqB,CAAC,CAAC;AAE/D;;;GAGG;AACH,MAAM,WAAW,2BAA4B,SAAQ,mBAAmB;IACtE;;;;;;OAMG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB,oFAAoF;IACpF,iBAAiB,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,qBAAqB,CAAC,CAAC,GAAG,SAAS,CAAC;CACnF;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,2BAA2B,GAAG,cAAc,CAiJzF;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAKrF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,UAAU,CACxB,OAAO,EAAE,OAAO,CAAC,qBAAqB,CAAC,EACvC,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,MAAM,EAAE,MAAM,GAAG,IAAI,GACpB,SAAS,CAAC,MAAM,CAAC,CAYnB"}
|