@open-mercato/documents 0.6.8-develop.7016.1.4ed7b1e49d

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 (602) hide show
  1. package/README.md +88 -0
  2. package/build.mjs +23 -0
  3. package/dist/index.js +5 -0
  4. package/dist/index.js.map +7 -0
  5. package/dist/modules/documents/acl.js +15 -0
  6. package/dist/modules/documents/acl.js.map +7 -0
  7. package/dist/modules/documents/api/[id]/archive/route.js +116 -0
  8. package/dist/modules/documents/api/[id]/archive/route.js.map +7 -0
  9. package/dist/modules/documents/api/[id]/attachments/[attachmentId]/route.js +155 -0
  10. package/dist/modules/documents/api/[id]/attachments/[attachmentId]/route.js.map +7 -0
  11. package/dist/modules/documents/api/[id]/attachments/route.js +153 -0
  12. package/dist/modules/documents/api/[id]/attachments/route.js.map +7 -0
  13. package/dist/modules/documents/api/[id]/collab-token/route.js +180 -0
  14. package/dist/modules/documents/api/[id]/collab-token/route.js.map +7 -0
  15. package/dist/modules/documents/api/[id]/comments/access-check/route.js +86 -0
  16. package/dist/modules/documents/api/[id]/comments/access-check/route.js.map +7 -0
  17. package/dist/modules/documents/api/[id]/comments/route.js +387 -0
  18. package/dist/modules/documents/api/[id]/comments/route.js.map +7 -0
  19. package/dist/modules/documents/api/[id]/content/route.js +143 -0
  20. package/dist/modules/documents/api/[id]/content/route.js.map +7 -0
  21. package/dist/modules/documents/api/[id]/duplicate/route.js +200 -0
  22. package/dist/modules/documents/api/[id]/duplicate/route.js.map +7 -0
  23. package/dist/modules/documents/api/[id]/export/route.js +421 -0
  24. package/dist/modules/documents/api/[id]/export/route.js.map +7 -0
  25. package/dist/modules/documents/api/[id]/favorite/route.js +96 -0
  26. package/dist/modules/documents/api/[id]/favorite/route.js.map +7 -0
  27. package/dist/modules/documents/api/[id]/links/[linkId]/route.js +85 -0
  28. package/dist/modules/documents/api/[id]/links/[linkId]/route.js.map +7 -0
  29. package/dist/modules/documents/api/[id]/links/route.js +257 -0
  30. package/dist/modules/documents/api/[id]/links/route.js.map +7 -0
  31. package/dist/modules/documents/api/[id]/principals/route.js +299 -0
  32. package/dist/modules/documents/api/[id]/principals/route.js.map +7 -0
  33. package/dist/modules/documents/api/[id]/route.js +246 -0
  34. package/dist/modules/documents/api/[id]/route.js.map +7 -0
  35. package/dist/modules/documents/api/[id]/shares/route.js +335 -0
  36. package/dist/modules/documents/api/[id]/shares/route.js.map +7 -0
  37. package/dist/modules/documents/api/[id]/unarchive/route.js +39 -0
  38. package/dist/modules/documents/api/[id]/unarchive/route.js.map +7 -0
  39. package/dist/modules/documents/api/[id]/versions/[versionId]/restore/route.js +133 -0
  40. package/dist/modules/documents/api/[id]/versions/[versionId]/restore/route.js.map +7 -0
  41. package/dist/modules/documents/api/[id]/versions/[versionId]/route.js +93 -0
  42. package/dist/modules/documents/api/[id]/versions/[versionId]/route.js.map +7 -0
  43. package/dist/modules/documents/api/[id]/versions/route.js +193 -0
  44. package/dist/modules/documents/api/[id]/versions/route.js.map +7 -0
  45. package/dist/modules/documents/api/[id]/watch/route.js +97 -0
  46. package/dist/modules/documents/api/[id]/watch/route.js.map +7 -0
  47. package/dist/modules/documents/api/_commands.js +34 -0
  48. package/dist/modules/documents/api/_commands.js.map +7 -0
  49. package/dist/modules/documents/api/_shared.js +490 -0
  50. package/dist/modules/documents/api/_shared.js.map +7 -0
  51. package/dist/modules/documents/api/folders/route.js +256 -0
  52. package/dist/modules/documents/api/folders/route.js.map +7 -0
  53. package/dist/modules/documents/api/instantiate/route.js +108 -0
  54. package/dist/modules/documents/api/instantiate/route.js.map +7 -0
  55. package/dist/modules/documents/api/route.js +322 -0
  56. package/dist/modules/documents/api/route.js.map +7 -0
  57. package/dist/modules/documents/api/templates/[templateId]/preview/route.js +94 -0
  58. package/dist/modules/documents/api/templates/[templateId]/preview/route.js.map +7 -0
  59. package/dist/modules/documents/api/templates/[templateId]/route.js +82 -0
  60. package/dist/modules/documents/api/templates/[templateId]/route.js.map +7 -0
  61. package/dist/modules/documents/api/templates/route.js +344 -0
  62. package/dist/modules/documents/api/templates/route.js.map +7 -0
  63. package/dist/modules/documents/backend/documents/DocumentsPageClient.js +160 -0
  64. package/dist/modules/documents/backend/documents/DocumentsPageClient.js.map +7 -0
  65. package/dist/modules/documents/backend/documents/DocumentsTable.js +143 -0
  66. package/dist/modules/documents/backend/documents/DocumentsTable.js.map +7 -0
  67. package/dist/modules/documents/backend/documents/FolderDialog.js +55 -0
  68. package/dist/modules/documents/backend/documents/FolderDialog.js.map +7 -0
  69. package/dist/modules/documents/backend/documents/FolderTree.js +40 -0
  70. package/dist/modules/documents/backend/documents/FolderTree.js.map +7 -0
  71. package/dist/modules/documents/backend/documents/MoveDocumentDialog.js +64 -0
  72. package/dist/modules/documents/backend/documents/MoveDocumentDialog.js.map +7 -0
  73. package/dist/modules/documents/backend/documents/[id]/CommentAnchorNavigation.js +77 -0
  74. package/dist/modules/documents/backend/documents/[id]/CommentAnchorNavigation.js.map +7 -0
  75. package/dist/modules/documents/backend/documents/[id]/CommentComposer.js +126 -0
  76. package/dist/modules/documents/backend/documents/[id]/CommentComposer.js.map +7 -0
  77. package/dist/modules/documents/backend/documents/[id]/CommentThreadList.js +88 -0
  78. package/dist/modules/documents/backend/documents/[id]/CommentThreadList.js.map +7 -0
  79. package/dist/modules/documents/backend/documents/[id]/CommentsRail.js +123 -0
  80. package/dist/modules/documents/backend/documents/[id]/CommentsRail.js.map +7 -0
  81. package/dist/modules/documents/backend/documents/[id]/DocumentCanvas.js +91 -0
  82. package/dist/modules/documents/backend/documents/[id]/DocumentCanvas.js.map +7 -0
  83. package/dist/modules/documents/backend/documents/[id]/DocumentEditorErrorBoundary.js +27 -0
  84. package/dist/modules/documents/backend/documents/[id]/DocumentEditorErrorBoundary.js.map +7 -0
  85. package/dist/modules/documents/backend/documents/[id]/DocumentEditorIsland.js +50 -0
  86. package/dist/modules/documents/backend/documents/[id]/DocumentEditorIsland.js.map +7 -0
  87. package/dist/modules/documents/backend/documents/[id]/DocumentEditorSurface.js +168 -0
  88. package/dist/modules/documents/backend/documents/[id]/DocumentEditorSurface.js.map +7 -0
  89. package/dist/modules/documents/backend/documents/[id]/DocumentNavigator.js +129 -0
  90. package/dist/modules/documents/backend/documents/[id]/DocumentNavigator.js.map +7 -0
  91. package/dist/modules/documents/backend/documents/[id]/DocumentPageClient.js +429 -0
  92. package/dist/modules/documents/backend/documents/[id]/DocumentPageClient.js.map +7 -0
  93. package/dist/modules/documents/backend/documents/[id]/EditorColorTools.js +68 -0
  94. package/dist/modules/documents/backend/documents/[id]/EditorColorTools.js.map +7 -0
  95. package/dist/modules/documents/backend/documents/[id]/EditorStatusPresence.js +69 -0
  96. package/dist/modules/documents/backend/documents/[id]/EditorStatusPresence.js.map +7 -0
  97. package/dist/modules/documents/backend/documents/[id]/EditorToolbar.js +151 -0
  98. package/dist/modules/documents/backend/documents/[id]/EditorToolbar.js.map +7 -0
  99. package/dist/modules/documents/backend/documents/[id]/ExportMenu.js +121 -0
  100. package/dist/modules/documents/backend/documents/[id]/ExportMenu.js.map +7 -0
  101. package/dist/modules/documents/backend/documents/[id]/MentionPicker.js +114 -0
  102. package/dist/modules/documents/backend/documents/[id]/MentionPicker.js.map +7 -0
  103. package/dist/modules/documents/backend/documents/[id]/OutlinePane.js +70 -0
  104. package/dist/modules/documents/backend/documents/[id]/OutlinePane.js.map +7 -0
  105. package/dist/modules/documents/backend/documents/[id]/RecordFieldsDialog.js +157 -0
  106. package/dist/modules/documents/backend/documents/[id]/RecordFieldsDialog.js.map +7 -0
  107. package/dist/modules/documents/backend/documents/[id]/RelatedRecordsPanel.js +266 -0
  108. package/dist/modules/documents/backend/documents/[id]/RelatedRecordsPanel.js.map +7 -0
  109. package/dist/modules/documents/backend/documents/[id]/VersionHistoryPanel.js +227 -0
  110. package/dist/modules/documents/backend/documents/[id]/VersionHistoryPanel.js.map +7 -0
  111. package/dist/modules/documents/backend/documents/[id]/VersionPreviewDialog.js +157 -0
  112. package/dist/modules/documents/backend/documents/[id]/VersionPreviewDialog.js.map +7 -0
  113. package/dist/modules/documents/backend/documents/[id]/commentTypes.js +150 -0
  114. package/dist/modules/documents/backend/documents/[id]/commentTypes.js.map +7 -0
  115. package/dist/modules/documents/backend/documents/[id]/componentCapabilities.js +13 -0
  116. package/dist/modules/documents/backend/documents/[id]/componentCapabilities.js.map +7 -0
  117. package/dist/modules/documents/backend/documents/[id]/documentPagination.js +295 -0
  118. package/dist/modules/documents/backend/documents/[id]/documentPagination.js.map +7 -0
  119. package/dist/modules/documents/backend/documents/[id]/editorPresenceStyles.js +81 -0
  120. package/dist/modules/documents/backend/documents/[id]/editorPresenceStyles.js.map +7 -0
  121. package/dist/modules/documents/backend/documents/[id]/editorTypes.js +52 -0
  122. package/dist/modules/documents/backend/documents/[id]/editorTypes.js.map +7 -0
  123. package/dist/modules/documents/backend/documents/[id]/page.js +10 -0
  124. package/dist/modules/documents/backend/documents/[id]/page.js.map +7 -0
  125. package/dist/modules/documents/backend/documents/[id]/page.meta.js +16 -0
  126. package/dist/modules/documents/backend/documents/[id]/page.meta.js.map +7 -0
  127. package/dist/modules/documents/backend/documents/[id]/relatedRecordModel.js +38 -0
  128. package/dist/modules/documents/backend/documents/[id]/relatedRecordModel.js.map +7 -0
  129. package/dist/modules/documents/backend/documents/[id]/restoreVersion.js +33 -0
  130. package/dist/modules/documents/backend/documents/[id]/restoreVersion.js.map +7 -0
  131. package/dist/modules/documents/backend/documents/[id]/useDocumentCollaboration.js +392 -0
  132. package/dist/modules/documents/backend/documents/[id]/useDocumentCollaboration.js.map +7 -0
  133. package/dist/modules/documents/backend/documents/[id]/useDocumentComments.js +253 -0
  134. package/dist/modules/documents/backend/documents/[id]/useDocumentComments.js.map +7 -0
  135. package/dist/modules/documents/backend/documents/[id]/useDocumentEditor.js +149 -0
  136. package/dist/modules/documents/backend/documents/[id]/useDocumentEditor.js.map +7 -0
  137. package/dist/modules/documents/backend/documents/[id]/useDocumentTitle.js +82 -0
  138. package/dist/modules/documents/backend/documents/[id]/useDocumentTitle.js.map +7 -0
  139. package/dist/modules/documents/backend/documents/[id]/useEditorInsertions.js +144 -0
  140. package/dist/modules/documents/backend/documents/[id]/useEditorInsertions.js.map +7 -0
  141. package/dist/modules/documents/backend/documents/[id]/useFallbackContentPersistence.js +237 -0
  142. package/dist/modules/documents/backend/documents/[id]/useFallbackContentPersistence.js.map +7 -0
  143. package/dist/modules/documents/backend/documents/[id]/useMentionPicker.js +216 -0
  144. package/dist/modules/documents/backend/documents/[id]/useMentionPicker.js.map +7 -0
  145. package/dist/modules/documents/backend/documents/[id]/versionHistoryModel.js +25 -0
  146. package/dist/modules/documents/backend/documents/[id]/versionHistoryModel.js.map +7 -0
  147. package/dist/modules/documents/backend/documents/components/EntityPicker.js +156 -0
  148. package/dist/modules/documents/backend/documents/components/EntityPicker.js.map +7 -0
  149. package/dist/modules/documents/backend/documents/components/EntityPickerResults.js +46 -0
  150. package/dist/modules/documents/backend/documents/components/EntityPickerResults.js.map +7 -0
  151. package/dist/modules/documents/backend/documents/components/NewFromTemplateDialog.js +127 -0
  152. package/dist/modules/documents/backend/documents/components/NewFromTemplateDialog.js.map +7 -0
  153. package/dist/modules/documents/backend/documents/components/PrincipalPicker.js +84 -0
  154. package/dist/modules/documents/backend/documents/components/PrincipalPicker.js.map +7 -0
  155. package/dist/modules/documents/backend/documents/components/ShareDialog.js +77 -0
  156. package/dist/modules/documents/backend/documents/components/ShareDialog.js.map +7 -0
  157. package/dist/modules/documents/backend/documents/components/ShareDialogAddForm.js +93 -0
  158. package/dist/modules/documents/backend/documents/components/ShareDialogAddForm.js.map +7 -0
  159. package/dist/modules/documents/backend/documents/components/ShareDialogList.js +82 -0
  160. package/dist/modules/documents/backend/documents/components/ShareDialogList.js.map +7 -0
  161. package/dist/modules/documents/backend/documents/components/TemplateBodyEditor.js +96 -0
  162. package/dist/modules/documents/backend/documents/components/TemplateBodyEditor.js.map +7 -0
  163. package/dist/modules/documents/backend/documents/components/TemplateEditorDialog.js +169 -0
  164. package/dist/modules/documents/backend/documents/components/TemplateEditorDialog.js.map +7 -0
  165. package/dist/modules/documents/backend/documents/components/TemplatePreview.js +38 -0
  166. package/dist/modules/documents/backend/documents/components/TemplatePreview.js.map +7 -0
  167. package/dist/modules/documents/backend/documents/components/TemplateSlotFields.js +69 -0
  168. package/dist/modules/documents/backend/documents/components/TemplateSlotFields.js.map +7 -0
  169. package/dist/modules/documents/backend/documents/components/TemplateSlotsEditor.js +71 -0
  170. package/dist/modules/documents/backend/documents/components/TemplateSlotsEditor.js.map +7 -0
  171. package/dist/modules/documents/backend/documents/components/principalPickerModel.js +63 -0
  172. package/dist/modules/documents/backend/documents/components/principalPickerModel.js.map +7 -0
  173. package/dist/modules/documents/backend/documents/components/shareDialogModel.js +68 -0
  174. package/dist/modules/documents/backend/documents/components/shareDialogModel.js.map +7 -0
  175. package/dist/modules/documents/backend/documents/components/templateUi.js +89 -0
  176. package/dist/modules/documents/backend/documents/components/templateUi.js.map +7 -0
  177. package/dist/modules/documents/backend/documents/components/useAvailableEntityRegistry.js +30 -0
  178. package/dist/modules/documents/backend/documents/components/useAvailableEntityRegistry.js.map +7 -0
  179. package/dist/modules/documents/backend/documents/components/useEntitySearch.js +191 -0
  180. package/dist/modules/documents/backend/documents/components/useEntitySearch.js.map +7 -0
  181. package/dist/modules/documents/backend/documents/components/usePrincipalPicker.js +221 -0
  182. package/dist/modules/documents/backend/documents/components/usePrincipalPicker.js.map +7 -0
  183. package/dist/modules/documents/backend/documents/components/useShareDialog.js +236 -0
  184. package/dist/modules/documents/backend/documents/components/useShareDialog.js.map +7 -0
  185. package/dist/modules/documents/backend/documents/components/useTemplateDetail.js +49 -0
  186. package/dist/modules/documents/backend/documents/components/useTemplateDetail.js.map +7 -0
  187. package/dist/modules/documents/backend/documents/components/useTemplateInstantiation.js +234 -0
  188. package/dist/modules/documents/backend/documents/components/useTemplateInstantiation.js.map +7 -0
  189. package/dist/modules/documents/backend/documents/documentUi.js +106 -0
  190. package/dist/modules/documents/backend/documents/documentUi.js.map +7 -0
  191. package/dist/modules/documents/backend/documents/documentsListTypes.js +132 -0
  192. package/dist/modules/documents/backend/documents/documentsListTypes.js.map +7 -0
  193. package/dist/modules/documents/backend/documents/page.js +9 -0
  194. package/dist/modules/documents/backend/documents/page.js.map +7 -0
  195. package/dist/modules/documents/backend/documents/page.meta.js +26 -0
  196. package/dist/modules/documents/backend/documents/page.meta.js.map +7 -0
  197. package/dist/modules/documents/backend/documents/templates/TemplatesPageClient.js +91 -0
  198. package/dist/modules/documents/backend/documents/templates/TemplatesPageClient.js.map +7 -0
  199. package/dist/modules/documents/backend/documents/templates/TemplatesTable.js +58 -0
  200. package/dist/modules/documents/backend/documents/templates/TemplatesTable.js.map +7 -0
  201. package/dist/modules/documents/backend/documents/templates/page.js +9 -0
  202. package/dist/modules/documents/backend/documents/templates/page.js.map +7 -0
  203. package/dist/modules/documents/backend/documents/templates/page.meta.js +34 -0
  204. package/dist/modules/documents/backend/documents/templates/page.meta.js.map +7 -0
  205. package/dist/modules/documents/backend/documents/templates/useTemplatesPage.js +139 -0
  206. package/dist/modules/documents/backend/documents/templates/useTemplatesPage.js.map +7 -0
  207. package/dist/modules/documents/backend/documents/useDocumentsList.js +314 -0
  208. package/dist/modules/documents/backend/documents/useDocumentsList.js.map +7 -0
  209. package/dist/modules/documents/ce.js +8 -0
  210. package/dist/modules/documents/ce.js.map +7 -0
  211. package/dist/modules/documents/commands/aggregate.js +99 -0
  212. package/dist/modules/documents/commands/aggregate.js.map +7 -0
  213. package/dist/modules/documents/commands/attachments.js +252 -0
  214. package/dist/modules/documents/commands/attachments.js.map +7 -0
  215. package/dist/modules/documents/commands/comments.js +782 -0
  216. package/dist/modules/documents/commands/comments.js.map +7 -0
  217. package/dist/modules/documents/commands/content.js +238 -0
  218. package/dist/modules/documents/commands/content.js.map +7 -0
  219. package/dist/modules/documents/commands/document-crud.js +505 -0
  220. package/dist/modules/documents/commands/document-crud.js.map +7 -0
  221. package/dist/modules/documents/commands/documents.js +473 -0
  222. package/dist/modules/documents/commands/documents.js.map +7 -0
  223. package/dist/modules/documents/commands/duplicate.js +640 -0
  224. package/dist/modules/documents/commands/duplicate.js.map +7 -0
  225. package/dist/modules/documents/commands/favorites.js +150 -0
  226. package/dist/modules/documents/commands/favorites.js.map +7 -0
  227. package/dist/modules/documents/commands/folders.js +420 -0
  228. package/dist/modules/documents/commands/folders.js.map +7 -0
  229. package/dist/modules/documents/commands/index.js +64 -0
  230. package/dist/modules/documents/commands/index.js.map +7 -0
  231. package/dist/modules/documents/commands/interceptors.js +300 -0
  232. package/dist/modules/documents/commands/interceptors.js.map +7 -0
  233. package/dist/modules/documents/commands/lifecycle.js +249 -0
  234. package/dist/modules/documents/commands/lifecycle.js.map +7 -0
  235. package/dist/modules/documents/commands/links.js +410 -0
  236. package/dist/modules/documents/commands/links.js.map +7 -0
  237. package/dist/modules/documents/commands/mutation-helpers.js +42 -0
  238. package/dist/modules/documents/commands/mutation-helpers.js.map +7 -0
  239. package/dist/modules/documents/commands/projection-types.js +1 -0
  240. package/dist/modules/documents/commands/projection-types.js.map +7 -0
  241. package/dist/modules/documents/commands/shared.js +143 -0
  242. package/dist/modules/documents/commands/shared.js.map +7 -0
  243. package/dist/modules/documents/commands/shares.js +527 -0
  244. package/dist/modules/documents/commands/shares.js.map +7 -0
  245. package/dist/modules/documents/commands/side-effects.js +103 -0
  246. package/dist/modules/documents/commands/side-effects.js.map +7 -0
  247. package/dist/modules/documents/commands/templates.js +461 -0
  248. package/dist/modules/documents/commands/templates.js.map +7 -0
  249. package/dist/modules/documents/commands/versions.js +432 -0
  250. package/dist/modules/documents/commands/versions.js.map +7 -0
  251. package/dist/modules/documents/commands/watchers.js +164 -0
  252. package/dist/modules/documents/commands/watchers.js.map +7 -0
  253. package/dist/modules/documents/data/entities.js +653 -0
  254. package/dist/modules/documents/data/entities.js.map +7 -0
  255. package/dist/modules/documents/data/extensions.js +44 -0
  256. package/dist/modules/documents/data/extensions.js.map +7 -0
  257. package/dist/modules/documents/data/validators.js +219 -0
  258. package/dist/modules/documents/data/validators.js.map +7 -0
  259. package/dist/modules/documents/di.js +35 -0
  260. package/dist/modules/documents/di.js.map +7 -0
  261. package/dist/modules/documents/encryption.js +12 -0
  262. package/dist/modules/documents/encryption.js.map +7 -0
  263. package/dist/modules/documents/events.js +27 -0
  264. package/dist/modules/documents/events.js.map +7 -0
  265. package/dist/modules/documents/index.js +19 -0
  266. package/dist/modules/documents/index.js.map +7 -0
  267. package/dist/modules/documents/lib/attachmentServicePort.js +30 -0
  268. package/dist/modules/documents/lib/attachmentServicePort.js.map +7 -0
  269. package/dist/modules/documents/lib/capabilities.js +32 -0
  270. package/dist/modules/documents/lib/capabilities.js.map +7 -0
  271. package/dist/modules/documents/lib/collabCloseEvents.js +17 -0
  272. package/dist/modules/documents/lib/collabCloseEvents.js.map +7 -0
  273. package/dist/modules/documents/lib/collabEndpoint.js +22 -0
  274. package/dist/modules/documents/lib/collabEndpoint.js.map +7 -0
  275. package/dist/modules/documents/lib/collabMaterializer.js +107 -0
  276. package/dist/modules/documents/lib/collabMaterializer.js.map +7 -0
  277. package/dist/modules/documents/lib/collabToken.js +120 -0
  278. package/dist/modules/documents/lib/collabToken.js.map +7 -0
  279. package/dist/modules/documents/lib/collaborationAwareness.js +68 -0
  280. package/dist/modules/documents/lib/collaborationAwareness.js.map +7 -0
  281. package/dist/modules/documents/lib/commentAnchors.js +15 -0
  282. package/dist/modules/documents/lib/commentAnchors.js.map +7 -0
  283. package/dist/modules/documents/lib/constants.js +25 -0
  284. package/dist/modules/documents/lib/constants.js.map +7 -0
  285. package/dist/modules/documents/lib/contentService.js +248 -0
  286. package/dist/modules/documents/lib/contentService.js.map +7 -0
  287. package/dist/modules/documents/lib/displayLabels.js +23 -0
  288. package/dist/modules/documents/lib/displayLabels.js.map +7 -0
  289. package/dist/modules/documents/lib/docxRenderer.js +601 -0
  290. package/dist/modules/documents/lib/docxRenderer.js.map +7 -0
  291. package/dist/modules/documents/lib/duplicateContent.js +22 -0
  292. package/dist/modules/documents/lib/duplicateContent.js.map +7 -0
  293. package/dist/modules/documents/lib/editorConfig.js +287 -0
  294. package/dist/modules/documents/lib/editorConfig.js.map +7 -0
  295. package/dist/modules/documents/lib/entityLinks.js +148 -0
  296. package/dist/modules/documents/lib/entityLinks.js.map +7 -0
  297. package/dist/modules/documents/lib/entityRegistry.js +258 -0
  298. package/dist/modules/documents/lib/entityRegistry.js.map +7 -0
  299. package/dist/modules/documents/lib/entityRegistry.server.js +189 -0
  300. package/dist/modules/documents/lib/entityRegistry.server.js.map +7 -0
  301. package/dist/modules/documents/lib/entityRegistryAvailability.server.js +9 -0
  302. package/dist/modules/documents/lib/entityRegistryAvailability.server.js.map +7 -0
  303. package/dist/modules/documents/lib/entitySuggestion.js +50 -0
  304. package/dist/modules/documents/lib/entitySuggestion.js.map +7 -0
  305. package/dist/modules/documents/lib/favorites.js +22 -0
  306. package/dist/modules/documents/lib/favorites.js.map +7 -0
  307. package/dist/modules/documents/lib/folderHierarchySerialization.js +19 -0
  308. package/dist/modules/documents/lib/folderHierarchySerialization.js.map +7 -0
  309. package/dist/modules/documents/lib/historyLimits.js +100 -0
  310. package/dist/modules/documents/lib/historyLimits.js.map +7 -0
  311. package/dist/modules/documents/lib/historyPolicy.js +14 -0
  312. package/dist/modules/documents/lib/historyPolicy.js.map +7 -0
  313. package/dist/modules/documents/lib/organizationAccess.js +17 -0
  314. package/dist/modules/documents/lib/organizationAccess.js.map +7 -0
  315. package/dist/modules/documents/lib/pdfHtml.js +62 -0
  316. package/dist/modules/documents/lib/pdfHtml.js.map +7 -0
  317. package/dist/modules/documents/lib/pdfRenderer.js +284 -0
  318. package/dist/modules/documents/lib/pdfRenderer.js.map +7 -0
  319. package/dist/modules/documents/lib/permissions.js +222 -0
  320. package/dist/modules/documents/lib/permissions.js.map +7 -0
  321. package/dist/modules/documents/lib/platformServices.js +35 -0
  322. package/dist/modules/documents/lib/platformServices.js.map +7 -0
  323. package/dist/modules/documents/lib/recordFieldInsertion.js +58 -0
  324. package/dist/modules/documents/lib/recordFieldInsertion.js.map +7 -0
  325. package/dist/modules/documents/lib/requestBody.js +80 -0
  326. package/dist/modules/documents/lib/requestBody.js.map +7 -0
  327. package/dist/modules/documents/lib/resourceLimits.js +62 -0
  328. package/dist/modules/documents/lib/resourceLimits.js.map +7 -0
  329. package/dist/modules/documents/lib/shareCounts.js +25 -0
  330. package/dist/modules/documents/lib/shareCounts.js.map +7 -0
  331. package/dist/modules/documents/lib/templateFill.js +84 -0
  332. package/dist/modules/documents/lib/templateFill.js.map +7 -0
  333. package/dist/modules/documents/lib/templateInstantiation.js +147 -0
  334. package/dist/modules/documents/lib/templateInstantiation.js.map +7 -0
  335. package/dist/modules/documents/lib/templatePreviewDigest.js +82 -0
  336. package/dist/modules/documents/lib/templatePreviewDigest.js.map +7 -0
  337. package/dist/modules/documents/lib/templateSeeds.js +201 -0
  338. package/dist/modules/documents/lib/templateSeeds.js.map +7 -0
  339. package/dist/modules/documents/lib/userLabels.js +37 -0
  340. package/dist/modules/documents/lib/userLabels.js.map +7 -0
  341. package/dist/modules/documents/lib/versionContent.js +131 -0
  342. package/dist/modules/documents/lib/versionContent.js.map +7 -0
  343. package/dist/modules/documents/lib/versionLabels.js +12 -0
  344. package/dist/modules/documents/lib/versionLabels.js.map +7 -0
  345. package/dist/modules/documents/lib/versioning.js +14 -0
  346. package/dist/modules/documents/lib/versioning.js.map +7 -0
  347. package/dist/modules/documents/lib/visibility.js +422 -0
  348. package/dist/modules/documents/lib/visibility.js.map +7 -0
  349. package/dist/modules/documents/lib/watchers.js +106 -0
  350. package/dist/modules/documents/lib/watchers.js.map +7 -0
  351. package/dist/modules/documents/migrations/Migration20260708163836_documents.js +44 -0
  352. package/dist/modules/documents/migrations/Migration20260708163836_documents.js.map +7 -0
  353. package/dist/modules/documents/migrations/Migration20260709164720_documents.js +17 -0
  354. package/dist/modules/documents/migrations/Migration20260709164720_documents.js.map +7 -0
  355. package/dist/modules/documents/migrations/Migration20260710002318_documents.js +32 -0
  356. package/dist/modules/documents/migrations/Migration20260710002318_documents.js.map +7 -0
  357. package/dist/modules/documents/migrations/Migration20260710071003_documents.js +13 -0
  358. package/dist/modules/documents/migrations/Migration20260710071003_documents.js.map +7 -0
  359. package/dist/modules/documents/migrations/Migration20260712120000_documents.js +13 -0
  360. package/dist/modules/documents/migrations/Migration20260712120000_documents.js.map +7 -0
  361. package/dist/modules/documents/migrations/Migration20260712183000_documents.js +14 -0
  362. package/dist/modules/documents/migrations/Migration20260712183000_documents.js.map +7 -0
  363. package/dist/modules/documents/migrations/Migration20260713092156_documents.js +29 -0
  364. package/dist/modules/documents/migrations/Migration20260713092156_documents.js.map +7 -0
  365. package/dist/modules/documents/migrations/Migration20260717000000_documents.js +37 -0
  366. package/dist/modules/documents/migrations/Migration20260717000000_documents.js.map +7 -0
  367. package/dist/modules/documents/notifications.js +47 -0
  368. package/dist/modules/documents/notifications.js.map +7 -0
  369. package/dist/modules/documents/search.js +101 -0
  370. package/dist/modules/documents/search.js.map +7 -0
  371. package/dist/modules/documents/setup.js +19 -0
  372. package/dist/modules/documents/setup.js.map +7 -0
  373. package/dist/modules/documents/widgets/injection/related-documents/LinkDocumentDialog.js +214 -0
  374. package/dist/modules/documents/widgets/injection/related-documents/LinkDocumentDialog.js.map +7 -0
  375. package/dist/modules/documents/widgets/injection/related-documents/context.js +84 -0
  376. package/dist/modules/documents/widgets/injection/related-documents/context.js.map +7 -0
  377. package/dist/modules/documents/widgets/injection/related-documents/useRelatedDocuments.js +98 -0
  378. package/dist/modules/documents/widgets/injection/related-documents/useRelatedDocuments.js.map +7 -0
  379. package/dist/modules/documents/widgets/injection/related-documents/widget.client.js +83 -0
  380. package/dist/modules/documents/widgets/injection/related-documents/widget.client.js.map +7 -0
  381. package/dist/modules/documents/widgets/injection/related-documents/widget.js +19 -0
  382. package/dist/modules/documents/widgets/injection/related-documents/widget.js.map +7 -0
  383. package/dist/modules/documents/widgets/injection-table.js +21 -0
  384. package/dist/modules/documents/widgets/injection-table.js.map +7 -0
  385. package/dist/server/documents-collab-server.js +2260 -0
  386. package/dist/server/documents-collab-server.js.map +7 -0
  387. package/generated/entities/document/index.ts +12 -0
  388. package/generated/entities/document_attachment/index.ts +9 -0
  389. package/generated/entities/document_comment/index.ts +14 -0
  390. package/generated/entities/document_content/index.ts +11 -0
  391. package/generated/entities/document_entity_link/index.ts +19 -0
  392. package/generated/entities/document_favorite/index.ts +7 -0
  393. package/generated/entities/document_folder/index.ts +9 -0
  394. package/generated/entities/document_share/index.ts +11 -0
  395. package/generated/entities/document_template/index.ts +13 -0
  396. package/generated/entities/document_version/index.ts +9 -0
  397. package/generated/entities/document_watcher/index.ts +7 -0
  398. package/generated/entities.ids.generated.ts +21 -0
  399. package/generated/entity-fields-registry.ts +151 -0
  400. package/jest.config.cjs +34 -0
  401. package/package.json +149 -0
  402. package/server/documents-collab-server.ts +3416 -0
  403. package/src/index.ts +1 -0
  404. package/src/modules/documents/acl.ts +11 -0
  405. package/src/modules/documents/api/[id]/archive/route.ts +132 -0
  406. package/src/modules/documents/api/[id]/attachments/[attachmentId]/route.ts +166 -0
  407. package/src/modules/documents/api/[id]/attachments/route.ts +173 -0
  408. package/src/modules/documents/api/[id]/collab-token/route.ts +203 -0
  409. package/src/modules/documents/api/[id]/comments/access-check/route.ts +96 -0
  410. package/src/modules/documents/api/[id]/comments/route.ts +442 -0
  411. package/src/modules/documents/api/[id]/content/route.ts +156 -0
  412. package/src/modules/documents/api/[id]/duplicate/route.ts +231 -0
  413. package/src/modules/documents/api/[id]/export/route.ts +535 -0
  414. package/src/modules/documents/api/[id]/favorite/route.ts +110 -0
  415. package/src/modules/documents/api/[id]/links/[linkId]/route.ts +92 -0
  416. package/src/modules/documents/api/[id]/links/route.ts +301 -0
  417. package/src/modules/documents/api/[id]/principals/route.ts +375 -0
  418. package/src/modules/documents/api/[id]/route.ts +267 -0
  419. package/src/modules/documents/api/[id]/shares/route.ts +372 -0
  420. package/src/modules/documents/api/[id]/unarchive/route.ts +42 -0
  421. package/src/modules/documents/api/[id]/versions/[versionId]/restore/route.ts +152 -0
  422. package/src/modules/documents/api/[id]/versions/[versionId]/route.ts +100 -0
  423. package/src/modules/documents/api/[id]/versions/route.ts +207 -0
  424. package/src/modules/documents/api/[id]/watch/route.ts +111 -0
  425. package/src/modules/documents/api/_commands.ts +53 -0
  426. package/src/modules/documents/api/_shared.ts +676 -0
  427. package/src/modules/documents/api/folders/route.ts +287 -0
  428. package/src/modules/documents/api/instantiate/route.ts +114 -0
  429. package/src/modules/documents/api/route.ts +362 -0
  430. package/src/modules/documents/api/templates/[templateId]/preview/route.ts +97 -0
  431. package/src/modules/documents/api/templates/[templateId]/route.ts +92 -0
  432. package/src/modules/documents/api/templates/route.ts +370 -0
  433. package/src/modules/documents/backend/documents/DocumentsPageClient.tsx +150 -0
  434. package/src/modules/documents/backend/documents/DocumentsTable.tsx +168 -0
  435. package/src/modules/documents/backend/documents/FolderDialog.tsx +62 -0
  436. package/src/modules/documents/backend/documents/FolderTree.tsx +72 -0
  437. package/src/modules/documents/backend/documents/MoveDocumentDialog.tsx +70 -0
  438. package/src/modules/documents/backend/documents/[id]/CommentAnchorNavigation.ts +88 -0
  439. package/src/modules/documents/backend/documents/[id]/CommentComposer.tsx +136 -0
  440. package/src/modules/documents/backend/documents/[id]/CommentThreadList.tsx +131 -0
  441. package/src/modules/documents/backend/documents/[id]/CommentsRail.tsx +138 -0
  442. package/src/modules/documents/backend/documents/[id]/DocumentCanvas.tsx +111 -0
  443. package/src/modules/documents/backend/documents/[id]/DocumentEditorErrorBoundary.tsx +39 -0
  444. package/src/modules/documents/backend/documents/[id]/DocumentEditorIsland.tsx +50 -0
  445. package/src/modules/documents/backend/documents/[id]/DocumentEditorSurface.tsx +162 -0
  446. package/src/modules/documents/backend/documents/[id]/DocumentNavigator.tsx +129 -0
  447. package/src/modules/documents/backend/documents/[id]/DocumentPageClient.tsx +463 -0
  448. package/src/modules/documents/backend/documents/[id]/EditorColorTools.tsx +71 -0
  449. package/src/modules/documents/backend/documents/[id]/EditorStatusPresence.tsx +78 -0
  450. package/src/modules/documents/backend/documents/[id]/EditorToolbar.tsx +108 -0
  451. package/src/modules/documents/backend/documents/[id]/ExportMenu.tsx +144 -0
  452. package/src/modules/documents/backend/documents/[id]/MentionPicker.tsx +137 -0
  453. package/src/modules/documents/backend/documents/[id]/OutlinePane.tsx +98 -0
  454. package/src/modules/documents/backend/documents/[id]/RecordFieldsDialog.tsx +185 -0
  455. package/src/modules/documents/backend/documents/[id]/RelatedRecordsPanel.tsx +320 -0
  456. package/src/modules/documents/backend/documents/[id]/VersionHistoryPanel.tsx +244 -0
  457. package/src/modules/documents/backend/documents/[id]/VersionPreviewDialog.tsx +197 -0
  458. package/src/modules/documents/backend/documents/[id]/commentTypes.ts +192 -0
  459. package/src/modules/documents/backend/documents/[id]/componentCapabilities.ts +17 -0
  460. package/src/modules/documents/backend/documents/[id]/documentPagination.ts +352 -0
  461. package/src/modules/documents/backend/documents/[id]/editorPresenceStyles.ts +77 -0
  462. package/src/modules/documents/backend/documents/[id]/editorTypes.ts +84 -0
  463. package/src/modules/documents/backend/documents/[id]/page.meta.ts +12 -0
  464. package/src/modules/documents/backend/documents/[id]/page.tsx +6 -0
  465. package/src/modules/documents/backend/documents/[id]/relatedRecordModel.ts +49 -0
  466. package/src/modules/documents/backend/documents/[id]/restoreVersion.ts +49 -0
  467. package/src/modules/documents/backend/documents/[id]/useDocumentCollaboration.ts +458 -0
  468. package/src/modules/documents/backend/documents/[id]/useDocumentComments.ts +286 -0
  469. package/src/modules/documents/backend/documents/[id]/useDocumentEditor.ts +157 -0
  470. package/src/modules/documents/backend/documents/[id]/useDocumentTitle.ts +77 -0
  471. package/src/modules/documents/backend/documents/[id]/useEditorInsertions.ts +147 -0
  472. package/src/modules/documents/backend/documents/[id]/useFallbackContentPersistence.ts +277 -0
  473. package/src/modules/documents/backend/documents/[id]/useMentionPicker.ts +259 -0
  474. package/src/modules/documents/backend/documents/[id]/versionHistoryModel.ts +29 -0
  475. package/src/modules/documents/backend/documents/components/EntityPicker.tsx +171 -0
  476. package/src/modules/documents/backend/documents/components/EntityPickerResults.tsx +64 -0
  477. package/src/modules/documents/backend/documents/components/NewFromTemplateDialog.tsx +136 -0
  478. package/src/modules/documents/backend/documents/components/PrincipalPicker.tsx +90 -0
  479. package/src/modules/documents/backend/documents/components/ShareDialog.tsx +88 -0
  480. package/src/modules/documents/backend/documents/components/ShareDialogAddForm.tsx +113 -0
  481. package/src/modules/documents/backend/documents/components/ShareDialogList.tsx +117 -0
  482. package/src/modules/documents/backend/documents/components/TemplateBodyEditor.tsx +96 -0
  483. package/src/modules/documents/backend/documents/components/TemplateEditorDialog.tsx +171 -0
  484. package/src/modules/documents/backend/documents/components/TemplatePreview.tsx +43 -0
  485. package/src/modules/documents/backend/documents/components/TemplateSlotFields.tsx +72 -0
  486. package/src/modules/documents/backend/documents/components/TemplateSlotsEditor.tsx +72 -0
  487. package/src/modules/documents/backend/documents/components/principalPickerModel.ts +86 -0
  488. package/src/modules/documents/backend/documents/components/shareDialogModel.ts +94 -0
  489. package/src/modules/documents/backend/documents/components/templateUi.ts +128 -0
  490. package/src/modules/documents/backend/documents/components/useAvailableEntityRegistry.ts +43 -0
  491. package/src/modules/documents/backend/documents/components/useEntitySearch.ts +197 -0
  492. package/src/modules/documents/backend/documents/components/usePrincipalPicker.ts +165 -0
  493. package/src/modules/documents/backend/documents/components/useShareDialog.ts +267 -0
  494. package/src/modules/documents/backend/documents/components/useTemplateDetail.ts +54 -0
  495. package/src/modules/documents/backend/documents/components/useTemplateInstantiation.ts +252 -0
  496. package/src/modules/documents/backend/documents/documentUi.ts +134 -0
  497. package/src/modules/documents/backend/documents/documentsListTypes.ts +163 -0
  498. package/src/modules/documents/backend/documents/page.meta.ts +24 -0
  499. package/src/modules/documents/backend/documents/page.tsx +5 -0
  500. package/src/modules/documents/backend/documents/templates/TemplatesPageClient.tsx +93 -0
  501. package/src/modules/documents/backend/documents/templates/TemplatesTable.tsx +71 -0
  502. package/src/modules/documents/backend/documents/templates/page.meta.ts +32 -0
  503. package/src/modules/documents/backend/documents/templates/page.tsx +5 -0
  504. package/src/modules/documents/backend/documents/templates/useTemplatesPage.tsx +148 -0
  505. package/src/modules/documents/backend/documents/useDocumentsList.tsx +305 -0
  506. package/src/modules/documents/ce.ts +6 -0
  507. package/src/modules/documents/commands/aggregate.ts +128 -0
  508. package/src/modules/documents/commands/attachments.ts +309 -0
  509. package/src/modules/documents/commands/comments.ts +966 -0
  510. package/src/modules/documents/commands/content.ts +294 -0
  511. package/src/modules/documents/commands/document-crud.ts +609 -0
  512. package/src/modules/documents/commands/documents.ts +581 -0
  513. package/src/modules/documents/commands/duplicate.ts +772 -0
  514. package/src/modules/documents/commands/favorites.ts +171 -0
  515. package/src/modules/documents/commands/folders.ts +506 -0
  516. package/src/modules/documents/commands/index.ts +33 -0
  517. package/src/modules/documents/commands/interceptors.ts +402 -0
  518. package/src/modules/documents/commands/lifecycle.ts +333 -0
  519. package/src/modules/documents/commands/links.ts +486 -0
  520. package/src/modules/documents/commands/mutation-helpers.ts +48 -0
  521. package/src/modules/documents/commands/projection-types.ts +77 -0
  522. package/src/modules/documents/commands/shared.ts +219 -0
  523. package/src/modules/documents/commands/shares.ts +612 -0
  524. package/src/modules/documents/commands/side-effects.ts +130 -0
  525. package/src/modules/documents/commands/templates.ts +522 -0
  526. package/src/modules/documents/commands/versions.ts +537 -0
  527. package/src/modules/documents/commands/watchers.ts +181 -0
  528. package/src/modules/documents/data/entities.ts +631 -0
  529. package/src/modules/documents/data/extensions.ts +42 -0
  530. package/src/modules/documents/data/validators.ts +248 -0
  531. package/src/modules/documents/di.ts +33 -0
  532. package/src/modules/documents/encryption.ts +14 -0
  533. package/src/modules/documents/events.ts +23 -0
  534. package/src/modules/documents/i18n/.hardcoded-allowlist.json +9 -0
  535. package/src/modules/documents/i18n/de.json +522 -0
  536. package/src/modules/documents/i18n/en.json +522 -0
  537. package/src/modules/documents/i18n/es.json +522 -0
  538. package/src/modules/documents/i18n/ko.json +522 -0
  539. package/src/modules/documents/i18n/pl.json +522 -0
  540. package/src/modules/documents/index.ts +17 -0
  541. package/src/modules/documents/lib/attachmentServicePort.ts +94 -0
  542. package/src/modules/documents/lib/capabilities.ts +57 -0
  543. package/src/modules/documents/lib/collabCloseEvents.ts +26 -0
  544. package/src/modules/documents/lib/collabEndpoint.ts +43 -0
  545. package/src/modules/documents/lib/collabMaterializer.ts +140 -0
  546. package/src/modules/documents/lib/collabToken.ts +170 -0
  547. package/src/modules/documents/lib/collaborationAwareness.ts +102 -0
  548. package/src/modules/documents/lib/commentAnchors.ts +19 -0
  549. package/src/modules/documents/lib/constants.ts +39 -0
  550. package/src/modules/documents/lib/contentService.ts +340 -0
  551. package/src/modules/documents/lib/displayLabels.ts +31 -0
  552. package/src/modules/documents/lib/docxRenderer.ts +685 -0
  553. package/src/modules/documents/lib/duplicateContent.ts +32 -0
  554. package/src/modules/documents/lib/editorConfig.ts +371 -0
  555. package/src/modules/documents/lib/entityLinks.ts +250 -0
  556. package/src/modules/documents/lib/entityRegistry.server.ts +267 -0
  557. package/src/modules/documents/lib/entityRegistry.ts +345 -0
  558. package/src/modules/documents/lib/entityRegistryAvailability.server.ts +19 -0
  559. package/src/modules/documents/lib/entitySuggestion.ts +61 -0
  560. package/src/modules/documents/lib/favorites.ts +35 -0
  561. package/src/modules/documents/lib/folderHierarchySerialization.ts +34 -0
  562. package/src/modules/documents/lib/historyLimits.ts +154 -0
  563. package/src/modules/documents/lib/historyPolicy.ts +7 -0
  564. package/src/modules/documents/lib/organizationAccess.ts +44 -0
  565. package/src/modules/documents/lib/pdfHtml.ts +65 -0
  566. package/src/modules/documents/lib/pdfRenderer.ts +367 -0
  567. package/src/modules/documents/lib/permissions.ts +299 -0
  568. package/src/modules/documents/lib/platformServices.ts +70 -0
  569. package/src/modules/documents/lib/recordFieldInsertion.ts +72 -0
  570. package/src/modules/documents/lib/requestBody.ts +97 -0
  571. package/src/modules/documents/lib/resourceLimits.ts +94 -0
  572. package/src/modules/documents/lib/shareCounts.ts +44 -0
  573. package/src/modules/documents/lib/templateFill.ts +138 -0
  574. package/src/modules/documents/lib/templateInstantiation.ts +206 -0
  575. package/src/modules/documents/lib/templatePreviewDigest.ts +122 -0
  576. package/src/modules/documents/lib/templateSeeds.ts +248 -0
  577. package/src/modules/documents/lib/userLabels.ts +58 -0
  578. package/src/modules/documents/lib/versionContent.ts +163 -0
  579. package/src/modules/documents/lib/versionLabels.ts +9 -0
  580. package/src/modules/documents/lib/versioning.ts +29 -0
  581. package/src/modules/documents/lib/visibility.ts +610 -0
  582. package/src/modules/documents/lib/watchers.ts +129 -0
  583. package/src/modules/documents/migrations/.snapshot-open-mercato.json +2892 -0
  584. package/src/modules/documents/migrations/Migration20260708163836_documents.ts +50 -0
  585. package/src/modules/documents/migrations/Migration20260709164720_documents.ts +19 -0
  586. package/src/modules/documents/migrations/Migration20260710002318_documents.ts +35 -0
  587. package/src/modules/documents/migrations/Migration20260710071003_documents.ts +13 -0
  588. package/src/modules/documents/migrations/Migration20260712120000_documents.ts +13 -0
  589. package/src/modules/documents/migrations/Migration20260712183000_documents.ts +12 -0
  590. package/src/modules/documents/migrations/Migration20260713092156_documents.ts +43 -0
  591. package/src/modules/documents/migrations/Migration20260717000000_documents.ts +40 -0
  592. package/src/modules/documents/notifications.ts +45 -0
  593. package/src/modules/documents/search.ts +118 -0
  594. package/src/modules/documents/setup.ts +19 -0
  595. package/src/modules/documents/widgets/injection/related-documents/LinkDocumentDialog.tsx +224 -0
  596. package/src/modules/documents/widgets/injection/related-documents/context.ts +101 -0
  597. package/src/modules/documents/widgets/injection/related-documents/useRelatedDocuments.ts +112 -0
  598. package/src/modules/documents/widgets/injection/related-documents/widget.client.tsx +76 -0
  599. package/src/modules/documents/widgets/injection/related-documents/widget.ts +19 -0
  600. package/src/modules/documents/widgets/injection-table.ts +20 -0
  601. package/tsconfig.json +9 -0
  602. package/watch.mjs +6 -0
