@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,354 @@
|
|
|
1
|
+
import { RegistryError } from './errors.ts';
|
|
2
|
+
|
|
3
|
+
/* The platform-wide catalogue of the data a deployment holds. A module that
|
|
4
|
+
owns rows declares its classes while the platform composes; the registry is
|
|
5
|
+
sealed before start hooks run, so every reader sees the same declarations
|
|
6
|
+
for the life of the process. The owner keeps its own operations: a sweep, an
|
|
7
|
+
export and an erasure run inside the declaring module, on its own leases,
|
|
8
|
+
under its own tenant transaction, so the reader of the registry opens no
|
|
9
|
+
foreign table. */
|
|
10
|
+
|
|
11
|
+
/** Where one exported row goes. The caller owns the ordering and the shape. */
|
|
12
|
+
export interface DataClassExportSink {
|
|
13
|
+
write(row: Record<string, unknown>): Promise<void>;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export interface DataClassSweepInput {
|
|
17
|
+
readonly tenantId: string;
|
|
18
|
+
/** Rows whose retention timestamp is strictly older than this may go. */
|
|
19
|
+
readonly cutoff: Date;
|
|
20
|
+
/** Upper bound on rows this call may remove. */
|
|
21
|
+
readonly limit: number;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export interface DataClassExportInput {
|
|
25
|
+
readonly tenantId: string;
|
|
26
|
+
readonly sink: DataClassExportSink;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export interface DataClassExportSummary {
|
|
30
|
+
readonly rows: number;
|
|
31
|
+
/** Oldest and newest record time in the exported set, or null when empty. */
|
|
32
|
+
readonly from: Date | null;
|
|
33
|
+
readonly to: Date | null;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/** The person an erasure or a count is about. */
|
|
37
|
+
export interface DataClassSubject {
|
|
38
|
+
readonly accountId: string;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export interface DataClassErasureInput {
|
|
42
|
+
readonly tenantId: string;
|
|
43
|
+
readonly subject: DataClassSubject;
|
|
44
|
+
/** Upper bound on rows this call may remove. */
|
|
45
|
+
readonly limit: number;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export interface DataClassErasureResult {
|
|
49
|
+
/** Rows the call took out of the class, and nothing else. */
|
|
50
|
+
readonly removed: number;
|
|
51
|
+
/**
|
|
52
|
+
* Rows it kept but stripped of the subject, for a class whose row cannot go:
|
|
53
|
+
* an append-only ledger, or a snapshot another person's row is part of. A
|
|
54
|
+
* non-negative integer when present. The caller counts a redacted row as
|
|
55
|
+
* progress the same way it counts a removed one, so a batch that only
|
|
56
|
+
* redacts still moves the run on and `removed` goes on meaning what it says.
|
|
57
|
+
*/
|
|
58
|
+
readonly redacted?: number;
|
|
59
|
+
/**
|
|
60
|
+
* True when rows of the subject are left that this call did not reach. The
|
|
61
|
+
* caller repeats the call up to its own batch cap and records the class as
|
|
62
|
+
* incomplete when the flag still stands.
|
|
63
|
+
*/
|
|
64
|
+
readonly truncated?: boolean;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export interface DataClassCountInput {
|
|
68
|
+
readonly tenantId: string;
|
|
69
|
+
readonly subject: DataClassSubject;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export interface DataClassDeclaration {
|
|
73
|
+
/** `^[a-z][a-z0-9-]*$`; the class id is `${moduleId}.${key}`. */
|
|
74
|
+
readonly key: string;
|
|
75
|
+
readonly label: string;
|
|
76
|
+
/** Days, or null for kept until a person deletes. Zero is refused. */
|
|
77
|
+
readonly defaultRetentionDays: number | null;
|
|
78
|
+
readonly exportable: boolean;
|
|
79
|
+
/** Required when `exportable` is false; it reaches the export manifest. */
|
|
80
|
+
readonly excludedReason?: string;
|
|
81
|
+
/**
|
|
82
|
+
* Removes at most `limit` rows older than `cutoff` and answers how many it
|
|
83
|
+
* removed. A class without this operation is never swept. The operation runs
|
|
84
|
+
* inside the owner module and must use its own tenant-scoped transaction.
|
|
85
|
+
*/
|
|
86
|
+
readonly sweep?: (
|
|
87
|
+
input: DataClassSweepInput,
|
|
88
|
+
) => Promise<{ readonly removed: number }>;
|
|
89
|
+
/**
|
|
90
|
+
* Writes every row of the class for one workspace into the sink. A class
|
|
91
|
+
* without this operation is reported in the export manifest as excluded.
|
|
92
|
+
* The operation runs inside the owner module and must use its own
|
|
93
|
+
* tenant-scoped transaction.
|
|
94
|
+
*/
|
|
95
|
+
readonly export?: (
|
|
96
|
+
input: DataClassExportInput,
|
|
97
|
+
) => Promise<DataClassExportSummary>;
|
|
98
|
+
/**
|
|
99
|
+
* Removes at most `limit` rows one subject owns and answers how many it
|
|
100
|
+
* removed. A class without this operation is never erased: the plan and the
|
|
101
|
+
* certificate name it as not erasable rather than pretending it was cleared.
|
|
102
|
+
* The operation runs inside the owner module and must use its own
|
|
103
|
+
* tenant-scoped transaction.
|
|
104
|
+
*/
|
|
105
|
+
readonly erase?: (
|
|
106
|
+
input: DataClassErasureInput,
|
|
107
|
+
) => Promise<DataClassErasureResult>;
|
|
108
|
+
/**
|
|
109
|
+
* Rows the subject holds, without removing any. A class that cannot count
|
|
110
|
+
* cheaply leaves the operation out or answers null, and the plan says the
|
|
111
|
+
* count is unknown rather than guessing one.
|
|
112
|
+
*/
|
|
113
|
+
readonly count?: (input: DataClassCountInput) => Promise<number | null>;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
export interface DataClassModuleEntry {
|
|
117
|
+
readonly moduleId: string;
|
|
118
|
+
readonly classes: readonly DataClassDeclaration[];
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
export interface PlatformDataClassRegistry {
|
|
122
|
+
/**
|
|
123
|
+
* The platform form, for a module composed outside the module composition
|
|
124
|
+
* and for a module naming the classes it owns. A bound view accepts only
|
|
125
|
+
* its own id. Accepted while the platform composes; after `seal()` it
|
|
126
|
+
* throws, so the catalogue a request reads is the one every module agreed
|
|
127
|
+
* on at boot. A module that owns no class declares an empty list, so the
|
|
128
|
+
* workspace can see it holds none.
|
|
129
|
+
*/
|
|
130
|
+
declare(moduleId: string, classes: readonly DataClassDeclaration[]): void;
|
|
131
|
+
/** The module form, available on a view bound by `forModule`. */
|
|
132
|
+
declare(classes: readonly DataClassDeclaration[]): void;
|
|
133
|
+
/** Returns a view that declares classes owned by one module only. */
|
|
134
|
+
forModule(moduleId: string): PlatformDataClassRegistry;
|
|
135
|
+
/**
|
|
136
|
+
* Every module that declared, in composition order, including the ones that
|
|
137
|
+
* declared nothing. A bound view answers the whole catalogue: the binding
|
|
138
|
+
* limits what a module may declare, never what it may read.
|
|
139
|
+
*/
|
|
140
|
+
list(): readonly DataClassModuleEntry[];
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
export interface MutablePlatformDataClassRegistry
|
|
144
|
+
extends PlatformDataClassRegistry {
|
|
145
|
+
seal(): void;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/** Longest values the registry accepts; over any of them is a rejection. */
|
|
149
|
+
export const DATA_CLASS_LIMITS = {
|
|
150
|
+
moduleId: 64,
|
|
151
|
+
key: 48,
|
|
152
|
+
classId: 96,
|
|
153
|
+
label: 120,
|
|
154
|
+
excludedReason: 200,
|
|
155
|
+
classesPerModule: 64,
|
|
156
|
+
/** 100 years. A longer period is a mistake, not a policy. */
|
|
157
|
+
retentionDays: 36_500,
|
|
158
|
+
} as const;
|
|
159
|
+
|
|
160
|
+
const MODULE_ID = /^[a-z][a-z0-9-]*(\.[a-z][a-z0-9-]*)+$/;
|
|
161
|
+
const CLASS_KEY = /^[a-z][a-z0-9-]*$/;
|
|
162
|
+
|
|
163
|
+
function refuse(message: string): never {
|
|
164
|
+
throw new RegistryError('DATA_CLASS_DECLARATION_INVALID', message);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
export function createDataClassRegistry(): MutablePlatformDataClassRegistry {
|
|
168
|
+
/** Declaration order, so the registry reads the way composition ran. */
|
|
169
|
+
const modules = new Map<string, readonly DataClassDeclaration[]>();
|
|
170
|
+
/** Class id to owner, so a duplicate is refused in O(1). */
|
|
171
|
+
const owners = new Map<string, string>();
|
|
172
|
+
let sealed: readonly DataClassModuleEntry[] | null = null;
|
|
173
|
+
|
|
174
|
+
const snapshot = (): readonly DataClassModuleEntry[] =>
|
|
175
|
+
Object.freeze(
|
|
176
|
+
[...modules].map(([moduleId, classes]) => ({ moduleId, classes })),
|
|
177
|
+
);
|
|
178
|
+
|
|
179
|
+
const view = (boundModuleId?: string): PlatformDataClassRegistry => {
|
|
180
|
+
const self: PlatformDataClassRegistry = {
|
|
181
|
+
declare(
|
|
182
|
+
first: string | readonly DataClassDeclaration[],
|
|
183
|
+
second?: readonly DataClassDeclaration[],
|
|
184
|
+
): void {
|
|
185
|
+
const named = typeof first === 'string';
|
|
186
|
+
const moduleId = named ? first : boundModuleId;
|
|
187
|
+
const classes = named ? second : first;
|
|
188
|
+
if (moduleId === undefined) {
|
|
189
|
+
refuse(
|
|
190
|
+
'The platform data class registry needs a module id: call declare(moduleId, classes) or bind it with forModule(moduleId).',
|
|
191
|
+
);
|
|
192
|
+
}
|
|
193
|
+
if (boundModuleId !== undefined && moduleId !== boundModuleId) {
|
|
194
|
+
refuse(
|
|
195
|
+
`Module ${boundModuleId} cannot declare data classes owned by ${moduleId}.`,
|
|
196
|
+
);
|
|
197
|
+
}
|
|
198
|
+
declareClasses(moduleId, classes as readonly DataClassDeclaration[]);
|
|
199
|
+
},
|
|
200
|
+
forModule(moduleId: string): PlatformDataClassRegistry {
|
|
201
|
+
const normalized = moduleId.trim();
|
|
202
|
+
if (!normalized)
|
|
203
|
+
refuse('A module-bound data class registry needs an id.');
|
|
204
|
+
if (boundModuleId !== undefined && normalized !== boundModuleId) {
|
|
205
|
+
refuse(
|
|
206
|
+
`Module ${boundModuleId} cannot obtain the data class registrar for ${normalized}.`,
|
|
207
|
+
);
|
|
208
|
+
}
|
|
209
|
+
return boundModuleId === normalized ? self : view(normalized);
|
|
210
|
+
},
|
|
211
|
+
list(): readonly DataClassModuleEntry[] {
|
|
212
|
+
return sealed ?? snapshot();
|
|
213
|
+
},
|
|
214
|
+
};
|
|
215
|
+
return self;
|
|
216
|
+
};
|
|
217
|
+
|
|
218
|
+
function declareClasses(
|
|
219
|
+
moduleId: string,
|
|
220
|
+
classes: readonly DataClassDeclaration[],
|
|
221
|
+
): void {
|
|
222
|
+
if (sealed !== null) {
|
|
223
|
+
refuse(
|
|
224
|
+
`${moduleId} declared data classes after the platform started; declarations are accepted during composition only.`,
|
|
225
|
+
);
|
|
226
|
+
}
|
|
227
|
+
if (
|
|
228
|
+
typeof moduleId !== 'string' ||
|
|
229
|
+
moduleId.length > DATA_CLASS_LIMITS.moduleId ||
|
|
230
|
+
!MODULE_ID.test(moduleId)
|
|
231
|
+
) {
|
|
232
|
+
refuse(`"${String(moduleId)}" is not a module id.`);
|
|
233
|
+
}
|
|
234
|
+
if (modules.has(moduleId)) {
|
|
235
|
+
refuse(`${moduleId} declared its data classes twice.`);
|
|
236
|
+
}
|
|
237
|
+
if (!Array.isArray(classes)) {
|
|
238
|
+
refuse(`${moduleId} declared something other than a list of classes.`);
|
|
239
|
+
}
|
|
240
|
+
if (classes.length > DATA_CLASS_LIMITS.classesPerModule) {
|
|
241
|
+
refuse(
|
|
242
|
+
`${moduleId} declared ${classes.length} data classes; at most ${DATA_CLASS_LIMITS.classesPerModule} are accepted.`,
|
|
243
|
+
);
|
|
244
|
+
}
|
|
245
|
+
/* Nothing is recorded until every class of the module validated, so a
|
|
246
|
+
refused declaration leaves the registry exactly as it was. */
|
|
247
|
+
const accepted = new Set<string>();
|
|
248
|
+
for (const declaration of classes) {
|
|
249
|
+
const classId = validated(moduleId, declaration);
|
|
250
|
+
const taken = owners.get(classId);
|
|
251
|
+
if (taken || accepted.has(classId)) {
|
|
252
|
+
refuse(
|
|
253
|
+
`${moduleId} declared ${classId}, which ${taken ?? moduleId} already owns.`,
|
|
254
|
+
);
|
|
255
|
+
}
|
|
256
|
+
accepted.add(classId);
|
|
257
|
+
}
|
|
258
|
+
modules.set(moduleId, Object.freeze([...classes]));
|
|
259
|
+
for (const classId of accepted) owners.set(classId, moduleId);
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
return {
|
|
263
|
+
...view(),
|
|
264
|
+
seal(): void {
|
|
265
|
+
if (sealed !== null) return;
|
|
266
|
+
sealed = snapshot();
|
|
267
|
+
},
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
/** Answers the class id, so a caller can index the declarations it accepted. */
|
|
272
|
+
function validated(
|
|
273
|
+
moduleId: string,
|
|
274
|
+
declaration: DataClassDeclaration,
|
|
275
|
+
): string {
|
|
276
|
+
if (typeof declaration !== 'object' || declaration === null) {
|
|
277
|
+
refuse(`${moduleId} declared something other than a data class.`);
|
|
278
|
+
}
|
|
279
|
+
const key = declaration.key;
|
|
280
|
+
if (
|
|
281
|
+
typeof key !== 'string' ||
|
|
282
|
+
key.length > DATA_CLASS_LIMITS.key ||
|
|
283
|
+
!CLASS_KEY.test(key)
|
|
284
|
+
) {
|
|
285
|
+
refuse(`${moduleId} declared "${String(key)}", which is not a class key.`);
|
|
286
|
+
}
|
|
287
|
+
const classId = `${moduleId}.${key}`;
|
|
288
|
+
if (classId.length > DATA_CLASS_LIMITS.classId) {
|
|
289
|
+
refuse(
|
|
290
|
+
`${classId} is longer than ${DATA_CLASS_LIMITS.classId} characters.`,
|
|
291
|
+
);
|
|
292
|
+
}
|
|
293
|
+
const label = declaration.label;
|
|
294
|
+
if (
|
|
295
|
+
typeof label !== 'string' ||
|
|
296
|
+
label.trim().length < 1 ||
|
|
297
|
+
label.length > DATA_CLASS_LIMITS.label
|
|
298
|
+
) {
|
|
299
|
+
refuse(
|
|
300
|
+
`${classId} needs a label of 1 to ${DATA_CLASS_LIMITS.label} characters.`,
|
|
301
|
+
);
|
|
302
|
+
}
|
|
303
|
+
const days = declaration.defaultRetentionDays;
|
|
304
|
+
if (
|
|
305
|
+
days !== null &&
|
|
306
|
+
(!Number.isSafeInteger(days) ||
|
|
307
|
+
days < 1 ||
|
|
308
|
+
days > DATA_CLASS_LIMITS.retentionDays)
|
|
309
|
+
) {
|
|
310
|
+
refuse(
|
|
311
|
+
`${classId} declared a default retention of ${String(days)}; it must be null or 1 to ${DATA_CLASS_LIMITS.retentionDays} days.`,
|
|
312
|
+
);
|
|
313
|
+
}
|
|
314
|
+
if (typeof declaration.exportable !== 'boolean') {
|
|
315
|
+
refuse(`${classId} must say whether it is exportable.`);
|
|
316
|
+
}
|
|
317
|
+
const reason = declaration.excludedReason;
|
|
318
|
+
if (!declaration.exportable) {
|
|
319
|
+
if (
|
|
320
|
+
typeof reason !== 'string' ||
|
|
321
|
+
reason.trim().length < 1 ||
|
|
322
|
+
reason.length > DATA_CLASS_LIMITS.excludedReason
|
|
323
|
+
) {
|
|
324
|
+
refuse(
|
|
325
|
+
`${classId} is not exportable and must state why in excludedReason.`,
|
|
326
|
+
);
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
if (
|
|
330
|
+
declaration.sweep !== undefined &&
|
|
331
|
+
typeof declaration.sweep !== 'function'
|
|
332
|
+
) {
|
|
333
|
+
refuse(`${classId} declared a sweep operation that is not a function.`);
|
|
334
|
+
}
|
|
335
|
+
if (
|
|
336
|
+
declaration.export !== undefined &&
|
|
337
|
+
typeof declaration.export !== 'function'
|
|
338
|
+
) {
|
|
339
|
+
refuse(`${classId} declared an export operation that is not a function.`);
|
|
340
|
+
}
|
|
341
|
+
if (
|
|
342
|
+
declaration.erase !== undefined &&
|
|
343
|
+
typeof declaration.erase !== 'function'
|
|
344
|
+
) {
|
|
345
|
+
refuse(`${classId} declared an erase operation that is not a function.`);
|
|
346
|
+
}
|
|
347
|
+
if (
|
|
348
|
+
declaration.count !== undefined &&
|
|
349
|
+
typeof declaration.count !== 'function'
|
|
350
|
+
) {
|
|
351
|
+
refuse(`${classId} declared a count operation that is not a function.`);
|
|
352
|
+
}
|
|
353
|
+
return classId;
|
|
354
|
+
}
|
|
@@ -1,5 +1,21 @@
|
|
|
1
|
-
export {
|
|
2
|
-
|
|
1
|
+
export {
|
|
2
|
+
authorize,
|
|
3
|
+
authorizeRecord,
|
|
4
|
+
createPolicyRegistry,
|
|
5
|
+
definePolicy,
|
|
6
|
+
MAX_POLICIES,
|
|
7
|
+
} from './acl.ts';
|
|
8
|
+
export type {
|
|
9
|
+
AccessDecision,
|
|
10
|
+
ApprovalRequirement,
|
|
11
|
+
MutablePolicyRegistry,
|
|
12
|
+
Policy,
|
|
13
|
+
PolicyDecision,
|
|
14
|
+
PolicyDefinition,
|
|
15
|
+
PolicyEvaluationContext,
|
|
16
|
+
PolicyRegistry,
|
|
17
|
+
Principal,
|
|
18
|
+
} from './acl.ts';
|
|
3
19
|
export { createPlatformAgentRegistry } from './agent-registry.ts';
|
|
4
20
|
export type {
|
|
5
21
|
MutablePlatformAgentRegistry,
|
|
@@ -24,9 +40,67 @@ export type {
|
|
|
24
40
|
UserActor,
|
|
25
41
|
UserActorSource,
|
|
26
42
|
} from './actor.ts';
|
|
43
|
+
export {
|
|
44
|
+
createDataClassRegistry,
|
|
45
|
+
DATA_CLASS_LIMITS,
|
|
46
|
+
} from './data-class-registry.ts';
|
|
47
|
+
export type {
|
|
48
|
+
DataClassCountInput,
|
|
49
|
+
DataClassDeclaration,
|
|
50
|
+
DataClassErasureInput,
|
|
51
|
+
DataClassErasureResult,
|
|
52
|
+
DataClassExportInput,
|
|
53
|
+
DataClassExportSink,
|
|
54
|
+
DataClassExportSummary,
|
|
55
|
+
DataClassModuleEntry,
|
|
56
|
+
DataClassSubject,
|
|
57
|
+
DataClassSweepInput,
|
|
58
|
+
MutablePlatformDataClassRegistry,
|
|
59
|
+
PlatformDataClassRegistry,
|
|
60
|
+
} from './data-class-registry.ts';
|
|
27
61
|
export { createPlatformCapabilityRegistry } from './capability-registry.ts';
|
|
28
|
-
export type {
|
|
62
|
+
export type {
|
|
63
|
+
ModuleCapabilityDeclaration,
|
|
64
|
+
PlatformCapabilityRegistry,
|
|
65
|
+
} from './capability-registry.ts';
|
|
66
|
+
export {
|
|
67
|
+
APPROVAL_GRANT_INPUT_DIGEST_LENGTH,
|
|
68
|
+
APPROVAL_GRANT_KEY_VARIABLE,
|
|
69
|
+
APPROVAL_GRANT_MAX_TOKEN_LENGTH,
|
|
70
|
+
APPROVAL_GRANT_PREVIOUS_KEY_VARIABLE,
|
|
71
|
+
approvalGrantKeyringFromEnvironment,
|
|
72
|
+
approvalInputDigest,
|
|
73
|
+
createApprovalGrantKeyring,
|
|
74
|
+
issueApprovalGrant,
|
|
75
|
+
verifyApprovalGrant,
|
|
76
|
+
} from './approval-grant.ts';
|
|
77
|
+
export type {
|
|
78
|
+
ApprovalGrantClaims,
|
|
79
|
+
ApprovalGrantExpectation,
|
|
80
|
+
ApprovalGrantInput,
|
|
81
|
+
ApprovalGrantKeyring,
|
|
82
|
+
ApprovalGrantReason,
|
|
83
|
+
ApprovalGrantVerification,
|
|
84
|
+
IssuedApprovalGrant,
|
|
85
|
+
} from './approval-grant.ts';
|
|
29
86
|
export { RegistryError } from './errors.ts';
|
|
87
|
+
export {
|
|
88
|
+
createKeyring,
|
|
89
|
+
keyFingerprint,
|
|
90
|
+
KeyringError,
|
|
91
|
+
KEYRING_IV_BYTES,
|
|
92
|
+
KEYRING_KEY_BYTES,
|
|
93
|
+
KEYRING_MAX_PREVIOUS_KEYS,
|
|
94
|
+
KEYRING_TAG_BYTES,
|
|
95
|
+
parsePreviousKeys,
|
|
96
|
+
} from './keyring.ts';
|
|
97
|
+
export type {
|
|
98
|
+
Keyring,
|
|
99
|
+
KeyringErrorCode,
|
|
100
|
+
KeyringOptions,
|
|
101
|
+
SealedEnvelope,
|
|
102
|
+
StoredEnvelope,
|
|
103
|
+
} from './keyring.ts';
|
|
30
104
|
export {
|
|
31
105
|
DEFAULT_HISTORY_PAGE,
|
|
32
106
|
diffFields,
|
|
@@ -44,7 +118,10 @@ export type {
|
|
|
44
118
|
RecordChanges,
|
|
45
119
|
TrackedFields,
|
|
46
120
|
} from './record-history.ts';
|
|
47
|
-
export {
|
|
121
|
+
export {
|
|
122
|
+
capabilityProviders,
|
|
123
|
+
createModuleRegistry,
|
|
124
|
+
} from './module-registry.ts';
|
|
48
125
|
export {
|
|
49
126
|
assertSettingValue,
|
|
50
127
|
createModuleSettingsRuntime,
|
|
@@ -56,6 +133,7 @@ export type {
|
|
|
56
133
|
ModuleSettingChange,
|
|
57
134
|
ModuleSettingDefinition,
|
|
58
135
|
ModuleSettingEntry,
|
|
136
|
+
ModuleSettingKind,
|
|
59
137
|
ModuleSettingRecord,
|
|
60
138
|
ModuleSettingScope,
|
|
61
139
|
ModuleSettingsDeclaration,
|
|
@@ -87,4 +165,7 @@ export {
|
|
|
87
165
|
assertModuleDependency,
|
|
88
166
|
satisfiesModuleVersion,
|
|
89
167
|
compareModuleVersions,
|
|
168
|
+
incrementModuleVersion,
|
|
169
|
+
retargetModuleRange,
|
|
90
170
|
} from './module-compatibility.ts';
|
|
171
|
+
export type { ModuleVersionLevel } from './module-compatibility.ts';
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createCipheriv,
|
|
3
|
+
createDecipheriv,
|
|
4
|
+
createHash,
|
|
5
|
+
randomBytes,
|
|
6
|
+
} from 'node:crypto';
|
|
7
|
+
|
|
8
|
+
export const KEYRING_KEY_BYTES = 32;
|
|
9
|
+
export const KEYRING_IV_BYTES = 12;
|
|
10
|
+
export const KEYRING_TAG_BYTES = 16;
|
|
11
|
+
/* An open of an envelope without a key id tries every key in turn, so the ring
|
|
12
|
+
is bounded. A chain longer than this means a rotation was never finished. */
|
|
13
|
+
export const KEYRING_MAX_PREVIOUS_KEYS = 8;
|
|
14
|
+
|
|
15
|
+
export type KeyringErrorCode = 'KEY_UNKNOWN' | 'ENVELOPE_INVALID';
|
|
16
|
+
|
|
17
|
+
/** A failure to open an envelope, with the code a caller may branch on. */
|
|
18
|
+
export class KeyringError extends Error {
|
|
19
|
+
readonly code: KeyringErrorCode;
|
|
20
|
+
|
|
21
|
+
constructor(code: KeyringErrorCode, message: string, options?: ErrorOptions) {
|
|
22
|
+
super(message, options);
|
|
23
|
+
this.name = 'KeyringError';
|
|
24
|
+
this.code = code;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/** An envelope this ring produced. `keyId` names the key that sealed it. */
|
|
29
|
+
export interface SealedEnvelope {
|
|
30
|
+
readonly keyId: string;
|
|
31
|
+
readonly iv: Buffer;
|
|
32
|
+
readonly tag: Buffer;
|
|
33
|
+
readonly ciphertext: Buffer;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* An envelope read back from storage. `keyId` is absent for rows written by an
|
|
38
|
+
* envelope format that never recorded one; those are opened by trying the
|
|
39
|
+
* current key and then each previous key.
|
|
40
|
+
*/
|
|
41
|
+
export interface StoredEnvelope {
|
|
42
|
+
readonly keyId?: string | undefined;
|
|
43
|
+
readonly iv: Uint8Array;
|
|
44
|
+
readonly tag: Uint8Array;
|
|
45
|
+
readonly ciphertext: Uint8Array;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export interface Keyring {
|
|
49
|
+
/** Fingerprint of the key every `seal` uses. */
|
|
50
|
+
readonly keyId: string;
|
|
51
|
+
readonly previousKeyIds: readonly string[];
|
|
52
|
+
knows(keyId: string): boolean;
|
|
53
|
+
seal(
|
|
54
|
+
plaintext: Uint8Array | string,
|
|
55
|
+
aad?: Uint8Array | string,
|
|
56
|
+
): SealedEnvelope;
|
|
57
|
+
open(envelope: StoredEnvelope, aad?: Uint8Array | string): Buffer;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export interface KeyringOptions {
|
|
61
|
+
readonly current: Uint8Array;
|
|
62
|
+
readonly previous?: readonly Uint8Array[] | undefined;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* The key id the module envelope formats already store: the first 16 hex
|
|
67
|
+
* characters of the SHA-256 of the key material. Changing it would orphan every
|
|
68
|
+
* stored row, so it is fixed.
|
|
69
|
+
*/
|
|
70
|
+
export function keyFingerprint(key: Uint8Array): string {
|
|
71
|
+
return createHash('sha256').update(key).digest('hex').slice(0, 16);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
function assertKeyLength(key: Uint8Array, position: string): void {
|
|
75
|
+
if (key.byteLength !== KEYRING_KEY_BYTES) {
|
|
76
|
+
throw new Error(
|
|
77
|
+
`A keyring ${position} key must be exactly ${KEYRING_KEY_BYTES} bytes.`,
|
|
78
|
+
);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/* The cipher reads the bytes inside the call, so a payload that already is
|
|
83
|
+
bytes is passed through rather than copied. */
|
|
84
|
+
function bytes(value: Uint8Array | string): Uint8Array {
|
|
85
|
+
return typeof value === 'string' ? Buffer.from(value, 'utf8') : value;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* An AES-256-GCM key set: one current key that seals every new envelope, and
|
|
90
|
+
* the keys kept only to open envelopes written before the last rotation. An
|
|
91
|
+
* envelope carries the fingerprint of the key that sealed it, so opening is a
|
|
92
|
+
* lookup rather than a search, and a deployment can run with both keys while
|
|
93
|
+
* the stored rows are re-sealed.
|
|
94
|
+
*/
|
|
95
|
+
export function createKeyring(options: KeyringOptions): Keyring {
|
|
96
|
+
assertKeyLength(options.current, 'current');
|
|
97
|
+
const previous = options.previous ?? [];
|
|
98
|
+
if (previous.length > KEYRING_MAX_PREVIOUS_KEYS) {
|
|
99
|
+
throw new Error(
|
|
100
|
+
`A keyring accepts at most ${KEYRING_MAX_PREVIOUS_KEYS} previous keys; ${previous.length} were given.`,
|
|
101
|
+
);
|
|
102
|
+
}
|
|
103
|
+
const current = Buffer.from(options.current);
|
|
104
|
+
const currentKeyId = keyFingerprint(current);
|
|
105
|
+
const keys = new Map<string, Buffer>([[currentKeyId, current]]);
|
|
106
|
+
const order: Buffer[] = [current];
|
|
107
|
+
for (const key of previous) {
|
|
108
|
+
assertKeyLength(key, 'previous');
|
|
109
|
+
const id = keyFingerprint(key);
|
|
110
|
+
/* A key listed twice, or a previous list still naming the key that was
|
|
111
|
+
promoted to current, is the same key under the same id. */
|
|
112
|
+
if (keys.has(id)) continue;
|
|
113
|
+
const copy = Buffer.from(key);
|
|
114
|
+
keys.set(id, copy);
|
|
115
|
+
order.push(copy);
|
|
116
|
+
}
|
|
117
|
+
const previousKeyIds = order.slice(1).map((key) => keyFingerprint(key));
|
|
118
|
+
|
|
119
|
+
const decrypt = (
|
|
120
|
+
key: Buffer,
|
|
121
|
+
envelope: StoredEnvelope,
|
|
122
|
+
aad: Uint8Array | undefined,
|
|
123
|
+
): Buffer => {
|
|
124
|
+
const decipher = createDecipheriv('aes-256-gcm', key, envelope.iv);
|
|
125
|
+
if (aad) decipher.setAAD(aad);
|
|
126
|
+
decipher.setAuthTag(envelope.tag);
|
|
127
|
+
return Buffer.concat([
|
|
128
|
+
decipher.update(envelope.ciphertext),
|
|
129
|
+
decipher.final(),
|
|
130
|
+
]);
|
|
131
|
+
};
|
|
132
|
+
|
|
133
|
+
return {
|
|
134
|
+
keyId: currentKeyId,
|
|
135
|
+
previousKeyIds,
|
|
136
|
+
knows: (keyId) => keys.has(keyId),
|
|
137
|
+
seal(plaintext, aad) {
|
|
138
|
+
const iv = randomBytes(KEYRING_IV_BYTES);
|
|
139
|
+
const cipher = createCipheriv('aes-256-gcm', current, iv);
|
|
140
|
+
if (aad !== undefined) cipher.setAAD(bytes(aad));
|
|
141
|
+
const ciphertext = Buffer.concat([
|
|
142
|
+
cipher.update(bytes(plaintext)),
|
|
143
|
+
cipher.final(),
|
|
144
|
+
]);
|
|
145
|
+
return { keyId: currentKeyId, iv, tag: cipher.getAuthTag(), ciphertext };
|
|
146
|
+
},
|
|
147
|
+
open(envelope, aad) {
|
|
148
|
+
if (
|
|
149
|
+
envelope.iv.byteLength !== KEYRING_IV_BYTES ||
|
|
150
|
+
envelope.tag.byteLength !== KEYRING_TAG_BYTES
|
|
151
|
+
) {
|
|
152
|
+
throw new KeyringError(
|
|
153
|
+
'ENVELOPE_INVALID',
|
|
154
|
+
'The envelope does not carry a 12-byte nonce and a 16-byte authentication tag.',
|
|
155
|
+
);
|
|
156
|
+
}
|
|
157
|
+
const additional = aad === undefined ? undefined : bytes(aad);
|
|
158
|
+
if (envelope.keyId !== undefined) {
|
|
159
|
+
const key = keys.get(envelope.keyId);
|
|
160
|
+
if (!key) {
|
|
161
|
+
throw new KeyringError(
|
|
162
|
+
'KEY_UNKNOWN',
|
|
163
|
+
`No key in this ring has the id ${envelope.keyId}.`,
|
|
164
|
+
);
|
|
165
|
+
}
|
|
166
|
+
try {
|
|
167
|
+
return decrypt(key, envelope, additional);
|
|
168
|
+
} catch (error) {
|
|
169
|
+
throw new KeyringError(
|
|
170
|
+
'ENVELOPE_INVALID',
|
|
171
|
+
'The envelope failed authentication under the key it names.',
|
|
172
|
+
{ cause: error },
|
|
173
|
+
);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
/* No key id was stored, so the writer cannot be identified. Nothing
|
|
177
|
+
distinguishes a missing key from a corrupt row here, and the code
|
|
178
|
+
says so: KEY_UNKNOWN covers both. */
|
|
179
|
+
for (const key of order) {
|
|
180
|
+
try {
|
|
181
|
+
return decrypt(key, envelope, additional);
|
|
182
|
+
} catch {
|
|
183
|
+
continue;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
throw new KeyringError(
|
|
187
|
+
'KEY_UNKNOWN',
|
|
188
|
+
'No key in this ring opens an envelope that carries no key id.',
|
|
189
|
+
);
|
|
190
|
+
},
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
/**
|
|
195
|
+
* Reads a comma-separated list of previous keys from one environment variable.
|
|
196
|
+
* Empty entries are dropped, so a trailing comma is not a configuration error.
|
|
197
|
+
*/
|
|
198
|
+
export function parsePreviousKeys<T>(
|
|
199
|
+
value: string | undefined,
|
|
200
|
+
decode: (entry: string) => T,
|
|
201
|
+
): readonly T[] {
|
|
202
|
+
if (!value) return [];
|
|
203
|
+
return value
|
|
204
|
+
.split(',')
|
|
205
|
+
.map((entry) => entry.trim())
|
|
206
|
+
.filter((entry) => entry.length > 0)
|
|
207
|
+
.map(decode);
|
|
208
|
+
}
|