@flowdular/sdk 0.2.3 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.ai/agents/sandbox/business-manager.md +5 -1
- package/.ai/blueprints/author-spec/README.md +1 -1
- package/.ai/blueprints/author-spec/spec-requirements.yaml +44 -0
- package/.ai/blueprints/author-spec/steps.yaml +5 -5
- package/.ai/blueprints/author-spec/templates/module.yaml +99 -3
- package/.ai/blueprints/edit-module/gates.yaml +4 -0
- package/.ai/blueprints/edit-module/required-files.yaml +9 -0
- package/.ai/blueprints/new-module/gates.yaml +4 -0
- package/.ai/blueprints/new-module/spec-requirements.yaml +2 -2
- package/.ai/blueprints/release/gates.yaml +4 -0
- package/.ai/platform-capabilities.md +128 -0
- package/.ai/policies/capabilities.yaml +100 -0
- package/.ai/policies/path-ownership.yaml +5 -2
- package/.ai/policies/task-budgets.yaml +5 -3
- package/.ai/references/catalog/module.json +4 -4
- package/.ai/references/catalog/package.json +2 -2
- package/.ai/references/catalog/spec/module.yaml +5 -3
- package/.ai/references/catalog/src/platform.ts +2 -0
- package/.ai/references/catalog/src/services/catalog-service.ts +89 -1
- package/.ai/references/catalog/src/services/data-classes.ts +47 -0
- package/.ai/references/catalog/src/services/database-repository.ts +98 -1
- package/.ai/references/catalog/src/services/repository.ts +22 -1
- package/.ai/references/catalog/tests/data-classes.test.ts +157 -0
- package/.ai/references/catalog.provenance.json +12 -10
- package/.ai/skills/README.md +10 -0
- package/.ai/skills/agent-tool-design/SKILL.md +1 -2
- package/.ai/skills/auth-security-review/SKILL.md +1 -1
- package/.ai/skills/business-agent-design/SKILL.md +0 -1
- package/.ai/skills/deploy-operate/SKILL.md +114 -0
- package/.ai/skills/module-new/SKILL.md +29 -3
- package/.ai/skills/module-update/SKILL.md +9 -3
- package/.ai/skills/perf-audit/SKILL.md +0 -1
- package/.ai/skills/release-eject-pr/SKILL.md +0 -1
- package/.ai/skills/spec-interview/SKILL.md +120 -0
- package/.ai/skills/test-hardening/SKILL.md +1 -0
- package/.ai/skills/ux-design/SKILL.md +34 -3
- package/.ai/skills/variables/SKILL.md +0 -2
- package/.ai/skills/workflow-development/SKILL.md +0 -1
- package/AGENTS.md +4 -0
- package/docs/agent-contract.md +2 -2
- package/docs/design-system.md +185 -31
- package/modules/access/migrations/0001_access_core.down.sql +1 -0
- package/modules/access/migrations/0001_access_core.up.sql +28 -0
- package/modules/access/migrations/README.md +3 -0
- package/modules/access/module.json +33 -0
- package/modules/access/package.json +43 -0
- package/modules/access/spec/module.yaml +225 -0
- package/modules/access/src/acl/permissions.ts +6 -0
- package/modules/access/src/api/endpoints.ts +244 -0
- package/modules/access/src/client/ActivityView.tsrx +245 -0
- package/modules/access/src/client/AttestationsView.tsrx +176 -0
- package/modules/access/src/client/ReviewView.tsrx +586 -0
- package/modules/access/src/client/api.ts +132 -0
- package/modules/access/src/client/contribution.tsrx +41 -0
- package/modules/access/src/client/index.ts +41 -0
- package/modules/access/src/client/navigation.ts +57 -0
- package/modules/access/src/client/presentation.ts +69 -0
- package/modules/access/src/client/state.ts +72 -0
- package/modules/access/src/domain/types.ts +189 -0
- package/modules/access/src/index.ts +38 -0
- package/modules/access/src/platform.ts +60 -0
- package/modules/access/src/server/index.ts +42 -0
- package/modules/access/src/server/runtime.ts +105 -0
- package/modules/access/src/services/access-service.ts +298 -0
- package/modules/access/src/services/audit-window.ts +78 -0
- package/modules/access/src/services/auth-directory.ts +72 -0
- package/modules/access/src/services/changes.ts +91 -0
- package/modules/access/src/services/data-classes.ts +28 -0
- package/modules/access/src/services/database-repository.ts +185 -0
- package/modules/access/src/services/directory.ts +102 -0
- package/modules/access/src/services/index.ts +33 -0
- package/modules/access/src/services/list-exports.ts +150 -0
- package/modules/access/src/services/migration.ts +54 -0
- package/modules/access/src/services/repository.ts +30 -0
- package/modules/access/src/services/review.ts +178 -0
- package/modules/access/translations/en.json +155 -0
- package/modules/access/translations/pl.json +155 -0
- package/modules/agents/migrations/0022_credential_rotation_inventory.down.sql +2 -0
- package/modules/agents/migrations/0022_credential_rotation_inventory.up.sql +7 -0
- package/modules/agents/migrations/0023_agents_retention_indexes.down.sql +2 -0
- package/modules/agents/migrations/0023_agents_retention_indexes.up.sql +9 -0
- package/modules/agents/migrations/0024_agent_meter_refusals.down.sql +3 -0
- package/modules/agents/migrations/0024_agent_meter_refusals.up.sql +22 -0
- package/modules/agents/migrations/0025_agent_list_indexes.down.sql +3 -0
- package/modules/agents/migrations/0025_agent_list_indexes.up.sql +11 -0
- package/modules/agents/module.json +30 -4
- package/modules/agents/package.json +3 -2
- package/modules/agents/spec/module.yaml +63 -5
- package/modules/agents/src/api/endpoints.ts +291 -33
- package/modules/agents/src/cli/commands.json +11 -0
- package/modules/agents/src/cli/index.ts +45 -0
- package/modules/agents/src/client/AgentDashboardWidget.tsrx +19 -11
- package/modules/agents/src/client/AgentDefinitionList.tsrx +53 -10
- package/modules/agents/src/client/AgentPlaygroundView.tsrx +4 -4
- package/modules/agents/src/client/AgentProceduresView.tsrx +2 -2
- package/modules/agents/src/client/AgentRunsView.tsrx +143 -40
- package/modules/agents/src/client/AgentsView.tsrx +109 -33
- package/modules/agents/src/client/api.ts +99 -21
- package/modules/agents/src/client/state.ts +97 -0
- package/modules/agents/src/domain/types.ts +44 -4
- package/modules/agents/src/platform.ts +42 -0
- package/modules/agents/src/server/action-execution.ts +201 -106
- package/modules/agents/src/server/runtime.ts +32 -0
- package/modules/agents/src/services/agent-service.ts +158 -30
- package/modules/agents/src/services/credential-rotation.ts +185 -0
- package/modules/agents/src/services/credential-vault.ts +71 -46
- package/modules/agents/src/services/data-classes.ts +176 -0
- package/modules/agents/src/services/database-repository.ts +393 -101
- package/modules/agents/src/services/metering.ts +111 -0
- package/modules/agents/src/services/migration.ts +109 -0
- package/modules/agents/src/services/module-agent-preflight.ts +17 -9
- package/modules/agents/src/services/notifications.ts +98 -0
- package/modules/agents/src/services/provider-repository.ts +9 -18
- package/modules/agents/src/services/provider-service.ts +1 -9
- package/modules/agents/src/services/reports.ts +107 -0
- package/modules/agents/src/services/repository.ts +86 -6
- package/modules/agents/src/services/usage-service.ts +2 -0
- package/modules/agents/src/services/worker.ts +114 -4
- package/modules/agents/src/settings.ts +14 -3
- package/modules/agents/translations/en.json +14 -4
- package/modules/agents/translations/pl.json +14 -4
- package/modules/approvals/migrations/0001_approvals_core.down.sql +3 -0
- package/modules/approvals/migrations/0001_approvals_core.up.sql +78 -0
- package/modules/approvals/migrations/0002_approvals_expiry_routing_role.down.sql +2 -0
- package/modules/approvals/migrations/0002_approvals_expiry_routing_role.up.sql +19 -0
- package/modules/approvals/migrations/0003_approvals_retention_indexes.down.sql +6 -0
- package/modules/approvals/migrations/0003_approvals_retention_indexes.up.sql +14 -0
- package/modules/approvals/migrations/0004_approvals_inbox_keyset_indexes.down.sql +5 -0
- package/modules/approvals/migrations/0004_approvals_inbox_keyset_indexes.up.sql +12 -0
- package/modules/approvals/migrations/README.md +3 -0
- package/modules/approvals/module.json +34 -0
- package/modules/approvals/package.json +43 -0
- package/modules/approvals/spec/module.yaml +318 -0
- package/modules/approvals/src/acl/permissions.ts +7 -0
- package/modules/approvals/src/api/endpoints.ts +457 -0
- package/modules/approvals/src/client/ApprovalRequestDrawer.tsrx +138 -0
- package/modules/approvals/src/client/ApprovalsView.tsrx +562 -0
- package/modules/approvals/src/client/PendingCountWidget.tsrx +52 -0
- package/modules/approvals/src/client/api.ts +203 -0
- package/modules/approvals/src/client/approvals.css +51 -0
- package/modules/approvals/src/client/contribution.tsrx +44 -0
- package/modules/approvals/src/client/index.ts +26 -0
- package/modules/approvals/src/client/navigation.ts +39 -0
- package/modules/approvals/src/client/pending-count.ts +26 -0
- package/modules/approvals/src/client/presentation.ts +52 -0
- package/modules/approvals/src/client/state.ts +141 -0
- package/modules/approvals/src/domain/capability.ts +95 -0
- package/modules/approvals/src/domain/types.ts +154 -0
- package/modules/approvals/src/index.ts +52 -0
- package/modules/approvals/src/platform.ts +128 -0
- package/modules/approvals/src/server/index.ts +42 -0
- package/modules/approvals/src/server/runtime.ts +181 -0
- package/modules/approvals/src/services/approvals-service.ts +557 -0
- package/modules/approvals/src/services/callbacks.ts +75 -0
- package/modules/approvals/src/services/data-classes.ts +167 -0
- package/modules/approvals/src/services/database-repository.ts +724 -0
- package/modules/approvals/src/services/eligibility.ts +121 -0
- package/modules/approvals/src/services/expiry-runner.ts +81 -0
- package/modules/approvals/src/services/index.ts +31 -0
- package/modules/approvals/src/services/migration.ts +222 -0
- package/modules/approvals/src/services/notifications.ts +95 -0
- package/modules/approvals/src/services/repository.ts +161 -0
- package/modules/approvals/src/services/service-error.ts +70 -0
- package/modules/approvals/src/settings.ts +102 -0
- package/modules/approvals/translations/en.json +104 -0
- package/modules/approvals/translations/pl.json +104 -0
- package/modules/audit/migrations/0001_audit_core.down.sql +8 -0
- package/modules/audit/migrations/0001_audit_core.up.sql +107 -0
- package/modules/audit/migrations/0002_audit_sweep_routing_role.down.sql +2 -0
- package/modules/audit/migrations/0002_audit_sweep_routing_role.up.sql +21 -0
- package/modules/audit/migrations/0003_audit_export_request.down.sql +12 -0
- package/modules/audit/migrations/0003_audit_export_request.up.sql +40 -0
- package/modules/audit/migrations/0004_audit_hold_seal_erasure.down.sql +17 -0
- package/modules/audit/migrations/0004_audit_hold_seal_erasure.up.sql +192 -0
- package/modules/audit/migrations/0005_audit_event_format.down.sql +17 -0
- package/modules/audit/migrations/0005_audit_event_format.up.sql +60 -0
- package/modules/audit/migrations/0006_audit_own_class_walks.down.sql +3 -0
- package/modules/audit/migrations/0006_audit_own_class_walks.up.sql +14 -0
- package/modules/audit/migrations/README.md +3 -0
- package/modules/audit/module.json +32 -0
- package/modules/audit/package.json +49 -0
- package/modules/audit/spec/module.yaml +809 -0
- package/modules/audit/src/acl/permissions.ts +7 -0
- package/modules/audit/src/api/endpoints.ts +315 -0
- package/modules/audit/src/cli/commands.json +95 -0
- package/modules/audit/src/cli/index.ts +658 -0
- package/modules/audit/src/client/DataClassesView.tsrx +420 -0
- package/modules/audit/src/client/ExportsView.tsrx +256 -0
- package/modules/audit/src/client/HoldsView.tsrx +604 -0
- package/modules/audit/src/client/SweepsView.tsrx +251 -0
- package/modules/audit/src/client/api.ts +185 -0
- package/modules/audit/src/client/contribution.tsrx +52 -0
- package/modules/audit/src/client/index.ts +23 -0
- package/modules/audit/src/client/navigation.ts +74 -0
- package/modules/audit/src/client/presentation.ts +105 -0
- package/modules/audit/src/client/state.ts +86 -0
- package/modules/audit/src/domain/data-classes.ts +16 -0
- package/modules/audit/src/domain/types.ts +339 -0
- package/modules/audit/src/index.ts +76 -0
- package/modules/audit/src/platform.ts +44 -0
- package/modules/audit/src/server/index.ts +177 -0
- package/modules/audit/src/server/runtime.ts +303 -0
- package/modules/audit/src/services/anchor-key.ts +143 -0
- package/modules/audit/src/services/anchor-rotation.ts +147 -0
- package/modules/audit/src/services/audit-runners.ts +278 -0
- package/modules/audit/src/services/backup-guard.ts +95 -0
- package/modules/audit/src/services/database-repository.ts +1946 -0
- package/modules/audit/src/services/declared-classes.ts +64 -0
- package/modules/audit/src/services/erasure-port.ts +126 -0
- package/modules/audit/src/services/erasure-service.ts +770 -0
- package/modules/audit/src/services/export-directory.ts +106 -0
- package/modules/audit/src/services/export-service.ts +714 -0
- package/modules/audit/src/services/hold-service.ts +295 -0
- package/modules/audit/src/services/index.ts +17 -0
- package/modules/audit/src/services/migration.ts +658 -0
- package/modules/audit/src/services/own-classes.ts +318 -0
- package/modules/audit/src/services/platform-version.ts +23 -0
- package/modules/audit/src/services/repository.ts +495 -0
- package/modules/audit/src/services/retention-service.ts +191 -0
- package/modules/audit/src/services/seal-service.ts +769 -0
- package/modules/audit/src/services/service-error.ts +61 -0
- package/modules/audit/src/services/subject-keys.ts +90 -0
- package/modules/audit/src/services/sweep-service.ts +298 -0
- package/modules/audit/src/services/zip.ts +217 -0
- package/modules/audit/src/settings.ts +69 -0
- package/modules/audit/translations/en.json +210 -0
- package/modules/audit/translations/pl.json +210 -0
- package/modules/auth/README.md +77 -29
- package/modules/auth/migrations/0016_external_identities.up.sql +16 -0
- package/modules/auth/migrations/0017_mfa_key_id.up.sql +8 -0
- package/modules/auth/migrations/0018_retire_bundled_module_scopes.up.sql +29 -0
- package/modules/auth/migrations/0019_notifications_member_scopes.up.sql +44 -0
- package/modules/auth/migrations/0020_identity_providers.up.sql +61 -0
- package/modules/auth/migrations/0021_membership_status.up.sql +19 -0
- package/modules/auth/migrations/0022_auth_provider_scopes.up.sql +45 -0
- package/modules/auth/migrations/0023_enterprise_module_scopes.down.sql +19 -0
- package/modules/auth/migrations/0023_enterprise_module_scopes.up.sql +71 -0
- package/modules/auth/migrations/0024_approvals_member_scopes.down.sql +22 -0
- package/modules/auth/migrations/0024_approvals_member_scopes.up.sql +48 -0
- package/modules/auth/migrations/0025_audit_holds_owner_scope.down.sql +21 -0
- package/modules/auth/migrations/0025_audit_holds_owner_scope.up.sql +47 -0
- package/modules/auth/migrations/0026_auth_export_keyset_indexes.down.sql +6 -0
- package/modules/auth/migrations/0026_auth_export_keyset_indexes.up.sql +15 -0
- package/modules/auth/migrations/0027_workflow_automation_profile_scopes.down.sql +34 -0
- package/modules/auth/migrations/0027_workflow_automation_profile_scopes.up.sql +72 -0
- package/modules/auth/migrations/0028_auth_member_search_prefix_indexes.down.sql +6 -0
- package/modules/auth/migrations/0028_auth_member_search_prefix_indexes.up.sql +21 -0
- package/modules/auth/migrations/0029_reports_exports_access_scopes.down.sql +22 -0
- package/modules/auth/migrations/0029_reports_exports_access_scopes.up.sql +56 -0
- package/modules/auth/migrations/0030_auth_membership_keyset_index.down.sql +4 -0
- package/modules/auth/migrations/0030_auth_membership_keyset_index.up.sql +10 -0
- package/modules/auth/migrations/0031_membership_scope_backfills_under_rls.down.sql +4 -0
- package/modules/auth/migrations/0031_membership_scope_backfills_under_rls.up.sql +31 -0
- package/modules/auth/migrations/0032_audit_actor_service.down.sql +9 -0
- package/modules/auth/migrations/0032_audit_actor_service.up.sql +10 -0
- package/modules/auth/migrations/0033_auth_account_keyset_indexes.down.sql +5 -0
- package/modules/auth/migrations/0033_auth_account_keyset_indexes.up.sql +23 -0
- package/modules/auth/module.json +3 -3
- package/modules/auth/package.json +3 -2
- 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 +5 -2
- package/modules/automations/spec/module.yaml +81 -7
- package/modules/automations/src/api/endpoints.ts +202 -28
- package/modules/automations/src/cli/commands.json +17 -0
- package/modules/automations/src/cli/index.ts +114 -0
- package/modules/automations/src/client/AutomationScheduleForm.tsrx +77 -19
- package/modules/automations/src/client/AutomationSchedulesView.tsrx +144 -40
- package/modules/automations/src/client/AutomationTriggersView.tsrx +131 -32
- package/modules/automations/src/client/api.ts +62 -19
- package/modules/automations/src/client/presentation.ts +20 -2
- package/modules/automations/src/client/state.ts +84 -0
- package/modules/automations/src/domain/cadence.ts +99 -3
- package/modules/automations/src/domain/cron.ts +366 -0
- package/modules/automations/src/domain/time-zone.ts +61 -0
- package/modules/automations/src/platform.ts +38 -4
- package/modules/automations/src/server/index.ts +11 -0
- package/modules/automations/src/server/runtime.ts +46 -22
- package/modules/{automations-workflows-integration/src/server/adapter.ts → automations/src/server/workflow-target.ts} +13 -14
- package/modules/{automations-workflows-integration/src/server/tools.ts → automations/src/server/workflow-tools.ts} +0 -0
- package/modules/automations/src/services/data-classes.ts +62 -0
- package/modules/automations/src/services/database-repository.ts +152 -38
- package/modules/automations/src/services/migration.ts +119 -9
- package/modules/automations/src/services/repository.ts +52 -1
- package/modules/automations/src/services/schedule-runner.ts +84 -0
- package/modules/automations/src/services/schedule-service.ts +152 -26
- package/modules/automations/src/services/secret-rotation.ts +176 -0
- package/modules/automations/src/services/secret-vault.ts +68 -41
- package/modules/automations/src/services/trigger-service.ts +13 -10
- package/modules/automations/translations/en.json +15 -2
- package/modules/automations/translations/pl.json +15 -2
- package/modules/connectors/migrations/0001_connectors_core.down.sql +3 -0
- package/modules/connectors/migrations/0001_connectors_core.up.sql +72 -0
- package/modules/connectors/migrations/0002_connectors_call_keys.down.sql +3 -0
- package/modules/connectors/migrations/0002_connectors_call_keys.up.sql +18 -0
- package/modules/connectors/migrations/README.md +3 -0
- package/modules/connectors/module.json +28 -0
- package/modules/{automations-workflows-integration → connectors}/package.json +27 -26
- package/modules/connectors/spec/module.yaml +447 -0
- package/modules/connectors/src/acl/permissions.ts +6 -0
- package/modules/connectors/src/agent/tools.ts +180 -0
- package/modules/connectors/src/api/endpoints.ts +572 -0
- package/modules/connectors/src/client/ConnectorCallsView.tsrx +358 -0
- package/modules/connectors/src/client/ConnectorForm.tsrx +424 -0
- package/modules/connectors/src/client/ConnectorsView.tsrx +711 -0
- package/modules/connectors/src/client/api.ts +281 -0
- package/modules/connectors/src/client/consent.ts +48 -0
- package/modules/connectors/src/client/contribution.tsrx +37 -0
- package/modules/connectors/src/client/index.ts +22 -0
- package/modules/connectors/src/client/navigation.ts +42 -0
- package/modules/connectors/src/client/presentation.ts +38 -0
- package/modules/connectors/src/client/state.ts +175 -0
- package/modules/connectors/src/domain/calls.ts +70 -0
- package/modules/connectors/src/domain/definitions.ts +190 -0
- package/modules/connectors/src/domain/http-json.ts +68 -0
- package/modules/connectors/src/domain/types.ts +185 -0
- package/modules/connectors/src/index.ts +64 -0
- package/modules/connectors/src/platform.ts +56 -0
- package/modules/connectors/src/server/index.ts +66 -0
- package/modules/connectors/src/server/runtime.ts +163 -0
- package/modules/connectors/src/services/call-service.ts +903 -0
- package/modules/connectors/src/services/connectors-service.ts +653 -0
- package/modules/connectors/src/services/credential-vault.ts +188 -0
- package/modules/connectors/src/services/data-classes.ts +158 -0
- package/modules/connectors/src/services/database-repository.ts +897 -0
- package/modules/connectors/src/services/egress.ts +261 -0
- package/modules/connectors/src/services/index.ts +19 -0
- package/modules/connectors/src/services/migration.ts +166 -0
- package/modules/connectors/src/services/repository.ts +175 -0
- package/modules/connectors/src/services/service-error.ts +46 -0
- package/modules/connectors/src/settings.ts +69 -0
- package/modules/connectors/translations/en.json +191 -0
- package/modules/connectors/translations/pl.json +191 -0
- package/modules/directory/migrations/0001_directory_core.down.sql +5 -0
- package/modules/directory/migrations/0001_directory_core.up.sql +111 -0
- package/modules/directory/migrations/README.md +3 -0
- package/modules/directory/module.json +27 -0
- package/modules/directory/package.json +46 -0
- package/modules/directory/spec/module.yaml +351 -0
- package/modules/directory/src/acl/permissions.ts +7 -0
- package/modules/directory/src/api/endpoints.ts +478 -0
- package/modules/directory/src/api/scim-endpoints.ts +516 -0
- package/modules/directory/src/client/GroupMappingsView.tsrx +430 -0
- package/modules/directory/src/client/ProvisioningLogView.tsrx +248 -0
- package/modules/directory/src/client/ScimTokensView.tsrx +587 -0
- package/modules/directory/src/client/api.ts +222 -0
- package/modules/directory/src/client/contribution.tsrx +46 -0
- package/modules/directory/src/client/index.ts +22 -0
- package/modules/directory/src/client/navigation.ts +57 -0
- package/modules/directory/src/client/presentation.ts +143 -0
- package/modules/directory/src/client/state.ts +173 -0
- package/modules/directory/src/domain/scim.ts +346 -0
- package/modules/directory/src/domain/types.ts +166 -0
- package/modules/directory/src/index.ts +44 -0
- package/modules/directory/src/platform.ts +43 -0
- package/modules/directory/src/server/index.ts +17 -0
- package/modules/directory/src/server/runtime.ts +124 -0
- package/modules/directory/src/services/auth-port.ts +127 -0
- package/modules/directory/src/services/data-classes.ts +41 -0
- package/modules/directory/src/services/database-repository.ts +1067 -0
- package/modules/directory/src/services/directory-service.ts +311 -0
- package/modules/directory/src/services/index.ts +43 -0
- package/modules/directory/src/services/migration.ts +146 -0
- package/modules/directory/src/services/provisioning-service.ts +1420 -0
- package/modules/directory/src/services/rate-limiter.ts +103 -0
- package/modules/directory/src/services/repository.ts +208 -0
- package/modules/directory/src/services/service-error.ts +42 -0
- package/modules/directory/src/services/token-service.ts +215 -0
- package/modules/directory/src/settings.ts +86 -0
- package/modules/directory/translations/en.json +185 -0
- package/modules/directory/translations/pl.json +185 -0
- package/modules/documents/migrations/0001_documents_core.down.sql +1 -0
- package/modules/documents/migrations/0001_documents_core.up.sql +35 -0
- package/modules/documents/migrations/0002_documents_files_page.down.sql +1 -0
- package/modules/documents/migrations/0002_documents_files_page.up.sql +6 -0
- package/modules/documents/migrations/README.md +3 -0
- package/modules/documents/module.json +28 -0
- package/modules/documents/package.json +49 -0
- package/modules/documents/spec/module.yaml +247 -0
- package/modules/documents/src/acl/permissions.ts +6 -0
- package/modules/documents/src/api/endpoints.ts +401 -0
- package/modules/documents/src/client/DocumentUploader.tsrx +148 -0
- package/modules/documents/src/client/DocumentsView.tsrx +540 -0
- package/modules/documents/src/client/api.ts +209 -0
- package/modules/documents/src/client/contribution.tsrx +29 -0
- package/modules/documents/src/client/download.ts +70 -0
- package/modules/documents/src/client/index.ts +22 -0
- package/modules/documents/src/client/navigation.ts +25 -0
- package/modules/documents/src/client/presentation.ts +110 -0
- package/modules/documents/src/client/state.ts +117 -0
- package/modules/documents/src/domain/attachments.ts +84 -0
- package/modules/documents/src/domain/types.ts +80 -0
- package/modules/documents/src/index.ts +46 -0
- package/modules/documents/src/platform.ts +61 -0
- package/modules/documents/src/server/index.ts +30 -0
- package/modules/documents/src/server/runtime.ts +107 -0
- package/modules/documents/src/services/attachments.ts +39 -0
- package/modules/documents/src/services/data-classes.ts +25 -0
- package/modules/documents/src/services/database-repository.ts +259 -0
- package/modules/documents/src/services/documents-service.ts +586 -0
- package/modules/documents/src/services/index.ts +18 -0
- package/modules/documents/src/services/migration.ts +82 -0
- package/modules/documents/src/services/repository.ts +48 -0
- package/modules/documents/src/settings.ts +107 -0
- package/modules/documents/translations/en.json +111 -0
- package/modules/documents/translations/pl.json +111 -0
- package/modules/exports/migrations/0001_exports_core.down.sql +2 -0
- package/modules/exports/migrations/0001_exports_core.up.sql +28 -0
- package/modules/exports/migrations/0002_exports_job_routing_role.down.sql +4 -0
- package/modules/exports/migrations/0002_exports_job_routing_role.up.sql +21 -0
- package/modules/exports/migrations/README.md +3 -0
- package/modules/exports/module.json +28 -0
- package/modules/exports/package.json +44 -0
- package/modules/exports/spec/module.yaml +229 -0
- package/modules/exports/src/acl/permissions.ts +6 -0
- package/modules/exports/src/api/endpoints.ts +211 -0
- package/modules/exports/src/client/ExportsView.tsrx +327 -0
- package/modules/exports/src/client/api.ts +133 -0
- package/modules/exports/src/client/contribution.tsrx +31 -0
- package/modules/exports/src/client/index.ts +20 -0
- package/modules/exports/src/client/navigation.ts +25 -0
- package/modules/exports/src/client/presentation.ts +53 -0
- package/modules/exports/src/client/state.ts +56 -0
- package/modules/exports/src/domain/lists.ts +29 -0
- package/modules/exports/src/domain/types.ts +120 -0
- package/modules/exports/src/index.ts +41 -0
- package/modules/exports/src/platform.ts +80 -0
- package/modules/exports/src/server/index.ts +51 -0
- package/modules/exports/src/server/runtime.ts +160 -0
- package/modules/exports/src/services/data-classes.ts +56 -0
- package/modules/exports/src/services/database-repository.ts +405 -0
- package/modules/exports/src/services/export-runner.ts +123 -0
- package/modules/exports/src/services/export-service.ts +356 -0
- package/modules/exports/src/services/index.ts +6 -0
- package/modules/exports/src/services/list-registry.ts +105 -0
- package/modules/exports/src/services/migration.ts +89 -0
- package/modules/exports/src/services/repository.ts +97 -0
- package/modules/exports/src/settings.ts +70 -0
- package/modules/exports/translations/en.json +69 -0
- package/modules/exports/translations/pl.json +69 -0
- package/modules/import/migrations/0001_import_core.down.sql +6 -0
- package/modules/import/migrations/0001_import_core.up.sql +61 -0
- package/modules/import/migrations/0002_import_job_routing_role.down.sql +4 -0
- package/modules/import/migrations/0002_import_job_routing_role.up.sql +20 -0
- package/modules/import/migrations/0003_import_jobs_export_index.down.sql +1 -0
- package/modules/import/migrations/0003_import_jobs_export_index.up.sql +7 -0
- package/modules/import/migrations/0004_import_jobs_traceparent.down.sql +1 -0
- package/modules/import/migrations/0004_import_jobs_traceparent.up.sql +7 -0
- package/modules/import/migrations/README.md +3 -0
- package/modules/import/module.json +37 -0
- package/modules/import/package.json +50 -0
- package/modules/import/spec/module.yaml +335 -0
- package/modules/import/src/acl/permissions.ts +6 -0
- package/modules/import/src/api/endpoints.ts +400 -0
- package/modules/import/src/client/ImportJobDrawer.tsrx +229 -0
- package/modules/import/src/client/ImportsView.tsrx +455 -0
- package/modules/import/src/client/NewImportForm.tsrx +274 -0
- package/modules/import/src/client/api.ts +243 -0
- package/modules/import/src/client/contribution.tsrx +29 -0
- package/modules/import/src/client/index.ts +23 -0
- package/modules/import/src/client/navigation.ts +25 -0
- package/modules/import/src/client/presentation.ts +59 -0
- package/modules/import/src/client/state.ts +43 -0
- package/modules/import/src/domain/csv.ts +258 -0
- package/modules/import/src/domain/ports.ts +157 -0
- package/modules/import/src/domain/types.ts +179 -0
- package/modules/import/src/index.ts +58 -0
- package/modules/import/src/platform.ts +60 -0
- package/modules/import/src/server/index.ts +49 -0
- package/modules/import/src/server/runtime.ts +158 -0
- package/modules/import/src/services/csv-source.ts +121 -0
- package/modules/import/src/services/data-classes.ts +63 -0
- package/modules/import/src/services/database-repository.ts +780 -0
- package/modules/import/src/services/import-runner.ts +127 -0
- package/modules/import/src/services/import-service.ts +872 -0
- package/modules/import/src/services/index.ts +6 -0
- package/modules/import/src/services/migration.ts +156 -0
- package/modules/import/src/services/port-registry.ts +158 -0
- package/modules/import/src/services/repository.ts +147 -0
- package/modules/import/src/settings.ts +70 -0
- package/modules/import/translations/en.json +175 -0
- package/modules/import/translations/pl.json +175 -0
- package/modules/metering/migrations/0001_metering_core.down.sql +6 -0
- package/modules/metering/migrations/0001_metering_core.up.sql +119 -0
- package/modules/metering/migrations/0002_metering_bucket_export.down.sql +3 -0
- package/modules/metering/migrations/0002_metering_bucket_export.up.sql +5 -0
- package/modules/metering/migrations/README.md +3 -0
- package/modules/metering/module.json +46 -0
- package/modules/metering/package.json +50 -0
- package/modules/metering/spec/module.yaml +269 -0
- package/modules/metering/src/acl/permissions.ts +5 -0
- package/modules/metering/src/api/endpoints.ts +104 -0
- package/modules/metering/src/cli/commands.json +28 -0
- package/modules/metering/src/cli/index.ts +246 -0
- package/modules/metering/src/client/LimitsView.tsrx +170 -0
- package/modules/metering/src/client/UsageSummaryWidget.tsrx +63 -0
- package/modules/metering/src/client/UsageView.tsrx +205 -0
- package/modules/metering/src/client/api.ts +91 -0
- package/modules/metering/src/client/contribution.tsrx +42 -0
- package/modules/metering/src/client/index.ts +26 -0
- package/modules/metering/src/client/navigation.ts +54 -0
- package/modules/metering/src/client/presentation.ts +63 -0
- package/modules/metering/src/client/state.ts +31 -0
- package/modules/metering/src/domain/meters.ts +100 -0
- package/modules/metering/src/domain/types.ts +71 -0
- package/modules/metering/src/index.ts +51 -0
- package/modules/metering/src/platform.ts +84 -0
- package/modules/metering/src/server/index.ts +40 -0
- package/modules/metering/src/server/runtime.ts +165 -0
- package/modules/metering/src/services/data-classes.ts +34 -0
- package/modules/metering/src/services/database-repository.ts +574 -0
- package/modules/metering/src/services/index.ts +9 -0
- package/modules/metering/src/services/meter-registry.ts +145 -0
- package/modules/metering/src/services/metering-service.ts +441 -0
- package/modules/metering/src/services/migration.ts +183 -0
- package/modules/metering/src/services/notifications.ts +75 -0
- package/modules/metering/src/services/reports.ts +105 -0
- package/modules/metering/src/services/repository.ts +132 -0
- package/modules/metering/src/services/service-error.ts +46 -0
- package/modules/metering/src/settings.ts +47 -0
- package/modules/metering/translations/en.json +68 -0
- package/modules/metering/translations/pl.json +68 -0
- package/modules/notifications/migrations/0001_notifications_core.down.sql +1 -0
- package/modules/notifications/migrations/0001_notifications_core.up.sql +26 -0
- package/modules/notifications/migrations/0002_notifications_preferences.down.sql +1 -0
- package/modules/notifications/migrations/0002_notifications_preferences.up.sql +17 -0
- package/modules/notifications/migrations/0003_notifications_webhook_subscriptions.down.sql +1 -0
- package/modules/notifications/migrations/0003_notifications_webhook_subscriptions.up.sql +30 -0
- package/modules/notifications/migrations/0004_notifications_deliveries.down.sql +1 -0
- package/modules/notifications/migrations/0004_notifications_deliveries.up.sql +35 -0
- package/modules/notifications/migrations/0005_notifications_delivery_routing_role.down.sql +2 -0
- package/modules/notifications/migrations/0005_notifications_delivery_routing_role.up.sql +17 -0
- package/modules/notifications/migrations/0006_notifications_delivery_title.down.sql +1 -0
- package/modules/notifications/migrations/0006_notifications_delivery_title.up.sql +11 -0
- package/modules/notifications/migrations/0007_notifications_secret_rotation_inventory.down.sql +2 -0
- package/modules/notifications/migrations/0007_notifications_secret_rotation_inventory.up.sql +19 -0
- package/modules/notifications/migrations/0008_notifications_delivery_claim.down.sql +8 -0
- package/modules/notifications/migrations/0008_notifications_delivery_claim.up.sql +19 -0
- package/modules/notifications/migrations/0009_notifications_kind_approvals.down.sql +16 -0
- package/modules/notifications/migrations/0009_notifications_kind_approvals.up.sql +18 -0
- package/modules/notifications/migrations/0010_notifications_kind_meter_threshold.down.sql +16 -0
- package/modules/notifications/migrations/0010_notifications_kind_meter_threshold.up.sql +18 -0
- package/modules/notifications/migrations/0011_notifications_retention_keyset.down.sql +5 -0
- package/modules/notifications/migrations/0011_notifications_retention_keyset.up.sql +15 -0
- package/modules/notifications/migrations/0012_notifications_email_channel.down.sql +12 -0
- package/modules/notifications/migrations/0012_notifications_email_channel.up.sql +38 -0
- package/modules/notifications/migrations/0013_notifications_list_pages.down.sql +5 -0
- package/modules/notifications/migrations/0013_notifications_list_pages.up.sql +13 -0
- package/modules/notifications/migrations/README.md +3 -0
- package/modules/notifications/module.json +32 -0
- package/modules/notifications/package.json +49 -0
- package/modules/notifications/spec/module.yaml +718 -0
- package/modules/notifications/src/acl/permissions.ts +11 -0
- package/modules/notifications/src/api/endpoints.ts +814 -0
- package/modules/notifications/src/cli/commands.json +17 -0
- package/modules/notifications/src/cli/index.ts +126 -0
- package/modules/notifications/src/client/DeliveriesView.tsrx +483 -0
- package/modules/notifications/src/client/FactList.tsrx +24 -0
- package/modules/notifications/src/client/NotificationPreferencesView.tsrx +240 -0
- package/modules/notifications/src/client/NotificationsInboxView.tsrx +592 -0
- package/modules/notifications/src/client/UnreadCountWidget.tsrx +62 -0
- package/modules/notifications/src/client/WebhookForm.tsrx +297 -0
- package/modules/notifications/src/client/WebhooksView.tsrx +637 -0
- package/modules/notifications/src/client/api.ts +382 -0
- package/modules/notifications/src/client/contribution.tsrx +83 -0
- package/modules/notifications/src/client/inbox.ts +41 -0
- package/modules/notifications/src/client/index.ts +29 -0
- package/modules/notifications/src/client/navigation.ts +92 -0
- package/modules/notifications/src/client/notifications.css +70 -0
- package/modules/notifications/src/client/presentation.ts +81 -0
- package/modules/notifications/src/client/state.ts +246 -0
- package/modules/notifications/src/client/unread-count.ts +26 -0
- package/modules/notifications/src/domain/locale.ts +47 -0
- package/modules/notifications/src/domain/publish.ts +46 -0
- package/modules/notifications/src/domain/types.ts +186 -0
- package/modules/notifications/src/index.ts +62 -0
- package/modules/notifications/src/platform.ts +85 -0
- package/modules/notifications/src/server/index.ts +82 -0
- package/modules/notifications/src/server/runtime.ts +251 -0
- package/modules/notifications/src/services/data-classes.ts +139 -0
- package/modules/notifications/src/services/database-repository.ts +1334 -0
- package/modules/notifications/src/services/delivery-payload.ts +93 -0
- package/modules/notifications/src/services/delivery-runner.ts +170 -0
- package/modules/notifications/src/services/delivery-service.ts +811 -0
- package/modules/notifications/src/services/egress.ts +239 -0
- package/modules/notifications/src/services/email-channel.ts +93 -0
- package/modules/notifications/src/services/index.ts +23 -0
- package/modules/notifications/src/services/migration.ts +572 -0
- package/modules/notifications/src/services/notifications-service.ts +297 -0
- package/modules/notifications/src/services/paging.ts +60 -0
- package/modules/notifications/src/services/publish-service.ts +133 -0
- package/modules/notifications/src/services/repository.ts +342 -0
- package/modules/notifications/src/services/secret-rotation.ts +177 -0
- package/modules/notifications/src/services/secret-vault.ts +168 -0
- package/modules/notifications/src/services/service-error.ts +67 -0
- package/modules/notifications/src/services/signature.ts +81 -0
- package/modules/notifications/src/services/webhook-service.ts +307 -0
- package/modules/notifications/src/settings.ts +130 -0
- package/modules/notifications/translations/en.json +255 -0
- package/modules/notifications/translations/pl.json +255 -0
- package/modules/profile/module.json +3 -3
- package/modules/profile/package.json +2 -2
- 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 +2 -2
- 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 +2 -2
- 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 +5 -2
- 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 +3 -2
- 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 +66 -7
- package/packages/client/package.json +2 -1
- package/packages/client/src/ApplicationShell.tsrx +43 -0
- package/packages/client/src/contributions.ts +55 -0
- package/packages/client/src/i18n/locales/en.json +5 -0
- package/packages/client/src/i18n/locales/pl.json +5 -0
- package/packages/client/src/index.ts +13 -1
- package/packages/client/src/routing.ts +22 -0
- package/packages/client/src/shell/CommandPalette.tsrx +223 -11
- package/packages/client/src/shell/command-search.ts +126 -0
- package/packages/client/src/shell/command.ts +30 -0
- package/packages/client/src/shell/navigation.ts +12 -0
- package/packages/client/src/shell/palette-keys.ts +27 -0
- package/packages/client/src/shell/shell.css +7 -0
- package/packages/contracts/schemas/module-spec.schema.json +287 -1
- package/packages/contracts/schemas/module.schema.json +25 -0
- package/packages/contracts/src/index.ts +144 -1
- package/packages/database/src/backup.ts +179 -0
- package/packages/database/src/decoders.ts +25 -0
- package/packages/database/src/index.ts +17 -0
- package/packages/database/src/record-history.ts +5 -14
- package/packages/dev-console/package.json +2 -1
- package/packages/dev-console/src/brand.d.mts +8 -0
- package/packages/dev-console/src/brand.mjs +33 -0
- package/packages/dev-console/src/index.mjs +2 -1
- package/packages/harness/src/index.ts +2 -0
- package/packages/harness/src/runtime.ts +218 -1
- package/packages/harness/src/tool-adapters.ts +19 -1
- package/packages/kernel/src/acl.ts +179 -0
- package/packages/kernel/src/capability-registry.ts +69 -2
- package/packages/kernel/src/data-class-registry.ts +354 -0
- package/packages/kernel/src/index.ts +65 -4
- package/packages/kernel/src/keyring.ts +208 -0
- package/packages/kernel/src/module-compatibility.ts +35 -4
- package/packages/kernel/src/module-registry.ts +49 -2
- package/packages/kernel/src/module-settings.ts +189 -27
- package/packages/server/package.json +2 -1
- package/packages/server/src/composition.ts +38 -0
- package/packages/server/src/endpoint.ts +104 -47
- package/packages/server/src/export/csv.ts +34 -0
- package/packages/server/src/export/definition.ts +346 -0
- package/packages/server/src/export/index.ts +61 -0
- package/packages/server/src/export/run.ts +116 -0
- package/packages/server/src/index.ts +155 -0
- package/packages/server/src/jobs/index.ts +93 -0
- package/packages/server/src/jobs/runner.ts +486 -0
- package/packages/server/src/log.ts +291 -0
- package/packages/server/src/mail/config.ts +184 -0
- package/packages/server/src/mail/contracts.ts +251 -0
- package/packages/server/src/mail/index.ts +31 -0
- package/packages/server/src/mail/port.ts +101 -0
- package/packages/server/src/mail/smtp.ts +191 -0
- package/packages/server/src/mail/template.ts +105 -0
- package/packages/server/src/metrics.ts +447 -0
- package/packages/server/src/pagination.ts +246 -0
- package/packages/server/src/trace/context.ts +103 -0
- package/packages/server/src/trace/egress.ts +66 -0
- package/packages/server/src/trace/error-sink.ts +296 -0
- package/packages/server/src/trace/exporter.ts +295 -0
- package/packages/server/src/trace/index.ts +60 -0
- package/packages/server/src/trace/job-sink.ts +172 -0
- package/packages/server/src/trace/tracer.ts +338 -0
- package/packages/server/src/web.ts +5 -1
- package/packages/storage/package.json +40 -0
- package/packages/storage/src/config.ts +189 -0
- package/packages/storage/src/content-type.ts +124 -0
- package/packages/storage/src/contracts.ts +112 -0
- package/packages/storage/src/envelope.ts +189 -0
- package/packages/storage/src/index.ts +43 -0
- package/packages/storage/src/local.ts +75 -0
- package/packages/storage/src/port.ts +251 -0
- package/packages/storage/src/read-token.ts +130 -0
- package/packages/storage/src/s3.ts +144 -0
- package/packages/storage/src/scanner.ts +22 -0
- package/packages/storage/src/sigv4.ts +104 -0
- package/packages/storage/src/store.ts +13 -0
- package/packages/ui/package.json +1 -0
- package/packages/ui/src/components/Button.tsrx +3 -0
- package/packages/ui/src/components/ConfirmDialog.tsrx +13 -2
- package/packages/ui/src/components/DateField.tsrx +92 -0
- package/packages/ui/src/components/DatePicker.tsrx +525 -0
- package/packages/ui/src/components/DateRangeField.tsrx +93 -0
- package/packages/ui/src/components/Drawer.tsrx +10 -1
- package/packages/ui/src/components/FileUpload.tsrx +158 -0
- package/packages/ui/src/components/Pagination.tsrx +130 -0
- package/packages/ui/src/components/Select.tsrx +78 -0
- package/packages/ui/src/components/Table.tsrx +498 -81
- package/packages/ui/src/components/Tabs.tsrx +53 -0
- package/packages/ui/src/components/ToastHost.tsrx +48 -0
- package/packages/ui/src/components/calendar.ts +243 -0
- package/packages/ui/src/components/date-field.ts +62 -0
- package/packages/ui/src/components/file-upload.ts +49 -0
- package/packages/ui/src/components/focus-trap.ts +62 -0
- package/packages/ui/src/components/pagination.ts +68 -0
- package/packages/ui/src/components/table-sorting.ts +49 -0
- package/packages/ui/src/components/tabs.ts +61 -0
- package/packages/ui/src/components/toast-store.ts +116 -0
- package/packages/ui/src/icons/Icon.tsrx +5 -0
- package/packages/ui/src/index.ts +45 -0
- package/packages/ui/src/styles/components.css +598 -0
- package/modules/automations-workflows-integration/module.json +0 -27
- package/modules/automations-workflows-integration/spec/module.yaml +0 -93
- package/modules/automations-workflows-integration/src/index.ts +0 -14
- package/modules/automations-workflows-integration/src/platform.ts +0 -24
- package/modules/automations-workflows-integration/src/server/index.ts +0 -11
- package/modules/automations-workflows-integration/translations/en.json +0 -21
- package/modules/automations-workflows-integration/translations/pl.json +0 -21
- package/modules/workflows/src/services/cursor-codec.ts +0 -62
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import type { TagTone } from '@flowdular/sdk/ui';
|
|
2
|
+
import { activeLocale, t } from '@flowdular/sdk/client/i18n';
|
|
3
|
+
import type {
|
|
4
|
+
DeliveryStatus,
|
|
5
|
+
NotificationKind,
|
|
6
|
+
NotificationsInboxStatus,
|
|
7
|
+
WebhookSubscriptionStatus,
|
|
8
|
+
} from '../domain/types.ts';
|
|
9
|
+
|
|
10
|
+
function formatted(value: number): string {
|
|
11
|
+
return new Intl.DateTimeFormat(activeLocale(), {
|
|
12
|
+
dateStyle: 'medium',
|
|
13
|
+
timeStyle: 'short',
|
|
14
|
+
}).format(value);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/** Epoch milliseconds as the reader's local date and time. */
|
|
18
|
+
export function timestampLabel(value: number | null): string {
|
|
19
|
+
if (value === null) return t('notifications.common.notYet');
|
|
20
|
+
return formatted(value);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/** The inbox stores `readAt` as ISO text; an unparsable value stays visible. */
|
|
24
|
+
export function isoTimestampLabel(value: string | null): string {
|
|
25
|
+
if (value === null || value === '') return t('notifications.common.notYet');
|
|
26
|
+
const parsed = Date.parse(value);
|
|
27
|
+
return Number.isNaN(parsed) ? value : formatted(parsed);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/** The second line of a delivery's timing cell: when the attempt ended. */
|
|
31
|
+
export function deliveryCompletedLabel(value: number | null): string {
|
|
32
|
+
if (value === null) return t('notifications.deliveries.timing.pending');
|
|
33
|
+
return t('notifications.deliveries.timing.completed', {
|
|
34
|
+
value: formatted(value),
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export function kindLabel(kind: NotificationKind): string {
|
|
39
|
+
return t('notifications.kind.' + kind);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export function inboxStatusLabel(status: NotificationsInboxStatus): string {
|
|
43
|
+
return t('notifications.status.' + status);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export function inboxStatusTone(status: NotificationsInboxStatus): TagTone {
|
|
47
|
+
if (status === 'unread') return 'info';
|
|
48
|
+
return status === 'read' ? 'success' : 'neutral';
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export function subscriptionStatusLabel(
|
|
52
|
+
status: WebhookSubscriptionStatus,
|
|
53
|
+
): string {
|
|
54
|
+
return t('notifications.subscription.status.' + status);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export function subscriptionStatusTone(
|
|
58
|
+
status: WebhookSubscriptionStatus,
|
|
59
|
+
): TagTone {
|
|
60
|
+
if (status === 'active') return 'success';
|
|
61
|
+
return status === 'paused' ? 'warning' : 'neutral';
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export function deliveryStatusLabel(status: DeliveryStatus): string {
|
|
65
|
+
return t('notifications.delivery.status.' + status);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export function deliveryStatusTone(status: DeliveryStatus): TagTone {
|
|
69
|
+
if (status === 'succeeded') return 'success';
|
|
70
|
+
if (status === 'pending') return 'info';
|
|
71
|
+
return status === 'failed' ? 'warning' : 'danger';
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/* The ledger stores a stable class the server may extend. An unknown class is
|
|
75
|
+
shown as the server wrote it instead of being dropped. */
|
|
76
|
+
export function errorClassLabel(value: string | null): string {
|
|
77
|
+
if (value === null || value === '') return '';
|
|
78
|
+
const key = 'notifications.deliveries.errorClass.' + value;
|
|
79
|
+
const translated = t(key);
|
|
80
|
+
return translated === key ? value : translated;
|
|
81
|
+
}
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
import { cell, createStore } from 'segment-state';
|
|
2
|
+
import type {
|
|
3
|
+
DeliveryAttempt,
|
|
4
|
+
DeliveryStatus,
|
|
5
|
+
InboxTransition,
|
|
6
|
+
InboxTransitionOutcome,
|
|
7
|
+
NotificationKind,
|
|
8
|
+
NotificationPreference,
|
|
9
|
+
NotificationsInbox,
|
|
10
|
+
NotificationsInboxStatus,
|
|
11
|
+
WebhookSubscription,
|
|
12
|
+
} from '../domain/types.ts';
|
|
13
|
+
|
|
14
|
+
export type SortDirection = 'asc' | 'desc';
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* The pages a keyset-paged screen has walked. `cursors[i]` is the cursor that
|
|
18
|
+
* opens page `i`; page 0 has none, and a page past the last one loaded has no
|
|
19
|
+
* cursor yet, so the screen can go back to any page it saw and forward one.
|
|
20
|
+
*/
|
|
21
|
+
export interface CursorStack {
|
|
22
|
+
readonly cursors: readonly string[];
|
|
23
|
+
/** Whether a page follows the last one loaded. */
|
|
24
|
+
readonly hasMore: boolean;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export const FIRST_PAGE: CursorStack = { cursors: [''], hasMore: false };
|
|
28
|
+
|
|
29
|
+
/** The cursor that opens `pageIndex`, or null when the screen has not reached it. */
|
|
30
|
+
export function pageCursor(
|
|
31
|
+
stack: CursorStack,
|
|
32
|
+
pageIndex: number,
|
|
33
|
+
): string | null {
|
|
34
|
+
return stack.cursors[pageIndex] ?? null;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* What the page just loaded said about the page after it. Pages beyond it are
|
|
39
|
+
* forgotten: they were reached through a cursor this response replaces.
|
|
40
|
+
*/
|
|
41
|
+
export function pageLoaded(
|
|
42
|
+
stack: CursorStack,
|
|
43
|
+
pageIndex: number,
|
|
44
|
+
nextCursor: string | null,
|
|
45
|
+
): CursorStack {
|
|
46
|
+
const kept = stack.cursors.slice(0, pageIndex + 1);
|
|
47
|
+
return {
|
|
48
|
+
cursors: nextCursor === null ? kept : [...kept, nextCursor],
|
|
49
|
+
hasMore: nextCursor !== null,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/** `denied` is a 403 the shell could not hide; `error` is everything else. */
|
|
54
|
+
export type ScreenStatus =
|
|
55
|
+
| 'idle'
|
|
56
|
+
| 'loading'
|
|
57
|
+
| 'submitting'
|
|
58
|
+
| 'denied'
|
|
59
|
+
| 'error';
|
|
60
|
+
|
|
61
|
+
export interface SaveResult {
|
|
62
|
+
readonly ok: boolean;
|
|
63
|
+
readonly message: string;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export function createInboxClientState() {
|
|
67
|
+
const store = createStore({
|
|
68
|
+
items: cell<readonly NotificationsInbox[]>([]),
|
|
69
|
+
status: cell<ScreenStatus>('idle'),
|
|
70
|
+
error: '',
|
|
71
|
+
/* '' keeps the default inbox: everything the member has not archived. */
|
|
72
|
+
statusFilter: cell<NotificationsInboxStatus | ''>(''),
|
|
73
|
+
kindFilter: cell<NotificationKind | ''>(''),
|
|
74
|
+
filtersOpen: false,
|
|
75
|
+
selectedId: cell<string | null>(null),
|
|
76
|
+
pageIndex: 0,
|
|
77
|
+
pageSize: 25,
|
|
78
|
+
pages: cell<CursorStack>(FIRST_PAGE),
|
|
79
|
+
/* The open inbox came back empty while archived items exist: the default
|
|
80
|
+
rule is hiding them, so the table reads as narrowed, not as a first run. */
|
|
81
|
+
archivedHidden: false,
|
|
82
|
+
/* Rows checked on the page; every new listing starts with none. */
|
|
83
|
+
selectedIds: cell<ReadonlySet<string>>(new Set()),
|
|
84
|
+
confirmArchiveMany: false,
|
|
85
|
+
});
|
|
86
|
+
return { store, state: store.state };
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* The checked rows one bulk change may name, by the same rule the row actions
|
|
91
|
+
* follow: mark-read is for unread rows, archive for rows not archived yet.
|
|
92
|
+
*/
|
|
93
|
+
export function transitionableIds(
|
|
94
|
+
items: readonly NotificationsInbox[],
|
|
95
|
+
selected: ReadonlySet<string>,
|
|
96
|
+
transition: InboxTransition,
|
|
97
|
+
): readonly string[] {
|
|
98
|
+
return items
|
|
99
|
+
.filter(
|
|
100
|
+
(item) =>
|
|
101
|
+
selected.has(item.id) &&
|
|
102
|
+
(transition === 'mark-read'
|
|
103
|
+
? item.status === 'unread'
|
|
104
|
+
: item.status !== 'archived'),
|
|
105
|
+
)
|
|
106
|
+
.map((item) => item.id);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/** How many ids each outcome covered, for the notice after a bulk change. */
|
|
110
|
+
export function transitionOutcomeCounts(
|
|
111
|
+
outcomes: readonly InboxTransitionOutcome[],
|
|
112
|
+
): {
|
|
113
|
+
readonly updated: number;
|
|
114
|
+
readonly missing: number;
|
|
115
|
+
readonly refused: number;
|
|
116
|
+
} {
|
|
117
|
+
let updated = 0;
|
|
118
|
+
let missing = 0;
|
|
119
|
+
let refused = 0;
|
|
120
|
+
for (const entry of outcomes) {
|
|
121
|
+
if (entry.outcome === 'updated') updated += 1;
|
|
122
|
+
else if (entry.outcome === 'not-found') missing += 1;
|
|
123
|
+
else refused += 1;
|
|
124
|
+
}
|
|
125
|
+
return { updated, missing, refused };
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
export function createPreferencesClientState() {
|
|
129
|
+
const store = createStore({
|
|
130
|
+
kinds: cell<readonly NotificationKind[]>([]),
|
|
131
|
+
preferences: cell<readonly NotificationPreference[]>([]),
|
|
132
|
+
/* The workspace-wide switch; off until the loaded settings say otherwise. */
|
|
133
|
+
emailDelivery: false,
|
|
134
|
+
status: cell<ScreenStatus>('idle'),
|
|
135
|
+
error: '',
|
|
136
|
+
/* Which switch is saving: a kind, the workspace-wide 'email', or none. */
|
|
137
|
+
busyKind: cell<NotificationKind | 'email' | ''>(''),
|
|
138
|
+
results: cell<Readonly<Record<string, SaveResult>>>({}),
|
|
139
|
+
});
|
|
140
|
+
return { store, state: store.state };
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
export interface EmailDeliverySwitchInput {
|
|
144
|
+
readonly status: ScreenStatus;
|
|
145
|
+
readonly canManage: boolean;
|
|
146
|
+
readonly busy: boolean;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
export interface EmailDeliverySwitchState {
|
|
150
|
+
readonly shown: boolean;
|
|
151
|
+
readonly disabled: boolean;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* The workspace-wide e-mail switch. It has no stored row to fall back on the
|
|
156
|
+
* way a kind does, so before the load answers and after one that failed the
|
|
157
|
+
* screen would show the store's `false` as the member's own answer and write
|
|
158
|
+
* that answer back on the first click.
|
|
159
|
+
*/
|
|
160
|
+
export function emailDeliverySwitchState(
|
|
161
|
+
input: EmailDeliverySwitchInput,
|
|
162
|
+
): EmailDeliverySwitchState {
|
|
163
|
+
const loaded = input.status === 'idle';
|
|
164
|
+
return {
|
|
165
|
+
shown: loaded,
|
|
166
|
+
disabled: !input.canManage || input.busy || !loaded,
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/** Which manage action is waiting for its confirmation dialog. */
|
|
171
|
+
export type WebhookConfirm = 'rotate' | 'disable' | 'delete';
|
|
172
|
+
|
|
173
|
+
export function createWebhooksClientState() {
|
|
174
|
+
const store = createStore({
|
|
175
|
+
subscriptions: cell<readonly WebhookSubscription[]>([]),
|
|
176
|
+
status: cell<ScreenStatus>('idle'),
|
|
177
|
+
error: '',
|
|
178
|
+
query: '',
|
|
179
|
+
/* The term the rows on screen answer; the box may be ahead of it. */
|
|
180
|
+
appliedQuery: '',
|
|
181
|
+
statusFilter: cell<WebhookSubscription['status'] | ''>(''),
|
|
182
|
+
direction: cell<SortDirection>('asc'),
|
|
183
|
+
pageIndex: 0,
|
|
184
|
+
pageSize: 25,
|
|
185
|
+
pages: cell<CursorStack>(FIRST_PAGE),
|
|
186
|
+
filtersOpen: false,
|
|
187
|
+
editorOpen: false,
|
|
188
|
+
selectedId: '',
|
|
189
|
+
formSession: 0,
|
|
190
|
+
/* Held only until the drawer closes; the server never returns it again. */
|
|
191
|
+
revealedSecret: '',
|
|
192
|
+
confirm: cell<WebhookConfirm | null>(null),
|
|
193
|
+
});
|
|
194
|
+
return { store, state: store.state };
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
export function createDeliveriesClientState() {
|
|
198
|
+
const store = createStore({
|
|
199
|
+
deliveries: cell<readonly DeliveryAttempt[]>([]),
|
|
200
|
+
subscriptions: cell<readonly WebhookSubscription[]>([]),
|
|
201
|
+
status: cell<ScreenStatus>('idle'),
|
|
202
|
+
error: '',
|
|
203
|
+
query: '',
|
|
204
|
+
appliedQuery: '',
|
|
205
|
+
statusFilter: cell<DeliveryStatus | ''>(''),
|
|
206
|
+
subscriptionFilter: '',
|
|
207
|
+
direction: cell<SortDirection>('desc'),
|
|
208
|
+
pageIndex: 0,
|
|
209
|
+
pageSize: 25,
|
|
210
|
+
pages: cell<CursorStack>(FIRST_PAGE),
|
|
211
|
+
filtersOpen: false,
|
|
212
|
+
replayId: cell<string | null>(null),
|
|
213
|
+
});
|
|
214
|
+
return { store, state: store.state };
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
/** The subscription name behind a delivery, or its id when names are not readable. */
|
|
218
|
+
export function subscriptionNames(
|
|
219
|
+
subscriptions: readonly WebhookSubscription[],
|
|
220
|
+
): ReadonlyMap<string, string> {
|
|
221
|
+
return new Map(
|
|
222
|
+
subscriptions.map((subscription) => [subscription.id, subscription.name]),
|
|
223
|
+
);
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
* The subscriptions the ledger filter offers: every one the reader may see by
|
|
228
|
+
* name, plus any the page on screen names that the list did not, so the filter
|
|
229
|
+
* still works when the list is not readable or a row outlived its subscription.
|
|
230
|
+
*/
|
|
231
|
+
export function subscriptionOptions(
|
|
232
|
+
subscriptions: readonly WebhookSubscription[],
|
|
233
|
+
deliveries: readonly DeliveryAttempt[],
|
|
234
|
+
): readonly { readonly value: string; readonly label: string }[] {
|
|
235
|
+
const names = subscriptionNames(subscriptions);
|
|
236
|
+
const ids = new Set(names.keys());
|
|
237
|
+
for (const delivery of deliveries) {
|
|
238
|
+
if (delivery.subscriptionId !== null) ids.add(delivery.subscriptionId);
|
|
239
|
+
}
|
|
240
|
+
return [...ids].map((id) => ({ value: id, label: names.get(id) ?? id }));
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
/** Whether the search box is ahead of the term the rows answer. */
|
|
244
|
+
export function searchPending(query: string, applied: string): boolean {
|
|
245
|
+
return query.trim() !== applied;
|
|
246
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { cell, createStore } from 'segment-state';
|
|
2
|
+
import { loadUnreadCount } from './api.ts';
|
|
3
|
+
|
|
4
|
+
/* One count behind the topbar badge and the inbox screen. The screen reports
|
|
5
|
+
what it just changed, so the badge follows a real event instead of polling
|
|
6
|
+
for one. */
|
|
7
|
+
const store = createStore({ unread: cell(0) });
|
|
8
|
+
|
|
9
|
+
export const unreadCount = store.state.unread;
|
|
10
|
+
|
|
11
|
+
export function clearUnreadCount(): void {
|
|
12
|
+
store.set(store.state.unread, 0, 'notifications/unread-cleared');
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export async function refreshUnreadCount(): Promise<void> {
|
|
16
|
+
try {
|
|
17
|
+
store.set(
|
|
18
|
+
store.state.unread,
|
|
19
|
+
await loadUnreadCount(),
|
|
20
|
+
'notifications/unread-loaded',
|
|
21
|
+
);
|
|
22
|
+
} catch {
|
|
23
|
+
/* The badge is an accessory. A failed count keeps the last one rather than
|
|
24
|
+
raising an error across the whole workspace. */
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { MAIL_LIMITS } from '@flowdular/sdk/server';
|
|
2
|
+
import {
|
|
3
|
+
ModuleSettingsError,
|
|
4
|
+
type ModuleSettingsRuntime,
|
|
5
|
+
} from '@flowdular/sdk/kernel';
|
|
6
|
+
|
|
7
|
+
/* Declared and owned by auth.core as a shared tenant setting. This module reads
|
|
8
|
+
it through the settings runtime, never through auth.core storage. */
|
|
9
|
+
export const TENANT_LOCALE_MODULE_ID = 'auth.core';
|
|
10
|
+
export const TENANT_LOCALE_KEY = 'defaultLocale';
|
|
11
|
+
export const DEFAULT_MAIL_LOCALE = 'en';
|
|
12
|
+
|
|
13
|
+
/* Mirrors the tag the mail port accepts, whose length bound is MAIL_LIMITS. A
|
|
14
|
+
workspace whose stored value is not one must still be mailable: the port
|
|
15
|
+
refuses such a message on every attempt, which would dead-letter every
|
|
16
|
+
notification the workspace sends. */
|
|
17
|
+
const LOCALE_PATTERN = /^[A-Za-z]{2,8}(?:-[A-Za-z0-9]{1,8})*$/;
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* The language one workspace's messages say they are written in. A workspace
|
|
21
|
+
* that set nothing, a deployment without auth.core, and a stored value the mail
|
|
22
|
+
* port would refuse all resolve to English.
|
|
23
|
+
*/
|
|
24
|
+
export function tenantMailLocale(
|
|
25
|
+
settings: ModuleSettingsRuntime,
|
|
26
|
+
tenantId: string,
|
|
27
|
+
): string {
|
|
28
|
+
let stored: string;
|
|
29
|
+
try {
|
|
30
|
+
stored = settings
|
|
31
|
+
.get<string>(tenantId, TENANT_LOCALE_MODULE_ID, TENANT_LOCALE_KEY)
|
|
32
|
+
.trim();
|
|
33
|
+
} catch (error) {
|
|
34
|
+
/* Absent auth.core is a deployment shape; an unprimed workspace is a
|
|
35
|
+
caller defect and stays loud. */
|
|
36
|
+
if (
|
|
37
|
+
error instanceof ModuleSettingsError &&
|
|
38
|
+
error.code === 'SETTINGS_NOT_PRIMED'
|
|
39
|
+
) {
|
|
40
|
+
throw error;
|
|
41
|
+
}
|
|
42
|
+
return DEFAULT_MAIL_LOCALE;
|
|
43
|
+
}
|
|
44
|
+
return stored.length <= MAIL_LIMITS.locale && LOCALE_PATTERN.test(stored)
|
|
45
|
+
? stored
|
|
46
|
+
: DEFAULT_MAIL_LOCALE;
|
|
47
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { NotificationKind } from './types.ts';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* The public cross-module surface. A publisher resolves it through
|
|
5
|
+
* `context.capabilities.get<NotificationPublisher>(NOTIFICATIONS_PUBLISH_CAPABILITY)`
|
|
6
|
+
* and continues without notifying when it is absent.
|
|
7
|
+
*/
|
|
8
|
+
export const NOTIFICATIONS_PUBLISH_CAPABILITY = 'notifications.publish.v1';
|
|
9
|
+
|
|
10
|
+
export interface NotificationPublishInput {
|
|
11
|
+
readonly tenantId: string;
|
|
12
|
+
readonly kind: NotificationKind;
|
|
13
|
+
/** Publisher module id, for example `agents.core`. */
|
|
14
|
+
readonly sourceModule: string;
|
|
15
|
+
/** Stable reference to the publisher's record, for example a run id. */
|
|
16
|
+
readonly sourceRef: string;
|
|
17
|
+
readonly title: string;
|
|
18
|
+
readonly body?: string;
|
|
19
|
+
/** Account ids of the members the event is addressed to. */
|
|
20
|
+
readonly recipients: readonly string[];
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export interface NotificationPublishResult {
|
|
24
|
+
/** Ascending by id, so a repeat returns arrays equal to the first call's. */
|
|
25
|
+
readonly inboxItemIds: readonly string[];
|
|
26
|
+
readonly deliveryIds: readonly string[];
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export interface NotificationPublisher {
|
|
30
|
+
/**
|
|
31
|
+
* Idempotent on (tenantId, kind, sourceRef): a repeat writes nothing and
|
|
32
|
+
* returns the identifiers the first call created. Member preferences decide
|
|
33
|
+
* whether an inbox item is written; webhook deliveries are unaffected by them.
|
|
34
|
+
*/
|
|
35
|
+
publish(input: NotificationPublishInput): Promise<NotificationPublishResult>;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/** Longest values the capability accepts; over any of them is a rejection. */
|
|
39
|
+
export const PUBLISH_LIMITS = {
|
|
40
|
+
sourceModule: 64,
|
|
41
|
+
sourceRef: 200,
|
|
42
|
+
title: 200,
|
|
43
|
+
body: 4_000,
|
|
44
|
+
recipients: 64,
|
|
45
|
+
accountId: 128,
|
|
46
|
+
} as const;
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
/** Every event this module carries. Inbox items, preferences, subscriptions and
|
|
2
|
+
deliveries all key off the same closed set. */
|
|
3
|
+
export const NOTIFICATION_KINDS = [
|
|
4
|
+
'agent-run-completed',
|
|
5
|
+
'agent-run-failed',
|
|
6
|
+
'workflow-run-completed',
|
|
7
|
+
'workflow-run-failed',
|
|
8
|
+
'webhook-dead-letter',
|
|
9
|
+
'approval-requested',
|
|
10
|
+
'approval-decided',
|
|
11
|
+
'meter-threshold',
|
|
12
|
+
] as const;
|
|
13
|
+
|
|
14
|
+
export type NotificationKind = (typeof NOTIFICATION_KINDS)[number];
|
|
15
|
+
|
|
16
|
+
export const INBOX_STATUSES = ['unread', 'read', 'archived'] as const;
|
|
17
|
+
export type NotificationsInboxStatus = (typeof INBOX_STATUSES)[number];
|
|
18
|
+
|
|
19
|
+
/** The changes a member may apply to many of their own items at once. */
|
|
20
|
+
export const INBOX_TRANSITIONS = ['mark-read', 'archive'] as const;
|
|
21
|
+
export type InboxTransition = (typeof INBOX_TRANSITIONS)[number];
|
|
22
|
+
/** Most ids one bulk transition names. */
|
|
23
|
+
export const INBOX_TRANSITION_MANY_LIMIT = 100;
|
|
24
|
+
|
|
25
|
+
export interface InboxTransitionOutcome {
|
|
26
|
+
readonly id: string;
|
|
27
|
+
readonly outcome: 'updated' | 'not-found' | 'refused';
|
|
28
|
+
/** The stable code behind a refusal. */
|
|
29
|
+
readonly reason?: string;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export const SUBSCRIPTION_STATUSES = ['active', 'paused', 'disabled'] as const;
|
|
33
|
+
export type WebhookSubscriptionStatus = (typeof SUBSCRIPTION_STATUSES)[number];
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* How an attempt leaves the process. A webhook attempt is addressed to a
|
|
37
|
+
* subscription of the workspace, an e-mail attempt to one member who asked for
|
|
38
|
+
* it; both share the queue, the retry budget and the dead letter.
|
|
39
|
+
*/
|
|
40
|
+
export const DELIVERY_CHANNELS = ['webhook', 'email'] as const;
|
|
41
|
+
export type DeliveryChannel = (typeof DELIVERY_CHANNELS)[number];
|
|
42
|
+
|
|
43
|
+
export const DELIVERY_STATUSES = [
|
|
44
|
+
'pending',
|
|
45
|
+
'succeeded',
|
|
46
|
+
'failed',
|
|
47
|
+
'dead-letter',
|
|
48
|
+
] as const;
|
|
49
|
+
export type DeliveryStatus = (typeof DELIVERY_STATUSES)[number];
|
|
50
|
+
|
|
51
|
+
/** Stable failure classes recorded on an attempt. Never a response body. */
|
|
52
|
+
export const DELIVERY_ERROR_CLASSES = [
|
|
53
|
+
'timeout',
|
|
54
|
+
'dns',
|
|
55
|
+
'egress-refused',
|
|
56
|
+
'response-4xx',
|
|
57
|
+
'response-5xx',
|
|
58
|
+
'network',
|
|
59
|
+
/** The port refused it: no transport, or a message it would not accept. */
|
|
60
|
+
'mail-refused',
|
|
61
|
+
/** The addressed member has no readable address or no inbox item left. */
|
|
62
|
+
'recipient-unknown',
|
|
63
|
+
] as const;
|
|
64
|
+
export type DeliveryErrorClass = (typeof DELIVERY_ERROR_CLASSES)[number];
|
|
65
|
+
|
|
66
|
+
export interface NotificationsInbox {
|
|
67
|
+
readonly id: string;
|
|
68
|
+
readonly tenantId: string;
|
|
69
|
+
readonly recipientAccountId: string;
|
|
70
|
+
readonly kind: NotificationKind;
|
|
71
|
+
readonly title: string;
|
|
72
|
+
readonly body: string | null;
|
|
73
|
+
readonly sourceModule: string;
|
|
74
|
+
readonly sourceRef: string;
|
|
75
|
+
readonly status: NotificationsInboxStatus;
|
|
76
|
+
readonly readAt: string | null;
|
|
77
|
+
readonly createdAt: number;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* The switches a member holds for the whole workspace rather than per kind. An
|
|
82
|
+
* absent row means the defaults: e-mail delivery off.
|
|
83
|
+
*/
|
|
84
|
+
export interface MemberNotificationSettings {
|
|
85
|
+
readonly tenantId: string;
|
|
86
|
+
readonly recipientAccountId: string;
|
|
87
|
+
/** Also send every inbox item this member receives to their address. */
|
|
88
|
+
readonly emailDelivery: boolean;
|
|
89
|
+
readonly createdAt: number;
|
|
90
|
+
readonly updatedAt: number;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
export const DEFAULT_EMAIL_DELIVERY = false;
|
|
94
|
+
|
|
95
|
+
export interface NotificationPreference {
|
|
96
|
+
readonly id: string;
|
|
97
|
+
readonly tenantId: string;
|
|
98
|
+
readonly recipientAccountId: string;
|
|
99
|
+
readonly kind: NotificationKind;
|
|
100
|
+
readonly enabled: boolean;
|
|
101
|
+
readonly createdAt: number;
|
|
102
|
+
readonly updatedAt: number;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/** A subscription as any read path may see it: fingerprint, never the secret. */
|
|
106
|
+
export interface WebhookSubscription {
|
|
107
|
+
readonly id: string;
|
|
108
|
+
readonly tenantId: string;
|
|
109
|
+
readonly name: string;
|
|
110
|
+
readonly url: string;
|
|
111
|
+
readonly events: readonly NotificationKind[];
|
|
112
|
+
readonly secretFingerprint: string;
|
|
113
|
+
readonly secretRevision: number;
|
|
114
|
+
readonly status: WebhookSubscriptionStatus;
|
|
115
|
+
readonly description: string | null;
|
|
116
|
+
readonly lastDeliveryAt: number | null;
|
|
117
|
+
readonly createdAt: number;
|
|
118
|
+
readonly updatedAt: number;
|
|
119
|
+
readonly createdBy: string;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/** Returned once, at creation and at rotation, and never read back. */
|
|
123
|
+
export interface WebhookSubscriptionSecret {
|
|
124
|
+
readonly subscription: WebhookSubscription;
|
|
125
|
+
readonly secret: string;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
export interface CreateWebhookSubscriptionInput {
|
|
129
|
+
readonly name: string;
|
|
130
|
+
readonly url: string;
|
|
131
|
+
readonly events: readonly NotificationKind[];
|
|
132
|
+
readonly description?: string | null;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
export interface UpdateWebhookSubscriptionInput
|
|
136
|
+
extends CreateWebhookSubscriptionInput {
|
|
137
|
+
readonly id: string;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
export interface DeliveryAttempt {
|
|
141
|
+
readonly id: string;
|
|
142
|
+
readonly tenantId: string;
|
|
143
|
+
readonly channel: DeliveryChannel;
|
|
144
|
+
/** The subscription a webhook attempt is addressed to; null on e-mail. */
|
|
145
|
+
readonly subscriptionId: string | null;
|
|
146
|
+
/** The member an e-mail attempt is addressed to; null on a webhook. */
|
|
147
|
+
readonly recipientAccountId: string | null;
|
|
148
|
+
readonly kind: NotificationKind;
|
|
149
|
+
readonly sourceModule: string;
|
|
150
|
+
readonly sourceRef: string;
|
|
151
|
+
/** The published title, carried in the payload and signed with it. */
|
|
152
|
+
readonly title: string;
|
|
153
|
+
/** Attempt runs of one event: 1 for the original, one more per replay. */
|
|
154
|
+
readonly sequence: number;
|
|
155
|
+
readonly attemptNumber: number;
|
|
156
|
+
readonly status: DeliveryStatus;
|
|
157
|
+
readonly scheduledFor: number;
|
|
158
|
+
readonly completedAt: number | null;
|
|
159
|
+
readonly responseStatus: number | null;
|
|
160
|
+
readonly errorClass: string | null;
|
|
161
|
+
readonly payloadDigest: string;
|
|
162
|
+
readonly payloadBytes: number;
|
|
163
|
+
/** Publication time of the event; stable across every attempt and replay. */
|
|
164
|
+
readonly occurredAt: number;
|
|
165
|
+
readonly createdAt: number;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/** What the cross-tenant poll is allowed to learn on the background role. */
|
|
169
|
+
export interface DeliveryRouting {
|
|
170
|
+
readonly tenantId: string;
|
|
171
|
+
readonly id: string;
|
|
172
|
+
readonly scheduledFor: number;
|
|
173
|
+
readonly status: DeliveryStatus;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
/** The body signed and sent to a subscription, and rebuilt for every replay. */
|
|
177
|
+
export interface WebhookEventPayload {
|
|
178
|
+
readonly version: 'notifications.v1';
|
|
179
|
+
readonly event: NotificationKind;
|
|
180
|
+
readonly tenantId: string;
|
|
181
|
+
readonly subscriptionId: string;
|
|
182
|
+
readonly sourceModule: string;
|
|
183
|
+
readonly sourceRef: string;
|
|
184
|
+
readonly title: string;
|
|
185
|
+
readonly occurredAt: number;
|
|
186
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { ModuleManifest, RegisteredModule } from '@flowdular/sdk/contracts';
|
|
2
|
+
import manifest from '../module.json' with { type: 'json' };
|
|
3
|
+
import { NOTIFICATIONS_PERMISSIONS } from './acl/permissions.ts';
|
|
4
|
+
|
|
5
|
+
export const moduleDefinition = {
|
|
6
|
+
manifest: manifest as ModuleManifest,
|
|
7
|
+
navigation: [
|
|
8
|
+
{
|
|
9
|
+
id: 'notifications.navigation',
|
|
10
|
+
label: 'Notifications Core',
|
|
11
|
+
href: '/notifications',
|
|
12
|
+
order: 50,
|
|
13
|
+
permission: NOTIFICATIONS_PERMISSIONS.read,
|
|
14
|
+
},
|
|
15
|
+
],
|
|
16
|
+
permissions: Object.values(NOTIFICATIONS_PERMISSIONS),
|
|
17
|
+
} satisfies RegisteredModule;
|
|
18
|
+
|
|
19
|
+
export { NOTIFICATIONS_PERMISSIONS } from './acl/permissions.ts';
|
|
20
|
+
|
|
21
|
+
/* The cross-module contract. A publisher imports the identifier and the types
|
|
22
|
+
from here and resolves the implementation through the capability registry;
|
|
23
|
+
nothing else in this module is meant to be imported by another one. */
|
|
24
|
+
export { NOTIFICATIONS_PUBLISH_CAPABILITY } from './domain/publish.ts';
|
|
25
|
+
export type {
|
|
26
|
+
NotificationPublisher,
|
|
27
|
+
NotificationPublishInput,
|
|
28
|
+
NotificationPublishResult,
|
|
29
|
+
} from './domain/publish.ts';
|
|
30
|
+
|
|
31
|
+
export {
|
|
32
|
+
NOTIFICATION_KINDS,
|
|
33
|
+
DELIVERY_STATUSES,
|
|
34
|
+
DELIVERY_ERROR_CLASSES,
|
|
35
|
+
INBOX_STATUSES,
|
|
36
|
+
SUBSCRIPTION_STATUSES,
|
|
37
|
+
} from './domain/types.ts';
|
|
38
|
+
export type {
|
|
39
|
+
DeliveryAttempt,
|
|
40
|
+
DeliveryErrorClass,
|
|
41
|
+
DeliveryStatus,
|
|
42
|
+
NotificationKind,
|
|
43
|
+
NotificationPreference,
|
|
44
|
+
NotificationsInbox,
|
|
45
|
+
NotificationsInboxStatus,
|
|
46
|
+
WebhookEventPayload,
|
|
47
|
+
WebhookSubscription,
|
|
48
|
+
WebhookSubscriptionSecret,
|
|
49
|
+
WebhookSubscriptionStatus,
|
|
50
|
+
} from './domain/types.ts';
|
|
51
|
+
|
|
52
|
+
/* The receiver half of the signing scheme, so a customer and a test verify a
|
|
53
|
+
delivery with the code that produced it. */
|
|
54
|
+
export {
|
|
55
|
+
verifyOutboundSignature,
|
|
56
|
+
WEBHOOK_SIGNATURE_HEADER,
|
|
57
|
+
WEBHOOK_SIGNATURE_VERSION,
|
|
58
|
+
WEBHOOK_TIMESTAMP_HEADER,
|
|
59
|
+
} from './services/signature.ts';
|
|
60
|
+
export type { OutboundSignatureCheck } from './services/signature.ts';
|
|
61
|
+
|
|
62
|
+
export { NotificationsServiceError } from './services/service-error.ts';
|