@@ -0,0 +1,581 @@
1
+ import { LockMode } from '@mikro-orm/core'
2
+ import type { EntityManager } from '@mikro-orm/postgresql'
3
+ import { z } from 'zod'
4
+ import { registerCommand, type CommandHandler } from '@open-mercato/shared/lib/commands'
5
+ import { withAtomicFlush } from '@open-mercato/shared/lib/commands/flush'
6
+ import { extractUndoPayload } from '@open-mercato/shared/lib/commands/undo'
7
+ import { findOneWithDecryption, findWithDecryption } from '@open-mercato/shared/lib/encryption/find'
8
+ import { CrudHttpError } from '@open-mercato/shared/lib/crud/errors'
9
+ import {
10
+ assertOptimisticLock,
11
+ buildOptimisticLockConflictBody,
12
+ } from '@open-mercato/shared/lib/crud/optimistic-lock-command'
13
+ import { resolveTranslations } from '@open-mercato/shared/lib/i18n/server'
14
+ import {
15
+ Document,
16
+ DocumentContent,
17
+ DocumentEntityLink,
18
+ DocumentFolder,
19
+ DocumentTemplate,
20
+ } from '../data/entities'
21
+ import { documentTemplateInstantiateSchema } from '../data/validators'
22
+ import { DOCUMENTS_ENTITY_IDS } from '../lib/constants'
23
+ import {
24
+ advanceDocumentCollaborationGeneration,
25
+ mutateDocumentContentState,
26
+ } from '../lib/contentService'
27
+ import {
28
+ buildDocumentEntityLinkTarget,
29
+ createDocumentEntityLinkData,
30
+ } from '../lib/entityLinks'
31
+ import { getEntityRegistryEntry } from '../lib/entityRegistry'
32
+ import { isDocumentEntityRegistryModuleEnabled } from '../lib/entityRegistryAvailability.server'
33
+ import { dedupeTemplateLinkSlots, prepareTemplateRender } from '../lib/templateInstantiation'
34
+ import { assertNoPostCreateDocumentDependents } from './aggregate'
35
+ import {
36
+ bufferDocumentMutationSideEffects,
37
+ bufferLinkMutationSideEffects,
38
+ } from './side-effects'
39
+ import {
40
+ assertCommandFeature,
41
+ assertDocumentCommandCanEdit,
42
+ resolveDocumentsCommandActor,
43
+ resolveDocumentsCommandEntityManager,
44
+ resolveDocumentsCommandFeatures,
45
+ resolveDocumentsCommandScope,
46
+ } from './shared'
47
+ import { nextDocumentVersion } from './mutation-helpers'
48
+
49
+ export const instantiateDocumentCommandSchema = documentTemplateInstantiateSchema.extend({
50
+ tenantId: z.string().uuid(),
51
+ organizationId: z.string().uuid(),
52
+ documentId: z.string().uuid(),
53
+ contentId: z.string().uuid(),
54
+ linkIds: z.array(z.string().uuid()).max(20),
55
+ createdByUserId: z.string().uuid(),
56
+ }).superRefine((input, context) => {
57
+ if (input.linkIds.length !== dedupeTemplateLinkSlots(input.slots).length) {
58
+ context.addIssue({ code: 'custom', message: 'documents.templates.linkIdentityMismatch' })
59
+ }
60
+ })
61
+
62
+ export type InstantiateDocumentCommandInput = z.infer<typeof instantiateDocumentCommandSchema>
63
+
64
+ type InstantiateSnapshot = {
65
+ documentId: string
66
+ contentId: string
67
+ linkIds: string[]
68
+ documentDeletedAt: string | null
69
+ contentDeletedAt: string | null
70
+ documentUpdatedAt: string | null
71
+ contentUpdatedAt: string | null
72
+ links: Array<{ id: string; deletedAt: string | null; updatedAt: string | null }>
73
+ }
74
+
75
+ type InstantiateUndoPayload = {
76
+ before?: InstantiateSnapshot | null
77
+ after?: InstantiateSnapshot | null
78
+ }
79
+
80
+ async function loadTemplate(
81
+ em: EntityManager,
82
+ input: InstantiateDocumentCommandInput,
83
+ ): Promise<DocumentTemplate> {
84
+ const template = await findOneWithDecryption(
85
+ em,
86
+ DocumentTemplate,
87
+ {
88
+ id: input.templateId,
89
+ tenantId: input.tenantId,
90
+ organizationId: input.organizationId,
91
+ deletedAt: null,
92
+ isActive: true,
93
+ },
94
+ undefined,
95
+ { tenantId: input.tenantId, organizationId: input.organizationId },
96
+ )
97
+ if (!template) throw new CrudHttpError(404, { error: 'documents.templates.notFound' })
98
+ return template
99
+ }
100
+
101
+ async function lockAndValidateTemplateRevision(
102
+ em: EntityManager,
103
+ input: InstantiateDocumentCommandInput,
104
+ ): Promise<DocumentTemplate> {
105
+ const template = await findOneWithDecryption(
106
+ em,
107
+ DocumentTemplate,
108
+ {
109
+ id: input.templateId,
110
+ tenantId: input.tenantId,
111
+ organizationId: input.organizationId,
112
+ deletedAt: null,
113
+ isActive: true,
114
+ },
115
+ { lockMode: LockMode.PESSIMISTIC_READ },
116
+ { tenantId: input.tenantId, organizationId: input.organizationId },
117
+ )
118
+ const submittedRevision = new Date(input.templateUpdatedAt)
119
+ if (
120
+ !template
121
+ || Number.isNaN(submittedRevision.getTime())
122
+ || submittedRevision.toISOString() !== template.updatedAt.toISOString()
123
+ ) {
124
+ throw new CrudHttpError(409, { error: 'documents.templates.staleTemplate' })
125
+ }
126
+ return template
127
+ }
128
+
129
+ async function assertWritableFolder(
130
+ em: EntityManager,
131
+ input: InstantiateDocumentCommandInput,
132
+ features: readonly string[],
133
+ actorUserId: string,
134
+ lock = false,
135
+ ): Promise<void> {
136
+ if (!input.folderId) return
137
+ const folder = await findOneWithDecryption(
138
+ em,
139
+ DocumentFolder,
140
+ {
141
+ id: input.folderId,
142
+ tenantId: input.tenantId,
143
+ organizationId: input.organizationId,
144
+ deletedAt: null,
145
+ },
146
+ lock ? { lockMode: LockMode.PESSIMISTIC_READ } : undefined,
147
+ { tenantId: input.tenantId, organizationId: input.organizationId },
148
+ )
149
+ if (!folder) throw new CrudHttpError(404, { error: 'documents.folders.notFound' })
150
+ if (folder.ownerUserId !== actorUserId) assertCommandFeature(features, 'documents.manage')
151
+ }
152
+
153
+ async function loadAggregate(
154
+ em: EntityManager,
155
+ input: InstantiateDocumentCommandInput,
156
+ lock = false,
157
+ afterDocumentLock?: () => Promise<void>,
158
+ ): Promise<{
159
+ document: Document | null
160
+ content: DocumentContent | null
161
+ linksById: Map<string, DocumentEntityLink>
162
+ }> {
163
+ const scope = { tenantId: input.tenantId, organizationId: input.organizationId }
164
+ const options = lock
165
+ ? { filters: false, lockMode: LockMode.PESSIMISTIC_WRITE } as const
166
+ : { filters: false } as const
167
+ if (lock) {
168
+ // Keep lock acquisition deterministic on the transaction's single
169
+ // connection. This also aligns every undo with collab writes, which lock
170
+ // DocumentContent after resolving the parent document.
171
+ const document = await findOneWithDecryption(
172
+ em,
173
+ Document,
174
+ { id: input.documentId, ...scope },
175
+ options,
176
+ scope,
177
+ )
178
+ if (afterDocumentLock) await afterDocumentLock()
179
+ const content = await findOneWithDecryption(
180
+ em,
181
+ DocumentContent,
182
+ { documentId: input.documentId, ...scope },
183
+ options,
184
+ scope,
185
+ )
186
+ // The instantiated document did not exist before this command, so every
187
+ // link currently attached to it belongs to the aggregate. Loading only the
188
+ // original linkIds would miss a link added after creation and let undo
189
+ // delete the document while leaving that concurrent relation behind.
190
+ const links = await findWithDecryption(
191
+ em,
192
+ DocumentEntityLink,
193
+ { documentId: input.documentId, ...scope },
194
+ options,
195
+ scope,
196
+ )
197
+ return { document, content, linksById: new Map(links.map((link) => [link.id, link])) }
198
+ }
199
+ const [document, content, links] = await Promise.all([
200
+ findOneWithDecryption(
201
+ em,
202
+ Document,
203
+ { id: input.documentId, ...scope },
204
+ options,
205
+ scope,
206
+ ),
207
+ findOneWithDecryption(
208
+ em,
209
+ DocumentContent,
210
+ { documentId: input.documentId, ...scope },
211
+ options,
212
+ scope,
213
+ ),
214
+ findWithDecryption(
215
+ em,
216
+ DocumentEntityLink,
217
+ { documentId: input.documentId, ...scope },
218
+ options,
219
+ scope,
220
+ ),
221
+ ])
222
+ return { document, content, linksById: new Map(links.map((link) => [link.id, link])) }
223
+ }
224
+
225
+ function snapshotAggregate(
226
+ input: InstantiateDocumentCommandInput,
227
+ aggregate: {
228
+ document: Document | null
229
+ content: DocumentContent | null
230
+ linksById: Map<string, DocumentEntityLink>
231
+ },
232
+ ): InstantiateSnapshot {
233
+ return {
234
+ documentId: input.documentId,
235
+ contentId: aggregate.content?.id ?? input.contentId,
236
+ linkIds: [...input.linkIds],
237
+ documentDeletedAt: aggregate.document?.deletedAt?.toISOString() ?? null,
238
+ contentDeletedAt: aggregate.content?.deletedAt?.toISOString() ?? null,
239
+ documentUpdatedAt: aggregate.document?.updatedAt?.toISOString() ?? null,
240
+ contentUpdatedAt: aggregate.content?.updatedAt?.toISOString() ?? null,
241
+ links: input.linkIds.map((id) => {
242
+ const link = aggregate.linksById.get(id)
243
+ return {
244
+ id,
245
+ deletedAt: link?.deletedAt?.toISOString() ?? null,
246
+ updatedAt: link?.updatedAt?.toISOString() ?? null,
247
+ }
248
+ }),
249
+ }
250
+ }
251
+
252
+ function assertInstantiateEntityUnchanged(
253
+ entity: { updatedAt: Date; deletedAt?: Date | null } | null,
254
+ expected: { updatedAt: string | null; deletedAt: string | null },
255
+ resourceKind: string,
256
+ resourceId: string,
257
+ ): void {
258
+ if (!entity || !expected.updatedAt) {
259
+ throw new CrudHttpError(409, { error: 'Record changed by another user' })
260
+ }
261
+ assertOptimisticLock({
262
+ resourceKind,
263
+ resourceId,
264
+ current: entity.updatedAt,
265
+ expected: expected.updatedAt,
266
+ envValue: 'all',
267
+ })
268
+ const deletedAt = entity.deletedAt?.toISOString() ?? null
269
+ if (deletedAt !== expected.deletedAt) {
270
+ throw new CrudHttpError(409, buildOptimisticLockConflictBody(
271
+ entity.updatedAt.toISOString(),
272
+ expected.updatedAt,
273
+ ))
274
+ }
275
+ }
276
+
277
+ function assertInstantiateSlotFeatures(
278
+ slots: readonly Pick<InstantiateDocumentCommandInput['slots'][number], 'entityType'>[],
279
+ features: readonly string[],
280
+ ): void {
281
+ for (const slot of slots) {
282
+ const registryEntry = getEntityRegistryEntry(slot.entityType)
283
+ if (!registryEntry) {
284
+ throw new CrudHttpError(400, { error: 'documents.links.invalidEntityType' })
285
+ }
286
+ if (!isDocumentEntityRegistryModuleEnabled(registryEntry)) {
287
+ throw new CrudHttpError(403, { error: 'Forbidden' })
288
+ }
289
+ assertCommandFeature(features, registryEntry.requiredFeature)
290
+ }
291
+ }
292
+
293
+ type InstantiateDocumentCommandResult = {
294
+ id: string
295
+ updatedAt: string
296
+ links: Array<{ id: string; entityType: string; label: string; href: string }>
297
+ before: InstantiateSnapshot
298
+ after: InstantiateSnapshot
299
+ }
300
+
301
+ const instantiateDocumentCommand: CommandHandler<
302
+ InstantiateDocumentCommandInput,
303
+ InstantiateDocumentCommandResult
304
+ > = {
305
+ id: 'documents.document.instantiate',
306
+ async execute(rawInput, ctx) {
307
+ const input = instantiateDocumentCommandSchema.parse(rawInput)
308
+ const scope = resolveDocumentsCommandScope(ctx, input)
309
+ const requestEm = ctx.container.resolve('em') as EntityManager
310
+ const actorUserId = resolveDocumentsCommandActor(ctx)
311
+ if (actorUserId !== input.createdByUserId) {
312
+ throw new CrudHttpError(403, { error: 'Forbidden' })
313
+ }
314
+ const previewFeatures = await resolveDocumentsCommandFeatures(ctx, scope)
315
+ assertCommandFeature(previewFeatures, 'documents.create')
316
+ assertCommandFeature(previewFeatures, 'documents.edit')
317
+ await assertWritableFolder(requestEm, input, previewFeatures, actorUserId)
318
+ const template = await loadTemplate(requestEm, input)
319
+ const sourceRequest = ctx.request
320
+ if (!sourceRequest) throw new Error('[internal] template instantiation requires the source request')
321
+ // The authoritative render performs up to 20 loopback HTTP verifications,
322
+ // so it must complete before the transaction acquires aggregate locks. It
323
+ // enforces the preview-digest CAS against caller-controlled values, and
324
+ // the in-transaction revalidation below pins its inputs at commit: the
325
+ // locked template revision check rejects any template edited after this
326
+ // render (monotonic versions), and slot features plus module availability
327
+ // are re-asserted against a fresh post-lock ACL.
328
+ const prepared = await prepareTemplateRender({
329
+ request: sourceRequest,
330
+ template,
331
+ title: input.title,
332
+ locale: input.locale,
333
+ effectiveDate: input.effectiveDate,
334
+ templateUpdatedAt: input.templateUpdatedAt,
335
+ slots: input.slots,
336
+ userFeatures: previewFeatures,
337
+ expectedDigest: input.previewDigest,
338
+ rejectUnresolved: true,
339
+ })
340
+ const uniqueLinkSlots = dedupeTemplateLinkSlots(prepared.verifiedSlots)
341
+ const em = resolveDocumentsCommandEntityManager(ctx)
342
+ let aggregate!: Awaited<ReturnType<typeof loadAggregate>>
343
+ let document: Document | null = null
344
+ let content: DocumentContent | null = null
345
+ const links: DocumentEntityLink[] = []
346
+ let before!: InstantiateSnapshot
347
+ let after!: InstantiateSnapshot
348
+
349
+ await withAtomicFlush(em, [
350
+ async () => {
351
+ await lockAndValidateTemplateRevision(em, input)
352
+ aggregate = await loadAggregate(em, input, true)
353
+ const features = await resolveDocumentsCommandFeatures(ctx, scope)
354
+ assertCommandFeature(features, 'documents.create')
355
+ assertCommandFeature(features, 'documents.edit')
356
+ assertInstantiateSlotFeatures(uniqueLinkSlots, features)
357
+ before = snapshotAggregate(input, aggregate)
358
+ if (
359
+ (aggregate.document && !aggregate.document.deletedAt)
360
+ || (aggregate.content && !aggregate.content.deletedAt)
361
+ || Array.from(aggregate.linksById.values()).some((link) => (
362
+ !input.linkIds.includes(link.id) || !link.deletedAt
363
+ ))
364
+ ) {
365
+ throw new CrudHttpError(409, { error: 'Record changed by another user' })
366
+ }
367
+ await assertWritableFolder(em, input, features, actorUserId, true)
368
+ document = aggregate.document
369
+ if (!document) {
370
+ document = em.create(Document, {
371
+ id: input.documentId,
372
+ tenantId: scope.tenantId,
373
+ organizationId: scope.organizationId,
374
+ title: input.title,
375
+ folderId: input.folderId ?? null,
376
+ ownerUserId: input.createdByUserId,
377
+ createdByUserId: input.createdByUserId,
378
+ isActive: true,
379
+ })
380
+ em.persist(document)
381
+ } else {
382
+ document.title = input.title
383
+ document.folderId = input.folderId ?? null
384
+ document.ownerUserId = input.createdByUserId
385
+ document.createdByUserId = input.createdByUserId
386
+ document.isActive = true
387
+ document.deletedAt = null
388
+ document.updatedAt = nextDocumentVersion(document.updatedAt)
389
+ }
390
+ },
391
+ async () => {
392
+ if (aggregate.content) {
393
+ advanceDocumentCollaborationGeneration(aggregate.content)
394
+ }
395
+ content = await mutateDocumentContentState(
396
+ em,
397
+ input.documentId,
398
+ scope,
399
+ {
400
+ yjsState: prepared.content.yjsState,
401
+ contentHtml: prepared.content.html,
402
+ contentText: prepared.content.text,
403
+ },
404
+ { id: input.contentId, existingContent: aggregate.content },
405
+ )
406
+ aggregate.content = content
407
+ },
408
+ () => {
409
+ for (const [index, slot] of uniqueLinkSlots.entries()) {
410
+ const linkId = input.linkIds[index]!
411
+ let link = aggregate.linksById.get(linkId) ?? null
412
+ if (!link) {
413
+ link = em.create(DocumentEntityLink, createDocumentEntityLinkData({
414
+ id: linkId,
415
+ documentId: input.documentId,
416
+ scope,
417
+ actorUserId: input.createdByUserId,
418
+ link: {
419
+ entityType: slot.entityType,
420
+ entityId: slot.entityId,
421
+ label: slot.label,
422
+ href: slot.href,
423
+ source: 'template',
424
+ },
425
+ }))
426
+ em.persist(link)
427
+ aggregate.linksById.set(linkId, link)
428
+ }
429
+ Object.assign(link, buildDocumentEntityLinkTarget(slot.entityType, slot.entityId))
430
+ link.labelSnapshot = slot.label
431
+ link.hrefSnapshot = slot.href
432
+ link.source = 'template'
433
+ link.createdByUserId = input.createdByUserId
434
+ link.deletedAt = null
435
+ link.updatedAt = nextDocumentVersion(link.updatedAt)
436
+ links.push(link)
437
+ }
438
+ },
439
+ () => {
440
+ if (!document || !content) {
441
+ throw new Error('[internal] document instantiation did not produce an aggregate')
442
+ }
443
+ aggregate.document = document
444
+ aggregate.content = content
445
+ after = snapshotAggregate(input, aggregate)
446
+ },
447
+ ], { transaction: true, label: 'documents.document.instantiate' })
448
+
449
+ const finalDocument = document as Document | null
450
+ if (!finalDocument) throw new Error('[internal] document instantiation did not produce a document')
451
+ await bufferDocumentMutationSideEffects(ctx, 'created', finalDocument)
452
+ await Promise.all(links.map((link, index) => bufferLinkMutationSideEffects(
453
+ ctx,
454
+ 'created',
455
+ link,
456
+ {
457
+ entityType: uniqueLinkSlots[index]!.entityType,
458
+ entityId: uniqueLinkSlots[index]!.entityId,
459
+ },
460
+ )))
461
+
462
+ return {
463
+ id: input.documentId,
464
+ updatedAt: finalDocument.updatedAt.toISOString(),
465
+ links: links.map((link, index) => ({
466
+ id: link.id,
467
+ entityType: uniqueLinkSlots[index]!.entityType,
468
+ label: link.labelSnapshot,
469
+ href: link.hrefSnapshot,
470
+ })),
471
+ before,
472
+ after,
473
+ }
474
+ },
475
+ async buildLog({ input, result }) {
476
+ const { translate } = await resolveTranslations()
477
+ return {
478
+ actionLabel: translate('documents.audit.documentInstantiated', 'Create document from template'),
479
+ resourceKind: DOCUMENTS_ENTITY_IDS.document,
480
+ resourceId: result.id,
481
+ tenantId: input.tenantId,
482
+ organizationId: input.organizationId,
483
+ snapshotBefore: result.before,
484
+ snapshotAfter: result.after,
485
+ payload: {
486
+ undo: {
487
+ before: result.before,
488
+ after: result.after,
489
+ } satisfies InstantiateUndoPayload,
490
+ },
491
+ }
492
+ },
493
+ async undo({ logEntry, ctx }) {
494
+ const after = extractUndoPayload<InstantiateUndoPayload>(logEntry)?.after
495
+ if (!after) return
496
+ const redoInput = logEntry.commandPayload && typeof logEntry.commandPayload === 'object'
497
+ ? (logEntry.commandPayload as { __redoInput?: unknown }).__redoInput
498
+ : null
499
+ const input = instantiateDocumentCommandSchema.parse(redoInput)
500
+ const em = resolveDocumentsCommandEntityManager(ctx)
501
+ const scope = resolveDocumentsCommandScope(ctx, input)
502
+ let deletedLinks: DocumentEntityLink[] = []
503
+ let deletedDocument: Document | null = null
504
+ await withAtomicFlush(em, [async () => {
505
+ // Authorization, optimistic validation, and deletion all run while the
506
+ // same aggregate rows are locked. In particular, a collab materializer
507
+ // cannot update DocumentContent between validation and soft deletion.
508
+ const aggregate = await loadAggregate(
509
+ em,
510
+ input,
511
+ true,
512
+ async () => {
513
+ const features = await assertDocumentCommandCanEdit(ctx, em, input.documentId, scope)
514
+ assertCommandFeature(features, 'documents.create')
515
+ assertCommandFeature(features, 'documents.delete')
516
+ assertInstantiateSlotFeatures(dedupeTemplateLinkSlots(input.slots), features)
517
+ },
518
+ )
519
+ assertInstantiateEntityUnchanged(
520
+ aggregate.document,
521
+ { updatedAt: after.documentUpdatedAt, deletedAt: after.documentDeletedAt },
522
+ DOCUMENTS_ENTITY_IDS.document,
523
+ input.documentId,
524
+ )
525
+ assertInstantiateEntityUnchanged(
526
+ aggregate.content,
527
+ { updatedAt: after.contentUpdatedAt, deletedAt: after.contentDeletedAt },
528
+ DOCUMENTS_ENTITY_IDS.documentContent,
529
+ after.contentId,
530
+ )
531
+ if (aggregate.linksById.size !== after.links.length) {
532
+ throw new CrudHttpError(409, { error: 'Record changed by another user' })
533
+ }
534
+ for (const expectedLink of after.links) {
535
+ assertInstantiateEntityUnchanged(
536
+ aggregate.linksById.get(expectedLink.id) ?? null,
537
+ expectedLink,
538
+ DOCUMENTS_ENTITY_IDS.documentEntityLink,
539
+ expectedLink.id,
540
+ )
541
+ }
542
+ await assertNoPostCreateDocumentDependents(em, input.documentId, scope, {
543
+ allowedLinkIds: after.links.map((link) => link.id),
544
+ })
545
+
546
+ deletedLinks = Array.from(aggregate.linksById.values())
547
+ deletedDocument = aggregate.document
548
+ if (aggregate.document) {
549
+ const documentVersion = nextDocumentVersion(aggregate.document.updatedAt)
550
+ aggregate.document.deletedAt = documentVersion
551
+ aggregate.document.updatedAt = documentVersion
552
+ }
553
+ if (aggregate.content) {
554
+ const contentVersion = nextDocumentVersion(aggregate.content.updatedAt)
555
+ advanceDocumentCollaborationGeneration(aggregate.content)
556
+ aggregate.content.deletedAt = contentVersion
557
+ aggregate.content.updatedAt = contentVersion
558
+ }
559
+ for (const link of deletedLinks) {
560
+ const linkVersion = nextDocumentVersion(link.updatedAt)
561
+ link.deletedAt = linkVersion
562
+ link.updatedAt = linkVersion
563
+ }
564
+ }], { transaction: true, label: 'documents.document.instantiate.undo' })
565
+ if (deletedLinks.length > 0) {
566
+ await Promise.all(deletedLinks.map((link) => bufferLinkMutationSideEffects(
567
+ ctx,
568
+ 'deleted',
569
+ link,
570
+ { undo: true },
571
+ )))
572
+ }
573
+ if (deletedDocument) {
574
+ await bufferDocumentMutationSideEffects(ctx, 'deleted', deletedDocument, { undo: true })
575
+ }
576
+ },
577
+ }
578
+
579
+ registerCommand(instantiateDocumentCommand)
580
+
581
+ export { instantiateDocumentCommand }