@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,311 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
DataClassExportSink,
|
|
3
|
+
DataClassExportSummary,
|
|
4
|
+
} from '@flowdular/sdk/kernel';
|
|
5
|
+
import type { AuthActor } from '@flowdular/sdk/modules/auth';
|
|
6
|
+
import { AuthServiceError } from '@flowdular/sdk/modules/auth/server';
|
|
7
|
+
import type {
|
|
8
|
+
GroupListQuery,
|
|
9
|
+
ListPage,
|
|
10
|
+
ProvisioningEvent,
|
|
11
|
+
ProvisioningEventQuery,
|
|
12
|
+
ScimGroupMapping,
|
|
13
|
+
} from '../domain/types.ts';
|
|
14
|
+
import type { DirectoryAuthPort } from './auth-port.ts';
|
|
15
|
+
import { DirectoryUniqueViolation } from './database-repository.ts';
|
|
16
|
+
import type { DirectoryRepository } from './repository.ts';
|
|
17
|
+
import { bounded, DirectoryServiceError } from './service-error.ts';
|
|
18
|
+
import { MAX_LIST_PAGE } from './token-service.ts';
|
|
19
|
+
|
|
20
|
+
/** Rows one export query holds, so a long history costs bounded memory. */
|
|
21
|
+
export const EXPORT_PAGE = 500;
|
|
22
|
+
|
|
23
|
+
/** Rows one sweep call may remove, whatever limit the caller asks for. */
|
|
24
|
+
export const MAX_SWEEP_BATCH = 100_000;
|
|
25
|
+
|
|
26
|
+
/** What the mapping form needs beside the rows: read once, not per page. */
|
|
27
|
+
export interface GroupMappingContext {
|
|
28
|
+
/** The workspace roles a mapping may point at, for the screen's select. */
|
|
29
|
+
readonly roles: readonly string[];
|
|
30
|
+
readonly defaultRole: string;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export interface MapGroupInput {
|
|
34
|
+
readonly id: string;
|
|
35
|
+
/** Empty clears the mapping: the group is tracked but grants nothing. */
|
|
36
|
+
readonly roleKey: string | null;
|
|
37
|
+
readonly precedence: number;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* The administration side of directory.core: what an owner reads and changes in
|
|
42
|
+
* the workspace screens. SCIM operations live in `ScimProvisioningService`.
|
|
43
|
+
*/
|
|
44
|
+
export class DirectoryAdministrationService {
|
|
45
|
+
constructor(
|
|
46
|
+
private readonly repository: DirectoryRepository,
|
|
47
|
+
private readonly auth: DirectoryAuthPort,
|
|
48
|
+
private readonly now: () => number = Date.now,
|
|
49
|
+
) {}
|
|
50
|
+
|
|
51
|
+
listGroupMappings(
|
|
52
|
+
tenantId: string,
|
|
53
|
+
query: GroupListQuery,
|
|
54
|
+
): Promise<ListPage<ScimGroupMapping>> {
|
|
55
|
+
return this.repository.listGroupPage(tenantId, {
|
|
56
|
+
...query,
|
|
57
|
+
limit: Math.min(Math.max(query.limit, 1), MAX_LIST_PAGE),
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
async groupMappingContext(
|
|
62
|
+
tenantId: string,
|
|
63
|
+
defaultRole: string,
|
|
64
|
+
): Promise<GroupMappingContext> {
|
|
65
|
+
return { roles: await this.auth.listRoleKeys(tenantId), defaultRole };
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Sets or clears the role of one group and re-derives the role of every
|
|
70
|
+
* member it affects. A refusal from auth.core, such as the last owner rule,
|
|
71
|
+
* puts the mapping and every role already changed back.
|
|
72
|
+
*/
|
|
73
|
+
async mapGroup(
|
|
74
|
+
actor: AuthActor,
|
|
75
|
+
input: MapGroupInput,
|
|
76
|
+
defaultRole: string,
|
|
77
|
+
): Promise<ScimGroupMapping> {
|
|
78
|
+
const tenantId = actor.tenantId;
|
|
79
|
+
const group = await this.repository.findGroupById(
|
|
80
|
+
tenantId,
|
|
81
|
+
bounded(input.id, 'id', 1, 128),
|
|
82
|
+
);
|
|
83
|
+
if (!group) {
|
|
84
|
+
throw new DirectoryServiceError(
|
|
85
|
+
'GROUP_NOT_FOUND',
|
|
86
|
+
'The group does not exist in this workspace.',
|
|
87
|
+
404,
|
|
88
|
+
);
|
|
89
|
+
}
|
|
90
|
+
const roleKey =
|
|
91
|
+
input.roleKey === null || input.roleKey.trim() === ''
|
|
92
|
+
? null
|
|
93
|
+
: bounded(input.roleKey, 'roleKey', 2, 64);
|
|
94
|
+
const roles = new Set(await this.auth.listRoleKeys(tenantId));
|
|
95
|
+
if (roleKey !== null && !roles.has(roleKey)) {
|
|
96
|
+
throw new DirectoryServiceError(
|
|
97
|
+
'ROLE_UNKNOWN',
|
|
98
|
+
'The role does not exist in this workspace.',
|
|
99
|
+
);
|
|
100
|
+
}
|
|
101
|
+
if (
|
|
102
|
+
!Number.isSafeInteger(input.precedence) ||
|
|
103
|
+
input.precedence < 0 ||
|
|
104
|
+
input.precedence > 10_000
|
|
105
|
+
) {
|
|
106
|
+
throw new DirectoryServiceError(
|
|
107
|
+
'INVALID_INPUT',
|
|
108
|
+
'precedence must be an integer between 0 and 10000.',
|
|
109
|
+
);
|
|
110
|
+
}
|
|
111
|
+
if (roleKey === group.roleKey && input.precedence === group.precedence) {
|
|
112
|
+
return group;
|
|
113
|
+
}
|
|
114
|
+
await this.#write(tenantId, group, roleKey, input.precedence);
|
|
115
|
+
try {
|
|
116
|
+
await this.#recalculate(actor, group.id, roles, defaultRole);
|
|
117
|
+
} catch (error) {
|
|
118
|
+
await this.#write(tenantId, group, group.roleKey, group.precedence).catch(
|
|
119
|
+
() => undefined,
|
|
120
|
+
);
|
|
121
|
+
throw error;
|
|
122
|
+
}
|
|
123
|
+
return (await this.repository.findGroupById(tenantId, group.id)) ?? group;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
listEvents(
|
|
127
|
+
tenantId: string,
|
|
128
|
+
query: ProvisioningEventQuery,
|
|
129
|
+
): Promise<readonly ProvisioningEvent[]> {
|
|
130
|
+
return this.repository.listEvents(tenantId, {
|
|
131
|
+
...query,
|
|
132
|
+
limit: Math.min(Math.max(query.limit, 1), MAX_LIST_PAGE),
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* The retention sweep of `directory.core.provisioning-events`. Events that
|
|
138
|
+
* occurred strictly before the cutoff go, at most `limit` of them, so one
|
|
139
|
+
* pass is bounded however long the workspace has been provisioning.
|
|
140
|
+
*/
|
|
141
|
+
sweepEvents(
|
|
142
|
+
tenantId: string,
|
|
143
|
+
cutoff: Date,
|
|
144
|
+
limit: number,
|
|
145
|
+
): Promise<{ readonly removed: number }> {
|
|
146
|
+
return this.repository.sweepEvents(
|
|
147
|
+
bounded(tenantId, 'tenantId', 1, 128),
|
|
148
|
+
cutoff.getTime(),
|
|
149
|
+
Math.min(Math.max(Math.trunc(limit), 1), MAX_SWEEP_BATCH),
|
|
150
|
+
);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Every provisioning event of one workspace, walked by the storage sequence
|
|
155
|
+
* so no page holds more than `pageSize` rows whatever the history is.
|
|
156
|
+
*/
|
|
157
|
+
async exportEvents(
|
|
158
|
+
tenantId: string,
|
|
159
|
+
sink: DataClassExportSink,
|
|
160
|
+
pageSize = EXPORT_PAGE,
|
|
161
|
+
): Promise<DataClassExportSummary> {
|
|
162
|
+
const owner = bounded(tenantId, 'tenantId', 1, 128);
|
|
163
|
+
let afterSequence = 0;
|
|
164
|
+
let rows = 0;
|
|
165
|
+
let from: number | null = null;
|
|
166
|
+
let to: number | null = null;
|
|
167
|
+
for (;;) {
|
|
168
|
+
const page = await this.repository.exportEventsPage(
|
|
169
|
+
owner,
|
|
170
|
+
afterSequence,
|
|
171
|
+
pageSize,
|
|
172
|
+
);
|
|
173
|
+
for (const event of page) {
|
|
174
|
+
await sink.write({
|
|
175
|
+
id: event.id,
|
|
176
|
+
sequence: event.sequence,
|
|
177
|
+
tokenId: event.tokenId,
|
|
178
|
+
operation: event.operation,
|
|
179
|
+
subject: event.subject,
|
|
180
|
+
outcome: event.outcome,
|
|
181
|
+
reason: event.reason,
|
|
182
|
+
occurredAt: new Date(event.occurredAt).toISOString(),
|
|
183
|
+
});
|
|
184
|
+
rows += 1;
|
|
185
|
+
if (from === null || event.occurredAt < from) from = event.occurredAt;
|
|
186
|
+
if (to === null || event.occurredAt > to) to = event.occurredAt;
|
|
187
|
+
}
|
|
188
|
+
if (page.length < pageSize) break;
|
|
189
|
+
afterSequence = page[page.length - 1]!.sequence;
|
|
190
|
+
}
|
|
191
|
+
return {
|
|
192
|
+
rows,
|
|
193
|
+
from: from === null ? null : new Date(from),
|
|
194
|
+
to: to === null ? null : new Date(to),
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
async #write(
|
|
199
|
+
tenantId: string,
|
|
200
|
+
group: ScimGroupMapping,
|
|
201
|
+
roleKey: string | null,
|
|
202
|
+
precedence: number,
|
|
203
|
+
): Promise<void> {
|
|
204
|
+
try {
|
|
205
|
+
await this.repository.updateGroup({
|
|
206
|
+
tenantId,
|
|
207
|
+
id: group.id,
|
|
208
|
+
externalId: group.externalId,
|
|
209
|
+
displayName: group.displayName,
|
|
210
|
+
roleKey,
|
|
211
|
+
precedence,
|
|
212
|
+
updatedAt: this.now(),
|
|
213
|
+
});
|
|
214
|
+
} catch (error) {
|
|
215
|
+
if (error instanceof DirectoryUniqueViolation) {
|
|
216
|
+
throw new DirectoryServiceError(
|
|
217
|
+
'GROUP_EXISTS',
|
|
218
|
+
'A group with this name already exists in the workspace.',
|
|
219
|
+
409,
|
|
220
|
+
);
|
|
221
|
+
}
|
|
222
|
+
throw error;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
/* One query resolves the winning role of every member of the group, so the
|
|
227
|
+
pass costs one read plus one write per member whose role actually moves. */
|
|
228
|
+
async #recalculate(
|
|
229
|
+
actor: AuthActor,
|
|
230
|
+
groupId: string,
|
|
231
|
+
roles: ReadonlySet<string>,
|
|
232
|
+
defaultRole: string,
|
|
233
|
+
): Promise<void> {
|
|
234
|
+
const members = await this.repository.resolvedRolesForGroup(
|
|
235
|
+
actor.tenantId,
|
|
236
|
+
groupId,
|
|
237
|
+
);
|
|
238
|
+
if (members.length === 0) return;
|
|
239
|
+
/* A disabled membership holds no role anyone can act on, and auth.core
|
|
240
|
+
counts it out of the owner tally, so recomputing it would refuse a
|
|
241
|
+
change the workspace can make. */
|
|
242
|
+
const held = new Map(
|
|
243
|
+
(await this.auth.listMembers(actor.tenantId))
|
|
244
|
+
.filter((member) => member.membershipStatus === 'active')
|
|
245
|
+
.map((member) => [member.accountId, member.role]),
|
|
246
|
+
);
|
|
247
|
+
const applied: { accountId: string; previous: string }[] = [];
|
|
248
|
+
try {
|
|
249
|
+
for (const member of members) {
|
|
250
|
+
const target = member.roleKey ?? defaultRole;
|
|
251
|
+
if (!roles.has(target)) {
|
|
252
|
+
throw new DirectoryServiceError(
|
|
253
|
+
'ROLE_UNKNOWN',
|
|
254
|
+
`The role "${target}" does not exist in this workspace.`,
|
|
255
|
+
);
|
|
256
|
+
}
|
|
257
|
+
const current = held.get(member.accountId);
|
|
258
|
+
if (current === undefined || current === target) continue;
|
|
259
|
+
await this.auth.assignRole(actor, member.accountId, target);
|
|
260
|
+
applied.push({ accountId: member.accountId, previous: current });
|
|
261
|
+
}
|
|
262
|
+
} catch (error) {
|
|
263
|
+
for (const change of applied.reverse()) {
|
|
264
|
+
await this.auth
|
|
265
|
+
.assignRole(actor, change.accountId, change.previous)
|
|
266
|
+
.catch(() => undefined);
|
|
267
|
+
}
|
|
268
|
+
throw translateAuthError(error);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
/**
|
|
274
|
+
* Every auth.core refusal this module reports, and the code it reports it as.
|
|
275
|
+
* The set is closed: a screen translates the codes listed here, and a code
|
|
276
|
+
* auth.core adds later must not reach a reader as untranslated server text.
|
|
277
|
+
*/
|
|
278
|
+
const AUTH_REFUSALS: Readonly<
|
|
279
|
+
Record<string, readonly [code: string, message: string, status: number]>
|
|
280
|
+
> = {
|
|
281
|
+
LAST_OWNER: [
|
|
282
|
+
'LAST_OWNER',
|
|
283
|
+
'A workspace must keep at least one active owner.',
|
|
284
|
+
409,
|
|
285
|
+
],
|
|
286
|
+
ROLE_NOT_FOUND: [
|
|
287
|
+
'ROLE_UNKNOWN',
|
|
288
|
+
'The role does not exist in this workspace.',
|
|
289
|
+
400,
|
|
290
|
+
],
|
|
291
|
+
ACCOUNT_NOT_FOUND: [
|
|
292
|
+
'MEMBER_NOT_FOUND',
|
|
293
|
+
'The account is no longer a member of this workspace.',
|
|
294
|
+
404,
|
|
295
|
+
],
|
|
296
|
+
};
|
|
297
|
+
|
|
298
|
+
/** auth.core refusals reach the screen as this module's own stable codes. */
|
|
299
|
+
export function translateAuthError(error: unknown): unknown {
|
|
300
|
+
if (!(error instanceof AuthServiceError)) return error;
|
|
301
|
+
/* A fault of auth.core stays a fault: answering it as a refusal would tell
|
|
302
|
+
the reader their change was rejected when nothing decided it. */
|
|
303
|
+
if (error.status >= 500) return error;
|
|
304
|
+
const known = AUTH_REFUSALS[error.code];
|
|
305
|
+
if (known) return new DirectoryServiceError(known[0], known[1], known[2]);
|
|
306
|
+
return new DirectoryServiceError(
|
|
307
|
+
'DIRECTORY_REFUSED',
|
|
308
|
+
'The workspace directory refused the change.',
|
|
309
|
+
error.status,
|
|
310
|
+
);
|
|
311
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
export {
|
|
2
|
+
authPortFromRuntime,
|
|
3
|
+
scimActor,
|
|
4
|
+
type DirectoryAuthPort,
|
|
5
|
+
} from './auth-port.ts';
|
|
6
|
+
export {
|
|
7
|
+
DatabaseDirectoryRepository,
|
|
8
|
+
DirectoryUniqueViolation,
|
|
9
|
+
DIRECTORY_UNIQUE_INDEXES,
|
|
10
|
+
migrateDirectoryDatabase,
|
|
11
|
+
} from './database-repository.ts';
|
|
12
|
+
export {
|
|
13
|
+
DirectoryAdministrationService,
|
|
14
|
+
translateAuthError,
|
|
15
|
+
type GroupMappingContext,
|
|
16
|
+
type MapGroupInput,
|
|
17
|
+
} from './directory-service.ts';
|
|
18
|
+
export {
|
|
19
|
+
ScimProvisioningService,
|
|
20
|
+
type ScimRequestContext,
|
|
21
|
+
} from './provisioning-service.ts';
|
|
22
|
+
export { ScimRateLimiter } from './rate-limiter.ts';
|
|
23
|
+
export type {
|
|
24
|
+
DirectoryRepository,
|
|
25
|
+
GroupMemberChange,
|
|
26
|
+
GroupMemberRow,
|
|
27
|
+
GroupMemberStep,
|
|
28
|
+
ResolvedGroupMember,
|
|
29
|
+
ScimGroupFilter,
|
|
30
|
+
ScimPageRequest,
|
|
31
|
+
ScimSlice,
|
|
32
|
+
ScimTokenSecret,
|
|
33
|
+
ScimUserFilter,
|
|
34
|
+
} from './repository.ts';
|
|
35
|
+
export { bounded, DirectoryServiceError } from './service-error.ts';
|
|
36
|
+
export {
|
|
37
|
+
hashScimToken,
|
|
38
|
+
MAX_LIST_PAGE,
|
|
39
|
+
ScimTokenService,
|
|
40
|
+
scimTokenFingerprint,
|
|
41
|
+
SCIM_TOKEN_PREFIX,
|
|
42
|
+
type CreateScimTokenInput,
|
|
43
|
+
} from './token-service.ts';
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import type { DatabaseMigration } from '@flowdular/sdk/database';
|
|
2
|
+
import { postgresTenantTableState } from '@flowdular/sdk/database';
|
|
3
|
+
|
|
4
|
+
/** Every tenant table the module owns, in creation order. */
|
|
5
|
+
export const DIRECTORY_TENANT_TABLES = [
|
|
6
|
+
'directory_scim_tokens',
|
|
7
|
+
'directory_scim_users',
|
|
8
|
+
'directory_scim_groups',
|
|
9
|
+
'directory_scim_group_members',
|
|
10
|
+
'directory_provisioning_events',
|
|
11
|
+
] as const;
|
|
12
|
+
|
|
13
|
+
/* Mirrors migrations/0001_directory_core.up.sql byte for byte. */
|
|
14
|
+
export const DIRECTORY_MIGRATION_001 = `CREATE TABLE IF NOT EXISTS directory_scim_tokens (
|
|
15
|
+
id TEXT PRIMARY KEY,
|
|
16
|
+
tenant_id TEXT NOT NULL,
|
|
17
|
+
label TEXT NOT NULL,
|
|
18
|
+
token_fingerprint TEXT NOT NULL,
|
|
19
|
+
token_hash TEXT NOT NULL,
|
|
20
|
+
status TEXT NOT NULL CHECK (status IN ('active', 'revoked')),
|
|
21
|
+
created_by TEXT NOT NULL,
|
|
22
|
+
created_at BIGINT NOT NULL,
|
|
23
|
+
last_used_at BIGINT,
|
|
24
|
+
expires_at BIGINT,
|
|
25
|
+
revoked_at BIGINT
|
|
26
|
+
);
|
|
27
|
+
-- Case folded like the group name below: two labels an owner cannot tell apart
|
|
28
|
+
-- in the list must not be two credentials.
|
|
29
|
+
CREATE UNIQUE INDEX IF NOT EXISTS directory_scim_tokens_label_idx
|
|
30
|
+
ON directory_scim_tokens (tenant_id, lower(label));
|
|
31
|
+
-- Authentication reads one row by this derived prefix and then compares the
|
|
32
|
+
-- full hash in constant time, so an unknown credential costs the same lookup.
|
|
33
|
+
CREATE UNIQUE INDEX IF NOT EXISTS directory_scim_tokens_fingerprint_idx
|
|
34
|
+
ON directory_scim_tokens (tenant_id, token_fingerprint);
|
|
35
|
+
ALTER TABLE directory_scim_tokens ENABLE ROW LEVEL SECURITY;
|
|
36
|
+
ALTER TABLE directory_scim_tokens FORCE ROW LEVEL SECURITY;
|
|
37
|
+
CREATE POLICY directory_scim_tokens_tenant_policy ON directory_scim_tokens
|
|
38
|
+
USING (tenant_id = current_setting('coreloom.tenant_id', true))
|
|
39
|
+
WITH CHECK (tenant_id = current_setting('coreloom.tenant_id', true));
|
|
40
|
+
|
|
41
|
+
CREATE TABLE IF NOT EXISTS directory_scim_users (
|
|
42
|
+
id TEXT PRIMARY KEY,
|
|
43
|
+
tenant_id TEXT NOT NULL,
|
|
44
|
+
external_id TEXT,
|
|
45
|
+
user_name TEXT NOT NULL,
|
|
46
|
+
account_id TEXT NOT NULL,
|
|
47
|
+
active SMALLINT NOT NULL CHECK (active IN (0, 1)),
|
|
48
|
+
created_at BIGINT NOT NULL,
|
|
49
|
+
last_synced_at BIGINT NOT NULL
|
|
50
|
+
);
|
|
51
|
+
-- One provider identity per workspace, and one mapping per account: both are
|
|
52
|
+
-- what makes a repeated create idempotent instead of a second membership.
|
|
53
|
+
CREATE UNIQUE INDEX IF NOT EXISTS directory_scim_users_user_name_idx
|
|
54
|
+
ON directory_scim_users (tenant_id, user_name);
|
|
55
|
+
CREATE UNIQUE INDEX IF NOT EXISTS directory_scim_users_account_idx
|
|
56
|
+
ON directory_scim_users (tenant_id, account_id);
|
|
57
|
+
CREATE INDEX IF NOT EXISTS directory_scim_users_external_idx
|
|
58
|
+
ON directory_scim_users (tenant_id, external_id);
|
|
59
|
+
ALTER TABLE directory_scim_users ENABLE ROW LEVEL SECURITY;
|
|
60
|
+
ALTER TABLE directory_scim_users FORCE ROW LEVEL SECURITY;
|
|
61
|
+
CREATE POLICY directory_scim_users_tenant_policy ON directory_scim_users
|
|
62
|
+
USING (tenant_id = current_setting('coreloom.tenant_id', true))
|
|
63
|
+
WITH CHECK (tenant_id = current_setting('coreloom.tenant_id', true));
|
|
64
|
+
|
|
65
|
+
CREATE TABLE IF NOT EXISTS directory_scim_groups (
|
|
66
|
+
id TEXT PRIMARY KEY,
|
|
67
|
+
tenant_id TEXT NOT NULL,
|
|
68
|
+
external_id TEXT,
|
|
69
|
+
display_name TEXT NOT NULL,
|
|
70
|
+
role_key TEXT,
|
|
71
|
+
precedence INTEGER NOT NULL,
|
|
72
|
+
created_at BIGINT NOT NULL,
|
|
73
|
+
updated_at BIGINT NOT NULL
|
|
74
|
+
);
|
|
75
|
+
-- displayName is a caseExact=false attribute, so the uniqueness the provider
|
|
76
|
+
-- sees and the index that enforces it have to fold case the same way.
|
|
77
|
+
CREATE UNIQUE INDEX IF NOT EXISTS directory_scim_groups_display_name_idx
|
|
78
|
+
ON directory_scim_groups (tenant_id, lower(display_name));
|
|
79
|
+
-- Role resolution walks the mapped groups of one user in precedence order.
|
|
80
|
+
CREATE INDEX IF NOT EXISTS directory_scim_groups_precedence_idx
|
|
81
|
+
ON directory_scim_groups (tenant_id, precedence, id);
|
|
82
|
+
ALTER TABLE directory_scim_groups ENABLE ROW LEVEL SECURITY;
|
|
83
|
+
ALTER TABLE directory_scim_groups FORCE ROW LEVEL SECURITY;
|
|
84
|
+
CREATE POLICY directory_scim_groups_tenant_policy ON directory_scim_groups
|
|
85
|
+
USING (tenant_id = current_setting('coreloom.tenant_id', true))
|
|
86
|
+
WITH CHECK (tenant_id = current_setting('coreloom.tenant_id', true));
|
|
87
|
+
|
|
88
|
+
CREATE TABLE IF NOT EXISTS directory_scim_group_members (
|
|
89
|
+
tenant_id TEXT NOT NULL,
|
|
90
|
+
group_id TEXT NOT NULL REFERENCES directory_scim_groups(id) ON DELETE CASCADE,
|
|
91
|
+
user_id TEXT NOT NULL REFERENCES directory_scim_users(id) ON DELETE CASCADE,
|
|
92
|
+
added_at BIGINT NOT NULL,
|
|
93
|
+
PRIMARY KEY (tenant_id, group_id, user_id)
|
|
94
|
+
);
|
|
95
|
+
CREATE INDEX IF NOT EXISTS directory_scim_group_members_user_idx
|
|
96
|
+
ON directory_scim_group_members (tenant_id, user_id);
|
|
97
|
+
ALTER TABLE directory_scim_group_members ENABLE ROW LEVEL SECURITY;
|
|
98
|
+
ALTER TABLE directory_scim_group_members FORCE ROW LEVEL SECURITY;
|
|
99
|
+
CREATE POLICY directory_scim_group_members_tenant_policy ON directory_scim_group_members
|
|
100
|
+
USING (tenant_id = current_setting('coreloom.tenant_id', true))
|
|
101
|
+
WITH CHECK (tenant_id = current_setting('coreloom.tenant_id', true));
|
|
102
|
+
|
|
103
|
+
-- Evidence outlives the credential, so the token id is recorded without a
|
|
104
|
+
-- foreign key: revoking or pruning a token never removes its trail.
|
|
105
|
+
CREATE TABLE IF NOT EXISTS directory_provisioning_events (
|
|
106
|
+
id TEXT PRIMARY KEY,
|
|
107
|
+
-- Two operations of one request land in the same millisecond, so the order
|
|
108
|
+
-- the log is read in comes from storage rather than from the clock.
|
|
109
|
+
sequence BIGINT GENERATED BY DEFAULT AS IDENTITY,
|
|
110
|
+
tenant_id TEXT NOT NULL,
|
|
111
|
+
token_id TEXT NOT NULL,
|
|
112
|
+
operation TEXT NOT NULL CHECK (operation IN ('user-create', 'user-update', 'user-deactivate', 'user-reactivate', 'group-create', 'group-update', 'group-delete', 'membership-change')),
|
|
113
|
+
subject TEXT NOT NULL,
|
|
114
|
+
outcome TEXT NOT NULL CHECK (outcome IN ('applied', 'unchanged', 'refused')),
|
|
115
|
+
reason TEXT,
|
|
116
|
+
occurred_at BIGINT NOT NULL
|
|
117
|
+
);
|
|
118
|
+
CREATE INDEX IF NOT EXISTS directory_provisioning_events_time_idx
|
|
119
|
+
ON directory_provisioning_events (tenant_id, occurred_at DESC, sequence DESC);
|
|
120
|
+
ALTER TABLE directory_provisioning_events ENABLE ROW LEVEL SECURITY;
|
|
121
|
+
ALTER TABLE directory_provisioning_events FORCE ROW LEVEL SECURITY;
|
|
122
|
+
CREATE POLICY directory_provisioning_events_tenant_policy ON directory_provisioning_events
|
|
123
|
+
USING (tenant_id = current_setting('coreloom.tenant_id', true))
|
|
124
|
+
WITH CHECK (tenant_id = current_setting('coreloom.tenant_id', true));
|
|
125
|
+
`;
|
|
126
|
+
|
|
127
|
+
export const databaseMigrations: readonly DatabaseMigration[] = [
|
|
128
|
+
{
|
|
129
|
+
id: '0001_directory_core',
|
|
130
|
+
sql: { postgresql: DIRECTORY_MIGRATION_001 },
|
|
131
|
+
inspectExisting: (database) =>
|
|
132
|
+
postgresTenantTableState(
|
|
133
|
+
database,
|
|
134
|
+
'directory_scim_tokens',
|
|
135
|
+
'directory_scim_tokens_tenant_policy',
|
|
136
|
+
[
|
|
137
|
+
() => database.schema.hasTable('directory_scim_users'),
|
|
138
|
+
() => database.schema.hasTable('directory_scim_groups'),
|
|
139
|
+
() => database.schema.hasTable('directory_scim_group_members'),
|
|
140
|
+
() => database.schema.hasTable('directory_provisioning_events'),
|
|
141
|
+
() =>
|
|
142
|
+
database.schema.hasIndex('directory_scim_tokens_fingerprint_idx'),
|
|
143
|
+
],
|
|
144
|
+
),
|
|
145
|
+
},
|
|
146
|
+
];
|