@geekity/cms 0.30.0 → 0.31.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +26 -4266
- package/admin/pages/settings/privacy.njk +1 -1
- package/dist/access-log.d.ts +2 -10
- package/dist/access-log.d.ts.map +1 -1
- package/dist/access-log.js +1 -1
- package/dist/access-log.js.map +1 -1
- package/dist/{web → admin}/admin-bar.d.ts +3 -2
- package/dist/admin/admin-bar.d.ts.map +1 -0
- package/dist/{web → admin}/admin-bar.js +20 -17
- package/dist/admin/admin-bar.js.map +1 -0
- package/dist/{indieauth → admin}/app-activity.d.ts +2 -2
- package/dist/admin/app-activity.d.ts.map +1 -0
- package/dist/{indieauth → admin}/app-activity.js +5 -5
- package/dist/admin/app-activity.js.map +1 -0
- package/dist/admin/appearance.d.ts +3 -3
- package/dist/admin/appearance.d.ts.map +1 -1
- package/dist/admin/appearance.js +12 -6
- package/dist/admin/appearance.js.map +1 -1
- package/dist/admin/assets.d.ts +1 -8
- package/dist/admin/assets.d.ts.map +1 -1
- package/dist/admin/assets.js +2 -9
- package/dist/admin/assets.js.map +1 -1
- package/dist/admin/comments.d.ts +2 -2
- package/dist/admin/comments.d.ts.map +1 -1
- package/dist/admin/comments.js +16 -17
- package/dist/admin/comments.js.map +1 -1
- package/dist/{indieauth → admin}/connected-apps.d.ts +2 -2
- package/dist/admin/connected-apps.d.ts.map +1 -0
- package/dist/{indieauth → admin}/connected-apps.js +18 -19
- package/dist/admin/connected-apps.js.map +1 -0
- package/dist/admin/credentials.js +1 -1
- package/dist/admin/credentials.js.map +1 -1
- package/dist/admin/dev-mode.d.ts +1 -1
- package/dist/admin/dev-mode.d.ts.map +1 -1
- package/dist/admin/documents.d.ts +16 -301
- package/dist/admin/documents.d.ts.map +1 -1
- package/dist/admin/documents.js +74 -1032
- package/dist/admin/documents.js.map +1 -1
- package/dist/admin/editor-actions.d.ts +3 -2
- package/dist/admin/editor-actions.d.ts.map +1 -1
- package/dist/admin/editor-actions.js +8 -8
- package/dist/admin/editor-actions.js.map +1 -1
- package/dist/admin/editor-fields.d.ts +45 -0
- package/dist/admin/editor-fields.d.ts.map +1 -0
- package/dist/admin/editor-fields.js +71 -0
- package/dist/admin/editor-fields.js.map +1 -0
- package/dist/admin/editor-layout.d.ts +2 -10
- package/dist/admin/editor-layout.d.ts.map +1 -1
- package/dist/admin/editor-layout.js +1 -1
- package/dist/admin/editor-layout.js.map +1 -1
- package/dist/admin/federation.d.ts +5 -5
- package/dist/admin/federation.d.ts.map +1 -1
- package/dist/admin/federation.js +16 -18
- package/dist/admin/federation.js.map +1 -1
- package/dist/admin/flash.d.ts +2 -2
- package/dist/admin/flash.d.ts.map +1 -1
- package/dist/admin/headers.d.ts +1 -1
- package/dist/admin/headers.d.ts.map +1 -1
- package/dist/admin/headers.js +1 -1
- package/dist/admin/headers.js.map +1 -1
- package/dist/admin/index.d.ts +38 -20
- package/dist/admin/index.d.ts.map +1 -1
- package/dist/admin/index.js +27 -13
- package/dist/admin/index.js.map +1 -1
- package/dist/{indieauth/consent.d.ts → admin/indieauth-consent.d.ts} +4 -4
- package/dist/admin/indieauth-consent.d.ts.map +1 -0
- package/dist/{indieauth/consent.js → admin/indieauth-consent.js} +17 -18
- package/dist/admin/indieauth-consent.js.map +1 -0
- package/dist/admin/legacy-migrations.d.ts +131 -0
- package/dist/admin/legacy-migrations.d.ts.map +1 -0
- package/dist/admin/legacy-migrations.js +235 -0
- package/dist/admin/legacy-migrations.js.map +1 -0
- package/dist/admin/media.d.ts +4 -108
- package/dist/admin/media.d.ts.map +1 -1
- package/dist/admin/media.js +19 -187
- package/dist/admin/media.js.map +1 -1
- package/dist/admin/menu.d.ts.map +1 -1
- package/dist/admin/menu.js +7 -7
- package/dist/admin/menu.js.map +1 -1
- package/dist/admin/messages.d.ts +1 -1
- package/dist/admin/messages.d.ts.map +1 -1
- package/dist/admin/messages.js +10 -12
- package/dist/admin/messages.js.map +1 -1
- package/dist/admin/navigation.d.ts +3 -3
- package/dist/admin/navigation.d.ts.map +1 -1
- package/dist/admin/navigation.js +9 -12
- package/dist/admin/navigation.js.map +1 -1
- package/dist/admin/personal-data.d.ts +1 -1
- package/dist/admin/personal-data.d.ts.map +1 -1
- package/dist/admin/personal-data.js +3 -6
- package/dist/admin/personal-data.js.map +1 -1
- package/dist/admin/plugins.d.ts +1 -1
- package/dist/admin/plugins.d.ts.map +1 -1
- package/dist/admin/plugins.js +11 -15
- package/dist/admin/plugins.js.map +1 -1
- package/dist/admin/preview.d.ts +2 -1
- package/dist/admin/preview.d.ts.map +1 -1
- package/dist/admin/preview.js +28 -32
- package/dist/admin/preview.js.map +1 -1
- package/dist/admin/recovery.d.ts +3 -3
- package/dist/admin/recovery.d.ts.map +1 -1
- package/dist/admin/recovery.js +10 -12
- package/dist/admin/recovery.js.map +1 -1
- package/dist/admin/routes.d.ts +1 -3
- package/dist/admin/routes.d.ts.map +1 -1
- package/dist/admin/routes.js +28 -26
- package/dist/admin/routes.js.map +1 -1
- package/dist/admin/settings-discussion.d.ts.map +1 -1
- package/dist/admin/settings-discussion.js +7 -4
- package/dist/admin/settings-discussion.js.map +1 -1
- package/dist/admin/settings-email.d.ts +1 -1
- package/dist/admin/settings-email.d.ts.map +1 -1
- package/dist/admin/settings-email.js +13 -10
- package/dist/admin/settings-email.js.map +1 -1
- package/dist/admin/settings-general.d.ts.map +1 -1
- package/dist/admin/settings-general.js +10 -7
- package/dist/admin/settings-general.js.map +1 -1
- package/dist/admin/settings-page.d.ts +3 -4
- package/dist/admin/settings-page.d.ts.map +1 -1
- package/dist/admin/settings-page.js +5 -6
- package/dist/admin/settings-page.js.map +1 -1
- package/dist/admin/settings-pages.d.ts +1 -1
- package/dist/admin/settings-pages.d.ts.map +1 -1
- package/dist/admin/settings-permalinks.js +1 -1
- package/dist/admin/settings-permalinks.js.map +1 -1
- package/dist/admin/settings-reading.d.ts +2 -2
- package/dist/admin/settings-reading.d.ts.map +1 -1
- package/dist/admin/settings-reading.js +4 -3
- package/dist/admin/settings-reading.js.map +1 -1
- package/dist/admin/settings.d.ts +0 -579
- package/dist/admin/settings.d.ts.map +1 -1
- package/dist/admin/settings.js +1 -1155
- package/dist/admin/settings.js.map +1 -1
- package/dist/admin/syndication-targets.d.ts +1 -1
- package/dist/admin/syndication-targets.d.ts.map +1 -1
- package/dist/admin/syndication-targets.js +11 -15
- package/dist/admin/syndication-targets.js.map +1 -1
- package/dist/admin/taxonomy.d.ts +2 -2
- package/dist/admin/taxonomy.d.ts.map +1 -1
- package/dist/admin/taxonomy.js +8 -11
- package/dist/admin/taxonomy.js.map +1 -1
- package/dist/admin/templates.js +1 -1
- package/dist/admin/templates.js.map +1 -1
- package/dist/admin/tools.d.ts +4 -4
- package/dist/admin/tools.d.ts.map +1 -1
- package/dist/admin/tools.js +3 -6
- package/dist/admin/tools.js.map +1 -1
- package/dist/admin/uploads.d.ts +1 -106
- package/dist/admin/uploads.d.ts.map +1 -1
- package/dist/admin/uploads.js +2 -191
- package/dist/admin/uploads.js.map +1 -1
- package/dist/admin/users.d.ts +20 -15
- package/dist/admin/users.d.ts.map +1 -1
- package/dist/admin/users.js +83 -80
- package/dist/admin/users.js.map +1 -1
- package/dist/avatars/avatars.d.ts +2 -2
- package/dist/avatars/avatars.d.ts.map +1 -1
- package/dist/avatars/avatars.js +6 -9
- package/dist/avatars/avatars.js.map +1 -1
- package/dist/avatars/index.d.ts +0 -1
- package/dist/avatars/index.d.ts.map +1 -1
- package/dist/avatars/index.js +0 -1
- package/dist/avatars/index.js.map +1 -1
- package/dist/cache.d.ts +4 -2
- package/dist/cache.d.ts.map +1 -1
- package/dist/cache.js +11 -5
- package/dist/cache.js.map +1 -1
- package/dist/cli.d.ts +2 -33
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +238 -267
- package/dist/cli.js.map +1 -1
- package/dist/cms/app.d.ts +11 -0
- package/dist/cms/app.d.ts.map +1 -0
- package/dist/cms/app.js +115 -0
- package/dist/cms/app.js.map +1 -0
- package/dist/cms/boot.d.ts +14 -0
- package/dist/cms/boot.d.ts.map +1 -0
- package/dist/cms/boot.js +107 -0
- package/dist/cms/boot.js.map +1 -0
- package/dist/cms/create.d.ts +248 -0
- package/dist/cms/create.d.ts.map +1 -0
- package/dist/cms/create.js +167 -0
- package/dist/cms/create.js.map +1 -0
- package/dist/cms/lifecycle.d.ts +11 -0
- package/dist/cms/lifecycle.d.ts.map +1 -0
- package/dist/cms/lifecycle.js +15 -0
- package/dist/cms/lifecycle.js.map +1 -0
- package/dist/{web/errors.d.ts → cms/server-error.d.ts} +2 -8
- package/dist/cms/server-error.d.ts.map +1 -0
- package/dist/{web/errors.js → cms/server-error.js} +4 -14
- package/dist/cms/server-error.js.map +1 -0
- package/dist/cms/services.d.ts +55 -0
- package/dist/cms/services.d.ts.map +1 -0
- package/dist/cms/services.js +353 -0
- package/dist/cms/services.js.map +1 -0
- package/dist/cms/site-records.d.ts +4 -0
- package/dist/cms/site-records.d.ts.map +1 -0
- package/dist/cms/site-records.js +15 -0
- package/dist/cms/site-records.js.map +1 -0
- package/dist/comments/akismet.d.ts +1 -1
- package/dist/comments/akismet.d.ts.map +1 -1
- package/dist/comments/akismet.js +1 -3
- package/dist/comments/akismet.js.map +1 -1
- package/dist/comments/conversation.d.ts +334 -0
- package/dist/comments/conversation.d.ts.map +1 -0
- package/dist/comments/conversation.js +51 -0
- package/dist/comments/conversation.js.map +1 -0
- package/dist/comments/form.d.ts +2 -2
- package/dist/comments/form.d.ts.map +1 -1
- package/dist/comments/form.js +2 -2
- package/dist/comments/form.js.map +1 -1
- package/dist/comments/index.d.ts +12 -6
- package/dist/comments/index.d.ts.map +1 -1
- package/dist/comments/index.js +7 -4
- package/dist/comments/index.js.map +1 -1
- package/dist/comments/intake.d.ts +147 -0
- package/dist/comments/intake.d.ts.map +1 -0
- package/dist/comments/intake.js +161 -0
- package/dist/comments/intake.js.map +1 -0
- package/dist/comments/markdown.d.ts.map +1 -1
- package/dist/comments/markdown.js +2 -9
- package/dist/comments/markdown.js.map +1 -1
- package/dist/comments/migrations.d.ts +45 -0
- package/dist/comments/migrations.d.ts.map +1 -0
- package/dist/comments/migrations.js +194 -0
- package/dist/comments/migrations.js.map +1 -0
- package/dist/comments/moderate.d.ts +2 -2
- package/dist/comments/moderate.d.ts.map +1 -1
- package/dist/comments/moderate.js +3 -13
- package/dist/comments/moderate.js.map +1 -1
- package/dist/comments/page-form.d.ts +52 -0
- package/dist/comments/page-form.d.ts.map +1 -0
- package/dist/comments/page-form.js +62 -0
- package/dist/comments/page-form.js.map +1 -0
- package/dist/comments/policy.d.ts +1 -9
- package/dist/comments/policy.d.ts.map +1 -1
- package/dist/comments/policy.js +3 -18
- package/dist/comments/policy.js.map +1 -1
- package/dist/comments/records.d.ts +17 -193
- package/dist/comments/records.d.ts.map +1 -1
- package/dist/comments/records.js +22 -391
- package/dist/comments/records.js.map +1 -1
- package/dist/comments/reply-notices.d.ts +5 -5
- package/dist/comments/reply-notices.d.ts.map +1 -1
- package/dist/comments/reply-notices.js +6 -6
- package/dist/comments/reply-notices.js.map +1 -1
- package/dist/comments/reply-post.d.ts +2 -2
- package/dist/comments/reply-post.d.ts.map +1 -1
- package/dist/comments/reply-post.js +7 -5
- package/dist/comments/reply-post.js.map +1 -1
- package/dist/comments/routes.d.ts +3 -3
- package/dist/comments/routes.d.ts.map +1 -1
- package/dist/comments/routes.js +19 -31
- package/dist/comments/routes.js.map +1 -1
- package/dist/comments/submission.d.ts +5 -100
- package/dist/comments/submission.d.ts.map +1 -1
- package/dist/comments/submission.js +5 -20
- package/dist/comments/submission.js.map +1 -1
- package/dist/comments/viewer.d.ts +1 -25
- package/dist/comments/viewer.d.ts.map +1 -1
- package/dist/comments/viewer.js +1 -44
- package/dist/comments/viewer.js.map +1 -1
- package/dist/config-loader.d.ts +35 -0
- package/dist/config-loader.d.ts.map +1 -0
- package/dist/config-loader.js +116 -0
- package/dist/config-loader.js.map +1 -0
- package/dist/config.d.ts +72 -50
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +132 -180
- package/dist/config.js.map +1 -1
- package/dist/contact/delivery.d.ts +1 -1
- package/dist/contact/delivery.d.ts.map +1 -1
- package/dist/contact/delivery.js +5 -13
- package/dist/contact/delivery.js.map +1 -1
- package/dist/contact/form.d.ts +2 -4
- package/dist/contact/form.d.ts.map +1 -1
- package/dist/contact/form.js +3 -4
- package/dist/contact/form.js.map +1 -1
- package/dist/contact/index.d.ts +2 -2
- package/dist/contact/index.d.ts.map +1 -1
- package/dist/contact/index.js +2 -2
- package/dist/contact/index.js.map +1 -1
- package/dist/contact/records.d.ts.map +1 -1
- package/dist/contact/records.js +8 -11
- package/dist/contact/records.js.map +1 -1
- package/dist/contact/submission.d.ts +2 -2
- package/dist/contact/submission.d.ts.map +1 -1
- package/dist/contact/submission.js +7 -16
- package/dist/contact/submission.js.map +1 -1
- package/dist/{images → content}/alt-text.d.ts +1 -1
- package/dist/content/alt-text.d.ts.map +1 -0
- package/dist/{images → content}/alt-text.js +3 -5
- package/dist/content/alt-text.js.map +1 -0
- package/dist/content/authors.d.ts +79 -0
- package/dist/content/authors.d.ts.map +1 -0
- package/dist/content/authors.js +106 -0
- package/dist/content/authors.js.map +1 -0
- package/dist/content/citation.d.ts +3 -0
- package/dist/content/citation.d.ts.map +1 -1
- package/dist/content/citation.js +3 -0
- package/dist/content/citation.js.map +1 -1
- package/dist/content/comments.d.ts +3 -0
- package/dist/content/comments.d.ts.map +1 -0
- package/dist/content/comments.js +3 -0
- package/dist/content/comments.js.map +1 -0
- package/dist/content/contact.d.ts +3 -0
- package/dist/content/contact.d.ts.map +1 -0
- package/dist/content/contact.js +3 -0
- package/dist/content/contact.js.map +1 -0
- package/dist/content/document-form.d.ts +195 -0
- package/dist/content/document-form.d.ts.map +1 -0
- package/dist/content/document-form.js +201 -0
- package/dist/content/document-form.js.map +1 -0
- package/dist/content/document-kind.d.ts +55 -0
- package/dist/content/document-kind.d.ts.map +1 -0
- package/dist/content/document-kind.js +30 -0
- package/dist/content/document-kind.js.map +1 -0
- package/dist/{admin/enclosure-field.d.ts → content/enclosure-form.d.ts} +14 -34
- package/dist/content/enclosure-form.d.ts.map +1 -0
- package/dist/{admin/enclosure-field.js → content/enclosure-form.js} +39 -76
- package/dist/content/enclosure-form.js.map +1 -0
- package/dist/content/enclosure.d.ts.map +1 -1
- package/dist/content/enclosure.js +3 -4
- package/dist/content/enclosure.js.map +1 -1
- package/dist/{admin/event-field.d.ts → content/event-form.d.ts} +6 -5
- package/dist/content/event-form.d.ts.map +1 -0
- package/dist/{admin/event-field.js → content/event-form.js} +45 -12
- package/dist/content/event-form.js.map +1 -0
- package/dist/content/excerpt.d.ts +25 -0
- package/dist/content/excerpt.d.ts.map +1 -0
- package/dist/content/excerpt.js +43 -0
- package/dist/content/excerpt.js.map +1 -0
- package/dist/content/form-error.d.ts +10 -0
- package/dist/content/form-error.d.ts.map +1 -0
- package/dist/content/form-error.js +2 -0
- package/dist/content/form-error.js.map +1 -0
- package/dist/{web → content}/guids.d.ts +12 -5
- package/dist/content/guids.d.ts.map +1 -0
- package/dist/{web → content}/guids.js +28 -5
- package/dist/content/guids.js.map +1 -0
- package/dist/content/image-tags.d.ts +25 -0
- package/dist/content/image-tags.d.ts.map +1 -0
- package/dist/content/image-tags.js +55 -0
- package/dist/content/image-tags.js.map +1 -0
- package/dist/content/index.d.ts +9 -4
- package/dist/content/index.d.ts.map +1 -1
- package/dist/content/index.js +5 -2
- package/dist/content/index.js.map +1 -1
- package/dist/content/language.d.ts +19 -0
- package/dist/content/language.d.ts.map +1 -0
- package/dist/content/language.js +19 -0
- package/dist/content/language.js.map +1 -0
- package/dist/content/license.d.ts.map +1 -0
- package/dist/content/license.js.map +1 -0
- package/dist/{web → content}/locale.d.ts +0 -6
- package/dist/content/locale.d.ts.map +1 -0
- package/dist/{web → content}/locale.js +1 -6
- package/dist/content/locale.js.map +1 -0
- package/dist/content/location-form.d.ts +17 -0
- package/dist/content/location-form.d.ts.map +1 -0
- package/dist/{admin/location-field.js → content/location-form.js} +2 -23
- package/dist/content/location-form.js.map +1 -0
- package/dist/content/location.d.ts.map +1 -1
- package/dist/content/location.js +1 -3
- package/dist/content/location.js.map +1 -1
- package/dist/content/markdown-links.d.ts +11 -0
- package/dist/content/markdown-links.d.ts.map +1 -0
- package/dist/content/markdown-links.js +223 -0
- package/dist/content/markdown-links.js.map +1 -0
- package/dist/content/markdown.d.ts +2 -1
- package/dist/content/markdown.d.ts.map +1 -1
- package/dist/content/markdown.js +1 -1
- package/dist/content/markdown.js.map +1 -1
- package/dist/content/migrated.js +1 -1
- package/dist/content/migrated.js.map +1 -1
- package/dist/content/parser.d.ts.map +1 -1
- package/dist/content/parser.js +1 -12
- package/dist/content/parser.js.map +1 -1
- package/dist/content/permalinks.d.ts +34 -0
- package/dist/content/permalinks.d.ts.map +1 -0
- package/dist/{web/documents.js → content/permalinks.js} +6 -56
- package/dist/content/permalinks.js.map +1 -0
- package/dist/content/photo-form.d.ts +28 -0
- package/dist/content/photo-form.d.ts.map +1 -0
- package/dist/{admin/photo-field.js → content/photo-form.js} +36 -36
- package/dist/content/photo-form.js.map +1 -0
- package/dist/content/photo.d.ts +1 -1
- package/dist/content/photo.d.ts.map +1 -1
- package/dist/content/photo.js +1 -1
- package/dist/content/photo.js.map +1 -1
- package/dist/content/post-fields.d.ts +40 -0
- package/dist/content/post-fields.d.ts.map +1 -0
- package/dist/content/post-fields.js +256 -0
- package/dist/content/post-fields.js.map +1 -0
- package/dist/{admin/read-field.d.ts → content/read-form.d.ts} +6 -4
- package/dist/content/read-form.d.ts.map +1 -0
- package/dist/content/read-form.js +99 -0
- package/dist/content/read-form.js.map +1 -0
- package/dist/content/read.d.ts.map +1 -1
- package/dist/content/read.js +7 -11
- package/dist/content/read.js.map +1 -1
- package/dist/content/redirects.d.ts +84 -0
- package/dist/content/redirects.d.ts.map +1 -0
- package/dist/content/redirects.js +234 -0
- package/dist/content/redirects.js.map +1 -0
- package/dist/content/sanitize.d.ts +13 -0
- package/dist/content/sanitize.d.ts.map +1 -0
- package/dist/{web → content}/sanitize.js +4 -71
- package/dist/content/sanitize.js.map +1 -0
- package/dist/content/save.d.ts +5 -8
- package/dist/content/save.d.ts.map +1 -1
- package/dist/content/save.js +5 -26
- package/dist/content/save.js.map +1 -1
- package/dist/content/schedule.d.ts +2 -2
- package/dist/content/schedule.d.ts.map +1 -1
- package/dist/content/schedule.js +1 -3
- package/dist/content/schedule.js.map +1 -1
- package/dist/content/served.d.ts +58 -0
- package/dist/content/served.d.ts.map +1 -0
- package/dist/content/served.js +65 -0
- package/dist/content/served.js.map +1 -0
- package/dist/content/site-links.d.ts +72 -0
- package/dist/content/site-links.d.ts.map +1 -0
- package/dist/content/site-links.js +191 -0
- package/dist/content/site-links.js.map +1 -0
- package/dist/content/sqlite/archive.d.ts +4 -0
- package/dist/content/sqlite/archive.d.ts.map +1 -0
- package/dist/content/sqlite/archive.js +96 -0
- package/dist/content/sqlite/archive.js.map +1 -0
- package/dist/content/sqlite/backlinks.d.ts +4 -0
- package/dist/content/sqlite/backlinks.d.ts.map +1 -0
- package/dist/content/sqlite/backlinks.js +46 -0
- package/dist/content/sqlite/backlinks.js.map +1 -0
- package/dist/content/sqlite/catalog.d.ts +4 -0
- package/dist/content/sqlite/catalog.d.ts.map +1 -0
- package/dist/content/sqlite/catalog.js +62 -0
- package/dist/content/sqlite/catalog.js.map +1 -0
- package/dist/content/sqlite/clauses.d.ts +57 -0
- package/dist/content/sqlite/clauses.d.ts.map +1 -0
- package/dist/content/sqlite/clauses.js +76 -0
- package/dist/content/sqlite/clauses.js.map +1 -0
- package/dist/content/sqlite/database.d.ts +26 -0
- package/dist/content/sqlite/database.d.ts.map +1 -0
- package/dist/content/sqlite/database.js +27 -0
- package/dist/content/sqlite/database.js.map +1 -0
- package/dist/content/sqlite/documents.d.ts +12 -0
- package/dist/content/sqlite/documents.d.ts.map +1 -0
- package/dist/content/sqlite/documents.js +40 -0
- package/dist/content/sqlite/documents.js.map +1 -0
- package/dist/content/sqlite/lookups.d.ts +6 -0
- package/dist/content/sqlite/lookups.d.ts.map +1 -0
- package/dist/content/sqlite/lookups.js +25 -0
- package/dist/content/sqlite/lookups.js.map +1 -0
- package/dist/content/sqlite/open.d.ts +8 -0
- package/dist/content/sqlite/open.d.ts.map +1 -0
- package/dist/content/sqlite/open.js +63 -0
- package/dist/content/sqlite/open.js.map +1 -0
- package/dist/content/sqlite/replies.d.ts +4 -0
- package/dist/content/sqlite/replies.d.ts.map +1 -0
- package/dist/content/sqlite/replies.js +21 -0
- package/dist/content/sqlite/replies.js.map +1 -0
- package/dist/content/sqlite/rows.d.ts +22 -0
- package/dist/content/sqlite/rows.d.ts.map +1 -0
- package/dist/content/sqlite/rows.js +93 -0
- package/dist/content/sqlite/rows.js.map +1 -0
- package/dist/content/sqlite/schedule.d.ts +4 -0
- package/dist/content/sqlite/schedule.d.ts.map +1 -0
- package/dist/content/sqlite/schedule.js +16 -0
- package/dist/content/sqlite/schedule.js.map +1 -0
- package/dist/content/sqlite/schema.d.ts +10 -0
- package/dist/content/sqlite/schema.d.ts.map +1 -0
- package/dist/content/sqlite/schema.js +209 -0
- package/dist/content/sqlite/schema.js.map +1 -0
- package/dist/content/sqlite/search.d.ts +4 -0
- package/dist/content/sqlite/search.d.ts.map +1 -0
- package/dist/content/sqlite/search.js +54 -0
- package/dist/content/sqlite/search.js.map +1 -0
- package/dist/content/sqlite/spellings.d.ts +6 -0
- package/dist/content/sqlite/spellings.d.ts.map +1 -0
- package/dist/content/sqlite/spellings.js +80 -0
- package/dist/content/sqlite/spellings.js.map +1 -0
- package/dist/content/sqlite/taxonomy.d.ts +4 -0
- package/dist/content/sqlite/taxonomy.d.ts.map +1 -0
- package/dist/content/sqlite/taxonomy.js +75 -0
- package/dist/content/sqlite/taxonomy.js.map +1 -0
- package/dist/content/sqlite/writes.d.ts +9 -0
- package/dist/content/sqlite/writes.d.ts.map +1 -0
- package/dist/content/sqlite/writes.js +164 -0
- package/dist/content/sqlite/writes.js.map +1 -0
- package/dist/content/store.d.ts +142 -137
- package/dist/content/store.d.ts.map +1 -1
- package/dist/content/store.js +0 -1050
- package/dist/content/store.js.map +1 -1
- package/dist/content/sync.d.ts +12 -4
- package/dist/content/sync.d.ts.map +1 -1
- package/dist/content/sync.js +24 -41
- package/dist/content/sync.js.map +1 -1
- package/dist/content/syndicate-to.d.ts +25 -0
- package/dist/content/syndicate-to.d.ts.map +1 -0
- package/dist/content/syndicate-to.js +8 -0
- package/dist/content/syndicate-to.js.map +1 -0
- package/dist/{web → content}/taxonomy.d.ts +1 -1
- package/dist/content/taxonomy.d.ts.map +1 -0
- package/dist/{web → content}/taxonomy.js +2 -2
- package/dist/content/taxonomy.js.map +1 -0
- package/dist/content/time.d.ts +2 -2
- package/dist/content/time.d.ts.map +1 -1
- package/dist/content/time.js +3 -3
- package/dist/content/time.js.map +1 -1
- package/dist/content/trash.d.ts +35 -0
- package/dist/content/trash.d.ts.map +1 -0
- package/dist/content/trash.js +83 -0
- package/dist/content/trash.js.map +1 -0
- package/dist/content/uploads.d.ts +24 -0
- package/dist/content/uploads.d.ts.map +1 -0
- package/dist/content/uploads.js +27 -0
- package/dist/content/uploads.js.map +1 -0
- package/dist/content/video.d.ts.map +1 -1
- package/dist/content/video.js +3 -5
- package/dist/content/video.js.map +1 -1
- package/dist/content/write.d.ts +84 -0
- package/dist/content/write.d.ts.map +1 -0
- package/dist/content/write.js +566 -0
- package/dist/content/write.js.map +1 -0
- package/dist/content/writer.d.ts.map +1 -1
- package/dist/content/writer.js +1 -2
- package/dist/content/writer.js.map +1 -1
- package/dist/dev-mode.d.ts +5 -3
- package/dist/dev-mode.d.ts.map +1 -1
- package/dist/dev-mode.js +3 -3
- package/dist/dev-mode.js.map +1 -1
- package/dist/drain.d.ts +2 -3
- package/dist/drain.d.ts.map +1 -1
- package/dist/drain.js +2 -1
- package/dist/drain.js.map +1 -1
- package/dist/exports.d.ts +26 -0
- package/dist/exports.d.ts.map +1 -0
- package/dist/exports.js +8 -0
- package/dist/exports.js.map +1 -0
- package/dist/federation/actor.d.ts +1 -1
- package/dist/federation/actor.d.ts.map +1 -1
- package/dist/federation/actor.js +6 -13
- package/dist/federation/actor.js.map +1 -1
- package/dist/federation/article.d.ts +4 -14
- package/dist/federation/article.d.ts.map +1 -1
- package/dist/federation/article.js +19 -32
- package/dist/federation/article.js.map +1 -1
- package/dist/federation/backfill.d.ts +4 -4
- package/dist/federation/backfill.d.ts.map +1 -1
- package/dist/federation/backfill.js +7 -10
- package/dist/federation/backfill.js.map +1 -1
- package/dist/federation/citations.d.ts.map +1 -1
- package/dist/federation/citations.js.map +1 -1
- package/dist/federation/cited-post.d.ts.map +1 -1
- package/dist/federation/cited-post.js +2 -4
- package/dist/federation/cited-post.js.map +1 -1
- package/dist/federation/delivery-plan.d.ts +85 -0
- package/dist/federation/delivery-plan.d.ts.map +1 -0
- package/dist/federation/delivery-plan.js +137 -0
- package/dist/federation/delivery-plan.js.map +1 -0
- package/dist/federation/delivery.d.ts +7 -32
- package/dist/federation/delivery.d.ts.map +1 -1
- package/dist/federation/delivery.js +64 -201
- package/dist/federation/delivery.js.map +1 -1
- package/dist/federation/federation.d.ts +5 -5
- package/dist/federation/federation.d.ts.map +1 -1
- package/dist/federation/federation.js +7 -6
- package/dist/federation/federation.js.map +1 -1
- package/dist/federation/followers.d.ts +1 -1
- package/dist/federation/followers.d.ts.map +1 -1
- package/dist/federation/inbox.d.ts +1 -1
- package/dist/federation/inbox.d.ts.map +1 -1
- package/dist/federation/inbox.js +5 -4
- package/dist/federation/inbox.js.map +1 -1
- package/dist/federation/index.d.ts +10 -8
- package/dist/federation/index.d.ts.map +1 -1
- package/dist/federation/index.js +7 -5
- package/dist/federation/index.js.map +1 -1
- package/dist/federation/keys.d.ts +8 -27
- package/dist/federation/keys.d.ts.map +1 -1
- package/dist/federation/keys.js +4 -47
- package/dist/federation/keys.js.map +1 -1
- package/dist/federation/mount.d.ts +2 -2
- package/dist/federation/mount.d.ts.map +1 -1
- package/dist/federation/mount.js +9 -7
- package/dist/federation/mount.js.map +1 -1
- package/dist/federation/paths.d.ts +1 -9
- package/dist/federation/paths.d.ts.map +1 -1
- package/dist/federation/paths.js +2 -12
- package/dist/federation/paths.js.map +1 -1
- package/dist/federation/profiles.d.ts +1 -1
- package/dist/federation/profiles.d.ts.map +1 -1
- package/dist/federation/profiles.js +5 -8
- package/dist/federation/profiles.js.map +1 -1
- package/dist/federation/quotes.d.ts +2 -2
- package/dist/federation/quotes.d.ts.map +1 -1
- package/dist/federation/quotes.js +4 -4
- package/dist/federation/quotes.js.map +1 -1
- package/dist/federation/records.d.ts +2 -2
- package/dist/federation/records.d.ts.map +1 -1
- package/dist/federation/records.js +12 -19
- package/dist/federation/records.js.map +1 -1
- package/dist/federation/relays.d.ts +2 -3
- package/dist/federation/relays.d.ts.map +1 -1
- package/dist/federation/relays.js +22 -30
- package/dist/federation/relays.js.map +1 -1
- package/dist/federation/site-loaders.js +1 -1
- package/dist/federation/site-loaders.js.map +1 -1
- package/dist/federation/webfinger.d.ts +23 -0
- package/dist/federation/webfinger.d.ts.map +1 -0
- package/dist/federation/webfinger.js +70 -0
- package/dist/federation/webfinger.js.map +1 -0
- package/dist/files/atomic.d.ts.map +1 -1
- package/dist/files/atomic.js +4 -9
- package/dist/files/atomic.js.map +1 -1
- package/dist/files/static-files.d.ts +21 -0
- package/dist/files/static-files.d.ts.map +1 -0
- package/dist/files/static-files.js +88 -0
- package/dist/files/static-files.js.map +1 -0
- package/dist/forms/checker.d.ts +93 -0
- package/dist/forms/checker.d.ts.map +1 -0
- package/dist/forms/checker.js +2 -0
- package/dist/forms/checker.js.map +1 -0
- package/dist/forms/protection.d.ts +3 -1
- package/dist/forms/protection.d.ts.map +1 -1
- package/dist/forms/protection.js +3 -1
- package/dist/forms/protection.js.map +1 -1
- package/dist/images/icons.js +2 -2
- package/dist/images/icons.js.map +1 -1
- package/dist/images/index.d.ts +2 -1
- package/dist/images/index.d.ts.map +1 -1
- package/dist/images/index.js +2 -1
- package/dist/images/index.js.map +1 -1
- package/dist/images/markup.d.ts +0 -20
- package/dist/images/markup.d.ts.map +1 -1
- package/dist/images/markup.js +5 -64
- package/dist/images/markup.js.map +1 -1
- package/dist/images/paths.d.ts +0 -10
- package/dist/images/paths.d.ts.map +1 -1
- package/dist/images/paths.js +3 -11
- package/dist/images/paths.js.map +1 -1
- package/dist/images/variants.d.ts +2 -2
- package/dist/images/variants.d.ts.map +1 -1
- package/dist/images/variants.js +4 -3
- package/dist/images/variants.js.map +1 -1
- package/dist/index.d.ts +3 -291
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -839
- package/dist/index.js.map +1 -1
- package/dist/indexnow.d.ts.map +1 -1
- package/dist/indexnow.js +21 -26
- package/dist/indexnow.js.map +1 -1
- package/dist/indieauth/client.d.ts +1 -1
- package/dist/indieauth/client.d.ts.map +1 -1
- package/dist/indieauth/client.js +1 -1
- package/dist/indieauth/client.js.map +1 -1
- package/dist/indieauth/grants.d.ts +1 -1
- package/dist/indieauth/grants.d.ts.map +1 -1
- package/dist/indieauth/identity.d.ts +2 -2
- package/dist/indieauth/identity.d.ts.map +1 -1
- package/dist/indieauth/identity.js +5 -7
- package/dist/indieauth/identity.js.map +1 -1
- package/dist/indieauth/redeem.d.ts +1 -1
- package/dist/indieauth/redeem.d.ts.map +1 -1
- package/dist/indieauth/redeem.js.map +1 -1
- package/dist/indieauth/request.d.ts +5 -1
- package/dist/indieauth/request.d.ts.map +1 -1
- package/dist/indieauth/request.js +6 -2
- package/dist/indieauth/request.js.map +1 -1
- package/dist/indieauth/tokens.d.ts +1 -1
- package/dist/indieauth/tokens.d.ts.map +1 -1
- package/dist/indieauth/tokens.js +2 -2
- package/dist/indieauth/tokens.js.map +1 -1
- package/dist/mail/index.d.ts +1 -5
- package/dist/mail/index.d.ts.map +1 -1
- package/dist/mail/index.js +0 -2
- package/dist/mail/index.js.map +1 -1
- package/dist/mail/provider.d.ts +7 -0
- package/dist/mail/provider.d.ts.map +1 -1
- package/dist/maintenance.d.ts +1 -1
- package/dist/maintenance.d.ts.map +1 -1
- package/dist/media/library.d.ts +99 -0
- package/dist/media/library.d.ts.map +1 -0
- package/dist/media/library.js +157 -0
- package/dist/media/library.js.map +1 -0
- package/dist/media/uploads.d.ts +106 -0
- package/dist/media/uploads.d.ts.map +1 -0
- package/dist/media/uploads.js +192 -0
- package/dist/media/uploads.js.map +1 -0
- package/dist/micropub/content.js +1 -1
- package/dist/micropub/content.js.map +1 -1
- package/dist/micropub/create.d.ts +7 -15
- package/dist/micropub/create.d.ts.map +1 -1
- package/dist/micropub/create.js +48 -184
- package/dist/micropub/create.js.map +1 -1
- package/dist/micropub/endpoint.d.ts +2 -2
- package/dist/micropub/endpoint.d.ts.map +1 -1
- package/dist/micropub/endpoint.js +29 -40
- package/dist/micropub/endpoint.js.map +1 -1
- package/dist/micropub/media.d.ts +1 -1
- package/dist/micropub/media.d.ts.map +1 -1
- package/dist/micropub/media.js +6 -6
- package/dist/micropub/media.js.map +1 -1
- package/dist/micropub/update.d.ts +6 -14
- package/dist/micropub/update.d.ts.map +1 -1
- package/dist/micropub/update.js +37 -90
- package/dist/micropub/update.js.map +1 -1
- package/dist/notifications/comments.d.ts +4 -4
- package/dist/notifications/comments.d.ts.map +1 -1
- package/dist/notifications/comments.js +6 -14
- package/dist/notifications/comments.js.map +1 -1
- package/dist/notifications/digest.d.ts +4 -4
- package/dist/notifications/digest.d.ts.map +1 -1
- package/dist/notifications/digest.js +6 -16
- package/dist/notifications/digest.js.map +1 -1
- package/dist/notifications/index.d.ts +6 -3
- package/dist/notifications/index.d.ts.map +1 -1
- package/dist/notifications/index.js +3 -2
- package/dist/notifications/index.js.map +1 -1
- package/dist/notifications/links.d.ts.map +1 -1
- package/dist/notifications/links.js +2 -2
- package/dist/notifications/links.js.map +1 -1
- package/dist/{mail/service.d.ts → notifications/mail-service.d.ts} +7 -13
- package/dist/notifications/mail-service.d.ts.map +1 -0
- package/dist/{mail/service.js → notifications/mail-service.js} +33 -54
- package/dist/notifications/mail-service.js.map +1 -0
- package/dist/{mail/templates.d.ts → notifications/mail-templates.d.ts} +4 -2
- package/dist/notifications/mail-templates.d.ts.map +1 -0
- package/dist/{mail/templates.js → notifications/mail-templates.js} +5 -3
- package/dist/notifications/mail-templates.js.map +1 -0
- package/dist/notifications/tokens.d.ts +2 -2
- package/dist/notifications/tokens.d.ts.map +1 -1
- package/dist/notifications/tokens.js +2 -2
- package/dist/notifications/tokens.js.map +1 -1
- package/dist/notify.d.ts.map +1 -1
- package/dist/notify.js +12 -24
- package/dist/notify.js.map +1 -1
- package/dist/plugin.d.ts +23 -3
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +21 -3
- package/dist/plugin.js.map +1 -1
- package/dist/plugins/enabled.d.ts.map +1 -1
- package/dist/plugins/enabled.js +2 -4
- package/dist/plugins/enabled.js.map +1 -1
- package/dist/plugins/fetch.d.ts +1 -1
- package/dist/plugins/fetch.d.ts.map +1 -1
- package/dist/plugins/fetch.js +1 -1
- package/dist/plugins/fetch.js.map +1 -1
- package/dist/plugins/folder.d.ts.map +1 -1
- package/dist/plugins/folder.js +1 -3
- package/dist/plugins/folder.js.map +1 -1
- package/dist/plugins/install.d.ts.map +1 -1
- package/dist/plugins/install.js +7 -3
- package/dist/plugins/install.js.map +1 -1
- package/dist/plugins/manage.d.ts +1 -1
- package/dist/plugins/manage.d.ts.map +1 -1
- package/dist/plugins/registry.d.ts.map +1 -1
- package/dist/plugins/registry.js +7 -9
- package/dist/plugins/registry.js.map +1 -1
- package/dist/plugins/settings.d.ts.map +1 -1
- package/dist/plugins/settings.js +2 -3
- package/dist/plugins/settings.js.map +1 -1
- package/dist/plugins/site.d.ts +1 -1
- package/dist/plugins/site.d.ts.map +1 -1
- package/dist/plugins/site.js +4 -4
- package/dist/plugins/site.js.map +1 -1
- package/dist/plugins/upgrade.d.ts.map +1 -1
- package/dist/plugins/upgrade.js +4 -3
- package/dist/plugins/upgrade.js.map +1 -1
- package/dist/privacy/erase.d.ts +1 -1
- package/dist/privacy/erase.d.ts.map +1 -1
- package/dist/privacy/retention.d.ts +2 -2
- package/dist/privacy/retention.d.ts.map +1 -1
- package/dist/privacy/retention.js +9 -11
- package/dist/privacy/retention.js.map +1 -1
- package/dist/site/admin-paths.d.ts +23 -0
- package/dist/site/admin-paths.d.ts.map +1 -0
- package/dist/site/admin-paths.js +25 -0
- package/dist/site/admin-paths.js.map +1 -0
- package/dist/site/admin-theme.d.ts.map +1 -0
- package/dist/site/admin-theme.js.map +1 -0
- package/dist/{web → site}/authors.d.ts +1 -72
- package/dist/site/authors.d.ts.map +1 -0
- package/dist/site/authors.js +107 -0
- package/dist/site/authors.js.map +1 -0
- package/dist/site/feed-settings.d.ts +28 -0
- package/dist/site/feed-settings.d.ts.map +1 -0
- package/dist/site/feed-settings.js +22 -0
- package/dist/site/feed-settings.js.map +1 -0
- package/dist/{web/indexnow.d.ts → site/indexnow-key.d.ts} +1 -1
- package/dist/site/indexnow-key.d.ts.map +1 -0
- package/dist/{web/indexnow.js → site/indexnow-key.js} +1 -1
- package/dist/site/indexnow-key.js.map +1 -0
- package/dist/{web → site}/navigation.d.ts +7 -1
- package/dist/site/navigation.d.ts.map +1 -0
- package/dist/{web → site}/navigation.js +18 -0
- package/dist/site/navigation.js.map +1 -0
- package/dist/{notifications/preferences.d.ts → site/notification-preferences.d.ts} +2 -2
- package/dist/site/notification-preferences.d.ts.map +1 -0
- package/dist/{notifications/preferences.js → site/notification-preferences.js} +1 -1
- package/dist/site/notification-preferences.js.map +1 -0
- package/dist/site/passwords.d.ts.map +1 -0
- package/dist/site/passwords.js.map +1 -0
- package/dist/{privacy/policy.d.ts → site/retention-policy.d.ts} +1 -1
- package/dist/site/retention-policy.d.ts.map +1 -0
- package/dist/{privacy/policy.js → site/retention-policy.js} +1 -1
- package/dist/site/retention-policy.js.map +1 -0
- package/dist/site/robots.d.ts +62 -0
- package/dist/site/robots.d.ts.map +1 -0
- package/dist/site/robots.js +130 -0
- package/dist/site/robots.js.map +1 -0
- package/dist/site/setting-rows.d.ts +46 -0
- package/dist/site/setting-rows.d.ts.map +1 -0
- package/dist/site/setting-rows.js +480 -0
- package/dist/site/setting-rows.js.map +1 -0
- package/dist/site/setting-values.d.ts +63 -0
- package/dist/site/setting-values.d.ts.map +1 -0
- package/dist/site/setting-values.js +170 -0
- package/dist/site/setting-values.js.map +1 -0
- package/dist/site/settings-form.d.ts +30 -0
- package/dist/site/settings-form.d.ts.map +1 -0
- package/dist/site/settings-form.js +58 -0
- package/dist/site/settings-form.js.map +1 -0
- package/dist/site/settings.d.ts +345 -0
- package/dist/site/settings.d.ts.map +1 -0
- package/dist/site/settings.js +107 -0
- package/dist/site/settings.js.map +1 -0
- package/dist/site/site-json.d.ts +69 -0
- package/dist/site/site-json.d.ts.map +1 -0
- package/dist/site/site-json.js +113 -0
- package/dist/site/site-json.js.map +1 -0
- package/dist/{admin/accounts.d.ts → site/users.d.ts} +25 -41
- package/dist/site/users.d.ts.map +1 -0
- package/dist/{admin/accounts.js → site/users.js} +49 -155
- package/dist/site/users.js.map +1 -0
- package/dist/store/admin-store.d.ts +72 -0
- package/dist/store/admin-store.d.ts.map +1 -0
- package/dist/store/admin-store.js +62 -0
- package/dist/store/admin-store.js.map +1 -0
- package/dist/store/comments.d.ts +253 -0
- package/dist/store/comments.d.ts.map +1 -0
- package/dist/store/comments.js +234 -0
- package/dist/store/comments.js.map +1 -0
- package/dist/store/conversation.d.ts +28 -0
- package/dist/store/conversation.d.ts.map +1 -0
- package/dist/store/conversation.js +16 -0
- package/dist/store/conversation.js.map +1 -0
- package/dist/store/deliveries.d.ts +92 -0
- package/dist/store/deliveries.d.ts.map +1 -0
- package/dist/store/deliveries.js +88 -0
- package/dist/store/deliveries.js.map +1 -0
- package/dist/store/followers.d.ts +91 -0
- package/dist/store/followers.d.ts.map +1 -0
- package/dist/store/followers.js +79 -0
- package/dist/store/followers.js.map +1 -0
- package/dist/{federation/replies.d.ts → store/inbox-replies.d.ts} +2 -2
- package/dist/store/inbox-replies.d.ts.map +1 -0
- package/dist/{federation/replies.js → store/inbox-replies.js} +2 -4
- package/dist/store/inbox-replies.js.map +1 -0
- package/dist/store/inbox.d.ts +132 -0
- package/dist/store/inbox.d.ts.map +1 -0
- package/dist/store/inbox.js +157 -0
- package/dist/store/inbox.js.map +1 -0
- package/dist/store/profiles.d.ts +49 -0
- package/dist/store/profiles.d.ts.map +1 -0
- package/dist/store/profiles.js +71 -0
- package/dist/store/profiles.js.map +1 -0
- package/dist/store/relays.d.ts +66 -0
- package/dist/store/relays.d.ts.map +1 -0
- package/dist/store/relays.js +69 -0
- package/dist/store/relays.js.map +1 -0
- package/dist/store/rows.d.ts +33 -0
- package/dist/store/rows.d.ts.map +1 -0
- package/dist/store/rows.js +44 -0
- package/dist/store/rows.js.map +1 -0
- package/dist/store/schema.d.ts +14 -0
- package/dist/store/schema.d.ts.map +1 -0
- package/dist/store/schema.js +588 -0
- package/dist/store/schema.js.map +1 -0
- package/dist/store/sessions.d.ts +90 -0
- package/dist/store/sessions.d.ts.map +1 -0
- package/dist/store/sessions.js +107 -0
- package/dist/store/sessions.js.map +1 -0
- package/dist/store/state.d.ts +18 -0
- package/dist/store/state.d.ts.map +1 -0
- package/dist/store/state.js +19 -0
- package/dist/store/state.js.map +1 -0
- package/dist/store/tokens.d.ts +75 -0
- package/dist/store/tokens.d.ts.map +1 -0
- package/dist/store/tokens.js +82 -0
- package/dist/store/tokens.js.map +1 -0
- package/dist/store/webmentions.d.ts +66 -0
- package/dist/store/webmentions.d.ts.map +1 -0
- package/dist/store/webmentions.js +84 -0
- package/dist/store/webmentions.js.map +1 -0
- package/dist/supervisor/primary.d.ts +1 -1
- package/dist/supervisor/primary.d.ts.map +1 -1
- package/dist/supervisor/primary.js +31 -11
- package/dist/supervisor/primary.js.map +1 -1
- package/dist/supervisor/worker.d.ts +6 -2
- package/dist/supervisor/worker.d.ts.map +1 -1
- package/dist/supervisor/worker.js +4 -4
- package/dist/supervisor/worker.js.map +1 -1
- package/dist/testing.d.ts +8 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +6 -0
- package/dist/testing.js.map +1 -0
- package/dist/{web → theme}/assets.d.ts +1 -32
- package/dist/theme/assets.d.ts.map +1 -0
- package/dist/{web → theme}/assets.js +2 -100
- package/dist/theme/assets.js.map +1 -0
- package/dist/theme/site-data.d.ts +187 -0
- package/dist/theme/site-data.d.ts.map +1 -0
- package/dist/theme/site-data.js +160 -0
- package/dist/theme/site-data.js.map +1 -0
- package/dist/{web → theme}/templates.d.ts +2 -0
- package/dist/theme/templates.d.ts.map +1 -0
- package/dist/{web → theme}/templates.js +9 -32
- package/dist/theme/templates.js.map +1 -0
- package/dist/{web → theme}/themes.d.ts +1 -0
- package/dist/theme/themes.d.ts.map +1 -0
- package/dist/{web → theme}/themes.js +6 -3
- package/dist/theme/themes.js.map +1 -0
- package/dist/util/client-id.d.ts.map +1 -0
- package/dist/util/client-id.js.map +1 -0
- package/dist/util/clock.d.ts +9 -0
- package/dist/util/clock.d.ts.map +1 -0
- package/dist/util/clock.js +2 -0
- package/dist/util/clock.js.map +1 -0
- package/dist/util/errors.d.ts +3 -0
- package/dist/util/errors.d.ts.map +1 -0
- package/dist/util/errors.js +5 -0
- package/dist/util/errors.js.map +1 -0
- package/dist/util/files.d.ts +5 -0
- package/dist/util/files.d.ts.map +1 -0
- package/dist/util/files.js +38 -0
- package/dist/util/files.js.map +1 -0
- package/dist/util/forms.d.ts +5 -0
- package/dist/util/forms.d.ts.map +1 -0
- package/dist/util/forms.js +17 -0
- package/dist/util/forms.js.map +1 -0
- package/dist/util/guards.d.ts +4 -0
- package/dist/util/guards.d.ts.map +1 -0
- package/dist/util/guards.js +12 -0
- package/dist/util/guards.js.map +1 -0
- package/dist/{webmention/html.d.ts → util/html-tree.d.ts} +2 -2
- package/dist/util/html-tree.d.ts.map +1 -0
- package/dist/{webmention/html.js → util/html-tree.js} +3 -64
- package/dist/util/html-tree.js.map +1 -0
- package/dist/util/html.d.ts +4 -0
- package/dist/util/html.d.ts.map +1 -0
- package/dist/util/html.js +34 -0
- package/dist/util/html.js.map +1 -0
- package/dist/util/public-address.d.ts.map +1 -0
- package/dist/util/public-address.js.map +1 -0
- package/dist/util/queue.d.ts +7 -0
- package/dist/util/queue.d.ts.map +1 -0
- package/dist/util/queue.js +23 -0
- package/dist/util/queue.js.map +1 -0
- package/dist/util/retry.d.ts +11 -0
- package/dist/util/retry.d.ts.map +1 -0
- package/dist/util/retry.js +14 -0
- package/dist/util/retry.js.map +1 -0
- package/dist/util/url.d.ts +11 -0
- package/dist/util/url.d.ts.map +1 -0
- package/dist/util/url.js +20 -0
- package/dist/util/url.js.map +1 -0
- package/dist/web/absolute-urls.js +1 -1
- package/dist/web/absolute-urls.js.map +1 -1
- package/dist/web/archive.js +2 -2
- package/dist/web/archive.js.map +1 -1
- package/dist/web/asset-routes.d.ts +48 -0
- package/dist/web/asset-routes.d.ts.map +1 -0
- package/dist/web/asset-routes.js +107 -0
- package/dist/web/asset-routes.js.map +1 -0
- package/dist/{avatars/routes.d.ts → web/avatar-routes.d.ts} +2 -2
- package/dist/web/avatar-routes.d.ts.map +1 -0
- package/dist/{avatars/routes.js → web/avatar-routes.js} +3 -3
- package/dist/web/avatar-routes.js.map +1 -0
- package/dist/web/comment-routes.d.ts +18 -0
- package/dist/web/comment-routes.d.ts.map +1 -0
- package/dist/web/comment-routes.js +177 -0
- package/dist/web/comment-routes.js.map +1 -0
- package/dist/web/compression.d.ts.map +1 -1
- package/dist/web/compression.js +1 -2
- package/dist/web/compression.js.map +1 -1
- package/dist/{contact/routes.d.ts → web/contact-routes.d.ts} +2 -2
- package/dist/web/contact-routes.d.ts.map +1 -0
- package/dist/{contact/routes.js → web/contact-routes.js} +14 -17
- package/dist/web/contact-routes.js.map +1 -0
- package/dist/web/context.d.ts +1 -187
- package/dist/web/context.d.ts.map +1 -1
- package/dist/web/context.js +5 -171
- package/dist/web/context.js.map +1 -1
- package/dist/web/conversation.d.ts +5 -356
- package/dist/web/conversation.d.ts.map +1 -1
- package/dist/web/conversation.js +165 -136
- package/dist/web/conversation.js.map +1 -1
- package/dist/web/document-page.d.ts +13 -0
- package/dist/web/document-page.d.ts.map +1 -0
- package/dist/web/document-page.js +136 -0
- package/dist/web/document-page.js.map +1 -0
- package/dist/web/document-site.d.ts +14 -0
- package/dist/web/document-site.d.ts.map +1 -0
- package/dist/web/document-site.js +28 -0
- package/dist/web/document-site.js.map +1 -0
- package/dist/web/embed.d.ts +13 -0
- package/dist/web/embed.d.ts.map +1 -0
- package/dist/web/embed.js +66 -0
- package/dist/web/embed.js.map +1 -0
- package/dist/{env.d.ts → web/env.d.ts} +27 -26
- package/dist/web/env.d.ts.map +1 -0
- package/dist/web/env.js.map +1 -0
- package/dist/web/federation-routes.d.ts +33 -0
- package/dist/web/federation-routes.d.ts.map +1 -0
- package/dist/web/federation-routes.js +280 -0
- package/dist/web/federation-routes.js.map +1 -0
- package/dist/web/feed-atom.d.ts.map +1 -1
- package/dist/web/feed-atom.js +4 -3
- package/dist/web/feed-atom.js.map +1 -1
- package/dist/web/feed-item.d.ts +4 -39
- package/dist/web/feed-item.d.ts.map +1 -1
- package/dist/web/feed-item.js +8 -72
- package/dist/web/feed-item.js.map +1 -1
- package/dist/web/feed-json.js +2 -2
- package/dist/web/feed-json.js.map +1 -1
- package/dist/web/feed-routes.d.ts +36 -0
- package/dist/web/feed-routes.d.ts.map +1 -0
- package/dist/web/feed-routes.js +124 -0
- package/dist/web/feed-routes.js.map +1 -0
- package/dist/web/feed-rss.d.ts.map +1 -1
- package/dist/web/feed-rss.js +9 -6
- package/dist/web/feed-rss.js.map +1 -1
- package/dist/web/feed-source.d.ts +11 -41
- package/dist/web/feed-source.d.ts.map +1 -1
- package/dist/web/feed-source.js +11 -48
- package/dist/web/feed-source.js.map +1 -1
- package/dist/web/feeds.d.ts +4 -2
- package/dist/web/feeds.d.ts.map +1 -1
- package/dist/web/feeds.js +8 -5
- package/dist/web/feeds.js.map +1 -1
- package/dist/web/health.d.ts +1 -1
- package/dist/web/health.d.ts.map +1 -1
- package/dist/web/index.d.ts +53 -29
- package/dist/web/index.d.ts.map +1 -1
- package/dist/web/index.js +37 -18
- package/dist/web/index.js.map +1 -1
- package/dist/{indieauth/activity-log.d.ts → web/indieauth-activity-log.d.ts} +3 -3
- package/dist/web/indieauth-activity-log.d.ts.map +1 -0
- package/dist/{indieauth/activity-log.js → web/indieauth-activity-log.js} +5 -6
- package/dist/web/indieauth-activity-log.js.map +1 -0
- package/dist/{indieauth/bearer.d.ts → web/indieauth-bearer.d.ts} +5 -5
- package/dist/web/indieauth-bearer.d.ts.map +1 -0
- package/dist/{indieauth/bearer.js → web/indieauth-bearer.js} +4 -4
- package/dist/web/indieauth-bearer.js.map +1 -0
- package/dist/{indieauth/discovery.d.ts → web/indieauth-discovery.d.ts} +2 -7
- package/dist/web/indieauth-discovery.d.ts.map +1 -0
- package/dist/{indieauth/discovery.js → web/indieauth-discovery.js} +6 -9
- package/dist/web/indieauth-discovery.js.map +1 -0
- package/dist/{indieauth/token.d.ts → web/indieauth-token.d.ts} +2 -2
- package/dist/web/indieauth-token.d.ts.map +1 -0
- package/dist/{indieauth/token.js → web/indieauth-token.js} +7 -7
- package/dist/web/indieauth-token.js.map +1 -0
- package/dist/web/listing-pages.d.ts +19 -0
- package/dist/web/listing-pages.d.ts.map +1 -0
- package/dist/web/listing-pages.js +148 -0
- package/dist/web/listing-pages.js.map +1 -0
- package/dist/web/listing-subject.d.ts +58 -0
- package/dist/web/listing-subject.d.ts.map +1 -0
- package/dist/web/listing-subject.js +89 -0
- package/dist/web/listing-subject.js.map +1 -0
- package/dist/web/llms.d.ts +16 -15
- package/dist/web/llms.d.ts.map +1 -1
- package/dist/web/llms.js +23 -35
- package/dist/web/llms.js.map +1 -1
- package/dist/web/maintenance.d.ts +1 -1
- package/dist/web/maintenance.d.ts.map +1 -1
- package/dist/web/maintenance.js +7 -13
- package/dist/web/maintenance.js.map +1 -1
- package/dist/web/manifest.d.ts +1 -1
- package/dist/web/manifest.d.ts.map +1 -1
- package/dist/web/manifest.js +2 -1
- package/dist/web/manifest.js.map +1 -1
- package/dist/web/markdown-page.d.ts +76 -0
- package/dist/web/markdown-page.d.ts.map +1 -0
- package/dist/web/markdown-page.js +79 -0
- package/dist/web/markdown-page.js.map +1 -0
- package/dist/web/markdown-representation.d.ts +15 -0
- package/dist/web/markdown-representation.d.ts.map +1 -0
- package/dist/web/markdown-representation.js +130 -0
- package/dist/web/markdown-representation.js.map +1 -0
- package/dist/web/negotiate.d.ts +5 -12
- package/dist/web/negotiate.d.ts.map +1 -1
- package/dist/web/negotiate.js +11 -18
- package/dist/web/negotiate.js.map +1 -1
- package/dist/{notifications/routes.d.ts → web/notification-routes.d.ts} +2 -2
- package/dist/web/notification-routes.d.ts.map +1 -0
- package/dist/{notifications/routes.js → web/notification-routes.js} +24 -29
- package/dist/web/notification-routes.js.map +1 -0
- package/dist/web/oembed.d.ts +2 -2
- package/dist/web/oembed.d.ts.map +1 -1
- package/dist/web/oembed.js +5 -4
- package/dist/web/oembed.js.map +1 -1
- package/dist/web/opensearch.d.ts.map +1 -1
- package/dist/web/opensearch.js +2 -1
- package/dist/web/opensearch.js.map +1 -1
- package/dist/web/page-sources.d.ts +15 -0
- package/dist/web/page-sources.d.ts.map +1 -0
- package/dist/web/page-sources.js +44 -0
- package/dist/web/page-sources.js.map +1 -0
- package/dist/web/pagination.d.ts +1 -0
- package/dist/web/pagination.d.ts.map +1 -1
- package/dist/web/pagination.js +4 -1
- package/dist/web/pagination.js.map +1 -1
- package/dist/web/paths.d.ts +52 -0
- package/dist/web/paths.d.ts.map +1 -0
- package/dist/web/paths.js +208 -0
- package/dist/web/paths.js.map +1 -0
- package/dist/web/pingback-routes.d.ts +5 -0
- package/dist/web/pingback-routes.d.ts.map +1 -0
- package/dist/web/pingback-routes.js +100 -0
- package/dist/web/pingback-routes.js.map +1 -0
- package/dist/{plugins/federation.d.ts → web/plugin-federation.d.ts} +3 -3
- package/dist/web/plugin-federation.d.ts.map +1 -0
- package/dist/{plugins/federation.js → web/plugin-federation.js} +5 -5
- package/dist/web/plugin-federation.js.map +1 -0
- package/dist/{plugins/mount.d.ts → web/plugin-routes.d.ts} +3 -3
- package/dist/web/plugin-routes.d.ts.map +1 -0
- package/dist/{plugins/mount.js → web/plugin-routes.js} +2 -2
- package/dist/web/plugin-routes.js.map +1 -0
- package/dist/web/redirects.d.ts +1 -84
- package/dist/web/redirects.d.ts.map +1 -1
- package/dist/web/redirects.js +0 -232
- package/dist/web/redirects.js.map +1 -1
- package/dist/web/render.d.ts +43 -7
- package/dist/web/render.d.ts.map +1 -1
- package/dist/web/render.js +96 -48
- package/dist/web/render.js.map +1 -1
- package/dist/web/request.d.ts +44 -0
- package/dist/web/request.d.ts.map +1 -0
- package/dist/web/request.js +82 -0
- package/dist/web/request.js.map +1 -0
- package/dist/web/robots.d.ts +1 -46
- package/dist/web/robots.d.ts.map +1 -1
- package/dist/web/robots.js +5 -131
- package/dist/web/robots.js.map +1 -1
- package/dist/web/routes.d.ts +5 -39
- package/dist/web/routes.d.ts.map +1 -1
- package/dist/web/routes.js +98 -1369
- package/dist/web/routes.js.map +1 -1
- package/dist/web/search.d.ts.map +1 -1
- package/dist/web/search.js +2 -9
- package/dist/web/search.js.map +1 -1
- package/dist/{admin → web}/session.d.ts +1 -5
- package/dist/web/session.d.ts.map +1 -0
- package/dist/{admin → web}/session.js +0 -4
- package/dist/web/session.js.map +1 -0
- package/dist/web/share-image.d.ts.map +1 -1
- package/dist/web/share-image.js +3 -2
- package/dist/web/share-image.js.map +1 -1
- package/dist/web/signed-in.d.ts +27 -0
- package/dist/web/signed-in.d.ts.map +1 -0
- package/dist/web/signed-in.js +45 -0
- package/dist/web/signed-in.js.map +1 -0
- package/dist/web/site-index.d.ts +13 -0
- package/dist/web/site-index.d.ts.map +1 -0
- package/dist/web/site-index.js +143 -0
- package/dist/web/site-index.js.map +1 -0
- package/dist/web/site-view.d.ts +45 -0
- package/dist/web/site-view.d.ts.map +1 -0
- package/dist/web/site-view.js +67 -0
- package/dist/web/site-view.js.map +1 -0
- package/dist/web/sitemap.d.ts.map +1 -1
- package/dist/web/sitemap.js +5 -7
- package/dist/web/sitemap.js.map +1 -1
- package/dist/{admin → web}/throttle.d.ts +3 -4
- package/dist/web/throttle.d.ts.map +1 -0
- package/dist/{admin → web}/throttle.js +1 -2
- package/dist/web/throttle.js.map +1 -0
- package/dist/web/webmention-routes.d.ts +11 -0
- package/dist/web/webmention-routes.d.ts.map +1 -0
- package/dist/web/webmention-routes.js +51 -0
- package/dist/web/webmention-routes.js.map +1 -0
- package/dist/web/well-known.d.ts +2 -2
- package/dist/web/well-known.d.ts.map +1 -1
- package/dist/web/well-known.js +5 -14
- package/dist/web/well-known.js.map +1 -1
- package/dist/webmention/cited-picture.d.ts +1 -2
- package/dist/webmention/cited-picture.d.ts.map +1 -1
- package/dist/webmention/cited-picture.js +4 -6
- package/dist/webmention/cited-picture.js.map +1 -1
- package/dist/webmention/discovery.d.ts +2 -13
- package/dist/webmention/discovery.d.ts.map +1 -1
- package/dist/webmention/discovery.js +18 -73
- package/dist/webmention/discovery.js.map +1 -1
- package/dist/webmention/endpoint.d.ts +27 -0
- package/dist/webmention/endpoint.d.ts.map +1 -0
- package/dist/webmention/endpoint.js +26 -0
- package/dist/webmention/endpoint.js.map +1 -0
- package/dist/webmention/fetch-public.d.ts +18 -1
- package/dist/webmention/fetch-public.d.ts.map +1 -1
- package/dist/webmention/fetch-public.js +57 -23
- package/dist/webmention/fetch-public.js.map +1 -1
- package/dist/webmention/index.d.ts +11 -9
- package/dist/webmention/index.d.ts.map +1 -1
- package/dist/webmention/index.js +7 -6
- package/dist/webmention/index.js.map +1 -1
- package/dist/webmention/links.d.ts +0 -55
- package/dist/webmention/links.d.ts.map +1 -1
- package/dist/webmention/links.js +2 -185
- package/dist/webmention/links.js.map +1 -1
- package/dist/webmention/microformats.d.ts +1 -1
- package/dist/webmention/microformats.d.ts.map +1 -1
- package/dist/webmention/microformats.js +1 -1
- package/dist/webmention/microformats.js.map +1 -1
- package/dist/webmention/pingback.d.ts +12 -4
- package/dist/webmention/pingback.d.ts.map +1 -1
- package/dist/webmention/pingback.js +4 -102
- package/dist/webmention/pingback.js.map +1 -1
- package/dist/webmention/receive.d.ts +7 -4
- package/dist/webmention/receive.d.ts.map +1 -1
- package/dist/webmention/receive.js +30 -38
- package/dist/webmention/receive.js.map +1 -1
- package/dist/webmention/reply-context/fediverse.d.ts +29 -0
- package/dist/webmention/reply-context/fediverse.d.ts.map +1 -0
- package/dist/webmention/reply-context/fediverse.js +59 -0
- package/dist/webmention/reply-context/fediverse.js.map +1 -0
- package/dist/webmention/reply-context/json-ld.d.ts +5 -0
- package/dist/webmention/reply-context/json-ld.d.ts.map +1 -0
- package/dist/webmention/reply-context/json-ld.js +78 -0
- package/dist/webmention/reply-context/json-ld.js.map +1 -0
- package/dist/webmention/reply-context/oembed.d.ts +21 -0
- package/dist/webmention/reply-context/oembed.d.ts.map +1 -0
- package/dist/webmention/reply-context/oembed.js +137 -0
- package/dist/webmention/reply-context/oembed.js.map +1 -0
- package/dist/webmention/reply-context/page.d.ts +30 -0
- package/dist/webmention/reply-context/page.d.ts.map +1 -0
- package/dist/webmention/reply-context/page.js +134 -0
- package/dist/webmention/reply-context/page.js.map +1 -0
- package/dist/webmention/reply-context/source.d.ts +29 -0
- package/dist/webmention/reply-context/source.d.ts.map +1 -0
- package/dist/webmention/reply-context/source.js +46 -0
- package/dist/webmention/reply-context/source.js.map +1 -0
- package/dist/webmention/reply-context.d.ts +5 -34
- package/dist/webmention/reply-context.d.ts.map +1 -1
- package/dist/webmention/reply-context.js +9 -432
- package/dist/webmention/reply-context.js.map +1 -1
- package/dist/webmention/reply-contexts.d.ts +3 -3
- package/dist/webmention/reply-contexts.d.ts.map +1 -1
- package/dist/webmention/reply-contexts.js +7 -10
- package/dist/webmention/reply-contexts.js.map +1 -1
- package/dist/webmention/routes.d.ts +1 -1
- package/dist/webmention/routes.d.ts.map +1 -1
- package/dist/webmention/routes.js +5 -8
- package/dist/webmention/routes.js.map +1 -1
- package/dist/webmention/service.d.ts +7 -7
- package/dist/webmention/service.d.ts.map +1 -1
- package/dist/webmention/service.js +49 -61
- package/dist/webmention/service.js.map +1 -1
- package/dist/webmention/syndication.d.ts +3 -26
- package/dist/webmention/syndication.d.ts.map +1 -1
- package/dist/webmention/syndication.js +6 -20
- package/dist/webmention/syndication.js.map +1 -1
- package/package.json +5 -1
- package/themes/default/README.md +36 -2339
- package/themes/default/layouts/base.njk +5 -4
- package/themes/default/layouts/front-page.njk +4 -3
- package/themes/default/layouts/page.njk +2 -0
- package/themes/default/partials/comment-form.njk +1 -1
- package/themes/default/partials/contact-form.njk +1 -2
- package/themes/default/partials/conversation.njk +1 -2
- package/themes/default/partials/markdown-footer.md.njk +24 -0
- package/themes/default/partials/markdown-header.md.njk +31 -0
- package/themes/default/src/style.css +6 -6
- package/dist/admin/accounts.d.ts.map +0 -1
- package/dist/admin/accounts.js.map +0 -1
- package/dist/admin/admin-theme.d.ts.map +0 -1
- package/dist/admin/admin-theme.js.map +0 -1
- package/dist/admin/enclosure-field.d.ts.map +0 -1
- package/dist/admin/enclosure-field.js.map +0 -1
- package/dist/admin/event-field.d.ts.map +0 -1
- package/dist/admin/event-field.js.map +0 -1
- package/dist/admin/location-field.d.ts +0 -27
- package/dist/admin/location-field.d.ts.map +0 -1
- package/dist/admin/location-field.js.map +0 -1
- package/dist/admin/passwords.d.ts.map +0 -1
- package/dist/admin/passwords.js.map +0 -1
- package/dist/admin/photo-field.d.ts +0 -38
- package/dist/admin/photo-field.d.ts.map +0 -1
- package/dist/admin/photo-field.js.map +0 -1
- package/dist/admin/read-field.d.ts.map +0 -1
- package/dist/admin/read-field.js +0 -61
- package/dist/admin/read-field.js.map +0 -1
- package/dist/admin/session.d.ts.map +0 -1
- package/dist/admin/session.js.map +0 -1
- package/dist/admin/store.d.ts +0 -1025
- package/dist/admin/store.d.ts.map +0 -1
- package/dist/admin/store.js +0 -1628
- package/dist/admin/store.js.map +0 -1
- package/dist/admin/throttle.d.ts.map +0 -1
- package/dist/admin/throttle.js.map +0 -1
- package/dist/avatars/routes.d.ts.map +0 -1
- package/dist/avatars/routes.js.map +0 -1
- package/dist/contact/routes.d.ts.map +0 -1
- package/dist/contact/routes.js.map +0 -1
- package/dist/env.d.ts.map +0 -1
- package/dist/env.js.map +0 -1
- package/dist/federation/replies.d.ts.map +0 -1
- package/dist/federation/replies.js.map +0 -1
- package/dist/images/alt-text.d.ts.map +0 -1
- package/dist/images/alt-text.js.map +0 -1
- package/dist/indieauth/activity-log.d.ts.map +0 -1
- package/dist/indieauth/activity-log.js.map +0 -1
- package/dist/indieauth/app-activity.d.ts.map +0 -1
- package/dist/indieauth/app-activity.js.map +0 -1
- package/dist/indieauth/bearer.d.ts.map +0 -1
- package/dist/indieauth/bearer.js.map +0 -1
- package/dist/indieauth/client-id.d.ts.map +0 -1
- package/dist/indieauth/client-id.js.map +0 -1
- package/dist/indieauth/connected-apps.d.ts.map +0 -1
- package/dist/indieauth/connected-apps.js.map +0 -1
- package/dist/indieauth/consent.d.ts.map +0 -1
- package/dist/indieauth/consent.js.map +0 -1
- package/dist/indieauth/discovery.d.ts.map +0 -1
- package/dist/indieauth/discovery.js.map +0 -1
- package/dist/indieauth/token.d.ts.map +0 -1
- package/dist/indieauth/token.js.map +0 -1
- package/dist/mail/service.d.ts.map +0 -1
- package/dist/mail/service.js.map +0 -1
- package/dist/mail/templates.d.ts.map +0 -1
- package/dist/mail/templates.js.map +0 -1
- package/dist/notifications/preferences.d.ts.map +0 -1
- package/dist/notifications/preferences.js.map +0 -1
- package/dist/notifications/routes.d.ts.map +0 -1
- package/dist/notifications/routes.js.map +0 -1
- package/dist/plugins/federation.d.ts.map +0 -1
- package/dist/plugins/federation.js.map +0 -1
- package/dist/plugins/mount.d.ts.map +0 -1
- package/dist/plugins/mount.js.map +0 -1
- package/dist/privacy/policy.d.ts.map +0 -1
- package/dist/privacy/policy.js.map +0 -1
- package/dist/web/admin-bar.d.ts.map +0 -1
- package/dist/web/admin-bar.js.map +0 -1
- package/dist/web/assets.d.ts.map +0 -1
- package/dist/web/assets.js.map +0 -1
- package/dist/web/authors.d.ts.map +0 -1
- package/dist/web/authors.js +0 -211
- package/dist/web/authors.js.map +0 -1
- package/dist/web/documents.d.ts +0 -81
- package/dist/web/documents.d.ts.map +0 -1
- package/dist/web/documents.js.map +0 -1
- package/dist/web/errors.d.ts.map +0 -1
- package/dist/web/errors.js.map +0 -1
- package/dist/web/guids.d.ts.map +0 -1
- package/dist/web/guids.js.map +0 -1
- package/dist/web/indexnow.d.ts.map +0 -1
- package/dist/web/indexnow.js.map +0 -1
- package/dist/web/license.d.ts.map +0 -1
- package/dist/web/license.js.map +0 -1
- package/dist/web/locale.d.ts.map +0 -1
- package/dist/web/locale.js.map +0 -1
- package/dist/web/navigation.d.ts.map +0 -1
- package/dist/web/navigation.js.map +0 -1
- package/dist/web/recent.d.ts +0 -43
- package/dist/web/recent.d.ts.map +0 -1
- package/dist/web/recent.js +0 -37
- package/dist/web/recent.js.map +0 -1
- package/dist/web/sanitize.d.ts +0 -29
- package/dist/web/sanitize.d.ts.map +0 -1
- package/dist/web/sanitize.js.map +0 -1
- package/dist/web/taxonomy.d.ts.map +0 -1
- package/dist/web/taxonomy.js.map +0 -1
- package/dist/web/templates.d.ts.map +0 -1
- package/dist/web/templates.js.map +0 -1
- package/dist/web/themes.d.ts.map +0 -1
- package/dist/web/themes.js.map +0 -1
- package/dist/webmention/html.d.ts.map +0 -1
- package/dist/webmention/html.js.map +0 -1
- package/dist/webmention/public-address.d.ts.map +0 -1
- package/dist/webmention/public-address.js.map +0 -1
- /package/dist/{web → content}/license.d.ts +0 -0
- /package/dist/{web → content}/license.js +0 -0
- /package/dist/{admin → site}/admin-theme.d.ts +0 -0
- /package/dist/{admin → site}/admin-theme.js +0 -0
- /package/dist/{admin → site}/passwords.d.ts +0 -0
- /package/dist/{admin → site}/passwords.js +0 -0
- /package/dist/{indieauth → util}/client-id.d.ts +0 -0
- /package/dist/{indieauth → util}/client-id.js +0 -0
- /package/dist/{webmention → util}/public-address.d.ts +0 -0
- /package/dist/{webmention → util}/public-address.js +0 -0
- /package/dist/{env.js → web/env.js} +0 -0
|
@@ -0,0 +1,588 @@
|
|
|
1
|
+
import { openDatabase } from '../cache.js';
|
|
2
|
+
import { replyTargetOf } from './inbox-replies.js';
|
|
3
|
+
import { replyKeyOf } from './inbox.js';
|
|
4
|
+
import { nullableText } from './rows.js';
|
|
5
|
+
/** The table this store's applied versions are recorded in. */
|
|
6
|
+
export const LEDGER = 'admin_migrations';
|
|
7
|
+
/**
|
|
8
|
+
* Schema versions for the admin tables, applied in order. They keep their own
|
|
9
|
+
* ledger so their numbering never collides with the content index's.
|
|
10
|
+
*
|
|
11
|
+
* Never edit a migration that has shipped; append a new one.
|
|
12
|
+
*/
|
|
13
|
+
export const MIGRATIONS = [
|
|
14
|
+
{
|
|
15
|
+
// Users and sessions, when SQLite still held both. decision-9 moved the
|
|
16
|
+
// accounts into `data/users.json`, so nothing reads the users table any
|
|
17
|
+
// more: `migrateUsersToFile` writes its rows out on the first boot of that
|
|
18
|
+
// version and drops it. The migration stays exactly as it shipped, because
|
|
19
|
+
// a shipped migration is never edited — which does mean a brand new
|
|
20
|
+
// database creates the table here and drops it a moment later. Migration
|
|
21
|
+
// 11 is where sessions lose the foreign key into it.
|
|
22
|
+
version: 1,
|
|
23
|
+
sql: `
|
|
24
|
+
CREATE TABLE users (
|
|
25
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
26
|
+
username TEXT NOT NULL,
|
|
27
|
+
password_hash TEXT NOT NULL,
|
|
28
|
+
created_at TEXT NOT NULL
|
|
29
|
+
);
|
|
30
|
+
|
|
31
|
+
CREATE UNIQUE INDEX users_username ON users (username);
|
|
32
|
+
|
|
33
|
+
CREATE TABLE sessions (
|
|
34
|
+
id TEXT PRIMARY KEY,
|
|
35
|
+
user_id INTEGER REFERENCES users (id) ON DELETE CASCADE,
|
|
36
|
+
csrf_token TEXT NOT NULL,
|
|
37
|
+
created_at TEXT NOT NULL,
|
|
38
|
+
expires_at TEXT NOT NULL
|
|
39
|
+
);
|
|
40
|
+
|
|
41
|
+
CREATE INDEX sessions_expires_at ON sessions (expires_at);
|
|
42
|
+
CREATE INDEX sessions_user_id ON sessions (user_id);
|
|
43
|
+
`,
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
// Flash messages: a JSON array of {kind, message}, queued by the request
|
|
47
|
+
// that redirects and cleared by the one that renders them. They hang off
|
|
48
|
+
// the session rather than a cookie so they cannot be forged or replayed,
|
|
49
|
+
// and so they go when the session does.
|
|
50
|
+
version: 2,
|
|
51
|
+
sql: `ALTER TABLE sessions ADD COLUMN flash TEXT`,
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
// Site settings, when SQLite was still the source of them. decision-9
|
|
55
|
+
// moved them into content/_data/site.json, so nothing reads this table
|
|
56
|
+
// any more: `migrateSettingsToFile` writes its rows out on the first boot
|
|
57
|
+
// of that version and drops it. The migration stays exactly as it shipped,
|
|
58
|
+
// because a shipped migration is never edited — which does mean a brand
|
|
59
|
+
// new database creates the table here and drops it a moment later.
|
|
60
|
+
version: 3,
|
|
61
|
+
sql: `
|
|
62
|
+
CREATE TABLE settings (
|
|
63
|
+
key TEXT PRIMARY KEY,
|
|
64
|
+
value TEXT NOT NULL,
|
|
65
|
+
updated_at TEXT NOT NULL
|
|
66
|
+
);
|
|
67
|
+
`,
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
// The site actor's signing keys, when SQLite still held them. decision-9
|
|
71
|
+
// moved them into JWK files under `data/keys`, so nothing reads this table
|
|
72
|
+
// any more: `migrateActorKeysToFiles` writes its rows out on the first boot
|
|
73
|
+
// of that version and drops it. The migration stays exactly as it shipped,
|
|
74
|
+
// because a shipped migration is never edited — which does mean a brand new
|
|
75
|
+
// database creates the table here and drops it a moment later.
|
|
76
|
+
version: 4,
|
|
77
|
+
sql: `
|
|
78
|
+
CREATE TABLE actor_keys (
|
|
79
|
+
identifier TEXT NOT NULL,
|
|
80
|
+
algorithm TEXT NOT NULL,
|
|
81
|
+
private_jwk TEXT NOT NULL,
|
|
82
|
+
public_jwk TEXT NOT NULL,
|
|
83
|
+
created_at TEXT NOT NULL,
|
|
84
|
+
PRIMARY KEY (identifier, algorithm)
|
|
85
|
+
);
|
|
86
|
+
`,
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
// The site's followers (doc-4). Fedify's KV store is a cache and may be
|
|
90
|
+
// thrown away; a follower may not, because an actor that followed and was
|
|
91
|
+
// forgotten simply stops hearing from the site. Keyed by actor id, which
|
|
92
|
+
// is what a `Follow`, an `Undo(Follow)` and an actor's own `Delete` all
|
|
93
|
+
// name, so all three find the same row.
|
|
94
|
+
version: 5,
|
|
95
|
+
sql: `
|
|
96
|
+
CREATE TABLE followers (
|
|
97
|
+
actor_id TEXT PRIMARY KEY,
|
|
98
|
+
inbox_id TEXT NOT NULL,
|
|
99
|
+
shared_inbox_id TEXT,
|
|
100
|
+
handle TEXT,
|
|
101
|
+
name TEXT,
|
|
102
|
+
icon_url TEXT,
|
|
103
|
+
url TEXT,
|
|
104
|
+
followed_at TEXT NOT NULL
|
|
105
|
+
);
|
|
106
|
+
|
|
107
|
+
CREATE INDEX followers_followed_at ON followers (followed_at);
|
|
108
|
+
`,
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
// Inbound activities that are recorded rather than acted on: likes,
|
|
112
|
+
// boosts and replies, which a later phase surfaces. The raw JSON-LD is
|
|
113
|
+
// kept because what that phase wants out of an activity is not knowable
|
|
114
|
+
// yet. The unique index on the activity id is what makes a redelivery an
|
|
115
|
+
// update rather than a second like; SQLite counts NULLs as distinct, so
|
|
116
|
+
// an activity that arrived without an id is always its own row.
|
|
117
|
+
version: 6,
|
|
118
|
+
sql: `
|
|
119
|
+
CREATE TABLE ap_inbox (
|
|
120
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
121
|
+
activity_id TEXT,
|
|
122
|
+
activity_type TEXT NOT NULL,
|
|
123
|
+
actor_id TEXT NOT NULL,
|
|
124
|
+
object_id TEXT,
|
|
125
|
+
received_at TEXT NOT NULL,
|
|
126
|
+
json TEXT NOT NULL
|
|
127
|
+
);
|
|
128
|
+
|
|
129
|
+
CREATE UNIQUE INDEX ap_inbox_activity_id ON ap_inbox (activity_id);
|
|
130
|
+
CREATE INDEX ap_inbox_received_at ON ap_inbox (received_at);
|
|
131
|
+
CREATE INDEX ap_inbox_actor_id ON ap_inbox (actor_id);
|
|
132
|
+
`,
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
// Outbound delivery (doc-4, decision-5). Two tables, because an activity
|
|
136
|
+
// is one thing and its fate at each follower is another: keeping the
|
|
137
|
+
// JSON-LD once rather than once per follower is what makes a redelivery to
|
|
138
|
+
// a thousand followers a single read, and one row per (activity, follower)
|
|
139
|
+
// is what lets the admin see which follower did not get it.
|
|
140
|
+
//
|
|
141
|
+
// The activity's own id is the key. It is derived from the post's object
|
|
142
|
+
// id — `#create`, `#update/{hash}`, `#delete/{time}` — so re-sending the
|
|
143
|
+
// same announcement updates the row it belongs to instead of writing a
|
|
144
|
+
// second one that says the same thing.
|
|
145
|
+
version: 7,
|
|
146
|
+
sql: `
|
|
147
|
+
CREATE TABLE ap_outbound (
|
|
148
|
+
activity_id TEXT PRIMARY KEY,
|
|
149
|
+
activity_type TEXT NOT NULL,
|
|
150
|
+
object_id TEXT NOT NULL,
|
|
151
|
+
slug TEXT,
|
|
152
|
+
created_at TEXT NOT NULL,
|
|
153
|
+
json TEXT NOT NULL
|
|
154
|
+
);
|
|
155
|
+
|
|
156
|
+
CREATE INDEX ap_outbound_created_at ON ap_outbound (created_at);
|
|
157
|
+
CREATE INDEX ap_outbound_object_id ON ap_outbound (object_id);
|
|
158
|
+
|
|
159
|
+
CREATE TABLE ap_deliveries (
|
|
160
|
+
activity_id TEXT NOT NULL REFERENCES ap_outbound (activity_id) ON DELETE CASCADE,
|
|
161
|
+
actor_id TEXT NOT NULL,
|
|
162
|
+
inbox_id TEXT NOT NULL,
|
|
163
|
+
status TEXT NOT NULL,
|
|
164
|
+
error TEXT,
|
|
165
|
+
attempted_at TEXT NOT NULL,
|
|
166
|
+
PRIMARY KEY (activity_id, actor_id)
|
|
167
|
+
);
|
|
168
|
+
|
|
169
|
+
CREATE INDEX ap_deliveries_attempted_at ON ap_deliveries (attempted_at);
|
|
170
|
+
CREATE INDEX ap_deliveries_status ON ap_deliveries (status);
|
|
171
|
+
`,
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
// What a logged reply answers, so a post's comments can be counted and
|
|
175
|
+
// listed without reading every activity the site was ever sent.
|
|
176
|
+
//
|
|
177
|
+
// It is an index of the JSON beside it rather than a fact of its own: the
|
|
178
|
+
// backfill runs the very function the writer runs, so a database rebuilt
|
|
179
|
+
// from the inbox log (TASK-32) holds what this one holds.
|
|
180
|
+
version: 8,
|
|
181
|
+
sql: `
|
|
182
|
+
ALTER TABLE ap_inbox ADD COLUMN in_reply_to TEXT;
|
|
183
|
+
CREATE INDEX ap_inbox_in_reply_to ON ap_inbox (in_reply_to);
|
|
184
|
+
`,
|
|
185
|
+
run(db) {
|
|
186
|
+
const rows = db.prepare('SELECT id, json FROM ap_inbox').all();
|
|
187
|
+
const update = db.prepare('UPDATE ap_inbox SET in_reply_to = ? WHERE id = ?');
|
|
188
|
+
for (const row of rows) {
|
|
189
|
+
update.run(replyTargetOf(String(row['json'])), Number(row['id']));
|
|
190
|
+
}
|
|
191
|
+
},
|
|
192
|
+
},
|
|
193
|
+
{
|
|
194
|
+
// Relay subscriptions (FEP-ae0c, TASK-40). The list of relays is a
|
|
195
|
+
// setting mirrored to site.json; this is where each handshake stands,
|
|
196
|
+
// which is operational state and derivable again from the file — a relay
|
|
197
|
+
// in the list with no row here is simply followed again on the next boot.
|
|
198
|
+
//
|
|
199
|
+
// Keyed by the inbox rather than by the relay's actor id, because the
|
|
200
|
+
// inbox is the only thing known when the `Follow` goes out: the actor id
|
|
201
|
+
// arrives with the `Accept`, days later if a human has to approve it.
|
|
202
|
+
version: 9,
|
|
203
|
+
sql: `
|
|
204
|
+
CREATE TABLE ap_relays (
|
|
205
|
+
inbox_id TEXT PRIMARY KEY,
|
|
206
|
+
actor_id TEXT,
|
|
207
|
+
state TEXT NOT NULL,
|
|
208
|
+
reason TEXT,
|
|
209
|
+
follow_id TEXT,
|
|
210
|
+
created_at TEXT NOT NULL,
|
|
211
|
+
updated_at TEXT NOT NULL
|
|
212
|
+
);
|
|
213
|
+
|
|
214
|
+
CREATE INDEX ap_relays_follow_id ON ap_relays (follow_id);
|
|
215
|
+
CREATE INDEX ap_relays_actor_id ON ap_relays (actor_id);
|
|
216
|
+
`,
|
|
217
|
+
},
|
|
218
|
+
{
|
|
219
|
+
// The CMS's own operational state, as opposed to the site's settings. It
|
|
220
|
+
// is a table of its own rather than more rows in `settings` because the
|
|
221
|
+
// number of settings is what decides whether a site is seeded from
|
|
222
|
+
// content/_data/site.json, and because nothing here belongs in that file.
|
|
223
|
+
version: 10,
|
|
224
|
+
sql: `
|
|
225
|
+
CREATE TABLE cms_state (
|
|
226
|
+
key TEXT PRIMARY KEY,
|
|
227
|
+
value TEXT NOT NULL,
|
|
228
|
+
updated_at TEXT NOT NULL
|
|
229
|
+
);
|
|
230
|
+
`,
|
|
231
|
+
},
|
|
232
|
+
{
|
|
233
|
+
// Sessions without the foreign key into `users`, because there is no users
|
|
234
|
+
// table any more: decision-9 moved the accounts into `data/users.json` and
|
|
235
|
+
// `migrateUsersToFile` drops the table on the boot after this migration
|
|
236
|
+
// runs. The constraint could not survive that either way — with
|
|
237
|
+
// `foreign_keys` on, dropping the parent cascades every login away, and an
|
|
238
|
+
// insert afterwards fails with "no such table: main.users" — and SQLite
|
|
239
|
+
// cannot drop a constraint in place, so the table is rebuilt. Every row is
|
|
240
|
+
// copied across, so a site upgrading keeps the logins it had. What the key
|
|
241
|
+
// was doing is done in the admin guard instead: a session naming a user
|
|
242
|
+
// the file no longer holds is not a session.
|
|
243
|
+
version: 11,
|
|
244
|
+
sql: `
|
|
245
|
+
CREATE TABLE sessions_without_users (
|
|
246
|
+
id TEXT PRIMARY KEY,
|
|
247
|
+
user_id INTEGER,
|
|
248
|
+
csrf_token TEXT NOT NULL,
|
|
249
|
+
created_at TEXT NOT NULL,
|
|
250
|
+
expires_at TEXT NOT NULL,
|
|
251
|
+
flash TEXT
|
|
252
|
+
);
|
|
253
|
+
|
|
254
|
+
INSERT INTO sessions_without_users (
|
|
255
|
+
id, user_id, csrf_token, created_at, expires_at, flash
|
|
256
|
+
)
|
|
257
|
+
SELECT id, user_id, csrf_token, created_at, expires_at, flash FROM sessions;
|
|
258
|
+
|
|
259
|
+
DROP TABLE sessions;
|
|
260
|
+
ALTER TABLE sessions_without_users RENAME TO sessions;
|
|
261
|
+
|
|
262
|
+
CREATE INDEX sessions_expires_at ON sessions (expires_at);
|
|
263
|
+
CREATE INDEX sessions_user_id ON sessions (user_id);
|
|
264
|
+
`,
|
|
265
|
+
},
|
|
266
|
+
{
|
|
267
|
+
// The outcomes without the payloads. decision-9 replaces "send this stored
|
|
268
|
+
// activity again" with "send this post as it now reads", so nothing needs
|
|
269
|
+
// the JSON-LD any more and `ap_outbound` goes: an activity rebuilt from
|
|
270
|
+
// the file is the current answer, and a copy of what went out last time
|
|
271
|
+
// could only ever be a staler one.
|
|
272
|
+
//
|
|
273
|
+
// What that table held about an activity that an outcome cannot do
|
|
274
|
+
// without — its type, the object it was about and the slug — moves onto
|
|
275
|
+
// the outcome row, which is now the whole of what SQLite remembers about
|
|
276
|
+
// anything the site has sent. The foreign key has to go with the parent,
|
|
277
|
+
// and SQLite cannot drop a constraint in place, so `ap_deliveries` is
|
|
278
|
+
// rebuilt the way migration 11 rebuilt `sessions`. Every row that has an
|
|
279
|
+
// activity to name is carried across as a courtesy: this table is a cache
|
|
280
|
+
// and is allowed to be empty, so a row whose activity is somehow missing
|
|
281
|
+
// is dropped rather than invented a type for.
|
|
282
|
+
version: 12,
|
|
283
|
+
sql: `
|
|
284
|
+
CREATE TABLE ap_deliveries_standalone (
|
|
285
|
+
activity_id TEXT NOT NULL,
|
|
286
|
+
activity_type TEXT NOT NULL,
|
|
287
|
+
object_id TEXT NOT NULL,
|
|
288
|
+
slug TEXT,
|
|
289
|
+
actor_id TEXT NOT NULL,
|
|
290
|
+
inbox_id TEXT NOT NULL,
|
|
291
|
+
status TEXT NOT NULL,
|
|
292
|
+
error TEXT,
|
|
293
|
+
attempted_at TEXT NOT NULL,
|
|
294
|
+
PRIMARY KEY (activity_id, actor_id)
|
|
295
|
+
);
|
|
296
|
+
|
|
297
|
+
INSERT INTO ap_deliveries_standalone (
|
|
298
|
+
activity_id, activity_type, object_id, slug,
|
|
299
|
+
actor_id, inbox_id, status, error, attempted_at
|
|
300
|
+
)
|
|
301
|
+
SELECT
|
|
302
|
+
ap_deliveries.activity_id,
|
|
303
|
+
ap_outbound.activity_type,
|
|
304
|
+
ap_outbound.object_id,
|
|
305
|
+
ap_outbound.slug,
|
|
306
|
+
ap_deliveries.actor_id,
|
|
307
|
+
ap_deliveries.inbox_id,
|
|
308
|
+
ap_deliveries.status,
|
|
309
|
+
ap_deliveries.error,
|
|
310
|
+
ap_deliveries.attempted_at
|
|
311
|
+
FROM ap_deliveries
|
|
312
|
+
JOIN ap_outbound ON ap_outbound.activity_id = ap_deliveries.activity_id;
|
|
313
|
+
|
|
314
|
+
DROP TABLE ap_deliveries;
|
|
315
|
+
ALTER TABLE ap_deliveries_standalone RENAME TO ap_deliveries;
|
|
316
|
+
|
|
317
|
+
CREATE INDEX ap_deliveries_attempted_at ON ap_deliveries (attempted_at);
|
|
318
|
+
CREATE INDEX ap_deliveries_status ON ap_deliveries (status);
|
|
319
|
+
CREATE INDEX ap_deliveries_object_id ON ap_deliveries (object_id, attempted_at);
|
|
320
|
+
|
|
321
|
+
DROP TABLE ap_outbound;
|
|
322
|
+
`,
|
|
323
|
+
},
|
|
324
|
+
{
|
|
325
|
+
// What a post's conversation is read by (TASK-49). `in_reply_to` already
|
|
326
|
+
// had an index because a post's replies are counted on every feed; the
|
|
327
|
+
// object an activity is about had none, and that is the column a like, a
|
|
328
|
+
// boost, a `Delete` of a reply and an `Undo` of a like are all found by.
|
|
329
|
+
version: 13,
|
|
330
|
+
sql: `
|
|
331
|
+
CREATE INDEX ap_inbox_object_id ON ap_inbox (object_id);
|
|
332
|
+
`,
|
|
333
|
+
},
|
|
334
|
+
{
|
|
335
|
+
// Native comments (TASK-50), which are files under
|
|
336
|
+
// `content/_data/comments/` and nothing else: this table is an index of
|
|
337
|
+
// them, emptied and read back on every boot exactly as `followers` and
|
|
338
|
+
// `ap_inbox` are. Nothing here is a fact the files do not carry.
|
|
339
|
+
//
|
|
340
|
+
// The id is the comment's own name rather than a row number, because it is
|
|
341
|
+
// what a reply names, what a moderation form posts and what the page
|
|
342
|
+
// anchors on — all three have to survive a rebuilt index. The author's
|
|
343
|
+
// name and email are indexed together because that pair is the whole of
|
|
344
|
+
// WordPress's auto-approval rule.
|
|
345
|
+
version: 14,
|
|
346
|
+
sql: `
|
|
347
|
+
CREATE TABLE comments (
|
|
348
|
+
id TEXT PRIMARY KEY,
|
|
349
|
+
slug TEXT NOT NULL,
|
|
350
|
+
permalink TEXT NOT NULL,
|
|
351
|
+
source TEXT NOT NULL,
|
|
352
|
+
kind TEXT NOT NULL,
|
|
353
|
+
status TEXT NOT NULL,
|
|
354
|
+
author_name TEXT NOT NULL,
|
|
355
|
+
author_url TEXT,
|
|
356
|
+
author_email TEXT,
|
|
357
|
+
markdown TEXT NOT NULL,
|
|
358
|
+
html TEXT NOT NULL,
|
|
359
|
+
submitted_at TEXT NOT NULL,
|
|
360
|
+
address_hash TEXT,
|
|
361
|
+
in_reply_to TEXT
|
|
362
|
+
);
|
|
363
|
+
|
|
364
|
+
CREATE INDEX comments_slug ON comments (slug, submitted_at);
|
|
365
|
+
CREATE INDEX comments_status ON comments (status, submitted_at);
|
|
366
|
+
CREATE INDEX comments_author ON comments (author_name, author_email, status);
|
|
367
|
+
`,
|
|
368
|
+
},
|
|
369
|
+
{
|
|
370
|
+
// Webmentions (TASK-51), which are two different things and so two changes.
|
|
371
|
+
//
|
|
372
|
+
// A comment may now say where it lives, because a webmention lives on
|
|
373
|
+
// somebody else's page: it is what a later webmention from that page is
|
|
374
|
+
// recognised by, and what the thread's permalink points at for an entry
|
|
375
|
+
// this site did not host. Its author may now have a face, out of the source
|
|
376
|
+
// page's `h-card`. Both columns are an index of the comment files like
|
|
377
|
+
// every other column of this table, so nothing backfills them — the rebuild
|
|
378
|
+
// on the next boot does.
|
|
379
|
+
//
|
|
380
|
+
// What the site has sent is the other half, and it is a cache of outcomes
|
|
381
|
+
// exactly as `ap_deliveries` is: no payload, one row per (post, target),
|
|
382
|
+
// and a resend moves the row rather than adding to it. It is a table of
|
|
383
|
+
// its own rather than a use of `ap_deliveries` because the federation
|
|
384
|
+
// screen counts that table per activity, and a webmention is not one.
|
|
385
|
+
version: 15,
|
|
386
|
+
sql: `
|
|
387
|
+
ALTER TABLE comments ADD COLUMN url TEXT;
|
|
388
|
+
ALTER TABLE comments ADD COLUMN author_avatar TEXT;
|
|
389
|
+
|
|
390
|
+
CREATE TABLE webmentions_sent (
|
|
391
|
+
slug TEXT NOT NULL,
|
|
392
|
+
source TEXT NOT NULL,
|
|
393
|
+
target TEXT NOT NULL,
|
|
394
|
+
endpoint TEXT,
|
|
395
|
+
status TEXT NOT NULL,
|
|
396
|
+
error TEXT,
|
|
397
|
+
attempted_at TEXT NOT NULL,
|
|
398
|
+
PRIMARY KEY (slug, target)
|
|
399
|
+
);
|
|
400
|
+
|
|
401
|
+
CREATE INDEX webmentions_sent_attempted_at ON webmentions_sent (attempted_at);
|
|
402
|
+
`,
|
|
403
|
+
},
|
|
404
|
+
{
|
|
405
|
+
// Password reset tokens (TASK-54). They sit beside the sessions, and for
|
|
406
|
+
// the same reason: a reset link is a second, shorter-lived way of proving
|
|
407
|
+
// you are somebody, and it is a cache — losing one costs the person
|
|
408
|
+
// nothing but a second click on Forgot password. So `data/users.json`
|
|
409
|
+
// stays the whole of what a site must back up, and a restart, a rebuild or
|
|
410
|
+
// a `geekity rebuild` invalidates every link in flight, which is the safe
|
|
411
|
+
// direction to fail in.
|
|
412
|
+
//
|
|
413
|
+
// The key is the token's SHA-256 rather than the token, so the database
|
|
414
|
+
// holds nothing a working link could be rebuilt from: somebody who reads
|
|
415
|
+
// this table — a backup, a stray copy of the file — learns that a reset
|
|
416
|
+
// was asked for and nothing else. It is a plain hash rather than argon2
|
|
417
|
+
// because the token is 256 random bits and there is no guess to slow down;
|
|
418
|
+
// what argon2 buys on a password it cannot buy here.
|
|
419
|
+
version: 16,
|
|
420
|
+
sql: `
|
|
421
|
+
CREATE TABLE password_resets (
|
|
422
|
+
token_hash TEXT PRIMARY KEY,
|
|
423
|
+
user_id INTEGER NOT NULL,
|
|
424
|
+
created_at TEXT NOT NULL,
|
|
425
|
+
expires_at TEXT NOT NULL
|
|
426
|
+
);
|
|
427
|
+
|
|
428
|
+
CREATE INDEX password_resets_expires_at ON password_resets (expires_at);
|
|
429
|
+
CREATE INDEX password_resets_user_id ON password_resets (user_id);
|
|
430
|
+
`,
|
|
431
|
+
},
|
|
432
|
+
{
|
|
433
|
+
// The two halves of a notification's one-click links (TASK-55).
|
|
434
|
+
//
|
|
435
|
+
// `spent_tokens` is what makes such a link single use. The link itself is
|
|
436
|
+
// not stored — it is an HMAC-signed claim, so that a moderation link in an
|
|
437
|
+
// inbox goes on working across a rebuilt or restored cache, which is a
|
|
438
|
+
// thing decision-9 says a site may do whenever it likes. Only the fact
|
|
439
|
+
// that one has been used is written down, keyed by its SHA-256 for the
|
|
440
|
+
// reason `password_resets` is, and swept once the signature has expired.
|
|
441
|
+
// Losing this table forgets which links were spent, and that costs a site
|
|
442
|
+
// nothing: every action a link performs is idempotent, so doing it a
|
|
443
|
+
// second time is doing it once.
|
|
444
|
+
//
|
|
445
|
+
// `comments.notify` is the commenter's "tell me about replies", which the
|
|
446
|
+
// file says and this column indexes like every other column of that table.
|
|
447
|
+
// Nothing backfills it: the rebuild on the next boot does, and a comment
|
|
448
|
+
// written before this shipped never asked to be told.
|
|
449
|
+
version: 17,
|
|
450
|
+
sql: `
|
|
451
|
+
CREATE TABLE spent_tokens (
|
|
452
|
+
token_hash TEXT PRIMARY KEY,
|
|
453
|
+
spent_at TEXT NOT NULL,
|
|
454
|
+
expires_at TEXT NOT NULL
|
|
455
|
+
);
|
|
456
|
+
|
|
457
|
+
CREATE INDEX spent_tokens_expires_at ON spent_tokens (expires_at);
|
|
458
|
+
|
|
459
|
+
ALTER TABLE comments ADD COLUMN notify INTEGER NOT NULL DEFAULT 0;
|
|
460
|
+
`,
|
|
461
|
+
},
|
|
462
|
+
{
|
|
463
|
+
// Followers belong to a user, and the inbox log says who was told
|
|
464
|
+
// (decision-14, TASK-68). The site actor is gone, so there is nothing to
|
|
465
|
+
// backfill: the `followers` table is rebuilt on every boot from the files
|
|
466
|
+
// under `content/_data/federation/{username}/`, and the rows a site
|
|
467
|
+
// carried for the site actor name nobody. The table is therefore dropped
|
|
468
|
+
// and made again with the new key rather than altered — `actor_id` was its
|
|
469
|
+
// primary key, and one actor may follow two of this site's users.
|
|
470
|
+
version: 18,
|
|
471
|
+
sql: `
|
|
472
|
+
DROP TABLE followers;
|
|
473
|
+
|
|
474
|
+
CREATE TABLE followers (
|
|
475
|
+
username TEXT NOT NULL,
|
|
476
|
+
actor_id TEXT NOT NULL,
|
|
477
|
+
inbox_id TEXT NOT NULL,
|
|
478
|
+
shared_inbox_id TEXT,
|
|
479
|
+
handle TEXT,
|
|
480
|
+
name TEXT,
|
|
481
|
+
icon_url TEXT,
|
|
482
|
+
url TEXT,
|
|
483
|
+
followed_at TEXT NOT NULL,
|
|
484
|
+
PRIMARY KEY (username, actor_id)
|
|
485
|
+
);
|
|
486
|
+
|
|
487
|
+
CREATE INDEX followers_followed_at ON followers (followed_at);
|
|
488
|
+
CREATE INDEX followers_actor_id ON followers (actor_id);
|
|
489
|
+
|
|
490
|
+
ALTER TABLE ap_inbox ADD COLUMN recipient TEXT;
|
|
491
|
+
|
|
492
|
+
CREATE INDEX ap_inbox_recipient ON ap_inbox (recipient);
|
|
493
|
+
`,
|
|
494
|
+
},
|
|
495
|
+
{
|
|
496
|
+
// The avatar proxy asks, per request for a picture, whether its URL is one
|
|
497
|
+
// the site has recorded (TASK-134). Both columns are indexed so that
|
|
498
|
+
// question is a lookup rather than a scan of every follower and comment.
|
|
499
|
+
version: 19,
|
|
500
|
+
sql: `
|
|
501
|
+
CREATE INDEX followers_icon_url ON followers (icon_url);
|
|
502
|
+
CREATE INDEX comments_author_avatar ON comments (author_avatar);
|
|
503
|
+
`,
|
|
504
|
+
},
|
|
505
|
+
{
|
|
506
|
+
// What a comment has had removed for privacy (TASK-135), as the JSON list
|
|
507
|
+
// its file carries. Nothing backfills it: the rebuild on the next boot
|
|
508
|
+
// does, and a comment nothing was removed from leaves it `NULL`.
|
|
509
|
+
version: 20,
|
|
510
|
+
sql: `ALTER TABLE comments ADD COLUMN redacted TEXT;`,
|
|
511
|
+
},
|
|
512
|
+
{
|
|
513
|
+
// The profiles of actors who are not followers (TASK-184): whoever liked,
|
|
514
|
+
// boosted, answered or quoted a post, as their actor document named them.
|
|
515
|
+
// A cache and nothing else (decision-9). Nothing backfills it here: the
|
|
516
|
+
// profile sweep fetches every actor the inbox log names that has none.
|
|
517
|
+
version: 21,
|
|
518
|
+
sql: `
|
|
519
|
+
CREATE TABLE actor_profiles (
|
|
520
|
+
actor_id TEXT PRIMARY KEY,
|
|
521
|
+
handle TEXT,
|
|
522
|
+
name TEXT,
|
|
523
|
+
icon_url TEXT,
|
|
524
|
+
url TEXT,
|
|
525
|
+
fetched_at TEXT NOT NULL
|
|
526
|
+
);
|
|
527
|
+
|
|
528
|
+
CREATE INDEX actor_profiles_icon_url ON actor_profiles (icon_url);
|
|
529
|
+
`,
|
|
530
|
+
},
|
|
531
|
+
{
|
|
532
|
+
version: 22,
|
|
533
|
+
sql: `ALTER TABLE comments ADD COLUMN rsvp TEXT;`,
|
|
534
|
+
},
|
|
535
|
+
{
|
|
536
|
+
// What a \`/replies/\` key names (TASK-327), so resolving one is a lookup
|
|
537
|
+
// rather than a walk of every comment and logged reply. A note's key is
|
|
538
|
+
// its id's and is backfilled here; a native comment's hangs off the base
|
|
539
|
+
// URL, which a migration does not know, so those rows are filled when the
|
|
540
|
+
// store is opened with one, as they are whenever that base changes.
|
|
541
|
+
version: 23,
|
|
542
|
+
sql: `
|
|
543
|
+
ALTER TABLE comments ADD COLUMN replies_key TEXT;
|
|
544
|
+
ALTER TABLE comments ADD COLUMN keys_base TEXT;
|
|
545
|
+
CREATE INDEX comments_replies_key ON comments (replies_key);
|
|
546
|
+
ALTER TABLE ap_inbox ADD COLUMN reply_key TEXT;
|
|
547
|
+
CREATE INDEX ap_inbox_reply_key ON ap_inbox (reply_key);
|
|
548
|
+
`,
|
|
549
|
+
run(db) {
|
|
550
|
+
const rows = db.prepare('SELECT id, activity_type, object_id, json FROM ap_inbox').all();
|
|
551
|
+
const update = db.prepare('UPDATE ap_inbox SET reply_key = ? WHERE id = ?');
|
|
552
|
+
for (const row of rows) {
|
|
553
|
+
const key = replyKeyOf({
|
|
554
|
+
activityType: String(row['activity_type']),
|
|
555
|
+
objectId: nullableText(row['object_id']),
|
|
556
|
+
json: String(row['json']),
|
|
557
|
+
});
|
|
558
|
+
update.run(key, Number(row['id']));
|
|
559
|
+
}
|
|
560
|
+
},
|
|
561
|
+
},
|
|
562
|
+
{
|
|
563
|
+
version: 24,
|
|
564
|
+
sql: `ALTER TABLE comments ADD COLUMN via TEXT;`,
|
|
565
|
+
},
|
|
566
|
+
{
|
|
567
|
+
version: 25,
|
|
568
|
+
sql: `ALTER TABLE ap_inbox ADD COLUMN fetched INTEGER NOT NULL DEFAULT 0;`,
|
|
569
|
+
},
|
|
570
|
+
{
|
|
571
|
+
// A comment's key is its id (decision-51), so the key worked out from its
|
|
572
|
+
// guid against the base URL has nothing left to say.
|
|
573
|
+
version: 26,
|
|
574
|
+
sql: `
|
|
575
|
+
DROP INDEX comments_replies_key;
|
|
576
|
+
ALTER TABLE comments DROP COLUMN replies_key;
|
|
577
|
+
ALTER TABLE comments DROP COLUMN keys_base;
|
|
578
|
+
ALTER TABLE comments ADD COLUMN migrated INTEGER NOT NULL DEFAULT 0;
|
|
579
|
+
ALTER TABLE comments ADD COLUMN origin TEXT;
|
|
580
|
+
ALTER TABLE comments ADD COLUMN user TEXT;
|
|
581
|
+
ALTER TABLE comments ADD COLUMN actor TEXT;
|
|
582
|
+
`,
|
|
583
|
+
},
|
|
584
|
+
];
|
|
585
|
+
export function openAdminDatabase(dataDir, now) {
|
|
586
|
+
return openDatabase({ dataDir, ledger: LEDGER, migrations: MIGRATIONS, now });
|
|
587
|
+
}
|
|
588
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/store/schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import type { DatabaseSync } from 'node:sqlite';
|
|
2
|
+
import type { Clock } from '../util/clock.ts';
|
|
3
|
+
/**
|
|
4
|
+
* A login, or the anonymous session that carries a CSRF token to a visitor who
|
|
5
|
+
* has not logged in yet.
|
|
6
|
+
*/
|
|
7
|
+
export interface Session {
|
|
8
|
+
/** 256 random bits, hex encoded. This is the value in the cookie. */
|
|
9
|
+
readonly id: string;
|
|
10
|
+
/** The user, or `null` while the session is anonymous. */
|
|
11
|
+
readonly userId: number | null;
|
|
12
|
+
/**
|
|
13
|
+
* The token every mutating form on this session has to send back. It is a
|
|
14
|
+
* second secret rather than the session id, so a token that leaks through a
|
|
15
|
+
* form, a log or a referrer is not a login.
|
|
16
|
+
*/
|
|
17
|
+
readonly csrfToken: string;
|
|
18
|
+
/** When the session was created, as an ISO 8601 instant. */
|
|
19
|
+
readonly createdAt: string;
|
|
20
|
+
/** When it stops being valid, as an ISO 8601 instant. */
|
|
21
|
+
readonly expiresAt: string;
|
|
22
|
+
}
|
|
23
|
+
/** How loudly a flash message reads. */
|
|
24
|
+
export type FlashKind = 'notice' | 'warning' | 'error';
|
|
25
|
+
/**
|
|
26
|
+
* One message queued for the next page a session asks for.
|
|
27
|
+
*
|
|
28
|
+
* Flashes live on the session row rather than in a cookie so they cannot be
|
|
29
|
+
* replayed, forged or grown past a cookie's size, and so they disappear with
|
|
30
|
+
* the session.
|
|
31
|
+
*/
|
|
32
|
+
export interface FlashMessage {
|
|
33
|
+
/** Which style the message renders in. */
|
|
34
|
+
kind: FlashKind;
|
|
35
|
+
/** The message itself, in plain text. Templates escape it. */
|
|
36
|
+
message: string;
|
|
37
|
+
}
|
|
38
|
+
/** What {@link SessionStore.createSession} is given. */
|
|
39
|
+
export interface CreateSessionInput {
|
|
40
|
+
/** The user logging in, or `null` for the pre-login CSRF session. */
|
|
41
|
+
userId: number | null;
|
|
42
|
+
/** How long the session lasts, in seconds. */
|
|
43
|
+
lifetimeSeconds: number;
|
|
44
|
+
/** The clock, injectable so expiry is testable. Defaults to now. */
|
|
45
|
+
now?: Date | undefined;
|
|
46
|
+
}
|
|
47
|
+
/** How long a session id is, in bytes. 32 is the 256 bits doc-5 asks for. */
|
|
48
|
+
export declare const SESSION_ID_BYTES = 32;
|
|
49
|
+
export interface SessionStore {
|
|
50
|
+
/** Start a session and hand back its id and CSRF token. */
|
|
51
|
+
createSession(input: CreateSessionInput): Session;
|
|
52
|
+
/**
|
|
53
|
+
* The session behind an id, or `undefined` when there is none or it has
|
|
54
|
+
* expired. An expired row is deleted on the way past, so an expired session
|
|
55
|
+
* is gone rather than merely ignored.
|
|
56
|
+
*/
|
|
57
|
+
getSession(id: string, now?: Date): Session | undefined;
|
|
58
|
+
/** Delete a session. Returns `false` when there was nothing to delete. */
|
|
59
|
+
deleteSession(id: string): boolean;
|
|
60
|
+
/**
|
|
61
|
+
* End every session a user has, optionally sparing one. Returns how many
|
|
62
|
+
* went.
|
|
63
|
+
*
|
|
64
|
+
* `except` is what makes a password change sign out every other browser
|
|
65
|
+
* holding that login without signing out the one doing the changing.
|
|
66
|
+
*/
|
|
67
|
+
deleteSessionsForUser(userId: number, options?: {
|
|
68
|
+
except?: string;
|
|
69
|
+
}): number;
|
|
70
|
+
/** Delete every expired session. Returns how many went. */
|
|
71
|
+
pruneSessions(now?: Date): number;
|
|
72
|
+
/**
|
|
73
|
+
* Queue a message for the next page this session asks for. Does nothing when
|
|
74
|
+
* there is no such session, which is what a logout followed by a flash is.
|
|
75
|
+
*/
|
|
76
|
+
pushFlash(sessionId: string, entry: FlashMessage): void;
|
|
77
|
+
/**
|
|
78
|
+
* Every queued message for a session, in order, removed as it is read, so a
|
|
79
|
+
* flash survives exactly one page and no more. A read-only store leaves them
|
|
80
|
+
* queued, for the worker that takes over to show again.
|
|
81
|
+
*/
|
|
82
|
+
takeFlash(sessionId: string): FlashMessage[];
|
|
83
|
+
}
|
|
84
|
+
export declare function openSessionStore(db: DatabaseSync, isReadOnly: () => boolean, clock: Clock): SessionStore;
|
|
85
|
+
/**
|
|
86
|
+
* 256 unguessable bits, hex encoded. Session ids, CSRF tokens and password
|
|
87
|
+
* reset tokens are all this.
|
|
88
|
+
*/
|
|
89
|
+
export declare function randomToken(): string;
|
|
90
|
+
//# sourceMappingURL=sessions.d.ts.map
|