@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
|
@@ -2,6 +2,7 @@ import type {
|
|
|
2
2
|
ActorKind,
|
|
3
3
|
ModuleSettingRecord,
|
|
4
4
|
ModuleSettingValue,
|
|
5
|
+
UserActor,
|
|
5
6
|
} from '@flowdular/sdk/kernel';
|
|
6
7
|
import type {
|
|
7
8
|
ApiTokenRecord,
|
|
@@ -9,9 +10,12 @@ import type {
|
|
|
9
10
|
AuditQuery,
|
|
10
11
|
AuthSession,
|
|
11
12
|
AuthTenantAccess,
|
|
13
|
+
IdentityProviderStatus,
|
|
14
|
+
MembershipStatus,
|
|
12
15
|
SessionSummary,
|
|
13
16
|
TenantRole,
|
|
14
17
|
} from '../domain/types.ts';
|
|
18
|
+
import type { SealedMfaSecret } from './totp.ts';
|
|
15
19
|
|
|
16
20
|
export interface AccountCredential {
|
|
17
21
|
readonly accountId: string;
|
|
@@ -21,11 +25,22 @@ export interface AccountCredential {
|
|
|
21
25
|
readonly passwordHash: string;
|
|
22
26
|
readonly role: string;
|
|
23
27
|
readonly roleId: string | null;
|
|
28
|
+
/** The account's platform-level status, set by the deployment operator. */
|
|
24
29
|
readonly status: 'active' | 'disabled';
|
|
30
|
+
/** This workspace's own status for the account. */
|
|
31
|
+
readonly membershipStatus: MembershipStatus;
|
|
25
32
|
readonly passwordChangeRequired: boolean;
|
|
26
33
|
readonly scopes: readonly string[];
|
|
27
34
|
}
|
|
28
35
|
|
|
36
|
+
/** One account, before any workspace is chosen. */
|
|
37
|
+
export interface AccountIdentity {
|
|
38
|
+
readonly accountId: string;
|
|
39
|
+
readonly email: string;
|
|
40
|
+
readonly displayName: string;
|
|
41
|
+
readonly status: 'active' | 'disabled';
|
|
42
|
+
}
|
|
43
|
+
|
|
29
44
|
export interface CreateAccountRecord {
|
|
30
45
|
readonly accountId: string;
|
|
31
46
|
readonly tenantId: string;
|
|
@@ -77,6 +92,66 @@ export interface MfaChallengeRecord {
|
|
|
77
92
|
readonly createdAt: number;
|
|
78
93
|
}
|
|
79
94
|
|
|
95
|
+
/* The identity an external provider asserts. The pair is what the provider
|
|
96
|
+
promises to keep stable; the address it reports may change at any time. A
|
|
97
|
+
tenant-owned provider asserts it inside one workspace, which the row names;
|
|
98
|
+
a platform provider carries none, as it always has. */
|
|
99
|
+
export interface ExternalIdentityRecord {
|
|
100
|
+
readonly provider: string;
|
|
101
|
+
readonly subject: string;
|
|
102
|
+
readonly accountId: string;
|
|
103
|
+
readonly tenantId?: string | null;
|
|
104
|
+
readonly now: number;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* One binding as a reader sees it: the account it signs in, the provider key
|
|
109
|
+
* that asserted it, the subject that provider promises to keep stable, and
|
|
110
|
+
* when the binding was first recorded. No secret, ciphertext or fingerprint is
|
|
111
|
+
* part of it, and neither is the address the provider reported.
|
|
112
|
+
*/
|
|
113
|
+
export interface ExternalIdentityBinding {
|
|
114
|
+
readonly accountId: string;
|
|
115
|
+
readonly provider: string;
|
|
116
|
+
readonly subject: string;
|
|
117
|
+
readonly linkedAt: number;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
export interface ExternalIdentityPage {
|
|
121
|
+
readonly identities: readonly ExternalIdentityBinding[];
|
|
122
|
+
/** `${provider}:${subject}` of the last binding of this page. */
|
|
123
|
+
readonly nextCursor: string | null;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/** A tenant-owned identity provider row, sealed client secret included. */
|
|
127
|
+
export interface IdentityProviderRecord {
|
|
128
|
+
readonly id: string;
|
|
129
|
+
readonly tenantId: string;
|
|
130
|
+
readonly key: string;
|
|
131
|
+
readonly label: string;
|
|
132
|
+
readonly issuer: string;
|
|
133
|
+
readonly authorizationEndpoint: string;
|
|
134
|
+
readonly tokenEndpoint: string;
|
|
135
|
+
readonly userInfoEndpoint: string;
|
|
136
|
+
readonly clientId: string;
|
|
137
|
+
readonly secretCiphertext: string;
|
|
138
|
+
readonly secretKeyId: string;
|
|
139
|
+
readonly secretFingerprint: string;
|
|
140
|
+
readonly scopes: readonly string[];
|
|
141
|
+
readonly jitEnabled: boolean;
|
|
142
|
+
readonly allowedDomains: readonly string[];
|
|
143
|
+
readonly jitRole: string;
|
|
144
|
+
readonly status: IdentityProviderStatus;
|
|
145
|
+
readonly createdAt: number;
|
|
146
|
+
readonly updatedAt: number;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/** Everything a provider row carries except the columns the row owns itself. */
|
|
150
|
+
export type IdentityProviderPatch = Omit<
|
|
151
|
+
IdentityProviderRecord,
|
|
152
|
+
'id' | 'tenantId' | 'key' | 'createdAt' | 'updatedAt'
|
|
153
|
+
>;
|
|
154
|
+
|
|
80
155
|
export interface CreateAccountInTenantRecord {
|
|
81
156
|
readonly accountId: string;
|
|
82
157
|
readonly tenantId: string;
|
|
@@ -119,12 +194,50 @@ export interface TenantMember {
|
|
|
119
194
|
readonly displayName: string;
|
|
120
195
|
readonly role: string;
|
|
121
196
|
readonly roleId: string | null;
|
|
197
|
+
/** The account's platform-level status. */
|
|
122
198
|
readonly status: 'active' | 'disabled';
|
|
199
|
+
/** This workspace's own status for the member. */
|
|
200
|
+
readonly membershipStatus: MembershipStatus;
|
|
123
201
|
readonly scopes: readonly string[];
|
|
124
202
|
readonly passwordChangeRequired: boolean;
|
|
125
203
|
readonly createdAt: number;
|
|
126
204
|
}
|
|
127
205
|
|
|
206
|
+
export interface TenantMemberPage {
|
|
207
|
+
readonly members: readonly TenantMember[];
|
|
208
|
+
/** The account id of the last member of this page. */
|
|
209
|
+
readonly nextCursor: string | null;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
export type TenantMemberSort = 'displayName' | 'email';
|
|
213
|
+
|
|
214
|
+
/**
|
|
215
|
+
* Where a sorted member page ends. `sortValue` is the sort column as the
|
|
216
|
+
* database compares it, lower(display_name) or email_normalized, so the next
|
|
217
|
+
* page continues on the database's own order rather than a JavaScript fold.
|
|
218
|
+
*/
|
|
219
|
+
export interface TenantMemberKeyset {
|
|
220
|
+
readonly sortValue: string;
|
|
221
|
+
readonly accountId: string;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
export interface TenantMemberSortedRead {
|
|
225
|
+
readonly sort: TenantMemberSort;
|
|
226
|
+
readonly direction: 'asc' | 'desc';
|
|
227
|
+
readonly limit: number;
|
|
228
|
+
/** Folded and LIKE-escaped prefix of the display name or the address; null narrows nothing. */
|
|
229
|
+
readonly term: string | null;
|
|
230
|
+
readonly membershipStatus: MembershipStatus | null;
|
|
231
|
+
/** The keyset of the last member of the previous page; null starts the walk. */
|
|
232
|
+
readonly after: TenantMemberKeyset | null;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
export interface TenantMemberSortedPage {
|
|
236
|
+
readonly members: readonly TenantMember[];
|
|
237
|
+
/** The keyset of the last member when the page is full; a shorter page ends the walk. */
|
|
238
|
+
readonly next: TenantMemberKeyset | null;
|
|
239
|
+
}
|
|
240
|
+
|
|
128
241
|
export interface TenantSummary {
|
|
129
242
|
readonly tenantId: string;
|
|
130
243
|
readonly name: string;
|
|
@@ -154,6 +267,9 @@ export interface AuditRecord {
|
|
|
154
267
|
readonly actorKind: ActorKind;
|
|
155
268
|
/* The agent run the entry is traceable to; null for a user. */
|
|
156
269
|
readonly actorRunId: string | null;
|
|
270
|
+
/* The user who configured a service actor; null for every other kind and
|
|
271
|
+
for a service whose configuring user is not stored. */
|
|
272
|
+
readonly configuredBy?: UserActor | null;
|
|
157
273
|
readonly action: string;
|
|
158
274
|
readonly subjectType: string;
|
|
159
275
|
readonly subjectId: string;
|
|
@@ -166,6 +282,8 @@ export interface AuditRecord {
|
|
|
166
282
|
export interface AuditActorEvent extends AuditEvent {
|
|
167
283
|
readonly actorKind: ActorKind;
|
|
168
284
|
readonly actorRunId: string | null;
|
|
285
|
+
/** The user who configured a service actor; null for every other kind. */
|
|
286
|
+
readonly configuredBy: UserActor | null;
|
|
169
287
|
}
|
|
170
288
|
|
|
171
289
|
/**
|
|
@@ -188,6 +306,9 @@ export interface AuthRepository {
|
|
|
188
306
|
findAccountByEmail(
|
|
189
307
|
normalizedEmail: string,
|
|
190
308
|
): Promise<AccountCredential | null>;
|
|
309
|
+
/* The account row alone, without a membership: what an external sign-in
|
|
310
|
+
needs before it knows whether the workspace already holds the person. */
|
|
311
|
+
findAccountIdentity(normalizedEmail: string): Promise<AccountIdentity | null>;
|
|
191
312
|
findAccountCredentialById(
|
|
192
313
|
accountId: string,
|
|
193
314
|
): Promise<AccountCredential | null>;
|
|
@@ -219,6 +340,53 @@ export interface AuthRepository {
|
|
|
219
340
|
): Promise<AccountCredential | null>;
|
|
220
341
|
listTenantAccess(accountId: string): Promise<readonly AuthTenantAccess[]>;
|
|
221
342
|
listTenantMembers(tenantId: string): Promise<readonly TenantMember[]>;
|
|
343
|
+
/**
|
|
344
|
+
* One page of the workspace's members, keyset ordered by account id after
|
|
345
|
+
* `afterAccountId` (`''` starts the walk) and cut to `limit` in the
|
|
346
|
+
* database, for a caller that must not read a workspace of unknown size at
|
|
347
|
+
* once. Migration 0030 indexes the pair, so a page is the rows it returns.
|
|
348
|
+
*/
|
|
349
|
+
listTenantMembersPage(
|
|
350
|
+
tenantId: string,
|
|
351
|
+
afterAccountId: string,
|
|
352
|
+
limit: number,
|
|
353
|
+
): Promise<readonly TenantMember[]>;
|
|
354
|
+
/**
|
|
355
|
+
* One page of the workspace's members ordered by display name or by
|
|
356
|
+
* address, keyset on that column and the account id in the direction asked,
|
|
357
|
+
* narrowed by a prefix and a membership status in SQL and cut to `limit`.
|
|
358
|
+
* Migration 0033 indexes both sort pairs on auth_accounts.
|
|
359
|
+
*/
|
|
360
|
+
listTenantMembersSorted(
|
|
361
|
+
tenantId: string,
|
|
362
|
+
read: TenantMemberSortedRead,
|
|
363
|
+
): Promise<TenantMemberSortedPage>;
|
|
364
|
+
/** How many memberships the workspace holds, an index range over 0030. */
|
|
365
|
+
countTenantMembers(tenantId: string): Promise<number>;
|
|
366
|
+
/** One member, for a caller that needs a single account rather than the roll. */
|
|
367
|
+
findTenantMember(
|
|
368
|
+
tenantId: string,
|
|
369
|
+
accountId: string,
|
|
370
|
+
): Promise<TenantMember | null>;
|
|
371
|
+
/**
|
|
372
|
+
* The members of one workspace whose stored address is in the list. The
|
|
373
|
+
* caller normalizes and bounds the list; the comparison is against
|
|
374
|
+
* `email_normalized`, which is the same folded form.
|
|
375
|
+
*/
|
|
376
|
+
findTenantMembersByEmail(
|
|
377
|
+
tenantId: string,
|
|
378
|
+
normalizedEmails: readonly string[],
|
|
379
|
+
): Promise<readonly TenantMember[]>;
|
|
380
|
+
/**
|
|
381
|
+
* The members of one workspace whose display name or address starts with
|
|
382
|
+
* `term`, ordered as `listTenantMembers` orders and cut to `limit` in the
|
|
383
|
+
* database. `term` arrives already folded and LIKE-escaped.
|
|
384
|
+
*/
|
|
385
|
+
searchTenantMembers(
|
|
386
|
+
tenantId: string,
|
|
387
|
+
term: string,
|
|
388
|
+
limit: number,
|
|
389
|
+
): Promise<readonly TenantMember[]>;
|
|
222
390
|
listTenantScopes(tenantId: string): Promise<readonly string[]>;
|
|
223
391
|
createAccountWithTenant(
|
|
224
392
|
record: CreateAccountRecord,
|
|
@@ -293,8 +461,18 @@ export interface AuthRepository {
|
|
|
293
461
|
): Promise<readonly SessionSummary[]>;
|
|
294
462
|
deleteSession(tokenHash: string): Promise<void>;
|
|
295
463
|
deleteSessionById(accountId: string, id: string): Promise<boolean>;
|
|
296
|
-
|
|
464
|
+
/**
|
|
465
|
+
* Removes sessions that expired before `now` in bounded batches, at most
|
|
466
|
+
* `maxBatches` of them, and answers how many rows went. What the bound leaves
|
|
467
|
+
* behind is the next pass's work; a live session is never touched.
|
|
468
|
+
*/
|
|
469
|
+
deleteExpiredSessions(now: number, maxBatches?: number): Promise<number>;
|
|
297
470
|
createPasswordResetToken(record: PasswordResetTokenRecord): Promise<void>;
|
|
471
|
+
/** The account a live token names, without spending it. */
|
|
472
|
+
findPasswordResetTokenAccount(
|
|
473
|
+
tokenHash: string,
|
|
474
|
+
now: number,
|
|
475
|
+
): Promise<string | null>;
|
|
298
476
|
consumePasswordResetToken(
|
|
299
477
|
tokenHash: string,
|
|
300
478
|
now: number,
|
|
@@ -311,14 +489,23 @@ export interface AuthRepository {
|
|
|
311
489
|
} | null>;
|
|
312
490
|
upsertMfaTotp(
|
|
313
491
|
accountId: string,
|
|
314
|
-
|
|
492
|
+
secret: SealedMfaSecret,
|
|
315
493
|
createdAt: number,
|
|
316
494
|
): Promise<void>;
|
|
317
495
|
findMfaTotp(accountId: string): Promise<{
|
|
318
496
|
readonly secretCiphertext: string;
|
|
497
|
+
/* Null on a row sealed before 0017 added the column; the ring opens it by
|
|
498
|
+
trying every key it holds. */
|
|
499
|
+
readonly keyId: string | null;
|
|
319
500
|
readonly confirmedAt: number | null;
|
|
320
501
|
} | null>;
|
|
502
|
+
/* Answers the enrolment question without reading the enrolled secret, which
|
|
503
|
+
an authorization decision has no reason to hold. */
|
|
504
|
+
hasConfirmedMfaTotp(accountId: string): Promise<boolean>;
|
|
321
505
|
confirmMfaTotp(accountId: string, confirmedAt: number): Promise<void>;
|
|
506
|
+
/* Removes the factor and every recovery code together, so an administrative
|
|
507
|
+
reset can never leave a code redeemable for a secret that is gone. */
|
|
508
|
+
deleteMfaEnrolment(accountId: string): Promise<void>;
|
|
322
509
|
replaceMfaRecoveryCodes(
|
|
323
510
|
accountId: string,
|
|
324
511
|
codeHashes: readonly string[],
|
|
@@ -333,6 +520,69 @@ export interface AuthRepository {
|
|
|
333
520
|
readonly accountId: string;
|
|
334
521
|
readonly tenantId: string;
|
|
335
522
|
} | null>;
|
|
523
|
+
/* `tenantId` selects the binding space: null is the platform space a
|
|
524
|
+
provider from the environment binds in, a workspace id is that
|
|
525
|
+
workspace's own space. */
|
|
526
|
+
findExternalIdentity(
|
|
527
|
+
provider: string,
|
|
528
|
+
subject: string,
|
|
529
|
+
tenantId?: string | null,
|
|
530
|
+
): Promise<string | null>;
|
|
531
|
+
findExternalIdentitySubject(
|
|
532
|
+
provider: string,
|
|
533
|
+
accountId: string,
|
|
534
|
+
tenantId?: string | null,
|
|
535
|
+
): Promise<string | null>;
|
|
536
|
+
linkExternalIdentity(record: ExternalIdentityRecord): Promise<void>;
|
|
537
|
+
/**
|
|
538
|
+
* One page of the bindings this workspace owns, keyset ordered by
|
|
539
|
+
* (provider, subject) after the pair given (`''`, `''` starts the walk).
|
|
540
|
+
* The unique workspace index covers exactly that order, so a page is the
|
|
541
|
+
* rows it returns. A binding a platform provider made carries no workspace
|
|
542
|
+
* and is none of these.
|
|
543
|
+
*/
|
|
544
|
+
listExternalIdentitiesPage(
|
|
545
|
+
tenantId: string,
|
|
546
|
+
after: { readonly provider: string; readonly subject: string },
|
|
547
|
+
limit: number,
|
|
548
|
+
): Promise<readonly ExternalIdentityBinding[]>;
|
|
549
|
+
deleteExternalIdentitiesOfProvider(
|
|
550
|
+
tenantId: string,
|
|
551
|
+
provider: string,
|
|
552
|
+
): Promise<void>;
|
|
553
|
+
listIdentityProviders(
|
|
554
|
+
tenantId: string,
|
|
555
|
+
): Promise<readonly IdentityProviderRecord[]>;
|
|
556
|
+
findIdentityProvider(
|
|
557
|
+
tenantId: string,
|
|
558
|
+
id: string,
|
|
559
|
+
): Promise<IdentityProviderRecord | null>;
|
|
560
|
+
findIdentityProviderByKey(
|
|
561
|
+
tenantId: string,
|
|
562
|
+
key: string,
|
|
563
|
+
): Promise<IdentityProviderRecord | null>;
|
|
564
|
+
createIdentityProvider(
|
|
565
|
+
record: IdentityProviderRecord,
|
|
566
|
+
): Promise<IdentityProviderRecord>;
|
|
567
|
+
updateIdentityProvider(
|
|
568
|
+
tenantId: string,
|
|
569
|
+
id: string,
|
|
570
|
+
patch: IdentityProviderPatch,
|
|
571
|
+
updatedAt: number,
|
|
572
|
+
): Promise<IdentityProviderRecord | null>;
|
|
573
|
+
deleteIdentityProvider(tenantId: string, id: string): Promise<boolean>;
|
|
574
|
+
/** Revokes the membership's live tokens; a revoked one stays revoked. */
|
|
575
|
+
revokeMembershipApiTokens(
|
|
576
|
+
tenantId: string,
|
|
577
|
+
accountId: string,
|
|
578
|
+
revokedAt: number,
|
|
579
|
+
revokedBy: string,
|
|
580
|
+
): Promise<number>;
|
|
581
|
+
setMembershipStatus(
|
|
582
|
+
accountId: string,
|
|
583
|
+
tenantId: string,
|
|
584
|
+
status: MembershipStatus,
|
|
585
|
+
): Promise<boolean>;
|
|
336
586
|
findSignInFailure(
|
|
337
587
|
normalizedEmail: string,
|
|
338
588
|
): Promise<SignInFailureRecord | null>;
|
|
@@ -362,9 +612,56 @@ export interface AuthRepository {
|
|
|
362
612
|
countRoleMemberships(tenantId: string, roleId: string): Promise<number>;
|
|
363
613
|
appendAudit(record: AuditRecord): Promise<void>;
|
|
364
614
|
queryAudit(query: AuditQuery): Promise<readonly AuditActorEvent[]>;
|
|
365
|
-
/* The
|
|
366
|
-
|
|
367
|
-
|
|
615
|
+
/* The data class operations. Every page is a keyset read of one workspace,
|
|
616
|
+
every sweep a bounded delete of rows a workspace no longer needs; the
|
|
617
|
+
caller decides the cutoff from the workspace's retention period. */
|
|
618
|
+
exportSessionsPage(
|
|
619
|
+
tenantId: string,
|
|
620
|
+
afterId: string,
|
|
621
|
+
limit: number,
|
|
622
|
+
): Promise<readonly SessionExportRecord[]>;
|
|
623
|
+
/** Removes sessions that expired before `before`; a live one is never touched. */
|
|
624
|
+
deleteSessionsExpiredBefore(
|
|
625
|
+
tenantId: string,
|
|
626
|
+
before: number,
|
|
627
|
+
limit: number,
|
|
628
|
+
): Promise<number>;
|
|
629
|
+
exportApiTokensPage(
|
|
630
|
+
tenantId: string,
|
|
631
|
+
afterId: string,
|
|
632
|
+
limit: number,
|
|
633
|
+
): Promise<readonly ApiTokenRecord[]>;
|
|
634
|
+
/** Removes tokens that were revoked or expired before `before`; a usable one stays. */
|
|
635
|
+
deleteApiTokensRetiredBefore(
|
|
636
|
+
tenantId: string,
|
|
637
|
+
before: number,
|
|
638
|
+
limit: number,
|
|
639
|
+
): Promise<number>;
|
|
640
|
+
exportAuditEventsPage(
|
|
641
|
+
tenantId: string,
|
|
642
|
+
afterId: number,
|
|
643
|
+
limit: number,
|
|
644
|
+
): Promise<readonly AuditEvent[]>;
|
|
645
|
+
deleteAuditEventsBefore(
|
|
646
|
+
tenantId: string,
|
|
647
|
+
before: number,
|
|
648
|
+
limit: number,
|
|
649
|
+
): Promise<number>;
|
|
650
|
+
/* The erasure operations. Each removes at most `limit` rows one account owns
|
|
651
|
+
inside one workspace, so a subject erased in one workspace keeps what
|
|
652
|
+
another workspace holds about them. */
|
|
653
|
+
deleteMembershipSessionsOf(
|
|
654
|
+
tenantId: string,
|
|
655
|
+
accountId: string,
|
|
656
|
+
limit: number,
|
|
657
|
+
): Promise<number>;
|
|
658
|
+
deleteMembershipApiTokensOf(
|
|
659
|
+
tenantId: string,
|
|
660
|
+
accountId: string,
|
|
661
|
+
limit: number,
|
|
662
|
+
): Promise<number>;
|
|
663
|
+
/* The stored module settings of one tenant and module; the kernel
|
|
664
|
+
ModuleSettingsStore in services/settings-store.ts is built on these three. */
|
|
368
665
|
loadSettings(
|
|
369
666
|
tenantId: string,
|
|
370
667
|
moduleId: string,
|
|
@@ -373,6 +670,18 @@ export interface AuthRepository {
|
|
|
373
670
|
clearSetting(tenantId: string, moduleId: string, key: string): Promise<void>;
|
|
374
671
|
}
|
|
375
672
|
|
|
673
|
+
/* What a session export carries. It names no secret: a session is known by its
|
|
674
|
+
id, and the hash that authenticates it stays in the database. An API token
|
|
675
|
+
export carries ApiTokenRecord, which already omits the hash. */
|
|
676
|
+
export interface SessionExportRecord {
|
|
677
|
+
readonly id: string;
|
|
678
|
+
readonly tenantId: string;
|
|
679
|
+
readonly accountId: string;
|
|
680
|
+
readonly createdAt: number;
|
|
681
|
+
readonly expiresAt: number;
|
|
682
|
+
readonly lastSeenAt: number;
|
|
683
|
+
}
|
|
684
|
+
|
|
376
685
|
export class DuplicateAccountError extends Error {
|
|
377
686
|
constructor() {
|
|
378
687
|
super('An account with this email already exists.');
|
|
@@ -387,6 +696,13 @@ export class DuplicateTenantSlugError extends Error {
|
|
|
387
696
|
}
|
|
388
697
|
}
|
|
389
698
|
|
|
699
|
+
export class DuplicateProviderKeyError extends Error {
|
|
700
|
+
constructor() {
|
|
701
|
+
super('A provider with this key already exists in the workspace.');
|
|
702
|
+
this.name = 'DuplicateProviderKeyError';
|
|
703
|
+
}
|
|
704
|
+
}
|
|
705
|
+
|
|
390
706
|
export class DuplicateRoleKeyError extends Error {
|
|
391
707
|
constructor() {
|
|
392
708
|
super('A role with this key already exists in the workspace.');
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createJobRunner,
|
|
3
|
+
createJobTraceSink,
|
|
4
|
+
jobBackoff,
|
|
5
|
+
serverLogger,
|
|
6
|
+
type JobRunner,
|
|
7
|
+
type Logger,
|
|
8
|
+
type Tracer,
|
|
9
|
+
} from '@flowdular/sdk/server';
|
|
10
|
+
|
|
11
|
+
/** Stable id of the loop: the `module` field of every line it logs. */
|
|
12
|
+
export const SESSION_SWEEP_JOB = 'auth.core.sessions';
|
|
13
|
+
|
|
14
|
+
/** What the sweep needs of the service: the bounded delete and nothing else. */
|
|
15
|
+
export interface ExpiredSessionSweep {
|
|
16
|
+
deleteExpiredSessions(): Promise<number>;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export interface SessionSweepRunnerOptions {
|
|
20
|
+
readonly sweep: () => Promise<ExpiredSessionSweep>;
|
|
21
|
+
readonly intervalMs: number;
|
|
22
|
+
/** Defaults to the process tracer, which is the one `context.tracer` carries. */
|
|
23
|
+
readonly tracer?: Tracer | undefined;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/* A repository error can carry the SQL parameters of the statement that raised,
|
|
27
|
+
and a session token hash is one of them. The sweep publishes what kind of
|
|
28
|
+
value was thrown and never the value itself, so the runner's own error line
|
|
29
|
+
is written through this logger rather than the process one. */
|
|
30
|
+
function sweepLogger(): Logger {
|
|
31
|
+
const logger = serverLogger();
|
|
32
|
+
return {
|
|
33
|
+
...logger,
|
|
34
|
+
error: (message, event) =>
|
|
35
|
+
logger.error(message, {
|
|
36
|
+
module: event?.module ?? SESSION_SWEEP_JOB,
|
|
37
|
+
fields: { error: event?.err instanceof Error ? 'Error' : 'non-error' },
|
|
38
|
+
}),
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* The expired session sweep as the platform runner sees it. The loop, its
|
|
44
|
+
* interval and unref, the guard against overlapping passes, the backoff and the
|
|
45
|
+
* drain on dispose are the runner's (`@flowdular/sdk/server`); the row bound on the
|
|
46
|
+
* delete and every statement it issues stay in the repository behind the
|
|
47
|
+
* service.
|
|
48
|
+
*/
|
|
49
|
+
export function createSessionSweepRunner(
|
|
50
|
+
options: SessionSweepRunnerOptions,
|
|
51
|
+
): JobRunner {
|
|
52
|
+
return createJobRunner<number>({
|
|
53
|
+
name: SESSION_SWEEP_JOB,
|
|
54
|
+
intervalMs: options.intervalMs,
|
|
55
|
+
/* The sweep claims nothing: no row is leased, so no renewal can lapse and
|
|
56
|
+
nothing can take the work over while a pass runs. */
|
|
57
|
+
staleAfterMs: options.intervalMs,
|
|
58
|
+
backoff: jobBackoff(options.intervalMs),
|
|
59
|
+
/* One claim per pass, and the claim is the pass itself: the delete it
|
|
60
|
+
performs carries its own row bound and leaves the rest to the next. */
|
|
61
|
+
batchLimit: 1,
|
|
62
|
+
logger: sweepLogger,
|
|
63
|
+
/* Spans carry the loop name, the counts and a reason code, never the value
|
|
64
|
+
a statement threw, so the sweep's own refusal to serialize it holds. */
|
|
65
|
+
onEvent: createJobTraceSink(
|
|
66
|
+
options.tracer ? { tracer: options.tracer } : {},
|
|
67
|
+
),
|
|
68
|
+
claim: (at) => Promise.resolve(at),
|
|
69
|
+
perform: async () => {
|
|
70
|
+
await (await options.sweep()).deleteExpiredSessions();
|
|
71
|
+
},
|
|
72
|
+
});
|
|
73
|
+
}
|
|
@@ -1,92 +1,19 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
ModuleSettingRecord,
|
|
3
|
-
ModuleSettingValue,
|
|
4
|
-
ModuleSettingsStore,
|
|
5
|
-
} from '@flowdular/sdk/kernel';
|
|
1
|
+
import type { ModuleSettingsStore } from '@flowdular/sdk/kernel';
|
|
6
2
|
import type { AuthRepository } from './repository.ts';
|
|
7
3
|
|
|
8
|
-
export interface AuthSettingsStore extends ModuleSettingsStore {
|
|
9
|
-
/**
|
|
10
|
-
* Resolves once every snapshot and write requested so far has reached the
|
|
11
|
-
* database, and rejects once with the first failure since the last call.
|
|
12
|
-
*/
|
|
13
|
-
ready(): Promise<void>;
|
|
14
|
-
/** Loads one snapshot and waits for it, so a later read cannot miss it. */
|
|
15
|
-
prime(tenantId: string, moduleId: string): Promise<void>;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
4
|
/**
|
|
19
|
-
* The kernel settings
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
* module and fills that same object when the read resolves: the runtime's
|
|
23
|
-
* cached reference sees the values without a second call. Until the first read
|
|
24
|
-
* lands a declared default is what a caller sees, so anything that must not
|
|
25
|
-
* observe that window primes the snapshot first. Writes apply to the snapshot
|
|
26
|
-
* immediately and reach the database in call order.
|
|
5
|
+
* The kernel settings store over auth.core's module_settings table. The
|
|
6
|
+
* kernel runtime primes a snapshot per tenant through `load` and awaits every
|
|
7
|
+
* write, so a failure reaches the caller that made it.
|
|
27
8
|
*/
|
|
28
9
|
export function createAuthSettingsStore(
|
|
29
10
|
repository: () => Promise<AuthRepository>,
|
|
30
|
-
):
|
|
31
|
-
const snapshots = new Map<string, Record<string, ModuleSettingValue>>();
|
|
32
|
-
let queue: Promise<void> = Promise.resolve();
|
|
33
|
-
let failure: unknown;
|
|
34
|
-
|
|
35
|
-
const enqueue = (work: () => Promise<void>, label: string): void => {
|
|
36
|
-
queue = queue.then(async () => {
|
|
37
|
-
try {
|
|
38
|
-
await work();
|
|
39
|
-
} catch (error) {
|
|
40
|
-
/* The kernel write path is synchronous and returns nothing, so this
|
|
41
|
-
is the only place a failure can be reported. The value never
|
|
42
|
-
reaches the log; a stored secret would end up in it. */
|
|
43
|
-
failure ??= error;
|
|
44
|
-
console.error(`[auth.core] module settings ${label} failed`);
|
|
45
|
-
}
|
|
46
|
-
});
|
|
47
|
-
};
|
|
48
|
-
|
|
49
|
-
const snapshot = (
|
|
50
|
-
tenantId: string,
|
|
51
|
-
moduleId: string,
|
|
52
|
-
): Record<string, ModuleSettingValue> => {
|
|
53
|
-
const key = `${tenantId} ${moduleId}`;
|
|
54
|
-
const existing = snapshots.get(key);
|
|
55
|
-
if (existing) return existing;
|
|
56
|
-
const values: Record<string, ModuleSettingValue> = {};
|
|
57
|
-
snapshots.set(key, values);
|
|
58
|
-
enqueue(async () => {
|
|
59
|
-
const store = await repository();
|
|
60
|
-
Object.assign(values, await store.loadSettings(tenantId, moduleId));
|
|
61
|
-
}, `read of ${moduleId}`);
|
|
62
|
-
return values;
|
|
63
|
-
};
|
|
64
|
-
|
|
11
|
+
): ModuleSettingsStore {
|
|
65
12
|
return {
|
|
66
|
-
load:
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
`write of ${record.moduleId}.${record.key}`,
|
|
72
|
-
);
|
|
73
|
-
},
|
|
74
|
-
clear(tenantId: string, moduleId: string, key: string) {
|
|
75
|
-
delete snapshot(tenantId, moduleId)[key];
|
|
76
|
-
enqueue(
|
|
77
|
-
async () => (await repository()).clearSetting(tenantId, moduleId, key),
|
|
78
|
-
`clear of ${moduleId}.${key}`,
|
|
79
|
-
);
|
|
80
|
-
},
|
|
81
|
-
async ready() {
|
|
82
|
-
await queue;
|
|
83
|
-
const pending = failure;
|
|
84
|
-
failure = undefined;
|
|
85
|
-
if (pending !== undefined) throw pending;
|
|
86
|
-
},
|
|
87
|
-
async prime(tenantId: string, moduleId: string) {
|
|
88
|
-
snapshot(tenantId, moduleId);
|
|
89
|
-
await this.ready();
|
|
90
|
-
},
|
|
13
|
+
load: async (tenantId, moduleId) =>
|
|
14
|
+
(await repository()).loadSettings(tenantId, moduleId),
|
|
15
|
+
save: async (record) => (await repository()).saveSetting(record),
|
|
16
|
+
clear: async (tenantId, moduleId, key) =>
|
|
17
|
+
(await repository()).clearSetting(tenantId, moduleId, key),
|
|
91
18
|
};
|
|
92
19
|
}
|