@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,117 @@
|
|
|
1
|
+
import type { DatabaseMigration } from '@flowdular/sdk/database';
|
|
2
|
+
import {
|
|
3
|
+
migrationObjectState,
|
|
4
|
+
postgresTenantTableState,
|
|
5
|
+
} from '@flowdular/sdk/database';
|
|
6
|
+
|
|
7
|
+
/* Mirrors migrations/0001_documents_core.up.sql byte for byte;
|
|
8
|
+
tests/migrations.test.ts fails on drift. */
|
|
9
|
+
export const DOCUMENTS_MIGRATION_001 = `CREATE TABLE IF NOT EXISTS documents_files (
|
|
10
|
+
id TEXT PRIMARY KEY,
|
|
11
|
+
tenant_id TEXT NOT NULL,
|
|
12
|
+
owner_module TEXT NOT NULL,
|
|
13
|
+
record_ref TEXT NOT NULL,
|
|
14
|
+
filename TEXT NOT NULL,
|
|
15
|
+
content_type TEXT NOT NULL,
|
|
16
|
+
bytes BIGINT NOT NULL CHECK (bytes >= 0),
|
|
17
|
+
checksum TEXT,
|
|
18
|
+
storage_key TEXT NOT NULL,
|
|
19
|
+
uploader_account_id TEXT NOT NULL,
|
|
20
|
+
scan TEXT NOT NULL CHECK (scan IN ('unscanned', 'clean', 'infected')),
|
|
21
|
+
status TEXT NOT NULL CHECK (status IN ('stored', 'deleted')),
|
|
22
|
+
description TEXT,
|
|
23
|
+
created_at BIGINT NOT NULL
|
|
24
|
+
);
|
|
25
|
+
CREATE INDEX IF NOT EXISTS documents_files_tenant_created_idx
|
|
26
|
+
ON documents_files (tenant_id, created_at DESC, id);
|
|
27
|
+
-- The owning module and its record reference are how another module reaches its
|
|
28
|
+
-- attachments, so the pair leads the index the capability reads.
|
|
29
|
+
CREATE INDEX IF NOT EXISTS documents_files_record_idx
|
|
30
|
+
ON documents_files (tenant_id, owner_module, record_ref, created_at DESC, id);
|
|
31
|
+
-- One row per object. A second row on one key would double count the quota and
|
|
32
|
+
-- leave the delete order pointing at bytes another row still claims.
|
|
33
|
+
CREATE UNIQUE INDEX IF NOT EXISTS documents_files_storage_key_idx
|
|
34
|
+
ON documents_files (tenant_id, storage_key);
|
|
35
|
+
-- The workspace quota is the sum of what is still stored, so the aggregate
|
|
36
|
+
-- reads this partial index instead of walking the workspace's rows.
|
|
37
|
+
CREATE INDEX IF NOT EXISTS documents_files_usage_idx
|
|
38
|
+
ON documents_files (tenant_id, bytes) WHERE status = 'stored';
|
|
39
|
+
ALTER TABLE documents_files ENABLE ROW LEVEL SECURITY;
|
|
40
|
+
ALTER TABLE documents_files FORCE ROW LEVEL SECURITY;
|
|
41
|
+
CREATE POLICY documents_files_tenant_policy ON documents_files
|
|
42
|
+
USING (tenant_id = current_setting('coreloom.tenant_id', true))
|
|
43
|
+
WITH CHECK (tenant_id = current_setting('coreloom.tenant_id', true));
|
|
44
|
+
`;
|
|
45
|
+
|
|
46
|
+
/* Mirrors migrations/0002_documents_files_page.up.sql byte for byte. */
|
|
47
|
+
export const DOCUMENTS_MIGRATION_002 = `-- A page of documents is keyed on (created_at, id) in one direction, so the
|
|
48
|
+
-- index carries both columns descending. The index shipped with 0001 orders id
|
|
49
|
+
-- ascending under a descending created_at, which no scan direction turns into
|
|
50
|
+
-- the order a keyset page walks.
|
|
51
|
+
CREATE INDEX IF NOT EXISTS documents_files_page_idx
|
|
52
|
+
ON documents_files (tenant_id, created_at DESC, id DESC);
|
|
53
|
+
`;
|
|
54
|
+
|
|
55
|
+
/* Mirrors migrations/0003_documents_rotation_inventory.up.sql byte for byte. */
|
|
56
|
+
export const DOCUMENTS_MIGRATION_003 = `-- The storage key rotation has to find the workspaces that still hold objects
|
|
57
|
+
-- before it knows which objects those are, so the cross-tenant role may count
|
|
58
|
+
-- stored rows by workspace and nothing else: the storage key, the record and
|
|
59
|
+
-- the file name stay invisible to it, and every object it names is read again
|
|
60
|
+
-- under the workspace that row named. PostgreSQL checks column privileges in
|
|
61
|
+
-- WHERE too, so \`status\` is part of the grant.
|
|
62
|
+
DO $$
|
|
63
|
+
BEGIN
|
|
64
|
+
IF NOT EXISTS (SELECT 1 FROM pg_roles WHERE rolname = 'coreloom_background') THEN
|
|
65
|
+
RAISE EXCEPTION 'The coreloom_background role must exist before this migration.';
|
|
66
|
+
END IF;
|
|
67
|
+
END
|
|
68
|
+
$$;
|
|
69
|
+
CREATE POLICY documents_files_background_policy ON documents_files
|
|
70
|
+
FOR SELECT TO coreloom_background
|
|
71
|
+
USING (status = 'stored');
|
|
72
|
+
REVOKE SELECT ON documents_files FROM coreloom_background;
|
|
73
|
+
GRANT SELECT (tenant_id, status) ON documents_files TO coreloom_background;
|
|
74
|
+
`;
|
|
75
|
+
|
|
76
|
+
export const databaseMigrations: readonly DatabaseMigration[] = [
|
|
77
|
+
{
|
|
78
|
+
id: '0001_documents_core',
|
|
79
|
+
sql: { postgresql: DOCUMENTS_MIGRATION_001 },
|
|
80
|
+
inspectExisting: (database) =>
|
|
81
|
+
postgresTenantTableState(
|
|
82
|
+
database,
|
|
83
|
+
'documents_files',
|
|
84
|
+
'documents_files_tenant_policy',
|
|
85
|
+
[
|
|
86
|
+
() => database.schema.hasIndex('documents_files_tenant_created_idx'),
|
|
87
|
+
() => database.schema.hasIndex('documents_files_record_idx'),
|
|
88
|
+
() => database.schema.hasIndex('documents_files_storage_key_idx'),
|
|
89
|
+
() => database.schema.hasIndex('documents_files_usage_idx'),
|
|
90
|
+
],
|
|
91
|
+
),
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
id: '0002_documents_files_page',
|
|
95
|
+
sql: { postgresql: DOCUMENTS_MIGRATION_002 },
|
|
96
|
+
/* The table is 0001's; this migration owns one index, so a database that
|
|
97
|
+
already carries it is adopted and one that does not runs it. */
|
|
98
|
+
inspectExisting: (database) =>
|
|
99
|
+
migrationObjectState([
|
|
100
|
+
() => database.schema.hasIndex('documents_files_page_idx'),
|
|
101
|
+
]),
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
id: '0003_documents_rotation_inventory',
|
|
105
|
+
sql: { postgresql: DOCUMENTS_MIGRATION_003 },
|
|
106
|
+
/* A policy and a column grant leave no schema object behind, so the
|
|
107
|
+
privilege itself is what proves this migration ran. */
|
|
108
|
+
inspectExisting: async (database) => {
|
|
109
|
+
const result = await database.query<{ granted: boolean }>({
|
|
110
|
+
text: `SELECT CASE WHEN to_regclass('documents_files') IS NOT NULL THEN
|
|
111
|
+
has_column_privilege('coreloom_background', 'documents_files', 'status', 'SELECT')
|
|
112
|
+
ELSE false END AS granted`,
|
|
113
|
+
});
|
|
114
|
+
return result.rows[0]?.granted === true ? 'complete' : 'absent';
|
|
115
|
+
},
|
|
116
|
+
},
|
|
117
|
+
];
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { DocumentFilters, DocumentsFile } from '../domain/types.ts';
|
|
2
|
+
|
|
3
|
+
/** The row order an export walks: creation time, then id to break a tie. */
|
|
4
|
+
export interface DocumentPageCursor {
|
|
5
|
+
readonly createdAt: number;
|
|
6
|
+
readonly id: string;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* The async, database-agnostic port. Every read is bounded by a limit the
|
|
11
|
+
* caller states, and every method carries the tenant id the transaction binds.
|
|
12
|
+
*/
|
|
13
|
+
export interface DocumentsRepository {
|
|
14
|
+
/**
|
|
15
|
+
* Newest first: what the workspace still holds, plus its infected refusals.
|
|
16
|
+
* `after` is the keyset of the last row the caller saw, so a screen pages
|
|
17
|
+
* without an offset over rows another upload can move.
|
|
18
|
+
*/
|
|
19
|
+
list(
|
|
20
|
+
tenantId: string,
|
|
21
|
+
filters: DocumentFilters,
|
|
22
|
+
limit: number,
|
|
23
|
+
after?: DocumentPageCursor | null,
|
|
24
|
+
): Promise<readonly DocumentsFile[]>;
|
|
25
|
+
/**
|
|
26
|
+
* Every row of one workspace, oldest first, paged by the keyset of the last
|
|
27
|
+
* row a caller saw. Unlike `list` it hides nothing: an export of what the
|
|
28
|
+
* workspace holds includes the deleted rows that are its trail.
|
|
29
|
+
*/
|
|
30
|
+
listForExport(
|
|
31
|
+
tenantId: string,
|
|
32
|
+
after: DocumentPageCursor | null,
|
|
33
|
+
limit: number,
|
|
34
|
+
): Promise<readonly DocumentsFile[]>;
|
|
35
|
+
find(tenantId: string, id: string): Promise<DocumentsFile | null>;
|
|
36
|
+
/** The same row, reached only through the reference its owner module knows. */
|
|
37
|
+
findAttached(
|
|
38
|
+
tenantId: string,
|
|
39
|
+
ownerModule: string,
|
|
40
|
+
recordRef: string,
|
|
41
|
+
id: string,
|
|
42
|
+
): Promise<DocumentsFile | null>;
|
|
43
|
+
create(record: DocumentsFile): Promise<DocumentsFile>;
|
|
44
|
+
/**
|
|
45
|
+
* Locks the stored row, runs `discard` while it is held, then marks the row
|
|
46
|
+
* deleted. Null when it was already deleted or never existed, in which case
|
|
47
|
+
* `discard` does not run. The lock orders the delete against a pass that
|
|
48
|
+
* rewrites the object under the same lock, so neither can leave an object
|
|
49
|
+
* the other does not see.
|
|
50
|
+
*/
|
|
51
|
+
markDeleted(
|
|
52
|
+
tenantId: string,
|
|
53
|
+
id: string,
|
|
54
|
+
discard: () => Promise<void>,
|
|
55
|
+
): Promise<DocumentsFile | null>;
|
|
56
|
+
/** Bytes the workspace still stores; the quota is measured against it. */
|
|
57
|
+
storedBytes(tenantId: string): Promise<number>;
|
|
58
|
+
}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import type { DatabaseHandle } from '@flowdular/sdk/database';
|
|
2
|
+
import type {
|
|
3
|
+
StorageObjectRef,
|
|
4
|
+
StorageResealCount,
|
|
5
|
+
StorageResealPort,
|
|
6
|
+
} from '@flowdular/sdk/storage';
|
|
7
|
+
|
|
8
|
+
/** Objects walked inside one tenant-scoped transaction. */
|
|
9
|
+
export const STORAGE_ROTATION_BATCH = 200;
|
|
10
|
+
|
|
11
|
+
export const STORAGE_ROTATION_TABLE = 'documents_files';
|
|
12
|
+
|
|
13
|
+
export interface StorageRotationReport {
|
|
14
|
+
readonly table: string;
|
|
15
|
+
/** Key id every object should end on: the current key of the storage ring. */
|
|
16
|
+
readonly currentKeyId: string;
|
|
17
|
+
readonly counts: readonly StorageResealCount[];
|
|
18
|
+
readonly tenants: number;
|
|
19
|
+
/** Stored rows the pass walked. */
|
|
20
|
+
readonly objects: number;
|
|
21
|
+
/** Objects on a retired key the ring still holds when the run started. */
|
|
22
|
+
readonly stale: number;
|
|
23
|
+
readonly resealed: number;
|
|
24
|
+
/** Objects under a key id the ring does not hold; left as they are. */
|
|
25
|
+
readonly unknown: number;
|
|
26
|
+
/** Objects that failed authentication; left as they are. */
|
|
27
|
+
readonly refused: number;
|
|
28
|
+
/** Stored rows whose object the store no longer holds. */
|
|
29
|
+
readonly missing: number;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export interface StorageRotationOptions {
|
|
33
|
+
/** Tenant-scoped handle. Every row is read on it. */
|
|
34
|
+
readonly runtime: DatabaseHandle;
|
|
35
|
+
/** Cross-tenant handle. It is granted the tenant id and the status and nothing else. */
|
|
36
|
+
readonly background: DatabaseHandle;
|
|
37
|
+
readonly storage: StorageResealPort;
|
|
38
|
+
readonly apply?: boolean;
|
|
39
|
+
readonly batchSize?: number;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const SQL = {
|
|
43
|
+
tenants: `SELECT tenant_id, count(*) AS row_count
|
|
44
|
+
FROM documents_files
|
|
45
|
+
WHERE status = 'stored'
|
|
46
|
+
GROUP BY tenant_id
|
|
47
|
+
ORDER BY tenant_id`,
|
|
48
|
+
/* Paged by primary key. The rows are locked while their objects are
|
|
49
|
+
rewritten, so a delete that marks one of them waits for the batch and
|
|
50
|
+
then removes the re-sealed object instead of racing its rewrite. */
|
|
51
|
+
batch: `SELECT id, storage_key
|
|
52
|
+
FROM documents_files
|
|
53
|
+
WHERE tenant_id = $1 AND status = 'stored' AND id > $2
|
|
54
|
+
ORDER BY id
|
|
55
|
+
LIMIT $3
|
|
56
|
+
FOR UPDATE`,
|
|
57
|
+
inventoryBatch: `SELECT id, storage_key
|
|
58
|
+
FROM documents_files
|
|
59
|
+
WHERE tenant_id = $1 AND status = 'stored' AND id > $2
|
|
60
|
+
ORDER BY id
|
|
61
|
+
LIMIT $3`,
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
function count(value: number | bigint | string): number {
|
|
65
|
+
const normalized = Number(value);
|
|
66
|
+
if (!Number.isSafeInteger(normalized)) {
|
|
67
|
+
throw new Error('The documents database returned an invalid count.');
|
|
68
|
+
}
|
|
69
|
+
return normalized;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/* The row is the inventory, and its key names the tenant it was written under;
|
|
73
|
+
a row whose key names another tenant is a defect, not an object to rewrite. */
|
|
74
|
+
function referenceOf(tenantId: string, storageKey: string): StorageObjectRef {
|
|
75
|
+
const [tenant, moduleId, objectId, ...rest] = storageKey.split('/');
|
|
76
|
+
if (tenant !== tenantId || !moduleId || !objectId || rest.length > 0) {
|
|
77
|
+
throw new Error(
|
|
78
|
+
`A documents_files row of ${tenantId} names the storage key ${storageKey}, which is not one of its objects.`,
|
|
79
|
+
);
|
|
80
|
+
}
|
|
81
|
+
return { tenantId, moduleId, objectId };
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Re-seals every stored document object that is not on the current storage
|
|
86
|
+
* key. The workspaces are listed once on the cross-tenant role, and each batch
|
|
87
|
+
* of rows is read under its own tenant; the objects they name are read from
|
|
88
|
+
* the store, and the stale ones rewritten in place. It is idempotent: a second
|
|
89
|
+
* run finds nothing to do.
|
|
90
|
+
*/
|
|
91
|
+
export async function rotateDocumentObjects(
|
|
92
|
+
options: StorageRotationOptions,
|
|
93
|
+
): Promise<StorageRotationReport> {
|
|
94
|
+
const apply = options.apply === true;
|
|
95
|
+
const batchSize = options.batchSize ?? STORAGE_ROTATION_BATCH;
|
|
96
|
+
const inventory = await options.background.transaction(
|
|
97
|
+
(transaction) =>
|
|
98
|
+
transaction.query<{
|
|
99
|
+
tenant_id: string;
|
|
100
|
+
row_count: number | bigint | string;
|
|
101
|
+
}>({ text: SQL.tenants }),
|
|
102
|
+
{ access: 'read' },
|
|
103
|
+
);
|
|
104
|
+
const counts = new Map<string, number>();
|
|
105
|
+
let objects = 0;
|
|
106
|
+
let stale = 0;
|
|
107
|
+
let resealed = 0;
|
|
108
|
+
let unknown = 0;
|
|
109
|
+
let refused = 0;
|
|
110
|
+
let missing = 0;
|
|
111
|
+
for (const { tenant_id: tenantId, row_count: rowCount } of inventory.rows) {
|
|
112
|
+
objects += count(rowCount);
|
|
113
|
+
let cursor = '';
|
|
114
|
+
for (;;) {
|
|
115
|
+
const batch = await options.runtime.transaction(
|
|
116
|
+
async (transaction) => {
|
|
117
|
+
const rows = (
|
|
118
|
+
await transaction.query<{ id: string; storage_key: string }>({
|
|
119
|
+
text: apply ? SQL.batch : SQL.inventoryBatch,
|
|
120
|
+
parameters: [tenantId, cursor, batchSize],
|
|
121
|
+
})
|
|
122
|
+
).rows;
|
|
123
|
+
const report = await options.storage.reseal(
|
|
124
|
+
rows.map((row) => referenceOf(tenantId, row.storage_key)),
|
|
125
|
+
{ apply },
|
|
126
|
+
);
|
|
127
|
+
return { read: rows.length, last: rows.at(-1)?.id, report };
|
|
128
|
+
},
|
|
129
|
+
{ access: apply ? 'write' : 'read', tenantId },
|
|
130
|
+
);
|
|
131
|
+
for (const entry of batch.report.counts) {
|
|
132
|
+
counts.set(entry.keyId, (counts.get(entry.keyId) ?? 0) + entry.objects);
|
|
133
|
+
}
|
|
134
|
+
stale += batch.report.stale;
|
|
135
|
+
resealed += batch.report.resealed;
|
|
136
|
+
unknown += batch.report.unknown;
|
|
137
|
+
refused += batch.report.refused;
|
|
138
|
+
missing += batch.report.missing;
|
|
139
|
+
if (batch.read < batchSize || batch.last === undefined) break;
|
|
140
|
+
cursor = batch.last;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return {
|
|
144
|
+
table: STORAGE_ROTATION_TABLE,
|
|
145
|
+
currentKeyId: options.storage.keyId,
|
|
146
|
+
counts: [...counts]
|
|
147
|
+
.sort(([left], [right]) => (left < right ? -1 : left > right ? 1 : 0))
|
|
148
|
+
.map(([keyId, total]) => ({ keyId, objects: total })),
|
|
149
|
+
tenants: inventory.rows.length,
|
|
150
|
+
objects,
|
|
151
|
+
stale,
|
|
152
|
+
resealed,
|
|
153
|
+
unknown,
|
|
154
|
+
refused,
|
|
155
|
+
missing,
|
|
156
|
+
};
|
|
157
|
+
}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import {
|
|
2
|
+
defineModuleSettings,
|
|
3
|
+
PLATFORM_SETTINGS_TENANT,
|
|
4
|
+
type ModuleSettingsRuntime,
|
|
5
|
+
} from '@flowdular/sdk/kernel';
|
|
6
|
+
import {
|
|
7
|
+
DEFAULT_STORAGE_MAX_OBJECT_BYTES,
|
|
8
|
+
storageConfigFromEnvironment,
|
|
9
|
+
STORAGE_READ_URL_MAX_SECONDS,
|
|
10
|
+
} from '@flowdular/sdk/storage';
|
|
11
|
+
|
|
12
|
+
export const DOCUMENTS_MODULE_ID = 'documents.core';
|
|
13
|
+
|
|
14
|
+
export const DEFAULT_DOCUMENTS_QUOTA_BYTES = 10 * 1024 * 1024 * 1024;
|
|
15
|
+
export const DEFAULT_DOCUMENTS_READ_URL_SECONDS = 300;
|
|
16
|
+
export const MIN_DOCUMENTS_READ_URL_SECONDS = 30;
|
|
17
|
+
/* A quota is a workspace bound, not a licence: a terabyte is far past what the
|
|
18
|
+
25 MB object limit and one workspace's records reach, and a larger number is
|
|
19
|
+
a mistake rather than a policy. */
|
|
20
|
+
export const MAX_DOCUMENTS_QUOTA_BYTES = 1024 * 1024 * 1024 * 1024;
|
|
21
|
+
|
|
22
|
+
export const DOCUMENTS_MODULE_SETTINGS = defineModuleSettings({
|
|
23
|
+
moduleId: DOCUMENTS_MODULE_ID,
|
|
24
|
+
settings: {
|
|
25
|
+
quotaBytes: {
|
|
26
|
+
type: 'number',
|
|
27
|
+
defaultValue: DEFAULT_DOCUMENTS_QUOTA_BYTES,
|
|
28
|
+
min: 0,
|
|
29
|
+
max: MAX_DOCUMENTS_QUOTA_BYTES,
|
|
30
|
+
visibility: 'shared',
|
|
31
|
+
client: false,
|
|
32
|
+
scope: 'tenant',
|
|
33
|
+
labelKey: 'documents.settings.quotaBytes.label',
|
|
34
|
+
label: 'Storage quota (bytes)',
|
|
35
|
+
descriptionKey: 'documents.settings.quotaBytes.description',
|
|
36
|
+
description:
|
|
37
|
+
'Bytes this workspace may hold in document storage; 0 refuses every upload.',
|
|
38
|
+
},
|
|
39
|
+
readUrlSeconds: {
|
|
40
|
+
type: 'number',
|
|
41
|
+
defaultValue: DEFAULT_DOCUMENTS_READ_URL_SECONDS,
|
|
42
|
+
min: MIN_DOCUMENTS_READ_URL_SECONDS,
|
|
43
|
+
max: STORAGE_READ_URL_MAX_SECONDS,
|
|
44
|
+
visibility: 'private',
|
|
45
|
+
client: false,
|
|
46
|
+
scope: 'platform',
|
|
47
|
+
labelKey: 'documents.settings.readUrlSeconds.label',
|
|
48
|
+
label: 'Read URL lifetime (seconds)',
|
|
49
|
+
descriptionKey: 'documents.settings.readUrlSeconds.description',
|
|
50
|
+
description:
|
|
51
|
+
'How long a signed download link stays valid after it is issued.',
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
/* A setting read must never take an upload down, so both accessors fall back to
|
|
57
|
+
the declared default when the runtime has not registered the module yet. */
|
|
58
|
+
function value(
|
|
59
|
+
settings: ModuleSettingsRuntime,
|
|
60
|
+
tenantId: string,
|
|
61
|
+
key: 'quotaBytes' | 'readUrlSeconds',
|
|
62
|
+
fallback: number,
|
|
63
|
+
): number {
|
|
64
|
+
try {
|
|
65
|
+
return settings.get<number>(tenantId, DOCUMENTS_MODULE_ID, key);
|
|
66
|
+
} catch {
|
|
67
|
+
return fallback;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export function documentsQuotaBytes(
|
|
72
|
+
settings: ModuleSettingsRuntime,
|
|
73
|
+
tenantId: string,
|
|
74
|
+
): number {
|
|
75
|
+
return value(settings, tenantId, 'quotaBytes', DEFAULT_DOCUMENTS_QUOTA_BYTES);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* The object ceiling the platform built its storage port with, read through the
|
|
80
|
+
* storage package's own parser so there is one rule for it. It is not a module
|
|
81
|
+
* setting: the limit belongs to the deployment, and this module only repeats it
|
|
82
|
+
* to the uploader. A configuration this call refuses has already stopped the
|
|
83
|
+
* platform from composing a port, so the declared default is what a screen is
|
|
84
|
+
* told rather than a failure of its own.
|
|
85
|
+
*/
|
|
86
|
+
export function documentsMaxObjectBytes(
|
|
87
|
+
environment: NodeJS.ProcessEnv,
|
|
88
|
+
workspaceRoot: string,
|
|
89
|
+
): number {
|
|
90
|
+
try {
|
|
91
|
+
return storageConfigFromEnvironment(environment, workspaceRoot)
|
|
92
|
+
.maxObjectBytes;
|
|
93
|
+
} catch {
|
|
94
|
+
return DEFAULT_STORAGE_MAX_OBJECT_BYTES;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
export function documentsReadUrlSeconds(
|
|
99
|
+
settings: ModuleSettingsRuntime,
|
|
100
|
+
): number {
|
|
101
|
+
return value(
|
|
102
|
+
settings,
|
|
103
|
+
PLATFORM_SETTINGS_TENANT,
|
|
104
|
+
'readUrlSeconds',
|
|
105
|
+
DEFAULT_DOCUMENTS_READ_URL_SECONDS,
|
|
106
|
+
);
|
|
107
|
+
}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
{
|
|
2
|
+
"module.name": "Documents",
|
|
3
|
+
"navigation.label": "Documents",
|
|
4
|
+
"navigation.description": "Files attached to this workspace's records.",
|
|
5
|
+
"page.eyebrow": "Workspace",
|
|
6
|
+
"page.title": "Documents",
|
|
7
|
+
"page.description": "Every file this workspace stores, the record it belongs to and the state of its scan.",
|
|
8
|
+
"denied": "You need the documents read permission to see this workspace's files.",
|
|
9
|
+
"common.refresh": "Refresh",
|
|
10
|
+
"common.refreshing": "Refreshing…",
|
|
11
|
+
"common.filters": "Filters",
|
|
12
|
+
"common.actions": "Actions",
|
|
13
|
+
"common.messages": "Messages",
|
|
14
|
+
"common.close": "Close",
|
|
15
|
+
"common.accessDenied": "Access denied",
|
|
16
|
+
"table.title": "Stored documents",
|
|
17
|
+
"table.count": "{count} documents",
|
|
18
|
+
"table.countMore": "{count} documents, more to load",
|
|
19
|
+
"table.caption": "Documents of this workspace",
|
|
20
|
+
"table.loading": "Loading documents…",
|
|
21
|
+
"table.note": "Bytes live in platform storage under a key that starts with this workspace. A download link is signed and expires.",
|
|
22
|
+
"search.label": "Search documents",
|
|
23
|
+
"search.placeholder": "File name or description",
|
|
24
|
+
"filter.ownerModule": "Owner module",
|
|
25
|
+
"filter.allOwnerModules": "All modules",
|
|
26
|
+
"filter.scan": "Scan",
|
|
27
|
+
"filter.allScans": "Any scan state",
|
|
28
|
+
"column.filename": "File",
|
|
29
|
+
"column.ownerModule": "Owner module",
|
|
30
|
+
"column.recordRef": "Record",
|
|
31
|
+
"column.contentType": "Type",
|
|
32
|
+
"column.bytes": "Size",
|
|
33
|
+
"column.scan": "Scan",
|
|
34
|
+
"column.uploader": "Uploaded by",
|
|
35
|
+
"empty.title": "No documents yet",
|
|
36
|
+
"empty.hint": "A file uploaded for a record in this workspace appears here.",
|
|
37
|
+
"emptyFiltered.title": "No document matches",
|
|
38
|
+
"emptyFiltered.hint": "Clear the search or the filters.",
|
|
39
|
+
"loadFailed.title": "Could not load the documents",
|
|
40
|
+
"loadFailed.hint": "The request failed, so nothing was read. Refresh to try again.",
|
|
41
|
+
"action.download": "Download",
|
|
42
|
+
"action.more": "Load more",
|
|
43
|
+
"action.downloadRefusedInfected": "An infected file is removed the moment the scan finds it, so there is nothing to download.",
|
|
44
|
+
"action.downloadRefusedDeleted": "This document was deleted, so there is nothing to download.",
|
|
45
|
+
"action.delete": "Delete",
|
|
46
|
+
"action.deleteSelected": "Delete selected",
|
|
47
|
+
"action.deleteSelectedRefused": "None of the selected rows is a stored document you can delete.",
|
|
48
|
+
"selection.label": "Select all documents on screen",
|
|
49
|
+
"selection.rowLabel": "Select {name}",
|
|
50
|
+
"selection.clear": "Clear selection",
|
|
51
|
+
"selection.summary": "{count} selected",
|
|
52
|
+
"delete.title": "Delete this document?",
|
|
53
|
+
"delete.description": "{name} is removed from storage and its row is kept as the trail. This cannot be undone.",
|
|
54
|
+
"deleteMany.title": "Delete the selected documents?",
|
|
55
|
+
"deleteMany.description": "{count} documents are removed from storage and their rows are kept as the trail. This cannot be undone.",
|
|
56
|
+
"notice.uploaded": "{name} was stored.",
|
|
57
|
+
"notice.deleted": "{name} was deleted.",
|
|
58
|
+
"notice.deletedMany": "Deleted {deleted}, missing {missing}, refused {refused}.",
|
|
59
|
+
"upload.action.open": "Upload",
|
|
60
|
+
"upload.action.submit": "Upload file",
|
|
61
|
+
"upload.action.uploading": "Uploading…",
|
|
62
|
+
"upload.drawer.title": "Upload a document",
|
|
63
|
+
"upload.drawer.subtitle": "The file is stored encrypted and attached to the record you name.",
|
|
64
|
+
"upload.form.file": "File",
|
|
65
|
+
"upload.form.fileHelp": "Up to 25 MB. PDF, images, text, CSV and Office documents.",
|
|
66
|
+
"upload.form.fileHelpLimited": "Up to {limit}. PDF, images, text, CSV and Office documents.",
|
|
67
|
+
"upload.form.tooLarge": "This file is larger than {limit}, which is all the platform stores.",
|
|
68
|
+
"upload.form.typeRefused": "This kind of file is not one the platform stores.",
|
|
69
|
+
"upload.form.clear": "Remove",
|
|
70
|
+
"upload.form.chosen": "{name}, {size}",
|
|
71
|
+
"upload.form.ownerModule": "Owner module",
|
|
72
|
+
"upload.form.ownerModuleHelp": "The module that owns the record, for example directory.core.",
|
|
73
|
+
"upload.form.ownerModulePlaceholder": "directory.core",
|
|
74
|
+
"upload.form.recordRef": "Record reference",
|
|
75
|
+
"upload.form.recordRefHelp": "The owning module's own reference for the record.",
|
|
76
|
+
"upload.form.recordRefPlaceholder": "party-4711",
|
|
77
|
+
"upload.form.description": "Description",
|
|
78
|
+
"upload.form.descriptionHelp": "Optional note shown beside the file.",
|
|
79
|
+
"upload.form.constraint": "The declared type is verified against the bytes, and the workspace quota is checked before anything is stored.",
|
|
80
|
+
"scan.unscanned": "Unscanned",
|
|
81
|
+
"scan.clean": "Clean",
|
|
82
|
+
"scan.infected": "Infected",
|
|
83
|
+
"unit.bytes": "{value} B",
|
|
84
|
+
"unit.kb": "{value} KB",
|
|
85
|
+
"unit.mb": "{value} MB",
|
|
86
|
+
"unit.gb": "{value} GB",
|
|
87
|
+
"settings.quotaBytes.label": "Storage quota (bytes)",
|
|
88
|
+
"settings.quotaBytes.description": "Bytes this workspace may hold in document storage; 0 refuses every upload.",
|
|
89
|
+
"settings.readUrlSeconds.label": "Read URL lifetime (seconds)",
|
|
90
|
+
"settings.readUrlSeconds.description": "How long a signed download link stays valid after it is issued.",
|
|
91
|
+
"error.load": "Could not load the documents of this workspace.",
|
|
92
|
+
"error.upload": "Could not store the file.",
|
|
93
|
+
"error.readUrl": "Could not issue a download link.",
|
|
94
|
+
"error.downloadBlocked": "The browser blocked the download tab. Allow pop-ups for this page and try again.",
|
|
95
|
+
"error.delete": "Could not delete the document.",
|
|
96
|
+
"error.deleteMany": "Could not delete the selected documents.",
|
|
97
|
+
"error.request": "The documents operation failed.",
|
|
98
|
+
"error.code.QUOTA_EXCEEDED": "This workspace has no storage left. Delete a document or raise the quota.",
|
|
99
|
+
"error.code.DOCUMENT_TOO_LARGE": "The file is larger than the platform object limit.",
|
|
100
|
+
"error.code.CONTENT_TYPE_REFUSED": "This platform does not store files of that type.",
|
|
101
|
+
"error.code.CONTENT_MISMATCH": "The file does not carry the structure its type claims.",
|
|
102
|
+
"error.code.DOCUMENT_INFECTED": "The scanner reported this file as infected. Nothing was stored.",
|
|
103
|
+
"error.code.DOCUMENT_NOT_FOUND": "The document does not exist in this workspace.",
|
|
104
|
+
"error.code.DOCUMENT_DELETED": "The document was deleted.",
|
|
105
|
+
"error.code.STORAGE_UNAVAILABLE": "Document storage is unavailable. Try again shortly.",
|
|
106
|
+
"error.code.CONTENT_TYPE_REQUIRED": "The browser did not report the file type. Choose the file again.",
|
|
107
|
+
"error.code.CSRF_REJECTED": "The session proof expired. Reload the page and try again.",
|
|
108
|
+
"error.code.FORBIDDEN": "You are not allowed to perform this action.",
|
|
109
|
+
"error.code.TOKEN_MUTATION_DENIED": "An API token cannot make this change; sign in and try again.",
|
|
110
|
+
"error.code.CURSOR_INVALID": "That page is no longer available. Refresh the list."
|
|
111
|
+
}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
{
|
|
2
|
+
"module.name": "Dokumenty",
|
|
3
|
+
"navigation.label": "Dokumenty",
|
|
4
|
+
"navigation.description": "Pliki dołączone do rekordów tego obszaru roboczego.",
|
|
5
|
+
"page.eyebrow": "Obszar roboczy",
|
|
6
|
+
"page.title": "Dokumenty",
|
|
7
|
+
"page.description": "Wszystkie pliki tego obszaru roboczego, rekord, do którego należą, i stan skanowania.",
|
|
8
|
+
"denied": "Potrzebujesz uprawnienia odczytu dokumentów, aby zobaczyć pliki tego obszaru roboczego.",
|
|
9
|
+
"common.refresh": "Odśwież",
|
|
10
|
+
"common.refreshing": "Odświeżanie…",
|
|
11
|
+
"common.filters": "Filtry",
|
|
12
|
+
"common.actions": "Akcje",
|
|
13
|
+
"common.messages": "Komunikaty",
|
|
14
|
+
"common.close": "Zamknij",
|
|
15
|
+
"common.accessDenied": "Brak dostępu",
|
|
16
|
+
"table.title": "Zapisane dokumenty",
|
|
17
|
+
"table.count": "Liczba dokumentów: {count}",
|
|
18
|
+
"table.countMore": "Dokumenty: {count}, są kolejne",
|
|
19
|
+
"table.caption": "Dokumenty tego obszaru roboczego",
|
|
20
|
+
"table.loading": "Wczytywanie dokumentów…",
|
|
21
|
+
"table.note": "Bajty są przechowywane w magazynie platformy pod kluczem zaczynającym się od tego obszaru roboczego. Link do pobrania jest podpisany i wygasa.",
|
|
22
|
+
"search.label": "Szukaj dokumentów",
|
|
23
|
+
"search.placeholder": "Nazwa pliku lub opis",
|
|
24
|
+
"filter.ownerModule": "Moduł właściciela",
|
|
25
|
+
"filter.allOwnerModules": "Wszystkie moduły",
|
|
26
|
+
"filter.scan": "Skanowanie",
|
|
27
|
+
"filter.allScans": "Dowolny stan skanowania",
|
|
28
|
+
"column.filename": "Plik",
|
|
29
|
+
"column.ownerModule": "Moduł właściciela",
|
|
30
|
+
"column.recordRef": "Rekord",
|
|
31
|
+
"column.contentType": "Typ",
|
|
32
|
+
"column.bytes": "Rozmiar",
|
|
33
|
+
"column.scan": "Skanowanie",
|
|
34
|
+
"column.uploader": "Przesłał",
|
|
35
|
+
"empty.title": "Brak dokumentów",
|
|
36
|
+
"empty.hint": "Plik przesłany do rekordu w tym obszarze roboczym pojawi się tutaj.",
|
|
37
|
+
"emptyFiltered.title": "Brak pasujących dokumentów",
|
|
38
|
+
"emptyFiltered.hint": "Wyczyść wyszukiwanie lub filtry.",
|
|
39
|
+
"loadFailed.title": "Nie udało się wczytać dokumentów",
|
|
40
|
+
"loadFailed.hint": "Żądanie się nie powiodło, więc nic nie zostało odczytane. Odśwież, aby spróbować ponownie.",
|
|
41
|
+
"action.download": "Pobierz",
|
|
42
|
+
"action.more": "Wczytaj więcej",
|
|
43
|
+
"action.downloadRefusedInfected": "Zainfekowany plik jest usuwany w chwili wykrycia, więc nie ma czego pobrać.",
|
|
44
|
+
"action.downloadRefusedDeleted": "Ten dokument został usunięty, więc nie ma czego pobrać.",
|
|
45
|
+
"action.delete": "Usuń",
|
|
46
|
+
"action.deleteSelected": "Usuń zaznaczone",
|
|
47
|
+
"action.deleteSelectedRefused": "Żaden z zaznaczonych wierszy nie jest zapisanym dokumentem, który można usunąć.",
|
|
48
|
+
"selection.label": "Zaznacz wszystkie dokumenty na ekranie",
|
|
49
|
+
"selection.rowLabel": "Zaznacz {name}",
|
|
50
|
+
"selection.clear": "Wyczyść zaznaczenie",
|
|
51
|
+
"selection.summary": "Zaznaczono: {count}",
|
|
52
|
+
"delete.title": "Usunąć ten dokument?",
|
|
53
|
+
"delete.description": "{name} zostanie usunięty z magazynu, a jego wpis pozostanie jako ślad. Tej operacji nie można cofnąć.",
|
|
54
|
+
"deleteMany.title": "Usunąć zaznaczone dokumenty?",
|
|
55
|
+
"deleteMany.description": "Dokumenty ({count}) zostaną usunięte z magazynu, a ich wpisy pozostaną jako ślad. Tej operacji nie można cofnąć.",
|
|
56
|
+
"notice.uploaded": "Plik {name} został zapisany.",
|
|
57
|
+
"notice.deleted": "Plik {name} został usunięty.",
|
|
58
|
+
"notice.deletedMany": "Usunięto: {deleted}, brakujące: {missing}, odrzucone: {refused}.",
|
|
59
|
+
"upload.action.open": "Prześlij",
|
|
60
|
+
"upload.action.submit": "Prześlij plik",
|
|
61
|
+
"upload.action.uploading": "Przesyłanie…",
|
|
62
|
+
"upload.drawer.title": "Prześlij dokument",
|
|
63
|
+
"upload.drawer.subtitle": "Plik zostanie zaszyfrowany i dołączony do wskazanego rekordu.",
|
|
64
|
+
"upload.form.file": "Plik",
|
|
65
|
+
"upload.form.fileHelp": "Do 25 MB. PDF, obrazy, tekst, CSV i dokumenty Office.",
|
|
66
|
+
"upload.form.fileHelpLimited": "Do {limit}. PDF, obrazy, tekst, CSV i dokumenty pakietu Office.",
|
|
67
|
+
"upload.form.tooLarge": "Ten plik jest większy niż {limit}, czyli tyle, ile platforma przechowuje.",
|
|
68
|
+
"upload.form.typeRefused": "Tego rodzaju pliku platforma nie przechowuje.",
|
|
69
|
+
"upload.form.clear": "Usuń",
|
|
70
|
+
"upload.form.chosen": "{name}, {size}",
|
|
71
|
+
"upload.form.ownerModule": "Moduł właściciela",
|
|
72
|
+
"upload.form.ownerModuleHelp": "Moduł, do którego należy rekord, na przykład directory.core.",
|
|
73
|
+
"upload.form.ownerModulePlaceholder": "directory.core",
|
|
74
|
+
"upload.form.recordRef": "Odwołanie do rekordu",
|
|
75
|
+
"upload.form.recordRefHelp": "Własne odwołanie modułu właściciela do rekordu.",
|
|
76
|
+
"upload.form.recordRefPlaceholder": "party-4711",
|
|
77
|
+
"upload.form.description": "Opis",
|
|
78
|
+
"upload.form.descriptionHelp": "Opcjonalna notatka wyświetlana obok pliku.",
|
|
79
|
+
"upload.form.constraint": "Zadeklarowany typ jest weryfikowany względem bajtów, a limit obszaru roboczego sprawdzany przed zapisem.",
|
|
80
|
+
"scan.unscanned": "Nieskanowany",
|
|
81
|
+
"scan.clean": "Czysty",
|
|
82
|
+
"scan.infected": "Zainfekowany",
|
|
83
|
+
"unit.bytes": "{value} B",
|
|
84
|
+
"unit.kb": "{value} KB",
|
|
85
|
+
"unit.mb": "{value} MB",
|
|
86
|
+
"unit.gb": "{value} GB",
|
|
87
|
+
"settings.quotaBytes.label": "Limit magazynu (bajty)",
|
|
88
|
+
"settings.quotaBytes.description": "Liczba bajtów, jaką ten obszar roboczy może przechowywać; 0 blokuje każde przesłanie.",
|
|
89
|
+
"settings.readUrlSeconds.label": "Czas życia linku do pobrania (sekundy)",
|
|
90
|
+
"settings.readUrlSeconds.description": "Jak długo podpisany link do pobrania pozostaje ważny po wystawieniu.",
|
|
91
|
+
"error.load": "Nie udało się wczytać dokumentów tego obszaru roboczego.",
|
|
92
|
+
"error.upload": "Nie udało się zapisać pliku.",
|
|
93
|
+
"error.readUrl": "Nie udało się wystawić linku do pobrania.",
|
|
94
|
+
"error.downloadBlocked": "Przeglądarka zablokowała kartę pobierania. Zezwól na wyskakujące okna dla tej strony i spróbuj ponownie.",
|
|
95
|
+
"error.delete": "Nie udało się usunąć dokumentu.",
|
|
96
|
+
"error.deleteMany": "Nie udało się usunąć zaznaczonych dokumentów.",
|
|
97
|
+
"error.request": "Operacja na dokumentach nie powiodła się.",
|
|
98
|
+
"error.code.QUOTA_EXCEEDED": "Ten obszar roboczy nie ma wolnego miejsca. Usuń dokument lub zwiększ limit.",
|
|
99
|
+
"error.code.DOCUMENT_TOO_LARGE": "Plik przekracza limit rozmiaru obiektu platformy.",
|
|
100
|
+
"error.code.CONTENT_TYPE_REFUSED": "Platforma nie przechowuje plików tego typu.",
|
|
101
|
+
"error.code.CONTENT_MISMATCH": "Zawartość pliku nie odpowiada deklarowanemu typowi.",
|
|
102
|
+
"error.code.DOCUMENT_INFECTED": "Skaner uznał ten plik za zainfekowany. Nic nie zostało zapisane.",
|
|
103
|
+
"error.code.DOCUMENT_NOT_FOUND": "Taki dokument nie istnieje w tym obszarze roboczym.",
|
|
104
|
+
"error.code.DOCUMENT_DELETED": "Dokument został usunięty.",
|
|
105
|
+
"error.code.STORAGE_UNAVAILABLE": "Magazyn dokumentów jest niedostępny. Spróbuj za chwilę.",
|
|
106
|
+
"error.code.CONTENT_TYPE_REQUIRED": "Przeglądarka nie podała typu pliku. Wybierz plik ponownie.",
|
|
107
|
+
"error.code.CSRF_REJECTED": "Potwierdzenie sesji wygasło. Odśwież stronę i spróbuj ponownie.",
|
|
108
|
+
"error.code.FORBIDDEN": "Nie masz uprawnień do tej operacji.",
|
|
109
|
+
"error.code.TOKEN_MUTATION_DENIED": "Token API nie może wykonać tej zmiany; zaloguj się i spróbuj ponownie.",
|
|
110
|
+
"error.code.CURSOR_INVALID": "Ta strona nie jest już dostępna. Odśwież listę."
|
|
111
|
+
}
|