@flowdular/sdk 0.2.4 → 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 +2 -1
- 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 +2 -1
- 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 +4 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +4 -1
- 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 +2 -1
- 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 +64 -6
- package/packages/client/package.json +1 -0
- 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/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,21 @@
|
|
|
1
|
+
-- The retention sweep must find the classes that are due across every
|
|
2
|
+
-- workspace before it knows whose they are. It is granted exactly the routing
|
|
3
|
+
-- and policy columns of audit_data_classes: the human label and the owning
|
|
4
|
+
-- module id stay invisible to it, and every class it picks is read again under
|
|
5
|
+
-- the workspace the routing row named before a single row is removed.
|
|
6
|
+
--
|
|
7
|
+
-- The retention columns are part of the routing set on purpose. Without them
|
|
8
|
+
-- the cross-tenant read cannot tell a class that is kept for ever from one that
|
|
9
|
+
-- is due, and the loop would re-read the same never-due classes every interval.
|
|
10
|
+
DO $$
|
|
11
|
+
BEGIN
|
|
12
|
+
IF NOT EXISTS (SELECT 1 FROM pg_roles WHERE rolname = 'coreloom_background') THEN
|
|
13
|
+
RAISE EXCEPTION 'The coreloom_background role must exist before this migration.';
|
|
14
|
+
END IF;
|
|
15
|
+
END
|
|
16
|
+
$$;
|
|
17
|
+
CREATE POLICY audit_data_classes_background_policy ON audit_data_classes
|
|
18
|
+
FOR SELECT TO coreloom_background
|
|
19
|
+
USING (true);
|
|
20
|
+
REVOKE SELECT ON audit_data_classes FROM coreloom_background;
|
|
21
|
+
GRANT SELECT (tenant_id, class_id, sweepable, retention_mode, retention_days, default_retention_days, last_swept_at) ON audit_data_classes TO coreloom_background;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
REVOKE SELECT (tenant_id, id, status, started_at) ON audit_export_runs FROM coreloom_background;
|
|
2
|
+
DROP POLICY IF EXISTS audit_export_runs_background_policy ON audit_export_runs;
|
|
3
|
+
DROP INDEX IF EXISTS audit_export_runs_pending_idx;
|
|
4
|
+
ALTER TABLE audit_export_runs DROP CONSTRAINT IF EXISTS audit_export_runs_dry_run_check;
|
|
5
|
+
ALTER TABLE audit_export_runs DROP COLUMN IF EXISTS claimed_at;
|
|
6
|
+
ALTER TABLE audit_export_runs DROP COLUMN IF EXISTS summary_json;
|
|
7
|
+
ALTER TABLE audit_export_runs DROP COLUMN IF EXISTS reason;
|
|
8
|
+
ALTER TABLE audit_export_runs DROP COLUMN IF EXISTS archive_path;
|
|
9
|
+
ALTER TABLE audit_export_runs DROP COLUMN IF EXISTS workspace_name;
|
|
10
|
+
ALTER TABLE audit_export_runs DROP COLUMN IF EXISTS workspace_slug;
|
|
11
|
+
ALTER TABLE audit_export_runs DROP COLUMN IF EXISTS dry_run;
|
|
12
|
+
ALTER TABLE audit_export_runs DROP COLUMN IF EXISTS output_directory;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
-- An export is a request the running platform answers. The operator command
|
|
2
|
+
-- records the row and waits; the platform process, the only one holding the
|
|
3
|
+
-- sealed data class registry with every owner port, performs the export and
|
|
4
|
+
-- records what it wrote. The request columns are what the operator asked for,
|
|
5
|
+
-- the result columns what the platform produced, and claimed_at is the lease
|
|
6
|
+
-- that keeps two platform processes from writing one archive twice.
|
|
7
|
+
ALTER TABLE audit_export_runs ADD COLUMN IF NOT EXISTS output_directory TEXT;
|
|
8
|
+
ALTER TABLE audit_export_runs ADD COLUMN IF NOT EXISTS dry_run SMALLINT NOT NULL DEFAULT 0;
|
|
9
|
+
ALTER TABLE audit_export_runs ADD COLUMN IF NOT EXISTS workspace_slug TEXT;
|
|
10
|
+
ALTER TABLE audit_export_runs ADD COLUMN IF NOT EXISTS workspace_name TEXT;
|
|
11
|
+
ALTER TABLE audit_export_runs ADD COLUMN IF NOT EXISTS archive_path TEXT;
|
|
12
|
+
ALTER TABLE audit_export_runs ADD COLUMN IF NOT EXISTS reason TEXT;
|
|
13
|
+
ALTER TABLE audit_export_runs ADD COLUMN IF NOT EXISTS summary_json TEXT;
|
|
14
|
+
ALTER TABLE audit_export_runs ADD COLUMN IF NOT EXISTS claimed_at BIGINT;
|
|
15
|
+
DO $$
|
|
16
|
+
BEGIN
|
|
17
|
+
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'audit_export_runs_dry_run_check') THEN
|
|
18
|
+
ALTER TABLE audit_export_runs
|
|
19
|
+
ADD CONSTRAINT audit_export_runs_dry_run_check CHECK (dry_run IN (0, 1));
|
|
20
|
+
END IF;
|
|
21
|
+
END
|
|
22
|
+
$$;
|
|
23
|
+
-- The platform loop finds requested runs across workspaces before it knows
|
|
24
|
+
-- whose they are, so it reads the routing columns alone on the background
|
|
25
|
+
-- role; every run it picks is read again under the workspace the routing row
|
|
26
|
+
-- named before a single byte is written.
|
|
27
|
+
CREATE INDEX IF NOT EXISTS audit_export_runs_pending_idx
|
|
28
|
+
ON audit_export_runs (status, started_at, tenant_id, id);
|
|
29
|
+
DO $$
|
|
30
|
+
BEGIN
|
|
31
|
+
IF NOT EXISTS (SELECT 1 FROM pg_roles WHERE rolname = 'coreloom_background') THEN
|
|
32
|
+
RAISE EXCEPTION 'The coreloom_background role must exist before this migration.';
|
|
33
|
+
END IF;
|
|
34
|
+
END
|
|
35
|
+
$$;
|
|
36
|
+
CREATE POLICY audit_export_runs_background_policy ON audit_export_runs
|
|
37
|
+
FOR SELECT TO coreloom_background
|
|
38
|
+
USING (true);
|
|
39
|
+
REVOKE SELECT ON audit_export_runs FROM coreloom_background;
|
|
40
|
+
GRANT SELECT (tenant_id, id, status, started_at) ON audit_export_runs TO coreloom_background;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
REVOKE SELECT (tenant_id, id, status, started_at) ON audit_erasure_runs FROM coreloom_background;
|
|
2
|
+
DROP POLICY IF EXISTS audit_erasure_runs_background_policy ON audit_erasure_runs;
|
|
3
|
+
REVOKE SELECT (tenant_id, id, key_id) ON audit_anchors FROM coreloom_background;
|
|
4
|
+
DROP POLICY IF EXISTS audit_anchors_background_policy ON audit_anchors;
|
|
5
|
+
ALTER TABLE audit_sweep_runs DROP CONSTRAINT IF EXISTS audit_sweep_runs_held_back_check;
|
|
6
|
+
ALTER TABLE audit_events DROP CONSTRAINT IF EXISTS audit_events_sealed_check;
|
|
7
|
+
ALTER TABLE audit_events DROP CONSTRAINT IF EXISTS audit_events_subject_type_check;
|
|
8
|
+
ALTER TABLE audit_events
|
|
9
|
+
ADD CONSTRAINT audit_events_subject_type_check
|
|
10
|
+
CHECK (subject_type IN ('data-class', 'sweep-run', 'export-run'));
|
|
11
|
+
ALTER TABLE audit_sweep_runs DROP COLUMN IF EXISTS held_back;
|
|
12
|
+
ALTER TABLE audit_events DROP COLUMN IF EXISTS sealed_payload;
|
|
13
|
+
ALTER TABLE audit_events DROP COLUMN IF EXISTS subject_key_id;
|
|
14
|
+
DROP TABLE IF EXISTS audit_erasure_runs;
|
|
15
|
+
DROP TABLE IF EXISTS audit_subject_keys;
|
|
16
|
+
DROP TABLE IF EXISTS audit_legal_holds;
|
|
17
|
+
DROP TABLE IF EXISTS audit_anchors;
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
-- Sealing, legal hold and erasure on request. Three tables and four columns.
|
|
2
|
+
--
|
|
3
|
+
-- audit_anchors closes segments of the per-workspace event chain. An anchor
|
|
4
|
+
-- seals the sequence range, the row count, the time range, the hash chain over
|
|
5
|
+
-- the segment continuing from the anchor before it, and the hash of that anchor
|
|
6
|
+
-- itself; the signature is HMAC-SHA256 over the anchor hash, so re-signing
|
|
7
|
+
-- under a rotated key changes the signature and the key id alone and every
|
|
8
|
+
-- segment file already written still verifies.
|
|
9
|
+
CREATE TABLE IF NOT EXISTS audit_anchors (
|
|
10
|
+
id TEXT PRIMARY KEY,
|
|
11
|
+
tenant_id TEXT NOT NULL,
|
|
12
|
+
anchor_sequence BIGINT NOT NULL CHECK (anchor_sequence > 0),
|
|
13
|
+
from_sequence BIGINT NOT NULL CHECK (from_sequence > 0),
|
|
14
|
+
to_sequence BIGINT NOT NULL,
|
|
15
|
+
row_count BIGINT NOT NULL CHECK (row_count > 0),
|
|
16
|
+
first_occurred_at BIGINT NOT NULL,
|
|
17
|
+
last_occurred_at BIGINT NOT NULL,
|
|
18
|
+
segment_hash TEXT NOT NULL,
|
|
19
|
+
previous_anchor_hash TEXT,
|
|
20
|
+
anchor_hash TEXT NOT NULL,
|
|
21
|
+
signature TEXT NOT NULL,
|
|
22
|
+
key_id TEXT NOT NULL,
|
|
23
|
+
segment_file TEXT NOT NULL,
|
|
24
|
+
sealed_by TEXT NOT NULL,
|
|
25
|
+
sealed_at BIGINT NOT NULL,
|
|
26
|
+
CHECK (to_sequence >= from_sequence),
|
|
27
|
+
UNIQUE (tenant_id, anchor_sequence),
|
|
28
|
+
UNIQUE (tenant_id, to_sequence),
|
|
29
|
+
UNIQUE (tenant_id, anchor_hash)
|
|
30
|
+
);
|
|
31
|
+
-- The newest anchor of a workspace is read before every seal and before every
|
|
32
|
+
-- sweep of the event class, so it is the one lookup that has to stay O(1).
|
|
33
|
+
CREATE INDEX IF NOT EXISTS audit_anchors_tenant_sequence_idx
|
|
34
|
+
ON audit_anchors (tenant_id, anchor_sequence DESC);
|
|
35
|
+
ALTER TABLE audit_anchors ENABLE ROW LEVEL SECURITY;
|
|
36
|
+
ALTER TABLE audit_anchors FORCE ROW LEVEL SECURITY;
|
|
37
|
+
CREATE POLICY audit_anchors_tenant_policy ON audit_anchors
|
|
38
|
+
USING (tenant_id = current_setting('coreloom.tenant_id', true))
|
|
39
|
+
WITH CHECK (tenant_id = current_setting('coreloom.tenant_id', true));
|
|
40
|
+
|
|
41
|
+
-- A hold is a standing instruction not to remove what it covers. scope_kind
|
|
42
|
+
-- names the dimension it was placed on and the nullable columns narrow it
|
|
43
|
+
-- further, so an account hold limited to one class and one date range is one
|
|
44
|
+
-- row rather than three. A lifted hold is kept: who lifted it and why is the
|
|
45
|
+
-- evidence that the data became removable again.
|
|
46
|
+
CREATE TABLE IF NOT EXISTS audit_legal_holds (
|
|
47
|
+
id TEXT PRIMARY KEY,
|
|
48
|
+
tenant_id TEXT NOT NULL,
|
|
49
|
+
scope_kind TEXT NOT NULL CHECK (scope_kind IN ('account', 'workspace', 'data-class', 'date-range')),
|
|
50
|
+
account_id TEXT,
|
|
51
|
+
class_id TEXT,
|
|
52
|
+
from_at BIGINT,
|
|
53
|
+
to_at BIGINT,
|
|
54
|
+
reason TEXT NOT NULL,
|
|
55
|
+
status TEXT NOT NULL CHECK (status IN ('active', 'lifted')),
|
|
56
|
+
placed_by TEXT NOT NULL,
|
|
57
|
+
placed_at BIGINT NOT NULL,
|
|
58
|
+
lifted_by TEXT,
|
|
59
|
+
lift_reason TEXT,
|
|
60
|
+
lifted_at BIGINT,
|
|
61
|
+
CHECK (scope_kind <> 'account' OR account_id IS NOT NULL),
|
|
62
|
+
CHECK (scope_kind <> 'data-class' OR class_id IS NOT NULL),
|
|
63
|
+
CHECK (scope_kind <> 'date-range' OR (from_at IS NOT NULL AND to_at IS NOT NULL)),
|
|
64
|
+
CHECK (scope_kind <> 'workspace' OR (account_id IS NULL AND class_id IS NULL
|
|
65
|
+
AND from_at IS NULL AND to_at IS NULL)),
|
|
66
|
+
CHECK (from_at IS NULL OR to_at IS NULL OR to_at >= from_at),
|
|
67
|
+
CHECK ((status = 'lifted') = (lifted_at IS NOT NULL))
|
|
68
|
+
);
|
|
69
|
+
-- The sweep and every erasure ask for the active holds of one workspace before
|
|
70
|
+
-- they touch a row, so that read walks an index instead of the table.
|
|
71
|
+
CREATE INDEX IF NOT EXISTS audit_legal_holds_tenant_status_idx
|
|
72
|
+
ON audit_legal_holds (tenant_id, status, placed_at DESC, id);
|
|
73
|
+
ALTER TABLE audit_legal_holds ENABLE ROW LEVEL SECURITY;
|
|
74
|
+
ALTER TABLE audit_legal_holds FORCE ROW LEVEL SECURITY;
|
|
75
|
+
CREATE POLICY audit_legal_holds_tenant_policy ON audit_legal_holds
|
|
76
|
+
USING (tenant_id = current_setting('coreloom.tenant_id', true))
|
|
77
|
+
WITH CHECK (tenant_id = current_setting('coreloom.tenant_id', true));
|
|
78
|
+
|
|
79
|
+
-- One data key per subject. Audit events are excluded from erasure because they
|
|
80
|
+
-- are the evidence the lifecycle happened, so the subject-identifying fields of
|
|
81
|
+
-- a new event are sealed under this key instead: destroying the key blanks the
|
|
82
|
+
-- material and the account it belonged to, and what is left is a tombstone that
|
|
83
|
+
-- proves an event existed and can never be read again. The row stays so the
|
|
84
|
+
-- events that point at it keep a target, and the chain hash covers the sealed
|
|
85
|
+
-- bytes rather than the plaintext, so destruction never breaks verification.
|
|
86
|
+
CREATE TABLE IF NOT EXISTS audit_subject_keys (
|
|
87
|
+
id TEXT PRIMARY KEY,
|
|
88
|
+
tenant_id TEXT NOT NULL,
|
|
89
|
+
subject TEXT,
|
|
90
|
+
material TEXT,
|
|
91
|
+
sealed_at BIGINT NOT NULL,
|
|
92
|
+
destroyed_at BIGINT,
|
|
93
|
+
CHECK ((subject IS NULL) = (material IS NULL)),
|
|
94
|
+
CHECK ((destroyed_at IS NULL) = (material IS NOT NULL))
|
|
95
|
+
);
|
|
96
|
+
-- Partial, because every destroyed key carries a null subject and two of them
|
|
97
|
+
-- would collide under a total unique index.
|
|
98
|
+
CREATE UNIQUE INDEX IF NOT EXISTS audit_subject_keys_tenant_subject_idx
|
|
99
|
+
ON audit_subject_keys (tenant_id, subject)
|
|
100
|
+
WHERE subject IS NOT NULL;
|
|
101
|
+
ALTER TABLE audit_subject_keys ENABLE ROW LEVEL SECURITY;
|
|
102
|
+
ALTER TABLE audit_subject_keys FORCE ROW LEVEL SECURITY;
|
|
103
|
+
CREATE POLICY audit_subject_keys_tenant_policy ON audit_subject_keys
|
|
104
|
+
USING (tenant_id = current_setting('coreloom.tenant_id', true))
|
|
105
|
+
WITH CHECK (tenant_id = current_setting('coreloom.tenant_id', true));
|
|
106
|
+
|
|
107
|
+
-- An erasure is a request the running platform answers, for the same reason an
|
|
108
|
+
-- export is: only the platform process holds the registrations every owning
|
|
109
|
+
-- module made, so only it can reach an erase operation. The operator command
|
|
110
|
+
-- records the row and waits. The subject is kept while the run needs it and
|
|
111
|
+
-- blanked when it finishes, so the history proves an erasure happened without
|
|
112
|
+
-- naming the person it erased; subject_marker is the same hash the certificate
|
|
113
|
+
-- file is named after, which is what ties the two together.
|
|
114
|
+
CREATE TABLE IF NOT EXISTS audit_erasure_runs (
|
|
115
|
+
id TEXT PRIMARY KEY,
|
|
116
|
+
tenant_id TEXT NOT NULL,
|
|
117
|
+
subject TEXT,
|
|
118
|
+
subject_marker TEXT NOT NULL,
|
|
119
|
+
status TEXT NOT NULL CHECK (status IN ('requested', 'completed', 'failed')),
|
|
120
|
+
dry_run SMALLINT NOT NULL CHECK (dry_run IN (0, 1)),
|
|
121
|
+
destroy_key SMALLINT NOT NULL CHECK (destroy_key IN (0, 1)),
|
|
122
|
+
requested_by TEXT NOT NULL,
|
|
123
|
+
output_directory TEXT,
|
|
124
|
+
workspace_slug TEXT,
|
|
125
|
+
workspace_name TEXT,
|
|
126
|
+
classes BIGINT NOT NULL CHECK (classes >= 0),
|
|
127
|
+
row_count BIGINT NOT NULL CHECK (row_count >= 0),
|
|
128
|
+
certificate_path TEXT,
|
|
129
|
+
outcome_json TEXT,
|
|
130
|
+
reason TEXT,
|
|
131
|
+
claimed_at BIGINT,
|
|
132
|
+
started_at BIGINT NOT NULL,
|
|
133
|
+
completed_at BIGINT
|
|
134
|
+
);
|
|
135
|
+
CREATE INDEX IF NOT EXISTS audit_erasure_runs_tenant_time_idx
|
|
136
|
+
ON audit_erasure_runs (tenant_id, started_at DESC, id);
|
|
137
|
+
CREATE INDEX IF NOT EXISTS audit_erasure_runs_pending_idx
|
|
138
|
+
ON audit_erasure_runs (status, started_at, tenant_id, id);
|
|
139
|
+
ALTER TABLE audit_erasure_runs ENABLE ROW LEVEL SECURITY;
|
|
140
|
+
ALTER TABLE audit_erasure_runs FORCE ROW LEVEL SECURITY;
|
|
141
|
+
CREATE POLICY audit_erasure_runs_tenant_policy ON audit_erasure_runs
|
|
142
|
+
USING (tenant_id = current_setting('coreloom.tenant_id', true))
|
|
143
|
+
WITH CHECK (tenant_id = current_setting('coreloom.tenant_id', true));
|
|
144
|
+
|
|
145
|
+
-- A sealed event keeps its actor and subject columns at a fixed marker and
|
|
146
|
+
-- carries the envelope beside them. The event hash reads the envelope in the
|
|
147
|
+
-- place the metadata used to sit, so the hash of a sealed row is a function of
|
|
148
|
+
-- the stored bytes alone and stays verifiable after the key is destroyed.
|
|
149
|
+
ALTER TABLE audit_events ADD COLUMN IF NOT EXISTS subject_key_id TEXT;
|
|
150
|
+
ALTER TABLE audit_events ADD COLUMN IF NOT EXISTS sealed_payload TEXT;
|
|
151
|
+
ALTER TABLE audit_sweep_runs ADD COLUMN IF NOT EXISTS held_back BIGINT;
|
|
152
|
+
ALTER TABLE audit_events DROP CONSTRAINT IF EXISTS audit_events_subject_type_check;
|
|
153
|
+
DO $$
|
|
154
|
+
BEGIN
|
|
155
|
+
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'audit_events_subject_type_check') THEN
|
|
156
|
+
ALTER TABLE audit_events
|
|
157
|
+
ADD CONSTRAINT audit_events_subject_type_check
|
|
158
|
+
CHECK (subject_type IN ('data-class', 'sweep-run', 'export-run', 'legal-hold', 'erasure', 'chain-anchor'));
|
|
159
|
+
END IF;
|
|
160
|
+
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'audit_events_sealed_check') THEN
|
|
161
|
+
ALTER TABLE audit_events
|
|
162
|
+
ADD CONSTRAINT audit_events_sealed_check
|
|
163
|
+
CHECK ((subject_key_id IS NULL) = (sealed_payload IS NULL));
|
|
164
|
+
END IF;
|
|
165
|
+
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'audit_sweep_runs_held_back_check') THEN
|
|
166
|
+
ALTER TABLE audit_sweep_runs
|
|
167
|
+
ADD CONSTRAINT audit_sweep_runs_held_back_check
|
|
168
|
+
CHECK (held_back IS NULL OR held_back >= 0);
|
|
169
|
+
END IF;
|
|
170
|
+
END
|
|
171
|
+
$$;
|
|
172
|
+
-- The anchor rotation counts anchors per key across every workspace before it
|
|
173
|
+
-- knows whose they are, so it reads the routing columns alone on the background
|
|
174
|
+
-- role; every anchor it names is read and re-signed under the workspace the
|
|
175
|
+
-- routing row named. The hashes stay invisible to it.
|
|
176
|
+
DO $$
|
|
177
|
+
BEGIN
|
|
178
|
+
IF NOT EXISTS (SELECT 1 FROM pg_roles WHERE rolname = 'coreloom_background') THEN
|
|
179
|
+
RAISE EXCEPTION 'The coreloom_background role must exist before this migration.';
|
|
180
|
+
END IF;
|
|
181
|
+
END
|
|
182
|
+
$$;
|
|
183
|
+
CREATE POLICY audit_anchors_background_policy ON audit_anchors
|
|
184
|
+
FOR SELECT TO coreloom_background
|
|
185
|
+
USING (true);
|
|
186
|
+
REVOKE SELECT ON audit_anchors FROM coreloom_background;
|
|
187
|
+
GRANT SELECT (tenant_id, id, key_id) ON audit_anchors TO coreloom_background;
|
|
188
|
+
CREATE POLICY audit_erasure_runs_background_policy ON audit_erasure_runs
|
|
189
|
+
FOR SELECT TO coreloom_background
|
|
190
|
+
USING (true);
|
|
191
|
+
REVOKE SELECT ON audit_erasure_runs FROM coreloom_background;
|
|
192
|
+
GRANT SELECT (tenant_id, id, status, started_at) ON audit_erasure_runs TO coreloom_background;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
CREATE INDEX IF NOT EXISTS audit_data_classes_due_idx
|
|
2
|
+
ON audit_data_classes (sweepable, last_swept_at, tenant_id, class_id);
|
|
3
|
+
DROP INDEX IF EXISTS audit_data_classes_due_nulls_first_idx;
|
|
4
|
+
DROP INDEX IF EXISTS audit_anchors_key_id_idx;
|
|
5
|
+
DROP INDEX IF EXISTS audit_export_runs_tenant_id_idx;
|
|
6
|
+
DROP INDEX IF EXISTS audit_sweep_runs_tenant_id_idx;
|
|
7
|
+
DROP INDEX IF EXISTS audit_events_tenant_id_idx;
|
|
8
|
+
ALTER TABLE audit_subject_keys DROP CONSTRAINT IF EXISTS audit_subject_keys_marker_check;
|
|
9
|
+
ALTER TABLE audit_erasure_runs DROP CONSTRAINT IF EXISTS audit_erasure_runs_status_check;
|
|
10
|
+
-- A run recorded partial has no place in the constraint this restores, so the
|
|
11
|
+
-- reverse fails while one exists rather than rewriting the ledger.
|
|
12
|
+
ALTER TABLE audit_erasure_runs
|
|
13
|
+
ADD CONSTRAINT audit_erasure_runs_status_check
|
|
14
|
+
CHECK (status IN ('requested', 'completed', 'failed'));
|
|
15
|
+
DROP INDEX IF EXISTS audit_subject_keys_tenant_marker_idx;
|
|
16
|
+
ALTER TABLE audit_subject_keys DROP COLUMN IF EXISTS subject_marker;
|
|
17
|
+
ALTER TABLE audit_events DROP COLUMN IF EXISTS seal_format;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
-- The event format marker, the subject marker, a partial erasure run and the
|
|
2
|
+
-- indexes the ledger walks need.
|
|
3
|
+
--
|
|
4
|
+
-- seal_format names the writer of a row. A row without it was written before
|
|
5
|
+
-- audit.core recorded a format at all, which is exactly the set verify reports
|
|
6
|
+
-- as plaintext; a row that carries the marker and no sealed payload is an event
|
|
7
|
+
-- about nobody, not an unsealed person. Deriving that from sealed_payload alone
|
|
8
|
+
-- reported every platform event as pre-0.2.0.
|
|
9
|
+
ALTER TABLE audit_events ADD COLUMN IF NOT EXISTS seal_format TEXT;
|
|
10
|
+
|
|
11
|
+
-- The name a subject keeps once its key is gone. Destruction removes the
|
|
12
|
+
-- account the key belonged to, so without this column a destroyed key cannot be
|
|
13
|
+
-- found again and the next event naming that subject would create a new key and
|
|
14
|
+
-- put the account back in the clear. Active rows are named from the same hash
|
|
15
|
+
-- the certificate file already uses.
|
|
16
|
+
ALTER TABLE audit_subject_keys ADD COLUMN IF NOT EXISTS subject_marker TEXT;
|
|
17
|
+
UPDATE audit_subject_keys
|
|
18
|
+
SET subject_marker = substr(encode(sha256((tenant_id || ':' || subject)::bytea), 'hex'), 1, 12)
|
|
19
|
+
WHERE subject IS NOT NULL AND subject_marker IS NULL;
|
|
20
|
+
CREATE UNIQUE INDEX IF NOT EXISTS audit_subject_keys_tenant_marker_idx
|
|
21
|
+
ON audit_subject_keys (tenant_id, subject_marker)
|
|
22
|
+
WHERE subject_marker IS NOT NULL;
|
|
23
|
+
|
|
24
|
+
-- A run whose class was truncated or whose owner failed erased some of the
|
|
25
|
+
-- subject and not all of it. Recording that as completed would tell an operator
|
|
26
|
+
-- the subject is gone when a class still holds rows.
|
|
27
|
+
ALTER TABLE audit_erasure_runs DROP CONSTRAINT IF EXISTS audit_erasure_runs_status_check;
|
|
28
|
+
DO $$
|
|
29
|
+
BEGIN
|
|
30
|
+
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'audit_erasure_runs_status_check') THEN
|
|
31
|
+
ALTER TABLE audit_erasure_runs
|
|
32
|
+
ADD CONSTRAINT audit_erasure_runs_status_check
|
|
33
|
+
CHECK (status IN ('requested', 'completed', 'partial', 'failed'));
|
|
34
|
+
END IF;
|
|
35
|
+
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'audit_subject_keys_marker_check') THEN
|
|
36
|
+
ALTER TABLE audit_subject_keys
|
|
37
|
+
ADD CONSTRAINT audit_subject_keys_marker_check
|
|
38
|
+
CHECK (subject_marker IS NULL OR length(subject_marker) <= 32);
|
|
39
|
+
END IF;
|
|
40
|
+
END
|
|
41
|
+
$$;
|
|
42
|
+
|
|
43
|
+
-- The keyset walks the export takes over the three ledgers order by the primary
|
|
44
|
+
-- key inside one workspace, and the anchor rotation counts and pages anchors by
|
|
45
|
+
-- key. Without these each walk was a scan of every row of the table.
|
|
46
|
+
CREATE INDEX IF NOT EXISTS audit_events_tenant_id_idx
|
|
47
|
+
ON audit_events (tenant_id, id);
|
|
48
|
+
CREATE INDEX IF NOT EXISTS audit_sweep_runs_tenant_id_idx
|
|
49
|
+
ON audit_sweep_runs (tenant_id, id);
|
|
50
|
+
CREATE INDEX IF NOT EXISTS audit_export_runs_tenant_id_idx
|
|
51
|
+
ON audit_export_runs (tenant_id, id);
|
|
52
|
+
CREATE INDEX IF NOT EXISTS audit_anchors_key_id_idx
|
|
53
|
+
ON audit_anchors (key_id, id);
|
|
54
|
+
|
|
55
|
+
-- The routing read starts at the classes waiting longest, so it orders by
|
|
56
|
+
-- last_swept_at NULLS FIRST. The index migration 0001 created sorts nulls last,
|
|
57
|
+
-- which is the opposite end, so the walk sorted every due class on every pass.
|
|
58
|
+
CREATE INDEX IF NOT EXISTS audit_data_classes_due_nulls_first_idx
|
|
59
|
+
ON audit_data_classes (sweepable, last_swept_at NULLS FIRST, tenant_id, class_id);
|
|
60
|
+
DROP INDEX IF EXISTS audit_data_classes_due_idx;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
-- audit.core declares the rest of its own tenant tables as data classes, so the
|
|
2
|
+
-- legal holds and the erasure history are exported through the same keyset walk
|
|
3
|
+
-- as the chain and the two ledgers, and an erasure plan counts the holds that
|
|
4
|
+
-- name the subject. Each of those reads orders inside one workspace by the
|
|
5
|
+
-- primary key or filters by the account a hold covers; without these indexes
|
|
6
|
+
-- every page would be a pass over the workspace's rows.
|
|
7
|
+
CREATE INDEX IF NOT EXISTS audit_legal_holds_tenant_id_idx
|
|
8
|
+
ON audit_legal_holds (tenant_id, id);
|
|
9
|
+
CREATE INDEX IF NOT EXISTS audit_erasure_runs_tenant_id_idx
|
|
10
|
+
ON audit_erasure_runs (tenant_id, id);
|
|
11
|
+
-- Partial, because a hold that names no account is never counted for a subject.
|
|
12
|
+
CREATE INDEX IF NOT EXISTS audit_legal_holds_tenant_account_idx
|
|
13
|
+
ON audit_legal_holds (tenant_id, account_id)
|
|
14
|
+
WHERE account_id IS NOT NULL;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "../../packages/contracts/schemas/module.schema.json",
|
|
3
|
+
"schemaVersion": 1,
|
|
4
|
+
"id": "audit.core",
|
|
5
|
+
"package": "@flowdular/module-audit",
|
|
6
|
+
"version": "0.2.8",
|
|
7
|
+
"platformApi": "^0.1.0",
|
|
8
|
+
"profile": "full",
|
|
9
|
+
"capabilities": ["api", "database", "client", "translations", "cli"],
|
|
10
|
+
"platform": {
|
|
11
|
+
"server": true,
|
|
12
|
+
"client": true
|
|
13
|
+
},
|
|
14
|
+
"dependencies": [
|
|
15
|
+
{
|
|
16
|
+
"id": "system.core",
|
|
17
|
+
"range": "^0.7.0"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"id": "auth.core",
|
|
21
|
+
"range": "^0.13.0"
|
|
22
|
+
}
|
|
23
|
+
],
|
|
24
|
+
"provides": ["audit.erasure.v1"],
|
|
25
|
+
"tenancy": "required",
|
|
26
|
+
"locales": ["en", "pl"],
|
|
27
|
+
"stability": "experimental",
|
|
28
|
+
"cli": {
|
|
29
|
+
"catalog": "src/cli/commands.json",
|
|
30
|
+
"entry": "src/cli/index.ts"
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@flowdular/module-audit",
|
|
3
|
+
"version": "0.2.8",
|
|
4
|
+
"private": true,
|
|
5
|
+
"type": "module",
|
|
6
|
+
"exports": {
|
|
7
|
+
".": "./src/index.ts",
|
|
8
|
+
"./client": "./src/client/index.ts",
|
|
9
|
+
"./server": "./src/server/index.ts",
|
|
10
|
+
"./platform": "./src/platform.ts",
|
|
11
|
+
"./module.json": "./module.json"
|
|
12
|
+
},
|
|
13
|
+
"files": [
|
|
14
|
+
"src",
|
|
15
|
+
"schemas",
|
|
16
|
+
"dist",
|
|
17
|
+
"bin",
|
|
18
|
+
"public",
|
|
19
|
+
"module.json",
|
|
20
|
+
"migrations",
|
|
21
|
+
"translations",
|
|
22
|
+
"spec",
|
|
23
|
+
"README.md",
|
|
24
|
+
"LICENSE"
|
|
25
|
+
],
|
|
26
|
+
"scripts": {
|
|
27
|
+
"typecheck": "tsrx-tsc --noEmit -p tsconfig.json",
|
|
28
|
+
"test": "vitest run"
|
|
29
|
+
},
|
|
30
|
+
"dependencies": {
|
|
31
|
+
"@flowdular/cli-protocol": "workspace:*",
|
|
32
|
+
"@flowdular/client": "workspace:*",
|
|
33
|
+
"@flowdular/contracts": "workspace:*",
|
|
34
|
+
"@flowdular/database": "workspace:*",
|
|
35
|
+
"@flowdular/kernel": "workspace:*",
|
|
36
|
+
"@flowdular/module-auth": "workspace:*",
|
|
37
|
+
"@flowdular/server": "workspace:*",
|
|
38
|
+
"@flowdular/ui": "workspace:*",
|
|
39
|
+
"octane": "0.1.51",
|
|
40
|
+
"segment-state": "0.2.1"
|
|
41
|
+
},
|
|
42
|
+
"devDependencies": {
|
|
43
|
+
"@flowdular/database-testing": "workspace:*",
|
|
44
|
+
"@tsrx/typescript-plugin": "0.3.120",
|
|
45
|
+
"@types/node": "24.13.3",
|
|
46
|
+
"typescript": "5.9.3",
|
|
47
|
+
"vitest": "4.1.11"
|
|
48
|
+
}
|
|
49
|
+
}
|