@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,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../src/modules/documents/backend/documents/%5Bid%5D/relatedRecordModel.ts"],
4
+ "sourcesContent": ["import {\n firstSafeDocumentsDisplayLabel,\n sanitizeDocumentsDisplayLabel,\n} from '../../../lib/displayLabels'\nimport {\n getEntityTokenFieldNames,\n type DocumentEntityType,\n} from '../../../lib/entityRegistry'\nimport { readBoolean, readRecord, readString } from '../documentUi'\n\nexport type RelatedRecord = {\n id: string\n entityType: DocumentEntityType\n label: string\n href: string | null\n canOpen: boolean\n source: 'chip' | 'template' | 'related-panel'\n updatedAt: string\n values: Record<string, string | null>\n}\n\nexport function normalizeRelatedRecord(value: unknown, fallbackLabel: string): RelatedRecord | null {\n const record = readRecord(value)\n if (!record) return null\n const id = readString(record, 'id')\n const entityType = readString(record, 'entityType', 'entity_type') as DocumentEntityType | null\n const label = firstSafeDocumentsDisplayLabel(readString(record, 'label'), fallbackLabel)\n const updatedAt = readString(record, 'updatedAt', 'updated_at')\n const source = readString(record, 'source') as RelatedRecord['source'] | null\n if (!id || !entityType || !label || !updatedAt || !source) return null\n const canOpen = readBoolean(record, 'canOpen', 'can_open') ?? false\n const rawValues = canOpen ? readRecord(record.values) : null\n const values = rawValues\n ? Object.fromEntries(Array.from(getEntityTokenFieldNames(entityType), (field) => [\n field,\n sanitizeDocumentsDisplayLabel(rawValues[field]),\n ]))\n : {}\n return {\n id,\n entityType,\n label,\n updatedAt,\n source,\n href: readString(record, 'href'),\n canOpen,\n values,\n }\n}\n"],
5
+ "mappings": "AAAA;AAAA,EACE;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,OAEK;AACP,SAAS,aAAa,YAAY,kBAAkB;AAa7C,SAAS,uBAAuB,OAAgB,eAA6C;AAClG,QAAM,SAAS,WAAW,KAAK;AAC/B,MAAI,CAAC,OAAQ,QAAO;AACpB,QAAM,KAAK,WAAW,QAAQ,IAAI;AAClC,QAAM,aAAa,WAAW,QAAQ,cAAc,aAAa;AACjE,QAAM,QAAQ,+BAA+B,WAAW,QAAQ,OAAO,GAAG,aAAa;AACvF,QAAM,YAAY,WAAW,QAAQ,aAAa,YAAY;AAC9D,QAAM,SAAS,WAAW,QAAQ,QAAQ;AAC1C,MAAI,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,aAAa,CAAC,OAAQ,QAAO;AAClE,QAAM,UAAU,YAAY,QAAQ,WAAW,UAAU,KAAK;AAC9D,QAAM,YAAY,UAAU,WAAW,OAAO,MAAM,IAAI;AACxD,QAAM,SAAS,YACX,OAAO,YAAY,MAAM,KAAK,yBAAyB,UAAU,GAAG,CAAC,UAAU;AAAA,IAC7E;AAAA,IACA,8BAA8B,UAAU,KAAK,CAAC;AAAA,EAChD,CAAC,CAAC,IACF,CAAC;AACL,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,MAAM,WAAW,QAAQ,MAAM;AAAA,IAC/B;AAAA,IACA;AAAA,EACF;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,33 @@
1
+ import {
2
+ apiCallOrThrow,
3
+ withScopedApiRequestHeaders
4
+ } from "@open-mercato/ui/backend/utils/apiCall";
5
+ import { buildOptimisticLockHeader } from "@open-mercato/ui/backend/utils/optimisticLock";
6
+ import { normalizeDocumentContent } from "../documentUi.js";
7
+ async function restoreVersionWithCurrentContentToken({
8
+ documentId,
9
+ versionId,
10
+ errorMessage
11
+ }) {
12
+ const contentCall = await apiCallOrThrow(
13
+ `/api/documents/${encodeURIComponent(documentId)}/content`,
14
+ void 0,
15
+ { errorMessage }
16
+ );
17
+ const contentUpdatedAt = normalizeDocumentContent(contentCall.result).updatedAt;
18
+ if (!contentUpdatedAt || !Number.isFinite(Date.parse(contentUpdatedAt))) {
19
+ throw new Error(errorMessage);
20
+ }
21
+ return withScopedApiRequestHeaders(
22
+ buildOptimisticLockHeader(contentUpdatedAt),
23
+ () => apiCallOrThrow(
24
+ `/api/documents/${encodeURIComponent(documentId)}/versions/${encodeURIComponent(versionId)}/restore`,
25
+ { method: "POST" },
26
+ { errorMessage }
27
+ )
28
+ );
29
+ }
30
+ export {
31
+ restoreVersionWithCurrentContentToken
32
+ };
33
+ //# sourceMappingURL=restoreVersion.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../src/modules/documents/backend/documents/%5Bid%5D/restoreVersion.ts"],
4
+ "sourcesContent": ["import {\n apiCallOrThrow,\n withScopedApiRequestHeaders,\n} from '@open-mercato/ui/backend/utils/apiCall'\nimport { buildOptimisticLockHeader } from '@open-mercato/ui/backend/utils/optimisticLock'\nimport { normalizeDocumentContent } from '../documentUi'\n\ntype RestoreVersionWithCurrentContentTokenInput = {\n documentId: string\n versionId: string\n errorMessage: string\n}\n\n/**\n * Restore a version against the content row's CURRENT optimistic-lock token.\n *\n * The token observed when the page loaded is unusable here: every keystroke\n * the caller made since (materialized by the collaboration sidecar, or saved\n * by the single-user autosave) advanced `updated_at`, so restoring after any\n * edit answered a spurious 409, and a document opened before its content row\n * existed had no token at all. Reading the token immediately before the\n * restore keeps the lock meaningful for the concurrent-write race it exists\n * for, while the server-side pre-restore snapshot preserves whatever\n * collaborators wrote in between.\n */\nexport async function restoreVersionWithCurrentContentToken({\n documentId,\n versionId,\n errorMessage,\n}: RestoreVersionWithCurrentContentTokenInput) {\n const contentCall = await apiCallOrThrow<unknown>(\n `/api/documents/${encodeURIComponent(documentId)}/content`,\n undefined,\n { errorMessage },\n )\n const contentUpdatedAt = normalizeDocumentContent(contentCall.result).updatedAt\n if (!contentUpdatedAt || !Number.isFinite(Date.parse(contentUpdatedAt))) {\n throw new Error(errorMessage)\n }\n\n return withScopedApiRequestHeaders(\n buildOptimisticLockHeader(contentUpdatedAt),\n () => apiCallOrThrow(\n `/api/documents/${encodeURIComponent(documentId)}/versions/${encodeURIComponent(versionId)}/restore`,\n { method: 'POST' },\n { errorMessage },\n ),\n )\n}\n"],
5
+ "mappings": "AAAA;AAAA,EACE;AAAA,EACA;AAAA,OACK;AACP,SAAS,iCAAiC;AAC1C,SAAS,gCAAgC;AAoBzC,eAAsB,sCAAsC;AAAA,EAC1D;AAAA,EACA;AAAA,EACA;AACF,GAA+C;AAC7C,QAAM,cAAc,MAAM;AAAA,IACxB,kBAAkB,mBAAmB,UAAU,CAAC;AAAA,IAChD;AAAA,IACA,EAAE,aAAa;AAAA,EACjB;AACA,QAAM,mBAAmB,yBAAyB,YAAY,MAAM,EAAE;AACtE,MAAI,CAAC,oBAAoB,CAAC,OAAO,SAAS,KAAK,MAAM,gBAAgB,CAAC,GAAG;AACvE,UAAM,IAAI,MAAM,YAAY;AAAA,EAC9B;AAEA,SAAO;AAAA,IACL,0BAA0B,gBAAgB;AAAA,IAC1C,MAAM;AAAA,MACJ,kBAAkB,mBAAmB,UAAU,CAAC,aAAa,mBAAmB,SAAS,CAAC;AAAA,MAC1F,EAAE,QAAQ,OAAO;AAAA,MACjB,EAAE,aAAa;AAAA,IACjB;AAAA,EACF;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,392 @@
1
+ "use client";
2
+ import * as React from "react";
3
+ import { HocuspocusProvider } from "@hocuspocus/provider";
4
+ import * as Y from "yjs";
5
+ import { apiCall } from "@open-mercato/ui/backend/utils/apiCall";
6
+ import { useT } from "@open-mercato/shared/lib/i18n/context";
7
+ import {
8
+ sanitizeDocumentsDisplayLabel
9
+ } from "../../../lib/displayLabels.js";
10
+ import {
11
+ firstSafeCollaborationAwarenessName,
12
+ normalizeCollaborationColor,
13
+ resolveCollaborationUserColor
14
+ } from "../../../lib/collaborationAwareness.js";
15
+ import { isCollabContentResetCloseEvent } from "../../../lib/collabCloseEvents.js";
16
+ import {
17
+ readNumber,
18
+ readRecord,
19
+ readString
20
+ } from "./editorTypes.js";
21
+ const COLLABORATION_INITIAL_TIMEOUT_MS = 6e3;
22
+ const COLLABORATION_RECONNECT_GRACE_MS = 750;
23
+ const COLLABORATION_OFFLINE_AFTER_MS = 6e3;
24
+ const COLLABORATION_PROVIDER_RETRY = {
25
+ delay: 250,
26
+ initialDelay: 0,
27
+ factor: 1.5,
28
+ minDelay: 200,
29
+ maxDelay: 2e3,
30
+ maxAttempts: 0,
31
+ jitter: true
32
+ };
33
+ function classifyCollabTokenResponse(call, fallbackUserLabel) {
34
+ if (call.ok) {
35
+ const token = normalizeCollabTokenPayload(call.result, fallbackUserLabel);
36
+ return token ? { kind: "ok", token } : { kind: "fatal" };
37
+ }
38
+ const retryableClientStatus = call.status === 408 || call.status === 425 || call.status === 429;
39
+ if (call.status >= 400 && call.status < 500 && !retryableClientStatus) {
40
+ return { kind: "fatal" };
41
+ }
42
+ return { kind: "transient" };
43
+ }
44
+ async function fetchCollabTokenAttempt(documentId, fallbackUserLabel, call = (path, init) => apiCall(path, init)) {
45
+ try {
46
+ const response = await call(
47
+ `/api/documents/${encodeURIComponent(documentId)}/collab-token`,
48
+ {
49
+ headers: {
50
+ "x-om-forbidden-redirect": "0",
51
+ "x-om-unauthorized-redirect": "0"
52
+ }
53
+ }
54
+ );
55
+ return classifyCollabTokenResponse(response, fallbackUserLabel);
56
+ } catch {
57
+ return { kind: "transient" };
58
+ }
59
+ }
60
+ function createCollaborationStatusController(options) {
61
+ let disposed = false;
62
+ let hasSynced = false;
63
+ let outageActive = false;
64
+ let reconnectingTimer = null;
65
+ let offlineTimer = null;
66
+ const clearOutageTimers = () => {
67
+ if (reconnectingTimer !== null) clearTimeout(reconnectingTimer);
68
+ if (offlineTimer !== null) clearTimeout(offlineTimer);
69
+ reconnectingTimer = null;
70
+ offlineTimer = null;
71
+ };
72
+ return {
73
+ connected() {
74
+ if (disposed) return;
75
+ hasSynced = true;
76
+ outageActive = false;
77
+ clearOutageTimers();
78
+ options.onStatus("connected");
79
+ },
80
+ disconnected() {
81
+ if (disposed || !hasSynced || outageActive) return;
82
+ outageActive = true;
83
+ reconnectingTimer = setTimeout(() => {
84
+ reconnectingTimer = null;
85
+ if (!disposed) options.onStatus("reconnecting");
86
+ }, COLLABORATION_RECONNECT_GRACE_MS);
87
+ offlineTimer = setTimeout(() => {
88
+ offlineTimer = null;
89
+ if (!disposed) options.onStatus("offline");
90
+ }, COLLABORATION_OFFLINE_AFTER_MS);
91
+ },
92
+ dispose() {
93
+ disposed = true;
94
+ clearOutageTimers();
95
+ }
96
+ };
97
+ }
98
+ function applyCollaborationProviderStatus(controller, payload) {
99
+ const record = readRecord(payload);
100
+ if (readString(record ?? {}, "status") !== "connected") controller.disconnected();
101
+ }
102
+ function restartConnectedCollaborationSocket(websocket) {
103
+ if (websocket.status !== "connected" || !websocket.webSocket) return false;
104
+ websocket.webSocket.close();
105
+ return true;
106
+ }
107
+ function createCollaborationSocketLifecycle(websocket) {
108
+ let disposed = false;
109
+ let reconnectInFlight = false;
110
+ const ensureConnected = () => {
111
+ if (disposed || reconnectInFlight || websocket.status !== "disconnected" || typeof websocket.connect !== "function") return false;
112
+ reconnectInFlight = true;
113
+ void Promise.resolve(websocket.connect()).catch(() => void 0).finally(() => {
114
+ reconnectInFlight = false;
115
+ });
116
+ return true;
117
+ };
118
+ return {
119
+ connected() {
120
+ reconnectInFlight = false;
121
+ },
122
+ disconnected() {
123
+ reconnectInFlight = false;
124
+ return ensureConnected();
125
+ },
126
+ logicalClose() {
127
+ return restartConnectedCollaborationSocket(websocket) || ensureConnected();
128
+ },
129
+ ensureConnected,
130
+ dispose() {
131
+ disposed = true;
132
+ reconnectInFlight = false;
133
+ }
134
+ };
135
+ }
136
+ function normalizeCollabTokenPayload(payload, fallbackUserLabel) {
137
+ const root = readRecord(payload);
138
+ const user = readRecord(root?.user);
139
+ if (!root || !user) return null;
140
+ const token = readString(root, "token");
141
+ const collaborationDisabled = root.url === null;
142
+ const documentId = readString(root, "documentId", "document_id");
143
+ const tier = readString(root, "tier");
144
+ const expiresInSec = readNumber(root, "expiresInSec", "expires_in_sec");
145
+ const id = readString(user, "id");
146
+ const name = firstSafeCollaborationAwarenessName(
147
+ readString(user, "name"),
148
+ readString(root, "userName", "user_name"),
149
+ fallbackUserLabel
150
+ );
151
+ const color = readString(user, "color") ?? readString(root, "userColor", "user_color");
152
+ if (!token && !collaborationDisabled || !documentId || !tier || !expiresInSec || !id || !name || !color) return null;
153
+ return {
154
+ token: token ?? "",
155
+ documentId,
156
+ tier,
157
+ expiresInSec,
158
+ user: { id, name, color: resolveCollaborationUserColor(id) },
159
+ url: collaborationDisabled ? null : readString(root, "url"),
160
+ canEdit: root.canEdit === true,
161
+ readOnly: root.readOnly !== false
162
+ };
163
+ }
164
+ function readCollaborationPresence(provider, fallbackUserLabel) {
165
+ const states = provider.awareness?.getStates();
166
+ if (!states) return [];
167
+ const seen = /* @__PURE__ */ new Set();
168
+ const users = [];
169
+ states.forEach((value, clientId) => {
170
+ if (clientId === provider.document.clientID) return;
171
+ const state = readRecord(value);
172
+ const user = readRecord(state?.user);
173
+ const name = firstSafeCollaborationAwarenessName(
174
+ user ? readString(user, "name") : null,
175
+ fallbackUserLabel
176
+ );
177
+ const id = user ? readString(user, "id") : null;
178
+ const suppliedColor = user ? readString(user, "color") : null;
179
+ if (!name || !suppliedColor) return;
180
+ const color = id ? resolveCollaborationUserColor(id) : normalizeCollaborationColor(suppliedColor);
181
+ const key = id ? `user:${id}` : `${name}:${color}`;
182
+ if (!seen.has(key)) {
183
+ seen.add(key);
184
+ users.push({ key, name, color });
185
+ }
186
+ });
187
+ return users;
188
+ }
189
+ function destroy(resources) {
190
+ try {
191
+ resources.provider.destroy();
192
+ } finally {
193
+ resources.ydoc.destroy();
194
+ }
195
+ }
196
+ function useDocumentCollaboration(documentId) {
197
+ const t = useT();
198
+ const fallbackUserLabel = sanitizeDocumentsDisplayLabel(t("documents.users.unknown"));
199
+ const resourcesRef = React.useRef(null);
200
+ const [state, setState] = React.useState({ mode: "connecting" });
201
+ const [sessionEpoch, setSessionEpoch] = React.useState(0);
202
+ React.useEffect(() => {
203
+ let active = true;
204
+ let terminal = false;
205
+ let local = null;
206
+ let initialTimer = null;
207
+ let initialRetryTimer = null;
208
+ let tokenRetryTimer = null;
209
+ let statusController = null;
210
+ let socketLifecycle = null;
211
+ let removeResumeListeners = null;
212
+ let lastTokenFailure = null;
213
+ const clearInitialTimers = () => {
214
+ if (initialTimer !== null) clearTimeout(initialTimer);
215
+ if (initialRetryTimer !== null) clearTimeout(initialRetryTimer);
216
+ initialTimer = null;
217
+ initialRetryTimer = null;
218
+ };
219
+ const clearTokenRetryTimer = () => {
220
+ if (tokenRetryTimer !== null) clearTimeout(tokenRetryTimer);
221
+ tokenRetryTimer = null;
222
+ };
223
+ const fallback = (readOnly = false) => {
224
+ if (!active || terminal) return;
225
+ terminal = true;
226
+ clearInitialTimers();
227
+ clearTokenRetryTimer();
228
+ statusController?.dispose();
229
+ socketLifecycle?.dispose();
230
+ removeResumeListeners?.();
231
+ removeResumeListeners = null;
232
+ if (local && resourcesRef.current === local) {
233
+ resourcesRef.current = null;
234
+ destroy(local);
235
+ }
236
+ local = null;
237
+ setState({ mode: "fallback", readOnly });
238
+ };
239
+ const fetchToken = async () => {
240
+ return fetchCollabTokenAttempt(documentId, fallbackUserLabel);
241
+ };
242
+ const freshToken = async () => {
243
+ const next = await fetchToken();
244
+ if (next.kind === "ok") {
245
+ lastTokenFailure = null;
246
+ if (active && !terminal && local && resourcesRef.current === local) {
247
+ const serverReadOnly = next.token.readOnly || !next.token.canEdit;
248
+ setState((current) => current.mode === "collab" && current.resources === local ? { ...current, serverReadOnly } : current);
249
+ }
250
+ return next.token.token;
251
+ }
252
+ lastTokenFailure = next.kind;
253
+ throw new Error(`[internal] Collaboration token refresh ${next.kind}`);
254
+ };
255
+ const start = async () => {
256
+ const initial = await fetchToken();
257
+ if (!active || terminal) return;
258
+ if (initial.kind === "transient") {
259
+ initialRetryTimer = setTimeout(() => {
260
+ initialRetryTimer = null;
261
+ void start();
262
+ }, COLLABORATION_PROVIDER_RETRY.delay);
263
+ return;
264
+ }
265
+ if (initial.kind === "fatal") {
266
+ fallback(true);
267
+ return;
268
+ }
269
+ if (!initial.token.url) {
270
+ fallback(initial.token.readOnly || !initial.token.canEdit);
271
+ return;
272
+ }
273
+ const ydoc = new Y.Doc();
274
+ const provider = new HocuspocusProvider({
275
+ url: initial.token.url,
276
+ name: documentId,
277
+ document: ydoc,
278
+ token: freshToken,
279
+ ...COLLABORATION_PROVIDER_RETRY
280
+ });
281
+ const resources = { ydoc, provider, user: initial.token.user };
282
+ local = resources;
283
+ resourcesRef.current = resources;
284
+ const update = (connectionStatus) => {
285
+ if (!active || resourcesRef.current !== resources) return;
286
+ setState((current) => current.mode === "collab" && current.resources === resources ? { ...current, connectionStatus } : current);
287
+ };
288
+ statusController = createCollaborationStatusController({
289
+ onStatus: update
290
+ });
291
+ const websocket = provider.configuration.websocketProvider;
292
+ socketLifecycle = createCollaborationSocketLifecycle(websocket);
293
+ const resume = () => socketLifecycle?.ensureConnected();
294
+ const resumeWhenVisible = () => {
295
+ if (document.visibilityState === "visible") resume();
296
+ };
297
+ window.addEventListener("online", resume);
298
+ window.addEventListener("pageshow", resume);
299
+ document.addEventListener("visibilitychange", resumeWhenVisible);
300
+ removeResumeListeners = () => {
301
+ window.removeEventListener("online", resume);
302
+ window.removeEventListener("pageshow", resume);
303
+ document.removeEventListener("visibilitychange", resumeWhenVisible);
304
+ };
305
+ const updatePresence = () => setState((current) => current.mode === "collab" && current.resources === resources ? { ...current, presenceUsers: readCollaborationPresence(provider, fallbackUserLabel) } : current);
306
+ provider.on("status", (payload) => {
307
+ const record = readRecord(payload);
308
+ if (readString(record ?? {}, "status") === "connected") socketLifecycle?.connected();
309
+ if (statusController) applyCollaborationProviderStatus(statusController, payload);
310
+ });
311
+ provider.on("synced", () => {
312
+ lastTokenFailure = null;
313
+ clearInitialTimers();
314
+ clearTokenRetryTimer();
315
+ statusController?.connected();
316
+ });
317
+ provider.on("authenticationFailed", () => {
318
+ const tokenFailure = lastTokenFailure;
319
+ lastTokenFailure = null;
320
+ if (tokenFailure === "fatal") {
321
+ fallback(true);
322
+ return;
323
+ }
324
+ statusController?.disconnected();
325
+ clearTokenRetryTimer();
326
+ tokenRetryTimer = setTimeout(() => {
327
+ tokenRetryTimer = null;
328
+ if (!active || terminal || resourcesRef.current !== resources) return;
329
+ const websocket2 = provider.configuration.websocketProvider;
330
+ websocket2.webSocket?.close();
331
+ }, COLLABORATION_PROVIDER_RETRY.delay);
332
+ });
333
+ provider.on("disconnect", () => {
334
+ statusController?.disconnected();
335
+ socketLifecycle?.disconnected();
336
+ });
337
+ provider.on("close", (payload) => {
338
+ const closeEvent = readRecord(payload)?.event;
339
+ if (isCollabContentResetCloseEvent(closeEvent)) {
340
+ if (!active || terminal || resourcesRef.current !== resources) return;
341
+ terminal = true;
342
+ socketLifecycle?.dispose();
343
+ statusController?.dispose();
344
+ provider.configuration.websocketProvider.disconnect();
345
+ setSessionEpoch((current) => current + 1);
346
+ return;
347
+ }
348
+ statusController?.disconnected();
349
+ socketLifecycle?.logicalClose();
350
+ });
351
+ provider.awareness?.on("change", updatePresence);
352
+ setState({
353
+ mode: "collab",
354
+ resources,
355
+ connectionStatus: "connecting",
356
+ presenceUsers: readCollaborationPresence(provider, fallbackUserLabel),
357
+ serverReadOnly: initial.token.readOnly || !initial.token.canEdit
358
+ });
359
+ };
360
+ setState({ mode: "connecting" });
361
+ initialTimer = setTimeout(fallback, COLLABORATION_INITIAL_TIMEOUT_MS);
362
+ void start().catch(() => fallback(false));
363
+ return () => {
364
+ active = false;
365
+ terminal = true;
366
+ clearInitialTimers();
367
+ clearTokenRetryTimer();
368
+ statusController?.dispose();
369
+ socketLifecycle?.dispose();
370
+ removeResumeListeners?.();
371
+ if (local) destroy(local);
372
+ if (resourcesRef.current === local) resourcesRef.current = null;
373
+ };
374
+ }, [documentId, fallbackUserLabel, sessionEpoch]);
375
+ return state;
376
+ }
377
+ export {
378
+ COLLABORATION_INITIAL_TIMEOUT_MS,
379
+ COLLABORATION_OFFLINE_AFTER_MS,
380
+ COLLABORATION_PROVIDER_RETRY,
381
+ COLLABORATION_RECONNECT_GRACE_MS,
382
+ applyCollaborationProviderStatus,
383
+ classifyCollabTokenResponse,
384
+ createCollaborationSocketLifecycle,
385
+ createCollaborationStatusController,
386
+ fetchCollabTokenAttempt,
387
+ normalizeCollabTokenPayload,
388
+ readCollaborationPresence,
389
+ restartConnectedCollaborationSocket,
390
+ useDocumentCollaboration
391
+ };
392
+ //# sourceMappingURL=useDocumentCollaboration.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../src/modules/documents/backend/documents/%5Bid%5D/useDocumentCollaboration.ts"],
4
+ "sourcesContent": ["\"use client\"\n\nimport * as React from 'react'\nimport { HocuspocusProvider } from '@hocuspocus/provider'\nimport * as Y from 'yjs'\nimport { apiCall } from '@open-mercato/ui/backend/utils/apiCall'\nimport { useT } from '@open-mercato/shared/lib/i18n/context'\nimport {\n sanitizeDocumentsDisplayLabel,\n} from '../../../lib/displayLabels'\nimport {\n firstSafeCollaborationAwarenessName,\n normalizeCollaborationColor,\n resolveCollaborationUserColor,\n} from '../../../lib/collaborationAwareness'\nimport { isCollabContentResetCloseEvent } from '../../../lib/collabCloseEvents'\nimport {\n readNumber,\n readRecord,\n readString,\n type CollabResources,\n type CollabState,\n type CollabTokenUser,\n type ConnectionStatus,\n type PresenceUser,\n} from './editorTypes'\n\nexport const COLLABORATION_INITIAL_TIMEOUT_MS = 6000\nexport const COLLABORATION_RECONNECT_GRACE_MS = 750\nexport const COLLABORATION_OFFLINE_AFTER_MS = 6000\nexport const COLLABORATION_PROVIDER_RETRY = {\n delay: 250,\n initialDelay: 0,\n factor: 1.5,\n minDelay: 200,\n maxDelay: 2000,\n maxAttempts: 0,\n jitter: true,\n} as const\n\ntype CollabTokenResponse = {\n token: string\n url: string | null\n documentId: string\n tier: string\n expiresInSec: number\n user: CollabTokenUser\n canEdit: boolean\n readOnly: boolean\n}\n\ntype CollabTokenAttempt =\n | { kind: 'ok'; token: CollabTokenResponse }\n | { kind: 'fatal' }\n | { kind: 'transient' }\n\ntype TimeoutHandle = ReturnType<typeof setTimeout>\ntype CollabApiCall = (\n path: string,\n init: RequestInit,\n) => Promise<{ ok: boolean; status: number; result: unknown }>\n\nexport function classifyCollabTokenResponse(\n call: { ok: boolean; status: number; result: unknown },\n fallbackUserLabel: string | null,\n): CollabTokenAttempt {\n if (call.ok) {\n const token = normalizeCollabTokenPayload(call.result, fallbackUserLabel)\n return token ? { kind: 'ok', token } : { kind: 'fatal' }\n }\n\n const retryableClientStatus = call.status === 408 || call.status === 425 || call.status === 429\n if (call.status >= 400 && call.status < 500 && !retryableClientStatus) {\n return { kind: 'fatal' }\n }\n return { kind: 'transient' }\n}\n\nexport async function fetchCollabTokenAttempt(\n documentId: string,\n fallbackUserLabel: string | null,\n call: CollabApiCall = (path, init) => apiCall<unknown>(path, init),\n): Promise<CollabTokenAttempt> {\n try {\n const response = await call(\n `/api/documents/${encodeURIComponent(documentId)}/collab-token`,\n {\n headers: {\n 'x-om-forbidden-redirect': '0',\n 'x-om-unauthorized-redirect': '0',\n },\n },\n )\n return classifyCollabTokenResponse(response, fallbackUserLabel)\n } catch {\n return { kind: 'transient' }\n }\n}\n\nexport function createCollaborationStatusController(options: {\n onStatus: (status: ConnectionStatus) => void\n}) {\n let disposed = false\n let hasSynced = false\n let outageActive = false\n let reconnectingTimer: TimeoutHandle | null = null\n let offlineTimer: TimeoutHandle | null = null\n\n const clearOutageTimers = () => {\n if (reconnectingTimer !== null) clearTimeout(reconnectingTimer)\n if (offlineTimer !== null) clearTimeout(offlineTimer)\n reconnectingTimer = null\n offlineTimer = null\n }\n\n return {\n connected() {\n if (disposed) return\n hasSynced = true\n outageActive = false\n clearOutageTimers()\n options.onStatus('connected')\n },\n disconnected() {\n if (disposed || !hasSynced || outageActive) return\n outageActive = true\n reconnectingTimer = setTimeout(() => {\n reconnectingTimer = null\n if (!disposed) options.onStatus('reconnecting')\n }, COLLABORATION_RECONNECT_GRACE_MS)\n offlineTimer = setTimeout(() => {\n offlineTimer = null\n if (!disposed) options.onStatus('offline')\n }, COLLABORATION_OFFLINE_AFTER_MS)\n },\n dispose() {\n disposed = true\n clearOutageTimers()\n },\n }\n}\n\nexport function applyCollaborationProviderStatus(\n controller: Pick<ReturnType<typeof createCollaborationStatusController>, 'disconnected'>,\n payload: unknown,\n): void {\n const record = readRecord(payload)\n // A physical WebSocket can report `connected` before Hocuspocus has\n // authenticated and synchronized the document. Only the provider's `synced`\n // event may restore the user-facing Live state; otherwise an auth failure can\n // leave the UI claiming Live while the server is rejecting the room.\n if (readString(record ?? {}, 'status') !== 'connected') controller.disconnected()\n}\n\nexport function restartConnectedCollaborationSocket(websocket: {\n status: string\n webSocket?: { close: () => void } | null\n}): boolean {\n if (websocket.status !== 'connected' || !websocket.webSocket) return false\n websocket.webSocket.close()\n return true\n}\n\ntype CollaborationWebsocketLifecycle = {\n status: string\n webSocket?: { close: () => void } | null\n connect?: () => unknown\n}\n\nexport function createCollaborationSocketLifecycle(\n websocket: CollaborationWebsocketLifecycle,\n) {\n let disposed = false\n let reconnectInFlight = false\n\n const ensureConnected = (): boolean => {\n if (\n disposed\n || reconnectInFlight\n || websocket.status !== 'disconnected'\n || typeof websocket.connect !== 'function'\n ) return false\n\n reconnectInFlight = true\n void Promise.resolve(websocket.connect()).catch(() => undefined).finally(() => {\n reconnectInFlight = false\n })\n return true\n }\n\n return {\n connected() {\n reconnectInFlight = false\n },\n disconnected() {\n reconnectInFlight = false\n return ensureConnected()\n },\n logicalClose() {\n return restartConnectedCollaborationSocket(websocket) || ensureConnected()\n },\n ensureConnected,\n dispose() {\n disposed = true\n reconnectInFlight = false\n },\n }\n}\n\nexport function normalizeCollabTokenPayload(\n payload: unknown,\n fallbackUserLabel: string | null,\n): CollabTokenResponse | null {\n const root = readRecord(payload)\n const user = readRecord(root?.user)\n if (!root || !user) return null\n const token = readString(root, 'token')\n const collaborationDisabled = root.url === null\n const documentId = readString(root, 'documentId', 'document_id')\n const tier = readString(root, 'tier')\n const expiresInSec = readNumber(root, 'expiresInSec', 'expires_in_sec')\n const id = readString(user, 'id')\n const name = firstSafeCollaborationAwarenessName(\n readString(user, 'name'),\n readString(root, 'userName', 'user_name'),\n fallbackUserLabel,\n )\n const color = readString(user, 'color') ?? readString(root, 'userColor', 'user_color')\n if ((!token && !collaborationDisabled) || !documentId || !tier || !expiresInSec || !id || !name || !color) return null\n return {\n token: token ?? '',\n documentId,\n tier,\n expiresInSec,\n user: { id, name, color: resolveCollaborationUserColor(id) },\n url: collaborationDisabled ? null : readString(root, 'url'),\n canEdit: root.canEdit === true,\n readOnly: root.readOnly !== false,\n }\n}\n\nexport function readCollaborationPresence(\n provider: HocuspocusProvider,\n fallbackUserLabel: string | null,\n): PresenceUser[] {\n const states = provider.awareness?.getStates() as Map<number, unknown> | undefined\n if (!states) return []\n const seen = new Set<string>()\n const users: PresenceUser[] = []\n states.forEach((value, clientId) => {\n if (clientId === provider.document.clientID) return\n const state = readRecord(value)\n const user = readRecord(state?.user)\n const name = firstSafeCollaborationAwarenessName(\n user ? readString(user, 'name') : null,\n fallbackUserLabel,\n )\n const id = user ? readString(user, 'id') : null\n const suppliedColor = user ? readString(user, 'color') : null\n if (!name || !suppliedColor) return\n const color = id\n ? resolveCollaborationUserColor(id)\n : normalizeCollaborationColor(suppliedColor)\n const key = id ? `user:${id}` : `${name}:${color}`\n if (!seen.has(key)) { seen.add(key); users.push({ key, name, color }) }\n })\n return users\n}\n\nfunction destroy(resources: CollabResources) {\n try { resources.provider.destroy() } finally { resources.ydoc.destroy() }\n}\n\nexport function useDocumentCollaboration(documentId: string): CollabState {\n const t = useT()\n const fallbackUserLabel = sanitizeDocumentsDisplayLabel(t('documents.users.unknown'))\n const resourcesRef = React.useRef<CollabResources | null>(null)\n const [state, setState] = React.useState<CollabState>({ mode: 'connecting' })\n // Bumped when the sidecar closes the room because its content was replaced\n // (version restore). Re-running the effect discards the local Y.Doc and\n // provider and joins the reloaded room from scratch; reconnecting with the\n // stale document would sync the pre-restore state back into it.\n const [sessionEpoch, setSessionEpoch] = React.useState(0)\n React.useEffect(() => {\n let active = true\n let terminal = false\n let local: CollabResources | null = null\n let initialTimer: TimeoutHandle | null = null\n let initialRetryTimer: TimeoutHandle | null = null\n let tokenRetryTimer: TimeoutHandle | null = null\n let statusController: ReturnType<typeof createCollaborationStatusController> | null = null\n let socketLifecycle: ReturnType<typeof createCollaborationSocketLifecycle> | null = null\n let removeResumeListeners: (() => void) | null = null\n let lastTokenFailure: 'fatal' | 'transient' | null = null\n const clearInitialTimers = () => {\n if (initialTimer !== null) clearTimeout(initialTimer)\n if (initialRetryTimer !== null) clearTimeout(initialRetryTimer)\n initialTimer = null\n initialRetryTimer = null\n }\n const clearTokenRetryTimer = () => {\n if (tokenRetryTimer !== null) clearTimeout(tokenRetryTimer)\n tokenRetryTimer = null\n }\n const fallback = (readOnly = false) => {\n if (!active || terminal) return\n terminal = true\n clearInitialTimers()\n clearTokenRetryTimer()\n statusController?.dispose()\n socketLifecycle?.dispose()\n removeResumeListeners?.()\n removeResumeListeners = null\n if (local && resourcesRef.current === local) { resourcesRef.current = null; destroy(local) }\n local = null\n setState({ mode: 'fallback', readOnly })\n }\n const fetchToken = async (): Promise<CollabTokenAttempt> => {\n return fetchCollabTokenAttempt(documentId, fallbackUserLabel)\n }\n const freshToken = async () => {\n const next = await fetchToken()\n if (next.kind === 'ok') {\n lastTokenFailure = null\n if (active && !terminal && local && resourcesRef.current === local) {\n const serverReadOnly = next.token.readOnly || !next.token.canEdit\n setState((current) => current.mode === 'collab' && current.resources === local\n ? { ...current, serverReadOnly }\n : current)\n }\n return next.token.token\n }\n lastTokenFailure = next.kind\n throw new Error(`[internal] Collaboration token refresh ${next.kind}`)\n }\n const start = async (): Promise<void> => {\n const initial = await fetchToken()\n if (!active || terminal) return\n if (initial.kind === 'transient') {\n initialRetryTimer = setTimeout(() => {\n initialRetryTimer = null\n void start()\n }, COLLABORATION_PROVIDER_RETRY.delay)\n return\n }\n if (initial.kind === 'fatal') { fallback(true); return }\n if (!initial.token.url) {\n fallback(initial.token.readOnly || !initial.token.canEdit)\n return\n }\n const ydoc = new Y.Doc()\n const provider = new HocuspocusProvider({\n url: initial.token.url,\n name: documentId,\n document: ydoc,\n token: freshToken,\n ...COLLABORATION_PROVIDER_RETRY,\n })\n const resources = { ydoc, provider, user: initial.token.user }\n local = resources\n resourcesRef.current = resources\n const update = (connectionStatus: ConnectionStatus) => {\n if (!active || resourcesRef.current !== resources) return\n setState((current) => current.mode === 'collab' && current.resources === resources ? { ...current, connectionStatus } : current)\n }\n statusController = createCollaborationStatusController({\n onStatus: update,\n })\n const websocket = provider.configuration.websocketProvider\n socketLifecycle = createCollaborationSocketLifecycle(websocket)\n const resume = () => socketLifecycle?.ensureConnected()\n const resumeWhenVisible = () => {\n if (document.visibilityState === 'visible') resume()\n }\n window.addEventListener('online', resume)\n window.addEventListener('pageshow', resume)\n document.addEventListener('visibilitychange', resumeWhenVisible)\n removeResumeListeners = () => {\n window.removeEventListener('online', resume)\n window.removeEventListener('pageshow', resume)\n document.removeEventListener('visibilitychange', resumeWhenVisible)\n }\n const updatePresence = () => setState((current) => current.mode === 'collab' && current.resources === resources ? { ...current, presenceUsers: readCollaborationPresence(provider, fallbackUserLabel) } : current)\n provider.on('status', (payload: unknown) => {\n const record = readRecord(payload)\n if (readString(record ?? {}, 'status') === 'connected') socketLifecycle?.connected()\n if (statusController) applyCollaborationProviderStatus(statusController, payload)\n })\n provider.on('synced', () => {\n lastTokenFailure = null\n clearInitialTimers()\n clearTokenRetryTimer()\n statusController?.connected()\n })\n provider.on('authenticationFailed', () => {\n const tokenFailure = lastTokenFailure\n lastTokenFailure = null\n // A freshly minted token can still hit the sidecar's short-lived room\n // drain fence after a share/unshare rollover. Only a definitive token\n // endpoint rejection is fatal; sidecar auth rejection with a valid\n // token must keep retrying until the old room has drained.\n if (tokenFailure === 'fatal') { fallback(true); return }\n statusController?.disconnected()\n clearTokenRetryTimer()\n tokenRetryTimer = setTimeout(() => {\n tokenRetryTimer = null\n if (!active || terminal || resourcesRef.current !== resources) return\n const websocket = provider.configuration.websocketProvider\n websocket.webSocket?.close()\n }, COLLABORATION_PROVIDER_RETRY.delay)\n })\n provider.on('disconnect', () => {\n statusController?.disconnected()\n socketLifecycle?.disconnected()\n })\n provider.on('close', (payload: unknown) => {\n const closeEvent = readRecord(payload)?.event\n if (isCollabContentResetCloseEvent(closeEvent)) {\n if (!active || terminal || resourcesRef.current !== resources) return\n // Stop every reconnect path for this session first: the provider's\n // own retry and the socket lifecycle would otherwise rejoin the\n // room with the stale document before the fresh session starts.\n terminal = true\n socketLifecycle?.dispose()\n statusController?.dispose()\n provider.configuration.websocketProvider.disconnect()\n setSessionEpoch((current) => current + 1)\n return\n }\n statusController?.disconnected()\n socketLifecycle?.logicalClose()\n })\n provider.awareness?.on('change', updatePresence)\n setState({\n mode: 'collab',\n resources,\n connectionStatus: 'connecting',\n presenceUsers: readCollaborationPresence(provider, fallbackUserLabel),\n serverReadOnly: initial.token.readOnly || !initial.token.canEdit,\n })\n }\n setState({ mode: 'connecting' })\n initialTimer = setTimeout(fallback, COLLABORATION_INITIAL_TIMEOUT_MS)\n void start().catch(() => fallback(false))\n return () => {\n active = false\n terminal = true\n clearInitialTimers()\n clearTokenRetryTimer()\n statusController?.dispose()\n socketLifecycle?.dispose()\n removeResumeListeners?.()\n if (local) destroy(local)\n if (resourcesRef.current === local) resourcesRef.current = null\n }\n }, [documentId, fallbackUserLabel, sessionEpoch])\n return state\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["websocket"]
7
+ }