@sync-in/server 1.10.1 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1057) hide show
  1. package/CHANGELOG.md +47 -0
  2. package/LICENSE +1 -1
  3. package/README.md +3 -11
  4. package/environment/environment.dist.min.yaml +1 -1
  5. package/environment/environment.dist.yaml +173 -28
  6. package/package.json +18 -17
  7. package/server/app.bootstrap.js +1 -5
  8. package/server/app.bootstrap.js.map +1 -1
  9. package/server/app.constants.js +1 -5
  10. package/server/app.constants.js.map +1 -1
  11. package/server/app.e2e-spec.js +1 -5
  12. package/server/app.e2e-spec.js.map +1 -1
  13. package/server/app.functions.js +1 -5
  14. package/server/app.functions.js.map +1 -1
  15. package/server/app.module.js +1 -5
  16. package/server/app.module.js.map +1 -1
  17. package/server/app.service.js +1 -5
  18. package/server/app.service.js.map +1 -1
  19. package/server/app.service.spec.js +2 -6
  20. package/server/app.service.spec.js.map +1 -1
  21. package/server/applications/admin/admin.module.js +1 -5
  22. package/server/applications/admin/admin.module.js.map +1 -1
  23. package/server/applications/admin/constants/routes.js +1 -5
  24. package/server/applications/admin/constants/routes.js.map +1 -1
  25. package/server/applications/admin/interfaces/check-update.interfaces.js +1 -5
  26. package/server/applications/admin/interfaces/check-update.interfaces.js.map +1 -1
  27. package/server/applications/admin/services/admin-scheduler.service.js +1 -5
  28. package/server/applications/admin/services/admin-scheduler.service.js.map +1 -1
  29. package/server/applications/admin/services/admin.service.js +13 -8
  30. package/server/applications/admin/services/admin.service.js.map +1 -1
  31. package/server/applications/admin/services/admin.service.spec.js +1 -5
  32. package/server/applications/admin/services/admin.service.spec.js.map +1 -1
  33. package/server/applications/admin/utils/check-update.js +1 -5
  34. package/server/applications/admin/utils/check-update.js.map +1 -1
  35. package/server/applications/applications.config.js +1 -5
  36. package/server/applications/applications.config.js.map +1 -1
  37. package/server/applications/applications.constants.js +5 -5
  38. package/server/applications/applications.constants.js.map +1 -1
  39. package/server/applications/applications.module.js +1 -5
  40. package/server/applications/applications.module.js.map +1 -1
  41. package/server/applications/comments/comments.controller.js +1 -5
  42. package/server/applications/comments/comments.controller.js.map +1 -1
  43. package/server/applications/comments/comments.controller.spec.js +1 -5
  44. package/server/applications/comments/comments.controller.spec.js.map +1 -1
  45. package/server/applications/comments/comments.module.js +1 -5
  46. package/server/applications/comments/comments.module.js.map +1 -1
  47. package/server/applications/comments/constants/routes.js +1 -5
  48. package/server/applications/comments/constants/routes.js.map +1 -1
  49. package/server/applications/comments/dto/comment.dto.js +1 -5
  50. package/server/applications/comments/dto/comment.dto.js.map +1 -1
  51. package/server/applications/comments/interfaces/comment-recent.interface.js +1 -5
  52. package/server/applications/comments/interfaces/comment-recent.interface.js.map +1 -1
  53. package/server/applications/comments/schemas/comment.interface.js +1 -5
  54. package/server/applications/comments/schemas/comment.interface.js.map +1 -1
  55. package/server/applications/comments/schemas/comments.schema.js +1 -5
  56. package/server/applications/comments/schemas/comments.schema.js.map +1 -1
  57. package/server/applications/comments/services/comments-manager.service.js +9 -7
  58. package/server/applications/comments/services/comments-manager.service.js.map +1 -1
  59. package/server/applications/comments/services/comments-manager.service.spec.js +10 -8
  60. package/server/applications/comments/services/comments-manager.service.spec.js.map +1 -1
  61. package/server/applications/comments/services/comments-queries.service.js +1 -5
  62. package/server/applications/comments/services/comments-queries.service.js.map +1 -1
  63. package/server/applications/files/adapters/files-indexer-mysql.service.js +29 -12
  64. package/server/applications/files/adapters/files-indexer-mysql.service.js.map +1 -1
  65. package/server/applications/files/adapters/files-indexer-mysql.service.spec.js +1 -5
  66. package/server/applications/files/adapters/files-indexer-mysql.service.spec.js.map +1 -1
  67. package/server/applications/files/constants/cache.js +1 -5
  68. package/server/applications/files/constants/cache.js.map +1 -1
  69. package/server/applications/files/constants/compress.js +1 -5
  70. package/server/applications/files/constants/compress.js.map +1 -1
  71. package/server/applications/files/constants/files.js +1 -5
  72. package/server/applications/files/constants/files.js.map +1 -1
  73. package/server/applications/files/constants/indexing.js +1 -5
  74. package/server/applications/files/constants/indexing.js.map +1 -1
  75. package/server/applications/files/constants/operations.js +1 -5
  76. package/server/applications/files/constants/operations.js.map +1 -1
  77. package/server/applications/files/constants/routes.js +1 -5
  78. package/server/applications/files/constants/routes.js.map +1 -1
  79. package/server/applications/files/constants/samples.js +1 -5
  80. package/server/applications/files/constants/samples.js.map +1 -1
  81. package/server/applications/files/dto/file-operations.dto.js +1 -5
  82. package/server/applications/files/dto/file-operations.dto.js.map +1 -1
  83. package/server/applications/files/events/file-task-event.js +1 -5
  84. package/server/applications/files/events/file-task-event.js.map +1 -1
  85. package/server/applications/files/files-tasks.controller.js +1 -5
  86. package/server/applications/files/files-tasks.controller.js.map +1 -1
  87. package/server/applications/files/files-tasks.controller.spec.js +1 -5
  88. package/server/applications/files/files-tasks.controller.spec.js.map +1 -1
  89. package/server/applications/files/files.config.js +1 -5
  90. package/server/applications/files/files.config.js.map +1 -1
  91. package/server/applications/files/files.controller.js +1 -5
  92. package/server/applications/files/files.controller.js.map +1 -1
  93. package/server/applications/files/files.controller.spec.js +1 -5
  94. package/server/applications/files/files.controller.spec.js.map +1 -1
  95. package/server/applications/files/files.module.js +1 -5
  96. package/server/applications/files/files.module.js.map +1 -1
  97. package/server/applications/files/interfaces/file-db-props.interface.js +1 -5
  98. package/server/applications/files/interfaces/file-db-props.interface.js.map +1 -1
  99. package/server/applications/files/interfaces/file-lock.interface.js +1 -5
  100. package/server/applications/files/interfaces/file-lock.interface.js.map +1 -1
  101. package/server/applications/files/interfaces/file-parse-index.js +1 -5
  102. package/server/applications/files/interfaces/file-parse-index.js.map +1 -1
  103. package/server/applications/files/interfaces/file-props.interface.js +1 -5
  104. package/server/applications/files/interfaces/file-props.interface.js.map +1 -1
  105. package/server/applications/files/interfaces/file-recent-location.interface.js +1 -5
  106. package/server/applications/files/interfaces/file-recent-location.interface.js.map +1 -1
  107. package/server/applications/files/interfaces/file-space.interface.js +1 -5
  108. package/server/applications/files/interfaces/file-space.interface.js.map +1 -1
  109. package/server/applications/files/interfaces/file-tree.interface.js +1 -5
  110. package/server/applications/files/interfaces/file-tree.interface.js.map +1 -1
  111. package/server/applications/files/models/file-error.js +1 -5
  112. package/server/applications/files/models/file-error.js.map +1 -1
  113. package/server/applications/files/models/file-lock-error.js +1 -5
  114. package/server/applications/files/models/file-lock-error.js.map +1 -1
  115. package/server/applications/files/models/file-task.js +1 -5
  116. package/server/applications/files/models/file-task.js.map +1 -1
  117. package/server/applications/files/models/files-indexer.js +1 -5
  118. package/server/applications/files/models/files-indexer.js.map +1 -1
  119. package/server/applications/files/modules/collabora-online/collabora-online-environment.decorator.js +1 -5
  120. package/server/applications/files/modules/collabora-online/collabora-online-environment.decorator.js.map +1 -1
  121. package/server/applications/files/modules/collabora-online/collabora-online-manager.service.js +21 -10
  122. package/server/applications/files/modules/collabora-online/collabora-online-manager.service.js.map +1 -1
  123. package/server/applications/files/modules/collabora-online/collabora-online-manager.service.spec.js +1 -5
  124. package/server/applications/files/modules/collabora-online/collabora-online-manager.service.spec.js.map +1 -1
  125. package/server/applications/files/modules/collabora-online/collabora-online.config.js +1 -5
  126. package/server/applications/files/modules/collabora-online/collabora-online.config.js.map +1 -1
  127. package/server/applications/files/modules/collabora-online/collabora-online.constants.js +1 -5
  128. package/server/applications/files/modules/collabora-online/collabora-online.constants.js.map +1 -1
  129. package/server/applications/files/modules/collabora-online/collabora-online.controller.js +1 -5
  130. package/server/applications/files/modules/collabora-online/collabora-online.controller.js.map +1 -1
  131. package/server/applications/files/modules/collabora-online/collabora-online.controller.spec.js +1 -5
  132. package/server/applications/files/modules/collabora-online/collabora-online.controller.spec.js.map +1 -1
  133. package/server/applications/files/modules/collabora-online/collabora-online.dtos.js +1 -5
  134. package/server/applications/files/modules/collabora-online/collabora-online.dtos.js.map +1 -1
  135. package/server/applications/files/modules/collabora-online/collabora-online.guard.js +1 -5
  136. package/server/applications/files/modules/collabora-online/collabora-online.guard.js.map +1 -1
  137. package/server/applications/files/modules/collabora-online/collabora-online.guard.spec.js +1 -5
  138. package/server/applications/files/modules/collabora-online/collabora-online.guard.spec.js.map +1 -1
  139. package/server/applications/files/modules/collabora-online/collabora-online.interface.js +1 -5
  140. package/server/applications/files/modules/collabora-online/collabora-online.interface.js.map +1 -1
  141. package/server/applications/files/modules/collabora-online/collabora-online.module.js +1 -5
  142. package/server/applications/files/modules/collabora-online/collabora-online.module.js.map +1 -1
  143. package/server/applications/files/modules/collabora-online/collabora-online.routes.js +1 -5
  144. package/server/applications/files/modules/collabora-online/collabora-online.routes.js.map +1 -1
  145. package/server/applications/files/modules/collabora-online/collabora-online.strategy.js +1 -5
  146. package/server/applications/files/modules/collabora-online/collabora-online.strategy.js.map +1 -1
  147. package/server/applications/files/modules/collabora-online/collabora-online.utils.js +1 -5
  148. package/server/applications/files/modules/collabora-online/collabora-online.utils.js.map +1 -1
  149. package/server/applications/files/modules/file-editor-providers.interface.js +6 -0
  150. package/server/applications/files/modules/file-editor-providers.interface.js.map +1 -0
  151. package/server/applications/files/modules/only-office/only-office-environment.decorator.js +1 -5
  152. package/server/applications/files/modules/only-office/only-office-environment.decorator.js.map +1 -1
  153. package/server/applications/files/modules/only-office/only-office-manager.service.js +57 -19
  154. package/server/applications/files/modules/only-office/only-office-manager.service.js.map +1 -1
  155. package/server/applications/files/modules/only-office/only-office-manager.service.spec.js +1 -5
  156. package/server/applications/files/modules/only-office/only-office-manager.service.spec.js.map +1 -1
  157. package/server/applications/files/modules/only-office/only-office.config.js +1 -5
  158. package/server/applications/files/modules/only-office/only-office.config.js.map +1 -1
  159. package/server/applications/files/modules/only-office/only-office.constants.js +1 -5
  160. package/server/applications/files/modules/only-office/only-office.constants.js.map +1 -1
  161. package/server/applications/files/modules/only-office/only-office.controller.js +1 -5
  162. package/server/applications/files/modules/only-office/only-office.controller.js.map +1 -1
  163. package/server/applications/files/modules/only-office/only-office.controller.spec.js +1 -5
  164. package/server/applications/files/modules/only-office/only-office.controller.spec.js.map +1 -1
  165. package/server/applications/files/modules/only-office/only-office.dtos.js +1 -5
  166. package/server/applications/files/modules/only-office/only-office.dtos.js.map +1 -1
  167. package/server/applications/files/modules/only-office/only-office.guard.js +1 -5
  168. package/server/applications/files/modules/only-office/only-office.guard.js.map +1 -1
  169. package/server/applications/files/modules/only-office/only-office.guard.spec.js +1 -5
  170. package/server/applications/files/modules/only-office/only-office.guard.spec.js.map +1 -1
  171. package/server/applications/files/modules/only-office/only-office.interface.js +1 -5
  172. package/server/applications/files/modules/only-office/only-office.interface.js.map +1 -1
  173. package/server/applications/files/modules/only-office/only-office.module.js +1 -5
  174. package/server/applications/files/modules/only-office/only-office.module.js.map +1 -1
  175. package/server/applications/files/modules/only-office/only-office.routes.js +1 -5
  176. package/server/applications/files/modules/only-office/only-office.routes.js.map +1 -1
  177. package/server/applications/files/modules/only-office/only-office.strategy.js +1 -5
  178. package/server/applications/files/modules/only-office/only-office.strategy.js.map +1 -1
  179. package/server/applications/files/schemas/file-content.interface.js +1 -5
  180. package/server/applications/files/schemas/file-content.interface.js.map +1 -1
  181. package/server/applications/files/schemas/file-recent.interface.js +1 -5
  182. package/server/applications/files/schemas/file-recent.interface.js.map +1 -1
  183. package/server/applications/files/schemas/file.interface.js +1 -5
  184. package/server/applications/files/schemas/file.interface.js.map +1 -1
  185. package/server/applications/files/schemas/files-content.schema.js +1 -5
  186. package/server/applications/files/schemas/files-content.schema.js.map +1 -1
  187. package/server/applications/files/schemas/files-recents.schema.js +1 -5
  188. package/server/applications/files/schemas/files-recents.schema.js.map +1 -1
  189. package/server/applications/files/schemas/files.schema.js +1 -5
  190. package/server/applications/files/schemas/files.schema.js.map +1 -1
  191. package/server/applications/files/services/files-content-manager.service.js +45 -16
  192. package/server/applications/files/services/files-content-manager.service.js.map +1 -1
  193. package/server/applications/files/services/files-lock-manager.service.js +53 -18
  194. package/server/applications/files/services/files-lock-manager.service.js.map +1 -1
  195. package/server/applications/files/services/files-lock-manager.service.spec.js +1 -5
  196. package/server/applications/files/services/files-lock-manager.service.spec.js.map +1 -1
  197. package/server/applications/files/services/files-manager.service.js +77 -24
  198. package/server/applications/files/services/files-manager.service.js.map +1 -1
  199. package/server/applications/files/services/files-manager.service.spec.js +1 -5
  200. package/server/applications/files/services/files-manager.service.spec.js.map +1 -1
  201. package/server/applications/files/services/files-methods.service.js +5 -6
  202. package/server/applications/files/services/files-methods.service.js.map +1 -1
  203. package/server/applications/files/services/files-methods.service.spec.js +1 -5
  204. package/server/applications/files/services/files-methods.service.spec.js.map +1 -1
  205. package/server/applications/files/services/files-parser.service.js +13 -8
  206. package/server/applications/files/services/files-parser.service.js.map +1 -1
  207. package/server/applications/files/services/files-parser.service.spec.js +1 -5
  208. package/server/applications/files/services/files-parser.service.spec.js.map +1 -1
  209. package/server/applications/files/services/files-queries.service.js +29 -12
  210. package/server/applications/files/services/files-queries.service.js.map +1 -1
  211. package/server/applications/files/services/files-recents.service.js +1 -5
  212. package/server/applications/files/services/files-recents.service.js.map +1 -1
  213. package/server/applications/files/services/files-recents.service.spec.js +1 -5
  214. package/server/applications/files/services/files-recents.service.spec.js.map +1 -1
  215. package/server/applications/files/services/files-scheduler.service.js +77 -24
  216. package/server/applications/files/services/files-scheduler.service.js.map +1 -1
  217. package/server/applications/files/services/files-search-manager.service.js +9 -7
  218. package/server/applications/files/services/files-search-manager.service.js.map +1 -1
  219. package/server/applications/files/services/files-search-manager.service.spec.js +1 -5
  220. package/server/applications/files/services/files-search-manager.service.spec.js.map +1 -1
  221. package/server/applications/files/services/files-tasks-manager.service.js +77 -24
  222. package/server/applications/files/services/files-tasks-manager.service.js.map +1 -1
  223. package/server/applications/files/services/files-tasks-manager.service.spec.js +1 -5
  224. package/server/applications/files/services/files-tasks-manager.service.spec.js.map +1 -1
  225. package/server/applications/files/utils/doc-textify/adapters/excel.js +1 -5
  226. package/server/applications/files/utils/doc-textify/adapters/excel.js.map +1 -1
  227. package/server/applications/files/utils/doc-textify/adapters/html.js +1 -5
  228. package/server/applications/files/utils/doc-textify/adapters/html.js.map +1 -1
  229. package/server/applications/files/utils/doc-textify/adapters/open-office.js +1 -5
  230. package/server/applications/files/utils/doc-textify/adapters/open-office.js.map +1 -1
  231. package/server/applications/files/utils/doc-textify/adapters/pdf.js +1 -5
  232. package/server/applications/files/utils/doc-textify/adapters/pdf.js.map +1 -1
  233. package/server/applications/files/utils/doc-textify/adapters/power-point.js +1 -5
  234. package/server/applications/files/utils/doc-textify/adapters/power-point.js.map +1 -1
  235. package/server/applications/files/utils/doc-textify/adapters/text.js +1 -5
  236. package/server/applications/files/utils/doc-textify/adapters/text.js.map +1 -1
  237. package/server/applications/files/utils/doc-textify/adapters/word.js +1 -5
  238. package/server/applications/files/utils/doc-textify/adapters/word.js.map +1 -1
  239. package/server/applications/files/utils/doc-textify/doc-textify.js +1 -5
  240. package/server/applications/files/utils/doc-textify/doc-textify.js.map +1 -1
  241. package/server/applications/files/utils/doc-textify/interfaces/doc-textify.interfaces.js +1 -5
  242. package/server/applications/files/utils/doc-textify/interfaces/doc-textify.interfaces.js.map +1 -1
  243. package/server/applications/files/utils/doc-textify/utils/clean.js +1 -5
  244. package/server/applications/files/utils/doc-textify/utils/clean.js.map +1 -1
  245. package/server/applications/files/utils/files-search.js +1 -5
  246. package/server/applications/files/utils/files-search.js.map +1 -1
  247. package/server/applications/files/utils/files-tree.js +1 -5
  248. package/server/applications/files/utils/files-tree.js.map +1 -1
  249. package/server/applications/files/utils/files.js +1 -5
  250. package/server/applications/files/utils/files.js.map +1 -1
  251. package/server/applications/files/utils/send-file.js +1 -5
  252. package/server/applications/files/utils/send-file.js.map +1 -1
  253. package/server/applications/files/utils/unzip-file.js +1 -5
  254. package/server/applications/files/utils/unzip-file.js.map +1 -1
  255. package/server/applications/files/utils/url-file.js +1 -5
  256. package/server/applications/files/utils/url-file.js.map +1 -1
  257. package/server/applications/links/constants/cache.js +1 -5
  258. package/server/applications/links/constants/cache.js.map +1 -1
  259. package/server/applications/links/constants/links.js +1 -5
  260. package/server/applications/links/constants/links.js.map +1 -1
  261. package/server/applications/links/constants/routes.js +1 -5
  262. package/server/applications/links/constants/routes.js.map +1 -1
  263. package/server/applications/links/dto/create-or-update-link.dto.js +1 -5
  264. package/server/applications/links/dto/create-or-update-link.dto.js.map +1 -1
  265. package/server/applications/links/interfaces/link-guest.interface.js +1 -5
  266. package/server/applications/links/interfaces/link-guest.interface.js.map +1 -1
  267. package/server/applications/links/interfaces/link-space.interface.js +1 -5
  268. package/server/applications/links/interfaces/link-space.interface.js.map +1 -1
  269. package/server/applications/links/links.controller.js +1 -5
  270. package/server/applications/links/links.controller.js.map +1 -1
  271. package/server/applications/links/links.controller.spec.js +1 -5
  272. package/server/applications/links/links.controller.spec.js.map +1 -1
  273. package/server/applications/links/schemas/link.interface.js +1 -5
  274. package/server/applications/links/schemas/link.interface.js.map +1 -1
  275. package/server/applications/links/schemas/links.schema.js +1 -5
  276. package/server/applications/links/schemas/links.schema.js.map +1 -1
  277. package/server/applications/links/services/links-manager.service.js +55 -20
  278. package/server/applications/links/services/links-manager.service.js.map +1 -1
  279. package/server/applications/links/services/links-manager.service.spec.js +3 -7
  280. package/server/applications/links/services/links-manager.service.spec.js.map +1 -1
  281. package/server/applications/links/services/links-queries.service.js +1 -5
  282. package/server/applications/links/services/links-queries.service.js.map +1 -1
  283. package/server/applications/notifications/constants/notifications.js +1 -5
  284. package/server/applications/notifications/constants/notifications.js.map +1 -1
  285. package/server/applications/notifications/constants/routes.js +1 -5
  286. package/server/applications/notifications/constants/routes.js.map +1 -1
  287. package/server/applications/notifications/constants/websocket.js +1 -5
  288. package/server/applications/notifications/constants/websocket.js.map +1 -1
  289. package/server/applications/notifications/i18n/de.js +1 -9
  290. package/server/applications/notifications/i18n/de.js.map +1 -1
  291. package/server/applications/notifications/i18n/es.js +1 -5
  292. package/server/applications/notifications/i18n/es.js.map +1 -1
  293. package/server/applications/notifications/i18n/fr.js +1 -5
  294. package/server/applications/notifications/i18n/fr.js.map +1 -1
  295. package/server/applications/notifications/i18n/hi.js +1 -5
  296. package/server/applications/notifications/i18n/hi.js.map +1 -1
  297. package/server/applications/notifications/i18n/index.js +1 -5
  298. package/server/applications/notifications/i18n/index.js.map +1 -1
  299. package/server/applications/notifications/i18n/it.js +1 -5
  300. package/server/applications/notifications/i18n/it.js.map +1 -1
  301. package/server/applications/notifications/i18n/ja.js +1 -5
  302. package/server/applications/notifications/i18n/ja.js.map +1 -1
  303. package/server/applications/notifications/i18n/ko.js +1 -5
  304. package/server/applications/notifications/i18n/ko.js.map +1 -1
  305. package/server/applications/notifications/i18n/pl.js +1 -5
  306. package/server/applications/notifications/i18n/pl.js.map +1 -1
  307. package/server/applications/notifications/i18n/pt.js +1 -5
  308. package/server/applications/notifications/i18n/pt.js.map +1 -1
  309. package/server/applications/notifications/i18n/pt_br.js +1 -5
  310. package/server/applications/notifications/i18n/pt_br.js.map +1 -1
  311. package/server/applications/notifications/i18n/ru.js +1 -5
  312. package/server/applications/notifications/i18n/ru.js.map +1 -1
  313. package/server/applications/notifications/i18n/tr.js +1 -5
  314. package/server/applications/notifications/i18n/tr.js.map +1 -1
  315. package/server/applications/notifications/i18n/zh.js +1 -5
  316. package/server/applications/notifications/i18n/zh.js.map +1 -1
  317. package/server/applications/notifications/interfaces/notification-properties.interface.js +1 -5
  318. package/server/applications/notifications/interfaces/notification-properties.interface.js.map +1 -1
  319. package/server/applications/notifications/interfaces/user-mail-notification.interface.js +1 -5
  320. package/server/applications/notifications/interfaces/user-mail-notification.interface.js.map +1 -1
  321. package/server/applications/notifications/mails/models.js +1 -5
  322. package/server/applications/notifications/mails/models.js.map +1 -1
  323. package/server/applications/notifications/mails/templates.js +1 -5
  324. package/server/applications/notifications/mails/templates.js.map +1 -1
  325. package/server/applications/notifications/mails/urls.js +1 -5
  326. package/server/applications/notifications/mails/urls.js.map +1 -1
  327. package/server/applications/notifications/notifications.controller.js +1 -5
  328. package/server/applications/notifications/notifications.controller.js.map +1 -1
  329. package/server/applications/notifications/notifications.controller.spec.js +1 -5
  330. package/server/applications/notifications/notifications.controller.spec.js.map +1 -1
  331. package/server/applications/notifications/notifications.gateway.js +1 -5
  332. package/server/applications/notifications/notifications.gateway.js.map +1 -1
  333. package/server/applications/notifications/notifications.module.js +1 -5
  334. package/server/applications/notifications/notifications.module.js.map +1 -1
  335. package/server/applications/notifications/schemas/notification.interface.js +1 -5
  336. package/server/applications/notifications/schemas/notification.interface.js.map +1 -1
  337. package/server/applications/notifications/schemas/notifications.schema.js +1 -5
  338. package/server/applications/notifications/schemas/notifications.schema.js.map +1 -1
  339. package/server/applications/notifications/services/notifications-manager.service.js +25 -11
  340. package/server/applications/notifications/services/notifications-manager.service.js.map +1 -1
  341. package/server/applications/notifications/services/notifications-manager.service.spec.js +20 -11
  342. package/server/applications/notifications/services/notifications-manager.service.spec.js.map +1 -1
  343. package/server/applications/notifications/services/notifications-queries.service.js +1 -5
  344. package/server/applications/notifications/services/notifications-queries.service.js.map +1 -1
  345. package/server/applications/shares/constants/routes.js +1 -5
  346. package/server/applications/shares/constants/routes.js.map +1 -1
  347. package/server/applications/shares/constants/shares.js +1 -5
  348. package/server/applications/shares/constants/shares.js.map +1 -1
  349. package/server/applications/shares/dto/create-or-update-share.dto.js +1 -5
  350. package/server/applications/shares/dto/create-or-update-share.dto.js.map +1 -1
  351. package/server/applications/shares/interfaces/share-child.interface.js +1 -5
  352. package/server/applications/shares/interfaces/share-child.interface.js.map +1 -1
  353. package/server/applications/shares/interfaces/share-env.interface.js +1 -5
  354. package/server/applications/shares/interfaces/share-env.interface.js.map +1 -1
  355. package/server/applications/shares/interfaces/share-file.interface.js +1 -5
  356. package/server/applications/shares/interfaces/share-file.interface.js.map +1 -1
  357. package/server/applications/shares/interfaces/share-link.interface.js +1 -5
  358. package/server/applications/shares/interfaces/share-link.interface.js.map +1 -1
  359. package/server/applications/shares/interfaces/share-props.interface.js +1 -5
  360. package/server/applications/shares/interfaces/share-props.interface.js.map +1 -1
  361. package/server/applications/shares/models/share-child.model.js +1 -5
  362. package/server/applications/shares/models/share-child.model.js.map +1 -1
  363. package/server/applications/shares/schemas/share-members.interface.js +1 -5
  364. package/server/applications/shares/schemas/share-members.interface.js.map +1 -1
  365. package/server/applications/shares/schemas/share.interface.js +1 -5
  366. package/server/applications/shares/schemas/share.interface.js.map +1 -1
  367. package/server/applications/shares/schemas/shares-members.schema.js +1 -5
  368. package/server/applications/shares/schemas/shares-members.schema.js.map +1 -1
  369. package/server/applications/shares/schemas/shares.schema.js +1 -5
  370. package/server/applications/shares/schemas/shares.schema.js.map +1 -1
  371. package/server/applications/shares/services/shares-manager.service.js +214 -68
  372. package/server/applications/shares/services/shares-manager.service.js.map +1 -1
  373. package/server/applications/shares/services/shares-manager.service.spec.js +1 -5
  374. package/server/applications/shares/services/shares-manager.service.spec.js.map +1 -1
  375. package/server/applications/shares/services/shares-queries.service.js +49 -17
  376. package/server/applications/shares/services/shares-queries.service.js.map +1 -1
  377. package/server/applications/shares/shares.controller.js +1 -5
  378. package/server/applications/shares/shares.controller.js.map +1 -1
  379. package/server/applications/shares/shares.controller.spec.js +1 -5
  380. package/server/applications/shares/shares.controller.spec.js.map +1 -1
  381. package/server/applications/shares/shares.module.js +1 -5
  382. package/server/applications/shares/shares.module.js.map +1 -1
  383. package/server/applications/spaces/constants/cache.js +1 -5
  384. package/server/applications/spaces/constants/cache.js.map +1 -1
  385. package/server/applications/spaces/constants/routes.js +1 -5
  386. package/server/applications/spaces/constants/routes.js.map +1 -1
  387. package/server/applications/spaces/constants/spaces.js +1 -5
  388. package/server/applications/spaces/constants/spaces.js.map +1 -1
  389. package/server/applications/spaces/decorators/space-override-permission.decorator.js +1 -5
  390. package/server/applications/spaces/decorators/space-override-permission.decorator.js.map +1 -1
  391. package/server/applications/spaces/decorators/space-skip-guard.decorator.js +1 -5
  392. package/server/applications/spaces/decorators/space-skip-guard.decorator.js.map +1 -1
  393. package/server/applications/spaces/decorators/space-skip-permissions.decorator.js +1 -5
  394. package/server/applications/spaces/decorators/space-skip-permissions.decorator.js.map +1 -1
  395. package/server/applications/spaces/decorators/space.decorator.js +1 -5
  396. package/server/applications/spaces/decorators/space.decorator.js.map +1 -1
  397. package/server/applications/spaces/dto/create-or-update-space.dto.js +1 -5
  398. package/server/applications/spaces/dto/create-or-update-space.dto.js.map +1 -1
  399. package/server/applications/spaces/dto/delete-space.dto.js +1 -5
  400. package/server/applications/spaces/dto/delete-space.dto.js.map +1 -1
  401. package/server/applications/spaces/dto/search-space.dto.js +1 -5
  402. package/server/applications/spaces/dto/search-space.dto.js.map +1 -1
  403. package/server/applications/spaces/dto/space-roots.dto.js +1 -5
  404. package/server/applications/spaces/dto/space-roots.dto.js.map +1 -1
  405. package/server/applications/spaces/guards/space.guard.js +17 -9
  406. package/server/applications/spaces/guards/space.guard.js.map +1 -1
  407. package/server/applications/spaces/guards/space.guard.spec.js +1 -5
  408. package/server/applications/spaces/guards/space.guard.spec.js.map +1 -1
  409. package/server/applications/spaces/interfaces/space-diff.interface.js +1 -5
  410. package/server/applications/spaces/interfaces/space-diff.interface.js.map +1 -1
  411. package/server/applications/spaces/interfaces/space-files.interface.js +1 -5
  412. package/server/applications/spaces/interfaces/space-files.interface.js.map +1 -1
  413. package/server/applications/spaces/interfaces/space-request.interface.js +1 -5
  414. package/server/applications/spaces/interfaces/space-request.interface.js.map +1 -1
  415. package/server/applications/spaces/interfaces/space-trash.interface.js +1 -5
  416. package/server/applications/spaces/interfaces/space-trash.interface.js.map +1 -1
  417. package/server/applications/spaces/models/space-env.model.js +1 -5
  418. package/server/applications/spaces/models/space-env.model.js.map +1 -1
  419. package/server/applications/spaces/models/space-props.model.js +1 -5
  420. package/server/applications/spaces/models/space-props.model.js.map +1 -1
  421. package/server/applications/spaces/models/space-root-props.model.js +1 -5
  422. package/server/applications/spaces/models/space-root-props.model.js.map +1 -1
  423. package/server/applications/spaces/models/space.model.js +1 -5
  424. package/server/applications/spaces/models/space.model.js.map +1 -1
  425. package/server/applications/spaces/schemas/space-members.interface.js +1 -5
  426. package/server/applications/spaces/schemas/space-members.interface.js.map +1 -1
  427. package/server/applications/spaces/schemas/space-root.interface.js +1 -5
  428. package/server/applications/spaces/schemas/space-root.interface.js.map +1 -1
  429. package/server/applications/spaces/schemas/space.interface.js +1 -5
  430. package/server/applications/spaces/schemas/space.interface.js.map +1 -1
  431. package/server/applications/spaces/schemas/spaces-members.schema.js +1 -5
  432. package/server/applications/spaces/schemas/spaces-members.schema.js.map +1 -1
  433. package/server/applications/spaces/schemas/spaces-roots.schema.js +1 -5
  434. package/server/applications/spaces/schemas/spaces-roots.schema.js.map +1 -1
  435. package/server/applications/spaces/schemas/spaces.schema.js +1 -5
  436. package/server/applications/spaces/schemas/spaces.schema.js.map +1 -1
  437. package/server/applications/spaces/services/spaces-browser.service.js +77 -24
  438. package/server/applications/spaces/services/spaces-browser.service.js.map +1 -1
  439. package/server/applications/spaces/services/spaces-browser.service.spec.js +1 -5
  440. package/server/applications/spaces/services/spaces-browser.service.spec.js.map +1 -1
  441. package/server/applications/spaces/services/spaces-manager.service.js +193 -53
  442. package/server/applications/spaces/services/spaces-manager.service.js.map +1 -1
  443. package/server/applications/spaces/services/spaces-manager.service.spec.js +1 -5
  444. package/server/applications/spaces/services/spaces-manager.service.spec.js.map +1 -1
  445. package/server/applications/spaces/services/spaces-queries.service.js +65 -21
  446. package/server/applications/spaces/services/spaces-queries.service.js.map +1 -1
  447. package/server/applications/spaces/services/spaces-scheduler.service.js +49 -17
  448. package/server/applications/spaces/services/spaces-scheduler.service.js.map +1 -1
  449. package/server/applications/spaces/spaces.controller.js +1 -5
  450. package/server/applications/spaces/spaces.controller.js.map +1 -1
  451. package/server/applications/spaces/spaces.controller.spec.js +1 -5
  452. package/server/applications/spaces/spaces.controller.spec.js.map +1 -1
  453. package/server/applications/spaces/spaces.module.js +1 -5
  454. package/server/applications/spaces/spaces.module.js.map +1 -1
  455. package/server/applications/spaces/utils/paths.js +1 -5
  456. package/server/applications/spaces/utils/paths.js.map +1 -1
  457. package/server/applications/spaces/utils/permissions.js +1 -5
  458. package/server/applications/spaces/utils/permissions.js.map +1 -1
  459. package/server/applications/spaces/utils/routes.js +1 -5
  460. package/server/applications/spaces/utils/routes.js.map +1 -1
  461. package/server/applications/sync/constants/auth.js +1 -5
  462. package/server/applications/sync/constants/auth.js.map +1 -1
  463. package/server/applications/sync/constants/routes.js +6 -5
  464. package/server/applications/sync/constants/routes.js.map +1 -1
  465. package/server/applications/sync/constants/store.js +1 -9
  466. package/server/applications/sync/constants/store.js.map +1 -1
  467. package/server/applications/sync/constants/sync.js +2 -6
  468. package/server/applications/sync/constants/sync.js.map +1 -1
  469. package/server/applications/sync/decorators/sync-context.decorator.js +1 -5
  470. package/server/applications/sync/decorators/sync-context.decorator.js.map +1 -1
  471. package/server/applications/sync/decorators/sync-environment.decorator.js +1 -5
  472. package/server/applications/sync/decorators/sync-environment.decorator.js.map +1 -1
  473. package/server/applications/sync/dtos/sync-client-auth.dto.js +12 -8
  474. package/server/applications/sync/dtos/sync-client-auth.dto.js.map +1 -1
  475. package/server/applications/sync/dtos/sync-client-info.dto.js +49 -0
  476. package/server/applications/sync/dtos/sync-client-info.dto.js.map +1 -0
  477. package/server/applications/sync/dtos/sync-client-registration.dto.js +34 -11
  478. package/server/applications/sync/dtos/sync-client-registration.dto.js.map +1 -1
  479. package/server/applications/sync/dtos/sync-operations.dto.js +1 -5
  480. package/server/applications/sync/dtos/sync-operations.dto.js.map +1 -1
  481. package/server/applications/sync/dtos/sync-path.dto.js +1 -5
  482. package/server/applications/sync/dtos/sync-path.dto.js.map +1 -1
  483. package/server/applications/sync/dtos/sync-upload.dto.js +1 -5
  484. package/server/applications/sync/dtos/sync-upload.dto.js.map +1 -1
  485. package/server/applications/sync/interceptors/sync-diff-gzip-body.interceptor.js +1 -5
  486. package/server/applications/sync/interceptors/sync-diff-gzip-body.interceptor.js.map +1 -1
  487. package/server/applications/sync/interceptors/sync-diff-gzip-body.interceptor.spec.js +1 -5
  488. package/server/applications/sync/interceptors/sync-diff-gzip-body.interceptor.spec.js.map +1 -1
  489. package/server/applications/sync/interfaces/store-manifest.interface.js +1 -5
  490. package/server/applications/sync/interfaces/store-manifest.interface.js.map +1 -1
  491. package/server/applications/sync/interfaces/sync-client-auth.interface.js +1 -25
  492. package/server/applications/sync/interfaces/sync-client-auth.interface.js.map +1 -1
  493. package/server/applications/sync/interfaces/sync-client-paths.interface.js +1 -5
  494. package/server/applications/sync/interfaces/sync-client-paths.interface.js.map +1 -1
  495. package/server/applications/sync/interfaces/sync-client.interface.js +1 -5
  496. package/server/applications/sync/interfaces/sync-client.interface.js.map +1 -1
  497. package/server/applications/sync/interfaces/sync-diff.interface.js +1 -5
  498. package/server/applications/sync/interfaces/sync-diff.interface.js.map +1 -1
  499. package/server/applications/sync/interfaces/sync-path.interface.js +1 -5
  500. package/server/applications/sync/interfaces/sync-path.interface.js.map +1 -1
  501. package/server/applications/sync/schemas/sync-client.interface.js +1 -5
  502. package/server/applications/sync/schemas/sync-client.interface.js.map +1 -1
  503. package/server/applications/sync/schemas/sync-clients.schema.js +1 -5
  504. package/server/applications/sync/schemas/sync-clients.schema.js.map +1 -1
  505. package/server/applications/sync/schemas/sync-path.interface.js +1 -5
  506. package/server/applications/sync/schemas/sync-path.interface.js.map +1 -1
  507. package/server/applications/sync/schemas/sync-paths.schema.js +1 -5
  508. package/server/applications/sync/schemas/sync-paths.schema.js.map +1 -1
  509. package/server/applications/sync/services/sync-clients-manager.service.js +108 -44
  510. package/server/applications/sync/services/sync-clients-manager.service.js.map +1 -1
  511. package/server/applications/sync/services/sync-clients-manager.service.spec.js +14 -17
  512. package/server/applications/sync/services/sync-clients-manager.service.spec.js.map +1 -1
  513. package/server/applications/sync/services/sync-manager.service.js +29 -12
  514. package/server/applications/sync/services/sync-manager.service.js.map +1 -1
  515. package/server/applications/sync/services/sync-manager.service.spec.js +1 -5
  516. package/server/applications/sync/services/sync-manager.service.spec.js.map +1 -1
  517. package/server/applications/sync/services/sync-paths-manager.service.js +27 -17
  518. package/server/applications/sync/services/sync-paths-manager.service.js.map +1 -1
  519. package/server/applications/sync/services/sync-paths-manager.service.spec.js +11 -15
  520. package/server/applications/sync/services/sync-paths-manager.service.spec.js.map +1 -1
  521. package/server/applications/sync/services/sync-queries.service.js +1 -5
  522. package/server/applications/sync/services/sync-queries.service.js.map +1 -1
  523. package/server/applications/sync/sync.config.js +1 -5
  524. package/server/applications/sync/sync.config.js.map +1 -1
  525. package/server/applications/sync/sync.controller.js +21 -6
  526. package/server/applications/sync/sync.controller.js.map +1 -1
  527. package/server/applications/sync/sync.controller.spec.js +1 -5
  528. package/server/applications/sync/sync.controller.spec.js.map +1 -1
  529. package/server/applications/sync/sync.module.js +1 -5
  530. package/server/applications/sync/sync.module.js.map +1 -1
  531. package/server/applications/sync/utils/functions.js +1 -5
  532. package/server/applications/sync/utils/functions.js.map +1 -1
  533. package/server/applications/sync/utils/normalizedMap.js +1 -5
  534. package/server/applications/sync/utils/normalizedMap.js.map +1 -1
  535. package/server/applications/sync/utils/routes.js +1 -5
  536. package/server/applications/sync/utils/routes.js.map +1 -1
  537. package/server/applications/users/admin-users.controller.js +2 -6
  538. package/server/applications/users/admin-users.controller.js.map +1 -1
  539. package/server/applications/users/admin-users.controller.spec.js +6 -10
  540. package/server/applications/users/admin-users.controller.spec.js.map +1 -1
  541. package/server/applications/users/constants/group.js +1 -5
  542. package/server/applications/users/constants/group.js.map +1 -1
  543. package/server/applications/users/constants/member.js +1 -5
  544. package/server/applications/users/constants/member.js.map +1 -1
  545. package/server/applications/users/constants/routes.js +1 -5
  546. package/server/applications/users/constants/routes.js.map +1 -1
  547. package/server/applications/users/constants/user.js +1 -5
  548. package/server/applications/users/constants/user.js.map +1 -1
  549. package/server/applications/users/constants/websocket.js +1 -5
  550. package/server/applications/users/constants/websocket.js.map +1 -1
  551. package/server/applications/users/decorators/permissions.decorator.js +1 -5
  552. package/server/applications/users/decorators/permissions.decorator.js.map +1 -1
  553. package/server/applications/users/decorators/roles.decorator.js +1 -5
  554. package/server/applications/users/decorators/roles.decorator.js.map +1 -1
  555. package/server/applications/users/decorators/user.decorator.js +1 -5
  556. package/server/applications/users/decorators/user.decorator.js.map +1 -1
  557. package/server/applications/users/dto/create-or-update-group.dto.js +1 -5
  558. package/server/applications/users/dto/create-or-update-group.dto.js.map +1 -1
  559. package/server/applications/users/dto/create-or-update-user.dto.js +1 -5
  560. package/server/applications/users/dto/create-or-update-user.dto.js.map +1 -1
  561. package/server/applications/users/dto/delete-user.dto.js +1 -5
  562. package/server/applications/users/dto/delete-user.dto.js.map +1 -1
  563. package/server/applications/users/dto/search-members.dto.js +1 -5
  564. package/server/applications/users/dto/search-members.dto.js.map +1 -1
  565. package/server/applications/users/dto/user-properties.dto.js +1 -5
  566. package/server/applications/users/dto/user-properties.dto.js.map +1 -1
  567. package/server/applications/users/guards/permissions.guard.js +1 -5
  568. package/server/applications/users/guards/permissions.guard.js.map +1 -1
  569. package/server/applications/users/guards/permissions.guard.spec.js +1 -5
  570. package/server/applications/users/guards/permissions.guard.spec.js.map +1 -1
  571. package/server/applications/users/guards/roles.guard.js +1 -5
  572. package/server/applications/users/guards/roles.guard.js.map +1 -1
  573. package/server/applications/users/guards/roles.guard.spec.js +1 -5
  574. package/server/applications/users/guards/roles.guard.spec.js.map +1 -1
  575. package/server/applications/users/interfaces/admin-group.interface.js +1 -5
  576. package/server/applications/users/interfaces/admin-group.interface.js.map +1 -1
  577. package/server/applications/users/interfaces/admin-user.interface.js +1 -5
  578. package/server/applications/users/interfaces/admin-user.interface.js.map +1 -1
  579. package/server/applications/users/interfaces/group-browse.interface.js +1 -5
  580. package/server/applications/users/interfaces/group-browse.interface.js.map +1 -1
  581. package/server/applications/users/interfaces/group-member.js +1 -5
  582. package/server/applications/users/interfaces/group-member.js.map +1 -1
  583. package/server/applications/users/interfaces/guest-user.interface.js +1 -5
  584. package/server/applications/users/interfaces/guest-user.interface.js.map +1 -1
  585. package/server/applications/users/interfaces/member.interface.js +1 -5
  586. package/server/applications/users/interfaces/member.interface.js.map +1 -1
  587. package/server/applications/users/interfaces/owner.interface.js +1 -5
  588. package/server/applications/users/interfaces/owner.interface.js.map +1 -1
  589. package/server/applications/users/interfaces/user-secrets.interface.js +1 -5
  590. package/server/applications/users/interfaces/user-secrets.interface.js.map +1 -1
  591. package/server/applications/users/interfaces/websocket.interface.js +1 -5
  592. package/server/applications/users/interfaces/websocket.interface.js.map +1 -1
  593. package/server/applications/users/models/user.model.js +1 -5
  594. package/server/applications/users/models/user.model.js.map +1 -1
  595. package/server/applications/users/schemas/group.interface.js +1 -5
  596. package/server/applications/users/schemas/group.interface.js.map +1 -1
  597. package/server/applications/users/schemas/groups.schema.js +1 -5
  598. package/server/applications/users/schemas/groups.schema.js.map +1 -1
  599. package/server/applications/users/schemas/user-group.interface.js +1 -5
  600. package/server/applications/users/schemas/user-group.interface.js.map +1 -1
  601. package/server/applications/users/schemas/user.interface.js +1 -5
  602. package/server/applications/users/schemas/user.interface.js.map +1 -1
  603. package/server/applications/users/schemas/users-groups.schema.js +1 -5
  604. package/server/applications/users/schemas/users-groups.schema.js.map +1 -1
  605. package/server/applications/users/schemas/users-guests.schema.js +1 -5
  606. package/server/applications/users/schemas/users-guests.schema.js.map +1 -1
  607. package/server/applications/users/schemas/users.schema.js +1 -5
  608. package/server/applications/users/schemas/users.schema.js.map +1 -1
  609. package/server/applications/users/services/admin-users-manager.service.js +67 -23
  610. package/server/applications/users/services/admin-users-manager.service.js.map +1 -1
  611. package/server/applications/users/services/admin-users-manager.service.spec.js +3 -7
  612. package/server/applications/users/services/admin-users-manager.service.spec.js.map +1 -1
  613. package/server/applications/users/services/admin-users-queries.service.js +65 -21
  614. package/server/applications/users/services/admin-users-queries.service.js.map +1 -1
  615. package/server/applications/users/services/users-manager.service.js +81 -25
  616. package/server/applications/users/services/users-manager.service.js.map +1 -1
  617. package/server/applications/users/services/users-manager.service.spec.js +14 -12
  618. package/server/applications/users/services/users-manager.service.spec.js.map +1 -1
  619. package/server/applications/users/services/users-queries.service.js +49 -17
  620. package/server/applications/users/services/users-queries.service.js.map +1 -1
  621. package/server/applications/users/users.controller.js +2 -6
  622. package/server/applications/users/users.controller.js.map +1 -1
  623. package/server/applications/users/users.controller.spec.js +5 -9
  624. package/server/applications/users/users.controller.spec.js.map +1 -1
  625. package/server/applications/users/users.e2e-spec.js +3 -7
  626. package/server/applications/users/users.e2e-spec.js.map +1 -1
  627. package/server/applications/users/users.gateway.js +29 -12
  628. package/server/applications/users/users.gateway.js.map +1 -1
  629. package/server/applications/users/users.gateway.spec.js +1 -5
  630. package/server/applications/users/users.gateway.spec.js.map +1 -1
  631. package/server/applications/users/users.module.js +1 -5
  632. package/server/applications/users/users.module.js.map +1 -1
  633. package/server/applications/users/utils/avatar.js +1 -5
  634. package/server/applications/users/utils/avatar.js.map +1 -1
  635. package/server/applications/users/utils/test.js +1 -5
  636. package/server/applications/users/utils/test.js.map +1 -1
  637. package/server/applications/webdav/constants/routes.js +1 -5
  638. package/server/applications/webdav/constants/routes.js.map +1 -1
  639. package/server/applications/webdav/constants/webdav.js +1 -5
  640. package/server/applications/webdav/constants/webdav.js.map +1 -1
  641. package/server/applications/webdav/decorators/if-header.decorator.js +1 -5
  642. package/server/applications/webdav/decorators/if-header.decorator.js.map +1 -1
  643. package/server/applications/webdav/decorators/webdav-context.decorator.js +1 -5
  644. package/server/applications/webdav/decorators/webdav-context.decorator.js.map +1 -1
  645. package/server/applications/webdav/filters/webdav.filter.js +1 -5
  646. package/server/applications/webdav/filters/webdav.filter.js.map +1 -1
  647. package/server/applications/webdav/filters/webdav.filter.spec.js +1 -5
  648. package/server/applications/webdav/filters/webdav.filter.spec.js.map +1 -1
  649. package/server/applications/webdav/guards/webdav-protocol.guard.js +54 -20
  650. package/server/applications/webdav/guards/webdav-protocol.guard.js.map +1 -1
  651. package/server/applications/webdav/guards/webdav-protocol.guard.spec.js +54 -0
  652. package/server/applications/webdav/guards/webdav-protocol.guard.spec.js.map +1 -1
  653. package/server/applications/webdav/interfaces/if-header.interface.js +1 -5
  654. package/server/applications/webdav/interfaces/if-header.interface.js.map +1 -1
  655. package/server/applications/webdav/interfaces/webdav.interface.js +1 -5
  656. package/server/applications/webdav/interfaces/webdav.interface.js.map +1 -1
  657. package/server/applications/webdav/models/webdav-file.model.js +1 -5
  658. package/server/applications/webdav/models/webdav-file.model.js.map +1 -1
  659. package/server/applications/webdav/services/webdav-methods.service.js +74 -26
  660. package/server/applications/webdav/services/webdav-methods.service.js.map +1 -1
  661. package/server/applications/webdav/services/webdav-methods.service.spec.js +15 -18
  662. package/server/applications/webdav/services/webdav-methods.service.spec.js.map +1 -1
  663. package/server/applications/webdav/services/webdav-spaces.service.js +17 -9
  664. package/server/applications/webdav/services/webdav-spaces.service.js.map +1 -1
  665. package/server/applications/webdav/services/webdav-spaces.service.spec.js +1 -5
  666. package/server/applications/webdav/services/webdav-spaces.service.spec.js.map +1 -1
  667. package/server/applications/webdav/utils/bootstrap.js +1 -5
  668. package/server/applications/webdav/utils/bootstrap.js.map +1 -1
  669. package/server/applications/webdav/utils/if-header.js +1 -5
  670. package/server/applications/webdav/utils/if-header.js.map +1 -1
  671. package/server/applications/webdav/utils/routes.js +1 -5
  672. package/server/applications/webdav/utils/routes.js.map +1 -1
  673. package/server/applications/webdav/utils/webdav.js +1 -5
  674. package/server/applications/webdav/utils/webdav.js.map +1 -1
  675. package/server/applications/webdav/utils/xml.js +1 -5
  676. package/server/applications/webdav/utils/xml.js.map +1 -1
  677. package/server/applications/webdav/webdav.controller.js +1 -5
  678. package/server/applications/webdav/webdav.controller.js.map +1 -1
  679. package/server/applications/webdav/webdav.controller.spec.js +1 -5
  680. package/server/applications/webdav/webdav.controller.spec.js.map +1 -1
  681. package/server/applications/webdav/webdav.e2e-spec.js +1 -5
  682. package/server/applications/webdav/webdav.e2e-spec.js.map +1 -1
  683. package/server/applications/webdav/webdav.module.js +1 -5
  684. package/server/applications/webdav/webdav.module.js.map +1 -1
  685. package/server/authentication/auth.config.js +23 -123
  686. package/server/authentication/auth.config.js.map +1 -1
  687. package/server/authentication/auth.controller.js +27 -21
  688. package/server/authentication/auth.controller.js.map +1 -1
  689. package/server/authentication/auth.controller.spec.js +6 -10
  690. package/server/authentication/auth.controller.spec.js.map +1 -1
  691. package/server/authentication/auth.e2e-spec.js +1 -5
  692. package/server/authentication/auth.e2e-spec.js.map +1 -1
  693. package/server/authentication/auth.module.js +17 -20
  694. package/server/authentication/auth.module.js.map +1 -1
  695. package/server/authentication/{services/auth-manager.service.js → auth.service.js} +41 -18
  696. package/server/authentication/auth.service.js.map +1 -0
  697. package/server/authentication/{services/auth-manager.service.spec.js → auth.service.spec.js} +6 -10
  698. package/server/authentication/auth.service.spec.js.map +1 -0
  699. package/server/authentication/constants/auth.js +1 -5
  700. package/server/authentication/constants/auth.js.map +1 -1
  701. package/server/authentication/constants/routes.js +41 -30
  702. package/server/authentication/constants/routes.js.map +1 -1
  703. package/server/authentication/constants/scope.js +2 -5
  704. package/server/authentication/constants/scope.js.map +1 -1
  705. package/server/authentication/decorators/auth-token-optional.decorator.js +1 -5
  706. package/server/authentication/decorators/auth-token-optional.decorator.js.map +1 -1
  707. package/server/authentication/decorators/auth-token-skip.decorator.js +1 -5
  708. package/server/authentication/decorators/auth-token-skip.decorator.js.map +1 -1
  709. package/server/authentication/dto/login-response.dto.js +1 -10
  710. package/server/authentication/dto/login-response.dto.js.map +1 -1
  711. package/server/authentication/dto/token-response.dto.js +1 -5
  712. package/server/authentication/dto/token-response.dto.js.map +1 -1
  713. package/server/authentication/guards/auth-anonymous.guard.js +1 -5
  714. package/server/authentication/guards/auth-anonymous.guard.js.map +1 -1
  715. package/server/authentication/guards/auth-anonymous.guard.spec.js +1 -5
  716. package/server/authentication/guards/auth-anonymous.guard.spec.js.map +1 -1
  717. package/server/authentication/guards/auth-anonymous.strategy.js +1 -5
  718. package/server/authentication/guards/auth-anonymous.strategy.js.map +1 -1
  719. package/server/authentication/guards/auth-basic.guard.js +1 -5
  720. package/server/authentication/guards/auth-basic.guard.js.map +1 -1
  721. package/server/authentication/guards/auth-basic.guard.spec.js +13 -14
  722. package/server/authentication/guards/auth-basic.guard.spec.js.map +1 -1
  723. package/server/authentication/guards/auth-basic.strategy.js +10 -11
  724. package/server/authentication/guards/auth-basic.strategy.js.map +1 -1
  725. package/server/authentication/guards/auth-digest.guard.js +1 -5
  726. package/server/authentication/guards/auth-digest.guard.js.map +1 -1
  727. package/server/authentication/guards/auth-digest.strategy.js +1 -5
  728. package/server/authentication/guards/auth-digest.strategy.js.map +1 -1
  729. package/server/authentication/guards/auth-local.guard.js +1 -5
  730. package/server/authentication/guards/auth-local.guard.js.map +1 -1
  731. package/server/authentication/guards/auth-local.guard.spec.js +9 -13
  732. package/server/authentication/guards/auth-local.guard.spec.js.map +1 -1
  733. package/server/authentication/guards/auth-local.strategy.js +6 -10
  734. package/server/authentication/guards/auth-local.strategy.js.map +1 -1
  735. package/server/authentication/guards/auth-token-access.guard.js +1 -5
  736. package/server/authentication/guards/auth-token-access.guard.js.map +1 -1
  737. package/server/authentication/guards/auth-token-access.guard.spec.js +3 -7
  738. package/server/authentication/guards/auth-token-access.guard.spec.js.map +1 -1
  739. package/server/authentication/guards/auth-token-access.strategy.js +3 -7
  740. package/server/authentication/guards/auth-token-access.strategy.js.map +1 -1
  741. package/server/authentication/guards/auth-token-refresh.guard.js +1 -5
  742. package/server/authentication/guards/auth-token-refresh.guard.js.map +1 -1
  743. package/server/authentication/guards/auth-token-refresh.guard.spec.js +3 -7
  744. package/server/authentication/guards/auth-token-refresh.guard.spec.js.map +1 -1
  745. package/server/authentication/guards/auth-token-refresh.strategy.js +3 -7
  746. package/server/authentication/guards/auth-token-refresh.strategy.js.map +1 -1
  747. package/server/authentication/guards/implementations/http-basic.strategy.js +1 -5
  748. package/server/authentication/guards/implementations/http-basic.strategy.js.map +1 -1
  749. package/server/authentication/guards/implementations/http-digest.strategy.js +1 -5
  750. package/server/authentication/guards/implementations/http-digest.strategy.js.map +1 -1
  751. package/server/authentication/interfaces/auth-request.interface.js +1 -5
  752. package/server/authentication/interfaces/auth-request.interface.js.map +1 -1
  753. package/server/authentication/interfaces/jwt-payload.interface.js +1 -5
  754. package/server/authentication/interfaces/jwt-payload.interface.js.map +1 -1
  755. package/server/authentication/interfaces/token.interface.js +1 -5
  756. package/server/authentication/interfaces/token.interface.js.map +1 -1
  757. package/server/authentication/providers/auth-providers.constants.js +18 -0
  758. package/server/authentication/providers/auth-providers.constants.js.map +1 -0
  759. package/server/authentication/providers/auth-providers.models.js +14 -0
  760. package/server/authentication/providers/auth-providers.models.js.map +1 -0
  761. package/server/authentication/providers/auth-providers.utils.js +42 -0
  762. package/server/authentication/providers/auth-providers.utils.js.map +1 -0
  763. package/server/authentication/providers/ldap/auth-ldap.config.js +143 -0
  764. package/server/authentication/providers/ldap/auth-ldap.config.js.map +1 -0
  765. package/server/authentication/{constants/auth-ldap.js → providers/ldap/auth-ldap.constants.js} +12 -6
  766. package/server/authentication/providers/ldap/auth-ldap.constants.js.map +1 -0
  767. package/server/authentication/providers/ldap/auth-provider-ldap.service.js +506 -0
  768. package/server/authentication/providers/ldap/auth-provider-ldap.service.js.map +1 -0
  769. package/server/authentication/providers/ldap/auth-provider-ldap.service.spec.js +674 -0
  770. package/server/authentication/providers/ldap/auth-provider-ldap.service.spec.js.map +1 -0
  771. package/server/authentication/{services/auth-methods/auth-method-database.service.js → providers/mysql/auth-provider-mysql.service.js} +16 -14
  772. package/server/authentication/providers/mysql/auth-provider-mysql.service.js.map +1 -0
  773. package/server/authentication/{services/auth-methods/auth-method-database.service.spec.js → providers/mysql/auth-provider-mysql.service.spec.js} +15 -19
  774. package/server/authentication/providers/mysql/auth-provider-mysql.service.spec.js.map +1 -0
  775. package/server/authentication/providers/oidc/auth-oidc-desktop.constants.js +30 -0
  776. package/server/authentication/providers/oidc/auth-oidc-desktop.constants.js.map +1 -0
  777. package/server/authentication/providers/oidc/auth-oidc.config.js +149 -0
  778. package/server/authentication/providers/oidc/auth-oidc.config.js.map +1 -0
  779. package/server/authentication/providers/oidc/auth-oidc.constants.js +39 -0
  780. package/server/authentication/providers/oidc/auth-oidc.constants.js.map +1 -0
  781. package/server/authentication/providers/oidc/auth-oidc.controller.js +83 -0
  782. package/server/authentication/providers/oidc/auth-oidc.controller.js.map +1 -0
  783. package/server/authentication/providers/oidc/auth-oidc.interfaces.js +6 -0
  784. package/server/authentication/providers/oidc/auth-oidc.interfaces.js.map +1 -0
  785. package/server/authentication/providers/oidc/auth-provider-oidc.module.js +36 -0
  786. package/server/authentication/providers/oidc/auth-provider-oidc.module.js.map +1 -0
  787. package/server/authentication/providers/oidc/auth-provider-oidc.service.js +373 -0
  788. package/server/authentication/providers/oidc/auth-provider-oidc.service.js.map +1 -0
  789. package/server/authentication/providers/oidc/auth-provider-oidc.service.spec.js +270 -0
  790. package/server/authentication/providers/oidc/auth-provider-oidc.service.spec.js.map +1 -0
  791. package/server/authentication/{services/auth-methods/auth-method-two-fa.service.js → providers/two-fa/auth-provider-two-fa.service.js} +56 -38
  792. package/server/authentication/providers/two-fa/auth-provider-two-fa.service.js.map +1 -0
  793. package/server/authentication/{services/auth-methods/auth-method-two-fa.service.spec.js → providers/two-fa/auth-provider-two-fa.service.spec.js} +6 -10
  794. package/server/authentication/providers/two-fa/auth-provider-two-fa.service.spec.js.map +1 -0
  795. package/server/authentication/{guards → providers/two-fa}/auth-two-fa-guard.js +10 -14
  796. package/server/authentication/providers/two-fa/auth-two-fa-guard.js.map +1 -0
  797. package/server/authentication/providers/two-fa/auth-two-fa.config.js +57 -0
  798. package/server/authentication/providers/two-fa/auth-two-fa.config.js.map +1 -0
  799. package/server/authentication/{dto/two-fa-verify.dto.js → providers/two-fa/auth-two-fa.dtos.js} +8 -6
  800. package/server/authentication/providers/two-fa/auth-two-fa.dtos.js.map +1 -0
  801. package/server/authentication/providers/two-fa/auth-two-fa.interfaces.js +6 -0
  802. package/server/authentication/providers/two-fa/auth-two-fa.interfaces.js.map +1 -0
  803. package/server/authentication/utils/crypt-secret.js +1 -5
  804. package/server/authentication/utils/crypt-secret.js.map +1 -1
  805. package/server/common/constants.js +1 -5
  806. package/server/common/constants.js.map +1 -1
  807. package/server/common/decorators.js +1 -5
  808. package/server/common/decorators.js.map +1 -1
  809. package/server/common/functions.js +25 -9
  810. package/server/common/functions.js.map +1 -1
  811. package/server/common/i18n.js +1 -5
  812. package/server/common/i18n.js.map +1 -1
  813. package/server/common/image.js +1 -5
  814. package/server/common/image.js.map +1 -1
  815. package/server/common/interfaces.js +1 -5
  816. package/server/common/interfaces.js.map +1 -1
  817. package/server/common/qrcode.js +1 -5
  818. package/server/common/qrcode.js.map +1 -1
  819. package/server/common/shared.js +6 -6
  820. package/server/common/shared.js.map +1 -1
  821. package/server/configuration/config.constants.js +1 -5
  822. package/server/configuration/config.constants.js.map +1 -1
  823. package/server/configuration/config.environment.js +2 -6
  824. package/server/configuration/config.environment.js.map +1 -1
  825. package/server/configuration/config.interfaces.js +1 -5
  826. package/server/configuration/config.interfaces.js.map +1 -1
  827. package/server/configuration/config.loader.js +1 -5
  828. package/server/configuration/config.loader.js.map +1 -1
  829. package/server/configuration/config.logger.js +4 -8
  830. package/server/configuration/config.logger.js.map +1 -1
  831. package/server/configuration/config.validation.js +7 -5
  832. package/server/configuration/config.validation.js.map +1 -1
  833. package/server/infrastructure/cache/adapters/mysql-cache.adapter.js +9 -7
  834. package/server/infrastructure/cache/adapters/mysql-cache.adapter.js.map +1 -1
  835. package/server/infrastructure/cache/adapters/redis-cache.adapter.js +1 -5
  836. package/server/infrastructure/cache/adapters/redis-cache.adapter.js.map +1 -1
  837. package/server/infrastructure/cache/cache.config.js +1 -5
  838. package/server/infrastructure/cache/cache.config.js.map +1 -1
  839. package/server/infrastructure/cache/cache.decorator.js +9 -7
  840. package/server/infrastructure/cache/cache.decorator.js.map +1 -1
  841. package/server/infrastructure/cache/cache.e2e-spec.js +1 -5
  842. package/server/infrastructure/cache/cache.e2e-spec.js.map +1 -1
  843. package/server/infrastructure/cache/cache.module.js +1 -5
  844. package/server/infrastructure/cache/cache.module.js.map +1 -1
  845. package/server/infrastructure/cache/schemas/mysql-cache.interface.js +1 -5
  846. package/server/infrastructure/cache/schemas/mysql-cache.interface.js.map +1 -1
  847. package/server/infrastructure/cache/schemas/mysql-cache.schema.js +1 -5
  848. package/server/infrastructure/cache/schemas/mysql-cache.schema.js.map +1 -1
  849. package/server/infrastructure/cache/services/cache.service.js +1 -5
  850. package/server/infrastructure/cache/services/cache.service.js.map +1 -1
  851. package/server/infrastructure/context/context.module.js +1 -5
  852. package/server/infrastructure/context/context.module.js.map +1 -1
  853. package/server/infrastructure/context/interceptors/context.interceptor.js +1 -5
  854. package/server/infrastructure/context/interceptors/context.interceptor.js.map +1 -1
  855. package/server/infrastructure/context/interceptors/context.interceptor.spec.js +2 -6
  856. package/server/infrastructure/context/interceptors/context.interceptor.spec.js.map +1 -1
  857. package/server/infrastructure/context/interfaces/context-store.interface.js +1 -5
  858. package/server/infrastructure/context/interfaces/context-store.interface.js.map +1 -1
  859. package/server/infrastructure/context/services/context-manager.service.js +1 -5
  860. package/server/infrastructure/context/services/context-manager.service.js.map +1 -1
  861. package/server/infrastructure/context/services/context-manager.service.spec.js +1 -5
  862. package/server/infrastructure/context/services/context-manager.service.spec.js.map +1 -1
  863. package/server/infrastructure/database/columns.js +1 -5
  864. package/server/infrastructure/database/columns.js.map +1 -1
  865. package/server/infrastructure/database/configuration.js +1 -5
  866. package/server/infrastructure/database/configuration.js.map +1 -1
  867. package/server/infrastructure/database/constants.js +2 -6
  868. package/server/infrastructure/database/constants.js.map +1 -1
  869. package/server/infrastructure/database/database.config.js +1 -5
  870. package/server/infrastructure/database/database.config.js.map +1 -1
  871. package/server/infrastructure/database/database.logger.js +1 -5
  872. package/server/infrastructure/database/database.logger.js.map +1 -1
  873. package/server/infrastructure/database/database.module.js +1 -5
  874. package/server/infrastructure/database/database.module.js.map +1 -1
  875. package/server/infrastructure/database/interfaces/database.interface.js +1 -5
  876. package/server/infrastructure/database/interfaces/database.interface.js.map +1 -1
  877. package/server/infrastructure/database/schema.js +1 -5
  878. package/server/infrastructure/database/schema.js.map +1 -1
  879. package/server/infrastructure/database/scripts/create-user.js +1 -5
  880. package/server/infrastructure/database/scripts/create-user.js.map +1 -1
  881. package/server/infrastructure/database/scripts/db.js +1 -5
  882. package/server/infrastructure/database/scripts/db.js.map +1 -1
  883. package/server/infrastructure/database/scripts/seed/main.js +1 -5
  884. package/server/infrastructure/database/scripts/seed/main.js.map +1 -1
  885. package/server/infrastructure/database/scripts/seed/usersgroups.js +1 -5
  886. package/server/infrastructure/database/scripts/seed/usersgroups.js.map +1 -1
  887. package/server/infrastructure/database/utils.js +1 -5
  888. package/server/infrastructure/database/utils.js.map +1 -1
  889. package/server/infrastructure/mailer/interfaces/mail.interface.js +1 -5
  890. package/server/infrastructure/mailer/interfaces/mail.interface.js.map +1 -1
  891. package/server/infrastructure/mailer/mailer.config.js +1 -5
  892. package/server/infrastructure/mailer/mailer.config.js.map +1 -1
  893. package/server/infrastructure/mailer/mailer.module.js +1 -5
  894. package/server/infrastructure/mailer/mailer.module.js.map +1 -1
  895. package/server/infrastructure/mailer/mailer.service.js +1 -5
  896. package/server/infrastructure/mailer/mailer.service.js.map +1 -1
  897. package/server/infrastructure/mailer/mailer.service.spec.js +2 -6
  898. package/server/infrastructure/mailer/mailer.service.spec.js.map +1 -1
  899. package/server/infrastructure/scheduler/scheduler.constants.js +1 -5
  900. package/server/infrastructure/scheduler/scheduler.constants.js.map +1 -1
  901. package/server/infrastructure/scheduler/scheduler.module.js +1 -5
  902. package/server/infrastructure/scheduler/scheduler.module.js.map +1 -1
  903. package/server/infrastructure/websocket/adapters/cluster.adapter.js +1 -5
  904. package/server/infrastructure/websocket/adapters/cluster.adapter.js.map +1 -1
  905. package/server/infrastructure/websocket/adapters/redis.adapter.js +1 -5
  906. package/server/infrastructure/websocket/adapters/redis.adapter.js.map +1 -1
  907. package/server/infrastructure/websocket/adapters/web-socket.adapter.js +1 -5
  908. package/server/infrastructure/websocket/adapters/web-socket.adapter.js.map +1 -1
  909. package/server/infrastructure/websocket/decorators/web-socket-user.decorator.js +1 -5
  910. package/server/infrastructure/websocket/decorators/web-socket-user.decorator.js.map +1 -1
  911. package/server/infrastructure/websocket/interfaces/auth-socket-io.interface.js +1 -5
  912. package/server/infrastructure/websocket/interfaces/auth-socket-io.interface.js.map +1 -1
  913. package/server/infrastructure/websocket/utils.js +1 -5
  914. package/server/infrastructure/websocket/utils.js.map +1 -1
  915. package/server/infrastructure/websocket/web-socket.config.js +1 -5
  916. package/server/infrastructure/websocket/web-socket.config.js.map +1 -1
  917. package/server/main.js +5 -0
  918. package/server/main.js.map +1 -1
  919. package/static/assets/pdfjs/build/pdf.mjs +724 -745
  920. package/static/assets/pdfjs/build/pdf.mjs.map +1 -1
  921. package/static/assets/pdfjs/build/pdf.sandbox.mjs +2 -2
  922. package/static/assets/pdfjs/build/pdf.worker.mjs +706 -193
  923. package/static/assets/pdfjs/build/pdf.worker.mjs.map +1 -1
  924. package/static/assets/pdfjs/version +1 -1
  925. package/static/assets/pdfjs/web/locale/dsb/viewer.ftl +5 -5
  926. package/static/assets/pdfjs/web/locale/en-US/viewer.ftl +1 -0
  927. package/static/assets/pdfjs/web/locale/fur/viewer.ftl +5 -0
  928. package/static/assets/pdfjs/web/locale/kk/viewer.ftl +28 -0
  929. package/static/assets/pdfjs/web/locale/ml/viewer.ftl +4 -0
  930. package/static/assets/pdfjs/web/locale/ru/viewer.ftl +3 -3
  931. package/static/assets/pdfjs/web/viewer.css +207 -65
  932. package/static/assets/pdfjs/web/viewer.html +11 -10
  933. package/static/assets/pdfjs/web/viewer.mjs +850 -270
  934. package/static/assets/pdfjs/web/viewer.mjs.map +1 -1
  935. package/static/assets/pdfjs/web/wasm/LICENSE_JBIG2 +196 -0
  936. package/static/assets/pdfjs/web/wasm/LICENSE_PDFJS_JBIG2 +13 -0
  937. package/static/assets/pdfjs/web/wasm/jbig2.wasm +0 -0
  938. package/static/chunk-22TZP6HW.js +1 -0
  939. package/static/{chunk-U5E5H2DD.js → chunk-27ATUHBH.js} +1 -1
  940. package/static/{chunk-HZAB6F4Q.js → chunk-2CKLZ3FM.js} +1 -1
  941. package/static/{chunk-XZHWESIY.js → chunk-2QZPX7LO.js} +1 -1
  942. package/static/{chunk-UOK3LKSX.js → chunk-2R6IBBPZ.js} +1 -1
  943. package/static/{chunk-DVCN3P7Q.js → chunk-4FIGEBNL.js} +1 -1
  944. package/static/chunk-4P3JABAP.js +13 -0
  945. package/static/chunk-5CZOSAMZ.js +1 -0
  946. package/static/{chunk-RBTLSPYJ.js → chunk-677WUBCT.js} +1 -1
  947. package/static/{chunk-KEZNIIFH.js → chunk-74CAHBFM.js} +1 -1
  948. package/static/{chunk-WRK2FTKU.js → chunk-7GWW6MJO.js} +1 -1
  949. package/static/{chunk-EKWB5W72.js → chunk-7WOPGQXB.js} +1 -1
  950. package/static/{chunk-IMFO2MI7.js → chunk-A4UGPSWX.js} +1 -1
  951. package/static/{chunk-KDUAB76O.js → chunk-AHO37FKW.js} +1 -1
  952. package/static/chunk-AQCXMKP3.js +1 -0
  953. package/static/chunk-B6PDYCRO.js +3 -0
  954. package/static/{chunk-PPJCVBJH.js → chunk-CU76ATCF.js} +1 -1
  955. package/static/{chunk-ARS47O5X.js → chunk-CWYHOPOP.js} +1 -1
  956. package/static/{chunk-CSVPAZHK.js → chunk-E5WI5725.js} +1 -1
  957. package/static/{chunk-XX3JPJUM.js → chunk-FC5HTKVM.js} +1 -1
  958. package/static/{chunk-QGHNJVJ6.js → chunk-FOSM7EYI.js} +1 -1
  959. package/static/{chunk-JAJ7VXMB.js → chunk-GAZO25PI.js} +1 -1
  960. package/static/{chunk-IHS5LSJJ.js → chunk-GB7ABR5N.js} +1 -1
  961. package/static/{chunk-27V66YJV.js → chunk-GEHFKZQ5.js} +2 -2
  962. package/static/{chunk-3QTROEHV.js → chunk-GQFMWVFD.js} +1 -1
  963. package/static/{chunk-FWQJ4ZCD.js → chunk-GVNTC564.js} +1 -1
  964. package/static/{chunk-4NIYCYRS.js → chunk-HGL3NYP2.js} +2 -2
  965. package/static/chunk-HLIWPWRA.js +1 -0
  966. package/static/{chunk-3VRUIWQG.js → chunk-HNYB3M4S.js} +1 -1
  967. package/static/{chunk-7HJFIMNF.js → chunk-HUXAUQMN.js} +1 -1
  968. package/static/chunk-I2XA6PPK.js +1 -0
  969. package/static/{chunk-RJULB733.js → chunk-ISV3BO6R.js} +1 -1
  970. package/static/{chunk-R4VYKZVJ.js → chunk-IWWBV6EM.js} +1 -1
  971. package/static/{chunk-TTWMFWEC.js → chunk-JV3AGU5B.js} +1 -1
  972. package/static/{chunk-X7NHX5C7.js → chunk-K25E7YGG.js} +1 -1
  973. package/static/chunk-K46PUTZB.js +1 -0
  974. package/static/{chunk-D2MLAO5N.js → chunk-KERFLJ56.js} +1 -7
  975. package/static/{chunk-LZUHREOF.js → chunk-KJD3KFF3.js} +1 -1
  976. package/static/chunk-KPKSI23S.js +1 -0
  977. package/static/{chunk-CMNMPG6Z.js → chunk-KZS7CTNR.js} +1 -1
  978. package/static/{chunk-RNVPQQKT.js → chunk-L5IHUVXL.js} +1 -1
  979. package/static/{chunk-2GXOVGTD.js → chunk-L7RRX2M3.js} +1 -1
  980. package/static/{chunk-WFMEUST4.js → chunk-LGWJ2WKU.js} +1 -1
  981. package/static/{chunk-ZOMRIN3G.js → chunk-MLC7JK2H.js} +2 -2
  982. package/static/{chunk-76REYAEA.js → chunk-MOHNYW2A.js} +1 -1
  983. package/static/{chunk-ZHUBWKA2.js → chunk-MTRXBVWZ.js} +1 -1
  984. package/static/{chunk-QJ22N76V.js → chunk-MZQK6LNV.js} +1 -1
  985. package/static/{chunk-SDJNZULP.js → chunk-NCDUOVMW.js} +1 -1
  986. package/static/chunk-NGUAJIGI.js +1 -0
  987. package/static/chunk-NIPP6JDI.js +1 -0
  988. package/static/{chunk-VD5JHSDS.js → chunk-NMTBMHUL.js} +1 -1
  989. package/static/chunk-O4XXMZFX.js +4 -0
  990. package/static/{chunk-WZPF4LS2.js → chunk-OANZITPM.js} +1 -1
  991. package/static/{chunk-JNTNMIUH.js → chunk-OGE4SAHU.js} +1 -1
  992. package/static/{chunk-S6H2ELRY.js → chunk-OI3ME22C.js} +1 -1
  993. package/static/{chunk-7KAYOR3A.js → chunk-Q3EGCMF5.js} +1 -1
  994. package/static/chunk-QF2NSHZA.js +1 -0
  995. package/static/{chunk-3ZBAQTHJ.js → chunk-QIGUDEZF.js} +1 -1
  996. package/static/{chunk-76M3BMK6.js → chunk-QJVC3SRJ.js} +11 -11
  997. package/static/{chunk-VBTZDHZ3.js → chunk-QKN6LAAA.js} +1 -1
  998. package/static/{chunk-JRXG43AA.js → chunk-QRFESU5O.js} +2 -2
  999. package/static/chunk-QVRVFYJH.js +1 -0
  1000. package/static/{chunk-BCN4T5DO.js → chunk-RFJIPIOK.js} +2 -2
  1001. package/static/{chunk-2RWLNKZH.js → chunk-RLL634K4.js} +1 -1
  1002. package/static/{chunk-D5FQ72R4.js → chunk-RS2OFKWP.js} +1 -1
  1003. package/static/{chunk-CN5YVRFT.js → chunk-RWAAC3A4.js} +1 -1
  1004. package/static/{chunk-LWSCODLD.js → chunk-RWCNTCU5.js} +1 -1
  1005. package/static/{chunk-FTFEQDWH.js → chunk-S5Y64DDS.js} +1 -1
  1006. package/static/{chunk-J7474P3L.js → chunk-SLG5KDU6.js} +1 -1
  1007. package/static/chunk-TJ4CVFEL.js +1 -0
  1008. package/static/{chunk-KAUCN24H.js → chunk-TWCGKSYE.js} +1 -1
  1009. package/static/{chunk-PDG7DOEF.js → chunk-UMDRE4S7.js} +1 -1
  1010. package/static/chunk-VRIOLRYR.js +5 -0
  1011. package/static/chunk-VS4O2XDP.js +1 -0
  1012. package/static/{chunk-ZEJLIGAY.js → chunk-VSBFNFOM.js} +1 -1
  1013. package/static/{chunk-XSURUW7C.js → chunk-WN4WXCVK.js} +1 -1
  1014. package/static/{chunk-S44QIK3G.js → chunk-WX7RXW7K.js} +1 -1
  1015. package/static/{chunk-3ZLBVUCX.js → chunk-XC4POKR3.js} +2 -2
  1016. package/static/{chunk-TNCKNU6I.js → chunk-Y4AUYQTG.js} +1 -1
  1017. package/static/{chunk-3MVPXC3U.js → chunk-Y67J3BOL.js} +1 -1
  1018. package/static/{chunk-QTPIEEZW.js → chunk-YMIXHRJQ.js} +1 -7
  1019. package/static/{chunk-VZFZUI6D.js → chunk-ZUNKFAKP.js} +1 -1
  1020. package/static/index.html +3 -3
  1021. package/static/main-QN4UCOC5.js +5 -0
  1022. package/static/{styles-XLLEY5Y3.css → styles-46GLIE7Y.css} +1 -1
  1023. package/server/authentication/constants/auth-ldap.js.map +0 -1
  1024. package/server/authentication/dto/two-fa-verify.dto.js.map +0 -1
  1025. package/server/authentication/guards/auth-two-fa-guard.js.map +0 -1
  1026. package/server/authentication/interfaces/two-fa-setup.interface.js +0 -10
  1027. package/server/authentication/interfaces/two-fa-setup.interface.js.map +0 -1
  1028. package/server/authentication/models/auth-method.js +0 -18
  1029. package/server/authentication/models/auth-method.js.map +0 -1
  1030. package/server/authentication/services/auth-manager.service.js.map +0 -1
  1031. package/server/authentication/services/auth-manager.service.spec.js.map +0 -1
  1032. package/server/authentication/services/auth-methods/auth-method-database.service.js.map +0 -1
  1033. package/server/authentication/services/auth-methods/auth-method-database.service.spec.js.map +0 -1
  1034. package/server/authentication/services/auth-methods/auth-method-ldap.service.js +0 -326
  1035. package/server/authentication/services/auth-methods/auth-method-ldap.service.js.map +0 -1
  1036. package/server/authentication/services/auth-methods/auth-method-ldap.service.spec.js +0 -534
  1037. package/server/authentication/services/auth-methods/auth-method-ldap.service.spec.js.map +0 -1
  1038. package/server/authentication/services/auth-methods/auth-method-two-fa.service.js.map +0 -1
  1039. package/server/authentication/services/auth-methods/auth-method-two-fa.service.spec.js.map +0 -1
  1040. package/static/chunk-2YQ4SX3A.js +0 -13
  1041. package/static/chunk-46TJLPJY.js +0 -1
  1042. package/static/chunk-6OEOADR6.js +0 -1
  1043. package/static/chunk-AALPWGPB.js +0 -3
  1044. package/static/chunk-CVXLHSO5.js +0 -1
  1045. package/static/chunk-G7RZN7HN.js +0 -1
  1046. package/static/chunk-LTJNLOX2.js +0 -1
  1047. package/static/chunk-NIKNG2FX.js +0 -1
  1048. package/static/chunk-NNZWSNAW.js +0 -1
  1049. package/static/chunk-NWKBB7J4.js +0 -1
  1050. package/static/chunk-PVYVY3GD.js +0 -1
  1051. package/static/chunk-Q5X5TPAG.js +0 -1
  1052. package/static/chunk-R4VMWCM5.js +0 -1
  1053. package/static/chunk-SNOOCDJD.js +0 -1
  1054. package/static/chunk-SPQH3ATC.js +0 -5
  1055. package/static/chunk-ZCSHU3D7.js +0 -1
  1056. package/static/chunk-ZU5MQTFN.js +0 -4
  1057. package/static/main-5O3KLGIR.js +0 -11
