@krantho/api 0.0.0-stage → 1.0.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/LICENSE +21 -0
- package/dist/active-locales.d.ts +11 -0
- package/dist/active-locales.d.ts.map +1 -0
- package/dist/active-locales.js +31 -0
- package/dist/active-locales.js.map +1 -0
- package/dist/assistant/access.d.ts +25 -0
- package/dist/assistant/access.d.ts.map +1 -0
- package/dist/assistant/access.js +35 -0
- package/dist/assistant/access.js.map +1 -0
- package/dist/assistant/agent-loop.d.ts +31 -0
- package/dist/assistant/agent-loop.d.ts.map +1 -0
- package/dist/assistant/agent-loop.js +183 -0
- package/dist/assistant/agent-loop.js.map +1 -0
- package/dist/assistant/call-handler.d.ts +15 -0
- package/dist/assistant/call-handler.d.ts.map +1 -0
- package/dist/assistant/call-handler.js +24 -0
- package/dist/assistant/call-handler.js.map +1 -0
- package/dist/assistant/chat-handler.d.ts +8 -0
- package/dist/assistant/chat-handler.d.ts.map +1 -0
- package/dist/assistant/chat-handler.js +79 -0
- package/dist/assistant/chat-handler.js.map +1 -0
- package/dist/assistant/chat-request.d.ts +16 -0
- package/dist/assistant/chat-request.d.ts.map +1 -0
- package/dist/assistant/chat-request.js +59 -0
- package/dist/assistant/chat-request.js.map +1 -0
- package/dist/assistant/confirm-handler.d.ts +3 -0
- package/dist/assistant/confirm-handler.d.ts.map +1 -0
- package/dist/assistant/confirm-handler.js +39 -0
- package/dist/assistant/confirm-handler.js.map +1 -0
- package/dist/assistant/document-change.d.ts +22 -0
- package/dist/assistant/document-change.d.ts.map +1 -0
- package/dist/assistant/document-change.js +74 -0
- package/dist/assistant/document-change.js.map +1 -0
- package/dist/assistant/document-lock.d.ts +12 -0
- package/dist/assistant/document-lock.d.ts.map +1 -0
- package/dist/assistant/document-lock.js +14 -0
- package/dist/assistant/document-lock.js.map +1 -0
- package/dist/assistant/execute-action.d.ts +19 -0
- package/dist/assistant/execute-action.d.ts.map +1 -0
- package/dist/assistant/execute-action.js +167 -0
- package/dist/assistant/execute-action.js.map +1 -0
- package/dist/assistant/pending-action.d.ts +86 -0
- package/dist/assistant/pending-action.d.ts.map +1 -0
- package/dist/assistant/pending-action.js +104 -0
- package/dist/assistant/pending-action.js.map +1 -0
- package/dist/assistant/protocol.d.ts +120 -0
- package/dist/assistant/protocol.d.ts.map +1 -0
- package/dist/assistant/protocol.js +2 -0
- package/dist/assistant/protocol.js.map +1 -0
- package/dist/assistant/routes.d.ts +4 -0
- package/dist/assistant/routes.d.ts.map +1 -0
- package/dist/assistant/routes.js +10 -0
- package/dist/assistant/routes.js.map +1 -0
- package/dist/assistant/sse-stream.d.ts +15 -0
- package/dist/assistant/sse-stream.d.ts.map +1 -0
- package/dist/assistant/sse-stream.js +61 -0
- package/dist/assistant/sse-stream.js.map +1 -0
- package/dist/assistant/status-handler.d.ts +8 -0
- package/dist/assistant/status-handler.d.ts.map +1 -0
- package/dist/assistant/status-handler.js +39 -0
- package/dist/assistant/status-handler.js.map +1 -0
- package/dist/assistant/system-prompt.d.ts +18 -0
- package/dist/assistant/system-prompt.d.ts.map +1 -0
- package/dist/assistant/system-prompt.js +48 -0
- package/dist/assistant/system-prompt.js.map +1 -0
- package/dist/assistant/tool-registry.d.ts +19 -0
- package/dist/assistant/tool-registry.d.ts.map +1 -0
- package/dist/assistant/tool-registry.js +69 -0
- package/dist/assistant/tool-registry.js.map +1 -0
- package/dist/assistant/tools/action-tools.d.ts +4 -0
- package/dist/assistant/tools/action-tools.d.ts.map +1 -0
- package/dist/assistant/tools/action-tools.js +132 -0
- package/dist/assistant/tools/action-tools.js.map +1 -0
- package/dist/assistant/tools/aeo-tools.d.ts +4 -0
- package/dist/assistant/tools/aeo-tools.d.ts.map +1 -0
- package/dist/assistant/tools/aeo-tools.js +162 -0
- package/dist/assistant/tools/aeo-tools.js.map +1 -0
- package/dist/assistant/tools/define-tool.d.ts +55 -0
- package/dist/assistant/tools/define-tool.d.ts.map +1 -0
- package/dist/assistant/tools/define-tool.js +5 -0
- package/dist/assistant/tools/define-tool.js.map +1 -0
- package/dist/assistant/tools/draft-tools.d.ts +7 -0
- package/dist/assistant/tools/draft-tools.d.ts.map +1 -0
- package/dist/assistant/tools/draft-tools.js +105 -0
- package/dist/assistant/tools/draft-tools.js.map +1 -0
- package/dist/assistant/tools/draft-write.d.ts +49 -0
- package/dist/assistant/tools/draft-write.d.ts.map +1 -0
- package/dist/assistant/tools/draft-write.js +122 -0
- package/dist/assistant/tools/draft-write.js.map +1 -0
- package/dist/assistant/tools/faq-fit.d.ts +32 -0
- package/dist/assistant/tools/faq-fit.d.ts.map +1 -0
- package/dist/assistant/tools/faq-fit.js +96 -0
- package/dist/assistant/tools/faq-fit.js.map +1 -0
- package/dist/assistant/tools/read-tools.d.ts +13 -0
- package/dist/assistant/tools/read-tools.d.ts.map +1 -0
- package/dist/assistant/tools/read-tools.js +242 -0
- package/dist/assistant/tools/read-tools.js.map +1 -0
- package/dist/assistant/tools/seo-tools.d.ts +4 -0
- package/dist/assistant/tools/seo-tools.d.ts.map +1 -0
- package/dist/assistant/tools/seo-tools.js +152 -0
- package/dist/assistant/tools/seo-tools.js.map +1 -0
- package/dist/assistant/tools/support.d.ts +35 -0
- package/dist/assistant/tools/support.d.ts.map +1 -0
- package/dist/assistant/tools/support.js +63 -0
- package/dist/assistant/tools/support.js.map +1 -0
- package/dist/assistant/untrusted.d.ts +15 -0
- package/dist/assistant/untrusted.d.ts.map +1 -0
- package/dist/assistant/untrusted.js +27 -0
- package/dist/assistant/untrusted.js.map +1 -0
- package/dist/assistant/write-policy.d.ts +20 -0
- package/dist/assistant/write-policy.d.ts.map +1 -0
- package/dist/assistant/write-policy.js +32 -0
- package/dist/assistant/write-policy.js.map +1 -0
- package/dist/auth-tokens.d.ts +31 -0
- package/dist/auth-tokens.d.ts.map +1 -0
- package/dist/auth-tokens.js +35 -0
- package/dist/auth-tokens.js.map +1 -0
- package/dist/content-change.d.ts +16 -0
- package/dist/content-change.d.ts.map +1 -0
- package/dist/content-change.js +34 -0
- package/dist/content-change.js.map +1 -0
- package/dist/content-locks.d.ts +27 -0
- package/dist/content-locks.d.ts.map +1 -0
- package/dist/content-locks.js +40 -0
- package/dist/content-locks.js.map +1 -0
- package/dist/cookies.d.ts +19 -0
- package/dist/cookies.d.ts.map +1 -0
- package/dist/cookies.js +52 -0
- package/dist/cookies.js.map +1 -0
- package/dist/create-api-handlers.d.ts +128 -0
- package/dist/create-api-handlers.d.ts.map +1 -0
- package/dist/create-api-handlers.js +384 -0
- package/dist/create-api-handlers.js.map +1 -0
- package/dist/document-actions.d.ts +25 -0
- package/dist/document-actions.d.ts.map +1 -0
- package/dist/document-actions.js +157 -0
- package/dist/document-actions.js.map +1 -0
- package/dist/document-seo.d.ts +15 -0
- package/dist/document-seo.d.ts.map +1 -0
- package/dist/document-seo.js +41 -0
- package/dist/document-seo.js.map +1 -0
- package/dist/group-by-collection.d.ts +6 -0
- package/dist/group-by-collection.d.ts.map +1 -0
- package/dist/group-by-collection.js +11 -0
- package/dist/group-by-collection.js.map +1 -0
- package/dist/handlers/apply-metadata-defaults.d.ts +4 -0
- package/dist/handlers/apply-metadata-defaults.d.ts.map +1 -0
- package/dist/handlers/apply-metadata-defaults.js +108 -0
- package/dist/handlers/apply-metadata-defaults.js.map +1 -0
- package/dist/handlers/auth-callback.d.ts +4 -0
- package/dist/handlers/auth-callback.d.ts.map +1 -0
- package/dist/handlers/auth-callback.js +217 -0
- package/dist/handlers/auth-callback.js.map +1 -0
- package/dist/handlers/auth-capabilities.d.ts +4 -0
- package/dist/handlers/auth-capabilities.d.ts.map +1 -0
- package/dist/handlers/auth-capabilities.js +19 -0
- package/dist/handlers/auth-capabilities.js.map +1 -0
- package/dist/handlers/auth-login.d.ts +4 -0
- package/dist/handlers/auth-login.d.ts.map +1 -0
- package/dist/handlers/auth-login.js +60 -0
- package/dist/handlers/auth-login.js.map +1 -0
- package/dist/handlers/auth-logout.d.ts +4 -0
- package/dist/handlers/auth-logout.d.ts.map +1 -0
- package/dist/handlers/auth-logout.js +40 -0
- package/dist/handlers/auth-logout.js.map +1 -0
- package/dist/handlers/auth-me.d.ts +4 -0
- package/dist/handlers/auth-me.d.ts.map +1 -0
- package/dist/handlers/auth-me.js +54 -0
- package/dist/handlers/auth-me.js.map +1 -0
- package/dist/handlers/auth-oidc-login.d.ts +4 -0
- package/dist/handlers/auth-oidc-login.d.ts.map +1 -0
- package/dist/handlers/auth-oidc-login.js +51 -0
- package/dist/handlers/auth-oidc-login.js.map +1 -0
- package/dist/handlers/auth-refresh.d.ts +15 -0
- package/dist/handlers/auth-refresh.d.ts.map +1 -0
- package/dist/handlers/auth-refresh.js +82 -0
- package/dist/handlers/auth-refresh.js.map +1 -0
- package/dist/handlers/bulk-delete.d.ts +8 -0
- package/dist/handlers/bulk-delete.d.ts.map +1 -0
- package/dist/handlers/bulk-delete.js +72 -0
- package/dist/handlers/bulk-delete.js.map +1 -0
- package/dist/handlers/bulk-publish.d.ts +8 -0
- package/dist/handlers/bulk-publish.d.ts.map +1 -0
- package/dist/handlers/bulk-publish.js +48 -0
- package/dist/handlers/bulk-publish.js.map +1 -0
- package/dist/handlers/capabilities.d.ts +4 -0
- package/dist/handlers/capabilities.d.ts.map +1 -0
- package/dist/handlers/capabilities.js +44 -0
- package/dist/handlers/capabilities.js.map +1 -0
- package/dist/handlers/content-changes.d.ts +28 -0
- package/dist/handlers/content-changes.d.ts.map +1 -0
- package/dist/handlers/content-changes.js +160 -0
- package/dist/handlers/content-changes.js.map +1 -0
- package/dist/handlers/content-lock.d.ts +13 -0
- package/dist/handlers/content-lock.d.ts.map +1 -0
- package/dist/handlers/content-lock.js +109 -0
- package/dist/handlers/content-lock.js.map +1 -0
- package/dist/handlers/content-tree.d.ts +11 -0
- package/dist/handlers/content-tree.d.ts.map +1 -0
- package/dist/handlers/content-tree.js +28 -0
- package/dist/handlers/content-tree.js.map +1 -0
- package/dist/handlers/create-content.d.ts +4 -0
- package/dist/handlers/create-content.d.ts.map +1 -0
- package/dist/handlers/create-content.js +49 -0
- package/dist/handlers/create-content.js.map +1 -0
- package/dist/handlers/delete-content.d.ts +4 -0
- package/dist/handlers/delete-content.d.ts.map +1 -0
- package/dist/handlers/delete-content.js +17 -0
- package/dist/handlers/delete-content.js.map +1 -0
- package/dist/handlers/delete-runtime-field.d.ts +4 -0
- package/dist/handlers/delete-runtime-field.d.ts.map +1 -0
- package/dist/handlers/delete-runtime-field.js +43 -0
- package/dist/handlers/delete-runtime-field.js.map +1 -0
- package/dist/handlers/export-bundle.d.ts +13 -0
- package/dist/handlers/export-bundle.d.ts.map +1 -0
- package/dist/handlers/export-bundle.js +99 -0
- package/dist/handlers/export-bundle.js.map +1 -0
- package/dist/handlers/export-content.d.ts +7 -0
- package/dist/handlers/export-content.d.ts.map +1 -0
- package/dist/handlers/export-content.js +69 -0
- package/dist/handlers/export-content.js.map +1 -0
- package/dist/handlers/export-schema.d.ts +4 -0
- package/dist/handlers/export-schema.d.ts.map +1 -0
- package/dist/handlers/export-schema.js +13 -0
- package/dist/handlers/export-schema.js.map +1 -0
- package/dist/handlers/get-content.d.ts +4 -0
- package/dist/handlers/get-content.d.ts.map +1 -0
- package/dist/handlers/get-content.js +65 -0
- package/dist/handlers/get-content.js.map +1 -0
- package/dist/handlers/get-runtime-schema.d.ts +4 -0
- package/dist/handlers/get-runtime-schema.d.ts.map +1 -0
- package/dist/handlers/get-runtime-schema.js +17 -0
- package/dist/handlers/get-runtime-schema.js.map +1 -0
- package/dist/handlers/get-schema.d.ts +4 -0
- package/dist/handlers/get-schema.d.ts.map +1 -0
- package/dist/handlers/get-schema.js +87 -0
- package/dist/handlers/get-schema.js.map +1 -0
- package/dist/handlers/get-version.d.ts +4 -0
- package/dist/handlers/get-version.d.ts.map +1 -0
- package/dist/handlers/get-version.js +26 -0
- package/dist/handlers/get-version.js.map +1 -0
- package/dist/handlers/import-bundle.d.ts +4 -0
- package/dist/handlers/import-bundle.d.ts.map +1 -0
- package/dist/handlers/import-bundle.js +55 -0
- package/dist/handlers/import-bundle.js.map +1 -0
- package/dist/handlers/import-content.d.ts +4 -0
- package/dist/handlers/import-content.d.ts.map +1 -0
- package/dist/handlers/import-content.js +152 -0
- package/dist/handlers/import-content.js.map +1 -0
- package/dist/handlers/index.d.ts +87 -0
- package/dist/handlers/index.d.ts.map +1 -0
- package/dist/handlers/index.js +87 -0
- package/dist/handlers/index.js.map +1 -0
- package/dist/handlers/list-collection.d.ts +8 -0
- package/dist/handlers/list-collection.d.ts.map +1 -0
- package/dist/handlers/list-collection.js +14 -0
- package/dist/handlers/list-collection.js.map +1 -0
- package/dist/handlers/list-collections.d.ts +4 -0
- package/dist/handlers/list-collections.d.ts.map +1 -0
- package/dist/handlers/list-collections.js +17 -0
- package/dist/handlers/list-collections.js.map +1 -0
- package/dist/handlers/list-content.d.ts +8 -0
- package/dist/handlers/list-content.d.ts.map +1 -0
- package/dist/handlers/list-content.js +22 -0
- package/dist/handlers/list-content.js.map +1 -0
- package/dist/handlers/list-query.d.ts +7 -0
- package/dist/handlers/list-query.d.ts.map +1 -0
- package/dist/handlers/list-query.js +36 -0
- package/dist/handlers/list-query.js.map +1 -0
- package/dist/handlers/list-versions.d.ts +4 -0
- package/dist/handlers/list-versions.d.ts.map +1 -0
- package/dist/handlers/list-versions.js +19 -0
- package/dist/handlers/list-versions.js.map +1 -0
- package/dist/handlers/llm-credential.d.ts +46 -0
- package/dist/handlers/llm-credential.d.ts.map +1 -0
- package/dist/handlers/llm-credential.js +68 -0
- package/dist/handlers/llm-credential.js.map +1 -0
- package/dist/handlers/llm-resolve.d.ts +45 -0
- package/dist/handlers/llm-resolve.d.ts.map +1 -0
- package/dist/handlers/llm-resolve.js +126 -0
- package/dist/handlers/llm-resolve.js.map +1 -0
- package/dist/handlers/llm-settings.d.ts +19 -0
- package/dist/handlers/llm-settings.d.ts.map +1 -0
- package/dist/handlers/llm-settings.js +209 -0
- package/dist/handlers/llm-settings.js.map +1 -0
- package/dist/handlers/media-bulk-delete.d.ts +4 -0
- package/dist/handlers/media-bulk-delete.d.ts.map +1 -0
- package/dist/handlers/media-bulk-delete.js +19 -0
- package/dist/handlers/media-bulk-delete.js.map +1 -0
- package/dist/handlers/media-bulk-update.d.ts +4 -0
- package/dist/handlers/media-bulk-update.d.ts.map +1 -0
- package/dist/handlers/media-bulk-update.js +25 -0
- package/dist/handlers/media-bulk-update.js.map +1 -0
- package/dist/handlers/media-delete.d.ts +4 -0
- package/dist/handlers/media-delete.d.ts.map +1 -0
- package/dist/handlers/media-delete.js +27 -0
- package/dist/handlers/media-delete.js.map +1 -0
- package/dist/handlers/media-duplicate.d.ts +4 -0
- package/dist/handlers/media-duplicate.d.ts.map +1 -0
- package/dist/handlers/media-duplicate.js +20 -0
- package/dist/handlers/media-duplicate.js.map +1 -0
- package/dist/handlers/media-folders.d.ts +12 -0
- package/dist/handlers/media-folders.d.ts.map +1 -0
- package/dist/handlers/media-folders.js +119 -0
- package/dist/handlers/media-folders.js.map +1 -0
- package/dist/handlers/media-get.d.ts +4 -0
- package/dist/handlers/media-get.d.ts.map +1 -0
- package/dist/handlers/media-get.js +16 -0
- package/dist/handlers/media-get.js.map +1 -0
- package/dist/handlers/media-image-info.d.ts +4 -0
- package/dist/handlers/media-image-info.d.ts.map +1 -0
- package/dist/handlers/media-image-info.js +32 -0
- package/dist/handlers/media-image-info.js.map +1 -0
- package/dist/handlers/media-image.d.ts +11 -0
- package/dist/handlers/media-image.d.ts.map +1 -0
- package/dist/handlers/media-image.js +116 -0
- package/dist/handlers/media-image.js.map +1 -0
- package/dist/handlers/media-info.d.ts +4 -0
- package/dist/handlers/media-info.d.ts.map +1 -0
- package/dist/handlers/media-info.js +18 -0
- package/dist/handlers/media-info.js.map +1 -0
- package/dist/handlers/media-list.d.ts +4 -0
- package/dist/handlers/media-list.d.ts.map +1 -0
- package/dist/handlers/media-list.js +14 -0
- package/dist/handlers/media-list.js.map +1 -0
- package/dist/handlers/media-register.d.ts +4 -0
- package/dist/handlers/media-register.d.ts.map +1 -0
- package/dist/handlers/media-register.js +57 -0
- package/dist/handlers/media-register.js.map +1 -0
- package/dist/handlers/media-replace.d.ts +9 -0
- package/dist/handlers/media-replace.d.ts.map +1 -0
- package/dist/handlers/media-replace.js +53 -0
- package/dist/handlers/media-replace.js.map +1 -0
- package/dist/handlers/media-tags.d.ts +4 -0
- package/dist/handlers/media-tags.d.ts.map +1 -0
- package/dist/handlers/media-tags.js +9 -0
- package/dist/handlers/media-tags.js.map +1 -0
- package/dist/handlers/media-update.d.ts +4 -0
- package/dist/handlers/media-update.d.ts.map +1 -0
- package/dist/handlers/media-update.js +64 -0
- package/dist/handlers/media-update.js.map +1 -0
- package/dist/handlers/media-upload.d.ts +4 -0
- package/dist/handlers/media-upload.d.ts.map +1 -0
- package/dist/handlers/media-upload.js +26 -0
- package/dist/handlers/media-upload.js.map +1 -0
- package/dist/handlers/media-usage.d.ts +9 -0
- package/dist/handlers/media-usage.d.ts.map +1 -0
- package/dist/handlers/media-usage.js +36 -0
- package/dist/handlers/media-usage.js.map +1 -0
- package/dist/handlers/migration-conflicts.d.ts +13 -0
- package/dist/handlers/migration-conflicts.d.ts.map +1 -0
- package/dist/handlers/migration-conflicts.js +55 -0
- package/dist/handlers/migration-conflicts.js.map +1 -0
- package/dist/handlers/migration-status.d.ts +4 -0
- package/dist/handlers/migration-status.d.ts.map +1 -0
- package/dist/handlers/migration-status.js +34 -0
- package/dist/handlers/migration-status.js.map +1 -0
- package/dist/handlers/publish-content.d.ts +9 -0
- package/dist/handlers/publish-content.d.ts.map +1 -0
- package/dist/handlers/publish-content.js +47 -0
- package/dist/handlers/publish-content.js.map +1 -0
- package/dist/handlers/publish-impact.d.ts +11 -0
- package/dist/handlers/publish-impact.d.ts.map +1 -0
- package/dist/handlers/publish-impact.js +44 -0
- package/dist/handlers/publish-impact.js.map +1 -0
- package/dist/handlers/resolve-page.d.ts +9 -0
- package/dist/handlers/resolve-page.d.ts.map +1 -0
- package/dist/handlers/resolve-page.js +105 -0
- package/dist/handlers/resolve-page.js.map +1 -0
- package/dist/handlers/restore-version.d.ts +4 -0
- package/dist/handlers/restore-version.d.ts.map +1 -0
- package/dist/handlers/restore-version.js +69 -0
- package/dist/handlers/restore-version.js.map +1 -0
- package/dist/handlers/runtime-metadata.d.ts +6 -0
- package/dist/handlers/runtime-metadata.d.ts.map +1 -0
- package/dist/handlers/runtime-metadata.js +82 -0
- package/dist/handlers/runtime-metadata.js.map +1 -0
- package/dist/handlers/save-runtime-field.d.ts +4 -0
- package/dist/handlers/save-runtime-field.d.ts.map +1 -0
- package/dist/handlers/save-runtime-field.js +108 -0
- package/dist/handlers/save-runtime-field.js.map +1 -0
- package/dist/handlers/search-content.d.ts +9 -0
- package/dist/handlers/search-content.d.ts.map +1 -0
- package/dist/handlers/search-content.js +40 -0
- package/dist/handlers/search-content.js.map +1 -0
- package/dist/handlers/seo-config.d.ts +16 -0
- package/dist/handlers/seo-config.d.ts.map +1 -0
- package/dist/handlers/seo-config.js +250 -0
- package/dist/handlers/seo-config.js.map +1 -0
- package/dist/handlers/seo-document.d.ts +24 -0
- package/dist/handlers/seo-document.d.ts.map +1 -0
- package/dist/handlers/seo-document.js +119 -0
- package/dist/handlers/seo-document.js.map +1 -0
- package/dist/handlers/seo-enrich-archetype.d.ts +71 -0
- package/dist/handlers/seo-enrich-archetype.d.ts.map +1 -0
- package/dist/handlers/seo-enrich-archetype.js +250 -0
- package/dist/handlers/seo-enrich-archetype.js.map +1 -0
- package/dist/handlers/seo-enrich-meta.d.ts +40 -0
- package/dist/handlers/seo-enrich-meta.d.ts.map +1 -0
- package/dist/handlers/seo-enrich-meta.js +121 -0
- package/dist/handlers/seo-enrich-meta.js.map +1 -0
- package/dist/handlers/seo-enrich-runner.d.ts +65 -0
- package/dist/handlers/seo-enrich-runner.d.ts.map +1 -0
- package/dist/handlers/seo-enrich-runner.js +192 -0
- package/dist/handlers/seo-enrich-runner.js.map +1 -0
- package/dist/handlers/seo-enrich.d.ts +10 -0
- package/dist/handlers/seo-enrich.d.ts.map +1 -0
- package/dist/handlers/seo-enrich.js +166 -0
- package/dist/handlers/seo-enrich.js.map +1 -0
- package/dist/handlers/seo-generate.d.ts +4 -0
- package/dist/handlers/seo-generate.d.ts.map +1 -0
- package/dist/handlers/seo-generate.js +31 -0
- package/dist/handlers/seo-generate.js.map +1 -0
- package/dist/handlers/seo-impact.d.ts +36 -0
- package/dist/handlers/seo-impact.d.ts.map +1 -0
- package/dist/handlers/seo-impact.js +137 -0
- package/dist/handlers/seo-impact.js.map +1 -0
- package/dist/handlers/seo-indexnow.d.ts +11 -0
- package/dist/handlers/seo-indexnow.d.ts.map +1 -0
- package/dist/handlers/seo-indexnow.js +15 -0
- package/dist/handlers/seo-indexnow.js.map +1 -0
- package/dist/handlers/seo-llms-txt.d.ts +26 -0
- package/dist/handlers/seo-llms-txt.d.ts.map +1 -0
- package/dist/handlers/seo-llms-txt.js +99 -0
- package/dist/handlers/seo-llms-txt.js.map +1 -0
- package/dist/handlers/seo-preview.d.ts +8 -0
- package/dist/handlers/seo-preview.d.ts.map +1 -0
- package/dist/handlers/seo-preview.js +49 -0
- package/dist/handlers/seo-preview.js.map +1 -0
- package/dist/handlers/seo-robots.d.ts +22 -0
- package/dist/handlers/seo-robots.d.ts.map +1 -0
- package/dist/handlers/seo-robots.js +48 -0
- package/dist/handlers/seo-robots.js.map +1 -0
- package/dist/handlers/seo-sitemap.d.ts +68 -0
- package/dist/handlers/seo-sitemap.d.ts.map +1 -0
- package/dist/handlers/seo-sitemap.js +178 -0
- package/dist/handlers/seo-sitemap.js.map +1 -0
- package/dist/handlers/seo-status.d.ts +4 -0
- package/dist/handlers/seo-status.d.ts.map +1 -0
- package/dist/handlers/seo-status.js +61 -0
- package/dist/handlers/seo-status.js.map +1 -0
- package/dist/handlers/seo-structured-data.d.ts +4 -0
- package/dist/handlers/seo-structured-data.d.ts.map +1 -0
- package/dist/handlers/seo-structured-data.js +18 -0
- package/dist/handlers/seo-structured-data.js.map +1 -0
- package/dist/handlers/site-config.d.ts +8 -0
- package/dist/handlers/site-config.d.ts.map +1 -0
- package/dist/handlers/site-config.js +26 -0
- package/dist/handlers/site-config.js.map +1 -0
- package/dist/handlers/site-preview.d.ts +10 -0
- package/dist/handlers/site-preview.d.ts.map +1 -0
- package/dist/handlers/site-preview.js +54 -0
- package/dist/handlers/site-preview.js.map +1 -0
- package/dist/handlers/site-settings.d.ts +17 -0
- package/dist/handlers/site-settings.d.ts.map +1 -0
- package/dist/handlers/site-settings.js +75 -0
- package/dist/handlers/site-settings.js.map +1 -0
- package/dist/handlers/snapshot-create.d.ts +4 -0
- package/dist/handlers/snapshot-create.d.ts.map +1 -0
- package/dist/handlers/snapshot-create.js +15 -0
- package/dist/handlers/snapshot-create.js.map +1 -0
- package/dist/handlers/snapshot-delete.d.ts +4 -0
- package/dist/handlers/snapshot-delete.d.ts.map +1 -0
- package/dist/handlers/snapshot-delete.js +21 -0
- package/dist/handlers/snapshot-delete.js.map +1 -0
- package/dist/handlers/snapshot-get.d.ts +4 -0
- package/dist/handlers/snapshot-get.d.ts.map +1 -0
- package/dist/handlers/snapshot-get.js +17 -0
- package/dist/handlers/snapshot-get.js.map +1 -0
- package/dist/handlers/snapshot-list.d.ts +4 -0
- package/dist/handlers/snapshot-list.d.ts.map +1 -0
- package/dist/handlers/snapshot-list.js +9 -0
- package/dist/handlers/snapshot-list.js.map +1 -0
- package/dist/handlers/snapshot-restore.d.ts +4 -0
- package/dist/handlers/snapshot-restore.d.ts.map +1 -0
- package/dist/handlers/snapshot-restore.js +27 -0
- package/dist/handlers/snapshot-restore.js.map +1 -0
- package/dist/handlers/translation-status.d.ts +9 -0
- package/dist/handlers/translation-status.d.ts.map +1 -0
- package/dist/handlers/translation-status.js +68 -0
- package/dist/handlers/translation-status.js.map +1 -0
- package/dist/handlers/update-content.d.ts +4 -0
- package/dist/handlers/update-content.d.ts.map +1 -0
- package/dist/handlers/update-content.js +66 -0
- package/dist/handlers/update-content.js.map +1 -0
- package/dist/handlers/user-create.d.ts +4 -0
- package/dist/handlers/user-create.d.ts.map +1 -0
- package/dist/handlers/user-create.js +38 -0
- package/dist/handlers/user-create.js.map +1 -0
- package/dist/handlers/user-delete.d.ts +4 -0
- package/dist/handlers/user-delete.d.ts.map +1 -0
- package/dist/handlers/user-delete.js +25 -0
- package/dist/handlers/user-delete.js.map +1 -0
- package/dist/handlers/user-get.d.ts +4 -0
- package/dist/handlers/user-get.d.ts.map +1 -0
- package/dist/handlers/user-get.js +22 -0
- package/dist/handlers/user-get.js.map +1 -0
- package/dist/handlers/user-list.d.ts +4 -0
- package/dist/handlers/user-list.d.ts.map +1 -0
- package/dist/handlers/user-list.js +28 -0
- package/dist/handlers/user-list.js.map +1 -0
- package/dist/handlers/user-permissions.d.ts +6 -0
- package/dist/handlers/user-permissions.d.ts.map +1 -0
- package/dist/handlers/user-permissions.js +42 -0
- package/dist/handlers/user-permissions.js.map +1 -0
- package/dist/handlers/user-update.d.ts +4 -0
- package/dist/handlers/user-update.d.ts.map +1 -0
- package/dist/handlers/user-update.js +54 -0
- package/dist/handlers/user-update.js.map +1 -0
- package/dist/handlers/validate-all.d.ts +4 -0
- package/dist/handlers/validate-all.d.ts.map +1 -0
- package/dist/handlers/validate-all.js +14 -0
- package/dist/handlers/validate-all.js.map +1 -0
- package/dist/handlers/version-retention.d.ts +6 -0
- package/dist/handlers/version-retention.d.ts.map +1 -0
- package/dist/handlers/version-retention.js +40 -0
- package/dist/handlers/version-retention.js.map +1 -0
- package/dist/handlers/webhook-deliveries.d.ts +4 -0
- package/dist/handlers/webhook-deliveries.d.ts.map +1 -0
- package/dist/handlers/webhook-deliveries.js +24 -0
- package/dist/handlers/webhook-deliveries.js.map +1 -0
- package/dist/handlers/webhook-retry.d.ts +11 -0
- package/dist/handlers/webhook-retry.d.ts.map +1 -0
- package/dist/handlers/webhook-retry.js +69 -0
- package/dist/handlers/webhook-retry.js.map +1 -0
- package/dist/head.d.ts +9 -0
- package/dist/head.d.ts.map +1 -0
- package/dist/head.js +28 -0
- package/dist/head.js.map +1 -0
- package/dist/hooks.d.ts +34 -0
- package/dist/hooks.d.ts.map +1 -0
- package/dist/hooks.js +19 -0
- package/dist/hooks.js.map +1 -0
- package/dist/image-cache.d.ts +47 -0
- package/dist/image-cache.d.ts.map +1 -0
- package/dist/image-cache.js +112 -0
- package/dist/image-cache.js.map +1 -0
- package/dist/image-dimensions.d.ts +12 -0
- package/dist/image-dimensions.d.ts.map +1 -0
- package/dist/image-dimensions.js +129 -0
- package/dist/image-dimensions.js.map +1 -0
- package/dist/image-optimizer.d.ts +86 -0
- package/dist/image-optimizer.d.ts.map +1 -0
- package/dist/image-optimizer.js +206 -0
- package/dist/image-optimizer.js.map +1 -0
- package/dist/image-presets.d.ts +17 -0
- package/dist/image-presets.d.ts.map +1 -0
- package/dist/image-presets.js +50 -0
- package/dist/image-presets.js.map +1 -0
- package/dist/image-url.d.ts +26 -0
- package/dist/image-url.d.ts.map +1 -0
- package/dist/image-url.js +47 -0
- package/dist/image-url.js.map +1 -0
- package/dist/index.d.ts +37 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -0
- package/dist/jwt.d.ts +54 -0
- package/dist/jwt.d.ts.map +1 -0
- package/dist/jwt.js +114 -0
- package/dist/jwt.js.map +1 -0
- package/dist/locale-fallback.d.ts +18 -0
- package/dist/locale-fallback.d.ts.map +1 -0
- package/dist/locale-fallback.js +42 -0
- package/dist/locale-fallback.js.map +1 -0
- package/dist/media-library.d.ts +46 -0
- package/dist/media-library.d.ts.map +1 -0
- package/dist/media-library.js +231 -0
- package/dist/media-library.js.map +1 -0
- package/dist/media-reference-updater.d.ts +24 -0
- package/dist/media-reference-updater.d.ts.map +1 -0
- package/dist/media-reference-updater.js +124 -0
- package/dist/media-reference-updater.js.map +1 -0
- package/dist/media-references.d.ts +14 -0
- package/dist/media-references.d.ts.map +1 -0
- package/dist/media-references.js +25 -0
- package/dist/media-references.js.map +1 -0
- package/dist/merged-schema.d.ts +10 -0
- package/dist/merged-schema.d.ts.map +1 -0
- package/dist/merged-schema.js +21 -0
- package/dist/merged-schema.js.map +1 -0
- package/dist/middleware/auth.d.ts +21 -0
- package/dist/middleware/auth.d.ts.map +1 -0
- package/dist/middleware/auth.js +82 -0
- package/dist/middleware/auth.js.map +1 -0
- package/dist/oidc-state.d.ts +42 -0
- package/dist/oidc-state.d.ts.map +1 -0
- package/dist/oidc-state.js +72 -0
- package/dist/oidc-state.js.map +1 -0
- package/dist/oidc.d.ts +83 -0
- package/dist/oidc.d.ts.map +1 -0
- package/dist/oidc.js +226 -0
- package/dist/oidc.js.map +1 -0
- package/dist/openapi.d.ts +13 -0
- package/dist/openapi.d.ts.map +1 -0
- package/dist/openapi.js +133 -0
- package/dist/openapi.js.map +1 -0
- package/dist/permissions.d.ts +37 -0
- package/dist/permissions.d.ts.map +1 -0
- package/dist/permissions.js +69 -0
- package/dist/permissions.js.map +1 -0
- package/dist/plugins.d.ts +64 -0
- package/dist/plugins.d.ts.map +1 -0
- package/dist/plugins.js +73 -0
- package/dist/plugins.js.map +1 -0
- package/dist/preview-token.d.ts +13 -0
- package/dist/preview-token.d.ts.map +1 -0
- package/dist/preview-token.js +45 -0
- package/dist/preview-token.js.map +1 -0
- package/dist/public-cache.d.ts +8 -0
- package/dist/public-cache.d.ts.map +1 -0
- package/dist/public-cache.js +8 -0
- package/dist/public-cache.js.map +1 -0
- package/dist/reference-resolver.d.ts +21 -0
- package/dist/reference-resolver.d.ts.map +1 -0
- package/dist/reference-resolver.js +128 -0
- package/dist/reference-resolver.js.map +1 -0
- package/dist/return-to.d.ts +7 -0
- package/dist/return-to.d.ts.map +1 -0
- package/dist/return-to.js +15 -0
- package/dist/return-to.js.map +1 -0
- package/dist/router.d.ts +14 -0
- package/dist/router.d.ts.map +1 -0
- package/dist/router.js +51 -0
- package/dist/router.js.map +1 -0
- package/dist/runtime-field-checks.d.ts +11 -0
- package/dist/runtime-field-checks.d.ts.map +1 -0
- package/dist/runtime-field-checks.js +72 -0
- package/dist/runtime-field-checks.js.map +1 -0
- package/dist/save-document.d.ts +71 -0
- package/dist/save-document.d.ts.map +1 -0
- package/dist/save-document.js +213 -0
- package/dist/save-document.js.map +1 -0
- package/dist/seo-compose.d.ts +50 -0
- package/dist/seo-compose.d.ts.map +1 -0
- package/dist/seo-compose.js +104 -0
- package/dist/seo-compose.js.map +1 -0
- package/dist/seo-config-snapshot.d.ts +10 -0
- package/dist/seo-config-snapshot.d.ts.map +1 -0
- package/dist/seo-config-snapshot.js +16 -0
- package/dist/seo-config-snapshot.js.map +1 -0
- package/dist/seo-loader.d.ts +10 -0
- package/dist/seo-loader.d.ts.map +1 -0
- package/dist/seo-loader.js +14 -0
- package/dist/seo-loader.js.map +1 -0
- package/dist/seo-site-findings.d.ts +27 -0
- package/dist/seo-site-findings.d.ts.map +1 -0
- package/dist/seo-site-findings.js +87 -0
- package/dist/seo-site-findings.js.map +1 -0
- package/dist/seo-subsystem.d.ts +28 -0
- package/dist/seo-subsystem.d.ts.map +1 -0
- package/dist/seo-subsystem.js +62 -0
- package/dist/seo-subsystem.js.map +1 -0
- package/dist/seo-validation.d.ts +20 -0
- package/dist/seo-validation.d.ts.map +1 -0
- package/dist/seo-validation.js +96 -0
- package/dist/seo-validation.js.map +1 -0
- package/dist/types.d.ts +126 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/validators.d.ts +107 -0
- package/dist/validators.d.ts.map +1 -0
- package/dist/validators.js +199 -0
- package/dist/validators.js.map +1 -0
- package/dist/webhooks.d.ts +29 -0
- package/dist/webhooks.d.ts.map +1 -0
- package/dist/webhooks.js +123 -0
- package/dist/webhooks.js.map +1 -0
- package/dist/workload-identity.d.ts +23 -0
- package/dist/workload-identity.d.ts.map +1 -0
- package/dist/workload-identity.js +145 -0
- package/dist/workload-identity.js.map +1 -0
- package/package.json +50 -3
- package/README.md +0 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seo-config.js","sourceRoot":"","sources":["../../src/handlers/seo-config.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAClF,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAEjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAEtD;;;;GAIG;AACH,MAAM,CAAC,MAAM,UAAU,GAAe,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;IACvD,6DAA6D;IAC7D,MAAM,GAAG,GAAG,MAAM,aAAa,EAAE,CAAA;IACjC,MAAM,EAAE,cAAc,EAAE,eAAe,EAAE,GAAG,GAAG,CAAA;IAC/C,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;IAEnC,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,WAAW,GAAG,GAAG,CAAC,cAAc,CAAC,SAAS,CAAC,CAAA;QACjD,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,4BAA4B,SAAS,EAAE,EAAE,EAAE,CAAA;QAClF,CAAC;QACD,MAAM,UAAU,GAAG,GAAG,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAA;QACnD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QAC7C,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;YACnC,MAAM,OAAO,GAAG,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;YAClC,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;YAClE,OAAO,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QACnF,CAAC,CAAC,CAAA;QACF,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,CAAA;IACxE,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,eAAe,EAAE,EAAE,CAAA;AACtF,CAAC,CAAA;AAED,6GAA6G;AAC7G,KAAK,UAAU,aAAa,CAAC,KAAwB;IACnD,IAAI,GAA8C,CAAA;IAClD,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,aAAa,EAAE,CAAA;IAC7B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,kBAAkB,CAAC,GAAG,CAAC;YAAE,OAAO,EAAE,CAAA;QACtC,MAAM,GAAG,CAAA;IACX,CAAC;IACD,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QAC5B,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC;YAAE,OAAO,CAAC,IAAI,IAAI,4BAA4B,CAAC,CAAA;QAC/E,MAAM,SAAS,GAAG,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;QACvC,IAAI,SAAS,EAAE,MAAM,KAAK,YAAY,EAAE,CAAC;YACvC,OAAO,CAAC,IAAI,IAAI,uBAAuB,SAAS,CAAC,EAAE,iBAAiB,CAAC,CAAA;QACvE,CAAC;QACD,IAAI,SAAS,EAAE,MAAM,KAAK,SAAS;YAAE,OAAO,CAAC,IAAI,IAAI,8BAA8B,CAAC,CAAA;QACpF,OAAO,EAAE,CAAA;IACX,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,6EAA6E;AAC7E,SAAS,WAAW,CAAC,IAAa;IAChC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,KAAK,CAAA;IAC3D,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,IAA+B,CAAA;IACrD,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,EAAE,IAAI,CAAC,GAAG,KAAK,SAAS,IAAI,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAA;AAClG,CAAC;AAED,0FAA0F;AAC1F,SAAS,WAAW,CAAC,GAAY;IAC/B,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,SAAS,CAAA;IACvD,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAA;IAC9D,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,GAA8B,CAAA;IACtD,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAAE,OAAO,IAAI,CAAA;IAC3F,IAAI,IAAI,KAAK,SAAS,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAA;IAC/D,OAAO;QACL,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3F,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1B,CAAA;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,WAAW,CAClB,GAAY,EACZ,KAAa;IAEb,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,EAAE;QAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,CAAA;IACpF,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,EAAE,KAAK,EAAE,qCAAqC,EAAE,CAAA;IACpF,IAAI,KAAK,KAAK,MAAM;QAAE,OAAO,EAAE,KAAK,EAAE,0CAA0C,EAAE,CAAA;IAClF,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,CAAA;AAC3B,CAAC;AAED,qFAAqF;AACrF,MAAM,CAAC,MAAM,YAAY,GAAe,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;IACzD,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAC1B,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,iCAAiC,EAAE,EAAE,CAAA;IAC5E,CAAC;IAED,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAC9C,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,mBAAmB;QACnB,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAmD,CAAA;QAClF,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,gBAAgB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;QAC7D,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,CAAA;IAC3C,CAAC;IAED,IAAI,eAAe,CAAC,EAAE,CAAC,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAA;QAC7D,OAAO;YACL,MAAM,EAAE,GAAG;YACX,IAAI,EAAE;gBACJ,MAAM,EAAE,KAAK,EAAE,MAAM;oBACnB,CAAC,CAAC;wBACE,EAAE;wBACF,KAAK,EAAE,UAAU;wBACjB,MAAM,EAAE,KAAK,CAAC,MAAM;wBACpB,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS;wBACxC,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS;qBACzC;oBACH,CAAC,CAAC,IAAI;gBACR,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI;aAC9C;SACF,CAAA;IACH,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;IACvD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAA;IAChD,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,CAAA;AAC1C,CAAC,CAAA;AAED,+DAA+D;AAC/D,SAAS,QAAQ,CAAC,CAA0B;IAC1C,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACjC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChD,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjD,UAAU,EAAE,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,YAAY,CAAC,KAAK,IAAI;YAC1E,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;YACjB,CAAC,CAAC,EAAE,CAA4B;KACnC,CAAA;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,QAAQ,CACf,OAAgC,EAChC,KAAa;IAEb,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAwC,CAAA;IACvE,MAAM,IAAI,GAAG,CAAC,GAAW,EAAW,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,CAAA;IACpE,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;IAClG,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAE,WAA8C,CAAC,CAAC,CAAC,EAAE,CAAA;IAClG,MAAM,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC,CAAA;IAC9C,MAAM,aAAa,GACjB,OAAO,gBAAgB,KAAK,QAAQ,IAAI,gBAAgB,KAAK,IAAI;QAC/D,CAAC,CAAE,gBAA2C;QAC9C,CAAC,CAAC,SAAS,CAAA;IACf,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAA;IAChD,IAAI,SAAS,KAAK,IAAI;QACpB,OAAO,EAAE,KAAK,EAAE,4DAA4D,EAAE,CAAA;IAChF,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,CAAA;IACpD,IAAI,OAAO,IAAI,MAAM;QAAE,OAAO,MAAM,CAAA;IACpC,OAAO;QACL,MAAM,EAAE;YACN,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;YAChC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3C,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC7D;KACF,CAAA;AACH,CAAC;AAED,gDAAgD;AAChD,MAAM,CAAC,MAAM,aAAa,GAAe,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;IAC1D,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IAC7C,IAAI,MAAM;QAAE,OAAO,MAAM,CAAA;IAEzB,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAC1B,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,iCAAiC,EAAE,EAAE,CAAA;IAC5E,CAAC;IAED,MAAM,SAAS,GAAG,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC/C,IAAI,CAAC,SAAS,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC,QAAQ,CAAA;IAEjD,MAAM,OAAO,GAAG,SAAS,CAAC,IAA+B,CAAA;IACzD,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAuB,CAAA;IACvF,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,uBAAuB,EAAE,EAAE,CAAA;IAClE,CAAC;IAED,MAAM,KAAK,GAAG,mBAAmB,CAAC,EAAE,CAAC,CAAA;IACrC,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;IACvC,IAAI,OAAO,IAAI,MAAM;QAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,EAAE,CAAA;IAC5E,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAA;IAEzB,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IACpF,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,6CAA6C,EAAE,MAAM,EAAE,EAAE,CAAA;IAChG,CAAC;IAED,IAAI,KAAK,KAAK,UAAU,EAAE,CAAC;QACzB,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;YAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,yBAAyB,EAAE,EAAE,CAAA;QAC5F,MAAM,KAAK,GAAG,MAAM,WAAW,CAC7B,GAAG,EACH,EAAE,EACF,OAAO,OAAO,CAAC,QAAQ,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAChF,CAAA;QACD,IAAI,CAAC,KAAK;YAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE,EAAE,CAAA;QACzE,IAAI,OAAO,OAAO,CAAC,UAAU,CAAC,KAAK,QAAQ;YACzC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,gCAAgC,EAAE,EAAE,CAAA;QAC3E,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAA;QACrF,OAAO,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAA;IAChG,CAAC;IACD,MAAM,GAAG,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;IAC5D,MAAM,cAAc,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAA;IAExD,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;IACtD,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAA;AACjD,CAAC,CAAA;AAED,qDAAqD;AACrD,MAAM,CAAC,MAAM,eAAe,GAAe,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;IAC5D,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IAC7C,IAAI,MAAM;QAAE,OAAO,MAAM,CAAA;IAEzB,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAC1B,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,iCAAiC,EAAE,EAAE,CAAA;IAC5E,CAAC;IAED,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAC9C,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,uBAAuB,EAAE,EAAE,CAAA;IAClE,CAAC;IAED,IAAI,eAAe,CAAC,EAAE,CAAC,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,GAAG,CAAC,IAA2D,CAAA;QAC/E,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAA;QAChF,IAAI,CAAC,KAAK;YAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE,EAAE,CAAA;QACzE,IAAI,OAAO,OAAO,EAAE,QAAQ,KAAK,QAAQ;YACvC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,gCAAgC,EAAE,EAAE,CAAA;QAC3E,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAA;QAChF,OAAO,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAA;IACvF,CAAC;IACD,MAAM,GAAG,CAAC,gBAAgB,CAAC,YAAY,CAAC,EAAE,CAAC,CAAA;IAC3C,MAAM,cAAc,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAA;IACxD,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CAAA;AACjD,CAAC,CAAA;AAED,oEAAoE;AACpE,MAAM,CAAC,MAAM,mBAAmB,GAAe,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;IACjE,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IAC7C,IAAI,MAAM;QAAE,OAAO,MAAM,CAAA;IAEzB,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAC1B,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,iCAAiC,EAAE,EAAE,CAAA;IAC5E,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,CAAA;IAC3D,MAAM,cAAc,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;IAE1C,OAAO;QACL,MAAM,EAAE,GAAG;QACX,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,KAAK,qBAAqB,EAAE;KACzE,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { ApiHandler } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* GET /api/seo/resolved/:collection/:slug — every entity of the document's
|
|
4
|
+
* structured data with each property's effective value, its source (SEO
|
|
5
|
+
* settings, a content field, computed from the page, the site
|
|
6
|
+
* configuration), where it was read, and whether the SEO settings may set it.
|
|
7
|
+
* Reads the current version, as the editor does.
|
|
8
|
+
*/
|
|
9
|
+
export declare const seoResolved: ApiHandler;
|
|
10
|
+
/**
|
|
11
|
+
* GET /api/seo/findings/:collection/:slug — the document's SEO findings: its
|
|
12
|
+
* title and meta description against the site's limits, and its structured
|
|
13
|
+
* data against Schema.org and each active reader, each finding naming its
|
|
14
|
+
* reader and the documentation it cites; with the active readers' names.
|
|
15
|
+
*/
|
|
16
|
+
export declare const seoFindings: ApiHandler;
|
|
17
|
+
/**
|
|
18
|
+
* GET /api/seo/findings — the SEO of every published page in the site's
|
|
19
|
+
* default locale (viewer): each page's findings counted per reader and the
|
|
20
|
+
* search features of the active readers its entities can appear in, with the
|
|
21
|
+
* active readers' names. A feature a reader has retired is never listed.
|
|
22
|
+
*/
|
|
23
|
+
export declare const seoSiteFindings: ApiHandler;
|
|
24
|
+
//# sourceMappingURL=seo-document.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seo-document.d.ts","sourceRoot":"","sources":["../../src/handlers/seo-document.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,UAAU,EAAe,MAAM,aAAa,CAAA;AA2B1D;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,EAAE,UA6BzB,CAAA;AAeD;;;;;GAKG;AACH,eAAO,MAAM,WAAW,EAAE,UAUzB,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,eAAe,EAAE,UAU7B,CAAA"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { documentPath } from '@krantho/core';
|
|
2
|
+
import { canGetContent } from '@krantho/persistence';
|
|
3
|
+
import { documentSeoProperties } from '@krantho/seo-shared';
|
|
4
|
+
import { requireRole } from '../permissions.js';
|
|
5
|
+
import { pageSeoConfig } from '../seo-compose.js';
|
|
6
|
+
import { loadSeoModule } from '../seo-loader.js';
|
|
7
|
+
import { siteSeoSummary } from '../seo-site-findings.js';
|
|
8
|
+
import { isSeoModuleMissing, loadSeo } from '../seo-subsystem.js';
|
|
9
|
+
import { DocumentNotFoundError, validateDocumentSeo } from '../seo-validation.js';
|
|
10
|
+
import { parseLocaleParam, requireParam, validateCollectionParam } from '../validators.js';
|
|
11
|
+
/** The document a request names, checked: its collection exists and the caller may read Studio */
|
|
12
|
+
function documentTarget(req, ctx) {
|
|
13
|
+
const denied = requireRole(ctx.auth, 'viewer');
|
|
14
|
+
if (denied)
|
|
15
|
+
return { ok: false, response: denied };
|
|
16
|
+
const validated = validateCollectionParam(req.params['collection'], ctx);
|
|
17
|
+
if (!validated.isValid)
|
|
18
|
+
return { ok: false, response: validated.response };
|
|
19
|
+
const slug = requireParam(req.params, 'slug');
|
|
20
|
+
if (!slug.isValid)
|
|
21
|
+
return { ok: false, response: slug.response };
|
|
22
|
+
return {
|
|
23
|
+
ok: true,
|
|
24
|
+
collection: validated.collection,
|
|
25
|
+
slug: slug.value,
|
|
26
|
+
locale: parseLocaleParam(req.query['locale']),
|
|
27
|
+
path: documentPath(validated.collectionDef, slug.value),
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* GET /api/seo/resolved/:collection/:slug — every entity of the document's
|
|
32
|
+
* structured data with each property's effective value, its source (SEO
|
|
33
|
+
* settings, a content field, computed from the page, the site
|
|
34
|
+
* configuration), where it was read, and whether the SEO settings may set it.
|
|
35
|
+
* Reads the current version, as the editor does.
|
|
36
|
+
*/
|
|
37
|
+
export const seoResolved = async (req, ctx) => {
|
|
38
|
+
const target = documentTarget(req, ctx);
|
|
39
|
+
if (!target.ok)
|
|
40
|
+
return target.response;
|
|
41
|
+
const { collection, slug, locale, path } = target;
|
|
42
|
+
const current = canGetContent(ctx.adapter)
|
|
43
|
+
? await ctx.adapter.getContent(collection, slug, locale)
|
|
44
|
+
: null;
|
|
45
|
+
if (!current) {
|
|
46
|
+
return { status: 404, body: { error: `Content "${collection}/${slug}" not found` } };
|
|
47
|
+
}
|
|
48
|
+
if (path === null)
|
|
49
|
+
return { status: 200, body: { entities: [] } };
|
|
50
|
+
const seo = await loadSeo(ctx.config);
|
|
51
|
+
const page = await pageSeoConfig({
|
|
52
|
+
collection,
|
|
53
|
+
slug,
|
|
54
|
+
path,
|
|
55
|
+
seoConfigs: ctx.seoConfigAdapter,
|
|
56
|
+
metadata: current.metadata,
|
|
57
|
+
});
|
|
58
|
+
const entities = seo.resolve({
|
|
59
|
+
config: page.effective,
|
|
60
|
+
fields: { ...current.fields, ...documentSeoProperties(current.metadata) },
|
|
61
|
+
path,
|
|
62
|
+
siteLevel: page.site,
|
|
63
|
+
documentMeta: current.meta,
|
|
64
|
+
});
|
|
65
|
+
return { status: 200, body: { entities } };
|
|
66
|
+
};
|
|
67
|
+
/** The site's active readers with their names; none without `@krantho/seo` */
|
|
68
|
+
async function activeReaders(ctx) {
|
|
69
|
+
try {
|
|
70
|
+
const [seo, { getProfile }] = await Promise.all([loadSeo(ctx.config), loadSeoModule()]);
|
|
71
|
+
return seo.readers.map((id) => ({ id, name: getProfile(id)?.name ?? id }));
|
|
72
|
+
}
|
|
73
|
+
catch (err) {
|
|
74
|
+
if (isSeoModuleMissing(err))
|
|
75
|
+
return [];
|
|
76
|
+
throw err;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* GET /api/seo/findings/:collection/:slug — the document's SEO findings: its
|
|
81
|
+
* title and meta description against the site's limits, and its structured
|
|
82
|
+
* data against Schema.org and each active reader, each finding naming its
|
|
83
|
+
* reader and the documentation it cites; with the active readers' names.
|
|
84
|
+
*/
|
|
85
|
+
export const seoFindings = async (req, ctx) => {
|
|
86
|
+
const target = documentTarget(req, ctx);
|
|
87
|
+
if (!target.ok)
|
|
88
|
+
return target.response;
|
|
89
|
+
try {
|
|
90
|
+
const findings = await validateDocumentSeo(ctx, target.collection, target.slug, target.locale);
|
|
91
|
+
return { status: 200, body: { findings, readers: await activeReaders(ctx) } };
|
|
92
|
+
}
|
|
93
|
+
catch (err) {
|
|
94
|
+
if (err instanceof DocumentNotFoundError)
|
|
95
|
+
return { status: 404, body: { error: err.message } };
|
|
96
|
+
throw err;
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
/**
|
|
100
|
+
* GET /api/seo/findings — the SEO of every published page in the site's
|
|
101
|
+
* default locale (viewer): each page's findings counted per reader and the
|
|
102
|
+
* search features of the active readers its entities can appear in, with the
|
|
103
|
+
* active readers' names. A feature a reader has retired is never listed.
|
|
104
|
+
*/
|
|
105
|
+
export const seoSiteFindings = async (_req, ctx) => {
|
|
106
|
+
const denied = requireRole(ctx.auth, 'viewer');
|
|
107
|
+
if (denied)
|
|
108
|
+
return denied;
|
|
109
|
+
try {
|
|
110
|
+
const pages = await siteSeoSummary(ctx);
|
|
111
|
+
return { status: 200, body: { pages, readers: await activeReaders(ctx) } };
|
|
112
|
+
}
|
|
113
|
+
catch (err) {
|
|
114
|
+
if (!isSeoModuleMissing(err))
|
|
115
|
+
throw err;
|
|
116
|
+
return { status: 501, body: { error: 'Site findings need the @krantho/seo package' } };
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
//# sourceMappingURL=seo-document.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seo-document.js","sourceRoot":"","sources":["../../src/handlers/seo-document.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import type { LLMAdapter } from '@krantho/ai';
|
|
2
|
+
import type { SeoSection, SiteSection } from '@krantho/config';
|
|
3
|
+
import type { ContentDocument, ISeoConfigAdapter } from '@krantho/persistence';
|
|
4
|
+
import type { ApiContext } from '../types.js';
|
|
5
|
+
import type { EnrichJob } from './seo-enrich-runner.js';
|
|
6
|
+
/** Content and token budgets for archetype enrichment (`seo.enrichment.archetype`) */
|
|
7
|
+
export type ArchetypeEnrichmentLimits = SeoSection['enrichment']['archetype'];
|
|
8
|
+
/**
|
|
9
|
+
* Minimal shape of a Schema.org property definition as returned by
|
|
10
|
+
* `@krantho/seo`'s `getTypeProperties`. Kept as a local interface so this
|
|
11
|
+
* handler does not take a hard dependency on `@krantho/seo`'s public types —
|
|
12
|
+
* the real function is injected by the runner at job start.
|
|
13
|
+
*/
|
|
14
|
+
export interface ArchetypePropertyDef {
|
|
15
|
+
property: string;
|
|
16
|
+
source: string;
|
|
17
|
+
}
|
|
18
|
+
/** Injected lookup — provided by the runner once per job from `@krantho/seo`. */
|
|
19
|
+
export type GetTypePropertiesFn = (type: string) => readonly ArchetypePropertyDef[];
|
|
20
|
+
/**
|
|
21
|
+
* Build an archetype-aware enrichment prompt.
|
|
22
|
+
* Uses existing user-edited properties as context for better generation.
|
|
23
|
+
*/
|
|
24
|
+
export declare function buildArchetypePrompt(siteName: string, language: string, schemaType: string, missingProperties: string[], existingProperties: Record<string, unknown>, contentText: string, contentCap: number): string;
|
|
25
|
+
/** What the model returns for one property: the value, and the passage of the content that states it */
|
|
26
|
+
interface GroundedValue {
|
|
27
|
+
value: string;
|
|
28
|
+
evidence: string;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Whether the sources state the value: the quoted passage (two words, or the value itself) is in
|
|
32
|
+
* them, whole words and all, every number the value names is too, and at least half of the
|
|
33
|
+
* value's own words are. A value without a quote the content contains is the model's own.
|
|
34
|
+
*/
|
|
35
|
+
export declare function isGrounded(grounded: unknown, sources: string): grounded is GroundedValue;
|
|
36
|
+
/** Whether a stored property value counts as unset */
|
|
37
|
+
export declare function isUnsetProperty(value: unknown): boolean;
|
|
38
|
+
/** Generated Schema.org properties for one document, not yet saved */
|
|
39
|
+
export interface ArchetypeProposal {
|
|
40
|
+
/** `doc:<collection>/<slug>` */
|
|
41
|
+
configId: string;
|
|
42
|
+
/** The document's effective Schema.org types */
|
|
43
|
+
schemaTypes: string[];
|
|
44
|
+
/** The generated values the content states, for the properties that were unset (or all of them with `force`) */
|
|
45
|
+
add: Record<string, string>;
|
|
46
|
+
/** Properties the model was asked for */
|
|
47
|
+
requested: number;
|
|
48
|
+
baseVersion: number;
|
|
49
|
+
locale: string;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Generate values for the document's Schema.org properties that are neither
|
|
53
|
+
* user-edited nor mapped from its fields. The reason when there is nothing to
|
|
54
|
+
* generate; throws when the model call fails.
|
|
55
|
+
*/
|
|
56
|
+
export declare function proposeArchetypeProperties(target: {
|
|
57
|
+
collection: string;
|
|
58
|
+
slug: string;
|
|
59
|
+
}, content: ContentDocument, llm: LLMAdapter, seoConfigAdapter: ISeoConfigAdapter, site: SiteSection, limits: ArchetypeEnrichmentLimits, force: boolean, getTypeProperties: GetTypePropertiesFn): Promise<{
|
|
60
|
+
skip: string;
|
|
61
|
+
} | ArchetypeProposal>;
|
|
62
|
+
/**
|
|
63
|
+
* Save a proposal: merge its added properties into the document's current
|
|
64
|
+
* primary entity — a property set since the proposal is kept unless the
|
|
65
|
+
* proposal adds it — or create one entity per type when there is none.
|
|
66
|
+
*/
|
|
67
|
+
export declare function saveArchetypeProposal(ctx: ApiContext, proposal: Pick<ArchetypeProposal, 'configId' | 'schemaTypes' | 'add' | 'baseVersion' | 'locale'>): Promise<void>;
|
|
68
|
+
/** Enrich all Schema.org properties for a document based on its archetype config. */
|
|
69
|
+
export declare function enrichArchetypeProperties(item: EnrichJob['items'][number], content: ContentDocument, llm: LLMAdapter, seoConfigAdapter: ISeoConfigAdapter | null, site: SiteSection, limits: ArchetypeEnrichmentLimits, force: boolean, getTypeProperties: GetTypePropertiesFn, ctx: ApiContext): Promise<'generated' | 'skipped' | 'error'>;
|
|
70
|
+
export {};
|
|
71
|
+
//# sourceMappingURL=seo-enrich-archetype.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seo-enrich-archetype.d.ts","sourceRoot":"","sources":["../../src/handlers/seo-enrich-archetype.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
import { structuredComplete } from '@krantho/ai';
|
|
2
|
+
import { documentSeoConfig, documentSeoProperties, resolveEffectiveTypes, } from '@krantho/seo-shared';
|
|
3
|
+
import { documentSeo, saveDocumentSeo } from '../document-seo.js';
|
|
4
|
+
/**
|
|
5
|
+
* Build an archetype-aware enrichment prompt.
|
|
6
|
+
* Uses existing user-edited properties as context for better generation.
|
|
7
|
+
*/
|
|
8
|
+
export function buildArchetypePrompt(siteName, language, schemaType, missingProperties, existingProperties, contentText, contentCap) {
|
|
9
|
+
const existingContext = Object.entries(existingProperties)
|
|
10
|
+
.filter(([, v]) => v !== undefined && v !== null && v !== '')
|
|
11
|
+
.map(([k, v]) => ` ${k}: ${String(v)}`)
|
|
12
|
+
.join('\n');
|
|
13
|
+
return `You are an SEO expert for ${siteName}.
|
|
14
|
+
|
|
15
|
+
Generate Schema.org ${schemaType} property values based on the content below.
|
|
16
|
+
|
|
17
|
+
Already configured — use these as context; they are not regenerated:
|
|
18
|
+
${existingContext || ' (none)'}
|
|
19
|
+
|
|
20
|
+
Properties to generate:
|
|
21
|
+
${missingProperties.map((p) => ` - ${p}`).join('\n')}
|
|
22
|
+
|
|
23
|
+
Requirements:
|
|
24
|
+
- Written in ${language}
|
|
25
|
+
- Natural language and concise, appropriate for Schema.org
|
|
26
|
+
- State only what the content below says. Never infer, guess or add facts the content does not give: no categories, keywords, legal references, phone numbers, prices or addresses of your own
|
|
27
|
+
- Return a JSON object with one entry per property: "value" is the property, "evidence" is the exact passage of the content (or of the configured values) that states it
|
|
28
|
+
- When the content does not state a property, return empty strings for both its "value" and its "evidence"
|
|
29
|
+
|
|
30
|
+
Content:
|
|
31
|
+
${contentText.slice(0, contentCap)}`;
|
|
32
|
+
}
|
|
33
|
+
/** A text as its words alone: case, punctuation, markdown and spacing do not tell two quotes apart */
|
|
34
|
+
function words(text) {
|
|
35
|
+
return text
|
|
36
|
+
.toLowerCase()
|
|
37
|
+
.replace(/[^\p{L}\p{N}]+/gu, ' ')
|
|
38
|
+
.trim();
|
|
39
|
+
}
|
|
40
|
+
/** The share of the value's longer words that the sources use */
|
|
41
|
+
function wordsShared(value, padded) {
|
|
42
|
+
const own = words(value)
|
|
43
|
+
.split(' ')
|
|
44
|
+
.filter((word) => word.length >= 3);
|
|
45
|
+
if (own.length === 0)
|
|
46
|
+
return 1;
|
|
47
|
+
return own.filter((word) => padded.includes(` ${word} `)).length / own.length;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Whether the sources state the value: the quoted passage (two words, or the value itself) is in
|
|
51
|
+
* them, whole words and all, every number the value names is too, and at least half of the
|
|
52
|
+
* value's own words are. A value without a quote the content contains is the model's own.
|
|
53
|
+
*/
|
|
54
|
+
export function isGrounded(grounded, sources) {
|
|
55
|
+
if (typeof grounded !== 'object' || grounded === null)
|
|
56
|
+
return false;
|
|
57
|
+
const { value, evidence } = grounded;
|
|
58
|
+
if (typeof value !== 'string' || typeof evidence !== 'string')
|
|
59
|
+
return false;
|
|
60
|
+
const padded = ` ${words(sources)} `;
|
|
61
|
+
const quote = words(evidence);
|
|
62
|
+
if (value.trim().length === 0 || quote.length < 3)
|
|
63
|
+
return false;
|
|
64
|
+
if (quote.includes(' ') === false && quote !== words(value))
|
|
65
|
+
return false;
|
|
66
|
+
if (!padded.includes(` ${quote} `))
|
|
67
|
+
return false;
|
|
68
|
+
const numbers = words(value).match(/\d+/g) ?? [];
|
|
69
|
+
if (!numbers.every((number) => padded.includes(` ${number} `)))
|
|
70
|
+
return false;
|
|
71
|
+
return wordsShared(value, padded) >= 0.5;
|
|
72
|
+
}
|
|
73
|
+
/** Load the scope-chain configs and collapse them into an EnrichmentContext. */
|
|
74
|
+
async function loadEnrichmentContext(target, content, seoConfigAdapter) {
|
|
75
|
+
const configId = `doc:${target.collection}/${target.slug}`;
|
|
76
|
+
const [siteRes, colRes] = await Promise.all([
|
|
77
|
+
seoConfigAdapter.getConfig('site'),
|
|
78
|
+
seoConfigAdapter.getConfig(`collection:${target.collection}`),
|
|
79
|
+
]);
|
|
80
|
+
return {
|
|
81
|
+
configId,
|
|
82
|
+
schemaTypes: resolveEffectiveTypes(documentSeoConfig(content.metadata), colRes?.config ?? null, siteRes?.config ?? null),
|
|
83
|
+
existingProps: documentSeoConfig(content.metadata)?.entities[0]?.properties ?? {},
|
|
84
|
+
autoValues: { ...content.fields, ...documentSeoProperties(content.metadata) },
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Find Schema.org properties across the given types that are neither user-edited
|
|
89
|
+
* nor auto-mapped from CMS fields, and therefore need LLM generation.
|
|
90
|
+
*
|
|
91
|
+
* Deduplicates by property name across types (a property on multiple types is
|
|
92
|
+
* generated once). Respects `force` — when true, every property is considered
|
|
93
|
+
* missing regardless of existing values.
|
|
94
|
+
*/
|
|
95
|
+
function findMissingProperties(schemaTypes, autoValues, existingProps, force, getTypeProperties) {
|
|
96
|
+
const allDefs = [];
|
|
97
|
+
for (const type of schemaTypes) {
|
|
98
|
+
for (const p of getTypeProperties(type)) {
|
|
99
|
+
// Skip computed properties (extracted from markdown headings, not LLM-generated)
|
|
100
|
+
if (p.source === 'computed')
|
|
101
|
+
continue;
|
|
102
|
+
allDefs.push(p);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
const seen = new Set();
|
|
106
|
+
const missing = [];
|
|
107
|
+
for (const p of allDefs) {
|
|
108
|
+
if (seen.has(p.property))
|
|
109
|
+
continue;
|
|
110
|
+
seen.add(p.property);
|
|
111
|
+
const userVal = existingProps[p.property];
|
|
112
|
+
if (typeof userVal === 'string' && userVal.length > 0 && !force)
|
|
113
|
+
continue;
|
|
114
|
+
const autoVal = autoValues[p.property];
|
|
115
|
+
if (typeof autoVal === 'string' && autoVal.length > 0 && !force)
|
|
116
|
+
continue;
|
|
117
|
+
missing.push(p.property);
|
|
118
|
+
}
|
|
119
|
+
return { uniqueCount: seen.size, missing };
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Extract a text blob suitable for LLM context from a content document.
|
|
123
|
+
*
|
|
124
|
+
* Prefers the markdown body, falls back to concatenating string fields when
|
|
125
|
+
* the body is too short (common for services/products where metadata carries
|
|
126
|
+
* most of the signal).
|
|
127
|
+
*/
|
|
128
|
+
function extractContentText(content) {
|
|
129
|
+
const body = content.body?.trim() ?? '';
|
|
130
|
+
if (body.length >= 50)
|
|
131
|
+
return body;
|
|
132
|
+
const parts = [];
|
|
133
|
+
for (const [key, val] of Object.entries(content.fields)) {
|
|
134
|
+
if (key === 'status')
|
|
135
|
+
continue;
|
|
136
|
+
if (typeof val === 'string' && val.length > 3)
|
|
137
|
+
parts.push(`${key}: ${val}`);
|
|
138
|
+
}
|
|
139
|
+
return parts.join('\n');
|
|
140
|
+
}
|
|
141
|
+
/** Whether a stored property value counts as unset */
|
|
142
|
+
export function isUnsetProperty(value) {
|
|
143
|
+
return value === undefined || (typeof value === 'string' && value.length === 0);
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* The LLM-generated values that may be written: those the sources state, and never over a user
|
|
147
|
+
* edit (unless `force`).
|
|
148
|
+
*/
|
|
149
|
+
function acceptedProperties(existingProps, generated, sources, force) {
|
|
150
|
+
const add = {};
|
|
151
|
+
for (const [key, grounded] of Object.entries(generated)) {
|
|
152
|
+
if (!isGrounded(grounded, sources))
|
|
153
|
+
continue;
|
|
154
|
+
if (isUnsetProperty(existingProps[key]) || force)
|
|
155
|
+
add[key] = grounded.value;
|
|
156
|
+
}
|
|
157
|
+
return add;
|
|
158
|
+
}
|
|
159
|
+
/** The text a quote may come from: the part of the content the model saw, and the configured values */
|
|
160
|
+
function evidenceSources(contentText, contentCap, context) {
|
|
161
|
+
const configured = Object.values(context).filter((v) => typeof v === 'string');
|
|
162
|
+
return [contentText.slice(0, contentCap), ...configured].join('\n');
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Generate values for the document's Schema.org properties that are neither
|
|
166
|
+
* user-edited nor mapped from its fields. The reason when there is nothing to
|
|
167
|
+
* generate; throws when the model call fails.
|
|
168
|
+
*/
|
|
169
|
+
export async function proposeArchetypeProperties(target, content, llm, seoConfigAdapter, site, limits, force, getTypeProperties) {
|
|
170
|
+
const ctx = await loadEnrichmentContext(target, content, seoConfigAdapter);
|
|
171
|
+
if (ctx.schemaTypes.length === 0)
|
|
172
|
+
return { skip: 'No archetype configured' };
|
|
173
|
+
const { uniqueCount, missing } = findMissingProperties(ctx.schemaTypes, ctx.autoValues, ctx.existingProps, force, getTypeProperties);
|
|
174
|
+
if (missing.length === 0)
|
|
175
|
+
return { skip: `All ${uniqueCount} properties already filled` };
|
|
176
|
+
const contentText = extractContentText(content);
|
|
177
|
+
if (contentText.length < 20)
|
|
178
|
+
return { skip: 'Insufficient content for enrichment' };
|
|
179
|
+
const context = { ...ctx.autoValues, ...ctx.existingProps };
|
|
180
|
+
const prompt = buildArchetypePrompt(site.name, site.language, ctx.schemaTypes[0] ?? 'WebPage', missing, context, contentText, limits.contentCap);
|
|
181
|
+
const grounded = {
|
|
182
|
+
type: 'object',
|
|
183
|
+
properties: { value: { type: 'string' }, evidence: { type: 'string' } },
|
|
184
|
+
required: ['value', 'evidence'],
|
|
185
|
+
};
|
|
186
|
+
const dynamicSchema = {
|
|
187
|
+
type: 'object',
|
|
188
|
+
properties: Object.fromEntries(missing.map((p) => [p, grounded])),
|
|
189
|
+
required: missing,
|
|
190
|
+
};
|
|
191
|
+
const generated = await structuredComplete(llm, prompt, dynamicSchema, {
|
|
192
|
+
maxTokens: limits.maxTokens,
|
|
193
|
+
});
|
|
194
|
+
const sources = evidenceSources(contentText, limits.contentCap, context);
|
|
195
|
+
const add = acceptedProperties(ctx.existingProps, generated, sources, force);
|
|
196
|
+
return {
|
|
197
|
+
configId: ctx.configId,
|
|
198
|
+
schemaTypes: [...ctx.schemaTypes],
|
|
199
|
+
add,
|
|
200
|
+
requested: missing.length,
|
|
201
|
+
baseVersion: content.meta.version,
|
|
202
|
+
locale: content.meta.locale,
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Save a proposal: merge its added properties into the document's current
|
|
207
|
+
* primary entity — a property set since the proposal is kept unless the
|
|
208
|
+
* proposal adds it — or create one entity per type when there is none.
|
|
209
|
+
*/
|
|
210
|
+
export async function saveArchetypeProposal(ctx, proposal) {
|
|
211
|
+
const current = await documentSeo(ctx, proposal.configId, proposal.locale);
|
|
212
|
+
if (!current)
|
|
213
|
+
throw new Error('Document not found');
|
|
214
|
+
const existingData = current.config ?? { entities: [] };
|
|
215
|
+
const merged = { ...(existingData.entities[0]?.properties ?? {}), ...proposal.add };
|
|
216
|
+
const updatedEntities = existingData.entities.length > 0
|
|
217
|
+
? existingData.entities.map((e, i) => (i === 0 ? { ...e, properties: merged } : e))
|
|
218
|
+
: proposal.schemaTypes.map((t) => ({ '@type': t, properties: merged }));
|
|
219
|
+
const saved = await saveDocumentSeo(ctx, current.document, { ...existingData, entities: updatedEntities }, proposal.baseVersion);
|
|
220
|
+
if (!saved.ok)
|
|
221
|
+
throw new Error(String(saved.response.body.error ?? 'Document save failed'));
|
|
222
|
+
}
|
|
223
|
+
/** Enrich all Schema.org properties for a document based on its archetype config. */
|
|
224
|
+
export async function enrichArchetypeProperties(item, content, llm, seoConfigAdapter, site, limits, force, getTypeProperties, ctx) {
|
|
225
|
+
if (!seoConfigAdapter) {
|
|
226
|
+
item.status = 'skipped';
|
|
227
|
+
item.result = 'SEO config adapter not available';
|
|
228
|
+
return 'skipped';
|
|
229
|
+
}
|
|
230
|
+
item.status = 'generating';
|
|
231
|
+
try {
|
|
232
|
+
const proposal = await proposeArchetypeProperties(item, content, llm, seoConfigAdapter, site, limits, force, getTypeProperties);
|
|
233
|
+
if ('skip' in proposal) {
|
|
234
|
+
item.status = 'skipped';
|
|
235
|
+
item.result = proposal.skip;
|
|
236
|
+
return 'skipped';
|
|
237
|
+
}
|
|
238
|
+
await saveArchetypeProposal(ctx, proposal);
|
|
239
|
+
const filledCount = Object.keys(proposal.add).length;
|
|
240
|
+
item.status = 'complete';
|
|
241
|
+
item.result = `Generated ${filledCount}/${proposal.requested} properties for ${proposal.schemaTypes.join(', ')}`;
|
|
242
|
+
return 'generated';
|
|
243
|
+
}
|
|
244
|
+
catch (err) {
|
|
245
|
+
item.status = 'error';
|
|
246
|
+
item.error = err instanceof Error ? err.message : 'LLM generation failed';
|
|
247
|
+
return 'error';
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
//# sourceMappingURL=seo-enrich-archetype.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seo-enrich-archetype.js","sourceRoot":"","sources":["../../src/handlers/seo-enrich-archetype.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { LLMAdapter } from '@krantho/ai';
|
|
2
|
+
import type { SeoSection, SiteSection } from '@krantho/config';
|
|
3
|
+
import type { ContentDocument, ISeoConfigAdapter } from '@krantho/persistence';
|
|
4
|
+
import type { ApiContext } from '../types.js';
|
|
5
|
+
import type { EnrichJob } from './seo-enrich-runner.js';
|
|
6
|
+
/** Length bounds and budgets for a generated meta description (`seo.enrichment.meta`) */
|
|
7
|
+
export type MetaEnrichmentLimits = SeoSection['enrichment']['meta'];
|
|
8
|
+
export declare const DESCRIPTION_SCHEMA: {
|
|
9
|
+
type: string;
|
|
10
|
+
properties: {
|
|
11
|
+
description: {
|
|
12
|
+
type: string;
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
required: string[];
|
|
16
|
+
};
|
|
17
|
+
export declare function buildMetaPrompt(siteName: string, language: string, text: string, limits: MetaEnrichmentLimits): string;
|
|
18
|
+
/** Where a document keeps its description and the text a description is written from */
|
|
19
|
+
export interface MetaDescriptionSource {
|
|
20
|
+
/** The CMS field holding the description; null when the document has none */
|
|
21
|
+
field: string | null;
|
|
22
|
+
/** The text the model writes the description from */
|
|
23
|
+
text: string;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Whether a document needs a generated meta description: a description in its
|
|
27
|
+
* SEO config or in its description field is never replaced unless `force`, and
|
|
28
|
+
* a document with too little text is skipped. The reason when it is skipped.
|
|
29
|
+
*/
|
|
30
|
+
export declare function prepareMetaDescription(_target: {
|
|
31
|
+
collection: string;
|
|
32
|
+
slug: string;
|
|
33
|
+
}, content: ContentDocument, _seoConfigAdapter: ISeoConfigAdapter | null, force: boolean): Promise<{
|
|
34
|
+
skip: string;
|
|
35
|
+
} | MetaDescriptionSource>;
|
|
36
|
+
/** Generate a meta description from `text`, cut to `limits.maxChars` */
|
|
37
|
+
export declare function generateMetaDescription(text: string, llm: LLMAdapter, site: SiteSection, limits: MetaEnrichmentLimits): Promise<string>;
|
|
38
|
+
/** Enrich meta-description for a single item */
|
|
39
|
+
export declare function enrichMetaDescription(item: EnrichJob['items'][number], content: ContentDocument, llm: LLMAdapter, ctx: ApiContext, seoConfigAdapter: ISeoConfigAdapter | null, site: SiteSection, limits: MetaEnrichmentLimits, force: boolean): Promise<'generated' | 'skipped' | 'error'>;
|
|
40
|
+
//# sourceMappingURL=seo-enrich-meta.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seo-enrich-meta.d.ts","sourceRoot":"","sources":["../../src/handlers/seo-enrich-meta.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAE7C,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAI9E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAEvD,yFAAyF;AACzF,MAAM,MAAM,oBAAoB,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAA;AAEnE,eAAO,MAAM,kBAAkB;;;;;;;;CAI9B,CAAA;AAED,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,oBAAoB,GAC3B,MAAM,CAeR;AAED,wFAAwF;AACxF,MAAM,WAAW,qBAAqB;IACpC,6EAA6E;IAC7E,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,qDAAqD;IACrD,IAAI,EAAE,MAAM,CAAA;CACb;AAED;;;;GAIG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAC7C,OAAO,EAAE,eAAe,EACxB,iBAAiB,EAAE,iBAAiB,GAAG,IAAI,EAC3C,KAAK,EAAE,OAAO,GACb,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,qBAAqB,CAAC,CAoBnD;AAiBD,wEAAwE;AACxE,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,UAAU,EACf,IAAI,EAAE,WAAW,EACjB,MAAM,EAAE,oBAAoB,GAC3B,OAAO,CAAC,MAAM,CAAC,CAajB;AAED,gDAAgD;AAChD,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAChC,OAAO,EAAE,eAAe,EACxB,GAAG,EAAE,UAAU,EACf,GAAG,EAAE,UAAU,EACf,gBAAgB,EAAE,iBAAiB,GAAG,IAAI,EAC1C,IAAI,EAAE,WAAW,EACjB,MAAM,EAAE,oBAAoB,EAC5B,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,WAAW,GAAG,SAAS,GAAG,OAAO,CAAC,CAqD5C"}
|