@krantho/api 0.0.0-stage → 1.0.1
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 +51 -3
- package/README.md +0 -3
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { CLAUDE_CODE_PROVIDER, createChatAdapter, createLLMAdapter } from '@krantho/ai';
|
|
2
|
+
import { claudeCodeTokenMissing, llmCredentialLeaf } from '@krantho/config';
|
|
3
|
+
import { claudeCodeRefusal, readStoredKey, resolveLLMCredential, storedBaseUrlSetting, storedModelSetting, } from './llm-credential.js';
|
|
4
|
+
function requireSettings(ctx) {
|
|
5
|
+
if (!ctx.siteSettingsAdapter) {
|
|
6
|
+
throw new Error('Site settings storage not available');
|
|
7
|
+
}
|
|
8
|
+
return ctx.siteSettingsAdapter;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* The order a provider is picked in when no one chose: the products most people have a key for
|
|
12
|
+
* first. The subscription provider and a local model are never picked for a site: they are for
|
|
13
|
+
* a developer, who chooses them.
|
|
14
|
+
*/
|
|
15
|
+
const PICK_ORDER = ['anthropic', 'openai', 'gemini', 'openrouter'];
|
|
16
|
+
/** The providers that can be on besides those in {@link PICK_ORDER} */
|
|
17
|
+
const CHOSEN_ONLY = ['claude-code'];
|
|
18
|
+
/** One provider's credential, or none for `claude-code` where it is refused */
|
|
19
|
+
export async function providerCredential(ctx, provider) {
|
|
20
|
+
if (claudeCodeRefusal(provider))
|
|
21
|
+
return { kind: 'none', source: null };
|
|
22
|
+
const storedKey = await readStoredKey(requireSettings(ctx), provider, ctx.secrets);
|
|
23
|
+
return resolveLLMCredential(provider, ctx.config, storedKey);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* The providers that are on: each one with a key, from the environment, the code or the key
|
|
27
|
+
* saved here, in the order one is picked, then the subscription provider with its token, and
|
|
28
|
+
* the local model when it was chosen. Having a key is what turns a provider on.
|
|
29
|
+
*/
|
|
30
|
+
export async function readyProviders(ctx) {
|
|
31
|
+
const settings = requireSettings(ctx);
|
|
32
|
+
const ready = [];
|
|
33
|
+
for (const provider of [...PICK_ORDER, ...CHOSEN_ONLY]) {
|
|
34
|
+
if ((await providerCredential(ctx, provider)).kind !== 'none')
|
|
35
|
+
ready.push(provider);
|
|
36
|
+
}
|
|
37
|
+
if ((await settings.getSetting('llm.provider')) === 'ollama')
|
|
38
|
+
ready.push('ollama');
|
|
39
|
+
return ready;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* The provider in use: the one chosen, when it is on, else the first provider that is on and
|
|
43
|
+
* is picked for a site, else the one chosen (so what is missing can be named), else none.
|
|
44
|
+
*/
|
|
45
|
+
export async function activeProvider(ctx) {
|
|
46
|
+
const chosen = (await requireSettings(ctx).getSetting('llm.provider')) || null;
|
|
47
|
+
const ready = await readyProviders(ctx);
|
|
48
|
+
if (chosen && ready.includes(chosen))
|
|
49
|
+
return chosen;
|
|
50
|
+
return ready.find((provider) => PICK_ORDER.includes(provider)) ?? chosen;
|
|
51
|
+
}
|
|
52
|
+
/** The model chosen for a provider, or undefined for its default */
|
|
53
|
+
async function storedModel(ctx, provider) {
|
|
54
|
+
return (await requireSettings(ctx).getSetting(storedModelSetting(provider))) || undefined;
|
|
55
|
+
}
|
|
56
|
+
async function storedBaseUrl(ctx, provider) {
|
|
57
|
+
return (await requireSettings(ctx).getSetting(storedBaseUrlSetting(provider))) || undefined;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* One provider's configuration with that provider's own credential, picked at
|
|
61
|
+
* request time. Throws when `claude-code` is configured in production, or has
|
|
62
|
+
* no subscription token.
|
|
63
|
+
*/
|
|
64
|
+
async function resolveProviderConfig(ctx, provider, model) {
|
|
65
|
+
const refusal = claudeCodeRefusal(provider);
|
|
66
|
+
if (refusal)
|
|
67
|
+
throw new Error(refusal);
|
|
68
|
+
const credential = await providerCredential(ctx, provider);
|
|
69
|
+
if (provider === CLAUDE_CODE_PROVIDER && credential.kind === 'none') {
|
|
70
|
+
const { env } = llmCredentialLeaf(ctx.config.llm, provider) ?? { env: '' };
|
|
71
|
+
throw new Error(claudeCodeTokenMissing(env));
|
|
72
|
+
}
|
|
73
|
+
return {
|
|
74
|
+
provider: provider,
|
|
75
|
+
model,
|
|
76
|
+
apiKey: credential.apiKey,
|
|
77
|
+
authToken: credential.authToken,
|
|
78
|
+
baseUrl: await storedBaseUrl(ctx, provider),
|
|
79
|
+
profiles: ctx.config.llm.profiles,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
const NOT_SET_UP = 'AI help is not set up yet. Add a key in Setup › AI provider.';
|
|
83
|
+
/**
|
|
84
|
+
* A provider's model and base URL with its own credential — the one in use unless one is
|
|
85
|
+
* named. Throws when no provider is on, or when `claude-code` is chosen in production.
|
|
86
|
+
*/
|
|
87
|
+
export async function resolveLLMConfig(ctx, provider) {
|
|
88
|
+
const chosen = provider ?? (await activeProvider(ctx));
|
|
89
|
+
if (!chosen)
|
|
90
|
+
throw new Error(NOT_SET_UP);
|
|
91
|
+
return resolveProviderConfig(ctx, chosen, await storedModel(ctx, chosen));
|
|
92
|
+
}
|
|
93
|
+
/** The kind of credential a resolved configuration carries — never the credential itself */
|
|
94
|
+
function credentialKind(config) {
|
|
95
|
+
if (config.authToken)
|
|
96
|
+
return 'oauth';
|
|
97
|
+
if (config.apiKey)
|
|
98
|
+
return 'api-key';
|
|
99
|
+
return 'none';
|
|
100
|
+
}
|
|
101
|
+
/** The completion adapter (enrichment, connection test), for the provider in use unless one is named */
|
|
102
|
+
export async function resolveAdapter(ctx, provider) {
|
|
103
|
+
return createLLMAdapter(await resolveLLMConfig(ctx, provider));
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* The provider the assistant uses: the one the user picked in the dialog (`requested`), else
|
|
107
|
+
* `assistant.provider`, else the provider in use. `assistant.model` replaces the model only
|
|
108
|
+
* for the provider the site's settings gave the assistant; a provider a user picked runs its
|
|
109
|
+
* own chosen model, or its default.
|
|
110
|
+
*/
|
|
111
|
+
async function resolveAssistantConfig(ctx, assistant, requested) {
|
|
112
|
+
if (requested !== undefined && !(await readyProviders(ctx)).includes(requested)) {
|
|
113
|
+
throw new Error('That AI is not set up. Add its key in Setup › AI provider.');
|
|
114
|
+
}
|
|
115
|
+
const provider = requested ?? assistant.provider ?? (await activeProvider(ctx));
|
|
116
|
+
if (!provider)
|
|
117
|
+
throw new Error(NOT_SET_UP);
|
|
118
|
+
const model = requested === undefined && assistant.model ? assistant.model : await storedModel(ctx, provider);
|
|
119
|
+
return resolveProviderConfig(ctx, provider, model);
|
|
120
|
+
}
|
|
121
|
+
/** The assistant's chat adapter */
|
|
122
|
+
export async function resolveChatAdapter(ctx, assistant, requested) {
|
|
123
|
+
const config = await resolveAssistantConfig(ctx, assistant, requested);
|
|
124
|
+
return { chat: createChatAdapter(config), credential: credentialKind(config) };
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=llm-resolve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-resolve.js","sourceRoot":"","sources":["../../src/handlers/llm-resolve.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { ApiHandler } from '../types.js';
|
|
2
|
+
/** Where a provider's key comes from, in words a person uses — never the key */
|
|
3
|
+
export type KeySource = 'environment' | 'configuration' | 'saved';
|
|
4
|
+
/** GET /api/settings/llm — which providers are on and which one is in use (never returns a key or token) */
|
|
5
|
+
export declare const getLLMSettings: ApiHandler;
|
|
6
|
+
/**
|
|
7
|
+
* PUT /api/settings/llm — save one provider's key, model and base URL (`{ provider, apiKey?,
|
|
8
|
+
* model?, baseUrl?, use? }`). The first provider with a key becomes the one in use; a later one
|
|
9
|
+
* is used only when `use` is true, and what was in use stays. Nothing else is touched.
|
|
10
|
+
*/
|
|
11
|
+
export declare const updateLLMSettings: ApiHandler;
|
|
12
|
+
/**
|
|
13
|
+
* DELETE /api/settings/llm?provider=… — remove what was saved here for one provider: its key,
|
|
14
|
+
* model and base URL. A key from the environment or the code stays, as it is not stored here.
|
|
15
|
+
*/
|
|
16
|
+
export declare const deleteLLMSettings: ApiHandler;
|
|
17
|
+
/** POST /api/settings/llm/test — test a provider (`{ provider? }`, default the one in use) with a minimal request */
|
|
18
|
+
export declare const testLLMConnection: ApiHandler;
|
|
19
|
+
//# sourceMappingURL=llm-settings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-settings.d.ts","sourceRoot":"","sources":["../../src/handlers/llm-settings.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAc,UAAU,EAAe,MAAM,aAAa,CAAA;AA0DtE,gFAAgF;AAChF,MAAM,MAAM,SAAS,GAAG,aAAa,GAAG,eAAe,GAAG,OAAO,CAAA;AAmEjE,4GAA4G;AAC5G,eAAO,MAAM,cAAc,EAAE,UAK5B,CAAA;AAkBD;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,EAAE,UA+C/B,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,UAuB/B,CAAA;AAED,qHAAqH;AACrH,eAAO,MAAM,iBAAiB,EAAE,UAyC/B,CAAA"}
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
import { CLAUDE_CODE_MODEL, CLAUDE_CODE_PROVIDER, claudeCodeModelError, PROVIDER_PRESETS, } from '@krantho/ai';
|
|
2
|
+
import { LLM_PROVIDERS, llmCredentialLeaf } from '@krantho/config';
|
|
3
|
+
import { requireRole } from '../permissions.js';
|
|
4
|
+
import { validateRequestBody } from '../validators.js';
|
|
5
|
+
import { claudeCodeRefusal, storedBaseUrlSetting, storedKeySetting, storedModelSetting, takesStoredKey, } from './llm-credential.js';
|
|
6
|
+
import { activeProvider, providerCredential, readyProviders, resolveAdapter, } from './llm-resolve.js';
|
|
7
|
+
/** Return a 501 response if siteSettingsAdapter is not available, null otherwise. */
|
|
8
|
+
function requireSiteSettings(ctx) {
|
|
9
|
+
if (!ctx.siteSettingsAdapter) {
|
|
10
|
+
return { error: { status: 501, body: { error: 'Site settings storage not available' } } };
|
|
11
|
+
}
|
|
12
|
+
return { adapter: ctx.siteSettingsAdapter };
|
|
13
|
+
}
|
|
14
|
+
/** The provider that runs on the person's own computer: on once chosen, with no key */
|
|
15
|
+
const LOCAL_MODEL = 'ollama';
|
|
16
|
+
/** Why a pasted key is refused: nothing to encrypt it with */
|
|
17
|
+
const NO_VAULT = "This site cannot store a key: no secrets key is configured. Set secrets.local.key (KRANTHO_SECRETS_LOCAL_KEY) or auth.jwtSecret (KRANTHO_JWT_SECRET), at least 32 characters, or set the provider's key as an environment variable.";
|
|
18
|
+
/** The model a provider runs: `claude-code` always the pinned one, others the chosen one or the preset's */
|
|
19
|
+
function reportedModel(provider, chosen) {
|
|
20
|
+
if (provider === CLAUDE_CODE_PROVIDER)
|
|
21
|
+
return CLAUDE_CODE_MODEL;
|
|
22
|
+
return chosen ?? PROVIDER_PRESETS[provider]?.defaultModel ?? null;
|
|
23
|
+
}
|
|
24
|
+
/** A 400 for settings the provider cannot run: refused in production, or not its pinned model */
|
|
25
|
+
function claudeCodeViolation(provider, model) {
|
|
26
|
+
const refusal = claudeCodeRefusal(provider);
|
|
27
|
+
if (refusal)
|
|
28
|
+
return { status: 400, body: { error: refusal } };
|
|
29
|
+
const modelError = provider === CLAUDE_CODE_PROVIDER && typeof model === 'string' && model !== ''
|
|
30
|
+
? claudeCodeModelError(model)
|
|
31
|
+
: null;
|
|
32
|
+
if (modelError)
|
|
33
|
+
return { status: 400, body: { error: modelError } };
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
function isKnownProvider(provider) {
|
|
37
|
+
return typeof provider === 'string' && LLM_PROVIDERS.includes(provider);
|
|
38
|
+
}
|
|
39
|
+
const KEY_SOURCE = {
|
|
40
|
+
env: 'environment',
|
|
41
|
+
code: 'configuration',
|
|
42
|
+
database: 'saved',
|
|
43
|
+
};
|
|
44
|
+
async function providerStatus(ctx, adapter, provider, ready, active) {
|
|
45
|
+
const credential = await providerCredential(ctx, provider);
|
|
46
|
+
return {
|
|
47
|
+
provider,
|
|
48
|
+
ready: ready.includes(provider),
|
|
49
|
+
active: provider === active,
|
|
50
|
+
keySource: credential.source ? KEY_SOURCE[credential.source] : null,
|
|
51
|
+
env: llmCredentialLeaf(ctx.config.llm, provider)?.env ?? '',
|
|
52
|
+
model: (await adapter.getSetting(storedModelSetting(provider))) || null,
|
|
53
|
+
baseUrl: (await adapter.getSetting(storedBaseUrlSetting(provider))) || null,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* What `GET`, `PUT` and `DELETE` report: every provider with whether it is on, the one in use,
|
|
58
|
+
* and the provider `assistant.provider` gives the assistant — never a key or a token.
|
|
59
|
+
*/
|
|
60
|
+
async function describeSettings(ctx, adapter) {
|
|
61
|
+
const ready = await readyProviders(ctx);
|
|
62
|
+
const active = await activeProvider(ctx);
|
|
63
|
+
const providers = await Promise.all(LLM_PROVIDERS.map((name) => providerStatus(ctx, adapter, name, ready, active)));
|
|
64
|
+
const inUse = providers.find((entry) => entry.active);
|
|
65
|
+
return {
|
|
66
|
+
configured: inUse?.ready === true,
|
|
67
|
+
provider: inUse?.ready === true ? inUse.provider : null,
|
|
68
|
+
model: inUse?.ready === true ? reportedModel(inUse.provider, inUse.model) : null,
|
|
69
|
+
providers,
|
|
70
|
+
assistantProvider: ctx.config.assistant.provider ?? null,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
/** GET /api/settings/llm — which providers are on and which one is in use (never returns a key or token) */
|
|
74
|
+
export const getLLMSettings = async (_req, ctx) => {
|
|
75
|
+
const settings = requireSiteSettings(ctx);
|
|
76
|
+
if (settings.error)
|
|
77
|
+
return settings.error;
|
|
78
|
+
return { status: 200, body: await describeSettings(ctx, settings.adapter) };
|
|
79
|
+
};
|
|
80
|
+
/** Save one provider's key, model and base URL; an empty model or base URL clears it */
|
|
81
|
+
async function saveProvider(ctx, adapter, provider, payload) {
|
|
82
|
+
const { apiKey, model, baseUrl } = payload;
|
|
83
|
+
if (typeof apiKey === 'string' && apiKey.length > 0 && ctx.secrets) {
|
|
84
|
+
const name = storedKeySetting(provider);
|
|
85
|
+
await adapter.setSetting(name, await ctx.secrets.seal(name, apiKey));
|
|
86
|
+
}
|
|
87
|
+
if (typeof model === 'string')
|
|
88
|
+
await adapter.setSetting(storedModelSetting(provider), model);
|
|
89
|
+
if (typeof baseUrl === 'string')
|
|
90
|
+
await adapter.setSetting(storedBaseUrlSetting(provider), baseUrl);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* PUT /api/settings/llm — save one provider's key, model and base URL (`{ provider, apiKey?,
|
|
94
|
+
* model?, baseUrl?, use? }`). The first provider with a key becomes the one in use; a later one
|
|
95
|
+
* is used only when `use` is true, and what was in use stays. Nothing else is touched.
|
|
96
|
+
*/
|
|
97
|
+
export const updateLLMSettings = async (req, ctx) => {
|
|
98
|
+
const denied = requireRole(ctx.auth, 'admin');
|
|
99
|
+
if (denied)
|
|
100
|
+
return denied;
|
|
101
|
+
const settings = requireSiteSettings(ctx);
|
|
102
|
+
if (settings.error)
|
|
103
|
+
return settings.error;
|
|
104
|
+
const bodyCheck = validateRequestBody(req.body);
|
|
105
|
+
if (!bodyCheck.isValid)
|
|
106
|
+
return bodyCheck.response;
|
|
107
|
+
const payload = bodyCheck.body;
|
|
108
|
+
const { provider, model, apiKey } = payload;
|
|
109
|
+
if (!isKnownProvider(provider)) {
|
|
110
|
+
return {
|
|
111
|
+
status: 400,
|
|
112
|
+
body: { error: `Invalid provider. Must be one of: ${LLM_PROVIDERS.join(', ')}` },
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
const violation = claudeCodeViolation(provider, model);
|
|
116
|
+
if (violation)
|
|
117
|
+
return violation;
|
|
118
|
+
const keyGiven = typeof apiKey === 'string' && apiKey.length > 0 && takesStoredKey(ctx.config, provider);
|
|
119
|
+
if (keyGiven && !ctx.secrets)
|
|
120
|
+
return { status: 400, body: { error: NO_VAULT } };
|
|
121
|
+
const readyBefore = await readyProviders(ctx);
|
|
122
|
+
const inUse = await activeProvider(ctx);
|
|
123
|
+
// What is in use stays in use: a later key must not change the provider by sorting first. This
|
|
124
|
+
// makes an implicit pick (the first provider with a key) an explicit choice, on purpose.
|
|
125
|
+
if (inUse && readyBefore.includes(inUse))
|
|
126
|
+
await settings.adapter.setSetting('llm.provider', inUse);
|
|
127
|
+
await saveProvider(ctx, settings.adapter, provider, {
|
|
128
|
+
...payload,
|
|
129
|
+
apiKey: keyGiven ? apiKey : '',
|
|
130
|
+
});
|
|
131
|
+
if (payload['use'] === true || readyBefore.length === 0) {
|
|
132
|
+
// A provider with no key cannot be used; a local model has none and is on once chosen
|
|
133
|
+
const hasKey = (await providerCredential(ctx, provider)).kind !== 'none';
|
|
134
|
+
if (payload['use'] === true && !hasKey && provider !== LOCAL_MODEL) {
|
|
135
|
+
return { status: 400, body: { error: 'That AI has no key yet. Add its key first.' } };
|
|
136
|
+
}
|
|
137
|
+
await settings.adapter.setSetting('llm.provider', provider);
|
|
138
|
+
}
|
|
139
|
+
return { status: 200, body: await describeSettings(ctx, settings.adapter) };
|
|
140
|
+
};
|
|
141
|
+
/**
|
|
142
|
+
* DELETE /api/settings/llm?provider=… — remove what was saved here for one provider: its key,
|
|
143
|
+
* model and base URL. A key from the environment or the code stays, as it is not stored here.
|
|
144
|
+
*/
|
|
145
|
+
export const deleteLLMSettings = async (req, ctx) => {
|
|
146
|
+
const denied = requireRole(ctx.auth, 'admin');
|
|
147
|
+
if (denied)
|
|
148
|
+
return denied;
|
|
149
|
+
const settings = requireSiteSettings(ctx);
|
|
150
|
+
if (settings.error)
|
|
151
|
+
return settings.error;
|
|
152
|
+
const provider = req.query['provider'];
|
|
153
|
+
if (!isKnownProvider(provider)) {
|
|
154
|
+
return {
|
|
155
|
+
status: 400,
|
|
156
|
+
body: { error: `Name the provider to remove: one of ${LLM_PROVIDERS.join(', ')}` },
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
await settings.adapter.setSetting(storedKeySetting(provider), '');
|
|
160
|
+
await settings.adapter.setSetting(storedModelSetting(provider), '');
|
|
161
|
+
await settings.adapter.setSetting(storedBaseUrlSetting(provider), '');
|
|
162
|
+
if ((await settings.adapter.getSetting('llm.provider')) === provider) {
|
|
163
|
+
await settings.adapter.setSetting('llm.provider', '');
|
|
164
|
+
}
|
|
165
|
+
return { status: 200, body: await describeSettings(ctx, settings.adapter) };
|
|
166
|
+
};
|
|
167
|
+
/** POST /api/settings/llm/test — test a provider (`{ provider? }`, default the one in use) with a minimal request */
|
|
168
|
+
export const testLLMConnection = async (req, ctx) => {
|
|
169
|
+
const denied = requireRole(ctx.auth, 'admin');
|
|
170
|
+
if (denied)
|
|
171
|
+
return denied;
|
|
172
|
+
const settings = requireSiteSettings(ctx);
|
|
173
|
+
if (settings.error)
|
|
174
|
+
return settings.error;
|
|
175
|
+
const named = req.body?.provider;
|
|
176
|
+
if (named !== undefined && !isKnownProvider(named)) {
|
|
177
|
+
return { status: 400, body: { error: 'Unknown provider' } };
|
|
178
|
+
}
|
|
179
|
+
const provider = named ?? (await activeProvider(ctx));
|
|
180
|
+
if (!provider) {
|
|
181
|
+
return { status: 400, body: { error: 'No AI provider is set up' } };
|
|
182
|
+
}
|
|
183
|
+
try {
|
|
184
|
+
const adapter = await resolveAdapter(ctx, provider);
|
|
185
|
+
const result = await adapter.complete('Reply with exactly: OK', {
|
|
186
|
+
maxTokens: 256,
|
|
187
|
+
});
|
|
188
|
+
return {
|
|
189
|
+
status: 200,
|
|
190
|
+
body: {
|
|
191
|
+
success: true,
|
|
192
|
+
provider,
|
|
193
|
+
model: result.model,
|
|
194
|
+
usage: result.usage,
|
|
195
|
+
},
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
catch (err) {
|
|
199
|
+
return {
|
|
200
|
+
status: 200,
|
|
201
|
+
body: {
|
|
202
|
+
success: false,
|
|
203
|
+
provider,
|
|
204
|
+
error: err instanceof Error ? err.message : 'Connection failed',
|
|
205
|
+
},
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
};
|
|
209
|
+
//# sourceMappingURL=llm-settings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-settings.js","sourceRoot":"","sources":["../../src/handlers/llm-settings.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media-bulk-delete.d.ts","sourceRoot":"","sources":["../../src/handlers/media-bulk-delete.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAG7C,uDAAuD;AACvD,eAAO,MAAM,eAAe,EAAE,UAiB7B,CAAA"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { announceChanges } from '../content-change.js';
|
|
2
|
+
import { requireRole } from '../permissions.js';
|
|
3
|
+
import { hasMediaStorage, MEDIA_NOT_CONFIGURED } from '../validators.js';
|
|
4
|
+
/** DELETE /api/media/bulk — bulk delete media items */
|
|
5
|
+
export const mediaBulkDelete = async (req, ctx) => {
|
|
6
|
+
const denied = requireRole(ctx.auth, 'admin');
|
|
7
|
+
if (denied)
|
|
8
|
+
return denied;
|
|
9
|
+
if (!hasMediaStorage(ctx))
|
|
10
|
+
return MEDIA_NOT_CONFIGURED;
|
|
11
|
+
const body = req.body;
|
|
12
|
+
if (!body?.ids || !Array.isArray(body.ids) || body.ids.length === 0) {
|
|
13
|
+
return { status: 400, body: { error: 'ids array is required' } };
|
|
14
|
+
}
|
|
15
|
+
const result = await ctx.mediaStorage.bulkDelete(body.ids);
|
|
16
|
+
await announceChanges(ctx, result.deleted.map((id) => ({ kind: 'media', id })));
|
|
17
|
+
return { status: 200, body: result };
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=media-bulk-delete.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media-bulk-delete.js","sourceRoot":"","sources":["../../src/handlers/media-bulk-delete.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAE/C,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAExE,uDAAuD;AACvD,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,eAAe,CAAC,GAAG,CAAC;QAAE,OAAO,oBAAoB,CAAA;IAEtD,MAAM,IAAI,GAAG,GAAG,CAAC,IAAsC,CAAA;IACvD,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,uBAAuB,EAAE,EAAE,CAAA;IAClE,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC1D,MAAM,eAAe,CACnB,GAAG,EACH,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAU,CAAC,CAC7D,CAAA;IACD,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;AACtC,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media-bulk-update.d.ts","sourceRoot":"","sources":["../../src/handlers/media-bulk-update.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAG7C,iDAAiD;AACjD,eAAO,MAAM,eAAe,EAAE,UAuB7B,CAAA"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { announceChanges } from '../content-change.js';
|
|
2
|
+
import { requireRole } from '../permissions.js';
|
|
3
|
+
import { hasMediaStorage, MEDIA_NOT_CONFIGURED } from '../validators.js';
|
|
4
|
+
/** PUT /api/media/bulk — bulk update alt text */
|
|
5
|
+
export const mediaBulkUpdate = async (req, ctx) => {
|
|
6
|
+
const denied = requireRole(ctx.auth, 'editor');
|
|
7
|
+
if (denied)
|
|
8
|
+
return denied;
|
|
9
|
+
if (!hasMediaStorage(ctx))
|
|
10
|
+
return MEDIA_NOT_CONFIGURED;
|
|
11
|
+
const body = req.body;
|
|
12
|
+
if (!body?.ids || !Array.isArray(body.ids) || body.ids.length === 0) {
|
|
13
|
+
return { status: 400, body: { error: 'ids array is required' } };
|
|
14
|
+
}
|
|
15
|
+
if (typeof body.altText !== 'string') {
|
|
16
|
+
return { status: 400, body: { error: 'altText string is required' } };
|
|
17
|
+
}
|
|
18
|
+
const updated = await ctx.mediaStorage.bulkUpdateAltText(body.ids, body.altText);
|
|
19
|
+
// The storage reports only a count, so every requested asset is announced
|
|
20
|
+
if (updated > 0) {
|
|
21
|
+
await announceChanges(ctx, body.ids.map((id) => ({ kind: 'media', id })));
|
|
22
|
+
}
|
|
23
|
+
return { status: 200, body: { updated } };
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=media-bulk-update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media-bulk-update.js","sourceRoot":"","sources":["../../src/handlers/media-bulk-update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAE/C,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAExE,iDAAiD;AACjD,MAAM,CAAC,MAAM,eAAe,GAAe,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;IAC5D,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;IAC9C,IAAI,MAAM;QAAE,OAAO,MAAM,CAAA;IAEzB,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;QAAE,OAAO,oBAAoB,CAAA;IAEtD,MAAM,IAAI,GAAG,GAAG,CAAC,IAAwD,CAAA;IACzE,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,uBAAuB,EAAE,EAAE,CAAA;IAClE,CAAC;IACD,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QACrC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,4BAA4B,EAAE,EAAE,CAAA;IACvE,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,YAAY,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;IAChF,0EAA0E;IAC1E,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QAChB,MAAM,eAAe,CACnB,GAAG,EACH,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAU,CAAC,CACvD,CAAA;IACH,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,CAAA;AAC3C,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media-delete.d.ts","sourceRoot":"","sources":["../../src/handlers/media-delete.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAG7C,wEAAwE;AACxE,eAAO,MAAM,WAAW,EAAE,UAuBzB,CAAA"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { announceChange } from '../content-change.js';
|
|
2
|
+
import { mediaReferences } from '../media-references.js';
|
|
3
|
+
import { requireRole } from '../permissions.js';
|
|
4
|
+
import { hasMediaStorage, MEDIA_NOT_CONFIGURED, requireParam } from '../validators.js';
|
|
5
|
+
/** DELETE /api/media/:id — delete a media item (warns if referenced) */
|
|
6
|
+
export const mediaDelete = async (req, ctx) => {
|
|
7
|
+
const denied = requireRole(ctx.auth, 'editor');
|
|
8
|
+
if (denied)
|
|
9
|
+
return denied;
|
|
10
|
+
if (!hasMediaStorage(ctx))
|
|
11
|
+
return MEDIA_NOT_CONFIGURED;
|
|
12
|
+
const idResult = requireParam(req.params, 'id');
|
|
13
|
+
if (!idResult.isValid)
|
|
14
|
+
return idResult.response;
|
|
15
|
+
const id = idResult.value;
|
|
16
|
+
// Report where the file was used: those documents now point at a file that is gone
|
|
17
|
+
const references = (await mediaReferences(ctx, [id])).get(id) ?? [];
|
|
18
|
+
await ctx.mediaStorage.delete(id);
|
|
19
|
+
await announceChange(ctx, { kind: 'media', id });
|
|
20
|
+
const result = { message: 'Deleted' };
|
|
21
|
+
if (references.length > 0) {
|
|
22
|
+
result['warning'] = 'Media was referenced by content items';
|
|
23
|
+
result['references'] = references;
|
|
24
|
+
}
|
|
25
|
+
return { status: 200, body: result };
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=media-delete.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media-delete.js","sourceRoot":"","sources":["../../src/handlers/media-delete.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAE/C,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAEtF,wEAAwE;AACxE,MAAM,CAAC,MAAM,WAAW,GAAe,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;IACxD,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;IAC9C,IAAI,MAAM;QAAE,OAAO,MAAM,CAAA;IAEzB,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;QAAE,OAAO,oBAAoB,CAAA;IAEtD,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;IAC/C,IAAI,CAAC,QAAQ,CAAC,OAAO;QAAE,OAAO,QAAQ,CAAC,QAAQ,CAAA;IAC/C,MAAM,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAA;IAEzB,mFAAmF;IACnF,MAAM,UAAU,GAAG,CAAC,MAAM,eAAe,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAA;IAEnE,MAAM,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IACjC,MAAM,cAAc,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAA;IAEhD,MAAM,MAAM,GAA4B,EAAE,OAAO,EAAE,SAAS,EAAE,CAAA;IAC9D,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,CAAC,SAAS,CAAC,GAAG,uCAAuC,CAAA;QAC3D,MAAM,CAAC,YAAY,CAAC,GAAG,UAAU,CAAA;IACnC,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;AACtC,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media-duplicate.d.ts","sourceRoot":"","sources":["../../src/handlers/media-duplicate.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAG7C,gEAAgE;AAChE,eAAO,MAAM,cAAc,EAAE,UAgB5B,CAAA"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { requireRole } from '../permissions.js';
|
|
2
|
+
import { hasMediaStorage, MEDIA_NOT_CONFIGURED, requireParam } from '../validators.js';
|
|
3
|
+
/** POST /api/media/:id/duplicate — create a copy with new ID */
|
|
4
|
+
export const mediaDuplicate = async (req, ctx) => {
|
|
5
|
+
const denied = requireRole(ctx.auth, 'editor');
|
|
6
|
+
if (denied)
|
|
7
|
+
return denied;
|
|
8
|
+
if (!hasMediaStorage(ctx))
|
|
9
|
+
return MEDIA_NOT_CONFIGURED;
|
|
10
|
+
const idResult = requireParam(req.params, 'id');
|
|
11
|
+
if (!idResult.isValid)
|
|
12
|
+
return idResult.response;
|
|
13
|
+
const id = idResult.value;
|
|
14
|
+
const item = await ctx.mediaStorage.duplicate(id);
|
|
15
|
+
if (!item) {
|
|
16
|
+
return { status: 404, body: { error: 'Media item not found' } };
|
|
17
|
+
}
|
|
18
|
+
return { status: 201, body: item };
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=media-duplicate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media-duplicate.js","sourceRoot":"","sources":["../../src/handlers/media-duplicate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAE/C,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAEtF,gEAAgE;AAChE,MAAM,CAAC,MAAM,cAAc,GAAe,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;IAC3D,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;IAC9C,IAAI,MAAM;QAAE,OAAO,MAAM,CAAA;IAEzB,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;QAAE,OAAO,oBAAoB,CAAA;IAEtD,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;IAC/C,IAAI,CAAC,QAAQ,CAAC,OAAO;QAAE,OAAO,QAAQ,CAAC,QAAQ,CAAA;IAC/C,MAAM,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAA;IAEzB,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;IACjD,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,sBAAsB,EAAE,EAAE,CAAA;IACjE,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAA;AACpC,CAAC,CAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ApiHandler } from '../types.js';
|
|
2
|
+
/** GET /api/media/folders — list folder tree */
|
|
3
|
+
export declare const mediaFolders: ApiHandler;
|
|
4
|
+
/** POST /api/media/folders — create folder */
|
|
5
|
+
export declare const mediaFolderCreate: ApiHandler;
|
|
6
|
+
/** PUT /api/media/folders/:id — rename folder */
|
|
7
|
+
export declare const mediaFolderRename: ApiHandler;
|
|
8
|
+
/** DELETE /api/media/folders/:id — delete empty folder */
|
|
9
|
+
export declare const mediaFolderDelete: ApiHandler;
|
|
10
|
+
/** PUT /api/media/:id/move — move media item to a folder */
|
|
11
|
+
export declare const mediaMove: ApiHandler;
|
|
12
|
+
//# sourceMappingURL=media-folders.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media-folders.d.ts","sourceRoot":"","sources":["../../src/handlers/media-folders.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAe,MAAM,aAAa,CAAA;AAa1D,gDAAgD;AAChD,eAAO,MAAM,YAAY,EAAE,UAK1B,CAAA;AAED,8CAA8C;AAC9C,eAAO,MAAM,iBAAiB,EAAE,UA0B/B,CAAA;AAED,iDAAiD;AACjD,eAAO,MAAM,iBAAiB,EAAE,UAyB/B,CAAA;AAED,0DAA0D;AAC1D,eAAO,MAAM,iBAAiB,EAAE,UAoB/B,CAAA;AAED,4DAA4D;AAC5D,eAAO,MAAM,SAAS,EAAE,UA+BvB,CAAA"}
|