@@ -1,8 +1,4 @@
1
- /*
2
- * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
3
- * This file is part of Sync-in | The open source file sync and share solution
4
- * See the LICENSE file for licensing details
5
- */ "use strict";
1
+ "use strict";
6
2
  Object.defineProperty(exports, "__esModule", {
7
3
  value: true
8
4
  });
@@ -75,7 +71,10 @@ let OnlyOfficeManager = class OnlyOfficeManager {
75
71
  hasLock = this.filesLockManager.convertLockToFileLockProps(e.lock);
76
72
  mode = _operations.FILE_MODE.VIEW;
77
73
  } else {
78
- this.logger.error(`${this.getSettings.name} - ${e}`);
74
+ this.logger.error({
75
+ tag: this.getSettings.name,
76
+ msg: `${e}`
77
+ });
79
78
  throw new _common.HttpException('Unable to check file lock', _common.HttpStatus.INTERNAL_SERVER_ERROR);
80
79
  }
81
80
  }
@@ -97,43 +96,70 @@ let OnlyOfficeManager = class OnlyOfficeManager {
97
96
  case 1:
98
97
  // users connect / disconnect
99
98
  await this.checkFileLock(user, space, callBackData);
100
- this.logger.debug(`document is being edited : ${space.url}`);
99
+ this.logger.debug({
100
+ tag: this.callBack.name,
101
+ msg: `document is being edited : ${space.url}`
102
+ });
101
103
  break;
102
104
  case 2:
103
105
  // No active users on the document
104
106
  await this.checkFileLock(user, space, callBackData);
105
107
  if (callBackData.notmodified) {
106
- this.logger.debug(`document was edited but closed with no changes : ${space.url}`);
108
+ this.logger.debug({
109
+ tag: this.callBack.name,
110
+ msg: `document was edited but closed with no changes : ${space.url}`
111
+ });
107
112
  } else {
108
- this.logger.debug(`document was edited and closed but not saved (let's do it) : ${space.url}`);
113
+ this.logger.debug({
114
+ tag: this.callBack.name,
115
+ msg: `document was edited and closed but not saved (let's do it) : ${space.url}`
116
+ });
109
117
  await this.saveDocument(space, callBackData.url);
110
118
  }
111
119
  await this.removeFileLock(user.id, space);
112
120
  await this.removeDocumentKey(space);
113
121
  break;
114
122
  case 3:
115
- this.logger.error(`document cannot be saved, an error has occurred (try to save it) : ${space.url}`);
123
+ this.logger.error({
124
+ tag: this.callBack.name,
125
+ msg: `document cannot be saved, an error has occurred (try to save it) : ${space.url}`
126
+ });
116
127
  await this.saveDocument(space, callBackData.url);
117
128
  break;
118
129
  case 4:
119
130
  // No active users on the document
120
131
  await this.removeFileLock(user.id, space);
121
132
  await this.removeDocumentKey(space);
122
- this.logger.debug(`document was closed with no changes : ${space.url}`);
133
+ this.logger.debug({
134
+ tag: this.callBack.name,
135
+ msg: `document was closed with no changes : ${space.url}`
136
+ });
123
137
  break;
124
138
  case 6:
125
- this.logger.debug(`document is edited but save was requested : ${space.url}`);
139
+ this.logger.debug({
140
+ tag: this.callBack.name,
141
+ msg: `document is edited but save was requested : ${space.url}`
142
+ });
126
143
  await this.saveDocument(space, callBackData.url);
127
144
  break;
128
145
  case 7:
129
- this.logger.error(`document cannot be force saved, an error has occurred (try to save it) : ${space.url}`);
146
+ this.logger.error({
147
+ tag: this.callBack.name,
148
+ msg: `document cannot be force saved, an error has occurred (try to save it) : ${space.url}`
149
+ });
130
150
  await this.saveDocument(space, callBackData.url);
131
151
  break;
132
152
  default:
133
- this.logger.error('unhandled case');
153
+ this.logger.error({
154
+ tag: this.callBack.name,
155
+ msg: 'unhandled case'
156
+ });
134
157
  }
