@flowdular/sdk 0.2.4 → 0.3.1
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 +130 -3
- 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/cli-extension/SKILL.md +1 -1
- package/.ai/skills/deploy-operate/SKILL.md +119 -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/0005_approvals_grant_audit.down.sql +4 -0
- package/modules/approvals/migrations/0005_approvals_grant_audit.up.sql +20 -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 +327 -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 +107 -0
- package/modules/approvals/src/domain/grant.ts +69 -0
- package/modules/approvals/src/domain/types.ts +168 -0
- package/modules/approvals/src/index.ts +61 -0
- package/modules/approvals/src/platform.ts +136 -0
- package/modules/approvals/src/server/index.ts +42 -0
- package/modules/approvals/src/server/runtime.ts +185 -0
- package/modules/approvals/src/services/approvals-service.ts +637 -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 +783 -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 +256 -0
- package/modules/approvals/src/services/notifications.ts +95 -0
- package/modules/approvals/src/services/repository.ts +169 -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/0003_connectors_rotation_inventory.down.sql +2 -0
- package/modules/connectors/migrations/0003_connectors_rotation_inventory.up.sql +19 -0
- package/modules/connectors/migrations/README.md +3 -0
- package/modules/connectors/module.json +32 -0
- package/modules/{automations-workflows-integration → connectors}/package.json +28 -26
- package/modules/connectors/spec/module.yaml +448 -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/cli/commands.json +17 -0
- package/modules/connectors/src/cli/index.ts +126 -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-rotation.ts +221 -0
- package/modules/connectors/src/services/credential-vault.ts +194 -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 +202 -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/0003_documents_rotation_inventory.down.sql +2 -0
- package/modules/documents/migrations/0003_documents_rotation_inventory.up.sql +18 -0
- package/modules/documents/migrations/README.md +3 -0
- package/modules/documents/module.json +32 -0
- package/modules/documents/package.json +50 -0
- package/modules/documents/spec/module.yaml +248 -0
- package/modules/documents/src/acl/permissions.ts +6 -0
- package/modules/documents/src/api/endpoints.ts +401 -0
- package/modules/documents/src/cli/commands.json +17 -0
- package/modules/documents/src/cli/index.ts +145 -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 +270 -0
- package/modules/documents/src/services/documents-service.ts +590 -0
- package/modules/documents/src/services/index.ts +18 -0
- package/modules/documents/src/services/migration.ts +117 -0
- package/modules/documents/src/services/repository.ts +58 -0
- package/modules/documents/src/services/storage-rotation.ts +157 -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/0003_exports_rotation_inventory.down.sql +1 -0
- package/modules/exports/migrations/0003_exports_rotation_inventory.up.sql +9 -0
- package/modules/exports/migrations/README.md +3 -0
- package/modules/exports/module.json +32 -0
- package/modules/exports/package.json +45 -0
- package/modules/exports/spec/module.yaml +230 -0
- package/modules/exports/src/acl/permissions.ts +6 -0
- package/modules/exports/src/api/endpoints.ts +211 -0
- package/modules/exports/src/cli/commands.json +17 -0
- package/modules/exports/src/cli/index.ts +145 -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 +50 -0
- package/modules/exports/src/server/runtime.ts +160 -0
- package/modules/exports/src/services/data-classes.ts +59 -0
- package/modules/exports/src/services/database-repository.ts +403 -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 +116 -0
- package/modules/exports/src/services/repository.ts +96 -0
- package/modules/exports/src/services/storage-rotation.ts +138 -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 +180 -0
- package/packages/database/src/decoders.ts +25 -0
- package/packages/database/src/index.ts +17 -0
- package/packages/database/src/migrations.ts +7 -0
- package/packages/database/src/record-history.ts +5 -14
- package/packages/harness/src/index.ts +2 -0
- package/packages/harness/src/runtime.ts +378 -2
- package/packages/harness/src/tool-adapters.ts +20 -9
- package/packages/kernel/src/acl.ts +179 -0
- package/packages/kernel/src/approval-grant.ts +310 -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 +85 -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 +238 -0
- package/packages/storage/src/index.ts +49 -0
- package/packages/storage/src/local.ts +75 -0
- package/packages/storage/src/port.ts +262 -0
- package/packages/storage/src/read-token.ts +130 -0
- package/packages/storage/src/reseal.ts +128 -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
|
@@ -1,21 +1,25 @@
|
|
|
1
|
-
import type { TenantMember } from '@flowdular/sdk/modules/auth';
|
|
1
|
+
import type { TenantMember, TenantMemberSort } from '@flowdular/sdk/modules/auth';
|
|
2
2
|
import { t } from '@flowdular/sdk/client/i18n';
|
|
3
3
|
import type {
|
|
4
4
|
CreateUserInput,
|
|
5
|
-
|
|
5
|
+
MemberBulkOutcome,
|
|
6
|
+
UsersContext,
|
|
6
7
|
} from '../services/users-service.ts';
|
|
7
8
|
|
|
8
9
|
interface ErrorEnvelope {
|
|
9
|
-
readonly error?: { readonly message?: string };
|
|
10
|
+
readonly error?: { readonly code?: string; readonly message?: string };
|
|
10
11
|
}
|
|
11
12
|
|
|
12
13
|
export class ApiError extends Error {
|
|
13
14
|
readonly status: number;
|
|
15
|
+
/** Stable server code; '' when the response carried none. */
|
|
16
|
+
readonly code: string;
|
|
14
17
|
|
|
15
|
-
constructor(status: number, message: string) {
|
|
18
|
+
constructor(status: number, message: string, code = '') {
|
|
16
19
|
super(message);
|
|
17
20
|
this.name = 'ApiError';
|
|
18
21
|
this.status = status;
|
|
22
|
+
this.code = code;
|
|
19
23
|
}
|
|
20
24
|
}
|
|
21
25
|
|
|
@@ -25,6 +29,7 @@ async function payload<T>(response: Response): Promise<T> {
|
|
|
25
29
|
throw new ApiError(
|
|
26
30
|
response.status,
|
|
27
31
|
value.error?.message ?? t('users.error.request'),
|
|
32
|
+
value.error?.code ?? '',
|
|
28
33
|
);
|
|
29
34
|
}
|
|
30
35
|
return value;
|
|
@@ -47,12 +52,57 @@ async function post<T>(
|
|
|
47
52
|
return payload<T>(response);
|
|
48
53
|
}
|
|
49
54
|
|
|
50
|
-
|
|
51
|
-
|
|
55
|
+
/* exports.core owns the job, its file and the screen that hands it over, so the
|
|
56
|
+
Members screen only starts one: what comes back is the job as that screen
|
|
57
|
+
will show it, and nothing here models it. */
|
|
58
|
+
export async function startListExport(
|
|
59
|
+
list: string,
|
|
60
|
+
csrfToken: string,
|
|
61
|
+
): Promise<void> {
|
|
62
|
+
await post<unknown>('/api/exports/start', { list }, csrfToken);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export interface MemberListRequest {
|
|
66
|
+
readonly sort: TenantMemberSort;
|
|
67
|
+
readonly direction: 'asc' | 'desc';
|
|
68
|
+
readonly limit: number;
|
|
69
|
+
/** A prefix of the display name or the address; '' narrows nothing. */
|
|
70
|
+
readonly query: string;
|
|
71
|
+
readonly status: '' | 'active' | 'disabled';
|
|
72
|
+
/** The cursor that opens this page; null asks for the first one. */
|
|
73
|
+
readonly cursor: string | null;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export interface MemberListPage {
|
|
77
|
+
readonly items: readonly TenantMember[];
|
|
78
|
+
readonly page: { readonly nextCursor: string | null; readonly limit: number };
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/** One server-sorted, server-narrowed, server-paged listing; the screen narrows nothing. */
|
|
82
|
+
export async function loadTenantUsers(
|
|
83
|
+
request: MemberListRequest,
|
|
84
|
+
): Promise<MemberListPage> {
|
|
85
|
+
const parameters = new URLSearchParams({
|
|
86
|
+
sort: request.sort,
|
|
87
|
+
direction: request.direction,
|
|
88
|
+
limit: String(request.limit),
|
|
89
|
+
});
|
|
90
|
+
if (request.query !== '') parameters.set('q', request.query);
|
|
91
|
+
if (request.status !== '') parameters.set('status', request.status);
|
|
92
|
+
if (request.cursor !== null) parameters.set('cursor', request.cursor);
|
|
93
|
+
const response = await fetch('/api/users?' + parameters.toString(), {
|
|
52
94
|
headers: { accept: 'application/json' },
|
|
53
95
|
credentials: 'same-origin',
|
|
54
96
|
});
|
|
55
|
-
return payload<
|
|
97
|
+
return payload<MemberListPage>(response);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
export async function loadUsersContext(): Promise<UsersContext> {
|
|
101
|
+
const response = await fetch('/api/users/context', {
|
|
102
|
+
headers: { accept: 'application/json' },
|
|
103
|
+
credentials: 'same-origin',
|
|
104
|
+
});
|
|
105
|
+
return payload<UsersContext>(response);
|
|
56
106
|
}
|
|
57
107
|
|
|
58
108
|
export async function createTenantUser(
|
|
@@ -105,18 +155,62 @@ export async function assignMemberRole(
|
|
|
105
155
|
).user;
|
|
106
156
|
}
|
|
107
157
|
|
|
108
|
-
|
|
158
|
+
/* The operator's global account block reaches every workspace the account
|
|
159
|
+
belongs to, so no workspace screen calls it and this client has no fetch for
|
|
160
|
+
POST /api/users/status. The drawer shows the account state read-only and
|
|
161
|
+
changes workspace access through setMembershipStatus below. */
|
|
162
|
+
|
|
163
|
+
export interface MembershipStatusResult {
|
|
164
|
+
readonly accountId: string;
|
|
165
|
+
readonly status: 'active' | 'disabled';
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/* Access to this workspace only. auth.core owns the membership and enforces the
|
|
169
|
+
self-target and last-owner rules, so the call goes to its administration
|
|
170
|
+
route directly, as the invitation and session routes above do. */
|
|
171
|
+
export async function setMembershipStatus(
|
|
109
172
|
accountId: string,
|
|
110
173
|
status: 'active' | 'disabled',
|
|
111
174
|
csrfToken: string,
|
|
112
|
-
): Promise<
|
|
175
|
+
): Promise<MembershipStatusResult> {
|
|
113
176
|
return (
|
|
114
|
-
await post<
|
|
115
|
-
'/api/
|
|
177
|
+
await post<{ readonly membership: MembershipStatusResult }>(
|
|
178
|
+
'/api/auth/memberships/status',
|
|
116
179
|
{ accountId, status },
|
|
117
180
|
csrfToken,
|
|
118
181
|
)
|
|
119
|
-
).
|
|
182
|
+
).membership;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
type OutcomesResponse = { readonly outcomes: readonly MemberBulkOutcome[] };
|
|
186
|
+
|
|
187
|
+
/* Workspace access for the selected rows, one outcome per id. */
|
|
188
|
+
export async function setMembershipStatusMany(
|
|
189
|
+
accountIds: readonly string[],
|
|
190
|
+
status: 'active' | 'disabled',
|
|
191
|
+
csrfToken: string,
|
|
192
|
+
): Promise<readonly MemberBulkOutcome[]> {
|
|
193
|
+
return (
|
|
194
|
+
await post<OutcomesResponse>(
|
|
195
|
+
'/api/users/status-many',
|
|
196
|
+
{ accountIds, status },
|
|
197
|
+
csrfToken,
|
|
198
|
+
)
|
|
199
|
+
).outcomes;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
export async function assignRoleMany(
|
|
203
|
+
accountIds: readonly string[],
|
|
204
|
+
role: string,
|
|
205
|
+
csrfToken: string,
|
|
206
|
+
): Promise<readonly MemberBulkOutcome[]> {
|
|
207
|
+
return (
|
|
208
|
+
await post<OutcomesResponse>(
|
|
209
|
+
'/api/users/role-many',
|
|
210
|
+
{ accountIds, role },
|
|
211
|
+
csrfToken,
|
|
212
|
+
)
|
|
213
|
+
).outcomes;
|
|
120
214
|
}
|
|
121
215
|
|
|
122
216
|
export async function removeMember(
|
|
@@ -16,6 +16,10 @@ export interface UsersClientContributionOptions {
|
|
|
16
16
|
|
|
17
17
|
const ROLES_READ = 'auth.roles.read';
|
|
18
18
|
const ROLES_MANAGE = 'auth.roles.manage';
|
|
19
|
+
/* exports.core's own scope, held here as a string the same way the auth role
|
|
20
|
+
scopes are: a deployment without that module grants it to nobody, so the
|
|
21
|
+
action is simply absent rather than offered and refused. */
|
|
22
|
+
const EXPORTS_MANAGE = 'exports.lists.manage';
|
|
19
23
|
|
|
20
24
|
export function createUsersClientContribution(
|
|
21
25
|
options: UsersClientContributionOptions,
|
|
@@ -61,6 +65,7 @@ export function createUsersClientContribution(
|
|
|
61
65
|
<UsersView
|
|
62
66
|
csrfToken={options.csrfToken}
|
|
63
67
|
canManage={has(USER_PERMISSIONS.manage)}
|
|
68
|
+
canExport={has(EXPORTS_MANAGE)}
|
|
64
69
|
/>,
|
|
65
70
|
},
|
|
66
71
|
{
|
|
@@ -6,19 +6,26 @@ export function memberColumns(
|
|
|
6
6
|
roleNames: ReadonlyMap<string, string>,
|
|
7
7
|
): readonly TableColumn<TenantMember>[] {
|
|
8
8
|
return [
|
|
9
|
+
/* The two keys the server sorts by are the two sortable columns, so a
|
|
10
|
+
header click names the sort key as it is. */
|
|
9
11
|
{
|
|
10
|
-
key: '
|
|
12
|
+
key: 'displayName',
|
|
11
13
|
header: t('users.table.user'),
|
|
12
|
-
width: '
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
width: '22%',
|
|
15
|
+
value: (user) => user.displayName,
|
|
16
|
+
cell: (user) => <b>{user.displayName}</b>,
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
key: 'email',
|
|
20
|
+
header: t('users.table.email'),
|
|
21
|
+
width: '24%',
|
|
22
|
+
value: (user) => user.email,
|
|
23
|
+
cell: (user) => <span>{user.email}</span>,
|
|
17
24
|
},
|
|
18
25
|
{
|
|
19
26
|
key: 'role',
|
|
20
27
|
header: t('users.table.role'),
|
|
21
|
-
width: '
|
|
28
|
+
width: '14%',
|
|
22
29
|
cell: (user) =>
|
|
23
30
|
<Tag tone={user.role === 'owner' ? 'ink' : 'neutral'}>
|
|
24
31
|
{roleNames.get(user.role) ?? user.role}
|
|
@@ -29,11 +36,17 @@ export function memberColumns(
|
|
|
29
36
|
header: t('users.table.status'),
|
|
30
37
|
width: '28%',
|
|
31
38
|
cell: (user) => <span class="ui-table__state">
|
|
32
|
-
<Tag
|
|
33
|
-
{user.
|
|
39
|
+
<Tag
|
|
40
|
+
tone={user.membershipStatus === 'active' ? 'success' : 'neutral'}
|
|
41
|
+
dot
|
|
42
|
+
>
|
|
43
|
+
{user.membershipStatus === 'active'
|
|
34
44
|
? t('users.status.active')
|
|
35
45
|
: t('users.status.disabled')}
|
|
36
46
|
</Tag>
|
|
47
|
+
{user.status === 'disabled'
|
|
48
|
+
? <small>{t('users.status.blocked')}</small>
|
|
49
|
+
: null}
|
|
37
50
|
{user.passwordChangeRequired
|
|
38
51
|
? <small>{t('users.status.passwordResetPending')}</small>
|
|
39
52
|
: null}
|
|
@@ -1,6 +1,12 @@
|
|
|
1
|
-
import type { TenantMember } from '@flowdular/sdk/modules/auth';
|
|
1
|
+
import type { TenantMember, TenantMemberSort } from '@flowdular/sdk/modules/auth';
|
|
2
|
+
import { t } from '@flowdular/sdk/client/i18n';
|
|
3
|
+
import type { TableSort } from '@flowdular/sdk/ui';
|
|
2
4
|
import { cell, createStore } from 'segment-state';
|
|
3
|
-
import type {
|
|
5
|
+
import type {
|
|
6
|
+
MemberBulkOutcome,
|
|
7
|
+
UsersContext,
|
|
8
|
+
} from '../services/users-service.ts';
|
|
9
|
+
import { ApiError, type MemberListPage } from './api.ts';
|
|
4
10
|
|
|
5
11
|
export type UsersStatus =
|
|
6
12
|
| 'idle'
|
|
@@ -9,14 +15,51 @@ export type UsersStatus =
|
|
|
9
15
|
| 'denied'
|
|
10
16
|
| 'error';
|
|
11
17
|
|
|
18
|
+
export type MemberStatusFilter = '' | 'active' | 'disabled';
|
|
19
|
+
|
|
20
|
+
export const DEFAULT_MEMBER_SORTING: readonly TableSort[] = [
|
|
21
|
+
{ key: 'displayName', desc: false },
|
|
22
|
+
];
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* The cursor that opened each page the reader has visited: page 0 has none,
|
|
26
|
+
* and page n holds the cursor page n - 1 answered. Going back reuses the stored
|
|
27
|
+
* cursor; a page past the stack cannot be opened.
|
|
28
|
+
*/
|
|
29
|
+
export type PageCursors = readonly (string | null)[];
|
|
30
|
+
|
|
31
|
+
/** One listing as the server answers it: the page, its order and its filters. */
|
|
32
|
+
export interface Listing {
|
|
33
|
+
readonly pageIndex: number;
|
|
34
|
+
readonly pageSize: number;
|
|
35
|
+
readonly sorting: readonly TableSort[];
|
|
36
|
+
readonly query: string;
|
|
37
|
+
readonly status: MemberStatusFilter;
|
|
38
|
+
readonly cursors: PageCursors;
|
|
39
|
+
}
|
|
40
|
+
|
|
12
41
|
export function createUsersClientState() {
|
|
13
42
|
const store = createStore({
|
|
14
43
|
users: cell<readonly TenantMember[]>([]),
|
|
15
|
-
roles: cell<
|
|
44
|
+
roles: cell<UsersContext['roles']>([]),
|
|
16
45
|
grantableScopes: cell<readonly string[]>([]),
|
|
17
|
-
actor: cell<
|
|
46
|
+
actor: cell<UsersContext['actor'] | null>(null),
|
|
18
47
|
passwordMinLength: 12,
|
|
48
|
+
memberCount: 0,
|
|
19
49
|
query: '',
|
|
50
|
+
/** The term the rows on screen answer; typing moves `query` ahead of it. */
|
|
51
|
+
appliedQuery: '',
|
|
52
|
+
statusFilter: cell<MemberStatusFilter>(''),
|
|
53
|
+
sorting: cell<readonly TableSort[]>(DEFAULT_MEMBER_SORTING),
|
|
54
|
+
pageIndex: 0,
|
|
55
|
+
pageSize: 25,
|
|
56
|
+
cursors: cell<PageCursors>([null]),
|
|
57
|
+
nextCursor: cell<string | null>(null),
|
|
58
|
+
filtersOpen: false,
|
|
59
|
+
selectedIds: cell<ReadonlySet<string>>(new Set()),
|
|
60
|
+
confirmDeactivateMany: false,
|
|
61
|
+
roleDialogOpen: false,
|
|
62
|
+
bulkRole: '',
|
|
20
63
|
formOpen: false,
|
|
21
64
|
formSession: 0,
|
|
22
65
|
inviteOpen: false,
|
|
@@ -25,18 +68,140 @@ export function createUsersClientState() {
|
|
|
25
68
|
status: cell<UsersStatus>('idle'),
|
|
26
69
|
error: '',
|
|
27
70
|
notice: '',
|
|
71
|
+
/* A started export outlives the click that started it, so it carries its
|
|
72
|
+
own line to the Exports screen instead of the notice every other action
|
|
73
|
+
shares and the next one overwrites. */
|
|
74
|
+
exportStarted: false,
|
|
28
75
|
});
|
|
29
76
|
return { store, state: store.state };
|
|
30
77
|
}
|
|
31
78
|
|
|
32
79
|
export type UsersClientState = ReturnType<typeof createUsersClientState>;
|
|
33
80
|
|
|
81
|
+
/** The server's sort key and direction behind the table's sorting state. */
|
|
82
|
+
export function memberSort(sorts: readonly TableSort[]): {
|
|
83
|
+
readonly sort: TenantMemberSort;
|
|
84
|
+
readonly direction: 'asc' | 'desc';
|
|
85
|
+
} {
|
|
86
|
+
const first = sorts[0] ?? DEFAULT_MEMBER_SORTING[0]!;
|
|
87
|
+
return {
|
|
88
|
+
sort: first.key === 'email' ? 'email' : 'displayName',
|
|
89
|
+
direction: first.desc ? 'desc' : 'asc',
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/** The cursor that opens `pageIndex`, or undefined when the reader never reached it. */
|
|
94
|
+
export function pageCursor(
|
|
95
|
+
cursors: PageCursors,
|
|
96
|
+
pageIndex: number,
|
|
97
|
+
): string | null | undefined {
|
|
98
|
+
return pageIndex < cursors.length ? cursors[pageIndex] : undefined;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Records what the page at `pageIndex` answered: the cursor of the page after
|
|
103
|
+
* it, or nothing when it was the last. Pages beyond the next one are dropped,
|
|
104
|
+
* since the set may have changed under them.
|
|
105
|
+
*/
|
|
106
|
+
export function rememberNextCursor(
|
|
107
|
+
cursors: PageCursors,
|
|
108
|
+
pageIndex: number,
|
|
109
|
+
nextCursor: string | null,
|
|
110
|
+
): PageCursors {
|
|
111
|
+
const kept = cursors.slice(0, pageIndex + 1);
|
|
112
|
+
return nextCursor === null ? kept : [...kept, nextCursor];
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
export function resetPageCursors(): PageCursors {
|
|
116
|
+
return [null];
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* What a loaded page writes to the screen. The selection is emptied with every
|
|
121
|
+
* listing, on a page, sort or filter change as much as on a refresh, because a
|
|
122
|
+
* selected id names a row the reader saw on the page that is being replaced.
|
|
123
|
+
*/
|
|
124
|
+
export function loadedListing(
|
|
125
|
+
next: Listing,
|
|
126
|
+
page: MemberListPage,
|
|
127
|
+
): {
|
|
128
|
+
readonly users: readonly TenantMember[];
|
|
129
|
+
readonly appliedQuery: string;
|
|
130
|
+
readonly pageIndex: number;
|
|
131
|
+
readonly cursors: PageCursors;
|
|
132
|
+
readonly nextCursor: string | null;
|
|
133
|
+
readonly selectedIds: ReadonlySet<string>;
|
|
134
|
+
} {
|
|
135
|
+
return {
|
|
136
|
+
users: page.items,
|
|
137
|
+
appliedQuery: next.query,
|
|
138
|
+
pageIndex: next.pageIndex,
|
|
139
|
+
cursors: rememberNextCursor(
|
|
140
|
+
next.cursors,
|
|
141
|
+
next.pageIndex,
|
|
142
|
+
page.page.nextCursor,
|
|
143
|
+
),
|
|
144
|
+
nextCursor: page.page.nextCursor,
|
|
145
|
+
selectedIds: new Set(),
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/** The selected rows a bulk action may name: on screen and never the acting principal. */
|
|
150
|
+
export function bulkTargets(
|
|
151
|
+
users: readonly TenantMember[],
|
|
152
|
+
selected: ReadonlySet<string>,
|
|
153
|
+
actorAccountId: string | undefined,
|
|
154
|
+
): readonly string[] {
|
|
155
|
+
return users
|
|
156
|
+
.filter(
|
|
157
|
+
(user) =>
|
|
158
|
+
selected.has(user.accountId) && user.accountId !== actorAccountId,
|
|
159
|
+
)
|
|
160
|
+
.map((user) => user.accountId);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/** How many ids each outcome covered, for the toast after a bulk action. */
|
|
164
|
+
export function bulkOutcomeCounts(outcomes: readonly MemberBulkOutcome[]): {
|
|
165
|
+
readonly updated: number;
|
|
166
|
+
readonly missing: number;
|
|
167
|
+
readonly refused: number;
|
|
168
|
+
} {
|
|
169
|
+
let updated = 0;
|
|
170
|
+
let missing = 0;
|
|
171
|
+
let refused = 0;
|
|
172
|
+
for (const entry of outcomes) {
|
|
173
|
+
if (entry.outcome === 'updated') updated += 1;
|
|
174
|
+
else if (entry.outcome === 'not-found') missing += 1;
|
|
175
|
+
else refused += 1;
|
|
176
|
+
}
|
|
177
|
+
return { updated, missing, refused };
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
export function searchPending(query: string, applied: string): boolean {
|
|
181
|
+
return query.trim() !== applied;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/* The server ordered the page, so a changed row keeps its place until the next
|
|
185
|
+
read; a row that is not on this page changes nothing here. */
|
|
34
186
|
export function replaceMember(
|
|
35
187
|
users: readonly TenantMember[],
|
|
36
188
|
member: TenantMember,
|
|
37
189
|
): readonly TenantMember[] {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
left.displayName.localeCompare(right.displayName),
|
|
190
|
+
return users.map((user) =>
|
|
191
|
+
user.accountId === member.accountId ? member : user,
|
|
41
192
|
);
|
|
42
193
|
}
|
|
194
|
+
|
|
195
|
+
/* The membership route answers with stable codes; each one gets the sentence
|
|
196
|
+
that says what to do instead, and anything else keeps the server message. */
|
|
197
|
+
export function membershipStatusMessage(error: unknown): string {
|
|
198
|
+
const code = error instanceof ApiError ? error.code : '';
|
|
199
|
+
if (code === 'SELF_TARGET') return t('users.membership.errorSelf');
|
|
200
|
+
if (code === 'LAST_OWNER') return t('users.membership.errorLastOwner');
|
|
201
|
+
if (code === 'OWNER_REQUIRED')
|
|
202
|
+
return t('users.membership.errorOwnerRequired');
|
|
203
|
+
if (code === 'ACCOUNT_NOT_FOUND') return t('users.membership.errorNotFound');
|
|
204
|
+
return error instanceof Error && error.message !== ''
|
|
205
|
+
? error.message
|
|
206
|
+
: t('users.membership.error');
|
|
207
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The id exports.core holds this module's member list under: the module id
|
|
3
|
+
* followed by the list key, which is the namespace rule its catalogue enforces.
|
|
4
|
+
*
|
|
5
|
+
* It lives here rather than next to the declaration so the screen that starts a
|
|
6
|
+
* job and the server that declares the list name one string, without the client
|
|
7
|
+
* bundle importing `@flowdular/sdk/server` to read it.
|
|
8
|
+
*/
|
|
9
|
+
export const MEMBER_EXPORT_LIST_ID = 'users.core.members';
|
|
@@ -25,3 +25,14 @@ export const moduleDefinition = {
|
|
|
25
25
|
|
|
26
26
|
export { USER_PERMISSIONS } from './acl/permissions.ts';
|
|
27
27
|
export type { CreateUserInput } from './services/users-service.ts';
|
|
28
|
+
export { MEMBER_EXPORT_LIST_ID } from './domain/lists.ts';
|
|
29
|
+
export { createMemberListExport } from './services/member-export.ts';
|
|
30
|
+
export {
|
|
31
|
+
createMemberImportPort,
|
|
32
|
+
MEMBER_IMPORT_PORT_KEY,
|
|
33
|
+
} from './services/member-import.ts';
|
|
34
|
+
export {
|
|
35
|
+
createMemberSearchProvider,
|
|
36
|
+
MEMBER_SEARCH_PROVIDER_KEY,
|
|
37
|
+
MEMBER_SEARCH_SCAN_LIMIT,
|
|
38
|
+
} from './services/member-search.ts';
|
|
@@ -2,10 +2,59 @@ import type {
|
|
|
2
2
|
PlatformServerComposition,
|
|
3
3
|
PlatformServerContext,
|
|
4
4
|
} from '@flowdular/sdk/modules/auth/server';
|
|
5
|
+
import {
|
|
6
|
+
EXPORT_LISTS_CAPABILITY,
|
|
7
|
+
type ExportLists,
|
|
8
|
+
} from '@flowdular/sdk/modules/exports';
|
|
9
|
+
import {
|
|
10
|
+
IMPORT_PORTS_CAPABILITY,
|
|
11
|
+
type ImportPorts,
|
|
12
|
+
} from '@flowdular/sdk/modules/import';
|
|
13
|
+
import {
|
|
14
|
+
SEARCH_PROVIDERS_CAPABILITY,
|
|
15
|
+
type SearchProviderRegistry,
|
|
16
|
+
} from '@flowdular/sdk/modules/search';
|
|
5
17
|
import { createUserRoutes } from './api/endpoints.ts';
|
|
18
|
+
import { createMemberListExport } from './services/member-export.ts';
|
|
19
|
+
import { createMemberImportPort } from './services/member-import.ts';
|
|
20
|
+
import { createMemberSearchProvider } from './services/member-search.ts';
|
|
6
21
|
|
|
7
22
|
export function createServerComposition(
|
|
8
23
|
context: PlatformServerContext,
|
|
9
24
|
): PlatformServerComposition {
|
|
10
|
-
|
|
25
|
+
/* search.core is a declared dependency, so it has composed and its registry
|
|
26
|
+
is still open. The capability stays optional all the same: a deployment
|
|
27
|
+
that leaves search out still composes this module. */
|
|
28
|
+
context.capabilities
|
|
29
|
+
.get<SearchProviderRegistry>(SEARCH_PROVIDERS_CAPABILITY)
|
|
30
|
+
?.register('users.core', [createMemberSearchProvider(context.auth)]);
|
|
31
|
+
/* Same contract for import.core: declared dependency, optional capability,
|
|
32
|
+
registration while the registry is open. */
|
|
33
|
+
context.capabilities
|
|
34
|
+
.get<ImportPorts>(IMPORT_PORTS_CAPABILITY)
|
|
35
|
+
?.register('users.core', [createMemberImportPort(context.auth)]);
|
|
36
|
+
/* And for exports.core, except that its capability is optional and an
|
|
37
|
+
optional requirement does not order its provider first, so the registry may
|
|
38
|
+
not exist yet while this module composes. It is asked for twice, once here
|
|
39
|
+
and once at start, because exports.core registers during composition and
|
|
40
|
+
seals in its own start hook, which runs after this one whenever it composed
|
|
41
|
+
after this module. Without exports.core both attempts answer nothing and
|
|
42
|
+
the screens still work. The declaration opens no database and reads no
|
|
43
|
+
member either way: the list is walked later, under the principal the job
|
|
44
|
+
was started by. */
|
|
45
|
+
let registered = false;
|
|
46
|
+
const registerLists = (): void => {
|
|
47
|
+
if (registered) return;
|
|
48
|
+
const lists = context.capabilities.get<ExportLists>(
|
|
49
|
+
EXPORT_LISTS_CAPABILITY,
|
|
50
|
+
);
|
|
51
|
+
if (!lists) return;
|
|
52
|
+
registered = true;
|
|
53
|
+
lists.register('users.core', [createMemberListExport(context.auth)]);
|
|
54
|
+
};
|
|
55
|
+
registerLists();
|
|
56
|
+
return {
|
|
57
|
+
routes: createUserRoutes(context.auth),
|
|
58
|
+
start: () => registerLists(),
|
|
59
|
+
};
|
|
11
60
|
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { defineListExport, type DefinedListExport } from '@flowdular/sdk/server';
|
|
2
|
+
import type { TenantMember } from '@flowdular/sdk/modules/auth';
|
|
3
|
+
import type { AuthRuntime } from '@flowdular/sdk/modules/auth/server';
|
|
4
|
+
import { USER_PERMISSIONS } from '../acl/permissions.ts';
|
|
5
|
+
import { MEMBER_EXPORT_LIST_ID } from '../domain/lists.ts';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* The workspace's members as a CSV export. Every read goes through the auth
|
|
9
|
+
* administration port, under the tenant of the principal the job was started
|
|
10
|
+
* by and behind the permission the Members screen itself needs, so a file can
|
|
11
|
+
* never carry a row that screen would not have shown.
|
|
12
|
+
*
|
|
13
|
+
* The walk is the port's own paged listing, so one page of L members costs one
|
|
14
|
+
* statement over L rows and an export of M members reads M rows in total. Its
|
|
15
|
+
* keyset is the account id, not the display name the unpaged roll is ordered
|
|
16
|
+
* by: an account id never changes, so a member renamed while a long walk runs
|
|
17
|
+
* cannot cross a page boundary and be written twice or skipped, and a member
|
|
18
|
+
* removed mid-walk does not strand the cursor, because the next page is
|
|
19
|
+
* whatever still sorts after the id it names.
|
|
20
|
+
*/
|
|
21
|
+
export function createMemberListExport(auth: AuthRuntime): DefinedListExport {
|
|
22
|
+
return defineListExport<TenantMember>({
|
|
23
|
+
id: MEMBER_EXPORT_LIST_ID,
|
|
24
|
+
label: 'Members',
|
|
25
|
+
permission: USER_PERMISSIONS.read,
|
|
26
|
+
columns: [
|
|
27
|
+
{ key: 'email', header: 'E-mail', value: (row) => row.email },
|
|
28
|
+
{
|
|
29
|
+
key: 'displayName',
|
|
30
|
+
header: 'Display name',
|
|
31
|
+
value: (row) => row.displayName,
|
|
32
|
+
},
|
|
33
|
+
{ key: 'role', header: 'Role', value: (row) => row.role },
|
|
34
|
+
/* This workspace's own status for the member, which is what the
|
|
35
|
+
Members screen shows; the account-level block belongs to the
|
|
36
|
+
deployment operator and is not this workspace's to report. */
|
|
37
|
+
{ key: 'status', header: 'Status', value: (row) => row.membershipStatus },
|
|
38
|
+
{
|
|
39
|
+
key: 'joinedAt',
|
|
40
|
+
header: 'Joined at',
|
|
41
|
+
value: (row) => new Date(row.createdAt),
|
|
42
|
+
},
|
|
43
|
+
],
|
|
44
|
+
page: async (principal, cursor, limit) => {
|
|
45
|
+
const page = await (
|
|
46
|
+
await auth.service()
|
|
47
|
+
).listTenantMembers(principal.tenantId, { cursor, limit });
|
|
48
|
+
return { rows: page.members, nextCursor: page.nextCursor };
|
|
49
|
+
},
|
|
50
|
+
});
|
|
51
|
+
}
|