@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.
Files changed (930) hide show
  1. package/.ai/agents/sandbox/business-manager.md +5 -1
  2. package/.ai/blueprints/author-spec/README.md +1 -1
  3. package/.ai/blueprints/author-spec/spec-requirements.yaml +44 -0
  4. package/.ai/blueprints/author-spec/steps.yaml +5 -5
  5. package/.ai/blueprints/author-spec/templates/module.yaml +99 -3
  6. package/.ai/blueprints/edit-module/gates.yaml +4 -0
  7. package/.ai/blueprints/edit-module/required-files.yaml +9 -0
  8. package/.ai/blueprints/new-module/gates.yaml +4 -0
  9. package/.ai/blueprints/new-module/spec-requirements.yaml +2 -2
  10. package/.ai/blueprints/release/gates.yaml +4 -0
  11. package/.ai/platform-capabilities.md +128 -0
  12. package/.ai/policies/capabilities.yaml +130 -3
  13. package/.ai/policies/path-ownership.yaml +5 -2
  14. package/.ai/policies/task-budgets.yaml +5 -3
  15. package/.ai/references/catalog/module.json +4 -4
  16. package/.ai/references/catalog/package.json +2 -2
  17. package/.ai/references/catalog/spec/module.yaml +5 -3
  18. package/.ai/references/catalog/src/platform.ts +2 -0
  19. package/.ai/references/catalog/src/services/catalog-service.ts +89 -1
  20. package/.ai/references/catalog/src/services/data-classes.ts +47 -0
  21. package/.ai/references/catalog/src/services/database-repository.ts +98 -1
  22. package/.ai/references/catalog/src/services/repository.ts +22 -1
  23. package/.ai/references/catalog/tests/data-classes.test.ts +157 -0
  24. package/.ai/references/catalog.provenance.json +12 -10
  25. package/.ai/skills/README.md +10 -0
  26. package/.ai/skills/agent-tool-design/SKILL.md +1 -2
  27. package/.ai/skills/auth-security-review/SKILL.md +1 -1
  28. package/.ai/skills/business-agent-design/SKILL.md +0 -1
  29. package/.ai/skills/cli-extension/SKILL.md +1 -1
  30. package/.ai/skills/deploy-operate/SKILL.md +119 -0
  31. package/.ai/skills/module-new/SKILL.md +29 -3
  32. package/.ai/skills/module-update/SKILL.md +9 -3
  33. package/.ai/skills/perf-audit/SKILL.md +0 -1
  34. package/.ai/skills/release-eject-pr/SKILL.md +0 -1
  35. package/.ai/skills/spec-interview/SKILL.md +120 -0
  36. package/.ai/skills/test-hardening/SKILL.md +1 -0
  37. package/.ai/skills/ux-design/SKILL.md +34 -3
  38. package/.ai/skills/variables/SKILL.md +0 -2
  39. package/.ai/skills/workflow-development/SKILL.md +0 -1
  40. package/AGENTS.md +4 -0
  41. package/docs/agent-contract.md +2 -2
  42. package/docs/design-system.md +185 -31
  43. package/modules/access/migrations/0001_access_core.down.sql +1 -0
  44. package/modules/access/migrations/0001_access_core.up.sql +28 -0
  45. package/modules/access/migrations/README.md +3 -0
  46. package/modules/access/module.json +33 -0
  47. package/modules/access/package.json +43 -0
  48. package/modules/access/spec/module.yaml +225 -0
  49. package/modules/access/src/acl/permissions.ts +6 -0
  50. package/modules/access/src/api/endpoints.ts +244 -0
  51. package/modules/access/src/client/ActivityView.tsrx +245 -0
  52. package/modules/access/src/client/AttestationsView.tsrx +176 -0
  53. package/modules/access/src/client/ReviewView.tsrx +586 -0
  54. package/modules/access/src/client/api.ts +132 -0
  55. package/modules/access/src/client/contribution.tsrx +41 -0
  56. package/modules/access/src/client/index.ts +41 -0
  57. package/modules/access/src/client/navigation.ts +57 -0
  58. package/modules/access/src/client/presentation.ts +69 -0
  59. package/modules/access/src/client/state.ts +72 -0
  60. package/modules/access/src/domain/types.ts +189 -0
  61. package/modules/access/src/index.ts +38 -0
  62. package/modules/access/src/platform.ts +60 -0
  63. package/modules/access/src/server/index.ts +42 -0
  64. package/modules/access/src/server/runtime.ts +105 -0
  65. package/modules/access/src/services/access-service.ts +298 -0
  66. package/modules/access/src/services/audit-window.ts +78 -0
  67. package/modules/access/src/services/auth-directory.ts +72 -0
  68. package/modules/access/src/services/changes.ts +91 -0
  69. package/modules/access/src/services/data-classes.ts +28 -0
  70. package/modules/access/src/services/database-repository.ts +185 -0
  71. package/modules/access/src/services/directory.ts +102 -0
  72. package/modules/access/src/services/index.ts +33 -0
  73. package/modules/access/src/services/list-exports.ts +150 -0
  74. package/modules/access/src/services/migration.ts +54 -0
  75. package/modules/access/src/services/repository.ts +30 -0
  76. package/modules/access/src/services/review.ts +178 -0
  77. package/modules/access/translations/en.json +155 -0
  78. package/modules/access/translations/pl.json +155 -0
  79. package/modules/agents/migrations/0022_credential_rotation_inventory.down.sql +2 -0
  80. package/modules/agents/migrations/0022_credential_rotation_inventory.up.sql +7 -0
  81. package/modules/agents/migrations/0023_agents_retention_indexes.down.sql +2 -0
  82. package/modules/agents/migrations/0023_agents_retention_indexes.up.sql +9 -0
  83. package/modules/agents/migrations/0024_agent_meter_refusals.down.sql +3 -0
  84. package/modules/agents/migrations/0024_agent_meter_refusals.up.sql +22 -0
  85. package/modules/agents/migrations/0025_agent_list_indexes.down.sql +3 -0
  86. package/modules/agents/migrations/0025_agent_list_indexes.up.sql +11 -0
  87. package/modules/agents/module.json +30 -4
  88. package/modules/agents/package.json +2 -1
  89. package/modules/agents/spec/module.yaml +63 -5
  90. package/modules/agents/src/api/endpoints.ts +291 -33
  91. package/modules/agents/src/cli/commands.json +11 -0
  92. package/modules/agents/src/cli/index.ts +45 -0
  93. package/modules/agents/src/client/AgentDashboardWidget.tsrx +19 -11
  94. package/modules/agents/src/client/AgentDefinitionList.tsrx +53 -10
  95. package/modules/agents/src/client/AgentPlaygroundView.tsrx +4 -4
  96. package/modules/agents/src/client/AgentProceduresView.tsrx +2 -2
  97. package/modules/agents/src/client/AgentRunsView.tsrx +143 -40
  98. package/modules/agents/src/client/AgentsView.tsrx +109 -33
  99. package/modules/agents/src/client/api.ts +99 -21
  100. package/modules/agents/src/client/state.ts +97 -0
  101. package/modules/agents/src/domain/types.ts +44 -4
  102. package/modules/agents/src/platform.ts +42 -0
  103. package/modules/agents/src/server/action-execution.ts +201 -106
  104. package/modules/agents/src/server/runtime.ts +32 -0
  105. package/modules/agents/src/services/agent-service.ts +158 -30
  106. package/modules/agents/src/services/credential-rotation.ts +185 -0
  107. package/modules/agents/src/services/credential-vault.ts +71 -46
  108. package/modules/agents/src/services/data-classes.ts +176 -0
  109. package/modules/agents/src/services/database-repository.ts +393 -101
  110. package/modules/agents/src/services/metering.ts +111 -0
  111. package/modules/agents/src/services/migration.ts +109 -0
  112. package/modules/agents/src/services/module-agent-preflight.ts +17 -9
  113. package/modules/agents/src/services/notifications.ts +98 -0
  114. package/modules/agents/src/services/provider-repository.ts +9 -18
  115. package/modules/agents/src/services/provider-service.ts +1 -9
  116. package/modules/agents/src/services/reports.ts +107 -0
  117. package/modules/agents/src/services/repository.ts +86 -6
  118. package/modules/agents/src/services/usage-service.ts +2 -0
  119. package/modules/agents/src/services/worker.ts +114 -4
  120. package/modules/agents/src/settings.ts +14 -3
  121. package/modules/agents/translations/en.json +14 -4
  122. package/modules/agents/translations/pl.json +14 -4
  123. package/modules/approvals/migrations/0001_approvals_core.down.sql +3 -0
  124. package/modules/approvals/migrations/0001_approvals_core.up.sql +78 -0
  125. package/modules/approvals/migrations/0002_approvals_expiry_routing_role.down.sql +2 -0
  126. package/modules/approvals/migrations/0002_approvals_expiry_routing_role.up.sql +19 -0
  127. package/modules/approvals/migrations/0003_approvals_retention_indexes.down.sql +6 -0
  128. package/modules/approvals/migrations/0003_approvals_retention_indexes.up.sql +14 -0
  129. package/modules/approvals/migrations/0004_approvals_inbox_keyset_indexes.down.sql +5 -0
  130. package/modules/approvals/migrations/0004_approvals_inbox_keyset_indexes.up.sql +12 -0
  131. package/modules/approvals/migrations/0005_approvals_grant_audit.down.sql +4 -0
  132. package/modules/approvals/migrations/0005_approvals_grant_audit.up.sql +20 -0
  133. package/modules/approvals/migrations/README.md +3 -0
  134. package/modules/approvals/module.json +34 -0
  135. package/modules/approvals/package.json +43 -0
  136. package/modules/approvals/spec/module.yaml +327 -0
  137. package/modules/approvals/src/acl/permissions.ts +7 -0
  138. package/modules/approvals/src/api/endpoints.ts +457 -0
  139. package/modules/approvals/src/client/ApprovalRequestDrawer.tsrx +138 -0
  140. package/modules/approvals/src/client/ApprovalsView.tsrx +562 -0
  141. package/modules/approvals/src/client/PendingCountWidget.tsrx +52 -0
  142. package/modules/approvals/src/client/api.ts +203 -0
  143. package/modules/approvals/src/client/approvals.css +51 -0
  144. package/modules/approvals/src/client/contribution.tsrx +44 -0
  145. package/modules/approvals/src/client/index.ts +26 -0
  146. package/modules/approvals/src/client/navigation.ts +39 -0
  147. package/modules/approvals/src/client/pending-count.ts +26 -0
  148. package/modules/approvals/src/client/presentation.ts +52 -0
  149. package/modules/approvals/src/client/state.ts +141 -0
  150. package/modules/approvals/src/domain/capability.ts +107 -0
  151. package/modules/approvals/src/domain/grant.ts +69 -0
  152. package/modules/approvals/src/domain/types.ts +168 -0
  153. package/modules/approvals/src/index.ts +61 -0
  154. package/modules/approvals/src/platform.ts +136 -0
  155. package/modules/approvals/src/server/index.ts +42 -0
  156. package/modules/approvals/src/server/runtime.ts +185 -0
  157. package/modules/approvals/src/services/approvals-service.ts +637 -0
  158. package/modules/approvals/src/services/callbacks.ts +75 -0
  159. package/modules/approvals/src/services/data-classes.ts +167 -0
  160. package/modules/approvals/src/services/database-repository.ts +783 -0
  161. package/modules/approvals/src/services/eligibility.ts +121 -0
  162. package/modules/approvals/src/services/expiry-runner.ts +81 -0
  163. package/modules/approvals/src/services/index.ts +31 -0
  164. package/modules/approvals/src/services/migration.ts +256 -0
  165. package/modules/approvals/src/services/notifications.ts +95 -0
  166. package/modules/approvals/src/services/repository.ts +169 -0
  167. package/modules/approvals/src/services/service-error.ts +70 -0
  168. package/modules/approvals/src/settings.ts +102 -0
  169. package/modules/approvals/translations/en.json +104 -0
  170. package/modules/approvals/translations/pl.json +104 -0
  171. package/modules/audit/migrations/0001_audit_core.down.sql +8 -0
  172. package/modules/audit/migrations/0001_audit_core.up.sql +107 -0
  173. package/modules/audit/migrations/0002_audit_sweep_routing_role.down.sql +2 -0
  174. package/modules/audit/migrations/0002_audit_sweep_routing_role.up.sql +21 -0
  175. package/modules/audit/migrations/0003_audit_export_request.down.sql +12 -0
  176. package/modules/audit/migrations/0003_audit_export_request.up.sql +40 -0
  177. package/modules/audit/migrations/0004_audit_hold_seal_erasure.down.sql +17 -0
  178. package/modules/audit/migrations/0004_audit_hold_seal_erasure.up.sql +192 -0
  179. package/modules/audit/migrations/0005_audit_event_format.down.sql +17 -0
  180. package/modules/audit/migrations/0005_audit_event_format.up.sql +60 -0
  181. package/modules/audit/migrations/0006_audit_own_class_walks.down.sql +3 -0
  182. package/modules/audit/migrations/0006_audit_own_class_walks.up.sql +14 -0
  183. package/modules/audit/migrations/README.md +3 -0
  184. package/modules/audit/module.json +32 -0
  185. package/modules/audit/package.json +49 -0
  186. package/modules/audit/spec/module.yaml +809 -0
  187. package/modules/audit/src/acl/permissions.ts +7 -0
  188. package/modules/audit/src/api/endpoints.ts +315 -0
  189. package/modules/audit/src/cli/commands.json +95 -0
  190. package/modules/audit/src/cli/index.ts +658 -0
  191. package/modules/audit/src/client/DataClassesView.tsrx +420 -0
  192. package/modules/audit/src/client/ExportsView.tsrx +256 -0
  193. package/modules/audit/src/client/HoldsView.tsrx +604 -0
  194. package/modules/audit/src/client/SweepsView.tsrx +251 -0
  195. package/modules/audit/src/client/api.ts +185 -0
  196. package/modules/audit/src/client/contribution.tsrx +52 -0
  197. package/modules/audit/src/client/index.ts +23 -0
  198. package/modules/audit/src/client/navigation.ts +74 -0
  199. package/modules/audit/src/client/presentation.ts +105 -0
  200. package/modules/audit/src/client/state.ts +86 -0
  201. package/modules/audit/src/domain/data-classes.ts +16 -0
  202. package/modules/audit/src/domain/types.ts +339 -0
  203. package/modules/audit/src/index.ts +76 -0
  204. package/modules/audit/src/platform.ts +44 -0
  205. package/modules/audit/src/server/index.ts +177 -0
  206. package/modules/audit/src/server/runtime.ts +303 -0
  207. package/modules/audit/src/services/anchor-key.ts +143 -0
  208. package/modules/audit/src/services/anchor-rotation.ts +147 -0
  209. package/modules/audit/src/services/audit-runners.ts +278 -0
  210. package/modules/audit/src/services/backup-guard.ts +95 -0
  211. package/modules/audit/src/services/database-repository.ts +1946 -0
  212. package/modules/audit/src/services/declared-classes.ts +64 -0
  213. package/modules/audit/src/services/erasure-port.ts +126 -0
  214. package/modules/audit/src/services/erasure-service.ts +770 -0
  215. package/modules/audit/src/services/export-directory.ts +106 -0
  216. package/modules/audit/src/services/export-service.ts +714 -0
  217. package/modules/audit/src/services/hold-service.ts +295 -0
  218. package/modules/audit/src/services/index.ts +17 -0
  219. package/modules/audit/src/services/migration.ts +658 -0
  220. package/modules/audit/src/services/own-classes.ts +318 -0
  221. package/modules/audit/src/services/platform-version.ts +23 -0
  222. package/modules/audit/src/services/repository.ts +495 -0
  223. package/modules/audit/src/services/retention-service.ts +191 -0
  224. package/modules/audit/src/services/seal-service.ts +769 -0
  225. package/modules/audit/src/services/service-error.ts +61 -0
  226. package/modules/audit/src/services/subject-keys.ts +90 -0
  227. package/modules/audit/src/services/sweep-service.ts +298 -0
  228. package/modules/audit/src/services/zip.ts +217 -0
  229. package/modules/audit/src/settings.ts +69 -0
  230. package/modules/audit/translations/en.json +210 -0
  231. package/modules/audit/translations/pl.json +210 -0
  232. package/modules/auth/README.md +77 -29
  233. package/modules/auth/migrations/0016_external_identities.up.sql +16 -0
  234. package/modules/auth/migrations/0017_mfa_key_id.up.sql +8 -0
  235. package/modules/auth/migrations/0018_retire_bundled_module_scopes.up.sql +29 -0
  236. package/modules/auth/migrations/0019_notifications_member_scopes.up.sql +44 -0
  237. package/modules/auth/migrations/0020_identity_providers.up.sql +61 -0
  238. package/modules/auth/migrations/0021_membership_status.up.sql +19 -0
  239. package/modules/auth/migrations/0022_auth_provider_scopes.up.sql +45 -0
  240. package/modules/auth/migrations/0023_enterprise_module_scopes.down.sql +19 -0
  241. package/modules/auth/migrations/0023_enterprise_module_scopes.up.sql +71 -0
  242. package/modules/auth/migrations/0024_approvals_member_scopes.down.sql +22 -0
  243. package/modules/auth/migrations/0024_approvals_member_scopes.up.sql +48 -0
  244. package/modules/auth/migrations/0025_audit_holds_owner_scope.down.sql +21 -0
  245. package/modules/auth/migrations/0025_audit_holds_owner_scope.up.sql +47 -0
  246. package/modules/auth/migrations/0026_auth_export_keyset_indexes.down.sql +6 -0
  247. package/modules/auth/migrations/0026_auth_export_keyset_indexes.up.sql +15 -0
  248. package/modules/auth/migrations/0027_workflow_automation_profile_scopes.down.sql +34 -0
  249. package/modules/auth/migrations/0027_workflow_automation_profile_scopes.up.sql +72 -0
  250. package/modules/auth/migrations/0028_auth_member_search_prefix_indexes.down.sql +6 -0
  251. package/modules/auth/migrations/0028_auth_member_search_prefix_indexes.up.sql +21 -0
  252. package/modules/auth/migrations/0029_reports_exports_access_scopes.down.sql +22 -0
  253. package/modules/auth/migrations/0029_reports_exports_access_scopes.up.sql +56 -0
  254. package/modules/auth/migrations/0030_auth_membership_keyset_index.down.sql +4 -0
  255. package/modules/auth/migrations/0030_auth_membership_keyset_index.up.sql +10 -0
  256. package/modules/auth/migrations/0031_membership_scope_backfills_under_rls.down.sql +4 -0
  257. package/modules/auth/migrations/0031_membership_scope_backfills_under_rls.up.sql +31 -0
  258. package/modules/auth/migrations/0032_audit_actor_service.down.sql +9 -0
  259. package/modules/auth/migrations/0032_audit_actor_service.up.sql +10 -0
  260. package/modules/auth/migrations/0033_auth_account_keyset_indexes.down.sql +5 -0
  261. package/modules/auth/migrations/0033_auth_account_keyset_indexes.up.sql +23 -0
  262. package/modules/auth/module.json +3 -3
  263. package/modules/auth/package.json +2 -1
  264. package/modules/auth/spec/module.yaml +372 -3
  265. package/modules/auth/src/acl/scopes.ts +50 -6
  266. package/modules/auth/src/cli/commands.json +11 -0
  267. package/modules/auth/src/cli/greenfield.ts +2 -2
  268. package/modules/auth/src/cli/index.ts +14 -0
  269. package/modules/auth/src/cli/secrets.ts +114 -0
  270. package/modules/auth/src/client/AuthenticationCore.tsrx +61 -8
  271. package/modules/auth/src/client/api.ts +72 -6
  272. package/modules/auth/src/client/contribution.tsrx +23 -0
  273. package/modules/auth/src/client/index.ts +6 -0
  274. package/modules/auth/src/client/providers/IdentityProviderForm.tsrx +191 -0
  275. package/modules/auth/src/client/providers/IdentityProvidersView.tsrx +358 -0
  276. package/modules/auth/src/client/providers/api.ts +128 -0
  277. package/modules/auth/src/client/providers/provider-columns.tsrx +60 -0
  278. package/modules/auth/src/client/providers/state.ts +35 -0
  279. package/modules/auth/src/client/security/SecurityView.tsrx +9 -1
  280. package/modules/auth/src/client/state.ts +15 -1
  281. package/modules/auth/src/domain/types.ts +55 -0
  282. package/modules/auth/src/index.ts +11 -1
  283. package/modules/auth/src/middleware/authentication.ts +4 -0
  284. package/modules/auth/src/server/endpoints.ts +467 -171
  285. package/modules/auth/src/server/http.ts +3 -2
  286. package/modules/auth/src/server/index.ts +22 -1
  287. package/modules/auth/src/server/membership-endpoints.ts +62 -0
  288. package/modules/auth/src/server/mfa-enforcement.ts +156 -0
  289. package/modules/auth/src/server/oidc.ts +389 -0
  290. package/modules/auth/src/server/provider-endpoints.ts +246 -0
  291. package/modules/auth/src/server/provider-host.ts +77 -0
  292. package/modules/auth/src/server/runtime.ts +231 -55
  293. package/modules/auth/src/services/auth-service-error.ts +7 -2
  294. package/modules/auth/src/services/auth-service.ts +948 -51
  295. package/modules/auth/src/services/data-classes.ts +236 -0
  296. package/modules/auth/src/services/database-repository.ts +853 -71
  297. package/modules/auth/src/services/identity-provider-service.ts +571 -0
  298. package/modules/auth/src/services/mail-delivery.ts +16 -16
  299. package/modules/auth/src/services/mail-message.ts +54 -0
  300. package/modules/auth/src/services/mail-port.ts +24 -0
  301. package/modules/auth/src/services/mail-smtp.ts +85 -0
  302. package/modules/auth/src/services/mfa-rotation.ts +144 -0
  303. package/modules/auth/src/services/migration.ts +810 -0
  304. package/modules/auth/src/services/password.ts +14 -0
  305. package/modules/auth/src/services/provider-secret-rotation.ts +169 -0
  306. package/modules/auth/src/services/provider-secrets.ts +136 -0
  307. package/modules/auth/src/services/repository.ts +321 -5
  308. package/modules/auth/src/services/session-sweep-runner.ts +73 -0
  309. package/modules/auth/src/services/settings-store.ts +10 -83
  310. package/modules/auth/src/services/totp.ts +88 -62
  311. package/modules/auth/src/services/validation.ts +194 -7
  312. package/modules/auth/src/settings.ts +18 -0
  313. package/modules/auth/translations/en.json +84 -1
  314. package/modules/auth/translations/pl.json +84 -1
  315. package/modules/automations/migrations/0005_secret_rotation_inventory.down.sql +1 -0
  316. package/modules/automations/migrations/0005_secret_rotation_inventory.up.sql +6 -0
  317. package/modules/automations/migrations/0006_automations_list_sort_indexes.down.sql +4 -0
  318. package/modules/automations/migrations/0006_automations_list_sort_indexes.up.sql +11 -0
  319. package/modules/automations/module.json +24 -6
  320. package/modules/automations/package.json +4 -1
  321. package/modules/automations/spec/module.yaml +81 -7
  322. package/modules/automations/src/api/endpoints.ts +202 -28
  323. package/modules/automations/src/cli/commands.json +17 -0
  324. package/modules/automations/src/cli/index.ts +114 -0
  325. package/modules/automations/src/client/AutomationScheduleForm.tsrx +77 -19
  326. package/modules/automations/src/client/AutomationSchedulesView.tsrx +144 -40
  327. package/modules/automations/src/client/AutomationTriggersView.tsrx +131 -32
  328. package/modules/automations/src/client/api.ts +62 -19
  329. package/modules/automations/src/client/presentation.ts +20 -2
  330. package/modules/automations/src/client/state.ts +84 -0
  331. package/modules/automations/src/domain/cadence.ts +99 -3
  332. package/modules/automations/src/domain/cron.ts +366 -0
  333. package/modules/automations/src/domain/time-zone.ts +61 -0
  334. package/modules/automations/src/platform.ts +38 -4
  335. package/modules/automations/src/server/index.ts +11 -0
  336. package/modules/automations/src/server/runtime.ts +46 -22
  337. package/modules/{automations-workflows-integration/src/server/adapter.ts → automations/src/server/workflow-target.ts} +13 -14
  338. package/modules/{automations-workflows-integration/src/server/tools.ts → automations/src/server/workflow-tools.ts} +0 -0
  339. package/modules/automations/src/services/data-classes.ts +62 -0
  340. package/modules/automations/src/services/database-repository.ts +152 -38
  341. package/modules/automations/src/services/migration.ts +119 -9
  342. package/modules/automations/src/services/repository.ts +52 -1
  343. package/modules/automations/src/services/schedule-runner.ts +84 -0
  344. package/modules/automations/src/services/schedule-service.ts +152 -26
  345. package/modules/automations/src/services/secret-rotation.ts +176 -0
  346. package/modules/automations/src/services/secret-vault.ts +68 -41
  347. package/modules/automations/src/services/trigger-service.ts +13 -10
  348. package/modules/automations/translations/en.json +15 -2
  349. package/modules/automations/translations/pl.json +15 -2
  350. package/modules/connectors/migrations/0001_connectors_core.down.sql +3 -0
  351. package/modules/connectors/migrations/0001_connectors_core.up.sql +72 -0
  352. package/modules/connectors/migrations/0002_connectors_call_keys.down.sql +3 -0
  353. package/modules/connectors/migrations/0002_connectors_call_keys.up.sql +18 -0
  354. package/modules/connectors/migrations/0003_connectors_rotation_inventory.down.sql +2 -0
  355. package/modules/connectors/migrations/0003_connectors_rotation_inventory.up.sql +19 -0
  356. package/modules/connectors/migrations/README.md +3 -0
  357. package/modules/connectors/module.json +32 -0
  358. package/modules/{automations-workflows-integration → connectors}/package.json +28 -26
  359. package/modules/connectors/spec/module.yaml +448 -0
  360. package/modules/connectors/src/acl/permissions.ts +6 -0
  361. package/modules/connectors/src/agent/tools.ts +180 -0
  362. package/modules/connectors/src/api/endpoints.ts +572 -0
  363. package/modules/connectors/src/cli/commands.json +17 -0
  364. package/modules/connectors/src/cli/index.ts +126 -0
  365. package/modules/connectors/src/client/ConnectorCallsView.tsrx +358 -0
  366. package/modules/connectors/src/client/ConnectorForm.tsrx +424 -0
  367. package/modules/connectors/src/client/ConnectorsView.tsrx +711 -0
  368. package/modules/connectors/src/client/api.ts +281 -0
  369. package/modules/connectors/src/client/consent.ts +48 -0
  370. package/modules/connectors/src/client/contribution.tsrx +37 -0
  371. package/modules/connectors/src/client/index.ts +22 -0
  372. package/modules/connectors/src/client/navigation.ts +42 -0
  373. package/modules/connectors/src/client/presentation.ts +38 -0
  374. package/modules/connectors/src/client/state.ts +175 -0
  375. package/modules/connectors/src/domain/calls.ts +70 -0
  376. package/modules/connectors/src/domain/definitions.ts +190 -0
  377. package/modules/connectors/src/domain/http-json.ts +68 -0
  378. package/modules/connectors/src/domain/types.ts +185 -0
  379. package/modules/connectors/src/index.ts +64 -0
  380. package/modules/connectors/src/platform.ts +56 -0
  381. package/modules/connectors/src/server/index.ts +66 -0
  382. package/modules/connectors/src/server/runtime.ts +163 -0
  383. package/modules/connectors/src/services/call-service.ts +903 -0
  384. package/modules/connectors/src/services/connectors-service.ts +653 -0
  385. package/modules/connectors/src/services/credential-rotation.ts +221 -0
  386. package/modules/connectors/src/services/credential-vault.ts +194 -0
  387. package/modules/connectors/src/services/data-classes.ts +158 -0
  388. package/modules/connectors/src/services/database-repository.ts +897 -0
  389. package/modules/connectors/src/services/egress.ts +261 -0
  390. package/modules/connectors/src/services/index.ts +19 -0
  391. package/modules/connectors/src/services/migration.ts +202 -0
  392. package/modules/connectors/src/services/repository.ts +175 -0
  393. package/modules/connectors/src/services/service-error.ts +46 -0
  394. package/modules/connectors/src/settings.ts +69 -0
  395. package/modules/connectors/translations/en.json +191 -0
  396. package/modules/connectors/translations/pl.json +191 -0
  397. package/modules/directory/migrations/0001_directory_core.down.sql +5 -0
  398. package/modules/directory/migrations/0001_directory_core.up.sql +111 -0
  399. package/modules/directory/migrations/README.md +3 -0
  400. package/modules/directory/module.json +27 -0
  401. package/modules/directory/package.json +46 -0
  402. package/modules/directory/spec/module.yaml +351 -0
  403. package/modules/directory/src/acl/permissions.ts +7 -0
  404. package/modules/directory/src/api/endpoints.ts +478 -0
  405. package/modules/directory/src/api/scim-endpoints.ts +516 -0
  406. package/modules/directory/src/client/GroupMappingsView.tsrx +430 -0
  407. package/modules/directory/src/client/ProvisioningLogView.tsrx +248 -0
  408. package/modules/directory/src/client/ScimTokensView.tsrx +587 -0
  409. package/modules/directory/src/client/api.ts +222 -0
  410. package/modules/directory/src/client/contribution.tsrx +46 -0
  411. package/modules/directory/src/client/index.ts +22 -0
  412. package/modules/directory/src/client/navigation.ts +57 -0
  413. package/modules/directory/src/client/presentation.ts +143 -0
  414. package/modules/directory/src/client/state.ts +173 -0
  415. package/modules/directory/src/domain/scim.ts +346 -0
  416. package/modules/directory/src/domain/types.ts +166 -0
  417. package/modules/directory/src/index.ts +44 -0
  418. package/modules/directory/src/platform.ts +43 -0
  419. package/modules/directory/src/server/index.ts +17 -0
  420. package/modules/directory/src/server/runtime.ts +124 -0
  421. package/modules/directory/src/services/auth-port.ts +127 -0
  422. package/modules/directory/src/services/data-classes.ts +41 -0
  423. package/modules/directory/src/services/database-repository.ts +1067 -0
  424. package/modules/directory/src/services/directory-service.ts +311 -0
  425. package/modules/directory/src/services/index.ts +43 -0
  426. package/modules/directory/src/services/migration.ts +146 -0
  427. package/modules/directory/src/services/provisioning-service.ts +1420 -0
  428. package/modules/directory/src/services/rate-limiter.ts +103 -0
  429. package/modules/directory/src/services/repository.ts +208 -0
  430. package/modules/directory/src/services/service-error.ts +42 -0
  431. package/modules/directory/src/services/token-service.ts +215 -0
  432. package/modules/directory/src/settings.ts +86 -0
  433. package/modules/directory/translations/en.json +185 -0
  434. package/modules/directory/translations/pl.json +185 -0
  435. package/modules/documents/migrations/0001_documents_core.down.sql +1 -0
  436. package/modules/documents/migrations/0001_documents_core.up.sql +35 -0
  437. package/modules/documents/migrations/0002_documents_files_page.down.sql +1 -0
  438. package/modules/documents/migrations/0002_documents_files_page.up.sql +6 -0
  439. package/modules/documents/migrations/0003_documents_rotation_inventory.down.sql +2 -0
  440. package/modules/documents/migrations/0003_documents_rotation_inventory.up.sql +18 -0
  441. package/modules/documents/migrations/README.md +3 -0
  442. package/modules/documents/module.json +32 -0
  443. package/modules/documents/package.json +50 -0
  444. package/modules/documents/spec/module.yaml +248 -0
  445. package/modules/documents/src/acl/permissions.ts +6 -0
  446. package/modules/documents/src/api/endpoints.ts +401 -0
  447. package/modules/documents/src/cli/commands.json +17 -0
  448. package/modules/documents/src/cli/index.ts +145 -0
  449. package/modules/documents/src/client/DocumentUploader.tsrx +148 -0
  450. package/modules/documents/src/client/DocumentsView.tsrx +540 -0
  451. package/modules/documents/src/client/api.ts +209 -0
  452. package/modules/documents/src/client/contribution.tsrx +29 -0
  453. package/modules/documents/src/client/download.ts +70 -0
  454. package/modules/documents/src/client/index.ts +22 -0
  455. package/modules/documents/src/client/navigation.ts +25 -0
  456. package/modules/documents/src/client/presentation.ts +110 -0
  457. package/modules/documents/src/client/state.ts +117 -0
  458. package/modules/documents/src/domain/attachments.ts +84 -0
  459. package/modules/documents/src/domain/types.ts +80 -0
  460. package/modules/documents/src/index.ts +46 -0
  461. package/modules/documents/src/platform.ts +61 -0
  462. package/modules/documents/src/server/index.ts +30 -0
  463. package/modules/documents/src/server/runtime.ts +107 -0
  464. package/modules/documents/src/services/attachments.ts +39 -0
  465. package/modules/documents/src/services/data-classes.ts +25 -0
  466. package/modules/documents/src/services/database-repository.ts +270 -0
  467. package/modules/documents/src/services/documents-service.ts +590 -0
  468. package/modules/documents/src/services/index.ts +18 -0
  469. package/modules/documents/src/services/migration.ts +117 -0
  470. package/modules/documents/src/services/repository.ts +58 -0
  471. package/modules/documents/src/services/storage-rotation.ts +157 -0
  472. package/modules/documents/src/settings.ts +107 -0
  473. package/modules/documents/translations/en.json +111 -0
  474. package/modules/documents/translations/pl.json +111 -0
  475. package/modules/exports/migrations/0001_exports_core.down.sql +2 -0
  476. package/modules/exports/migrations/0001_exports_core.up.sql +28 -0
  477. package/modules/exports/migrations/0002_exports_job_routing_role.down.sql +4 -0
  478. package/modules/exports/migrations/0002_exports_job_routing_role.up.sql +21 -0
  479. package/modules/exports/migrations/0003_exports_rotation_inventory.down.sql +1 -0
  480. package/modules/exports/migrations/0003_exports_rotation_inventory.up.sql +9 -0
  481. package/modules/exports/migrations/README.md +3 -0
  482. package/modules/exports/module.json +32 -0
  483. package/modules/exports/package.json +45 -0
  484. package/modules/exports/spec/module.yaml +230 -0
  485. package/modules/exports/src/acl/permissions.ts +6 -0
  486. package/modules/exports/src/api/endpoints.ts +211 -0
  487. package/modules/exports/src/cli/commands.json +17 -0
  488. package/modules/exports/src/cli/index.ts +145 -0
  489. package/modules/exports/src/client/ExportsView.tsrx +327 -0
  490. package/modules/exports/src/client/api.ts +133 -0
  491. package/modules/exports/src/client/contribution.tsrx +31 -0
  492. package/modules/exports/src/client/index.ts +20 -0
  493. package/modules/exports/src/client/navigation.ts +25 -0
  494. package/modules/exports/src/client/presentation.ts +53 -0
  495. package/modules/exports/src/client/state.ts +56 -0
  496. package/modules/exports/src/domain/lists.ts +29 -0
  497. package/modules/exports/src/domain/types.ts +120 -0
  498. package/modules/exports/src/index.ts +41 -0
  499. package/modules/exports/src/platform.ts +80 -0
  500. package/modules/exports/src/server/index.ts +50 -0
  501. package/modules/exports/src/server/runtime.ts +160 -0
  502. package/modules/exports/src/services/data-classes.ts +59 -0
  503. package/modules/exports/src/services/database-repository.ts +403 -0
  504. package/modules/exports/src/services/export-runner.ts +123 -0
  505. package/modules/exports/src/services/export-service.ts +356 -0
  506. package/modules/exports/src/services/index.ts +6 -0
  507. package/modules/exports/src/services/list-registry.ts +105 -0
  508. package/modules/exports/src/services/migration.ts +116 -0
  509. package/modules/exports/src/services/repository.ts +96 -0
  510. package/modules/exports/src/services/storage-rotation.ts +138 -0
  511. package/modules/exports/src/settings.ts +70 -0
  512. package/modules/exports/translations/en.json +69 -0
  513. package/modules/exports/translations/pl.json +69 -0
  514. package/modules/import/migrations/0001_import_core.down.sql +6 -0
  515. package/modules/import/migrations/0001_import_core.up.sql +61 -0
  516. package/modules/import/migrations/0002_import_job_routing_role.down.sql +4 -0
  517. package/modules/import/migrations/0002_import_job_routing_role.up.sql +20 -0
  518. package/modules/import/migrations/0003_import_jobs_export_index.down.sql +1 -0
  519. package/modules/import/migrations/0003_import_jobs_export_index.up.sql +7 -0
  520. package/modules/import/migrations/0004_import_jobs_traceparent.down.sql +1 -0
  521. package/modules/import/migrations/0004_import_jobs_traceparent.up.sql +7 -0
  522. package/modules/import/migrations/README.md +3 -0
  523. package/modules/import/module.json +37 -0
  524. package/modules/import/package.json +50 -0
  525. package/modules/import/spec/module.yaml +335 -0
  526. package/modules/import/src/acl/permissions.ts +6 -0
  527. package/modules/import/src/api/endpoints.ts +400 -0
  528. package/modules/import/src/client/ImportJobDrawer.tsrx +229 -0
  529. package/modules/import/src/client/ImportsView.tsrx +455 -0
  530. package/modules/import/src/client/NewImportForm.tsrx +274 -0
  531. package/modules/import/src/client/api.ts +243 -0
  532. package/modules/import/src/client/contribution.tsrx +29 -0
  533. package/modules/import/src/client/index.ts +23 -0
  534. package/modules/import/src/client/navigation.ts +25 -0
  535. package/modules/import/src/client/presentation.ts +59 -0
  536. package/modules/import/src/client/state.ts +43 -0
  537. package/modules/import/src/domain/csv.ts +258 -0
  538. package/modules/import/src/domain/ports.ts +157 -0
  539. package/modules/import/src/domain/types.ts +179 -0
  540. package/modules/import/src/index.ts +58 -0
  541. package/modules/import/src/platform.ts +60 -0
  542. package/modules/import/src/server/index.ts +49 -0
  543. package/modules/import/src/server/runtime.ts +158 -0
  544. package/modules/import/src/services/csv-source.ts +121 -0
  545. package/modules/import/src/services/data-classes.ts +63 -0
  546. package/modules/import/src/services/database-repository.ts +780 -0
  547. package/modules/import/src/services/import-runner.ts +127 -0
  548. package/modules/import/src/services/import-service.ts +872 -0
  549. package/modules/import/src/services/index.ts +6 -0
  550. package/modules/import/src/services/migration.ts +156 -0
  551. package/modules/import/src/services/port-registry.ts +158 -0
  552. package/modules/import/src/services/repository.ts +147 -0
  553. package/modules/import/src/settings.ts +70 -0
  554. package/modules/import/translations/en.json +175 -0
  555. package/modules/import/translations/pl.json +175 -0
  556. package/modules/metering/migrations/0001_metering_core.down.sql +6 -0
  557. package/modules/metering/migrations/0001_metering_core.up.sql +119 -0
  558. package/modules/metering/migrations/0002_metering_bucket_export.down.sql +3 -0
  559. package/modules/metering/migrations/0002_metering_bucket_export.up.sql +5 -0
  560. package/modules/metering/migrations/README.md +3 -0
  561. package/modules/metering/module.json +46 -0
  562. package/modules/metering/package.json +50 -0
  563. package/modules/metering/spec/module.yaml +269 -0
  564. package/modules/metering/src/acl/permissions.ts +5 -0
  565. package/modules/metering/src/api/endpoints.ts +104 -0
  566. package/modules/metering/src/cli/commands.json +28 -0
  567. package/modules/metering/src/cli/index.ts +246 -0
  568. package/modules/metering/src/client/LimitsView.tsrx +170 -0
  569. package/modules/metering/src/client/UsageSummaryWidget.tsrx +63 -0
  570. package/modules/metering/src/client/UsageView.tsrx +205 -0
  571. package/modules/metering/src/client/api.ts +91 -0
  572. package/modules/metering/src/client/contribution.tsrx +42 -0
  573. package/modules/metering/src/client/index.ts +26 -0
  574. package/modules/metering/src/client/navigation.ts +54 -0
  575. package/modules/metering/src/client/presentation.ts +63 -0
  576. package/modules/metering/src/client/state.ts +31 -0
  577. package/modules/metering/src/domain/meters.ts +100 -0
  578. package/modules/metering/src/domain/types.ts +71 -0
  579. package/modules/metering/src/index.ts +51 -0
  580. package/modules/metering/src/platform.ts +84 -0
  581. package/modules/metering/src/server/index.ts +40 -0
  582. package/modules/metering/src/server/runtime.ts +165 -0
  583. package/modules/metering/src/services/data-classes.ts +34 -0
  584. package/modules/metering/src/services/database-repository.ts +574 -0
  585. package/modules/metering/src/services/index.ts +9 -0
  586. package/modules/metering/src/services/meter-registry.ts +145 -0
  587. package/modules/metering/src/services/metering-service.ts +441 -0
  588. package/modules/metering/src/services/migration.ts +183 -0
  589. package/modules/metering/src/services/notifications.ts +75 -0
  590. package/modules/metering/src/services/reports.ts +105 -0
  591. package/modules/metering/src/services/repository.ts +132 -0
  592. package/modules/metering/src/services/service-error.ts +46 -0
  593. package/modules/metering/src/settings.ts +47 -0
  594. package/modules/metering/translations/en.json +68 -0
  595. package/modules/metering/translations/pl.json +68 -0
  596. package/modules/notifications/migrations/0001_notifications_core.down.sql +1 -0
  597. package/modules/notifications/migrations/0001_notifications_core.up.sql +26 -0
  598. package/modules/notifications/migrations/0002_notifications_preferences.down.sql +1 -0
  599. package/modules/notifications/migrations/0002_notifications_preferences.up.sql +17 -0
  600. package/modules/notifications/migrations/0003_notifications_webhook_subscriptions.down.sql +1 -0
  601. package/modules/notifications/migrations/0003_notifications_webhook_subscriptions.up.sql +30 -0
  602. package/modules/notifications/migrations/0004_notifications_deliveries.down.sql +1 -0
  603. package/modules/notifications/migrations/0004_notifications_deliveries.up.sql +35 -0
  604. package/modules/notifications/migrations/0005_notifications_delivery_routing_role.down.sql +2 -0
  605. package/modules/notifications/migrations/0005_notifications_delivery_routing_role.up.sql +17 -0
  606. package/modules/notifications/migrations/0006_notifications_delivery_title.down.sql +1 -0
  607. package/modules/notifications/migrations/0006_notifications_delivery_title.up.sql +11 -0
  608. package/modules/notifications/migrations/0007_notifications_secret_rotation_inventory.down.sql +2 -0
  609. package/modules/notifications/migrations/0007_notifications_secret_rotation_inventory.up.sql +19 -0
  610. package/modules/notifications/migrations/0008_notifications_delivery_claim.down.sql +8 -0
  611. package/modules/notifications/migrations/0008_notifications_delivery_claim.up.sql +19 -0
  612. package/modules/notifications/migrations/0009_notifications_kind_approvals.down.sql +16 -0
  613. package/modules/notifications/migrations/0009_notifications_kind_approvals.up.sql +18 -0
  614. package/modules/notifications/migrations/0010_notifications_kind_meter_threshold.down.sql +16 -0
  615. package/modules/notifications/migrations/0010_notifications_kind_meter_threshold.up.sql +18 -0
  616. package/modules/notifications/migrations/0011_notifications_retention_keyset.down.sql +5 -0
  617. package/modules/notifications/migrations/0011_notifications_retention_keyset.up.sql +15 -0
  618. package/modules/notifications/migrations/0012_notifications_email_channel.down.sql +12 -0
  619. package/modules/notifications/migrations/0012_notifications_email_channel.up.sql +38 -0
  620. package/modules/notifications/migrations/0013_notifications_list_pages.down.sql +5 -0
  621. package/modules/notifications/migrations/0013_notifications_list_pages.up.sql +13 -0
  622. package/modules/notifications/migrations/README.md +3 -0
  623. package/modules/notifications/module.json +32 -0
  624. package/modules/notifications/package.json +49 -0
  625. package/modules/notifications/spec/module.yaml +718 -0
  626. package/modules/notifications/src/acl/permissions.ts +11 -0
  627. package/modules/notifications/src/api/endpoints.ts +814 -0
  628. package/modules/notifications/src/cli/commands.json +17 -0
  629. package/modules/notifications/src/cli/index.ts +126 -0
  630. package/modules/notifications/src/client/DeliveriesView.tsrx +483 -0
  631. package/modules/notifications/src/client/FactList.tsrx +24 -0
  632. package/modules/notifications/src/client/NotificationPreferencesView.tsrx +240 -0
  633. package/modules/notifications/src/client/NotificationsInboxView.tsrx +592 -0
  634. package/modules/notifications/src/client/UnreadCountWidget.tsrx +62 -0
  635. package/modules/notifications/src/client/WebhookForm.tsrx +297 -0
  636. package/modules/notifications/src/client/WebhooksView.tsrx +637 -0
  637. package/modules/notifications/src/client/api.ts +382 -0
  638. package/modules/notifications/src/client/contribution.tsrx +83 -0
  639. package/modules/notifications/src/client/inbox.ts +41 -0
  640. package/modules/notifications/src/client/index.ts +29 -0
  641. package/modules/notifications/src/client/navigation.ts +92 -0
  642. package/modules/notifications/src/client/notifications.css +70 -0
  643. package/modules/notifications/src/client/presentation.ts +81 -0
  644. package/modules/notifications/src/client/state.ts +246 -0
  645. package/modules/notifications/src/client/unread-count.ts +26 -0
  646. package/modules/notifications/src/domain/locale.ts +47 -0
  647. package/modules/notifications/src/domain/publish.ts +46 -0
  648. package/modules/notifications/src/domain/types.ts +186 -0
  649. package/modules/notifications/src/index.ts +62 -0
  650. package/modules/notifications/src/platform.ts +85 -0
  651. package/modules/notifications/src/server/index.ts +82 -0
  652. package/modules/notifications/src/server/runtime.ts +251 -0
  653. package/modules/notifications/src/services/data-classes.ts +139 -0
  654. package/modules/notifications/src/services/database-repository.ts +1334 -0
  655. package/modules/notifications/src/services/delivery-payload.ts +93 -0
  656. package/modules/notifications/src/services/delivery-runner.ts +170 -0
  657. package/modules/notifications/src/services/delivery-service.ts +811 -0
  658. package/modules/notifications/src/services/egress.ts +239 -0
  659. package/modules/notifications/src/services/email-channel.ts +93 -0
  660. package/modules/notifications/src/services/index.ts +23 -0
  661. package/modules/notifications/src/services/migration.ts +572 -0
  662. package/modules/notifications/src/services/notifications-service.ts +297 -0
  663. package/modules/notifications/src/services/paging.ts +60 -0
  664. package/modules/notifications/src/services/publish-service.ts +133 -0
  665. package/modules/notifications/src/services/repository.ts +342 -0
  666. package/modules/notifications/src/services/secret-rotation.ts +177 -0
  667. package/modules/notifications/src/services/secret-vault.ts +168 -0
  668. package/modules/notifications/src/services/service-error.ts +67 -0
  669. package/modules/notifications/src/services/signature.ts +81 -0
  670. package/modules/notifications/src/services/webhook-service.ts +307 -0
  671. package/modules/notifications/src/settings.ts +130 -0
  672. package/modules/notifications/translations/en.json +255 -0
  673. package/modules/notifications/translations/pl.json +255 -0
  674. package/modules/profile/module.json +3 -3
  675. package/modules/profile/package.json +1 -1
  676. package/modules/profile/spec/module.yaml +3 -3
  677. package/modules/profile/src/services/database-repository.ts +3 -13
  678. package/modules/reports/module.json +28 -0
  679. package/modules/reports/package.json +42 -0
  680. package/modules/reports/spec/module.yaml +231 -0
  681. package/modules/reports/src/acl/permissions.ts +5 -0
  682. package/modules/reports/src/api/endpoints.ts +72 -0
  683. package/modules/reports/src/client/ReportsSummaryWidget.tsrx +52 -0
  684. package/modules/reports/src/client/ReportsView.tsrx +246 -0
  685. package/modules/reports/src/client/api.ts +65 -0
  686. package/modules/reports/src/client/contribution.tsrx +36 -0
  687. package/modules/reports/src/client/index.ts +18 -0
  688. package/modules/reports/src/client/navigation.ts +39 -0
  689. package/modules/reports/src/client/presentation.ts +123 -0
  690. package/modules/reports/src/client/state.ts +28 -0
  691. package/modules/reports/src/domain/providers.ts +115 -0
  692. package/modules/reports/src/domain/types.ts +44 -0
  693. package/modules/reports/src/index.ts +47 -0
  694. package/modules/reports/src/platform.ts +37 -0
  695. package/modules/reports/src/server/index.ts +21 -0
  696. package/modules/reports/src/server/runtime.ts +40 -0
  697. package/modules/reports/src/services/index.ts +17 -0
  698. package/modules/reports/src/services/provider-registry.ts +144 -0
  699. package/modules/reports/src/services/range.ts +65 -0
  700. package/modules/reports/src/services/reports-service.ts +316 -0
  701. package/modules/reports/src/services/service-error.ts +26 -0
  702. package/modules/reports/src/settings.ts +49 -0
  703. package/modules/reports/translations/en.json +35 -0
  704. package/modules/reports/translations/pl.json +35 -0
  705. package/modules/sandbox/module.json +4 -4
  706. package/modules/sandbox/package.json +1 -1
  707. package/modules/sandbox/spec/module.yaml +3 -3
  708. package/modules/sandbox/src/services/database-repository.ts +14 -23
  709. package/modules/sandbox/src/services/directory.ts +16 -0
  710. package/modules/sandbox/src/services/sandbox-service.ts +13 -11
  711. package/modules/search/migrations/0001_search_core.down.sql +1 -0
  712. package/modules/search/migrations/0001_search_core.up.sql +22 -0
  713. package/modules/search/migrations/0002_search_recent_export.down.sql +3 -0
  714. package/modules/search/migrations/0002_search_recent_export.up.sql +5 -0
  715. package/modules/search/migrations/README.md +3 -0
  716. package/modules/search/module.json +28 -0
  717. package/modules/search/package.json +43 -0
  718. package/modules/search/spec/module.yaml +177 -0
  719. package/modules/search/src/acl/permissions.ts +5 -0
  720. package/modules/search/src/api/endpoints.ts +221 -0
  721. package/modules/search/src/client/SearchView.tsrx +346 -0
  722. package/modules/search/src/client/api.ts +157 -0
  723. package/modules/search/src/client/contribution.tsrx +31 -0
  724. package/modules/search/src/client/index.ts +17 -0
  725. package/modules/search/src/client/navigation.ts +97 -0
  726. package/modules/search/src/client/search.css +56 -0
  727. package/modules/search/src/client/state.ts +113 -0
  728. package/modules/search/src/domain/data-classes.ts +73 -0
  729. package/modules/search/src/domain/providers.ts +88 -0
  730. package/modules/search/src/domain/types.ts +56 -0
  731. package/modules/search/src/index.ts +46 -0
  732. package/modules/search/src/platform.ts +42 -0
  733. package/modules/search/src/server/index.ts +25 -0
  734. package/modules/search/src/server/runtime.ts +123 -0
  735. package/modules/search/src/services/database-repository.ts +163 -0
  736. package/modules/search/src/services/index.ts +21 -0
  737. package/modules/search/src/services/migration.ts +65 -0
  738. package/modules/search/src/services/provider-registry.ts +137 -0
  739. package/modules/search/src/services/repository.ts +43 -0
  740. package/modules/search/src/services/search-service.ts +442 -0
  741. package/modules/search/src/services/service-error.ts +35 -0
  742. package/modules/search/src/settings.ts +68 -0
  743. package/modules/search/translations/en.json +45 -0
  744. package/modules/search/translations/pl.json +45 -0
  745. package/modules/system/module.json +2 -2
  746. package/modules/system/package.json +1 -1
  747. package/modules/system/spec/module.yaml +30 -3
  748. package/modules/system/src/client/FlagsPanel.tsrx +127 -0
  749. package/modules/system/src/client/ModuleSettingRow.tsrx +17 -7
  750. package/modules/system/src/client/ModuleSettingsSection.tsrx +10 -71
  751. package/modules/system/src/client/ModulesView.tsrx +91 -65
  752. package/modules/system/src/client/flags.ts +35 -0
  753. package/modules/system/src/client/index.ts +8 -0
  754. package/modules/system/src/client/navigation.ts +8 -0
  755. package/modules/system/src/client/settings-state.ts +159 -0
  756. package/modules/system/src/client/state.ts +2 -0
  757. package/modules/system/src/domain/time-zone.ts +105 -0
  758. package/modules/system/src/index.ts +12 -0
  759. package/modules/system/src/platform.ts +5 -1
  760. package/modules/system/src/server/endpoints.ts +72 -21
  761. package/modules/system/src/settings.ts +28 -0
  762. package/modules/system/translations/en.json +17 -0
  763. package/modules/system/translations/pl.json +17 -0
  764. package/modules/users/module.json +30 -4
  765. package/modules/users/package.json +4 -1
  766. package/modules/users/spec/module.yaml +290 -7
  767. package/modules/users/src/api/endpoints.ts +228 -15
  768. package/modules/users/src/client/InviteMemberForm.tsrx +2 -2
  769. package/modules/users/src/client/MemberDrawer.tsrx +142 -26
  770. package/modules/users/src/client/UserAccountForm.tsrx +2 -2
  771. package/modules/users/src/client/UsersView.tsrx +432 -71
  772. package/modules/users/src/client/api.ts +106 -12
  773. package/modules/users/src/client/contribution.tsrx +5 -0
  774. package/modules/users/src/client/member-columns.tsrx +22 -9
  775. package/modules/users/src/client/state.ts +172 -7
  776. package/modules/users/src/domain/lists.ts +9 -0
  777. package/modules/users/src/index.ts +11 -0
  778. package/modules/users/src/platform.ts +50 -1
  779. package/modules/users/src/services/member-export.ts +51 -0
  780. package/modules/users/src/services/member-import.ts +249 -0
  781. package/modules/users/src/services/member-search.ts +145 -0
  782. package/modules/users/src/services/users-service.ts +117 -4
  783. package/modules/users/translations/en.json +57 -8
  784. package/modules/users/translations/pl.json +57 -8
  785. package/modules/workflows/migrations/0004_payload_rotation_inventory.up.sql +17 -0
  786. package/modules/workflows/migrations/0005_workflows_human_approval.up.sql +28 -0
  787. package/modules/workflows/migrations/0006_workflows_retention_indexes.up.sql +11 -0
  788. package/modules/workflows/migrations/0007_workflows_erasure_subject_indexes.up.sql +17 -0
  789. package/modules/workflows/migrations/0008_workflows_subject_account.up.sql +24 -0
  790. package/modules/workflows/migrations/0009_workflows_definition_list_indexes.up.sql +9 -0
  791. package/modules/workflows/module.json +34 -6
  792. package/modules/workflows/package.json +2 -1
  793. package/modules/workflows/spec/module.yaml +26 -9
  794. package/modules/workflows/src/api/endpoints.ts +131 -25
  795. package/modules/workflows/src/cli/commands.json +17 -0
  796. package/modules/workflows/src/cli/index.ts +114 -0
  797. package/modules/workflows/src/client/WorkflowExecutionHistory.tsrx +36 -27
  798. package/modules/workflows/src/client/WorkflowInspector.tsrx +116 -0
  799. package/modules/workflows/src/client/WorkflowNodePalette.tsrx +1 -0
  800. package/modules/workflows/src/client/WorkflowsView.tsrx +236 -99
  801. package/modules/workflows/src/client/api.ts +54 -34
  802. package/modules/workflows/src/client/canvas-model.ts +12 -0
  803. package/modules/workflows/src/client/state.ts +95 -0
  804. package/modules/workflows/src/domain/events.ts +25 -11
  805. package/modules/workflows/src/domain/graph.ts +135 -1
  806. package/modules/workflows/src/domain/types.ts +91 -4
  807. package/modules/workflows/src/platform.ts +12 -0
  808. package/modules/workflows/src/server/runtime.ts +78 -5
  809. package/modules/workflows/src/services/approvals.ts +62 -0
  810. package/modules/workflows/src/services/cursors.ts +37 -0
  811. package/modules/workflows/src/services/data-classes.ts +232 -0
  812. package/modules/workflows/src/services/database-repository.ts +660 -171
  813. package/modules/workflows/src/services/migration.ts +240 -0
  814. package/modules/workflows/src/services/notifications.ts +98 -0
  815. package/modules/workflows/src/services/payload-codec.ts +51 -28
  816. package/modules/workflows/src/services/payload-rotation.ts +171 -0
  817. package/modules/workflows/src/services/repository.ts +123 -8
  818. package/modules/workflows/src/services/simulation.ts +7 -0
  819. package/modules/workflows/src/services/worker.ts +446 -25
  820. package/modules/workflows/src/services/workflows-service.ts +264 -103
  821. package/modules/workflows/translations/en.json +12 -4
  822. package/modules/workflows/translations/pl.json +12 -4
  823. package/modules.json +48 -4
  824. package/package.json +64 -6
  825. package/packages/client/package.json +1 -0
  826. package/packages/client/src/ApplicationShell.tsrx +43 -0
  827. package/packages/client/src/contributions.ts +55 -0
  828. package/packages/client/src/i18n/locales/en.json +5 -0
  829. package/packages/client/src/i18n/locales/pl.json +5 -0
  830. package/packages/client/src/index.ts +13 -1
  831. package/packages/client/src/routing.ts +22 -0
  832. package/packages/client/src/shell/CommandPalette.tsrx +223 -11
  833. package/packages/client/src/shell/command-search.ts +126 -0
  834. package/packages/client/src/shell/command.ts +30 -0
  835. package/packages/client/src/shell/navigation.ts +12 -0
  836. package/packages/client/src/shell/palette-keys.ts +27 -0
  837. package/packages/client/src/shell/shell.css +7 -0
  838. package/packages/contracts/schemas/module-spec.schema.json +287 -1
  839. package/packages/contracts/schemas/module.schema.json +25 -0
  840. package/packages/contracts/src/index.ts +144 -1
  841. package/packages/database/src/backup.ts +180 -0
  842. package/packages/database/src/decoders.ts +25 -0
  843. package/packages/database/src/index.ts +17 -0
  844. package/packages/database/src/migrations.ts +7 -0
  845. package/packages/database/src/record-history.ts +5 -14
  846. package/packages/harness/src/index.ts +2 -0
  847. package/packages/harness/src/runtime.ts +378 -2
  848. package/packages/harness/src/tool-adapters.ts +20 -9
  849. package/packages/kernel/src/acl.ts +179 -0
  850. package/packages/kernel/src/approval-grant.ts +310 -0
  851. package/packages/kernel/src/capability-registry.ts +69 -2
  852. package/packages/kernel/src/data-class-registry.ts +354 -0
  853. package/packages/kernel/src/index.ts +85 -4
  854. package/packages/kernel/src/keyring.ts +208 -0
  855. package/packages/kernel/src/module-compatibility.ts +35 -4
  856. package/packages/kernel/src/module-registry.ts +49 -2
  857. package/packages/kernel/src/module-settings.ts +189 -27
  858. package/packages/server/package.json +2 -1
  859. package/packages/server/src/composition.ts +38 -0
  860. package/packages/server/src/endpoint.ts +104 -47
  861. package/packages/server/src/export/csv.ts +34 -0
  862. package/packages/server/src/export/definition.ts +346 -0
  863. package/packages/server/src/export/index.ts +61 -0
  864. package/packages/server/src/export/run.ts +116 -0
  865. package/packages/server/src/index.ts +155 -0
  866. package/packages/server/src/jobs/index.ts +93 -0
  867. package/packages/server/src/jobs/runner.ts +486 -0
  868. package/packages/server/src/log.ts +291 -0
  869. package/packages/server/src/mail/config.ts +184 -0
  870. package/packages/server/src/mail/contracts.ts +251 -0
  871. package/packages/server/src/mail/index.ts +31 -0
  872. package/packages/server/src/mail/port.ts +101 -0
  873. package/packages/server/src/mail/smtp.ts +191 -0
  874. package/packages/server/src/mail/template.ts +105 -0
  875. package/packages/server/src/metrics.ts +447 -0
  876. package/packages/server/src/pagination.ts +246 -0
  877. package/packages/server/src/trace/context.ts +103 -0
  878. package/packages/server/src/trace/egress.ts +66 -0
  879. package/packages/server/src/trace/error-sink.ts +296 -0
  880. package/packages/server/src/trace/exporter.ts +295 -0
  881. package/packages/server/src/trace/index.ts +60 -0
  882. package/packages/server/src/trace/job-sink.ts +172 -0
  883. package/packages/server/src/trace/tracer.ts +338 -0
  884. package/packages/server/src/web.ts +5 -1
  885. package/packages/storage/package.json +40 -0
  886. package/packages/storage/src/config.ts +189 -0
  887. package/packages/storage/src/content-type.ts +124 -0
  888. package/packages/storage/src/contracts.ts +112 -0
  889. package/packages/storage/src/envelope.ts +238 -0
  890. package/packages/storage/src/index.ts +49 -0
  891. package/packages/storage/src/local.ts +75 -0
  892. package/packages/storage/src/port.ts +262 -0
  893. package/packages/storage/src/read-token.ts +130 -0
  894. package/packages/storage/src/reseal.ts +128 -0
  895. package/packages/storage/src/s3.ts +144 -0
  896. package/packages/storage/src/scanner.ts +22 -0
  897. package/packages/storage/src/sigv4.ts +104 -0
  898. package/packages/storage/src/store.ts +13 -0
  899. package/packages/ui/package.json +1 -0
  900. package/packages/ui/src/components/Button.tsrx +3 -0
  901. package/packages/ui/src/components/ConfirmDialog.tsrx +13 -2
  902. package/packages/ui/src/components/DateField.tsrx +92 -0
  903. package/packages/ui/src/components/DatePicker.tsrx +525 -0
  904. package/packages/ui/src/components/DateRangeField.tsrx +93 -0
  905. package/packages/ui/src/components/Drawer.tsrx +10 -1
  906. package/packages/ui/src/components/FileUpload.tsrx +158 -0
  907. package/packages/ui/src/components/Pagination.tsrx +130 -0
  908. package/packages/ui/src/components/Select.tsrx +78 -0
  909. package/packages/ui/src/components/Table.tsrx +498 -81
  910. package/packages/ui/src/components/Tabs.tsrx +53 -0
  911. package/packages/ui/src/components/ToastHost.tsrx +48 -0
  912. package/packages/ui/src/components/calendar.ts +243 -0
  913. package/packages/ui/src/components/date-field.ts +62 -0
  914. package/packages/ui/src/components/file-upload.ts +49 -0
  915. package/packages/ui/src/components/focus-trap.ts +62 -0
  916. package/packages/ui/src/components/pagination.ts +68 -0
  917. package/packages/ui/src/components/table-sorting.ts +49 -0
  918. package/packages/ui/src/components/tabs.ts +61 -0
  919. package/packages/ui/src/components/toast-store.ts +116 -0
  920. package/packages/ui/src/icons/Icon.tsrx +5 -0
  921. package/packages/ui/src/index.ts +45 -0
  922. package/packages/ui/src/styles/components.css +598 -0
  923. package/modules/automations-workflows-integration/module.json +0 -27
  924. package/modules/automations-workflows-integration/spec/module.yaml +0 -93
  925. package/modules/automations-workflows-integration/src/index.ts +0 -14
  926. package/modules/automations-workflows-integration/src/platform.ts +0 -24
  927. package/modules/automations-workflows-integration/src/server/index.ts +0 -11
  928. package/modules/automations-workflows-integration/translations/en.json +0 -21
  929. package/modules/automations-workflows-integration/translations/pl.json +0 -21
  930. package/modules/workflows/src/services/cursor-codec.ts +0 -62
