@flowdular/sdk 0.2.3 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.ai/agents/sandbox/business-manager.md +5 -1
- package/.ai/blueprints/author-spec/README.md +1 -1
- package/.ai/blueprints/author-spec/spec-requirements.yaml +44 -0
- package/.ai/blueprints/author-spec/steps.yaml +5 -5
- package/.ai/blueprints/author-spec/templates/module.yaml +99 -3
- package/.ai/blueprints/edit-module/gates.yaml +4 -0
- package/.ai/blueprints/edit-module/required-files.yaml +9 -0
- package/.ai/blueprints/new-module/gates.yaml +4 -0
- package/.ai/blueprints/new-module/spec-requirements.yaml +2 -2
- package/.ai/blueprints/release/gates.yaml +4 -0
- package/.ai/platform-capabilities.md +128 -0
- package/.ai/policies/capabilities.yaml +100 -0
- package/.ai/policies/path-ownership.yaml +5 -2
- package/.ai/policies/task-budgets.yaml +5 -3
- package/.ai/references/catalog/module.json +4 -4
- package/.ai/references/catalog/package.json +2 -2
- package/.ai/references/catalog/spec/module.yaml +5 -3
- package/.ai/references/catalog/src/platform.ts +2 -0
- package/.ai/references/catalog/src/services/catalog-service.ts +89 -1
- package/.ai/references/catalog/src/services/data-classes.ts +47 -0
- package/.ai/references/catalog/src/services/database-repository.ts +98 -1
- package/.ai/references/catalog/src/services/repository.ts +22 -1
- package/.ai/references/catalog/tests/data-classes.test.ts +157 -0
- package/.ai/references/catalog.provenance.json +12 -10
- package/.ai/skills/README.md +10 -0
- package/.ai/skills/agent-tool-design/SKILL.md +1 -2
- package/.ai/skills/auth-security-review/SKILL.md +1 -1
- package/.ai/skills/business-agent-design/SKILL.md +0 -1
- package/.ai/skills/deploy-operate/SKILL.md +114 -0
- package/.ai/skills/module-new/SKILL.md +29 -3
- package/.ai/skills/module-update/SKILL.md +9 -3
- package/.ai/skills/perf-audit/SKILL.md +0 -1
- package/.ai/skills/release-eject-pr/SKILL.md +0 -1
- package/.ai/skills/spec-interview/SKILL.md +120 -0
- package/.ai/skills/test-hardening/SKILL.md +1 -0
- package/.ai/skills/ux-design/SKILL.md +34 -3
- package/.ai/skills/variables/SKILL.md +0 -2
- package/.ai/skills/workflow-development/SKILL.md +0 -1
- package/AGENTS.md +4 -0
- package/docs/agent-contract.md +2 -2
- package/docs/design-system.md +185 -31
- package/modules/access/migrations/0001_access_core.down.sql +1 -0
- package/modules/access/migrations/0001_access_core.up.sql +28 -0
- package/modules/access/migrations/README.md +3 -0
- package/modules/access/module.json +33 -0
- package/modules/access/package.json +43 -0
- package/modules/access/spec/module.yaml +225 -0
- package/modules/access/src/acl/permissions.ts +6 -0
- package/modules/access/src/api/endpoints.ts +244 -0
- package/modules/access/src/client/ActivityView.tsrx +245 -0
- package/modules/access/src/client/AttestationsView.tsrx +176 -0
- package/modules/access/src/client/ReviewView.tsrx +586 -0
- package/modules/access/src/client/api.ts +132 -0
- package/modules/access/src/client/contribution.tsrx +41 -0
- package/modules/access/src/client/index.ts +41 -0
- package/modules/access/src/client/navigation.ts +57 -0
- package/modules/access/src/client/presentation.ts +69 -0
- package/modules/access/src/client/state.ts +72 -0
- package/modules/access/src/domain/types.ts +189 -0
- package/modules/access/src/index.ts +38 -0
- package/modules/access/src/platform.ts +60 -0
- package/modules/access/src/server/index.ts +42 -0
- package/modules/access/src/server/runtime.ts +105 -0
- package/modules/access/src/services/access-service.ts +298 -0
- package/modules/access/src/services/audit-window.ts +78 -0
- package/modules/access/src/services/auth-directory.ts +72 -0
- package/modules/access/src/services/changes.ts +91 -0
- package/modules/access/src/services/data-classes.ts +28 -0
- package/modules/access/src/services/database-repository.ts +185 -0
- package/modules/access/src/services/directory.ts +102 -0
- package/modules/access/src/services/index.ts +33 -0
- package/modules/access/src/services/list-exports.ts +150 -0
- package/modules/access/src/services/migration.ts +54 -0
- package/modules/access/src/services/repository.ts +30 -0
- package/modules/access/src/services/review.ts +178 -0
- package/modules/access/translations/en.json +155 -0
- package/modules/access/translations/pl.json +155 -0
- package/modules/agents/migrations/0022_credential_rotation_inventory.down.sql +2 -0
- package/modules/agents/migrations/0022_credential_rotation_inventory.up.sql +7 -0
- package/modules/agents/migrations/0023_agents_retention_indexes.down.sql +2 -0
- package/modules/agents/migrations/0023_agents_retention_indexes.up.sql +9 -0
- package/modules/agents/migrations/0024_agent_meter_refusals.down.sql +3 -0
- package/modules/agents/migrations/0024_agent_meter_refusals.up.sql +22 -0
- package/modules/agents/migrations/0025_agent_list_indexes.down.sql +3 -0
- package/modules/agents/migrations/0025_agent_list_indexes.up.sql +11 -0
- package/modules/agents/module.json +30 -4
- package/modules/agents/package.json +3 -2
- package/modules/agents/spec/module.yaml +63 -5
- package/modules/agents/src/api/endpoints.ts +291 -33
- package/modules/agents/src/cli/commands.json +11 -0
- package/modules/agents/src/cli/index.ts +45 -0
- package/modules/agents/src/client/AgentDashboardWidget.tsrx +19 -11
- package/modules/agents/src/client/AgentDefinitionList.tsrx +53 -10
- package/modules/agents/src/client/AgentPlaygroundView.tsrx +4 -4
- package/modules/agents/src/client/AgentProceduresView.tsrx +2 -2
- package/modules/agents/src/client/AgentRunsView.tsrx +143 -40
- package/modules/agents/src/client/AgentsView.tsrx +109 -33
- package/modules/agents/src/client/api.ts +99 -21
- package/modules/agents/src/client/state.ts +97 -0
- package/modules/agents/src/domain/types.ts +44 -4
- package/modules/agents/src/platform.ts +42 -0
- package/modules/agents/src/server/action-execution.ts +201 -106
- package/modules/agents/src/server/runtime.ts +32 -0
- package/modules/agents/src/services/agent-service.ts +158 -30
- package/modules/agents/src/services/credential-rotation.ts +185 -0
- package/modules/agents/src/services/credential-vault.ts +71 -46
- package/modules/agents/src/services/data-classes.ts +176 -0
- package/modules/agents/src/services/database-repository.ts +393 -101
- package/modules/agents/src/services/metering.ts +111 -0
- package/modules/agents/src/services/migration.ts +109 -0
- package/modules/agents/src/services/module-agent-preflight.ts +17 -9
- package/modules/agents/src/services/notifications.ts +98 -0
- package/modules/agents/src/services/provider-repository.ts +9 -18
- package/modules/agents/src/services/provider-service.ts +1 -9
- package/modules/agents/src/services/reports.ts +107 -0
- package/modules/agents/src/services/repository.ts +86 -6
- package/modules/agents/src/services/usage-service.ts +2 -0
- package/modules/agents/src/services/worker.ts +114 -4
- package/modules/agents/src/settings.ts +14 -3
- package/modules/agents/translations/en.json +14 -4
- package/modules/agents/translations/pl.json +14 -4
- package/modules/approvals/migrations/0001_approvals_core.down.sql +3 -0
- package/modules/approvals/migrations/0001_approvals_core.up.sql +78 -0
- package/modules/approvals/migrations/0002_approvals_expiry_routing_role.down.sql +2 -0
- package/modules/approvals/migrations/0002_approvals_expiry_routing_role.up.sql +19 -0
- package/modules/approvals/migrations/0003_approvals_retention_indexes.down.sql +6 -0
- package/modules/approvals/migrations/0003_approvals_retention_indexes.up.sql +14 -0
- package/modules/approvals/migrations/0004_approvals_inbox_keyset_indexes.down.sql +5 -0
- package/modules/approvals/migrations/0004_approvals_inbox_keyset_indexes.up.sql +12 -0
- package/modules/approvals/migrations/README.md +3 -0
- package/modules/approvals/module.json +34 -0
- package/modules/approvals/package.json +43 -0
- package/modules/approvals/spec/module.yaml +318 -0
- package/modules/approvals/src/acl/permissions.ts +7 -0
- package/modules/approvals/src/api/endpoints.ts +457 -0
- package/modules/approvals/src/client/ApprovalRequestDrawer.tsrx +138 -0
- package/modules/approvals/src/client/ApprovalsView.tsrx +562 -0
- package/modules/approvals/src/client/PendingCountWidget.tsrx +52 -0
- package/modules/approvals/src/client/api.ts +203 -0
- package/modules/approvals/src/client/approvals.css +51 -0
- package/modules/approvals/src/client/contribution.tsrx +44 -0
- package/modules/approvals/src/client/index.ts +26 -0
- package/modules/approvals/src/client/navigation.ts +39 -0
- package/modules/approvals/src/client/pending-count.ts +26 -0
- package/modules/approvals/src/client/presentation.ts +52 -0
- package/modules/approvals/src/client/state.ts +141 -0
- package/modules/approvals/src/domain/capability.ts +95 -0
- package/modules/approvals/src/domain/types.ts +154 -0
- package/modules/approvals/src/index.ts +52 -0
- package/modules/approvals/src/platform.ts +128 -0
- package/modules/approvals/src/server/index.ts +42 -0
- package/modules/approvals/src/server/runtime.ts +181 -0
- package/modules/approvals/src/services/approvals-service.ts +557 -0
- package/modules/approvals/src/services/callbacks.ts +75 -0
- package/modules/approvals/src/services/data-classes.ts +167 -0
- package/modules/approvals/src/services/database-repository.ts +724 -0
- package/modules/approvals/src/services/eligibility.ts +121 -0
- package/modules/approvals/src/services/expiry-runner.ts +81 -0
- package/modules/approvals/src/services/index.ts +31 -0
- package/modules/approvals/src/services/migration.ts +222 -0
- package/modules/approvals/src/services/notifications.ts +95 -0
- package/modules/approvals/src/services/repository.ts +161 -0
- package/modules/approvals/src/services/service-error.ts +70 -0
- package/modules/approvals/src/settings.ts +102 -0
- package/modules/approvals/translations/en.json +104 -0
- package/modules/approvals/translations/pl.json +104 -0
- package/modules/audit/migrations/0001_audit_core.down.sql +8 -0
- package/modules/audit/migrations/0001_audit_core.up.sql +107 -0
- package/modules/audit/migrations/0002_audit_sweep_routing_role.down.sql +2 -0
- package/modules/audit/migrations/0002_audit_sweep_routing_role.up.sql +21 -0
- package/modules/audit/migrations/0003_audit_export_request.down.sql +12 -0
- package/modules/audit/migrations/0003_audit_export_request.up.sql +40 -0
- package/modules/audit/migrations/0004_audit_hold_seal_erasure.down.sql +17 -0
- package/modules/audit/migrations/0004_audit_hold_seal_erasure.up.sql +192 -0
- package/modules/audit/migrations/0005_audit_event_format.down.sql +17 -0
- package/modules/audit/migrations/0005_audit_event_format.up.sql +60 -0
- package/modules/audit/migrations/0006_audit_own_class_walks.down.sql +3 -0
- package/modules/audit/migrations/0006_audit_own_class_walks.up.sql +14 -0
- package/modules/audit/migrations/README.md +3 -0
- package/modules/audit/module.json +32 -0
- package/modules/audit/package.json +49 -0
- package/modules/audit/spec/module.yaml +809 -0
- package/modules/audit/src/acl/permissions.ts +7 -0
- package/modules/audit/src/api/endpoints.ts +315 -0
- package/modules/audit/src/cli/commands.json +95 -0
- package/modules/audit/src/cli/index.ts +658 -0
- package/modules/audit/src/client/DataClassesView.tsrx +420 -0
- package/modules/audit/src/client/ExportsView.tsrx +256 -0
- package/modules/audit/src/client/HoldsView.tsrx +604 -0
- package/modules/audit/src/client/SweepsView.tsrx +251 -0
- package/modules/audit/src/client/api.ts +185 -0
- package/modules/audit/src/client/contribution.tsrx +52 -0
- package/modules/audit/src/client/index.ts +23 -0
- package/modules/audit/src/client/navigation.ts +74 -0
- package/modules/audit/src/client/presentation.ts +105 -0
- package/modules/audit/src/client/state.ts +86 -0
- package/modules/audit/src/domain/data-classes.ts +16 -0
- package/modules/audit/src/domain/types.ts +339 -0
- package/modules/audit/src/index.ts +76 -0
- package/modules/audit/src/platform.ts +44 -0
- package/modules/audit/src/server/index.ts +177 -0
- package/modules/audit/src/server/runtime.ts +303 -0
- package/modules/audit/src/services/anchor-key.ts +143 -0
- package/modules/audit/src/services/anchor-rotation.ts +147 -0
- package/modules/audit/src/services/audit-runners.ts +278 -0
- package/modules/audit/src/services/backup-guard.ts +95 -0
- package/modules/audit/src/services/database-repository.ts +1946 -0
- package/modules/audit/src/services/declared-classes.ts +64 -0
- package/modules/audit/src/services/erasure-port.ts +126 -0
- package/modules/audit/src/services/erasure-service.ts +770 -0
- package/modules/audit/src/services/export-directory.ts +106 -0
- package/modules/audit/src/services/export-service.ts +714 -0
- package/modules/audit/src/services/hold-service.ts +295 -0
- package/modules/audit/src/services/index.ts +17 -0
- package/modules/audit/src/services/migration.ts +658 -0
- package/modules/audit/src/services/own-classes.ts +318 -0
- package/modules/audit/src/services/platform-version.ts +23 -0
- package/modules/audit/src/services/repository.ts +495 -0
- package/modules/audit/src/services/retention-service.ts +191 -0
- package/modules/audit/src/services/seal-service.ts +769 -0
- package/modules/audit/src/services/service-error.ts +61 -0
- package/modules/audit/src/services/subject-keys.ts +90 -0
- package/modules/audit/src/services/sweep-service.ts +298 -0
- package/modules/audit/src/services/zip.ts +217 -0
- package/modules/audit/src/settings.ts +69 -0
- package/modules/audit/translations/en.json +210 -0
- package/modules/audit/translations/pl.json +210 -0
- package/modules/auth/README.md +77 -29
- package/modules/auth/migrations/0016_external_identities.up.sql +16 -0
- package/modules/auth/migrations/0017_mfa_key_id.up.sql +8 -0
- package/modules/auth/migrations/0018_retire_bundled_module_scopes.up.sql +29 -0
- package/modules/auth/migrations/0019_notifications_member_scopes.up.sql +44 -0
- package/modules/auth/migrations/0020_identity_providers.up.sql +61 -0
- package/modules/auth/migrations/0021_membership_status.up.sql +19 -0
- package/modules/auth/migrations/0022_auth_provider_scopes.up.sql +45 -0
- package/modules/auth/migrations/0023_enterprise_module_scopes.down.sql +19 -0
- package/modules/auth/migrations/0023_enterprise_module_scopes.up.sql +71 -0
- package/modules/auth/migrations/0024_approvals_member_scopes.down.sql +22 -0
- package/modules/auth/migrations/0024_approvals_member_scopes.up.sql +48 -0
- package/modules/auth/migrations/0025_audit_holds_owner_scope.down.sql +21 -0
- package/modules/auth/migrations/0025_audit_holds_owner_scope.up.sql +47 -0
- package/modules/auth/migrations/0026_auth_export_keyset_indexes.down.sql +6 -0
- package/modules/auth/migrations/0026_auth_export_keyset_indexes.up.sql +15 -0
- package/modules/auth/migrations/0027_workflow_automation_profile_scopes.down.sql +34 -0
- package/modules/auth/migrations/0027_workflow_automation_profile_scopes.up.sql +72 -0
- package/modules/auth/migrations/0028_auth_member_search_prefix_indexes.down.sql +6 -0
- package/modules/auth/migrations/0028_auth_member_search_prefix_indexes.up.sql +21 -0
- package/modules/auth/migrations/0029_reports_exports_access_scopes.down.sql +22 -0
- package/modules/auth/migrations/0029_reports_exports_access_scopes.up.sql +56 -0
- package/modules/auth/migrations/0030_auth_membership_keyset_index.down.sql +4 -0
- package/modules/auth/migrations/0030_auth_membership_keyset_index.up.sql +10 -0
- package/modules/auth/migrations/0031_membership_scope_backfills_under_rls.down.sql +4 -0
- package/modules/auth/migrations/0031_membership_scope_backfills_under_rls.up.sql +31 -0
- package/modules/auth/migrations/0032_audit_actor_service.down.sql +9 -0
- package/modules/auth/migrations/0032_audit_actor_service.up.sql +10 -0
- package/modules/auth/migrations/0033_auth_account_keyset_indexes.down.sql +5 -0
- package/modules/auth/migrations/0033_auth_account_keyset_indexes.up.sql +23 -0
- package/modules/auth/module.json +3 -3
- package/modules/auth/package.json +3 -2
- package/modules/auth/spec/module.yaml +372 -3
- package/modules/auth/src/acl/scopes.ts +50 -6
- package/modules/auth/src/cli/commands.json +11 -0
- package/modules/auth/src/cli/greenfield.ts +2 -2
- package/modules/auth/src/cli/index.ts +14 -0
- package/modules/auth/src/cli/secrets.ts +114 -0
- package/modules/auth/src/client/AuthenticationCore.tsrx +61 -8
- package/modules/auth/src/client/api.ts +72 -6
- package/modules/auth/src/client/contribution.tsrx +23 -0
- package/modules/auth/src/client/index.ts +6 -0
- package/modules/auth/src/client/providers/IdentityProviderForm.tsrx +191 -0
- package/modules/auth/src/client/providers/IdentityProvidersView.tsrx +358 -0
- package/modules/auth/src/client/providers/api.ts +128 -0
- package/modules/auth/src/client/providers/provider-columns.tsrx +60 -0
- package/modules/auth/src/client/providers/state.ts +35 -0
- package/modules/auth/src/client/security/SecurityView.tsrx +9 -1
- package/modules/auth/src/client/state.ts +15 -1
- package/modules/auth/src/domain/types.ts +55 -0
- package/modules/auth/src/index.ts +11 -1
- package/modules/auth/src/middleware/authentication.ts +4 -0
- package/modules/auth/src/server/endpoints.ts +467 -171
- package/modules/auth/src/server/http.ts +3 -2
- package/modules/auth/src/server/index.ts +22 -1
- package/modules/auth/src/server/membership-endpoints.ts +62 -0
- package/modules/auth/src/server/mfa-enforcement.ts +156 -0
- package/modules/auth/src/server/oidc.ts +389 -0
- package/modules/auth/src/server/provider-endpoints.ts +246 -0
- package/modules/auth/src/server/provider-host.ts +77 -0
- package/modules/auth/src/server/runtime.ts +231 -55
- package/modules/auth/src/services/auth-service-error.ts +7 -2
- package/modules/auth/src/services/auth-service.ts +948 -51
- package/modules/auth/src/services/data-classes.ts +236 -0
- package/modules/auth/src/services/database-repository.ts +853 -71
- package/modules/auth/src/services/identity-provider-service.ts +571 -0
- package/modules/auth/src/services/mail-delivery.ts +16 -16
- package/modules/auth/src/services/mail-message.ts +54 -0
- package/modules/auth/src/services/mail-port.ts +24 -0
- package/modules/auth/src/services/mail-smtp.ts +85 -0
- package/modules/auth/src/services/mfa-rotation.ts +144 -0
- package/modules/auth/src/services/migration.ts +810 -0
- package/modules/auth/src/services/password.ts +14 -0
- package/modules/auth/src/services/provider-secret-rotation.ts +169 -0
- package/modules/auth/src/services/provider-secrets.ts +136 -0
- package/modules/auth/src/services/repository.ts +321 -5
- package/modules/auth/src/services/session-sweep-runner.ts +73 -0
- package/modules/auth/src/services/settings-store.ts +10 -83
- package/modules/auth/src/services/totp.ts +88 -62
- package/modules/auth/src/services/validation.ts +194 -7
- package/modules/auth/src/settings.ts +18 -0
- package/modules/auth/translations/en.json +84 -1
- package/modules/auth/translations/pl.json +84 -1
- package/modules/automations/migrations/0005_secret_rotation_inventory.down.sql +1 -0
- package/modules/automations/migrations/0005_secret_rotation_inventory.up.sql +6 -0
- package/modules/automations/migrations/0006_automations_list_sort_indexes.down.sql +4 -0
- package/modules/automations/migrations/0006_automations_list_sort_indexes.up.sql +11 -0
- package/modules/automations/module.json +24 -6
- package/modules/automations/package.json +5 -2
- package/modules/automations/spec/module.yaml +81 -7
- package/modules/automations/src/api/endpoints.ts +202 -28
- package/modules/automations/src/cli/commands.json +17 -0
- package/modules/automations/src/cli/index.ts +114 -0
- package/modules/automations/src/client/AutomationScheduleForm.tsrx +77 -19
- package/modules/automations/src/client/AutomationSchedulesView.tsrx +144 -40
- package/modules/automations/src/client/AutomationTriggersView.tsrx +131 -32
- package/modules/automations/src/client/api.ts +62 -19
- package/modules/automations/src/client/presentation.ts +20 -2
- package/modules/automations/src/client/state.ts +84 -0
- package/modules/automations/src/domain/cadence.ts +99 -3
- package/modules/automations/src/domain/cron.ts +366 -0
- package/modules/automations/src/domain/time-zone.ts +61 -0
- package/modules/automations/src/platform.ts +38 -4
- package/modules/automations/src/server/index.ts +11 -0
- package/modules/automations/src/server/runtime.ts +46 -22
- package/modules/{automations-workflows-integration/src/server/adapter.ts → automations/src/server/workflow-target.ts} +13 -14
- package/modules/{automations-workflows-integration/src/server/tools.ts → automations/src/server/workflow-tools.ts} +0 -0
- package/modules/automations/src/services/data-classes.ts +62 -0
- package/modules/automations/src/services/database-repository.ts +152 -38
- package/modules/automations/src/services/migration.ts +119 -9
- package/modules/automations/src/services/repository.ts +52 -1
- package/modules/automations/src/services/schedule-runner.ts +84 -0
- package/modules/automations/src/services/schedule-service.ts +152 -26
- package/modules/automations/src/services/secret-rotation.ts +176 -0
- package/modules/automations/src/services/secret-vault.ts +68 -41
- package/modules/automations/src/services/trigger-service.ts +13 -10
- package/modules/automations/translations/en.json +15 -2
- package/modules/automations/translations/pl.json +15 -2
- package/modules/connectors/migrations/0001_connectors_core.down.sql +3 -0
- package/modules/connectors/migrations/0001_connectors_core.up.sql +72 -0
- package/modules/connectors/migrations/0002_connectors_call_keys.down.sql +3 -0
- package/modules/connectors/migrations/0002_connectors_call_keys.up.sql +18 -0
- package/modules/connectors/migrations/README.md +3 -0
- package/modules/connectors/module.json +28 -0
- package/modules/{automations-workflows-integration → connectors}/package.json +27 -26
- package/modules/connectors/spec/module.yaml +447 -0
- package/modules/connectors/src/acl/permissions.ts +6 -0
- package/modules/connectors/src/agent/tools.ts +180 -0
- package/modules/connectors/src/api/endpoints.ts +572 -0
- package/modules/connectors/src/client/ConnectorCallsView.tsrx +358 -0
- package/modules/connectors/src/client/ConnectorForm.tsrx +424 -0
- package/modules/connectors/src/client/ConnectorsView.tsrx +711 -0
- package/modules/connectors/src/client/api.ts +281 -0
- package/modules/connectors/src/client/consent.ts +48 -0
- package/modules/connectors/src/client/contribution.tsrx +37 -0
- package/modules/connectors/src/client/index.ts +22 -0
- package/modules/connectors/src/client/navigation.ts +42 -0
- package/modules/connectors/src/client/presentation.ts +38 -0
- package/modules/connectors/src/client/state.ts +175 -0
- package/modules/connectors/src/domain/calls.ts +70 -0
- package/modules/connectors/src/domain/definitions.ts +190 -0
- package/modules/connectors/src/domain/http-json.ts +68 -0
- package/modules/connectors/src/domain/types.ts +185 -0
- package/modules/connectors/src/index.ts +64 -0
- package/modules/connectors/src/platform.ts +56 -0
- package/modules/connectors/src/server/index.ts +66 -0
- package/modules/connectors/src/server/runtime.ts +163 -0
- package/modules/connectors/src/services/call-service.ts +903 -0
- package/modules/connectors/src/services/connectors-service.ts +653 -0
- package/modules/connectors/src/services/credential-vault.ts +188 -0
- package/modules/connectors/src/services/data-classes.ts +158 -0
- package/modules/connectors/src/services/database-repository.ts +897 -0
- package/modules/connectors/src/services/egress.ts +261 -0
- package/modules/connectors/src/services/index.ts +19 -0
- package/modules/connectors/src/services/migration.ts +166 -0
- package/modules/connectors/src/services/repository.ts +175 -0
- package/modules/connectors/src/services/service-error.ts +46 -0
- package/modules/connectors/src/settings.ts +69 -0
- package/modules/connectors/translations/en.json +191 -0
- package/modules/connectors/translations/pl.json +191 -0
- package/modules/directory/migrations/0001_directory_core.down.sql +5 -0
- package/modules/directory/migrations/0001_directory_core.up.sql +111 -0
- package/modules/directory/migrations/README.md +3 -0
- package/modules/directory/module.json +27 -0
- package/modules/directory/package.json +46 -0
- package/modules/directory/spec/module.yaml +351 -0
- package/modules/directory/src/acl/permissions.ts +7 -0
- package/modules/directory/src/api/endpoints.ts +478 -0
- package/modules/directory/src/api/scim-endpoints.ts +516 -0
- package/modules/directory/src/client/GroupMappingsView.tsrx +430 -0
- package/modules/directory/src/client/ProvisioningLogView.tsrx +248 -0
- package/modules/directory/src/client/ScimTokensView.tsrx +587 -0
- package/modules/directory/src/client/api.ts +222 -0
- package/modules/directory/src/client/contribution.tsrx +46 -0
- package/modules/directory/src/client/index.ts +22 -0
- package/modules/directory/src/client/navigation.ts +57 -0
- package/modules/directory/src/client/presentation.ts +143 -0
- package/modules/directory/src/client/state.ts +173 -0
- package/modules/directory/src/domain/scim.ts +346 -0
- package/modules/directory/src/domain/types.ts +166 -0
- package/modules/directory/src/index.ts +44 -0
- package/modules/directory/src/platform.ts +43 -0
- package/modules/directory/src/server/index.ts +17 -0
- package/modules/directory/src/server/runtime.ts +124 -0
- package/modules/directory/src/services/auth-port.ts +127 -0
- package/modules/directory/src/services/data-classes.ts +41 -0
- package/modules/directory/src/services/database-repository.ts +1067 -0
- package/modules/directory/src/services/directory-service.ts +311 -0
- package/modules/directory/src/services/index.ts +43 -0
- package/modules/directory/src/services/migration.ts +146 -0
- package/modules/directory/src/services/provisioning-service.ts +1420 -0
- package/modules/directory/src/services/rate-limiter.ts +103 -0
- package/modules/directory/src/services/repository.ts +208 -0
- package/modules/directory/src/services/service-error.ts +42 -0
- package/modules/directory/src/services/token-service.ts +215 -0
- package/modules/directory/src/settings.ts +86 -0
- package/modules/directory/translations/en.json +185 -0
- package/modules/directory/translations/pl.json +185 -0
- package/modules/documents/migrations/0001_documents_core.down.sql +1 -0
- package/modules/documents/migrations/0001_documents_core.up.sql +35 -0
- package/modules/documents/migrations/0002_documents_files_page.down.sql +1 -0
- package/modules/documents/migrations/0002_documents_files_page.up.sql +6 -0
- package/modules/documents/migrations/README.md +3 -0
- package/modules/documents/module.json +28 -0
- package/modules/documents/package.json +49 -0
- package/modules/documents/spec/module.yaml +247 -0
- package/modules/documents/src/acl/permissions.ts +6 -0
- package/modules/documents/src/api/endpoints.ts +401 -0
- package/modules/documents/src/client/DocumentUploader.tsrx +148 -0
- package/modules/documents/src/client/DocumentsView.tsrx +540 -0
- package/modules/documents/src/client/api.ts +209 -0
- package/modules/documents/src/client/contribution.tsrx +29 -0
- package/modules/documents/src/client/download.ts +70 -0
- package/modules/documents/src/client/index.ts +22 -0
- package/modules/documents/src/client/navigation.ts +25 -0
- package/modules/documents/src/client/presentation.ts +110 -0
- package/modules/documents/src/client/state.ts +117 -0
- package/modules/documents/src/domain/attachments.ts +84 -0
- package/modules/documents/src/domain/types.ts +80 -0
- package/modules/documents/src/index.ts +46 -0
- package/modules/documents/src/platform.ts +61 -0
- package/modules/documents/src/server/index.ts +30 -0
- package/modules/documents/src/server/runtime.ts +107 -0
- package/modules/documents/src/services/attachments.ts +39 -0
- package/modules/documents/src/services/data-classes.ts +25 -0
- package/modules/documents/src/services/database-repository.ts +259 -0
- package/modules/documents/src/services/documents-service.ts +586 -0
- package/modules/documents/src/services/index.ts +18 -0
- package/modules/documents/src/services/migration.ts +82 -0
- package/modules/documents/src/services/repository.ts +48 -0
- package/modules/documents/src/settings.ts +107 -0
- package/modules/documents/translations/en.json +111 -0
- package/modules/documents/translations/pl.json +111 -0
- package/modules/exports/migrations/0001_exports_core.down.sql +2 -0
- package/modules/exports/migrations/0001_exports_core.up.sql +28 -0
- package/modules/exports/migrations/0002_exports_job_routing_role.down.sql +4 -0
- package/modules/exports/migrations/0002_exports_job_routing_role.up.sql +21 -0
- package/modules/exports/migrations/README.md +3 -0
- package/modules/exports/module.json +28 -0
- package/modules/exports/package.json +44 -0
- package/modules/exports/spec/module.yaml +229 -0
- package/modules/exports/src/acl/permissions.ts +6 -0
- package/modules/exports/src/api/endpoints.ts +211 -0
- package/modules/exports/src/client/ExportsView.tsrx +327 -0
- package/modules/exports/src/client/api.ts +133 -0
- package/modules/exports/src/client/contribution.tsrx +31 -0
- package/modules/exports/src/client/index.ts +20 -0
- package/modules/exports/src/client/navigation.ts +25 -0
- package/modules/exports/src/client/presentation.ts +53 -0
- package/modules/exports/src/client/state.ts +56 -0
- package/modules/exports/src/domain/lists.ts +29 -0
- package/modules/exports/src/domain/types.ts +120 -0
- package/modules/exports/src/index.ts +41 -0
- package/modules/exports/src/platform.ts +80 -0
- package/modules/exports/src/server/index.ts +51 -0
- package/modules/exports/src/server/runtime.ts +160 -0
- package/modules/exports/src/services/data-classes.ts +56 -0
- package/modules/exports/src/services/database-repository.ts +405 -0
- package/modules/exports/src/services/export-runner.ts +123 -0
- package/modules/exports/src/services/export-service.ts +356 -0
- package/modules/exports/src/services/index.ts +6 -0
- package/modules/exports/src/services/list-registry.ts +105 -0
- package/modules/exports/src/services/migration.ts +89 -0
- package/modules/exports/src/services/repository.ts +97 -0
- package/modules/exports/src/settings.ts +70 -0
- package/modules/exports/translations/en.json +69 -0
- package/modules/exports/translations/pl.json +69 -0
- package/modules/import/migrations/0001_import_core.down.sql +6 -0
- package/modules/import/migrations/0001_import_core.up.sql +61 -0
- package/modules/import/migrations/0002_import_job_routing_role.down.sql +4 -0
- package/modules/import/migrations/0002_import_job_routing_role.up.sql +20 -0
- package/modules/import/migrations/0003_import_jobs_export_index.down.sql +1 -0
- package/modules/import/migrations/0003_import_jobs_export_index.up.sql +7 -0
- package/modules/import/migrations/0004_import_jobs_traceparent.down.sql +1 -0
- package/modules/import/migrations/0004_import_jobs_traceparent.up.sql +7 -0
- package/modules/import/migrations/README.md +3 -0
- package/modules/import/module.json +37 -0
- package/modules/import/package.json +50 -0
- package/modules/import/spec/module.yaml +335 -0
- package/modules/import/src/acl/permissions.ts +6 -0
- package/modules/import/src/api/endpoints.ts +400 -0
- package/modules/import/src/client/ImportJobDrawer.tsrx +229 -0
- package/modules/import/src/client/ImportsView.tsrx +455 -0
- package/modules/import/src/client/NewImportForm.tsrx +274 -0
- package/modules/import/src/client/api.ts +243 -0
- package/modules/import/src/client/contribution.tsrx +29 -0
- package/modules/import/src/client/index.ts +23 -0
- package/modules/import/src/client/navigation.ts +25 -0
- package/modules/import/src/client/presentation.ts +59 -0
- package/modules/import/src/client/state.ts +43 -0
- package/modules/import/src/domain/csv.ts +258 -0
- package/modules/import/src/domain/ports.ts +157 -0
- package/modules/import/src/domain/types.ts +179 -0
- package/modules/import/src/index.ts +58 -0
- package/modules/import/src/platform.ts +60 -0
- package/modules/import/src/server/index.ts +49 -0
- package/modules/import/src/server/runtime.ts +158 -0
- package/modules/import/src/services/csv-source.ts +121 -0
- package/modules/import/src/services/data-classes.ts +63 -0
- package/modules/import/src/services/database-repository.ts +780 -0
- package/modules/import/src/services/import-runner.ts +127 -0
- package/modules/import/src/services/import-service.ts +872 -0
- package/modules/import/src/services/index.ts +6 -0
- package/modules/import/src/services/migration.ts +156 -0
- package/modules/import/src/services/port-registry.ts +158 -0
- package/modules/import/src/services/repository.ts +147 -0
- package/modules/import/src/settings.ts +70 -0
- package/modules/import/translations/en.json +175 -0
- package/modules/import/translations/pl.json +175 -0
- package/modules/metering/migrations/0001_metering_core.down.sql +6 -0
- package/modules/metering/migrations/0001_metering_core.up.sql +119 -0
- package/modules/metering/migrations/0002_metering_bucket_export.down.sql +3 -0
- package/modules/metering/migrations/0002_metering_bucket_export.up.sql +5 -0
- package/modules/metering/migrations/README.md +3 -0
- package/modules/metering/module.json +46 -0
- package/modules/metering/package.json +50 -0
- package/modules/metering/spec/module.yaml +269 -0
- package/modules/metering/src/acl/permissions.ts +5 -0
- package/modules/metering/src/api/endpoints.ts +104 -0
- package/modules/metering/src/cli/commands.json +28 -0
- package/modules/metering/src/cli/index.ts +246 -0
- package/modules/metering/src/client/LimitsView.tsrx +170 -0
- package/modules/metering/src/client/UsageSummaryWidget.tsrx +63 -0
- package/modules/metering/src/client/UsageView.tsrx +205 -0
- package/modules/metering/src/client/api.ts +91 -0
- package/modules/metering/src/client/contribution.tsrx +42 -0
- package/modules/metering/src/client/index.ts +26 -0
- package/modules/metering/src/client/navigation.ts +54 -0
- package/modules/metering/src/client/presentation.ts +63 -0
- package/modules/metering/src/client/state.ts +31 -0
- package/modules/metering/src/domain/meters.ts +100 -0
- package/modules/metering/src/domain/types.ts +71 -0
- package/modules/metering/src/index.ts +51 -0
- package/modules/metering/src/platform.ts +84 -0
- package/modules/metering/src/server/index.ts +40 -0
- package/modules/metering/src/server/runtime.ts +165 -0
- package/modules/metering/src/services/data-classes.ts +34 -0
- package/modules/metering/src/services/database-repository.ts +574 -0
- package/modules/metering/src/services/index.ts +9 -0
- package/modules/metering/src/services/meter-registry.ts +145 -0
- package/modules/metering/src/services/metering-service.ts +441 -0
- package/modules/metering/src/services/migration.ts +183 -0
- package/modules/metering/src/services/notifications.ts +75 -0
- package/modules/metering/src/services/reports.ts +105 -0
- package/modules/metering/src/services/repository.ts +132 -0
- package/modules/metering/src/services/service-error.ts +46 -0
- package/modules/metering/src/settings.ts +47 -0
- package/modules/metering/translations/en.json +68 -0
- package/modules/metering/translations/pl.json +68 -0
- package/modules/notifications/migrations/0001_notifications_core.down.sql +1 -0
- package/modules/notifications/migrations/0001_notifications_core.up.sql +26 -0
- package/modules/notifications/migrations/0002_notifications_preferences.down.sql +1 -0
- package/modules/notifications/migrations/0002_notifications_preferences.up.sql +17 -0
- package/modules/notifications/migrations/0003_notifications_webhook_subscriptions.down.sql +1 -0
- package/modules/notifications/migrations/0003_notifications_webhook_subscriptions.up.sql +30 -0
- package/modules/notifications/migrations/0004_notifications_deliveries.down.sql +1 -0
- package/modules/notifications/migrations/0004_notifications_deliveries.up.sql +35 -0
- package/modules/notifications/migrations/0005_notifications_delivery_routing_role.down.sql +2 -0
- package/modules/notifications/migrations/0005_notifications_delivery_routing_role.up.sql +17 -0
- package/modules/notifications/migrations/0006_notifications_delivery_title.down.sql +1 -0
- package/modules/notifications/migrations/0006_notifications_delivery_title.up.sql +11 -0
- package/modules/notifications/migrations/0007_notifications_secret_rotation_inventory.down.sql +2 -0
- package/modules/notifications/migrations/0007_notifications_secret_rotation_inventory.up.sql +19 -0
- package/modules/notifications/migrations/0008_notifications_delivery_claim.down.sql +8 -0
- package/modules/notifications/migrations/0008_notifications_delivery_claim.up.sql +19 -0
- package/modules/notifications/migrations/0009_notifications_kind_approvals.down.sql +16 -0
- package/modules/notifications/migrations/0009_notifications_kind_approvals.up.sql +18 -0
- package/modules/notifications/migrations/0010_notifications_kind_meter_threshold.down.sql +16 -0
- package/modules/notifications/migrations/0010_notifications_kind_meter_threshold.up.sql +18 -0
- package/modules/notifications/migrations/0011_notifications_retention_keyset.down.sql +5 -0
- package/modules/notifications/migrations/0011_notifications_retention_keyset.up.sql +15 -0
- package/modules/notifications/migrations/0012_notifications_email_channel.down.sql +12 -0
- package/modules/notifications/migrations/0012_notifications_email_channel.up.sql +38 -0
- package/modules/notifications/migrations/0013_notifications_list_pages.down.sql +5 -0
- package/modules/notifications/migrations/0013_notifications_list_pages.up.sql +13 -0
- package/modules/notifications/migrations/README.md +3 -0
- package/modules/notifications/module.json +32 -0
- package/modules/notifications/package.json +49 -0
- package/modules/notifications/spec/module.yaml +718 -0
- package/modules/notifications/src/acl/permissions.ts +11 -0
- package/modules/notifications/src/api/endpoints.ts +814 -0
- package/modules/notifications/src/cli/commands.json +17 -0
- package/modules/notifications/src/cli/index.ts +126 -0
- package/modules/notifications/src/client/DeliveriesView.tsrx +483 -0
- package/modules/notifications/src/client/FactList.tsrx +24 -0
- package/modules/notifications/src/client/NotificationPreferencesView.tsrx +240 -0
- package/modules/notifications/src/client/NotificationsInboxView.tsrx +592 -0
- package/modules/notifications/src/client/UnreadCountWidget.tsrx +62 -0
- package/modules/notifications/src/client/WebhookForm.tsrx +297 -0
- package/modules/notifications/src/client/WebhooksView.tsrx +637 -0
- package/modules/notifications/src/client/api.ts +382 -0
- package/modules/notifications/src/client/contribution.tsrx +83 -0
- package/modules/notifications/src/client/inbox.ts +41 -0
- package/modules/notifications/src/client/index.ts +29 -0
- package/modules/notifications/src/client/navigation.ts +92 -0
- package/modules/notifications/src/client/notifications.css +70 -0
- package/modules/notifications/src/client/presentation.ts +81 -0
- package/modules/notifications/src/client/state.ts +246 -0
- package/modules/notifications/src/client/unread-count.ts +26 -0
- package/modules/notifications/src/domain/locale.ts +47 -0
- package/modules/notifications/src/domain/publish.ts +46 -0
- package/modules/notifications/src/domain/types.ts +186 -0
- package/modules/notifications/src/index.ts +62 -0
- package/modules/notifications/src/platform.ts +85 -0
- package/modules/notifications/src/server/index.ts +82 -0
- package/modules/notifications/src/server/runtime.ts +251 -0
- package/modules/notifications/src/services/data-classes.ts +139 -0
- package/modules/notifications/src/services/database-repository.ts +1334 -0
- package/modules/notifications/src/services/delivery-payload.ts +93 -0
- package/modules/notifications/src/services/delivery-runner.ts +170 -0
- package/modules/notifications/src/services/delivery-service.ts +811 -0
- package/modules/notifications/src/services/egress.ts +239 -0
- package/modules/notifications/src/services/email-channel.ts +93 -0
- package/modules/notifications/src/services/index.ts +23 -0
- package/modules/notifications/src/services/migration.ts +572 -0
- package/modules/notifications/src/services/notifications-service.ts +297 -0
- package/modules/notifications/src/services/paging.ts +60 -0
- package/modules/notifications/src/services/publish-service.ts +133 -0
- package/modules/notifications/src/services/repository.ts +342 -0
- package/modules/notifications/src/services/secret-rotation.ts +177 -0
- package/modules/notifications/src/services/secret-vault.ts +168 -0
- package/modules/notifications/src/services/service-error.ts +67 -0
- package/modules/notifications/src/services/signature.ts +81 -0
- package/modules/notifications/src/services/webhook-service.ts +307 -0
- package/modules/notifications/src/settings.ts +130 -0
- package/modules/notifications/translations/en.json +255 -0
- package/modules/notifications/translations/pl.json +255 -0
- package/modules/profile/module.json +3 -3
- package/modules/profile/package.json +2 -2
- package/modules/profile/spec/module.yaml +3 -3
- package/modules/profile/src/services/database-repository.ts +3 -13
- package/modules/reports/module.json +28 -0
- package/modules/reports/package.json +42 -0
- package/modules/reports/spec/module.yaml +231 -0
- package/modules/reports/src/acl/permissions.ts +5 -0
- package/modules/reports/src/api/endpoints.ts +72 -0
- package/modules/reports/src/client/ReportsSummaryWidget.tsrx +52 -0
- package/modules/reports/src/client/ReportsView.tsrx +246 -0
- package/modules/reports/src/client/api.ts +65 -0
- package/modules/reports/src/client/contribution.tsrx +36 -0
- package/modules/reports/src/client/index.ts +18 -0
- package/modules/reports/src/client/navigation.ts +39 -0
- package/modules/reports/src/client/presentation.ts +123 -0
- package/modules/reports/src/client/state.ts +28 -0
- package/modules/reports/src/domain/providers.ts +115 -0
- package/modules/reports/src/domain/types.ts +44 -0
- package/modules/reports/src/index.ts +47 -0
- package/modules/reports/src/platform.ts +37 -0
- package/modules/reports/src/server/index.ts +21 -0
- package/modules/reports/src/server/runtime.ts +40 -0
- package/modules/reports/src/services/index.ts +17 -0
- package/modules/reports/src/services/provider-registry.ts +144 -0
- package/modules/reports/src/services/range.ts +65 -0
- package/modules/reports/src/services/reports-service.ts +316 -0
- package/modules/reports/src/services/service-error.ts +26 -0
- package/modules/reports/src/settings.ts +49 -0
- package/modules/reports/translations/en.json +35 -0
- package/modules/reports/translations/pl.json +35 -0
- package/modules/sandbox/module.json +4 -4
- package/modules/sandbox/package.json +2 -2
- package/modules/sandbox/spec/module.yaml +3 -3
- package/modules/sandbox/src/services/database-repository.ts +14 -23
- package/modules/sandbox/src/services/directory.ts +16 -0
- package/modules/sandbox/src/services/sandbox-service.ts +13 -11
- package/modules/search/migrations/0001_search_core.down.sql +1 -0
- package/modules/search/migrations/0001_search_core.up.sql +22 -0
- package/modules/search/migrations/0002_search_recent_export.down.sql +3 -0
- package/modules/search/migrations/0002_search_recent_export.up.sql +5 -0
- package/modules/search/migrations/README.md +3 -0
- package/modules/search/module.json +28 -0
- package/modules/search/package.json +43 -0
- package/modules/search/spec/module.yaml +177 -0
- package/modules/search/src/acl/permissions.ts +5 -0
- package/modules/search/src/api/endpoints.ts +221 -0
- package/modules/search/src/client/SearchView.tsrx +346 -0
- package/modules/search/src/client/api.ts +157 -0
- package/modules/search/src/client/contribution.tsrx +31 -0
- package/modules/search/src/client/index.ts +17 -0
- package/modules/search/src/client/navigation.ts +97 -0
- package/modules/search/src/client/search.css +56 -0
- package/modules/search/src/client/state.ts +113 -0
- package/modules/search/src/domain/data-classes.ts +73 -0
- package/modules/search/src/domain/providers.ts +88 -0
- package/modules/search/src/domain/types.ts +56 -0
- package/modules/search/src/index.ts +46 -0
- package/modules/search/src/platform.ts +42 -0
- package/modules/search/src/server/index.ts +25 -0
- package/modules/search/src/server/runtime.ts +123 -0
- package/modules/search/src/services/database-repository.ts +163 -0
- package/modules/search/src/services/index.ts +21 -0
- package/modules/search/src/services/migration.ts +65 -0
- package/modules/search/src/services/provider-registry.ts +137 -0
- package/modules/search/src/services/repository.ts +43 -0
- package/modules/search/src/services/search-service.ts +442 -0
- package/modules/search/src/services/service-error.ts +35 -0
- package/modules/search/src/settings.ts +68 -0
- package/modules/search/translations/en.json +45 -0
- package/modules/search/translations/pl.json +45 -0
- package/modules/system/module.json +2 -2
- package/modules/system/package.json +2 -2
- package/modules/system/spec/module.yaml +30 -3
- package/modules/system/src/client/FlagsPanel.tsrx +127 -0
- package/modules/system/src/client/ModuleSettingRow.tsrx +17 -7
- package/modules/system/src/client/ModuleSettingsSection.tsrx +10 -71
- package/modules/system/src/client/ModulesView.tsrx +91 -65
- package/modules/system/src/client/flags.ts +35 -0
- package/modules/system/src/client/index.ts +8 -0
- package/modules/system/src/client/navigation.ts +8 -0
- package/modules/system/src/client/settings-state.ts +159 -0
- package/modules/system/src/client/state.ts +2 -0
- package/modules/system/src/domain/time-zone.ts +105 -0
- package/modules/system/src/index.ts +12 -0
- package/modules/system/src/platform.ts +5 -1
- package/modules/system/src/server/endpoints.ts +72 -21
- package/modules/system/src/settings.ts +28 -0
- package/modules/system/translations/en.json +17 -0
- package/modules/system/translations/pl.json +17 -0
- package/modules/users/module.json +30 -4
- package/modules/users/package.json +5 -2
- package/modules/users/spec/module.yaml +290 -7
- package/modules/users/src/api/endpoints.ts +228 -15
- package/modules/users/src/client/InviteMemberForm.tsrx +2 -2
- package/modules/users/src/client/MemberDrawer.tsrx +142 -26
- package/modules/users/src/client/UserAccountForm.tsrx +2 -2
- package/modules/users/src/client/UsersView.tsrx +432 -71
- package/modules/users/src/client/api.ts +106 -12
- package/modules/users/src/client/contribution.tsrx +5 -0
- package/modules/users/src/client/member-columns.tsrx +22 -9
- package/modules/users/src/client/state.ts +172 -7
- package/modules/users/src/domain/lists.ts +9 -0
- package/modules/users/src/index.ts +11 -0
- package/modules/users/src/platform.ts +50 -1
- package/modules/users/src/services/member-export.ts +51 -0
- package/modules/users/src/services/member-import.ts +249 -0
- package/modules/users/src/services/member-search.ts +145 -0
- package/modules/users/src/services/users-service.ts +117 -4
- package/modules/users/translations/en.json +57 -8
- package/modules/users/translations/pl.json +57 -8
- package/modules/workflows/migrations/0004_payload_rotation_inventory.up.sql +17 -0
- package/modules/workflows/migrations/0005_workflows_human_approval.up.sql +28 -0
- package/modules/workflows/migrations/0006_workflows_retention_indexes.up.sql +11 -0
- package/modules/workflows/migrations/0007_workflows_erasure_subject_indexes.up.sql +17 -0
- package/modules/workflows/migrations/0008_workflows_subject_account.up.sql +24 -0
- package/modules/workflows/migrations/0009_workflows_definition_list_indexes.up.sql +9 -0
- package/modules/workflows/module.json +34 -6
- package/modules/workflows/package.json +3 -2
- package/modules/workflows/spec/module.yaml +26 -9
- package/modules/workflows/src/api/endpoints.ts +131 -25
- package/modules/workflows/src/cli/commands.json +17 -0
- package/modules/workflows/src/cli/index.ts +114 -0
- package/modules/workflows/src/client/WorkflowExecutionHistory.tsrx +36 -27
- package/modules/workflows/src/client/WorkflowInspector.tsrx +116 -0
- package/modules/workflows/src/client/WorkflowNodePalette.tsrx +1 -0
- package/modules/workflows/src/client/WorkflowsView.tsrx +236 -99
- package/modules/workflows/src/client/api.ts +54 -34
- package/modules/workflows/src/client/canvas-model.ts +12 -0
- package/modules/workflows/src/client/state.ts +95 -0
- package/modules/workflows/src/domain/events.ts +25 -11
- package/modules/workflows/src/domain/graph.ts +135 -1
- package/modules/workflows/src/domain/types.ts +91 -4
- package/modules/workflows/src/platform.ts +12 -0
- package/modules/workflows/src/server/runtime.ts +78 -5
- package/modules/workflows/src/services/approvals.ts +62 -0
- package/modules/workflows/src/services/cursors.ts +37 -0
- package/modules/workflows/src/services/data-classes.ts +232 -0
- package/modules/workflows/src/services/database-repository.ts +660 -171
- package/modules/workflows/src/services/migration.ts +240 -0
- package/modules/workflows/src/services/notifications.ts +98 -0
- package/modules/workflows/src/services/payload-codec.ts +51 -28
- package/modules/workflows/src/services/payload-rotation.ts +171 -0
- package/modules/workflows/src/services/repository.ts +123 -8
- package/modules/workflows/src/services/simulation.ts +7 -0
- package/modules/workflows/src/services/worker.ts +446 -25
- package/modules/workflows/src/services/workflows-service.ts +264 -103
- package/modules/workflows/translations/en.json +12 -4
- package/modules/workflows/translations/pl.json +12 -4
- package/modules.json +48 -4
- package/package.json +66 -7
- package/packages/client/package.json +2 -1
- package/packages/client/src/ApplicationShell.tsrx +43 -0
- package/packages/client/src/contributions.ts +55 -0
- package/packages/client/src/i18n/locales/en.json +5 -0
- package/packages/client/src/i18n/locales/pl.json +5 -0
- package/packages/client/src/index.ts +13 -1
- package/packages/client/src/routing.ts +22 -0
- package/packages/client/src/shell/CommandPalette.tsrx +223 -11
- package/packages/client/src/shell/command-search.ts +126 -0
- package/packages/client/src/shell/command.ts +30 -0
- package/packages/client/src/shell/navigation.ts +12 -0
- package/packages/client/src/shell/palette-keys.ts +27 -0
- package/packages/client/src/shell/shell.css +7 -0
- package/packages/contracts/schemas/module-spec.schema.json +287 -1
- package/packages/contracts/schemas/module.schema.json +25 -0
- package/packages/contracts/src/index.ts +144 -1
- package/packages/database/src/backup.ts +179 -0
- package/packages/database/src/decoders.ts +25 -0
- package/packages/database/src/index.ts +17 -0
- package/packages/database/src/record-history.ts +5 -14
- package/packages/dev-console/package.json +2 -1
- package/packages/dev-console/src/brand.d.mts +8 -0
- package/packages/dev-console/src/brand.mjs +33 -0
- package/packages/dev-console/src/index.mjs +2 -1
- package/packages/harness/src/index.ts +2 -0
- package/packages/harness/src/runtime.ts +218 -1
- package/packages/harness/src/tool-adapters.ts +19 -1
- package/packages/kernel/src/acl.ts +179 -0
- package/packages/kernel/src/capability-registry.ts +69 -2
- package/packages/kernel/src/data-class-registry.ts +354 -0
- package/packages/kernel/src/index.ts +65 -4
- package/packages/kernel/src/keyring.ts +208 -0
- package/packages/kernel/src/module-compatibility.ts +35 -4
- package/packages/kernel/src/module-registry.ts +49 -2
- package/packages/kernel/src/module-settings.ts +189 -27
- package/packages/server/package.json +2 -1
- package/packages/server/src/composition.ts +38 -0
- package/packages/server/src/endpoint.ts +104 -47
- package/packages/server/src/export/csv.ts +34 -0
- package/packages/server/src/export/definition.ts +346 -0
- package/packages/server/src/export/index.ts +61 -0
- package/packages/server/src/export/run.ts +116 -0
- package/packages/server/src/index.ts +155 -0
- package/packages/server/src/jobs/index.ts +93 -0
- package/packages/server/src/jobs/runner.ts +486 -0
- package/packages/server/src/log.ts +291 -0
- package/packages/server/src/mail/config.ts +184 -0
- package/packages/server/src/mail/contracts.ts +251 -0
- package/packages/server/src/mail/index.ts +31 -0
- package/packages/server/src/mail/port.ts +101 -0
- package/packages/server/src/mail/smtp.ts +191 -0
- package/packages/server/src/mail/template.ts +105 -0
- package/packages/server/src/metrics.ts +447 -0
- package/packages/server/src/pagination.ts +246 -0
- package/packages/server/src/trace/context.ts +103 -0
- package/packages/server/src/trace/egress.ts +66 -0
- package/packages/server/src/trace/error-sink.ts +296 -0
- package/packages/server/src/trace/exporter.ts +295 -0
- package/packages/server/src/trace/index.ts +60 -0
- package/packages/server/src/trace/job-sink.ts +172 -0
- package/packages/server/src/trace/tracer.ts +338 -0
- package/packages/server/src/web.ts +5 -1
- package/packages/storage/package.json +40 -0
- package/packages/storage/src/config.ts +189 -0
- package/packages/storage/src/content-type.ts +124 -0
- package/packages/storage/src/contracts.ts +112 -0
- package/packages/storage/src/envelope.ts +189 -0
- package/packages/storage/src/index.ts +43 -0
- package/packages/storage/src/local.ts +75 -0
- package/packages/storage/src/port.ts +251 -0
- package/packages/storage/src/read-token.ts +130 -0
- package/packages/storage/src/s3.ts +144 -0
- package/packages/storage/src/scanner.ts +22 -0
- package/packages/storage/src/sigv4.ts +104 -0
- package/packages/storage/src/store.ts +13 -0
- package/packages/ui/package.json +1 -0
- package/packages/ui/src/components/Button.tsrx +3 -0
- package/packages/ui/src/components/ConfirmDialog.tsrx +13 -2
- package/packages/ui/src/components/DateField.tsrx +92 -0
- package/packages/ui/src/components/DatePicker.tsrx +525 -0
- package/packages/ui/src/components/DateRangeField.tsrx +93 -0
- package/packages/ui/src/components/Drawer.tsrx +10 -1
- package/packages/ui/src/components/FileUpload.tsrx +158 -0
- package/packages/ui/src/components/Pagination.tsrx +130 -0
- package/packages/ui/src/components/Select.tsrx +78 -0
- package/packages/ui/src/components/Table.tsrx +498 -81
- package/packages/ui/src/components/Tabs.tsrx +53 -0
- package/packages/ui/src/components/ToastHost.tsrx +48 -0
- package/packages/ui/src/components/calendar.ts +243 -0
- package/packages/ui/src/components/date-field.ts +62 -0
- package/packages/ui/src/components/file-upload.ts +49 -0
- package/packages/ui/src/components/focus-trap.ts +62 -0
- package/packages/ui/src/components/pagination.ts +68 -0
- package/packages/ui/src/components/table-sorting.ts +49 -0
- package/packages/ui/src/components/tabs.ts +61 -0
- package/packages/ui/src/components/toast-store.ts +116 -0
- package/packages/ui/src/icons/Icon.tsrx +5 -0
- package/packages/ui/src/index.ts +45 -0
- package/packages/ui/src/styles/components.css +598 -0
- package/modules/automations-workflows-integration/module.json +0 -27
- package/modules/automations-workflows-integration/spec/module.yaml +0 -93
- package/modules/automations-workflows-integration/src/index.ts +0 -14
- package/modules/automations-workflows-integration/src/platform.ts +0 -24
- package/modules/automations-workflows-integration/src/server/index.ts +0 -11
- package/modules/automations-workflows-integration/translations/en.json +0 -21
- package/modules/automations-workflows-integration/translations/pl.json +0 -21
- package/modules/workflows/src/services/cursor-codec.ts +0 -62
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { t } from '@flowdular/sdk/client/i18n';
|
|
2
|
+
import type { WorkspaceReportPage } from '../domain/types.ts';
|
|
3
|
+
|
|
4
|
+
interface ErrorEnvelope {
|
|
5
|
+
readonly error?: {
|
|
6
|
+
readonly code?: string;
|
|
7
|
+
readonly message?: string;
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/** A failed request with the server's stable code, so a screen can translate it. */
|
|
12
|
+
export class ReportsApiError extends Error {
|
|
13
|
+
readonly status: number;
|
|
14
|
+
readonly code: string;
|
|
15
|
+
|
|
16
|
+
constructor(status: number, code: string, message: string) {
|
|
17
|
+
super(message);
|
|
18
|
+
this.name = 'ReportsApiError';
|
|
19
|
+
this.status = status;
|
|
20
|
+
this.code = code;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* The server message is English and written for an operator. A code this module
|
|
26
|
+
* knows becomes translated copy; anything else keeps the server's own sentence
|
|
27
|
+
* rather than hiding what went wrong behind a generic line.
|
|
28
|
+
*/
|
|
29
|
+
export function reportsErrorMessage(
|
|
30
|
+
error: unknown,
|
|
31
|
+
fallbackKey: string,
|
|
32
|
+
): string {
|
|
33
|
+
if (error instanceof ReportsApiError) {
|
|
34
|
+
const key = 'reports.error.code.' + error.code;
|
|
35
|
+
const translated = t(key);
|
|
36
|
+
if (translated !== key) return translated;
|
|
37
|
+
return error.message;
|
|
38
|
+
}
|
|
39
|
+
if (error instanceof Error && error.message !== '') return error.message;
|
|
40
|
+
return t(fallbackKey);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/** A read, so it carries no CSRF token and no body. */
|
|
44
|
+
export async function loadReport(range?: {
|
|
45
|
+
readonly from?: string;
|
|
46
|
+
readonly to?: string;
|
|
47
|
+
}): Promise<WorkspaceReportPage> {
|
|
48
|
+
const parameters = new URLSearchParams();
|
|
49
|
+
if (range?.from) parameters.set('from', range.from);
|
|
50
|
+
if (range?.to) parameters.set('to', range.to);
|
|
51
|
+
const query = parameters.toString();
|
|
52
|
+
const response = await fetch('/api/reports' + (query ? '?' + query : ''), {
|
|
53
|
+
headers: { accept: 'application/json' },
|
|
54
|
+
credentials: 'same-origin',
|
|
55
|
+
});
|
|
56
|
+
const value = (await response.json()) as WorkspaceReportPage & ErrorEnvelope;
|
|
57
|
+
if (!response.ok) {
|
|
58
|
+
throw new ReportsApiError(
|
|
59
|
+
response.status,
|
|
60
|
+
value.error?.code ?? 'REQUEST_FAILED',
|
|
61
|
+
value.error?.message ?? t('reports.error.request'),
|
|
62
|
+
);
|
|
63
|
+
}
|
|
64
|
+
return value;
|
|
65
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { type ModuleClientContribution } from '@flowdular/sdk/client';
|
|
2
|
+
import translationsEn from '../../translations/en.json';
|
|
3
|
+
import translationsPl from '../../translations/pl.json';
|
|
4
|
+
import {
|
|
5
|
+
REPORTS_SUMMARY_WIDGET,
|
|
6
|
+
REPORTS_VIEWS,
|
|
7
|
+
reportsNavigation,
|
|
8
|
+
} from './navigation.ts';
|
|
9
|
+
import { ReportsSummaryWidget } from './ReportsSummaryWidget.tsrx';
|
|
10
|
+
import { ReportsView } from './ReportsView.tsrx';
|
|
11
|
+
|
|
12
|
+
export interface ReportsClientContributionOptions {
|
|
13
|
+
readonly csrfToken: string;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export function createReportsClientContribution(
|
|
17
|
+
options: ReportsClientContributionOptions,
|
|
18
|
+
): ModuleClientContribution {
|
|
19
|
+
return {
|
|
20
|
+
moduleId: 'reports.core',
|
|
21
|
+
translations: { en: translationsEn, pl: translationsPl },
|
|
22
|
+
navigation: reportsNavigation,
|
|
23
|
+
views: [
|
|
24
|
+
{
|
|
25
|
+
id: REPORTS_VIEWS.reports,
|
|
26
|
+
render: () => <ReportsView csrfToken={options.csrfToken} />,
|
|
27
|
+
},
|
|
28
|
+
],
|
|
29
|
+
widgets: [
|
|
30
|
+
{
|
|
31
|
+
...REPORTS_SUMMARY_WIDGET,
|
|
32
|
+
render: () => <ReportsSummaryWidget />,
|
|
33
|
+
},
|
|
34
|
+
],
|
|
35
|
+
};
|
|
36
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
ModuleClientContext,
|
|
3
|
+
ModuleClientContribution,
|
|
4
|
+
} from '@flowdular/sdk/client';
|
|
5
|
+
import { createReportsClientContribution as canonicalContribution } from './contribution.tsrx';
|
|
6
|
+
|
|
7
|
+
export { createReportsClientContribution } from './contribution.tsrx';
|
|
8
|
+
export type { ReportsClientContributionOptions } from './contribution.tsrx';
|
|
9
|
+
export { ReportsView } from './ReportsView.tsrx';
|
|
10
|
+
export { ReportsSummaryWidget } from './ReportsSummaryWidget.tsrx';
|
|
11
|
+
export { REPORTS_VIEWS } from './navigation.ts';
|
|
12
|
+
|
|
13
|
+
/* Canonical entry used by the generated platform composition. */
|
|
14
|
+
export function createClientContribution(
|
|
15
|
+
context: ModuleClientContext,
|
|
16
|
+
): ModuleClientContribution {
|
|
17
|
+
return canonicalContribution({ csrfToken: context.csrfToken });
|
|
18
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { NavigationContribution, WorkspaceSlot } from '@flowdular/sdk/client';
|
|
2
|
+
import { t } from '@flowdular/sdk/client/i18n';
|
|
3
|
+
import { REPORTS_PERMISSIONS } from '../acl/permissions.ts';
|
|
4
|
+
|
|
5
|
+
/** The view ids the contribution registers and every entry points at. */
|
|
6
|
+
export const REPORTS_VIEWS = {
|
|
7
|
+
reports: 'reports',
|
|
8
|
+
} as const;
|
|
9
|
+
|
|
10
|
+
/* Labels are read every render so a locale change reaches an entry the shell
|
|
11
|
+
built once. */
|
|
12
|
+
export const reportsNavigation: readonly NavigationContribution[] = [
|
|
13
|
+
{
|
|
14
|
+
id: 'reports.navigation',
|
|
15
|
+
viewId: REPORTS_VIEWS.reports,
|
|
16
|
+
group: 'Administration',
|
|
17
|
+
get label() {
|
|
18
|
+
return t('reports.navigation.label');
|
|
19
|
+
},
|
|
20
|
+
glyph: 'activity',
|
|
21
|
+
get description() {
|
|
22
|
+
return t('reports.navigation.description');
|
|
23
|
+
},
|
|
24
|
+
scope: REPORTS_PERMISSIONS.read,
|
|
25
|
+
order: 70,
|
|
26
|
+
},
|
|
27
|
+
];
|
|
28
|
+
|
|
29
|
+
export const REPORTS_SUMMARY_WIDGET: {
|
|
30
|
+
readonly id: string;
|
|
31
|
+
readonly slot: WorkspaceSlot;
|
|
32
|
+
readonly scope: string;
|
|
33
|
+
readonly order: number;
|
|
34
|
+
} = {
|
|
35
|
+
id: 'reports.dashboard.reports-summary',
|
|
36
|
+
slot: 'dashboard.metrics',
|
|
37
|
+
scope: REPORTS_PERMISSIONS.read,
|
|
38
|
+
order: 30,
|
|
39
|
+
};
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import type { Translate } from '@flowdular/sdk/client/i18n';
|
|
2
|
+
import type { ReportRange, ReportTile } from '../domain/providers.ts';
|
|
3
|
+
import { REPORT_LIMITS, type WorkspaceReport } from '../domain/types.ts';
|
|
4
|
+
import type { ScreenStatus } from './state.ts';
|
|
5
|
+
|
|
6
|
+
/** Which of the five states the screen renders. */
|
|
7
|
+
export type ScreenSurface = 'loading' | 'denied' | 'error' | 'empty' | 'ready';
|
|
8
|
+
|
|
9
|
+
export function screenSurface(
|
|
10
|
+
status: ScreenStatus,
|
|
11
|
+
reports: readonly WorkspaceReport[],
|
|
12
|
+
): ScreenSurface {
|
|
13
|
+
if (status === 'denied') return 'denied';
|
|
14
|
+
if (status === 'error') return 'error';
|
|
15
|
+
if (status === 'loading' && reports.length === 0) return 'loading';
|
|
16
|
+
/* A provider may answer lines without a single number, and that report is
|
|
17
|
+
something to render rather than an empty screen. */
|
|
18
|
+
return reports.some(
|
|
19
|
+
(report) => report.tiles.length > 0 || report.series.length > 0,
|
|
20
|
+
)
|
|
21
|
+
? 'ready'
|
|
22
|
+
: 'empty';
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const DAY_MS = 86_400_000;
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Whether the picked range is wider than one request may ask for. The server
|
|
29
|
+
* refuses the same width with a stable code; the screen checks it first so a
|
|
30
|
+
* reader sees the bound without spending a request on it.
|
|
31
|
+
*/
|
|
32
|
+
export function rangeTooWide(from: string, to: string): boolean {
|
|
33
|
+
const start = Date.parse(from + 'T00:00:00Z');
|
|
34
|
+
const end = Date.parse(to + 'T00:00:00Z');
|
|
35
|
+
if (Number.isNaN(start) || Number.isNaN(end)) return false;
|
|
36
|
+
return end - start > (REPORT_LIMITS.rangeDays - 1) * DAY_MS;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* A label as the reader should see it. A provider module names its copy with a
|
|
41
|
+
* key into its own bundle; `translate` answers the key itself when that bundle
|
|
42
|
+
* has no such entry, which is when the provider's own literal is used.
|
|
43
|
+
*/
|
|
44
|
+
export function resolvedLabel(
|
|
45
|
+
translate: Translate,
|
|
46
|
+
label: string,
|
|
47
|
+
key: string | undefined,
|
|
48
|
+
): string {
|
|
49
|
+
if (key === undefined || key === '') return label;
|
|
50
|
+
const translated = translate(key);
|
|
51
|
+
return translated === key ? label : translated;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* What one report card says under its name: the period the provider answered
|
|
56
|
+
* for when it named one, and otherwise the range the request asked for.
|
|
57
|
+
*/
|
|
58
|
+
export function reportCaption(
|
|
59
|
+
translate: Translate,
|
|
60
|
+
day: (value: string) => string,
|
|
61
|
+
report: WorkspaceReport,
|
|
62
|
+
range: ReportRange | null,
|
|
63
|
+
): string {
|
|
64
|
+
const period = report.period ?? range;
|
|
65
|
+
if (period === null) return report.moduleId;
|
|
66
|
+
return translate('reports.report.range', {
|
|
67
|
+
module: report.moduleId,
|
|
68
|
+
from: day(period.from),
|
|
69
|
+
to: day(period.to),
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/** One tile with the report it came from, for a view that flattens them. */
|
|
74
|
+
export interface RankedTile {
|
|
75
|
+
readonly report: WorkspaceReport;
|
|
76
|
+
readonly tile: ReportTile;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* The largest tiles of a whole report, biggest first. The dashboard shows a
|
|
81
|
+
* fixed few of these, so the comparison is across providers and the tie-break
|
|
82
|
+
* is the provider key and then the tile key, which keeps the order stable when
|
|
83
|
+
* two providers answer the same number.
|
|
84
|
+
*/
|
|
85
|
+
export function largestTiles(
|
|
86
|
+
reports: readonly WorkspaceReport[],
|
|
87
|
+
count: number,
|
|
88
|
+
): readonly RankedTile[] {
|
|
89
|
+
const ranked: RankedTile[] = [];
|
|
90
|
+
for (const report of reports) {
|
|
91
|
+
for (const tile of report.tiles) ranked.push({ report, tile });
|
|
92
|
+
}
|
|
93
|
+
ranked.sort(
|
|
94
|
+
(left, right) =>
|
|
95
|
+
right.tile.value - left.tile.value ||
|
|
96
|
+
left.report.key.localeCompare(right.report.key) ||
|
|
97
|
+
left.tile.key.localeCompare(right.tile.key),
|
|
98
|
+
);
|
|
99
|
+
return ranked.slice(0, Math.max(0, count));
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
export function numberLabel(locale: string, value: number): string {
|
|
103
|
+
return new Intl.NumberFormat(locale, { maximumFractionDigits: 2 }).format(
|
|
104
|
+
value,
|
|
105
|
+
);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
export function deltaLabel(locale: string, value: number): string {
|
|
109
|
+
return new Intl.NumberFormat(locale, {
|
|
110
|
+
maximumFractionDigits: 2,
|
|
111
|
+
signDisplay: 'exceptZero',
|
|
112
|
+
}).format(value);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
export function dayLabel(locale: string, day: string): string {
|
|
116
|
+
const parsed = Date.parse(day + 'T00:00:00Z');
|
|
117
|
+
if (Number.isNaN(parsed)) return day;
|
|
118
|
+
return new Intl.DateTimeFormat(locale, {
|
|
119
|
+
month: 'numeric',
|
|
120
|
+
day: 'numeric',
|
|
121
|
+
timeZone: 'UTC',
|
|
122
|
+
}).format(new Date(parsed));
|
|
123
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { cell, createStore } from 'segment-state';
|
|
2
|
+
import type { ReportRange } from '../domain/providers.ts';
|
|
3
|
+
import type { WorkspaceReport } from '../domain/types.ts';
|
|
4
|
+
|
|
5
|
+
/** `denied` is a 403 the shell could not hide; `error` is everything else. */
|
|
6
|
+
export type ScreenStatus = 'idle' | 'loading' | 'denied' | 'error';
|
|
7
|
+
|
|
8
|
+
export function createReportsClientState() {
|
|
9
|
+
const store = createStore({
|
|
10
|
+
reports: cell<readonly WorkspaceReport[]>([]),
|
|
11
|
+
/* The range the server answered for, not the one the fields hold: the
|
|
12
|
+
two differ while a reader is editing the dates. */
|
|
13
|
+
range: cell<ReportRange | null>(null),
|
|
14
|
+
unavailable: cell<readonly string[]>([]),
|
|
15
|
+
status: cell<ScreenStatus>('idle'),
|
|
16
|
+
error: '',
|
|
17
|
+
from: '',
|
|
18
|
+
to: '',
|
|
19
|
+
});
|
|
20
|
+
return { store, state: store.state };
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export function createReportsWidgetState() {
|
|
24
|
+
const store = createStore({
|
|
25
|
+
reports: cell<readonly WorkspaceReport[]>([]),
|
|
26
|
+
});
|
|
27
|
+
return { store, state: store.state };
|
|
28
|
+
}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The public cross-module surface. A module that owns a rollup resolves it
|
|
3
|
+
* while it composes through
|
|
4
|
+
* `context.capabilities.get<ReportProviderRegistry>(REPORTS_PROVIDERS_CAPABILITY)`
|
|
5
|
+
* and continues without registering when it is absent, so a deployment without
|
|
6
|
+
* reports.core still boots. Registration closes when reports.core starts.
|
|
7
|
+
*/
|
|
8
|
+
export const REPORTS_PROVIDERS_CAPABILITY = 'reports.v1';
|
|
9
|
+
|
|
10
|
+
/** Who is asking. The provider reads it; it never comes from the request. */
|
|
11
|
+
export interface ReportPrincipal {
|
|
12
|
+
readonly accountId: string;
|
|
13
|
+
readonly tenantId: string;
|
|
14
|
+
readonly scopes: readonly string[];
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/** Two UTC days, both inclusive, already validated and bounded by reports.core. */
|
|
18
|
+
export interface ReportRange {
|
|
19
|
+
/** `YYYY-MM-DD`. */
|
|
20
|
+
readonly from: string;
|
|
21
|
+
/** `YYYY-MM-DD`, never earlier than `from`. */
|
|
22
|
+
readonly to: string;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export interface ReportProviderQuery {
|
|
26
|
+
readonly tenantId: string;
|
|
27
|
+
readonly principal: ReportPrincipal;
|
|
28
|
+
readonly range: ReportRange;
|
|
29
|
+
/**
|
|
30
|
+
* Aborted when the provider's time budget expires. A provider that passes it
|
|
31
|
+
* to its own statements stops working for an answer nobody waits for; one
|
|
32
|
+
* that ignores it is still abandoned, it just keeps running.
|
|
33
|
+
*/
|
|
34
|
+
readonly signal?: AbortSignal;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* A key in the provider module's own translation bundle, fully qualified the
|
|
39
|
+
* way `t()` takes it. reports.core renders the translation when that bundle
|
|
40
|
+
* carries the key in the reader's locale and the literal label beside it when
|
|
41
|
+
* it does not, so a provider that ships no bundle still names itself.
|
|
42
|
+
*/
|
|
43
|
+
export type ReportLabelKey = string;
|
|
44
|
+
|
|
45
|
+
/** One number of a report. The unit carries whatever context the owner wants. */
|
|
46
|
+
export interface ReportTile {
|
|
47
|
+
/** Unique inside the provider; `^[a-z][a-z0-9-]*(\.[a-z0-9-]+)*$`. */
|
|
48
|
+
readonly key: string;
|
|
49
|
+
readonly label: string;
|
|
50
|
+
readonly tileLabelKey?: ReportLabelKey;
|
|
51
|
+
readonly value: number;
|
|
52
|
+
readonly unit?: string;
|
|
53
|
+
/** Change against the provider's own comparison period, when it states one. */
|
|
54
|
+
readonly delta?: number;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export interface ReportSeriesPoint {
|
|
58
|
+
/** The position on the range axis; a UTC day for the shipped providers. */
|
|
59
|
+
readonly at: string;
|
|
60
|
+
readonly value: number;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export interface ReportSeries {
|
|
64
|
+
readonly key: string;
|
|
65
|
+
readonly label: string;
|
|
66
|
+
readonly seriesLabelKey?: ReportLabelKey;
|
|
67
|
+
readonly points: readonly ReportSeriesPoint[];
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export interface ReportProviderAnswer {
|
|
71
|
+
readonly tiles: readonly ReportTile[];
|
|
72
|
+
readonly series?: readonly ReportSeries[];
|
|
73
|
+
/**
|
|
74
|
+
* The period these numbers actually cover, when it is not the range that
|
|
75
|
+
* was asked for. A provider that rolls up by its own period answers that
|
|
76
|
+
* period here, so the screen captions the card with what it is showing
|
|
77
|
+
* rather than with what it asked for.
|
|
78
|
+
*/
|
|
79
|
+
readonly period?: ReportRange;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
export interface ReportProvider {
|
|
83
|
+
/** `^[a-z][a-z0-9-]*(\.[a-z0-9-]+)*$`, unique across every module. */
|
|
84
|
+
readonly key: string;
|
|
85
|
+
readonly label: string;
|
|
86
|
+
readonly labelKey?: ReportLabelKey;
|
|
87
|
+
/** The scope a reader needs before this provider is asked at all. */
|
|
88
|
+
readonly permission: string;
|
|
89
|
+
read(input: ReportProviderQuery): Promise<ReportProviderAnswer>;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
export interface ReportProviderRegistry {
|
|
93
|
+
/**
|
|
94
|
+
* Adds the module's providers in the order given. Provider order is the
|
|
95
|
+
* order the screen renders in, and the order modules compose in is the order
|
|
96
|
+
* they register in. Throws a `ReportsServiceError` with a stable code for a
|
|
97
|
+
* malformed provider, a duplicate key, or a call made after reports.core
|
|
98
|
+
* started.
|
|
99
|
+
*/
|
|
100
|
+
register(moduleId: string, providers: readonly ReportProvider[]): void;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/** Largest values the registry and the answer reader accept. */
|
|
104
|
+
export const REPORT_PROVIDER_LIMITS = {
|
|
105
|
+
moduleId: 64,
|
|
106
|
+
key: 96,
|
|
107
|
+
label: 120,
|
|
108
|
+
permission: 96,
|
|
109
|
+
unit: 32,
|
|
110
|
+
at: 32,
|
|
111
|
+
providers: 64,
|
|
112
|
+
tiles: 16,
|
|
113
|
+
series: 8,
|
|
114
|
+
points: 400,
|
|
115
|
+
} as const;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
ReportLabelKey,
|
|
3
|
+
ReportRange,
|
|
4
|
+
ReportSeries,
|
|
5
|
+
ReportTile,
|
|
6
|
+
} from './providers.ts';
|
|
7
|
+
|
|
8
|
+
/** Bounds reports.core enforces on a request, independent of any provider. */
|
|
9
|
+
export const REPORT_LIMITS = {
|
|
10
|
+
tenantId: 128,
|
|
11
|
+
/**
|
|
12
|
+
* Widest range one request may ask for. It equals the point bound, so a
|
|
13
|
+
* daily series over the widest range still fits inside one provider answer.
|
|
14
|
+
*/
|
|
15
|
+
rangeDays: 400,
|
|
16
|
+
defaultRangeDays: 30,
|
|
17
|
+
} as const;
|
|
18
|
+
|
|
19
|
+
/** A provider as the reader sees it, without its read operation. */
|
|
20
|
+
export interface ReportProviderSummary {
|
|
21
|
+
readonly key: string;
|
|
22
|
+
readonly moduleId: string;
|
|
23
|
+
readonly label: string;
|
|
24
|
+
readonly labelKey?: ReportLabelKey;
|
|
25
|
+
readonly permission: string;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/** One provider's answer, read and bounded, as the screen renders it. */
|
|
29
|
+
export interface WorkspaceReport extends ReportProviderSummary {
|
|
30
|
+
readonly tiles: readonly ReportTile[];
|
|
31
|
+
readonly series: readonly ReportSeries[];
|
|
32
|
+
/** The period this provider answered for, when it is not the request range. */
|
|
33
|
+
readonly period?: ReportRange;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export interface WorkspaceReportPage {
|
|
37
|
+
readonly range: ReportRange;
|
|
38
|
+
readonly reports: readonly WorkspaceReport[];
|
|
39
|
+
/**
|
|
40
|
+
* Providers that were asked and could not answer, by key. A provider whose
|
|
41
|
+
* permission the reader lacks is never asked and never named here.
|
|
42
|
+
*/
|
|
43
|
+
readonly unavailable: readonly string[];
|
|
44
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { ModuleManifest, RegisteredModule } from '@flowdular/sdk/contracts';
|
|
2
|
+
import manifest from '../module.json' with { type: 'json' };
|
|
3
|
+
import { REPORTS_PERMISSIONS } from './acl/permissions.ts';
|
|
4
|
+
|
|
5
|
+
export const moduleDefinition = {
|
|
6
|
+
manifest: manifest as ModuleManifest,
|
|
7
|
+
navigation: [
|
|
8
|
+
{
|
|
9
|
+
id: 'reports.navigation',
|
|
10
|
+
label: 'Reports',
|
|
11
|
+
href: '/reports',
|
|
12
|
+
order: 70,
|
|
13
|
+
permission: REPORTS_PERMISSIONS.read,
|
|
14
|
+
},
|
|
15
|
+
],
|
|
16
|
+
permissions: Object.values(REPORTS_PERMISSIONS),
|
|
17
|
+
} satisfies RegisteredModule;
|
|
18
|
+
|
|
19
|
+
export { REPORTS_PERMISSIONS } from './acl/permissions.ts';
|
|
20
|
+
|
|
21
|
+
/* The cross-module contract. A provider module imports the identifier and the
|
|
22
|
+
types from here and resolves the registry through the capability registry;
|
|
23
|
+
nothing else in this module is meant to be imported by another one. */
|
|
24
|
+
export {
|
|
25
|
+
REPORTS_PROVIDERS_CAPABILITY,
|
|
26
|
+
REPORT_PROVIDER_LIMITS,
|
|
27
|
+
} from './domain/providers.ts';
|
|
28
|
+
export type {
|
|
29
|
+
ReportPrincipal,
|
|
30
|
+
ReportProvider,
|
|
31
|
+
ReportProviderAnswer,
|
|
32
|
+
ReportProviderQuery,
|
|
33
|
+
ReportProviderRegistry,
|
|
34
|
+
ReportRange,
|
|
35
|
+
ReportSeries,
|
|
36
|
+
ReportSeriesPoint,
|
|
37
|
+
ReportTile,
|
|
38
|
+
} from './domain/providers.ts';
|
|
39
|
+
|
|
40
|
+
export { REPORT_LIMITS } from './domain/types.ts';
|
|
41
|
+
export type {
|
|
42
|
+
ReportProviderSummary,
|
|
43
|
+
WorkspaceReport,
|
|
44
|
+
WorkspaceReportPage,
|
|
45
|
+
} from './domain/types.ts';
|
|
46
|
+
|
|
47
|
+
export { ReportsServiceError } from './services/service-error.ts';
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
PlatformServerComposition,
|
|
3
|
+
PlatformServerContext,
|
|
4
|
+
} from '@flowdular/sdk/modules/auth/server';
|
|
5
|
+
import {
|
|
6
|
+
REPORTS_PROVIDERS_CAPABILITY,
|
|
7
|
+
type ReportProviderRegistry,
|
|
8
|
+
} from './domain/providers.ts';
|
|
9
|
+
import { createReportsRoutes, createReportsRuntime } from './server/index.ts';
|
|
10
|
+
import { REPORTS_MODULE_SETTINGS, reportsBudget } from './settings.ts';
|
|
11
|
+
|
|
12
|
+
export function createServerComposition(
|
|
13
|
+
context: PlatformServerContext,
|
|
14
|
+
): PlatformServerComposition {
|
|
15
|
+
const runtime = createReportsRuntime({
|
|
16
|
+
budget: () => reportsBudget(context.settings),
|
|
17
|
+
});
|
|
18
|
+
/* Registered while this module composes so every provider module, which
|
|
19
|
+
declares reports.core as a dependency and therefore composes later, finds
|
|
20
|
+
the registry open. `start` runs once every module has composed, which is
|
|
21
|
+
exactly when the provider list is final. */
|
|
22
|
+
context.capabilities.register<ReportProviderRegistry>(
|
|
23
|
+
REPORTS_PROVIDERS_CAPABILITY,
|
|
24
|
+
{
|
|
25
|
+
register: (moduleId, providers) =>
|
|
26
|
+
runtime.providers.register(moduleId, providers),
|
|
27
|
+
},
|
|
28
|
+
);
|
|
29
|
+
/* reports.core holds no rows: it composes what the owning modules answer
|
|
30
|
+
and keeps nothing. The empty declaration is how a workspace sees that. */
|
|
31
|
+
context.dataClasses.declare('reports.core', []);
|
|
32
|
+
return {
|
|
33
|
+
routes: createReportsRoutes(context.auth, runtime),
|
|
34
|
+
settings: REPORTS_MODULE_SETTINGS,
|
|
35
|
+
start: () => runtime.start(),
|
|
36
|
+
};
|
|
37
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export { createReportsRoutes, endpoints } from '../api/endpoints.ts';
|
|
2
|
+
export { createReportsRuntime } from './runtime.ts';
|
|
3
|
+
export type { ReportsRuntime, ReportsRuntimeOptions } from './runtime.ts';
|
|
4
|
+
export { createReportProviderRegistry } from '../services/provider-registry.ts';
|
|
5
|
+
export type {
|
|
6
|
+
MutableReportProviderRegistry,
|
|
7
|
+
RegisteredReportProvider,
|
|
8
|
+
} from '../services/provider-registry.ts';
|
|
9
|
+
export { readReportRange, utcDay } from '../services/range.ts';
|
|
10
|
+
export {
|
|
11
|
+
PROVIDER_TIMEOUT_RANGE,
|
|
12
|
+
readAnswer,
|
|
13
|
+
ReportsService,
|
|
14
|
+
} from '../services/reports-service.ts';
|
|
15
|
+
export type {
|
|
16
|
+
ReportsBudget,
|
|
17
|
+
ReportsQueryInput,
|
|
18
|
+
ReportsServiceOptions,
|
|
19
|
+
} from '../services/reports-service.ts';
|
|
20
|
+
export { ReportsServiceError } from '../services/service-error.ts';
|
|
21
|
+
export { REPORTS_MODULE_SETTINGS, reportsBudget } from '../settings.ts';
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { ReportProviderRegistry } from '../domain/providers.ts';
|
|
2
|
+
import {
|
|
3
|
+
createReportProviderRegistry,
|
|
4
|
+
type MutableReportProviderRegistry,
|
|
5
|
+
} from '../services/provider-registry.ts';
|
|
6
|
+
import {
|
|
7
|
+
ReportsService,
|
|
8
|
+
type ReportsBudget,
|
|
9
|
+
} from '../services/reports-service.ts';
|
|
10
|
+
|
|
11
|
+
export interface ReportsRuntimeOptions {
|
|
12
|
+
/** Live platform setting, read again for every request. */
|
|
13
|
+
readonly budget: () => ReportsBudget;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export interface ReportsRuntime {
|
|
17
|
+
/** The registration half, registered as `reports.v1` while modules compose. */
|
|
18
|
+
readonly providers: ReportProviderRegistry;
|
|
19
|
+
service(): ReportsService;
|
|
20
|
+
/** Seals the registry: composition is over and nothing may register now. */
|
|
21
|
+
start(): void;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* reports.core owns no rows, so there is no lease, no migration and nothing to
|
|
26
|
+
* dispose: the runtime is the provider registry plus the one service that fans
|
|
27
|
+
* out over it.
|
|
28
|
+
*/
|
|
29
|
+
export function createReportsRuntime(
|
|
30
|
+
options: ReportsRuntimeOptions,
|
|
31
|
+
): ReportsRuntime {
|
|
32
|
+
const registry: MutableReportProviderRegistry =
|
|
33
|
+
createReportProviderRegistry();
|
|
34
|
+
const service = new ReportsService({ registry, budget: options.budget });
|
|
35
|
+
return {
|
|
36
|
+
providers: registry,
|
|
37
|
+
service: () => service,
|
|
38
|
+
start: () => registry.seal(),
|
|
39
|
+
};
|
|
40
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export { createReportProviderRegistry } from './provider-registry.ts';
|
|
2
|
+
export type {
|
|
3
|
+
MutableReportProviderRegistry,
|
|
4
|
+
RegisteredReportProvider,
|
|
5
|
+
} from './provider-registry.ts';
|
|
6
|
+
export { readReportRange, utcDay } from './range.ts';
|
|
7
|
+
export {
|
|
8
|
+
PROVIDER_TIMEOUT_RANGE,
|
|
9
|
+
readAnswer,
|
|
10
|
+
ReportsService,
|
|
11
|
+
} from './reports-service.ts';
|
|
12
|
+
export type {
|
|
13
|
+
ReportsBudget,
|
|
14
|
+
ReportsQueryInput,
|
|
15
|
+
ReportsServiceOptions,
|
|
16
|
+
} from './reports-service.ts';
|
|
17
|
+
export { bounded, ReportsServiceError } from './service-error.ts';
|