From a23c5dc6b64f225a634ba00039f0896e04d1adff Mon Sep 17 00:00:00 2001 From: Marcel Menk Date: Sat, 20 Jun 2026 12:52:43 +0200 Subject: [PATCH 1/3] feat: decabill documentation --- .github/workflows/release.yml | 111 ++++---- README.md | 41 ++- SECURITY.md | 65 +++-- .../frontend-billing-console/project.json | 3 +- apps/agenstra/frontend-docs/project.json | 40 +-- apps/agenstra/frontend-docs/src/server.ts | 62 +---- apps/agenstra/frontend-docs/src/styles.scss | 1 - .../docker-compose.yaml | 5 +- .../frontend-billing-console/project.json | 2 +- apps/decabill/frontend-docs/.eslintrc.json | 36 +++ apps/decabill/frontend-docs/LICENSE | 107 ++++++++ apps/decabill/frontend-docs/project.json | 239 ++++++++++++++++ .../public/assets/images/favicon.svg | 7 + .../public/assets/images/icon_colorful.svg | 18 ++ .../public/assets/images/icon_light.svg | 18 ++ .../public/assets/images/og-preview.png | Bin 0 -> 20951 bytes .../decabill/frontend-docs/public/favicon.ico | Bin 0 -> 12080 bytes apps/decabill/frontend-docs/src/index.html | 37 +++ apps/decabill/frontend-docs/src/server.ts | 17 ++ apps/decabill/frontend-docs/src/styles.scss | 209 ++++++++++++++ .../frontend-billing-console/project.json | 3 +- apps/shared/frontend-docs/.eslintrc.json | 36 +++ .../frontend-docs/Dockerfile.server | 0 .../shared/frontend-docs}/LICENSE | 0 .../frontend-docs/docker-compose.yaml | 6 +- .../frontend-docs/jest.config.ts | 4 +- apps/shared/frontend-docs/project.json | 27 ++ .../public/assets/images/favicon.svg | 17 ++ .../public/assets/images/icon_colorful.svg | 14 + .../public/assets/images/icon_light.svg | 14 + .../public/assets/images/og-preview.png | Bin 0 -> 1136906 bytes .../frontend-docs/public/favicon.ico | Bin .../frontend-docs/src/app/app.component.html | 0 .../src/app/app.component.spec.ts | 0 .../frontend-docs/src/app/app.component.ts | 0 .../src/app/app.config.server.ts | 0 .../frontend-docs/src/app/app.config.ts | 0 .../frontend-docs/src/app/app.routes.ts | 2 +- .../frontend-docs/src/delegating-server.ts | 0 .../frontend-docs/src/i18n/messages.de.xlf | 20 ++ .../frontend-docs/src/i18n/messages.xlf | 19 +- apps/shared/frontend-docs/src/index.html | 47 ++++ .../frontend-docs/src/main.server.ts | 0 .../frontend-docs/src/main.ts | 0 .../frontend-docs/src/polyfills.ts | 0 .../frontend-docs/src/server.mjs | 0 apps/shared/frontend-docs/src/server.ts | 17 ++ apps/shared/frontend-docs/src/styles.scss | 119 ++++++++ .../frontend-docs/src/test-setup.ts | 0 .../frontend-docs/tsconfig.app.json | 6 +- .../frontend-docs/tsconfig.editor.json | 0 .../frontend-docs/tsconfig.json | 0 .../frontend-docs/tsconfig.spec.json | 0 docs/agenstra/README.md | 26 +- docs/agenstra/api-reference/README.md | 21 -- .../applications/frontend-agent-console.md | 2 +- docs/agenstra/deployment/background-jobs.md | 19 +- docs/agenstra/deployment/docker-deployment.md | 4 +- .../deployment/environment-configuration.md | 59 ++-- .../deployment/production-checklist.md | 2 +- docs/agenstra/features/authentication.md | 2 +- .../features/billing-administration.md | 47 ---- .../features/dynamic-provider-plugins.md | 2 +- docs/agenstra/features/usage-statistics.md | 2 +- .../features/websocket-communication.md | 6 - docs/agenstra/security/README.md | 4 +- docs/agenstra/security/accepted-risks.md | 184 +++++-------- .../agenstra/security/ci-security-scanning.md | 4 +- .../security/compliance-and-standards.md | 5 +- docs/agenstra/security/container-images.md | 8 +- .../security/operational-hardening.md | 44 ++- .../vulnerability-reporting-and-artifacts.md | 17 +- docs/decabill/README.md | 86 ++++++ docs/decabill/api-reference/README.md | 117 ++++++++ docs/decabill/applications/README.md | 107 ++++++++ .../applications/backend-billing-manager.md | 192 +++++++++++++ .../applications/frontend-billing-console.md | 181 +++++++++++++ docs/decabill/architecture/README.md | 138 ++++++++++ docs/decabill/architecture/components.md | 191 +++++++++++++ docs/decabill/architecture/data-flow.md | 256 ++++++++++++++++++ docs/decabill/architecture/system-overview.md | 160 +++++++++++ docs/decabill/deployment/README.md | 133 +++++++++ docs/decabill/deployment/background-jobs.md | 125 +++++++++ docs/decabill/deployment/docker-deployment.md | 183 +++++++++++++ .../deployment/environment-configuration.md | 235 ++++++++++++++++ docs/decabill/deployment/local-development.md | 235 ++++++++++++++++ .../deployment/production-checklist.md | 184 +++++++++++++ docs/decabill/features/README.md | 217 +++++++++++++++ docs/decabill/features/authentication.md | 227 ++++++++++++++++ docs/decabill/features/backorders.md | 96 +++++++ .../features/billing-administration.md | 107 ++++++++ docs/decabill/features/customer-profiles.md | 84 ++++++ .../features/dashboard-and-server-control.md | 94 +++++++ .../features/dynamic-provider-plugins.md | 157 +++++++++++ docs/decabill/features/invoices.md | 128 +++++++++ docs/decabill/features/multi-tenancy.md | 158 +++++++++++ docs/decabill/features/payment-processing.md | 113 ++++++++ docs/decabill/features/real-time-status.md | 123 +++++++++ docs/decabill/features/server-provisioning.md | 144 ++++++++++ .../features/service-types-and-plans.md | 122 +++++++++ docs/decabill/features/subscriptions.md | 147 ++++++++++ docs/decabill/getting-started.md | 232 ++++++++++++++++ docs/decabill/security/README.md | 49 ++++ docs/decabill/security/accepted-risks.md | 138 ++++++++++ .../decabill/security/ci-security-scanning.md | 89 ++++++ .../security/compliance-and-standards.md | 63 +++++ docs/decabill/security/container-images.md | 98 +++++++ .../security/operational-hardening.md | 107 ++++++++ .../vulnerability-reporting-and-artifacts.md | 126 +++++++++ docs/decabill/troubleshooting/README.md | 71 +++++ .../decabill/troubleshooting/common-issues.md | 203 ++++++++++++++ .../troubleshooting/debugging-guide.md | 182 +++++++++++++ .../agenstra/frontend/feature-docs/README.md | 7 - libs/domains/agenstra/frontend/index.ts | 2 - .../frontend/util-docs-parser/README.md | 7 - .../frontend/util-docs-parser/project.json | 21 -- .../frontend/feature-docs/.eslintrc.json | 0 .../shared/frontend/feature-docs/LICENSE | 33 +++ .../shared/frontend/feature-docs/README.md | 7 + .../frontend/feature-docs/jest.config.ts | 4 +- .../frontend/feature-docs/project.json | 10 +- .../frontend/feature-docs/src/index.ts | 0 .../docs-breadcrumbs.component.html | 0 .../docs-breadcrumbs.component.scss | 0 .../docs-breadcrumbs.component.ts | 2 +- .../docs-content/docs-content.component.html | 0 .../docs-content/docs-content.component.scss | 0 .../docs-content/docs-content.component.ts | 21 +- .../docs-layout/docs-layout.component.html | 2 +- .../docs-layout/docs-layout.component.scss | 0 .../docs-layout/docs-layout.component.ts | 5 +- .../docs-navigation.component.html | 0 .../docs-navigation.component.scss | 0 .../docs-navigation.component.ts | 2 +- .../docs-search/docs-search.component.html | 0 .../docs-search/docs-search.component.scss | 0 .../docs-search/docs-search.component.ts | 0 .../docs-table-of-contents.component.html | 0 .../docs-table-of-contents.component.scss | 0 .../docs-table-of-contents.component.ts | 2 +- .../feature-docs/src/lib/components/index.ts | 0 .../mermaid-diagram.component.html | 0 .../mermaid-diagram.component.scss | 0 .../mermaid-diagram.component.ts | 0 .../feature-docs/src/lib/docs.routes.ts | 0 .../pages/docs-page/docs-page.component.html | 0 .../pages/docs-page/docs-page.component.scss | 0 .../pages/docs-page/docs-page.component.ts | 159 ++++++----- .../docs-search-page.component.html | 0 .../docs-search-page.component.scss | 0 .../docs-search-page.component.ts | 17 +- .../feature-docs/src/lib/pages/index.ts | 0 .../feature-docs/src/lib/section.scss | 0 .../src/lib/services/docs-content.service.ts | 2 +- .../lib/services/docs-navigation.service.ts | 2 +- .../src/lib/services/docs-search.service.ts | 2 +- .../feature-docs/src/lib/services/index.ts | 0 .../src/lib/services/theme.service.ts | 0 .../src/lib/utils/docs-seo-metadata.ts | 27 ++ .../frontend/feature-docs/src/test-setup.ts | 0 .../frontend/feature-docs/tsconfig.json | 0 .../frontend/feature-docs/tsconfig.lib.json | 0 .../frontend/feature-docs/tsconfig.spec.json | 0 libs/domains/shared/frontend/index.ts | 2 + .../lib/environment.agenstra.production.ts | 3 + .../src/lib/environment.agenstra.ts | 3 + .../lib/environment.decabill.production.ts | 3 + .../src/lib/environment.decabill.ts | 3 + .../lib/environment.forepath.production.ts | 3 + .../src/lib/environment.forepath.ts | 3 + .../src/lib/environment.interface.spec.ts | 12 + .../src/lib/environment.interface.ts | 4 + .../src/lib/environment.production.ts | 3 + .../src/lib/environment.token.ts | 1 + .../util-configuration/src/lib/environment.ts | 3 + .../frontend/util-docs-parser/.eslintrc.json | 0 .../frontend/util-docs-parser/LICENSE | 0 .../frontend/util-docs-parser/README.md | 7 + .../frontend/util-docs-parser/jest.config.ts | 4 +- .../frontend/util-docs-parser/project.json | 21 ++ .../frontend/util-docs-parser/src/index.ts | 0 .../lib/interfaces/doc-metadata.interface.ts | 0 .../src/lib/interfaces/index.ts | 0 .../interfaces/navigation-node.interface.ts | 0 .../lib/interfaces/search-index.interface.ts | 0 .../cross-reference-resolver.service.ts | 0 .../src/lib/services/index.ts | 0 .../lib/services/markdown-parser.service.ts | 0 .../services/navigation-builder.service.ts | 0 .../services/search-index-builder.service.ts | 0 .../util-docs-parser/src/test-setup.ts | 0 .../frontend/util-docs-parser/tsconfig.json | 0 .../util-docs-parser/tsconfig.lib.json | 0 .../util-docs-parser/tsconfig.spec.json | 0 .../frontend/util-express-server/src/index.ts | 11 +- .../src/lib/docs-server.ts | 50 ++++ .../util-meta/src/lib/utils/page-meta.util.ts | 17 +- .../utils/social-preview-meta.util.spec.ts | 33 +++ .../src/lib/utils/social-preview-meta.util.ts | 31 ++- .../util-runtime-config-server/README.md | 2 +- .../ci/container-image-sbom-upload-matrix.sh | 1 + tools/ci/upload-release-sboms-by-domain.sh | 6 + tools/docs/generate-docs.ts | 142 ++++------ tsconfig.base.json | 15 +- 204 files changed, 7592 insertions(+), 750 deletions(-) create mode 100644 apps/decabill/frontend-docs/.eslintrc.json create mode 100644 apps/decabill/frontend-docs/LICENSE create mode 100644 apps/decabill/frontend-docs/project.json create mode 100644 apps/decabill/frontend-docs/public/assets/images/favicon.svg create mode 100644 apps/decabill/frontend-docs/public/assets/images/icon_colorful.svg create mode 100644 apps/decabill/frontend-docs/public/assets/images/icon_light.svg create mode 100644 apps/decabill/frontend-docs/public/assets/images/og-preview.png create mode 100644 apps/decabill/frontend-docs/public/favicon.ico create mode 100644 apps/decabill/frontend-docs/src/index.html create mode 100644 apps/decabill/frontend-docs/src/server.ts create mode 100644 apps/decabill/frontend-docs/src/styles.scss create mode 100644 apps/shared/frontend-docs/.eslintrc.json rename apps/{agenstra => shared}/frontend-docs/Dockerfile.server (100%) rename {libs/domains/agenstra/frontend/feature-docs => apps/shared/frontend-docs}/LICENSE (100%) rename apps/{agenstra => shared}/frontend-docs/docker-compose.yaml (67%) rename apps/{agenstra => shared}/frontend-docs/jest.config.ts (84%) create mode 100644 apps/shared/frontend-docs/project.json create mode 100644 apps/shared/frontend-docs/public/assets/images/favicon.svg create mode 100644 apps/shared/frontend-docs/public/assets/images/icon_colorful.svg create mode 100644 apps/shared/frontend-docs/public/assets/images/icon_light.svg create mode 100644 apps/shared/frontend-docs/public/assets/images/og-preview.png rename apps/{agenstra => shared}/frontend-docs/public/favicon.ico (100%) rename apps/{agenstra => shared}/frontend-docs/src/app/app.component.html (100%) rename apps/{agenstra => shared}/frontend-docs/src/app/app.component.spec.ts (100%) rename apps/{agenstra => shared}/frontend-docs/src/app/app.component.ts (100%) rename apps/{agenstra => shared}/frontend-docs/src/app/app.config.server.ts (100%) rename apps/{agenstra => shared}/frontend-docs/src/app/app.config.ts (100%) rename apps/{agenstra => shared}/frontend-docs/src/app/app.routes.ts (64%) rename apps/{agenstra => shared}/frontend-docs/src/delegating-server.ts (100%) rename apps/{agenstra => shared}/frontend-docs/src/i18n/messages.de.xlf (79%) rename apps/{agenstra => shared}/frontend-docs/src/i18n/messages.xlf (81%) create mode 100644 apps/shared/frontend-docs/src/index.html rename apps/{agenstra => shared}/frontend-docs/src/main.server.ts (100%) rename apps/{agenstra => shared}/frontend-docs/src/main.ts (100%) rename apps/{agenstra => shared}/frontend-docs/src/polyfills.ts (100%) rename apps/{agenstra => shared}/frontend-docs/src/server.mjs (100%) create mode 100644 apps/shared/frontend-docs/src/server.ts create mode 100644 apps/shared/frontend-docs/src/styles.scss rename apps/{agenstra => shared}/frontend-docs/src/test-setup.ts (100%) rename apps/{agenstra => shared}/frontend-docs/tsconfig.app.json (76%) rename apps/{agenstra => shared}/frontend-docs/tsconfig.editor.json (100%) rename apps/{agenstra => shared}/frontend-docs/tsconfig.json (100%) rename apps/{agenstra => shared}/frontend-docs/tsconfig.spec.json (100%) delete mode 100644 docs/agenstra/features/billing-administration.md create mode 100644 docs/decabill/README.md create mode 100644 docs/decabill/api-reference/README.md create mode 100644 docs/decabill/applications/README.md create mode 100644 docs/decabill/applications/backend-billing-manager.md create mode 100644 docs/decabill/applications/frontend-billing-console.md create mode 100644 docs/decabill/architecture/README.md create mode 100644 docs/decabill/architecture/components.md create mode 100644 docs/decabill/architecture/data-flow.md create mode 100644 docs/decabill/architecture/system-overview.md create mode 100644 docs/decabill/deployment/README.md create mode 100644 docs/decabill/deployment/background-jobs.md create mode 100644 docs/decabill/deployment/docker-deployment.md create mode 100644 docs/decabill/deployment/environment-configuration.md create mode 100644 docs/decabill/deployment/local-development.md create mode 100644 docs/decabill/deployment/production-checklist.md create mode 100644 docs/decabill/features/README.md create mode 100644 docs/decabill/features/authentication.md create mode 100644 docs/decabill/features/backorders.md create mode 100644 docs/decabill/features/billing-administration.md create mode 100644 docs/decabill/features/customer-profiles.md create mode 100644 docs/decabill/features/dashboard-and-server-control.md create mode 100644 docs/decabill/features/dynamic-provider-plugins.md create mode 100644 docs/decabill/features/invoices.md create mode 100644 docs/decabill/features/multi-tenancy.md create mode 100644 docs/decabill/features/payment-processing.md create mode 100644 docs/decabill/features/real-time-status.md create mode 100644 docs/decabill/features/server-provisioning.md create mode 100644 docs/decabill/features/service-types-and-plans.md create mode 100644 docs/decabill/features/subscriptions.md create mode 100644 docs/decabill/getting-started.md create mode 100644 docs/decabill/security/README.md create mode 100644 docs/decabill/security/accepted-risks.md create mode 100644 docs/decabill/security/ci-security-scanning.md create mode 100644 docs/decabill/security/compliance-and-standards.md create mode 100644 docs/decabill/security/container-images.md create mode 100644 docs/decabill/security/operational-hardening.md create mode 100644 docs/decabill/security/vulnerability-reporting-and-artifacts.md create mode 100644 docs/decabill/troubleshooting/README.md create mode 100644 docs/decabill/troubleshooting/common-issues.md create mode 100644 docs/decabill/troubleshooting/debugging-guide.md delete mode 100644 libs/domains/agenstra/frontend/feature-docs/README.md delete mode 100644 libs/domains/agenstra/frontend/util-docs-parser/README.md delete mode 100644 libs/domains/agenstra/frontend/util-docs-parser/project.json rename libs/domains/{agenstra => shared}/frontend/feature-docs/.eslintrc.json (100%) create mode 100644 libs/domains/shared/frontend/feature-docs/LICENSE create mode 100644 libs/domains/shared/frontend/feature-docs/README.md rename libs/domains/{agenstra => shared}/frontend/feature-docs/jest.config.ts (80%) rename libs/domains/{agenstra => shared}/frontend/feature-docs/project.json (50%) rename libs/domains/{agenstra => shared}/frontend/feature-docs/src/index.ts (100%) rename libs/domains/{agenstra => shared}/frontend/feature-docs/src/lib/components/docs-breadcrumbs/docs-breadcrumbs.component.html (100%) rename libs/domains/{agenstra => shared}/frontend/feature-docs/src/lib/components/docs-breadcrumbs/docs-breadcrumbs.component.scss (100%) rename libs/domains/{agenstra => shared}/frontend/feature-docs/src/lib/components/docs-breadcrumbs/docs-breadcrumbs.component.ts (92%) rename libs/domains/{agenstra => shared}/frontend/feature-docs/src/lib/components/docs-content/docs-content.component.html (100%) rename libs/domains/{agenstra => shared}/frontend/feature-docs/src/lib/components/docs-content/docs-content.component.scss (100%) rename libs/domains/{agenstra => shared}/frontend/feature-docs/src/lib/components/docs-content/docs-content.component.ts (95%) rename libs/domains/{agenstra => shared}/frontend/feature-docs/src/lib/components/docs-layout/docs-layout.component.html (99%) rename libs/domains/{agenstra => shared}/frontend/feature-docs/src/lib/components/docs-layout/docs-layout.component.scss (100%) rename libs/domains/{agenstra => shared}/frontend/feature-docs/src/lib/components/docs-layout/docs-layout.component.ts (90%) rename libs/domains/{agenstra => shared}/frontend/feature-docs/src/lib/components/docs-navigation/docs-navigation.component.html (100%) rename libs/domains/{agenstra => shared}/frontend/feature-docs/src/lib/components/docs-navigation/docs-navigation.component.scss (100%) rename libs/domains/{agenstra => shared}/frontend/feature-docs/src/lib/components/docs-navigation/docs-navigation.component.ts (95%) rename libs/domains/{agenstra => shared}/frontend/feature-docs/src/lib/components/docs-search/docs-search.component.html (100%) rename libs/domains/{agenstra => shared}/frontend/feature-docs/src/lib/components/docs-search/docs-search.component.scss (100%) rename libs/domains/{agenstra => shared}/frontend/feature-docs/src/lib/components/docs-search/docs-search.component.ts (100%) rename libs/domains/{agenstra => shared}/frontend/feature-docs/src/lib/components/docs-table-of-contents/docs-table-of-contents.component.html (100%) rename libs/domains/{agenstra => shared}/frontend/feature-docs/src/lib/components/docs-table-of-contents/docs-table-of-contents.component.scss (100%) rename libs/domains/{agenstra => shared}/frontend/feature-docs/src/lib/components/docs-table-of-contents/docs-table-of-contents.component.ts (96%) rename libs/domains/{agenstra => shared}/frontend/feature-docs/src/lib/components/index.ts (100%) rename libs/domains/{agenstra => shared}/frontend/feature-docs/src/lib/components/mermaid-diagram/mermaid-diagram.component.html (100%) rename libs/domains/{agenstra => shared}/frontend/feature-docs/src/lib/components/mermaid-diagram/mermaid-diagram.component.scss (100%) rename libs/domains/{agenstra => shared}/frontend/feature-docs/src/lib/components/mermaid-diagram/mermaid-diagram.component.ts (100%) rename libs/domains/{agenstra => shared}/frontend/feature-docs/src/lib/docs.routes.ts (100%) rename libs/domains/{agenstra => shared}/frontend/feature-docs/src/lib/pages/docs-page/docs-page.component.html (100%) rename libs/domains/{agenstra => shared}/frontend/feature-docs/src/lib/pages/docs-page/docs-page.component.scss (100%) rename libs/domains/{agenstra => shared}/frontend/feature-docs/src/lib/pages/docs-page/docs-page.component.ts (70%) rename libs/domains/{agenstra => shared}/frontend/feature-docs/src/lib/pages/docs-search-page/docs-search-page.component.html (100%) rename libs/domains/{agenstra => shared}/frontend/feature-docs/src/lib/pages/docs-search-page/docs-search-page.component.scss (100%) rename libs/domains/{agenstra => shared}/frontend/feature-docs/src/lib/pages/docs-search-page/docs-search-page.component.ts (82%) rename libs/domains/{agenstra => shared}/frontend/feature-docs/src/lib/pages/index.ts (100%) rename libs/domains/{agenstra => shared}/frontend/feature-docs/src/lib/section.scss (100%) rename libs/domains/{agenstra => shared}/frontend/feature-docs/src/lib/services/docs-content.service.ts (97%) rename libs/domains/{agenstra => shared}/frontend/feature-docs/src/lib/services/docs-navigation.service.ts (96%) rename libs/domains/{agenstra => shared}/frontend/feature-docs/src/lib/services/docs-search.service.ts (97%) rename libs/domains/{agenstra => shared}/frontend/feature-docs/src/lib/services/index.ts (100%) rename libs/domains/{agenstra => shared}/frontend/feature-docs/src/lib/services/theme.service.ts (100%) create mode 100644 libs/domains/shared/frontend/feature-docs/src/lib/utils/docs-seo-metadata.ts rename libs/domains/{agenstra => shared}/frontend/feature-docs/src/test-setup.ts (100%) rename libs/domains/{agenstra => shared}/frontend/feature-docs/tsconfig.json (100%) rename libs/domains/{agenstra => shared}/frontend/feature-docs/tsconfig.lib.json (100%) rename libs/domains/{agenstra => shared}/frontend/feature-docs/tsconfig.spec.json (100%) rename libs/domains/{agenstra => shared}/frontend/util-docs-parser/.eslintrc.json (100%) rename libs/domains/{agenstra => shared}/frontend/util-docs-parser/LICENSE (100%) create mode 100644 libs/domains/shared/frontend/util-docs-parser/README.md rename libs/domains/{agenstra => shared}/frontend/util-docs-parser/jest.config.ts (79%) create mode 100644 libs/domains/shared/frontend/util-docs-parser/project.json rename libs/domains/{agenstra => shared}/frontend/util-docs-parser/src/index.ts (100%) rename libs/domains/{agenstra => shared}/frontend/util-docs-parser/src/lib/interfaces/doc-metadata.interface.ts (100%) rename libs/domains/{agenstra => shared}/frontend/util-docs-parser/src/lib/interfaces/index.ts (100%) rename libs/domains/{agenstra => shared}/frontend/util-docs-parser/src/lib/interfaces/navigation-node.interface.ts (100%) rename libs/domains/{agenstra => shared}/frontend/util-docs-parser/src/lib/interfaces/search-index.interface.ts (100%) rename libs/domains/{agenstra => shared}/frontend/util-docs-parser/src/lib/services/cross-reference-resolver.service.ts (100%) rename libs/domains/{agenstra => shared}/frontend/util-docs-parser/src/lib/services/index.ts (100%) rename libs/domains/{agenstra => shared}/frontend/util-docs-parser/src/lib/services/markdown-parser.service.ts (100%) rename libs/domains/{agenstra => shared}/frontend/util-docs-parser/src/lib/services/navigation-builder.service.ts (100%) rename libs/domains/{agenstra => shared}/frontend/util-docs-parser/src/lib/services/search-index-builder.service.ts (100%) rename libs/domains/{agenstra => shared}/frontend/util-docs-parser/src/test-setup.ts (100%) rename libs/domains/{agenstra => shared}/frontend/util-docs-parser/tsconfig.json (100%) rename libs/domains/{agenstra => shared}/frontend/util-docs-parser/tsconfig.lib.json (100%) rename libs/domains/{agenstra => shared}/frontend/util-docs-parser/tsconfig.spec.json (100%) create mode 100644 libs/domains/shared/frontend/util-express-server/src/lib/docs-server.ts diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 9e37e47c3..8eb96417c 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -702,99 +702,112 @@ jobs: find container-sbom-download -type f -name 'container-*.cdx.json' -exec cp -n {} dist/sboms/ \; fi - - name: Upload agent-console SBOM - id: upload-sbom-agent-console + - name: Upload agenstra-frontend-agent-console SBOM + id: upload-sbom-agenstra-frontend-agent-console uses: forepath/gh-upload-sbom@v2 continue-on-error: true with: serverhostname: dependencytrack.forepath.io apikey: ${{ secrets.DEPENDENCY_TRACK_API_KEY }} parent: '91161848-3734-4339-a504-bf08853348b1' - projectname: 'agent-console' + projectname: 'agenstra-frontend-agent-console' projectversion: ${{ needs.publish.outputs.new_release_version }} autocreate: true bomfilename: 'dist/sboms/agenstra-frontend-agent-console.cdx.json' - - name: Upload agent-controller SBOM - id: upload-sbom-agent-controller + - name: Upload agenstra-backend-agent-controller SBOM + id: upload-sbom-agenstra-backend-agent-controller uses: forepath/gh-upload-sbom@v2 continue-on-error: true with: serverhostname: dependencytrack.forepath.io apikey: ${{ secrets.DEPENDENCY_TRACK_API_KEY }} parent: 'fab6501b-b798-4e62-91b9-4bb1c5c175c1' - projectname: 'agent-controller' + projectname: 'agenstra-backend-agent-controller' projectversion: ${{ needs.publish.outputs.new_release_version }} autocreate: true bomfilename: 'dist/sboms/agenstra-backend-agent-controller.cdx.json' - - name: Upload agent-manager SBOM - id: upload-sbom-agent-manager + - name: Upload agenstra-backend-agent-manager SBOM + id: upload-sbom-agenstra-backend-agent-manager uses: forepath/gh-upload-sbom@v2 continue-on-error: true with: serverhostname: dependencytrack.forepath.io apikey: ${{ secrets.DEPENDENCY_TRACK_API_KEY }} parent: '7d399337-2c6e-408e-8f1f-5f0344af1d08' - projectname: 'agent-manager' + projectname: 'agenstra-backend-agent-manager' projectversion: ${{ needs.publish.outputs.new_release_version }} autocreate: true bomfilename: 'dist/sboms/agenstra-backend-agent-manager.cdx.json' - - name: Upload billing-console SBOM - id: upload-sbom-billing-console + - name: Upload decabill-frontend-billing-console SBOM + id: upload-sbom-decabill-frontend-billing-console uses: forepath/gh-upload-sbom@v2 continue-on-error: true with: serverhostname: dependencytrack.forepath.io apikey: ${{ secrets.DEPENDENCY_TRACK_API_KEY }} parent: '6c94f662-28c5-4317-93aa-415bdbccc3ce' - projectname: 'billing-console' + projectname: 'decabill-frontend-billing-console' projectversion: ${{ needs.publish.outputs.new_release_version }} autocreate: true bomfilename: 'dist/sboms/decabill-frontend-billing-console.cdx.json' - - name: Upload billing-manager SBOM - id: upload-sbom-billing-manager + - name: Upload decabill-backend-billing-manager SBOM + id: upload-sbom-decabill-backend-billing-manager uses: forepath/gh-upload-sbom@v2 continue-on-error: true with: serverhostname: dependencytrack.forepath.io apikey: ${{ secrets.DEPENDENCY_TRACK_API_KEY }} parent: '9cc09622-15b6-4dbf-a639-42288ffaa6a4' - projectname: 'billing-manager' + projectname: 'decabill-backend-billing-manager' projectversion: ${{ needs.publish.outputs.new_release_version }} autocreate: true bomfilename: 'dist/sboms/decabill-backend-billing-manager.cdx.json' - - name: Upload desktop SBOM - id: upload-sbom-desktop + - name: Upload agenstra-native-agent-console SBOM + id: upload-sbom-agenstra-native-agent-console uses: forepath/gh-upload-sbom@v2 continue-on-error: true with: serverhostname: dependencytrack.forepath.io apikey: ${{ secrets.DEPENDENCY_TRACK_API_KEY }} parent: '3dd3b1cd-c07f-4355-baaf-e391de4293d2' - projectname: 'desktop' + projectname: 'agenstra-native-agent-console' projectversion: ${{ needs.publish.outputs.new_release_version }} autocreate: true bomfilename: 'dist/sboms/agenstra-native-agent-console.cdx.json' - - name: Upload docs SBOM - id: upload-sbom-docs + - name: Upload agenstra-frontend-docs SBOM + id: upload-sbom-agenstra-frontend-docs uses: forepath/gh-upload-sbom@v2 continue-on-error: true with: serverhostname: dependencytrack.forepath.io apikey: ${{ secrets.DEPENDENCY_TRACK_API_KEY }} parent: '231546ff-a89a-487f-a6b0-6a1361d17a59' - projectname: 'docs' + projectname: 'agenstra-frontend-docs' projectversion: ${{ needs.publish.outputs.new_release_version }} autocreate: true bomfilename: 'dist/sboms/agenstra-frontend-docs.cdx.json' - - name: Upload mcp-devkit SBOM - id: upload-sbom-mcp-devkit + - name: Upload decabill-frontend-docs SBOM + id: upload-sbom-decabill-frontend-docs + uses: forepath/gh-upload-sbom@v2 + continue-on-error: true + with: + serverhostname: dependencytrack.forepath.io + apikey: ${{ secrets.DEPENDENCY_TRACK_API_KEY }} + parent: '231546ff-a89a-487f-a6b0-6a1361d17a59' + projectname: 'decabill-frontend-docs' + projectversion: ${{ needs.publish.outputs.new_release_version }} + autocreate: true + bomfilename: 'dist/sboms/decabill-frontend-docs.cdx.json' + + - name: Upload shared-mcp-devkit SBOM + id: upload-sbom-shared-mcp-devkit uses: forepath/gh-upload-sbom@v2 continue-on-error: true with: @@ -806,8 +819,8 @@ jobs: autocreate: true bomfilename: 'dist/sboms/shared-mcp-devkit.cdx.json' - - name: Upload mcp-proxy SBOM - id: upload-sbom-mcp-proxy + - name: Upload shared-mcp-proxy SBOM + id: upload-sbom-shared-mcp-proxy uses: forepath/gh-upload-sbom@v2 continue-on-error: true with: @@ -819,15 +832,15 @@ jobs: autocreate: true bomfilename: 'dist/sboms/shared-mcp-proxy.cdx.json' - - name: Upload portal SBOM - id: upload-sbom-portal + - name: Upload agenstra-frontend-landingpage SBOM + id: upload-sbom-agenstra-frontend-landingpage uses: forepath/gh-upload-sbom@v2 continue-on-error: true with: serverhostname: dependencytrack.forepath.io apikey: ${{ secrets.DEPENDENCY_TRACK_API_KEY }} parent: 'bb6467b6-ebe9-4f90-91f9-2a785f95441e' - projectname: 'portal' + projectname: 'agenstra-frontend-landingpage' projectversion: ${{ needs.publish.outputs.new_release_version }} autocreate: true bomfilename: 'dist/sboms/agenstra-frontend-landingpage.cdx.json' @@ -840,29 +853,31 @@ jobs: echo "" echo "| Project | Outcome |" echo "|---------|---------|" - echo "| agent-console | ${{ steps.upload-sbom-agent-console.outcome }} |" - echo "| agent-controller | ${{ steps.upload-sbom-agent-controller.outcome }} |" - echo "| agent-manager | ${{ steps.upload-sbom-agent-manager.outcome }} |" - echo "| billing-console | ${{ steps.upload-sbom-billing-console.outcome }} |" - echo "| billing-manager | ${{ steps.upload-sbom-billing-manager.outcome }} |" - echo "| desktop | ${{ steps.upload-sbom-desktop.outcome }} |" - echo "| docs | ${{ steps.upload-sbom-docs.outcome }} |" - echo "| shared-mcp-devkit | ${{ steps.upload-sbom-mcp-devkit.outcome }} |" - echo "| shared-mcp-proxy | ${{ steps.upload-sbom-mcp-proxy.outcome }} |" - echo "| portal | ${{ steps.upload-sbom-portal.outcome }} |" + echo "| agenstra-frontend-agent-console | ${{ steps.upload-sbom-agenstra-frontend-agent-console.outcome }} |" + echo "| agenstra-backend-agent-controller | ${{ steps.upload-sbom-agenstra-backend-agent-controller.outcome }} |" + echo "| agenstra-backend-agent-manager | ${{ steps.upload-sbom-agenstra-backend-agent-manager.outcome }} |" + echo "| decabill-frontend-billing-console | ${{ steps.upload-sbom-decabill-frontend-billing-console.outcome }} |" + echo "| decabill-backend-billing-manager | ${{ steps.upload-sbom-decabill-backend-billing-manager.outcome }} |" + echo "| agenstra-native-agent-console | ${{ steps.upload-sbom-agenstra-native-agent-console.outcome }} |" + echo "| agenstra-frontend-docs | ${{ steps.upload-sbom-agenstra-frontend-docs.outcome }} |" + echo "| decabill-frontend-docs | ${{ steps.upload-sbom-decabill-frontend-docs.outcome }} |" + echo "| shared-mcp-devkit | ${{ steps.upload-sbom-shared-mcp-devkit.outcome }} |" + echo "| shared-mcp-proxy | ${{ steps.upload-sbom-shared-mcp-proxy.outcome }} |" + echo "| agenstra-frontend-landingpage | ${{ steps.upload-sbom-agenstra-frontend-landingpage.outcome }} |" } >> "$GITHUB_STEP_SUMMARY" failed=0 for outcome in \ - "${{ steps.upload-sbom-agent-console.outcome }}" \ - "${{ steps.upload-sbom-agent-controller.outcome }}" \ - "${{ steps.upload-sbom-agent-manager.outcome }}" \ - "${{ steps.upload-sbom-billing-console.outcome }}" \ - "${{ steps.upload-sbom-billing-manager.outcome }}" \ - "${{ steps.upload-sbom-desktop.outcome }}" \ - "${{ steps.upload-sbom-docs.outcome }}" \ - "${{ steps.upload-sbom-mcp-devkit.outcome }}" \ - "${{ steps.upload-sbom-mcp-proxy.outcome }}" \ - "${{ steps.upload-sbom-portal.outcome }}" + "${{ steps.upload-sbom-agenstra-frontend-agent-console.outcome }}" \ + "${{ steps.upload-sbom-agenstra-backend-agent-controller.outcome }}" \ + "${{ steps.upload-sbom-agenstra-backend-agent-manager.outcome }}" \ + "${{ steps.upload-sbom-decabill-frontend-billing-console.outcome }}" \ + "${{ steps.upload-sbom-decabill-backend-billing-manager.outcome }}" \ + "${{ steps.upload-sbom-agenstra-native-agent-console.outcome }}" \ + "${{ steps.upload-sbom-agenstra-frontend-docs.outcome }}" \ + "${{ steps.upload-sbom-decabill-frontend-docs.outcome }}" \ + "${{ steps.upload-sbom-shared-mcp-devkit.outcome }}" \ + "${{ steps.upload-sbom-shared-mcp-proxy.outcome }}" \ + "${{ steps.upload-sbom-agenstra-frontend-landingpage.outcome }}" do if [ "$outcome" = "failure" ]; then failed=1 diff --git a/README.md b/README.md index 7a5207caa..ce44e6c71 100644 --- a/README.md +++ b/README.md @@ -71,14 +71,14 @@ flowchart TB AC -->|"HTTP REST API
WebSocket (Socket.IO)"| AM ``` -| Component | Nx project | Path | Description | -| ------------------------ | ----------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------ | -| Frontend agent console | `agenstra-frontend-agent-console` | [`apps/agenstra/frontend-agent-console`](./apps/agenstra/frontend-agent-console/) | Web-based IDE, chat, file management, tickets, knowledge | -| Native agent console | `agenstra-native-agent-console` | [`apps/agenstra/native-agent-console`](./apps/agenstra/native-agent-console/) | Electron desktop shell around the agent console | -| Backend agent controller | `agenstra-backend-agent-controller` | [`apps/agenstra/backend-agent-controller`](./apps/agenstra/backend-agent-controller/) | Control plane for clients, tickets, proxying, and statistics | -| Backend agent manager | `agenstra-backend-agent-manager` | [`apps/agenstra/backend-agent-manager`](./apps/agenstra/backend-agent-manager/) | Agent lifecycle, Docker workloads, VNC, SSH, worker images | -| Frontend docs | `agenstra-frontend-docs` | [`apps/agenstra/frontend-docs`](./apps/agenstra/frontend-docs/) | In-product documentation site | -| Frontend landing page | `agenstra-frontend-landingpage` | [`apps/agenstra/frontend-landingpage`](./apps/agenstra/frontend-landingpage/) | Public Agenstra marketing and pricing site | +| Component | Nx project | Path | Description | +| ------------------------ | ----------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------ | +| Frontend agent console | `agenstra-frontend-agent-console` | [`apps/agenstra/frontend-agent-console`](./apps/agenstra/frontend-agent-console/) | Web-based IDE, chat, file management, tickets, knowledge | +| Native agent console | `agenstra-native-agent-console` | [`apps/agenstra/native-agent-console`](./apps/agenstra/native-agent-console/) | Electron desktop shell around the agent console | +| Backend agent controller | `agenstra-backend-agent-controller` | [`apps/agenstra/backend-agent-controller`](./apps/agenstra/backend-agent-controller/) | Control plane for clients, tickets, proxying, and statistics | +| Backend agent manager | `agenstra-backend-agent-manager` | [`apps/agenstra/backend-agent-manager`](./apps/agenstra/backend-agent-manager/) | Agent lifecycle, Docker workloads, VNC, SSH, worker images | +| Frontend docs | `agenstra-frontend-docs` | [`apps/agenstra/frontend-docs`](./apps/agenstra/frontend-docs/) (patch over [`apps/shared/frontend-docs`](./apps/shared/frontend-docs/)) | In-product documentation site | +| Frontend landing page | `agenstra-frontend-landingpage` | [`apps/agenstra/frontend-landingpage`](./apps/agenstra/frontend-landingpage/) | Public Agenstra marketing and pricing site | Key Agenstra capabilities include centralized management of remote agent-manager instances, WebSocket-based agent chat, Monaco Editor file editing in containers, automated cloud server provisioning (Hetzner Cloud, DigitalOcean), Git operations from the browser, container monitoring and logs, VNC browser access, and CI/CD pipeline management from the console. @@ -92,10 +92,11 @@ To get started with Agenstra: Decabill is the ForePath billing product for subscriptions, invoicing, payment processing, and customer billing administration. Decabill apps and libraries are sublicensed under [BUSL-1.1](./apps/agenstra/backend-agent-controller/LICENSE) (same terms as the Agenstra agent controller). -| Component | Nx project | Path | Description | -| ------------------------ | ----------------------------------- | ------------------------------------------------------------------------------------- | -------------------------------------------- | -| Backend billing manager | `decabill-backend-billing-manager` | [`apps/decabill/backend-billing-manager`](./apps/decabill/backend-billing-manager/) | Subscriptions, invoicing, Stripe integration | -| Frontend billing console | `decabill-frontend-billing-console` | [`apps/decabill/frontend-billing-console`](./apps/decabill/frontend-billing-console/) | Admin and customer billing UI | +| Component | Nx project | Path | Description | +| ------------------------ | ----------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------- | +| Backend billing manager | `decabill-backend-billing-manager` | [`apps/decabill/backend-billing-manager`](./apps/decabill/backend-billing-manager/) | Subscriptions, invoicing, Stripe integration | +| Frontend billing console | `decabill-frontend-billing-console` | [`apps/decabill/frontend-billing-console`](./apps/decabill/frontend-billing-console/) | Admin and customer billing UI | +| Frontend docs | `decabill-frontend-docs` | [`apps/decabill/frontend-docs`](./apps/decabill/frontend-docs/) (patch over [`apps/shared/frontend-docs`](./apps/shared/frontend-docs/)) | In-product documentation site | ### Shared platform @@ -106,6 +107,7 @@ Shared applications and libraries are used by multiple ForePath products. They c | Platform authentication | `shared-platform-authentication` | [`apps/shared/platform-authentication`](./apps/shared/platform-authentication/) | Keycloak Docker Compose for local and shared auth | | MCP devkit | `shared-mcp-devkit` | [`apps/shared/mcp-devkit`](./apps/shared/mcp-devkit/) | Model Context Protocol server for workspace and Nx tooling | | MCP proxy | `shared-mcp-proxy` | [`apps/shared/mcp-proxy`](./apps/shared/mcp-proxy/) | Proxy that routes MCP clients to the devkit | +| Frontend docs (base) | `shared-frontend-docs` | [`apps/shared/frontend-docs`](./apps/shared/frontend-docs/) | Shared SSR docs shell used by brand patch apps | Identity libraries under [`libs/domains/identity`](./libs/domains/identity/) provide Keycloak-backed authentication for NestJS backends and Angular frontends across Agenstra and future products. @@ -129,6 +131,17 @@ Identity libraries under [`libs/domains/identity`](./libs/domains/identity/) pro Feature guides (client management, agent management, server provisioning, WebSocket communication, file management, version control, web IDE, chat, VNC access) live under [`docs/agenstra/features/`](./docs/agenstra/features/). +### Decabill + +- [Getting Started Guide](./docs/decabill/getting-started.md) +- [System Overview](./docs/decabill/architecture/system-overview.md) +- [Docker Deployment](./docs/decabill/deployment/docker-deployment.md) +- [Environment Configuration](./docs/decabill/deployment/environment-configuration.md) +- [API Reference](./docs/decabill/api-reference/README.md) +- [Security documentation](./docs/decabill/security/README.md) + +Feature guides (subscriptions, invoices, billing administration, multi-tenancy, payments, server provisioning) live under [`docs/decabill/features/`](./docs/decabill/features/). + ## License The repository default is the **MIT License**. See [LICENSE](./LICENSE) for the full text. @@ -183,7 +196,9 @@ The following components are source-available. You may view the source code to u - [`apps/agenstra/frontend-landingpage`](./apps/agenstra/frontend-landingpage/) ([LICENSE](./apps/agenstra/frontend-landingpage/LICENSE)) - [`libs/domains/agenstra/frontend/feature-landingpage`](./libs/domains/agenstra/frontend/feature-landingpage/) ([LICENSE](./libs/domains/agenstra/frontend/feature-landingpage/LICENSE)) - [`apps/agenstra/frontend-docs`](./apps/agenstra/frontend-docs/) ([LICENSE](./apps/agenstra/frontend-docs/LICENSE)) -- [`libs/domains/agenstra/frontend/feature-docs`](./libs/domains/agenstra/frontend/feature-docs/) ([LICENSE](./libs/domains/agenstra/frontend/feature-docs/LICENSE)) +- [`apps/decabill/frontend-docs`](./apps/decabill/frontend-docs/) ([LICENSE](./apps/decabill/frontend-docs/LICENSE)) +- [`apps/shared/frontend-docs`](./apps/shared/frontend-docs/) ([LICENSE](./apps/shared/frontend-docs/LICENSE)) +- [`libs/domains/shared/frontend/feature-docs`](./libs/domains/shared/frontend/feature-docs/) ([LICENSE](./libs/domains/shared/frontend/feature-docs/LICENSE)) - [`libs/domains/agenstra/frontend/data-access-portal`](./libs/domains/agenstra/frontend/data-access-portal/) ([LICENSE](./libs/domains/agenstra/frontend/data-access-portal/LICENSE)) ## Contributing diff --git a/SECURITY.md b/SECURITY.md index 65f5b1d70..0c163e028 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -1,5 +1,7 @@ # Security Policy +This policy applies to the **ForePath One** monorepo, which contains multiple products. Product-specific security documentation lives in each product docs tree. Use the links in **Security Resources** below for detailed registers, SBOM paths, and hardening notes. + ## Supported Versions We provide security updates for the following versions of this framework: @@ -11,7 +13,10 @@ We provide security updates for the following versions of this framework: | 0.x.x | No | | Earlier major lines | No | -Security updates are intended for supported **2.x.x** releases. Full disclosure and CRA-oriented context: **[Supported versions and security updates](./docs/agenstra/security/vulnerability-reporting-and-artifacts.md#supported-versions-and-security-updates)**. +Security updates are intended for supported **2.x.x** releases. Full disclosure and CRA-oriented context: + +- **Agenstra:** [Supported versions and security updates](./docs/agenstra/security/vulnerability-reporting-and-artifacts.md#supported-versions-and-security-updates) +- **Decabill:** [Supported versions and security updates](./docs/decabill/security/vulnerability-reporting-and-artifacts.md#supported-versions-and-security-updates) ## Reporting a Vulnerability @@ -24,7 +29,7 @@ We take security seriously and appreciate your help in keeping this framework an Instead, please report security vulnerabilities to our security team: - **Email**: soc@forepath.io -- **Subject**: `[SECURITY] Framework Vulnerability Report` +- **Subject**: `[SECURITY] Framework Vulnerability Report` (you may add the product name, for example `Agenstra` or `Decabill`, in the body) - **Response Time**: We aim to respond within 48 hours ### What to Include in Your Report @@ -60,7 +65,7 @@ We believe in recognizing security researchers who help keep this framework secu ### For Developers - **Keep Dependencies Updated** - Regularly update all dependencies -- **Follow Security Guidelines** - Adhere to the project’s code quality and security practices +- **Follow Security Guidelines** - Adhere to the project's code quality and security practices - **Use Secure Coding Practices** - Follow secure coding principles - **Regular Security Audits** - Perform regular security audits of your code @@ -92,44 +97,52 @@ This framework includes several built-in security features: ## Documented security deviations (accepted risks) -The product intentionally departs from stricter baselines in a few places. Each item below is **accepted** with compensating measures and a **review cadence**. Expanded register entries (BSI / ISMS-style fields, operator summaries, and withdrawal paths) live in **[docs/agenstra/security/accepted-risks.md](./docs/agenstra/security/accepted-risks.md)**. Additional threat context and backlog items may appear in [`thread-analysis.md`](./thread-analysis.md) (internal analysis note). +The products intentionally depart from stricter baselines in a few places. Each item below is **accepted** with compensating measures and a **review cadence**. Expanded register entries live in the product security docs linked below. + +### Agenstra (register AR-001 through AR-005) + +Full register: **[docs/agenstra/security/accepted-risks.md](./docs/agenstra/security/accepted-risks.md)** + +| ID | Area | Summary | +| ---------- | -------------------------- | --------------------------------------------------------------------------- | +| **AR-001** | Desktop app | No OS-trusted code signing; no in-app auto-update (checksum manifests) | +| **AR-002** | Web frontends | CSP allows `unsafe-inline` / `unsafe-eval` for Monaco (report-only default) | +| **AR-003** | Backend auth resolution | `AUTHENTICATION_METHOD` optional; implicit keycloak when no API key set | +| **AR-004** | Desktop window open policy | Electron `setWindowOpenHandler` allows new windows | +| **AR-005** | Trivy gate | Unfixed CVEs do not fail CI (`ignore-unfixed: true`) | -| ID | Area | What we accept | Mitigations (short) | Next review | -| ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -| **AR-001** | **Provisioning SSH** (cloud-init templates) | **`PermitRootLogin yes`** and **root** `authorized_keys` installed via provisioning scripts (`libs/domains/decabill/backend/feature-billing-manager/src/lib/utils/cloud-init/agent-controller.utils.ts`, `agent-manager.utils.ts`) | SSH **key-based** access; **password authentication disabled** in generated `sshd` config; deployers should restrict network access, rotate keys, and monitor instances | **2027-05-06**, or sooner if cloud-init/SSH templates change materially | -| **AR-002** | **Desktop app** (`agenstra-native-agent-console`) | **No OS-trusted code signing** and **no in-app auto-update** in the Electron Forge pipeline (`apps/agenstra/native-agent-console/forge.config.js`) | Release artifacts include **`SHA256SUMS`** and **`integrity-manifest.json`** produced by [`tools/release-integrity`](./tools/release-integrity/README.md); CI/release pipelines **generate and verify** these manifests. Users should verify checksums after download. The web browser remains the primary client; the native build is a secondary channel. | **2027-05-06**, or sooner if desktop becomes the primary distribution path | -| **AR-003** | **Web frontends** (`frontend-*`) | **Content Security Policy** allows **`'unsafe-inline'`** and **`'unsafe-eval'`** so **Monaco Editor** and related tooling work; policy is sent as **`Content-Security-Policy-Report-Only`** by default (violations are reported, not blocked) | Set **`CSP_ENFORCE=true`** only in environments where compatibility is validated. Implementation: `libs/domains/shared/frontend/util-express-server/src/lib/security-headers.ts`. Hardening path: stricter CSP with a validated Monaco/worker/nonce strategy. | **2027-05-06**, or sooner if CSP middleware changes materially | -| **AR-004** | **Backend authentication mode resolution** (`getAuthenticationMethod` in `libs/domains/identity/backend/util-auth/src/lib/hybrid-auth.guard.ts`) | We do **not** require **`AUTHENTICATION_METHOD`** to always be set. When it is unset: if **`STATIC_API_KEY`** is set → **api-key** mode; otherwise → **keycloak** (OIDC / **Keycloak** integration with the deployer’s IdP). **Protected routes are not anonymous**—Keycloak- or users-mode guards still enforce authentication per configuration. | **Default `keycloak`** favors the most integrated, enterprise-typical option (customer IdP). For **api-key** or **users** deployments, set **`AUTHENTICATION_METHOD`** explicitly and treat **`STATIC_API_KEY`** as a high-value secret (rotation, least exposure). | **2027-05-06**, or sooner if hybrid auth resolution changes materially | -| **AR-005** | **Desktop window open policy** (`agenstra-native-agent-console`) | **`setWindowOpenHandler`** in `apps/agenstra/native-agent-console/src/main.ts` uses **`action: 'allow'`** so `window.open` / `target=_blank` can open new Electron windows with inherited `webPreferences`. | Compared with a full browser, phishing and popup abuse risk is **lower**: there is **no address bar (omnibox)** and **users cannot install browser extensions/plugins**. **Sandbox** and **contextIsolation** remain enabled. Revisit if the shell gains untrusted browsing or URL-entry UX. | **2027-05-06**, or sooner if main-process window policy changes materially | -| **AR-006** | **Trivy vulnerability gate** ([`trivy.yaml`](./trivy.yaml)) | **Unfixed CVEs do not fail** CI or local Trivy hooks (`vulnerability.ignore-unfixed: true`). Only **CRITICAL** findings **with a published Fixed Version** fail the gate. | SARIF and workflow artifacts still surface unfixed issues for review; SBOMs and Dependency Track on release add visibility. Use [`.trivyignore`](./.trivyignore) for fixable CVEs that cannot be applied yet—not to waive unfixed findings. See **[AR-006](./docs/agenstra/security/accepted-risks.md#ar-006--ci--local-trivy-unfixed-vulnerabilities-not-gated)**. | **2027-05-06**, or sooner if `trivy.yaml` severity or ignore policy changes materially | -| **AR-007** | **Billing multi-tenant API key** (`backend-billing-manager`, `TenantUserGuard`) | With **`STATIC_API_KEY`** and **without** **`STATIC_API_KEY_TENANT_ID`**, one deployment API key grants **admin access to every tenant** allowed by **`TENANTS`**, selected per request via **`X-Tenant`**. **Accepted** because there is a single shared automation key. | Set **`STATIC_API_KEY_TENANT_ID`** to bind the key to one tenant; prefer **keycloak** / **users** for the billing console; rotate and protect **`STATIC_API_KEY`**. User/session auth remains per-tenant. See **[AR-007](./docs/agenstra/security/accepted-risks.md#ar-007--billing-multi-tenant-api-key-scope-static_api_key_tenant_id-unset)**. | **2027-05-06**, or sooner if billing tenant or API-key policy changes materially | +### Decabill (register DR-001 through DR-005) -**Hardening paths (if an acceptance is withdrawn):** +Full register: **[docs/decabill/security/accepted-risks.md](./docs/decabill/security/accepted-risks.md)** -- **AR-001**: Prefer a non-root admin user, **`PermitRootLogin no`**, least-privilege `sudo`, and cloud-init-native `ssh_authorized_keys` where possible; reduce secrets in user-data. -- **AR-002**: Add OS-trusted signing and/or Electron auto-update when native distribution requirements justify the operational cost. -- **AR-003**: Tighten CSP after automated and manual verification so core UI (including Monaco) still functions. -- **AR-004**: Require **`AUTHENTICATION_METHOD`** in all environments if auditors or policy demand fully explicit configuration, or add startup validation that fails when **`STATIC_API_KEY`** is set without an explicit mode. -- **AR-005**: Tighten **`setWindowOpenHandler`** (e.g. URL allowlist or **`action: 'deny'`**) if the product starts loading untrusted origins or adds browser-like navigation. -- **AR-006**: Fail on unfixed CRITICAL (and optionally HIGH) findings if auditors require zero tolerance regardless of vendor fix availability. -- **AR-007**: Require **`STATIC_API_KEY_TENANT_ID`** when multiple tenants use API key auth, or disable API key on multi-tenant billing, or introduce per-tenant API keys. +| ID | Area | Summary | +| ---------- | ---------------------------- | ------------------------------------------------------------------- | +| **DR-001** | Provisioning SSH | Cloud-init may enable root SSH with authorized_keys | +| **DR-002** | Billing multi-tenant API key | Shared `STATIC_API_KEY` can access all tenants when tenant id unset | +| **DR-003** | Web frontends | CSP allows `unsafe-inline` / `unsafe-eval` (report-only default) | +| **DR-004** | Backend auth resolution | Same implicit auth mode resolution as shared identity stack | +| **DR-005** | Trivy gate | Unfixed CVEs do not fail CI (monorepo-wide `trivy.yaml`) | ## Security Resources ## Software Bill of Materials (SBOM) -We publish CycloneDX SBOM files for each release (Nx service SBOMs and Trivy container image SBOMs). +We publish CycloneDX SBOM files for each release (Nx service SBOMs and Trivy container image SBOMs). Each product publishes to its own object-store bucket under the same key layout. - **Path**: `releases//sboms/` - **Example**: `releases/2.0.0/sboms/` -- **How to find your version**: Check the release version in [Downloads](https://downloads.agenstra.com/), then replace `` in the path above. -Details: **[Software Bill of Materials (SBOM)](./docs/agenstra/security/vulnerability-reporting-and-artifacts.md#software-bill-of-materials-sbom)**. +| Product | Downloads | SBOM documentation | +| -------- | --------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ | +| Agenstra | [downloads.agenstra.com](https://downloads.agenstra.com/) | [Agenstra SBOM](./docs/agenstra/security/vulnerability-reporting-and-artifacts.md#software-bill-of-materials-sbom) | +| Decabill | [downloads.decabill.com](https://downloads.decabill.com/) | [Decabill SBOM](./docs/decabill/security/vulnerability-reporting-and-artifacts.md#software-bill-of-materials-sbom) | ### Documentation -- [Project overview and docs](./docs/agenstra/README.md) - Architecture, deployment, and setup -- [Security documentation](./docs/agenstra/security/README.md) - CRA- and BSI-oriented transparency, accepted-risk register, hardening, SBOM, disclosure, and CI scanning (Trivy) +- [Agenstra documentation](./docs/agenstra/README.md) - Architecture, deployment, and setup +- [Agenstra security documentation](./docs/agenstra/security/README.md) - CRA/BSI transparency, accepted risks, hardening, SBOM, disclosure, CI scanning +- [Decabill documentation](./docs/decabill/README.md) - Billing product guides +- [Decabill security documentation](./docs/decabill/security/README.md) - Decabill accepted risks, SBOM, and hardening ### External Resources diff --git a/apps/agenstra/frontend-billing-console/project.json b/apps/agenstra/frontend-billing-console/project.json index dbc839cc2..a83935696 100644 --- a/apps/agenstra/frontend-billing-console/project.json +++ b/apps/agenstra/frontend-billing-console/project.json @@ -221,7 +221,8 @@ "cache": false, "executor": "nx:run-commands", "options": { - "command": "docker rm -f agenstra-billing-console-server 2>/dev/null || true; docker run -d --name agenstra-billing-console-server --pull never -p ${PORT:-4500}:${PORT:-4500} -e HOST=${HOST:-0.0.0.0} -e PORT=${PORT:-4500} -e NODE_ENV=${NODE_ENV:-production} -e DEFAULT_LOCALE=${DEFAULT_LOCALE:-en} -e CSP_ENFORCE=${CSP_ENFORCE:-true} -e CSP_CONNECT_SRC_EXTRA=${CSP_CONNECT_SRC_EXTRA:-http://host.docker.internal:3200} ghcr.io/forepath/agenstra-billing-console-server:latest" + "cwd": "apps/decabill/frontend-billing-console", + "command": "BILLING_CONSOLE_SERVER_IMAGE=ghcr.io/forepath/agenstra-billing-console-server:latest BILLING_CONSOLE_SERVER_CONTAINER_NAME=agenstra-billing-console-server docker compose up -d --force-recreate --remove-orphans" } }, "sbom": { diff --git a/apps/agenstra/frontend-docs/project.json b/apps/agenstra/frontend-docs/project.json index 4e60f5672..9737ade82 100644 --- a/apps/agenstra/frontend-docs/project.json +++ b/apps/agenstra/frontend-docs/project.json @@ -3,11 +3,11 @@ "$schema": "../../../node_modules/nx/schemas/project-schema.json", "projectType": "application", "prefix": "app", - "sourceRoot": "apps/agenstra/frontend-docs/src", + "sourceRoot": "apps/shared/frontend-docs/src", "i18n": { "sourceLocale": "en", "locales": { - "de": "apps/agenstra/frontend-docs/src/i18n/messages.de.xlf" + "de": "apps/shared/frontend-docs/src/i18n/messages.de.xlf" } }, "tags": ["domain:agenstra", "type:app", "scope:frontend"], @@ -19,7 +19,7 @@ "{workspaceRoot}/dist/apps/agenstra/frontend-docs-temp/public/docs" ], "options": { - "command": "mkdir -p dist/apps/agenstra/frontend-docs-temp/assets/docs dist/apps/agenstra/frontend-docs-temp/public/docs dist/tools/docs && npx tsc tools/docs/generate-docs.ts --outDir dist/tools/docs --module esnext --moduleResolution node --target es2020 --esModuleInterop --skipLibCheck --resolveJsonModule && node dist/tools/docs/generate-docs.js", + "command": "mkdir -p dist/apps/agenstra/frontend-docs-temp/assets/docs dist/apps/agenstra/frontend-docs-temp/public/docs dist/tools/docs && npx tsc tools/docs/generate-docs.ts --outDir dist/tools/docs --module esnext --moduleResolution node --target es2020 --esModuleInterop --skipLibCheck --resolveJsonModule && node dist/tools/docs/generate-docs.js --contentRoot=agenstra --outputTemp=dist/apps/agenstra/frontend-docs-temp", "cwd": "{workspaceRoot}", "cache": false } @@ -31,14 +31,15 @@ "options": { "outputPath": "dist/apps/agenstra/frontend-docs", "index": "apps/agenstra/frontend-docs/src/index.html", - "browser": "apps/agenstra/frontend-docs/src/main.ts", - "polyfills": [ - "zone.js", - "apps/agenstra/frontend-docs/src/polyfills.ts" - ], - "tsConfig": "apps/agenstra/frontend-docs/tsconfig.app.json", + "browser": "apps/shared/frontend-docs/src/main.ts", + "polyfills": ["zone.js", "apps/shared/frontend-docs/src/polyfills.ts"], + "tsConfig": "apps/shared/frontend-docs/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ + { + "glob": "**/*", + "input": "apps/shared/frontend-docs/public" + }, { "glob": "**/*", "input": "apps/agenstra/frontend-docs/public" @@ -71,9 +72,10 @@ ], "styles": [ "node_modules/cookieconsent/build/cookieconsent.min.css", - "apps/agenstra/frontend-docs/src/styles.scss" + "apps/agenstra/frontend-docs/src/styles.scss", + "libs/domains/shared/frontend/util-cookie-consent/src/lib/cookie-consent.scss" ], - "server": "apps/agenstra/frontend-docs/src/main.server.ts", + "server": "apps/shared/frontend-docs/src/main.server.ts", "ssr": { "entry": "apps/agenstra/frontend-docs/src/server.ts" }, @@ -157,14 +159,14 @@ "executor": "@angular-devkit/build-angular:extract-i18n", "options": { "buildTarget": "agenstra-frontend-docs:build", - "outputPath": "apps/agenstra/frontend-docs/src/i18n" + "outputPath": "apps/shared/frontend-docs/src/i18n" } }, "extract-i18n": { "executor": "nx:run-commands", "options": { "command": "node ../../../remove-context-groups.cjs src/i18n/messages.xlf", - "cwd": "apps/agenstra/frontend-docs" + "cwd": "apps/shared/frontend-docs" }, "dependsOn": ["extract-i18n-angular"] }, @@ -175,8 +177,8 @@ "executor": "@nx/jest:jest", "outputs": ["{workspaceRoot}/coverage/{projectRoot}"], "options": { - "jestConfig": "apps/agenstra/frontend-docs/jest.config.ts", - "tsConfig": "apps/agenstra/frontend-docs/tsconfig.spec.json" + "jestConfig": "apps/shared/frontend-docs/jest.config.ts", + "tsConfig": "apps/shared/frontend-docs/tsconfig.spec.json" } }, "serve-static": { @@ -195,7 +197,7 @@ "{workspaceRoot}/dist/apps/agenstra/frontend-docs-delegating-server" ], "options": { - "command": "mkdir -p dist/apps/agenstra/frontend-docs-delegating-server/server && npx tsc apps/agenstra/frontend-docs/src/delegating-server.ts --outDir dist/apps/agenstra/frontend-docs-delegating-server/server --target es2022 --module esnext --moduleResolution node --allowSyntheticDefaultImports --esModuleInterop --skipLibCheck --declaration false --sourceMap false --removeComments true", + "command": "mkdir -p dist/apps/agenstra/frontend-docs-delegating-server/server && npx tsc apps/shared/frontend-docs/src/delegating-server.ts --outDir dist/apps/agenstra/frontend-docs-delegating-server/server --target es2022 --module esnext --moduleResolution node --allowSyntheticDefaultImports --esModuleInterop --skipLibCheck --declaration false --sourceMap false --removeComments true", "cwd": "." } }, @@ -212,7 +214,7 @@ "executor": "@nx-tools/nx-container:build", "options": { "engine": "docker", - "file": "apps/agenstra/frontend-docs/Dockerfile.server", + "file": "apps/shared/frontend-docs/Dockerfile.server", "context": "dist/apps/agenstra/frontend-docs/server" }, "configurations": { @@ -235,8 +237,8 @@ "cache": false, "executor": "nx:run-commands", "options": { - "cwd": "apps/agenstra/frontend-docs", - "command": "docker compose up -d --force-recreate --remove-orphans" + "cwd": "apps/shared/frontend-docs", + "command": "DOCS_SERVER_IMAGE=ghcr.io/forepath/agenstra-docs-server:latest DOCS_SERVER_CONTAINER_NAME=agenstra-docs-server docker compose up -d --force-recreate --remove-orphans" } }, "sbom": { diff --git a/apps/agenstra/frontend-docs/src/server.ts b/apps/agenstra/frontend-docs/src/server.ts index 4cf9eb430..2a2a45f08 100644 --- a/apps/agenstra/frontend-docs/src/server.ts +++ b/apps/agenstra/frontend-docs/src/server.ts @@ -1,62 +1,12 @@ -import { dirname, join, resolve } from 'node:path'; +import { isMainModule } from '@angular/ssr/node'; +// eslint-disable-next-line @nx/enforce-module-boundaries +import bootstrap from '@forepath/shared/frontend/util-docs-bootstrap'; +import { createDocsServer } from '@forepath/shared/frontend/util-express-server'; import { fileURLToPath } from 'node:url'; -import { APP_BASE_HREF } from '@angular/common'; -import { CommonEngine, isMainModule } from '@angular/ssr/node'; -import { - buildSsrAllowedHosts, - createSecurityHeadersMiddleware, - registerRuntimeConfigEndpoint, -} from '@forepath/shared/frontend/util-express-server'; -import express from 'express'; +const app = createDocsServer(['agenstra.com'], bootstrap); -import bootstrap from './main.server'; - -const serverDistFolder = dirname(fileURLToPath(import.meta.url)); -const browserDistFolder = resolve(serverDistFolder, '../browser'); -const indexHtml = join(serverDistFolder, 'index.server.html'); -const app = express(); -const commonEngine = new CommonEngine({ - allowedHosts: buildSsrAllowedHosts(['agenstra.com']), -}); - -app.use(createSecurityHeadersMiddleware()); -registerRuntimeConfigEndpoint(app); - -/** - * Serve static files from /browser - */ -app.get( - '**', - express.static(browserDistFolder, { - maxAge: '1y', - index: 'index.html', - }), -); - -/** - * Handle all other requests by rendering the Angular application. - */ -app.get('**', (req, res, next) => { - const { protocol, originalUrl, baseUrl, headers } = req; - - commonEngine - .render({ - bootstrap, - documentFilePath: indexHtml, - url: `${protocol}://${headers.host}${originalUrl}`, - publicPath: browserDistFolder, - providers: [{ provide: APP_BASE_HREF, useValue: baseUrl }], - }) - .then((html) => res.send(html)) - .catch((err) => next(err)); -}); - -/** - * Start the server if this module is the main entry point. - * The server listens on the port defined by the `PORT` environment variable, or defaults to 4000. - */ -if (isMainModule(import.meta.url)) { +if (isMainModule(fileURLToPath(import.meta.url))) { const port = parseInt(process.env['PORT'] || '4000', 10); app.listen(port, '0.0.0.0', () => { diff --git a/apps/agenstra/frontend-docs/src/styles.scss b/apps/agenstra/frontend-docs/src/styles.scss index b2ba6d3f6..a283b479a 100644 --- a/apps/agenstra/frontend-docs/src/styles.scss +++ b/apps/agenstra/frontend-docs/src/styles.scss @@ -117,4 +117,3 @@ $agenstra-badge-text-bg-colors: primary, secondary, success, info, warning, dang @import 'bootstrap/scss/bootstrap-grid'; @import 'bootstrap-icons/font/bootstrap-icons'; @import '@fontsource-variable/plus-jakarta-sans/wght.css'; -@import 'libs/domains/shared/frontend/util-cookie-consent/src/lib/cookie-consent.scss'; diff --git a/apps/decabill/frontend-billing-console/docker-compose.yaml b/apps/decabill/frontend-billing-console/docker-compose.yaml index bcca7c152..0f52ad11f 100644 --- a/apps/decabill/frontend-billing-console/docker-compose.yaml +++ b/apps/decabill/frontend-billing-console/docker-compose.yaml @@ -1,10 +1,9 @@ services: frontend-billing-console-server: - image: ghcr.io/forepath/decabill-billing-console-server:latest + image: ${BILLING_CONSOLE_SERVER_IMAGE:-ghcr.io/forepath/decabill-billing-console-server:latest} pull_policy: never - container_name: billing-console-server + container_name: ${BILLING_CONSOLE_SERVER_CONTAINER_NAME:-billing-console-server} environment: - # Frontend server configuration HOST: ${HOST:-0.0.0.0} PORT: ${PORT:-4500} NODE_ENV: ${NODE_ENV:-production} diff --git a/apps/decabill/frontend-billing-console/project.json b/apps/decabill/frontend-billing-console/project.json index 27d3f7159..47573c974 100644 --- a/apps/decabill/frontend-billing-console/project.json +++ b/apps/decabill/frontend-billing-console/project.json @@ -218,7 +218,7 @@ "executor": "nx:run-commands", "options": { "cwd": "apps/decabill/frontend-billing-console", - "command": "docker compose up -d --force-recreate --remove-orphans" + "command": "BILLING_CONSOLE_SERVER_IMAGE=ghcr.io/forepath/decabill-billing-console-server:latest BILLING_CONSOLE_SERVER_CONTAINER_NAME=decabill-billing-console-server docker compose up -d --force-recreate --remove-orphans" } }, "sbom": { diff --git a/apps/decabill/frontend-docs/.eslintrc.json b/apps/decabill/frontend-docs/.eslintrc.json new file mode 100644 index 000000000..78770429d --- /dev/null +++ b/apps/decabill/frontend-docs/.eslintrc.json @@ -0,0 +1,36 @@ +{ + "extends": ["../../../.eslintrc.json", "../../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts"], + "extends": [ + "plugin:@nx/angular", + "plugin:@angular-eslint/template/process-inline-templates" + ], + "rules": { + "@angular-eslint/directive-selector": [ + "error", + { + "type": "attribute", + "prefix": "app", + "style": "camelCase" + } + ], + "@angular-eslint/component-selector": [ + "error", + { + "type": "element", + "prefix": "app", + "style": "kebab-case" + } + ] + } + }, + { + "files": ["*.html"], + "extends": ["plugin:@nx/angular-template"], + "rules": {} + } + ] +} diff --git a/apps/decabill/frontend-docs/LICENSE b/apps/decabill/frontend-docs/LICENSE new file mode 100644 index 000000000..f5ad2d389 --- /dev/null +++ b/apps/decabill/frontend-docs/LICENSE @@ -0,0 +1,107 @@ +Licensor: IPvX UG (haftungsbeschränkt) + +Licensed Work: TSEF + The Licensed Work is Copyright © 2025 IPvX UG (haftungsbeschränkt) + +Additional Use Grant: You may use the Licensed Work in production as long as + your Total Finances do not exceed EUR €2,000,000 for the + most recent 12-month period, provided that IPvX UG (haftungsbeschränkt) + will not be liable to you in any way, including for any + damages, including general, special, incidental or + consequential damages, arising out of such use. + + References to: "Total Finances" mean the largest of your + aggregate gross revenues, entire budget, and/or funding + (no matter the source); "you" and "your" include (without + limitation) any individual or entity agreeing to these + terms and any affiliates of such individual or entity; and + "production" mean any use other than (i) development of + (including evaluation of the Licensed Work), debugging, or + testing your offerings, or (ii) making the Licensed Work + available standalone in unmodified object code form. + +Change Date: Three years from release date + +Change License: GNU Affero Public License (AGPL) v3 + +For information about alternative licensing arrangements, please visit +https://agenstra.com. + +-------------------------------------------------------------------------------- + +Business Source License 1.1 + +Terms + +The Licensor hereby grants you the right to copy, modify, create derivative +works, redistribute, and make non-production use of the Licensed Work. The +Licensor may make an Additional Use Grant, above, permitting limited production +use. + +Effective on the Change Date, or the fourth anniversary of the first publicly +available distribution of a specific version of the Licensed Work under this +License, whichever comes first, the Licensor hereby grants you rights under the +terms of the Change License, and the rights granted in the paragraph above +terminate. + +If your use of the Licensed Work does not comply with the requirements currently +in effect as described in this License, you must purchase a commercial license +from the Licensor, its affiliated entities, or authorized resellers, or you must +refrain from using the Licensed Work. + +All copies of the original and modified Licensed Work, and derivative works of +the Licensed Work, are subject to this License. This License applies separately +for each version of the Licensed Work and the Change Date may vary for each +version of the Licensed Work released by Licensor. + +You must conspicuously display this License on each original or modified copy of +the Licensed Work. If you receive the Licensed Work in original or modified form +from a third party, the terms and conditions set forth in this License apply to +your use of that work. + +Any use of the Licensed Work in violation of this License will automatically +terminate your rights under this License for the current and all other versions +of the Licensed Work. + +This License does not grant you any right in any trademark or logo of Licensor +or its affiliates (provided that you may use a trademark or logo of Licensor as +expressly required by this License). + +TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE LICENSED WORK IS PROVIDED ON AN +"AS IS" BASIS. LICENSOR HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS, EXPRESS +OR IMPLIED, INCLUDING (WITHOUT LIMITATION) WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, AND TITLE. + +MariaDB hereby grants you permission to use this License’s text to license your +works, and to refer to it using the trademark "Business Source License", as long +as you comply with the Covenants of Licensor below. + +Covenants of Licensor + +In consideration of the right to use this License’s text and the "Business +Source License" name and trademark, Licensor covenants to MariaDB, and to all +other recipients of the licensed work to be provided by Licensor: + +1. To specify as the Change License the GPL Version 2.0 or any later version, + or a license that is compatible with GPL Version 2.0 or a later version, + where "compatible" means that software provided under the Change License can + be included in a program with software provided under GPL Version 2.0 or a + later version. Licensor may specify additional Change Licenses without + limitation. + +2. To either: (a) specify an additional grant of rights to use that does not + impose any additional restriction on the right granted in this License, as + the Additional Use Grant; or (b) insert the text "None". + +3. To specify a Change Date. + +4. Not to modify this License in any other way. + +Notice + +The Business Source License (this document, or the "License") is not an Open +Source license. However, the Licensed Work will eventually be made available +under an Open Source License, as stated in this License. + +License text copyright © 2023 MariaDB plc, All Rights Reserved. +"Business Source License" is a trademark of MariaDB plc. diff --git a/apps/decabill/frontend-docs/project.json b/apps/decabill/frontend-docs/project.json new file mode 100644 index 000000000..9cf85907e --- /dev/null +++ b/apps/decabill/frontend-docs/project.json @@ -0,0 +1,239 @@ +{ + "name": "decabill-frontend-docs", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "application", + "prefix": "app", + "sourceRoot": "apps/shared/frontend-docs/src", + "i18n": { + "sourceLocale": "en", + "locales": { + "de": "apps/shared/frontend-docs/src/i18n/messages.de.xlf" + } + }, + "tags": ["domain:decabill", "type:app", "scope:frontend"], + "targets": { + "generate-docs": { + "executor": "nx:run-commands", + "outputs": [ + "{workspaceRoot}/dist/apps/decabill/frontend-docs-temp/assets/docs", + "{workspaceRoot}/dist/apps/decabill/frontend-docs-temp/public/docs" + ], + "options": { + "command": "mkdir -p dist/apps/decabill/frontend-docs-temp/assets/docs dist/apps/decabill/frontend-docs-temp/public/docs dist/tools/docs && npx tsc tools/docs/generate-docs.ts --outDir dist/tools/docs --module esnext --moduleResolution node --target es2020 --esModuleInterop --skipLibCheck --resolveJsonModule && node dist/tools/docs/generate-docs.js --contentRoot=decabill --outputTemp=dist/apps/decabill/frontend-docs-temp", + "cwd": "{workspaceRoot}", + "cache": false + } + }, + "build": { + "executor": "@angular-devkit/build-angular:application", + "dependsOn": ["generate-docs"], + "outputs": ["{options.outputPath}"], + "options": { + "outputPath": "dist/apps/decabill/frontend-docs", + "index": "apps/decabill/frontend-docs/src/index.html", + "browser": "apps/shared/frontend-docs/src/main.ts", + "polyfills": ["zone.js", "apps/shared/frontend-docs/src/polyfills.ts"], + "tsConfig": "apps/shared/frontend-docs/tsconfig.app.json", + "inlineStyleLanguage": "scss", + "assets": [ + { + "glob": "**/*", + "input": "apps/shared/frontend-docs/public" + }, + { + "glob": "**/*", + "input": "apps/decabill/frontend-docs/public" + }, + { + "glob": "**/*.json", + "input": "dist/apps/decabill/frontend-docs-temp/assets", + "output": "assets" + }, + { + "glob": "**/*.md", + "input": "docs/decabill", + "output": "docs/decabill" + }, + { + "glob": "**/*.yaml", + "input": "libs/domains/decabill/backend/feature-billing-manager/spec", + "output": "spec/billing-manager" + } + ], + "styles": [ + "node_modules/cookieconsent/build/cookieconsent.min.css", + "apps/decabill/frontend-docs/src/styles.scss", + "libs/domains/shared/frontend/util-cookie-consent/src/lib/cookie-consent.scss" + ], + "server": "apps/shared/frontend-docs/src/main.server.ts", + "ssr": { + "entry": "apps/decabill/frontend-docs/src/server.ts" + }, + "prerender": true, + "scripts": [ + "node_modules/cookieconsent/build/cookieconsent.min.js", + "node_modules/@popperjs/core/dist/umd/popper.min.js", + "node_modules/bootstrap/dist/js/bootstrap.bundle.min.js" + ], + "localize": true, + "i18nMissingTranslation": "warning", + "security": { + "allowedHosts": [ + "localhost", + "127.0.0.1", + "decabill.com", + "*.decabill.com" + ] + } + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "500kb", + "maximumError": "5mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "4kb", + "maximumError": "8kb" + } + ], + "outputHashing": "all", + "fileReplacements": [ + { + "replace": "libs/domains/shared/frontend/util-configuration/src/lib/environment.ts", + "with": "libs/domains/shared/frontend/util-configuration/src/lib/environment.decabill.production.ts" + } + ] + }, + "development": { + "optimization": false, + "extractLicenses": false, + "sourceMap": true, + "fileReplacements": [ + { + "replace": "libs/domains/shared/frontend/util-configuration/src/lib/environment.ts", + "with": "libs/domains/shared/frontend/util-configuration/src/lib/environment.decabill.ts" + } + ] + }, + "en": { + "localize": ["en"] + }, + "de": { + "localize": ["de"] + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "continuous": true, + "executor": "@angular-devkit/build-angular:dev-server", + "options": { + "hmr": false, + "port": 4401 + }, + "configurations": { + "production": { + "buildTarget": "decabill-frontend-docs:build:production,en" + }, + "development": { + "buildTarget": "decabill-frontend-docs:build:development,en" + } + }, + "defaultConfiguration": "development" + }, + "extract-i18n-angular": { + "executor": "@angular-devkit/build-angular:extract-i18n", + "options": { + "buildTarget": "decabill-frontend-docs:build", + "outputPath": "apps/shared/frontend-docs/src/i18n" + } + }, + "extract-i18n": { + "executor": "nx:run-commands", + "options": { + "command": "node ../../../remove-context-groups.cjs src/i18n/messages.xlf", + "cwd": "apps/shared/frontend-docs" + }, + "dependsOn": ["extract-i18n-angular"] + }, + "lint": { + "executor": "@nx/eslint:lint" + }, + "test": { + "executor": "@nx/jest:jest", + "outputs": ["{workspaceRoot}/coverage/{projectRoot}"], + "options": { + "jestConfig": "apps/shared/frontend-docs/jest.config.ts", + "tsConfig": "apps/shared/frontend-docs/tsconfig.spec.json" + } + }, + "serve-static": { + "continuous": true, + "executor": "@nx/web:file-server", + "options": { + "buildTarget": "decabill-frontend-docs:build", + "port": 4401, + "staticFilePath": "dist/apps/decabill/frontend-docs/browser", + "spa": true + } + }, + "build-delegating-server": { + "executor": "nx:run-commands", + "outputs": [ + "{workspaceRoot}/dist/apps/decabill/frontend-docs-delegating-server" + ], + "options": { + "command": "mkdir -p dist/apps/decabill/frontend-docs-delegating-server/server && npx tsc apps/shared/frontend-docs/src/delegating-server.ts --outDir dist/apps/decabill/frontend-docs-delegating-server/server --target es2022 --module esnext --moduleResolution node --allowSyntheticDefaultImports --esModuleInterop --skipLibCheck --declaration false --sourceMap false --removeComments true", + "cwd": "." + } + }, + "postbuild": { + "executor": "nx:run-commands", + "options": { + "command": "cp dist/apps/decabill/frontend-docs-delegating-server/server/delegating-server.js dist/apps/decabill/frontend-docs/server/server.mjs && cp -r dist/apps/decabill/frontend-docs/browser dist/apps/decabill/frontend-docs/server/browser" + }, + "dependsOn": ["build", "build-delegating-server"] + }, + "server-container-image": { + "dependsOn": ["postbuild"], + "cache": false, + "executor": "@nx-tools/nx-container:build", + "options": { + "engine": "docker", + "file": "apps/shared/frontend-docs/Dockerfile.server", + "context": "dist/apps/decabill/frontend-docs/server" + }, + "configurations": { + "test": { + "load": true, + "tags": ["ghcr.io/forepath/decabill-docs-server:latest"] + }, + "release": { + "push": true, + "tags": [ + "ghcr.io/forepath/decabill-docs-server:latest", + "ghcr.io/forepath/decabill-docs-server:$VERSION" + ] + } + }, + "defaultConfiguration": "test" + }, + "start-containers": { + "dependsOn": ["server-container-image"], + "cache": false, + "executor": "nx:run-commands", + "options": { + "cwd": "apps/shared/frontend-docs", + "command": "DOCS_SERVER_IMAGE=ghcr.io/forepath/decabill-docs-server:latest DOCS_SERVER_CONTAINER_NAME=decabill-docs-server docker compose up -d --force-recreate --remove-orphans" + } + }, + "sbom": { + "executor": "@forepath/sbom:sbom", + "dependsOn": ["sbom:build", "build"] + } + } +} diff --git a/apps/decabill/frontend-docs/public/assets/images/favicon.svg b/apps/decabill/frontend-docs/public/assets/images/favicon.svg new file mode 100644 index 000000000..6ac31b983 --- /dev/null +++ b/apps/decabill/frontend-docs/public/assets/images/favicon.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/apps/decabill/frontend-docs/public/assets/images/icon_colorful.svg b/apps/decabill/frontend-docs/public/assets/images/icon_colorful.svg new file mode 100644 index 000000000..b63a7f869 --- /dev/null +++ b/apps/decabill/frontend-docs/public/assets/images/icon_colorful.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/apps/decabill/frontend-docs/public/assets/images/icon_light.svg b/apps/decabill/frontend-docs/public/assets/images/icon_light.svg new file mode 100644 index 000000000..b7378e52c --- /dev/null +++ b/apps/decabill/frontend-docs/public/assets/images/icon_light.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/apps/decabill/frontend-docs/public/assets/images/og-preview.png b/apps/decabill/frontend-docs/public/assets/images/og-preview.png new file mode 100644 index 0000000000000000000000000000000000000000..a7de23df97055fc6c1426955c19f99cef60c0681 GIT binary patch literal 20951 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

;CQO9KAbY7o3_F( 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 Sfd9ho07Y3 + + + + Decabill + + + + + + + + + + + + + + diff --git a/apps/decabill/frontend-docs/src/server.ts b/apps/decabill/frontend-docs/src/server.ts new file mode 100644 index 000000000..16c5d09a5 --- /dev/null +++ b/apps/decabill/frontend-docs/src/server.ts @@ -0,0 +1,17 @@ +import { isMainModule } from '@angular/ssr/node'; +// eslint-disable-next-line @nx/enforce-module-boundaries +import bootstrap from '@forepath/shared/frontend/util-docs-bootstrap'; +import { createDocsServer } from '@forepath/shared/frontend/util-express-server'; +import { fileURLToPath } from 'node:url'; + +const app = createDocsServer(['decabill.com'], bootstrap); + +if (isMainModule(fileURLToPath(import.meta.url))) { + const port = parseInt(process.env['PORT'] || '4000', 10); + + app.listen(port, '0.0.0.0', () => { + console.log(`Node Express server listening on http://localhost:${port}`); + }); +} + +export default app; diff --git a/apps/decabill/frontend-docs/src/styles.scss b/apps/decabill/frontend-docs/src/styles.scss new file mode 100644 index 000000000..3ab21fbd6 --- /dev/null +++ b/apps/decabill/frontend-docs/src/styles.scss @@ -0,0 +1,209 @@ +// Decabill design system (Bootstrap 5 overrides) +// +// Stack (see node_modules/bootstrap/scss/bootstrap.scss): +// functions → variables → variables-dark → maps → … → root +// - _variables.scss: palette, $theme-colors, light-mode emphasis/subtle/body/border +// - _variables-dark.scss: [data-bs-theme="dark"] counterparts ($body-*-dark, etc.) +// - _maps.scss: $theme-colors-text(|-dark), *-bg-subtle*, *-border-subtle* → CSS vars in _root.scss +@import 'bootstrap/scss/functions'; + +$primary: #32a852; +$secondary: #4d6a55; +$tertiary: #4fa186; +$success: #287736; +$warning: #d18552; +$danger: #e04248; +$info: #3f8c92; +// mix($a, $b, $w): higher $w = more of $a. Small $w with $primary first = subtle green wash. +$light: mix($primary, #f8f8f5, 3.5%); +$dark: #0f0f11; + +$code-color: mix($primary, #2a2d31, 28%); + +// Light-mode surfaces: only tint the pale end of the scale. $gray-300–$gray-900 stay as-is so +// _variables-dark.scss (body text, secondary bg, borders) is unchanged. +$gray-100: mix($primary, #f3f4f6, 4%); +$gray-200: mix($primary, #e5e7eb, 3%); +$gray-300: #d1d5db; +$gray-400: #9ca3af; +$gray-500: #6b7280; +$gray-600: #4b5563; +$gray-700: #2a2d31; +$gray-800: #18191d; +$gray-900: #0f0f11; + +// Dark mode maps $light-text-emphasis-dark to $gray-100; pin neutral so it does not pick up the tint above. +$light-text-emphasis-dark: #f3f4f6; + +$border-color: rgba(15, 15, 17, 0.1); +$border-color-dark: rgba(255, 255, 255, 0.08); + +$border-color-translucent: rgba(15, 15, 17, 0.06); +$border-color-translucent-dark: rgba(255, 255, 255, 0.06); + +$body-bg: mix($primary, #f5f4f9, 5.5%); +$body-color: #3c3f45; +$body-emphasis-color: #24262c; + +$body-secondary-bg: mix($primary, #ebe9f0, 4%); +// Tertiary must share $body-bg’s hue; a separate neutral (#f1f0f5 + low primary) reads cool/greenish beside the canvas. +$body-tertiary-bg: mix($primary, #ebe9f0, 4%); + +// ~28% primary in the blend (was inverted: 72% on first arg made links very loud). +$link-color: mix($primary, $gray-700, 28%); + +$primary-text-emphasis: #1f7833; +$secondary-text-emphasis: #3c503e; +$success-text-emphasis: #205627; +$info-text-emphasis: #2d5c5f; +$warning-text-emphasis: #8c5d38; +$danger-text-emphasis: #a32a31; +$light-text-emphasis: $gray-600; +$dark-text-emphasis: $gray-700; + +$primary-bg-subtle: #e6f5ea; +$secondary-bg-subtle: #eaedeb; +$success-bg-subtle: #e5efe7; +$info-bg-subtle: #e8f1f2; +$warning-bg-subtle: #f8ebe3; +$danger-bg-subtle: #fceaeb; +$light-bg-subtle: mix($gray-100, $body-bg, 55%); +$dark-bg-subtle: #d6d8dc; + +$primary-border-subtle: #cce9d4; +$secondary-border-subtle: #d6ddd8; +$success-border-subtle: #c7dccb; +$info-border-subtle: #cde1e3; +$warning-border-subtle: #f1dacb; +$danger-border-subtle: #f7ccce; +$light-border-subtle: $gray-200; +$dark-border-subtle: #b9bcc4; + +$font-family-base: 'Plus Jakarta Sans Variable', sans-serif; +$font-size-base: 0.875rem; + +$badge-font-size: 0.75rem; +$badge-font-weight: 400; +$badge-padding-y: 0.25rem; +$badge-padding-x: 0.5rem; +$badge-border-radius: 0.375rem; +$badge-line-height: 1.5; + +@mixin agenstra-badge-text-bg-tint($color-name) { + .badge { + &.bg-#{$color-name}, + &.text-bg-#{$color-name} { + background-color: color-mix(in srgb, var(--bs-#{$color-name}) 24%, var(--bs-tertiary-bg)) !important; + color: var(--bs-#{$color-name}-text-emphasis) !important; + line-height: $badge-line-height; + } + } +} +$agenstra-badge-text-bg-colors: primary, secondary, success, info, warning, danger, light, dark; +@each $color-name in $agenstra-badge-text-bg-colors { + @include agenstra-badge-text-bg-tint($color-name); +} + +@import 'bootstrap/scss/bootstrap'; + +// Extra --bs-* variables not generated by Bootstrap (used by portal components) +:root { + --bs-primary-dark: #339b4c; + --bs-success-dark: #205e2b; + --bs-body-bg-alt: #f2f6f6; + --bs-dark-alt: #262828; + --bs-scrollbar-thumb: rgba(var(--bs-body-color-rgb), 0.28); + --bs-scrollbar-thumb-hover: rgba(var(--bs-body-color-rgb), 0.45); + --bs-scrollbar-thumb-active: rgba(var(--bs-body-color-rgb), 0.55); + --bs-scrollbar-track: transparent; +} + +@import 'bootstrap/scss/bootstrap-grid'; +@import 'bootstrap-icons/font/bootstrap-icons'; +@import '@fontsource-variable/plus-jakarta-sans/wght.css'; + +// Global scrollbar: thumb tints follow --bs-body-color-rgb, so light/dark switch with [data-bs-theme]. +// Firefox only — Chrome 121+ ignores ::-webkit-scrollbar-* when scrollbar-width is set on the same element. +@supports not selector(::-webkit-scrollbar) { + * { + scrollbar-width: thin; + scrollbar-color: var(--bs-scrollbar-thumb) var(--bs-scrollbar-track); + } +} + +*::-webkit-scrollbar { + width: 0.5rem; + height: 0.5rem; + -webkit-appearance: none; +} + +*::-webkit-scrollbar-button, +*::-webkit-scrollbar-button:single-button, +*::-webkit-scrollbar-button:double-button, +*::-webkit-scrollbar-button:vertical:start:decrement, +*::-webkit-scrollbar-button:vertical:end:increment, +*::-webkit-scrollbar-button:horizontal:start:decrement, +*::-webkit-scrollbar-button:horizontal:end:increment { + display: none; + width: 0; + height: 0; +} + +*::-webkit-scrollbar-track { + background: var(--bs-scrollbar-track); +} + +*::-webkit-scrollbar-thumb { + background-color: var(--bs-scrollbar-thumb); + border: 2px solid transparent; + border-radius: var(--bs-border-radius); + background-clip: padding-box; +} + +*::-webkit-scrollbar-thumb:hover { + background-color: var(--bs-scrollbar-thumb-hover); +} + +*::-webkit-scrollbar-thumb:active { + background-color: var(--bs-scrollbar-thumb-active); +} + +*::-webkit-scrollbar-corner { + background: var(--bs-scrollbar-track); +} + +.status-badge { + width: 1.125rem; + height: 1.125rem; + border-radius: 0.625rem; + font-size: 0.75rem; + color: var(--bs-white); +} + +.info-badge { + display: flex; + align-items: center; + justify-content: center; + font-size: 0.75rem; + + .info-badge-chevron { + font-size: 0.5rem; + top: -0.125rem; + position: relative; + } + + .info-badge-text { + border-radius: 0.28125rem; + } +} + +.list-group-item.active { + .status-badge { + background-color: var(--bs-white) !important; + color: var(--bs-primary) !important; + } + + .info-badge { + background-color: #2b7b4d !important; + } +} diff --git a/apps/forepath/frontend-billing-console/project.json b/apps/forepath/frontend-billing-console/project.json index 7231ea3d0..109a47507 100644 --- a/apps/forepath/frontend-billing-console/project.json +++ b/apps/forepath/frontend-billing-console/project.json @@ -221,7 +221,8 @@ "cache": false, "executor": "nx:run-commands", "options": { - "command": "docker rm -f forepath-billing-console-server 2>/dev/null || true; docker run -d --name forepath-billing-console-server --pull never -p ${PORT:-4500}:${PORT:-4500} -e HOST=${HOST:-0.0.0.0} -e PORT=${PORT:-4500} -e NODE_ENV=${NODE_ENV:-production} -e DEFAULT_LOCALE=${DEFAULT_LOCALE:-en} -e CSP_ENFORCE=${CSP_ENFORCE:-true} -e CSP_CONNECT_SRC_EXTRA=${CSP_CONNECT_SRC_EXTRA:-http://host.docker.internal:3200} ghcr.io/forepath/forepath-billing-console-server:latest" + "cwd": "apps/decabill/frontend-billing-console", + "command": "BILLING_CONSOLE_SERVER_IMAGE=ghcr.io/forepath/forepath-billing-console-server:latest BILLING_CONSOLE_SERVER_CONTAINER_NAME=forepath-billing-console-server docker compose up -d --force-recreate --remove-orphans" } }, "sbom": { diff --git a/apps/shared/frontend-docs/.eslintrc.json b/apps/shared/frontend-docs/.eslintrc.json new file mode 100644 index 000000000..78770429d --- /dev/null +++ b/apps/shared/frontend-docs/.eslintrc.json @@ -0,0 +1,36 @@ +{ + "extends": ["../../../.eslintrc.json", "../../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts"], + "extends": [ + "plugin:@nx/angular", + "plugin:@angular-eslint/template/process-inline-templates" + ], + "rules": { + "@angular-eslint/directive-selector": [ + "error", + { + "type": "attribute", + "prefix": "app", + "style": "camelCase" + } + ], + "@angular-eslint/component-selector": [ + "error", + { + "type": "element", + "prefix": "app", + "style": "kebab-case" + } + ] + } + }, + { + "files": ["*.html"], + "extends": ["plugin:@nx/angular-template"], + "rules": {} + } + ] +} diff --git a/apps/agenstra/frontend-docs/Dockerfile.server b/apps/shared/frontend-docs/Dockerfile.server similarity index 100% rename from apps/agenstra/frontend-docs/Dockerfile.server rename to apps/shared/frontend-docs/Dockerfile.server diff --git a/libs/domains/agenstra/frontend/feature-docs/LICENSE b/apps/shared/frontend-docs/LICENSE similarity index 100% rename from libs/domains/agenstra/frontend/feature-docs/LICENSE rename to apps/shared/frontend-docs/LICENSE diff --git a/apps/agenstra/frontend-docs/docker-compose.yaml b/apps/shared/frontend-docs/docker-compose.yaml similarity index 67% rename from apps/agenstra/frontend-docs/docker-compose.yaml rename to apps/shared/frontend-docs/docker-compose.yaml index da012e4dc..41f5cedbe 100644 --- a/apps/agenstra/frontend-docs/docker-compose.yaml +++ b/apps/shared/frontend-docs/docker-compose.yaml @@ -1,14 +1,14 @@ services: frontend-docs-server: - image: ghcr.io/forepath/agenstra-docs-server:latest + image: ${DOCS_SERVER_IMAGE:-ghcr.io/forepath/agenstra-docs-server:latest} pull_policy: never - container_name: docs-server + container_name: ${DOCS_SERVER_CONTAINER_NAME:-docs-server} environment: - # Frontend server configuration HOST: ${HOST:-0.0.0.0} PORT: ${PORT:-4200} NODE_ENV: ${NODE_ENV:-production} DEFAULT_LOCALE: ${DEFAULT_LOCALE:-en} + CSP_ENFORCE: ${CSP_ENFORCE:-true} ports: - '${PORT:-4200}:${PORT:-4200}' networks: diff --git a/apps/agenstra/frontend-docs/jest.config.ts b/apps/shared/frontend-docs/jest.config.ts similarity index 84% rename from apps/agenstra/frontend-docs/jest.config.ts rename to apps/shared/frontend-docs/jest.config.ts index d064e60bc..c262939dc 100644 --- a/apps/agenstra/frontend-docs/jest.config.ts +++ b/apps/shared/frontend-docs/jest.config.ts @@ -1,8 +1,8 @@ export default { - displayName: 'agenstra-frontend-docs', + displayName: 'shared-frontend-docs', preset: '../../../jest.preset.cjs', setupFilesAfterEnv: ['/src/test-setup.ts'], - coverageDirectory: '../../../coverage/apps/agenstra/frontend-docs', + coverageDirectory: '../../../coverage/apps/shared/frontend-docs', transform: { '^.+\\.(ts|mjs|js|html)$': [ 'jest-preset-angular', diff --git a/apps/shared/frontend-docs/project.json b/apps/shared/frontend-docs/project.json new file mode 100644 index 000000000..7fb8b8cb1 --- /dev/null +++ b/apps/shared/frontend-docs/project.json @@ -0,0 +1,27 @@ +{ + "name": "shared-frontend-docs", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "application", + "prefix": "app", + "sourceRoot": "apps/shared/frontend-docs/src", + "i18n": { + "sourceLocale": "en", + "locales": { + "de": "apps/shared/frontend-docs/src/i18n/messages.de.xlf" + } + }, + "tags": ["domain:shared", "type:app", "scope:frontend"], + "targets": { + "lint": { + "executor": "@nx/eslint:lint" + }, + "test": { + "executor": "@nx/jest:jest", + "outputs": ["{workspaceRoot}/coverage/{projectRoot}"], + "options": { + "jestConfig": "apps/shared/frontend-docs/jest.config.ts", + "tsConfig": "apps/shared/frontend-docs/tsconfig.spec.json" + } + } + } +} diff --git a/apps/shared/frontend-docs/public/assets/images/favicon.svg b/apps/shared/frontend-docs/public/assets/images/favicon.svg new file mode 100644 index 000000000..d6da75d2f --- /dev/null +++ b/apps/shared/frontend-docs/public/assets/images/favicon.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/apps/shared/frontend-docs/public/assets/images/icon_colorful.svg b/apps/shared/frontend-docs/public/assets/images/icon_colorful.svg new file mode 100644 index 000000000..4ba784e52 --- /dev/null +++ b/apps/shared/frontend-docs/public/assets/images/icon_colorful.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/apps/shared/frontend-docs/public/assets/images/icon_light.svg b/apps/shared/frontend-docs/public/assets/images/icon_light.svg new file mode 100644 index 000000000..bb376d5ff --- /dev/null +++ b/apps/shared/frontend-docs/public/assets/images/icon_light.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/apps/shared/frontend-docs/public/assets/images/og-preview.png b/apps/shared/frontend-docs/public/assets/images/og-preview.png new file mode 100644 index 0000000000000000000000000000000000000000..0d56f3bfbf43a51737e935bb5f82df51d51f5bcf GIT binary patch literal 1136906 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�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

5bsI&`&Dt3XQ(Gx+~_MkMV(sVgZCNPi4D25*qB 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 z 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�K3>elU`1l1nX2ovbN#Wp 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 %Qju|J~j4B0*^``7y6zzy7v8q2^TIz!% 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%0D0O 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%0AQ6x5)@+#&DP4nX@|L^)l6dp}(5;7TlF z|5Mj#1hF@6x(VUV9nr~fZlyL!&$)GZF5!dnOhj9=c(lM8Lf4i2OLqU1@es{&zrF@K z-x?M)_tg|c=@$4;UK(MaJfEy^638PBs#cu@{C|b<|0?`?i%e*F{ZDGZ34`R*671S* z%LbZrFJ>HYgdWgO+&(4a&luP`L)A=Q&L4PSdVc~#`doC00E*3}*@*qf`7V6XWr&WV zG}Z#qAS4XLfdpQwMN_A9``#Nd^J^i&)*r>NF}r;*GqZ@c%5aP!H0-EhAl^vR`lXCsyEsWIsz*I0|wP$cRtS|kU+_t{a=*Jl~` z^Vj1KsHBqc-+PPHB7SJyPn%}<`<@rW`bZG0gY>v>Tt-#N^M)wk9&U7P`j?34*q=S` z2uW~Dx*K)18h~bUa?1_Nq&}I|^4VU=XA*FG2KqjEm8(j9{o45bgOYmY*GvoPK`lP% zSm(%q1dY`;Cep5RjFMRwURcne2$OWkh_Mg7NfLdmn6@@*Gm1c72!U`Kt}r3juLA(hZLLt>xL*@4O+s*a+juD;#a~;=;n$__7e?x7cvd?aI2rw`3I?x5FQ ze&VWcAz(3X!x>@l=gNDsY*`~<)agtXG=uAPc2YS2ZI8h27xor)^5v0c`m#W}G92(VPD7Ha=Jeq@tsu}9rhwS!YY7@`eZ{nSsqz^5 z&*YAv*aMSov#%kk-}kDM;NfEBXBgw~T9O3$u{xA(GuP#c26w%Z&g84}tDn8=8jM4W zBaGp}hIjl&U5}DEK4)KiHpT(h_c!~l=bQ-GqV(}bIx=Y>8TT;B-6;Uu{d)K$9jP(s zI+7D=;M`5k&JZk^D1HBN`D~2+dZUTX^|x#3db0IX1Rb9!gA$XMY}v(MV$t(;%vL}U zGjH3eqG9lctLSMZ_vz%fMX>aSRgUL%U28TH0^G%1zD}}mJ&S08jVd_}EV45sNf^^n z&}vNGihPIk9LKW4Z%*=nC_mWz=Aj7VaK!Q(nX~mU*BccWV52zBW$P4SLGKJ*u`cTR z9&zV3dfLa%BTt>k&Wj2dW$+c9?7A>Yn|NgOHt~C&DE>eodG^;Ri2SjfUAnJx2C@

(cJU8@Mai13avA@^zEMzve)IHDo}u-G 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

91wB3i{Ll^C-xb;r7(=+W|Y+}Ua{x*4m}s0 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%0D1__+jS1`LyhD)9B9MS4uIQ;JDdu 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

4m>VH!7S`qbIIA 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, AI agents, agent management, distributed systems, AI agent infrastructure, agent platform, AI agent console, container management, WebSocket agents, Docker agents Agenstra, KI-Agents, Agent-Verwaltung, verteilte Systeme, KI-Agent-Infrastruktur, Agent-Plattform, KI-Agent-Konsole, Container-Verwaltung, WebSocket-Agents, Docker-Agents + + Official Decabill documentation: install, deploy, secure, and operate billing APIs, subscriptions, payment processors, and the billing console for platform teams. + Offizielle Decabill-Dokumentation: Installation, Deployment, Sicherheit und Betrieb von Billing-APIs, Abonnements, Zahlungsanbietern und der Billing-Konsole für Plattformteams. + + + Decabill, billing, subscriptions, payment processing, invoicing, Stripe, billing API, billing console, multi-tenant billing + Decabill, Billing, Abonnements, Zahlungsabwicklung, Rechnungsstellung, Stripe, Billing-API, Billing-Konsole, Mandantenfähiges Billing + + + Documentation + Dokumentation + Search Documentation Dokumentation durchsuchen @@ -90,6 +102,14 @@ Search Agenstra docs for setup guides, API references, security hardening, agent configuration, deployment patterns, and troubleshooting. Durchsuchen Sie die Agenstra-Dokumentation nach Setup-Anleitungen, API-Referenzen, Security-Hardening, Agent-Konfiguration, Deployment-Mustern und Troubleshooting. + + Search Decabill docs for setup guides, API references, security hardening, billing configuration, deployment patterns, and troubleshooting. + Durchsuchen Sie die Decabill-Dokumentation nach Setup-Anleitungen, API-Referenzen, Security-Hardening, Billing-Konfiguration, Deployment-Mustern und Troubleshooting. + + + Search Documentation + Dokumentation durchsuchen + Found result for "" Ergebnis für "" gefunden diff --git a/apps/agenstra/frontend-docs/src/i18n/messages.xlf b/apps/shared/frontend-docs/src/i18n/messages.xlf similarity index 81% rename from apps/agenstra/frontend-docs/src/i18n/messages.xlf rename to apps/shared/frontend-docs/src/i18n/messages.xlf index 43ccd9048..ddaf983e4 100644 --- a/apps/agenstra/frontend-docs/src/i18n/messages.xlf +++ b/apps/shared/frontend-docs/src/i18n/messages.xlf @@ -41,15 +41,21 @@ Loading... - - Documentation :: Agenstra - Official Agenstra documentation: install, deploy, secure, and operate agent hosts, workspaces, tickets, APIs, and integrations for platform teams. Agenstra, AI agents, agent management, distributed systems, AI agent infrastructure, agent platform, AI agent console, container management, WebSocket agents, Docker agents + + Official Decabill documentation: install, deploy, secure, and operate billing APIs, subscriptions, payment processors, and the billing console for platform teams. + + + Decabill, billing, subscriptions, payment processing, invoicing, Stripe, billing API, billing console, multi-tenant billing + + + Documentation + Search Documentation @@ -62,12 +68,15 @@ Enter a search query above to find documentation. - - Search Documentation :: Agenstra + + Search Documentation Search Agenstra docs for setup guides, API references, security hardening, agent configuration, deployment patterns, and troubleshooting. + + Search Decabill docs for setup guides, API references, security hardening, billing configuration, deployment patterns, and troubleshooting. + Found result for "" diff --git a/apps/shared/frontend-docs/src/index.html b/apps/shared/frontend-docs/src/index.html new file mode 100644 index 000000000..dcec4cbd4 --- /dev/null +++ b/apps/shared/frontend-docs/src/index.html @@ -0,0 +1,47 @@ + + + + + Agenstra + + + + + + + + + + + + + + + + diff --git a/apps/agenstra/frontend-docs/src/main.server.ts b/apps/shared/frontend-docs/src/main.server.ts similarity index 100% rename from apps/agenstra/frontend-docs/src/main.server.ts rename to apps/shared/frontend-docs/src/main.server.ts diff --git a/apps/agenstra/frontend-docs/src/main.ts b/apps/shared/frontend-docs/src/main.ts similarity index 100% rename from apps/agenstra/frontend-docs/src/main.ts rename to apps/shared/frontend-docs/src/main.ts diff --git a/apps/agenstra/frontend-docs/src/polyfills.ts b/apps/shared/frontend-docs/src/polyfills.ts similarity index 100% rename from apps/agenstra/frontend-docs/src/polyfills.ts rename to apps/shared/frontend-docs/src/polyfills.ts diff --git a/apps/agenstra/frontend-docs/src/server.mjs b/apps/shared/frontend-docs/src/server.mjs similarity index 100% rename from apps/agenstra/frontend-docs/src/server.mjs rename to apps/shared/frontend-docs/src/server.mjs diff --git a/apps/shared/frontend-docs/src/server.ts b/apps/shared/frontend-docs/src/server.ts new file mode 100644 index 000000000..110fbc608 --- /dev/null +++ b/apps/shared/frontend-docs/src/server.ts @@ -0,0 +1,17 @@ +import { isMainModule } from '@angular/ssr/node'; +import { createDocsServer } from '@forepath/shared/frontend/util-express-server'; +import { fileURLToPath } from 'node:url'; + +import bootstrap from './main.server'; + +const app = createDocsServer(['agenstra.com'], bootstrap); + +if (isMainModule(fileURLToPath(import.meta.url))) { + const port = parseInt(process.env['PORT'] || '4000', 10); + + app.listen(port, '0.0.0.0', () => { + console.log(`Node Express server listening on http://localhost:${port}`); + }); +} + +export default app; diff --git a/apps/shared/frontend-docs/src/styles.scss b/apps/shared/frontend-docs/src/styles.scss new file mode 100644 index 000000000..a283b479a --- /dev/null +++ b/apps/shared/frontend-docs/src/styles.scss @@ -0,0 +1,119 @@ +// Agenstra design system (Bootstrap 5 overrides) +// +// Stack (see node_modules/bootstrap/scss/bootstrap.scss): +// functions → variables → variables-dark → maps → … → root +// - _variables.scss: palette, $theme-colors, light-mode emphasis/subtle/body/border +// - _variables-dark.scss: [data-bs-theme="dark"] counterparts ($body-*-dark, etc.) +// - _maps.scss: $theme-colors-text(|-dark), *-bg-subtle*, *-border-subtle* → CSS vars in _root.scss +@import 'bootstrap/scss/functions'; + +$primary: #7a3fff; +$secondary: #4a5568; +$tertiary: #6c9cb8; +$success: #21808d; +$warning: #e68161; +$danger: #ff5459; +$info: #3b82c4; +// mix($a, $b, $w): higher $w = more of $a. Small $w with $primary first = subtle violet wash. +$light: mix($primary, #f8f8f5, 3.5%); +$dark: #0f0f11; + +$code-color: mix($primary, #2a2d31, 28%); + +// Light-mode surfaces: only tint the pale end of the scale. $gray-300–$gray-900 stay as-is so +// _variables-dark.scss (body text, secondary bg, borders) is unchanged. +$gray-100: mix($primary, #f3f4f6, 4%); +$gray-200: mix($primary, #e5e7eb, 3%); +$gray-300: #d1d5db; +$gray-400: #9ca3af; +$gray-500: #6b7280; +$gray-600: #4b5563; +$gray-700: #2a2d31; +$gray-800: #18191d; +$gray-900: #0f0f11; + +// Dark mode maps $light-text-emphasis-dark to $gray-100; pin neutral so it does not pick up the tint above. +$light-text-emphasis-dark: #f3f4f6; + +$border-color: rgba(15, 15, 17, 0.1); +$border-color-dark: rgba(255, 255, 255, 0.08); + +$border-color-translucent: rgba(15, 15, 17, 0.06); +$border-color-translucent-dark: rgba(255, 255, 255, 0.06); + +$body-bg: mix($primary, #f5f4f9, 5.5%); +$body-color: #3c3f45; +$body-emphasis-color: #24262c; + +$body-secondary-bg: mix($primary, #ebe9f0, 4%); +// Tertiary must share $body-bg’s hue; a separate neutral (#f1f0f5 + low primary) reads cool/greenish beside the canvas. +$body-tertiary-bg: mix($primary, #ebe9f0, 4%); + +// ~28% primary in the blend (was inverted: 72% on first arg made links very loud). +$link-color: mix($primary, $gray-700, 28%); + +$primary-text-emphasis: #4b2d9e; +$secondary-text-emphasis: #3a404c; +$success-text-emphasis: #1a5c66; +$info-text-emphasis: #2a5580; +$warning-text-emphasis: #9a5a42; +$danger-text-emphasis: #b9363c; +$light-text-emphasis: $gray-600; +$dark-text-emphasis: $gray-700; + +$primary-bg-subtle: #ece8f6; +$secondary-bg-subtle: #e8eaee; +$success-bg-subtle: #e3f1f3; +$info-bg-subtle: #e7f0f8; +$warning-bg-subtle: #f4ebe6; +$danger-bg-subtle: #fcebec; +$light-bg-subtle: mix($gray-100, $body-bg, 55%); +$dark-bg-subtle: #d6d8dc; + +$primary-border-subtle: #d9cff0; +$secondary-border-subtle: #d5d8df; +$success-border-subtle: #c5dde1; +$info-border-subtle: #cddfea; +$warning-border-subtle: #e8d5cc; +$danger-border-subtle: #f5d0d2; +$light-border-subtle: $gray-200; +$dark-border-subtle: #b9bcc4; + +$font-family-base: 'Plus Jakarta Sans Variable', sans-serif; +$font-size-base: 0.875rem; + +$badge-font-size: 0.75rem; +$badge-font-weight: 400; +$badge-padding-y: 0.25rem; +$badge-padding-x: 0.5rem; +$badge-border-radius: 0.375rem; +$badge-line-height: 1.5; + +@mixin agenstra-badge-text-bg-tint($color-name) { + .badge { + &.bg-#{$color-name}, + &.text-bg-#{$color-name} { + background-color: color-mix(in srgb, var(--bs-#{$color-name}) 24%, var(--bs-tertiary-bg)) !important; + color: var(--bs-#{$color-name}-text-emphasis) !important; + line-height: $badge-line-height; + } + } +} +$agenstra-badge-text-bg-colors: primary, secondary, success, info, warning, danger, light, dark; +@each $color-name in $agenstra-badge-text-bg-colors { + @include agenstra-badge-text-bg-tint($color-name); +} + +@import 'bootstrap/scss/bootstrap'; + +// Extra --bs-* variables not generated by Bootstrap (used by portal components) +:root { + --bs-primary-dark: #7c3aed; + --bs-success-dark: #1a6570; + --bs-body-bg-alt: #faf9fd; + --bs-dark-alt: #262828; +} + +@import 'bootstrap/scss/bootstrap-grid'; +@import 'bootstrap-icons/font/bootstrap-icons'; +@import '@fontsource-variable/plus-jakarta-sans/wght.css'; diff --git a/apps/agenstra/frontend-docs/src/test-setup.ts b/apps/shared/frontend-docs/src/test-setup.ts similarity index 100% rename from apps/agenstra/frontend-docs/src/test-setup.ts rename to apps/shared/frontend-docs/src/test-setup.ts diff --git a/apps/agenstra/frontend-docs/tsconfig.app.json b/apps/shared/frontend-docs/tsconfig.app.json similarity index 76% rename from apps/agenstra/frontend-docs/tsconfig.app.json rename to apps/shared/frontend-docs/tsconfig.app.json index e7bea4241..531238766 100644 --- a/apps/agenstra/frontend-docs/tsconfig.app.json +++ b/apps/shared/frontend-docs/tsconfig.app.json @@ -10,7 +10,11 @@ "src/server.ts", "src/polyfills.ts" ], - "include": ["src/**/*.d.ts", "src/delegating-server.ts"], + "include": [ + "src/**/*.d.ts", + "src/delegating-server.ts", + "src/create-docs-server.ts" + ], "exclude": [ "jest.config.ts", "src/test-setup.ts", diff --git a/apps/agenstra/frontend-docs/tsconfig.editor.json b/apps/shared/frontend-docs/tsconfig.editor.json similarity index 100% rename from apps/agenstra/frontend-docs/tsconfig.editor.json rename to apps/shared/frontend-docs/tsconfig.editor.json diff --git a/apps/agenstra/frontend-docs/tsconfig.json b/apps/shared/frontend-docs/tsconfig.json similarity index 100% rename from apps/agenstra/frontend-docs/tsconfig.json rename to apps/shared/frontend-docs/tsconfig.json diff --git a/apps/agenstra/frontend-docs/tsconfig.spec.json b/apps/shared/frontend-docs/tsconfig.spec.json similarity index 100% rename from apps/agenstra/frontend-docs/tsconfig.spec.json rename to apps/shared/frontend-docs/tsconfig.spec.json diff --git a/docs/agenstra/README.md b/docs/agenstra/README.md index cd7e75793..a1b50437a 100644 --- a/docs/agenstra/README.md +++ b/docs/agenstra/README.md @@ -119,25 +119,13 @@ New to Agenstra? Follow this learning path: Agenstra follows a three-tier architecture: -``` -┌─────────────────────┐ -│ Frontend Console │ Angular application with NgRx state management -│ (Web-based IDE) │ Monaco Editor, Chat Interface, File Management -└──────────┬──────────┘ - │ HTTP REST API - │ WebSocket (Socket.IO) - ▼ -┌─────────────────────┐ -│ Agent Controller │ Centralized control plane -│ (Backend) │ Client management, event forwarding -└──────────┬──────────┘ - │ HTTP REST API - │ WebSocket (Socket.IO) - ▼ -┌─────────────────────┐ -│ Agent Manager │ Agent lifecycle management -│ (Backend) │ Container management, Docker integration -└─────────────────────┘ +```mermaid +graph TB + FE["Frontend Console
(Web-based IDE)
Angular, Monaco Editor, Chat, File Management"] + AC["Agent Controller
(Backend)
Client management, event forwarding"] + AM["Agent Manager
(Backend)
Container management, Docker integration"] + FE -->|"HTTP REST API
WebSocket (Socket.IO)"| AC + AC -->|"HTTP REST API
WebSocket (Socket.IO)"| AM ``` For detailed architecture information, see the [Architecture Documentation](./architecture/README.md). diff --git a/docs/agenstra/api-reference/README.md b/docs/agenstra/api-reference/README.md index db4300d39..6594ee7e2 100644 --- a/docs/agenstra/api-reference/README.md +++ b/docs/agenstra/api-reference/README.md @@ -75,27 +75,6 @@ The Agent Manager WebSocket gateway provides: - Terminal session management (`createTerminal`, `terminalInput`, `terminalOutput`, `closeTerminal`) - Container statistics broadcasting (`containerStats`; default every 15s on the manager, configurable via `CONTAINER_STATS_SCHEDULER_INTERVAL`) -## Billing Manager HTTP API - -**OpenAPI Specification**: [openapi.yaml](/spec/billing-manager/openapi.yaml) (canonical source: `libs/domains/decabill/backend/feature-billing-manager/spec/openapi.yaml`) - -Admin manual invoices and customer billing profile CRUD: [Billing Administration](../features/billing-administration.md) - -## Billing Manager WebSocket - -The billing manager exposes a Socket.IO gateway for **dashboard server status** (provisioned subscription items), separate from the HTTP port. Connections use the same JWT / Keycloak handshake auth as HTTP; static API key clients are not given an end-user billing stream (aligned with REST). - -**AsyncAPI Specification**: [asyncapi.yaml](/spec/billing-manager/asyncapi.yaml) - -- **View in AsyncAPI Studio**: [Open in AsyncAPI Studio](https://studio.asyncapi.com/?url=https://docs.agenstra.com/spec/billing-manager/asyncapi.yaml) -- **Download**: [asyncapi.yaml](/spec/billing-manager/asyncapi.yaml) (canonical source in-repo: `libs/domains/decabill/backend/feature-billing-manager/spec/asyncapi.yaml`) - -The billing status gateway provides: - -- `subscribeDashboardStatus` / `unsubscribeDashboardStatus` client commands -- `dashboardStatusUpdate` unicast emissions with the same server-info fields as `GET .../server-info` -- `error` events scoped to the initiating socket only - ## Using the Specifications ### Swagger Editor diff --git a/docs/agenstra/applications/frontend-agent-console.md b/docs/agenstra/applications/frontend-agent-console.md index 4298d0b04..2ce71642d 100644 --- a/docs/agenstra/applications/frontend-agent-console.md +++ b/docs/agenstra/applications/frontend-agent-console.md @@ -218,7 +218,7 @@ See [Authentication](../features/authentication.md) for environment variables an ## Environment Configuration -Configure the application via environment variables. The **Express** runtime (`/config` proxy, CSP, and related variables) is shared with **agenstra-frontend-billing-console**, **agenstra-frontend-landingpage**, and **agenstra-frontend-docs**; see [Environment configuration](../deployment/environment-configuration.md) for the full list and billing-manager provisioning defaults. +Configure the application via environment variables. The **Express** runtime (`/config` proxy, CSP, and related variables) is shared with **agenstra-frontend-landingpage** and **agenstra-frontend-docs** (patch apps over the shared docs base). See [Environment configuration](../deployment/environment-configuration.md) for the full list. ### Runtime Configuration (Docker Containers) diff --git a/docs/agenstra/deployment/background-jobs.md b/docs/agenstra/deployment/background-jobs.md index af558a4ce..cd6b4aeab 100644 --- a/docs/agenstra/deployment/background-jobs.md +++ b/docs/agenstra/deployment/background-jobs.md @@ -1,6 +1,6 @@ # Background jobs (BullMQ) -Background work for **backend agent controller** and **backend billing manager** runs through **Redis + BullMQ** instead of in-process `setInterval` loops in the API container. +Background work for **backend agent controller** runs through **Redis + BullMQ** instead of in-process `setInterval` loops in the API container. ## Architecture @@ -21,12 +21,11 @@ Each backend stack has its own **Redis** service in Docker Compose. Workers and Workers and schedulers assume the API has already applied schema migrations. Running workers before the API in a fresh environment can cause query errors until migrations complete. -Job registration (queue names, repeatable intervals, job names) lives in one file per app: +Job registration (queue names, repeatable intervals, job names) lives in: - `apps/agenstra/backend-agent-controller/src/queue/job-registry.ts` -- `apps/decabill/backend-billing-manager/src/queue/job-registry.ts` -Coordinators fan out **unit jobs** (one subscription, one ticket, one import config, etc.). BullMQ `jobId` values prevent duplicate active work for the same entity. Custom job IDs use `.` separators and only allowed characters (alphanumeric, `.`, `-`, `_`, `~`) — e.g. `coordinator.filter-rules-sync`, `billing.subscription.`. Colons and slashes are not valid. +Coordinators fan out **unit jobs** (one ticket, one import config, etc.). BullMQ `jobId` values prevent duplicate active work for the same entity. Custom job IDs use `.` separators and only allowed characters (alphanumeric, `.`, `-`, `_`, `~`), for example `coordinator.filter-rules-sync`. Colons and slashes are not valid. ## Redis and queue environment variables @@ -36,7 +35,7 @@ Coordinators fan out **unit jobs** (one subscription, one ticket, one import con | `REDIS_PORT` | Redis port | `6379` | | `REDIS_PASSWORD` | Optional password | empty | | `REDIS_DB` | Redis database index | `0` | -| `REDIS_KEY_PREFIX` | Key namespace | `agenstra-controller` or `agenstra-billing` | +| `REDIS_KEY_PREFIX` | Key namespace | `agenstra-controller` | | `QUEUE_ROLE` | `api`, `scheduler`, `worker`, or `all` | `all` (local), `api` in API container | | `QUEUE_WORKER_CONCURRENCY` | Default worker concurrency | `5` | | `QUEUE_BULL_BOARD_ENABLED` | Mount Bull Board UI on API / `all` only | `true` on API in compose; `false` on worker/scheduler | @@ -51,15 +50,13 @@ Existing `*_SCHEDULER_INTERVAL*` variables now control **coordinator repeat** in Each backend `docker-compose.yaml` defines: - `redis` -- `backend-*` (API, `QUEUE_ROLE=api`) -- `backend-*-scheduler` (`QUEUE_ROLE=scheduler`) -- `backend-*-worker` (`QUEUE_ROLE=worker`) - -Billing Redis is published on host port **6380** by default so it can run alongside controller Redis (**6379**). +- `backend-agent-controller` (API, `QUEUE_ROLE=api`) +- `backend-agent-controller-scheduler` (`QUEUE_ROLE=scheduler`) +- `backend-agent-controller-worker` (`QUEUE_ROLE=worker`) ## Bull Board -When enabled on the API container (`QUEUE_BULL_BOARD_ENABLED=true`, default in compose), Bull Board is served at **`QUEUE_BULL_BOARD_PATH`** (default **`/admin/queues`**) on the API port (controller **3100**, billing **3200**). That path is excluded from the Nest global `/api` prefix, so use `http://localhost:3100/admin/queues`, not `/api/admin/queues`. +When enabled on the API container (`QUEUE_BULL_BOARD_ENABLED=true`, default in compose), Bull Board is served at **`QUEUE_BULL_BOARD_PATH`** (default **`/admin/queues`**) on the API port (controller **3100**). That path is excluded from the Nest global `/api` prefix, so use `http://localhost:3100/admin/queues`, not `/api/admin/queues`. Bull Board uses **HTTP Basic authentication** (`QUEUE_BULL_BOARD_USERNAME` / `QUEUE_BULL_BOARD_PASSWORD`). Local compose defaults to `admin` / `bullmq`; override in production. Startup fails in production if the board is enabled without a password. diff --git a/docs/agenstra/deployment/docker-deployment.md b/docs/agenstra/deployment/docker-deployment.md index 5ebcdcbac..2e95f4bb3 100644 --- a/docs/agenstra/deployment/docker-deployment.md +++ b/docs/agenstra/deployment/docker-deployment.md @@ -147,7 +147,7 @@ When `CONFIG` is set, the frontend server also supports the following optional h - `CONFIG_JSON_MAX_DEPTH` - Max JSON traversal depth for key counting (default: `12`) - `CONFIG_JSON_MAX_KEYS` - Max total JSON keys (default: `512`) -Frontend Express servers (agent console, billing console, portal, docs) also support: +Frontend Express servers (agent console, portal, docs) also support: - `CSP_ENFORCE` - Set to `true` to enforce Content Security Policy (sends `Content-Security-Policy`), otherwise report-only (`Content-Security-Policy-Report-Only`). - `CSP_DEFAULT_SRC_EXTRA` - Extra origins appended to `default-src` (same URL list rules as `CSP_CONNECT_SRC_EXTRA`). @@ -159,8 +159,6 @@ Frontend Express servers (agent console, billing console, portal, docs) also sup - `CSP_WORKER_SRC_EXTRA`, `CSP_STYLE_SRC_EXTRA`, `CSP_IMG_SRC_EXTRA`, `CSP_FONT_SRC_EXTRA` - Same pattern for `worker-src`, `style-src`, `img-src`, and `font-src` respectively. - `CSP_FRAME_ANCESTORS` - Optional full override of CSP `frame-ancestors` (default `'none'`). See [Environment configuration](./environment-configuration.md). -Billing manager–generated agent-controller cloud-init sets `CONFIG_ALLOWED_HOSTS` to the instance FQDN and `CSP_ENFORCE` to `true` by default for the frontend container. See [Environment configuration](./environment-configuration.md). - ## Running Containers ### Using Docker Compose (Recommended) diff --git a/docs/agenstra/deployment/environment-configuration.md b/docs/agenstra/deployment/environment-configuration.md index f965a6beb..9370c1b56 100644 --- a/docs/agenstra/deployment/environment-configuration.md +++ b/docs/agenstra/deployment/environment-configuration.md @@ -195,32 +195,9 @@ Optional runtime extensions for agents, CI/CD pipelines, and chat filters. See [ - `DYNAMIC_PROVIDER_PLUGIN_PATH` - Absolute plugin root for post-build loading (unset by default; use `/var/lib/forepath/provider-plugins` with the compose volume when enabling plugins). - `DYNAMIC_PROVIDER_PLUGIN_INSTALL` - Comma-separated `npm install` targets into the plugin path at container startup. -## Backend Billing Manager - -### Multi-tenancy - -Billing data and users are partitioned by **`tenant_id`**. HTTP clients send **`X-Tenant`**; the billing console and landing page attach it via `environment.billing.tenantId` (defaults to `default`). - -| Variable | Description | -| -------------------------- | ------------------------------------------------------------------------------------------------------------------ | -| `TENANTS` | Comma-separated tenant ids allowed for **`X-Tenant`** (always includes `default`). Unset → only `default`. | -| `STATIC_API_KEY_TENANT_ID` | Optional. When set with **`STATIC_API_KEY`** auth, API key requests are accepted only when **`X-Tenant`** matches. | -| `BILLING_FRONTEND_URL` | Billing console base URL for the `default` tenant (Stripe return redirects). | -| `TENANT_FRONTEND_URLS` | Per-tenant console URLs: `tenantId=https://…` pairs, comma-separated. | - -**API key scope (accepted risk [AR-007](../security/accepted-risks.md#ar-007--billing-multi-tenant-api-key-scope-static_api_key_tenant_id-unset)):** With **`STATIC_API_KEY`** and **without** **`STATIC_API_KEY_TENANT_ID`**, one deployment key grants **admin access to every tenant** in **`TENANTS`**, selected per request via **`X-Tenant`**. This is **intentional** (single shared automation credential). Set **`STATIC_API_KEY_TENANT_ID`** to bind the key to one tenant, or use **keycloak** / **users** for interactive multi-tenant console access. - -See also [Billing Administration](../features/billing-administration.md) and the billing sections in this document. - ## Frontend applications (Express SSR) -The Angular apps **agenstra-frontend-agent-console**, **agenstra-frontend-billing-console**, **agenstra-frontend-landingpage**, and **agenstra-frontend-docs** use the same Express layer for `GET /config` (runtime JSON proxy) and security headers. The variables below are written with the agent console in mind; they apply to all four apps unless an app-specific doc says otherwise. - -### Billing manager (provisioned agent controller) - -When the billing manager generates cloud-init for a product that includes the agent-controller frontend container, it sets **`CONFIG_ALLOWED_HOSTS`** to the instance **FQDN** (so production `CONFIG` fetches stay allowlisted) and **`CSP_ENFORCE`** to **`true`** by default. Override the CSP default only if your provisioning pipeline sets `frontend.cspEnforce` in the cloud-init config. - -It also sets client workspace SSRF env vars on **`backend-agent-controller`**: **`CLIENT_ENDPOINT_TLS_REJECT_UNAUTHORIZED`** (default **`true`**), **`CLIENT_ENDPOINT_ALLOW_INSECURE_HTTP`** (default **`false`**), and **`CLIENT_ENDPOINT_ALLOWED_HOSTS`** (default **`*`** so tenants may register arbitrary agent-manager hostnames while other SSRF layers still apply). DNS rebinding checks follow runtime rules (on by default); use **`CLIENT_ENDPOINT_ALLOW_INTERNAL_HOST`** in non-provisioned setups when you need the same bypass as **`CONFIG_ALLOW_INTERNAL_HOST`** (billing does not set it by default). Optional **`clientEndpointAllowedHosts`** / **`security.clientEndpointAllowedHosts`** in **`requestedConfig`** **merge** the instance FQDN with listed hosts (FQDN first); a single **`*`** entry keeps allow-all. Optional **`security.clientEndpointAllowInsecureHttp`** and **`security.clientEndpointTlsRejectUnauthorized`** map to the same `CLIENT_ENDPOINT_*` variables. +The Angular apps **agenstra-frontend-agent-console**, **agenstra-frontend-landingpage**, and **agenstra-frontend-docs** use the same Express layer for `GET /config` (runtime JSON proxy) and security headers. The variables below are written with the agent console in mind. They apply to all listed apps unless an app-specific doc says otherwise. ### Runtime Configuration @@ -273,23 +250,23 @@ When `CONFIG` is set, the frontend server fetches and validates the remote JSON ## Redis and BullMQ (background jobs) -Used by **backend agent controller** and **backend billing manager**. See [Background jobs](./background-jobs.md). - -| Variable | Description | Default | -| --------------------------- | -------------------------------------- | ------------------------------------------ | -| `REDIS_HOST` | Redis host | `localhost` (compose: `redis`) | -| `REDIS_PORT` | Redis port | `6379` | -| `REDIS_PASSWORD` | Optional password | empty | -| `REDIS_DB` | Redis DB index | `0` | -| `REDIS_KEY_PREFIX` | Key prefix | `agenstra-controller` / `agenstra-billing` | -| `QUEUE_ROLE` | `api`, `scheduler`, `worker`, or `all` | `all` locally; `api` for API container | -| `QUEUE_WORKER_CONCURRENCY` | Worker concurrency | `5` | -| `QUEUE_BULL_BOARD_ENABLED` | Enable Bull Board | `true` in dev for `all`/`scheduler` | -| `QUEUE_BULL_BOARD_PATH` | Bull Board path | `/admin/queues` | -| `QUEUE_BULL_BOARD_USERNAME` | Bull Board HTTP Basic user | `admin` | -| `QUEUE_BULL_BOARD_PASSWORD` | Bull Board HTTP Basic password | required; `bullmq` in local compose | - -Scheduler interval variables (e.g. `BILLING_SCHEDULER_INTERVAL`, `AUTONOMOUS_TICKET_SCHEDULER_INTERVAL_MS`) configure **coordinator** repeat intervals in BullMQ. +Used by **backend agent controller**. See [Background jobs](./background-jobs.md). + +| Variable | Description | Default | +| --------------------------- | -------------------------------------- | -------------------------------------- | +| `REDIS_HOST` | Redis host | `localhost` (compose: `redis`) | +| `REDIS_PORT` | Redis port | `6379` | +| `REDIS_PASSWORD` | Optional password | empty | +| `REDIS_DB` | Redis DB index | `0` | +| `REDIS_KEY_PREFIX` | Key prefix | `agenstra-controller` | +| `QUEUE_ROLE` | `api`, `scheduler`, `worker`, or `all` | `all` locally; `api` for API container | +| `QUEUE_WORKER_CONCURRENCY` | Worker concurrency | `5` | +| `QUEUE_BULL_BOARD_ENABLED` | Enable Bull Board | `true` in dev for `all`/`scheduler` | +| `QUEUE_BULL_BOARD_PATH` | Bull Board path | `/admin/queues` | +| `QUEUE_BULL_BOARD_USERNAME` | Bull Board HTTP Basic user | `admin` | +| `QUEUE_BULL_BOARD_PASSWORD` | Bull Board HTTP Basic password | required; `bullmq` in local compose | + +Scheduler interval variables (for example `AUTONOMOUS_TICKET_SCHEDULER_INTERVAL_MS`) configure **coordinator** repeat intervals in BullMQ. ## Environment-Specific Defaults diff --git a/docs/agenstra/deployment/production-checklist.md b/docs/agenstra/deployment/production-checklist.md index 0332d8f91..6b10894f8 100644 --- a/docs/agenstra/deployment/production-checklist.md +++ b/docs/agenstra/deployment/production-checklist.md @@ -53,7 +53,7 @@ Comprehensive checklist for deploying Agenstra to production. ### Authentication - Use strong API keys or Keycloak with proper configuration -- Consider setting **`AUTHENTICATION_METHOD`** explicitly in production if your policy requires fully unambiguous mode selection (see **[Accepted risks — AR-004](../security/accepted-risks.md)**) +- Consider setting **`AUTHENTICATION_METHOD`** explicitly in production if your policy requires fully unambiguous mode selection (see **[Accepted risks - AR-003](../security/accepted-risks.md)**) - Enable token expiration and refresh - Implement proper session management - Use HTTPS for all API communications diff --git a/docs/agenstra/features/authentication.md b/docs/agenstra/features/authentication.md index dbc6a23d2..f8c4e3535 100644 --- a/docs/agenstra/features/authentication.md +++ b/docs/agenstra/features/authentication.md @@ -321,7 +321,7 @@ See **[Client Management](./client-management.md#per-client-permissions)** for d ## Related Documentation - **[Environment Configuration](../deployment/environment-configuration.md)** - Environment variable reference -- **[Security — Accepted risks](../security/accepted-risks.md)** - **AR-004** (implicit authentication method resolution when `AUTHENTICATION_METHOD` is unset) +- **[Security - Accepted risks](../security/accepted-risks.md)** - **AR-003** (implicit authentication method resolution when `AUTHENTICATION_METHOD` is unset) - **[Security — Operational hardening](../security/operational-hardening.md)** - Backend authentication resolution behavior - **[Client Management](./client-management.md)** - Per-client permissions and user management - **[Backend Agent Controller Application](../applications/backend-agent-controller.md)** - Backend authentication implementation diff --git a/docs/agenstra/features/billing-administration.md b/docs/agenstra/features/billing-administration.md deleted file mode 100644 index 67facd71e..000000000 --- a/docs/agenstra/features/billing-administration.md +++ /dev/null @@ -1,47 +0,0 @@ -# Billing Administration - -Admin-only features in the billing console for manual invoice management and customer billing profile CRUD. - -See also: [API Reference](../api-reference/README.md#billing-manager-http-api) for the published OpenAPI and AsyncAPI specifications. - -## Access control - -All endpoints under `/admin/billing/*` require admin role (`@KeycloakRoles(ADMIN)` + `@UsersRoles(ADMIN)`). Frontend routes use `authGuard` + `billingAdminGuard`. - -**Multi-tenancy:** Admin and user routes are scoped by **`X-Tenant`** and the user’s **`tenant_id`**. API key auth with **`STATIC_API_KEY`** and without **`STATIC_API_KEY_TENANT_ID`** can administer **all** configured tenants (accepted risk **[AR-007](../security/accepted-risks.md#ar-007--billing-multi-tenant-api-key-scope-static_api_key_tenant_id-unset)**). - -## Manual invoice administration - -**Immutability:** Only invoices in `draft` status can be edited or deleted. Once issued (`issued`, `paid`, `partially_paid`, `overdue`, or `void`), line items and amounts are immutable. Admins can still void unpaid issued invoices or mark payment status manually. - -**Workflow:** - -1. `POST /admin/billing/invoices/manual` — create draft with user, optional subscription, custom line items -2. `POST /admin/billing/invoices/{id}` — update draft line items -3. `POST /admin/billing/invoices/{id}/issue` — issue draft (requires complete customer profile) -4. `DELETE /admin/billing/invoices/{id}` — delete draft only - -The workflow steps above mirror the manual invoice administration sequence (create draft → update → issue or delete). - -**Frontend:** `/administration/billing` in the billing console — split layout with dashboard cards and charts on the left, invoice list (batch-loaded, client-side search, list-group style) on the right. - -## Customer billing profiles (admin) - -Customer billing data is stored in `billing_customer_profiles` (one profile per user). - -| Method | Path | Purpose | -| ------ | --------------------------------------- | ------------------------------------------------------ | -| GET | `/admin/billing/customer-profiles` | Paginated list | -| GET | `/admin/billing/customer-profiles/{id}` | Full profile detail | -| POST | `/admin/billing/customer-profiles` | Create for user | -| POST | `/admin/billing/customer-profiles/{id}` | Update | -| DELETE | `/admin/billing/customer-profiles/{id}` | Delete (blocked if user has invoices or subscriptions) | - -Self-service `GET/POST /customer-profile` remains for end users. - -**Frontend:** `/administration/customer-profiles` in the billing console. - -## Related admin pages - -- **Billing dashboard** (`/administration/billing`) — KPIs, charts, bill-now (unchanged) -- **Users** (`/users`) — shared identity user manager (unchanged) diff --git a/docs/agenstra/features/dynamic-provider-plugins.md b/docs/agenstra/features/dynamic-provider-plugins.md index 1396bf7ce..8437758d8 100644 --- a/docs/agenstra/features/dynamic-provider-plugins.md +++ b/docs/agenstra/features/dynamic-provider-plugins.md @@ -2,7 +2,7 @@ Agenstra backends can register **extra provider implementations at runtime** from comma-separated `DYNAMIC_*` environment variables. The same mechanism supports **baked-in** packages (present in the app image deploy graph) and **post-build** plugins (mounted or installed into a container path without rebuilding the image). -This page covers **Agenstra** backends only: **agent controller** and **agent manager**. Decabill billing backends use the same loader for payment processors and billing UI metadata; see [Billing Administration](./billing-administration.md) and the [API Reference](../api-reference/README.md#billing-manager-http-api). +This page covers **Agenstra** backends only: **agent controller** and **agent manager**. Payment processor and billing UI plugins are documented in the Decabill product documentation site. ## Overview diff --git a/docs/agenstra/features/usage-statistics.md b/docs/agenstra/features/usage-statistics.md index c9ea4259a..1b3474ec4 100644 --- a/docs/agenstra/features/usage-statistics.md +++ b/docs/agenstra/features/usage-statistics.md @@ -29,7 +29,7 @@ Global equivalents exist under `/api/statistics/...` for cross-workspace views w | Concern | Source | Typical use | | ------------------------ | ------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -| **Usage statistics** | Agent controller HTTP API | Dashboards, billing-adjacent usage, compliance reporting | +| **Usage statistics** | Agent controller HTTP API | Dashboards, operational usage, compliance reporting | | **Container statistics** | Agent manager WebSocket (`containerStats` forwarded via controller) | Live health of a running agent container (default poll every 15s on the manager; see `CONTAINER_STATS_SCHEDULER_INTERVAL`) | ## Related documentation diff --git a/docs/agenstra/features/websocket-communication.md b/docs/agenstra/features/websocket-communication.md index 57d2e788a..e05be1e97 100644 --- a/docs/agenstra/features/websocket-communication.md +++ b/docs/agenstra/features/websocket-communication.md @@ -37,12 +37,6 @@ The agent console opens a dedicated Socket.IO connection to **`status`** (derive See `libs/domains/agenstra/backend/feature-agent-controller/spec/asyncapi.yaml` and `libs/domains/agenstra/frontend/data-access-agent-console/docs/notifications-state.mmd`. -### Billing manager (dashboard status) - -The billing console can open a second Socket.IO connection to the **billing-manager** status gateway (default namespace `/billing`, separate TCP port from REST). Handshake auth matches HTTP (`Bearer` JWT for users or Keycloak). **Static API key** auth does not receive a user-scoped billing stream; `subscribeDashboardStatus` is rejected with an `error` event, consistent with REST returning "User not authenticated" for API-key-only requests. - -The server selects subscriptions **only** from the authenticated user’s data on every poll tick and emits `dashboardStatusUpdate` **only** to that socket (no rooms). See `libs/domains/decabill/backend/feature-billing-manager/spec/asyncapi.yaml`. - ## Connection Flow ### Frontend to Controller diff --git a/docs/agenstra/security/README.md b/docs/agenstra/security/README.md index 4b41394b1..4c3cf481b 100644 --- a/docs/agenstra/security/README.md +++ b/docs/agenstra/security/README.md @@ -16,7 +16,7 @@ How public documentation relates to **CRA** (Regulation (EU) 2024/2847) and **BS ### [Accepted risks (register)](./accepted-risks.md) -Register **AR-001** through **AR-007**: provisioning SSH posture, native desktop signing and update posture, frontend CSP, backend authentication method resolution, Electron window-open policy, Trivy unfixed-CVE gating, and billing multi-tenant API key scope. Includes acceptance dates, review cadence, mitigations, and withdrawal paths. +Register **AR-001** through **AR-005**: native desktop signing and update posture, frontend CSP, backend authentication method resolution, Electron window-open policy, and Trivy unfixed-CVE gating. Includes acceptance dates, review cadence, mitigations, and withdrawal paths. ### [Container image security](./container-images.md) @@ -32,7 +32,7 @@ Responsible disclosure (contact and process), CycloneDX **SBOM** location, and * ### [CI security scanning (Trivy)](./ci-security-scanning.md) -Automated **Trivy** scans on pull requests (filesystem, IaC/config, container images); SARIF upload to GitHub Security; CRITICAL fail gate (fixable issues only — see **[AR-006](./accepted-risks.md#ar-006--ci--local-trivy-unfixed-vulnerabilities-not-gated)**). Pre-commit runs filesystem/config scans locally. +Automated **Trivy** scans on pull requests (filesystem, IaC/config, container images); SARIF upload to GitHub Security; CRITICAL fail gate (fixable issues only; see **[AR-005](./accepted-risks.md#ar-005---ci--local-trivy-unfixed-vulnerabilities-not-gated)**). Pre-commit runs filesystem/config scans locally. ## Configuration reference diff --git a/docs/agenstra/security/accepted-risks.md b/docs/agenstra/security/accepted-risks.md index 4b71172ba..7ad56b9cf 100644 --- a/docs/agenstra/security/accepted-risks.md +++ b/docs/agenstra/security/accepted-risks.md @@ -2,173 +2,127 @@ This register records **explicit risk acceptance** for product and deployment constraints that deviate from stricter security baselines. It supports **BSI / ISMS-style** traceability and **CRA-oriented** technical documentation (risk treatment and transparency). A compact summary table may also be published at the repository root in `SECURITY.md` for hosts that surface that file. For vulnerability reporting, SBOM paths, and desktop checksum verification, see **[Vulnerability reporting and artifacts](./vulnerability-reporting-and-artifacts.md)**. -**Review cadence:** entries use acceptance **2026-05-06** and next review **2027-05-06** unless a row states otherwise; trigger an early review if the relevant templates, packaging, CSP integration, authentication resolution, billing multi-tenancy, or Electron shell policy change materially. +**Review cadence:** entries use acceptance **2026-05-06** and next review **2027-05-06** unless a row states otherwise. Trigger an early review if the relevant templates, packaging, CSP integration, authentication resolution, or Electron shell policy change materially. --- -## AR-001 — Provisioning SSH (cloud-init templates) - -| Field | Recorded value | -| ------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **ID** | AR-001 | -| **Area** | Provisioning SSH in cloud-init templates | -| **Configuration** | **`PermitRootLogin yes`** and **root** `authorized_keys` installed via provisioning scripts (`libs/domains/decabill/backend/feature-billing-manager/src/lib/utils/cloud-init/agent-controller.utils.ts`, `agent-manager.utils.ts`) | -| **Residual risk** | Compromise of the provisioning SSH private key or leakage of user-data/metadata can yield **root** on affected instances. | -| **Mitigations in scope of this repo (templates)** | SSH **key-based** access; **password authentication disabled** in generated `sshd` configuration. | -| **Compensating controls (deployer / org)** | Restrict network access (security groups, allowlisted IPs, bastion), rotate keys, monitor instances, minimize secrets in user-data. | -| **Risk owner** | Maintaining party for this repository and product security documentation (Forepath). | -| **Acceptor** | Repository maintainer (acceptance recorded in project documentation). | -| **Acceptance date** | **2026-05-06** | -| **Next review date** | **2027-05-06** | -| **Rationale (business / technical)** | First-boot automation prioritizes operational simplicity for provisioned hosts. Non-root SSH and **`PermitRootLogin no`** remain the documented hardening path when constraints allow. | +## AR-001 - Desktop app: no OS-trusted code signing / no in-app auto-update + +| Field | Recorded value | +| -------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **ID** | AR-001 | +| **Area** | **`native-agent-console`** (Electron Forge pipeline, `apps/agenstra/native-agent-console/forge.config.js`) | +| **Configuration** | **No** OS-trusted **code signing** and **no** **in-app auto-update** channel in the documented release pipeline. | +| **Residual risk** | Users rely on **manual checksum verification** and a trusted download channel rather than OS trust stores or automatic security updates from the application. | +| **Mitigations in scope of this repo** | Release artifacts include **`SHA256SUMS`** and **`integrity-manifest.json`** produced by the **`release-integrity`** Nx project (`tools/release-integrity` in the repository). CI and release pipelines generate and verify these manifests. | +| **Compensating controls (user / org)** | Verify checksums after download. Prefer the **web browser** as the primary client. Treat **`STATIC_API_KEY`** and other secrets per **[Environment configuration](../deployment/environment-configuration.md)**. | +| **Risk owner** | Maintaining party for this repository and product security documentation (Forepath). | +| **Acceptor** | Repository maintainer (acceptance recorded in project documentation). | +| **Acceptance date** | **2026-05-06** | +| **Next review date** | **2027-05-06** | +| **Rationale (business / technical)** | The product is **primarily** used via the **web browser**. The native build is a **secondary** distribution channel. | #### Operator summary (AR-001) -Some deployment flows generate cloud-init that configures **SSH for `root`** and installs **`authorized_keys` under `/root/.ssh/`**. This is a **known, documented** property. Mitigations in templates are **key-only** SSH and **disabled password authentication**. Deployers should add network controls, bastions, key rotation, and—where possible—non-root administration with **`PermitRootLogin no`**. - ---- - -## AR-002 — Desktop app: no OS-trusted code signing / no in-app auto-update - -| Field | Recorded value | -| -------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **ID** | AR-002 | -| **Area** | **`native-agent-console`** (Electron Forge pipeline, `apps/agenstra/native-agent-console/forge.config.js`) | -| **Configuration** | **No** OS-trusted **code signing** and **no** **in-app auto-update** channel in the documented release pipeline. | -| **Residual risk** | Users rely on **manual checksum verification** and a trusted download channel rather than OS trust stores or automatic security updates from the application. | -| **Mitigations in scope of this repo** | Release artifacts include **`SHA256SUMS`** and **`integrity-manifest.json`** produced by the **`release-integrity`** Nx project (`tools/release-integrity` in the repository); CI/release pipelines generate and verify these manifests. | -| **Compensating controls (user / org)** | Verify checksums after download; prefer the **web browser** as the primary client; treat **`STATIC_API_KEY`** and other secrets per **[Environment configuration](../deployment/environment-configuration.md)**. | -| **Risk owner** | Maintaining party for this repository and product security documentation (Forepath). | -| **Acceptor** | Repository maintainer (acceptance recorded in project documentation). | -| **Acceptance date** | **2026-05-06** | -| **Next review date** | **2027-05-06** | -| **Rationale (business / technical)** | The product is **primarily** used via the **web browser**; the native build is a **secondary** distribution channel. | - -#### Operator summary (AR-002) - **OS-trusted code signing** and **in-app auto-update** are **not** provided. Verify artifacts using **`SHA256SUMS`** / **`integrity-manifest.json`**. Details: **[Desktop release integrity](./vulnerability-reporting-and-artifacts.md#desktop-release-integrity)**. --- -## AR-003 — Web frontends: CSP `unsafe-inline` / `unsafe-eval` (Monaco) +## AR-002 - Web frontends: CSP `unsafe-inline` / `unsafe-eval` (Monaco) | Field | Recorded value | | ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| **ID** | AR-003 | +| **ID** | AR-002 | | **Area** | **`frontend-*`** Express servers | -| **Configuration** | **Content Security Policy** allows **`'unsafe-inline'`** and **`'unsafe-eval'`** so **Monaco Editor** and related tooling work; policy is sent as **`Content-Security-Policy-Report-Only`** by default (violations reported, not blocked). Implementation: `libs/domains/shared/frontend/util-express-server/src/lib/security-headers.ts`. | -| **Residual risk** | XSS impact can be greater than under a strict CSP; **report-only** does not block violations. | -| **Mitigations in scope of this repo** | Set **`CSP_ENFORCE=true`** only in environments where compatibility is validated; plan stricter CSP with a validated Monaco/worker/nonce strategy. | +| **Configuration** | **Content Security Policy** allows **`'unsafe-inline'`** and **`'unsafe-eval'`** so **Monaco Editor** and related tooling work. Policy is sent as **`Content-Security-Policy-Report-Only`** by default (violations reported, not blocked). Implementation: `libs/domains/shared/frontend/util-express-server/src/lib/security-headers.ts`. | +| **Residual risk** | XSS impact can be greater than under a strict CSP. **Report-only** does not block violations. | +| **Mitigations in scope of this repo** | Set **`CSP_ENFORCE=true`** only in environments where compatibility is validated. Plan stricter CSP with a validated Monaco, worker, or nonce strategy. | | **Compensating controls (deployer)** | Enforce HTTPS, restrict **CORS**, keep dependencies patched, monitor reports if CSP reporting is configured. | | **Risk owner** | Maintaining party for this repository and product security documentation (Forepath). | | **Acceptor** | Repository maintainer (acceptance recorded in project documentation). | | **Acceptance date** | **2026-05-06** | | **Next review date** | **2027-05-06** | -| **Rationale (business / technical)** | Monaco is **core** to the console; tightening without a validated strategy risks **breaking** the product. Enforcement is **opt-in** after verification. | +| **Rationale (business / technical)** | Monaco is **core** to the console. Tightening without a validated strategy risks **breaking** the product. Enforcement is **opt-in** after verification. | -#### Operator summary (AR-003) +#### Operator summary (AR-002) -By default, CSP is **report-only**. Use **`CSP_ENFORCE=true`** only after verification. See **[Operational hardening — Content Security Policy](./operational-hardening.md#content-security-policy-frontend-express)** and **[Environment configuration](../deployment/environment-configuration.md)**. +By default, CSP is **report-only**. Use **`CSP_ENFORCE=true`** only after verification. See **[Operational hardening - Content Security Policy](./operational-hardening.md#content-security-policy-frontend-express)** and **[Environment configuration](../deployment/environment-configuration.md)**. --- -## AR-004 — Backend authentication method resolution - -| Field | Recorded value | -| ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **ID** | AR-004 | -| **Area** | **`getAuthenticationMethod`** in `libs/domains/identity/backend/util-auth/src/lib/hybrid-auth.guard.ts` | -| **Configuration** | **`AUTHENTICATION_METHOD`** is **not** required to be set. When unset: if **`STATIC_API_KEY`** is set → **api-key** mode; otherwise → **keycloak** (OIDC / Keycloak integration with the deployer’s IdP). **Protected routes are not anonymous**—Keycloak- or users-mode guards still enforce authentication per configuration. | -| **Residual risk** | Deployments may **implicitly** run in **keycloak** mode without a single obvious env flag, which can surprise operators who expect an explicit mode switch. **`STATIC_API_KEY`** remains a **high-value secret** in **api-key** mode. | -| **Mitigations in scope of this repo** | Documented resolution order; **api-key** mode requires **`STATIC_API_KEY`** and validates the header; **keycloak** / **users** paths delegate to their guards. | -| **Compensating controls (deployer)** | For **api-key** or **users** deployments, set **`AUTHENTICATION_METHOD`** explicitly; treat **`STATIC_API_KEY`** with rotation and least exposure; prefer **keycloak** with the customer IdP for integrated enterprise setups. | -| **Risk owner** | Maintaining party for this repository and product security documentation (Forepath). | -| **Acceptor** | Repository maintainer (acceptance recorded in project documentation). | -| **Acceptance date** | **2026-05-06** | -| **Next review date** | **2027-05-06** | -| **Rationale (business / technical)** | Defaulting to **keycloak** when no API key is configured favors the **enterprise-typical** integrated IdP path while preserving backward compatibility for **`STATIC_API_KEY`**. | +## AR-003 - Backend authentication method resolution + +| Field | Recorded value | +| ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| **ID** | AR-003 | +| **Area** | **`getAuthenticationMethod`** in `libs/domains/identity/backend/util-auth/src/lib/hybrid-auth.guard.ts` | +| **Configuration** | **`AUTHENTICATION_METHOD`** is **not** required to be set. When unset: if **`STATIC_API_KEY`** is set, **api-key** mode is used; otherwise **keycloak** (OIDC / Keycloak integration with the deployer's IdP). **Protected routes are not anonymous**. Keycloak or users-mode guards still enforce authentication per configuration. | +| **Residual risk** | Deployments may **implicitly** run in **keycloak** mode without a single obvious env flag, which can surprise operators who expect an explicit mode switch. **`STATIC_API_KEY`** remains a **high-value secret** in **api-key** mode. | +| **Mitigations in scope of this repo** | Documented resolution order. **api-key** mode requires **`STATIC_API_KEY`** and validates the header. **keycloak** / **users** paths delegate to their guards. | +| **Compensating controls (deployer)** | For **api-key** or **users** deployments, set **`AUTHENTICATION_METHOD`** explicitly. Treat **`STATIC_API_KEY`** with rotation and least exposure. Prefer **keycloak** with the customer IdP for integrated enterprise setups. | +| **Risk owner** | Maintaining party for this repository and product security documentation (Forepath). | +| **Acceptor** | Repository maintainer (acceptance recorded in project documentation). | +| **Acceptance date** | **2026-05-06** | +| **Next review date** | **2027-05-06** | +| **Rationale (business / technical)** | Defaulting to **keycloak** when no API key is configured favors the **enterprise-typical** integrated IdP path while preserving backward compatibility for **`STATIC_API_KEY`**. | -#### Operator summary (AR-004) +#### Operator summary (AR-003) -Set **`AUTHENTICATION_METHOD`** explicitly if your policy requires **fully explicit** configuration. Never expose **`STATIC_API_KEY`**. See **[Authentication](../features/authentication.md)** and **[Operational hardening — Authentication mode](./operational-hardening.md#authentication-mode-backends)**. +Set **`AUTHENTICATION_METHOD`** explicitly if your policy requires **fully explicit** configuration. Never expose **`STATIC_API_KEY`**. See **[Authentication](../features/authentication.md)** and **[Operational hardening - Authentication mode](./operational-hardening.md#authentication-mode-backends)**. --- -## AR-005 — Desktop window open policy (`native-agent-console`) +## AR-004 - Desktop window open policy (`native-agent-console`) | Field | Recorded value | | ------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **ID** | AR-005 | +| **ID** | AR-004 | | **Area** | **`setWindowOpenHandler`** in `apps/agenstra/native-agent-console/src/main.ts` | | **Configuration** | Handler uses **`action: 'allow'`** so `window.open` / `target=_blank` can open new Electron windows with inherited `webPreferences`. | | **Residual risk** | Pop-up or multi-window flows could be abused in **phishing- or distraction-style** attacks compared with a stricter **deny** or allowlist policy. | -| **Mitigations in scope of this repo** | **Sandbox** and **contextIsolation** remain enabled; there is **no address bar (omnibox)** and **users cannot install browser extensions** in this shell, which limits some browser-class attacks. | -| **Compensating controls (deployer)** | Prefer the **web client** for untrusted content; revisit policy if the shell gains **untrusted browsing** or **URL-entry** UX. | +| **Mitigations in scope of this repo** | **Sandbox** and **contextIsolation** remain enabled. There is **no address bar (omnibox)** and **users cannot install browser extensions** in this shell, which limits some browser-class attacks. | +| **Compensating controls (deployer)** | Prefer the **web client** for untrusted content. Revisit policy if the shell gains **untrusted browsing** or **URL-entry** UX. | | **Risk owner** | Maintaining party for this repository and product security documentation (Forepath). | | **Acceptor** | Repository maintainer (acceptance recorded in project documentation). | | **Acceptance date** | **2026-05-06** | | **Next review date** | **2027-05-06** | -| **Rationale (business / technical)** | Allowing new windows supports legitimate product flows (e.g. external documentation) while the **secondary** desktop channel keeps a reduced attack surface versus a full browser. | +| **Rationale (business / technical)** | Allowing new windows supports legitimate product flows (for example external documentation) while the **secondary** desktop channel keeps a reduced attack surface versus a full browser. | -#### Operator summary (AR-005) +#### Operator summary (AR-004) New windows are **allowed** by design. Risk is **lower** than in a general-purpose browser because of the **non-browser** shell, but operators should treat the desktop app as **not** a general browsing environment for untrusted sites. --- -## AR-006 — CI / local Trivy: unfixed vulnerabilities not gated - -| Field | Recorded value | -| ------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **ID** | AR-006 | -| **Area** | **Trivy** vulnerability scanning (`trivy.yaml` at repository root, pull-request CI, pre-commit, local image scans—not the release workflow) | -| **Configuration** | **`vulnerability.ignore-unfixed: true`** — findings **without a Fixed Version** (no vendor/upstream fix published yet) are **excluded from the fail gate**. Only **CRITICAL** severities with an available fix fail CI and local hooks (see [`ci-security-scanning.md`](./ci-security-scanning.md)). | -| **Residual risk** | Known **CRITICAL** issues may remain in dependencies, base images, or OS packages until upstream publishes a fix; they are visible in SARIF/report output but do not block merge or release. | -| **Mitigations in scope of this repo** | Trivy still scans for **vuln**, **secret**, and **misconfig**; **HIGH** and below are report-only; per-CVE exceptions use `.trivyignore` with traceability. SBOM publication and Dependency Track on release provide ongoing visibility. | -| **Compensating controls (deployer)** | Monitor GitHub Security / SARIF artifacts; patch when fixes ship; track accepted CVEs in `.trivyignore` only when a fix exists but cannot be applied yet (not for permanently unfixed issues). | -| **Risk owner** | Maintaining party for this repository and product security documentation (Forepath). | -| **Acceptor** | Repository maintainer (acceptance recorded in project documentation). | -| **Acceptance date** | **2026-05-16** | -| **Next review date** | **2027-05-06** | -| **Rationale (business / technical)** | Blocking on unfixed CVEs creates **false failures** with no remediation path and delays delivery without reducing exploitable risk. Gating on **fixable CRITICAL** issues keeps CI actionable while acknowledging vendor lag. | - -#### Operator summary (AR-006) - -**Unfixed vulnerabilities are acceptable for pipeline gating** — Trivy will not fail because a CVE has an empty **Fixed Version**. Address **CRITICAL** findings that have a published fix; track anything else via SARIF and release SBOMs. Do not add unfixed CVEs to `.trivyignore` solely to silence the gate (they are already ignored). See **[CI security scanning](./ci-security-scanning.md)**. - ---- - -## AR-007 — Billing multi-tenant API key scope (`STATIC_API_KEY_TENANT_ID` unset) +## AR-005 - CI / local Trivy: unfixed vulnerabilities not gated + +| Field | Recorded value | +| ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| **ID** | AR-005 | +| **Area** | **Trivy** vulnerability scanning (`trivy.yaml` at repository root, pull-request CI, pre-commit, local image scans, not the release workflow) | +| **Configuration** | **`vulnerability.ignore-unfixed: true`**. Findings **without a Fixed Version** (no vendor or upstream fix published yet) are **excluded from the fail gate**. Only **CRITICAL** severities with an available fix fail CI and local hooks (see [`ci-security-scanning.md`](./ci-security-scanning.md)). | +| **Residual risk** | Known **CRITICAL** issues may remain in dependencies, base images, or OS packages until upstream publishes a fix. They are visible in SARIF and report output but do not block merge or release. | +| **Mitigations in scope of this repo** | Trivy still scans for **vuln**, **secret**, and **misconfig**. **HIGH** and below are report-only. Per-CVE exceptions use `.trivyignore` with traceability. SBOM publication and Dependency Track on release provide ongoing visibility. | +| **Compensating controls (deployer)** | Monitor GitHub Security and SARIF artifacts. Patch when fixes ship. Track accepted CVEs in `.trivyignore` only when a fix exists but cannot be applied yet (not for permanently unfixed issues). | +| **Risk owner** | Maintaining party for this repository and product security documentation (Forepath). | +| **Acceptor** | Repository maintainer (acceptance recorded in project documentation). | +| **Acceptance date** | **2026-05-16** | +| **Next review date** | **2027-05-06** | +| **Rationale (business / technical)** | Blocking on unfixed CVEs creates **false failures** with no remediation path and delays delivery without reducing exploitable risk. Gating on **fixable CRITICAL** issues keeps CI actionable while acknowledging vendor lag. | -| Field | Recorded value | -| ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **ID** | AR-007 | -| **Area** | **Billing manager** multi-tenancy with **`AUTHENTICATION_METHOD=api-key`** (or inferred api-key when **`STATIC_API_KEY`** is set). Implementation: `TenantUserGuard` in `libs/domains/decabill/backend/feature-billing-manager/src/lib/guards/tenant-user.guard.ts`; admin bypass via `ensureAdmin()` in `billing-access.utils.ts`. | -| **Configuration** | A **single** deployment-wide **`STATIC_API_KEY`**. **`STATIC_API_KEY_TENANT_ID`** is **optional**. When unset, a valid API key is accepted for **any** tenant id allowed by **`TENANTS`** / **`X-Tenant`** (each request selects the tenant via header). API key auth is treated as **admin** for billing admin routes. | -| **Residual risk** | Anyone who possesses **`STATIC_API_KEY`** can read and mutate **all** configured tenants’ billing data by changing **`X-Tenant`**, not only one tenant. This is **cross-tenant admin access** from a single shared secret. | -| **Mitigations in scope of this repo** | **`STATIC_API_KEY_TENANT_ID`** optionally binds API key auth to one tenant (must match **`X-Tenant`**). User/session auth (**keycloak** / **users**) enforces per-user **`tenant_id`** regardless of this setting. WebSocket dashboard status does **not** stream data to API key clients. | -| **Compensating controls (deployer)** | Treat **`STATIC_API_KEY`** as a **high-value** secret (rotation, least exposure, no client-side use). Prefer **keycloak** or **users** for the billing console in multi-tenant production. Set **`STATIC_API_KEY_TENANT_ID`** when automation must use API key against **one** tenant only. Use separate billing deployments or keys per tenant if policy forbids shared cross-tenant automation credentials. | -| **Risk owner** | Maintaining party for this repository and product security documentation (Forepath). | -| **Acceptor** | Repository maintainer (acceptance recorded in project documentation). | -| **Acceptance date** | **2026-06-19** | -| **Next review date** | **2027-05-06** | -| **Rationale (business / technical)** | Billing deployments use **one** static API key for automation and operator scripts. Requiring a separate key per tenant would multiply secret management without a current product requirement. **Explicit acceptance:** shared key + optional tenant header is **intentional**; operators who need single-tenant binding use **`STATIC_API_KEY_TENANT_ID`**. | - -#### Operator summary (AR-007) +#### Operator summary (AR-005) -With **`STATIC_API_KEY`** and **without** **`STATIC_API_KEY_TENANT_ID`**, the key is **not** limited to one tenant: it grants **admin-level access to every tenant** allowed by **`TENANTS`**, selected per request via **`X-Tenant`**. That behavior is **accepted** because there is only one deployment key. To restrict API key use to a single tenant, set **`STATIC_API_KEY_TENANT_ID`**. Interactive users (Keycloak/JWT) remain scoped to their own tenant. See **[Environment configuration — Billing manager multi-tenancy](../deployment/environment-configuration.md#backend-billing-manager)** and **[Billing Administration](../features/billing-administration.md)**. +**Unfixed vulnerabilities are acceptable for pipeline gating**. Trivy will not fail because a CVE has an empty **Fixed Version**. Address **CRITICAL** findings that have a published fix. Track anything else via SARIF and release SBOMs. Do not add unfixed CVEs to `.trivyignore` solely to silence the gate (they are already ignored). See **[CI security scanning](./ci-security-scanning.md)**. --- ## Hardening paths (if an acceptance is withdrawn) -- **AR-001:** Prefer a non-root admin user, **`PermitRootLogin no`**, least-privilege `sudo`, and cloud-init-native `ssh_authorized_keys` where possible; reduce secrets in user-data. -- **AR-002:** Add OS-trusted signing and/or Electron auto-update when native distribution requirements justify the operational cost. -- **AR-003:** Tighten CSP after automated and manual verification so core UI (including Monaco) still functions. -- **AR-004:** Require **`AUTHENTICATION_METHOD`** in all environments if auditors demand explicit configuration, or add startup validation that fails when **`STATIC_API_KEY`** is set without an explicit mode. -- **AR-005:** Tighten **`setWindowOpenHandler`** (for example URL allowlist or **`action: 'deny'`**) if the product loads untrusted origins or adds browser-like navigation. -- **AR-006:** Set **`vulnerability.ignore-unfixed: false`** (and optionally add **HIGH** to `severity`) if policy requires failing on all CRITICAL findings regardless of fix availability; expect more `.trivyignore` churn until dependencies catch up. -- **AR-007:** Require **`STATIC_API_KEY_TENANT_ID`** whenever **`STATIC_API_KEY`** is set and **`TENANTS`** lists more than one id; or reject API key auth on billing when multiple tenants are configured; or issue per-tenant API keys (product change). +- **AR-001:** Add OS-trusted signing and/or Electron auto-update when native distribution requirements justify the operational cost. +- **AR-002:** Tighten CSP after automated and manual verification so core UI (including Monaco) still functions. +- **AR-003:** Require **`AUTHENTICATION_METHOD`** in all environments if auditors demand explicit configuration, or add startup validation that fails when **`STATIC_API_KEY`** is set without an explicit mode. +- **AR-004:** Tighten **`setWindowOpenHandler`** (for example URL allowlist or **`action: 'deny'`**) if the product loads untrusted origins or adds browser-like navigation. +- **AR-005:** Set **`vulnerability.ignore-unfixed: false`** (and optionally add **HIGH** to `severity`) if policy requires failing on all CRITICAL findings regardless of fix availability. Expect more `.trivyignore` churn until dependencies catch up. --- diff --git a/docs/agenstra/security/ci-security-scanning.md b/docs/agenstra/security/ci-security-scanning.md index c36881d7e..cb4a01018 100644 --- a/docs/agenstra/security/ci-security-scanning.md +++ b/docs/agenstra/security/ci-security-scanning.md @@ -26,7 +26,7 @@ The `.github/workflows/release.yml` workflow does **not** run Trivy vulnerabilit | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Fail pipeline** | CRITICAL | | **Report only** | HIGH, MEDIUM, LOW (visible in SARIF when uploaded) | -| **Unfixed CVEs** | Ignored (`vulnerability.ignore-unfixed: true`) — findings without a Fixed Version do not fail the gate; see **[AR-006](./accepted-risks.md#ar-006--ci--local-trivy-unfixed-vulnerabilities-not-gated)** | +| **Unfixed CVEs** | Ignored (`vulnerability.ignore-unfixed: true`). Findings without a Fixed Version do not fail the gate. See **[AR-005](./accepted-risks.md#ar-005---ci--local-trivy-unfixed-vulnerabilities-not-gated)** | ## Viewing results @@ -41,7 +41,7 @@ SARIF categories include `trivy-fs`, `trivy-config`, and `trivy-images-*` on pul 2. **Documented ignore** — open a PR that adds the CVE to `.trivyignore`, reference an **[accepted-risk](./accepted-risks.md)** entry (or document a false positive), and note a **review/expiry date** in the PR description. 3. **Do not** weaken `trivy.yaml` for one-off exceptions. -See **[Accepted risks](./accepted-risks.md)** for deliberate product-level deviations (separate from CVE ignores), including **[AR-006](./accepted-risks.md#ar-006--ci--local-trivy-unfixed-vulnerabilities-not-gated)** (unfixed vulnerabilities are not pipeline blockers). +See **[Accepted risks](./accepted-risks.md)** for deliberate product-level deviations (separate from CVE ignores), including **[AR-005](./accepted-risks.md#ar-005---ci--local-trivy-unfixed-vulnerabilities-not-gated)** (unfixed vulnerabilities are not pipeline blockers). ## Local reproduction diff --git a/docs/agenstra/security/compliance-and-standards.md b/docs/agenstra/security/compliance-and-standards.md index 3b59bef4c..173d24f7d 100644 --- a/docs/agenstra/security/compliance-and-standards.md +++ b/docs/agenstra/security/compliance-and-standards.md @@ -49,10 +49,9 @@ Formal IT-Grundschutz certification or **ISMS** certification requires **organiz Understanding where data and credentials move supports both CRA-style technical documentation and organizational risk analysis: 1. **Browser / Electron** to **Express frontend** to **backend APIs** (`/api`). -2. **Browser** to **Agent Controller WebSocket** to **remote agent-manager WebSocket** (`/agents`) using **client-stored** credentials toward the remote host (not the end-user’s controller JWT merged into HTTP proxy headers for those paths). +2. **Browser** to **Agent Controller WebSocket** to **remote agent-manager WebSocket** (`/agents`) using **client-stored** credentials toward the remote host (not the end-user's controller JWT merged into HTTP proxy headers for those paths). 3. **Controller** to **customer `client.endpoint`** (SSRF and misconfiguration risk; mitigated by allowlists, TLS policy, DNS checks). -4. **Provisioning** to **cloud APIs and SSH** to new hosts (see **AR-001** in **[Accepted risks](./accepted-risks.md)**). -5. **Agent Manager** to **Docker / containers** (execution and file operations; non-root `agenstra` user, bind mounts under `/opt/agents`, restricted `sudo`). +4. **Agent Manager** to **Docker / containers** (execution and file operations; non-root `agenstra` user, bind mounts under `/opt/agents`, restricted `sudo`). Detail: **[Container image security](./container-images.md)**, **[Operational hardening](./operational-hardening.md)**. diff --git a/docs/agenstra/security/container-images.md b/docs/agenstra/security/container-images.md index 43b979a46..c8b03e8fd 100644 --- a/docs/agenstra/security/container-images.md +++ b/docs/agenstra/security/container-images.md @@ -6,10 +6,10 @@ For image build targets and registry names, see **[Backend Agent Manager](../app ## Runtime users -| Image family | User | Default UID/GID | Notes | -| --------------------------------------------------------------------------------------------- | ---------- | --------------- | --------------------------------------- | -| Manager/controller **API**, **worker**, **VNC**, **SSH**, **agi** (OpenClaw), billing **API** | `agenstra` | **10001** | `ARG APP_UID` / `APP_GID` at build time | -| Frontend **server** images (agent console, billing console, portal, docs) | `node` | **1000** | Alpine-based SSR images | +| Image family | User | Default UID/GID | Notes | +| ---------------------------------------------------------------------------- | ---------- | --------------- | --------------------------------------- | +| Manager/controller **API**, **worker**, **VNC**, **SSH**, **agi** (OpenClaw) | `agenstra` | **10001** | `ARG APP_UID` / `APP_GID` at build time | +| Frontend **server** images (agent console, portal, docs) | `node` | **1000** | Alpine-based SSR images | Processes do **not** run as root after container start. The optional SSH image still starts **`sshd`** via a single allowed `sudo` invocation in the entrypoint. diff --git a/docs/agenstra/security/operational-hardening.md b/docs/agenstra/security/operational-hardening.md index 538e22c65..a03569902 100644 --- a/docs/agenstra/security/operational-hardening.md +++ b/docs/agenstra/security/operational-hardening.md @@ -30,30 +30,18 @@ Resolution is implemented in **`getAuthenticationMethod`** (`libs/domains/identi **`api-key`** without **`STATIC_API_KEY`** fails at runtime with an error. **Keycloak** and **users** modes rely on their respective guards after **`HybridAuthGuard`**. Health endpoints **`/api/health`** and **`/health`** remain unauthenticated by design. -**Operator note:** Set **`AUTHENTICATION_METHOD`** explicitly if your security policy requires unambiguous configuration. Implicit **keycloak** when neither an explicit mode nor **`STATIC_API_KEY`** is set is an **accepted risk**; see **AR-004** in **[Accepted risks](./accepted-risks.md)**. +**Operator note:** Set **`AUTHENTICATION_METHOD`** explicitly if your security policy requires unambiguous configuration. Implicit **keycloak** when neither an explicit mode nor **`STATIC_API_KEY`** is set is an **accepted risk**. See **AR-003** in **[Accepted risks](./accepted-risks.md)**. -## Billing manager — multi-tenancy - -| Control | Purpose | -| ------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | -| **`X-Tenant` header** | Selects tenant context on HTTP and billing WebSocket handshakes. Validated against **`TENANTS`**; unknown ids → **400**. | -| **`TenantUserGuard`** | Ensures authenticated users’ **`tenant_id`** matches the request tenant. | -| **`STATIC_API_KEY_TENANT_ID`** | Optional bind of API key auth to one tenant. | - -**Accepted risk [AR-007](./accepted-risks.md#ar-007--billing-multi-tenant-api-key-scope-static_api_key_tenant_id-unset):** With **`STATIC_API_KEY`** and **without** **`STATIC_API_KEY_TENANT_ID`**, one deployment API key grants **admin access to every tenant** in **`TENANTS`** (tenant chosen per request via **`X-Tenant`**). This is **intentional** for a single shared automation key. Interactive **keycloak** / **users** sessions remain limited to the user’s tenant. - -Code: `libs/domains/decabill/backend/feature-billing-manager/src/lib/guards/tenant-user.guard.ts`, `libs/domains/shared/backend/util-http-context/src/lib/tenant-id.middleware.ts`. - -## Agent Controller — remote client endpoints (SSRF) +## Agent Controller - remote client endpoints (SSRF) Customer-configured **`client.endpoint`** values drive HTTP and WebSocket traffic from the controller to remote agent-managers. -| Control | Purpose | -| --------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| **`CLIENT_ENDPOINT_ALLOWED_HOSTS`** | Comma-separated hostname allowlist. The literal **`*`** explicitly allows **any host**. **Required in production** — the controller **exits** on startup if unset. | -| **`CLIENT_ENDPOINT_ALLOW_INSECURE_HTTP`** | Set to `true` only if `http:` endpoints must be allowed (discouraged). | -| **`CLIENT_ENDPOINT_TLS_REJECT_UNAUTHORIZED`** | Defaults to TLS verification on. **`false` is forbidden in production.** | -| **`CLIENT_ENDPOINT_SKIP_DNS_CHECK`** | Skips DNS resolution defense (private/loopback rebinding). Use only in controlled test scenarios. | +| Control | Purpose | +| --------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **`CLIENT_ENDPOINT_ALLOWED_HOSTS`** | Comma-separated hostname allowlist. The literal **`*`** explicitly allows **any host**. **Required in production**. The controller **exits** on startup if unset. | +| **`CLIENT_ENDPOINT_ALLOW_INSECURE_HTTP`** | Set to `true` only if `http:` endpoints must be allowed (discouraged). | +| **`CLIENT_ENDPOINT_TLS_REJECT_UNAUTHORIZED`** | Defaults to TLS verification on. **`false` is forbidden in production.** | +| **`CLIENT_ENDPOINT_SKIP_DNS_CHECK`** | Skips DNS resolution defense (private/loopback rebinding). Use only in controlled test scenarios. | Using **`*`** for **`CLIENT_ENDPOINT_ALLOWED_HOSTS`** intentionally **widens** the reachable host set. Prefer **narrow** hostnames when feasible; combine with egress controls and monitoring. @@ -61,7 +49,7 @@ DNS validation resolves the endpoint hostname and rejects addresses in private/l Code: `libs/domains/agenstra/backend/feature-agent-controller/src/lib/utils/client-endpoint-security.ts`. -## HTTP proxy to remote agent-manager — headers +## HTTP proxy to remote agent-manager - headers Outbound proxied HTTP requests **drop** caller-supplied credential-like headers (`Authorization`, cookies, `x-api-key`, and similar) and attach only the **service-computed** `Authorization` for the **client entity** (stored API key or token). This avoids forwarding the **portal user’s** JWT on HTTP proxy paths. @@ -89,14 +77,14 @@ When **`CONFIG`** points to a remote JSON URL, Express servers validate fetches **`CONFIG_ALLOWED_HOSTS`** supports **`*`** to explicitly allow **any host**. That choice increases risk if **`CONFIG`** points to an attacker-controlled origin; prefer explicit host allowlists in production. -See **[Environment configuration — Frontend (all `frontend-*` apps)](../deployment/environment-configuration.md)** for variable names. +See **[Environment configuration - Frontend (all `frontend-*` apps)](../deployment/environment-configuration.md)** for variable names. ## Content Security Policy (frontend Express) - CSP includes **`'unsafe-inline'`** and **`'unsafe-eval'`** for Monaco and tooling; default delivery is **`Content-Security-Policy-Report-Only`**. - Set **`CSP_ENFORCE=true`** only after verifying the application still works. -Accepted risk: **AR-003** in **[Accepted risks](./accepted-risks.md)**. +Accepted risk: **AR-002** in **[Accepted risks](./accepted-risks.md)**. ## WebSocket CORS (Agent Controller) @@ -107,17 +95,17 @@ Accepted risk: **AR-003** in **[Accepted risks](./accepted-risks.md)**. Browser-originated **state-changing** requests can be restricted by origin allowlist middleware on backends (see `origin-allowlist.middleware.ts` in identity util-auth). Configure per deployment expectations. -## Electron shell — new windows +## Electron shell - new windows -**`native-agent-console`** may open new windows for `window.open` / `target=_blank` with **allow** semantics. See **AR-005** in **[Accepted risks](./accepted-risks.md)**. +**`native-agent-console`** may open new windows for `window.open` / `target=_blank` with **allow** semantics. See **AR-004** in **[Accepted risks](./accepted-risks.md)**. ## Related documentation -- **[Accepted risks](./accepted-risks.md)** — AR-001 through AR-005 +- **[Accepted risks](./accepted-risks.md)** - AR-001 through AR-005 - **[Environment configuration](../deployment/environment-configuration.md)** - **[Production checklist](../deployment/production-checklist.md)** -- **[Backend Agent Controller application](../applications/backend-agent-controller.md)** — WebSocket and ports -- **[Vulnerability reporting and artifacts](./vulnerability-reporting-and-artifacts.md)** — Disclosure and response commitments +- **[Backend Agent Controller application](../applications/backend-agent-controller.md)** - WebSocket and ports +- **[Vulnerability reporting and artifacts](./vulnerability-reporting-and-artifacts.md)** - Disclosure and response commitments --- diff --git a/docs/agenstra/security/vulnerability-reporting-and-artifacts.md b/docs/agenstra/security/vulnerability-reporting-and-artifacts.md index 8d8640199..68d5acf2f 100644 --- a/docs/agenstra/security/vulnerability-reporting-and-artifacts.md +++ b/docs/agenstra/security/vulnerability-reporting-and-artifacts.md @@ -76,30 +76,27 @@ See **[CI security scanning (Trivy)](./ci-security-scanning.md)** for workflows, ## Software Bill of Materials (SBOM) -CycloneDX SBOM files are published for each release. **Agenstra** and **Decabill** each publish to a dedicated object-store bucket; the object key layout is the same for both domains. +CycloneDX SBOM files are published for each release to the **Agenstra** object-store bucket. | Field | Value | | ---------------- | --------------------------- | | **Path pattern** | `releases//sboms/` | | **Example** | `releases/2.0.0/sboms/` | -**Buckets and credentials (production `production` environment secrets):** +**Bucket and credentials (production `production` environment secrets):** Shared R2 credentials: `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`, `AWS_REGION` | Domain | Product-specific secrets | | -------- | -------------------------------------------------------- | | Agenstra | `AGENSTRA_AWS_BUCKET`, `AGENSTRA_CLOUDFLARE_R2_ENDPOINT` | -| Decabill | `DECABILL_AWS_BUCKET`, `DECABILL_CLOUDFLARE_R2_ENDPOINT` | -**Decabill SBOM files** — `decabill-*.cdx.json`, `container-decabill-*.cdx.json`, and legacy `container-agenstra-billing-*.cdx.json` container SBOMs. - -**Agenstra SBOM files** — all other `*.cdx.json` files under the release SBOM set (agenstra services, shared MCP tools, and agenstra container images). +**Agenstra SBOM files** include `agenstra-*.cdx.json`, `shared-*.cdx.json`, and `container-agenstra-*.cdx.json` container image SBOMs for images built in the release pipeline. **Sources:** -- **Service SBOMs** — Nx `sbom` target (`dist/sboms/.cdx.json`) -- **Container image SBOMs** — Trivy CycloneDX (`dist/sboms/container-.cdx.json`) for images built in the release pipeline +- **Service SBOMs** - Nx `sbom` target (`dist/sboms/.cdx.json`) +- **Container image SBOMs** - Trivy CycloneDX (`dist/sboms/container-.cdx.json`) for images built in the release pipeline Pull requests upload service and container SBOM files (separate CycloneDX files per image) as the **`sbom-artifacts`** workflow artifact. Releases upload each container image SBOM to Dependency-Track with `forepath/gh-upload-sbom@v2` (one upload per file, matrix job). Set the Dependency-Track **parent project UUID** for all container image projects in `.github/workflows/release.yml` (`prepare-container-image-sbom-uploads` → `env.CONTAINER_IMAGE_SBOM_PARENT`). @@ -109,7 +106,7 @@ Resolve `` from your deployment or from [Downloads](https://downloads.a ## Desktop release integrity -Published desktop installers and archives for **agenstra-native-agent-console** include **SHA-256 checksum manifests** so you can confirm files were not corrupted or swapped in transit. This supports **integrity verification** in depth; it does **not** by itself prove **publisher identity** (see **AR-002** in **[Accepted risks](./accepted-risks.md)**). +Published desktop installers and archives for **agenstra-native-agent-console** include **SHA-256 checksum manifests** so you can confirm files were not corrupted or swapped in transit. This supports **integrity verification** in depth. It does **not** by itself prove **publisher identity** (see **AR-001** in **[Accepted risks](./accepted-risks.md)**). ### What is published @@ -149,7 +146,7 @@ shasum -a 256 -c SHA256SUMS ## Related documentation -- **[Accepted risks](./accepted-risks.md)** — AR-002 (desktop signing and update posture) +- **[Accepted risks](./accepted-risks.md)** - AR-001 (desktop signing and update posture) - **[Operational hardening](./operational-hardening.md)** - **[Compliance and standards](./compliance-and-standards.md)** - **[Deployment — Production checklist](../deployment/production-checklist.md)** diff --git a/docs/decabill/README.md b/docs/decabill/README.md new file mode 100644 index 000000000..61d3df9fb --- /dev/null +++ b/docs/decabill/README.md @@ -0,0 +1,86 @@ +# Decabill Documentation + +Welcome to the documentation for **Decabill**, the ForePath billing product for subscriptions, invoicing, payment processing, and customer billing administration. + +## What is Decabill? + +Decabill lets operators and customers manage billing in one place: + +- **Subscriptions and service plans** with configurable providers and pricing +- **Invoicing and payments** including Stripe checkout flows +- **Customer self-service** for profiles, invoices, and subscription lifecycle +- **Administration** for manual invoices, customer billing profiles, and operational dashboards +- **Multi-tenant deployments** with tenant-scoped data and configurable frontends +- **Server provisioning** for bundled product stacks via cloud-init when service plans include infrastructure + +## Documentation Structure + +### [Getting Started](./getting-started.md) + +Prerequisites, installation, and your first login to the billing console. + +### [Architecture](./architecture/README.md) + +- [System Overview](./architecture/system-overview.md) +- [Components](./architecture/components.md) +- [Data Flow](./architecture/data-flow.md) + +### [Applications](./applications/README.md) + +- [Frontend Billing Console](./applications/frontend-billing-console.md) +- [Backend Billing Manager](./applications/backend-billing-manager.md) + +### [Features](./features/README.md) + +Product capabilities including subscriptions, invoices, administration, multi-tenancy, payments, and real-time dashboard status. + +### [Deployment](./deployment/README.md) + +- [Local Development](./deployment/local-development.md) +- [Docker Deployment](./deployment/docker-deployment.md) +- [Environment Configuration](./deployment/environment-configuration.md) +- [Production Checklist](./deployment/production-checklist.md) +- [Background Jobs](./deployment/background-jobs.md) + +### [Security](./security/README.md) + +Compliance-oriented transparency, accepted-risk register, vulnerability reporting, SBOM artifacts, and CI scanning. + +### [API Reference](./api-reference/README.md) + +Billing Manager HTTP OpenAPI and WebSocket AsyncAPI specifications. + +### [Troubleshooting](./troubleshooting/README.md) + +- [Common Issues](./troubleshooting/common-issues.md) +- [Debugging Guide](./troubleshooting/debugging-guide.md) + +## Quick Start + +New to Decabill? Follow this path: + +1. **[Getting Started](./getting-started.md)** for local setup +2. **[System Overview](./architecture/system-overview.md)** for architecture +3. **[Multi-tenancy](./features/multi-tenancy.md)** if you run more than one tenant +4. **[Environment Configuration](./deployment/environment-configuration.md)** before production + +## System Architecture + +Decabill follows a two-tier architecture: + +```mermaid +graph TB + FE["Frontend Billing Console
(Customer + Admin UI)
Angular SSR + Express"] + BM["Backend Billing Manager
(API, jobs, provisioning)
NestJS + PostgreSQL + Redis"] + FE -->|"HTTP REST + WebSocket"| BM +``` + +## External Resources + +- [NestJS Documentation](https://docs.nestjs.com/) +- [Angular Documentation](https://angular.dev/) +- [Stripe Documentation](https://stripe.com/docs) + +--- + +_For repository-wide security contact and supported versions, see the root `SECURITY.md` file in the GitHub repository._ diff --git a/docs/decabill/api-reference/README.md b/docs/decabill/api-reference/README.md new file mode 100644 index 000000000..e63570382 --- /dev/null +++ b/docs/decabill/api-reference/README.md @@ -0,0 +1,117 @@ +# API Reference + +Complete API specifications for the Decabill billing manager. Specifications are published as OpenAPI 3.1.0 (HTTP REST) and AsyncAPI 3.0.0 (dashboard WebSocket gateway). + +## Billing Manager HTTP API + +The billing manager exposes all billing, subscription, invoice, catalog, and admin operations over HTTP on port **3200** with global prefix **`/api`**. + +### OpenAPI Specification + +**Specification file**: [openapi.yaml](/spec/billing-manager/openapi.yaml) + +- **View in Swagger Editor**: [Open in Swagger Editor](https://editor.swagger.io/?url=https://docs.decabill.com/spec/billing-manager/openapi.yaml) +- **Download**: [openapi.yaml](/spec/billing-manager/openapi.yaml) + +Canonical source in the monorepo: `libs/domains/decabill/backend/feature-billing-manager/spec/openapi.yaml` + +The HTTP API includes: + +- **Public offerings** - Unauthenticated plan listings for marketing pages +- **Service catalog** - Service types and service plans (admin) +- **Subscriptions and backorders** - Order, cancel, resume, retry, and availability +- **Customer profile** - Self-service billing metadata +- **Invoices and open positions** - Issue, preview, download, void, pay, and billing-day accumulation +- **Admin billing** - Manual invoices, customer profiles, statistics, audit logs, bill-now +- **Authentication and users** - Login, register, and user management when `AUTHENTICATION_METHOD=users` +- **Stripe webhook** - Signed payment event handling +- **Configuration** - `GET /config` for operator-visible settings + +### Authentication + +Unless documented as public, operations require authentication: + +- **Bearer JWT** when using built-in users +- **Bearer Keycloak access token** when using Keycloak +- **Bearer or ApiKey static key** when using `AUTHENTICATION_METHOD=api-key` + +Send **`X-Tenant`** on every request for multi-tenant deployments. Invalid tenant ids return **400**. + +See **[Authentication](../features/authentication.md)**. + +### Admin manual invoices and customer profiles + +Admin CRUD for manual invoices and customer billing profiles is documented in the OpenAPI **`/admin/billing/*`** paths. + +Product-oriented guide: **[Billing Administration](../features/billing-administration.md)** + +## Billing Manager WebSocket Gateway + +The billing manager runs a Socket.IO server on port **8082** (default), namespace **`billing`**, separate from the HTTP listener. + +Static API key authentication is **not** sufficient for the dashboard stream. Connections require an end-user JWT or Keycloak identity, matching REST billing rules. + +### AsyncAPI Specification + +**Specification file**: [asyncapi.yaml](/spec/billing-manager/asyncapi.yaml) + +- **View in AsyncAPI Studio**: [Open in AsyncAPI Studio](https://studio.asyncapi.com/?url=https://docs.decabill.com/spec/billing-manager/asyncapi.yaml) +- **Download**: [asyncapi.yaml](/spec/billing-manager/asyncapi.yaml) + +Canonical source in the monorepo: `libs/domains/decabill/backend/feature-billing-manager/spec/asyncapi.yaml` + +The status gateway provides: + +| Direction | Event | Description | +| ---------------- | ---------------------------- | ------------------------------------------------------------------ | +| Client to server | `subscribeDashboardStatus` | Start polling provisioned server status for the authenticated user | +| Client to server | `unsubscribeDashboardStatus` | Stop polling for this socket | +| Server to client | `dashboardStatusUpdate` | Periodic status payload (same shape as REST server-info) | +| Server to client | `error` | Application errors scoped to the initiating socket | + +Pass **`X-Tenant`** in handshake metadata (`auth.tenantId` in browser clients, `extraHeaders` in Node clients). + +See **[Real-time Status](../features/real-time-status.md)**. + +## Using the Specifications + +### Swagger Editor + +[Swagger Editor](https://editor.swagger.io/) helps you: + +- Browse endpoints and schemas interactively +- Validate request and response models +- Export client stubs or documentation + +Load the spec via the docs.decabill.com URL above or the local `/spec/billing-manager/openapi.yaml` path served by the docs site build. + +### AsyncAPI Studio + +[AsyncAPI Studio](https://studio.asyncapi.com/) helps you: + +- Visualize dashboard socket message flows +- Inspect payload schemas for `dashboardStatusUpdate` +- Validate the AsyncAPI document + +## Generated Client Package + +The repository generates a TypeScript Axios client from the OpenAPI spec: + +```bash +nx run decabill-backend-billing-manager:generate-client +``` + +Published npm package (GitHub Packages): **`@forepath/decabill-billing-manager-client`** + +Configure `@forepath` scope in `.npmrc` to install from GitHub Packages. Clients are regenerated on release to stay aligned with the spec. + +## Related Documentation + +- **[Backend Billing Manager](../applications/backend-billing-manager.md)** - Ports, queue roles, and deployment +- **[Frontend Billing Console](../applications/frontend-billing-console.md)** - How the UI calls the API +- **[Architecture Data Flow](../architecture/data-flow.md)** - HTTP, WebSocket, Stripe, and provisioning sequences +- **[Features Overview](../features/README.md)** - Product capability index + +--- + +_For operational deployment variables, see **[Environment Configuration](../deployment/environment-configuration.md)**._ diff --git a/docs/decabill/applications/README.md b/docs/decabill/applications/README.md new file mode 100644 index 000000000..198b50910 --- /dev/null +++ b/docs/decabill/applications/README.md @@ -0,0 +1,107 @@ +# Applications Documentation + +This section provides detailed documentation for each application in the Decabill product. + +## Overview + +Decabill consists of two primary applications: + +1. **Frontend Billing Console** - Angular SSR customer and admin UI +2. **Backend Billing Manager** - NestJS API, WebSocket gateway, background jobs, and integrations + +Both applications live under `apps/decabill/` and delegate feature logic to domain libraries in `libs/domains/decabill/`. + +## Applications + +### [Frontend Billing Console](./frontend-billing-console.md) + +Web application for subscription self-service, invoicing, payments, and billing administration. + +**Key features**: + +- Localized Angular UI with Express SSR in production +- Dashboard with live server status (WebSocket) and power actions +- Customer routes for plans, invoices, and profile +- Admin routes for service catalog, manual billing, and customer profiles +- Identity integration (login, register, user management) + +**Default port**: **4500** + +**Docker image**: `ghcr.io/forepath/decabill-billing-console-server:latest` + +### [Backend Billing Manager](./backend-billing-manager.md) + +Backend service for all billing business logic, persistence, and async processing. + +**Key features**: + +- HTTP REST API (OpenAPI) +- Socket.IO dashboard status gateway (AsyncAPI) +- PostgreSQL with automatic migrations on API startup +- BullMQ schedulers and workers (split roles in compose) +- Stripe checkout and webhooks +- Cloud provisioning and backorder retry + +**Default ports**: HTTP **3200**, WebSocket **8082** + +**Docker image**: `ghcr.io/forepath/decabill-billing-api:latest` + +## Application Relationships + +```mermaid +graph TB + FE[Frontend Billing Console] + BM[Backend Billing Manager] + PG[(PostgreSQL)] + RD[(Redis)] + + FE -->|HTTP /api| BM + FE -->|WS /billing| BM + BM --> PG + BM --> RD +``` + +The console never talks to Stripe or cloud providers directly. All privileged operations flow through the billing manager. + +## Communication Patterns + +| Channel | Direction | Purpose | +| --------------- | ------------------- | ------------------------------------------- | +| HTTP REST | Console to Manager | CRUD, checkout initiation, admin operations | +| WebSocket | Console to Manager | Dashboard server status stream | +| BullMQ | Internal to Manager | Schedulers, workers, repeatable jobs | +| Stripe webhooks | Stripe to Manager | Payment completion events | +| Provider APIs | Manager to cloud | Availability, provisioning, DNS | + +## Build and Run Commands + +From the repository root: + +```bash +# Backend +nx serve decabill-backend-billing-manager +nx build decabill-backend-billing-manager +nx run decabill-backend-billing-manager:api-container-image + +# Frontend +nx serve decabill-frontend-billing-console +nx build decabill-frontend-billing-console +nx run decabill-frontend-billing-console:container-image +``` + +Docker Compose entry points: + +- `apps/decabill/backend-billing-manager/docker-compose.yaml` +- `apps/decabill/frontend-billing-console/docker-compose.yaml` + +## Related Documentation + +- **[Getting Started](../getting-started.md)** - First-time setup +- **[Architecture Overview](../architecture/system-overview.md)** - System design +- **[Deployment Guide](../deployment/README.md)** - Local and container deployment +- **[Features Documentation](../features/README.md)** - Product capabilities +- **[API Reference](../api-reference/README.md)** - Specifications + +--- + +_For library-level implementation details, see the README files under `libs/domains/decabill/`._ diff --git a/docs/decabill/applications/backend-billing-manager.md b/docs/decabill/applications/backend-billing-manager.md new file mode 100644 index 000000000..ddb331062 --- /dev/null +++ b/docs/decabill/applications/backend-billing-manager.md @@ -0,0 +1,192 @@ +# Backend Billing Manager + +NestJS backend application for subscription billing, invoicing, payments, provisioning, and background processing. + +## Purpose + +The billing manager is the authoritative service for Decabill. It exposes HTTP and WebSocket interfaces, persists data in PostgreSQL, enqueues work on Redis-backed BullMQ queues, integrates with Stripe, and optionally provisions cloud infrastructure when service plans require it. + +The app module in `apps/decabill/backend-billing-manager` bootstraps shared queue role logic, runs migrations when acting as API, and imports the domain **`BillingManagerModule`** from `@forepath/decabill/backend`. + +## Features + +This application provides: + +- **HTTP REST API** - Subscriptions, invoices, catalog, customer profile, admin billing, public offerings +- **WebSocket gateway** - Dashboard server status on namespace **`billing`** +- **Background jobs** - Billing cycles, expiration, reminders, overdue handling, backorder retry, SSH stack updates +- **Stripe integration** - Checkout sessions and signed webhooks +- **Invoice PDFs** - ZUGFeRD-style generation and filesystem storage +- **Multi-tenancy** - Tenant allowlist and row-level isolation +- **Authentication** - API key, Keycloak, or built-in users (JWT) +- **Dynamic plugins** - Optional payment processors and billing UI metadata +- **Email** - Invoice and reminder delivery via SMTP +- **Rate limiting and CORS** - Production-safe HTTP defaults + +## Architecture + +Built with: + +- **NestJS** - Modules, controllers, guards, and gateways +- **TypeORM** - Entities and migrations (app migrations plus identity migrations) +- **BullMQ** - Queue name **`billing`** with coordinator and unit jobs +- **Socket.IO** - Separate WebSocket listener on `WEBSOCKET_PORT` +- **PostgreSQL** - Primary datastore +- **Redis** - BullMQ connection + +Domain logic, OpenAPI source, and AsyncAPI source live in `libs/domains/decabill/backend/feature-billing-manager`. + +## Ports and Network Surfaces + +| Variable | Default | Description | +| --------------------- | --------- | ------------------------------- | +| `PORT` | **3200** | HTTP API (global prefix `/api`) | +| `WEBSOCKET_PORT` | **8082** | Socket.IO server | +| `WEBSOCKET_NAMESPACE` | `billing` | Dashboard status namespace | +| `HOST` | `0.0.0.0` | Bind address | + +Health and monitoring endpoints are provided through shared backend utilities where enabled. + +## Queue Roles + +The same container image runs different responsibilities based on `QUEUE_ROLE`: + +### `api` + +- Serves HTTP REST and WebSocket +- Runs TypeORM migrations on startup +- May expose Bull Board at `QUEUE_BULL_BOARD_PATH` (default `/admin/queues`) +- Does not process BullMQ unit jobs or register repeatable coordinators + +### `worker` + +- Consumes BullMQ jobs from the **`billing`** queue +- Processes unit jobs enqueued by coordinators (billing, expiration, invoices, reminders, backorder retry, subscription item update, admin bill-now) +- Respects `QUEUE_WORKER_CONCURRENCY` (default **5**) + +### `scheduler` + +- On startup, registers repeatable **coordinator** jobs (subscription billing, expiration, invoice overdue, open-position invoice, renewal reminder, subscription item update, backorder retry) +- Does not serve HTTP or execute unit work directly + +### `all` + +- Combines API, scheduler, and worker for local development +- Enables Bull Board by default when not explicitly disabled + +Docker Compose runs three containers (`backend-billing-manager`, `backend-billing-manager-worker`, `backend-billing-manager-scheduler`) sharing **`decabill-billing-api`**. + +See **[Background Jobs](../deployment/background-jobs.md)** for job names and intervals. + +## Docker Image + +**Image**: `ghcr.io/forepath/decabill-billing-api:latest` + +**Dockerfile**: `apps/decabill/backend-billing-manager/Dockerfile.api` + +Build locally: + +```bash +nx run decabill-backend-billing-manager:api-container-image +``` + +Start the full stack: + +```bash +cd apps/decabill/backend-billing-manager +docker compose up -d +``` + +Compose services: `postgres`, `redis`, `backend-billing-manager`, `backend-billing-manager-worker`, `backend-billing-manager-scheduler`, `mailhog`. + +Volumes include `invoice_pdf_data` mounted at `/data/invoices` and optional `./provider-plugins` for dynamic providers. + +## Authentication + +Configure one method via `AUTHENTICATION_METHOD`: + +| Method | Key variables | Console pairing | +| ---------- | ------------------------------ | ---------------------------------------------- | +| `api-key` | `STATIC_API_KEY` | Automation; no dashboard WebSocket user stream | +| `keycloak` | `KEYCLOAK_*` | OAuth login in console | +| `users` | `JWT_SECRET`, `DISABLE_SIGNUP` | Built-in register and login | + +Optional `STATIC_API_KEY_TENANT_ID` binds API key auth to one tenant. + +See **[Authentication](../features/authentication.md)**. + +## Major API Areas + +Full paths and schemas are in **[API Reference](../api-reference/README.md)** and `/spec/billing-manager/openapi.yaml`. + +| Area | Example paths | Notes | +| ---------------- | ------------------------------------ | ----------------------------------------------- | +| Public offerings | `GET /public/service-plan-offerings` | Unauthenticated marketing data | +| Catalog | `/service-types`, `/service-plans` | Admin CRUD | +| Subscriptions | `/subscriptions`, `/backorders` | Order, cancel, resume | +| Invoices | `/invoices`, open positions | PDF download, void, pay | +| Customer | `/customer-profile` | Required before ordering | +| Admin billing | `/admin/billing/*` | Manual invoices, profiles, statistics, bill-now | +| Payments | `/invoices/{id}/pay`, Stripe webhook | Checkout redirect | +| Availability | `/availability/check` | Provider capacity | + +Send `X-Tenant` on every request when using multi-tenancy. + +## WebSocket Gateway + +AsyncAPI documents the **`billing`** namespace: + +- Client: `subscribeDashboardStatus`, `unsubscribeDashboardStatus` +- Server: `dashboardStatusUpdate`, `error` + +Requires the same user JWT or Keycloak session as interactive REST calls. Connect to `http://:8082/billing` with authorization in the handshake. + +Spec: `/spec/billing-manager/asyncapi.yaml` + +## Stripe and Provisioning + +- **Stripe** - `STRIPE_SECRET_KEY`, `STRIPE_WEBHOOK_SECRET`, checkout return URLs, `BILLING_DEFAULT_PAYMENT_PROCESSOR` +- **Hetzner / DigitalOcean** - `HETZNER_API_TOKEN`, `DIGITALOCEAN_API_TOKEN` +- **DNS** - Optional Cloudflare integration (`CLOUDFLARE_API_TOKEN`, `CLOUDFLARE_ZONE_ID`, `DNS_BASE_DOMAIN`) + +See **[Payment Processing](../features/payment-processing.md)** and **[Server Provisioning](../features/server-provisioning.md)**. + +## Development Commands + +```bash +# Run locally (set QUEUE_ROLE=all in .env) +nx serve decabill-backend-billing-manager + +# Build +nx build decabill-backend-billing-manager + +# Tests +nx test decabill-backend-billing-manager + +# Generate TypeScript client from OpenAPI +nx run decabill-backend-billing-manager:generate-client +``` + +Published client package: `@forepath/decabill-billing-manager-client` (generated from the same OpenAPI spec). + +## Bull Board (Local) + +When enabled on an API or `all` process: + +- URL: `http://localhost:3200/admin/queues` +- Default credentials: `admin` / `bullmq` (override with `QUEUE_BULL_BOARD_USERNAME` and `QUEUE_BULL_BOARD_PASSWORD`) + +Disable in production unless tightly access-controlled. + +## Related Documentation + +- **[Frontend Billing Console](./frontend-billing-console.md)** - UI routes and SSR +- **[Architecture Components](../architecture/components.md)** - Infrastructure dependencies +- **[Data Flow](../architecture/data-flow.md)** - Sequence diagrams +- **[Environment Configuration](../deployment/environment-configuration.md)** - Complete env list +- **[Billing Administration](../features/billing-administration.md)** - Admin features +- **[API Reference](../api-reference/README.md)** - OpenAPI and AsyncAPI + +--- + +_Canonical OpenAPI source: `libs/domains/decabill/backend/feature-billing-manager/spec/openapi.yaml`_ diff --git a/docs/decabill/applications/frontend-billing-console.md b/docs/decabill/applications/frontend-billing-console.md new file mode 100644 index 000000000..92760d075 --- /dev/null +++ b/docs/decabill/applications/frontend-billing-console.md @@ -0,0 +1,181 @@ +# Frontend Billing Console + +Angular web application with localized builds and an Express SSR server for customer self-service and billing administration. + +## Purpose + +The billing console is the primary user interface for Decabill. It connects to the billing manager REST API and dashboard WebSocket gateway. It does not embed business rules for invoicing or provisioning; those remain server-side. + +Customers use it to manage subscriptions, pay invoices, and view provisioned server status. Administrators manage service types, service plans, manual invoices, customer billing profiles, and users. + +## Features + +This application provides: + +- **Overview dashboard** - Subscription cards, server status, start/stop/restart actions +- **Plans** - Browse and order service plans, manage subscription lifecycle +- **Invoices** - List, detail, download, and Stripe checkout redirect +- **Customer profile** - Billing metadata required before ordering +- **Administration** - Service types, service plans, billing KPIs, manual invoices, billing profiles (admin only) +- **Identity UI** - Login, registration, password reset, email confirmation, user management +- **Real-time status** - Socket.IO subscription on the overview page +- **Localization** - English and German builds with locale-prefixed SSR paths +- **Runtime configuration** - Express `/config` endpoint for deployed environments + +## Architecture + +Built with: + +- **Angular** - Components, routing, and i18n +- **NgRx** - State, effects, and facades from `@forepath/decabill/frontend/data-access-billing-console` +- **Express** - SSR static file server (`src/server.ts`) +- **Bootstrap 5** - Layout and components +- **Socket.IO client** - Dashboard status namespace +- **Identity bundle** - `@forepath/identity/frontend` for auth routes and guards + +Feature components live in `@forepath/decabill/frontend/feature-billing-console` and are wired through `billingConsoleRoutes`. + +## Routes Overview + +All routes render inside `BillingConsoleContainerComponent` unless noted. Paths below omit the optional locale prefix (`/en`, `/de`) that the Express server injects in SSR mode. + +### Default and customer routes + +| Path | Guard | Component | Description | +| ---------------- | ----------- | ------------- | ---------------------------------------- | +| `/` | none | redirect | Redirects to `dashboard` | +| `/dashboard` | `authGuard` | Overview | Subscription overview and server control | +| `/subscriptions` | `authGuard` | Subscriptions | Plans list and ordering | +| `/invoices` | `authGuard` | Invoices | Invoice list, payment, and detail | + +Stripe return URLs typically land on `/invoices?payment=success` or `?payment=cancel`. + +### Identity routes (from `identityAuthRoutes`) + +| Path | Guard | Description | +| -------------------------------------- | ----------------------------------- | ---------------------------------- | +| `/login` | `loginGuard` | Email/password or Keycloak entry | +| `/register` | `signupDisabledGuard`, `loginGuard` | Self-service registration | +| `/request-password-reset` | `loginGuard` | Request reset code | +| `/request-password-reset-confirmation` | `loginGuard` | Confirmation message | +| `/reset-password` | `loginGuard` | Submit reset code and new password | +| `/confirm-email` | `loginGuard` | Email confirmation code | +| `/users` | `authGuard`, `adminGuard` | Admin user management | + +### Administration routes (`billingAdminGuard` plus `authGuard`) + +| Path | Component | Description | +| ----------------------------------- | ------------------------- | ------------------------------------ | +| `/administration/service-types` | ServiceTypesPage | Provider and service type catalog | +| `/administration/service-plans` | ServicePlansPage | Priced plans and ordering highlights | +| `/administration/billing` | AdminBillingPage | KPIs, bill-now, open/overdue lists | +| `/administration/customer-profiles` | AdminCustomerProfilesPage | Customer billing profile CRUD | + +Unknown paths redirect to the shell root (`**` to ``). + +## Express SSR Server + +Production and Docker deployments run the compiled Express server from `src/server.ts`. + +### Responsibilities + +- Security headers via `createSecurityHeadersMiddleware()` +- Runtime config registration via `registerRuntimeConfigEndpoint(app)` (`/config`) +- Locale detection from URL prefix, `Accept-Language`, or `DEFAULT_LOCALE` +- Static serving of per-locale Angular browser bundles +- SPA fallback: non-file routes receive `index.html` for client routing +- Monaco-related middleware for assets when bundled + +### Environment variables (server) + +| Variable | Default | Purpose | +| ----------------------- | ---------------------------------------------------- | ------------------------------------------ | +| `HOST` | `0.0.0.0` | Bind address | +| `PORT` | `4200` in generic server; **4500** in Docker compose | Listen port | +| `DEFAULT_LOCALE` | `en` | Fallback locale | +| `CSP_ENFORCE` | `true` in compose | Content-Security-Policy enforcement | +| `CSP_CONNECT_SRC_EXTRA` | API origin | Allow API and WebSocket in CSP connect-src | + +Local `nx serve` uses the Angular dev server on port **4500** without Express unless you build and run `serve-server`. + +## Configuration + +### Build-time environment + +Development builds replace `environment.ts` with `environment.decabill.ts`: + +```typescript +billing: { + restApiUrl: 'http://localhost:3200/api', + frontendUrl: 'http://localhost:4500', + websocketUrl: 'http://localhost:8082/billing', + tenantId: 'decabill', +}, +authentication: { + type: 'users', + disableSignup: false, +}, +``` + +Production uses `environment.decabill.production.ts`. Align `authentication.type` with backend `AUTHENTICATION_METHOD`. + +### Docker image + +**Image**: `ghcr.io/forepath/decabill-billing-console-server:latest` + +Build locally: + +```bash +nx run decabill-frontend-billing-console:container-image +``` + +Compose file: `apps/decabill/frontend-billing-console/docker-compose.yaml` + +## NgRx State Slices + +The route providers register facades and reducers for: + +- `subscriptions`, `subscriptionServerInfo`, `servicePlans`, `serviceTypes` +- `invoices`, `customerProfile`, `backorders`, `availability` +- `adminBilling`, `adminInvoiceManager`, `adminCustomerProfiles` +- `billingDashboardSocket` (WebSocket lifecycle and status payloads) + +Effects call the billing manager HTTP client and socket service; see `billing-console.routes.ts` for the full effect list. + +## Development Commands + +```bash +# Dev server (port 4500) +nx serve decabill-frontend-billing-console + +# Production build (localized) +nx build decabill-frontend-billing-console + +# SSR server after build +nx run decabill-frontend-billing-console:serve-server + +# Unit tests +nx test decabill-frontend-billing-console +``` + +## Docker Compose + +```bash +cd apps/decabill/frontend-billing-console +docker compose up -d +``` + +Ensure `CSP_CONNECT_SRC_EXTRA` includes the browser-reachable billing manager origin (for example `http://host.docker.internal:3200` on Docker Desktop). + +## Related Documentation + +- **[Backend Billing Manager](./backend-billing-manager.md)** - API and WebSocket endpoints +- **[Authentication](../features/authentication.md)** - Login methods +- **[Dashboard and Server Control](../features/dashboard-and-server-control.md)** - Overview behavior +- **[Real-time Status](../features/real-time-status.md)** - WebSocket events +- **[Getting Started](../getting-started.md)** - Local setup +- **[Docker Deployment](../deployment/docker-deployment.md)** - Container deployment + +--- + +_For HTTP request schemas, see **[API Reference](../api-reference/README.md)**._ diff --git a/docs/decabill/architecture/README.md b/docs/decabill/architecture/README.md new file mode 100644 index 000000000..59532d480 --- /dev/null +++ b/docs/decabill/architecture/README.md @@ -0,0 +1,138 @@ +# Architecture Documentation + +This section covers the architectural principles, patterns, and structural decisions that guide the Decabill billing product. Understanding these concepts helps you deploy, integrate, and operate subscriptions, invoicing, and optional infrastructure provisioning. + +## Overview + +Decabill follows a **two-tier architecture** that separates customer and admin UI from billing backend services: + +- **Frontend Billing Console** for self-service and administration +- **Backend Billing Manager** for HTTP API, background jobs, payments, and provisioning + +The stack is built on: + +- **Domain-driven modules** in `@forepath/decabill/backend` and `@forepath/decabill/frontend` +- **RESTful HTTP APIs** for synchronous billing operations +- **Socket.IO** for dashboard server status streaming +- **PostgreSQL** for persistent billing and identity data +- **Redis and BullMQ** for schedulers, workers, and repeatable jobs +- **Stripe** (and optional dynamic payment plugins) for checkout and webhooks + +## Documentation Structure + +### [System Overview](./system-overview.md) + +High-level architecture and component relationships: + +- Two-tier console and manager layout +- Communication patterns between browser, API, and data stores +- Visual architecture diagrams + +### [Components](./components.md) + +Detailed breakdown of runtime components: + +- Frontend billing console (Angular SSR and Express) +- Backend billing manager (NestJS, queue roles, gateways) +- PostgreSQL, Redis, Stripe, and external cloud providers + +### [Data Flow](./data-flow.md) + +Communication patterns and end-to-end flows: + +- HTTP REST for CRUD, checkout initiation, and admin operations +- WebSocket dashboard status polling +- Stripe redirect and webhook reconciliation +- Subscription provisioning and backorder retry + +## Key Architectural Concepts + +### Two-Tier Architecture + +1. **Presentation tier** - Angular billing console with NgRx state, localized SSR, and Express static hosting +2. **Application tier** - NestJS billing manager with TypeORM, BullMQ workers, and provider integrations + +There is no separate billing controller. The console talks directly to the billing manager API and WebSocket gateway. + +### Queue Process Roles + +The billing manager binary runs in one of four **QUEUE_ROLE** modes: + +| Role | HTTP API | Migrations | Repeatable schedulers | BullMQ workers | Bull Board | +| ----------- | -------- | ---------- | --------------------- | -------------- | ---------------- | +| `api` | Yes | Yes | No | No | Optional | +| `worker` | No | No | No | Yes | No | +| `scheduler` | No | No | Yes | No | No | +| `all` | Yes | Yes | Yes | Yes | Optional (local) | + +Production Docker Compose splits `api`, `worker`, and `scheduler` into separate containers sharing one image (`decabill-billing-api`). + +### Authentication and Multi-Tenancy + +- HTTP and WebSocket accept JWT (users), Keycloak tokens, or static API key depending on `AUTHENTICATION_METHOD` +- Optional `X-Tenant` header scopes data per tenant (`TENANTS` allowlist) +- Dashboard WebSocket requires an end-user billing identity (API key alone is insufficient) + +See **[Authentication](../features/authentication.md)** and **[Multi-tenancy](../features/multi-tenancy.md)**. + +### State Management + +- **Frontend** - NgRx facades and effects for subscriptions, invoices, admin billing, and dashboard socket state +- **Backend** - PostgreSQL as source of truth; Redis for job queues; in-memory socket subscription timers for dashboard polling + +## Related Documentation + +### Getting Started + +- **[Getting Started](../getting-started.md)** - Local setup and first login + +### Features + +- **[Subscriptions](../features/subscriptions.md)** - Order and lifecycle +- **[Invoices](../features/invoices.md)** - Open positions, PDFs, and payment +- **[Payment Processing](../features/payment-processing.md)** - Stripe checkout and webhooks +- **[Server Provisioning](../features/server-provisioning.md)** - Cloud-init stacks for eligible plans +- **[Real-time Status](../features/real-time-status.md)** - Dashboard WebSocket behavior + +### Deployment + +- **[Local Development](../deployment/local-development.md)** - Nx and compose setup +- **[Docker Deployment](../deployment/docker-deployment.md)** - Container images and services +- **[Background Jobs](../deployment/background-jobs.md)** - BullMQ coordinators and units +- **[Environment Configuration](../deployment/environment-configuration.md)** - Full env reference + +### Applications + +- **[Frontend Billing Console](../applications/frontend-billing-console.md)** +- **[Backend Billing Manager](../applications/backend-billing-manager.md)** + +## Architecture Principles + +### Scalability + +- Horizontally scale **worker** containers for job throughput +- Run a single **scheduler** per Redis namespace to register repeatable coordinators +- Scale **api** containers behind a load balancer; WebSocket port may require sticky sessions or a dedicated gateway + +### Maintainability + +- Feature logic lives in `libs/domains/decabill/backend/feature-billing-manager` and frontend libraries consumed by the apps +- OpenAPI and AsyncAPI specs are the contract for HTTP and dashboard socket events + +### Security + +- Server-side validation on all billing inputs +- Encryption at rest for sensitive subscription and backorder snapshots (`ENCRYPTION_KEY`) +- Rate limiting and CORS on HTTP; CSP on the SSR console + +See **[Security](../security/README.md)** for compliance-oriented documentation. + +### Reliability + +- Coordinator and unit job pattern prevents duplicate heavy work across tenants +- Backorder retry and subscription billing schedulers recover from transient provider failures +- Stripe webhooks are handled idempotently with tenant metadata + +--- + +_For API contracts, see **[API Reference](../api-reference/README.md)**._ diff --git a/docs/decabill/architecture/components.md b/docs/decabill/architecture/components.md new file mode 100644 index 000000000..0433716d3 --- /dev/null +++ b/docs/decabill/architecture/components.md @@ -0,0 +1,191 @@ +# Components + +This document describes the major runtime components in Decabill, their responsibilities, dependencies, and default ports. + +## Backend Billing Manager + +**Location**: `apps/decabill/backend-billing-manager` + +**Purpose**: NestJS application hosting the billing HTTP API, dashboard WebSocket gateway, TypeORM persistence, BullMQ integration, Stripe payments, and cloud provisioning. + +**Docker image**: `ghcr.io/forepath/decabill-billing-api:latest` + +**Library implementation**: `libs/domains/decabill/backend/feature-billing-manager` (imported as `BillingManagerModule` and related providers) + +### Key responsibilities + +- REST controllers for subscriptions, invoices, service catalog, customer profile, admin billing, and public offerings +- Socket.IO **billing** namespace for dashboard server status +- TypeORM entities and migrations (billing tables plus identity migrations bundled at startup) +- BullMQ queue **`billing`** with coordinator and unit jobs (see job registry in the app) +- Stripe checkout session creation and webhook endpoint processing +- Provider integrations (Hetzner Cloud, DigitalOcean) for availability checks and provisioning +- Invoice PDF generation (ZUGFeRD-style HTML template) and filesystem storage +- Optional dynamic payment processor and billing UI metadata plugins + +### Dependencies + +- PostgreSQL 16 (primary data store) +- Redis 7 (BullMQ backing store) +- SMTP or Mailhog (transactional email) +- Stripe API (when payment processing is enabled) +- Cloud provider API tokens (when plans include infrastructure) + +### Ports and endpoints + +| Surface | Default | Notes | +| ---------- | --------------- | -------------------------------------------- | +| HTTP API | **3200** | Global prefix `/api` | +| WebSocket | **8082** | Namespace `/billing` (`WEBSOCKET_NAMESPACE`) | +| Bull Board | `/admin/queues` | Optional on API or `all` role | + +### Queue roles (same image, different `QUEUE_ROLE`) + +- **`api`** - Serves HTTP and WebSocket; runs migrations; may expose Bull Board +- **`worker`** - Consumes BullMQ unit jobs (billing, expiration, reminders, backorder retry, SSH updates, bill-now units) +- **`scheduler`** - Registers repeatable coordinator jobs on startup +- **`all`** - Combines all roles for local development + +**Documentation**: [Backend Billing Manager Application](../applications/backend-billing-manager.md) + +## Frontend Billing Console + +**Location**: `apps/decabill/frontend-billing-console` + +**Purpose**: Angular application with localized builds and an Express SSR server for production hosting. + +**Docker image**: `ghcr.io/forepath/decabill-billing-console-server:latest` + +**Feature library**: `libs/domains/decabill/frontend/feature-billing-console` + +**Data access**: `libs/domains/decabill/frontend/data-access-billing-console` (NgRx) + +### Key responsibilities + +- Routed UI for dashboard, subscriptions, invoices, and admin catalog or billing pages +- Identity auth UI from `@forepath/identity/frontend` (login, register, users) +- HTTP client to billing manager REST API with tenant and auth interceptors +- Socket.IO client connecting to `WEBSOCKET_URL` (default `http://localhost:8082/billing`) +- Cookie consent, Bootstrap layout, and ApexCharts where used in admin views + +### Dependencies + +- Billing manager HTTP and WebSocket endpoints (configured at build or runtime) +- Identity configuration aligned with backend `AUTHENTICATION_METHOD` + +### Ports + +| Mode | Default | Notes | +| -------------------- | -------- | ----------------------------------- | +| `nx serve` | **4500** | Angular dev server | +| Express SSR / Docker | **4500** | Serves `browser/{locale}` bundles | +| `serve-static` | **4500** | File server for built SPA (non-SSR) | + +**Documentation**: [Frontend Billing Console Application](../applications/frontend-billing-console.md) + +## PostgreSQL + +**Role**: System of record for tenants, users (identity), subscriptions, subscription items, invoices, open positions, backorders, service catalog, customer billing profiles, and audit-oriented admin data. + +**Compose service**: `postgres` in `apps/decabill/backend-billing-manager/docker-compose.yaml` + +**Notable concerns**: + +- Migrations run when `QUEUE_ROLE` is `api` or `all` +- Tenant scoping via `tenant_id` columns on billing entities +- Encrypted columns for provider config snapshots and SSH private keys when `ENCRYPTION_KEY` is set + +## Redis + +**Role**: BullMQ connection, job metadata, and repeatable coordinator schedules. + +**Compose service**: `redis` with AOF persistence + +**Configuration**: + +- `REDIS_HOST`, `REDIS_PORT`, `REDIS_PASSWORD`, `REDIS_DB` +- `REDIS_KEY_PREFIX` (default `decabill-billing`) isolates keys when sharing a Redis instance +- Host port **6380** maps to container **6379** in the default compose file to avoid clashing with other stacks + +## Stripe + +**Role**: Default payment processor for invoice checkout. + +**Integration points**: + +- `STRIPE_SECRET_KEY` for server-side Checkout Session creation +- `STRIPE_WEBHOOK_SECRET` for signed webhook verification +- `STRIPE_CHECKOUT_SUCCESS_URL` and `STRIPE_CHECKOUT_CANCEL_URL` (overridable per tenant via `TENANT_FRONTEND_URLS`) +- Customer ids stored on billing profiles after first payment + +**Alternatives**: Additional processors may load via `DYNAMIC_PAYMENT_PROCESSORS`. See **[Dynamic Provider Plugins](../features/dynamic-provider-plugins.md)**. + +## Mailhog (Local Only) + +**Role**: Captures outbound SMTP from the billing manager during local compose runs. + +**Ports** (default compose): SMTP **1026**, UI **8026** + +Replace with production SMTP settings (`SMTP_*`, `EMAIL_FROM`) in real deployments. + +## Cloud Providers + +Built-in provisioning providers: + +- **Hetzner Cloud** (`HETZNER_API_TOKEN`) +- **DigitalOcean** (`DIGITALOCEAN_API_TOKEN`) + +Used for availability checks, server creation, DNS (Cloudflare optional), and subscription item server info snapshots. Provisioned stacks may include Docker Compose bundles deployed via cloud-init. See **[Server Provisioning](../features/server-provisioning.md)**. + +## Component Dependencies + +```mermaid +graph TB + subgraph "Frontend" + APP[frontend-billing-console] + FEAT[feature-billing-console] + DATA[data-access-billing-console] + end + + subgraph "Backend" + API[backend-billing-manager] + LIB[feature-billing-manager] + end + + subgraph "Infrastructure" + PG[(PostgreSQL)] + RD[(Redis)] + ST[Stripe] + end + + APP --> FEAT + APP --> DATA + FEAT --> DATA + API --> LIB + DATA -.->|HTTP + WS| API + API --> PG + API --> RD + API --> ST +``` + +## External Dependencies + +| Dependency | Purpose | +| ---------------------------------- | -------------------------- | +| [NestJS](https://docs.nestjs.com/) | Backend framework | +| [Angular](https://angular.dev/) | Console UI | +| [Socket.IO](https://socket.io/) | Dashboard status transport | +| [BullMQ](https://docs.bullmq.io/) | Background jobs | +| [Stripe](https://stripe.com/docs) | Payments | +| [TypeORM](https://typeorm.io/) | Database access | + +## Related Documentation + +- **[System Overview](./system-overview.md)** - Architecture summary +- **[Data Flow](./data-flow.md)** - Request and event flows +- **[Background Jobs](../deployment/background-jobs.md)** - Queue job catalog +- **[API Reference](../api-reference/README.md)** - HTTP and WebSocket contracts + +--- + +_For deployment topology, see **[Docker Deployment](../deployment/docker-deployment.md)**._ diff --git a/docs/decabill/architecture/data-flow.md b/docs/decabill/architecture/data-flow.md new file mode 100644 index 000000000..6868af413 --- /dev/null +++ b/docs/decabill/architecture/data-flow.md @@ -0,0 +1,256 @@ +# Data Flow + +This document describes communication patterns and end-to-end data flows across the Decabill billing console and billing manager. + +## HTTP REST API Flow + +### Authenticated read (example: list subscriptions) + +```mermaid +sequenceDiagram + participant B as Browser + participant C as Billing Console + participant A as Billing Manager API + participant DB as PostgreSQL + + B->>C: Navigate to /subscriptions + C->>A: GET /api/subscriptions (Bearer JWT, X-Tenant) + A->>A: Validate auth and tenant + A->>DB: Query subscriptions for user + DB-->>A: Rows + A-->>C: JSON array + C->>C: NgRx loadSubscriptionsSuccess + C-->>B: Render plans list +``` + +Admin routes under `/api/admin/billing/*` follow the same pattern with role checks. API key auth bypasses user identity but grants admin REST access when configured. + +### Subscription order with availability check + +```mermaid +sequenceDiagram + participant U as User + participant C as Billing Console + participant A as Billing Manager API + participant P as Cloud Provider API + participant DB as PostgreSQL + + U->>C: Select plan and submit order + C->>A: POST /api/availability/check + A->>P: Provider capacity query + P-->>A: Available / unavailable + A-->>C: Availability result + alt Available + C->>A: POST /api/subscriptions + A->>DB: Create subscription and items + A->>P: Provision server (if plan requires) + P-->>A: Server reference + A->>DB: Update item status and snapshot + A-->>C: Subscription created + else Unavailable with autoBackorder + C->>A: POST /api/subscriptions (autoBackorder) + A->>DB: Create backorder row + A-->>C: Backorder queued + end + C-->>U: Confirmation or backorder message +``` + +See **[Subscriptions](../features/subscriptions.md)** and **[Backorders](../features/backorders.md)**. + +## WebSocket Dashboard Flow + +The overview page connects to the billing namespace and subscribes to periodic server status for provisioned subscription items owned by the logged-in user. + +```mermaid +sequenceDiagram + participant C as Billing Console + participant W as Status Gateway :8082/billing + participant S as Domain Services + participant DB as PostgreSQL + participant H as Provisioned Host + + C->>W: Connect (auth handshake, X-Tenant) + W->>W: Validate JWT / Keycloak user + C->>W: subscribeDashboardStatus + loop Each poll interval + W->>S: Resolve user subscriptions + S->>DB: Load active items + S->>H: SSH or provider status (as configured) + H-->>S: Running / stopped / metrics + S-->>W: Server info DTOs + W-->>C: dashboardStatusUpdate (unicast) + end + C->>W: unsubscribeDashboardStatus (on leave) +``` + +Poll interval is clamped between 10s and 120s. Default server interval comes from `STATUS_POLL_INTERVAL` (15000 ms). + +REST fallback: `GET /api/subscriptions/.../server-info` when WebSocket is disabled or unavailable. See **[Dashboard and Server Control](../features/dashboard-and-server-control.md)**. + +## Stripe Redirect and Webhook Flow + +Checkout is initiated over HTTP. Payment state is finalized asynchronously via Stripe webhooks. + +```mermaid +sequenceDiagram + participant U as User + participant C as Billing Console + participant A as Billing Manager API + participant ST as Stripe + participant DB as PostgreSQL + + U->>C: Pay invoice + C->>A: POST /api/invoices/{id}/pay + A->>DB: Load invoice and profile + A->>ST: Create Checkout Session + ST-->>A: session.url + A-->>C: Redirect URL + C->>ST: Browser redirect to Checkout + U->>ST: Complete or cancel payment + ST->>U: Redirect to success or cancel URL + Note over ST,A: Async webhook + ST->>A: POST /api/stripe/webhook (signed) + A->>A: Verify signature and tenant metadata + A->>DB: Mark invoice paid / record failure + U->>C: Land on /invoices?payment=success + C->>A: GET /api/invoices (refresh) + A-->>C: Updated payment state +``` + +Tenant-specific return URLs resolve from `TENANT_FRONTEND_URLS` or `BILLING_FRONTEND_URL`. See **[Payment Processing](../features/payment-processing.md)** and **[Invoices](../features/invoices.md)**. + +## Open Position and Billing Day Flow + +Recurring charges accumulate as open positions until the user's billing day scheduler creates a consolidated invoice. + +```mermaid +sequenceDiagram + participant SCH as Scheduler role + participant Q as BullMQ billing queue + participant W as Worker role + participant DB as PostgreSQL + + SCH->>Q: Enqueue subscription-billing.coordinator (repeatable) + Q->>W: coordinator job + W->>DB: Find due subscription billing work + W->>Q: Enqueue subscription-billing.unit per item + Q->>W: unit jobs + W->>DB: Create open position rows + + SCH->>Q: Enqueue open-position-invoice.coordinator + Q->>W: coordinator + W->>DB: Users whose billing day is today + W->>Q: open-position-invoice.unit per user + Q->>W: unit + W->>DB: Create invoice from open positions + W->>DB: Generate PDF metadata +``` + +Admin **bill-now** follows a similar coordinator and unit pattern outside the normal schedule. See **[Billing Administration](../features/billing-administration.md)**. + +## Server Provisioning Flow + +When a service plan includes infrastructure, the manager provisions a cloud server and records connection details on the subscription item. + +```mermaid +sequenceDiagram + participant A as Billing Manager + participant P as Cloud Provider + participant S as New Server + participant DNS as Cloudflare (optional) + participant DB as PostgreSQL + + A->>P: Create server with cloud-init + P->>S: Boot instance + S->>S: cloud-init installs Docker stack + S->>S: Start postgres, API, console behind nginx + P-->>A: Server id and IP + A->>DNS: Create A record (when configured) + A->>DB: Store server info snapshot on item + A->>DB: Reserve hostname if applicable +``` + +Later, the **subscription-item-update** scheduler SSHes to the host and runs `docker compose up -d --pull=always` to refresh bundled stacks. See **[Server Provisioning](../features/server-provisioning.md)**. + +## Backorder Retry Flow + +```mermaid +sequenceDiagram + participant SCH as Scheduler + participant W as Worker + participant A as Billing Manager + participant P as Provider + participant DB as PostgreSQL + + SCH->>W: backorder-retry.coordinator + W->>DB: Load pending or retrying backorders + loop Each backorder + W->>A: Retry availability and order logic + A->>P: Capacity check + alt Capacity available + A->>DB: Promote to subscription + else Still unavailable + A->>DB: Increment retry, keep queued + end + end +``` + +Users may also trigger manual retry or cancel from the console when exposed in UI effects. + +## Admin Manual Invoice Flow + +```mermaid +sequenceDiagram + participant Admin as Admin User + participant C as Billing Console + participant A as Billing Manager API + participant DB as PostgreSQL + + Admin->>C: Create draft manual invoice + C->>A: POST /api/admin/billing/invoices + A->>DB: Insert draft + Admin->>C: Edit lines and issue + C->>A: POST .../issue + A->>DB: Finalize invoice, PDF path + A-->>C: Issued invoice +``` + +Void, mark paid, and mark unpaid operations update invoice state without Stripe when paid offline. See **[Billing Administration](../features/billing-administration.md)**. + +## Multi-Tenant Request Flow + +Every HTTP and WebSocket call carries tenant context: + +1. Client sends `X-Tenant` (HTTP header or socket auth metadata) +2. API validates against `TENANTS` allowlist +3. Services scope queries with `tenant_id` +4. Stripe webhooks recover tenant id from Checkout Session metadata + +See **[Multi-tenancy](../features/multi-tenancy.md)**. + +## State Management Flow (NgRx) + +```mermaid +graph TB + A[Component action] --> B[Facade] + B --> C[Effect] + C --> D[Billing HTTP or Socket service] + D --> E[Success or failure action] + E --> F[Reducer] + F --> G[Store] + G --> H[Selector] + H --> I[Component template] +``` + +Dashboard socket effects (`connectBillingDashboardSocket$`, `billingDashboardSocketApplicationErrorFallback$`) bridge Socket.IO events into the `billingDashboardSocket` slice used by the overview page. + +## Related Documentation + +- **[System Overview](./system-overview.md)** - Tier architecture +- **[Components](./components.md)** - Runtime components +- **[Real-time Status](../features/real-time-status.md)** - WebSocket contract details +- **[API Reference](../api-reference/README.md)** - OpenAPI and AsyncAPI specs + +--- + +_For queue job names and intervals, see **[Background Jobs](../deployment/background-jobs.md)**._ diff --git a/docs/decabill/architecture/system-overview.md b/docs/decabill/architecture/system-overview.md new file mode 100644 index 000000000..7924b85de --- /dev/null +++ b/docs/decabill/architecture/system-overview.md @@ -0,0 +1,160 @@ +# System Overview + +This document provides a high-level overview of the Decabill system architecture, component relationships, and communication patterns. + +## Two-Tier Architecture + +Decabill separates the billing console from the billing manager. All product logic for subscriptions, invoices, payments, and provisioning runs in the manager. The console renders UI, holds client state, and calls the manager over HTTP and WebSocket. + +```mermaid +graph TB + subgraph "Presentation Tier" + FE[Frontend Billing Console
Angular + NgRx + Express SSR] + end + + subgraph "Application Tier" + BM[Backend Billing Manager
NestJS API + Socket.IO] + PG[(PostgreSQL)] + RD[(Redis / BullMQ)] + ST[Stripe] + CP[Cloud Providers
Hetzner / DigitalOcean] + end + + FE -->|HTTP REST /api| BM + FE -->|WebSocket /billing| BM + BM --> PG + BM --> RD + BM --> ST + BM --> CP +``` + +### Tier Responsibilities + +#### Presentation Tier (Frontend Billing Console) + +- Customer and admin UI for dashboard, plans, invoices, and administration +- Identity routes (login, register, password reset, user management) +- NgRx data access and effects for billing API calls +- Socket.IO client for live server status on the overview dashboard +- Express SSR server for localized static assets, CSP, and runtime config + +#### Application Tier (Backend Billing Manager) + +- HTTP REST API under `/api` (OpenAPI documented) +- WebSocket gateway on port **8082**, namespace **`billing`** +- PostgreSQL persistence with TypeORM migrations on API startup +- BullMQ schedulers and workers for billing cycles, reminders, backorders, and provisioning updates +- Stripe checkout session creation and webhook handling +- Optional cloud server provisioning via provider APIs and cloud-init + +## Component Relationships + +```mermaid +graph LR + subgraph "Billing Console" + UI[Feature Components] + NGX[NgRx Store] + HTTP[HTTP Client] + WS[Socket.IO Client] + end + + subgraph "Billing Manager" + CTRL[REST Controllers] + SVC[Domain Services] + GW[Status Gateway] + Q[Queue Processors] + REPO[TypeORM Repositories] + end + + UI --> NGX + NGX --> HTTP + NGX --> WS + HTTP --> CTRL + WS --> GW + CTRL --> SVC + GW --> SVC + SVC --> REPO + SVC --> Q + Q --> REPO +``` + +## Communication Patterns + +### HTTP REST API + +The console and external integrators call the billing manager synchronously for CRUD, checkout initiation, availability checks, and admin operations. All authenticated routes expect a bearer token, Keycloak token, or API key depending on deployment configuration. Tenant scope travels in the `X-Tenant` header. + +Typical namespaces in the API include: + +- Public plan offerings (unauthenticated marketing endpoints) +- Service types and service plans (admin catalog) +- Subscriptions, backorders, and customer profile +- Invoices, open positions, and payment initiation +- Admin billing, manual invoices, statistics, and audit + +See **[API Reference](../api-reference/README.md)**. + +### WebSocket Dashboard Status + +The billing manager exposes a Socket.IO namespace separate from the HTTP port. Authenticated users subscribe with `subscribeDashboardStatus`. The server polls provisioned subscription items on an interval and emits `dashboardStatusUpdate` events scoped to the connecting socket only. + +Static API key clients cannot use this stream because there is no end-user subscription scope. See **[Real-time Status](../features/real-time-status.md)**. + +### Background Processing + +Repeatable coordinator jobs enqueue unit jobs on the **`billing`** BullMQ queue. Workers process subscription billing, expiration, invoice overdue marking, open-position invoicing, renewal reminders, subscription item updates (SSH/docker compose pull), backorder retries, and admin bill-now operations. + +Schedulers register coordinators; workers execute units; the API process serves HTTP and optionally Bull Board. + +## Deployment Topology + +### Local Development + +A single process with `QUEUE_ROLE=all` or Docker Compose with three manager containers plus Postgres, Redis, and Mailhog. + +### Production + +- One or more **api** replicas behind TLS termination +- Dedicated **worker** replicas sized for job volume +- A single **scheduler** replica per Redis key prefix +- Managed PostgreSQL and Redis +- SSR billing console container (`decabill-billing-console-server`) with CSP connect-src allowing the public API origin + +```mermaid +graph TB + U[Users / Browsers] + CDN[TLS / Reverse Proxy] + CON[decabill-billing-console-server] + API[decabill-billing-api api role] + W1[decabill-billing-api worker] + SCH[decabill-billing-api scheduler] + PG[(PostgreSQL)] + RD[(Redis)] + + U --> CDN + CDN --> CON + CDN --> API + CON -->|API + WS| API + API --> PG + API --> RD + W1 --> PG + W1 --> RD + SCH --> RD +``` + +## Data Boundaries + +- **Tenant isolation** - Rows carry `tenant_id`; requests with invalid or missing tenant ids are rejected when not allowed +- **User scope** - Customers see their subscriptions and invoices; admins access `/admin/billing/*` routes and administration UI +- **Provider secrets** - Cloud API tokens and SSH keys are stored encrypted; Stripe secrets remain server-side only + +## Related Documentation + +- **[Components](./components.md)** - Detailed component breakdown +- **[Data Flow](./data-flow.md)** - Sequence diagrams for major flows +- **[Applications](../applications/README.md)** - Per-application reference +- **[Getting Started](../getting-started.md)** - Run the stack locally + +--- + +_For environment variables and ports, see **[Environment Configuration](../deployment/environment-configuration.md)**._ diff --git a/docs/decabill/deployment/README.md b/docs/decabill/deployment/README.md new file mode 100644 index 000000000..3edf504a8 --- /dev/null +++ b/docs/decabill/deployment/README.md @@ -0,0 +1,133 @@ +# Deployment Documentation + +This section provides deployment guides and configuration information for Decabill. + +## Overview + +Decabill can be deployed in several ways: + +- **Local Development** - For development and testing on your machine +- **Docker Deployment** - Containerized deployment using Docker Compose +- **Production Deployment** - Production-ready deployment with security and performance considerations + +## Deployment Guides + +### [Local Development](./local-development.md) + +Setting up Decabill for local development: + +- Prerequisites and installation +- Local database and Redis setup +- Running the billing manager and frontends locally +- Development workflow and testing + +### [Docker Deployment](./docker-deployment.md) + +Containerized deployment using Docker: + +- Docker Compose setup for billing manager, billing console, and docs +- Container configuration and image hardening +- Volume management for invoice PDFs and provider plugins +- Network configuration and multi-container orchestration + +### [Environment Configuration](./environment-configuration.md) + +Complete environment variables reference: + +- Billing manager multi-tenancy +- Stripe and payment processor configuration +- Frontend Express variables for billing console and docs +- Redis and BullMQ queue settings + +### [Production Checklist](./production-checklist.md) + +Production deployment guide: + +- Pre-deployment checklist +- Security considerations +- Performance optimization +- Monitoring and backup strategies + +### [Background Jobs](./background-jobs.md) + +BullMQ background processing for the billing manager: + +- Queue roles (API, scheduler, worker) +- Job registry and coordinator schedules +- Redis host port 6380 and Bull Board on port 3200 + +## Deployment Architecture + +```mermaid +graph TB + subgraph "Frontend" + BC[Billing Console
Angular SSR + Express] + DOCS[Docs
Angular SSR + Express] + end + + subgraph "Backend" + BM[Billing Manager
NestJS API] + SCH[Scheduler] + WRK[Worker] + end + + subgraph "Data" + DB[(PostgreSQL)] + RD[(Redis)] + end + + subgraph "External" + STRIPE[Stripe] + CLOUD[Cloud Providers
Hetzner / DigitalOcean] + end + + BC -->|HTTP REST + WebSocket| BM + DOCS -->|Static / SSR| BC + BM --> DB + BM --> RD + SCH --> RD + WRK --> RD + WRK --> DB + BM --> STRIPE + WRK --> CLOUD +``` + +## Quick Start + +### Docker Compose (Recommended) + +```bash +# Billing manager (API, worker, scheduler, Postgres, Redis, Mailhog) +cd apps/decabill/backend-billing-manager +docker compose up -d + +# Billing console frontend +cd ../frontend-billing-console +docker compose up -d + +# Docs frontend (optional) +cd ../frontend-docs +docker compose up -d +``` + +### Local Development + +```bash +# Install dependencies (repository root) +npm install + +# Start billing manager +nx serve decabill-backend-billing-manager + +# Start billing console +nx serve decabill-frontend-billing-console +``` + +## Related Documentation + +- **[Security](../security/README.md)** - Accepted risks, hardening, SBOM, and disclosure +- **[Troubleshooting](../troubleshooting/README.md)** - Common issues and debugging + +--- + +_For detailed deployment information, see the individual deployment guides._ diff --git a/docs/decabill/deployment/background-jobs.md b/docs/decabill/deployment/background-jobs.md new file mode 100644 index 000000000..f7f941f92 --- /dev/null +++ b/docs/decabill/deployment/background-jobs.md @@ -0,0 +1,125 @@ +# Background Jobs (BullMQ) + +Background work for **backend billing manager** runs through **Redis + BullMQ** instead of in-process `setInterval` loops in the API container. + +## Architecture + +| Role | `QUEUE_ROLE` | HTTP API | Registers repeatable coordinators | Processes unit jobs | +| ------------------------------------ | ------------ | -------- | --------------------------------- | ------------------- | +| API (default in compose API service) | `api` | Yes | No | No | +| Scheduler | `scheduler` | No | Yes | No | +| Worker | `worker` | No | No | Yes | +| Local all-in-one | `all` | Yes | Yes | Yes | + +The billing stack has its own **Redis** service in Docker Compose. Workers and schedulers use the **same environment variables** as the API (database, Stripe, scheduler intervals, provisioning tokens, etc.). **Database migrations** run only on containers with `QUEUE_ROLE=api` or `QUEUE_ROLE=all`. + +### Startup order + +1. Start **Redis** and **Postgres** (and Mailhog or production SMTP). +2. Start the **API** container (`QUEUE_ROLE=api`) and wait until it is healthy so migrations have run. +3. Start **scheduler** and **worker** containers (`depends_on` with `service_healthy` on the API service in the provided compose file). + +Workers and schedulers assume the API has already applied schema migrations. Running workers before the API in a fresh environment can cause query errors until migrations complete. + +## Job Registry + +Job registration (queue names, repeatable intervals, job names) lives in: + +`apps/decabill/backend-billing-manager/src/queue/job-registry.ts` + +### Queue + +- **Queue name:** `billing` (`BILLING_QUEUE_NAME`) + +### Coordinator jobs (repeatable) + +Registered by the scheduler from `getBillingRepeatableJobs()`: + +| Coordinator job name | Env interval variable | Default interval | +| -------------------------------------- | ------------------------------------------ | ---------------- | +| `subscription-billing.coordinator` | `BILLING_SCHEDULER_INTERVAL` | 60s | +| `subscription-expiration.coordinator` | `EXPIRATION_SCHEDULER_INTERVAL` | 60s | +| `invoice-overdue.coordinator` | `INVOICE_OVERDUE_SCHEDULER_INTERVAL` | 24h | +| `open-position-invoice.coordinator` | `OPEN_POSITION_INVOICE_SCHEDULER_INTERVAL` | 24h | +| `renewal-reminder.coordinator` | `REMINDER_SCHEDULER_INTERVAL` | 1h | +| `subscription-item-update.coordinator` | `SUBSCRIPTION_UPDATE_SCHEDULER_INTERVAL` | 24h | +| `backorder-retry.coordinator` | `BACKORDER_RETRY_INTERVAL_MS` | 60s | + +Coordinator job IDs use dot separators (for example `coordinator.subscription-billing`) via `buildCoordinatorJobId`. + +### Unit jobs (worker-processed) + +Coordinators fan out unit jobs such as: + +- `subscription-billing.unit` +- `subscription-expiration.unit` +- `invoice-overdue.unit` +- `open-position-invoice.unit` +- `renewal-reminder.unit` +- `subscription-item-update.unit` +- `backorder-retry.unit` +- Admin bill-now coordinator and unit jobs (`AdminBillNowJobName`) + +BullMQ `jobId` values prevent duplicate active work for the same entity. Custom job IDs use `.` separators and only allowed characters (alphanumeric, `.`, `-`, `_`, `~`). + +## Redis and Queue Environment Variables + +| Variable | Purpose | Default (local compose) | +| --------------------------- | --------------------------------------- | ------------------------- | +| `REDIS_HOST` | Redis hostname | `redis` in compose | +| `REDIS_PORT` | Redis port inside network | `6379` | +| `REDIS_HOST_PORT` | Host port mapping in compose | `6380` | +| `REDIS_PASSWORD` | Optional password | empty | +| `REDIS_DB` | Redis database index | `0` | +| `REDIS_KEY_PREFIX` | Key namespace | `decabill-billing` | +| `QUEUE_ROLE` | `api`, `scheduler`, `worker`, or `all` | `api` in API container | +| `QUEUE_WORKER_CONCURRENCY` | Default worker concurrency | `5` | +| `QUEUE_BULL_BOARD_ENABLED` | Mount Bull Board UI on API / `all` only | `true` on API in compose | +| `QUEUE_BULL_BOARD_PATH` | Bull Board route | `/admin/queues` | +| `QUEUE_BULL_BOARD_USERNAME` | HTTP Basic username | `admin` | +| `QUEUE_BULL_BOARD_PASSWORD` | HTTP Basic password (required) | `bullmq` in local compose | + +Scheduler interval variables (`BILLING_SCHEDULER_INTERVAL`, `EXPIRATION_SCHEDULER_INTERVAL`, etc.) control **coordinator repeat** intervals in BullMQ. + +## Docker Compose + +`apps/decabill/backend-billing-manager/docker-compose.yaml` defines: + +- `redis` (host port **6380** by default) +- `backend-billing-manager` (API, `QUEUE_ROLE=api`, ports **3200** and **8082**) +- `backend-billing-manager-scheduler` (`QUEUE_ROLE=scheduler`) +- `backend-billing-manager-worker` (`QUEUE_ROLE=worker`) + +Billing Redis is published on host port **6380** so it can run alongside other Redis instances on **6379**. + +## Bull Board + +When enabled on the API container (`QUEUE_BULL_BOARD_ENABLED=true`, default in local compose): + +- URL: **`http://localhost:3200/admin/queues`** (billing API port **3200**) +- Path is **not** under the Nest global `/api` prefix +- HTTP Basic authentication: `QUEUE_BULL_BOARD_USERNAME` / `QUEUE_BULL_BOARD_PASSWORD` +- Local compose defaults: `admin` / `bullmq`; override in production + +Startup fails in production if the board is enabled without a password. + +Completed and failed jobs are **not auto-removed** (`removeOnComplete: false`, `removeOnFail: false`) so run history remains visible. Treat the **last three runs** and **48 hours** as minimum retention before manual cleanup. + +Bull Board routes bypass the API origin allowlist and HybridAuthGuard so dashboard actions (retry, delete, clean) work with browser Basic auth. + +Worker and scheduler containers set `QUEUE_BULL_BOARD_ENABLED=false` so they do not start an HTTP server solely for Bull Board. + +## Tenant Context in Jobs + +Unit jobs resolve `tenant_id` from job payload data so multi-tenant billing runs stay scoped. See `resolve-billing-job-tenant-id.ts` in the billing manager queue module. + +## Related Documentation + +- **[Environment Configuration](./environment-configuration.md)** - Redis and scheduler variables +- **[Local Development](./local-development.md)** - `QUEUE_ROLE=all` locally +- **[Docker Deployment](./docker-deployment.md)** - Compose services +- **[Multi-tenancy](../features/multi-tenancy.md)** - `X-Tenant` and `TENANTS` + +--- + +_For production queue hardening, see [Production Checklist](./production-checklist.md)._ diff --git a/docs/decabill/deployment/docker-deployment.md b/docs/decabill/deployment/docker-deployment.md new file mode 100644 index 000000000..fad057cbf --- /dev/null +++ b/docs/decabill/deployment/docker-deployment.md @@ -0,0 +1,183 @@ +# Docker Deployment + +Containerized deployment guide for Decabill using Docker and Docker Compose. + +## Overview + +Docker deployment provides: + +- Isolated environments for billing API, workers, and frontends +- Consistent dependencies (Postgres, Redis, Mailhog) +- Repeatable production-like stacks on developer machines + +## Prerequisites + +- Docker 20.10 or higher +- Docker Compose 2.0 or higher + +## Docker Compose Setup + +### Backend Billing Manager + +```bash +cd apps/decabill/backend-billing-manager +docker compose up -d +``` + +The `docker-compose.yaml` includes: + +- **postgres** - PostgreSQL 16 +- **redis** - Redis 7 with persistence; host port **6380** maps to container **6379** +- **backend-billing-manager** - API (`QUEUE_ROLE=api`, port **3200**, WebSocket **8082**) +- **backend-billing-manager-scheduler** - Coordinator registration (`QUEUE_ROLE=scheduler`) +- **backend-billing-manager-worker** - Job processing (`QUEUE_ROLE=worker`) +- **mailhog** - Local SMTP capture for invoice and reminder emails + +Volumes: + +- `postgres_data` - Database files +- `redis_data` - Redis AOF data +- `invoice_pdf_data` - Invoice PDF storage at `/data/invoices` +- `./provider-plugins` - Optional dynamic provider plugins mount + +Image: `ghcr.io/forepath/decabill-billing-api:latest` + +### Frontend Billing Console + +```bash +cd apps/decabill/frontend-billing-console +docker compose up -d +``` + +Image: `ghcr.io/forepath/decabill-billing-console-server:latest` + +Default port **4500**. Compose sets `CSP_CONNECT_SRC_EXTRA=http://host.docker.internal:3200` so the browser can reach the billing API from the containerized console. + +### Frontend Docs + +```bash +cd apps/decabill/frontend-docs +docker compose up -d +``` + +Image: `ghcr.io/forepath/decabill-docs-server:latest` + +Default port **4200**. + +## Container Configuration + +### Environment Variables + +Configure billing manager containers via `.env` or `docker-compose.yaml`. The shared anchor `x-backend-billing-manager-environment` lists all supported variables. See **[Environment Configuration](./environment-configuration.md)**. + +Example API service snippet: + +```yaml +services: + backend-billing-manager: + environment: + - DB_HOST=postgres + - REDIS_HOST=redis + - STATIC_API_KEY=your-api-key + - CORS_ORIGIN=https://billing.example.com + - QUEUE_ROLE=api + - QUEUE_BULL_BOARD_ENABLED=true + - QUEUE_BULL_BOARD_PASSWORD=strong-password +``` + +### Frontend Container Configuration + +Frontend server images support runtime configuration via the `CONFIG` environment variable: + +```yaml +services: + frontend-billing-console-server: + environment: + - CONFIG=https://config.example.com/decabill-billing-config.json + - CONFIG_ALLOWED_HOSTS=config.example.com + - CSP_ENFORCE=true + - CSP_CONNECT_SRC_EXTRA=https://api.billing.example.com + - PORT=4500 +``` + +When `CONFIG` is set, the frontend server also supports hardening variables documented in **[Environment Configuration](./environment-configuration.md)** (`CONFIG_ALLOWED_HOSTS`, `CONFIG_FETCH_TIMEOUT_MS`, and related settings). + +Billing console and docs Express servers support CSP variables: + +- `CSP_ENFORCE` - Enforce CSP when `true`; otherwise report-only +- `CSP_CONNECT_SRC_EXTRA` - Extra `connect-src` origins (required in production for plain HTTP APIs) +- `CSP_SCRIPT_SRC_EXTRA`, `CSP_STYLE_SRC_EXTRA`, `CSP_IMG_SRC_EXTRA`, `CSP_FONT_SRC_EXTRA`, `CSP_WORKER_SRC_EXTRA` +- `CSP_FRAME_ANCESTORS` - Optional full override for `frame-ancestors` + +## Building Containers + +```bash +# Billing API image +nx docker:api decabill-backend-billing-manager + +# Billing console server image +nx docker:server decabill-frontend-billing-console + +# Docs server image +nx docker:server decabill-frontend-docs +``` + +## Container Security (Images) + +First-party Decabill images follow a common hardening baseline: + +- **Non-root**: Billing API runs as `agenstra` (UID/GID **10001** by default). Frontend server images run as `node` (**1000**). +- **Secrets at runtime**: Database, Stripe, encryption keys, and API keys are supplied at deploy time, not baked into images. +- **No Docker socket**: The billing manager does not mount `/var/run/docker.sock` (unlike agent orchestration stacks). + +See **[Container image security](../security/container-images.md)**. + +## Running Containers + +### Using Docker Compose + +```bash +docker compose up -d +docker compose logs -f +docker compose down +docker compose down -v # removes volumes +``` + +### Startup Order (Billing Manager) + +1. Postgres and Redis become healthy +2. API container (`QUEUE_ROLE=api`) starts and runs migrations +3. Worker and scheduler start after API health check passes + +Workers and schedulers assume schema migrations have already been applied. + +## Health Checks + +The billing API image health check calls `http://localhost:3200/api/health`. Compose `depends_on` with `service_healthy` enforces ordering for worker and scheduler services. + +## Bull Board + +On the API container with `QUEUE_BULL_BOARD_ENABLED=true`: + +- URL: `http://localhost:3200/admin/queues` (not under `/api`) +- HTTP Basic auth: `QUEUE_BULL_BOARD_USERNAME` / `QUEUE_BULL_BOARD_PASSWORD` + +See **[Background Jobs](./background-jobs.md)**. + +## Logging + +```bash +docker compose logs -f backend-billing-manager +docker compose logs --tail=100 backend-billing-manager-worker +``` + +## Related Documentation + +- **[Local Development](./local-development.md)** - Local setup +- **[Production Checklist](./production-checklist.md)** - Production deployment +- **[Environment Configuration](./environment-configuration.md)** - Environment variables +- **[Background Jobs](./background-jobs.md)** - Queue roles and Redis + +--- + +_For production deployment, see the [Production Checklist](./production-checklist.md)._ diff --git a/docs/decabill/deployment/environment-configuration.md b/docs/decabill/deployment/environment-configuration.md new file mode 100644 index 000000000..7e9b1577d --- /dev/null +++ b/docs/decabill/deployment/environment-configuration.md @@ -0,0 +1,235 @@ +# Environment Configuration + +Complete reference for environment variables used in Decabill. + +## Backend Billing Manager + +### Application Configuration + +| Variable | Description | Default | +| ----------------------- | ---------------------------------------- | -------------- | +| `HOST` | HTTP bind address | `0.0.0.0` | +| `PORT` | HTTP API port | `3200` | +| `WEBSOCKET_PORT` | WebSocket gateway port | `8082` | +| `WEBSOCKET_NAMESPACE` | Socket.IO namespace | `billing` | +| `WEBSOCKET_CORS_ORIGIN` | WebSocket CORS origins (comma-separated) | `*` in compose | +| `NODE_ENV` | `development` or `production` | `development` | + +### Database Configuration + +| Variable | Description | Default | +| ------------- | ----------------- | ----------- | +| `DB_HOST` | Database host | `localhost` | +| `DB_PORT` | Database port | `5432` | +| `DB_USERNAME` | Database username | `postgres` | +| `DB_PASSWORD` | Database password | `postgres` | +| `DB_DATABASE` | Database name | `postgres` | + +### Authentication + +| Variable | Description | +| -------------------------- | ---------------------------------------------------------------------------- | +| `AUTHENTICATION_METHOD` | Explicit: `api-key`, `keycloak`, or `users`. If unset, inferred (see DR-004) | +| `STATIC_API_KEY` | Static API key when using api-key mode | +| `STATIC_API_KEY_TENANT_ID` | Optional tenant bind for API key auth (see DR-002) | +| `DISABLE_SIGNUP` | When `true`, disables self-registration for users mode | +| `JWT_SECRET` | Required for users mode | +| `KEYCLOAK_*` | Keycloak URL, realm, client id/secret, token validation | + +### Multi-tenancy + +Billing data and users are partitioned by **`tenant_id`**. HTTP clients send **`X-Tenant`**; the billing console attaches it via `environment.billing.tenantId` (defaults to `default`). + +| Variable | Description | +| -------------------------- | -------------------------------------------------------------------------------------------------------------- | +| `TENANTS` | Comma-separated tenant ids allowed for **`X-Tenant`** (always includes `default`). Unset means only `default`. | +| `STATIC_API_KEY_TENANT_ID` | When set with **`STATIC_API_KEY`**, API key requests are accepted only when **`X-Tenant`** matches. | +| `BILLING_FRONTEND_URL` | Billing console base URL for the `default` tenant (Stripe return redirects). | +| `TENANT_FRONTEND_URLS` | Per-tenant console URLs: `tenantId=https://…` pairs, comma-separated. | + +**API key scope (accepted risk [DR-002](../security/accepted-risks.md#dr-002--billing-multi-tenant-api-key-scope-static_api_key_tenant_id-unset)):** With **`STATIC_API_KEY`** and **without** **`STATIC_API_KEY_TENANT_ID`**, one deployment key grants **admin access to every tenant** in **`TENANTS`**, selected per request via **`X-Tenant`**. Set **`STATIC_API_KEY_TENANT_ID`** to bind the key to one tenant, or use **keycloak** / **users** for interactive multi-tenant console access. + +### CORS and Rate Limiting + +| Variable | Description | +| -------------------- | ------------------------------------------------------------------- | +| `CORS_ORIGIN` | Allowed CORS origins (comma-separated). **Required in production.** | +| `RATE_LIMIT_ENABLED` | Enable rate limiting (default `true` in production) | +| `RATE_LIMIT_TTL` | Window in seconds (default `60`) | +| `RATE_LIMIT_LIMIT` | Max requests per window (default `100`) | + +### Encryption and Issuer Details + +| Variable | Description | +| ---------------------------------- | ------------------------------------------------------ | +| `ENCRYPTION_KEY` | Encrypts sensitive stored data (API tokens, snapshots) | +| `BILLING_ISSUER_*` | Legal entity on invoices (name, VAT, address, bank) | +| `BILLING_TAX_RATE_STANDARD` | Default standard tax rate (default `19`) | +| `BILLING_TAX_RATE_REDUCED` | Reduced tax rate (default `7`) | +| `BILLING_INVOICE_PDF_STORAGE_PATH` | PDF output path (default `/data/invoices`) | +| `BILLING_SKIP_FILE_CACHE` | Skip PDF file cache when `true` | + +### Stripe and Payment Processors + +| Variable | Description | +| ----------------------------------- | ------------------------------------------------------- | +| `BILLING_DEFAULT_PAYMENT_PROCESSOR` | Default processor (default `stripe`) | +| `STRIPE_SECRET_KEY` | Stripe secret API key | +| `STRIPE_WEBHOOK_SECRET` | Stripe webhook signing secret | +| `STRIPE_CHECKOUT_SUCCESS_URL` | Redirect after successful checkout | +| `STRIPE_CHECKOUT_CANCEL_URL` | Redirect after cancelled checkout | +| `DYNAMIC_PAYMENT_PROCESSORS` | Comma-separated extra payment processor packages | +| `DYNAMIC_BILLING_PROVIDER_METADATA` | Extra billing provider metadata packages | +| `DYNAMIC_PROVIDERS_FAIL_FAST` | Abort startup if critical dynamic provider fails | +| `DYNAMIC_PROVIDER_PLUGIN_PATH` | Plugin root (e.g. `/var/lib/forepath/provider-plugins`) | +| `DYNAMIC_PROVIDER_PLUGIN_INSTALL` | `npm install` targets at container startup | + +### Email (SMTP) + +| Variable | Description | Local default | +| --------------- | ---------------- | ------------------- | +| `SMTP_HOST` | SMTP server host | `mailhog` | +| `SMTP_PORT` | SMTP port | `1025` | +| `SMTP_USER` | SMTP username | empty | +| `SMTP_PASSWORD` | SMTP password | empty | +| `EMAIL_FROM` | From address | `noreply@localhost` | + +### Provisioning and DNS + +| Variable | Description | +| ------------------------ | ------------------------------------- | +| `HETZNER_API_TOKEN` | Hetzner Cloud API token | +| `DIGITALOCEAN_API_TOKEN` | DigitalOcean API token | +| `CLOUDFLARE_API_TOKEN` | Cloudflare API token | +| `CLOUDFLARE_ZONE_ID` | Cloudflare zone for DNS records | +| `DNS_BASE_DOMAIN` | Base domain for provisioned hostnames | + +Provisioning SSH posture is documented under accepted risk **[DR-001](../security/accepted-risks.md#dr-001--provisioning-ssh-cloud-init-templates)**. + +### Scheduler Intervals (BullMQ Coordinators) + +These variables control repeatable **coordinator** intervals in milliseconds: + +| Variable | Default | Purpose | +| ------------------------------------------ | ---------- | -------------------------------- | +| `BILLING_SCHEDULER_INTERVAL` | `60000` | Subscription billing coordinator | +| `BILLING_SCHEDULER_BATCH_SIZE` | `100` | Batch size for billing runs | +| `EXPIRATION_SCHEDULER_INTERVAL` | `60000` | Subscription expiration | +| `EXPIRATION_SCHEDULER_BATCH_SIZE` | `100` | Expiration batch size | +| `REMINDER_SCHEDULER_INTERVAL` | `3600000` | Renewal reminders | +| `REMINDER_SCHEDULER_BATCH_SIZE` | `100` | Reminder batch size | +| `REMINDER_DAYS` | `3` | Days before renewal to remind | +| `BACKORDER_RETRY_INTERVAL_MS` | `60000` | Backorder retry coordinator | +| `BACKORDER_RETRY_BATCH_SIZE` | `100` | Backorder batch size | +| `INVOICE_OVERDUE_SCHEDULER_INTERVAL` | `86400000` | Invoice overdue coordinator | +| `INVOICE_OVERDUE_SCHEDULER_BATCH_SIZE` | `100` | Overdue batch size | +| `OPEN_POSITION_INVOICE_SCHEDULER_INTERVAL` | `86400000` | Open position invoicing | +| `SUBSCRIPTION_UPDATE_SCHEDULER_INTERVAL` | `86400000` | Subscription item updates | +| `STATUS_POLL_INTERVAL` | `15000` | Dashboard status polling | + +See **[Background Jobs](./background-jobs.md)** for queue roles and job names. + +## Frontend Applications (Express SSR) + +**decabill-frontend-billing-console** and **decabill-frontend-docs** use the shared Express layer for `GET /config` and security headers. + +### Runtime Configuration (`CONFIG`) + +| Variable | Description | +| ---------------------------- | -------------------------------------------------------------------------------- | +| `CONFIG` | URL to remote JSON merged at runtime via `/config` | +| `CONFIG_ALLOWED_HOSTS` | Hostname allowlist for `CONFIG`. **Required in production** when `CONFIG` is set | +| `CONFIG_ALLOW_INSECURE_HTTP` | Allow `http://` CONFIG URLs in production when `true` (default `false`) | +| `CONFIG_ALLOW_INTERNAL_HOST` | Allow private/loopback CONFIG targets when `true` (default `false`) | +| `CONFIG_FETCH_TIMEOUT_MS` | Fetch timeout (default `10000`) | +| `CONFIG_FETCH_MAX_BYTES` | Max response size (default `262144`) | +| `CONFIG_JSON_MAX_DEPTH` | Max JSON depth (default `12`) | +| `CONFIG_JSON_MAX_KEYS` | Max JSON keys (default `512`) | + +### Content Security Policy (Express) + +| Variable | Description | +| ----------------------- | ------------------------------------------------------------------------- | +| `CSP_ENFORCE` | Enforcing CSP when `true`; report-only otherwise (see DR-003) | +| `CSP_CONNECT_SRC_EXTRA` | Extra `connect-src` origins (billing console often needs billing API URL) | +| `CSP_SCRIPT_SRC_EXTRA` | Extra `script-src` origins | +| `CSP_STYLE_SRC_EXTRA` | Extra `style-src` origins | +| `CSP_IMG_SRC_EXTRA` | Extra `img-src` origins | +| `CSP_FONT_SRC_EXTRA` | Extra `font-src` origins | +| `CSP_WORKER_SRC_EXTRA` | Extra `worker-src` origins | +| `CSP_DEFAULT_SRC_EXTRA` | Extra `default-src` origins | +| `CSP_BASE_URI_EXTRA` | Extra `base-uri` origins | +| `CSP_FRAME_ANCESTORS` | Full override for `frame-ancestors` | + +Default `connect-src` allows `'self'`, `https:`, and `wss:`. In production, plain `http:` / `ws:` require explicit origins via `CSP_CONNECT_SRC_EXTRA`. + +Billing console compose default: `CSP_CONNECT_SRC_EXTRA=http://host.docker.internal:3200`. + +### Billing Console Server + +| Variable | Description | Default | +| ---------------- | ------------------------ | ---------------------- | +| `PORT` | HTTP port | `4500` (console image) | +| `HOST` | Bind address | `0.0.0.0` | +| `DEFAULT_LOCALE` | Default locale | `en` | +| `API_URL` | Build-time API URL | See app config | +| `WEBSOCKET_URL` | Build-time WebSocket URL | See app config | + +### Docs Server + +| Variable | Description | Default | +| ---------------- | -------------- | ----------------- | +| `PORT` | HTTP port | `4200` | +| `HOST` | Bind address | `0.0.0.0` | +| `DEFAULT_LOCALE` | Default locale | `en` | +| `CSP_ENFORCE` | Enforce CSP | `true` in compose | + +## Redis and BullMQ (Background Jobs) + +Used by **backend billing manager only**. See **[Background Jobs](./background-jobs.md)**. + +| Variable | Description | Default | +| --------------------------- | -------------------------------------- | ------------------------------------- | +| `REDIS_HOST` | Redis host | `localhost` (compose: `redis`) | +| `REDIS_PORT` | Redis port inside container/network | `6379` | +| `REDIS_HOST_PORT` | Host port published by compose | `6380` | +| `REDIS_PASSWORD` | Optional password | empty | +| `REDIS_DB` | Redis DB index | `0` | +| `REDIS_KEY_PREFIX` | Key prefix | `decabill-billing` | +| `QUEUE_ROLE` | `api`, `scheduler`, `worker`, or `all` | `all` locally; `api` in API container | +| `QUEUE_WORKER_CONCURRENCY` | Worker concurrency | `5` | +| `QUEUE_BULL_BOARD_ENABLED` | Enable Bull Board on API / `all` | `true` in dev API compose | +| `QUEUE_BULL_BOARD_PATH` | Bull Board path | `/admin/queues` | +| `QUEUE_BULL_BOARD_USERNAME` | Bull Board HTTP Basic user | `admin` | +| `QUEUE_BULL_BOARD_PASSWORD` | Bull Board HTTP Basic password | required in production | + +## Environment-Specific Defaults + +### Development + +- `NODE_ENV=development` +- `CORS_ORIGIN=*` (all origins allowed) +- `RATE_LIMIT_ENABLED=false` +- `QUEUE_ROLE=all` for single-process local runs + +### Production + +- `NODE_ENV=production` +- `CORS_ORIGIN` **required** +- `RATE_LIMIT_ENABLED=true` +- `ENCRYPTION_KEY` **required** for encrypted fields +- Strong `STATIC_API_KEY` or Keycloak/users auth +- `QUEUE_BULL_BOARD_PASSWORD` **required** when Bull Board is enabled +- `CONFIG_ALLOWED_HOSTS` when `CONFIG` is set on frontends + +## Related Documentation + +- **[Local Development](./local-development.md)** - Local setup +- **[Docker Deployment](./docker-deployment.md)** - Containerized deployment +- **[Production Checklist](./production-checklist.md)** - Production deployment +- **[Background Jobs](./background-jobs.md)** - BullMQ roles and coordinators +- **[Accepted risks](../security/accepted-risks.md)** - DR-001, DR-002, DR-003, DR-004 + +--- + +_For feature-specific details, see [Features](../features/README.md)._ diff --git a/docs/decabill/deployment/local-development.md b/docs/decabill/deployment/local-development.md new file mode 100644 index 000000000..88fe51e4d --- /dev/null +++ b/docs/decabill/deployment/local-development.md @@ -0,0 +1,235 @@ +# Local Development + +Setting up Decabill for local development and testing. + +## Prerequisites + +Before you begin, ensure you have: + +- **Node.js** 24.14.1 or higher +- **PostgreSQL** (running locally or in Docker) +- **Redis** (running locally or in Docker; billing compose uses host port **6380** by default) +- **Git** (optional, for repository checkout) +- **Keycloak** (optional; API key or users authentication work for local dev) + +## Installation + +### Clone Repository + +```bash +git clone https://github.com/forepath/one.git +cd one +``` + +### Install Dependencies + +```bash +npm install +``` + +## Database and Redis Setup + +### Using Docker (Recommended) + +```bash +# PostgreSQL for billing manager +docker run -d \ + --name decabill-postgres \ + -e POSTGRES_USER=postgres \ + -e POSTGRES_PASSWORD=postgres \ + -e POSTGRES_DB=postgres \ + -p 5432:5432 \ + postgres:16-alpine + +# Redis for BullMQ (host port 6380 to avoid clashing with other stacks) +docker run -d \ + --name decabill-redis \ + -p 6380:6379 \ + redis:7-alpine +``` + +### Using the Billing Manager Compose Stack + +The billing manager `docker-compose.yaml` starts Postgres, Redis (published on **6380**), Mailhog, API, worker, and scheduler together. Copy the example env file and adjust: + +```bash +cd apps/decabill/backend-billing-manager +cp .start-containers.env.example .env +docker compose up -d +``` + +## Configuration + +### Backend Billing Manager + +Create a `.env` file in `apps/decabill/backend-billing-manager` (or use `.start-containers.env.example` as a template): + +```bash +# Database +DB_HOST=localhost +DB_PORT=5432 +DB_USERNAME=postgres +DB_PASSWORD=postgres +DB_DATABASE=postgres + +# Redis (when not using compose network) +REDIS_HOST=localhost +REDIS_PORT=6380 +REDIS_KEY_PREFIX=decabill-billing + +# Queue (local all-in-one) +QUEUE_ROLE=all +QUEUE_BULL_BOARD_ENABLED=true +QUEUE_BULL_BOARD_PASSWORD=bullmq + +# Authentication (choose one) +AUTHENTICATION_METHOD=api-key +STATIC_API_KEY=dev-api-key-123 +# Optional: bind API key to one tenant (see accepted risk DR-002) +# STATIC_API_KEY_TENANT_ID=default + +# Ports +PORT=3200 +WEBSOCKET_PORT=8082 + +# Multi-tenancy +TENANTS=default +BILLING_FRONTEND_URL=http://localhost:4500 + +# CORS (for development) +CORS_ORIGIN=* + +# Rate limiting (disabled for development) +RATE_LIMIT_ENABLED=false + +# Encryption (required for production; set for local if testing encrypted fields) +ENCRYPTION_KEY= + +# Stripe (optional for local payment flows) +STRIPE_SECRET_KEY= +STRIPE_WEBHOOK_SECRET= +STRIPE_CHECKOUT_SUCCESS_URL=http://localhost:4500/invoices?payment=success +STRIPE_CHECKOUT_CANCEL_URL=http://localhost:4500/invoices?payment=cancel + +# Provisioning (optional) +HETZNER_API_TOKEN= +DIGITALOCEAN_API_TOKEN= +``` + +See **[Environment Configuration](./environment-configuration.md)** for the full variable list. + +### Frontend Billing Console + +The billing console reads API URLs from build-time environment and optional runtime `CONFIG`. For local `nx serve`, configure in `apps/decabill/frontend-billing-console` or see **[Getting Started](../getting-started.md)**. + +Typical local values: + +```bash +API_URL=http://localhost:3200 +WEBSOCKET_URL=http://localhost:8082 +``` + +Express server variables (when running the SSR server locally): + +```bash +PORT=4500 +CSP_ENFORCE=false +CSP_CONNECT_SRC_EXTRA=http://localhost:3200 +``` + +### Frontend Docs + +```bash +PORT=4200 +CSP_ENFORCE=false +``` + +## Running Applications + +### Start Backend + +```bash +# Terminal 1: Billing manager (QUEUE_ROLE=all for local jobs) +cd apps/decabill/backend-billing-manager +nx serve decabill-backend-billing-manager +``` + +### Start Frontends + +```bash +# Terminal 2: Billing console +cd apps/decabill/frontend-billing-console +nx serve decabill-frontend-billing-console + +# Terminal 3: Docs (optional) +cd apps/decabill/frontend-docs +nx serve decabill-frontend-docs +``` + +## Development Workflow + +### Making Changes + +1. Make code changes +2. Applications auto-reload (hot reload where configured) +3. Test in the browser +4. Run tests: `nx test ` + +### Running Tests + +```bash +# Billing manager +nx test decabill-backend-billing-manager + +# Billing console +nx test decabill-frontend-billing-console + +# Run with coverage +nx test decabill-backend-billing-manager --coverage +``` + +### Building + +```bash +nx build decabill-backend-billing-manager +nx build decabill-frontend-billing-console +nx build decabill-frontend-docs +``` + +## Bull Board (Local) + +When `QUEUE_ROLE=all` or `api` with `QUEUE_BULL_BOARD_ENABLED=true`: + +- URL: `http://localhost:3200/admin/queues` +- Default credentials: `admin` / `bullmq` (override via env) + +See **[Background Jobs](./background-jobs.md)**. + +## Troubleshooting + +### Database Connection Issues + +- Verify PostgreSQL is running: `docker ps` or `pg_isready` +- Check credentials in `.env` +- Ensure migrations ran (API container with `QUEUE_ROLE=api` or `all`) + +### Redis Connection Issues + +- Confirm Redis is reachable on the configured host and port (**6380** on host when using compose defaults) +- Check `REDIS_HOST` and `REDIS_PORT` + +### Port Conflicts + +- Billing API: **3200**, WebSocket: **8082**, console: **4500**, docs: **4200**, Redis host port: **6380** +- Change ports in `.env` if needed: `lsof -i :3200` + +## Related Documentation + +- **[Docker Deployment](./docker-deployment.md)** - Containerized deployment +- **[Production Checklist](./production-checklist.md)** - Production deployment +- **[Environment Configuration](./environment-configuration.md)** - Environment variables +- **[Common Issues](../troubleshooting/common-issues.md)** - Problem solving + +--- + +_For production deployment, see the [Production Checklist](./production-checklist.md)._ diff --git a/docs/decabill/deployment/production-checklist.md b/docs/decabill/deployment/production-checklist.md new file mode 100644 index 000000000..f47b448f5 --- /dev/null +++ b/docs/decabill/deployment/production-checklist.md @@ -0,0 +1,184 @@ +# Production Deployment Checklist + +Comprehensive checklist for deploying Decabill to production. + +## Pre-Deployment Checklist + +### Environment Configuration + +- [ ] `NODE_ENV=production` on all applications +- [ ] `CORS_ORIGIN` configured with production billing console and API origins +- [ ] `RATE_LIMIT_ENABLED=true` (or leave unset; defaults to `true` in production) +- [ ] `RATE_LIMIT_LIMIT` appropriate for expected traffic +- [ ] `STATIC_API_KEY` or Keycloak/users credentials configured securely +- [ ] `ENCRYPTION_KEY` set to a strong random value (required for encrypted subscription data) +- [ ] Database credentials are not defaults +- [ ] `TENANTS` lists only intended tenant ids +- [ ] `STATIC_API_KEY_TENANT_ID` set if API key must not span tenants (see **[DR-002](../security/accepted-risks.md#dr-002--billing-multi-tenant-api-key-scope-static_api_key_tenant_id-unset)**) +- [ ] `BILLING_FRONTEND_URL` and `TENANT_FRONTEND_URLS` match live console URLs +- [ ] Stripe keys and webhook secret configured for production mode +- [ ] `STRIPE_CHECKOUT_SUCCESS_URL` and `STRIPE_CHECKOUT_CANCEL_URL` use HTTPS console URLs + +### Redis and Background Jobs + +- [ ] Redis reachable from API, worker, and scheduler with correct `REDIS_KEY_PREFIX` +- [ ] `QUEUE_ROLE=api` on API container only; separate worker and scheduler containers +- [ ] API container healthy before workers start (migrations applied) +- [ ] `QUEUE_BULL_BOARD_PASSWORD` set to a strong value if Bull Board is enabled +- [ ] Bull Board disabled or network-restricted in production if not needed + +### Frontend (Billing Console and Docs) + +- [ ] `CSP_ENFORCE=true` only after verifying console and docs work under enforced CSP +- [ ] `CSP_CONNECT_SRC_EXTRA` includes production billing API origin (HTTPS) +- [ ] `CONFIG_ALLOWED_HOSTS` set when using runtime `CONFIG` +- [ ] HTTPS termination configured at load balancer or ingress + +### Security + +- [ ] All default passwords changed (database, Redis if password-protected, Bull Board) +- [ ] API keys are strong and stored in a secrets manager +- [ ] HTTPS/WSS enabled for all browser and API traffic +- [ ] CORS restricted to specific origins +- [ ] Rate limiting enabled +- [ ] Database connections use SSL/TLS where supported +- [ ] Invoice PDF volume backed up and access-controlled +- [ ] Provisioning SSH and cloud API tokens restricted (see **[DR-001](../security/accepted-risks.md#dr-001--provisioning-ssh-cloud-init-templates)**) + +### Database + +- [ ] PostgreSQL configured with production credentials +- [ ] Automated backups configured and restore tested +- [ ] Connection pooling tuned for workload +- [ ] Migrations tested on staging + +### Infrastructure + +- [ ] Container images from trusted registry tags (not `latest` in production unless policy allows) +- [ ] Resource limits set on API, worker, scheduler, and Redis +- [ ] Centralized logging configured +- [ ] Health checks and uptime monitoring on `/api/health` +- [ ] Mailhog replaced with production SMTP + +## Security Considerations + +### Authentication + +- Use Keycloak or users mode for interactive multi-tenant console access in production +- Set **`AUTHENTICATION_METHOD`** explicitly if policy requires unambiguous mode selection (see **[DR-004](../security/accepted-risks.md#dr-004--backend-authentication-method-resolution)**) +- Rotate `STATIC_API_KEY` on a defined schedule if used for automation +- Never expose API keys in frontend bundles or public `CONFIG` JSON + +### Multi-Tenancy + +- Review **`TENANTS`** and **`X-Tenant`** handling before go-live +- Prefer per-tenant console URLs via `TENANT_FRONTEND_URLS` for branded tenants +- Understand shared API key scope documented in **[DR-002](../security/accepted-risks.md#dr-002--billing-multi-tenant-api-key-scope-static_api_key_tenant_id-unset)** + +### Network Security + +- Restrict ingress to required ports (console, API, WebSocket) +- Firewall Bull Board path (`/admin/queues`) to operations networks only +- Enable WAF or rate limiting at edge where appropriate + +### Data Protection + +- Encrypt sensitive fields via `ENCRYPTION_KEY` +- Protect invoice PDF storage path +- Restrict database and Redis network access to application subnets + +## Performance Optimization + +### Database + +- Index frequently queried billing tables (subscriptions, invoices, users by `tenant_id`) +- Monitor slow queries on scheduler-driven batch operations +- Size Postgres for peak invoice generation windows + +### Application + +- Run workers with `QUEUE_WORKER_CONCURRENCY` tuned to CPU and external API rate limits +- Scale worker replicas horizontally (multiple worker containers, same Redis) +- Keep scheduler as a single logical coordinator per deployment (one scheduler container) + +### Redis + +- Persist Redis with AOF or RDB per your recovery requirements +- Monitor memory usage for BullMQ job history (jobs are not auto-removed) + +## Monitoring Setup + +### Application Monitoring + +- Track API latency on billing and admin endpoints +- Monitor WebSocket connection count on billing dashboard namespace +- Alert on job failure rates in Bull Board or exported queue metrics +- Track Stripe webhook processing errors + +### Infrastructure Monitoring + +- Container CPU and memory for API, worker, scheduler +- Postgres connections and disk usage +- Redis memory and persistence health +- Invoice PDF volume disk usage + +### Logging + +- Centralize structured logs from all queue roles +- Correlate logs with `X-Correlation-Id` / `X-Request-Id` +- Do not log Stripe secrets, API keys, or full PII + +## Backup Strategies + +### Database Backups + +- Automated Postgres backups with point-in-time recovery if required +- Test restore before production cutover +- Include tenant-scoped data verification after restore + +### Invoice PDF Backups + +- Backup `BILLING_INVOICE_PDF_STORAGE_PATH` volume or object storage mirror +- Align retention with legal and tax requirements + +### Configuration Backups + +- Version control deployment manifests and non-secret config +- Store secrets in vault; document rotation procedures + +## Deployment Process + +1. **Pre-deployment** + - Run full test suite and security scans + - Review **[Accepted risks](../security/accepted-risks.md)** for operator obligations + - Validate environment on staging with production-like `TENANTS` and Stripe test mode + +2. **Deployment** + - Deploy Postgres and Redis + - Deploy API; wait for healthy `/api/health` + - Deploy scheduler and worker + - Deploy frontends + - Register Stripe webhook endpoint for production URL + +3. **Post-deployment** + - Verify health endpoints + - Create test subscription and invoice in staging tenant + - Confirm coordinator jobs appear in Bull Board + - Monitor logs for migration or Redis connection errors + +## Rollback Plan + +- Keep previous image tags available in registry +- Document database migration rollback constraints (billing migrations may be forward-only) +- Practice rollback on staging with volume snapshots + +## Related Documentation + +- **[Docker Deployment](./docker-deployment.md)** - Containerized deployment +- **[Environment Configuration](./environment-configuration.md)** - Environment variables +- **[Background Jobs](./background-jobs.md)** - Queue startup order +- **[Troubleshooting](../troubleshooting/README.md)** - Problem-solving guides + +--- + +_For detailed deployment steps, see [Docker Deployment](./docker-deployment.md)._ diff --git a/docs/decabill/features/README.md b/docs/decabill/features/README.md new file mode 100644 index 000000000..a309d9f52 --- /dev/null +++ b/docs/decabill/features/README.md @@ -0,0 +1,217 @@ +# Features Documentation + +This section provides comprehensive documentation for all features in the Decabill billing product. + +## Overview + +Decabill provides a complete set of capabilities for subscription billing, invoicing, payments, and optional infrastructure provisioning: + +- **Authentication** - Keycloak OAuth2/OIDC, built-in users with JWT, or static API key +- **Multi-tenancy** - Tenant-scoped data with `X-Tenant` header and configurable tenant frontends +- **Subscriptions** - Order, cancel, and resume service plans with optional cloud provisioning +- **Invoices** - ZUGFeRD PDFs, open positions, billing-day accumulation, and Stripe checkout +- **Service Types and Plans** - Admin-managed catalog with provider schemas and pricing +- **Billing Administration** - Manual invoices, customer profiles, KPIs, and bill-now +- **Customer Profiles** - Self-service and admin billing metadata required for ordering +- **Dashboard and Server Control** - Overview of subscriptions with start, stop, and restart actions +- **Real-time Status** - WebSocket dashboard stream for provisioned server status +- **Backorders** - Queue and retry when provider capacity is unavailable +- **Payment Processing** - Stripe checkout and webhook-driven payment state +- **Dynamic Provider Plugins** - Extend payment processors and billing UI metadata at runtime +- **Server Provisioning** - Cloud-init deployment of bundled product stacks for eligible plans + +## Features + +### [Authentication](./authentication.md) + +Multiple authentication methods with configurable user registration. Supports API key, Keycloak OAuth2/OIDC, and built-in users with JWT. + +**Key Capabilities**: + +- Static API key for automation and single-operator deployments +- Keycloak OAuth2/OIDC for enterprise SSO +- Built-in user registration with email confirmation +- Password reset with 6-character alphanumeric codes +- Admin user management and optional signup disable + +### [Multi-tenancy](./multi-tenancy.md) + +Isolate billing data per tenant while sharing one billing manager deployment. Same email can register separately in each tenant. + +**Key Capabilities**: + +- `X-Tenant` header on HTTP and WebSocket requests +- `TENANTS` environment allowlist +- Per-tenant Stripe return URLs via `TENANT_FRONTEND_URLS` +- Optional `STATIC_API_KEY_TENANT_ID` to bind API key auth to one tenant + +### [Subscriptions](./subscriptions.md) + +Order service plans, manage lifecycle (cancel, resume), and provision cloud instances when the plan includes infrastructure. + +**Key Capabilities**: + +- Subscription creation with availability checks and provider config validation +- Cancel and resume with effective dates +- Subscription items with provisioning status and hostname reservation +- Usage records for usage-based pricing + +### [Invoices](./invoices.md) + +Issue, preview, download, void, and pay invoices. Open positions accumulate until each user's billing day. + +**Key Capabilities**: + +- ZUGFeRD-style PDFs with EN 16931 XML embedded +- Open positions and billing-day scheduler +- Stripe checkout initiation and webhook reconciliation +- Admin manual invoice draft, edit, and issue workflow + +### [Service Types and Plans](./service-types-and-plans.md) + +Admin-managed catalog of service types, provisioning providers, and priced service plans. + +**Key Capabilities**: + +- Provider registry with config schemas and server type pricing +- Public unauthenticated plan offerings for marketing pages +- Customer geography selection when the provider schema supports it +- Pricing preview before order + +### [Billing Administration](./billing-administration.md) + +Admin-only features for manual invoices, customer billing profiles, operational dashboards, and bill-now. + +**Key Capabilities**: + +- Draft, edit, issue, and void manual invoices +- Customer billing profile CRUD +- Billing summary, statistics, and open or overdue invoice lists +- Bill-now to force invoice generation outside the scheduler + +### [Customer Profiles](./customer-profiles.md) + +Billing metadata required before subscription orders and for compliant invoice issuance. + +**Key Capabilities**: + +- Self-service `GET/POST /customer-profile` +- Admin CRUD under `/admin/billing/customer-profiles` +- Stripe customer ID stored on profile when payments are initiated +- Completeness validation before `POST /subscriptions` + +### [Dashboard and Server Control](./dashboard-and-server-control.md) + +Customer overview of active subscriptions with live server status and power actions. + +**Key Capabilities**: + +- Overview page with subscription cards and server info +- Start, stop, and restart provisioned servers +- REST fallback when WebSocket is not configured +- Links to invoices and subscription detail + +### [Real-time Status](./real-time-status.md) + +Socket.IO dashboard status stream for provisioned subscription items. + +**Key Capabilities**: + +- `subscribeDashboardStatus` with configurable poll interval +- User-scoped subscription selection on every tick +- JWT or Keycloak handshake auth (API key rejected) +- `dashboardStatusUpdate` events mirroring REST server-info shape + +### [Backorders](./backorders.md) + +Queue subscription requests when provider capacity is unavailable and retry automatically or on demand. + +**Key Capabilities**: + +- Automatic backorder creation when ordering with `autoBackorder` +- Scheduled retry processor for pending and retrying backorders +- Manual retry and cancel via API +- Encrypted requested config snapshot at rest + +### [Payment Processing](./payment-processing.md) + +Stripe checkout sessions and webhook-driven payment reconciliation. + +**Key Capabilities**: + +- `POST .../pay` initiates Stripe Checkout +- Tenant-aware success and cancel redirect URLs +- Idempotent Stripe webhook handling +- Default processor configurable via `BILLING_DEFAULT_PAYMENT_PROCESSOR` + +### [Dynamic Provider Plugins](./dynamic-provider-plugins.md) + +Extend billing backends with extra payment processors and billing UI provider metadata without forking the image. + +**Key Capabilities**: + +- `DYNAMIC_PAYMENT_PROCESSORS` for payment backends +- `DYNAMIC_BILLING_PROVIDER_METADATA` for admin UI registry entries +- Baked-in or post-build plugin loading via shared dynamic provider registry +- Critical registry fail-fast in production + +### [Server Provisioning](./server-provisioning.md) + +Automated cloud server provisioning via cloud-init when service plans include infrastructure. + +**Key Capabilities**: + +- Hetzner Cloud and DigitalOcean built-in providers +- Docker stack with PostgreSQL, backend API, and frontend console behind Nginx +- Let's Encrypt TLS with DNS A record creation +- SSH-based subscription item update scheduler + +## Feature Relationships + +```mermaid +graph TB + AUTH[Authentication] + MT[Multi-tenancy] + ST[Service Types and Plans] + SUB[Subscriptions] + CP[Customer Profiles] + INV[Invoices] + PP[Payment Processing] + BA[Billing Administration] + BO[Backorders] + SP[Server Provisioning] + DASH[Dashboard and Server Control] + RT[Real-time Status] + DP[Dynamic Provider Plugins] + + AUTH --> MT + MT --> SUB + MT --> INV + MT --> BA + ST --> SUB + CP --> SUB + CP --> INV + SUB --> SP + SUB --> BO + SUB --> DASH + SP --> DASH + DASH --> RT + INV --> PP + BA --> INV + BA --> CP + DP --> PP + DP --> ST + SUB --> INV +``` + +## Related Documentation + +- **[Getting Started](../getting-started.md)** - Quick start guide +- **[Architecture](../architecture/README.md)** - System architecture +- **[Applications](../applications/README.md)** - Application documentation +- **[Deployment](../deployment/README.md)** - Deployment guides +- **[API Reference](../api-reference/README.md)** - OpenAPI and AsyncAPI specifications + +--- + +_For detailed information about each feature, see the individual feature documentation pages._ diff --git a/docs/decabill/features/authentication.md b/docs/decabill/features/authentication.md new file mode 100644 index 000000000..ff8a0a749 --- /dev/null +++ b/docs/decabill/features/authentication.md @@ -0,0 +1,227 @@ +# Authentication + +Authentication system supporting multiple methods with configurable user registration for the billing console and billing manager API. + +## Overview + +Decabill supports three authentication methods: + +- **API Key Authentication** - Static API key for automation and operator scripts +- **Keycloak Authentication** - OAuth2/OIDC via Keycloak +- **Users Authentication** - Built-in user registration with JWT + +Each method is configured via environment variables on the billing manager. The billing console runtime config must match the backend method. + +## Authentication Methods + +### API Key Authentication + +Simple authentication using a static API key. Suitable for automation, CI, and single-operator deployments. + +**Configuration**: + +```bash +AUTHENTICATION_METHOD=api-key +STATIC_API_KEY=your-secure-api-key-here +``` + +When `STATIC_API_KEY` is set and `AUTHENTICATION_METHOD` is unset, the backend may infer api-key mode. See [Security - Operational hardening](../security/operational-hardening.md) for resolution behavior. + +**Features**: + +- All requests require `Authorization: Bearer ` or `Authorization: ApiKey ` header +- API key authentication grants admin rights on billing admin routes +- No interactive user identity; WebSocket dashboard status is rejected (see [Real-time Status](./real-time-status.md)) +- Combine with [Multi-tenancy](./multi-tenancy.md) and optional `STATIC_API_KEY_TENANT_ID` + +### Keycloak Authentication + +Enterprise-grade authentication using Keycloak OAuth2/OIDC. + +**Configuration**: + +```bash +AUTHENTICATION_METHOD=keycloak +KEYCLOAK_AUTH_SERVER_URL=http://localhost:8380 +KEYCLOAK_REALM=decabill +KEYCLOAK_CLIENT_ID=billing-manager +KEYCLOAK_CLIENT_SECRET=your-client-secret +``` + +**Features**: + +- OAuth2/OIDC authentication flow in the billing console +- Users are synced to the local `users` table +- First synced user gets admin role, subsequent users get user role +- Integration with existing identity providers and MFA via Keycloak +- Per-user `tenant_id` enforced by [Multi-tenancy](./multi-tenancy.md) + +### Users Authentication + +Built-in user registration and authentication with JWT tokens. + +**Configuration**: + +```bash +AUTHENTICATION_METHOD=users +JWT_SECRET=your-jwt-secret-key +DISABLE_SIGNUP=false +``` + +**Features**: + +- User registration with email and password +- Email confirmation with 6-character alphanumeric codes +- Password reset functionality +- JWT-based authentication (7-day expiry) +- First registered user gets admin role +- Admin user management (CRUD, lock, unlock) +- Optional signup disable for controlled onboarding + +## Users Authentication Flow + +### Registration + +1. User registers with email and password +2. System checks if signup is enabled (`DISABLE_SIGNUP`) +3. If signup is disabled, registration returns 503 Service Unavailable +4. If enabled, user account is created in the current tenant (from `X-Tenant`): + - First user in the tenant: auto-confirmed and assigned admin role + - Subsequent users: receive confirmation code via email + +### Email Confirmation + +1. User receives confirmation code via email +2. User submits email and code on the confirmation page +3. System validates code and confirms email +4. User can log in + +### Login + +1. User enters email and password +2. System validates credentials and tenant scope +3. System checks email confirmation and account lock state +4. JWT token is issued and stored client-side +5. Token is included in subsequent HTTP and WebSocket requests + +### Password Reset + +1. User requests password reset with email +2. System sends 6-character alphanumeric reset code via email +3. User submits email, code, and new password +4. System validates code and updates password + +## Disabling Signup + +When `DISABLE_SIGNUP=true`: + +- `POST /auth/register` returns 503 with message "Signup is disabled" +- Admin user creation via `POST /users` remains available +- Billing console hides "Create an account" and redirects `/register` to login + +Frontend runtime config should set `authentication.disableSignup` to match the backend. + +## User Roles + +### Admin Role + +- Full access to billing admin routes under `/admin/billing/*` +- User management (create, read, update, delete, lock, unlock) +- Service type and service plan administration +- Manual invoice and customer profile administration + +### User Role + +- Standard customer access: subscriptions, invoices, customer profile +- Cannot access admin routes +- Can change own password and update own profile + +## Security Features + +### Password Security + +- Passwords hashed with bcrypt +- Minimum password length enforced +- Password confirmation required on registration + +### Token Security + +- JWT tokens expire after 7 days +- Each request verifies the user still exists and is not locked +- Keycloak mode applies the same lock check against the synced local user row +- SPA HTTP interceptor dispatches logout on 401 with session-ending messages + +### Rate Limiting + +- Authentication endpoints are rate-limited +- Prevents brute force attacks + +## API Endpoints + +### Authentication Endpoints (Public) + +- `POST /auth/login` - Login with email and password +- `POST /auth/register` - Register new user (503 when signup disabled) +- `POST /auth/confirm-email` - Confirm email with code +- `POST /auth/request-password-reset` - Request password reset +- `POST /auth/reset-password` - Reset password with code +- `POST /auth/change-password` - Change password (authenticated) + +### User Management Endpoints (Admin Only) + +- `GET /users` - List users +- `POST /users` - Create user +- `GET /users/{id}` - Get user +- `POST /users/{id}` - Update user +- `DELETE /users/{id}` - Delete user +- `POST /users/{id}/lock` - Lock user account +- `POST /users/{id}/unlock` - Unlock user account + +See [Billing Manager OpenAPI](/spec/billing-manager/openapi.yaml) for request and response schemas. + +## Authentication Flow Diagram + +```mermaid +flowchart TB + subgraph AUTH["Authentication Methods"] + direction TB + AUTH_METHOD["AUTHENTICATION_METHOD env"] + AUTH_METHOD --> API_KEY["api-key"] + AUTH_METHOD --> KEYCLOAK["keycloak"] + AUTH_METHOD --> USERS["users"] + end + + subgraph API_KEY_FLOW["API Key Flow"] + API_KEY --> AK1["STATIC_API_KEY required"] + AK1 --> AK2["Authorization: Bearer or ApiKey header"] + AK2 --> AK3["Admin rights on billing admin routes"] + AK2 --> AK4["No WebSocket dashboard user stream"] + end + + subgraph KEYCLOAK_FLOW["Keycloak Flow"] + KEYCLOAK --> KC1["Keycloak OAuth2 / OIDC"] + KC1 --> KC2["User synced to users table"] + KC2 --> KC3["First user = admin, rest = user"] + KC2 --> KC4["tenant_id enforced per request"] + end + + subgraph USERS_FLOW["Users Flow"] + USERS --> UF1["JWT-based auth"] + UF1 --> UF2["Register / Login / Confirm Email"] + UF2 --> UF3["DISABLE_SIGNUP: register returns 503"] + UF2 --> UF4["First user in tenant = admin"] + UF4 --> UF5["Admin CRUD and lock/unlock"] + end +``` + +## Related Documentation + +- **[Multi-tenancy](./multi-tenancy.md)** - Tenant header and API key scope +- **[Environment Configuration](../deployment/environment-configuration.md)** - Environment variable reference +- **[Security - Accepted risks](../security/accepted-risks.md)** - Authentication and tenant scope entries +- **[Backend Billing Manager](../applications/backend-billing-manager.md)** - Backend authentication implementation +- **[Frontend Billing Console](../applications/frontend-billing-console.md)** - Frontend authentication UI + +--- + +_For detailed API specifications, see [Billing Manager OpenAPI](/spec/billing-manager/openapi.yaml)._ diff --git a/docs/decabill/features/backorders.md b/docs/decabill/features/backorders.md new file mode 100644 index 000000000..cd27d4d2f --- /dev/null +++ b/docs/decabill/features/backorders.md @@ -0,0 +1,96 @@ +# Backorders + +Queue subscription requests when cloud provider capacity is unavailable and retry automatically or on demand. + +## Overview + +When a user orders a plan with provisioning and capacity is unavailable (or provisioning fails with backorder enabled), Decabill creates a **backorder** record. A background processor and manual retry API attempt fulfillment when capacity returns. + +Requested configuration is stored as an encrypted snapshot at rest (AES-256-GCM). + +## Backorder Statuses + +| Status | Description | +| ----------- | ------------------------------------- | +| `pending` | Waiting for retry | +| `retrying` | Last attempt failed; will retry later | +| `fulfilled` | Successfully provisioned | +| `canceled` | User or operator canceled | + +## Creating Backorders + +### At Subscription Order + +Pass `autoBackorder: true` on `POST /subscriptions`: + +- If availability check fails, a backorder is created instead of failing silently +- If provisioning throws after subscription item creation, a backorder captures the failure with `providerErrors` + +Without `autoBackorder`, unavailable capacity returns an error to the client. + +### Snapshot Contents + +Each backorder stores: + +- `userId`, `serviceTypeId`, `planId` +- `requestedConfigSnapshot` (encrypted) +- `providerErrors` and optional `failureReason` +- `preferredAlternatives` when suggested by availability service +- `retryAfter` for scheduled backoff + +## Retry Processing + +A scheduled job processes pending and retrying backorders: + +```mermaid +sequenceDiagram + participant Job as Backorder Retry Job + participant BO as BackorderService + participant Avail as AvailabilityService + participant Prov as ProvisioningService + participant DB as PostgreSQL + + Job->>DB: SELECT pending/retrying backorders + loop Each backorder + Job->>BO: retry(backorderId) + BO->>Avail: checkAvailability + alt Available + BO->>DB: CREATE subscription + item + BO->>Prov: provision + BO->>DB: UPDATE backorder fulfilled + else Not available + BO->>DB: UPDATE status retrying + end + end +``` + +Fulfillment follows the same hostname reservation, provisioning, and DNS A record steps as immediate orders. See [Server Provisioning](./server-provisioning.md). + +## User API + +| Method | Path | Purpose | +| ------ | ------------------------- | ---------------------- | +| GET | `/backorders` | List user's backorders | +| POST | `/backorders/{id}/retry` | Manual retry | +| POST | `/backorders/{id}/cancel` | Cancel backorder | + +Manual retry runs the same availability and provisioning path as the scheduler. + +## Customer Geography on Retry + +When the original plan allowed customer location selection, the encrypted snapshot preserves geography overrides. Retry merges the snapshot with current plan defaults before provisioning. + +## UI + +The billing console lists backorders on the customer subscriptions flow with status, plan name, and retry or cancel actions where permitted. + +## Related Documentation + +- **[Subscriptions](./subscriptions.md)** - Order flow and `autoBackorder` +- **[Service Types and Plans](./service-types-and-plans.md)** - Availability endpoints +- **[Server Provisioning](./server-provisioning.md)** - Provisioning on fulfillment +- **[Billing Manager OpenAPI](/spec/billing-manager/openapi.yaml)** - Backorder schemas + +--- + +_Backorders prevent lost orders during provider capacity shortages and automate fulfillment when resources become available._ diff --git a/docs/decabill/features/billing-administration.md b/docs/decabill/features/billing-administration.md new file mode 100644 index 000000000..fde2c9366 --- /dev/null +++ b/docs/decabill/features/billing-administration.md @@ -0,0 +1,107 @@ +# Billing Administration + +Admin-only features in the billing console for manual invoice management, customer billing profile CRUD, operational dashboards, and bill-now. + +See also: [API Reference](../api-reference/README.md) for the published OpenAPI and AsyncAPI specifications. + +## Access Control + +All endpoints under `/admin/billing/*` require admin role (`@KeycloakRoles(ADMIN)` + `@UsersRoles(ADMIN)`). Frontend routes use `authGuard` + `billingAdminGuard`. + +**Multi-tenancy:** Admin and user routes are scoped by **`X-Tenant`** and the user's **`tenant_id`**. API key auth with **`STATIC_API_KEY`** and without **`STATIC_API_KEY_TENANT_ID`** can administer **all** configured tenants (accepted risk **[DR-002](../security/accepted-risks.md#dr-002--billing-multi-tenant-api-key-scope-static_api_key_tenant_id-unset)**). + +## Billing Dashboard + +**Frontend route:** `/administration/billing` + +Split layout with dashboard cards and charts on the left, invoice list on the right. + +### KPIs and Statistics + +| Method | Path | Purpose | +| ------ | -------------------------------------- | ---------------------------- | +| GET | `/admin/billing/summary` | High-level billing summary | +| GET | `/admin/billing/statistics/summary` | Aggregated statistics | +| GET | `/admin/billing/statistics/by-product` | Breakdown by product or plan | + +### Invoice Lists + +| Method | Path | Purpose | +| ------ | -------------------------------------- | ------------------------- | +| GET | `/admin/billing/invoices` | Paginated invoice list | +| GET | `/admin/billing/invoices/open-overdue` | Open and overdue invoices | + +The invoice list supports batch loading with client-side search in list-group style. + +### Bill Now + +`POST /admin/billing/bill-now` triggers immediate invoice generation for selected users, bypassing the billing-day scheduler when operators need on-demand billing. + +## Manual Invoice Administration + +**Immutability:** Only invoices in `draft` status can be edited or deleted. Once issued (`issued`, `paid`, `partially_paid`, `overdue`, or `void`), line items and amounts are immutable. Admins can still void unpaid issued invoices or mark payment status manually. + +**Workflow:** + +1. `POST /admin/billing/invoices/manual` - Create draft with user, optional subscription, custom line items +2. `POST /admin/billing/invoices/{invoiceRefId}` - Update draft line items +3. `POST /admin/billing/invoices/{invoiceRefId}/issue` - Issue draft (requires complete customer profile) +4. `DELETE /admin/billing/invoices/{invoiceRefId}` - Delete draft only + +Additional admin actions on issued invoices: + +- `POST /admin/billing/invoices/{invoiceRefId}/void` - Void invoice +- `POST /admin/billing/invoices/{invoiceRefId}/mark-paid` - Mark paid manually +- `POST /admin/billing/invoices/{invoiceRefId}/mark-unpaid` - Revert paid status +- `GET /admin/billing/invoices/{invoiceRefId}/audit-logs` - Audit trail +- `GET /admin/billing/invoices/{invoiceRefId}/pdf` - Download PDF +- `GET /admin/billing/invoices/{invoiceRefId}/void-document/pdf` - Void document PDF + +```mermaid +sequenceDiagram + participant Admin + participant API as Billing Manager + participant DB as PostgreSQL + + Admin->>API: POST /admin/billing/invoices/manual + API->>DB: Insert draft invoice + Admin->>API: POST /admin/billing/invoices/{id} (edit lines) + Admin->>API: POST /admin/billing/invoices/{id}/issue + API->>API: Validate customer profile complete + API->>DB: Issue invoice (immutable) +``` + +## Customer Billing Profiles (Admin) + +Customer billing data is stored in `billing_customer_profiles` (one profile per user). + +| Method | Path | Purpose | +| ------ | --------------------------------------- | ------------------------------------------------------ | +| GET | `/admin/billing/customer-profiles` | Paginated list | +| GET | `/admin/billing/customer-profiles/{id}` | Full profile detail | +| POST | `/admin/billing/customer-profiles` | Create for user | +| POST | `/admin/billing/customer-profiles/{id}` | Update | +| DELETE | `/admin/billing/customer-profiles/{id}` | Delete (blocked if user has invoices or subscriptions) | + +Self-service `GET/POST /customer-profile` remains for end users. See [Customer Profiles](./customer-profiles.md). + +**Frontend:** `/administration/customer-profiles` in the billing console. + +## Related Admin Pages + +- **Billing dashboard** (`/administration/billing`) - KPIs, charts, bill-now +- **Customer profiles** (`/administration/customer-profiles`) - Admin CRUD +- **Service types and plans** - Catalog administration in the billing console +- **Users** (`/users`) - Shared identity user manager + +## Related Documentation + +- **[Invoices](./invoices.md)** - Status model and open positions +- **[Customer Profiles](./customer-profiles.md)** - Profile fields and validation +- **[Multi-tenancy](./multi-tenancy.md)** - Tenant scope and DR-002 +- **[Authentication](./authentication.md)** - Admin role requirements +- **[Billing Manager OpenAPI](/spec/billing-manager/openapi.yaml)** - Full admin path schemas + +--- + +_For manual invoice diagrams, see the billing manager feature module documentation._ diff --git a/docs/decabill/features/customer-profiles.md b/docs/decabill/features/customer-profiles.md new file mode 100644 index 000000000..ac9bcbb3b --- /dev/null +++ b/docs/decabill/features/customer-profiles.md @@ -0,0 +1,84 @@ +# Customer Profiles + +Billing metadata for invoice issuance and subscription ordering. One profile per user per tenant. + +## Overview + +Customer profiles store legal and contact information required for compliant invoices and Stripe customer records. Subscription creation rejects incomplete profiles with 400 Bad Request. + +Profiles are managed through self-service endpoints for customers and admin CRUD for operators. + +## Required Fields for Ordering + +Before `POST /subscriptions`, the backend validates: + +- First name +- Last name +- Email +- Address line +- City +- Country + +Optional fields may include company name, VAT ID, postal code, and phone depending on deployment configuration and invoice issuer rules. + +## Self-Service + +| Method | Path | Purpose | +| ------ | ------------------- | ------------------------------- | +| GET | `/customer-profile` | Retrieve current user's profile | +| POST | `/customer-profile` | Create or update profile | + +The billing console exposes a customer profile page for authenticated users to complete or update billing details before ordering. + +### Stripe Integration + +When the user initiates payment, the billing manager creates or updates a Stripe Customer and stores the Stripe customer id on the profile for subsequent checkout sessions. + +## Admin Management + +Admins manage profiles under `/admin/billing/customer-profiles`. See [Billing Administration](./billing-administration.md). + +Rules: + +- One profile per user +- Delete is blocked when the user has existing invoices or subscriptions +- Admin create is used when onboarding customers who cannot self-register + +**Frontend route:** `/administration/customer-profiles` + +## Validation Flow + +```mermaid +flowchart TD + Order[POST /subscriptions] --> Check{Profile complete?} + Check -->|No| Reject[400 Bad Request] + Check -->|Yes| Avail[Availability check] + Avail --> Create[Create subscription] + Issue[POST .../issue manual invoice] --> CheckIssue{Profile complete?} + CheckIssue -->|No| RejectIssue[400 Bad Request] + CheckIssue -->|Yes| Issued[Issue invoice] +``` + +Manual invoice issuance uses the same completeness rules for the target user. + +## Data Storage + +Profiles are stored in `billing_customer_profiles` in PostgreSQL, scoped by tenant through the user's `tenant_id`. + +Sensitive fields follow standard application encryption and access controls. Stripe customer ids are stored for payment orchestration only. + +## User Billing Day + +The user's registration date (day of month, capped at 28) defaults as their **billing day** for open position accumulation. This is stored on the user record and is independent of the service plan's `billing_day_of_month`. See [Invoices](./invoices.md). + +## Related Documentation + +- **[Subscriptions](./subscriptions.md)** - Profile required at order time +- **[Invoices](./invoices.md)** - Issuer and customer data on PDFs +- **[Billing Administration](./billing-administration.md)** - Admin profile CRUD +- **[Payment Processing](./payment-processing.md)** - Stripe customer linkage +- **[Billing Manager OpenAPI](/spec/billing-manager/openapi.yaml)** - Profile DTO schemas + +--- + +_Complete your profile in the billing console before placing your first subscription order._ diff --git a/docs/decabill/features/dashboard-and-server-control.md b/docs/decabill/features/dashboard-and-server-control.md new file mode 100644 index 000000000..13c282d68 --- /dev/null +++ b/docs/decabill/features/dashboard-and-server-control.md @@ -0,0 +1,94 @@ +# Dashboard and Server Control + +Customer overview of subscriptions with live server status and power actions for provisioned infrastructure. + +## Overview + +The billing console **Overview** page (`/overview`) lists active subscriptions with provisioned items. For each item, users see hostname, FQDN, IP addresses, provider status, and action buttons to start, stop, or restart the cloud server. + +Status updates come from the [Real-time Status](./real-time-status.md) WebSocket when configured, or from REST polling via `GET .../server-info`. + +## Overview Page + +### Displayed Information + +Per subscription item with active provisioning: + +- Subscription and plan title +- Provisioning status +- Server name, public IP, hostname, and FQDN +- Provider-reported power state (running, off, etc.) +- Quick links to invoices and subscription detail + +### Server Action Buttons + +| Action | When shown | API | +| ------- | -------------------------- | -------------------------- | +| Start | Server is stoppable or off | `POST .../actions/start` | +| Stop | Server is online | `POST .../actions/stop` | +| Restart | Server is online | `POST .../actions/restart` | + +Buttons are disabled while an action is in progress. After a successful action, the UI refreshes server info from REST (or waits for the next WebSocket tick when the socket is connected). + +## Data Loading + +### With WebSocket + +When `billing.websocketUrl` is set in frontend runtime config: + +1. NgRx effects connect to the billing status gateway +2. On connect, client emits `subscribeDashboardStatus` +3. Server pushes `dashboardStatusUpdate` on each poll tick +4. Overview binds to the merged subscription and server info state + +See [Real-time Status](./real-time-status.md). + +### Without WebSocket + +When WebSocket URL is not configured: + +1. Overview dispatches `loadOverviewServerInfo` +2. Client fetches subscriptions and server info via REST for each item +3. Server actions trigger immediate REST refresh after completion + +## Authorization + +Users see only their own subscriptions and items. Server control actions verify subscription ownership on every request. Admin users using the customer overview still see only their personal subscriptions unless using admin routes. + +API key authentication does not populate an end-user identity on the overview WebSocket path; use Keycloak or users auth for the dashboard stream. + +## Server Control Sequence + +```mermaid +sequenceDiagram + participant User + participant UI as Billing Console + participant API as Billing Manager + participant Cloud as Cloud Provider + + User->>UI: Click Restart + UI->>API: POST .../actions/restart + API->>Cloud: Restart server + Cloud-->>API: Success + API-->>UI: 200 success + UI->>API: GET .../server-info + API->>Cloud: Fetch status + API-->>UI: Updated server info +``` + +## Error Handling + +- Failed actions show error state in the overview card +- Missing or failed server info displays a loading or error placeholder +- Provisioning failures link to subscription detail and [Backorders](./backorders.md) when applicable + +## Related Documentation + +- **[Real-time Status](./real-time-status.md)** - WebSocket dashboard stream +- **[Subscriptions](./subscriptions.md)** - Subscription items and server-info endpoint +- **[Server Provisioning](./server-provisioning.md)** - What gets provisioned +- **[Billing Manager OpenAPI](/spec/billing-manager/openapi.yaml)** - Action endpoint schemas + +--- + +_Configure `billing.websocketUrl` in the billing console runtime config for live status without manual refresh._ diff --git a/docs/decabill/features/dynamic-provider-plugins.md b/docs/decabill/features/dynamic-provider-plugins.md new file mode 100644 index 000000000..e9af1510c --- /dev/null +++ b/docs/decabill/features/dynamic-provider-plugins.md @@ -0,0 +1,157 @@ +# Dynamic Provider Plugins + +Extend the billing manager with extra payment processors and billing UI provider metadata at runtime without forking the application image. + +## Overview + +Decabill uses the shared `@forepath/shared/backend/util-dynamic-provider-registry` loader. Provider packages can be **baked into** the billing manager deploy graph or **mounted post-build** into `DYNAMIC_PROVIDER_PLUGIN_PATH`. + +This page covers **Decabill billing manager** registries only. + +## Registries + +| Env var | Criticality | Registers | +| ----------------------------------- | ----------- | ------------------------------------------------------ | +| `DYNAMIC_PAYMENT_PROCESSORS` | critical | Payment processor implementations | +| `DYNAMIC_BILLING_PROVIDER_METADATA` | optional | Admin UI provider metadata (`providerMetadata` export) | + +Shared tuning: + +| Variable | Purpose | +| --------------------------------- | ------------------------------------------------------------- | +| `DYNAMIC_PROVIDERS_FAIL_FAST` | When `true`, critical registries abort startup on load errors | +| `DYNAMIC_PROVIDER_PLUGIN_PATH` | Absolute plugin root inside the container | +| `DYNAMIC_PROVIDER_PLUGIN_INSTALL` | Comma-separated `npm install` targets at startup | + +**Production:** set `DYNAMIC_PROVIDERS_FAIL_FAST=true` when `DYNAMIC_PAYMENT_PROCESSORS` is non-empty. + +## Resolution Order + +For each `DYNAMIC_*` entry the loader: + +1. **Baked-in** - resolves the package from `/app/package.json` (image build graph) +2. **Plugin path** - looks up the package by `package.json` name under `DYNAMIC_PROVIDER_PLUGIN_PATH` +3. **Fail** - logs and skips, or aborts startup when critical and fail-fast is enabled + +Baked-in wins when the same package exists in both places. + +```mermaid +flowchart TD + env[DYNAMIC_* entry] --> parse[parseProviderPackageSpec] + parse --> resolve[resolveProviderLoadTarget] + resolve --> baked{Baked into /app?} + baked -->|yes| loadBaked[loadProviderModule] + baked -->|no| plugin{Plugin path set?} + plugin -->|yes| index[Index by package.json name] + index --> loadPlugin[load from filesystem] + plugin -->|no| fail[Skip or fail-fast] + loadBaked --> register[registerDynamicProviders] + loadPlugin --> register +``` + +## Config Format + +```bash +# alias=@package/specifier +DYNAMIC_PAYMENT_PROCESSORS=acme=@forepath/decabill/backend/payment-acme + +# PascalCase alias selects named class export +DYNAMIC_BILLING_PROVIDER_METADATA=AcmeMeta=@forepath/decabill/backend/billing-provider-acme + +# bare specifier +DYNAMIC_PAYMENT_PROCESSORS=@forepath/decabill/backend/payment-acme + +# file: entry relative to plugin path +DYNAMIC_PAYMENT_PROCESSORS=acme=file:payment-acme +``` + +Allowed package name prefixes: `@forepath/`, `@decabill/`. Do not combine `file:` with an `@forepath/` specifier on the same entry. + +## Plugin Package Contract + +External packages must export one of: + +1. **`createProvider`** (preferred) - `(moduleRef: ModuleRef) => T | Promise` +2. **Named PascalCase class** - via entry alias or `package.json`: + +```json +{ + "forepath": { + "providerExport": "AcmePaymentProcessor" + } +} +``` + +For billing UI metadata packages, export **`providerMetadata`** array compatible with the provider registry service. + +Declare Nest and host dependencies as **peerDependencies** resolved from `/app/node_modules`. + +## Payment Processors + +Processors implement the `PaymentProcessor` interface: + +- Register with `PaymentProcessorFactory` at module bootstrap +- Handle checkout session creation and webhook processing for their provider +- Expose a unique `type` string matching `BILLING_DEFAULT_PAYMENT_PROCESSOR` + +Built-in: `stripe` via `StripePaymentProcessor`. See [Payment Processing](./payment-processing.md). + +## Billing Provider Metadata + +`DYNAMIC_BILLING_PROVIDER_METADATA` adds entries to `GET /service-types/providers` for admin UI dropdowns and config schema rendering without implementing full provisioning in the same package. + +Built-in Hetzner and DigitalOcean providers register statically when API tokens are present. + +## Baked-in Plugins + +1. Add the provider package to the billing manager deploy graph +2. Set the relevant `DYNAMIC_*` variable +3. Rebuild the container image + +## Post-build Plugins + +1. Build the plugin to compiled JS with `package.json` +2. Mount into `./provider-plugins/` (compose maps to `/var/lib/forepath/provider-plugins`) and/or set `DYNAMIC_PROVIDER_PLUGIN_INSTALL` +3. Set `DYNAMIC_PROVIDER_PLUGIN_PATH=/var/lib/forepath/provider-plugins` +4. Set `DYNAMIC_*` to reference package name or `file:` directory +5. Restart the container + +Startup runs `install-provider-plugins.js` before `main.js` when the plugin path is set. Install failures fail container start. + +## Startup Error Policy + +| Registry criticality | `DYNAMIC_PROVIDERS_FAIL_FAST` | On load error | +| -------------------- | ----------------------------- | ------------------ | +| optional | any | Log and skip entry | +| critical | unset / `false` | Log and skip entry | +| critical | `true` | Abort startup | + +## Security + +- Package `name` in indexed `package.json` files must use allowlisted prefixes (`@forepath/`, `@decabill/`) +- `file:` paths resolve under `DYNAMIC_PROVIDER_PLUGIN_PATH` only; traversal outside the root is rejected +- Private registry installs require operator-supplied `.npmrc` or token mounts + +## Docker Compose Example + +```yaml +environment: + DYNAMIC_PROVIDER_PLUGIN_PATH: /var/lib/forepath/provider-plugins + DYNAMIC_PROVIDER_PLUGIN_INSTALL: ${DYNAMIC_PROVIDER_PLUGIN_INSTALL:-} + DYNAMIC_PROVIDERS_FAIL_FAST: 'true' +volumes: + - ./provider-plugins:/var/lib/forepath/provider-plugins +``` + +See [Docker Deployment](../deployment/docker-deployment.md). + +## Related Documentation + +- **[Payment Processing](./payment-processing.md)** - Stripe built-in processor +- **[Service Types and Plans](./service-types-and-plans.md)** - Provider registry consumption +- **[Environment Configuration](../deployment/environment-configuration.md)** - `DYNAMIC_*` reference +- **[Backend Billing Manager](../applications/backend-billing-manager.md)** - Compose and env + +--- + +_Implementation: `@forepath/shared/backend/util-dynamic-provider-registry`._ diff --git a/docs/decabill/features/invoices.md b/docs/decabill/features/invoices.md new file mode 100644 index 000000000..18b4d6437 --- /dev/null +++ b/docs/decabill/features/invoices.md @@ -0,0 +1,128 @@ +# Invoices + +Invoice issuance, ZUGFeRD PDF generation, open position accumulation, and payment initiation for Decabill customers and administrators. + +## Overview + +Decabill stores invoices in PostgreSQL with immutable issued states. PDFs follow ZUGFeRD conventions with EN 16931 XML embedded. Customers pay via Stripe Checkout; admins can create manual invoices and adjust payment status. + +## Invoice Statuses + +| Status | Description | +| ---------------- | ------------------------------------------- | +| `draft` | Editable; admin manual invoices only | +| `issued` | Finalized; line items and amounts immutable | +| `paid` | Fully paid | +| `partially_paid` | Partial payment recorded | +| `overdue` | Past due date without full payment | +| `void` | Voided; void document PDF available | + +**Immutability:** Only `draft` invoices can be edited or deleted. Issued invoices can be voided (when unpaid) or marked paid or unpaid by admins. + +## Open Positions and Billing Day + +Recurring and final subscription charges are recorded as **open positions** instead of creating an invoice immediately. + +A scheduler runs on each user's **billing day** (stored on the user record; default is registration day of month capped at 28). On that day, one accumulated invoice per user is created containing all unbilled open positions as line items. + +This is separate from the service plan's `billing_day_of_month`, which controls subscription period alignment. + +```mermaid +sequenceDiagram + participant Sched as Billing Day Scheduler + participant API as InvoiceCreationService + participant DB as PostgreSQL + + Sched->>DB: Find users whose billing day is today + loop Each user with open positions + Sched->>API: Create accumulated invoice + API->>DB: Insert invoice + line items from open positions + API->>DB: Mark positions as billed + end +``` + +Configure scheduler interval with `OPEN_POSITION_INVOICE_SCHEDULER_INTERVAL` (default daily). + +## Customer Invoice Access + +### Summary and Lists + +- `GET /invoices/summary` - Aggregated counts and amounts for the authenticated user +- `GET /invoices/open-overdue` - Open and overdue invoices for the user + +### By Reference + +Invoices are addressed by stable `invoiceRefId`: + +- `GET /invoices/ref/{invoiceRefId}` - Invoice detail +- `GET /invoices/ref/{invoiceRefId}/pdf` - Download ZUGFeRD PDF +- `GET /invoices/ref/{invoiceRefId}/void-document/pdf` - Void document PDF when voided +- `POST /invoices/ref/{invoiceRefId}/pay` - Initiate Stripe Checkout + +Subscription-scoped paths mirror the same operations under `/invoices/{subscriptionId}/ref/{invoiceRefId}`. + +### Void (Customer Context) + +Customers may void eligible invoices via subscription-scoped void endpoint where policy allows. + +## Admin Invoice Operations + +Admin routes under `/admin/billing/invoices`: + +- List all invoices with filters +- Open and overdue lists across tenants (scoped by `X-Tenant`) +- Manual invoice workflow (see [Billing Administration](./billing-administration.md)) +- Mark paid or unpaid +- Audit logs per invoice +- PDF and void document download + +**Bill now:** `POST /admin/billing/bill-now` forces invoice generation for selected users outside the scheduler. + +## PDF Generation + +PDFs are stored under `BILLING_INVOICE_PDF_STORAGE_PATH`. Issuer details come from environment: + +- `BILLING_ISSUER_*` (name, VAT ID, address, email, IBAN) +- `BILLING_TAX_RATE_STANDARD` and `BILLING_TAX_RATE_REDUCED` + +## Usage on Invoices + +Usage records posted via `POST /usage/record` appear on invoices when pricing includes usage cost or unit counts. + +## Payment + +Customer payment flow: + +1. `POST .../pay` creates a Stripe Checkout Session +2. User completes checkout on Stripe +3. Stripe webhook updates invoice to paid (idempotent) + +See [Payment Processing](./payment-processing.md). + +## Manual Invoice Workflow (Admin) + +1. `POST /admin/billing/invoices/manual` - Create draft with user, optional subscription, custom line items +2. `POST /admin/billing/invoices/{invoiceRefId}` - Update draft line items +3. `POST /admin/billing/invoices/{invoiceRefId}/issue` - Issue draft (requires complete customer profile) +4. `DELETE /admin/billing/invoices/{invoiceRefId}` - Delete draft only + +## API Endpoints Summary + +| Audience | Key paths | +| -------- | -------------------------------------------------------------------------------------------------------------------------------------- | +| Customer | `/invoices/summary`, `/invoices/ref/{invoiceRefId}`, `/invoices/ref/{invoiceRefId}/pdf`, `/invoices/ref/{invoiceRefId}/pay` | +| Admin | `/admin/billing/invoices`, `/admin/billing/invoices/manual`, `/admin/billing/invoices/{invoiceRefId}/issue`, `/admin/billing/bill-now` | + +Full schemas: [Billing Manager OpenAPI](/spec/billing-manager/openapi.yaml). + +## Related Documentation + +- **[Payment Processing](./payment-processing.md)** - Stripe checkout and webhooks +- **[Billing Administration](./billing-administration.md)** - Manual invoices and KPIs +- **[Customer Profiles](./customer-profiles.md)** - Required for issuance +- **[Subscriptions](./subscriptions.md)** - Source of open positions +- **[Multi-tenancy](./multi-tenancy.md)** - Tenant-scoped invoice data + +--- + +_For invoice payment sequence details, see [Payment Processing](./payment-processing.md)._ diff --git a/docs/decabill/features/multi-tenancy.md b/docs/decabill/features/multi-tenancy.md new file mode 100644 index 000000000..58c954c3f --- /dev/null +++ b/docs/decabill/features/multi-tenancy.md @@ -0,0 +1,158 @@ +# Multi-tenancy + +Tenant-scoped billing data in a shared billing manager deployment. Operators configure allowed tenants; clients select the active tenant per request. + +## Overview + +Decabill isolates users, subscriptions, invoices, service types, and service plans per tenant. The same email address may exist in different tenants as separate user records. + +Multi-tenancy is enforced on: + +- HTTP REST API via the `X-Tenant` header +- Socket.IO dashboard status via handshake `extraHeaders` or `auth.tenantId` +- Background jobs that iterate all configured tenants +- Stripe webhook handling that resolves tenant from checkout session metadata + +## Tenant Selection + +### HTTP Requests + +Clients send optional header: + +```http +X-Tenant: one +``` + +When omitted, the server uses `default`. + +The billing console reads `billing.tenantId` from runtime config and attaches `X-Tenant` on every API call. + +### Allowed Tenants + +The `TENANTS` environment variable defines the allowlist: + +```bash +TENANTS=default,one,two +``` + +Rules: + +- `default` is always allowed even when not listed +- When `TENANTS` is unset or empty, only `default` is allowed +- Invalid tenant ids return 400 Bad Request + +### Per-tenant Frontend URLs + +Stripe checkout success and cancel redirects use tenant-specific billing console base URLs: + +| Variable | Purpose | +| ---------------------- | -------------------------------------------- | +| `BILLING_FRONTEND_URL` | Base URL for the `default` tenant | +| `TENANT_FRONTEND_URLS` | Comma-separated `tenantId=https://...` pairs | + +Example: + +```bash +BILLING_FRONTEND_URL=https://billing.example.com +TENANT_FRONTEND_URLS=one=https://one.billing.example.com,two=https://two.billing.example.com +``` + +## Data Isolation + +Each tenant has independent: + +- User accounts (same email allowed in multiple tenants) +- Customer billing profiles +- Subscriptions and subscription items +- Invoices and open positions +- Service types and service plans +- Backorders + +Admin and user routes filter by the request tenant. Interactive auth (Keycloak or users) additionally requires the authenticated user's `tenant_id` to match the request tenant. + +## API Key Auth and Tenant Scope + +When `AUTHENTICATION_METHOD=api-key` (or api-key is inferred from `STATIC_API_KEY`): + +### With `STATIC_API_KEY_TENANT_ID` set + +API key requests are accepted only when `X-Tenant` matches the configured tenant id. Mismatch returns 403 Forbidden. + +```bash +STATIC_API_KEY_TENANT_ID=one +``` + +### With `STATIC_API_KEY_TENANT_ID` unset + +A valid `STATIC_API_KEY` grants admin access to **every** tenant listed in `TENANTS`, selected per request via `X-Tenant`. This is intentional for a single shared automation credential. + +**Accepted risk [DR-002](../security/accepted-risks.md#dr-002--billing-multi-tenant-api-key-scope-static_api_key_tenant_id-unset):** Anyone with the deployment API key can read and mutate all configured tenants by changing `X-Tenant`. + +**Mitigations:** + +- Set `STATIC_API_KEY_TENANT_ID` when automation must target one tenant only +- Prefer Keycloak or users auth for the billing console in multi-tenant production +- Rotate and protect `STATIC_API_KEY` as a high-value secret +- WebSocket dashboard status does not stream to API key clients + +Interactive Keycloak and users sessions always enforce the user's `tenant_id` regardless of the above. + +## Public Catalog + +`GET /public/service-plan-offerings` is unauthenticated. Tenant is selected via `X-Tenant` (defaults to `default`). Restrict exposure with `TENANTS` on public-facing deployments. + +## Background Jobs + +Schedulers iterate all configured tenants: + +- Open position invoice generation on each user's billing day +- Subscription item update (SSH docker compose pull) +- Backorder retry processing +- Other tenant-scoped maintenance tasks + +Stripe webhooks resolve tenant from checkout session metadata to apply payment state to the correct tenant's invoice. + +## Multi-tenancy Flow + +```mermaid +sequenceDiagram + participant Client + participant API as Billing Manager + participant DB as PostgreSQL + + Client->>API: Request with X-Tenant: one + API->>API: Validate tenant in TENANTS allowlist + alt Interactive auth (keycloak / users) + API->>DB: Load user by id + API->>API: user.tenant_id must match X-Tenant + else API key auth + alt STATIC_API_KEY_TENANT_ID set + API->>API: X-Tenant must match STATIC_API_KEY_TENANT_ID + else STATIC_API_KEY_TENANT_ID unset + API->>API: Admin access to requested tenant (DR-002) + end + end + API->>DB: Query scoped to tenant + API-->>Client: Response +``` + +## Configuration Summary + +| Variable | Required | Description | +| -------------------------- | -------- | -------------------------------------------------------------- | +| `TENANTS` | No | Comma-separated allowed tenant ids (always includes `default`) | +| `STATIC_API_KEY_TENANT_ID` | No | Bind API key auth to one tenant | +| `BILLING_FRONTEND_URL` | No | Default tenant frontend base URL for Stripe redirects | +| `TENANT_FRONTEND_URLS` | No | Per-tenant frontend URLs for Stripe redirects | + +## Related Documentation + +- **[Authentication](./authentication.md)** - Auth methods and API key behavior +- **[Billing Administration](./billing-administration.md)** - Admin routes and tenant scope +- **[Security - Accepted risks](../security/accepted-risks.md)** - **DR-002** multi-tenant API key scope +- **[Environment Configuration](../deployment/environment-configuration.md)** - Full variable reference +- **[Payment Processing](./payment-processing.md)** - Tenant-aware Stripe redirects + +--- + +_For HTTP header documentation, see [Billing Manager OpenAPI](/spec/billing-manager/openapi.yaml)._ diff --git a/docs/decabill/features/payment-processing.md b/docs/decabill/features/payment-processing.md new file mode 100644 index 000000000..f938b9b61 --- /dev/null +++ b/docs/decabill/features/payment-processing.md @@ -0,0 +1,113 @@ +# Payment Processing + +Stripe Checkout integration and webhook-driven payment reconciliation for Decabill invoices. + +## Overview + +Decabill uses a payment processor abstraction with **Stripe** as the built-in implementation. Customers initiate payment from the billing console; the backend creates a Stripe Checkout Session and records the attempt. Stripe webhooks mark invoices paid idempotently. + +Additional processors can be registered via [Dynamic Provider Plugins](./dynamic-provider-plugins.md). + +## Default Processor + +Set the active processor type: + +```bash +BILLING_DEFAULT_PAYMENT_PROCESSOR=stripe +``` + +The `PaymentProcessorFactory` resolves processors by type string at runtime. + +## Stripe Configuration + +| Variable | Purpose | +| ----------------------------- | ------------------------------------------------------ | +| `STRIPE_SECRET_KEY` | Stripe API secret key | +| `STRIPE_WEBHOOK_SECRET` | Webhook signing secret | +| `STRIPE_CHECKOUT_SUCCESS_URL` | Legacy full URL or path used with tenant frontend base | +| `STRIPE_CHECKOUT_CANCEL_URL` | Cancel redirect path | + +Per-tenant redirect bases come from [Multi-tenancy](./multi-tenancy.md): + +- `BILLING_FRONTEND_URL` for `default` +- `TENANT_FRONTEND_URLS` for other tenants + +Checkout success and cancel URLs are built from the tenant frontend base plus configured path segments. + +## Customer Payment Flow + +```mermaid +sequenceDiagram + participant User + participant API as Billing Manager + participant Stripe + participant DB as PostgreSQL + + User->>API: POST /invoices/ref/{invoiceRefId}/pay + API->>DB: Load invoice + customer profile + API->>Stripe: Create Checkout Session + Stripe-->>API: checkoutUrl + API->>DB: Record payment attempt + API-->>User: InitiatePaymentResponse with URL + + User->>Stripe: Complete checkout + Stripe->>API: POST /webhooks/payments/stripe + API->>DB: Idempotent event + mark paid + API-->>Stripe: 200 +``` + +### Initiate Payment + +`POST /invoices/ref/{invoiceRefId}/pay` (and subscription-scoped variant) returns a checkout URL. The user is redirected to Stripe Hosted Checkout. + +Session metadata includes tenant id so webhooks apply payment to the correct tenant's invoice. + +### Webhook Handling + +`POST /webhooks/payments/stripe` is a public endpoint secured by Stripe signature verification. + +Behavior: + +- Verify webhook signature with `STRIPE_WEBHOOK_SECRET` +- Process events idempotently (duplicate deliveries safe) +- Update invoice payment status to `paid` on successful checkout +- Store Stripe customer id on [Customer Profile](./customer-profiles.md) when created + +## Admin Manual Payment Status + +Admins can override payment state without Stripe: + +- `POST /admin/billing/invoices/{invoiceRefId}/mark-paid` +- `POST /admin/billing/invoices/{invoiceRefId}/mark-unpaid` + +Use for offline payments or reconciliation corrections. Audit logs record admin actions. + +## Payment Processor Interface + +Built-in and dynamic processors implement: + +- Checkout session creation with amount, currency, and metadata +- Webhook route registration (Stripe uses fixed path) +- Customer create or update helpers + +Stripe implementation: `StripePaymentProcessor` in the billing manager feature module. + +## Security + +- Never expose `STRIPE_SECRET_KEY` or `STRIPE_WEBHOOK_SECRET` to the frontend +- Webhook endpoint validates Stripe signatures before state changes +- Checkout sessions include tenant and invoice references for scoped updates +- Use HTTPS for production webhook URLs + +## Related Documentation + +- **[Invoices](./invoices.md)** - Invoice statuses and pay endpoints +- **[Multi-tenancy](./multi-tenancy.md)** - Tenant-aware redirect URLs +- **[Dynamic Provider Plugins](./dynamic-provider-plugins.md)** - `DYNAMIC_PAYMENT_PROCESSORS` +- **[Customer Profiles](./customer-profiles.md)** - Stripe customer id storage +- **[Stripe Documentation](https://stripe.com/docs)** - External Stripe reference +- **[Billing Manager OpenAPI](/spec/billing-manager/openapi.yaml)** - Pay and webhook paths + +--- + +_Configure Stripe keys in the billing manager environment before enabling customer checkout._ diff --git a/docs/decabill/features/real-time-status.md b/docs/decabill/features/real-time-status.md new file mode 100644 index 000000000..d1e29160d --- /dev/null +++ b/docs/decabill/features/real-time-status.md @@ -0,0 +1,123 @@ +# Real-time Status + +Socket.IO dashboard status stream for provisioned subscription items in the billing console. + +## Overview + +The billing manager exposes a dedicated WebSocket gateway (default TCP port **8082**, namespace **`billing`**) separate from the HTTP REST API (default port **3200**). Authenticated users subscribe to periodic server status snapshots for all active subscription items they own. + +Specification: [Billing Manager AsyncAPI](/spec/billing-manager/asyncapi.yaml). + +## Connection + +### URL and Namespace + +Configure the billing console runtime config: + +```json +{ + "billing": { + "websocketUrl": "ws://localhost:8082/billing", + "tenantId": "default" + } +} +``` + +Environment variables on the backend: + +| Variable | Default | Purpose | +| ----------------------- | --------- | ------------------------------- | +| `WEBSOCKET_PORT` | `8082` | Socket.IO TCP port | +| `WEBSOCKET_NAMESPACE` | `billing` | Namespace path segment | +| `WEBSOCKET_CORS_ORIGIN` | `*` | CORS origin for browser clients | +| `STATUS_POLL_INTERVAL` | `15000` | Default poll interval in ms | + +### Authentication + +Pass the same credentials as HTTP in the Socket.IO handshake: + +- **Keycloak:** `Bearer ` in `auth.Authorization` or handshake headers +- **Users:** `Bearer ` in `auth.Authorization` or handshake headers +- **API key:** **Not supported** for dashboard status. `subscribeDashboardStatus` emits `error` with message "User not authenticated". This mirrors REST behavior for API-key-only requests. + +### Multi-tenancy + +Pass tenant in the handshake: + +- **Browser clients:** `auth.tenantId` and `auth.Authorization` +- **Node clients:** `extraHeaders: { 'X-Tenant': 'default', Authorization: '...' }` + +The authenticated user's `tenant_id` must match the socket tenant. + +## Events + +### Client to Server + +| Event | Payload | Purpose | +| ---------------------------- | ----------------------------- | ------------- | +| `subscribeDashboardStatus` | `{ pollIntervalMs?: number }` | Start polling | +| `unsubscribeDashboardStatus` | none | Stop polling | + +`pollIntervalMs` is clamped server-side between 10 seconds and 120 seconds. When omitted, the server uses `STATUS_POLL_INTERVAL`. + +### Server to Client + +| Event | Purpose | +| ----------------------- | --------------------------------------- | +| `dashboardStatusUpdate` | Snapshot per poll tick | +| `error` | Application errors for this socket only | + +## Security Model + +- The server **never uses Socket.IO rooms** for this feature +- Subscription ids are chosen **only** from the authenticated user's subscriptions on each poll tick +- Client-supplied subscription lists are **not** trusted +- `dashboardStatusUpdate` and `error` are emitted **only** to the subscribing socket + +This mirrors REST subscription ownership checks on `GET .../server-info`. + +## Payload Shape + +Each `dashboardStatusUpdate` contains items matching the REST server-info response for every active provisioned item across the user's subscriptions: subscription id, item id, hostname, FQDN, IPs, provider status, and metadata. + +## Connection Flow + +```mermaid +sequenceDiagram + participant UI as Billing Console + participant GW as Billing Status Gateway + participant Svc as Subscription Services + + UI->>GW: Connect (Bearer JWT, tenantId) + GW->>GW: Validate auth and tenant + UI->>GW: subscribeDashboardStatus + GW->>Svc: listSubscriptions(userId) + loop Each poll interval + GW->>Svc: getServerInfo per active item + GW-->>UI: dashboardStatusUpdate + end + UI->>GW: unsubscribeDashboardStatus + GW->>GW: clearPollTimer +``` + +## Frontend Integration + +NgRx effects in `data-access-billing-console`: + +- Connect on overview entry when `websocketUrl` is configured +- Auto-emit `subscribeDashboardStatus` on `connect` +- Dispatch `billingDashboardStatusPush` on each update +- Disconnect on overview destroy or logout + +When WebSocket is unavailable, [Dashboard and Server Control](./dashboard-and-server-control.md) falls back to REST. + +## Related Documentation + +- **[Dashboard and Server Control](./dashboard-and-server-control.md)** - Overview UI and server actions +- **[Authentication](./authentication.md)** - JWT and Keycloak handshake +- **[Multi-tenancy](./multi-tenancy.md)** - Tenant in handshake +- **[Billing Manager AsyncAPI](/spec/billing-manager/asyncapi.yaml)** - Full message schemas + +--- + +_Static API key auth cannot subscribe to dashboard status; use interactive auth for the billing console overview._ diff --git a/docs/decabill/features/server-provisioning.md b/docs/decabill/features/server-provisioning.md new file mode 100644 index 000000000..42ecb7de7 --- /dev/null +++ b/docs/decabill/features/server-provisioning.md @@ -0,0 +1,144 @@ +# Server Provisioning + +Automated cloud server provisioning via cloud-init when service plans include infrastructure providers. + +## Overview + +When a [Subscription](./subscriptions.md) order includes a provisioning-enabled [Service Type](./service-types-and-plans.md), the billing manager: + +1. Checks provider availability +2. Reserves a hostname under `DNS_BASE_DOMAIN` +3. Creates a cloud server via Hetzner Cloud or DigitalOcean +4. Runs cloud-init to install Docker and deploy the bundled product stack +5. Creates a DNS A record (Cloudflare) when configured +6. Stores the provider server id on the subscription item + +## Supported Providers + +Built-in providers register at startup when API tokens are configured: + +#### Hetzner Cloud + +- **Provider id:** `hetzner` +- **Requires:** `HETZNER_API_TOKEN` +- **Config keys:** `location` or `region`, `serverType` (required), optional `firewallId` +- **Server types:** Loaded live from `GET /service-types/providers/hetzner/server-types` + +#### DigitalOcean + +- **Provider id:** `digital-ocean` +- **Requires:** `DIGITALOCEAN_API_TOKEN` +- **Config keys:** `region` (required), `serverType` (required) +- **Server types:** Loaded live from `GET /service-types/providers/digital-ocean/server-types` + +Additional cloud backends can be added via [Dynamic Provider Plugins](./dynamic-provider-plugins.md) (`DYNAMIC_BILLING_PROVIDER_METADATA` and custom provisioning packages where supported). + +## Provisioning Process + +```mermaid +sequenceDiagram + participant API as Billing Manager + participant P as Cloud Provider + participant S as Server + participant DNS as Cloudflare DNS + + API->>P: Create server (cloud-init user data) + P->>S: Provision VM + S->>S: cloud-init: Docker + stack + P-->>API: serverId + IP + API->>DNS: createARecord(hostname, publicIp) + API->>API: Update subscription item active +``` + +## Bundled Product Stack + +Cloud-init installs Docker CE and deploys a docker-compose stack on the instance. The default controller bundle includes: + +- **PostgreSQL** - Application database with health checks +- **Backend API** - NestJS billing or agent controller API container (depending on service plan configuration) +- **Frontend console** - Angular SSR web application served behind reverse proxy +- **Nginx** - Terminates HTTP and HTTPS, proxies to backend and frontend containers, serves ACME HTTP-01 challenges at `/.well-known/acme-challenge/` + +Containers share a defined application directory on the host (typically under `/opt/`). Environment variables for authentication, database connection, and product-specific settings are interpolated into the generated compose file from the subscription's requested configuration. + +Operators choose service kind and image tags through service type and plan configuration; the update scheduler pulls latest tagged images on a schedule. + +## TLS and DNS + +TLS uses Let's Encrypt via Certbot installed in cloud-init (pip/venv under `/opt/certbot`): + +- Initial bootstrap certificate generated with OpenSSL so Nginx can start immediately +- Production certificates requested with `certbot certonly --webroot` for the instance FQDN (`hostname.DNS_BASE_DOMAIN`) +- On success, Nginx switches to Let's Encrypt certificate paths +- Automatic renewal in crontab with deploy hook to reload the Nginx container + +Environment: + +| Variable | Purpose | +| ---------------------- | ----------------------------------------------------------------- | +| `LETS_ENCRYPT_EMAIL` | ACME account email | +| `DNS_BASE_DOMAIN` | Base domain for hostnames and certificates (default `spirde.com`) | +| `CLOUDFLARE_API_TOKEN` | DNS API token | +| `CLOUDFLARE_ZONE_ID` | Zone for A records | + +Cloud-init waits for the DNS A record (`proxied: false`) to resolve to the host before requesting the certificate. + +## SSH Access + +Provisioning templates configure SSH for operational access. Key-based authentication is enabled; password authentication is disabled in generated `sshd` configuration. + +**Accepted risk [DR-001](../security/accepted-risks.md#dr-001--provisioning-ssh-cloud-init-templates):** Cloud-init may configure root SSH access and install root `authorized_keys` for first-boot automation. Compensating controls include network restrictions, key rotation, and bastion access. See [Security - Accepted risks](../security/accepted-risks.md). + +## Nested Provisioning Tokens + +Optional `requestedConfig` keys on subscription order allow the provisioned instance to provision additional servers: + +- `hetznerApiToken` - Hetzner API token injected into instance environment +- `digitaloceanApiToken` - DigitalOcean API token injected into instance environment + +Use only when the product stack requires nested cloud automation. + +## Server Information and Control + +After provisioning: + +- `GET /subscriptions/{subscriptionId}/items/{itemId}/server-info` - Live status from provider API +- Start, stop, restart via action endpoints (see [Dashboard and Server Control](./dashboard-and-server-control.md)) + +## Subscription Item Update Scheduler + +A background scheduler connects to each provisioned host via SSH (key stored on the subscription item) at `SUBSCRIPTION_UPDATE_SCHEDULER_INTERVAL` (default 24 hours) and runs: + +```bash +docker compose up -d --pull=always +``` + +in the application directory. This pulls latest container images and recreates services. Failures are logged on the host under `/var/log/agent-controller-update.log` or equivalent per service kind. + +## Optional Instance Configuration + +Subscription `requestedConfig` can include authentication mode for the provisioned stack (`users`, `api-key`, `keycloak`), SMTP settings, and Git or API credentials where the plan schema allows. Values are passed securely through user-data into the generated compose environment. + +## API Endpoints + +| Method | Path | Purpose | +| ------ | ---------------------------------------------------- | -------------------------- | +| GET | `/service-types/providers` | List providers and schemas | +| GET | `/service-types/providers/{providerId}/server-types` | Server types and pricing | +| POST | `/availability/check` | Pre-order capacity check | +| GET | `/subscriptions/.../server-info` | Live server metadata | + +Provisioning itself is triggered internally by subscription and backorder services, not via a standalone public provision endpoint. + +## Related Documentation + +- **[Subscriptions](./subscriptions.md)** - Order flow +- **[Backorders](./backorders.md)** - Retry when capacity unavailable +- **[Service Types and Plans](./service-types-and-plans.md)** - Provider schemas +- **[Dashboard and Server Control](./dashboard-and-server-control.md)** - Power actions +- **[Security - Accepted risks](../security/accepted-risks.md)** - **DR-001** provisioning SSH +- **[Billing Manager OpenAPI](/spec/billing-manager/openapi.yaml)** - Server info schemas + +--- + +_Provisioned instances are owned by the subscribing customer within the current tenant scope._ diff --git a/docs/decabill/features/service-types-and-plans.md b/docs/decabill/features/service-types-and-plans.md new file mode 100644 index 000000000..f20bcdd6e --- /dev/null +++ b/docs/decabill/features/service-types-and-plans.md @@ -0,0 +1,122 @@ +# Service Types and Plans + +Admin-managed catalog of provisioning providers, service types, and priced service plans exposed to customers and public marketing endpoints. + +## Overview + +Service types define which provisioning provider (if any) backs a product. Service plans attach pricing, billing intervals, margins, and provider default configuration. The billing console admin UI and public catalog consume the same backend registry. + +## Service Types + +A service type links a product name to a provider id (for example `hetzner`, `digital-ocean`) or no provider for non-infrastructure plans. + +### Admin Endpoints + +| Method | Path | Purpose | +| ------ | --------------------- | --------------------------- | +| GET | `/service-types` | List service types | +| POST | `/service-types` | Create service type (admin) | +| GET | `/service-types/{id}` | Get service type | +| POST | `/service-types/{id}` | Update service type (admin) | +| DELETE | `/service-types/{id}` | Delete service type (admin) | + +### Provider Registry + +`GET /service-types/providers` returns registered provisioning providers with: + +- Provider id and display name +- Optional `configSchema` for admin UI and subscription validation +- Dynamic metadata from `DYNAMIC_BILLING_PROVIDER_METADATA` plugins + +Built-in providers include Hetzner Cloud and DigitalOcean when API tokens are configured. Additional providers can be registered via [Dynamic Provider Plugins](./dynamic-provider-plugins.md). + +### Config Schema + +The optional `configSchema` is a JSON-schema-like object: + +- **`properties`** - Field definitions with `type`, `description`, and optional `enum` +- **`basePriceFromField`** - When set (for example `serverType`), the console loads options from `GET /service-types/providers/{providerId}/server-types` and uses selected `priceMonthly` as plan base price + +Enum fields render as select inputs in the billing console. + +### Server Types + +`GET /service-types/providers/{providerId}/server-types` returns server types with id, name, specs (cores, memory, disk), `priceMonthly`, and `priceHourly`. Requires the provider API token in the billing manager environment. + +## Service Plans + +Service plans belong to a service type and define customer-facing pricing and billing rules. + +### Admin Endpoints + +| Method | Path | Purpose | +| ------ | --------------------- | ------------------- | +| GET | `/service-plans` | List service plans | +| POST | `/service-plans` | Create plan (admin) | +| GET | `/service-plans/{id}` | Get plan | +| POST | `/service-plans/{id}` | Update plan (admin) | +| DELETE | `/service-plans/{id}` | Delete plan (admin) | + +### Plan Fields (Conceptual) + +- Title, description, and active flag +- Billing interval (monthly, yearly, etc.) +- Base price, margin, and computed customer total +- `providerConfigDefaults` merged with customer `requestedConfig` on order +- `billing_day_of_month` for subscription period alignment +- `allowCustomerLocationSelection` when geography override is supported + +### Customer Geography Selection + +When `allowCustomerLocationSelection` is true **and** the merged provider schema defines `region` or `location` as a string with a non-empty enum, customers may pass geography in `POST /subscriptions` `requestedConfig`. Setting the flag without a supported schema returns 400. + +For Hetzner and DigitalOcean, `region` and `location` are treated as aliases during merge and provisioning. + +## Public Catalog + +Unauthenticated endpoints for external pricing pages: + +| Method | Path | Purpose | +| ------ | ----------------------------------------- | ---------------------------------------------- | +| GET | `/public/service-plan-offerings` | Paginated active plans (marketing fields only) | +| GET | `/public/service-plan-offerings/cheapest` | Lowest-priced active plan | + +Tenant is selected via `X-Tenant` (defaults to `default`). No provider secrets or internal margins are exposed. + +## Availability and Pricing + +Before order: + +- `POST /availability/check` - Validate config against provider capacity +- `POST /availability/alternatives` - Suggest alternatives when unavailable +- `POST /pricing/preview` - Estimated customer total for plan and config + +## Admin UI + +The billing console provides administration routes for service types and service plans. Provider dropdown and dynamic config fields are driven by `GET /service-types/providers` and server type endpoints. + +## Architecture + +```mermaid +flowchart LR + Admin[Admin Console] --> API[Billing Manager] + Public[Public Site] --> API + API --> Registry[ProviderRegistryService] + Registry --> Hetzner[Hetzner API] + Registry --> DO[DigitalOcean API] + Registry --> Plugins[Dynamic Metadata Plugins] + API --> DB[(PostgreSQL)] + DB --> ST[Service Types] + DB --> SP[Service Plans] +``` + +## Related Documentation + +- **[Subscriptions](./subscriptions.md)** - Ordering against plans +- **[Server Provisioning](./server-provisioning.md)** - Provider provisioning behavior +- **[Dynamic Provider Plugins](./dynamic-provider-plugins.md)** - Extra providers and UI metadata +- **[Multi-tenancy](./multi-tenancy.md)** - Tenant-scoped catalog + +--- + +_See [Billing Manager OpenAPI](/spec/billing-manager/openapi.yaml) for DTO schemas._ diff --git a/docs/decabill/features/subscriptions.md b/docs/decabill/features/subscriptions.md new file mode 100644 index 000000000..3da8c5c86 --- /dev/null +++ b/docs/decabill/features/subscriptions.md @@ -0,0 +1,147 @@ +# Subscriptions + +Order service plans, manage subscription lifecycle, and provision cloud infrastructure when the plan includes a provisioning provider. + +## Overview + +Subscriptions link a user to a service plan. Plans reference a service type that may include Hetzner or DigitalOcean provisioning. Each subscription can have one or more subscription items representing provisioned or pending instances. + +The order flow requires a complete [Customer Profile](./customer-profiles.md) before `POST /subscriptions` is accepted. + +## Subscription Lifecycle + +```mermaid +stateDiagram-v2 + [*] --> active + active --> pending_cancel: cancel request + pending_cancel --> active: resume + pending_cancel --> canceled: effective_at reached + active --> pending_backorder: unavailable + pending_backorder --> active: provisioned + pending_backorder --> canceled: cancel +``` + +### Active + +Subscription is in good standing. Recurring charges create open positions according to the plan billing interval. + +### Pending Cancel + +User requested cancellation. Subscription remains active until `effective_at`. User may resume before that date. + +### Canceled + +Subscription ended. No further recurring charges. Provisioned items may be decommissioned per operator policy. + +### Pending Backorder + +Capacity was unavailable at order time or provisioning failed with `autoBackorder`. See [Backorders](./backorders.md). + +## Ordering a Subscription + +### Prerequisites + +1. Authenticated user in the current tenant +2. Complete customer billing profile (name, email, address, city, country) +3. Active service plan selected + +### Order Flow + +```mermaid +sequenceDiagram + participant User + participant API as Billing Manager + participant Avail as AvailabilityService + participant Prov as ProvisioningService + participant DB as PostgreSQL + + User->>API: POST /subscriptions (planId, requestedConfig) + API->>API: Validate customer profile complete + API->>Avail: checkAvailability(provider, config) + alt Available and provisioning enabled + API->>DB: Create subscription + item + API->>Prov: provision server (cloud-init) + Prov-->>API: serverId + API->>DB: Update item status active + else Unavailable with autoBackorder + API->>DB: Create backorder + end + API-->>User: Subscription response +``` + +### Request Body + +- **`planId`** (required) - UUID of the service plan +- **`requestedConfig`** (optional) - Provider-specific configuration validated against the service type schema +- **`autoBackorder`** (optional) - When true, queue a backorder if capacity is unavailable + +Provider config keys include `serverType`, `location` or `region`, and optional nested provisioning tokens. See [Service Types and Plans](./service-types-and-plans.md) and [Server Provisioning](./server-provisioning.md). + +### Customer Geography + +When `allowCustomerLocationSelection` is true on the plan and the provider schema defines `region` or `location` with an enum, customers may override geography in `requestedConfig`. Otherwise geography keys are stripped before merge. + +## Cancel and Resume + +- `POST /subscriptions/{subscriptionId}/cancel` - Schedule cancellation at period end or immediately per plan rules +- `POST /subscriptions/{subscriptionId}/resume` - Reverse a pending cancel before `effective_at` + +## Subscription Items + +Each item tracks: + +- Provisioning status (`pending`, `active`, `failed`, etc.) +- Provider reference (cloud server id) +- Hostname and FQDN under `DNS_BASE_DOMAIN` +- Service kind (for example controller stack) + +### Server Info + +`GET /subscriptions/{subscriptionId}/items/{itemId}/server-info` returns live cloud status: server id, name, public and private IP, hostname, FQDN, and provider metadata. + +### Server Control + +Start, stop, and restart actions are available for provisioned items. See [Dashboard and Server Control](./dashboard-and-server-control.md). + +## Usage Records + +Usage-based plans accept metering via `POST /usage/record`. Usage is included in invoice line items when `usagePayload` or `units` and `unitPrice` are present. Summary available at `GET /usage/summary/{subscriptionId}`. + +## Pricing Preview + +`POST /pricing/preview` returns estimated customer total for a plan and optional config before ordering. + +## Availability + +- `POST /availability/check` - Check whether requested config is available at the provider +- `POST /availability/alternatives` - Suggest alternative regions or server types + +## API Endpoints + +| Method | Path | Purpose | +| ------ | ---------------------------------------------------------------- | ------------------------- | +| GET | `/subscriptions` | List user's subscriptions | +| POST | `/subscriptions` | Create subscription | +| GET | `/subscriptions/{subscriptionId}` | Get subscription detail | +| POST | `/subscriptions/{subscriptionId}/cancel` | Cancel subscription | +| POST | `/subscriptions/{subscriptionId}/resume` | Resume pending cancel | +| GET | `/subscriptions/{subscriptionId}/items` | List subscription items | +| GET | `/subscriptions/{subscriptionId}/items/{itemId}/server-info` | Live server info | +| POST | `/subscriptions/{subscriptionId}/items/{itemId}/actions/start` | Start server | +| POST | `/subscriptions/{subscriptionId}/items/{itemId}/actions/stop` | Stop server | +| POST | `/subscriptions/{subscriptionId}/items/{itemId}/actions/restart` | Restart server | + +See [Billing Manager OpenAPI](/spec/billing-manager/openapi.yaml) for schemas. + +## Related Documentation + +- **[Customer Profiles](./customer-profiles.md)** - Required before ordering +- **[Service Types and Plans](./service-types-and-plans.md)** - Catalog and provider schemas +- **[Invoices](./invoices.md)** - Open positions and billing-day accumulation +- **[Backorders](./backorders.md)** - Capacity retry queue +- **[Server Provisioning](./server-provisioning.md)** - Cloud-init and bundled stacks +- **[Dashboard and Server Control](./dashboard-and-server-control.md)** - Overview and power actions + +--- + +_For the full subscription order sequence, see the billing manager feature module diagrams._ diff --git a/docs/decabill/getting-started.md b/docs/decabill/getting-started.md new file mode 100644 index 000000000..87a579e6d --- /dev/null +++ b/docs/decabill/getting-started.md @@ -0,0 +1,232 @@ +# Getting Started with Decabill + +This guide helps you run Decabill locally, connect the billing console to the billing manager, and sign in for the first time. + +## Prerequisites + +Before you begin, ensure you have: + +- **Node.js** 24.14.1 or higher +- **Docker** and **Docker Compose** (recommended for Postgres, Redis, and Mailhog) +- **Git** (to clone the monorepo) +- **Keycloak** (optional, for OAuth2/OIDC login in the billing console) +- **Stripe test keys** (optional, for checkout and payment flows) + +## Installation + +### Option 1: Docker Compose (Recommended) + +The fastest way to run the full backend stack and the SSR billing console is Docker Compose in each application directory. + +#### Backend billing manager + +```bash +git clone https://github.com/forepath/one.git +cd one/apps/decabill/backend-billing-manager + +cp .start-containers.env.example .env +# Edit .env: set STATIC_API_KEY, ENCRYPTION_KEY, issuer fields, and TENANTS as needed + +docker compose up -d +``` + +This starts: + +- PostgreSQL 16 +- Redis 7 (host port **6380** by default) +- Billing API (`QUEUE_ROLE=api`, HTTP **3200**, WebSocket **8082**) +- Billing worker (`QUEUE_ROLE=worker`) +- Billing scheduler (`QUEUE_ROLE=scheduler`) +- Mailhog for local email capture + +Build the API image locally before the first compose run if you changed backend code: + +```bash +cd one +nx run decabill-backend-billing-manager:api-container-image +``` + +#### Frontend billing console + +In another terminal: + +```bash +cd one/apps/decabill/frontend-billing-console +docker compose up -d +``` + +The console server listens on **4500** by default. Set `CSP_CONNECT_SRC_EXTRA` in compose if the API is not reachable from the browser at the default billing manager URL. + +See **[Docker Deployment](./deployment/docker-deployment.md)** for production-oriented compose notes. + +### Option 2: Local Development with Nx + +Use Nx when you want hot reload while editing TypeScript or Angular code. + +```bash +git clone https://github.com/forepath/one.git +cd one +npm install +``` + +Start Postgres and Redis (Docker one-liners or the billing manager compose stack without the API containers). Then run: + +```bash +# Terminal 1: billing manager (QUEUE_ROLE=all runs API, worker, and scheduler in one process) +cd apps/decabill/backend-billing-manager +cp .start-containers.env.example .env +# Set QUEUE_ROLE=all, REDIS_PORT=6380 if Redis is published on the host, and auth variables + +nx serve decabill-backend-billing-manager + +# Terminal 2: billing console (Angular dev server on port 4500) +cd apps/decabill/frontend-billing-console +nx serve decabill-frontend-billing-console +``` + +For SSR parity with production, build the console and run the Express server: + +```bash +nx build decabill-frontend-billing-console +nx run decabill-frontend-billing-console:serve-server +``` + +See **[Local Development](./deployment/local-development.md)** for Bull Board, tests, and troubleshooting. + +## Configuration + +### Backend billing manager + +Create or edit `.env` in `apps/decabill/backend-billing-manager`. Minimum local settings: + +```bash +# Database +DB_HOST=localhost +DB_PORT=5432 +DB_USERNAME=postgres +DB_PASSWORD=postgres +DB_DATABASE=postgres + +# Redis (6380 when using compose host mapping) +REDIS_HOST=localhost +REDIS_PORT=6380 +REDIS_KEY_PREFIX=decabill-billing + +# Process role (local all-in-one) +QUEUE_ROLE=all + +# Authentication (choose one method) +AUTHENTICATION_METHOD=api-key +STATIC_API_KEY=dev-api-key-123 + +# Or Keycloak: +# AUTHENTICATION_METHOD=keycloak +# KEYCLOAK_AUTH_SERVER_URL=http://localhost:8380 +# KEYCLOAK_REALM=decabill +# KEYCLOAK_CLIENT_ID=billing-manager +# KEYCLOAK_CLIENT_SECRET=your-client-secret + +# Or built-in users (default in local Angular environment): +# AUTHENTICATION_METHOD=users +# JWT_SECRET=your-jwt-secret +# DISABLE_SIGNUP=false + +# Ports +PORT=3200 +WEBSOCKET_PORT=8082 + +# Multi-tenancy and console URL +TENANTS=decabill +BILLING_FRONTEND_URL=http://localhost:4500 +CORS_ORIGIN=* + +# Encryption (set before storing sensitive provider or SSH fields) +ENCRYPTION_KEY= + +# Stripe (optional) +STRIPE_SECRET_KEY= +STRIPE_WEBHOOK_SECRET= +STRIPE_CHECKOUT_SUCCESS_URL=http://localhost:4500/invoices?payment=success +STRIPE_CHECKOUT_CANCEL_URL=http://localhost:4500/invoices?payment=cancel +``` + +The full variable list is in **[Environment Configuration](./deployment/environment-configuration.md)**. + +### Frontend billing console + +Local Angular builds use `environment.decabill.ts`, which points the console at: + +- REST API: `http://localhost:3200/api` +- WebSocket: `http://localhost:8082/billing` +- Frontend URL: `http://localhost:4500` +- Default tenant id: `decabill` + +Match `authentication.type` in the environment file to the backend `AUTHENTICATION_METHOD`. The Docker SSR image exposes runtime config via the Express `/config` endpoint. See **[Frontend Billing Console](./applications/frontend-billing-console.md)**. + +## First Login + +Choose an authentication method that matches your `.env` and console environment. + +### Option A: Static API key (`STATIC_API_KEY`) + +Set `AUTHENTICATION_METHOD=api-key` and a non-empty `STATIC_API_KEY`. The billing manager accepts the key on every HTTP request: + +```bash +curl -s -H "Authorization: Bearer dev-api-key-123" \ + -H "X-Tenant: decabill" \ + http://localhost:3200/api/config +``` + +API key auth grants admin access to billing administration REST routes. It does not provide an end-user identity in the billing console UI or on the dashboard WebSocket stream. Use this path to verify the API, run automation, or integrate scripts before configuring interactive login. + +Optional: set `STATIC_API_KEY_TENANT_ID` to bind the key to one tenant. See **[Multi-tenancy](./features/multi-tenancy.md)**. + +### Option B: Keycloak + +1. Run or connect to a Keycloak realm and client for Decabill. +2. Set `AUTHENTICATION_METHOD=keycloak` and the Keycloak environment variables on the billing manager. +3. Configure the billing console for Keycloak (runtime config or build-time environment). +4. Open `http://localhost:4500/login` and complete the OAuth2/OIDC flow. + +The first user synced into a tenant receives the admin role. Subsequent synced users receive the standard user role. + +### Option C: Built-in users (common local default) + +When `AUTHENTICATION_METHOD=users` and the console `authentication.type` is `users`: + +1. Open `http://localhost:4500/register` and create an account (unless `DISABLE_SIGNUP=true`). +2. Confirm email when prompted (Mailhog UI is on port **8026** when using the billing manager compose stack). +3. Log in at `http://localhost:4500/login`. + +The first registered user in each tenant is auto-confirmed and assigned admin. Later users may need email confirmation. + +See **[Authentication](./features/authentication.md)** for flows, roles, and security notes. + +## Verify the Stack + +After login (users or Keycloak) or API key verification: + +1. Open **Overview** at `/dashboard` to see subscriptions and server status. +2. Open **Plans** at `/subscriptions` to browse service plans (admin users can manage catalog entries under **Administration**). +3. Open **Invoices** at `/invoices` for billing history and Stripe checkout when configured. +4. Admins can open **Administration** routes for service types, plans, manual billing, and customer profiles. + +Confirm WebSocket dashboard updates on the overview page when logged in as an end user (not when using API key auth alone). + +## Next Steps + +1. **[System Overview](./architecture/system-overview.md)** for the two-tier architecture +2. **[Multi-tenancy](./features/multi-tenancy.md)** if you run more than one tenant +3. **[Subscriptions](./features/subscriptions.md)** to order a service plan +4. **[Billing Administration](./features/billing-administration.md)** for manual invoices and operator dashboards +5. **[API Reference](./api-reference/README.md)** for OpenAPI and AsyncAPI specifications + +## Troubleshooting + +- Database or Redis errors: see **[Local Development](./deployment/local-development.md)**. +- Port conflicts: billing API **3200**, WebSocket **8082**, console **4500**, Redis host **6380**. +- Migrations run only when `QUEUE_ROLE` is `api` or `all`. Ensure at least one API role process has started. + +--- + +_For deployment beyond local development, see **[Production Checklist](./deployment/production-checklist.md)**._ diff --git a/docs/decabill/security/README.md b/docs/decabill/security/README.md new file mode 100644 index 000000000..dae902f64 --- /dev/null +++ b/docs/decabill/security/README.md @@ -0,0 +1,49 @@ +# Security documentation + +This section collects **security, compliance-oriented transparency, and hardening** information for Decabill: mapping to **EU Cyber Resilience Act (CRA)** and **BSI IT-Grundschutz** documentation themes, a formal **accepted-risk register**, **vulnerability reporting**, **SBOM** artifacts, and pointers to **environment variables** for production. + +For disclosure, supported versions, SBOM paths, and response-time commitments, see **[Vulnerability reporting and artifacts](./vulnerability-reporting-and-artifacts.md)**. A concise risk summary table is in **[Accepted risks](./accepted-risks.md)**. + +## Overview + +Decabill spans browsers, a NestJS billing API, Express SSR frontends (billing console and docs), Redis-backed background jobs, and optional cloud provisioning for bundled product stacks. Security is enforced through authentication modes, tenant guards, sanitized logging, content security policy choices, **hardened container images** (non-root users, no default secrets in images), Stripe webhook verification, and **documented** residual risks where product or deployment constraints apply. + +## Documentation structure + +### [Compliance and standards](./compliance-and-standards.md) + +How public documentation relates to **CRA** (Regulation (EU) 2024/2847) and **BSI IT-Grundschutz** / typical **ISMS** practice: expected artifacts, transparency goals, and a high-level product mapping. **Informative only**; conformity and certification require your own legal and audit advisors. + +### [Accepted risks (register)](./accepted-risks.md) + +Register **DR-001** through **DR-005**: provisioning SSH posture, billing multi-tenant API key scope, frontend CSP, backend authentication method resolution, and Trivy unfixed-CVE gating. Includes acceptance dates, review cadence, mitigations, and withdrawal paths. + +### [Container image security](./container-images.md) + +Runtime users (`agenstra` / `node`) for `decabill-billing-api`, `decabill-billing-console-server`, and `decabill-docs-server`. + +### [Operational hardening](./operational-hardening.md) + +Implemented controls: container image hardening, correlation IDs and access logs, tenant guard, runtime `/config` proxy behavior, CSP and `CSP_ENFORCE`, WebSocket CORS, and authentication resolution behavior. + +### [Vulnerability reporting and artifacts](./vulnerability-reporting-and-artifacts.md) + +Responsible disclosure, CycloneDX **SBOM** location on Decabill R2 (`decabill-*.cdx.json`), and downloads at **downloads.decabill.com**. + +### [CI security scanning (Trivy)](./ci-security-scanning.md) + +Automated **Trivy** scans on pull requests; CRITICAL fail gate (fixable issues only; see **[DR-005](./accepted-risks.md#dr-005--ci--local-trivy-unfixed-vulnerabilities-not-gated)**). + +## Configuration reference + +For variable-by-variable deployment settings, including **`CONFIG_*`**, **`CSP_ENFORCE`**, **`TENANTS`**, **`STATIC_API_KEY_TENANT_ID`**, and Stripe variables, see **[Environment configuration](../deployment/environment-configuration.md)** and **[Production checklist](../deployment/production-checklist.md)**. + +## Related documentation + +- **[Deployment](../deployment/README.md)** - Docker and production guides +- **[Architecture](../architecture/README.md)** - Trust boundaries and components +- **[Features](../features/README.md)** - Product capabilities including multi-tenancy and payments + +--- + +_This folder is maintained for public transparency. Regulatory applicability of the CRA and national schemes depends on how the software is supplied and used; see [Compliance and standards](./compliance-and-standards.md)._ diff --git a/docs/decabill/security/accepted-risks.md b/docs/decabill/security/accepted-risks.md new file mode 100644 index 000000000..7259f8a39 --- /dev/null +++ b/docs/decabill/security/accepted-risks.md @@ -0,0 +1,138 @@ +# Accepted risks (register) + +This register records **explicit risk acceptance** for Decabill product and deployment constraints that deviate from stricter security baselines. It supports **BSI / ISMS-style** traceability and **CRA-oriented** technical documentation (risk treatment and transparency). For vulnerability reporting, SBOM paths, and disclosure process, see **[Vulnerability reporting and artifacts](./vulnerability-reporting-and-artifacts.md)**. + +**Review cadence:** entries use acceptance **2026-05-06** and next review **2027-05-06** unless a row states otherwise; trigger an early review if cloud-init templates, billing multi-tenancy, CSP integration, authentication resolution, or Trivy gating policy change materially. + +--- + +## DR-001 - Provisioning SSH (cloud-init templates) + +| Field | Recorded value | +| ------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **ID** | DR-001 | +| **Area** | Provisioning SSH in cloud-init templates | +| **Configuration** | **`PermitRootLogin yes`** and **root** `authorized_keys` installed via provisioning scripts (`libs/domains/decabill/backend/feature-billing-manager/src/lib/utils/cloud-init/agent-controller.utils.ts`, `agent-manager.utils.ts`) | +| **Residual risk** | Compromise of the provisioning SSH private key or leakage of user-data/metadata can yield **root** on affected instances. | +| **Mitigations in scope of this repo (templates)** | SSH **key-based** access; **password authentication disabled** in generated `sshd` configuration. | +| **Compensating controls (deployer / org)** | Restrict network access (security groups, allowlisted IPs, bastion), rotate keys, monitor instances, minimize secrets in user-data. | +| **Risk owner** | Maintaining party for this repository and product security documentation (Forepath). | +| **Acceptor** | Repository maintainer (acceptance recorded in project documentation). | +| **Acceptance date** | **2026-05-06** | +| **Next review date** | **2027-05-06** | +| **Rationale (business / technical)** | First-boot automation prioritizes operational simplicity for provisioned hosts bundled with service plans. Non-root SSH and **`PermitRootLogin no`** remain the documented hardening path when constraints allow. | + +#### Operator summary (DR-001) + +Some Decabill provisioning flows generate cloud-init that configures **SSH for `root`** and installs **`authorized_keys` under `/root/.ssh/`**. This is a **known, documented** property. Mitigations in templates are **key-only** SSH and **disabled password authentication**. Deployers should add network controls, bastions, key rotation, and where possible non-root administration with **`PermitRootLogin no`**. + +--- + +## DR-002 - Billing multi-tenant API key scope (`STATIC_API_KEY_TENANT_ID` unset) + +| Field | Recorded value | +| ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **ID** | DR-002 | +| **Area** | **Billing manager** multi-tenancy with **`AUTHENTICATION_METHOD=api-key`** (or inferred api-key when **`STATIC_API_KEY`** is set). Implementation: `TenantUserGuard` in `libs/domains/decabill/backend/feature-billing-manager/src/lib/guards/tenant-user.guard.ts`; admin bypass via `ensureAdmin()` in `billing-access.utils.ts`. | +| **Configuration** | A **single** deployment-wide **`STATIC_API_KEY`**. **`STATIC_API_KEY_TENANT_ID`** is **optional**. When unset, a valid API key is accepted for **any** tenant id allowed by **`TENANTS`** / **`X-Tenant`** (each request selects the tenant via header). API key auth is treated as **admin** for billing admin routes. | +| **Residual risk** | Anyone who possesses **`STATIC_API_KEY`** can read and mutate **all** configured tenants' billing data by changing **`X-Tenant`**, not only one tenant. This is **cross-tenant admin access** from a single shared secret. | +| **Mitigations in scope of this repo** | **`STATIC_API_KEY_TENANT_ID`** optionally binds API key auth to one tenant (must match **`X-Tenant`**). User/session auth (**keycloak** / **users**) enforces per-user **`tenant_id`**. WebSocket dashboard status does **not** stream data to API key clients. | +| **Compensating controls (deployer)** | Treat **`STATIC_API_KEY`** as a **high-value** secret (rotation, least exposure, no client-side use). Prefer **keycloak** or **users** for the billing console in multi-tenant production. Set **`STATIC_API_KEY_TENANT_ID`** when automation must use API key against **one** tenant only. Use separate billing deployments or keys per tenant if policy forbids shared cross-tenant automation credentials. | +| **Risk owner** | Maintaining party for this repository and product security documentation (Forepath). | +| **Acceptor** | Repository maintainer (acceptance recorded in project documentation). | +| **Acceptance date** | **2026-06-19** | +| **Next review date** | **2027-05-06** | +| **Rationale (business / technical)** | Billing deployments use **one** static API key for automation and operator scripts. Requiring a separate key per tenant would multiply secret management without a current product requirement. **Explicit acceptance:** shared key plus optional tenant header is **intentional**; operators who need single-tenant binding use **`STATIC_API_KEY_TENANT_ID`**. | + +#### Operator summary (DR-002) + +With **`STATIC_API_KEY`** and **without** **`STATIC_API_KEY_TENANT_ID`**, the key is **not** limited to one tenant: it grants **admin-level access to every tenant** allowed by **`TENANTS`**, selected per request via **`X-Tenant`**. Set **`STATIC_API_KEY_TENANT_ID`** to restrict API key use to one tenant. Interactive users (Keycloak/JWT) remain scoped to their own tenant. See **[Environment configuration multi-tenancy](../deployment/environment-configuration.md#multi-tenancy)**. + +--- + +## DR-003 - Web frontends: CSP `unsafe-inline` / `unsafe-eval` (Monaco) + +| Field | Recorded value | +| ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| **ID** | DR-003 | +| **Area** | **decabill-frontend-billing-console** and **decabill-frontend-docs** Express servers | +| **Configuration** | **Content Security Policy** allows **`'unsafe-inline'`** and **`'unsafe-eval'`** so **Monaco Editor** and related tooling work; policy is sent as **`Content-Security-Policy-Report-Only`** by default (violations reported, not blocked). Implementation: `libs/domains/shared/frontend/util-express-server/src/lib/security-headers.ts`. | +| **Residual risk** | XSS impact can be greater than under a strict CSP; **report-only** does not block violations. | +| **Mitigations in scope of this repo** | Set **`CSP_ENFORCE=true`** only in environments where compatibility is validated; billing console compose defaults to **`CSP_ENFORCE=true`** when operators have verified connectivity to the API. | +| **Compensating controls (deployer)** | Enforce HTTPS, restrict **CORS** on the billing API, keep dependencies patched, monitor CSP reports if configured. | +| **Risk owner** | Maintaining party for this repository and product security documentation (Forepath). | +| **Acceptor** | Repository maintainer (acceptance recorded in project documentation). | +| **Acceptance date** | **2026-05-06** | +| **Next review date** | **2027-05-06** | +| **Rationale (business / technical)** | Monaco and admin tooling are **core** to billing operations; tightening without a validated strategy risks **breaking** the console. Enforcement is **opt-in** or post-verification. | + +#### Operator summary (DR-003) + +By default, CSP may be **report-only** depending on `CSP_ENFORCE`. Use **`CSP_ENFORCE=true`** only after verification. See **[Operational hardening content security policy](./operational-hardening.md#content-security-policy-frontend-express)** and **[Environment configuration](../deployment/environment-configuration.md)**. + +--- + +## DR-004 - Backend authentication method resolution + +| Field | Recorded value | +| ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **ID** | DR-004 | +| **Area** | **`getAuthenticationMethod`** in `libs/domains/identity/backend/util-auth/src/lib/hybrid-auth.guard.ts` (shared by billing manager) | +| **Configuration** | **`AUTHENTICATION_METHOD`** is **not** required to be set. When unset: if **`STATIC_API_KEY`** is set → **api-key** mode; otherwise → **keycloak**. **Protected routes are not anonymous**; Keycloak or users-mode guards still enforce authentication per configuration. | +| **Residual risk** | Deployments may **implicitly** run in **keycloak** mode without a single obvious env flag, which can surprise operators who expect an explicit mode switch. **`STATIC_API_KEY`** remains a **high-value secret** in **api-key** mode. | +| **Mitigations in scope of this repo** | Documented resolution order; **api-key** mode requires **`STATIC_API_KEY`** and validates the header; **keycloak** / **users** paths delegate to their guards. | +| **Compensating controls (deployer)** | For **api-key** or **users** deployments, set **`AUTHENTICATION_METHOD`** explicitly; treat **`STATIC_API_KEY`** with rotation and least exposure; prefer **keycloak** with the customer IdP for integrated enterprise setups. | +| **Risk owner** | Maintaining party for this repository and product security documentation (Forepath). | +| **Acceptor** | Repository maintainer (acceptance recorded in project documentation). | +| **Acceptance date** | **2026-05-06** | +| **Next review date** | **2027-05-06** | +| **Rationale (business / technical)** | Defaulting to **keycloak** when no API key is configured favors the **enterprise-typical** integrated IdP path while preserving backward compatibility for **`STATIC_API_KEY`**. | + +#### Operator summary (DR-004) + +Set **`AUTHENTICATION_METHOD`** explicitly if your policy requires **fully explicit** configuration. Never expose **`STATIC_API_KEY`**. See **[Operational hardening authentication mode](./operational-hardening.md#authentication-mode-backends)**. + +--- + +## DR-005 - CI / local Trivy: unfixed vulnerabilities not gated + +| Field | Recorded value | +| ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **ID** | DR-005 | +| **Area** | **Trivy** vulnerability scanning (`trivy.yaml` at repository root, pull-request CI, pre-commit, local image scans) | +| **Configuration** | **`vulnerability.ignore-unfixed: true`**: findings **without a Fixed Version** are **excluded from the fail gate**. Only **CRITICAL** severities with an available fix fail CI and local hooks (see [CI security scanning](./ci-security-scanning.md)). | +| **Residual risk** | Known **CRITICAL** issues may remain in dependencies, base images, or OS packages until upstream publishes a fix; they are visible in SARIF/report output but do not block merge. | +| **Mitigations in scope of this repo** | Trivy still scans for **vuln**, **secret**, and **misconfig**; **HIGH** and below are report-only; per-CVE exceptions use `.trivyignore` with traceability. Decabill SBOMs are published on release (`decabill-*.cdx.json`). | +| **Compensating controls (deployer)** | Monitor GitHub Security / SARIF artifacts; patch when fixes ship; track accepted CVEs in `.trivyignore` only when a fix exists but cannot be applied yet. | +| **Risk owner** | Maintaining party for this repository and product security documentation (Forepath). | +| **Acceptor** | Repository maintainer (acceptance recorded in project documentation). | +| **Acceptance date** | **2026-05-16** | +| **Next review date** | **2027-05-06** | +| **Rationale (business / technical)** | Blocking on unfixed CVEs creates **false failures** with no remediation path and delays delivery without reducing exploitable risk. Gating on **fixable CRITICAL** issues keeps CI actionable while acknowledging vendor lag. | + +#### Operator summary (DR-005) + +**Unfixed vulnerabilities are acceptable for pipeline gating.** Address **CRITICAL** findings that have a published fix; track anything else via SARIF and release SBOMs. Do not add unfixed CVEs to `.trivyignore` solely to silence the gate. See **[CI security scanning](./ci-security-scanning.md)**. + +--- + +## Hardening paths (if an acceptance is withdrawn) + +- **DR-001:** Prefer a non-root admin user, **`PermitRootLogin no`**, least-privilege `sudo`, and cloud-init-native `ssh_authorized_keys` where possible; reduce secrets in user-data. +- **DR-002:** Require **`STATIC_API_KEY_TENANT_ID`** whenever **`STATIC_API_KEY`** is set and **`TENANTS`** lists more than one id; or reject API key auth when multiple tenants are configured; or issue per-tenant API keys (product change). +- **DR-003:** Tighten CSP after automated and manual verification so billing console UI (including Monaco) still functions. +- **DR-004:** Require **`AUTHENTICATION_METHOD`** in all environments if auditors demand explicit configuration. +- **DR-005:** Set **`vulnerability.ignore-unfixed: false`** if policy requires failing on all CRITICAL findings regardless of fix availability. + +--- + +## Related documentation + +- **[Compliance and standards](./compliance-and-standards.md)** +- **[Operational hardening](./operational-hardening.md)** +- **[Vulnerability reporting and artifacts](./vulnerability-reporting-and-artifacts.md)** +- **[CI security scanning (Trivy)](./ci-security-scanning.md)** + +--- + +_Update this register when acceptance is renewed or withdrawn._ diff --git a/docs/decabill/security/ci-security-scanning.md b/docs/decabill/security/ci-security-scanning.md new file mode 100644 index 000000000..375b33b1b --- /dev/null +++ b/docs/decabill/security/ci-security-scanning.md @@ -0,0 +1,89 @@ +# CI security scanning (Trivy) + +The monorepo uses [Trivy](https://trivy.dev/) in GitHub Actions for automated vulnerability, secret, and misconfiguration detection on **all products including Decabill**. Defaults are defined in `trivy.yaml` at the repository root. + +## What is scanned + +| Scan | When | Scope | +| -------------------- | ------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **Filesystem** | Every pull request | Dependencies (lockfiles), secrets, IaC/misconfig in the repo | +| **Config** | Every pull request | Dockerfiles, Compose, GitHub Actions, and related IaC | +| **Container images** | Pull request CI | `ghcr.io/forepath/*` images including **decabill-billing-api**, **decabill-billing-console-server**, and **decabill-docs-server** when built on the runner | + +Scanners enabled for filesystem scans: **vuln**, **secret**, **misconfig**. + +## Workflows + +| Workflow | Jobs | +| ------------------------------------------- | ----------------------------------------------------------------------------------- | +| `.github/workflows/pull-request-checks.yml` | `trivy-filesystem`, `trivy-config`, plus image scans after each container build job | + +The `.github/workflows/release.yml` workflow does **not** run Trivy vulnerability scans; pull-request scans are the CI gate before merge. Releases publish **Nx service SBOMs** and **Trivy CycloneDX container image SBOMs** to Dependency Track and the Decabill R2 bucket. + +## Severity policy + +| Setting | Value | +| ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **Fail pipeline** | CRITICAL | +| **Report only** | HIGH, MEDIUM, LOW (visible in SARIF when uploaded) | +| **Unfixed CVEs** | Ignored (`vulnerability.ignore-unfixed: true`) - findings without a Fixed Version do not fail the gate; see **[DR-005](./accepted-risks.md#dr-005--ci--local-trivy-unfixed-vulnerabilities-not-gated)** | + +## Viewing results + +1. **GitHub Security → Code scanning alerts** - when code scanning is enabled for the repository. +2. **Workflow run artifacts** - SARIF files uploaded when code scanning upload is unavailable (`trivy-sarif-*` artifacts). + +SARIF categories include `trivy-fs`, `trivy-config`, and `trivy-images-*` on pull requests. + +## Triage and exceptions + +1. **Prefer fixing** - upgrade dependencies, base images, or configuration. +2. **Documented ignore** - open a PR that adds the CVE to `.trivyignore`, reference an **[accepted-risk](./accepted-risks.md)** entry (or document a false positive), and note a **review/expiry date** in the PR description. +3. **Do not** weaken `trivy.yaml` for one-off exceptions. + +See **[Accepted risks](./accepted-risks.md)** for deliberate product-level deviations, including **[DR-005](./accepted-risks.md#dr-005--ci--local-trivy-unfixed-vulnerabilities-not-gated)**. + +## Local reproduction + +**Pre-commit (filesystem + config, same CRITICAL gate as CI):** + +```bash +./tools/ci/trivy-pre-commit.sh +``` + +This runs automatically via `.husky/pre-commit` on every commit. Install [Trivy](https://trivy.dev/latest/docs/installation/) before your first commit on a machine. + +**Manual full scans:** + +```bash +trivy fs . --config trivy.yaml --quiet +trivy config . --config trivy.yaml --quiet +trivy image ghcr.io/forepath/decabill-billing-api:latest --config trivy.yaml --quiet +``` + +After building Decabill images locally: + +```bash +./tools/ci/trivy-scan-local-images.sh +./tools/ci/trivy-generate-image-sboms.sh +``` + +| Scan type | Pre-commit | Pull request CI | +| ----------------------- | ---------- | --------------- | +| Filesystem (`trivy fs`) | Yes | Yes | +| Config (`trivy config`) | Yes | Yes | +| Container images | No | Yes (per build) | + +## Relationship to SBOM and Dependency Track + +- **Service CycloneDX SBOMs** are generated by Nx (`sbom` target) for Decabill projects (`decabill-*.cdx.json`). +- **Container image CycloneDX SBOMs** are generated by Trivy (`container-decabill-*.cdx.json`). +- **Pull requests** upload SBOM files as the `sbom-artifacts` artifact. +- **Releases** publish to Dependency Track and copy files under `dist/sboms/` to the **Decabill R2 bucket** - see **[Vulnerability reporting and artifacts](./vulnerability-reporting-and-artifacts.md#software-bill-of-materials-sbom)**. +- **Trivy** vulnerability scans (PR) provide the **CI gate**; SBOM generation uses Trivy CycloneDX output separately from SARIF scans. + +## Related documentation + +- **[Security overview](./README.md)** +- **[Vulnerability reporting and artifacts](./vulnerability-reporting-and-artifacts.md)** +- **[Container image security](./container-images.md)** - Decabill image names and hardening diff --git a/docs/decabill/security/compliance-and-standards.md b/docs/decabill/security/compliance-and-standards.md new file mode 100644 index 000000000..128978bab --- /dev/null +++ b/docs/decabill/security/compliance-and-standards.md @@ -0,0 +1,63 @@ +# Compliance and standards (EU CRA and BSI IT-Grundschutz) + +This page explains what **EU Cyber Resilience Act (CRA)** and **BSI IT-Grundschutz** frameworks typically expect in terms of **documented** cybersecurity evidence, and how **Decabill** public documentation is intended to support **transparency** and **operator due diligence**. It is **informative**, not legal advice. Conformity, CE marking, organizational certification, and audit scope must be confirmed with qualified advisors for your role (manufacturer, importer, deployer, or integrator) and jurisdiction. + +## EU Cyber Resilience Act (CRA) + +**Legal act:** [Regulation (EU) 2024/2847](https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A32024R2847) (CRA). Official summary and FAQs: [Cyber Resilience Act](https://digital-strategy.ec.europa.eu/en/policies/cyber-resilience-act) (European Commission). + +### Scope and open source (high level) + +The CRA applies to **products with digital elements** when they are **made available on the Union market** in the course of a **commercial activity**. Whether Decabill or a particular derivative counts as in scope for you depends on **your** distribution model, not on this documentation alone. + +### Documentation and transparency obligations (themes) + +| Theme | What the regulation generally expects | Role of Decabill documentation | +| --------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **Risk assessment** | Identify and assess cybersecurity risks in light of intended and reasonably foreseeable use. | **[Operational hardening](./operational-hardening.md)** and **[Architecture](../architecture/README.md)** describe trust boundaries and controls. **[Accepted risks](./accepted-risks.md)** records deliberate residual risk and compensating measures. | +| **Technical documentation** | Document the risk assessment and means chosen to meet **essential cybersecurity requirements** (Annex I). | This security section, deployment and environment docs, and the risk register form the **public** technical narrative. Build pipelines and internal records may hold additional evidence. | +| **Secure by design and default** | Implement Annex I requirements (hardening, confidentiality and integrity of data, limited attack surface). | **[Operational hardening](./operational-hardening.md)**, **[Container image security](./container-images.md)**, **[Production checklist](../deployment/production-checklist.md)**, and **[Environment configuration](../deployment/environment-configuration.md)** describe production-oriented controls. | +| **Vulnerability handling** | Establish processes to identify and remediate vulnerabilities **without undue delay**; supply **security updates**. | **[Vulnerability reporting and artifacts](./vulnerability-reporting-and-artifacts.md)** describes coordinated disclosure, supported versions, and response commitments. | +| **Information for the user (Annex II)** | Provide instructions so users can **install, operate, and maintain** the product securely. | **[Getting Started](../getting-started.md)**, **[Deployment](../deployment/README.md)**, **[Environment configuration](../deployment/environment-configuration.md)**, and **[Vulnerability reporting and artifacts](./vulnerability-reporting-and-artifacts.md)** support operator understanding. | +| **Conformity assessment** | Complete applicable **conformity assessment** before placing on the market when in scope. | Not asserted here. Deployers integrate Decabill into their own systems; **your** conformity strategy may combine this product with infrastructure and services. | + +### Application timeline (CRA) + +The CRA **entered into force** on 10 December 2024. **Full application** of many operational provisions is **11 December 2027**. Refer to the Official Journal text and Commission guidance for dates that matter to your role. + +## BSI IT-Grundschutz + +**Context:** [IT-Grundschutz](https://www.bsi.bund.de/EN/Themen/Unternehmen-und-Organisationen/Standards-und-Zertifizierung/IT-Grundschutz/it-grundschutz_node.html) (German Federal Office for Information Security, BSI) provides a structured method for **information security management** in organizations. **Decabill documentation does not replace** an organizational **security concept** or **IT-Grundschutz audit** for your enterprise. + +### Documentation expectations (themes) + +| Theme | Typical expectation | How Decabill documentation supports it | +| --------------------------------------- | --------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **Security concept and scope** | Describe the target of protection, boundaries, and roles. | **[System overview](../architecture/system-overview.md)** and **[Architecture](../architecture/README.md)**. | +| **Protection needs and risk treatment** | Classify protection needs; treat risks with rationale and owners. | **[Accepted risks](./accepted-risks.md)** gives **explicit acceptance**, **owners**, **dates**, **review cadence**, and **compensating controls**. | +| **Requirement fulfillment** | Record fulfillment and justify deviations. | Accepted-risk entries document **deviations** with **mitigations** and **review** dates. **[Operational hardening](./operational-hardening.md)** states implemented controls. | +| **Operational measures** | Logging, configuration management, incident handling, and supplier relationships. | **[Operational hardening](./operational-hardening.md)**, **[Vulnerability reporting and artifacts](./vulnerability-reporting-and-artifacts.md)**, deployment guides. | + +Formal IT-Grundschutz certification requires **organizational** processes; this English **open** documentation is aimed at **global** transparency and **supplier** due diligence. + +## Trust boundaries (summary) + +1. **Browser** to **Express frontend** (billing console or docs) to **billing manager API** (`/api`). +2. **Browser** to **billing WebSocket** (`/billing` namespace) for dashboard status (interactive auth only; API key clients do not receive dashboard streams). +3. **Billing manager** to **Stripe** for payments and webhooks. +4. **Billing manager** to **cloud provider APIs** (Hetzner, DigitalOcean) and **SSH** for provisioning (see **DR-001** in **[Accepted risks](./accepted-risks.md)**). +5. **Worker processes** to **Redis**, **Postgres**, **SMTP**, and external APIs during background jobs. + +Detail: **[Container image security](./container-images.md)**, **[Operational hardening](./operational-hardening.md)**. + +## Related documentation + +- **[Accepted risks](./accepted-risks.md)** +- **[Operational hardening](./operational-hardening.md)** +- **[Container image security](./container-images.md)** +- **[Vulnerability reporting and artifacts](./vulnerability-reporting-and-artifacts.md)** +- **[Environment configuration](../deployment/environment-configuration.md)** + +--- + +_For regulatory interpretation and conformity decisions, consult qualified legal and compliance advisors._ diff --git a/docs/decabill/security/container-images.md b/docs/decabill/security/container-images.md new file mode 100644 index 000000000..2c5598c19 --- /dev/null +++ b/docs/decabill/security/container-images.md @@ -0,0 +1,98 @@ +# Container image security + +This page documents **first-party Decabill Docker images**: runtime users, secrets handling, and build conventions. It complements **[Operational hardening](./operational-hardening.md)** and **[Docker deployment](../deployment/docker-deployment.md)**. + +## Published images + +| Image | Application | Registry reference | +| ----------------------------------- | ---------------------------- | --------------------------------------------------------- | +| **decabill-billing-api** | Backend billing manager | `ghcr.io/forepath/decabill-billing-api:latest` | +| **decabill-billing-console-server** | Frontend billing console SSR | `ghcr.io/forepath/decabill-billing-console-server:latest` | +| **decabill-docs-server** | Frontend docs SSR | `ghcr.io/forepath/decabill-docs-server:latest` | + +Build targets: + +```bash +nx docker:api decabill-backend-billing-manager +nx docker:server decabill-frontend-billing-console +nx docker:server decabill-frontend-docs +``` + +## Runtime users + +| Image family | User | Default UID/GID | Notes | +| -------------------------- | ---------- | --------------- | ---------------------------------- | +| **decabill-billing-api** | `agenstra` | **10001** | `ARG APP_UID` / `APP_GID` at build | +| **billing-console-server** | `node` | **1000** | Alpine-based SSR image | +| **docs-server** | `node` | **1000** | Alpine-based SSR image | + +Processes do **not** run as root after container start. + +## Billing API image (`decabill-billing-api`) + +Source: `apps/decabill/backend-billing-manager/Dockerfile.api` + +- Exposes **3200** (HTTP API) and **8082** (WebSocket) +- Health check: `GET /api/health` +- **No Docker socket mount** (billing does not orchestrate agent containers on the host) +- Secrets (database, Stripe, `ENCRYPTION_KEY`, `STATIC_API_KEY`, cloud API tokens) are supplied at **deploy time**, not as default `ENV` in the image + +### Volumes (typical compose) + +| Mount | Purpose | +| -------------------- | ----------------------------------------- | +| `invoice_pdf_data` | Invoice PDFs at `/data/invoices` | +| `./provider-plugins` | Optional dynamic payment/provider plugins | + +### Build arguments + +| Argument | Purpose | Default | +| --------- | --------------------------- | --------- | +| `APP_UID` | Runtime user `agenstra` UID | **10001** | +| `APP_GID` | Runtime user `agenstra` GID | **10001** | + +Unlike agent orchestration API images, the billing API image does **not** require `DOCKER_GID` because it does not access `/var/run/docker.sock`. + +## Billing console server image (`decabill-billing-console-server`) + +Source: `apps/decabill/frontend-billing-console/Dockerfile.server` + +- Default `PORT=4500` +- Runs as **`node`** (UID **1000**) +- Runtime `CONFIG` URL and CSP variables documented in **[Environment configuration](../deployment/environment-configuration.md)** +- Compose often sets `CSP_CONNECT_SRC_EXTRA` to reach the billing API from the browser + +## Docs server image (`decabill-docs-server`) + +Source: `apps/shared/frontend-docs/Dockerfile.server` (same pattern as billing console) + +- Default `PORT=4200` +- Runs as **`node`** (UID **1000**) +- Static documentation content; typically fewer `connect-src` requirements than the billing console + +## Secrets and configuration + +- Do not rely on image defaults for database passwords, Stripe keys, or API keys +- Set variables in Compose, Kubernetes secrets, or your orchestrator +- `ENCRYPTION_KEY` must be provided in production for encrypted subscription item fields + +## Image scanning + +Container images built in CI are scanned with Trivy on pull requests. Decabill images are included when built in the PR pipeline. See **[CI security scanning](./ci-security-scanning.md)** and **[DR-005](./accepted-risks.md#dr-005--ci--local-trivy-unfixed-vulnerabilities-not-gated)**. + +Release publishes CycloneDX SBOMs for Decabill images as `container-decabill-*.cdx.json`. See **[Vulnerability reporting and artifacts](./vulnerability-reporting-and-artifacts.md)**. + +## Coordinated upgrades + +Deploy **billing API, worker, and scheduler** containers from the **same release tag** when schema migrations or queue job contracts change. Mismatched tags between API and workers can cause job processing errors after deployments. + +## Related documentation + +- **[Operational hardening](./operational-hardening.md)** - Summary table and cross-links +- **[Docker deployment](../deployment/docker-deployment.md)** - Compose services +- **[Production checklist](../deployment/production-checklist.md)** - Pre-flight checks +- **[Background jobs](../deployment/background-jobs.md)** - Worker and scheduler images use the same billing API image with different `QUEUE_ROLE` + +--- + +_For provisioning SSH accepted risk on provisioned instances, see [DR-001](./accepted-risks.md#dr-001--provisioning-ssh-cloud-init-templates)._ diff --git a/docs/decabill/security/operational-hardening.md b/docs/decabill/security/operational-hardening.md new file mode 100644 index 000000000..406fffb49 --- /dev/null +++ b/docs/decabill/security/operational-hardening.md @@ -0,0 +1,107 @@ +# Operational hardening + +This page describes **implemented** security controls for Decabill that operators and security reviewers should know about. For **environment variable names and defaults**, see **[Environment configuration](../deployment/environment-configuration.md)**. + +## Container images (Docker) + +First-party Decabill images are hardened for production use. Full detail: **[Container image security](./container-images.md)**. + +| Practice | Detail | +| ----------------------- | --------------------------------------------------------------------------------------------------------------------------- | +| **Non-root runtime** | Billing API runs as **`agenstra`** (UID/GID **10001** by default); frontend servers run as **`node`** (**1000**). | +| **No baked-in secrets** | Database, Stripe, encryption keys, and API keys are **not** defaulted in image `ENV`; operators supply them at deploy time. | +| **No Docker socket** | Billing manager does not mount `/var/run/docker.sock`; provisioning uses cloud APIs and SSH from worker processes. | +| **Image scanning** | Repository `trivy.yaml` configures filesystem/config/image scans; CI fails on fixable CRITICAL findings. | + +Deploy **billing API, worker, and scheduler** from the **same release tag** when migrations or job handlers change. + +## Authentication mode (backends) + +Resolution is implemented in **`getAuthenticationMethod`** (`libs/domains/identity/backend/util-auth/src/lib/hybrid-auth.guard.ts`): + +- If **`AUTHENTICATION_METHOD`** is set to **`api-key`**, **`keycloak`**, or **`users`**, that value is used. +- If **`AUTHENTICATION_METHOD`** is **unset** or invalid: + - If **`STATIC_API_KEY`** is set → effective mode **`api-key`**. + - Otherwise → effective mode **`keycloak`**. + +**`api-key`** without **`STATIC_API_KEY`** fails at runtime. Health endpoints **`/api/health`** and **`/health`** remain unauthenticated by design. + +**Operator note:** Set **`AUTHENTICATION_METHOD`** explicitly if your security policy requires unambiguous configuration. See **DR-004** in **[Accepted risks](./accepted-risks.md)**. + +## Billing manager multi-tenancy + +| Control | Purpose | +| ------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | +| **`X-Tenant` header** | Selects tenant context on HTTP and billing WebSocket handshakes. Validated against **`TENANTS`**; unknown ids → **400**. | +| **`TenantUserGuard`** | Ensures authenticated users' **`tenant_id`** matches the request tenant. | +| **`STATIC_API_KEY_TENANT_ID`** | Optional bind of API key auth to one tenant. | + +**Accepted risk [DR-002](./accepted-risks.md#dr-002--billing-multi-tenant-api-key-scope-static_api_key_tenant_id-unset):** With **`STATIC_API_KEY`** and **without** **`STATIC_API_KEY_TENANT_ID`**, one deployment API key grants **admin access to every tenant** in **`TENANTS`** (tenant chosen per request via **`X-Tenant`**). Interactive **keycloak** / **users** sessions remain limited to the user's tenant. + +Code: `libs/domains/decabill/backend/feature-billing-manager/src/lib/guards/tenant-user.guard.ts`, `libs/domains/shared/backend/util-http-context/src/lib/tenant-id.middleware.ts`. + +## Stripe webhooks + +- Webhook signatures verified with **`STRIPE_WEBHOOK_SECRET`** +- Invalid signatures are rejected; do not disable verification in production +- Route webhook URL only to the billing API ingress; restrict by network policy where possible + +## Logging and correlation + +- **Correlation ID middleware** runs first on the billing API: accepts or generates `X-Correlation-Id` / `X-Request-Id`, binds AsyncLocalStorage, sets the response header, logs one **access line per request** with **path only** (no query string) and **`redactSecretsInString`** (Bearer, Basic, ApiKey-style fragments, email patterns). +- **`CorrelationAwareConsoleLogger`** adds `[corr=…]` (text) or `correlationId` (JSON) to Nest framework logs inside the request async context. + +Code: `libs/domains/shared/backend/util-http-context/`. + +Do not log Stripe secrets, full card data, or `STATIC_API_KEY` values. + +## Frontend runtime configuration (`GET /config`) + +When **`CONFIG`** points to a remote JSON URL, Express servers validate fetches using **`@forepath/shared/frontend/util-runtime-config-server`**: + +- Production: **HTTPS** unless **`CONFIG_ALLOW_INSECURE_HTTP=true`**; **`CONFIG_ALLOWED_HOSTS`** required when `CONFIG` is set. +- Timeout, max bytes, JSON object shape, content-type, redirect blocking, optional key count/depth limits. +- DNS check against private/loopback resolution (skippable via **`CONFIG_SKIP_DNS_CHECK`** in exceptional cases). + +**`CONFIG_ALLOWED_HOSTS`** supports **`*`** to explicitly allow **any host**. Prefer explicit host allowlists in production. + +Applies to **decabill-frontend-billing-console** and **decabill-frontend-docs**. + +See **[Environment configuration frontend applications](../deployment/environment-configuration.md#frontend-applications-express-ssr)**. + +## Content Security Policy (frontend Express) + +- CSP includes **`'unsafe-inline'`** and **`'unsafe-eval'`** for Monaco and tooling; default delivery is **`Content-Security-Policy-Report-Only`** unless **`CSP_ENFORCE=true`**. +- Billing console compose often sets **`CSP_ENFORCE=true`** after operators verify API connectivity via **`CSP_CONNECT_SRC_EXTRA`**. + +Accepted risk: **DR-003** in **[Accepted risks](./accepted-risks.md)**. + +## WebSocket CORS (billing manager) + +- **`WEBSOCKET_CORS_ORIGIN`**: comma-separated allowed origins for the billing Socket.IO server. +- In **production**, if unset, behavior follows Nest/Socket.IO configuration; set explicitly to your billing console origins. + +Dashboard status streaming is available to interactive authenticated users, not to API key clients. + +## Origin allowlist (unsafe HTTP methods) + +Browser-originated **state-changing** requests can be restricted by origin allowlist middleware on backends (`origin-allowlist.middleware.ts` in identity util-auth). Configure per deployment expectations. + +## Bull Board + +When enabled, `/admin/queues` uses HTTP Basic auth and bypasses API HybridAuthGuard so operators can manage jobs. Restrict network access to this path in production. See **[Background jobs](../deployment/background-jobs.md)**. + +## Provisioning SSH + +Cloud-init templates may configure root SSH for first-boot automation. See **DR-001** in **[Accepted risks](./accepted-risks.md)**. + +## Related documentation + +- **[Accepted risks](./accepted-risks.md)** - DR-001 through DR-005 +- **[Environment configuration](../deployment/environment-configuration.md)** +- **[Production checklist](../deployment/production-checklist.md)** +- **[Vulnerability reporting and artifacts](./vulnerability-reporting-and-artifacts.md)** - Disclosure and response commitments + +--- + +_For provisioning SSH, CSP, and API key scope operator summaries, see [Accepted risks](./accepted-risks.md)._ diff --git a/docs/decabill/security/vulnerability-reporting-and-artifacts.md b/docs/decabill/security/vulnerability-reporting-and-artifacts.md new file mode 100644 index 000000000..b3067c646 --- /dev/null +++ b/docs/decabill/security/vulnerability-reporting-and-artifacts.md @@ -0,0 +1,126 @@ +# Vulnerability reporting and artifacts + +This page documents **responsible disclosure**, **supported versions**, **SBOM** publication for Decabill, and download locations. It is the copy intended for readers who stay inside the Decabill documentation tree. + +## Supported versions and security updates + +| Version | Supported | +| ------------------- | --------- | +| 2.x.x | Yes | +| 1.x.x | No | +| 0.x.x | No | +| Earlier major lines | No | + +Security updates are intended for supported **2.x.x** releases. + +**CRA / operator context:** If you **place a product with digital elements on the EU market** and must state a **support period** end date (month and year) for users, derive it from **your** release and maintenance policy. This open-source project publishes **SBOMs** per release and documents supported lines and disclosure here so integrators can align their own statements with upstream practice. + +## Our response commitment + +- **48-hour acknowledgment** of security reports +- **Regular updates** on investigation progress +- **Coordinated disclosure** with security researchers +- **Timely fixes** for confirmed vulnerabilities +- **Public acknowledgment** of security researchers + +**Target response times** (after acknowledgment): **Critical** - 24 hours; **High** - 48 hours; **Medium** - 1 week; **Low** - 2 weeks. **Emergency contact** for critical security issues is available **24/7** via **soc@forepath.io**. General inquiries: **hi@forepath.io**. + +## Reporting a vulnerability + +Responsible disclosure is appreciated. + +### How to report + +**Do not** report security vulnerabilities through **public GitHub issues**. + +Report to the security team: + +- **Email:** soc@forepath.io +- **Subject:** `[SECURITY] Decabill Vulnerability Report` +- **Initial response:** aim to respond within **48 hours** + +### What to include + +1. **Description** - Clear description of the vulnerability +2. **Impact** - Potential impact and severity +3. **Steps to reproduce** - Detailed steps +4. **Affected versions** - Which releases are affected +5. **Suggested fix** - If you have ideas +6. **Contact information** - How to reach you for follow-up + +### Process (summary) + +1. Acknowledgment (target: within 48 hours) +2. Assessment and validation +3. Fix development and testing +4. Coordinated disclosure +5. Release and advisory (where applicable) + +### If you discover an issue + +1. Do **not** create a public issue or post details publicly before coordination. +2. Email **soc@forepath.io** with as much detail as possible. +3. Allow time for investigation and fix before public disclosure. + +--- + +## Continuous scanning (CI) + +Pull requests run **[Trivy](https://trivy.dev/)** scans (dependencies, secrets, misconfigurations, and container images). CRITICAL findings fail the PR pipeline unless documented in `.trivyignore`. The release workflow does not re-run Trivy vulnerability gating. + +See **[CI security scanning (Trivy)](./ci-security-scanning.md)** for workflows, severity policy, SARIF locations, and local reproduction. + +--- + +## Software Bill of Materials (SBOM) + +CycloneDX SBOM files are published for each release. **Decabill** publishes to a dedicated object-store bucket; the object key layout matches other Forepath product domains. + +| Field | Value | +| ---------------- | --------------------------- | +| **Path pattern** | `releases//sboms/` | +| **Example** | `releases/2.0.0/sboms/` | + +**Buckets and credentials (production `production` environment secrets):** + +Shared R2 credentials: `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`, `AWS_REGION` + +| Domain | Product-specific secrets | +| -------- | -------------------------------------------------------- | +| Decabill | `DECABILL_AWS_BUCKET`, `DECABILL_CLOUDFLARE_R2_ENDPOINT` | + +**Decabill SBOM files:** + +- Service SBOMs: `decabill-*.cdx.json` +- Container image SBOMs: `container-decabill-*.cdx.json` +- Legacy container naming: `container-agenstra-billing-*.cdx.json` (older release lines) + +**Sources:** + +- **Service SBOMs** - Nx `sbom` target (`dist/sboms/.cdx.json`) +- **Container image SBOMs** - Trivy CycloneDX (`dist/sboms/container-.cdx.json`) for images built in the release pipeline + +Pull requests upload service and container SBOM files as the **`sbom-artifacts`** workflow artifact. Releases upload each container image SBOM to Dependency-Track with `forepath/gh-upload-sbom@v2`. + +### Downloads + +Resolve `` from your deployment or from **[Downloads](https://downloads.decabill.com/)**, then substitute it in the path: + +`releases//sboms/decabill-*.cdx.json` + +Example public download site: **https://downloads.decabill.com/** + +--- + +## Related documentation + +- **[Accepted risks](./accepted-risks.md)** - Documented residual risks +- **[Operational hardening](./operational-hardening.md)** +- **[Compliance and standards](./compliance-and-standards.md)** +- **[Deployment production checklist](../deployment/production-checklist.md)** +- **[CI security scanning](./ci-security-scanning.md)** + +### External references + +- [OWASP Top 10](https://owasp.org/www-project-top-ten/) +- [NIST Cybersecurity Framework](https://www.nist.gov/cyberframework) diff --git a/docs/decabill/troubleshooting/README.md b/docs/decabill/troubleshooting/README.md new file mode 100644 index 000000000..1e36e078d --- /dev/null +++ b/docs/decabill/troubleshooting/README.md @@ -0,0 +1,71 @@ +# Troubleshooting Documentation + +This section provides guides for troubleshooting common issues and debugging problems in Decabill. + +## Overview + +Troubleshooting guides help you: + +- Identify and resolve common billing and deployment problems +- Debug API, WebSocket, queue, and payment issues effectively +- Understand error messages and log patterns +- Find solutions quickly + +## Troubleshooting Guides + +### [Common Issues](./common-issues.md) + +Common problems and their solutions: + +- Connection and CORS issues +- Authentication and multi-tenancy problems +- Stripe payment and webhook errors +- Background job and Redis failures +- Database and migration issues + +### [Debugging Guide](./debugging-guide.md) + +Debugging strategies and tools: + +- Logging and log analysis +- Bull Board and queue inspection +- API and WebSocket testing +- Performance debugging + +## Quick Troubleshooting + +### Connection Issues + +- Check billing API is running on port **3200** +- Verify billing console `API_URL` and `CSP_CONNECT_SRC_EXTRA` +- Confirm `CORS_ORIGIN` includes the console origin + +### Authentication Problems + +- Verify API key or Keycloak token +- Check **`X-Tenant`** header matches an allowed tenant +- Review **`STATIC_API_KEY_TENANT_ID`** if API key auth fails for some tenants + +### Background Jobs + +- Confirm Redis on port **6380** (compose default) is reachable +- Ensure API container is healthy before worker starts +- Open Bull Board at `http://localhost:3200/admin/queues` + +## Getting Help + +If you encounter issues: + +1. Check **[Common Issues](./common-issues.md)** +2. Review **[Debugging Guide](./debugging-guide.md)** +3. Check application and worker logs +4. Consult **[Deployment](../deployment/README.md)** and **[Environment configuration](../deployment/environment-configuration.md)** + +## Related Documentation + +- **[Security accepted risks](../security/accepted-risks.md)** - Known documented behaviors (DR-001 through DR-005) +- **[Background jobs](../deployment/background-jobs.md)** - Queue roles and Bull Board + +--- + +_For specific issues, see [Common Issues](./common-issues.md)._ diff --git a/docs/decabill/troubleshooting/common-issues.md b/docs/decabill/troubleshooting/common-issues.md new file mode 100644 index 000000000..890b84e54 --- /dev/null +++ b/docs/decabill/troubleshooting/common-issues.md @@ -0,0 +1,203 @@ +# Common Issues + +Common problems and their solutions in Decabill. + +## Connection Issues + +### Billing Console Cannot Reach API + +**Symptoms**: Network errors in browser console; failed `fetch` to billing API + +**Solutions**: + +- Verify billing manager is running: `nx serve decabill-backend-billing-manager` or `docker compose ps` +- Check API URL in console configuration: `http://localhost:3200` +- In Docker, set `CSP_CONNECT_SRC_EXTRA` to the API origin (compose default: `http://host.docker.internal:3200`) +- Verify `CORS_ORIGIN` on the API includes the console origin (or `*` in development) + +### WebSocket Connection Fails + +**Symptoms**: Dashboard status does not update; WebSocket errors in browser console + +**Solutions**: + +- Verify WebSocket URL: `http://localhost:8082` (namespace `billing`) +- Check `WEBSOCKET_CORS_ORIGIN` includes the console origin +- Confirm you are using interactive auth (Keycloak/users); API key clients do not receive dashboard streams +- Ensure **`X-Tenant`** is sent on the handshake when using multi-tenant setups + +## Authentication Problems + +### "Unauthorized" Errors (401) + +**Symptoms**: API requests return 401 Unauthorized + +**Solutions**: + +- Verify `Authorization` header or Keycloak token is valid +- Check `STATIC_API_KEY` matches server configuration +- Review `AUTHENTICATION_METHOD` and implicit resolution (see **[DR-004](../security/accepted-risks.md#dr-004--backend-authentication-method-resolution)**) + +### "Forbidden" or Tenant Errors (400/403) + +**Symptoms**: Requests fail with tenant-related errors + +**Solutions**: + +- Send **`X-Tenant`** header matching an id in **`TENANTS`** +- For user auth, ensure user's `tenant_id` matches **`X-Tenant`** +- With API key auth, set **`STATIC_API_KEY_TENANT_ID`** if the key is bound to one tenant (see **[DR-002](../security/accepted-risks.md#dr-002--billing-multi-tenant-api-key-scope-static_api_key_tenant_id-unset)**) + +### Keycloak Authentication Fails + +**Symptoms**: Login redirect loops or token errors + +**Solutions**: + +- Verify Keycloak server URL, realm, client id, and secret +- Check Keycloak client redirect URIs include the billing console URL +- Review Keycloak server logs + +## Stripe and Payment Issues + +### Checkout Session Fails + +**Symptoms**: Stripe checkout does not start or returns errors + +**Solutions**: + +- Verify `STRIPE_SECRET_KEY` is set and matches Stripe dashboard mode (test vs live) +- Check `STRIPE_CHECKOUT_SUCCESS_URL` and `STRIPE_CHECKOUT_CANCEL_URL` point to valid console URLs +- Review billing API logs for Stripe API errors + +### Webhook Events Not Processed + +**Symptoms**: Payments succeed in Stripe but invoice status does not update + +**Solutions**: + +- Confirm webhook endpoint URL is reachable from Stripe +- Verify `STRIPE_WEBHOOK_SECRET` matches the endpoint signing secret in Stripe dashboard +- Check worker container is running (`QUEUE_ROLE=worker`) +- Inspect failed jobs in Bull Board at `/admin/queues` + +## Background Jobs and Redis + +### Jobs Not Running + +**Symptoms**: Subscriptions not billed; reminders not sent; overdue invoices not updated + +**Solutions**: + +- Confirm Redis is running (compose: port **6380** on host) +- Verify `REDIS_HOST`, `REDIS_PORT`, and `REDIS_KEY_PREFIX=decabill-billing` +- Ensure scheduler container is running with `QUEUE_ROLE=scheduler` +- Ensure worker container is running with `QUEUE_ROLE=worker` +- API must be healthy first (migrations applied) + +### Bull Board Not Accessible + +**Symptoms**: 401 on `/admin/queues` or connection refused + +**Solutions**: + +- Use URL `http://localhost:3200/admin/queues` (not `/api/admin/queues`) +- Set `QUEUE_BULL_BOARD_ENABLED=true` on API container +- Provide `QUEUE_BULL_BOARD_USERNAME` and `QUEUE_BULL_BOARD_PASSWORD` +- In production, password is required when board is enabled + +### Redis Connection Errors in Worker Logs + +**Symptoms**: Worker or scheduler cannot connect to Redis + +**Solutions**: + +- From host dev: `REDIS_PORT=6380` when using compose Redis mapping +- Inside compose network: `REDIS_HOST=redis`, `REDIS_PORT=6379` +- Check Redis health: `docker compose exec redis redis-cli ping` + +## Database Issues + +### Database Connection Fails + +**Symptoms**: API fails to start; migration errors + +**Solutions**: + +- Verify PostgreSQL is running +- Check `DB_HOST`, `DB_PORT`, `DB_USERNAME`, `DB_PASSWORD`, `DB_DATABASE` +- Ensure only API or `all` role runs migrations on startup + +### Migration Errors + +**Symptoms**: Schema errors after upgrade + +**Solutions**: + +- Start API container alone and wait for healthy status before workers +- Review migration logs from `QUEUE_ROLE=api` container +- Restore from backup if partial migration occurred in production + +### Encryption Key Errors + +**Symptoms**: Errors reading encrypted subscription item fields + +**Solutions**: + +- Set `ENCRYPTION_KEY` consistently across API, worker, and scheduler +- Do not change `ENCRYPTION_KEY` without a data migration plan for encrypted columns + +## CORS and CSP Issues + +### CORS Errors in Browser + +**Symptoms**: CORS errors in browser console on API calls + +**Solutions**: + +- Set `CORS_ORIGIN` to the billing console origin (comma-separated for multiple) +- In production, unset `CORS_ORIGIN` disables CORS entirely + +### CSP Blocks API Calls + +**Symptoms**: CSP violations in console; blocked `connect-src` + +**Solutions**: + +- Add API origin to `CSP_CONNECT_SRC_EXTRA` +- In production, HTTPS API URLs must be listed explicitly (scheme keywords alone are insufficient for plain HTTP) +- Test with `CSP_ENFORCE=false` temporarily to confirm CSP is the cause + +## Provisioning Issues + +### Server Provisioning Fails + +**Symptoms**: Subscription items stuck in provisioning or backorder states + +**Solutions**: + +- Verify `HETZNER_API_TOKEN` or `DIGITALOCEAN_API_TOKEN` is valid +- Check worker logs for cloud API errors +- Inspect `backorder-retry` jobs in Bull Board +- Review **[DR-001](../security/accepted-risks.md#dr-001--provisioning-ssh-cloud-init-templates)** for SSH posture on new instances + +## Rate Limiting Issues + +### 429 Too Many Requests + +**Symptoms**: API returns 429 + +**Solutions**: + +- Increase `RATE_LIMIT_LIMIT` or `RATE_LIMIT_TTL` +- Disable in development: `RATE_LIMIT_ENABLED=false` + +## Related Documentation + +- **[Debugging Guide](./debugging-guide.md)** - Debugging strategies +- **[Background jobs](../deployment/background-jobs.md)** - Queue architecture +- **[Environment configuration](../deployment/environment-configuration.md)** - Variable reference + +--- + +_For more detailed debugging, see the [Debugging Guide](./debugging-guide.md)._ diff --git a/docs/decabill/troubleshooting/debugging-guide.md b/docs/decabill/troubleshooting/debugging-guide.md new file mode 100644 index 000000000..cdac9422d --- /dev/null +++ b/docs/decabill/troubleshooting/debugging-guide.md @@ -0,0 +1,182 @@ +# Debugging Guide + +Debugging strategies and tools for troubleshooting Decabill issues. + +## Logging + +### Application Logs + +```bash +# Billing manager API (local) +nx serve decabill-backend-billing-manager + +# Docker Compose +cd apps/decabill/backend-billing-manager +docker compose logs -f backend-billing-manager +docker compose logs -f backend-billing-manager-worker +docker compose logs -f backend-billing-manager-scheduler +``` + +### Log Levels + +Configure log levels via environment variables where supported: + +- `LOG_LEVEL=debug` - Detailed debugging information +- `LOG_LEVEL=info` - General information +- `LOG_LEVEL=warn` - Warnings +- `LOG_LEVEL=error` - Errors only + +### Correlation IDs + +Pass `X-Correlation-Id` or `X-Request-Id` on API requests to trace a single operation across API and worker logs. Access logs include `[corr=…]` in Nest output when inside the request context. + +### Log Patterns + +Common patterns to search for: + +- **Connection errors**: Database, Redis, SMTP, Stripe, cloud APIs +- **Authentication errors**: Invalid API key, expired JWT, tenant mismatch +- **Queue errors**: BullMQ connection failures, job processor exceptions +- **Payment errors**: Stripe signature failures, checkout session errors + +Secrets are redacted in access logs; do not rely on logs for full token values. + +## Bull Board and Queue Debugging + +When `QUEUE_BULL_BOARD_ENABLED=true` on the API: + +- URL: `http://localhost:3200/admin/queues` +- Credentials: `QUEUE_BULL_BOARD_USERNAME` / `QUEUE_BULL_BOARD_PASSWORD` + +Use Bull Board to: + +- Inspect failed jobs and stack traces +- Retry stalled subscription billing or provisioning jobs +- Verify coordinator repeatable jobs are registered + +Job names are defined in `apps/decabill/backend-billing-manager/src/queue/job-registry.ts`. + +## Debugging Tools + +### Browser DevTools + +- **Network tab**: Monitor API calls, WebSocket upgrade, Stripe redirects +- **Console tab**: CSP violations, Angular errors +- **Application tab**: Storage and cookies for Keycloak sessions + +### Docker Debugging + +```bash +docker exec -it billing-manager-api /bin/sh +docker exec -it billing-manager-worker /bin/sh +docker stats billing-manager-api +``` + +### Redis Debugging + +```bash +# From host (compose default port) +redis-cli -p 6380 ping + +# Inside compose network +docker compose exec redis redis-cli ping +docker compose exec redis redis-cli keys 'decabill-billing*' +``` + +### Database Debugging + +```bash +psql -h localhost -U postgres -d postgres + +# Example tenant-scoped queries +SELECT id, tenant_id, status FROM subscriptions LIMIT 10; +SELECT id, tenant_id, status FROM invoices ORDER BY created_at DESC LIMIT 10; +``` + +## API Testing + +### Health Check + +```bash +curl http://localhost:3200/api/health +``` + +### Authenticated Request + +```bash +curl -H "Authorization: ApiKey your-api-key" \ + -H "X-Tenant: default" \ + http://localhost:3200/api/billing/subscriptions +``` + +Adjust path to match your OpenAPI specification. + +### Stripe Webhook (local testing) + +Use Stripe CLI to forward webhooks to your local API: + +```bash +stripe listen --forward-to localhost:3200/api/billing/stripe/webhook +``` + +Set `STRIPE_WEBHOOK_SECRET` to the signing secret from `stripe listen`. + +## WebSocket Testing + +Billing WebSocket gateway listens on port **8082** with namespace **`billing`**. + +Use browser DevTools Network tab or a Socket.IO client with: + +- Correct origin (CORS) +- Auth token or session as required by your auth mode +- **`X-Tenant`** header on handshake for multi-tenant setups + +## Common Debugging Scenarios + +### Subscription Not Billed + +1. Check `subscription-billing.coordinator` is repeating in Bull Board +2. Verify worker is processing `subscription-billing.unit` jobs +3. Review subscription status and billing dates in database +4. Check `BILLING_SCHEDULER_INTERVAL` and batch size env vars + +### Invoice PDF Missing + +1. Verify worker and API share `invoice_pdf_data` volume in compose +2. Check `BILLING_INVOICE_PDF_STORAGE_PATH` (default `/data/invoices`) +3. Review worker logs during PDF generation jobs + +### Multi-Tenant Data in Wrong Tenant + +1. Confirm console sends correct **`X-Tenant`** +2. For API key auth, review **[DR-002](../security/accepted-risks.md#dr-002--billing-multi-tenant-api-key-scope-static_api_key_tenant_id-unset)** +3. Verify user's `tenant_id` in database matches expected tenant + +## Performance Debugging + +### API Performance + +- Monitor response times on heavy admin list endpoints +- Check database query plans for large tenant datasets +- Review rate limiting metrics if 429 responses appear + +### Worker Performance + +- Tune `QUEUE_WORKER_CONCURRENCY` for CPU and external API limits +- Scale horizontally with additional worker containers +- Watch Redis memory as job history accumulates (jobs are not auto-removed) + +### Database Performance + +- Index usage on `tenant_id` filtered queries +- Connection pool sizing under scheduler batch loads + +## Related Documentation + +- **[Common Issues](./common-issues.md)** - Common problems and solutions +- **[Background jobs](../deployment/background-jobs.md)** - Queue roles and job registry +- **[Environment configuration](../deployment/environment-configuration.md)** - Scheduler intervals + +--- + +_For specific issues, see [Common Issues](./common-issues.md)._ diff --git a/libs/domains/agenstra/frontend/feature-docs/README.md b/libs/domains/agenstra/frontend/feature-docs/README.md deleted file mode 100644 index 341646bce..000000000 --- a/libs/domains/agenstra/frontend/feature-docs/README.md +++ /dev/null @@ -1,7 +0,0 @@ -# agenstra-frontend-feature-docs - -This library was generated with [Nx](https://nx.dev). - -## Running unit tests - -Run `nx test agenstra-frontend-feature-docs` to execute the unit tests. diff --git a/libs/domains/agenstra/frontend/index.ts b/libs/domains/agenstra/frontend/index.ts index a0cfe74a0..c9a1f03c1 100644 --- a/libs/domains/agenstra/frontend/index.ts +++ b/libs/domains/agenstra/frontend/index.ts @@ -2,6 +2,4 @@ export * from './data-access-agent-console/src'; export * from './data-access-portal/src'; export * from './feature-agent-console/src'; -export * from './feature-docs/src'; export * from './feature-landingpage/src'; -export * from './util-docs-parser/src'; diff --git a/libs/domains/agenstra/frontend/util-docs-parser/README.md b/libs/domains/agenstra/frontend/util-docs-parser/README.md deleted file mode 100644 index 9f98ed074..000000000 --- a/libs/domains/agenstra/frontend/util-docs-parser/README.md +++ /dev/null @@ -1,7 +0,0 @@ -# agenstra-frontend-util-docs-parser - -This library was generated with [Nx](https://nx.dev). - -## Running unit tests - -Run `nx test agenstra-frontend-util-docs-parser` to execute the unit tests. diff --git a/libs/domains/agenstra/frontend/util-docs-parser/project.json b/libs/domains/agenstra/frontend/util-docs-parser/project.json deleted file mode 100644 index fefa0784c..000000000 --- a/libs/domains/agenstra/frontend/util-docs-parser/project.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "agenstra-frontend-util-docs-parser", - "$schema": "../../../../../node_modules/nx/schemas/project-schema.json", - "sourceRoot": "libs/domains/agenstra/frontend/util-docs-parser/src", - "prefix": "framework", - "projectType": "library", - "tags": ["domain:agenstra", "scope:frontend", "type:util"], - "targets": { - "test": { - "executor": "@nx/jest:jest", - "outputs": ["{workspaceRoot}/coverage/{projectRoot}"], - "options": { - "jestConfig": "libs/domains/agenstra/frontend/util-docs-parser/jest.config.ts", - "tsConfig": "libs/domains/agenstra/frontend/util-docs-parser/tsconfig.spec.json" - } - }, - "lint": { - "executor": "@nx/eslint:lint" - } - } -} diff --git a/libs/domains/agenstra/frontend/feature-docs/.eslintrc.json b/libs/domains/shared/frontend/feature-docs/.eslintrc.json similarity index 100% rename from libs/domains/agenstra/frontend/feature-docs/.eslintrc.json rename to libs/domains/shared/frontend/feature-docs/.eslintrc.json diff --git a/libs/domains/shared/frontend/feature-docs/LICENSE b/libs/domains/shared/frontend/feature-docs/LICENSE new file mode 100644 index 000000000..55cd076da --- /dev/null +++ b/libs/domains/shared/frontend/feature-docs/LICENSE @@ -0,0 +1,33 @@ +Source-Available License - No Permission Granted Except Viewing + +Copyright (c) 2025 IPvX UG (haftungsbeschränkt). +All rights reserved. + +This software is provided on a source-available basis only. You may view the +source code solely to understand how the software works. No other rights are +granted. + +Except for the single permission to view the source code, you may not, in +whole or in part: + +- Copy, reproduce, or duplicate the software in any form. +- Modify, adapt, translate, or create derivative works of the software. +- Distribute, publish, make available, or share the software or any portion + thereof. +- Use the software for any purpose, including private, commercial, educational, + internal, or research use. +- Sell, sublicense, rent, lease, or otherwise transfer the software or any + rights to it. +- Host, deploy, or run the software on any system, server, or environment. +- Reverse-engineer, decompile, disassemble, or otherwise attempt to derive + functionality beyond what is visible in the source. + +Any attempt to exercise rights not expressly granted above is prohibited and +constitutes a violation of this license. + +The software is provided “as is”, without any warranty of any kind, express or +implied. In no event shall the copyright holder be liable for any damages +arising from the possession, viewing, or prohibited use of the software. + +If you do not agree to these terms, you are not permitted to access or view the +source code. diff --git a/libs/domains/shared/frontend/feature-docs/README.md b/libs/domains/shared/frontend/feature-docs/README.md new file mode 100644 index 000000000..2ebc2c975 --- /dev/null +++ b/libs/domains/shared/frontend/feature-docs/README.md @@ -0,0 +1,7 @@ +# shared-frontend-feature-docs + +This library was generated with [Nx](https://nx.dev). + +## Running unit tests + +Run `nx test shared-frontend-feature-docs` to execute the unit tests. diff --git a/libs/domains/agenstra/frontend/feature-docs/jest.config.ts b/libs/domains/shared/frontend/feature-docs/jest.config.ts similarity index 80% rename from libs/domains/agenstra/frontend/feature-docs/jest.config.ts rename to libs/domains/shared/frontend/feature-docs/jest.config.ts index 4f629005a..3073eb9d0 100644 --- a/libs/domains/agenstra/frontend/feature-docs/jest.config.ts +++ b/libs/domains/shared/frontend/feature-docs/jest.config.ts @@ -1,8 +1,8 @@ export default { - displayName: 'agenstra-frontend-feature-docs', + displayName: 'shared-frontend-feature-docs', preset: '../../../../../jest.preset.cjs', setupFilesAfterEnv: ['/src/test-setup.ts'], - coverageDirectory: '../../../../../coverage/libs/domains/agenstra/frontend/feature-docs', + coverageDirectory: '../../../../../coverage/libs/domains/shared/frontend/feature-docs', transform: { '^.+\\.(ts|mjs|js|html)$': [ 'jest-preset-angular', diff --git a/libs/domains/agenstra/frontend/feature-docs/project.json b/libs/domains/shared/frontend/feature-docs/project.json similarity index 50% rename from libs/domains/agenstra/frontend/feature-docs/project.json rename to libs/domains/shared/frontend/feature-docs/project.json index 19e393a83..09bc35bb2 100644 --- a/libs/domains/agenstra/frontend/feature-docs/project.json +++ b/libs/domains/shared/frontend/feature-docs/project.json @@ -1,17 +1,17 @@ { - "name": "agenstra-frontend-feature-docs", + "name": "shared-frontend-feature-docs", "$schema": "../../../../../node_modules/nx/schemas/project-schema.json", - "sourceRoot": "libs/domains/agenstra/frontend/feature-docs/src", + "sourceRoot": "libs/domains/shared/frontend/feature-docs/src", "prefix": "framework", "projectType": "library", - "tags": ["domain:agenstra", "scope:frontend", "type:feature"], + "tags": ["domain:shared", "scope:frontend", "type:feature"], "targets": { "test": { "executor": "@nx/jest:jest", "outputs": ["{workspaceRoot}/coverage/{projectRoot}"], "options": { - "jestConfig": "libs/domains/agenstra/frontend/feature-docs/jest.config.ts", - "tsConfig": "libs/domains/agenstra/frontend/feature-docs/tsconfig.spec.json" + "jestConfig": "libs/domains/shared/frontend/feature-docs/jest.config.ts", + "tsConfig": "libs/domains/shared/frontend/feature-docs/tsconfig.spec.json" } }, "lint": { diff --git a/libs/domains/agenstra/frontend/feature-docs/src/index.ts b/libs/domains/shared/frontend/feature-docs/src/index.ts similarity index 100% rename from libs/domains/agenstra/frontend/feature-docs/src/index.ts rename to libs/domains/shared/frontend/feature-docs/src/index.ts diff --git a/libs/domains/agenstra/frontend/feature-docs/src/lib/components/docs-breadcrumbs/docs-breadcrumbs.component.html b/libs/domains/shared/frontend/feature-docs/src/lib/components/docs-breadcrumbs/docs-breadcrumbs.component.html similarity index 100% rename from libs/domains/agenstra/frontend/feature-docs/src/lib/components/docs-breadcrumbs/docs-breadcrumbs.component.html rename to libs/domains/shared/frontend/feature-docs/src/lib/components/docs-breadcrumbs/docs-breadcrumbs.component.html diff --git a/libs/domains/agenstra/frontend/feature-docs/src/lib/components/docs-breadcrumbs/docs-breadcrumbs.component.scss b/libs/domains/shared/frontend/feature-docs/src/lib/components/docs-breadcrumbs/docs-breadcrumbs.component.scss similarity index 100% rename from libs/domains/agenstra/frontend/feature-docs/src/lib/components/docs-breadcrumbs/docs-breadcrumbs.component.scss rename to libs/domains/shared/frontend/feature-docs/src/lib/components/docs-breadcrumbs/docs-breadcrumbs.component.scss diff --git a/libs/domains/agenstra/frontend/feature-docs/src/lib/components/docs-breadcrumbs/docs-breadcrumbs.component.ts b/libs/domains/shared/frontend/feature-docs/src/lib/components/docs-breadcrumbs/docs-breadcrumbs.component.ts similarity index 92% rename from libs/domains/agenstra/frontend/feature-docs/src/lib/components/docs-breadcrumbs/docs-breadcrumbs.component.ts rename to libs/domains/shared/frontend/feature-docs/src/lib/components/docs-breadcrumbs/docs-breadcrumbs.component.ts index 2861eb33c..ec6f5be2c 100644 --- a/libs/domains/agenstra/frontend/feature-docs/src/lib/components/docs-breadcrumbs/docs-breadcrumbs.component.ts +++ b/libs/domains/shared/frontend/feature-docs/src/lib/components/docs-breadcrumbs/docs-breadcrumbs.component.ts @@ -1,7 +1,7 @@ import { CommonModule } from '@angular/common'; import { Component, computed, inject, input } from '@angular/core'; import { RouterModule } from '@angular/router'; -import { NavigationNode } from '@forepath/agenstra/frontend/util-docs-parser'; +import { NavigationNode } from '@forepath/shared/frontend/util-docs-parser'; import { DocsNavigationService } from '../../services'; diff --git a/libs/domains/agenstra/frontend/feature-docs/src/lib/components/docs-content/docs-content.component.html b/libs/domains/shared/frontend/feature-docs/src/lib/components/docs-content/docs-content.component.html similarity index 100% rename from libs/domains/agenstra/frontend/feature-docs/src/lib/components/docs-content/docs-content.component.html rename to libs/domains/shared/frontend/feature-docs/src/lib/components/docs-content/docs-content.component.html diff --git a/libs/domains/agenstra/frontend/feature-docs/src/lib/components/docs-content/docs-content.component.scss b/libs/domains/shared/frontend/feature-docs/src/lib/components/docs-content/docs-content.component.scss similarity index 100% rename from libs/domains/agenstra/frontend/feature-docs/src/lib/components/docs-content/docs-content.component.scss rename to libs/domains/shared/frontend/feature-docs/src/lib/components/docs-content/docs-content.component.scss diff --git a/libs/domains/agenstra/frontend/feature-docs/src/lib/components/docs-content/docs-content.component.ts b/libs/domains/shared/frontend/feature-docs/src/lib/components/docs-content/docs-content.component.ts similarity index 95% rename from libs/domains/agenstra/frontend/feature-docs/src/lib/components/docs-content/docs-content.component.ts rename to libs/domains/shared/frontend/feature-docs/src/lib/components/docs-content/docs-content.component.ts index fdde10a95..45a01240f 100644 --- a/libs/domains/agenstra/frontend/feature-docs/src/lib/components/docs-content/docs-content.component.ts +++ b/libs/domains/shared/frontend/feature-docs/src/lib/components/docs-content/docs-content.component.ts @@ -14,7 +14,8 @@ import { ViewContainerRef, } from '@angular/core'; import { DomSanitizer } from '@angular/platform-browser'; -import { DocMetadata } from '@forepath/agenstra/frontend/util-docs-parser'; +import { ENVIRONMENT, type Environment } from '@forepath/shared/frontend/util-configuration'; +import { DocMetadata } from '@forepath/shared/frontend/util-docs-parser'; import { catchError, map, of } from 'rxjs'; import { MermaidDiagramComponent } from '../mermaid-diagram/mermaid-diagram.component'; @@ -35,6 +36,11 @@ export class DocsContentComponent implements AfterViewInit { private readonly platformId = inject(PLATFORM_ID); private readonly viewContainer = inject(ViewContainerRef); private readonly http = inject(HttpClient); + private readonly environment = inject(ENVIRONMENT); + + private get contentRoot(): string { + return this.environment.docs.contentRoot; + } /** * Documentation metadata @@ -365,8 +371,8 @@ export class DocsContentComponent implements AfterViewInit { } } - // Remove any "agenstra/" prefix if present (shouldn't happen in markdown, but handle it) - routePath = routePath.replace(/^agenstra\//, ''); + // Remove any content-root prefix if present + routePath = routePath.replace(new RegExp(`^${this.contentRoot}/`), ''); // If the path ends with /README or README, remove it since path resolution handles README.md automatically // e.g., "something/README" -> "something", "README" -> "" @@ -387,8 +393,6 @@ export class DocsContentComponent implements AfterViewInit { /** * Remove links to markdown files that don't exist - * Only files in the "agenstra" folder are considered valid - * All internal links must resolve to routes starting with /agenstra or /framework */ private removeInvalidLinks(): void { if (!this.contentContainer || !isPlatformBrowser(this.platformId)) { @@ -420,8 +424,7 @@ export class DocsContentComponent implements AfterViewInit { // Get the href from the link to check if it starts with /agenstra or /framework const href = link.getAttribute('href'); - if (!href || (!href.startsWith('/agenstra') && !href.startsWith('/framework'))) { - // Link doesn't start with /agenstra or /framework, mark as invalid + if (!href || !href.startsWith('/docs')) { const text = link.textContent || link.innerText; const textNode = this.document.createTextNode(text); @@ -443,9 +446,7 @@ export class DocsContentComponent implements AfterViewInit { // Add .md extension back for file checking const fullFilePath = `${filePath}.md`; - // Check if file exists by trying to load it with HEAD request - // Files are served from /agenstra/ route, so we need to prepend "agenstra/" - const assetPath = `/agenstra/${fullFilePath}`; + const assetPath = `/docs/${this.contentRoot}/${fullFilePath}`; this.http .head(assetPath, { observe: 'response' }) diff --git a/libs/domains/agenstra/frontend/feature-docs/src/lib/components/docs-layout/docs-layout.component.html b/libs/domains/shared/frontend/feature-docs/src/lib/components/docs-layout/docs-layout.component.html similarity index 99% rename from libs/domains/agenstra/frontend/feature-docs/src/lib/components/docs-layout/docs-layout.component.html rename to libs/domains/shared/frontend/feature-docs/src/lib/components/docs-layout/docs-layout.component.html index f8e2e7570..b133720ce 100644 --- a/libs/domains/agenstra/frontend/feature-docs/src/lib/components/docs-layout/docs-layout.component.html +++ b/libs/domains/shared/frontend/feature-docs/src/lib/components/docs-layout/docs-layout.component.html @@ -6,7 +6,7 @@ Agenstra
diff --git a/libs/domains/agenstra/frontend/feature-docs/src/lib/components/docs-layout/docs-layout.component.scss b/libs/domains/shared/frontend/feature-docs/src/lib/components/docs-layout/docs-layout.component.scss similarity index 100% rename from libs/domains/agenstra/frontend/feature-docs/src/lib/components/docs-layout/docs-layout.component.scss rename to libs/domains/shared/frontend/feature-docs/src/lib/components/docs-layout/docs-layout.component.scss diff --git a/libs/domains/agenstra/frontend/feature-docs/src/lib/components/docs-layout/docs-layout.component.ts b/libs/domains/shared/frontend/feature-docs/src/lib/components/docs-layout/docs-layout.component.ts similarity index 90% rename from libs/domains/agenstra/frontend/feature-docs/src/lib/components/docs-layout/docs-layout.component.ts rename to libs/domains/shared/frontend/feature-docs/src/lib/components/docs-layout/docs-layout.component.ts index d72070144..15fafe7bc 100644 --- a/libs/domains/agenstra/frontend/feature-docs/src/lib/components/docs-layout/docs-layout.component.ts +++ b/libs/domains/shared/frontend/feature-docs/src/lib/components/docs-layout/docs-layout.component.ts @@ -2,8 +2,8 @@ import { CommonModule } from '@angular/common'; import { AfterViewInit, Component, inject, OnDestroy, signal } from '@angular/core'; import { toSignal } from '@angular/core/rxjs-interop'; import { RouterModule } from '@angular/router'; -import { LocaleService } from '@forepath/shared/frontend/util-configuration'; -import { NavigationNode } from '@forepath/agenstra/frontend/util-docs-parser'; +import { LocaleService, ENVIRONMENT, type Environment } from '@forepath/shared/frontend/util-configuration'; +import { NavigationNode } from '@forepath/shared/frontend/util-docs-parser'; import { DocsNavigationService, ThemeService } from '../../services'; import { DocsNavigationComponent } from '../docs-navigation/docs-navigation.component'; @@ -20,6 +20,7 @@ export class DocsLayoutComponent implements AfterViewInit, OnDestroy { private readonly navigationService = inject(DocsNavigationService); protected readonly themeService = inject(ThemeService); protected readonly localeService = inject(LocaleService); + protected readonly productName = inject(ENVIRONMENT).productName; /** * Whether we're on a mobile device (width <= 767.98px, Bootstrap md breakpoint) diff --git a/libs/domains/agenstra/frontend/feature-docs/src/lib/components/docs-navigation/docs-navigation.component.html b/libs/domains/shared/frontend/feature-docs/src/lib/components/docs-navigation/docs-navigation.component.html similarity index 100% rename from libs/domains/agenstra/frontend/feature-docs/src/lib/components/docs-navigation/docs-navigation.component.html rename to libs/domains/shared/frontend/feature-docs/src/lib/components/docs-navigation/docs-navigation.component.html diff --git a/libs/domains/agenstra/frontend/feature-docs/src/lib/components/docs-navigation/docs-navigation.component.scss b/libs/domains/shared/frontend/feature-docs/src/lib/components/docs-navigation/docs-navigation.component.scss similarity index 100% rename from libs/domains/agenstra/frontend/feature-docs/src/lib/components/docs-navigation/docs-navigation.component.scss rename to libs/domains/shared/frontend/feature-docs/src/lib/components/docs-navigation/docs-navigation.component.scss diff --git a/libs/domains/agenstra/frontend/feature-docs/src/lib/components/docs-navigation/docs-navigation.component.ts b/libs/domains/shared/frontend/feature-docs/src/lib/components/docs-navigation/docs-navigation.component.ts similarity index 95% rename from libs/domains/agenstra/frontend/feature-docs/src/lib/components/docs-navigation/docs-navigation.component.ts rename to libs/domains/shared/frontend/feature-docs/src/lib/components/docs-navigation/docs-navigation.component.ts index abd94ab26..5557b8cba 100644 --- a/libs/domains/agenstra/frontend/feature-docs/src/lib/components/docs-navigation/docs-navigation.component.ts +++ b/libs/domains/shared/frontend/feature-docs/src/lib/components/docs-navigation/docs-navigation.component.ts @@ -1,7 +1,7 @@ import { CommonModule } from '@angular/common'; import { Component, computed, inject, input, signal } from '@angular/core'; import { Router, RouterModule } from '@angular/router'; -import { NavigationNode } from '@forepath/agenstra/frontend/util-docs-parser'; +import { NavigationNode } from '@forepath/shared/frontend/util-docs-parser'; import { DocsNavigationService } from '../../services'; diff --git a/libs/domains/agenstra/frontend/feature-docs/src/lib/components/docs-search/docs-search.component.html b/libs/domains/shared/frontend/feature-docs/src/lib/components/docs-search/docs-search.component.html similarity index 100% rename from libs/domains/agenstra/frontend/feature-docs/src/lib/components/docs-search/docs-search.component.html rename to libs/domains/shared/frontend/feature-docs/src/lib/components/docs-search/docs-search.component.html diff --git a/libs/domains/agenstra/frontend/feature-docs/src/lib/components/docs-search/docs-search.component.scss b/libs/domains/shared/frontend/feature-docs/src/lib/components/docs-search/docs-search.component.scss similarity index 100% rename from libs/domains/agenstra/frontend/feature-docs/src/lib/components/docs-search/docs-search.component.scss rename to libs/domains/shared/frontend/feature-docs/src/lib/components/docs-search/docs-search.component.scss diff --git a/libs/domains/agenstra/frontend/feature-docs/src/lib/components/docs-search/docs-search.component.ts b/libs/domains/shared/frontend/feature-docs/src/lib/components/docs-search/docs-search.component.ts similarity index 100% rename from libs/domains/agenstra/frontend/feature-docs/src/lib/components/docs-search/docs-search.component.ts rename to libs/domains/shared/frontend/feature-docs/src/lib/components/docs-search/docs-search.component.ts diff --git a/libs/domains/agenstra/frontend/feature-docs/src/lib/components/docs-table-of-contents/docs-table-of-contents.component.html b/libs/domains/shared/frontend/feature-docs/src/lib/components/docs-table-of-contents/docs-table-of-contents.component.html similarity index 100% rename from libs/domains/agenstra/frontend/feature-docs/src/lib/components/docs-table-of-contents/docs-table-of-contents.component.html rename to libs/domains/shared/frontend/feature-docs/src/lib/components/docs-table-of-contents/docs-table-of-contents.component.html diff --git a/libs/domains/agenstra/frontend/feature-docs/src/lib/components/docs-table-of-contents/docs-table-of-contents.component.scss b/libs/domains/shared/frontend/feature-docs/src/lib/components/docs-table-of-contents/docs-table-of-contents.component.scss similarity index 100% rename from libs/domains/agenstra/frontend/feature-docs/src/lib/components/docs-table-of-contents/docs-table-of-contents.component.scss rename to libs/domains/shared/frontend/feature-docs/src/lib/components/docs-table-of-contents/docs-table-of-contents.component.scss diff --git a/libs/domains/agenstra/frontend/feature-docs/src/lib/components/docs-table-of-contents/docs-table-of-contents.component.ts b/libs/domains/shared/frontend/feature-docs/src/lib/components/docs-table-of-contents/docs-table-of-contents.component.ts similarity index 96% rename from libs/domains/agenstra/frontend/feature-docs/src/lib/components/docs-table-of-contents/docs-table-of-contents.component.ts rename to libs/domains/shared/frontend/feature-docs/src/lib/components/docs-table-of-contents/docs-table-of-contents.component.ts index acb489830..37858ace1 100644 --- a/libs/domains/agenstra/frontend/feature-docs/src/lib/components/docs-table-of-contents/docs-table-of-contents.component.ts +++ b/libs/domains/shared/frontend/feature-docs/src/lib/components/docs-table-of-contents/docs-table-of-contents.component.ts @@ -1,6 +1,6 @@ import { CommonModule } from '@angular/common'; import { Component, computed, input, signal } from '@angular/core'; -import { DocHeading } from '@forepath/agenstra/frontend/util-docs-parser'; +import { DocHeading } from '@forepath/shared/frontend/util-docs-parser'; @Component({ selector: 'framework-docs-table-of-contents', diff --git a/libs/domains/agenstra/frontend/feature-docs/src/lib/components/index.ts b/libs/domains/shared/frontend/feature-docs/src/lib/components/index.ts similarity index 100% rename from libs/domains/agenstra/frontend/feature-docs/src/lib/components/index.ts rename to libs/domains/shared/frontend/feature-docs/src/lib/components/index.ts diff --git a/libs/domains/agenstra/frontend/feature-docs/src/lib/components/mermaid-diagram/mermaid-diagram.component.html b/libs/domains/shared/frontend/feature-docs/src/lib/components/mermaid-diagram/mermaid-diagram.component.html similarity index 100% rename from libs/domains/agenstra/frontend/feature-docs/src/lib/components/mermaid-diagram/mermaid-diagram.component.html rename to libs/domains/shared/frontend/feature-docs/src/lib/components/mermaid-diagram/mermaid-diagram.component.html diff --git a/libs/domains/agenstra/frontend/feature-docs/src/lib/components/mermaid-diagram/mermaid-diagram.component.scss b/libs/domains/shared/frontend/feature-docs/src/lib/components/mermaid-diagram/mermaid-diagram.component.scss similarity index 100% rename from libs/domains/agenstra/frontend/feature-docs/src/lib/components/mermaid-diagram/mermaid-diagram.component.scss rename to libs/domains/shared/frontend/feature-docs/src/lib/components/mermaid-diagram/mermaid-diagram.component.scss diff --git a/libs/domains/agenstra/frontend/feature-docs/src/lib/components/mermaid-diagram/mermaid-diagram.component.ts b/libs/domains/shared/frontend/feature-docs/src/lib/components/mermaid-diagram/mermaid-diagram.component.ts similarity index 100% rename from libs/domains/agenstra/frontend/feature-docs/src/lib/components/mermaid-diagram/mermaid-diagram.component.ts rename to libs/domains/shared/frontend/feature-docs/src/lib/components/mermaid-diagram/mermaid-diagram.component.ts diff --git a/libs/domains/agenstra/frontend/feature-docs/src/lib/docs.routes.ts b/libs/domains/shared/frontend/feature-docs/src/lib/docs.routes.ts similarity index 100% rename from libs/domains/agenstra/frontend/feature-docs/src/lib/docs.routes.ts rename to libs/domains/shared/frontend/feature-docs/src/lib/docs.routes.ts diff --git a/libs/domains/agenstra/frontend/feature-docs/src/lib/pages/docs-page/docs-page.component.html b/libs/domains/shared/frontend/feature-docs/src/lib/pages/docs-page/docs-page.component.html similarity index 100% rename from libs/domains/agenstra/frontend/feature-docs/src/lib/pages/docs-page/docs-page.component.html rename to libs/domains/shared/frontend/feature-docs/src/lib/pages/docs-page/docs-page.component.html diff --git a/libs/domains/agenstra/frontend/feature-docs/src/lib/pages/docs-page/docs-page.component.scss b/libs/domains/shared/frontend/feature-docs/src/lib/pages/docs-page/docs-page.component.scss similarity index 100% rename from libs/domains/agenstra/frontend/feature-docs/src/lib/pages/docs-page/docs-page.component.scss rename to libs/domains/shared/frontend/feature-docs/src/lib/pages/docs-page/docs-page.component.scss diff --git a/libs/domains/agenstra/frontend/feature-docs/src/lib/pages/docs-page/docs-page.component.ts b/libs/domains/shared/frontend/feature-docs/src/lib/pages/docs-page/docs-page.component.ts similarity index 70% rename from libs/domains/agenstra/frontend/feature-docs/src/lib/pages/docs-page/docs-page.component.ts rename to libs/domains/shared/frontend/feature-docs/src/lib/pages/docs-page/docs-page.component.ts index d8cd2de48..cfb21b8b9 100644 --- a/libs/domains/agenstra/frontend/feature-docs/src/lib/pages/docs-page/docs-page.component.ts +++ b/libs/domains/shared/frontend/feature-docs/src/lib/pages/docs-page/docs-page.component.ts @@ -4,13 +4,13 @@ import { toSignal } from '@angular/core/rxjs-interop'; import { Meta, Title } from '@angular/platform-browser'; import { ActivatedRoute, NavigationEnd, Router, RouterModule } from '@angular/router'; import { ENVIRONMENT, type Environment } from '@forepath/shared/frontend/util-configuration'; -import { DocMetadata, NavigationNode } from '@forepath/agenstra/frontend/util-docs-parser'; +import { DocMetadata, NavigationNode } from '@forepath/shared/frontend/util-docs-parser'; import { addPageMetaTags, applySocialPreviewMeta, - DOCS_PAGE_DYNAMIC_META_TAG_STUBS, + createDocsPageDynamicMetaTagStubs, formatAgenstraMetaDescription, - formatAgenstraMetaTitle, + formatProductMetaTitle, removePageMetaTags, resolveSocialCanonicalUrl, } from '@forepath/shared/frontend/util-meta'; @@ -18,6 +18,7 @@ import { catchError, filter, map, Observable, of, startWith, switchMap } from 'r import { DocsBreadcrumbsComponent, DocsContentComponent, DocsTableOfContentsComponent } from '../../components'; import { DocsContentService, DocsNavigationService } from '../../services'; +import { getDocsMetaDescriptionFallback, getDocsMetaKeywords } from '../../utils/docs-seo-metadata'; @Component({ selector: 'framework-docs-page', @@ -37,17 +38,34 @@ export class DocsPageComponent implements OnInit { private readonly environment = inject(ENVIRONMENT); private readonly locale = inject(LOCALE_ID); - private readonly metaTitleFallback = $localize`:@@featureDocsPage-metaTitleFallback:Documentation :: Agenstra`; - private readonly metaDescriptionFallback = $localize`:@@featureDocsPage-metaDescriptionFallback:Official Agenstra documentation: install, deploy, secure, and operate agent hosts, workspaces, tickets, APIs, and integrations for platform teams.`; + private get contentRoot(): string { + return this.environment.docs.contentRoot; + } + + private get docsSiteOrigin(): string { + return `https://docs.${this.contentRoot}.com`; + } + + private buildPageTitle(pageName: string): string { + return formatProductMetaTitle(pageName, this.environment.productName); + } + + private get metaDescriptionFallback(): string { + return getDocsMetaDescriptionFallback(this.contentRoot); + } + + private get docsStaticMetaTags() { + return [ + { + name: 'keywords', + content: getDocsMetaKeywords(this.contentRoot), + }, + { name: 'author', content: 'IPvX UG (haftungsbeschränkt)' }, + { name: 'robots', content: 'index, follow' }, + ]; + } + private readonly destroyRef = inject(DestroyRef); - private readonly docsStaticMetaTags = [ - { - name: 'keywords', - content: $localize`:@@featureDocsPage-metaKeywords:Agenstra, AI agents, agent management, distributed systems, AI agent infrastructure, agent platform, AI agent console, container management, WebSocket agents, Docker agents`, - }, - { name: 'author', content: 'IPvX UG (haftungsbeschränkt)' }, - { name: 'robots', content: 'index, follow' }, - ]; constructor() { // Update active path whenever currentPath changes @@ -99,8 +117,13 @@ export class DocsPageComponent implements OnInit { // Normalize the path to match navigation.json format let normalizedPath = path; - // Convert /agenstra/... to /docs/... to match navigation paths - if (normalizedPath.startsWith('/agenstra/')) { + // Convert legacy /{contentRoot}/... to /docs/... to match navigation paths + const contentRootPrefix = `/${this.contentRoot}/`; + if (normalizedPath.startsWith(contentRootPrefix)) { + normalizedPath = normalizedPath.replace(contentRootPrefix, '/docs/'); + } else if (normalizedPath === `/${this.contentRoot}`) { + normalizedPath = '/docs'; + } else if (normalizedPath.startsWith('/agenstra/')) { normalizedPath = normalizedPath.replace('/agenstra/', '/docs/'); } else if (normalizedPath === '/agenstra') { normalizedPath = '/docs'; @@ -123,7 +146,11 @@ export class DocsPageComponent implements OnInit { // Initial value based on current router URL const url = this.router.url.split('?')[0].split('#')[0]; - if (url.startsWith('/agenstra/')) { + if (url.startsWith(`/${this.contentRoot}/`)) { + return url.replace(`/${this.contentRoot}/`, '/docs/'); + } else if (url === `/${this.contentRoot}`) { + return '/docs'; + } else if (url.startsWith('/agenstra/')) { return url.replace('/agenstra/', '/docs/'); } else if (url === '/agenstra') { return '/docs'; @@ -144,7 +171,16 @@ export class DocsPageComponent implements OnInit { ngOnInit(): void { this.destroyRef.onDestroy(addPageMetaTags(this.metaService, this.docsStaticMetaTags)); - this.destroyRef.onDestroy(() => removePageMetaTags(this.metaService, DOCS_PAGE_DYNAMIC_META_TAG_STUBS)); + this.destroyRef.onDestroy(() => + removePageMetaTags( + this.metaService, + createDocsPageDynamicMetaTagStubs({ + docsSiteOrigin: this.docsSiteOrigin, + imageUrl: this.environment.socialPreview.imageUrl, + siteName: this.environment.productName, + }), + ), + ); // During SSR, skip content loading to avoid loops and timeout issues // Content will be loaded on the client side @@ -175,12 +211,14 @@ export class DocsPageComponent implements OnInit { .replace(/README\.md(\/README\.md)*$/g, ''); path = path.replace(/\/README(\/README)*$/g, '').replace(/README(\/README)*$/g, ''); - // Remove 'agenstra' prefix if present (shouldn't happen, but handle it) - if (path.startsWith('agenstra/')) { - path = path.substring('agenstra/'.length); + // Remove content root prefix if present + if (path.startsWith(`${this.contentRoot}/`)) { + path = path.substring(this.contentRoot.length + 1); } - path = path.replace(/^agenstra\//, '').replace(/\/agenstra\//g, '/'); + path = path + .replace(new RegExp(`^${this.contentRoot}/`), '') + .replace(new RegExp(`/${this.contentRoot}/`, 'g'), '/'); // Remove duplicate slashes path = path.replace(/\/+/g, '/'); @@ -230,15 +268,15 @@ export class DocsPageComponent implements OnInit { return; } - // Check if URL incorrectly includes "agenstra" in the path - if (currentUrl.includes('/docs/agenstra/')) { - // Fix the URL by removing "agenstra" from the path + // Check if URL incorrectly includes content root in the path + const docsContentRootPath = `/docs/${this.contentRoot}/`; + if (currentUrl.includes(docsContentRootPath)) { const fixedPath = currentUrl - .replace('/docs/agenstra/', '/docs/') + .replace(docsContentRootPath, '/docs/') .replace(/\/README\.md$/, '') .replace(/\/README$/, ''); - console.warn('URL incorrectly includes "agenstra", fixing:', currentUrl, '->', fixedPath); + console.warn(`URL incorrectly includes "${this.contentRoot}", fixing:`, currentUrl, '->', fixedPath); this.router.navigate([fixedPath], { replaceUrl: true }); return; @@ -258,7 +296,9 @@ export class DocsPageComponent implements OnInit { private applyPageMeta(metadata: DocMetadata | null, path: string): void { const pageTitle = metadata?.title?.trim(); - const title = pageTitle ? formatAgenstraMetaTitle(pageTitle) : this.metaTitleFallback; + const title = pageTitle + ? formatProductMetaTitle(pageTitle, this.environment.productName) + : this.buildPageTitle($localize`:@@featureDocsPage-metaTitlePrefix:Documentation`); this.titleService.setTitle(title); @@ -266,7 +306,7 @@ export class DocsPageComponent implements OnInit { const descriptionSource = summary || this.metaDescriptionFallback; const description = formatAgenstraMetaDescription(descriptionSource); const canonicalUrl = resolveSocialCanonicalUrl( - `https://docs.agenstra.com${path}`, + `${this.docsSiteOrigin}${path}`, this.locale, this.environment.production, ); @@ -276,87 +316,58 @@ export class DocsPageComponent implements OnInit { applySocialPreviewMeta((tag) => this.metaService.updateTag(tag), { title, description: descriptionSource, - canonicalUrl: `https://docs.agenstra.com${path}`, + canonicalUrl: `${this.docsSiteOrigin}${path}`, imageUrl: this.environment.socialPreview.imageUrl, localeId: this.locale, localizeCanonicalUrl: this.environment.production, type: 'article', + siteName: this.environment.productName, }); } /** - * Load content with fallback logic: - * Always assumes "agenstra" subfolder. - * For path /docs (empty): - * 1. Check if there is agenstra/README.md to load - * 2. Check if there is agenstra/agenstra.md - * For path /docs/:path: - * 1. Try agenstra/:path/README.md (directory with README) - * 2. Try agenstra/:path.md (direct file) + * Load content with fallback logic using the configured docs content root. */ private loadContentWithFallback(routePath: string): Observable { - // Normalize the path: remove leading/trailing slashes + const contentRoot = this.contentRoot; let cleanPath = routePath.replace(/^\/+|\/+$/g, ''); - // Remove 'agenstra/' prefix if present (shouldn't happen with correct routes, but handle it) - if (cleanPath.startsWith('agenstra/')) { - cleanPath = cleanPath.substring('agenstra/'.length); + if (cleanPath.startsWith(`${contentRoot}/`)) { + cleanPath = cleanPath.substring(contentRoot.length + 1); } - cleanPath = cleanPath.replace(/^agenstra\//, '').replace(/\/agenstra\//g, '/'); - - // Remove any .md extensions that might have been incorrectly added + cleanPath = cleanPath.replace(new RegExp(`^${contentRoot}/`), '').replace(new RegExp(`/${contentRoot}/`, 'g'), '/'); cleanPath = cleanPath.replace(/\.md$/g, ''); - - // Remove any README.md or README that might have been incorrectly appended (multiple times) cleanPath = cleanPath.replace(/\/README\.md(\/README\.md)*$/g, '').replace(/README\.md(\/README\.md)*$/g, ''); cleanPath = cleanPath.replace(/\/README(\/README)*$/g, '').replace(/README(\/README)*$/g, ''); - - // Remove any duplicate slashes cleanPath = cleanPath.replace(/\/+/g, '/'); - const pathWithoutAgenstra = cleanPath; - - // Always use "agenstra" as the base folder - // If empty path, try README.md first, then agenstra.md - if (!pathWithoutAgenstra) { - return this.contentService.loadContent('agenstra/README.md').pipe( - catchError(() => { - // Fallback to agenstra.md - return this.contentService.loadContent('agenstra/agenstra.md'); - }), - ); + if (!cleanPath) { + return this.contentService + .loadContent(`${contentRoot}/README.md`) + .pipe(catchError(() => this.contentService.loadContent(`${contentRoot}/${contentRoot}.md`))); } - // For paths like /docs/getting-started: - // 1. Try agenstra/getting-started/README.md (directory with README) - // 2. Try agenstra/getting-started.md (direct file) - const readmePath = `agenstra/${pathWithoutAgenstra}/README.md`; - const directPath = `agenstra/${pathWithoutAgenstra}.md`; + const readmePath = `${contentRoot}/${cleanPath}/README.md`; + const directPath = `${contentRoot}/${cleanPath}.md`; - // Try README.md first, then fallback to direct .md file - // Use switchMap to ensure the first request completes (or fails) before trying the fallback return this.contentService.loadContent(readmePath).pipe( switchMap((metadata) => { - // If README.md was found, return it if (metadata) { return of(metadata); } - // If README.md returned null (not found), try the direct file return this.contentService.loadContent(directPath); }), - catchError(() => { - // If README.md request failed (timeout, network error, etc.), try the direct file - return this.contentService.loadContent(directPath).pipe( + catchError(() => + this.contentService.loadContent(directPath).pipe( catchError(() => { - // If both fail, return null to prevent infinite loops console.warn(`Failed to load documentation for path: ${routePath} (tried both README.md and direct file)`); return of(null); }), - ); - }), + ), + ), ); } } diff --git a/libs/domains/agenstra/frontend/feature-docs/src/lib/pages/docs-search-page/docs-search-page.component.html b/libs/domains/shared/frontend/feature-docs/src/lib/pages/docs-search-page/docs-search-page.component.html similarity index 100% rename from libs/domains/agenstra/frontend/feature-docs/src/lib/pages/docs-search-page/docs-search-page.component.html rename to libs/domains/shared/frontend/feature-docs/src/lib/pages/docs-search-page/docs-search-page.component.html diff --git a/libs/domains/agenstra/frontend/feature-docs/src/lib/pages/docs-search-page/docs-search-page.component.scss b/libs/domains/shared/frontend/feature-docs/src/lib/pages/docs-search-page/docs-search-page.component.scss similarity index 100% rename from libs/domains/agenstra/frontend/feature-docs/src/lib/pages/docs-search-page/docs-search-page.component.scss rename to libs/domains/shared/frontend/feature-docs/src/lib/pages/docs-search-page/docs-search-page.component.scss diff --git a/libs/domains/agenstra/frontend/feature-docs/src/lib/pages/docs-search-page/docs-search-page.component.ts b/libs/domains/shared/frontend/feature-docs/src/lib/pages/docs-search-page/docs-search-page.component.ts similarity index 82% rename from libs/domains/agenstra/frontend/feature-docs/src/lib/pages/docs-search-page/docs-search-page.component.ts rename to libs/domains/shared/frontend/feature-docs/src/lib/pages/docs-search-page/docs-search-page.component.ts index 79b8f5035..66d38ba20 100644 --- a/libs/domains/agenstra/frontend/feature-docs/src/lib/pages/docs-search-page/docs-search-page.component.ts +++ b/libs/domains/shared/frontend/feature-docs/src/lib/pages/docs-search-page/docs-search-page.component.ts @@ -4,11 +4,12 @@ import { toSignal } from '@angular/core/rxjs-interop'; import { Meta, Title } from '@angular/platform-browser'; import { ActivatedRoute, Router, RouterModule } from '@angular/router'; import { ENVIRONMENT, type Environment } from '@forepath/shared/frontend/util-configuration'; -import { addPageMetaTags, buildPageMetaTags } from '@forepath/shared/frontend/util-meta'; +import { addPageMetaTags, buildPageMetaTags, formatProductMetaTitle } from '@forepath/shared/frontend/util-meta'; import { filter, map } from 'rxjs'; import { DocsSearchComponent } from '../../components'; import { DocsSearchService, SearchResult } from '../../services'; +import { getDocsSearchMetaDescription } from '../../utils/docs-seo-metadata'; @Component({ selector: 'framework-docs-search-page', @@ -27,6 +28,10 @@ export class DocsSearchPageComponent implements OnInit { private readonly locale = inject(LOCALE_ID); private readonly destroyRef = inject(DestroyRef); + private get docsSiteOrigin(): string { + return `https://docs.${this.environment.docs.contentRoot}.com`; + } + /** * Search query from route */ @@ -49,8 +54,11 @@ export class DocsSearchPageComponent implements OnInit { readonly loading = signal(true); ngOnInit(): void { - const metaTitle = $localize`:@@featureDocsSearchPage-metaTitle:Search Documentation :: Agenstra`; - const metaDescription = $localize`:@@featureDocsSearchPage-metaDescription:Search Agenstra docs for setup guides, API references, security hardening, agent configuration, deployment patterns, and troubleshooting.`; + const metaTitle = formatProductMetaTitle( + $localize`:@@featureDocsSearchPage-metaTitlePrefix:Search Documentation`, + this.environment.productName, + ); + const metaDescription = getDocsSearchMetaDescription(this.environment.docs.contentRoot); this.titleService.setTitle(metaTitle); this.destroyRef.onDestroy( @@ -59,12 +67,13 @@ export class DocsSearchPageComponent implements OnInit { buildPageMetaTags({ description: metaDescription, robots: 'noindex, follow', - canonicalUrl: 'https://docs.agenstra.com/search', + canonicalUrl: `${this.docsSiteOrigin}/search`, socialTitle: metaTitle, socialDescription: metaDescription, socialImageUrl: this.environment.socialPreview.imageUrl, localeId: this.locale, localizeCanonicalUrl: this.environment.production, + siteName: this.environment.productName, }), ), ); diff --git a/libs/domains/agenstra/frontend/feature-docs/src/lib/pages/index.ts b/libs/domains/shared/frontend/feature-docs/src/lib/pages/index.ts similarity index 100% rename from libs/domains/agenstra/frontend/feature-docs/src/lib/pages/index.ts rename to libs/domains/shared/frontend/feature-docs/src/lib/pages/index.ts diff --git a/libs/domains/agenstra/frontend/feature-docs/src/lib/section.scss b/libs/domains/shared/frontend/feature-docs/src/lib/section.scss similarity index 100% rename from libs/domains/agenstra/frontend/feature-docs/src/lib/section.scss rename to libs/domains/shared/frontend/feature-docs/src/lib/section.scss diff --git a/libs/domains/agenstra/frontend/feature-docs/src/lib/services/docs-content.service.ts b/libs/domains/shared/frontend/feature-docs/src/lib/services/docs-content.service.ts similarity index 97% rename from libs/domains/agenstra/frontend/feature-docs/src/lib/services/docs-content.service.ts rename to libs/domains/shared/frontend/feature-docs/src/lib/services/docs-content.service.ts index dfa60fe97..8892b9ff9 100644 --- a/libs/domains/agenstra/frontend/feature-docs/src/lib/services/docs-content.service.ts +++ b/libs/domains/shared/frontend/feature-docs/src/lib/services/docs-content.service.ts @@ -1,7 +1,7 @@ import { HttpClient } from '@angular/common/http'; import { inject, Injectable } from '@angular/core'; import { DomSanitizer, SafeHtml } from '@angular/platform-browser'; -import { DocMetadata, MarkdownParserService } from '@forepath/agenstra/frontend/util-docs-parser'; +import { DocMetadata, MarkdownParserService } from '@forepath/shared/frontend/util-docs-parser'; import { catchError, from, Observable, of, shareReplay, switchMap, timeout } from 'rxjs'; /** diff --git a/libs/domains/agenstra/frontend/feature-docs/src/lib/services/docs-navigation.service.ts b/libs/domains/shared/frontend/feature-docs/src/lib/services/docs-navigation.service.ts similarity index 96% rename from libs/domains/agenstra/frontend/feature-docs/src/lib/services/docs-navigation.service.ts rename to libs/domains/shared/frontend/feature-docs/src/lib/services/docs-navigation.service.ts index a857c786e..178f74e6a 100644 --- a/libs/domains/agenstra/frontend/feature-docs/src/lib/services/docs-navigation.service.ts +++ b/libs/domains/shared/frontend/feature-docs/src/lib/services/docs-navigation.service.ts @@ -1,6 +1,6 @@ import { HttpClient } from '@angular/common/http'; import { inject, Injectable, signal } from '@angular/core'; -import { NavigationNode } from '@forepath/agenstra/frontend/util-docs-parser'; +import { NavigationNode } from '@forepath/shared/frontend/util-docs-parser'; import { catchError, map, Observable, of, shareReplay } from 'rxjs'; /** diff --git a/libs/domains/agenstra/frontend/feature-docs/src/lib/services/docs-search.service.ts b/libs/domains/shared/frontend/feature-docs/src/lib/services/docs-search.service.ts similarity index 97% rename from libs/domains/agenstra/frontend/feature-docs/src/lib/services/docs-search.service.ts rename to libs/domains/shared/frontend/feature-docs/src/lib/services/docs-search.service.ts index 7b1193d4b..7ea28ea7e 100644 --- a/libs/domains/agenstra/frontend/feature-docs/src/lib/services/docs-search.service.ts +++ b/libs/domains/shared/frontend/feature-docs/src/lib/services/docs-search.service.ts @@ -1,6 +1,6 @@ import { HttpClient } from '@angular/common/http'; import { inject, Injectable, signal } from '@angular/core'; -import { SearchIndex, SearchIndexEntry } from '@forepath/agenstra/frontend/util-docs-parser'; +import { SearchIndex, SearchIndexEntry } from '@forepath/shared/frontend/util-docs-parser'; import { catchError, Observable, of, shareReplay } from 'rxjs'; export interface SearchResult { diff --git a/libs/domains/agenstra/frontend/feature-docs/src/lib/services/index.ts b/libs/domains/shared/frontend/feature-docs/src/lib/services/index.ts similarity index 100% rename from libs/domains/agenstra/frontend/feature-docs/src/lib/services/index.ts rename to libs/domains/shared/frontend/feature-docs/src/lib/services/index.ts diff --git a/libs/domains/agenstra/frontend/feature-docs/src/lib/services/theme.service.ts b/libs/domains/shared/frontend/feature-docs/src/lib/services/theme.service.ts similarity index 100% rename from libs/domains/agenstra/frontend/feature-docs/src/lib/services/theme.service.ts rename to libs/domains/shared/frontend/feature-docs/src/lib/services/theme.service.ts diff --git a/libs/domains/shared/frontend/feature-docs/src/lib/utils/docs-seo-metadata.ts b/libs/domains/shared/frontend/feature-docs/src/lib/utils/docs-seo-metadata.ts new file mode 100644 index 000000000..61dc3528f --- /dev/null +++ b/libs/domains/shared/frontend/feature-docs/src/lib/utils/docs-seo-metadata.ts @@ -0,0 +1,27 @@ +/** + * SEO copy for docs pages. Translation units live in the shared docs app i18n catalogs; + * each brand selects units by docs content root while reusing the same id naming scheme. + */ +export function getDocsMetaDescriptionFallback(contentRoot: string): string { + if (contentRoot === 'decabill') { + return $localize`:@@featureDocsPage-metaDescriptionFallbackDecabill:Official Decabill documentation: install, deploy, secure, and operate billing APIs, subscriptions, payment processors, and the billing console for platform teams.`; + } + + return $localize`:@@featureDocsPage-metaDescriptionFallback:Official Agenstra documentation: install, deploy, secure, and operate agent hosts, workspaces, tickets, APIs, and integrations for platform teams.`; +} + +export function getDocsMetaKeywords(contentRoot: string): string { + if (contentRoot === 'decabill') { + return $localize`:@@featureDocsPage-metaKeywordsDecabill:Decabill, billing, subscriptions, payment processing, invoicing, Stripe, billing API, billing console, multi-tenant billing`; + } + + return $localize`:@@featureDocsPage-metaKeywords:Agenstra, AI agents, agent management, distributed systems, AI agent infrastructure, agent platform, AI agent console, container management, WebSocket agents, Docker agents`; +} + +export function getDocsSearchMetaDescription(contentRoot: string): string { + if (contentRoot === 'decabill') { + return $localize`:@@featureDocsSearchPage-metaDescriptionDecabill:Search Decabill docs for setup guides, API references, security hardening, billing configuration, deployment patterns, and troubleshooting.`; + } + + return $localize`:@@featureDocsSearchPage-metaDescription:Search Agenstra docs for setup guides, API references, security hardening, agent configuration, deployment patterns, and troubleshooting.`; +} diff --git a/libs/domains/agenstra/frontend/feature-docs/src/test-setup.ts b/libs/domains/shared/frontend/feature-docs/src/test-setup.ts similarity index 100% rename from libs/domains/agenstra/frontend/feature-docs/src/test-setup.ts rename to libs/domains/shared/frontend/feature-docs/src/test-setup.ts diff --git a/libs/domains/agenstra/frontend/feature-docs/tsconfig.json b/libs/domains/shared/frontend/feature-docs/tsconfig.json similarity index 100% rename from libs/domains/agenstra/frontend/feature-docs/tsconfig.json rename to libs/domains/shared/frontend/feature-docs/tsconfig.json diff --git a/libs/domains/agenstra/frontend/feature-docs/tsconfig.lib.json b/libs/domains/shared/frontend/feature-docs/tsconfig.lib.json similarity index 100% rename from libs/domains/agenstra/frontend/feature-docs/tsconfig.lib.json rename to libs/domains/shared/frontend/feature-docs/tsconfig.lib.json diff --git a/libs/domains/agenstra/frontend/feature-docs/tsconfig.spec.json b/libs/domains/shared/frontend/feature-docs/tsconfig.spec.json similarity index 100% rename from libs/domains/agenstra/frontend/feature-docs/tsconfig.spec.json rename to libs/domains/shared/frontend/feature-docs/tsconfig.spec.json diff --git a/libs/domains/shared/frontend/index.ts b/libs/domains/shared/frontend/index.ts index 511551daa..873e507bc 100644 --- a/libs/domains/shared/frontend/index.ts +++ b/libs/domains/shared/frontend/index.ts @@ -1,5 +1,7 @@ // shared domain frontend exports (browser-safe only; import server utilities via @forepath/shared/frontend/util-express-server or util-runtime-config-server) export * from './util-configuration/src'; export * from './util-cookie-consent/src'; +export * from './feature-docs/src'; +export * from './util-docs-parser/src'; export * from './util-loading-indicator/src'; export * from './util-meta/src'; diff --git a/libs/domains/shared/frontend/util-configuration/src/lib/environment.agenstra.production.ts b/libs/domains/shared/frontend/util-configuration/src/lib/environment.agenstra.production.ts index 993de543e..9733392a8 100644 --- a/libs/domains/shared/frontend/util-configuration/src/lib/environment.agenstra.production.ts +++ b/libs/domains/shared/frontend/util-configuration/src/lib/environment.agenstra.production.ts @@ -46,4 +46,7 @@ export const environment: Environment = { socialPreview: { imageUrl: 'https://agenstra.com/assets/images/og-preview.png', }, + docs: { + contentRoot: 'agenstra', + }, }; diff --git a/libs/domains/shared/frontend/util-configuration/src/lib/environment.agenstra.ts b/libs/domains/shared/frontend/util-configuration/src/lib/environment.agenstra.ts index d735c3d55..94c213773 100644 --- a/libs/domains/shared/frontend/util-configuration/src/lib/environment.agenstra.ts +++ b/libs/domains/shared/frontend/util-configuration/src/lib/environment.agenstra.ts @@ -47,4 +47,7 @@ export const environment: Environment = { socialPreview: { imageUrl: 'http://localhost:4300/assets/images/og-preview.png', }, + docs: { + contentRoot: 'agenstra', + }, }; diff --git a/libs/domains/shared/frontend/util-configuration/src/lib/environment.decabill.production.ts b/libs/domains/shared/frontend/util-configuration/src/lib/environment.decabill.production.ts index 4c119d231..e21389b4b 100644 --- a/libs/domains/shared/frontend/util-configuration/src/lib/environment.decabill.production.ts +++ b/libs/domains/shared/frontend/util-configuration/src/lib/environment.decabill.production.ts @@ -37,4 +37,7 @@ export const environment: Environment = { socialPreview: { imageUrl: 'https://decabill.com/assets/images/og-preview.png', }, + docs: { + contentRoot: 'decabill', + }, }; diff --git a/libs/domains/shared/frontend/util-configuration/src/lib/environment.decabill.ts b/libs/domains/shared/frontend/util-configuration/src/lib/environment.decabill.ts index ed20c863f..1c2a8241a 100644 --- a/libs/domains/shared/frontend/util-configuration/src/lib/environment.decabill.ts +++ b/libs/domains/shared/frontend/util-configuration/src/lib/environment.decabill.ts @@ -38,4 +38,7 @@ export const environment: Environment = { socialPreview: { imageUrl: 'http://localhost:4500/assets/images/og-preview.png', }, + docs: { + contentRoot: 'decabill', + }, }; diff --git a/libs/domains/shared/frontend/util-configuration/src/lib/environment.forepath.production.ts b/libs/domains/shared/frontend/util-configuration/src/lib/environment.forepath.production.ts index 285ba5388..17b89b164 100644 --- a/libs/domains/shared/frontend/util-configuration/src/lib/environment.forepath.production.ts +++ b/libs/domains/shared/frontend/util-configuration/src/lib/environment.forepath.production.ts @@ -37,4 +37,7 @@ export const environment: Environment = { socialPreview: { imageUrl: 'https://forepath.io/assets/images/og-preview.png', }, + docs: { + contentRoot: 'forepath', + }, }; diff --git a/libs/domains/shared/frontend/util-configuration/src/lib/environment.forepath.ts b/libs/domains/shared/frontend/util-configuration/src/lib/environment.forepath.ts index 1e2f7e063..8621e6b1e 100644 --- a/libs/domains/shared/frontend/util-configuration/src/lib/environment.forepath.ts +++ b/libs/domains/shared/frontend/util-configuration/src/lib/environment.forepath.ts @@ -38,4 +38,7 @@ export const environment: Environment = { socialPreview: { imageUrl: 'http://localhost:4400/assets/images/og-preview.png', }, + docs: { + contentRoot: 'forepath', + }, }; diff --git a/libs/domains/shared/frontend/util-configuration/src/lib/environment.interface.spec.ts b/libs/domains/shared/frontend/util-configuration/src/lib/environment.interface.spec.ts index 35976b0a2..02d5da84a 100644 --- a/libs/domains/shared/frontend/util-configuration/src/lib/environment.interface.spec.ts +++ b/libs/domains/shared/frontend/util-configuration/src/lib/environment.interface.spec.ts @@ -44,6 +44,9 @@ describe('Environment interfaces', () => { privacyPolicyUrl: 'https://example.com/privacy', termsUrl: 'https://example.com/terms', }, + docs: { + contentRoot: 'agenstra', + }, }; expect(validEnv.production).toBe(true); @@ -85,6 +88,9 @@ describe('Environment interfaces', () => { privacyPolicyUrl: 'https://example.com/privacy', termsUrl: 'https://example.com/terms', }, + docs: { + contentRoot: 'agenstra', + }, }; expect(validEnv.authentication).toBeDefined(); @@ -127,6 +133,9 @@ describe('Environment interfaces', () => { privacyPolicyUrl: 'https://example.com/privacy', termsUrl: 'https://example.com/terms', }, + docs: { + contentRoot: 'agenstra', + }, }; expect(envWithController.controller).toBeDefined(); @@ -170,6 +179,9 @@ describe('Environment interfaces', () => { privacyPolicyUrl: 'https://example.com/privacy', termsUrl: 'https://example.com/terms', }, + docs: { + contentRoot: 'agenstra', + }, }; expect(env.chatModelOptions).toBeDefined(); diff --git a/libs/domains/shared/frontend/util-configuration/src/lib/environment.interface.ts b/libs/domains/shared/frontend/util-configuration/src/lib/environment.interface.ts index a49560d29..dc9930580 100644 --- a/libs/domains/shared/frontend/util-configuration/src/lib/environment.interface.ts +++ b/libs/domains/shared/frontend/util-configuration/src/lib/environment.interface.ts @@ -54,4 +54,8 @@ export interface Environment { socialPreview: { imageUrl: string; }; + docs: { + /** Folder name under /docs/ and docs/ repo root, e.g. "agenstra" | "decabill" */ + contentRoot: string; + }; } diff --git a/libs/domains/shared/frontend/util-configuration/src/lib/environment.production.ts b/libs/domains/shared/frontend/util-configuration/src/lib/environment.production.ts index 993de543e..9733392a8 100644 --- a/libs/domains/shared/frontend/util-configuration/src/lib/environment.production.ts +++ b/libs/domains/shared/frontend/util-configuration/src/lib/environment.production.ts @@ -46,4 +46,7 @@ export const environment: Environment = { socialPreview: { imageUrl: 'https://agenstra.com/assets/images/og-preview.png', }, + docs: { + contentRoot: 'agenstra', + }, }; diff --git a/libs/domains/shared/frontend/util-configuration/src/lib/environment.token.ts b/libs/domains/shared/frontend/util-configuration/src/lib/environment.token.ts index c500157ca..354d71ac3 100644 --- a/libs/domains/shared/frontend/util-configuration/src/lib/environment.token.ts +++ b/libs/domains/shared/frontend/util-configuration/src/lib/environment.token.ts @@ -26,6 +26,7 @@ function mergeEnvironmentOverrides(base: Environment, overrides: Partial/src/test-setup.ts'], - coverageDirectory: '../../../../../coverage/libs/domains/agenstra/frontend/util-docs-parser', + coverageDirectory: '../../../../../coverage/libs/domains/shared/frontend/util-docs-parser', transform: { '^.+\\.(ts|mjs|js|html)$': [ 'jest-preset-angular', diff --git a/libs/domains/shared/frontend/util-docs-parser/project.json b/libs/domains/shared/frontend/util-docs-parser/project.json new file mode 100644 index 000000000..3dfee2494 --- /dev/null +++ b/libs/domains/shared/frontend/util-docs-parser/project.json @@ -0,0 +1,21 @@ +{ + "name": "shared-frontend-util-docs-parser", + "$schema": "../../../../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "libs/domains/shared/frontend/util-docs-parser/src", + "prefix": "framework", + "projectType": "library", + "tags": ["domain:shared", "scope:frontend", "type:util"], + "targets": { + "test": { + "executor": "@nx/jest:jest", + "outputs": ["{workspaceRoot}/coverage/{projectRoot}"], + "options": { + "jestConfig": "libs/domains/shared/frontend/util-docs-parser/jest.config.ts", + "tsConfig": "libs/domains/shared/frontend/util-docs-parser/tsconfig.spec.json" + } + }, + "lint": { + "executor": "@nx/eslint:lint" + } + } +} diff --git a/libs/domains/agenstra/frontend/util-docs-parser/src/index.ts b/libs/domains/shared/frontend/util-docs-parser/src/index.ts similarity index 100% rename from libs/domains/agenstra/frontend/util-docs-parser/src/index.ts rename to libs/domains/shared/frontend/util-docs-parser/src/index.ts diff --git a/libs/domains/agenstra/frontend/util-docs-parser/src/lib/interfaces/doc-metadata.interface.ts b/libs/domains/shared/frontend/util-docs-parser/src/lib/interfaces/doc-metadata.interface.ts similarity index 100% rename from libs/domains/agenstra/frontend/util-docs-parser/src/lib/interfaces/doc-metadata.interface.ts rename to libs/domains/shared/frontend/util-docs-parser/src/lib/interfaces/doc-metadata.interface.ts diff --git a/libs/domains/agenstra/frontend/util-docs-parser/src/lib/interfaces/index.ts b/libs/domains/shared/frontend/util-docs-parser/src/lib/interfaces/index.ts similarity index 100% rename from libs/domains/agenstra/frontend/util-docs-parser/src/lib/interfaces/index.ts rename to libs/domains/shared/frontend/util-docs-parser/src/lib/interfaces/index.ts diff --git a/libs/domains/agenstra/frontend/util-docs-parser/src/lib/interfaces/navigation-node.interface.ts b/libs/domains/shared/frontend/util-docs-parser/src/lib/interfaces/navigation-node.interface.ts similarity index 100% rename from libs/domains/agenstra/frontend/util-docs-parser/src/lib/interfaces/navigation-node.interface.ts rename to libs/domains/shared/frontend/util-docs-parser/src/lib/interfaces/navigation-node.interface.ts diff --git a/libs/domains/agenstra/frontend/util-docs-parser/src/lib/interfaces/search-index.interface.ts b/libs/domains/shared/frontend/util-docs-parser/src/lib/interfaces/search-index.interface.ts similarity index 100% rename from libs/domains/agenstra/frontend/util-docs-parser/src/lib/interfaces/search-index.interface.ts rename to libs/domains/shared/frontend/util-docs-parser/src/lib/interfaces/search-index.interface.ts diff --git a/libs/domains/agenstra/frontend/util-docs-parser/src/lib/services/cross-reference-resolver.service.ts b/libs/domains/shared/frontend/util-docs-parser/src/lib/services/cross-reference-resolver.service.ts similarity index 100% rename from libs/domains/agenstra/frontend/util-docs-parser/src/lib/services/cross-reference-resolver.service.ts rename to libs/domains/shared/frontend/util-docs-parser/src/lib/services/cross-reference-resolver.service.ts diff --git a/libs/domains/agenstra/frontend/util-docs-parser/src/lib/services/index.ts b/libs/domains/shared/frontend/util-docs-parser/src/lib/services/index.ts similarity index 100% rename from libs/domains/agenstra/frontend/util-docs-parser/src/lib/services/index.ts rename to libs/domains/shared/frontend/util-docs-parser/src/lib/services/index.ts diff --git a/libs/domains/agenstra/frontend/util-docs-parser/src/lib/services/markdown-parser.service.ts b/libs/domains/shared/frontend/util-docs-parser/src/lib/services/markdown-parser.service.ts similarity index 100% rename from libs/domains/agenstra/frontend/util-docs-parser/src/lib/services/markdown-parser.service.ts rename to libs/domains/shared/frontend/util-docs-parser/src/lib/services/markdown-parser.service.ts diff --git a/libs/domains/agenstra/frontend/util-docs-parser/src/lib/services/navigation-builder.service.ts b/libs/domains/shared/frontend/util-docs-parser/src/lib/services/navigation-builder.service.ts similarity index 100% rename from libs/domains/agenstra/frontend/util-docs-parser/src/lib/services/navigation-builder.service.ts rename to libs/domains/shared/frontend/util-docs-parser/src/lib/services/navigation-builder.service.ts diff --git a/libs/domains/agenstra/frontend/util-docs-parser/src/lib/services/search-index-builder.service.ts b/libs/domains/shared/frontend/util-docs-parser/src/lib/services/search-index-builder.service.ts similarity index 100% rename from libs/domains/agenstra/frontend/util-docs-parser/src/lib/services/search-index-builder.service.ts rename to libs/domains/shared/frontend/util-docs-parser/src/lib/services/search-index-builder.service.ts diff --git a/libs/domains/agenstra/frontend/util-docs-parser/src/test-setup.ts b/libs/domains/shared/frontend/util-docs-parser/src/test-setup.ts similarity index 100% rename from libs/domains/agenstra/frontend/util-docs-parser/src/test-setup.ts rename to libs/domains/shared/frontend/util-docs-parser/src/test-setup.ts diff --git a/libs/domains/agenstra/frontend/util-docs-parser/tsconfig.json b/libs/domains/shared/frontend/util-docs-parser/tsconfig.json similarity index 100% rename from libs/domains/agenstra/frontend/util-docs-parser/tsconfig.json rename to libs/domains/shared/frontend/util-docs-parser/tsconfig.json diff --git a/libs/domains/agenstra/frontend/util-docs-parser/tsconfig.lib.json b/libs/domains/shared/frontend/util-docs-parser/tsconfig.lib.json similarity index 100% rename from libs/domains/agenstra/frontend/util-docs-parser/tsconfig.lib.json rename to libs/domains/shared/frontend/util-docs-parser/tsconfig.lib.json diff --git a/libs/domains/agenstra/frontend/util-docs-parser/tsconfig.spec.json b/libs/domains/shared/frontend/util-docs-parser/tsconfig.spec.json similarity index 100% rename from libs/domains/agenstra/frontend/util-docs-parser/tsconfig.spec.json rename to libs/domains/shared/frontend/util-docs-parser/tsconfig.spec.json diff --git a/libs/domains/shared/frontend/util-express-server/src/index.ts b/libs/domains/shared/frontend/util-express-server/src/index.ts index af1509f17..578133ec8 100644 --- a/libs/domains/shared/frontend/util-express-server/src/index.ts +++ b/libs/domains/shared/frontend/util-express-server/src/index.ts @@ -1,3 +1,9 @@ +export { createDocsServer, type DocsServerBootstrap } from './lib/docs-server'; +export { + registerRuntimeConfigEndpoint, + type RuntimeConfigRouteEnv, + type RuntimeConfigRouteLogger, +} from './lib/runtime-config-route'; export { createSecurityHeadersMiddleware, parseCspConnectSrcExtra, @@ -5,9 +11,4 @@ export { resolveCspFrameAncestorsSources, type SecurityHeadersEnv, } from './lib/security-headers'; -export { - registerRuntimeConfigEndpoint, - type RuntimeConfigRouteEnv, - type RuntimeConfigRouteLogger, -} from './lib/runtime-config-route'; export { buildSsrAllowedHosts } from './lib/ssr-allowed-hosts'; diff --git a/libs/domains/shared/frontend/util-express-server/src/lib/docs-server.ts b/libs/domains/shared/frontend/util-express-server/src/lib/docs-server.ts new file mode 100644 index 000000000..f8da1ba50 --- /dev/null +++ b/libs/domains/shared/frontend/util-express-server/src/lib/docs-server.ts @@ -0,0 +1,50 @@ +import { dirname, join, resolve } from 'node:path'; +import { fileURLToPath } from 'node:url'; + +import { APP_BASE_HREF } from '@angular/common'; +import { CommonEngine } from '@angular/ssr/node'; +import express, { type Express } from 'express'; + +import { registerRuntimeConfigEndpoint } from './runtime-config-route'; +import { createSecurityHeadersMiddleware } from './security-headers'; +import { buildSsrAllowedHosts } from './ssr-allowed-hosts'; + +export type DocsServerBootstrap = Parameters[0]['bootstrap']; + +export function createDocsServer(apexDomains: readonly string[], bootstrap: DocsServerBootstrap): Express { + const serverDistFolder = dirname(fileURLToPath(import.meta.url)); + const browserDistFolder = resolve(serverDistFolder, '../browser'); + const indexHtml = join(serverDistFolder, 'index.server.html'); + const app = express(); + const commonEngine = new CommonEngine({ + allowedHosts: buildSsrAllowedHosts(apexDomains), + }); + + app.use(createSecurityHeadersMiddleware()); + registerRuntimeConfigEndpoint(app); + + app.get( + '**', + express.static(browserDistFolder, { + maxAge: '1y', + index: 'index.html', + }), + ); + + app.get('**', (req, res, next) => { + const { protocol, originalUrl, baseUrl, headers } = req; + + commonEngine + .render({ + bootstrap, + documentFilePath: indexHtml, + url: `${protocol}://${headers.host}${originalUrl}`, + publicPath: browserDistFolder, + providers: [{ provide: APP_BASE_HREF, useValue: baseUrl }], + }) + .then((html) => res.send(html)) + .catch((err) => next(err)); + }); + + return app; +} diff --git a/libs/domains/shared/frontend/util-meta/src/lib/utils/page-meta.util.ts b/libs/domains/shared/frontend/util-meta/src/lib/utils/page-meta.util.ts index 68512d162..5fa7bfc07 100644 --- a/libs/domains/shared/frontend/util-meta/src/lib/utils/page-meta.util.ts +++ b/libs/domains/shared/frontend/util-meta/src/lib/utils/page-meta.util.ts @@ -1,18 +1,25 @@ -const META_TITLE_SUFFIX = ' :: Agenstra'; /** Conservative limit for ~580px in Google SERP title rendering. */ const META_TITLE_MAX_LENGTH = 58; /** Conservative limit for ~920px in Google SERP description rendering. */ const META_DESCRIPTION_MAX_LENGTH = 155; /** - * Formats a browser title as " :: Agenstra", truncating when needed. + * Formats a browser title as " :: ", truncating when needed. */ -export function formatAgenstraMetaTitle(pageTitle: string): string { +export function formatProductMetaTitle(pageTitle: string, productName: string): string { + const suffix = ` :: ${productName}`; const trimmed = pageTitle.trim(); - const maxPageLength = META_TITLE_MAX_LENGTH - META_TITLE_SUFFIX.length; + const maxPageLength = META_TITLE_MAX_LENGTH - suffix.length; const page = trimmed.length > maxPageLength ? `${trimmed.slice(0, maxPageLength - 1).trimEnd()}…` : trimmed; - return `${page}${META_TITLE_SUFFIX}`; + return `${page}${suffix}`; +} + +/** + * Formats a browser title as " :: Agenstra", truncating when needed. + */ +export function formatAgenstraMetaTitle(pageTitle: string): string { + return formatProductMetaTitle(pageTitle, 'Agenstra'); } /** diff --git a/libs/domains/shared/frontend/util-meta/src/lib/utils/social-preview-meta.util.spec.ts b/libs/domains/shared/frontend/util-meta/src/lib/utils/social-preview-meta.util.spec.ts index f8d2e13cc..1d5b7e877 100644 --- a/libs/domains/shared/frontend/util-meta/src/lib/utils/social-preview-meta.util.spec.ts +++ b/libs/domains/shared/frontend/util-meta/src/lib/utils/social-preview-meta.util.spec.ts @@ -3,6 +3,7 @@ import { Meta } from '@angular/platform-browser'; import { addPageMetaTags, buildSocialPreviewMetaTags, + createDocsPageDynamicMetaTagStubs, formatSocialPreviewDescription, formatSocialPreviewTitle, getMetaTagSelector, @@ -110,4 +111,36 @@ describe('buildSocialPreviewMetaTags', () => { ]), ); }); + + it('uses the provided site name for og:site_name', () => { + const tags = buildSocialPreviewMetaTags({ + title: 'Documentation :: Decabill', + description: 'Short description.', + canonicalUrl: 'https://docs.decabill.com/docs', + imageUrl: 'https://decabill.com/assets/images/og-preview.png', + siteName: 'Decabill', + }); + + expect(tags).toEqual(expect.arrayContaining([{ property: 'og:site_name', content: 'Decabill' }])); + }); +}); + +describe('createDocsPageDynamicMetaTagStubs', () => { + it('builds brand-specific social preview stubs for cleanup', () => { + const tags = createDocsPageDynamicMetaTagStubs({ + docsSiteOrigin: 'https://docs.decabill.com', + imageUrl: 'https://decabill.com/assets/images/og-preview.png', + siteName: 'Decabill', + }); + + expect(tags).toEqual( + expect.arrayContaining([ + { name: 'description', content: '' }, + { name: 'canonical', content: '' }, + { property: 'og:site_name', content: 'Decabill' }, + { property: 'og:url', content: 'https://docs.decabill.com' }, + { property: 'og:image', content: 'https://decabill.com/assets/images/og-preview.png' }, + ]), + ); + }); }); diff --git a/libs/domains/shared/frontend/util-meta/src/lib/utils/social-preview-meta.util.ts b/libs/domains/shared/frontend/util-meta/src/lib/utils/social-preview-meta.util.ts index 2bf714b34..fb0c2b0f2 100644 --- a/libs/domains/shared/frontend/util-meta/src/lib/utils/social-preview-meta.util.ts +++ b/libs/domains/shared/frontend/util-meta/src/lib/utils/social-preview-meta.util.ts @@ -37,6 +37,13 @@ export interface PageMetaTagsInput { localeId: string; localizeCanonicalUrl: boolean; socialType?: 'website' | 'article'; + siteName?: string; +} + +export interface DocsPageDynamicMetaTagStubsInput { + docsSiteOrigin: string; + imageUrl: string; + siteName: string; } /** @@ -170,6 +177,7 @@ export function buildPageMetaTags(input: PageMetaTagsInput): MetaDefinition[] { localeId: input.localeId, localizeCanonicalUrl: input.localizeCanonicalUrl, type: input.socialType, + siteName: input.siteName, }), ); @@ -179,16 +187,19 @@ export function buildPageMetaTags(input: PageMetaTagsInput): MetaDefinition[] { /** * Meta tags updated at runtime on documentation pages (description, canonical, social). */ -export const DOCS_PAGE_DYNAMIC_META_TAG_STUBS: MetaDefinition[] = [ - { name: 'description', content: '' }, - { name: 'canonical', content: '' }, - ...buildSocialPreviewMetaTags({ - title: '', - description: '', - canonicalUrl: 'https://docs.agenstra.com', - imageUrl: 'https://docs.agenstra.com/assets/images/og-preview.png', - }), -]; +export function createDocsPageDynamicMetaTagStubs(input: DocsPageDynamicMetaTagStubsInput): MetaDefinition[] { + return [ + { name: 'description', content: '' }, + { name: 'canonical', content: '' }, + ...buildSocialPreviewMetaTags({ + title: '', + description: '', + canonicalUrl: input.docsSiteOrigin, + imageUrl: input.imageUrl, + siteName: input.siteName, + }), + ]; +} export function getMetaTagSelector(tag: MetaDefinition): string | null { if ('name' in tag && tag.name) { diff --git a/libs/domains/shared/frontend/util-runtime-config-server/README.md b/libs/domains/shared/frontend/util-runtime-config-server/README.md index 32e1e2d47..4283c2a31 100644 --- a/libs/domains/shared/frontend/util-runtime-config-server/README.md +++ b/libs/domains/shared/frontend/util-runtime-config-server/README.md @@ -2,7 +2,7 @@ Shared utilities for Angular SSR **Express** servers that expose `GET /config`: fetch and validate remote JSON from `CONFIG`, plus cache headers for success and error responses. -Used by `agenstra-frontend-agent-console`, `agenstra-frontend-billing-console`, `agenstra-frontend-landingpage`, and `agenstra-frontend-docs` (`src/server.ts`). +Used by `agenstra-frontend-agent-console`, `agenstra-frontend-billing-console`, `agenstra-frontend-landingpage`, `agenstra-frontend-docs`, `decabill-frontend-docs`, and the shared docs base (`apps/shared/frontend-docs/src/server.ts`). ## Public API diff --git a/tools/ci/container-image-sbom-upload-matrix.sh b/tools/ci/container-image-sbom-upload-matrix.sh index bea48948d..74d73a133 100755 --- a/tools/ci/container-image-sbom-upload-matrix.sh +++ b/tools/ci/container-image-sbom-upload-matrix.sh @@ -15,6 +15,7 @@ fi KNOWN_IMAGE_NAMES=( decabill-billing-console-server decabill-billing-api + decabill-docs-server agenstra-billing-console-server agenstra-console-server agenstra-controller-api diff --git a/tools/ci/upload-release-sboms-by-domain.sh b/tools/ci/upload-release-sboms-by-domain.sh index 406f14358..177f5704b 100755 --- a/tools/ci/upload-release-sboms-by-domain.sh +++ b/tools/ci/upload-release-sboms-by-domain.sh @@ -40,6 +40,12 @@ is_decabill_sbom() { esac } +# Docs SBOM routing (no script changes required — covered by patterns above): +# agenstra-frontend-docs.cdx.json -> agenstra bucket +# decabill-frontend-docs.cdx.json -> decabill bucket +# container-agenstra-docs-server.cdx.json -> agenstra bucket +# container-decabill-docs-server.cdx.json -> decabill bucket + staging_dir="$(mktemp -d)" trap 'rm -rf "$staging_dir"' EXIT diff --git a/tools/docs/generate-docs.ts b/tools/docs/generate-docs.ts index 6b07b336e..10c352f1a 100644 --- a/tools/docs/generate-docs.ts +++ b/tools/docs/generate-docs.ts @@ -32,21 +32,31 @@ interface SearchIndex { entries: SearchIndexEntry[]; } -/** - * Build-time documentation generator - * Scans /docs/agenstra and generates navigation.json and index.json - */ - -const DOCS_ROOT = path.join(process.cwd(), 'docs', 'agenstra'); -// Generate to a temp location that won't be cleaned by Angular build -const OUTPUT_DIR = path.join(process.cwd(), 'dist', 'apps', 'frontend-docs-temp', 'assets', 'docs'); -const CONTENT_OUTPUT_DIR = path.join(process.cwd(), 'dist', 'apps', 'frontend-docs-temp', 'public', 'docs'); +interface GenerateDocsOptions { + contentRoot: string; + outputTemp: string; +} interface FileInfo { path: string; content: string; } +function parseArgs(): GenerateDocsOptions { + let contentRoot = 'agenstra'; + let outputTemp = 'dist/apps/agenstra/frontend-docs-temp'; + + for (const arg of process.argv.slice(2)) { + if (arg.startsWith('--contentRoot=')) { + contentRoot = arg.split('=')[1] ?? contentRoot; + } else if (arg.startsWith('--outputTemp=')) { + outputTemp = arg.split('=')[1] ?? outputTemp; + } + } + + return { contentRoot, outputTemp }; +} + /** * Recursively scan directory for markdown files */ @@ -72,8 +82,8 @@ async function scanMarkdownFiles(dir: string, basePath: string = ''): Promise { - const fullPath = path.join(DOCS_ROOT, filePath); +async function readMarkdownFile(docsRoot: string, filePath: string): Promise { + const fullPath = path.join(docsRoot, filePath); const content = await fs.readFile(fullPath, 'utf-8'); return { path: filePath, content }; } @@ -155,7 +165,6 @@ function extractHeadings(content: string): Array<{ level: number; text: string; if (level && text) { // Strip markdown link syntax from heading text - // Convert [text](url) to just "text" text = text.replace(/\[([^\]]+)\]\([^\)]+\)/g, '$1'); const id = text .toLowerCase() @@ -170,10 +179,15 @@ function extractHeadings(content: string): Array<{ level: number; text: string; return headings; } +function stripContentRootPrefix(pathWithoutExt: string, contentRoot: string): string { + const prefix = `${contentRoot}/`; + return pathWithoutExt.startsWith(prefix) ? pathWithoutExt.substring(prefix.length) : pathWithoutExt; +} + /** * Build navigation tree from file list */ -function buildNavigationTree(files: string[], basePath: string = '/docs'): NavigationNode[] { +function buildNavigationTree(files: string[], contentRoot: string, basePath: string = '/docs'): NavigationNode[] { const tree: NavigationNode[] = []; const nodeMap = new Map(); @@ -185,7 +199,7 @@ function buildNavigationTree(files: string[], basePath: string = '/docs'): Navig const isReadme = fileName.toLowerCase() === 'readme.md'; const pathSegments = parts.slice(0, -1); - const routePath = buildRoutePath(basePath, file, isReadme); + const routePath = buildRoutePath(basePath, file, isReadme, contentRoot); let parent: NavigationNode[] = tree; let currentPath = ''; @@ -196,7 +210,7 @@ function buildNavigationTree(files: string[], basePath: string = '/docs'): Navig let folderNode = nodeMap.get(currentPath); if (!folderNode) { - const folderRoutePath = buildRoutePath(basePath, `${currentPath}/README.md`, true); + const folderRoutePath = buildRoutePath(basePath, `${currentPath}/README.md`, true, contentRoot); folderNode = { title: formatTitle(segment), path: folderRoutePath, @@ -245,23 +259,18 @@ function buildNavigationTree(files: string[], basePath: string = '/docs'): Navig return tree; } -function buildRoutePath(basePath: string, file: string, isReadme: boolean): string { +function buildRoutePath(basePath: string, file: string, isReadme: boolean, contentRoot: string): string { const pathWithoutExt = file.replace(/\.md$/, ''); - - // Remove "agenstra/" prefix from file path for route generation - // Files are in "agenstra/" folder, but routes don't include this prefix - const pathWithoutAgenstra = pathWithoutExt.startsWith('agenstra/') - ? pathWithoutExt.substring('agenstra/'.length) - : pathWithoutExt; + const pathWithoutRoot = stripContentRootPrefix(pathWithoutExt, contentRoot); if (isReadme) { - const parts = pathWithoutAgenstra.split('/'); - parts.pop(); // Remove 'README' + const parts = pathWithoutRoot.split('/'); + parts.pop(); const dirPath = parts.join('/'); return dirPath ? `${basePath}/${dirPath}` : basePath; } - return `${basePath}/${pathWithoutAgenstra}`; + return `${basePath}/${pathWithoutRoot}`; } function formatTitle(name: string): string { @@ -272,16 +281,10 @@ function formatTitle(name: string): string { } function sortNavigationNodes(nodes: NavigationNode[]): void { - // Sort nodes: categories (folders with non-empty children) first, then links (files without children property or empty children) - // Both sorted alphabetically within their group - // IMPORTANT: Use a stable sort by first separating categories and links, then sorting each group const categories: NavigationNode[] = []; const links: NavigationNode[] = []; - // Separate categories and links for (const node of nodes) { - // A node is a category if it has a children property AND has at least one child - // A node is a link if it doesn't have a children property OR has an empty children array if (node.children !== undefined && node.children.length > 0) { categories.push(node); } else { @@ -289,15 +292,12 @@ function sortNavigationNodes(nodes: NavigationNode[]): void { } } - // Sort each group alphabetically categories.sort((a, b) => a.title.localeCompare(b.title)); links.sort((a, b) => a.title.localeCompare(b.title)); - // Replace the original array with sorted categories first, then links nodes.length = 0; nodes.push(...categories, ...links); - // Recursively sort children for (const node of nodes) { if (node.children && node.children.length > 0) { sortNavigationNodes(node.children); @@ -323,37 +323,35 @@ function extractSearchableContent(content: string): string { /** * Main generation function */ -async function generateDocs(): Promise { - console.log('Generating documentation files...'); +async function generateDocs(options: GenerateDocsOptions): Promise { + const { contentRoot, outputTemp } = options; + const docsRoot = path.join(process.cwd(), 'docs', contentRoot); + const outputDir = path.join(process.cwd(), outputTemp, 'assets', 'docs'); + const contentOutputDir = path.join(process.cwd(), outputTemp, 'public', 'docs'); + + console.log(`Generating documentation files for ${contentRoot}...`); - // Ensure output directory exists - await fs.mkdir(OUTPUT_DIR, { recursive: true }); + await fs.mkdir(outputDir, { recursive: true }); - // Check if docs directory exists try { - await fs.access(DOCS_ROOT); + await fs.access(docsRoot); } catch { - console.warn(`Docs directory not found: ${DOCS_ROOT}`); - // Create empty navigation and index - await fs.writeFile(path.join(OUTPUT_DIR, 'navigation.json'), JSON.stringify({ sections: [] }, null, 2)); - await fs.writeFile(path.join(OUTPUT_DIR, 'index.json'), JSON.stringify({ entries: [] }, null, 2)); + console.warn(`Docs directory not found: ${docsRoot}`); + await fs.writeFile(path.join(outputDir, 'navigation.json'), JSON.stringify({ sections: [] }, null, 2)); + await fs.writeFile(path.join(outputDir, 'index.json'), JSON.stringify({ entries: [] }, null, 2)); return; } - // Scan for markdown files - const files = await scanMarkdownFiles(DOCS_ROOT); + const files = await scanMarkdownFiles(docsRoot); console.log(`Found ${files.length} markdown files`); - // Read all files - const fileContents = await Promise.all(files.map((f) => readMarkdownFile(f))); + const fileContents = await Promise.all(files.map((f) => readMarkdownFile(docsRoot, f))); - // Configure marked marked.setOptions({ breaks: true, gfm: true, }); - // Parse files and extract metadata const metadata: DocMetadata[] = await Promise.all( fileContents.map(async (file) => { const title = extractTitle(file.content, file.path); @@ -376,31 +374,23 @@ async function generateDocs(): Promise { }), ); - // Build navigation tree - // Note: Routes don't include "agenstra" prefix, but files are in "agenstra/" folder - const navigationTree = buildNavigationTree(files, '/docs'); + const navigationTree = buildNavigationTree(files, contentRoot, '/docs'); - // Build search index const searchIndex: SearchIndex = { entries: metadata.map((doc) => { const pathWithoutExt = doc.path.replace(/\.md$/, ''); const isReadme = doc.path.toLowerCase().endsWith('readme.md'); - - // Remove "agenstra/" prefix from file path for route generation - // Files are in "agenstra/" folder, but routes don't include this prefix - const pathWithoutAgenstra = pathWithoutExt.startsWith('agenstra/') - ? pathWithoutExt.substring('agenstra/'.length) - : pathWithoutExt; + const pathWithoutRoot = stripContentRootPrefix(pathWithoutExt, contentRoot); let routePath: string; if (isReadme) { - const parts = pathWithoutAgenstra.split('/'); - parts.pop(); // Remove 'README' + const parts = pathWithoutRoot.split('/'); + parts.pop(); const dirPath = parts.join('/'); routePath = dirPath ? `/docs/${dirPath}` : '/docs'; } else { - routePath = `/docs/${pathWithoutAgenstra}`; + routePath = `/docs/${pathWithoutRoot}`; } return { @@ -413,20 +403,13 @@ async function generateDocs(): Promise { }), }; - // Write navigation.json - await fs.writeFile(path.join(OUTPUT_DIR, 'navigation.json'), JSON.stringify({ sections: navigationTree }, null, 2)); - - // Write index.json - await fs.writeFile(path.join(OUTPUT_DIR, 'index.json'), JSON.stringify(searchIndex, null, 2)); + await fs.writeFile(path.join(outputDir, 'navigation.json'), JSON.stringify({ sections: navigationTree }, null, 2)); + await fs.writeFile(path.join(outputDir, 'index.json'), JSON.stringify(searchIndex, null, 2)); - // Copy markdown files to public directory for serving - // Preserve the agenstra folder structure: agenstra/file.md -> public/docs/agenstra/file.md - await fs.mkdir(CONTENT_OUTPUT_DIR, { recursive: true }); + await fs.mkdir(contentOutputDir, { recursive: true }); for (const file of files) { - const sourcePath = path.join(DOCS_ROOT, file); - // Preserve agenstra folder: file is like "getting-started.md" or "features/README.md" - // We want it at public/docs/agenstra/getting-started.md - const destPath = path.join(CONTENT_OUTPUT_DIR, 'agenstra', file); + const sourcePath = path.join(docsRoot, file); + const destPath = path.join(contentOutputDir, contentRoot, file); const destDir = path.dirname(destPath); await fs.mkdir(destDir, { recursive: true }); await fs.copyFile(sourcePath, destPath); @@ -438,12 +421,8 @@ async function generateDocs(): Promise { console.log(`- Content files: ${files.length} markdown files copied`); } -// Run if executed directly -// For ES modules, we can check if this is the main module by comparing import.meta.url with the script path -// Since we're compiling with --module esnext, we use ES module syntax const getCurrentFilePath = () => { const url = import.meta.url; - // Remove file:// protocol and handle both absolute and relative paths if (url.startsWith('file://')) { return url.replace('file://', ''); } @@ -452,7 +431,6 @@ const getCurrentFilePath = () => { const currentFilePath = getCurrentFilePath(); const scriptPath = process.argv[1]; -// Check if the current file matches the script being executed const isMainModule = currentFilePath === scriptPath || currentFilePath.endsWith(scriptPath) || @@ -460,10 +438,10 @@ const isMainModule = currentFilePath.includes('generate-docs.js'); if (isMainModule) { - generateDocs().catch((error) => { + generateDocs(parseArgs()).catch((error) => { console.error('Error generating documentation:', error); process.exit(1); }); } -export { generateDocs }; +export { generateDocs, parseArgs }; diff --git a/tsconfig.base.json b/tsconfig.base.json index eadc7b10b..88edf15a7 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -15,6 +15,9 @@ "skipDefaultLibCheck": true, "baseUrl": ".", "paths": { + "@forepath/shared/frontend/util-docs-bootstrap": [ + "apps/shared/frontend-docs/src/main.server.ts" + ], "@forepath/shared/frontend/util-express-server": [ "libs/domains/shared/frontend/util-express-server/src/index.ts" ], @@ -79,15 +82,9 @@ "@forepath/agenstra/frontend/feature-agent-console": [ "libs/domains/agenstra/frontend/feature-agent-console/src/index.ts" ], - "@forepath/agenstra/frontend/feature-docs": [ - "libs/domains/agenstra/frontend/feature-docs/src/index.ts" - ], "@forepath/agenstra/frontend/feature-landingpage": [ "libs/domains/agenstra/frontend/feature-landingpage/src/index.ts" ], - "@forepath/agenstra/frontend/util-docs-parser": [ - "libs/domains/agenstra/frontend/util-docs-parser/src/index.ts" - ], "@forepath/forepath/frontend/feature-landingpage": [ "libs/domains/forepath/frontend/feature-landingpage/src/index.ts" ], @@ -110,6 +107,12 @@ ], "@forepath/shared/backend/util-dynamic-provider-registry": [ "libs/domains/shared/backend/util-dynamic-provider-registry/src/index.ts" + ], + "@forepath/shared/frontend/util-docs-parser": [ + "libs/domains/shared/frontend/util-docs-parser/src/index.ts" + ], + "@forepath/shared/frontend/feature-docs": [ + "libs/domains/shared/frontend/feature-docs/src/index.ts" ] } }, From ecc245788804691534ba0812b0df61b12d809b0a Mon Sep 17 00:00:00 2001 From: Marcel Menk Date: Sat, 20 Jun 2026 15:26:45 +0200 Subject: [PATCH 2/3] fix: delegating server language identification order --- .../src/delegating-server.ts | 18 ++++++------ .../frontend-docs/src/delegating-server.ts | 14 +++++----- .../files/ssr/delegating-server.ts.template | 28 +++++++++---------- 3 files changed, 30 insertions(+), 30 deletions(-) diff --git a/apps/forepath/frontend-landingpage/src/delegating-server.ts b/apps/forepath/frontend-landingpage/src/delegating-server.ts index 38960cd4d..f8df17681 100644 --- a/apps/forepath/frontend-landingpage/src/delegating-server.ts +++ b/apps/forepath/frontend-landingpage/src/delegating-server.ts @@ -1,6 +1,6 @@ +import { createReadStream, existsSync, statSync } from 'node:fs'; import { createServer, IncomingMessage, ServerResponse } from 'node:http'; -import { readFileSync, existsSync, createReadStream, statSync } from 'node:fs'; -import { join, dirname, extname } from 'node:path'; +import { dirname, extname, join } from 'node:path'; import { fileURLToPath } from 'node:url'; const __filename = fileURLToPath(import.meta.url); @@ -30,6 +30,13 @@ async function loadLocaleServers() { } function getLocaleFromRequest(req: IncomingMessage): string { + const url = new URL(req.url || '', `http://${req.headers.host}`); + const pathSegments = url.pathname.split('/').filter(Boolean); + + if (pathSegments.length > 0 && AVAILABLE_LOCALES.includes(pathSegments[0])) { + return pathSegments[0]; + } + const acceptLanguage = req.headers['accept-language']; if (acceptLanguage) { @@ -40,13 +47,6 @@ function getLocaleFromRequest(req: IncomingMessage): string { } } - const url = new URL(req.url || '', `http://${req.headers.host}`); - const pathSegments = url.pathname.split('/').filter(Boolean); - - if (pathSegments.length > 0 && AVAILABLE_LOCALES.includes(pathSegments[0])) { - return pathSegments[0]; - } - return DEFAULT_LOCALE; } diff --git a/apps/shared/frontend-docs/src/delegating-server.ts b/apps/shared/frontend-docs/src/delegating-server.ts index 6159c51fa..c030512ea 100644 --- a/apps/shared/frontend-docs/src/delegating-server.ts +++ b/apps/shared/frontend-docs/src/delegating-server.ts @@ -29,6 +29,13 @@ async function loadLocaleServers() { } function getLocaleFromRequest(req: IncomingMessage): string { + const url = new URL(req.url || '', `http://${req.headers.host}`); + const pathSegments = url.pathname.split('/').filter(Boolean); + + if (pathSegments.length > 0 && AVAILABLE_LOCALES.includes(pathSegments[0])) { + return pathSegments[0]; + } + const acceptLanguage = req.headers['accept-language']; if (acceptLanguage) { @@ -39,13 +46,6 @@ function getLocaleFromRequest(req: IncomingMessage): string { } } - const url = new URL(req.url || '', `http://${req.headers.host}`); - const pathSegments = url.pathname.split('/').filter(Boolean); - - if (pathSegments.length > 0 && AVAILABLE_LOCALES.includes(pathSegments[0])) { - return pathSegments[0]; - } - return DEFAULT_LOCALE; } diff --git a/tools/code/src/generators/frontend/files/ssr/delegating-server.ts.template b/tools/code/src/generators/frontend/files/ssr/delegating-server.ts.template index 0f3302392..3cac67782 100644 --- a/tools/code/src/generators/frontend/files/ssr/delegating-server.ts.template +++ b/tools/code/src/generators/frontend/files/ssr/delegating-server.ts.template @@ -30,6 +30,13 @@ async function loadLocaleServers() { } function getLocaleFromRequest(req: IncomingMessage): string { + const url = new URL(req.url || '', `http://${req.headers.host}`); + const pathSegments = url.pathname.split('/').filter(Boolean); + + if (pathSegments.length > 0 && AVAILABLE_LOCALES.includes(pathSegments[0])) { + return pathSegments[0]; + } + const acceptLanguage = req.headers['accept-language']; if (acceptLanguage) { @@ -40,13 +47,6 @@ function getLocaleFromRequest(req: IncomingMessage): string { } } - const url = new URL(req.url || '', `http://${req.headers.host}`); - const pathSegments = url.pathname.split('/').filter(Boolean); - - if (pathSegments.length > 0 && AVAILABLE_LOCALES.includes(pathSegments[0])) { - return pathSegments[0]; - } - return DEFAULT_LOCALE; } @@ -56,26 +56,26 @@ function serveStaticFile(req: IncomingMessage, res: ServerResponse, locale: stri if (!pathname.startsWith('/api/') && pathname.includes('.')) { const localeBrowserPath = join(__dirname, 'browser', locale, pathname); - + if (existsSync(localeBrowserPath)) { const stat = statSync(localeBrowserPath); if (stat.isFile()) { const ext = extname(pathname).toLowerCase(); const contentType = getContentType(ext); - + res.writeHead(200, { 'Content-Type': contentType, 'Content-Length': stat.size, 'Cache-Control': 'public, max-age=31536000' // 1 year cache for static assets }); - + const stream = createReadStream(localeBrowserPath); stream.pipe(res); return true; } } } - + return false; } @@ -96,7 +96,7 @@ function getContentType(ext: string): string { '.ttf': 'font/ttf', '.eot': 'application/vnd.ms-fontobject' }; - + return types[ext] || 'application/octet-stream'; } @@ -104,7 +104,7 @@ const server = createServer(async (req: IncomingMessage, res: ServerResponse) => try { const locale = getLocaleFromRequest(req); const localeServer = localeServers.get(locale); - + if (!localeServer) { console.error(`No server found for locale: ${locale}`); res.writeHead(500, { 'Content-Type': 'text/plain' }); @@ -118,7 +118,7 @@ const server = createServer(async (req: IncomingMessage, res: ServerResponse) => const originalCwd = process.cwd(); const localeDir = join(__dirname, locale); - + try { process.chdir(localeDir); await localeServer(req, res); From c0d68abc4c27a76f7812be69272c6e9977c16167 Mon Sep 17 00:00:00 2001 From: Marcel Menk Date: Sat, 20 Jun 2026 16:26:25 +0200 Subject: [PATCH 3/3] fix: github pipeline issues --- apps/agenstra/frontend-docs/src/server.ts | 2 +- apps/decabill/frontend-docs/src/server.ts | 2 +- apps/shared/frontend-docs/src/server.ts | 2 +- .../shared/frontend/util-express-server/src/index.ts | 3 ++- .../frontend/util-express-server/src/lib/docs-server.ts | 8 ++++---- .../shared/frontend/util-express-server/tsconfig.json | 6 +++++- tsconfig.base.json | 3 +++ 7 files changed, 17 insertions(+), 9 deletions(-) diff --git a/apps/agenstra/frontend-docs/src/server.ts b/apps/agenstra/frontend-docs/src/server.ts index 2a2a45f08..00ee0940e 100644 --- a/apps/agenstra/frontend-docs/src/server.ts +++ b/apps/agenstra/frontend-docs/src/server.ts @@ -1,7 +1,7 @@ import { isMainModule } from '@angular/ssr/node'; // eslint-disable-next-line @nx/enforce-module-boundaries import bootstrap from '@forepath/shared/frontend/util-docs-bootstrap'; -import { createDocsServer } from '@forepath/shared/frontend/util-express-server'; +import { createDocsServer } from '@forepath/shared/frontend/util-express-server/docs-server'; import { fileURLToPath } from 'node:url'; const app = createDocsServer(['agenstra.com'], bootstrap); diff --git a/apps/decabill/frontend-docs/src/server.ts b/apps/decabill/frontend-docs/src/server.ts index 16c5d09a5..76083071e 100644 --- a/apps/decabill/frontend-docs/src/server.ts +++ b/apps/decabill/frontend-docs/src/server.ts @@ -1,7 +1,7 @@ import { isMainModule } from '@angular/ssr/node'; // eslint-disable-next-line @nx/enforce-module-boundaries import bootstrap from '@forepath/shared/frontend/util-docs-bootstrap'; -import { createDocsServer } from '@forepath/shared/frontend/util-express-server'; +import { createDocsServer } from '@forepath/shared/frontend/util-express-server/docs-server'; import { fileURLToPath } from 'node:url'; const app = createDocsServer(['decabill.com'], bootstrap); diff --git a/apps/shared/frontend-docs/src/server.ts b/apps/shared/frontend-docs/src/server.ts index 110fbc608..c073616df 100644 --- a/apps/shared/frontend-docs/src/server.ts +++ b/apps/shared/frontend-docs/src/server.ts @@ -1,5 +1,5 @@ import { isMainModule } from '@angular/ssr/node'; -import { createDocsServer } from '@forepath/shared/frontend/util-express-server'; +import { createDocsServer } from '@forepath/shared/frontend/util-express-server/docs-server'; import { fileURLToPath } from 'node:url'; import bootstrap from './main.server'; diff --git a/libs/domains/shared/frontend/util-express-server/src/index.ts b/libs/domains/shared/frontend/util-express-server/src/index.ts index 578133ec8..a54f8cedb 100644 --- a/libs/domains/shared/frontend/util-express-server/src/index.ts +++ b/libs/domains/shared/frontend/util-express-server/src/index.ts @@ -1,4 +1,5 @@ -export { createDocsServer, type DocsServerBootstrap } from './lib/docs-server'; +// Docs SSR factory lives at @forepath/shared/frontend/util-express-server/docs-server +// so esbuild server bundles (agent/billing console) do not pull in @angular/ssr/node. export { registerRuntimeConfigEndpoint, type RuntimeConfigRouteEnv, diff --git a/libs/domains/shared/frontend/util-express-server/src/lib/docs-server.ts b/libs/domains/shared/frontend/util-express-server/src/lib/docs-server.ts index f8da1ba50..18fdbd22d 100644 --- a/libs/domains/shared/frontend/util-express-server/src/lib/docs-server.ts +++ b/libs/domains/shared/frontend/util-express-server/src/lib/docs-server.ts @@ -3,7 +3,7 @@ import { fileURLToPath } from 'node:url'; import { APP_BASE_HREF } from '@angular/common'; import { CommonEngine } from '@angular/ssr/node'; -import express, { type Express } from 'express'; +import express, { type Express, type NextFunction, type Request, type Response } from 'express'; import { registerRuntimeConfigEndpoint } from './runtime-config-route'; import { createSecurityHeadersMiddleware } from './security-headers'; @@ -31,7 +31,7 @@ export function createDocsServer(apexDomains: readonly string[], bootstrap: Docs }), ); - app.get('**', (req, res, next) => { + app.get('**', (req: Request, res: Response, next: NextFunction) => { const { protocol, originalUrl, baseUrl, headers } = req; commonEngine @@ -42,8 +42,8 @@ export function createDocsServer(apexDomains: readonly string[], bootstrap: Docs publicPath: browserDistFolder, providers: [{ provide: APP_BASE_HREF, useValue: baseUrl }], }) - .then((html) => res.send(html)) - .catch((err) => next(err)); + .then((html: string) => res.send(html)) + .catch((err: unknown) => next(err)); }); return app; diff --git a/libs/domains/shared/frontend/util-express-server/tsconfig.json b/libs/domains/shared/frontend/util-express-server/tsconfig.json index d382ae1bb..bb2004b1a 100644 --- a/libs/domains/shared/frontend/util-express-server/tsconfig.json +++ b/libs/domains/shared/frontend/util-express-server/tsconfig.json @@ -1,7 +1,11 @@ { "extends": "../../../../../tsconfig.base.json", "compilerOptions": { - "module": "commonjs", + "target": "es2022", + "module": "es2022", + "moduleResolution": "bundler", + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, "forceConsistentCasingInFileNames": true, "strict": true, "noImplicitOverride": true, diff --git a/tsconfig.base.json b/tsconfig.base.json index 88edf15a7..25d1f9efa 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -21,6 +21,9 @@ "@forepath/shared/frontend/util-express-server": [ "libs/domains/shared/frontend/util-express-server/src/index.ts" ], + "@forepath/shared/frontend/util-express-server/docs-server": [ + "libs/domains/shared/frontend/util-express-server/src/lib/docs-server.ts" + ], "@forepath/shared/frontend/util-runtime-config-server": [ "libs/domains/shared/frontend/util-runtime-config-server/src/index.ts" ],