@@ -0,0 +1,117 @@
1
+ import type { DatabaseMigration } from '@flowdular/sdk/database';
2
+ import {
3
+ migrationObjectState,
4
+ postgresTenantTableState,
5
+ } from '@flowdular/sdk/database';
6
+
7
+ /* Mirrors migrations/0001_documents_core.up.sql byte for byte;
8
+ tests/migrations.test.ts fails on drift. */
9
+ export const DOCUMENTS_MIGRATION_001 = `CREATE TABLE IF NOT EXISTS documents_files (
10
+ id TEXT PRIMARY KEY,
11
+ tenant_id TEXT NOT NULL,
12
+ owner_module TEXT NOT NULL,
13
+ record_ref TEXT NOT NULL,
14
+ filename TEXT NOT NULL,
15
+ content_type TEXT NOT NULL,
16
+ bytes BIGINT NOT NULL CHECK (bytes >= 0),
17
+ checksum TEXT,
18
+ storage_key TEXT NOT NULL,
19
+ uploader_account_id TEXT NOT NULL,
20
+ scan TEXT NOT NULL CHECK (scan IN ('unscanned', 'clean', 'infected')),
21
+ status TEXT NOT NULL CHECK (status IN ('stored', 'deleted')),
22
+ description TEXT,
23
+ created_at BIGINT NOT NULL
24
+ );
25
+ CREATE INDEX IF NOT EXISTS documents_files_tenant_created_idx
26
+ ON documents_files (tenant_id, created_at DESC, id);
27
+ -- The owning module and its record reference are how another module reaches its
28
+ -- attachments, so the pair leads the index the capability reads.
29
+ CREATE INDEX IF NOT EXISTS documents_files_record_idx
30
+ ON documents_files (tenant_id, owner_module, record_ref, created_at DESC, id);
31
+ -- One row per object. A second row on one key would double count the quota and
32
+ -- leave the delete order pointing at bytes another row still claims.
33
+ CREATE UNIQUE INDEX IF NOT EXISTS documents_files_storage_key_idx
34
+ ON documents_files (tenant_id, storage_key);
35
+ -- The workspace quota is the sum of what is still stored, so the aggregate
36
+ -- reads this partial index instead of walking the workspace's rows.
37
+ CREATE INDEX IF NOT EXISTS documents_files_usage_idx
38
+ ON documents_files (tenant_id, bytes) WHERE status = 'stored';
39
+ ALTER TABLE documents_files ENABLE ROW LEVEL SECURITY;
40
+ ALTER TABLE documents_files FORCE ROW LEVEL SECURITY;
41
+ CREATE POLICY documents_files_tenant_policy ON documents_files
42
+ USING (tenant_id = current_setting('coreloom.tenant_id', true))
43
+ WITH CHECK (tenant_id = current_setting('coreloom.tenant_id', true));
44
+ `;
45
+
46
+ /* Mirrors migrations/0002_documents_files_page.up.sql byte for byte. */
47
+ export const DOCUMENTS_MIGRATION_002 = `-- A page of documents is keyed on (created_at, id) in one direction, so the
48
+ -- index carries both columns descending. The index shipped with 0001 orders id
49
+ -- ascending under a descending created_at, which no scan direction turns into
50
+ -- the order a keyset page walks.
51
+ CREATE INDEX IF NOT EXISTS documents_files_page_idx
52
+ ON documents_files (tenant_id, created_at DESC, id DESC);
53
+ `;
54
+
55
+ /* Mirrors migrations/0003_documents_rotation_inventory.up.sql byte for byte. */
56
+ export const DOCUMENTS_MIGRATION_003 = `-- The storage key rotation has to find the workspaces that still hold objects
57
+ -- before it knows which objects those are, so the cross-tenant role may count
58
+ -- stored rows by workspace and nothing else: the storage key, the record and
59
+ -- the file name stay invisible to it, and every object it names is read again
60
+ -- under the workspace that row named. PostgreSQL checks column privileges in
61
+ -- WHERE too, so \`status\` is part of the grant.
62
+ DO $$
63
+ BEGIN
64
+ IF NOT EXISTS (SELECT 1 FROM pg_roles WHERE rolname = 'coreloom_background') THEN
65
+ RAISE EXCEPTION 'The coreloom_background role must exist before this migration.';
66
+ END IF;
67
+ END
68
+ $$;
69
+ CREATE POLICY documents_files_background_policy ON documents_files
70
+ FOR SELECT TO coreloom_background
71
+ USING (status = 'stored');
72
+ REVOKE SELECT ON documents_files FROM coreloom_background;
73
+ GRANT SELECT (tenant_id, status) ON documents_files TO coreloom_background;
74
+ `;
75
+
76
+ export const databaseMigrations: readonly DatabaseMigration[] = [
77
+ {
78
+ id: '0001_documents_core',
79
+ sql: { postgresql: DOCUMENTS_MIGRATION_001 },
80
+ inspectExisting: (database) =>
81
+ postgresTenantTableState(
82
+ database,
83
+ 'documents_files',
84
+ 'documents_files_tenant_policy',
85
+ [
86
+ () => database.schema.hasIndex('documents_files_tenant_created_idx'),
87
+ () => database.schema.hasIndex('documents_files_record_idx'),
88
+ () => database.schema.hasIndex('documents_files_storage_key_idx'),
89
+ () => database.schema.hasIndex('documents_files_usage_idx'),
90
+ ],
91
+ ),
92
+ },
93
+ {
94
+ id: '0002_documents_files_page',
95
+ sql: { postgresql: DOCUMENTS_MIGRATION_002 },
96
+ /* The table is 0001's; this migration owns one index, so a database that
97
+ already carries it is adopted and one that does not runs it. */
98
+ inspectExisting: (database) =>
99
+ migrationObjectState([
100
+ () => database.schema.hasIndex('documents_files_page_idx'),
101
+ ]),
102
+ },
103
+ {
104
+ id: '0003_documents_rotation_inventory',
105
+ sql: { postgresql: DOCUMENTS_MIGRATION_003 },
106
+ /* A policy and a column grant leave no schema object behind, so the
107
+ privilege itself is what proves this migration ran. */
108
+ inspectExisting: async (database) => {
109
+ const result = await database.query<{ granted: boolean }>({
110
+ text: `SELECT CASE WHEN to_regclass('documents_files') IS NOT NULL THEN
111
+ has_column_privilege('coreloom_background', 'documents_files', 'status', 'SELECT')
112
+ ELSE false END AS granted`,
113
+ });
114
+ return result.rows[0]?.granted === true ? 'complete' : 'absent';
115
+ },
116
+ },
117
+ ];
@@ -0,0 +1,58 @@
1
+ import type { DocumentFilters, DocumentsFile } from '../domain/types.ts';
2
+
3
+ /** The row order an export walks: creation time, then id to break a tie. */
4
+ export interface DocumentPageCursor {
5
+ readonly createdAt: number;
6
+ readonly id: string;
7
+ }
8
+
9
+ /**
10
+ * The async, database-agnostic port. Every read is bounded by a limit the
11
+ * caller states, and every method carries the tenant id the transaction binds.
12
+ */
13
+ export interface DocumentsRepository {
14
+ /**
15
+ * Newest first: what the workspace still holds, plus its infected refusals.
16
+ * `after` is the keyset of the last row the caller saw, so a screen pages
17
+ * without an offset over rows another upload can move.
18
+ */
19
+ list(
20
+ tenantId: string,
21
+ filters: DocumentFilters,
22
+ limit: number,
23
+ after?: DocumentPageCursor | null,
24
+ ): Promise<readonly DocumentsFile[]>;
25
+ /**
26
+ * Every row of one workspace, oldest first, paged by the keyset of the last
27
+ * row a caller saw. Unlike `list` it hides nothing: an export of what the
28
+ * workspace holds includes the deleted rows that are its trail.
29
+ */
30
+ listForExport(
31
+ tenantId: string,
32
+ after: DocumentPageCursor | null,
33
+ limit: number,
34
+ ): Promise<readonly DocumentsFile[]>;
35
+ find(tenantId: string, id: string): Promise<DocumentsFile | null>;
36
+ /** The same row, reached only through the reference its owner module knows. */
37
+ findAttached(
38
+ tenantId: string,
39
+ ownerModule: string,
40
+ recordRef: string,
41
+ id: string,
42
+ ): Promise<DocumentsFile | null>;
43
+ create(record: DocumentsFile): Promise<DocumentsFile>;
44
+ /**
45
+ * Locks the stored row, runs `discard` while it is held, then marks the row
46
+ * deleted. Null when it was already deleted or never existed, in which case
47
+ * `discard` does not run. The lock orders the delete against a pass that
48
+ * rewrites the object under the same lock, so neither can leave an object
49
+ * the other does not see.
50
+ */
51
+ markDeleted(
52
+ tenantId: string,
53
+ id: string,
54
+ discard: () => Promise<void>,
55
+ ): Promise<DocumentsFile | null>;
56
+ /** Bytes the workspace still stores; the quota is measured against it. */
57
+ storedBytes(tenantId: string): Promise<number>;
58
+ }
@@ -0,0 +1,157 @@
1
+ import type { DatabaseHandle } from '@flowdular/sdk/database';
2
+ import type {
3
+ StorageObjectRef,
4
+ StorageResealCount,
5
+ StorageResealPort,
6
+ } from '@flowdular/sdk/storage';
7
+
8
+ /** Objects walked inside one tenant-scoped transaction. */
9
+ export const STORAGE_ROTATION_BATCH = 200;
10
+
11
+ export const STORAGE_ROTATION_TABLE = 'documents_files';
12
+
13
+ export interface StorageRotationReport {
14
+ readonly table: string;
15
+ /** Key id every object should end on: the current key of the storage ring. */
16
+ readonly currentKeyId: string;
17
+ readonly counts: readonly StorageResealCount[];
18
+ readonly tenants: number;
19
+ /** Stored rows the pass walked. */
20
+ readonly objects: number;
21
+ /** Objects on a retired key the ring still holds when the run started. */
22
+ readonly stale: number;
23
+ readonly resealed: number;
24
+ /** Objects under a key id the ring does not hold; left as they are. */
25
+ readonly unknown: number;
26
+ /** Objects that failed authentication; left as they are. */
27
+ readonly refused: number;
28
+ /** Stored rows whose object the store no longer holds. */
29
+ readonly missing: number;
30
+ }
31
+
32
+ export interface StorageRotationOptions {
33
+ /** Tenant-scoped handle. Every row is read on it. */
34
+ readonly runtime: DatabaseHandle;
35
+ /** Cross-tenant handle. It is granted the tenant id and the status and nothing else. */
36
+ readonly background: DatabaseHandle;
37
+ readonly storage: StorageResealPort;
38
+ readonly apply?: boolean;
39
+ readonly batchSize?: number;
40
+ }
41
+
42
+ const SQL = {
43
+ tenants: `SELECT tenant_id, count(*) AS row_count
44
+ FROM documents_files
45
+ WHERE status = 'stored'
46
+ GROUP BY tenant_id
47
+ ORDER BY tenant_id`,
48
+ /* Paged by primary key. The rows are locked while their objects are
49
+ rewritten, so a delete that marks one of them waits for the batch and
50
+ then removes the re-sealed object instead of racing its rewrite. */
51
+ batch: `SELECT id, storage_key
52
+ FROM documents_files
53
+ WHERE tenant_id = $1 AND status = 'stored' AND id > $2
54
+ ORDER BY id
55
+ LIMIT $3
56
+ FOR UPDATE`,
57
+ inventoryBatch: `SELECT id, storage_key
58
+ FROM documents_files
59
+ WHERE tenant_id = $1 AND status = 'stored' AND id > $2
60
+ ORDER BY id
61
+ LIMIT $3`,
62
+ };
63
+
64
+ function count(value: number | bigint | string): number {
65
+ const normalized = Number(value);
66
+ if (!Number.isSafeInteger(normalized)) {
67
+ throw new Error('The documents database returned an invalid count.');
68
+ }
69
+ return normalized;
70
+ }
71
+
72
+ /* The row is the inventory, and its key names the tenant it was written under;
73
+ a row whose key names another tenant is a defect, not an object to rewrite. */
74
+ function referenceOf(tenantId: string, storageKey: string): StorageObjectRef {
75
+ const [tenant, moduleId, objectId, ...rest] = storageKey.split('/');
76
+ if (tenant !== tenantId || !moduleId || !objectId || rest.length > 0) {
77
+ throw new Error(
78
+ `A documents_files row of ${tenantId} names the storage key ${storageKey}, which is not one of its objects.`,
79
+ );
80
+ }
81
+ return { tenantId, moduleId, objectId };
82
+ }
83
+
84
+ /**
85
+ * Re-seals every stored document object that is not on the current storage
86
+ * key. The workspaces are listed once on the cross-tenant role, and each batch
87
+ * of rows is read under its own tenant; the objects they name are read from
88
+ * the store, and the stale ones rewritten in place. It is idempotent: a second
89
+ * run finds nothing to do.
90
+ */
91
+ export async function rotateDocumentObjects(
92
+ options: StorageRotationOptions,
93
+ ): Promise<StorageRotationReport> {
94
+ const apply = options.apply === true;
95
+ const batchSize = options.batchSize ?? STORAGE_ROTATION_BATCH;
96
+ const inventory = await options.background.transaction(
97
+ (transaction) =>
98
+ transaction.query<{
99
+ tenant_id: string;
100
+ row_count: number | bigint | string;
101
+ }>({ text: SQL.tenants }),
102
+ { access: 'read' },
103
+ );
104
+ const counts = new Map<string, number>();
105
+ let objects = 0;
106
+ let stale = 0;
107
+ let resealed = 0;
108
+ let unknown = 0;
109
+ let refused = 0;
110
+ let missing = 0;
111
+ for (const { tenant_id: tenantId, row_count: rowCount } of inventory.rows) {
112
+ objects += count(rowCount);
113
+ let cursor = '';
114
+ for (;;) {
115
+ const batch = await options.runtime.transaction(
116
+ async (transaction) => {
117
+ const rows = (
118
+ await transaction.query<{ id: string; storage_key: string }>({
119
+ text: apply ? SQL.batch : SQL.inventoryBatch,
120
+ parameters: [tenantId, cursor, batchSize],
121
+ })
122
+ ).rows;
123
+ const report = await options.storage.reseal(
124
+ rows.map((row) => referenceOf(tenantId, row.storage_key)),
125
+ { apply },
126
+ );
127
+ return { read: rows.length, last: rows.at(-1)?.id, report };
128
+ },
129
+ { access: apply ? 'write' : 'read', tenantId },
130
+ );
131
+ for (const entry of batch.report.counts) {
132
+ counts.set(entry.keyId, (counts.get(entry.keyId) ?? 0) + entry.objects);
133
+ }
134
+ stale += batch.report.stale;
135
+ resealed += batch.report.resealed;
136
+ unknown += batch.report.unknown;
137
+ refused += batch.report.refused;
138
+ missing += batch.report.missing;
139
+ if (batch.read < batchSize || batch.last === undefined) break;
140
+ cursor = batch.last;
141
+ }
142
+ }
143
+ return {
144
+ table: STORAGE_ROTATION_TABLE,
145
+ currentKeyId: options.storage.keyId,
146
+ counts: [...counts]
147
+ .sort(([left], [right]) => (left < right ? -1 : left > right ? 1 : 0))
148
+ .map(([keyId, total]) => ({ keyId, objects: total })),
149
+ tenants: inventory.rows.length,
150
+ objects,
151
+ stale,
152
+ resealed,
153
+ unknown,
154
+ refused,
155
+ missing,
156
+ };
157
+ }
@@ -0,0 +1,107 @@
1
+ import {
2
+ defineModuleSettings,
3
+ PLATFORM_SETTINGS_TENANT,
4
+ type ModuleSettingsRuntime,
5
+ } from '@flowdular/sdk/kernel';
6
+ import {
7
+ DEFAULT_STORAGE_MAX_OBJECT_BYTES,
8
+ storageConfigFromEnvironment,
9
+ STORAGE_READ_URL_MAX_SECONDS,
10
+ } from '@flowdular/sdk/storage';
11
+
12
+ export const DOCUMENTS_MODULE_ID = 'documents.core';
13
+
14
+ export const DEFAULT_DOCUMENTS_QUOTA_BYTES = 10 * 1024 * 1024 * 1024;
15
+ export const DEFAULT_DOCUMENTS_READ_URL_SECONDS = 300;
16
+ export const MIN_DOCUMENTS_READ_URL_SECONDS = 30;
17
+ /* A quota is a workspace bound, not a licence: a terabyte is far past what the
18
+ 25 MB object limit and one workspace's records reach, and a larger number is
19
+ a mistake rather than a policy. */
20
+ export const MAX_DOCUMENTS_QUOTA_BYTES = 1024 * 1024 * 1024 * 1024;
21
+
22
+ export const DOCUMENTS_MODULE_SETTINGS = defineModuleSettings({
23
+ moduleId: DOCUMENTS_MODULE_ID,
24
+ settings: {
25
+ quotaBytes: {
26
+ type: 'number',
27
+ defaultValue: DEFAULT_DOCUMENTS_QUOTA_BYTES,
28
+ min: 0,
29
+ max: MAX_DOCUMENTS_QUOTA_BYTES,
30
+ visibility: 'shared',
31
+ client: false,
32
+ scope: 'tenant',
33
+ labelKey: 'documents.settings.quotaBytes.label',
34
+ label: 'Storage quota (bytes)',
35
+ descriptionKey: 'documents.settings.quotaBytes.description',
36
+ description:
37
+ 'Bytes this workspace may hold in document storage; 0 refuses every upload.',
38
+ },
39
+ readUrlSeconds: {
40
+ type: 'number',
41
+ defaultValue: DEFAULT_DOCUMENTS_READ_URL_SECONDS,
42
+ min: MIN_DOCUMENTS_READ_URL_SECONDS,
43
+ max: STORAGE_READ_URL_MAX_SECONDS,
44
+ visibility: 'private',
45
+ client: false,
46
+ scope: 'platform',
47
+ labelKey: 'documents.settings.readUrlSeconds.label',
48
+ label: 'Read URL lifetime (seconds)',
49
+ descriptionKey: 'documents.settings.readUrlSeconds.description',
50
+ description:
51
+ 'How long a signed download link stays valid after it is issued.',
52
+ },
53
+ },
54
+ });
55
+
56
+ /* A setting read must never take an upload down, so both accessors fall back to
57
+ the declared default when the runtime has not registered the module yet. */
58
+ function value(
59
+ settings: ModuleSettingsRuntime,
60
+ tenantId: string,
61
+ key: 'quotaBytes' | 'readUrlSeconds',
62
+ fallback: number,
63
+ ): number {
64
+ try {
65
+ return settings.get<number>(tenantId, DOCUMENTS_MODULE_ID, key);
66
+ } catch {
67
+ return fallback;
68
+ }
69
+ }
70
+
71
+ export function documentsQuotaBytes(
72
+ settings: ModuleSettingsRuntime,
73
+ tenantId: string,
74
+ ): number {
75
+ return value(settings, tenantId, 'quotaBytes', DEFAULT_DOCUMENTS_QUOTA_BYTES);
76
+ }
77
+
78
+ /**
79
+ * The object ceiling the platform built its storage port with, read through the
80
+ * storage package's own parser so there is one rule for it. It is not a module
81
+ * setting: the limit belongs to the deployment, and this module only repeats it
82
+ * to the uploader. A configuration this call refuses has already stopped the
83
+ * platform from composing a port, so the declared default is what a screen is
84
+ * told rather than a failure of its own.
85
+ */
86
+ export function documentsMaxObjectBytes(
87
+ environment: NodeJS.ProcessEnv,
88
+ workspaceRoot: string,
89
+ ): number {
90
+ try {
91
+ return storageConfigFromEnvironment(environment, workspaceRoot)
92
+ .maxObjectBytes;
93
+ } catch {
94
+ return DEFAULT_STORAGE_MAX_OBJECT_BYTES;
95
+ }
96
+ }
97
+
98
+ export function documentsReadUrlSeconds(
99
+ settings: ModuleSettingsRuntime,
100
+ ): number {
101
+ return value(
102
+ settings,
103
+ PLATFORM_SETTINGS_TENANT,
104
+ 'readUrlSeconds',
105
+ DEFAULT_DOCUMENTS_READ_URL_SECONDS,
106
+ );
107
+ }
@@ -0,0 +1,111 @@
1
+ {
2
+ "module.name": "Documents",
3
+ "navigation.label": "Documents",
4
+ "navigation.description": "Files attached to this workspace's records.",
5
+ "page.eyebrow": "Workspace",
6
+ "page.title": "Documents",
7
+ "page.description": "Every file this workspace stores, the record it belongs to and the state of its scan.",
8
+ "denied": "You need the documents read permission to see this workspace's files.",
9
+ "common.refresh": "Refresh",
10
+ "common.refreshing": "Refreshing…",
11
+ "common.filters": "Filters",
12
+ "common.actions": "Actions",
13
+ "common.messages": "Messages",
14
+ "common.close": "Close",
15
+ "common.accessDenied": "Access denied",
16
+ "table.title": "Stored documents",
17
+ "table.count": "{count} documents",
18
+ "table.countMore": "{count} documents, more to load",
19
+ "table.caption": "Documents of this workspace",
20
+ "table.loading": "Loading documents…",
21
+ "table.note": "Bytes live in platform storage under a key that starts with this workspace. A download link is signed and expires.",
22
+ "search.label": "Search documents",
23
+ "search.placeholder": "File name or description",
24
+ "filter.ownerModule": "Owner module",
25
+ "filter.allOwnerModules": "All modules",
26
+ "filter.scan": "Scan",
27
+ "filter.allScans": "Any scan state",
28
+ "column.filename": "File",
29
+ "column.ownerModule": "Owner module",
30
+ "column.recordRef": "Record",
31
+ "column.contentType": "Type",
32
+ "column.bytes": "Size",
33
+ "column.scan": "Scan",
34
+ "column.uploader": "Uploaded by",
35
+ "empty.title": "No documents yet",
36
+ "empty.hint": "A file uploaded for a record in this workspace appears here.",
37
+ "emptyFiltered.title": "No document matches",
38
+ "emptyFiltered.hint": "Clear the search or the filters.",
39
+ "loadFailed.title": "Could not load the documents",
40
+ "loadFailed.hint": "The request failed, so nothing was read. Refresh to try again.",
41
+ "action.download": "Download",
42
+ "action.more": "Load more",
43
+ "action.downloadRefusedInfected": "An infected file is removed the moment the scan finds it, so there is nothing to download.",
44
+ "action.downloadRefusedDeleted": "This document was deleted, so there is nothing to download.",
45
+ "action.delete": "Delete",
46
+ "action.deleteSelected": "Delete selected",
47
+ "action.deleteSelectedRefused": "None of the selected rows is a stored document you can delete.",
48
+ "selection.label": "Select all documents on screen",
49
+ "selection.rowLabel": "Select {name}",
50
+ "selection.clear": "Clear selection",
51
+ "selection.summary": "{count} selected",
52
+ "delete.title": "Delete this document?",
53
+ "delete.description": "{name} is removed from storage and its row is kept as the trail. This cannot be undone.",
54
+ "deleteMany.title": "Delete the selected documents?",
55
+ "deleteMany.description": "{count} documents are removed from storage and their rows are kept as the trail. This cannot be undone.",
56
+ "notice.uploaded": "{name} was stored.",
57
+ "notice.deleted": "{name} was deleted.",
58
+ "notice.deletedMany": "Deleted {deleted}, missing {missing}, refused {refused}.",
59
+ "upload.action.open": "Upload",
60
+ "upload.action.submit": "Upload file",
61
+ "upload.action.uploading": "Uploading…",
62
+ "upload.drawer.title": "Upload a document",
63
+ "upload.drawer.subtitle": "The file is stored encrypted and attached to the record you name.",
64
+ "upload.form.file": "File",
65
+ "upload.form.fileHelp": "Up to 25 MB. PDF, images, text, CSV and Office documents.",
66
+ "upload.form.fileHelpLimited": "Up to {limit}. PDF, images, text, CSV and Office documents.",
67
+ "upload.form.tooLarge": "This file is larger than {limit}, which is all the platform stores.",
68
+ "upload.form.typeRefused": "This kind of file is not one the platform stores.",
69
+ "upload.form.clear": "Remove",
70
+ "upload.form.chosen": "{name}, {size}",
71
+ "upload.form.ownerModule": "Owner module",
72
+ "upload.form.ownerModuleHelp": "The module that owns the record, for example directory.core.",
73
+ "upload.form.ownerModulePlaceholder": "directory.core",
74
+ "upload.form.recordRef": "Record reference",
75
+ "upload.form.recordRefHelp": "The owning module's own reference for the record.",
76
+ "upload.form.recordRefPlaceholder": "party-4711",
77
+ "upload.form.description": "Description",
78
+ "upload.form.descriptionHelp": "Optional note shown beside the file.",
79
+ "upload.form.constraint": "The declared type is verified against the bytes, and the workspace quota is checked before anything is stored.",
80
+ "scan.unscanned": "Unscanned",
81
+ "scan.clean": "Clean",
82
+ "scan.infected": "Infected",
83
+ "unit.bytes": "{value} B",
84
+ "unit.kb": "{value} KB",
85
+ "unit.mb": "{value} MB",
86
+ "unit.gb": "{value} GB",
87
+ "settings.quotaBytes.label": "Storage quota (bytes)",
88
+ "settings.quotaBytes.description": "Bytes this workspace may hold in document storage; 0 refuses every upload.",
89
+ "settings.readUrlSeconds.label": "Read URL lifetime (seconds)",
90
+ "settings.readUrlSeconds.description": "How long a signed download link stays valid after it is issued.",
91
+ "error.load": "Could not load the documents of this workspace.",
92
+ "error.upload": "Could not store the file.",
93
+ "error.readUrl": "Could not issue a download link.",
94
+ "error.downloadBlocked": "The browser blocked the download tab. Allow pop-ups for this page and try again.",
95
+ "error.delete": "Could not delete the document.",
96
+ "error.deleteMany": "Could not delete the selected documents.",
97
+ "error.request": "The documents operation failed.",
98
+ "error.code.QUOTA_EXCEEDED": "This workspace has no storage left. Delete a document or raise the quota.",
99
+ "error.code.DOCUMENT_TOO_LARGE": "The file is larger than the platform object limit.",
100
+ "error.code.CONTENT_TYPE_REFUSED": "This platform does not store files of that type.",
101
+ "error.code.CONTENT_MISMATCH": "The file does not carry the structure its type claims.",
102
+ "error.code.DOCUMENT_INFECTED": "The scanner reported this file as infected. Nothing was stored.",
103
+ "error.code.DOCUMENT_NOT_FOUND": "The document does not exist in this workspace.",
104
+ "error.code.DOCUMENT_DELETED": "The document was deleted.",
105
+ "error.code.STORAGE_UNAVAILABLE": "Document storage is unavailable. Try again shortly.",
106
+ "error.code.CONTENT_TYPE_REQUIRED": "The browser did not report the file type. Choose the file again.",
107
+ "error.code.CSRF_REJECTED": "The session proof expired. Reload the page and try again.",
108
+ "error.code.FORBIDDEN": "You are not allowed to perform this action.",
109
+ "error.code.TOKEN_MUTATION_DENIED": "An API token cannot make this change; sign in and try again.",
110
+ "error.code.CURSOR_INVALID": "That page is no longer available. Refresh the list."
111
+ }
@@ -0,0 +1,111 @@
1
+ {
2
+ "module.name": "Dokumenty",
3
+ "navigation.label": "Dokumenty",
4
+ "navigation.description": "Pliki dołączone do rekordów tego obszaru roboczego.",
5
+ "page.eyebrow": "Obszar roboczy",
6
+ "page.title": "Dokumenty",
7
+ "page.description": "Wszystkie pliki tego obszaru roboczego, rekord, do którego należą, i stan skanowania.",
8
+ "denied": "Potrzebujesz uprawnienia odczytu dokumentów, aby zobaczyć pliki tego obszaru roboczego.",
9
+ "common.refresh": "Odśwież",
10
+ "common.refreshing": "Odświeżanie…",
11
+ "common.filters": "Filtry",
12
+ "common.actions": "Akcje",
13
+ "common.messages": "Komunikaty",
14
+ "common.close": "Zamknij",
15
+ "common.accessDenied": "Brak dostępu",
16
+ "table.title": "Zapisane dokumenty",
17
+ "table.count": "Liczba dokumentów: {count}",
18
+ "table.countMore": "Dokumenty: {count}, są kolejne",
19
+ "table.caption": "Dokumenty tego obszaru roboczego",
20
+ "table.loading": "Wczytywanie dokumentów…",
21
+ "table.note": "Bajty są przechowywane w magazynie platformy pod kluczem zaczynającym się od tego obszaru roboczego. Link do pobrania jest podpisany i wygasa.",
22
+ "search.label": "Szukaj dokumentów",
23
+ "search.placeholder": "Nazwa pliku lub opis",
24
+ "filter.ownerModule": "Moduł właściciela",
25
+ "filter.allOwnerModules": "Wszystkie moduły",
26
+ "filter.scan": "Skanowanie",
27
+ "filter.allScans": "Dowolny stan skanowania",
28
+ "column.filename": "Plik",
29
+ "column.ownerModule": "Moduł właściciela",
30
+ "column.recordRef": "Rekord",
31
+ "column.contentType": "Typ",
32
+ "column.bytes": "Rozmiar",
33
+ "column.scan": "Skanowanie",
34
+ "column.uploader": "Przesłał",
35
+ "empty.title": "Brak dokumentów",
36
+ "empty.hint": "Plik przesłany do rekordu w tym obszarze roboczym pojawi się tutaj.",
37
+ "emptyFiltered.title": "Brak pasujących dokumentów",
38
+ "emptyFiltered.hint": "Wyczyść wyszukiwanie lub filtry.",
39
+ "loadFailed.title": "Nie udało się wczytać dokumentów",
40
+ "loadFailed.hint": "Żądanie się nie powiodło, więc nic nie zostało odczytane. Odśwież, aby spróbować ponownie.",
41
+ "action.download": "Pobierz",
42
+ "action.more": "Wczytaj więcej",
43
+ "action.downloadRefusedInfected": "Zainfekowany plik jest usuwany w chwili wykrycia, więc nie ma czego pobrać.",
44
+ "action.downloadRefusedDeleted": "Ten dokument został usunięty, więc nie ma czego pobrać.",
45
+ "action.delete": "Usuń",
46
+ "action.deleteSelected": "Usuń zaznaczone",
47
+ "action.deleteSelectedRefused": "Żaden z zaznaczonych wierszy nie jest zapisanym dokumentem, który można usunąć.",
48
+ "selection.label": "Zaznacz wszystkie dokumenty na ekranie",
49
+ "selection.rowLabel": "Zaznacz {name}",
50
+ "selection.clear": "Wyczyść zaznaczenie",
51
+ "selection.summary": "Zaznaczono: {count}",
52
+ "delete.title": "Usunąć ten dokument?",
53
+ "delete.description": "{name} zostanie usunięty z magazynu, a jego wpis pozostanie jako ślad. Tej operacji nie można cofnąć.",
54
+ "deleteMany.title": "Usunąć zaznaczone dokumenty?",
55
+ "deleteMany.description": "Dokumenty ({count}) zostaną usunięte z magazynu, a ich wpisy pozostaną jako ślad. Tej operacji nie można cofnąć.",
56
+ "notice.uploaded": "Plik {name} został zapisany.",
57
+ "notice.deleted": "Plik {name} został usunięty.",
58
+ "notice.deletedMany": "Usunięto: {deleted}, brakujące: {missing}, odrzucone: {refused}.",
59
+ "upload.action.open": "Prześlij",
60
+ "upload.action.submit": "Prześlij plik",
61
+ "upload.action.uploading": "Przesyłanie…",
62
+ "upload.drawer.title": "Prześlij dokument",
63
+ "upload.drawer.subtitle": "Plik zostanie zaszyfrowany i dołączony do wskazanego rekordu.",
64
+ "upload.form.file": "Plik",
65
+ "upload.form.fileHelp": "Do 25 MB. PDF, obrazy, tekst, CSV i dokumenty Office.",
66
+ "upload.form.fileHelpLimited": "Do {limit}. PDF, obrazy, tekst, CSV i dokumenty pakietu Office.",
67
+ "upload.form.tooLarge": "Ten plik jest większy niż {limit}, czyli tyle, ile platforma przechowuje.",
68
+ "upload.form.typeRefused": "Tego rodzaju pliku platforma nie przechowuje.",
69
+ "upload.form.clear": "Usuń",
70
+ "upload.form.chosen": "{name}, {size}",
71
+ "upload.form.ownerModule": "Moduł właściciela",
72
+ "upload.form.ownerModuleHelp": "Moduł, do którego należy rekord, na przykład directory.core.",
73
+ "upload.form.ownerModulePlaceholder": "directory.core",
74
+ "upload.form.recordRef": "Odwołanie do rekordu",
75
+ "upload.form.recordRefHelp": "Własne odwołanie modułu właściciela do rekordu.",
76
+ "upload.form.recordRefPlaceholder": "party-4711",
77
+ "upload.form.description": "Opis",
78
+ "upload.form.descriptionHelp": "Opcjonalna notatka wyświetlana obok pliku.",
79
+ "upload.form.constraint": "Zadeklarowany typ jest weryfikowany względem bajtów, a limit obszaru roboczego sprawdzany przed zapisem.",
80
+ "scan.unscanned": "Nieskanowany",
81
+ "scan.clean": "Czysty",
82
+ "scan.infected": "Zainfekowany",
83
+ "unit.bytes": "{value} B",
84
+ "unit.kb": "{value} KB",
85
+ "unit.mb": "{value} MB",
86
+ "unit.gb": "{value} GB",
87
+ "settings.quotaBytes.label": "Limit magazynu (bajty)",
88
+ "settings.quotaBytes.description": "Liczba bajtów, jaką ten obszar roboczy może przechowywać; 0 blokuje każde przesłanie.",
89
+ "settings.readUrlSeconds.label": "Czas życia linku do pobrania (sekundy)",
90
+ "settings.readUrlSeconds.description": "Jak długo podpisany link do pobrania pozostaje ważny po wystawieniu.",
91
+ "error.load": "Nie udało się wczytać dokumentów tego obszaru roboczego.",
92
+ "error.upload": "Nie udało się zapisać pliku.",
93
+ "error.readUrl": "Nie udało się wystawić linku do pobrania.",
94
+ "error.downloadBlocked": "Przeglądarka zablokowała kartę pobierania. Zezwól na wyskakujące okna dla tej strony i spróbuj ponownie.",
95
+ "error.delete": "Nie udało się usunąć dokumentu.",
96
+ "error.deleteMany": "Nie udało się usunąć zaznaczonych dokumentów.",
97
+ "error.request": "Operacja na dokumentach nie powiodła się.",
98
+ "error.code.QUOTA_EXCEEDED": "Ten obszar roboczy nie ma wolnego miejsca. Usuń dokument lub zwiększ limit.",
99
+ "error.code.DOCUMENT_TOO_LARGE": "Plik przekracza limit rozmiaru obiektu platformy.",
100
+ "error.code.CONTENT_TYPE_REFUSED": "Platforma nie przechowuje plików tego typu.",
101
+ "error.code.CONTENT_MISMATCH": "Zawartość pliku nie odpowiada deklarowanemu typowi.",
102
+ "error.code.DOCUMENT_INFECTED": "Skaner uznał ten plik za zainfekowany. Nic nie zostało zapisane.",
103
+ "error.code.DOCUMENT_NOT_FOUND": "Taki dokument nie istnieje w tym obszarze roboczym.",
104
+ "error.code.DOCUMENT_DELETED": "Dokument został usunięty.",
105
+ "error.code.STORAGE_UNAVAILABLE": "Magazyn dokumentów jest niedostępny. Spróbuj za chwilę.",
106
+ "error.code.CONTENT_TYPE_REQUIRED": "Przeglądarka nie podała typu pliku. Wybierz plik ponownie.",
107
+ "error.code.CSRF_REJECTED": "Potwierdzenie sesji wygasło. Odśwież stronę i spróbuj ponownie.",
108
+ "error.code.FORBIDDEN": "Nie masz uprawnień do tej operacji.",
109
+ "error.code.TOKEN_MUTATION_DENIED": "Token API nie może wykonać tej zmiany; zaloguj się i spróbuj ponownie.",
110
+ "error.code.CURSOR_INVALID": "Ta strona nie jest już dostępna. Odśwież listę."
111
+ }
@@ -0,0 +1,2 @@
1
+ DROP POLICY IF EXISTS exports_jobs_tenant_policy ON exports_jobs;
2
+ DROP TABLE IF EXISTS exports_jobs;