135
158
  } catch (e) {
136
- this.logger.error(`${this.callBack.name} - ${e.message} : ${space.url}`);
159
+ this.logger.error({
160
+ tag: this.callBack.name,
161
+ msg: `${e.message} : ${space.url}`
162
+ });
137
163
  return {
138
164
  error: e.message
139
165
  };
@@ -269,7 +295,10 @@ let OnlyOfficeManager = class OnlyOfficeManager {
269
295
  if (!await this.filesLockManager.isPathLocked(space.dbFile)) {
270
296
  const cacheKey = this.getCacheKey(space.dbFile);
271
297
  const r = await this.cache.del(cacheKey);
272
- this.logger.debug(`${this.removeDocumentKey.name} - ${cacheKey} ${r ? '' : 'not'} removed`);
298
+ this.logger.debug({
299
+ tag: this.removeDocumentKey.name,
300
+ msg: `${cacheKey} ${r ? '' : 'not'} removed`
301
+ });
273
302
  }
274
303
  }
275
304
  async getDocumentKey(space) {
@@ -281,7 +310,10 @@ let OnlyOfficeManager = class OnlyOfficeManager {
281
310
  }
282
311
  const docKey = (0, _files.genEtag)(null, space.realPath, false);
283
312
  await this.cache.set(cacheKey, docKey, this.expiration);
284
- this.logger.debug(`${this.getDocumentKey.name} - ${cacheKey} (${docKey}) created`);
313
+ this.logger.debug({
314
+ tag: this.getDocumentKey.name,
315
+ msg: `${cacheKey} (${docKey}) created`
316
+ });
285
317
  return docKey;
286
318
  }
287
319
  async saveDocument(space, url) {
@@ -328,7 +360,10 @@ let OnlyOfficeManager = class OnlyOfficeManager {
328
360
  throw new Error(`document size differs (${tmpFileSize} != ${contentLength})`);
329
361
  }
330
362
  } else if (contentLength === 0) {
331
- this.logger.warn(`${this.saveDocument.name} - content length is 0 : ${space.url}`);
363
+ this.logger.warn({
364
+ tag: this.saveDocument.name,
365
+ msg: `content length is 0 : ${space.url}`
366
+ });
332
367
  }
333
368
  // copy contents to avoid inode changes (`file.id` in some cases)
334
369
  try {
@@ -367,7 +402,10 @@ let OnlyOfficeManager = class OnlyOfficeManager {
367
402
  throw new Error(`convert failed with reason : ${_onlyofficeconstants.ONLY_OFFICE_CONVERT_ERROR.get(result.error)}`);
368
403
  }
369
404
  if (result.endConvert) {
370
- this.logger.log(`${this.convertDocument.name} - ${fileType} -> ${outputType} : ${spaceUrl}`);
405
+ this.logger.log({
406
+ tag: this.convertDocument.name,
407
+ msg: `${fileType} -> ${outputType} : ${spaceUrl}`
408
+ });
371
409
  return result.fileUrl;
372
410
  }
373
411
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../backend/src/applications/files/modules/only-office/only-office-manager.service.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nimport { HttpService } from '@nestjs/axios'\nimport { HttpException, HttpStatus, Injectable, Logger } from '@nestjs/common'\nimport { JwtService } from '@nestjs/jwt'\nimport { AxiosResponse } from 'axios'\nimport https from 'https'\nimport crypto from 'node:crypto'\nimport os from 'node:os'\nimport path from 'node:path'\nimport { JwtIdentityPayload } from '../../../../authentication/interfaces/jwt-payload.interface'\nimport { convertHumanTimeToSeconds } from '../../../../common/functions'\nimport { configuration } from '../../../../configuration/config.environment'\nimport { Cache } from '../../../../infrastructure/cache/services/cache.service'\nimport { ContextManager } from '../../../../infrastructure/context/services/context-manager.service'\nimport { HTTP_METHOD } from '../../../applications.constants'\nimport { SPACE_OPERATION } from '../../../spaces/constants/spaces'\nimport { FastifySpaceRequest } from '../../../spaces/interfaces/space-request.interface'\nimport type { SpaceEnv } from '../../../spaces/models/space-env.model'\nimport { haveSpaceEnvPermissions } from '../../../spaces/utils/permissions'\nimport type { UserModel } from '../../../users/models/user.model'\nimport { getAvatarBase64 } from '../../../users/utils/avatar'\nimport { DEPTH, LOCK_SCOPE } from '../../../webdav/constants/webdav'\nimport { FILE_MODE } from '../../constants/operations'\nimport type { FileDBProps } from '../../interfaces/file-db-props.interface'\nimport { FileLockOptions } from '../../interfaces/file-lock.interface'\nimport { FileLockProps } from '../../interfaces/file-props.interface'\nimport { LockConflict } from '../../models/file-lock-error'\nimport { FilesLockManager } from '../../services/files-lock-manager.service'\nimport {\n copyFileContent,\n fileSize,\n genEtag,\n genUniqHashFromFileDBProps,\n isPathExists,\n isPathIsDir,\n removeFiles,\n uniqueFilePathFromDir,\n writeFromStream\n} from '../../utils/files'\nimport {\n ONLY_OFFICE_APP_LOCK,\n ONLY_OFFICE_CACHE_KEY,\n ONLY_OFFICE_CONVERT_ERROR,\n ONLY_OFFICE_CONVERT_EXTENSIONS,\n ONLY_OFFICE_EXTENSIONS,\n ONLY_OFFICE_INTERNAL_URI,\n ONLY_OFFICE_TOKEN_QUERY_PARAM_NAME\n} from './only-office.constants'\nimport { OnlyOfficeReqDto } from './only-office.dtos'\nimport { OnlyOfficeCallBack, OnlyOfficeConfig, OnlyOfficeConvertForm } from './only-office.interface'\nimport { API_ONLY_OFFICE_CALLBACK, API_ONLY_OFFICE_DOCUMENT } from './only-office.routes'\n\n@Injectable()\nexport class OnlyOfficeManager {\n private logger = new Logger(OnlyOfficeManager.name)\n private readonly externalOnlyOfficeServer = configuration.applications.files.onlyoffice.externalServer || null\n private readonly rejectUnauthorized: boolean = !configuration.applications.files.onlyoffice?.verifySSL\n private readonly convertUrl = this.externalOnlyOfficeServer ? `${this.externalOnlyOfficeServer}/ConvertService.ashx` : null\n private readonly expiration = convertHumanTimeToSeconds(configuration.auth.token.refresh.expiration)\n private readonly mobileRegex: RegExp = /android|webos|iphone|ipad|ipod|blackberry|windows phone|opera mini|iemobile|mobile/i\n\n constructor(\n private readonly http: HttpService,\n private readonly contextManager: ContextManager,\n private readonly cache: Cache,\n private readonly jwt: JwtService,\n private readonly filesLockManager: FilesLockManager\n ) {}\n\n async getSettings(user: UserModel, space: SpaceEnv, req: FastifySpaceRequest): Promise<OnlyOfficeReqDto> {\n if (!(await isPathExists(space.realPath))) {\n throw new HttpException('Document not found', HttpStatus.BAD_REQUEST)\n }\n if (await isPathIsDir(space.realPath)) {\n throw new HttpException('Document must be a file', HttpStatus.BAD_REQUEST)\n }\n const fileExtension = path.extname(space.realPath).slice(1)\n if (!ONLY_OFFICE_EXTENSIONS.has(fileExtension)) {\n throw new HttpException('Document not supported', HttpStatus.BAD_REQUEST)\n }\n let hasLock: false | FileLockProps = false\n let mode: FILE_MODE = haveSpaceEnvPermissions(space, SPACE_OPERATION.MODIFY) ? FILE_MODE.EDIT : FILE_MODE.VIEW\n if (mode === FILE_MODE.EDIT) {\n // Check lock conflicts\n try {\n await this.filesLockManager.checkConflicts(space.dbFile, DEPTH.RESOURCE, {\n userId: user.id,\n app: ONLY_OFFICE_APP_LOCK,\n lockScope: LOCK_SCOPE.SHARED\n })\n } catch (e) {\n if (e instanceof LockConflict) {\n hasLock = this.filesLockManager.convertLockToFileLockProps(e.lock)\n mode = FILE_MODE.VIEW\n } else {\n this.logger.error(`${this.getSettings.name} - ${e}`)\n throw new HttpException('Unable to check file lock', HttpStatus.INTERNAL_SERVER_ERROR)\n }\n }\n }\n const isMobile: boolean = this.mobileRegex.test(req.headers['user-agent'])\n const authToken: string = await this.genAuthToken(user)\n const fileUrl = this.buildUrl(API_ONLY_OFFICE_DOCUMENT, space.url, authToken)\n const callBackUrl = this.buildUrl(API_ONLY_OFFICE_CALLBACK, space.url, authToken)\n const config: OnlyOfficeReqDto = await this.genConfiguration(user, space, mode, fileUrl, fileExtension, callBackUrl, isMobile, hasLock)\n config.config.token = await this.genPayloadToken(config.config)\n return config\n }\n\n async callBack(user: UserModel, space: SpaceEnv, token: string) {\n const callBackData: OnlyOfficeCallBack = await this.jwt.verifyAsync(token, { secret: configuration.applications.files.onlyoffice.secret })\n try {\n switch (callBackData.status) {\n case 1:\n // users connect / disconnect\n await this.checkFileLock(user, space, callBackData)\n this.logger.debug(`document is being edited : ${space.url}`)\n break\n case 2:\n // No active users on the document\n await this.checkFileLock(user, space, callBackData)\n if (callBackData.notmodified) {\n this.logger.debug(`document was edited but closed with no changes : ${space.url}`)\n } else {\n this.logger.debug(`document was edited and closed but not saved (let's do it) : ${space.url}`)\n await this.saveDocument(space, callBackData.url)\n }\n await this.removeFileLock(user.id, space)\n await this.removeDocumentKey(space)\n break\n case 3:\n this.logger.error(`document cannot be saved, an error has occurred (try to save it) : ${space.url}`)\n await this.saveDocument(space, callBackData.url)\n break\n case 4:\n // No active users on the document\n await this.removeFileLock(user.id, space)\n await this.removeDocumentKey(space)\n this.logger.debug(`document was closed with no changes : ${space.url}`)\n break\n case 6:\n this.logger.debug(`document is edited but save was requested : ${space.url}`)\n await this.saveDocument(space, callBackData.url)\n break\n case 7:\n this.logger.error(`document cannot be force saved, an error has occurred (try to save it) : ${space.url}`)\n await this.saveDocument(space, callBackData.url)\n break\n default:\n this.logger.error('unhandled case')\n }\n } catch (e) {\n this.logger.error(`${this.callBack.name} - ${e.message} : ${space.url}`)\n return { error: e.message }\n }\n return { error: 0 }\n }\n\n private async genConfiguration(\n user: UserModel,\n space: SpaceEnv,\n mode: FILE_MODE,\n fileUrl: string,\n fileExtension: string,\n callBackUrl: string,\n isMobile: boolean,\n hasLock: false | FileLockProps\n ): Promise<OnlyOfficeReqDto> {\n const canEdit = mode === FILE_MODE.EDIT\n const documentType = ONLY_OFFICE_EXTENSIONS.get(fileExtension)\n return {\n hasLock: hasLock,\n documentServerUrl: this.externalOnlyOfficeServer || `${this.contextManager.headerOriginUrl()}${ONLY_OFFICE_INTERNAL_URI}`,\n config: {\n type: isMobile ? 'mobile' : 'desktop',\n height: '100%',\n width: '100%',\n documentType: documentType,\n document: {\n title: path.basename(space.relativeUrl),\n fileType: fileExtension,\n key: await this.getDocumentKey(space),\n permissions: {\n download: true,\n edit: canEdit,\n changeHistory: false,\n comment: canEdit,\n fillForms: canEdit,\n print: true,\n review: canEdit\n },\n url: fileUrl\n },\n editorConfig: {\n mode: mode,\n lang: 'en',\n region: 'en',\n callbackUrl: callBackUrl,\n user: { id: user.id.toString(), name: `${user.fullName} (${user.email})`, image: await getAvatarBase64(user.login) },\n coEditing: {\n mode: 'fast',\n change: true\n },\n embedded: {\n embedUrl: fileUrl,\n saveUrl: fileUrl,\n shareUrl: fileUrl,\n toolbarDocked: 'top'\n },\n customization: {\n about: false,\n autosave: false,\n forcesave: true,\n zoom: documentType === 'slide' ? 60 : 90,\n help: false,\n features: { featuresTips: false },\n plugins: false\n }\n }\n }\n }\n }\n\n private buildUrl(basePath: string, spaceUrl: string, token: string): string {\n const url = new URL(`${basePath}/${spaceUrl}`, this.contextManager.headerOriginUrl())\n url.searchParams.set(ONLY_OFFICE_TOKEN_QUERY_PARAM_NAME, token)\n return url.toString()\n }\n\n private genPayloadToken(payload: OnlyOfficeConfig | OnlyOfficeConvertForm): Promise<string> {\n return this.jwt.signAsync(payload, { secret: configuration.applications.files.onlyoffice.secret, expiresIn: 60 })\n }\n\n private genAuthToken(user: UserModel): Promise<string> {\n // use refresh expiration to allow long sessions\n return this.jwt.signAsync(\n {\n identity: {\n id: user.id,\n login: user.login,\n email: user.email,\n fullName: user.fullName,\n language: user.language,\n role: user.role,\n applications: user.applications\n } satisfies JwtIdentityPayload\n },\n {\n secret: configuration.auth.token.access.secret,\n expiresIn: this.expiration\n }\n )\n }\n\n private async checkFileLock(user: UserModel, space: SpaceEnv, callBackData: OnlyOfficeCallBack) {\n for (const action of callBackData.actions) {\n if (action.type === 0) {\n // Disconnect\n // Remove the lock if no other users are active on the document\n if (!Array.isArray(callBackData.users)) {\n await this.removeFileLock(parseInt(action.userid), space)\n }\n } else if (action.type === 1) {\n // Connect\n // Create the lock if it's the first user to open the document\n if (Array.isArray(callBackData.users) && callBackData.users.length === 1) {\n await this.createFileLock(user, space)\n }\n }\n }\n }\n\n private async createFileLock(user: UserModel, space: SpaceEnv): Promise<void> {\n const [ok, _fileLock] = await this.filesLockManager.create(\n user,\n space.dbFile,\n ONLY_OFFICE_APP_LOCK,\n DEPTH.RESOURCE,\n {\n lockRoot: null,\n lockToken: null,\n lockScope: LOCK_SCOPE.SHARED\n } satisfies FileLockOptions,\n this.expiration\n )\n if (!ok) {\n throw new HttpException('The file is locked', HttpStatus.LOCKED)\n }\n }\n\n private async removeFileLock(userId: number, space: SpaceEnv): Promise<void> {\n for (const lock of await this.filesLockManager.getLocksByPath(space.dbFile)) {\n if (lock.owner.id === userId) {\n await this.filesLockManager.removeLock(lock.key)\n }\n }\n }\n\n private async removeDocumentKey(space: SpaceEnv): Promise<void> {\n if (!(await this.filesLockManager.isPathLocked(space.dbFile))) {\n const cacheKey = this.getCacheKey(space.dbFile)\n const r = await this.cache.del(cacheKey)\n this.logger.debug(`${this.removeDocumentKey.name} - ${cacheKey} ${r ? '' : 'not'} removed`)\n }\n }\n\n private async getDocumentKey(space: SpaceEnv): Promise<string> {\n // Uniq key to identify the document in OnlyOffice\n const cacheKey = this.getCacheKey(space.dbFile)\n const existingDocKey: string = await this.cache.get(cacheKey)\n if (existingDocKey) {\n return existingDocKey\n }\n const docKey = genEtag(null, space.realPath, false)\n await this.cache.set(cacheKey, docKey, this.expiration)\n this.logger.debug(`${this.getDocumentKey.name} - ${cacheKey} (${docKey}) created`)\n return docKey\n }\n\n private async saveDocument(space: SpaceEnv, url: string): Promise<void> {\n /* url format:\n https://onlyoffice-server.com/cache/files/data/-33120641_7158/output.pptx/output.pptx\n ?md5=duFHKC-5d47s-RRcYn3hAw&expires=1739400549&shardkey=-33120641&filename=output.pptx\n */\n const urlParams = new URLSearchParams(url.split('?').at(-1))\n // it is not the md5 of the file but the md5 generated by the combination of the elements of the url\n const md5: string = urlParams.get('md5')\n const tmpFilePath = await uniqueFilePathFromDir(path.join(os.tmpdir(), `${md5}-${urlParams.get('filename')}`))\n\n // convert the remote file to the local file with the current extension if these extensions aren't equal\n const localExtension = path.extname(space.realPath).slice(1)\n const remoteExtension = path.extname(urlParams.get('filename')).slice(1)\n\n let downloadUrl: string\n if (localExtension !== remoteExtension && !ONLY_OFFICE_CONVERT_EXTENSIONS.ALLOW_AUTO.has(localExtension)) {\n if (ONLY_OFFICE_CONVERT_EXTENSIONS.FROM.has(remoteExtension) && ONLY_OFFICE_CONVERT_EXTENSIONS.TO.has(localExtension)) {\n downloadUrl = await this.convertDocument(urlParams.get('shardkey'), url, remoteExtension, localExtension, space.url)\n } else {\n throw new Error(`document cannot be converted from ${remoteExtension} -> ${localExtension} : ${space.url}`)\n }\n } else {\n downloadUrl = url\n }\n\n // download file\n let res: AxiosResponse\n try {\n res = await this.http.axiosRef({\n method: HTTP_METHOD.GET,\n url: downloadUrl,\n responseType: 'stream',\n httpsAgent: new https.Agent({ rejectUnauthorized: this.rejectUnauthorized })\n })\n await writeFromStream(tmpFilePath, res.data)\n } catch (e) {\n throw new Error(`unable to get document : ${e.message}`)\n }\n\n // try to verify the downloaded size\n const contentLength = parseInt(res.headers['content-length'], 10)\n if (!isNaN(contentLength) && contentLength !== 0) {\n const tmpFileSize = await fileSize(tmpFilePath)\n if (tmpFileSize !== contentLength) {\n throw new Error(`document size differs (${tmpFileSize} != ${contentLength})`)\n }\n } else if (contentLength === 0) {\n this.logger.warn(`${this.saveDocument.name} - content length is 0 : ${space.url}`)\n }\n // copy contents to avoid inode changes (`file.id` in some cases)\n try {\n // todo: versioning\n await copyFileContent(tmpFilePath, space.realPath)\n await removeFiles(tmpFilePath)\n } catch (e) {\n throw new Error(`unable to save document : ${e.message}`)\n }\n }\n\n private async convertDocument(id: string, url: string, fileType: string, outputType: string, spaceUrl: string): Promise<string> {\n const key: string = `${id}-${crypto.randomBytes(20).toString('hex')}`.slice(0, 20).replace('-', '_')\n const payload: OnlyOfficeConvertForm = {\n key: key,\n url: url,\n filetype: fileType,\n outputtype: outputType,\n async: false\n }\n payload.token = await this.genPayloadToken(payload)\n let result: { fileUrl?: string; fileType?: string; endConvert?: boolean; error?: number }\n try {\n const res: AxiosResponse = await this.http.axiosRef({\n method: HTTP_METHOD.POST,\n url: this.convertUrl,\n data: payload,\n httpsAgent: new https.Agent({ rejectUnauthorized: this.rejectUnauthorized })\n })\n result = res.data\n } catch (e) {\n throw new Error(`convert failed with status : ${e.response.status}`)\n }\n if (result.error) {\n throw new Error(`convert failed with reason : ${ONLY_OFFICE_CONVERT_ERROR.get(result.error)}`)\n }\n if (result.endConvert) {\n this.logger.log(`${this.convertDocument.name} - ${fileType} -> ${outputType} : ${spaceUrl}`)\n return result.fileUrl\n }\n }\n\n private getCacheKey(dbFile: FileDBProps): string {\n return `${ONLY_OFFICE_CACHE_KEY}|${genUniqHashFromFileDBProps(dbFile)}`\n }\n}\n"],"names":["OnlyOfficeManager","getSettings","user","space","req","isPathExists","realPath","HttpException","HttpStatus","BAD_REQUEST","isPathIsDir","fileExtension","path","extname","slice","ONLY_OFFICE_EXTENSIONS","has","hasLock","mode","haveSpaceEnvPermissions","SPACE_OPERATION","MODIFY","FILE_MODE","EDIT","VIEW","filesLockManager","checkConflicts","dbFile","DEPTH","RESOURCE","userId","id","app","ONLY_OFFICE_APP_LOCK","lockScope","LOCK_SCOPE","SHARED","e","LockConflict","convertLockToFileLockProps","lock","logger","error","name","INTERNAL_SERVER_ERROR","isMobile","mobileRegex","test","headers","authToken","genAuthToken","fileUrl","buildUrl","API_ONLY_OFFICE_DOCUMENT","url","callBackUrl","API_ONLY_OFFICE_CALLBACK","config","genConfiguration","token","genPayloadToken","callBack","callBackData","jwt","verifyAsync","secret","configuration","applications","files","onlyoffice","status","checkFileLock","debug","notmodified","saveDocument","removeFileLock","removeDocumentKey","message","canEdit","documentType","get","documentServerUrl","externalOnlyOfficeServer","contextManager","headerOriginUrl","ONLY_OFFICE_INTERNAL_URI","type","height","width","document","title","basename","relativeUrl","fileType","key","getDocumentKey","permissions","download","edit","changeHistory","comment","fillForms","print","review","editorConfig","lang","region","callbackUrl","toString","fullName","email","image","getAvatarBase64","login","coEditing","change","embedded","embedUrl","saveUrl","shareUrl","toolbarDocked","customization","about","autosave","forcesave","zoom","help","features","featuresTips","plugins","basePath","spaceUrl","URL","searchParams","set","ONLY_OFFICE_TOKEN_QUERY_PARAM_NAME","payload","signAsync","expiresIn","identity","language","role","auth","access","expiration","action","actions","Array","isArray","users","parseInt","userid","length","createFileLock","ok","_fileLock","create","lockRoot","lockToken","LOCKED","getLocksByPath","owner","removeLock","isPathLocked","cacheKey","getCacheKey","r","cache","del","existingDocKey","docKey","genEtag","urlParams","URLSearchParams","split","at","md5","tmpFilePath","uniqueFilePathFromDir","join","os","tmpdir","localExtension","remoteExtension","downloadUrl","ONLY_OFFICE_CONVERT_EXTENSIONS","ALLOW_AUTO","FROM","TO","convertDocument","Error","res","http","axiosRef","method","HTTP_METHOD","GET","responseType","httpsAgent","https","Agent","rejectUnauthorized","writeFromStream","data","contentLength","isNaN","tmpFileSize","fileSize","warn","copyFileContent","removeFiles","outputType","crypto","randomBytes","replace","filetype","outputtype","async","result","POST","convertUrl","response","ONLY_OFFICE_CONVERT_ERROR","endConvert","log","ONLY_OFFICE_CACHE_KEY","genUniqHashFromFileDBProps","Logger","externalServer","verifySSL","convertHumanTimeToSeconds","refresh"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../../backend/src/applications/files/modules/only-office/only-office-manager.service.ts"],"sourcesContent":["import { HttpService } from '@nestjs/axios'\nimport { HttpException, HttpStatus, Injectable, Logger } from '@nestjs/common'\nimport { JwtService } from '@nestjs/jwt'\nimport { AxiosResponse } from 'axios'\nimport https from 'https'\nimport crypto from 'node:crypto'\nimport os from 'node:os'\nimport path from 'node:path'\nimport { JwtIdentityPayload } from '../../../../authentication/interfaces/jwt-payload.interface'\nimport { convertHumanTimeToSeconds } from '../../../../common/functions'\nimport { configuration } from '../../../../configuration/config.environment'\nimport { Cache } from '../../../../infrastructure/cache/services/cache.service'\nimport { ContextManager } from '../../../../infrastructure/context/services/context-manager.service'\nimport { HTTP_METHOD } from '../../../applications.constants'\nimport { SPACE_OPERATION } from '../../../spaces/constants/spaces'\nimport { FastifySpaceRequest } from '../../../spaces/interfaces/space-request.interface'\nimport type { SpaceEnv } from '../../../spaces/models/space-env.model'\nimport { haveSpaceEnvPermissions } from '../../../spaces/utils/permissions'\nimport type { UserModel } from '../../../users/models/user.model'\nimport { getAvatarBase64 } from '../../../users/utils/avatar'\nimport { DEPTH, LOCK_SCOPE } from '../../../webdav/constants/webdav'\nimport { FILE_MODE } from '../../constants/operations'\nimport type { FileDBProps } from '../../interfaces/file-db-props.interface'\nimport { FileLockOptions } from '../../interfaces/file-lock.interface'\nimport { FileLockProps } from '../../interfaces/file-props.interface'\nimport { LockConflict } from '../../models/file-lock-error'\nimport { FilesLockManager } from '../../services/files-lock-manager.service'\nimport {\n copyFileContent,\n fileSize,\n genEtag,\n genUniqHashFromFileDBProps,\n isPathExists,\n isPathIsDir,\n removeFiles,\n uniqueFilePathFromDir,\n writeFromStream\n} from '../../utils/files'\nimport {\n ONLY_OFFICE_APP_LOCK,\n ONLY_OFFICE_CACHE_KEY,\n ONLY_OFFICE_CONVERT_ERROR,\n ONLY_OFFICE_CONVERT_EXTENSIONS,\n ONLY_OFFICE_EXTENSIONS,\n ONLY_OFFICE_INTERNAL_URI,\n ONLY_OFFICE_TOKEN_QUERY_PARAM_NAME\n} from './only-office.constants'\nimport { OnlyOfficeReqDto } from './only-office.dtos'\nimport { OnlyOfficeCallBack, OnlyOfficeConfig, OnlyOfficeConvertForm } from './only-office.interface'\nimport { API_ONLY_OFFICE_CALLBACK, API_ONLY_OFFICE_DOCUMENT } from './only-office.routes'\n\n@Injectable()\nexport class OnlyOfficeManager {\n private logger = new Logger(OnlyOfficeManager.name)\n private readonly externalOnlyOfficeServer = configuration.applications.files.onlyoffice.externalServer || null\n private readonly rejectUnauthorized: boolean = !configuration.applications.files.onlyoffice?.verifySSL\n private readonly convertUrl = this.externalOnlyOfficeServer ? `${this.externalOnlyOfficeServer}/ConvertService.ashx` : null\n private readonly expiration = convertHumanTimeToSeconds(configuration.auth.token.refresh.expiration)\n private readonly mobileRegex: RegExp = /android|webos|iphone|ipad|ipod|blackberry|windows phone|opera mini|iemobile|mobile/i\n\n constructor(\n private readonly http: HttpService,\n private readonly contextManager: ContextManager,\n private readonly cache: Cache,\n private readonly jwt: JwtService,\n private readonly filesLockManager: FilesLockManager\n ) {}\n\n async getSettings(user: UserModel, space: SpaceEnv, req: FastifySpaceRequest): Promise<OnlyOfficeReqDto> {\n if (!(await isPathExists(space.realPath))) {\n throw new HttpException('Document not found', HttpStatus.BAD_REQUEST)\n }\n if (await isPathIsDir(space.realPath)) {\n throw new HttpException('Document must be a file', HttpStatus.BAD_REQUEST)\n }\n const fileExtension = path.extname(space.realPath).slice(1)\n if (!ONLY_OFFICE_EXTENSIONS.has(fileExtension)) {\n throw new HttpException('Document not supported', HttpStatus.BAD_REQUEST)\n }\n let hasLock: false | FileLockProps = false\n let mode: FILE_MODE = haveSpaceEnvPermissions(space, SPACE_OPERATION.MODIFY) ? FILE_MODE.EDIT : FILE_MODE.VIEW\n if (mode === FILE_MODE.EDIT) {\n // Check lock conflicts\n try {\n await this.filesLockManager.checkConflicts(space.dbFile, DEPTH.RESOURCE, {\n userId: user.id,\n app: ONLY_OFFICE_APP_LOCK,\n lockScope: LOCK_SCOPE.SHARED\n })\n } catch (e) {\n if (e instanceof LockConflict) {\n hasLock = this.filesLockManager.convertLockToFileLockProps(e.lock)\n mode = FILE_MODE.VIEW\n } else {\n this.logger.error({ tag: this.getSettings.name, msg: `${e}` })\n throw new HttpException('Unable to check file lock', HttpStatus.INTERNAL_SERVER_ERROR)\n }\n }\n }\n const isMobile: boolean = this.mobileRegex.test(req.headers['user-agent'])\n const authToken: string = await this.genAuthToken(user)\n const fileUrl = this.buildUrl(API_ONLY_OFFICE_DOCUMENT, space.url, authToken)\n const callBackUrl = this.buildUrl(API_ONLY_OFFICE_CALLBACK, space.url, authToken)\n const config: OnlyOfficeReqDto = await this.genConfiguration(user, space, mode, fileUrl, fileExtension, callBackUrl, isMobile, hasLock)\n config.config.token = await this.genPayloadToken(config.config)\n return config\n }\n\n async callBack(user: UserModel, space: SpaceEnv, token: string) {\n const callBackData: OnlyOfficeCallBack = await this.jwt.verifyAsync(token, { secret: configuration.applications.files.onlyoffice.secret })\n try {\n switch (callBackData.status) {\n case 1:\n // users connect / disconnect\n await this.checkFileLock(user, space, callBackData)\n this.logger.debug({ tag: this.callBack.name, msg: `document is being edited : ${space.url}` })\n break\n case 2:\n // No active users on the document\n await this.checkFileLock(user, space, callBackData)\n if (callBackData.notmodified) {\n this.logger.debug({ tag: this.callBack.name, msg: `document was edited but closed with no changes : ${space.url}` })\n } else {\n this.logger.debug({ tag: this.callBack.name, msg: `document was edited and closed but not saved (let's do it) : ${space.url}` })\n await this.saveDocument(space, callBackData.url)\n }\n await this.removeFileLock(user.id, space)\n await this.removeDocumentKey(space)\n break\n case 3:\n this.logger.error({ tag: this.callBack.name, msg: `document cannot be saved, an error has occurred (try to save it) : ${space.url}` })\n await this.saveDocument(space, callBackData.url)\n break\n case 4:\n // No active users on the document\n await this.removeFileLock(user.id, space)\n await this.removeDocumentKey(space)\n this.logger.debug({ tag: this.callBack.name, msg: `document was closed with no changes : ${space.url}` })\n break\n case 6:\n this.logger.debug({ tag: this.callBack.name, msg: `document is edited but save was requested : ${space.url}` })\n await this.saveDocument(space, callBackData.url)\n break\n case 7:\n this.logger.error({ tag: this.callBack.name, msg: `document cannot be force saved, an error has occurred (try to save it) : ${space.url}` })\n await this.saveDocument(space, callBackData.url)\n break\n default:\n this.logger.error({ tag: this.callBack.name, msg: 'unhandled case' })\n }\n } catch (e) {\n this.logger.error({ tag: this.callBack.name, msg: `${e.message} : ${space.url}` })\n return { error: e.message }\n }\n return { error: 0 }\n }\n\n private async genConfiguration(\n user: UserModel,\n space: SpaceEnv,\n mode: FILE_MODE,\n fileUrl: string,\n fileExtension: string,\n callBackUrl: string,\n isMobile: boolean,\n hasLock: false | FileLockProps\n ): Promise<OnlyOfficeReqDto> {\n const canEdit = mode === FILE_MODE.EDIT\n const documentType = ONLY_OFFICE_EXTENSIONS.get(fileExtension)\n return {\n hasLock: hasLock,\n documentServerUrl: this.externalOnlyOfficeServer || `${this.contextManager.headerOriginUrl()}${ONLY_OFFICE_INTERNAL_URI}`,\n config: {\n type: isMobile ? 'mobile' : 'desktop',\n height: '100%',\n width: '100%',\n documentType: documentType,\n document: {\n title: path.basename(space.relativeUrl),\n fileType: fileExtension,\n key: await this.getDocumentKey(space),\n permissions: {\n download: true,\n edit: canEdit,\n changeHistory: false,\n comment: canEdit,\n fillForms: canEdit,\n print: true,\n review: canEdit\n },\n url: fileUrl\n },\n editorConfig: {\n mode: mode,\n lang: 'en',\n region: 'en',\n callbackUrl: callBackUrl,\n user: { id: user.id.toString(), name: `${user.fullName} (${user.email})`, image: await getAvatarBase64(user.login) },\n coEditing: {\n mode: 'fast',\n change: true\n },\n embedded: {\n embedUrl: fileUrl,\n saveUrl: fileUrl,\n shareUrl: fileUrl,\n toolbarDocked: 'top'\n },\n customization: {\n about: false,\n autosave: false,\n forcesave: true,\n zoom: documentType === 'slide' ? 60 : 90,\n help: false,\n features: { featuresTips: false },\n plugins: false\n }\n }\n }\n }\n }\n\n private buildUrl(basePath: string, spaceUrl: string, token: string): string {\n const url = new URL(`${basePath}/${spaceUrl}`, this.contextManager.headerOriginUrl())\n url.searchParams.set(ONLY_OFFICE_TOKEN_QUERY_PARAM_NAME, token)\n return url.toString()\n }\n\n private genPayloadToken(payload: OnlyOfficeConfig | OnlyOfficeConvertForm): Promise<string> {\n return this.jwt.signAsync(payload, { secret: configuration.applications.files.onlyoffice.secret, expiresIn: 60 })\n }\n\n private genAuthToken(user: UserModel): Promise<string> {\n // use refresh expiration to allow long sessions\n return this.jwt.signAsync(\n {\n identity: {\n id: user.id,\n login: user.login,\n email: user.email,\n fullName: user.fullName,\n language: user.language,\n role: user.role,\n applications: user.applications\n } satisfies JwtIdentityPayload\n },\n {\n secret: configuration.auth.token.access.secret,\n expiresIn: this.expiration\n }\n )\n }\n\n private async checkFileLock(user: UserModel, space: SpaceEnv, callBackData: OnlyOfficeCallBack) {\n for (const action of callBackData.actions) {\n if (action.type === 0) {\n // Disconnect\n // Remove the lock if no other users are active on the document\n if (!Array.isArray(callBackData.users)) {\n await this.removeFileLock(parseInt(action.userid), space)\n }\n } else if (action.type === 1) {\n // Connect\n // Create the lock if it's the first user to open the document\n if (Array.isArray(callBackData.users) && callBackData.users.length === 1) {\n await this.createFileLock(user, space)\n }\n }\n }\n }\n\n private async createFileLock(user: UserModel, space: SpaceEnv): Promise<void> {\n const [ok, _fileLock] = await this.filesLockManager.create(\n user,\n space.dbFile,\n ONLY_OFFICE_APP_LOCK,\n DEPTH.RESOURCE,\n {\n lockRoot: null,\n lockToken: null,\n lockScope: LOCK_SCOPE.SHARED\n } satisfies FileLockOptions,\n this.expiration\n )\n if (!ok) {\n throw new HttpException('The file is locked', HttpStatus.LOCKED)\n }\n }\n\n private async removeFileLock(userId: number, space: SpaceEnv): Promise<void> {\n for (const lock of await this.filesLockManager.getLocksByPath(space.dbFile)) {\n if (lock.owner.id === userId) {\n await this.filesLockManager.removeLock(lock.key)\n }\n }\n }\n\n private async removeDocumentKey(space: SpaceEnv): Promise<void> {\n if (!(await this.filesLockManager.isPathLocked(space.dbFile))) {\n const cacheKey = this.getCacheKey(space.dbFile)\n const r = await this.cache.del(cacheKey)\n this.logger.debug({ tag: this.removeDocumentKey.name, msg: `${cacheKey} ${r ? '' : 'not'} removed` })\n }\n }\n\n private async getDocumentKey(space: SpaceEnv): Promise<string> {\n // Uniq key to identify the document in OnlyOffice\n const cacheKey = this.getCacheKey(space.dbFile)\n const existingDocKey: string = await this.cache.get(cacheKey)\n if (existingDocKey) {\n return existingDocKey\n }\n const docKey = genEtag(null, space.realPath, false)\n await this.cache.set(cacheKey, docKey, this.expiration)\n this.logger.debug({ tag: this.getDocumentKey.name, msg: `${cacheKey} (${docKey}) created` })\n return docKey\n }\n\n private async saveDocument(space: SpaceEnv, url: string): Promise<void> {\n /* url format:\n https://onlyoffice-server.com/cache/files/data/-33120641_7158/output.pptx/output.pptx\n ?md5=duFHKC-5d47s-RRcYn3hAw&expires=1739400549&shardkey=-33120641&filename=output.pptx\n */\n const urlParams = new URLSearchParams(url.split('?').at(-1))\n // it is not the md5 of the file but the md5 generated by the combination of the elements of the url\n const md5: string = urlParams.get('md5')\n const tmpFilePath = await uniqueFilePathFromDir(path.join(os.tmpdir(), `${md5}-${urlParams.get('filename')}`))\n\n // convert the remote file to the local file with the current extension if these extensions aren't equal\n const localExtension = path.extname(space.realPath).slice(1)\n const remoteExtension = path.extname(urlParams.get('filename')).slice(1)\n\n let downloadUrl: string\n if (localExtension !== remoteExtension && !ONLY_OFFICE_CONVERT_EXTENSIONS.ALLOW_AUTO.has(localExtension)) {\n if (ONLY_OFFICE_CONVERT_EXTENSIONS.FROM.has(remoteExtension) && ONLY_OFFICE_CONVERT_EXTENSIONS.TO.has(localExtension)) {\n downloadUrl = await this.convertDocument(urlParams.get('shardkey'), url, remoteExtension, localExtension, space.url)\n } else {\n throw new Error(`document cannot be converted from ${remoteExtension} -> ${localExtension} : ${space.url}`)\n }\n } else {\n downloadUrl = url\n }\n\n // download file\n let res: AxiosResponse\n try {\n res = await this.http.axiosRef({\n method: HTTP_METHOD.GET,\n url: downloadUrl,\n responseType: 'stream',\n httpsAgent: new https.Agent({ rejectUnauthorized: this.rejectUnauthorized })\n })\n await writeFromStream(tmpFilePath, res.data)\n } catch (e) {\n throw new Error(`unable to get document : ${e.message}`)\n }\n\n // try to verify the downloaded size\n const contentLength = parseInt(res.headers['content-length'], 10)\n if (!isNaN(contentLength) && contentLength !== 0) {\n const tmpFileSize = await fileSize(tmpFilePath)\n if (tmpFileSize !== contentLength) {\n throw new Error(`document size differs (${tmpFileSize} != ${contentLength})`)\n }\n } else if (contentLength === 0) {\n this.logger.warn({ tag: this.saveDocument.name, msg: `content length is 0 : ${space.url}` })\n }\n // copy contents to avoid inode changes (`file.id` in some cases)\n try {\n // todo: versioning\n await copyFileContent(tmpFilePath, space.realPath)\n await removeFiles(tmpFilePath)\n } catch (e) {\n throw new Error(`unable to save document : ${e.message}`)\n }\n }\n\n private async convertDocument(id: string, url: string, fileType: string, outputType: string, spaceUrl: string): Promise<string> {\n const key: string = `${id}-${crypto.randomBytes(20).toString('hex')}`.slice(0, 20).replace('-', '_')\n const payload: OnlyOfficeConvertForm = {\n key: key,\n url: url,\n filetype: fileType,\n outputtype: outputType,\n async: false\n }\n payload.token = await this.genPayloadToken(payload)\n let result: { fileUrl?: string; fileType?: string; endConvert?: boolean; error?: number }\n try {\n const res: AxiosResponse = await this.http.axiosRef({\n method: HTTP_METHOD.POST,\n url: this.convertUrl,\n data: payload,\n httpsAgent: new https.Agent({ rejectUnauthorized: this.rejectUnauthorized })\n })\n result = res.data\n } catch (e) {\n throw new Error(`convert failed with status : ${e.response.status}`)\n }\n if (result.error) {\n throw new Error(`convert failed with reason : ${ONLY_OFFICE_CONVERT_ERROR.get(result.error)}`)\n }\n if (result.endConvert) {\n this.logger.log({ tag: this.convertDocument.name, msg: `${fileType} -> ${outputType} : ${spaceUrl}` })\n return result.fileUrl\n }\n }\n\n private getCacheKey(dbFile: FileDBProps): string {\n return `${ONLY_OFFICE_CACHE_KEY}|${genUniqHashFromFileDBProps(dbFile)}`\n }\n}\n"],"names":["OnlyOfficeManager","getSettings","user","space","req","isPathExists","realPath","HttpException","HttpStatus","BAD_REQUEST","isPathIsDir","fileExtension","path","extname","slice","ONLY_OFFICE_EXTENSIONS","has","hasLock","mode","haveSpaceEnvPermissions","SPACE_OPERATION","MODIFY","FILE_MODE","EDIT","VIEW","filesLockManager","checkConflicts","dbFile","DEPTH","RESOURCE","userId","id","app","ONLY_OFFICE_APP_LOCK","lockScope","LOCK_SCOPE","SHARED","e","LockConflict","convertLockToFileLockProps","lock","logger","error","tag","name","msg","INTERNAL_SERVER_ERROR","isMobile","mobileRegex","test","headers","authToken","genAuthToken","fileUrl","buildUrl","API_ONLY_OFFICE_DOCUMENT","url","callBackUrl","API_ONLY_OFFICE_CALLBACK","config","genConfiguration","token","genPayloadToken","callBack","callBackData","jwt","verifyAsync","secret","configuration","applications","files","onlyoffice","status","checkFileLock","debug","notmodified","saveDocument","removeFileLock","removeDocumentKey","message","canEdit","documentType","get","documentServerUrl","externalOnlyOfficeServer","contextManager","headerOriginUrl","ONLY_OFFICE_INTERNAL_URI","type","height","width","document","title","basename","relativeUrl","fileType","key","getDocumentKey","permissions","download","edit","changeHistory","comment","fillForms","print","review","editorConfig","lang","region","callbackUrl","toString","fullName","email","image","getAvatarBase64","login","coEditing","change","embedded","embedUrl","saveUrl","shareUrl","toolbarDocked","customization","about","autosave","forcesave","zoom","help","features","featuresTips","plugins","basePath","spaceUrl","URL","searchParams","set","ONLY_OFFICE_TOKEN_QUERY_PARAM_NAME","payload","signAsync","expiresIn","identity","language","role","auth","access","expiration","action","actions","Array","isArray","users","parseInt","userid","length","createFileLock","ok","_fileLock","create","lockRoot","lockToken","LOCKED","getLocksByPath","owner","removeLock","isPathLocked","cacheKey","getCacheKey","r","cache","del","existingDocKey","docKey","genEtag","urlParams","URLSearchParams","split","at","md5","tmpFilePath","uniqueFilePathFromDir","join","os","tmpdir","localExtension","remoteExtension","downloadUrl","ONLY_OFFICE_CONVERT_EXTENSIONS","ALLOW_AUTO","FROM","TO","convertDocument","Error","res","http","axiosRef","method","HTTP_METHOD","GET","responseType","httpsAgent","https","Agent","rejectUnauthorized","writeFromStream","data","contentLength","isNaN","tmpFileSize","fileSize","warn","copyFileContent","removeFiles","outputType","crypto","randomBytes","replace","filetype","outputtype","async","result","POST","convertUrl","response","ONLY_OFFICE_CONVERT_ERROR","endConvert","log","ONLY_OFFICE_CACHE_KEY","genUniqHashFromFileDBProps","Logger","externalServer","verifySSL","convertHumanTimeToSeconds","refresh"],"mappings":";;;;+BAoDaA;;;eAAAA;;;uBApDe;wBACkC;qBACnC;8DAET;mEACC;+DACJ;iEACE;2BAEyB;mCACZ;8BACR;uCACS;uCACH;wBACI;6BAGQ;wBAER;wBACE;4BACR;+BAIG;yCACI;uBAW1B;qCASA;kCAG4D;;;;;;;;;;;;;;;AAG5D,IAAA,AAAMA,oBAAN,MAAMA;IAgBX,MAAMC,YAAYC,IAAe,EAAEC,KAAe,EAAEC,GAAwB,EAA6B;QACvG,IAAI,CAAE,MAAMC,IAAAA,mBAAY,EAACF,MAAMG,QAAQ,GAAI;YACzC,MAAM,IAAIC,qBAAa,CAAC,sBAAsBC,kBAAU,CAACC,WAAW;QACtE;QACA,IAAI,MAAMC,IAAAA,kBAAW,EAACP,MAAMG,QAAQ,GAAG;YACrC,MAAM,IAAIC,qBAAa,CAAC,2BAA2BC,kBAAU,CAACC,WAAW;QAC3E;QACA,MAAME,gBAAgBC,iBAAI,CAACC,OAAO,CAACV,MAAMG,QAAQ,EAAEQ,KAAK,CAAC;QACzD,IAAI,CAACC,2CAAsB,CAACC,GAAG,CAACL,gBAAgB;YAC9C,MAAM,IAAIJ,qBAAa,CAAC,0BAA0BC,kBAAU,CAACC,WAAW;QAC1E;QACA,IAAIQ,UAAiC;QACrC,IAAIC,OAAkBC,IAAAA,oCAAuB,EAAChB,OAAOiB,uBAAe,CAACC,MAAM,IAAIC,qBAAS,CAACC,IAAI,GAAGD,qBAAS,CAACE,IAAI;QAC9G,IAAIN,SAASI,qBAAS,CAACC,IAAI,EAAE;YAC3B,uBAAuB;YACvB,IAAI;gBACF,MAAM,IAAI,CAACE,gBAAgB,CAACC,cAAc,CAACvB,MAAMwB,MAAM,EAAEC,aAAK,CAACC,QAAQ,EAAE;oBACvEC,QAAQ5B,KAAK6B,EAAE;oBACfC,KAAKC,yCAAoB;oBACzBC,WAAWC,kBAAU,CAACC,MAAM;gBAC9B;YACF,EAAE,OAAOC,GAAG;gBACV,IAAIA,aAAaC,2BAAY,EAAE;oBAC7BrB,UAAU,IAAI,CAACQ,gBAAgB,CAACc,0BAA0B,CAACF,EAAEG,IAAI;oBACjEtB,OAAOI,qBAAS,CAACE,IAAI;gBACvB,OAAO;oBACL,IAAI,CAACiB,MAAM,CAACC,KAAK,CAAC;wBAAEC,KAAK,IAAI,CAAC1C,WAAW,CAAC2C,IAAI;wBAAEC,KAAK,GAAGR,GAAG;oBAAC;oBAC5D,MAAM,IAAI9B,qBAAa,CAAC,6BAA6BC,kBAAU,CAACsC,qBAAqB;gBACvF;YACF;QACF;QACA,MAAMC,WAAoB,IAAI,CAACC,WAAW,CAACC,IAAI,CAAC7C,IAAI8C,OAAO,CAAC,aAAa;QACzE,MAAMC,YAAoB,MAAM,IAAI,CAACC,YAAY,CAAClD;QAClD,MAAMmD,UAAU,IAAI,CAACC,QAAQ,CAACC,0CAAwB,EAAEpD,MAAMqD,GAAG,EAAEL;QACnE,MAAMM,cAAc,IAAI,CAACH,QAAQ,CAACI,0CAAwB,EAAEvD,MAAMqD,GAAG,EAAEL;QACvE,MAAMQ,SAA2B,MAAM,IAAI,CAACC,gBAAgB,CAAC1D,MAAMC,OAAOe,MAAMmC,SAAS1C,eAAe8C,aAAaV,UAAU9B;QAC/H0C,OAAOA,MAAM,CAACE,KAAK,GAAG,MAAM,IAAI,CAACC,eAAe,CAACH,OAAOA,MAAM;QAC9D,OAAOA;IACT;IAEA,MAAMI,SAAS7D,IAAe,EAAEC,KAAe,EAAE0D,KAAa,EAAE;QAC9D,MAAMG,eAAmC,MAAM,IAAI,CAACC,GAAG,CAACC,WAAW,CAACL,OAAO;YAAEM,QAAQC,gCAAa,CAACC,YAAY,CAACC,KAAK,CAACC,UAAU,CAACJ,MAAM;QAAC;QACxI,IAAI;YACF,OAAQH,aAAaQ,MAAM;gBACzB,KAAK;oBACH,6BAA6B;oBAC7B,MAAM,IAAI,CAACC,aAAa,CAACvE,MAAMC,OAAO6D;oBACtC,IAAI,CAACvB,MAAM,CAACiC,KAAK,CAAC;wBAAE/B,KAAK,IAAI,CAACoB,QAAQ,CAACnB,IAAI;wBAAEC,KAAK,CAAC,2BAA2B,EAAE1C,MAAMqD,GAAG,EAAE;oBAAC;oBAC5F;gBACF,KAAK;oBACH,kCAAkC;oBAClC,MAAM,IAAI,CAACiB,aAAa,CAACvE,MAAMC,OAAO6D;oBACtC,IAAIA,aAAaW,WAAW,EAAE;wBAC5B,IAAI,CAAClC,MAAM,CAACiC,KAAK,CAAC;4BAAE/B,KAAK,IAAI,CAACoB,QAAQ,CAACnB,IAAI;4BAAEC,KAAK,CAAC,iDAAiD,EAAE1C,MAAMqD,GAAG,EAAE;wBAAC;oBACpH,OAAO;wBACL,IAAI,CAACf,MAAM,CAACiC,KAAK,CAAC;4BAAE/B,KAAK,IAAI,CAACoB,QAAQ,CAACnB,IAAI;4BAAEC,KAAK,CAAC,6DAA6D,EAAE1C,MAAMqD,GAAG,EAAE;wBAAC;wBAC9H,MAAM,IAAI,CAACoB,YAAY,CAACzE,OAAO6D,aAAaR,GAAG;oBACjD;oBACA,MAAM,IAAI,CAACqB,cAAc,CAAC3E,KAAK6B,EAAE,EAAE5B;oBACnC,MAAM,IAAI,CAAC2E,iBAAiB,CAAC3E;oBAC7B;gBACF,KAAK;oBACH,IAAI,CAACsC,MAAM,CAACC,KAAK,CAAC;wBAAEC,KAAK,IAAI,CAACoB,QAAQ,CAACnB,IAAI;wBAAEC,KAAK,CAAC,mEAAmE,EAAE1C,MAAMqD,GAAG,EAAE;oBAAC;oBACpI,MAAM,IAAI,CAACoB,YAAY,CAACzE,OAAO6D,aAAaR,GAAG;oBAC/C;gBACF,KAAK;oBACH,kCAAkC;oBAClC,MAAM,IAAI,CAACqB,cAAc,CAAC3E,KAAK6B,EAAE,EAAE5B;oBACnC,MAAM,IAAI,CAAC2E,iBAAiB,CAAC3E;oBAC7B,IAAI,CAACsC,MAAM,CAACiC,KAAK,CAAC;wBAAE/B,KAAK,IAAI,CAACoB,QAAQ,CAACnB,IAAI;wBAAEC,KAAK,CAAC,sCAAsC,EAAE1C,MAAMqD,GAAG,EAAE;oBAAC;oBACvG;gBACF,KAAK;oBACH,IAAI,CAACf,MAAM,CAACiC,KAAK,CAAC;wBAAE/B,KAAK,IAAI,CAACoB,QAAQ,CAACnB,IAAI;wBAAEC,KAAK,CAAC,4CAA4C,EAAE1C,MAAMqD,GAAG,EAAE;oBAAC;oBAC7G,MAAM,IAAI,CAACoB,YAAY,CAACzE,OAAO6D,aAAaR,GAAG;oBAC/C;gBACF,KAAK;oBACH,IAAI,CAACf,MAAM,CAACC,KAAK,CAAC;wBAAEC,KAAK,IAAI,CAACoB,QAAQ,CAACnB,IAAI;wBAAEC,KAAK,CAAC,yEAAyE,EAAE1C,MAAMqD,GAAG,EAAE;oBAAC;oBAC1I,MAAM,IAAI,CAACoB,YAAY,CAACzE,OAAO6D,aAAaR,GAAG;oBAC/C;gBACF;oBACE,IAAI,CAACf,MAAM,CAACC,KAAK,CAAC;wBAAEC,KAAK,IAAI,CAACoB,QAAQ,CAACnB,IAAI;wBAAEC,KAAK;oBAAiB;YACvE;QACF,EAAE,OAAOR,GAAG;YACV,IAAI,CAACI,MAAM,CAACC,KAAK,CAAC;gBAAEC,KAAK,IAAI,CAACoB,QAAQ,CAACnB,IAAI;gBAAEC,KAAK,GAAGR,EAAE0C,OAAO,CAAC,GAAG,EAAE5E,MAAMqD,GAAG,EAAE;YAAC;YAChF,OAAO;gBAAEd,OAAOL,EAAE0C,OAAO;YAAC;QAC5B;QACA,OAAO;YAAErC,OAAO;QAAE;IACpB;IAEA,MAAckB,iBACZ1D,IAAe,EACfC,KAAe,EACfe,IAAe,EACfmC,OAAe,EACf1C,aAAqB,EACrB8C,WAAmB,EACnBV,QAAiB,EACjB9B,OAA8B,EACH;QAC3B,MAAM+D,UAAU9D,SAASI,qBAAS,CAACC,IAAI;QACvC,MAAM0D,eAAelE,2CAAsB,CAACmE,GAAG,CAACvE;QAChD,OAAO;YACLM,SAASA;YACTkE,mBAAmB,IAAI,CAACC,wBAAwB,IAAI,GAAG,IAAI,CAACC,cAAc,CAACC,eAAe,KAAKC,6CAAwB,EAAE;YACzH5B,QAAQ;gBACN6B,MAAMzC,WAAW,WAAW;gBAC5B0C,QAAQ;gBACRC,OAAO;gBACPT,cAAcA;gBACdU,UAAU;oBACRC,OAAOhF,iBAAI,CAACiF,QAAQ,CAAC1F,MAAM2F,WAAW;oBACtCC,UAAUpF;oBACVqF,KAAK,MAAM,IAAI,CAACC,cAAc,CAAC9F;oBAC/B+F,aAAa;wBACXC,UAAU;wBACVC,MAAMpB;wBACNqB,eAAe;wBACfC,SAAStB;wBACTuB,WAAWvB;wBACXwB,OAAO;wBACPC,QAAQzB;oBACV;oBACAxB,KAAKH;gBACP;gBACAqD,cAAc;oBACZxF,MAAMA;oBACNyF,MAAM;oBACNC,QAAQ;oBACRC,aAAapD;oBACbvD,MAAM;wBAAE6B,IAAI7B,KAAK6B,EAAE,CAAC+E,QAAQ;wBAAIlE,MAAM,GAAG1C,KAAK6G,QAAQ,CAAC,EAAE,EAAE7G,KAAK8G,KAAK,CAAC,CAAC,CAAC;wBAAEC,OAAO,MAAMC,IAAAA,uBAAe,EAAChH,KAAKiH,KAAK;oBAAE;oBACnHC,WAAW;wBACTlG,MAAM;wBACNmG,QAAQ;oBACV;oBACAC,UAAU;wBACRC,UAAUlE;wBACVmE,SAASnE;wBACToE,UAAUpE;wBACVqE,eAAe;oBACjB;oBACAC,eAAe;wBACbC,OAAO;wBACPC,UAAU;wBACVC,WAAW;wBACXC,MAAM9C,iBAAiB,UAAU,KAAK;wBACtC+C,MAAM;wBACNC,UAAU;4BAAEC,cAAc;wBAAM;wBAChCC,SAAS;oBACX;gBACF;YACF;QACF;IACF;IAEQ7E,SAAS8E,QAAgB,EAAEC,QAAgB,EAAExE,KAAa,EAAU;QAC1E,MAAML,MAAM,IAAI8E,IAAI,GAAGF,SAAS,CAAC,EAAEC,UAAU,EAAE,IAAI,CAAChD,cAAc,CAACC,eAAe;QAClF9B,IAAI+E,YAAY,CAACC,GAAG,CAACC,uDAAkC,EAAE5E;QACzD,OAAOL,IAAIsD,QAAQ;IACrB;IAEQhD,gBAAgB4E,OAAiD,EAAmB;QAC1F,OAAO,IAAI,CAACzE,GAAG,CAAC0E,SAAS,CAACD,SAAS;YAAEvE,QAAQC,gCAAa,CAACC,YAAY,CAACC,KAAK,CAACC,UAAU,CAACJ,MAAM;YAAEyE,WAAW;QAAG;IACjH;IAEQxF,aAAalD,IAAe,EAAmB;QACrD,gDAAgD;QAChD,OAAO,IAAI,CAAC+D,GAAG,CAAC0E,SAAS,CACvB;YACEE,UAAU;gBACR9G,IAAI7B,KAAK6B,EAAE;gBACXoF,OAAOjH,KAAKiH,KAAK;gBACjBH,OAAO9G,KAAK8G,KAAK;gBACjBD,UAAU7G,KAAK6G,QAAQ;gBACvB+B,UAAU5I,KAAK4I,QAAQ;gBACvBC,MAAM7I,KAAK6I,IAAI;gBACf1E,cAAcnE,KAAKmE,YAAY;YACjC;QACF,GACA;YACEF,QAAQC,gCAAa,CAAC4E,IAAI,CAACnF,KAAK,CAACoF,MAAM,CAAC9E,MAAM;YAC9CyE,WAAW,IAAI,CAACM,UAAU;QAC5B;IAEJ;IAEA,MAAczE,cAAcvE,IAAe,EAAEC,KAAe,EAAE6D,YAAgC,EAAE;QAC9F,KAAK,MAAMmF,UAAUnF,aAAaoF,OAAO,CAAE;YACzC,IAAID,OAAO3D,IAAI,KAAK,GAAG;gBACrB,aAAa;gBACb,+DAA+D;gBAC/D,IAAI,CAAC6D,MAAMC,OAAO,CAACtF,aAAauF,KAAK,GAAG;oBACtC,MAAM,IAAI,CAAC1E,cAAc,CAAC2E,SAASL,OAAOM,MAAM,GAAGtJ;gBACrD;YACF,OAAO,IAAIgJ,OAAO3D,IAAI,KAAK,GAAG;gBAC5B,UAAU;gBACV,8DAA8D;gBAC9D,IAAI6D,MAAMC,OAAO,CAACtF,aAAauF,KAAK,KAAKvF,aAAauF,KAAK,CAACG,MAAM,KAAK,GAAG;oBACxE,MAAM,IAAI,CAACC,cAAc,CAACzJ,MAAMC;gBAClC;YACF;QACF;IACF;IAEA,MAAcwJ,eAAezJ,IAAe,EAAEC,KAAe,EAAiB;QAC5E,MAAM,CAACyJ,IAAIC,UAAU,GAAG,MAAM,IAAI,CAACpI,gBAAgB,CAACqI,MAAM,CACxD5J,MACAC,MAAMwB,MAAM,EACZM,yCAAoB,EACpBL,aAAK,CAACC,QAAQ,EACd;YACEkI,UAAU;YACVC,WAAW;YACX9H,WAAWC,kBAAU,CAACC,MAAM;QAC9B,GACA,IAAI,CAAC8G,UAAU;QAEjB,IAAI,CAACU,IAAI;YACP,MAAM,IAAIrJ,qBAAa,CAAC,sBAAsBC,kBAAU,CAACyJ,MAAM;QACjE;IACF;IAEA,MAAcpF,eAAe/C,MAAc,EAAE3B,KAAe,EAAiB;QAC3E,KAAK,MAAMqC,QAAQ,CAAA,MAAM,IAAI,CAACf,gBAAgB,CAACyI,cAAc,CAAC/J,MAAMwB,MAAM,CAAA,EAAG;YAC3E,IAAIa,KAAK2H,KAAK,CAACpI,EAAE,KAAKD,QAAQ;gBAC5B,MAAM,IAAI,CAACL,gBAAgB,CAAC2I,UAAU,CAAC5H,KAAKwD,GAAG;YACjD;QACF;IACF;IAEA,MAAclB,kBAAkB3E,KAAe,EAAiB;QAC9D,IAAI,CAAE,MAAM,IAAI,CAACsB,gBAAgB,CAAC4I,YAAY,CAAClK,MAAMwB,MAAM,GAAI;YAC7D,MAAM2I,WAAW,IAAI,CAACC,WAAW,CAACpK,MAAMwB,MAAM;YAC9C,MAAM6I,IAAI,MAAM,IAAI,CAACC,KAAK,CAACC,GAAG,CAACJ;YAC/B,IAAI,CAAC7H,MAAM,CAACiC,KAAK,CAAC;gBAAE/B,KAAK,IAAI,CAACmC,iBAAiB,CAAClC,IAAI;gBAAEC,KAAK,GAAGyH,SAAS,CAAC,EAAEE,IAAI,KAAK,MAAM,QAAQ,CAAC;YAAC;QACrG;IACF;IAEA,MAAcvE,eAAe9F,KAAe,EAAmB;QAC7D,kDAAkD;QAClD,MAAMmK,WAAW,IAAI,CAACC,WAAW,CAACpK,MAAMwB,MAAM;QAC9C,MAAMgJ,iBAAyB,MAAM,IAAI,CAACF,KAAK,CAACvF,GAAG,CAACoF;QACpD,IAAIK,gBAAgB;YAClB,OAAOA;QACT;QACA,MAAMC,SAASC,IAAAA,cAAO,EAAC,MAAM1K,MAAMG,QAAQ,EAAE;QAC7C,MAAM,IAAI,CAACmK,KAAK,CAACjC,GAAG,CAAC8B,UAAUM,QAAQ,IAAI,CAAC1B,UAAU;QACtD,IAAI,CAACzG,MAAM,CAACiC,KAAK,CAAC;YAAE/B,KAAK,IAAI,CAACsD,cAAc,CAACrD,IAAI;YAAEC,KAAK,GAAGyH,SAAS,EAAE,EAAEM,OAAO,SAAS,CAAC;QAAC;QAC1F,OAAOA;IACT;IAEA,MAAchG,aAAazE,KAAe,EAAEqD,GAAW,EAAiB;QACtE;;;KAGC,GACD,MAAMsH,YAAY,IAAIC,gBAAgBvH,IAAIwH,KAAK,CAAC,KAAKC,EAAE,CAAC,CAAC;QACzD,oGAAoG;QACpG,MAAMC,MAAcJ,UAAU5F,GAAG,CAAC;QAClC,MAAMiG,cAAc,MAAMC,IAAAA,4BAAqB,EAACxK,iBAAI,CAACyK,IAAI,CAACC,eAAE,CAACC,MAAM,IAAI,GAAGL,IAAI,CAAC,EAAEJ,UAAU5F,GAAG,CAAC,aAAa;QAE5G,wGAAwG;QACxG,MAAMsG,iBAAiB5K,iBAAI,CAACC,OAAO,CAACV,MAAMG,QAAQ,EAAEQ,KAAK,CAAC;QAC1D,MAAM2K,kBAAkB7K,iBAAI,CAACC,OAAO,CAACiK,UAAU5F,GAAG,CAAC,aAAapE,KAAK,CAAC;QAEtE,IAAI4K;QACJ,IAAIF,mBAAmBC,mBAAmB,CAACE,mDAA8B,CAACC,UAAU,CAAC5K,GAAG,CAACwK,iBAAiB;YACxG,IAAIG,mDAA8B,CAACE,IAAI,CAAC7K,GAAG,CAACyK,oBAAoBE,mDAA8B,CAACG,EAAE,CAAC9K,GAAG,CAACwK,iBAAiB;gBACrHE,cAAc,MAAM,IAAI,CAACK,eAAe,CAACjB,UAAU5F,GAAG,CAAC,aAAa1B,KAAKiI,iBAAiBD,gBAAgBrL,MAAMqD,GAAG;YACrH,OAAO;gBACL,MAAM,IAAIwI,MAAM,CAAC,kCAAkC,EAAEP,gBAAgB,IAAI,EAAED,eAAe,GAAG,EAAErL,MAAMqD,GAAG,EAAE;YAC5G;QACF,OAAO;YACLkI,cAAclI;QAChB;QAEA,gBAAgB;QAChB,IAAIyI;QACJ,IAAI;YACFA,MAAM,MAAM,IAAI,CAACC,IAAI,CAACC,QAAQ,CAAC;gBAC7BC,QAAQC,kCAAW,CAACC,GAAG;gBACvB9I,KAAKkI;gBACLa,cAAc;gBACdC,YAAY,IAAIC,cAAK,CAACC,KAAK,CAAC;oBAAEC,oBAAoB,IAAI,CAACA,kBAAkB;gBAAC;YAC5E;YACA,MAAMC,IAAAA,sBAAe,EAACzB,aAAac,IAAIY,IAAI;QAC7C,EAAE,OAAOxK,GAAG;YACV,MAAM,IAAI2J,MAAM,CAAC,yBAAyB,EAAE3J,EAAE0C,OAAO,EAAE;QACzD;QAEA,oCAAoC;QACpC,MAAM+H,gBAAgBtD,SAASyC,IAAI/I,OAAO,CAAC,iBAAiB,EAAE;QAC9D,IAAI,CAAC6J,MAAMD,kBAAkBA,kBAAkB,GAAG;YAChD,MAAME,cAAc,MAAMC,IAAAA,eAAQ,EAAC9B;YACnC,IAAI6B,gBAAgBF,eAAe;gBACjC,MAAM,IAAId,MAAM,CAAC,uBAAuB,EAAEgB,YAAY,IAAI,EAAEF,cAAc,CAAC,CAAC;YAC9E;QACF,OAAO,IAAIA,kBAAkB,GAAG;YAC9B,IAAI,CAACrK,MAAM,CAACyK,IAAI,CAAC;gBAAEvK,KAAK,IAAI,CAACiC,YAAY,CAAChC,IAAI;gBAAEC,KAAK,CAAC,sBAAsB,EAAE1C,MAAMqD,GAAG,EAAE;YAAC;QAC5F;QACA,iEAAiE;QACjE,IAAI;YACF,mBAAmB;YACnB,MAAM2J,IAAAA,sBAAe,EAAChC,aAAahL,MAAMG,QAAQ;YACjD,MAAM8M,IAAAA,kBAAW,EAACjC;QACpB,EAAE,OAAO9I,GAAG;YACV,MAAM,IAAI2J,MAAM,CAAC,0BAA0B,EAAE3J,EAAE0C,OAAO,EAAE;QAC1D;IACF;IAEA,MAAcgH,gBAAgBhK,EAAU,EAAEyB,GAAW,EAAEuC,QAAgB,EAAEsH,UAAkB,EAAEhF,QAAgB,EAAmB;QAC9H,MAAMrC,MAAc,GAAGjE,GAAG,CAAC,EAAEuL,mBAAM,CAACC,WAAW,CAAC,IAAIzG,QAAQ,CAAC,QAAQ,CAAChG,KAAK,CAAC,GAAG,IAAI0M,OAAO,CAAC,KAAK;QAChG,MAAM9E,UAAiC;YACrC1C,KAAKA;YACLxC,KAAKA;YACLiK,UAAU1H;YACV2H,YAAYL;YACZM,OAAO;QACT;QACAjF,QAAQ7E,KAAK,GAAG,MAAM,IAAI,CAACC,eAAe,CAAC4E;QAC3C,IAAIkF;QACJ,IAAI;YACF,MAAM3B,MAAqB,MAAM,IAAI,CAACC,IAAI,CAACC,QAAQ,CAAC;gBAClDC,QAAQC,kCAAW,CAACwB,IAAI;gBACxBrK,KAAK,IAAI,CAACsK,UAAU;gBACpBjB,MAAMnE;gBACN8D,YAAY,IAAIC,cAAK,CAACC,KAAK,CAAC;oBAAEC,oBAAoB,IAAI,CAACA,kBAAkB;gBAAC;YAC5E;YACAiB,SAAS3B,IAAIY,IAAI;QACnB,EAAE,OAAOxK,GAAG;YACV,MAAM,IAAI2J,MAAM,CAAC,6BAA6B,EAAE3J,EAAE0L,QAAQ,CAACvJ,MAAM,EAAE;QACrE;QACA,IAAIoJ,OAAOlL,KAAK,EAAE;YAChB,MAAM,IAAIsJ,MAAM,CAAC,6BAA6B,EAAEgC,8CAAyB,CAAC9I,GAAG,CAAC0I,OAAOlL,KAAK,GAAG;QAC/F;QACA,IAAIkL,OAAOK,UAAU,EAAE;YACrB,IAAI,CAACxL,MAAM,CAACyL,GAAG,CAAC;gBAAEvL,KAAK,IAAI,CAACoJ,eAAe,CAACnJ,IAAI;gBAAEC,KAAK,GAAGkD,SAAS,IAAI,EAAEsH,WAAW,GAAG,EAAEhF,UAAU;YAAC;YACpG,OAAOuF,OAAOvK,OAAO;QACvB;IACF;IAEQkH,YAAY5I,MAAmB,EAAU;QAC/C,OAAO,GAAGwM,0CAAqB,CAAC,CAAC,EAAEC,IAAAA,iCAA0B,EAACzM,SAAS;IACzE;IA9VA,YACE,AAAiBuK,IAAiB,EAClC,AAAiB7G,cAA8B,EAC/C,AAAiBoF,KAAY,EAC7B,AAAiBxG,GAAe,EAChC,AAAiBxC,gBAAkC,CACnD;aALiByK,OAAAA;aACA7G,iBAAAA;aACAoF,QAAAA;aACAxG,MAAAA;aACAxC,mBAAAA;aAZXgB,SAAS,IAAI4L,cAAM,CAACrO,kBAAkB4C,IAAI;aACjCwC,2BAA2BhB,gCAAa,CAACC,YAAY,CAACC,KAAK,CAACC,UAAU,CAAC+J,cAAc,IAAI;aACzF3B,qBAA8B,CAACvI,gCAAa,CAACC,YAAY,CAACC,KAAK,CAACC,UAAU,EAAEgK;aAC5ET,aAAa,IAAI,CAAC1I,wBAAwB,GAAG,GAAG,IAAI,CAACA,wBAAwB,CAAC,oBAAoB,CAAC,GAAG;aACtG8D,aAAasF,IAAAA,oCAAyB,EAACpK,gCAAa,CAAC4E,IAAI,CAACnF,KAAK,CAAC4K,OAAO,CAACvF,UAAU;aAClFlG,cAAsB;IAQpC;AAyVL"}
@@ -1,8 +1,4 @@
1
- /*
2
- * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
3
- * This file is part of Sync-in | The open source file sync and share solution
4
- * See the LICENSE file for licensing details
5
- */ "use strict";
1
+ "use strict";
6
2
  Object.defineProperty(exports, "__esModule", {
7
3
  value: true
8
4
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../backend/src/applications/files/modules/only-office/only-office-manager.service.spec.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nimport { HttpService } from '@nestjs/axios'\nimport { HttpException, HttpStatus } from '@nestjs/common'\nimport { JwtService } from '@nestjs/jwt'\nimport { Test, TestingModule } from '@nestjs/testing'\nimport { AxiosResponse } from 'axios'\nimport { Readable } from 'stream'\nimport { Cache } from '../../../../infrastructure/cache/services/cache.service'\nimport { ContextManager } from '../../../../infrastructure/context/services/context-manager.service'\nimport type { SpaceEnv } from '../../../spaces/models/space-env.model'\nimport type { UserModel } from '../../../users/models/user.model'\nimport { DEPTH, LOCK_SCOPE } from '../../../webdav/constants/webdav'\nimport { FILE_MODE } from '../../constants/operations'\nimport { LockConflict } from '../../models/file-lock-error'\nimport { FilesLockManager } from '../../services/files-lock-manager.service'\nimport * as filesUtils from '../../utils/files'\nimport { OnlyOfficeManager } from './only-office-manager.service'\nimport { ONLY_OFFICE_APP_LOCK } from './only-office.constants'\n\njest.mock('../../utils/files')\njest.mock('../../../users/utils/avatar', () => ({\n getAvatarBase64: jest.fn().mockResolvedValue('data:image/png;base64,iVBORw0KGgo=')\n}))\n\ndescribe(OnlyOfficeManager.name, () => {\n let service: OnlyOfficeManager\n let cache: jest.Mocked<Cache>\n let httpService: jest.Mocked<HttpService>\n let jwtService: jest.Mocked<JwtService>\n let filesLockManager: jest.Mocked<FilesLockManager>\n\n const mockUser = {\n id: 1,\n login: 'testuser',\n email: 'test@example.com',\n fullName: 'Test User',\n language: 'en',\n role: 'user',\n applications: []\n } as unknown as UserModel\n\n const mockSpaceEnv = {\n realPath: '/real/path/document.docx',\n relativeUrl: '/document.docx',\n url: 'space/document.docx',\n dbFile: {\n directory: '/space',\n name: 'document.docx',\n storageId: 1,\n storageTypeId: 1\n },\n permissions: 'r,m,d',\n envPermissions: 'r,m,d'\n } as unknown as SpaceEnv\n\n const mockRequest = {\n headers: {\n 'user-agent': 'Mozilla/5.0'\n }\n } as any\n\n beforeEach(async () => {\n const module: TestingModule = await Test.createTestingModule({\n providers: [\n OnlyOfficeManager,\n {\n provide: Cache,\n useValue: {\n get: jest.fn(),\n set: jest.fn(),\n del: jest.fn()\n }\n },\n {\n provide: HttpService,\n useValue: {\n axiosRef: jest.fn()\n }\n },\n {\n provide: JwtService,\n useValue: {\n signAsync: jest.fn(),\n verifyAsync: jest.fn()\n }\n },\n {\n provide: ContextManager,\n useValue: {\n headerOriginUrl: jest.fn().mockReturnValue('http://localhost:3000')\n }\n },\n {\n provide: FilesLockManager,\n useValue: {\n checkConflicts: jest.fn(),\n convertLockToFileLockProps: jest.fn(),\n create: jest.fn(),\n getLocksByPath: jest.fn(),\n removeLock: jest.fn(),\n isPathLocked: jest.fn()\n }\n }\n ]\n }).compile()\n\n module.useLogger(['fatal'])\n service = module.get<OnlyOfficeManager>(OnlyOfficeManager)\n cache = module.get(Cache)\n httpService = module.get(HttpService)\n jwtService = module.get(JwtService)\n filesLockManager = module.get(FilesLockManager)\n })\n\n afterEach(() => {\n jest.clearAllMocks()\n })\n\n describe('getSettings', () => {\n beforeEach(() => {\n ;(filesUtils.isPathExists as jest.Mock).mockResolvedValue(true)\n ;(filesUtils.isPathIsDir as jest.Mock).mockResolvedValue(false)\n filesLockManager.checkConflicts.mockResolvedValue(undefined)\n jwtService.signAsync.mockResolvedValue('mock-token')\n cache.get.mockResolvedValue(null)\n cache.set.mockResolvedValue(undefined)\n ;(filesUtils.genEtag as jest.Mock).mockReturnValue('mock-etag')\n })\n\n it('should return OnlyOffice settings for editable document', async () => {\n const result = await service.getSettings(mockUser, mockSpaceEnv, mockRequest)\n\n expect(result).toBeDefined()\n expect(result.config.documentType).toBe('word')\n expect(result.config.editorConfig.mode).toBe(FILE_MODE.EDIT)\n expect(result.config.document.permissions.edit).toBe(true)\n expect(result.hasLock).toBe(false)\n })\n\n it('should throw error if document does not exist', async () => {\n ;(filesUtils.isPathExists as jest.Mock).mockResolvedValue(false)\n\n await expect(service.getSettings(mockUser, mockSpaceEnv, mockRequest)).rejects.toThrow(\n new HttpException('Document not found', HttpStatus.BAD_REQUEST)\n )\n })\n\n it('should throw error if path is a directory', async () => {\n ;(filesUtils.isPathIsDir as jest.Mock).mockResolvedValue(true)\n\n await expect(service.getSettings(mockUser, mockSpaceEnv, mockRequest)).rejects.toThrow(\n new HttpException('Document must be a file', HttpStatus.BAD_REQUEST)\n )\n })\n\n it('should throw error if document extension is not supported', async () => {\n const unsupportedSpaceEnv = {\n ...mockSpaceEnv,\n realPath: '/real/path/document.xyz'\n } as unknown as SpaceEnv\n\n await expect(service.getSettings(mockUser, unsupportedSpaceEnv, mockRequest)).rejects.toThrow(\n new HttpException('Document not supported', HttpStatus.BAD_REQUEST)\n )\n })\n\n it('should set mode to VIEW when file has lock conflict', async () => {\n const mockLock = {\n key: 'lock-key',\n app: ONLY_OFFICE_APP_LOCK,\n owner: { id: 2, login: 'otheruser' }\n } as any\n const lockError = new LockConflict(mockLock, 'File is locked')\n filesLockManager.checkConflicts.mockRejectedValue(lockError)\n filesLockManager.convertLockToFileLockProps.mockReturnValue({\n owner: { id: 2, login: 'otheruser' }\n } as any)\n\n const result = await service.getSettings(mockUser, mockSpaceEnv, mockRequest)\n\n expect(result.config.editorConfig.mode).toBe(FILE_MODE.VIEW)\n expect(result.config.document.permissions.edit).toBe(false)\n expect(result.hasLock).toBeDefined()\n })\n\n it('should set mode to VIEW when user does not have modify permissions', async () => {\n const viewOnlySpaceEnv = {\n ...mockSpaceEnv,\n permissions: 'r',\n envPermissions: 'r'\n } as unknown as SpaceEnv\n\n const result = await service.getSettings(mockUser, viewOnlySpaceEnv, mockRequest)\n\n expect(result.config.editorConfig.mode).toBe(FILE_MODE.VIEW)\n expect(result.config.document.permissions.edit).toBe(false)\n })\n\n it('should detect mobile user agent', async () => {\n const mobileRequest = {\n headers: {\n 'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_0 like Mac OS X)'\n }\n } as any\n\n const result = await service.getSettings(mockUser, mockSpaceEnv, mobileRequest)\n\n expect(result.config.type).toBe('mobile')\n })\n\n it('should use cached document key', async () => {\n cache.get.mockResolvedValue('cached-doc-key')\n\n const result = await service.getSettings(mockUser, mockSpaceEnv, mockRequest)\n\n expect(result.config.document.key).toBe('cached-doc-key')\n expect(cache.set).not.toHaveBeenCalled()\n })\n })\n\n describe('callBack', () => {\n const mockToken = 'mock-callback-token'\n\n beforeEach(() => {\n filesLockManager.removeLock.mockResolvedValue(undefined)\n filesLockManager.getLocksByPath.mockResolvedValue([])\n filesLockManager.isPathLocked.mockResolvedValue(false)\n cache.del.mockResolvedValue(true)\n ;(filesUtils.uniqueFilePathFromDir as jest.Mock).mockResolvedValue('/tmp/temp-file.docx')\n ;(filesUtils.writeFromStream as jest.Mock).mockResolvedValue(undefined)\n ;(filesUtils.fileSize as jest.Mock).mockResolvedValue(12)\n ;(filesUtils.copyFileContent as jest.Mock).mockResolvedValue(undefined)\n ;(filesUtils.removeFiles as jest.Mock).mockResolvedValue(undefined)\n })\n\n it('should handle status 1 (document being edited)', async () => {\n jwtService.verifyAsync.mockResolvedValue({\n status: 1,\n actions: [],\n users: ['1']\n })\n\n const result = await service.callBack(mockUser, mockSpaceEnv, mockToken)\n\n expect(result).toEqual({ error: 0 })\n })\n\n it('should handle status 2 (document closed with changes)', async () => {\n jwtService.verifyAsync.mockResolvedValue({\n status: 2,\n actions: [],\n users: [],\n notmodified: false,\n url: 'http://onlyoffice/document.docx?md5=abc123&expires=1739400549&shardkey=-33120641&filename=document.docx'\n })\n\n const mockStream = Readable.from(['mock content'])\n httpService.axiosRef.mockResolvedValue({\n data: mockStream,\n headers: { 'content-length': '12' },\n status: 200,\n statusText: 'OK',\n config: {} as any\n } as AxiosResponse)\n\n const result = await service.callBack(mockUser, mockSpaceEnv, mockToken)\n\n expect(result).toEqual({ error: 0 })\n expect(httpService.axiosRef).toHaveBeenCalled()\n })\n\n it('should handle status 2 (document closed without changes)', async () => {\n jwtService.verifyAsync.mockResolvedValue({\n status: 2,\n actions: [],\n users: [],\n notmodified: true\n })\n\n const result = await service.callBack(mockUser, mockSpaceEnv, mockToken)\n\n expect(result).toEqual({ error: 0 })\n expect(httpService.axiosRef).not.toHaveBeenCalled()\n })\n\n it('should handle status 3 (error saving document)', async () => {\n jwtService.verifyAsync.mockResolvedValue({\n status: 3,\n actions: [],\n url: 'http://onlyoffice/document.docx?md5=abc123&expires=1739400549&shardkey=-33120641&filename=document.docx'\n })\n\n const mockStream = Readable.from(['mock content'])\n httpService.axiosRef.mockResolvedValue({\n data: mockStream,\n headers: { 'content-length': '12' },\n status: 200,\n statusText: 'OK',\n config: {} as any\n } as AxiosResponse)\n\n const result = await service.callBack(mockUser, mockSpaceEnv, mockToken)\n\n expect(result).toEqual({ error: 0 })\n expect(httpService.axiosRef).toHaveBeenCalled()\n })\n\n it('should handle status 4 (document closed with no changes)', async () => {\n jwtService.verifyAsync.mockResolvedValue({\n status: 4,\n actions: []\n })\n\n const result = await service.callBack(mockUser, mockSpaceEnv, mockToken)\n\n expect(result).toEqual({ error: 0 })\n })\n\n it('should handle status 6 (force save)', async () => {\n jwtService.verifyAsync.mockResolvedValue({\n status: 6,\n actions: [],\n url: 'http://onlyoffice/document.docx?md5=abc123&expires=1739400549&shardkey=-33120641&filename=document.docx'\n })\n\n const mockStream = Readable.from(['mock content'])\n httpService.axiosRef.mockResolvedValue({\n data: mockStream,\n headers: { 'content-length': '12' },\n status: 200,\n statusText: 'OK',\n config: {} as any\n } as AxiosResponse)\n\n const result = await service.callBack(mockUser, mockSpaceEnv, mockToken)\n\n expect(result).toEqual({ error: 0 })\n })\n\n it('should handle status 7 (error force saving)', async () => {\n jwtService.verifyAsync.mockResolvedValue({\n status: 7,\n actions: [],\n url: 'http://onlyoffice/document.docx?md5=abc123&expires=1739400549&shardkey=-33120641&filename=document.docx'\n })\n\n const mockStream = Readable.from(['mock content'])\n httpService.axiosRef.mockResolvedValue({\n data: mockStream,\n headers: { 'content-length': '12' },\n status: 200,\n statusText: 'OK',\n config: {} as any\n } as AxiosResponse)\n\n const result = await service.callBack(mockUser, mockSpaceEnv, mockToken)\n\n expect(result).toEqual({ error: 0 })\n })\n\n it('should handle user connect action (type 1)', async () => {\n jwtService.verifyAsync.mockResolvedValue({\n status: 1,\n actions: [{ type: 1, userid: '1' }],\n users: ['1']\n })\n filesLockManager.create.mockResolvedValue([true, {} as any])\n\n const result = await service.callBack(mockUser, mockSpaceEnv, mockToken)\n\n expect(result).toEqual({ error: 0 })\n expect(filesLockManager.create).toHaveBeenCalledWith(\n mockUser,\n mockSpaceEnv.dbFile,\n ONLY_OFFICE_APP_LOCK,\n DEPTH.RESOURCE,\n {\n lockRoot: null,\n lockToken: null,\n lockScope: LOCK_SCOPE.SHARED\n },\n expect.any(Number)\n )\n })\n\n it('should handle user disconnect action (type 0)', async () => {\n jwtService.verifyAsync.mockResolvedValue({\n status: 1,\n actions: [{ type: 0, userid: '1' }],\n users: undefined\n })\n filesLockManager.getLocksByPath.mockResolvedValue([{ key: 'lock-key', owner: { id: 1 } }] as any)\n\n const result = await service.callBack(mockUser, mockSpaceEnv, mockToken)\n\n expect(result).toEqual({ error: 0 })\n expect(filesLockManager.removeLock).toHaveBeenCalledWith('lock-key')\n })\n\n it('should return error when callback fails', async () => {\n jwtService.verifyAsync.mockResolvedValue({\n status: 2,\n actions: [],\n notmodified: false,\n url: 'http://onlyoffice/document.docx?md5=abc123&expires=1739400549&shardkey=-33120641&filename=document.docx'\n })\n httpService.axiosRef.mockRejectedValue(new Error('Network error'))\n\n const result = await service.callBack(mockUser, mockSpaceEnv, mockToken)\n\n expect(result).toHaveProperty('error')\n expect(result.error).not.toBe(0)\n })\n\n it('should throw error when file lock creation fails', async () => {\n jwtService.verifyAsync.mockResolvedValue({\n status: 1,\n actions: [{ type: 1, userid: '1' }],\n users: ['1']\n })\n filesLockManager.create.mockResolvedValue([false, null])\n\n const result = await service.callBack(mockUser, mockSpaceEnv, mockToken)\n\n expect(result).toHaveProperty('error')\n expect(result.error).not.toBe(0)\n })\n })\n\n it('should be defined', () => {\n expect(service).toBeDefined()\n })\n})\n"],"names":["jest","mock","getAvatarBase64","fn","mockResolvedValue","describe","OnlyOfficeManager","name","service","cache","httpService","jwtService","filesLockManager","mockUser","id","login","email","fullName","language","role","applications","mockSpaceEnv","realPath","relativeUrl","url","dbFile","directory","storageId","storageTypeId","permissions","envPermissions","mockRequest","headers","beforeEach","module","Test","createTestingModule","providers","provide","Cache","useValue","get","set","del","HttpService","axiosRef","JwtService","signAsync","verifyAsync","ContextManager","headerOriginUrl","mockReturnValue","FilesLockManager","checkConflicts","convertLockToFileLockProps","create","getLocksByPath","removeLock","isPathLocked","compile","useLogger","afterEach","clearAllMocks","filesUtils","isPathExists","isPathIsDir","undefined","genEtag","it","result","getSettings","expect","toBeDefined","config","documentType","toBe","editorConfig","mode","FILE_MODE","EDIT","document","edit","hasLock","rejects","toThrow","HttpException","HttpStatus","BAD_REQUEST","unsupportedSpaceEnv","mockLock","key","app","ONLY_OFFICE_APP_LOCK","owner","lockError","LockConflict","mockRejectedValue","VIEW","viewOnlySpaceEnv","mobileRequest","type","not","toHaveBeenCalled","mockToken","uniqueFilePathFromDir","writeFromStream","fileSize","copyFileContent","removeFiles","status","actions","users","callBack","toEqual","error","notmodified","mockStream","Readable","from","data","statusText","userid","toHaveBeenCalledWith","DEPTH","RESOURCE","lockRoot","lockToken","lockScope","LOCK_SCOPE","SHARED","any","Number","Error","toHaveProperty"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../../backend/src/applications/files/modules/only-office/only-office-manager.service.spec.ts"],"sourcesContent":["import { HttpService } from '@nestjs/axios'\nimport { HttpException, HttpStatus } from '@nestjs/common'\nimport { JwtService } from '@nestjs/jwt'\nimport { Test, TestingModule } from '@nestjs/testing'\nimport { AxiosResponse } from 'axios'\nimport { Readable } from 'stream'\nimport { Cache } from '../../../../infrastructure/cache/services/cache.service'\nimport { ContextManager } from '../../../../infrastructure/context/services/context-manager.service'\nimport type { SpaceEnv } from '../../../spaces/models/space-env.model'\nimport type { UserModel } from '../../../users/models/user.model'\nimport { DEPTH, LOCK_SCOPE } from '../../../webdav/constants/webdav'\nimport { FILE_MODE } from '../../constants/operations'\nimport { LockConflict } from '../../models/file-lock-error'\nimport { FilesLockManager } from '../../services/files-lock-manager.service'\nimport * as filesUtils from '../../utils/files'\nimport { OnlyOfficeManager } from './only-office-manager.service'\nimport { ONLY_OFFICE_APP_LOCK } from './only-office.constants'\n\njest.mock('../../utils/files')\njest.mock('../../../users/utils/avatar', () => ({\n getAvatarBase64: jest.fn().mockResolvedValue('data:image/png;base64,iVBORw0KGgo=')\n}))\n\ndescribe(OnlyOfficeManager.name, () => {\n let service: OnlyOfficeManager\n let cache: jest.Mocked<Cache>\n let httpService: jest.Mocked<HttpService>\n let jwtService: jest.Mocked<JwtService>\n let filesLockManager: jest.Mocked<FilesLockManager>\n\n const mockUser = {\n id: 1,\n login: 'testuser',\n email: 'test@example.com',\n fullName: 'Test User',\n language: 'en',\n role: 'user',\n applications: []\n } as unknown as UserModel\n\n const mockSpaceEnv = {\n realPath: '/real/path/document.docx',\n relativeUrl: '/document.docx',\n url: 'space/document.docx',\n dbFile: {\n directory: '/space',\n name: 'document.docx',\n storageId: 1,\n storageTypeId: 1\n },\n permissions: 'r,m,d',\n envPermissions: 'r,m,d'\n } as unknown as SpaceEnv\n\n const mockRequest = {\n headers: {\n 'user-agent': 'Mozilla/5.0'\n }\n } as any\n\n beforeEach(async () => {\n const module: TestingModule = await Test.createTestingModule({\n providers: [\n OnlyOfficeManager,\n {\n provide: Cache,\n useValue: {\n get: jest.fn(),\n set: jest.fn(),\n del: jest.fn()\n }\n },\n {\n provide: HttpService,\n useValue: {\n axiosRef: jest.fn()\n }\n },\n {\n provide: JwtService,\n useValue: {\n signAsync: jest.fn(),\n verifyAsync: jest.fn()\n }\n },\n {\n provide: ContextManager,\n useValue: {\n headerOriginUrl: jest.fn().mockReturnValue('http://localhost:3000')\n }\n },\n {\n provide: FilesLockManager,\n useValue: {\n checkConflicts: jest.fn(),\n convertLockToFileLockProps: jest.fn(),\n create: jest.fn(),\n getLocksByPath: jest.fn(),\n removeLock: jest.fn(),\n isPathLocked: jest.fn()\n }\n }\n ]\n }).compile()\n\n module.useLogger(['fatal'])\n service = module.get<OnlyOfficeManager>(OnlyOfficeManager)\n cache = module.get(Cache)\n httpService = module.get(HttpService)\n jwtService = module.get(JwtService)\n filesLockManager = module.get(FilesLockManager)\n })\n\n afterEach(() => {\n jest.clearAllMocks()\n })\n\n describe('getSettings', () => {\n beforeEach(() => {\n ;(filesUtils.isPathExists as jest.Mock).mockResolvedValue(true)\n ;(filesUtils.isPathIsDir as jest.Mock).mockResolvedValue(false)\n filesLockManager.checkConflicts.mockResolvedValue(undefined)\n jwtService.signAsync.mockResolvedValue('mock-token')\n cache.get.mockResolvedValue(null)\n cache.set.mockResolvedValue(undefined)\n ;(filesUtils.genEtag as jest.Mock).mockReturnValue('mock-etag')\n })\n\n it('should return OnlyOffice settings for editable document', async () => {\n const result = await service.getSettings(mockUser, mockSpaceEnv, mockRequest)\n\n expect(result).toBeDefined()\n expect(result.config.documentType).toBe('word')\n expect(result.config.editorConfig.mode).toBe(FILE_MODE.EDIT)\n expect(result.config.document.permissions.edit).toBe(true)\n expect(result.hasLock).toBe(false)\n })\n\n it('should throw error if document does not exist', async () => {\n ;(filesUtils.isPathExists as jest.Mock).mockResolvedValue(false)\n\n await expect(service.getSettings(mockUser, mockSpaceEnv, mockRequest)).rejects.toThrow(\n new HttpException('Document not found', HttpStatus.BAD_REQUEST)\n )\n })\n\n it('should throw error if path is a directory', async () => {\n ;(filesUtils.isPathIsDir as jest.Mock).mockResolvedValue(true)\n\n await expect(service.getSettings(mockUser, mockSpaceEnv, mockRequest)).rejects.toThrow(\n new HttpException('Document must be a file', HttpStatus.BAD_REQUEST)\n )\n })\n\n it('should throw error if document extension is not supported', async () => {\n const unsupportedSpaceEnv = {\n ...mockSpaceEnv,\n realPath: '/real/path/document.xyz'\n } as unknown as SpaceEnv\n\n await expect(service.getSettings(mockUser, unsupportedSpaceEnv, mockRequest)).rejects.toThrow(\n new HttpException('Document not supported', HttpStatus.BAD_REQUEST)\n )\n })\n\n it('should set mode to VIEW when file has lock conflict', async () => {\n const mockLock = {\n key: 'lock-key',\n app: ONLY_OFFICE_APP_LOCK,\n owner: { id: 2, login: 'otheruser' }\n } as any\n const lockError = new LockConflict(mockLock, 'File is locked')\n filesLockManager.checkConflicts.mockRejectedValue(lockError)\n filesLockManager.convertLockToFileLockProps.mockReturnValue({\n owner: { id: 2, login: 'otheruser' }\n } as any)\n\n const result = await service.getSettings(mockUser, mockSpaceEnv, mockRequest)\n\n expect(result.config.editorConfig.mode).toBe(FILE_MODE.VIEW)\n expect(result.config.document.permissions.edit).toBe(false)\n expect(result.hasLock).toBeDefined()\n })\n\n it('should set mode to VIEW when user does not have modify permissions', async () => {\n const viewOnlySpaceEnv = {\n ...mockSpaceEnv,\n permissions: 'r',\n envPermissions: 'r'\n } as unknown as SpaceEnv\n\n const result = await service.getSettings(mockUser, viewOnlySpaceEnv, mockRequest)\n\n expect(result.config.editorConfig.mode).toBe(FILE_MODE.VIEW)\n expect(result.config.document.permissions.edit).toBe(false)\n })\n\n it('should detect mobile user agent', async () => {\n const mobileRequest = {\n headers: {\n 'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_0 like Mac OS X)'\n }\n } as any\n\n const result = await service.getSettings(mockUser, mockSpaceEnv, mobileRequest)\n\n expect(result.config.type).toBe('mobile')\n })\n\n it('should use cached document key', async () => {\n cache.get.mockResolvedValue('cached-doc-key')\n\n const result = await service.getSettings(mockUser, mockSpaceEnv, mockRequest)\n\n expect(result.config.document.key).toBe('cached-doc-key')\n expect(cache.set).not.toHaveBeenCalled()\n })\n })\n\n describe('callBack', () => {\n const mockToken = 'mock-callback-token'\n\n beforeEach(() => {\n filesLockManager.removeLock.mockResolvedValue(undefined)\n filesLockManager.getLocksByPath.mockResolvedValue([])\n filesLockManager.isPathLocked.mockResolvedValue(false)\n cache.del.mockResolvedValue(true)\n ;(filesUtils.uniqueFilePathFromDir as jest.Mock).mockResolvedValue('/tmp/temp-file.docx')\n ;(filesUtils.writeFromStream as jest.Mock).mockResolvedValue(undefined)\n ;(filesUtils.fileSize as jest.Mock).mockResolvedValue(12)\n ;(filesUtils.copyFileContent as jest.Mock).mockResolvedValue(undefined)\n ;(filesUtils.removeFiles as jest.Mock).mockResolvedValue(undefined)\n })\n\n it('should handle status 1 (document being edited)', async () => {\n jwtService.verifyAsync.mockResolvedValue({\n status: 1,\n actions: [],\n users: ['1']\n })\n\n const result = await service.callBack(mockUser, mockSpaceEnv, mockToken)\n\n expect(result).toEqual({ error: 0 })\n })\n\n it('should handle status 2 (document closed with changes)', async () => {\n jwtService.verifyAsync.mockResolvedValue({\n status: 2,\n actions: [],\n users: [],\n notmodified: false,\n url: 'http://onlyoffice/document.docx?md5=abc123&expires=1739400549&shardkey=-33120641&filename=document.docx'\n })\n\n const mockStream = Readable.from(['mock content'])\n httpService.axiosRef.mockResolvedValue({\n data: mockStream,\n headers: { 'content-length': '12' },\n status: 200,\n statusText: 'OK',\n config: {} as any\n } as AxiosResponse)\n\n const result = await service.callBack(mockUser, mockSpaceEnv, mockToken)\n\n expect(result).toEqual({ error: 0 })\n expect(httpService.axiosRef).toHaveBeenCalled()\n })\n\n it('should handle status 2 (document closed without changes)', async () => {\n jwtService.verifyAsync.mockResolvedValue({\n status: 2,\n actions: [],\n users: [],\n notmodified: true\n })\n\n const result = await service.callBack(mockUser, mockSpaceEnv, mockToken)\n\n expect(result).toEqual({ error: 0 })\n expect(httpService.axiosRef).not.toHaveBeenCalled()\n })\n\n it('should handle status 3 (error saving document)', async () => {\n jwtService.verifyAsync.mockResolvedValue({\n status: 3,\n actions: [],\n url: 'http://onlyoffice/document.docx?md5=abc123&expires=1739400549&shardkey=-33120641&filename=document.docx'\n })\n\n const mockStream = Readable.from(['mock content'])\n httpService.axiosRef.mockResolvedValue({\n data: mockStream,\n headers: { 'content-length': '12' },\n status: 200,\n statusText: 'OK',\n config: {} as any\n } as AxiosResponse)\n\n const result = await service.callBack(mockUser, mockSpaceEnv, mockToken)\n\n expect(result).toEqual({ error: 0 })\n expect(httpService.axiosRef).toHaveBeenCalled()\n })\n\n it('should handle status 4 (document closed with no changes)', async () => {\n jwtService.verifyAsync.mockResolvedValue({\n status: 4,\n actions: []\n })\n\n const result = await service.callBack(mockUser, mockSpaceEnv, mockToken)\n\n expect(result).toEqual({ error: 0 })\n })\n\n it('should handle status 6 (force save)', async () => {\n jwtService.verifyAsync.mockResolvedValue({\n status: 6,\n actions: [],\n url: 'http://onlyoffice/document.docx?md5=abc123&expires=1739400549&shardkey=-33120641&filename=document.docx'\n })\n\n const mockStream = Readable.from(['mock content'])\n httpService.axiosRef.mockResolvedValue({\n data: mockStream,\n headers: { 'content-length': '12' },\n status: 200,\n statusText: 'OK',\n config: {} as any\n } as AxiosResponse)\n\n const result = await service.callBack(mockUser, mockSpaceEnv, mockToken)\n\n expect(result).toEqual({ error: 0 })\n })\n\n it('should handle status 7 (error force saving)', async () => {\n jwtService.verifyAsync.mockResolvedValue({\n status: 7,\n actions: [],\n url: 'http://onlyoffice/document.docx?md5=abc123&expires=1739400549&shardkey=-33120641&filename=document.docx'\n })\n\n const mockStream = Readable.from(['mock content'])\n httpService.axiosRef.mockResolvedValue({\n data: mockStream,\n headers: { 'content-length': '12' },\n status: 200,\n statusText: 'OK',\n config: {} as any\n } as AxiosResponse)\n\n const result = await service.callBack(mockUser, mockSpaceEnv, mockToken)\n\n expect(result).toEqual({ error: 0 })\n })\n\n it('should handle user connect action (type 1)', async () => {\n jwtService.verifyAsync.mockResolvedValue({\n status: 1,\n actions: [{ type: 1, userid: '1' }],\n users: ['1']\n })\n filesLockManager.create.mockResolvedValue([true, {} as any])\n\n const result = await service.callBack(mockUser, mockSpaceEnv, mockToken)\n\n expect(result).toEqual({ error: 0 })\n expect(filesLockManager.create).toHaveBeenCalledWith(\n mockUser,\n mockSpaceEnv.dbFile,\n ONLY_OFFICE_APP_LOCK,\n DEPTH.RESOURCE,\n {\n lockRoot: null,\n lockToken: null,\n lockScope: LOCK_SCOPE.SHARED\n },\n expect.any(Number)\n )\n })\n\n it('should handle user disconnect action (type 0)', async () => {\n jwtService.verifyAsync.mockResolvedValue({\n status: 1,\n actions: [{ type: 0, userid: '1' }],\n users: undefined\n })\n filesLockManager.getLocksByPath.mockResolvedValue([{ key: 'lock-key', owner: { id: 1 } }] as any)\n\n const result = await service.callBack(mockUser, mockSpaceEnv, mockToken)\n\n expect(result).toEqual({ error: 0 })\n expect(filesLockManager.removeLock).toHaveBeenCalledWith('lock-key')\n })\n\n it('should return error when callback fails', async () => {\n jwtService.verifyAsync.mockResolvedValue({\n status: 2,\n actions: [],\n notmodified: false,\n url: 'http://onlyoffice/document.docx?md5=abc123&expires=1739400549&shardkey=-33120641&filename=document.docx'\n })\n httpService.axiosRef.mockRejectedValue(new Error('Network error'))\n\n const result = await service.callBack(mockUser, mockSpaceEnv, mockToken)\n\n expect(result).toHaveProperty('error')\n expect(result.error).not.toBe(0)\n })\n\n it('should throw error when file lock creation fails', async () => {\n jwtService.verifyAsync.mockResolvedValue({\n status: 1,\n actions: [{ type: 1, userid: '1' }],\n users: ['1']\n })\n filesLockManager.create.mockResolvedValue([false, null])\n\n const result = await service.callBack(mockUser, mockSpaceEnv, mockToken)\n\n expect(result).toHaveProperty('error')\n expect(result.error).not.toBe(0)\n })\n })\n\n it('should be defined', () => {\n expect(service).toBeDefined()\n })\n})\n"],"names":["jest","mock","getAvatarBase64","fn","mockResolvedValue","describe","OnlyOfficeManager","name","service","cache","httpService","jwtService","filesLockManager","mockUser","id","login","email","fullName","language","role","applications","mockSpaceEnv","realPath","relativeUrl","url","dbFile","directory","storageId","storageTypeId","permissions","envPermissions","mockRequest","headers","beforeEach","module","Test","createTestingModule","providers","provide","Cache","useValue","get","set","del","HttpService","axiosRef","JwtService","signAsync","verifyAsync","ContextManager","headerOriginUrl","mockReturnValue","FilesLockManager","checkConflicts","convertLockToFileLockProps","create","getLocksByPath","removeLock","isPathLocked","compile","useLogger","afterEach","clearAllMocks","filesUtils","isPathExists","isPathIsDir","undefined","genEtag","it","result","getSettings","expect","toBeDefined","config","documentType","toBe","editorConfig","mode","FILE_MODE","EDIT","document","edit","hasLock","rejects","toThrow","HttpException","HttpStatus","BAD_REQUEST","unsupportedSpaceEnv","mockLock","key","app","ONLY_OFFICE_APP_LOCK","owner","lockError","LockConflict","mockRejectedValue","VIEW","viewOnlySpaceEnv","mobileRequest","type","not","toHaveBeenCalled","mockToken","uniqueFilePathFromDir","writeFromStream","fileSize","copyFileContent","removeFiles","status","actions","users","callBack","toEqual","error","notmodified","mockStream","Readable","from","data","statusText","userid","toHaveBeenCalledWith","DEPTH","RESOURCE","lockRoot","lockToken","lockScope","LOCK_SCOPE","SHARED","any","Number","Error","toHaveProperty"],"mappings":";;;;uBAA4B;wBACc;qBACf;yBACS;wBAEX;8BACH;uCACS;wBAGG;4BACR;+BACG;yCACI;+DACL;0CACM;qCACG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAErCA,KAAKC,IAAI,CAAC;AACVD,KAAKC,IAAI,CAAC,+BAA+B,IAAO,CAAA;QAC9CC,iBAAiBF,KAAKG,EAAE,GAAGC,iBAAiB,CAAC;IAC/C,CAAA;AAEAC,SAASC,2CAAiB,CAACC,IAAI,EAAE;IAC/B,IAAIC;IACJ,IAAIC;IACJ,IAAIC;IACJ,IAAIC;IACJ,IAAIC;IAEJ,MAAMC,WAAW;QACfC,IAAI;QACJC,OAAO;QACPC,OAAO;QACPC,UAAU;QACVC,UAAU;QACVC,MAAM;QACNC,cAAc,EAAE;IAClB;IAEA,MAAMC,eAAe;QACnBC,UAAU;QACVC,aAAa;QACbC,KAAK;QACLC,QAAQ;YACNC,WAAW;YACXnB,MAAM;YACNoB,WAAW;YACXC,eAAe;QACjB;QACAC,aAAa;QACbC,gBAAgB;IAClB;IAEA,MAAMC,cAAc;QAClBC,SAAS;YACP,cAAc;QAChB;IACF;IAEAC,WAAW;QACT,MAAMC,SAAwB,MAAMC,aAAI,CAACC,mBAAmB,CAAC;YAC3DC,WAAW;gBACT/B,2CAAiB;gBACjB;oBACEgC,SAASC,mBAAK;oBACdC,UAAU;wBACRC,KAAKzC,KAAKG,EAAE;wBACZuC,KAAK1C,KAAKG,EAAE;wBACZwC,KAAK3C,KAAKG,EAAE;oBACd;gBACF;gBACA;oBACEmC,SAASM,kBAAW;oBACpBJ,UAAU;wBACRK,UAAU7C,KAAKG,EAAE;oBACnB;gBACF;gBACA;oBACEmC,SAASQ,eAAU;oBACnBN,UAAU;wBACRO,WAAW/C,KAAKG,EAAE;wBAClB6C,aAAahD,KAAKG,EAAE;oBACtB;gBACF;gBACA;oBACEmC,SAASW,qCAAc;oBACvBT,UAAU;wBACRU,iBAAiBlD,KAAKG,EAAE,GAAGgD,eAAe,CAAC;oBAC7C;gBACF;gBACA;oBACEb,SAASc,yCAAgB;oBACzBZ,UAAU;wBACRa,gBAAgBrD,KAAKG,EAAE;wBACvBmD,4BAA4BtD,KAAKG,EAAE;wBACnCoD,QAAQvD,KAAKG,EAAE;wBACfqD,gBAAgBxD,KAAKG,EAAE;wBACvBsD,YAAYzD,KAAKG,EAAE;wBACnBuD,cAAc1D,KAAKG,EAAE;oBACvB;gBACF;aACD;QACH,GAAGwD,OAAO;QAEVzB,OAAO0B,SAAS,CAAC;YAAC;SAAQ;QAC1BpD,UAAU0B,OAAOO,GAAG,CAAoBnC,2CAAiB;QACzDG,QAAQyB,OAAOO,GAAG,CAACF,mBAAK;QACxB7B,cAAcwB,OAAOO,GAAG,CAACG,kBAAW;QACpCjC,aAAauB,OAAOO,GAAG,CAACK,eAAU;QAClClC,mBAAmBsB,OAAOO,GAAG,CAACW,yCAAgB;IAChD;IAEAS,UAAU;QACR7D,KAAK8D,aAAa;IACpB;IAEAzD,SAAS,eAAe;QACtB4B,WAAW;;YACP8B,OAAWC,YAAY,CAAe5D,iBAAiB,CAAC;YACxD2D,OAAWE,WAAW,CAAe7D,iBAAiB,CAAC;YACzDQ,iBAAiByC,cAAc,CAACjD,iBAAiB,CAAC8D;YAClDvD,WAAWoC,SAAS,CAAC3C,iBAAiB,CAAC;YACvCK,MAAMgC,GAAG,CAACrC,iBAAiB,CAAC;YAC5BK,MAAMiC,GAAG,CAACtC,iBAAiB,CAAC8D;YAC1BH,OAAWI,OAAO,CAAehB,eAAe,CAAC;QACrD;QAEAiB,GAAG,2DAA2D;YAC5D,MAAMC,SAAS,MAAM7D,QAAQ8D,WAAW,CAACzD,UAAUQ,cAAcU;YAEjEwC,OAAOF,QAAQG,WAAW;YAC1BD,OAAOF,OAAOI,MAAM,CAACC,YAAY,EAAEC,IAAI,CAAC;YACxCJ,OAAOF,OAAOI,MAAM,CAACG,YAAY,CAACC,IAAI,EAAEF,IAAI,CAACG,qBAAS,CAACC,IAAI;YAC3DR,OAAOF,OAAOI,MAAM,CAACO,QAAQ,CAACnD,WAAW,CAACoD,IAAI,EAAEN,IAAI,CAAC;YACrDJ,OAAOF,OAAOa,OAAO,EAAEP,IAAI,CAAC;QAC9B;QAEAP,GAAG,iDAAiD;;YAChDL,OAAWC,YAAY,CAAe5D,iBAAiB,CAAC;YAE1D,MAAMmE,OAAO/D,QAAQ8D,WAAW,CAACzD,UAAUQ,cAAcU,cAAcoD,OAAO,CAACC,OAAO,CACpF,IAAIC,qBAAa,CAAC,sBAAsBC,kBAAU,CAACC,WAAW;QAElE;QAEAnB,GAAG,6CAA6C;;YAC5CL,OAAWE,WAAW,CAAe7D,iBAAiB,CAAC;YAEzD,MAAMmE,OAAO/D,QAAQ8D,WAAW,CAACzD,UAAUQ,cAAcU,cAAcoD,OAAO,CAACC,OAAO,CACpF,IAAIC,qBAAa,CAAC,2BAA2BC,kBAAU,CAACC,WAAW;QAEvE;QAEAnB,GAAG,6DAA6D;YAC9D,MAAMoB,sBAAsB;gBAC1B,GAAGnE,YAAY;gBACfC,UAAU;YACZ;YAEA,MAAMiD,OAAO/D,QAAQ8D,WAAW,CAACzD,UAAU2E,qBAAqBzD,cAAcoD,OAAO,CAACC,OAAO,CAC3F,IAAIC,qBAAa,CAAC,0BAA0BC,kBAAU,CAACC,WAAW;QAEtE;QAEAnB,GAAG,uDAAuD;YACxD,MAAMqB,WAAW;gBACfC,KAAK;gBACLC,KAAKC,yCAAoB;gBACzBC,OAAO;oBAAE/E,IAAI;oBAAGC,OAAO;gBAAY;YACrC;YACA,MAAM+E,YAAY,IAAIC,2BAAY,CAACN,UAAU;YAC7C7E,iBAAiByC,cAAc,CAAC2C,iBAAiB,CAACF;YAClDlF,iBAAiB0C,0BAA0B,CAACH,eAAe,CAAC;gBAC1D0C,OAAO;oBAAE/E,IAAI;oBAAGC,OAAO;gBAAY;YACrC;YAEA,MAAMsD,SAAS,MAAM7D,QAAQ8D,WAAW,CAACzD,UAAUQ,cAAcU;YAEjEwC,OAAOF,OAAOI,MAAM,CAACG,YAAY,CAACC,IAAI,EAAEF,IAAI,CAACG,qBAAS,CAACmB,IAAI;YAC3D1B,OAAOF,OAAOI,MAAM,CAACO,QAAQ,CAACnD,WAAW,CAACoD,IAAI,EAAEN,IAAI,CAAC;YACrDJ,OAAOF,OAAOa,OAAO,EAAEV,WAAW;QACpC;QAEAJ,GAAG,sEAAsE;YACvE,MAAM8B,mBAAmB;gBACvB,GAAG7E,YAAY;gBACfQ,aAAa;gBACbC,gBAAgB;YAClB;YAEA,MAAMuC,SAAS,MAAM7D,QAAQ8D,WAAW,CAACzD,UAAUqF,kBAAkBnE;YAErEwC,OAAOF,OAAOI,MAAM,CAACG,YAAY,CAACC,IAAI,EAAEF,IAAI,CAACG,qBAAS,CAACmB,IAAI;YAC3D1B,OAAOF,OAAOI,MAAM,CAACO,QAAQ,CAACnD,WAAW,CAACoD,IAAI,EAAEN,IAAI,CAAC;QACvD;QAEAP,GAAG,mCAAmC;YACpC,MAAM+B,gBAAgB;gBACpBnE,SAAS;oBACP,cAAc;gBAChB;YACF;YAEA,MAAMqC,SAAS,MAAM7D,QAAQ8D,WAAW,CAACzD,UAAUQ,cAAc8E;YAEjE5B,OAAOF,OAAOI,MAAM,CAAC2B,IAAI,EAAEzB,IAAI,CAAC;QAClC;QAEAP,GAAG,kCAAkC;YACnC3D,MAAMgC,GAAG,CAACrC,iBAAiB,CAAC;YAE5B,MAAMiE,SAAS,MAAM7D,QAAQ8D,WAAW,CAACzD,UAAUQ,cAAcU;YAEjEwC,OAAOF,OAAOI,MAAM,CAACO,QAAQ,CAACU,GAAG,EAAEf,IAAI,CAAC;YACxCJ,OAAO9D,MAAMiC,GAAG,EAAE2D,GAAG,CAACC,gBAAgB;QACxC;IACF;IAEAjG,SAAS,YAAY;QACnB,MAAMkG,YAAY;QAElBtE,WAAW;YACTrB,iBAAiB6C,UAAU,CAACrD,iBAAiB,CAAC8D;YAC9CtD,iBAAiB4C,cAAc,CAACpD,iBAAiB,CAAC,EAAE;YACpDQ,iBAAiB8C,YAAY,CAACtD,iBAAiB,CAAC;YAChDK,MAAMkC,GAAG,CAACvC,iBAAiB,CAAC;YAC1B2D,OAAWyC,qBAAqB,CAAepG,iBAAiB,CAAC;YACjE2D,OAAW0C,eAAe,CAAerG,iBAAiB,CAAC8D;YAC3DH,OAAW2C,QAAQ,CAAetG,iBAAiB,CAAC;YACpD2D,OAAW4C,eAAe,CAAevG,iBAAiB,CAAC8D;YAC3DH,OAAW6C,WAAW,CAAexG,iBAAiB,CAAC8D;QAC3D;QAEAE,GAAG,kDAAkD;YACnDzD,WAAWqC,WAAW,CAAC5C,iBAAiB,CAAC;gBACvCyG,QAAQ;gBACRC,SAAS,EAAE;gBACXC,OAAO;oBAAC;iBAAI;YACd;YAEA,MAAM1C,SAAS,MAAM7D,QAAQwG,QAAQ,CAACnG,UAAUQ,cAAckF;YAE9DhC,OAAOF,QAAQ4C,OAAO,CAAC;gBAAEC,OAAO;YAAE;QACpC;QAEA9C,GAAG,yDAAyD;YAC1DzD,WAAWqC,WAAW,CAAC5C,iBAAiB,CAAC;gBACvCyG,QAAQ;gBACRC,SAAS,EAAE;gBACXC,OAAO,EAAE;gBACTI,aAAa;gBACb3F,KAAK;YACP;YAEA,MAAM4F,aAAaC,gBAAQ,CAACC,IAAI,CAAC;gBAAC;aAAe;YACjD5G,YAAYmC,QAAQ,CAACzC,iBAAiB,CAAC;gBACrCmH,MAAMH;gBACNpF,SAAS;oBAAE,kBAAkB;gBAAK;gBAClC6E,QAAQ;gBACRW,YAAY;gBACZ/C,QAAQ,CAAC;YACX;YAEA,MAAMJ,SAAS,MAAM7D,QAAQwG,QAAQ,CAACnG,UAAUQ,cAAckF;YAE9DhC,OAAOF,QAAQ4C,OAAO,CAAC;gBAAEC,OAAO;YAAE;YAClC3C,OAAO7D,YAAYmC,QAAQ,EAAEyD,gBAAgB;QAC/C;QAEAlC,GAAG,4DAA4D;YAC7DzD,WAAWqC,WAAW,CAAC5C,iBAAiB,CAAC;gBACvCyG,QAAQ;gBACRC,SAAS,EAAE;gBACXC,OAAO,EAAE;gBACTI,aAAa;YACf;YAEA,MAAM9C,SAAS,MAAM7D,QAAQwG,QAAQ,CAACnG,UAAUQ,cAAckF;YAE9DhC,OAAOF,QAAQ4C,OAAO,CAAC;gBAAEC,OAAO;YAAE;YAClC3C,OAAO7D,YAAYmC,QAAQ,EAAEwD,GAAG,CAACC,gBAAgB;QACnD;QAEAlC,GAAG,kDAAkD;YACnDzD,WAAWqC,WAAW,CAAC5C,iBAAiB,CAAC;gBACvCyG,QAAQ;gBACRC,SAAS,EAAE;gBACXtF,KAAK;YACP;YAEA,MAAM4F,aAAaC,gBAAQ,CAACC,IAAI,CAAC;gBAAC;aAAe;YACjD5G,YAAYmC,QAAQ,CAACzC,iBAAiB,CAAC;gBACrCmH,MAAMH;gBACNpF,SAAS;oBAAE,kBAAkB;gBAAK;gBAClC6E,QAAQ;gBACRW,YAAY;gBACZ/C,QAAQ,CAAC;YACX;YAEA,MAAMJ,SAAS,MAAM7D,QAAQwG,QAAQ,CAACnG,UAAUQ,cAAckF;YAE9DhC,OAAOF,QAAQ4C,OAAO,CAAC;gBAAEC,OAAO;YAAE;YAClC3C,OAAO7D,YAAYmC,QAAQ,EAAEyD,gBAAgB;QAC/C;QAEAlC,GAAG,4DAA4D;YAC7DzD,WAAWqC,WAAW,CAAC5C,iBAAiB,CAAC;gBACvCyG,QAAQ;gBACRC,SAAS,EAAE;YACb;YAEA,MAAMzC,SAAS,MAAM7D,QAAQwG,QAAQ,CAACnG,UAAUQ,cAAckF;YAE9DhC,OAAOF,QAAQ4C,OAAO,CAAC;gBAAEC,OAAO;YAAE;QACpC;QAEA9C,GAAG,uCAAuC;YACxCzD,WAAWqC,WAAW,CAAC5C,iBAAiB,CAAC;gBACvCyG,QAAQ;gBACRC,SAAS,EAAE;gBACXtF,KAAK;YACP;YAEA,MAAM4F,aAAaC,gBAAQ,CAACC,IAAI,CAAC;gBAAC;aAAe;YACjD5G,YAAYmC,QAAQ,CAACzC,iBAAiB,CAAC;gBACrCmH,MAAMH;gBACNpF,SAAS;oBAAE,kBAAkB;gBAAK;gBAClC6E,QAAQ;gBACRW,YAAY;gBACZ/C,QAAQ,CAAC;YACX;YAEA,MAAMJ,SAAS,MAAM7D,QAAQwG,QAAQ,CAACnG,UAAUQ,cAAckF;YAE9DhC,OAAOF,QAAQ4C,OAAO,CAAC;gBAAEC,OAAO;YAAE;QACpC;QAEA9C,GAAG,+CAA+C;YAChDzD,WAAWqC,WAAW,CAAC5C,iBAAiB,CAAC;gBACvCyG,QAAQ;gBACRC,SAAS,EAAE;gBACXtF,KAAK;YACP;YAEA,MAAM4F,aAAaC,gBAAQ,CAACC,IAAI,CAAC;gBAAC;aAAe;YACjD5G,YAAYmC,QAAQ,CAACzC,iBAAiB,CAAC;gBACrCmH,MAAMH;gBACNpF,SAAS;oBAAE,kBAAkB;gBAAK;gBAClC6E,QAAQ;gBACRW,YAAY;gBACZ/C,QAAQ,CAAC;YACX;YAEA,MAAMJ,SAAS,MAAM7D,QAAQwG,QAAQ,CAACnG,UAAUQ,cAAckF;YAE9DhC,OAAOF,QAAQ4C,OAAO,CAAC;gBAAEC,OAAO;YAAE;QACpC;QAEA9C,GAAG,8CAA8C;YAC/CzD,WAAWqC,WAAW,CAAC5C,iBAAiB,CAAC;gBACvCyG,QAAQ;gBACRC,SAAS;oBAAC;wBAAEV,MAAM;wBAAGqB,QAAQ;oBAAI;iBAAE;gBACnCV,OAAO;oBAAC;iBAAI;YACd;YACAnG,iBAAiB2C,MAAM,CAACnD,iBAAiB,CAAC;gBAAC;gBAAM,CAAC;aAAS;YAE3D,MAAMiE,SAAS,MAAM7D,QAAQwG,QAAQ,CAACnG,UAAUQ,cAAckF;YAE9DhC,OAAOF,QAAQ4C,OAAO,CAAC;gBAAEC,OAAO;YAAE;YAClC3C,OAAO3D,iBAAiB2C,MAAM,EAAEmE,oBAAoB,CAClD7G,UACAQ,aAAaI,MAAM,EACnBmE,yCAAoB,EACpB+B,aAAK,CAACC,QAAQ,EACd;gBACEC,UAAU;gBACVC,WAAW;gBACXC,WAAWC,kBAAU,CAACC,MAAM;YAC9B,GACA1D,OAAO2D,GAAG,CAACC;QAEf;QAEA/D,GAAG,iDAAiD;YAClDzD,WAAWqC,WAAW,CAAC5C,iBAAiB,CAAC;gBACvCyG,QAAQ;gBACRC,SAAS;oBAAC;wBAAEV,MAAM;wBAAGqB,QAAQ;oBAAI;iBAAE;gBACnCV,OAAO7C;YACT;YACAtD,iBAAiB4C,cAAc,CAACpD,iBAAiB,CAAC;gBAAC;oBAAEsF,KAAK;oBAAYG,OAAO;wBAAE/E,IAAI;oBAAE;gBAAE;aAAE;YAEzF,MAAMuD,SAAS,MAAM7D,QAAQwG,QAAQ,CAACnG,UAAUQ,cAAckF;YAE9DhC,OAAOF,QAAQ4C,OAAO,CAAC;gBAAEC,OAAO;YAAE;YAClC3C,OAAO3D,iBAAiB6C,UAAU,EAAEiE,oBAAoB,CAAC;QAC3D;QAEAtD,GAAG,2CAA2C;YAC5CzD,WAAWqC,WAAW,CAAC5C,iBAAiB,CAAC;gBACvCyG,QAAQ;gBACRC,SAAS,EAAE;gBACXK,aAAa;gBACb3F,KAAK;YACP;YACAd,YAAYmC,QAAQ,CAACmD,iBAAiB,CAAC,IAAIoC,MAAM;YAEjD,MAAM/D,SAAS,MAAM7D,QAAQwG,QAAQ,CAACnG,UAAUQ,cAAckF;YAE9DhC,OAAOF,QAAQgE,cAAc,CAAC;YAC9B9D,OAAOF,OAAO6C,KAAK,EAAEb,GAAG,CAAC1B,IAAI,CAAC;QAChC;QAEAP,GAAG,oDAAoD;YACrDzD,WAAWqC,WAAW,CAAC5C,iBAAiB,CAAC;gBACvCyG,QAAQ;gBACRC,SAAS;oBAAC;wBAAEV,MAAM;wBAAGqB,QAAQ;oBAAI;iBAAE;gBACnCV,OAAO;oBAAC;iBAAI;YACd;YACAnG,iBAAiB2C,MAAM,CAACnD,iBAAiB,CAAC;gBAAC;gBAAO;aAAK;YAEvD,MAAMiE,SAAS,MAAM7D,QAAQwG,QAAQ,CAACnG,UAAUQ,cAAckF;YAE9DhC,OAAOF,QAAQgE,cAAc,CAAC;YAC9B9D,OAAOF,OAAO6C,KAAK,EAAEb,GAAG,CAAC1B,IAAI,CAAC;QAChC;IACF;IAEAP,GAAG,qBAAqB;QACtBG,OAAO/D,SAASgE,WAAW;IAC7B;AACF"}
@@ -1,8 +1,4 @@
1
- /*
2
- * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
3
- * This file is part of Sync-in | The open source file sync and share solution
4
- * See the LICENSE file for licensing details
5
- */ "use strict";
1
+ "use strict";
6
2
  Object.defineProperty(exports, "__esModule", {
7
3
  value: true
8
4
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../backend/src/applications/files/modules/only-office/only-office.config.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nimport { IsBoolean, IsNotEmpty, IsOptional, IsString, ValidateIf } from 'class-validator'\n\nexport class OnlyOfficeConfig {\n @IsBoolean()\n enabled = false\n\n @IsOptional()\n @IsString()\n externalServer: string = null\n\n @ValidateIf((o: OnlyOfficeConfig) => o.enabled)\n @IsString()\n @IsNotEmpty()\n secret: string\n\n @IsBoolean()\n verifySSL: boolean = false\n}\n"],"names":["OnlyOfficeConfig","enabled","externalServer","verifySSL","o"],"mappings":"AAAA;;;;CAIC;;;;+BAIYA;;;eAAAA;;;gCAF2D;;;;;;;;;;AAEjE,IAAA,AAAMA,mBAAN,MAAMA;;aAEXC,UAAU;aAIVC,iBAAyB;aAQzBC,YAAqB;;AACvB;;;;;;;;;;qCAPeC,IAAwBA,EAAEH,OAAO"}
1
+ {"version":3,"sources":["../../../../../../backend/src/applications/files/modules/only-office/only-office.config.ts"],"sourcesContent":["import { IsBoolean, IsNotEmpty, IsOptional, IsString, ValidateIf } from 'class-validator'\n\nexport class OnlyOfficeConfig {\n @IsBoolean()\n enabled = false\n\n @IsOptional()\n @IsString()\n externalServer: string = null\n\n @ValidateIf((o: OnlyOfficeConfig) => o.enabled)\n @IsString()\n @IsNotEmpty()\n secret: string\n\n @IsBoolean()\n verifySSL: boolean = false\n}\n"],"names":["OnlyOfficeConfig","enabled","externalServer","verifySSL","o"],"mappings":";;;;+BAEaA;;;eAAAA;;;gCAF2D;;;;;;;;;;AAEjE,IAAA,AAAMA,mBAAN,MAAMA;;aAEXC,UAAU;aAIVC,iBAAyB;aAQzBC,YAAqB;;AACvB;;;;;;;;;;qCAPeC,IAAwBA,EAAEH,OAAO"}
@@ -1,8 +1,4 @@
1
- /*
2
- * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
3
- * This file is part of Sync-in | The open source file sync and share solution
4
- * See the LICENSE file for licensing details
5
- */ "use strict";
1
+ "use strict";
6
2
  Object.defineProperty(exports, "__esModule", {
7
3
  value: true
8
4
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../backend/src/applications/files/modules/only-office/only-office.constants.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nexport const ONLY_OFFICE_INTERNAL_URI = '/onlyoffice' // used by nginx as a proxy\nexport const ONLY_OFFICE_CONTEXT = 'OnlyOfficeEnvironment' as const\nexport const ONLY_OFFICE_TOKEN_QUERY_PARAM_NAME = 'token' as const\nexport const ONLY_OFFICE_APP_LOCK = 'OnlyOffice' as const\nexport const ONLY_OFFICE_CACHE_KEY = 'foffice' as const\n\nexport const ONLY_OFFICE_EXTENSIONS = new Map<string, 'word' | 'cell' | 'slide' | 'pdf' | 'diagram'>([\n // ─────────────\n // WORD\n // ─────────────\n ['doc', 'word'],\n ['docm', 'word'],\n ['docx', 'word'],\n ['dot', 'word'],\n ['dotm', 'word'],\n ['dotx', 'word'],\n ['epub', 'word'],\n ['fb2', 'word'],\n ['fodt', 'word'],\n ['gdoc', 'word'],\n ['hwp', 'word'],\n ['hwpx', 'word'],\n ['mht', 'word'],\n ['mhtml', 'word'],\n ['odt', 'word'],\n ['ott', 'word'],\n ['pages', 'word'],\n ['rtf', 'word'],\n ['stw', 'word'],\n ['sxw', 'word'],\n ['wps', 'word'],\n ['wpt', 'word'],\n\n // ─────────────\n // CELL\n // ─────────────\n ['csv', 'cell'],\n ['et', 'cell'],\n ['ett', 'cell'],\n ['fods', 'cell'],\n ['gsheet', 'cell'],\n ['numbers', 'cell'],\n ['ods', 'cell'],\n ['ots', 'cell'],\n ['sxc', 'cell'],\n ['xls', 'cell'],\n ['xlsb', 'cell'],\n ['xlsm', 'cell'],\n ['xlsx', 'cell'],\n ['xlt', 'cell'],\n ['xltm', 'cell'],\n ['xltx', 'cell'],\n\n // ─────────────\n // SLIDE\n // ─────────────\n ['dps', 'slide'],\n ['dpt', 'slide'],\n ['fodp', 'slide'],\n ['gslide', 'slide'],\n ['key', 'slide'],\n ['odg', 'slide'],\n ['odp', 'slide'],\n ['otp', 'slide'],\n ['pot', 'slide'],\n ['potm', 'slide'],\n ['potx', 'slide'],\n ['pps', 'slide'],\n ['ppsm', 'slide'],\n ['ppsx', 'slide'],\n ['ppt', 'slide'],\n ['pptm', 'slide'],\n ['pptx', 'slide'],\n ['sxi', 'slide'],\n\n // ─────────────\n // PDF\n // ─────────────\n ['djvu', 'pdf'],\n ['docxf', 'pdf'],\n ['oform', 'pdf'],\n ['oxps', 'pdf'],\n ['pdf', 'pdf'],\n ['xps', 'pdf'],\n\n // ─────────────\n // DIAGRAM\n // ─────────────\n ['vsdm', 'diagram'],\n ['vsdx', 'diagram'],\n ['vssm', 'diagram'],\n ['vssx', 'diagram'],\n ['vstm', 'diagram'],\n ['vstx', 'diagram']\n])\n\nexport const ONLY_OFFICE_CONVERT_EXTENSIONS = {\n ALLOW_AUTO: new Set(['doc', 'xls', 'ppt']),\n FROM: new Set([\n 'doc',\n 'docm',\n 'docx',\n 'docxf',\n 'dotx',\n 'epub',\n 'fb2',\n 'html',\n 'mhtml',\n 'odt',\n 'ott',\n 'pdf',\n 'rtf',\n 'stw',\n 'sxw',\n 'wps',\n 'wpt',\n 'xps'\n ]),\n TO: new Set(['docx', 'docxf', 'dotx', 'epub', 'fb2', 'html', 'jpg', 'odt', 'ott', 'pdf', 'png', 'rtf', 'txt'])\n}\n\nexport const ONLY_OFFICE_CONVERT_ERROR = new Map([\n [-9, 'error conversion output format'],\n [-8, 'error document VKey'],\n [-7, 'error document request'],\n [-6, 'error database'],\n [-5, 'incorrect password'],\n [-4, 'download error'],\n [-3, 'convert error'],\n [-2, 'convert error timeout'],\n [-1, 'convert unknown']\n])\n"],"names":["ONLY_OFFICE_APP_LOCK","ONLY_OFFICE_CACHE_KEY","ONLY_OFFICE_CONTEXT","ONLY_OFFICE_CONVERT_ERROR","ONLY_OFFICE_CONVERT_EXTENSIONS","ONLY_OFFICE_EXTENSIONS","ONLY_OFFICE_INTERNAL_URI","ONLY_OFFICE_TOKEN_QUERY_PARAM_NAME","Map","ALLOW_AUTO","Set","FROM","TO"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../../backend/src/applications/files/modules/only-office/only-office.constants.ts"],"sourcesContent":["export const ONLY_OFFICE_INTERNAL_URI = '/onlyoffice' // used by nginx as a proxy\nexport const ONLY_OFFICE_CONTEXT = 'OnlyOfficeEnvironment' as const\nexport const ONLY_OFFICE_TOKEN_QUERY_PARAM_NAME = 'token' as const\nexport const ONLY_OFFICE_APP_LOCK = 'OnlyOffice' as const\nexport const ONLY_OFFICE_CACHE_KEY = 'foffice' as const\n\nexport const ONLY_OFFICE_EXTENSIONS = new Map<string, 'word' | 'cell' | 'slide' | 'pdf' | 'diagram'>([\n // ─────────────\n // WORD\n // ─────────────\n ['doc', 'word'],\n ['docm', 'word'],\n ['docx', 'word'],\n ['dot', 'word'],\n ['dotm', 'word'],\n ['dotx', 'word'],\n ['epub', 'word'],\n ['fb2', 'word'],\n ['fodt', 'word'],\n ['gdoc', 'word'],\n ['hwp', 'word'],\n ['hwpx', 'word'],\n ['mht', 'word'],\n ['mhtml', 'word'],\n ['odt', 'word'],\n ['ott', 'word'],\n ['pages', 'word'],\n ['rtf', 'word'],\n ['stw', 'word'],\n ['sxw', 'word'],\n ['wps', 'word'],\n ['wpt', 'word'],\n\n // ─────────────\n // CELL\n // ─────────────\n ['csv', 'cell'],\n ['et', 'cell'],\n ['ett', 'cell'],\n ['fods', 'cell'],\n ['gsheet', 'cell'],\n ['numbers', 'cell'],\n ['ods', 'cell'],\n ['ots', 'cell'],\n ['sxc', 'cell'],\n ['xls', 'cell'],\n ['xlsb', 'cell'],\n ['xlsm', 'cell'],\n ['xlsx', 'cell'],\n ['xlt', 'cell'],\n ['xltm', 'cell'],\n ['xltx', 'cell'],\n\n // ─────────────\n // SLIDE\n // ─────────────\n ['dps', 'slide'],\n ['dpt', 'slide'],\n ['fodp', 'slide'],\n ['gslide', 'slide'],\n ['key', 'slide'],\n ['odg', 'slide'],\n ['odp', 'slide'],\n ['otp', 'slide'],\n ['pot', 'slide'],\n ['potm', 'slide'],\n ['potx', 'slide'],\n ['pps', 'slide'],\n ['ppsm', 'slide'],\n ['ppsx', 'slide'],\n ['ppt', 'slide'],\n ['pptm', 'slide'],\n ['pptx', 'slide'],\n ['sxi', 'slide'],\n\n // ─────────────\n // PDF\n // ─────────────\n ['djvu', 'pdf'],\n ['docxf', 'pdf'],\n ['oform', 'pdf'],\n ['oxps', 'pdf'],\n ['pdf', 'pdf'],\n ['xps', 'pdf'],\n\n // ─────────────\n // DIAGRAM\n // ─────────────\n ['vsdm', 'diagram'],\n ['vsdx', 'diagram'],\n ['vssm', 'diagram'],\n ['vssx', 'diagram'],\n ['vstm', 'diagram'],\n ['vstx', 'diagram']\n])\n\nexport const ONLY_OFFICE_CONVERT_EXTENSIONS = {\n ALLOW_AUTO: new Set(['doc', 'xls', 'ppt']),\n FROM: new Set([\n 'doc',\n 'docm',\n 'docx',\n 'docxf',\n 'dotx',\n 'epub',\n 'fb2',\n 'html',\n 'mhtml',\n 'odt',\n 'ott',\n 'pdf',\n 'rtf',\n 'stw',\n 'sxw',\n 'wps',\n 'wpt',\n 'xps'\n ]),\n TO: new Set(['docx', 'docxf', 'dotx', 'epub', 'fb2', 'html', 'jpg', 'odt', 'ott', 'pdf', 'png', 'rtf', 'txt'])\n}\n\nexport const ONLY_OFFICE_CONVERT_ERROR = new Map([\n [-9, 'error conversion output format'],\n [-8, 'error document VKey'],\n [-7, 'error document request'],\n [-6, 'error database'],\n [-5, 'incorrect password'],\n [-4, 'download error'],\n [-3, 'convert error'],\n [-2, 'convert error timeout'],\n [-1, 'convert unknown']\n])\n"],"names":["ONLY_OFFICE_APP_LOCK","ONLY_OFFICE_CACHE_KEY","ONLY_OFFICE_CONTEXT","ONLY_OFFICE_CONVERT_ERROR","ONLY_OFFICE_CONVERT_EXTENSIONS","ONLY_OFFICE_EXTENSIONS","ONLY_OFFICE_INTERNAL_URI","ONLY_OFFICE_TOKEN_QUERY_PARAM_NAME","Map","ALLOW_AUTO","Set","FROM","TO"],"mappings":"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"}
@@ -1,8 +1,4 @@
1
- /*
2
- * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
3
- * This file is part of Sync-in | The open source file sync and share solution
4
- * See the LICENSE file for licensing details
5
- */ "use strict";
1
+ "use strict";
6
2
  Object.defineProperty(exports, "__esModule", {
7
3
  value: true
8
4
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../backend/src/applications/files/modules/only-office/only-office.controller.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nimport { Body, Controller, Get, HttpCode, HttpStatus, Post, Request, Res, StreamableFile, UseInterceptors } from '@nestjs/common'\nimport { FastifyReply } from 'fastify'\nimport { ContextInterceptor } from '../../../../infrastructure/context/interceptors/context.interceptor'\nimport { SPACE_OPERATION } from '../../../spaces/constants/spaces'\nimport { OverrideSpacePermission } from '../../../spaces/decorators/space-override-permission.decorator'\nimport { GetSpace } from '../../../spaces/decorators/space.decorator'\nimport { FastifySpaceRequest } from '../../../spaces/interfaces/space-request.interface'\nimport { SpaceEnv } from '../../../spaces/models/space-env.model'\nimport { GetUser } from '../../../users/decorators/user.decorator'\nimport { UserModel } from '../../../users/models/user.model'\nimport { FilesMethods } from '../../services/files-methods.service'\nimport { OnlyOfficeEnvironment } from './only-office-environment.decorator'\nimport { OnlyOfficeManager } from './only-office-manager.service'\nimport type { OnlyOfficeReqDto } from './only-office.dtos'\nimport { API_ONLY_OFFICE, ONLY_OFFICE_ROUTE } from './only-office.routes'\n\n@Controller(API_ONLY_OFFICE)\n@OnlyOfficeEnvironment()\nexport class OnlyOfficeController {\n constructor(\n private readonly filesMethods: FilesMethods,\n private readonly filesOnlyOfficeManager: OnlyOfficeManager\n ) {}\n\n @Get(`${ONLY_OFFICE_ROUTE.SETTINGS}/*`)\n @UseInterceptors(ContextInterceptor)\n onlyOfficeSettings(@Request() req: FastifySpaceRequest): Promise<OnlyOfficeReqDto> {\n return this.filesOnlyOfficeManager.getSettings(req.user, req.space, req)\n }\n\n @Get(`${ONLY_OFFICE_ROUTE.DOCUMENT}/*`)\n onlyOfficeDocument(@Request() req: FastifySpaceRequest, @Res({ passthrough: true }) res: FastifyReply): Promise<StreamableFile> {\n return this.filesMethods.headOrGet(req, res)\n }\n\n @Post(`${ONLY_OFFICE_ROUTE.CALLBACK}/*`)\n @OverrideSpacePermission(SPACE_OPERATION.MODIFY)\n @HttpCode(HttpStatus.OK)\n onlyOfficeCallBack(@GetUser() user: UserModel, @GetSpace() space: SpaceEnv, @Body('token') token: string) {\n return this.filesOnlyOfficeManager.callBack(user, space, token)\n }\n}\n"],"names":["OnlyOfficeController","onlyOfficeSettings","req","filesOnlyOfficeManager","getSettings","user","space","onlyOfficeDocument","res","filesMethods","headOrGet","onlyOfficeCallBack","token","callBack","ONLY_OFFICE_ROUTE","SETTINGS","DOCUMENT","passthrough","CALLBACK","MODIFY","OK"],"mappings":"AAAA;;;;CAIC;;;;+BAoBYA;;;eAAAA;;;wBAlBoG;yBACpF;oCACM;wBACH;kDACQ;gCACf;uCACW;+BACX;+BACD;2BACE;qCACG;gDACS;0CACJ;kCAEiB;;;;;;;;;;;;;;;AAI5C,IAAA,AAAMA,uBAAN,MAAMA;IAQXC,mBAAmB,AAAWC,GAAwB,EAA6B;QACjF,OAAO,IAAI,CAACC,sBAAsB,CAACC,WAAW,CAACF,IAAIG,IAAI,EAAEH,IAAII,KAAK,EAAEJ;IACtE;IAGAK,mBAAmB,AAAWL,GAAwB,EAAE,AAA4BM,GAAiB,EAA2B;QAC9H,OAAO,IAAI,CAACC,YAAY,CAACC,SAAS,CAACR,KAAKM;IAC1C;IAKAG,mBAAmB,AAAWN,IAAe,EAAE,AAAYC,KAAe,EAAE,AAAeM,KAAa,EAAE;QACxG,OAAO,IAAI,CAACT,sBAAsB,CAACU,QAAQ,CAACR,MAAMC,OAAOM;IAC3D;IArBA,YACE,AAAiBH,YAA0B,EAC3C,AAAiBN,sBAAyC,CAC1D;aAFiBM,eAAAA;aACAN,yBAAAA;IAChB;AAmBL;;wBAjBUW,mCAAiB,CAACC,QAAQ,CAAC,EAAE;;;;;;;;;;wBAM7BD,mCAAiB,CAACE,QAAQ,CAAC,EAAE;;;QAC0BC,aAAa;;;;;;;;;;yBAInEH,mCAAiB,CAACI,QAAQ,CAAC,EAAE;2FACGC;6CACpBC"}
1
+ {"version":3,"sources":["../../../../../../backend/src/applications/files/modules/only-office/only-office.controller.ts"],"sourcesContent":["import { Body, Controller, Get, HttpCode, HttpStatus, Post, Request, Res, StreamableFile, UseInterceptors } from '@nestjs/common'\nimport { FastifyReply } from 'fastify'\nimport { ContextInterceptor } from '../../../../infrastructure/context/interceptors/context.interceptor'\nimport { SPACE_OPERATION } from '../../../spaces/constants/spaces'\nimport { OverrideSpacePermission } from '../../../spaces/decorators/space-override-permission.decorator'\nimport { GetSpace } from '../../../spaces/decorators/space.decorator'\nimport { FastifySpaceRequest } from '../../../spaces/interfaces/space-request.interface'\nimport { SpaceEnv } from '../../../spaces/models/space-env.model'\nimport { GetUser } from '../../../users/decorators/user.decorator'\nimport { UserModel } from '../../../users/models/user.model'\nimport { FilesMethods } from '../../services/files-methods.service'\nimport { OnlyOfficeEnvironment } from './only-office-environment.decorator'\nimport { OnlyOfficeManager } from './only-office-manager.service'\nimport type { OnlyOfficeReqDto } from './only-office.dtos'\nimport { API_ONLY_OFFICE, ONLY_OFFICE_ROUTE } from './only-office.routes'\n\n@Controller(API_ONLY_OFFICE)\n@OnlyOfficeEnvironment()\nexport class OnlyOfficeController {\n constructor(\n private readonly filesMethods: FilesMethods,\n private readonly filesOnlyOfficeManager: OnlyOfficeManager\n ) {}\n\n @Get(`${ONLY_OFFICE_ROUTE.SETTINGS}/*`)\n @UseInterceptors(ContextInterceptor)\n onlyOfficeSettings(@Request() req: FastifySpaceRequest): Promise<OnlyOfficeReqDto> {\n return this.filesOnlyOfficeManager.getSettings(req.user, req.space, req)\n }\n\n @Get(`${ONLY_OFFICE_ROUTE.DOCUMENT}/*`)\n onlyOfficeDocument(@Request() req: FastifySpaceRequest, @Res({ passthrough: true }) res: FastifyReply): Promise<StreamableFile> {\n return this.filesMethods.headOrGet(req, res)\n }\n\n @Post(`${ONLY_OFFICE_ROUTE.CALLBACK}/*`)\n @OverrideSpacePermission(SPACE_OPERATION.MODIFY)\n @HttpCode(HttpStatus.OK)\n onlyOfficeCallBack(@GetUser() user: UserModel, @GetSpace() space: SpaceEnv, @Body('token') token: string) {\n return this.filesOnlyOfficeManager.callBack(user, space, token)\n }\n}\n"],"names":["OnlyOfficeController","onlyOfficeSettings","req","filesOnlyOfficeManager","getSettings","user","space","onlyOfficeDocument","res","filesMethods","headOrGet","onlyOfficeCallBack","token","callBack","ONLY_OFFICE_ROUTE","SETTINGS","DOCUMENT","passthrough","CALLBACK","MODIFY","OK"],"mappings":";;;;+BAkBaA;;;eAAAA;;;wBAlBoG;yBACpF;oCACM;wBACH;kDACQ;gCACf;uCACW;+BACX;+BACD;2BACE;qCACG;gDACS;0CACJ;kCAEiB;;;;;;;;;;;;;;;AAI5C,IAAA,AAAMA,uBAAN,MAAMA;IAQXC,mBAAmB,AAAWC,GAAwB,EAA6B;QACjF,OAAO,IAAI,CAACC,sBAAsB,CAACC,WAAW,CAACF,IAAIG,IAAI,EAAEH,IAAII,KAAK,EAAEJ;IACtE;IAGAK,mBAAmB,AAAWL,GAAwB,EAAE,AAA4BM,GAAiB,EAA2B;QAC9H,OAAO,IAAI,CAACC,YAAY,CAACC,SAAS,CAACR,KAAKM;IAC1C;IAKAG,mBAAmB,AAAWN,IAAe,EAAE,AAAYC,KAAe,EAAE,AAAeM,KAAa,EAAE;QACxG,OAAO,IAAI,CAACT,sBAAsB,CAACU,QAAQ,CAACR,MAAMC,OAAOM;IAC3D;IArBA,YACE,AAAiBH,YAA0B,EAC3C,AAAiBN,sBAAyC,CAC1D;aAFiBM,eAAAA;aACAN,yBAAAA;IAChB;AAmBL;;wBAjBUW,mCAAiB,CAACC,QAAQ,CAAC,EAAE;;;;;;;;;;wBAM7BD,mCAAiB,CAACE,QAAQ,CAAC,EAAE;;;QAC0BC,aAAa;;;;;;;;;;yBAInEH,mCAAiB,CAACI,QAAQ,CAAC,EAAE;2FACGC;6CACpBC"}
@@ -1,8 +1,4 @@
1
- /*
2
- * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
3
- * This file is part of Sync-in | The open source file sync and share solution
4
- * See the LICENSE file for licensing details
5
- */ "use strict";
1
+ "use strict";
6
2
  Object.defineProperty(exports, "__esModule", {
7
3
  value: true
8
4
  });