@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
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { TagTone } from '@flowdular/sdk/ui';
|
|
2
|
+
import { activeLocale, t } from '@flowdular/sdk/client/i18n';
|
|
3
|
+
import type { ExportJobStatus } from '../domain/types.ts';
|
|
4
|
+
|
|
5
|
+
/** Epoch milliseconds as the reader's local date and time. */
|
|
6
|
+
export function timestampLabel(value: number): string {
|
|
7
|
+
return new Intl.DateTimeFormat(activeLocale(), {
|
|
8
|
+
dateStyle: 'medium',
|
|
9
|
+
timeStyle: 'short',
|
|
10
|
+
}).format(value);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export function countLabel(value: number): string {
|
|
14
|
+
return new Intl.NumberFormat(activeLocale()).format(value);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const BYTE_UNITS = ['B', 'kB', 'MB', 'GB'] as const;
|
|
18
|
+
|
|
19
|
+
/** Decimal units, the way a file manager shows a download. */
|
|
20
|
+
export function byteLabel(value: number): string {
|
|
21
|
+
let size = value;
|
|
22
|
+
let unit = 0;
|
|
23
|
+
while (size >= 1000 && unit < BYTE_UNITS.length - 1) {
|
|
24
|
+
size /= 1000;
|
|
25
|
+
unit += 1;
|
|
26
|
+
}
|
|
27
|
+
const formatted = new Intl.NumberFormat(activeLocale(), {
|
|
28
|
+
maximumFractionDigits: unit === 0 ? 0 : 1,
|
|
29
|
+
}).format(size);
|
|
30
|
+
return `${formatted} ${BYTE_UNITS[unit]}`;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export function statusLabel(status: ExportJobStatus): string {
|
|
34
|
+
return t('exports.status.' + status);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export function statusTone(status: ExportJobStatus): TagTone {
|
|
38
|
+
if (status === 'completed') return 'success';
|
|
39
|
+
if (status === 'failed') return 'danger';
|
|
40
|
+
return status === 'running' ? 'warning' : 'info';
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* A job's failure code is a stable code this module or a registered list
|
|
45
|
+
* produced. A code with a sentence of its own reads that; anything else is
|
|
46
|
+
* shown as it was recorded rather than hidden behind a generic line.
|
|
47
|
+
*/
|
|
48
|
+
export function failureLabel(code: string | null): string {
|
|
49
|
+
if (!code) return '';
|
|
50
|
+
const key = 'exports.error.code.' + code;
|
|
51
|
+
const translated = t(key);
|
|
52
|
+
return translated === key ? code : translated;
|
|
53
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { cell, createStore } from 'segment-state';
|
|
2
|
+
import type {
|
|
3
|
+
ExportJobStatus,
|
|
4
|
+
ExportJobView,
|
|
5
|
+
ExportListView,
|
|
6
|
+
} from '../domain/types.ts';
|
|
7
|
+
|
|
8
|
+
/** `denied` is a 403 the shell could not hide; `error` is everything else. */
|
|
9
|
+
export type ScreenStatus = 'idle' | 'loading' | 'denied' | 'error';
|
|
10
|
+
|
|
11
|
+
/** What the start control renders once the catalogue answered, or did not. */
|
|
12
|
+
export type StartState = 'loading' | 'denied' | 'error' | 'empty' | 'ready';
|
|
13
|
+
|
|
14
|
+
export function createExportsClientState() {
|
|
15
|
+
const store = createStore({
|
|
16
|
+
jobs: cell<readonly ExportJobView[]>([]),
|
|
17
|
+
status: cell<ScreenStatus>('idle'),
|
|
18
|
+
error: '',
|
|
19
|
+
statusFilter: cell<ExportJobStatus | ''>(''),
|
|
20
|
+
nextCursor: cell<string | null>(null),
|
|
21
|
+
/** The job whose file is being opened, so one click cannot queue two. */
|
|
22
|
+
openingId: cell<string | null>(null),
|
|
23
|
+
lists: cell<readonly ExportListView[]>([]),
|
|
24
|
+
listsStatus: cell<ScreenStatus>('loading'),
|
|
25
|
+
listsError: '',
|
|
26
|
+
selectedListId: '',
|
|
27
|
+
/** True while a start is in flight, so one click cannot queue two. */
|
|
28
|
+
starting: false,
|
|
29
|
+
});
|
|
30
|
+
return { store, state: store.state };
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* The lists the control offers. A list the reader does not hold the permission
|
|
35
|
+
* for is left out rather than offered and refused: the server decides the same
|
|
36
|
+
* way on the live principal, so offering it could only produce a 403.
|
|
37
|
+
*/
|
|
38
|
+
export function startableLists(
|
|
39
|
+
lists: readonly ExportListView[],
|
|
40
|
+
): readonly ExportListView[] {
|
|
41
|
+
return lists.filter((entry) => entry.permitted);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* One of the five states the control renders. The catalogue is read once, so
|
|
46
|
+
* `loading` is the first read alone and a refresh keeps what is on screen.
|
|
47
|
+
*/
|
|
48
|
+
export function startState(
|
|
49
|
+
status: ScreenStatus,
|
|
50
|
+
lists: readonly ExportListView[],
|
|
51
|
+
): StartState {
|
|
52
|
+
if (status === 'denied') return 'denied';
|
|
53
|
+
if (status === 'error') return 'error';
|
|
54
|
+
if (status === 'loading' && lists.length === 0) return 'loading';
|
|
55
|
+
return startableLists(lists).length === 0 ? 'empty' : 'ready';
|
|
56
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { DefinedListExport } from '@flowdular/sdk/server';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* The public cross-module surface. A module that owns a list registers it while
|
|
5
|
+
* it composes:
|
|
6
|
+
* `context.capabilities.get<ExportLists>(EXPORT_LISTS_CAPABILITY)?.register('users.core', [members])`.
|
|
7
|
+
*
|
|
8
|
+
* exports.core never reads another module's database. It walks the list through
|
|
9
|
+
* the `page` the list endpoint already implements, under the requester the job
|
|
10
|
+
* was started by, and writes what comes back.
|
|
11
|
+
*/
|
|
12
|
+
export const EXPORT_LISTS_CAPABILITY = 'exports.lists.v1';
|
|
13
|
+
|
|
14
|
+
export interface ExportLists {
|
|
15
|
+
/**
|
|
16
|
+
* Registers the lists one module owns. Every id must be that module id
|
|
17
|
+
* followed by the list key, so a module can only declare its own exports.
|
|
18
|
+
* Open while the platform composes and sealed before the first request.
|
|
19
|
+
*/
|
|
20
|
+
register(moduleId: string, exports: readonly DefinedListExport[]): void;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export const EXPORT_LIST_LIMITS = {
|
|
24
|
+
moduleId: 64,
|
|
25
|
+
/** Lists one module may register. */
|
|
26
|
+
listsPerModule: 32,
|
|
27
|
+
/** Lists the catalogue may hold at all. */
|
|
28
|
+
lists: 256,
|
|
29
|
+
} as const;
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/** The stages a job moves through; the transitions live in the service. */
|
|
2
|
+
export const EXPORT_JOB_STATUSES = [
|
|
3
|
+
'requested',
|
|
4
|
+
'running',
|
|
5
|
+
'completed',
|
|
6
|
+
'failed',
|
|
7
|
+
] as const;
|
|
8
|
+
export type ExportJobStatus = (typeof EXPORT_JOB_STATUSES)[number];
|
|
9
|
+
|
|
10
|
+
/** Longest values this module accepts; over any of them is a rejection. */
|
|
11
|
+
export const EXPORT_LIMITS = {
|
|
12
|
+
id: 64,
|
|
13
|
+
listId: 96,
|
|
14
|
+
accountId: 128,
|
|
15
|
+
objectId: 128,
|
|
16
|
+
failureCode: 64,
|
|
17
|
+
/** Serialized principal snapshot, matching the schema. */
|
|
18
|
+
json: 8_192,
|
|
19
|
+
/** Jobs one page may carry; the platform page ceiling. */
|
|
20
|
+
page: 200,
|
|
21
|
+
/** Jobs one routing pass considers. */
|
|
22
|
+
routingPage: 25,
|
|
23
|
+
} as const;
|
|
24
|
+
|
|
25
|
+
/** What a stage records when the failure carries no stable code of its own. */
|
|
26
|
+
export const EXPORT_UNEXPECTED_FAILURE = 'JOB_FAILED';
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* The acting principal as it stood when the job was started, kept so the list
|
|
30
|
+
* sees the same identity in the background stage that it would have seen in the
|
|
31
|
+
* request. Authorization is decided on the live principal at start; this
|
|
32
|
+
* snapshot carries the decision forward, it does not make one.
|
|
33
|
+
*/
|
|
34
|
+
export interface ExportRequester {
|
|
35
|
+
readonly accountId: string;
|
|
36
|
+
readonly email: string;
|
|
37
|
+
readonly displayName: string;
|
|
38
|
+
readonly role: string;
|
|
39
|
+
readonly scopes: readonly string[];
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* One registered list as the catalogue answers it. The permission the list
|
|
44
|
+
* declares is not carried: a reader needs to know whether they may export the
|
|
45
|
+
* list, not the id of the grant that decides it.
|
|
46
|
+
*/
|
|
47
|
+
export interface ExportListView {
|
|
48
|
+
readonly id: string;
|
|
49
|
+
readonly label: string;
|
|
50
|
+
/** The module that registered the list, so a reader can place it. */
|
|
51
|
+
readonly moduleId: string;
|
|
52
|
+
readonly permitted: boolean;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export interface ExportJob {
|
|
56
|
+
readonly id: string;
|
|
57
|
+
readonly tenantId: string;
|
|
58
|
+
readonly listId: string;
|
|
59
|
+
readonly status: ExportJobStatus;
|
|
60
|
+
/** Rows written, the header record excluded. */
|
|
61
|
+
readonly rowCount: number;
|
|
62
|
+
readonly byteCount: number;
|
|
63
|
+
/** The storage object holding the file; null until the job completes. */
|
|
64
|
+
readonly objectId: string | null;
|
|
65
|
+
readonly requesterAccountId: string;
|
|
66
|
+
readonly requester: ExportRequester;
|
|
67
|
+
/** The stable code behind a failed job; null in every other status. */
|
|
68
|
+
readonly failureCode: string | null;
|
|
69
|
+
readonly claimedAt: number | null;
|
|
70
|
+
readonly startedAt: number;
|
|
71
|
+
readonly completedAt: number | null;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* A job as the poll loop holds it. The claim instant is the fence every renewal
|
|
76
|
+
* of that claim is made under, so a stage can tell that its lease lapsed and the
|
|
77
|
+
* job changed hands.
|
|
78
|
+
*/
|
|
79
|
+
export type ClaimedExportJob = ExportJob & { readonly claimedAt: number };
|
|
80
|
+
|
|
81
|
+
/** What the cross-tenant routing read may see, and nothing else. */
|
|
82
|
+
export interface ExportJobRouting {
|
|
83
|
+
readonly tenantId: string;
|
|
84
|
+
readonly id: string;
|
|
85
|
+
readonly status: ExportJobStatus;
|
|
86
|
+
readonly startedAt: number;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* The job as an API response carries it. The requester snapshot is bookkeeping
|
|
91
|
+
* the list needs in a background stage and no reader of the screen does, the
|
|
92
|
+
* claim is the poll loop's own lease, and the object id addresses bytes that
|
|
93
|
+
* are only ever reached through a signed route, so none of the three crosses
|
|
94
|
+
* the wire: a job read names its requester by account id alone.
|
|
95
|
+
*/
|
|
96
|
+
export type ExportJobView = Omit<
|
|
97
|
+
ExportJob,
|
|
98
|
+
'requester' | 'claimedAt' | 'objectId'
|
|
99
|
+
> & {
|
|
100
|
+
/** Whether a file exists to open, without naming where it lives. */
|
|
101
|
+
readonly downloadable: boolean;
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
/* Every field is named rather than spread, so a field added to the job is a
|
|
105
|
+
decision taken here instead of an addition the wire makes silently. */
|
|
106
|
+
export function exportJobView(job: ExportJob): ExportJobView {
|
|
107
|
+
return {
|
|
108
|
+
id: job.id,
|
|
109
|
+
tenantId: job.tenantId,
|
|
110
|
+
listId: job.listId,
|
|
111
|
+
status: job.status,
|
|
112
|
+
rowCount: job.rowCount,
|
|
113
|
+
byteCount: job.byteCount,
|
|
114
|
+
requesterAccountId: job.requesterAccountId,
|
|
115
|
+
failureCode: job.failureCode,
|
|
116
|
+
startedAt: job.startedAt,
|
|
117
|
+
completedAt: job.completedAt,
|
|
118
|
+
downloadable: job.objectId !== null,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { ModuleManifest, RegisteredModule } from '@flowdular/sdk/contracts';
|
|
2
|
+
import manifest from '../module.json' with { type: 'json' };
|
|
3
|
+
import { EXPORTS_PERMISSIONS } from './acl/permissions.ts';
|
|
4
|
+
|
|
5
|
+
export const moduleDefinition = {
|
|
6
|
+
manifest: manifest as ModuleManifest,
|
|
7
|
+
navigation: [
|
|
8
|
+
{
|
|
9
|
+
id: 'exports.navigation',
|
|
10
|
+
label: 'Exports',
|
|
11
|
+
href: '/exports',
|
|
12
|
+
order: 45,
|
|
13
|
+
permission: EXPORTS_PERMISSIONS.read,
|
|
14
|
+
},
|
|
15
|
+
],
|
|
16
|
+
permissions: Object.values(EXPORTS_PERMISSIONS),
|
|
17
|
+
} satisfies RegisteredModule;
|
|
18
|
+
|
|
19
|
+
export { EXPORTS_PERMISSIONS } from './acl/permissions.ts';
|
|
20
|
+
|
|
21
|
+
/* The cross-module contract. A module that owns a list imports the identifier
|
|
22
|
+
and the service type from here, builds its declaration with defineListExport
|
|
23
|
+
from @flowdular/sdk/server, and registers it through the capability registry;
|
|
24
|
+
nothing else in this module is meant to be imported by another. */
|
|
25
|
+
export { EXPORT_LISTS_CAPABILITY, EXPORT_LIST_LIMITS } from './domain/lists.ts';
|
|
26
|
+
export type { ExportLists } from './domain/lists.ts';
|
|
27
|
+
|
|
28
|
+
export {
|
|
29
|
+
exportJobView,
|
|
30
|
+
EXPORT_JOB_STATUSES,
|
|
31
|
+
EXPORT_LIMITS,
|
|
32
|
+
EXPORT_UNEXPECTED_FAILURE,
|
|
33
|
+
} from './domain/types.ts';
|
|
34
|
+
export type {
|
|
35
|
+
ClaimedExportJob,
|
|
36
|
+
ExportJob,
|
|
37
|
+
ExportJobRouting,
|
|
38
|
+
ExportJobStatus,
|
|
39
|
+
ExportJobView,
|
|
40
|
+
ExportRequester,
|
|
41
|
+
} from './domain/types.ts';
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
PlatformServerComposition,
|
|
3
|
+
PlatformServerContext,
|
|
4
|
+
} from '@flowdular/sdk/modules/auth/server';
|
|
5
|
+
import {
|
|
6
|
+
DEFAULT_STORAGE_MAX_OBJECT_BYTES,
|
|
7
|
+
storageConfigFromEnvironment,
|
|
8
|
+
} from '@flowdular/sdk/storage';
|
|
9
|
+
import { EXPORT_LISTS_CAPABILITY, type ExportLists } from './domain/lists.ts';
|
|
10
|
+
import { createExportRoutes, createExportsRuntime } from './server/index.ts';
|
|
11
|
+
import { exportsDataClass } from './services/data-classes.ts';
|
|
12
|
+
import {
|
|
13
|
+
exportMaxBytes,
|
|
14
|
+
exportMaxRows,
|
|
15
|
+
EXPORTS_MODULE_SETTINGS,
|
|
16
|
+
} from './settings.ts';
|
|
17
|
+
|
|
18
|
+
export function createServerComposition(
|
|
19
|
+
context: PlatformServerContext,
|
|
20
|
+
): PlatformServerComposition {
|
|
21
|
+
const objectCeiling = storageObjectCeiling(
|
|
22
|
+
context.environment,
|
|
23
|
+
context.workspaceRoot,
|
|
24
|
+
);
|
|
25
|
+
const runtime = createExportsRuntime({
|
|
26
|
+
databases: context.databases,
|
|
27
|
+
storage: context.storage,
|
|
28
|
+
purpose:
|
|
29
|
+
context.environment.NODE_ENV === 'test'
|
|
30
|
+
? 'test'
|
|
31
|
+
: context.environment.NODE_ENV === 'production'
|
|
32
|
+
? 'runtime'
|
|
33
|
+
: 'preview',
|
|
34
|
+
maxRows: () => exportMaxRows(context.settings),
|
|
35
|
+
maxBytes: () => exportMaxBytes(context.settings),
|
|
36
|
+
maxObjectBytes: () => objectCeiling,
|
|
37
|
+
});
|
|
38
|
+
/* Registered while the platform composes, so a module that owns a list can
|
|
39
|
+
declare its export in its own composition. */
|
|
40
|
+
context.capabilities.register<ExportLists>(EXPORT_LISTS_CAPABILITY, {
|
|
41
|
+
register: (moduleId, exports) => runtime.lists.register(moduleId, exports),
|
|
42
|
+
});
|
|
43
|
+
/* The catalogue is sealed before start hooks run, so what this module holds
|
|
44
|
+
is declared here rather than on the first request. */
|
|
45
|
+
context.dataClasses.declare([
|
|
46
|
+
exportsDataClass(
|
|
47
|
+
() => runtime.repository(),
|
|
48
|
+
() => runtime.service(),
|
|
49
|
+
),
|
|
50
|
+
]);
|
|
51
|
+
return {
|
|
52
|
+
routes: createExportRoutes(context.auth, runtime),
|
|
53
|
+
settings: EXPORTS_MODULE_SETTINGS,
|
|
54
|
+
start: () => {
|
|
55
|
+
/* Every module has composed by now, so the catalogue is complete and
|
|
56
|
+
closed: a job can never be started against a list that appears
|
|
57
|
+
afterwards. */
|
|
58
|
+
runtime.lists.seal();
|
|
59
|
+
runtime.start();
|
|
60
|
+
},
|
|
61
|
+
stop: () => runtime.quiesce(),
|
|
62
|
+
dispose: () => runtime.dispose(),
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/* The ceiling the storage port enforces, read from the same configuration the
|
|
67
|
+
platform built the port from. A build or a preview composes under a NODE_ENV
|
|
68
|
+
the adapter check refuses; the port itself never reached a running platform
|
|
69
|
+
with that configuration, so the default ceiling is the one it would apply. */
|
|
70
|
+
export function storageObjectCeiling(
|
|
71
|
+
environment: NodeJS.ProcessEnv,
|
|
72
|
+
workspaceRoot: string,
|
|
73
|
+
): number {
|
|
74
|
+
try {
|
|
75
|
+
return storageConfigFromEnvironment(environment, workspaceRoot)
|
|
76
|
+
.maxObjectBytes;
|
|
77
|
+
} catch {
|
|
78
|
+
return DEFAULT_STORAGE_MAX_OBJECT_BYTES;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
export { createExportRoutes, endpoints } from '../api/endpoints.ts';
|
|
2
|
+
export {
|
|
3
|
+
DatabaseExportRepository,
|
|
4
|
+
migrateExportsDatabase,
|
|
5
|
+
} from '../services/database-repository.ts';
|
|
6
|
+
export type { ExportDatabaseHandles } from '../services/database-repository.ts';
|
|
7
|
+
export {
|
|
8
|
+
ExportService,
|
|
9
|
+
ExportServiceError,
|
|
10
|
+
EXPORT_CSV_CONTENT_TYPE,
|
|
11
|
+
EXPORT_OWNER_MODULE,
|
|
12
|
+
EXPORT_READ_URL_SECONDS,
|
|
13
|
+
} from '../services/export-service.ts';
|
|
14
|
+
export type { ExportServiceOptions } from '../services/export-service.ts';
|
|
15
|
+
export {
|
|
16
|
+
createExportJobRunner,
|
|
17
|
+
EXPORT_CLAIM_TIMEOUT_MS,
|
|
18
|
+
EXPORT_POLL_INTERVAL_MS,
|
|
19
|
+
} from '../services/export-runner.ts';
|
|
20
|
+
export type { ExportRunnerOptions } from '../services/export-runner.ts';
|
|
21
|
+
export {
|
|
22
|
+
createExportListRegistry,
|
|
23
|
+
ExportListError,
|
|
24
|
+
} from '../services/list-registry.ts';
|
|
25
|
+
export type {
|
|
26
|
+
ExportListRegistry,
|
|
27
|
+
RegisteredExportList,
|
|
28
|
+
} from '../services/list-registry.ts';
|
|
29
|
+
export {
|
|
30
|
+
exportsDataClass,
|
|
31
|
+
EXPORT_DATA_CLASS_KEY,
|
|
32
|
+
EXPORT_RETENTION_DAYS,
|
|
33
|
+
EXPORT_SWEEP_JOBS,
|
|
34
|
+
} from '../services/data-classes.ts';
|
|
35
|
+
export type {
|
|
36
|
+
ExportJobCursor,
|
|
37
|
+
ExportJobPage,
|
|
38
|
+
ExportJobQuery,
|
|
39
|
+
ExportRepository,
|
|
40
|
+
ExportSweepInput,
|
|
41
|
+
SettleExportJobInput,
|
|
42
|
+
} from '../services/repository.ts';
|
|
43
|
+
export { databaseMigrations } from '../services/migration.ts';
|
|
44
|
+
export {
|
|
45
|
+
exportMaxBytes,
|
|
46
|
+
exportMaxRows,
|
|
47
|
+
EXPORTS_MODULE_SETTINGS,
|
|
48
|
+
} from '../settings.ts';
|
|
49
|
+
export { createExportsRuntime } from './runtime.ts';
|
|
50
|
+
export type { ExportsRuntime, ExportsRuntimeOptions } from './runtime.ts';
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
DatabaseAdapterLease,
|
|
3
|
+
DatabaseProvider,
|
|
4
|
+
DatabaseProviderRequest,
|
|
5
|
+
} from '@flowdular/sdk/database';
|
|
6
|
+
import {
|
|
7
|
+
DATABASE_CAPABILITY_IDS,
|
|
8
|
+
DATABASE_DIALECT_IDS,
|
|
9
|
+
} from '@flowdular/sdk/database';
|
|
10
|
+
import type { StoragePort } from '@flowdular/sdk/storage';
|
|
11
|
+
import { ExportService } from '../services/export-service.ts';
|
|
12
|
+
import { createExportJobRunner } from '../services/export-runner.ts';
|
|
13
|
+
import {
|
|
14
|
+
DatabaseExportRepository,
|
|
15
|
+
migrateExportsDatabase,
|
|
16
|
+
} from '../services/database-repository.ts';
|
|
17
|
+
import type { ExportRepository } from '../services/repository.ts';
|
|
18
|
+
import {
|
|
19
|
+
createExportListRegistry,
|
|
20
|
+
type ExportListRegistry,
|
|
21
|
+
} from '../services/list-registry.ts';
|
|
22
|
+
|
|
23
|
+
export interface ExportsRuntimeOptions {
|
|
24
|
+
/** Platform-owned provider. Modules never receive a DSN or a pool. */
|
|
25
|
+
readonly databases: DatabaseProvider;
|
|
26
|
+
readonly purpose: Exclude<DatabaseProviderRequest['purpose'], 'migration'>;
|
|
27
|
+
/** Platform-owned object storage; this module writes under its own id. */
|
|
28
|
+
readonly storage: StoragePort;
|
|
29
|
+
readonly maxRows: () => number;
|
|
30
|
+
readonly maxBytes: () => number;
|
|
31
|
+
/** The object ceiling the platform configured the storage port with. */
|
|
32
|
+
readonly maxObjectBytes: () => number;
|
|
33
|
+
/** Test seams: an already migrated repository, and a faster poll. */
|
|
34
|
+
readonly repository?: ExportRepository;
|
|
35
|
+
readonly pollIntervalMs?: number;
|
|
36
|
+
readonly claimTimeoutMs?: number;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export interface ExportsRuntime {
|
|
40
|
+
readonly lists: ExportListRegistry;
|
|
41
|
+
service(): Promise<ExportService>;
|
|
42
|
+
repository(): Promise<ExportRepository>;
|
|
43
|
+
/** One poll pass, for a test that must not wait on a timer. */
|
|
44
|
+
tick(): Promise<void>;
|
|
45
|
+
start(): void;
|
|
46
|
+
stop(): void;
|
|
47
|
+
quiesce(): Promise<void>;
|
|
48
|
+
dispose(): Promise<void>;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export function createExportsRuntime(
|
|
52
|
+
options: ExportsRuntimeOptions,
|
|
53
|
+
): ExportsRuntime {
|
|
54
|
+
const lists = createExportListRegistry();
|
|
55
|
+
let disposed = false;
|
|
56
|
+
let leases: DatabaseAdapterLease[] = [];
|
|
57
|
+
let repositoryPromise: Promise<ExportRepository> | undefined;
|
|
58
|
+
let servicePromise: Promise<ExportService> | undefined;
|
|
59
|
+
|
|
60
|
+
/* Schema work runs on the migrator role and that lease is released before the
|
|
61
|
+
runtime one is taken, so request handling never holds a schema owner. */
|
|
62
|
+
const openRepository = async (): Promise<ExportRepository> => {
|
|
63
|
+
if (options.repository) return options.repository;
|
|
64
|
+
const migrationLease = await options.databases.acquire({
|
|
65
|
+
namespace: 'exports.core',
|
|
66
|
+
purpose: 'migration',
|
|
67
|
+
requirements: {
|
|
68
|
+
dialectIds: [DATABASE_DIALECT_IDS.postgresql],
|
|
69
|
+
capabilities: [
|
|
70
|
+
DATABASE_CAPABILITY_IDS.MIGRATION_LOCK,
|
|
71
|
+
DATABASE_CAPABILITY_IDS.SCHEMA_INTROSPECTION,
|
|
72
|
+
DATABASE_CAPABILITY_IDS.TRANSACTIONAL_DDL,
|
|
73
|
+
],
|
|
74
|
+
},
|
|
75
|
+
});
|
|
76
|
+
try {
|
|
77
|
+
await migrateExportsDatabase(migrationLease.database);
|
|
78
|
+
} finally {
|
|
79
|
+
await migrationLease.release();
|
|
80
|
+
}
|
|
81
|
+
const acquire = (purpose: DatabaseProviderRequest['purpose']) =>
|
|
82
|
+
options.databases.acquire({
|
|
83
|
+
namespace: 'exports.core',
|
|
84
|
+
purpose,
|
|
85
|
+
requirements: {
|
|
86
|
+
dialectIds: [DATABASE_DIALECT_IDS.postgresql],
|
|
87
|
+
capabilities: [DATABASE_CAPABILITY_IDS.TRANSACTIONS],
|
|
88
|
+
},
|
|
89
|
+
});
|
|
90
|
+
const runtimeLease = await acquire(options.purpose);
|
|
91
|
+
/* The job poll reads across tenants; every write that follows uses the
|
|
92
|
+
tenant carried by the routing row it returned. */
|
|
93
|
+
const backgroundLease = await acquire('background');
|
|
94
|
+
leases = [runtimeLease, backgroundLease];
|
|
95
|
+
return new DatabaseExportRepository({
|
|
96
|
+
runtime: runtimeLease.database,
|
|
97
|
+
background: backgroundLease.database,
|
|
98
|
+
});
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
const repository = (): Promise<ExportRepository> => {
|
|
102
|
+
if (disposed)
|
|
103
|
+
return Promise.reject(new Error('Exports runtime is disposed.'));
|
|
104
|
+
repositoryPromise ??= openRepository();
|
|
105
|
+
return repositoryPromise;
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
const service = (): Promise<ExportService> => {
|
|
109
|
+
if (disposed)
|
|
110
|
+
return Promise.reject(new Error('Exports runtime is disposed.'));
|
|
111
|
+
servicePromise ??= repository().then(
|
|
112
|
+
(resolved) =>
|
|
113
|
+
new ExportService({
|
|
114
|
+
repository: resolved,
|
|
115
|
+
lists,
|
|
116
|
+
storage: options.storage,
|
|
117
|
+
maxRows: options.maxRows,
|
|
118
|
+
maxBytes: options.maxBytes,
|
|
119
|
+
maxObjectBytes: options.maxObjectBytes,
|
|
120
|
+
}),
|
|
121
|
+
);
|
|
122
|
+
return servicePromise;
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
/* The platform runner owns the loop: the interval and its unref, the guard
|
|
126
|
+
against overlapping passes, the bound on claims, the renewal timer, the
|
|
127
|
+
backoff and the drain. This module keeps its table, its statements and its
|
|
128
|
+
stale window. */
|
|
129
|
+
const jobs = createExportJobRunner({
|
|
130
|
+
repository,
|
|
131
|
+
service,
|
|
132
|
+
pollIntervalMs: options.pollIntervalMs,
|
|
133
|
+
claimTimeoutMs: options.claimTimeoutMs,
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
return {
|
|
137
|
+
lists,
|
|
138
|
+
service,
|
|
139
|
+
repository,
|
|
140
|
+
async tick() {
|
|
141
|
+
await jobs.tick();
|
|
142
|
+
},
|
|
143
|
+
start: () => jobs.start(),
|
|
144
|
+
stop: () => jobs.stop(),
|
|
145
|
+
quiesce: () => jobs.quiesce(),
|
|
146
|
+
async dispose() {
|
|
147
|
+
if (disposed) return;
|
|
148
|
+
disposed = true;
|
|
149
|
+
await jobs.dispose();
|
|
150
|
+
/* An open still in flight would assign its leases after this read, so
|
|
151
|
+
settle it first; a failed open must not surface as an unhandled
|
|
152
|
+
rejection during teardown. */
|
|
153
|
+
await repositoryPromise?.catch(() => undefined);
|
|
154
|
+
for (const lease of leases) await lease.release();
|
|
155
|
+
leases = [];
|
|
156
|
+
repositoryPromise = undefined;
|
|
157
|
+
servicePromise = undefined;
|
|
158
|
+
},
|
|
159
|
+
};
|
|
160
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import type { DataClassDeclaration } from '@flowdular/sdk/kernel';
|
|
2
|
+
import type { ExportService } from './export-service.ts';
|
|
3
|
+
import type { ExportRepository } from './repository.ts';
|
|
4
|
+
|
|
5
|
+
/** The class id is `exports.core.jobs`. */
|
|
6
|
+
export const EXPORT_DATA_CLASS_KEY = 'jobs';
|
|
7
|
+
|
|
8
|
+
export const EXPORT_RETENTION_DAYS = 30;
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Jobs one pass may remove. Each carries one stored file, so the bound on jobs
|
|
12
|
+
* is what keeps the storage work of a pass bounded as well.
|
|
13
|
+
*/
|
|
14
|
+
export const EXPORT_SWEEP_JOBS = 200;
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* What this module holds: the export jobs of one workspace and the files they
|
|
18
|
+
* name. The rows of the exported lists belong to the modules that own them and
|
|
19
|
+
* are swept by their own classes, never by this one.
|
|
20
|
+
*
|
|
21
|
+
* Only a settled job is swept. A job still running is work in flight, and
|
|
22
|
+
* removing it under the poll loop would leave a stage writing a file against a
|
|
23
|
+
* row that is gone.
|
|
24
|
+
*/
|
|
25
|
+
export function exportsDataClass(
|
|
26
|
+
repository: () => Promise<ExportRepository>,
|
|
27
|
+
service: () => Promise<ExportService>,
|
|
28
|
+
): DataClassDeclaration {
|
|
29
|
+
return {
|
|
30
|
+
key: EXPORT_DATA_CLASS_KEY,
|
|
31
|
+
label: 'Export jobs',
|
|
32
|
+
defaultRetentionDays: EXPORT_RETENTION_DAYS,
|
|
33
|
+
exportable: true,
|
|
34
|
+
sweep: async ({ tenantId, cutoff, limit }) => {
|
|
35
|
+
const open = await repository();
|
|
36
|
+
/* The file goes before the row it belongs to, under the row lock. An
|
|
37
|
+
interrupted pass then leaves a row naming a file that is gone, which
|
|
38
|
+
the next pass removes and a read answers as gone; the other order
|
|
39
|
+
would leave a file nothing references and no pass could ever find. */
|
|
40
|
+
const removed = await open.sweepJobs(
|
|
41
|
+
tenantId,
|
|
42
|
+
{
|
|
43
|
+
settledBefore: cutoff.getTime(),
|
|
44
|
+
/* The platform's number is the caller's; this is the module's own
|
|
45
|
+
bound on one pass. */
|
|
46
|
+
limit: Math.min(Math.max(Math.trunc(limit), 1), EXPORT_SWEEP_JOBS),
|
|
47
|
+
},
|
|
48
|
+
async (objectIds) =>
|
|
49
|
+
(await service()).discardObjects(tenantId, objectIds),
|
|
50
|
+
);
|
|
51
|
+
return { removed };
|
|
52
|
+
},
|
|
53
|
+
/* Metadata only. The requester snapshot is bookkeeping for a background
|
|
54
|
+
stage, and the exported files are the lists' own data, already covered
|
|
55
|
+
by the classes of the modules that own them. */
|
|
56
|
+
export: async ({ tenantId, sink }) =>
|
|
57
|
+
(await repository()).exportJobs(tenantId, sink),
|
|
58
|
+
};
|
|
59
|
+
}
|