@bgx4k3p/huly-mcp-server 2.2.3 → 2.2.5

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 (696) hide show
  1. package/README.md +186 -56
  2. package/node_modules/@hcengineering/account-client/lib/__tests__/utils.test.js +249 -0
  3. package/node_modules/@hcengineering/account-client/lib/__tests__/utils.test.js.map +7 -0
  4. package/node_modules/@hcengineering/account-client/lib/client.js +88 -3
  5. package/node_modules/@hcengineering/account-client/lib/client.js.map +2 -2
  6. package/node_modules/@hcengineering/account-client/lib/types.js.map +2 -2
  7. package/node_modules/@hcengineering/account-client/lib/utils.js +50 -0
  8. package/node_modules/@hcengineering/account-client/lib/utils.js.map +2 -2
  9. package/node_modules/@hcengineering/account-client/package.json +22 -19
  10. package/node_modules/@hcengineering/account-client/src/__tests__/utils.test.ts +304 -0
  11. package/node_modules/@hcengineering/account-client/src/client.ts +127 -6
  12. package/node_modules/@hcengineering/account-client/src/types.ts +7 -0
  13. package/node_modules/@hcengineering/account-client/src/utils.ts +65 -1
  14. package/node_modules/@hcengineering/analytics/lib/index.js +1 -1
  15. package/node_modules/@hcengineering/analytics/lib/index.js.map +2 -2
  16. package/node_modules/@hcengineering/analytics/package.json +19 -16
  17. package/node_modules/@hcengineering/analytics/src/index.ts +2 -1
  18. package/node_modules/@hcengineering/api-client/lib/client.js +9 -4
  19. package/node_modules/@hcengineering/api-client/lib/client.js.map +2 -2
  20. package/node_modules/@hcengineering/api-client/lib/rest/adapter.js +64 -0
  21. package/node_modules/@hcengineering/api-client/lib/rest/adapter.js.map +7 -0
  22. package/node_modules/@hcengineering/api-client/lib/rest/index.js +2 -0
  23. package/node_modules/@hcengineering/api-client/lib/rest/index.js.map +2 -2
  24. package/node_modules/@hcengineering/api-client/lib/socket/node.js +5 -1
  25. package/node_modules/@hcengineering/api-client/lib/socket/node.js.map +2 -2
  26. package/node_modules/@hcengineering/api-client/package.json +28 -25
  27. package/node_modules/@hcengineering/api-client/src/client.ts +10 -1
  28. package/node_modules/@hcengineering/api-client/src/rest/adapter.ts +96 -0
  29. package/node_modules/@hcengineering/api-client/src/rest/index.ts +1 -0
  30. package/node_modules/@hcengineering/api-client/src/socket/node.ts +6 -1
  31. package/node_modules/@hcengineering/chunter/lib/index.js.map +2 -2
  32. package/node_modules/@hcengineering/chunter/package.json +13 -10
  33. package/node_modules/@hcengineering/client/package.json +21 -18
  34. package/node_modules/@hcengineering/client-resources/package.json +24 -21
  35. package/node_modules/@hcengineering/collaborator-client/package.json +21 -18
  36. package/node_modules/@hcengineering/contact/lib/__tests__/workspaceMemberStatusUtils.test.js +38 -0
  37. package/node_modules/@hcengineering/contact/lib/__tests__/workspaceMemberStatusUtils.test.js.map +7 -0
  38. package/node_modules/@hcengineering/contact/lib/index.js +13 -4
  39. package/node_modules/@hcengineering/contact/lib/index.js.map +2 -2
  40. package/node_modules/@hcengineering/contact/lib/types.js.map +1 -1
  41. package/node_modules/@hcengineering/contact/lib/utils.js +132 -108
  42. package/node_modules/@hcengineering/contact/lib/utils.js.map +3 -3
  43. package/node_modules/@hcengineering/contact/lib/workspaceMemberStatusUtils.js +79 -0
  44. package/node_modules/@hcengineering/contact/lib/workspaceMemberStatusUtils.js.map +7 -0
  45. package/node_modules/@hcengineering/contact/package.json +12 -9
  46. package/node_modules/@hcengineering/core/CHANGELOG.md +9 -1
  47. package/node_modules/@hcengineering/core/lang/cs.json +6 -1
  48. package/node_modules/@hcengineering/core/lang/de.json +6 -1
  49. package/node_modules/@hcengineering/core/lang/en.json +6 -1
  50. package/node_modules/@hcengineering/core/lang/es.json +6 -1
  51. package/node_modules/@hcengineering/core/lang/fr.json +6 -1
  52. package/node_modules/@hcengineering/core/lang/it.json +6 -1
  53. package/node_modules/@hcengineering/core/lang/ja.json +6 -1
  54. package/node_modules/@hcengineering/core/lang/pt-br.json +70 -0
  55. package/node_modules/@hcengineering/core/lang/pt.json +6 -1
  56. package/node_modules/@hcengineering/core/lang/ru.json +6 -1
  57. package/node_modules/@hcengineering/core/lang/tr.json +6 -1
  58. package/node_modules/@hcengineering/core/lang/zh.json +6 -1
  59. package/node_modules/@hcengineering/core/lib/__tests__/autoJoinRoles.test.js +13 -0
  60. package/node_modules/@hcengineering/core/lib/__tests__/autoJoinRoles.test.js.map +7 -0
  61. package/node_modules/@hcengineering/core/lib/__tests__/memdb.test.js +133 -0
  62. package/node_modules/@hcengineering/core/lib/__tests__/memdb.test.js.map +2 -2
  63. package/node_modules/@hcengineering/core/lib/__tests__/minmodel.js +25 -0
  64. package/node_modules/@hcengineering/core/lib/__tests__/minmodel.js.map +2 -2
  65. package/node_modules/@hcengineering/core/lib/__tests__/query.test.js +43 -0
  66. package/node_modules/@hcengineering/core/lib/__tests__/query.test.js.map +7 -0
  67. package/node_modules/@hcengineering/core/lib/autoJoinRoles.js +36 -0
  68. package/node_modules/@hcengineering/core/lib/autoJoinRoles.js.map +7 -0
  69. package/node_modules/@hcengineering/core/lib/classes.js +5 -0
  70. package/node_modules/@hcengineering/core/lib/classes.js.map +3 -3
  71. package/node_modules/@hcengineering/core/lib/clone.js +13 -2
  72. package/node_modules/@hcengineering/core/lib/clone.js.map +2 -2
  73. package/node_modules/@hcengineering/core/lib/component.js +14 -3
  74. package/node_modules/@hcengineering/core/lib/component.js.map +2 -2
  75. package/node_modules/@hcengineering/core/lib/index.js +2 -0
  76. package/node_modules/@hcengineering/core/lib/index.js.map +2 -2
  77. package/node_modules/@hcengineering/core/lib/memdb.js +6 -2
  78. package/node_modules/@hcengineering/core/lib/memdb.js.map +2 -2
  79. package/node_modules/@hcengineering/core/lib/operations.js +11 -0
  80. package/node_modules/@hcengineering/core/lib/operations.js.map +2 -2
  81. package/node_modules/@hcengineering/core/lib/predicate.js +3 -0
  82. package/node_modules/@hcengineering/core/lib/predicate.js.map +2 -2
  83. package/node_modules/@hcengineering/core/lib/storage.js.map +2 -2
  84. package/node_modules/@hcengineering/core/lib/tx.js +3 -1
  85. package/node_modules/@hcengineering/core/lib/tx.js.map +2 -2
  86. package/node_modules/@hcengineering/core/lib/utils.js +1 -1
  87. package/node_modules/@hcengineering/core/lib/utils.js.map +2 -2
  88. package/node_modules/@hcengineering/core/lib/versioning.js +17 -0
  89. package/node_modules/@hcengineering/core/lib/versioning.js.map +7 -0
  90. package/node_modules/@hcengineering/core/package.json +22 -19
  91. package/node_modules/@hcengineering/core/src/__tests__/autoJoinRoles.test.ts +27 -0
  92. package/node_modules/@hcengineering/core/src/__tests__/memdb.test.ts +150 -1
  93. package/node_modules/@hcengineering/core/src/__tests__/minmodel.ts +29 -1
  94. package/node_modules/@hcengineering/core/src/__tests__/query.test.ts +66 -0
  95. package/node_modules/@hcengineering/core/src/autoJoinRoles.ts +33 -0
  96. package/node_modules/@hcengineering/core/src/classes.ts +61 -1
  97. package/node_modules/@hcengineering/core/src/clone.ts +13 -2
  98. package/node_modules/@hcengineering/core/src/component.ts +25 -9
  99. package/node_modules/@hcengineering/core/src/index.ts +2 -0
  100. package/node_modules/@hcengineering/core/src/memdb.ts +7 -3
  101. package/node_modules/@hcengineering/core/src/operations.ts +11 -0
  102. package/node_modules/@hcengineering/core/src/predicate.ts +3 -0
  103. package/node_modules/@hcengineering/core/src/storage.ts +6 -3
  104. package/node_modules/@hcengineering/core/src/tx.ts +4 -1
  105. package/node_modules/@hcengineering/core/src/utils.ts +1 -1
  106. package/node_modules/@hcengineering/core/src/versioning.ts +13 -0
  107. package/node_modules/@hcengineering/measurements/lib/__tests__/performance.test.js +3 -3
  108. package/node_modules/@hcengineering/measurements/lib/__tests__/performance.test.js.map +2 -2
  109. package/node_modules/@hcengineering/measurements/package.json +17 -14
  110. package/node_modules/@hcengineering/measurements/src/__tests__/performance.test.ts +3 -3
  111. package/node_modules/@hcengineering/platform/lang/pt-br.json +31 -0
  112. package/node_modules/@hcengineering/platform/lib/__tests__/i18n.test.js +100 -0
  113. package/node_modules/@hcengineering/platform/lib/__tests__/i18n.test.js.map +2 -2
  114. package/node_modules/@hcengineering/platform/lib/__tests__/status.test.js +78 -0
  115. package/node_modules/@hcengineering/platform/lib/__tests__/status.test.js.map +7 -0
  116. package/node_modules/@hcengineering/platform/lib/i18n.js +78 -69
  117. package/node_modules/@hcengineering/platform/lib/i18n.js.map +3 -3
  118. package/node_modules/@hcengineering/platform/lib/status.js +25 -0
  119. package/node_modules/@hcengineering/platform/lib/status.js.map +2 -2
  120. package/node_modules/@hcengineering/platform/package.json +18 -15
  121. package/node_modules/@hcengineering/platform/src/__tests__/i18n.test.ts +114 -2
  122. package/node_modules/@hcengineering/platform/src/__tests__/status.test.ts +77 -0
  123. package/node_modules/@hcengineering/platform/src/i18n.ts +99 -71
  124. package/node_modules/@hcengineering/platform/src/status.ts +30 -0
  125. package/node_modules/@hcengineering/rank/package.json +19 -16
  126. package/node_modules/@hcengineering/rpc/package.json +21 -18
  127. package/node_modules/@hcengineering/tags/package.json +12 -9
  128. package/node_modules/@hcengineering/task/package.json +14 -11
  129. package/node_modules/@hcengineering/text/lib/markup/__tests__/utils.test.js +25 -0
  130. package/node_modules/@hcengineering/text/lib/markup/__tests__/utils.test.js.map +2 -2
  131. package/node_modules/@hcengineering/text/lib/tiptapExtensions.js +6 -0
  132. package/node_modules/@hcengineering/text/lib/tiptapExtensions.js.map +2 -2
  133. package/node_modules/@hcengineering/text/package.json +23 -18
  134. package/node_modules/@hcengineering/text/src/markup/__tests__/utils.test.ts +27 -0
  135. package/node_modules/@hcengineering/text/src/tiptapExtensions.ts +3 -0
  136. package/node_modules/@hcengineering/text-core/lib/markup/model.js +1 -0
  137. package/node_modules/@hcengineering/text-core/lib/markup/model.js.map +2 -2
  138. package/node_modules/@hcengineering/text-core/package.json +20 -17
  139. package/node_modules/@hcengineering/text-core/src/markup/model.ts +2 -1
  140. package/node_modules/@hcengineering/text-html/package.json +19 -16
  141. package/node_modules/@hcengineering/text-markdown/lib/serializer.js +14 -0
  142. package/node_modules/@hcengineering/text-markdown/lib/serializer.js.map +2 -2
  143. package/node_modules/@hcengineering/text-markdown/package.json +20 -17
  144. package/node_modules/@hcengineering/text-markdown/src/serializer.ts +14 -0
  145. package/node_modules/@hcengineering/tracker/lib/index.js +1 -0
  146. package/node_modules/@hcengineering/tracker/lib/index.js.map +2 -2
  147. package/node_modules/@hcengineering/tracker/package.json +16 -13
  148. package/node_modules/@tiptap/core/dist/commands/focus.d.ts.map +1 -1
  149. package/node_modules/@tiptap/core/dist/index.cjs +19 -2
  150. package/node_modules/@tiptap/core/dist/index.cjs.map +1 -1
  151. package/node_modules/@tiptap/core/dist/index.js +19 -3
  152. package/node_modules/@tiptap/core/dist/index.js.map +1 -1
  153. package/node_modules/@tiptap/core/dist/index.umd.js +19 -2
  154. package/node_modules/@tiptap/core/dist/index.umd.js.map +1 -1
  155. package/node_modules/@tiptap/core/dist/utilities/index.d.ts +1 -0
  156. package/node_modules/@tiptap/core/dist/utilities/index.d.ts.map +1 -1
  157. package/node_modules/@tiptap/core/dist/utilities/isSafari.d.ts +10 -0
  158. package/node_modules/@tiptap/core/dist/utilities/isSafari.d.ts.map +1 -0
  159. package/node_modules/@tiptap/core/package.json +2 -2
  160. package/node_modules/@tiptap/core/src/commands/focus.ts +7 -2
  161. package/node_modules/@tiptap/core/src/utilities/index.ts +1 -0
  162. package/node_modules/@tiptap/core/src/utilities/isSafari.ts +11 -0
  163. package/node_modules/@tiptap/extension-blockquote/package.json +2 -2
  164. package/node_modules/@tiptap/extension-bold/package.json +2 -2
  165. package/node_modules/@tiptap/extension-bullet-list/package.json +2 -2
  166. package/node_modules/@tiptap/extension-code/package.json +2 -2
  167. package/node_modules/@tiptap/extension-code-block/package.json +3 -3
  168. package/node_modules/@tiptap/extension-document/package.json +2 -2
  169. package/node_modules/@tiptap/extension-dropcursor/package.json +3 -3
  170. package/node_modules/@tiptap/extension-gapcursor/package.json +3 -3
  171. package/node_modules/@tiptap/extension-hard-break/package.json +2 -2
  172. package/node_modules/@tiptap/extension-heading/package.json +2 -2
  173. package/node_modules/@tiptap/extension-highlight/package.json +2 -2
  174. package/node_modules/@tiptap/extension-history/package.json +3 -3
  175. package/node_modules/@tiptap/extension-horizontal-rule/package.json +3 -3
  176. package/node_modules/@tiptap/extension-italic/package.json +2 -2
  177. package/node_modules/@tiptap/extension-link/package.json +3 -3
  178. package/node_modules/@tiptap/extension-list-item/package.json +2 -2
  179. package/node_modules/@tiptap/extension-mention/package.json +4 -4
  180. package/node_modules/@tiptap/extension-ordered-list/package.json +2 -2
  181. package/node_modules/@tiptap/extension-paragraph/package.json +2 -2
  182. package/node_modules/@tiptap/extension-strike/package.json +2 -2
  183. package/node_modules/@tiptap/extension-subscript/README.md +14 -0
  184. package/node_modules/@tiptap/extension-subscript/dist/index.cjs +61 -0
  185. package/node_modules/@tiptap/extension-subscript/dist/index.cjs.map +1 -0
  186. package/node_modules/@tiptap/extension-subscript/dist/index.d.ts +4 -0
  187. package/node_modules/@tiptap/extension-subscript/dist/index.d.ts.map +1 -0
  188. package/node_modules/@tiptap/extension-subscript/dist/index.js +56 -0
  189. package/node_modules/@tiptap/extension-subscript/dist/index.js.map +1 -0
  190. package/node_modules/@tiptap/extension-subscript/dist/index.umd.js +65 -0
  191. package/node_modules/@tiptap/extension-subscript/dist/index.umd.js.map +1 -0
  192. package/node_modules/@tiptap/extension-subscript/dist/subscript.d.ts +36 -0
  193. package/node_modules/@tiptap/extension-subscript/dist/subscript.d.ts.map +1 -0
  194. package/node_modules/@tiptap/extension-subscript/package.json +49 -0
  195. package/node_modules/@tiptap/extension-subscript/src/index.ts +5 -0
  196. package/node_modules/@tiptap/extension-subscript/src/subscript.ts +91 -0
  197. package/node_modules/@tiptap/extension-superscript/README.md +14 -0
  198. package/node_modules/@tiptap/extension-superscript/dist/index.cjs +61 -0
  199. package/node_modules/@tiptap/extension-superscript/dist/index.cjs.map +1 -0
  200. package/node_modules/@tiptap/extension-superscript/dist/index.d.ts +4 -0
  201. package/node_modules/@tiptap/extension-superscript/dist/index.d.ts.map +1 -0
  202. package/node_modules/@tiptap/extension-superscript/dist/index.js +56 -0
  203. package/node_modules/@tiptap/extension-superscript/dist/index.js.map +1 -0
  204. package/node_modules/@tiptap/extension-superscript/dist/index.umd.js +65 -0
  205. package/node_modules/@tiptap/extension-superscript/dist/index.umd.js.map +1 -0
  206. package/node_modules/@tiptap/extension-superscript/dist/superscript.d.ts +36 -0
  207. package/node_modules/@tiptap/extension-superscript/dist/superscript.d.ts.map +1 -0
  208. package/node_modules/@tiptap/extension-superscript/package.json +49 -0
  209. package/node_modules/@tiptap/extension-superscript/src/index.ts +5 -0
  210. package/node_modules/@tiptap/extension-superscript/src/superscript.ts +91 -0
  211. package/node_modules/@tiptap/extension-table/package.json +3 -3
  212. package/node_modules/@tiptap/extension-table-cell/package.json +2 -2
  213. package/node_modules/@tiptap/extension-table-header/package.json +2 -2
  214. package/node_modules/@tiptap/extension-table-row/package.json +2 -2
  215. package/node_modules/@tiptap/extension-task-item/package.json +3 -3
  216. package/node_modules/@tiptap/extension-task-list/package.json +2 -2
  217. package/node_modules/@tiptap/extension-text/package.json +2 -2
  218. package/node_modules/@tiptap/extension-typography/package.json +2 -2
  219. package/node_modules/@tiptap/extension-underline/package.json +2 -2
  220. package/node_modules/@tiptap/html/package.json +3 -3
  221. package/node_modules/@tiptap/pm/package.json +1 -1
  222. package/node_modules/@tiptap/starter-kit/node_modules/@tiptap/extension-text-style/package.json +2 -2
  223. package/node_modules/@tiptap/starter-kit/package.json +22 -22
  224. package/node_modules/@tiptap/suggestion/package.json +3 -3
  225. package/node_modules/linkify-it/build/index.cjs.js +99 -94
  226. package/node_modules/linkify-it/index.mjs +99 -94
  227. package/node_modules/linkify-it/package.json +11 -1
  228. package/node_modules/linkifyjs/README.md +4 -2
  229. package/node_modules/linkifyjs/dist/linkify.cjs +8 -11
  230. package/node_modules/linkifyjs/dist/linkify.d.cts +14 -14
  231. package/node_modules/linkifyjs/dist/linkify.d.mts +14 -14
  232. package/node_modules/linkifyjs/dist/linkify.js +8 -11
  233. package/node_modules/linkifyjs/dist/linkify.min.js +1 -1
  234. package/node_modules/linkifyjs/dist/linkify.mjs +8 -11
  235. package/node_modules/linkifyjs/package.json +1 -1
  236. package/node_modules/markdown-it/README.md +13 -17
  237. package/node_modules/markdown-it/dist/index.cjs.js +111 -31
  238. package/node_modules/markdown-it/dist/markdown-it.js +117 -31
  239. package/node_modules/markdown-it/dist/markdown-it.min.js +2 -2
  240. package/node_modules/markdown-it/lib/common/utils.mjs +30 -1
  241. package/node_modules/markdown-it/lib/index.mjs +1 -1
  242. package/node_modules/markdown-it/lib/rules_block/heading.mjs +2 -2
  243. package/node_modules/markdown-it/lib/rules_block/html_block.mjs +12 -1
  244. package/node_modules/markdown-it/lib/rules_block/lheading.mjs +4 -1
  245. package/node_modules/markdown-it/lib/rules_block/paragraph.mjs +3 -1
  246. package/node_modules/markdown-it/lib/rules_core/smartquotes.mjs +37 -21
  247. package/node_modules/markdown-it/lib/rules_inline/entity.mjs +2 -2
  248. package/node_modules/markdown-it/lib/rules_inline/state_inline.mjs +37 -6
  249. package/node_modules/markdown-it/package.json +14 -3
  250. package/node_modules/msgpackr/README.md +1 -3
  251. package/node_modules/msgpackr/benchmark.md +26 -16
  252. package/node_modules/msgpackr/dist/index-no-eval.cjs +35 -16
  253. package/node_modules/msgpackr/dist/index-no-eval.cjs.map +1 -1
  254. package/node_modules/msgpackr/dist/index-no-eval.min.js +1 -1
  255. package/node_modules/msgpackr/dist/index-no-eval.min.js.map +1 -1
  256. package/node_modules/msgpackr/dist/index.js +35 -16
  257. package/node_modules/msgpackr/dist/index.js.map +1 -1
  258. package/node_modules/msgpackr/dist/index.min.js +1 -1
  259. package/node_modules/msgpackr/dist/index.min.js.map +1 -1
  260. package/node_modules/msgpackr/dist/node.cjs +50 -26
  261. package/node_modules/msgpackr/dist/node.cjs.map +1 -1
  262. package/node_modules/msgpackr/dist/test.js +44 -16
  263. package/node_modules/msgpackr/dist/test.js.map +1 -1
  264. package/node_modules/msgpackr/dist/unpack-no-eval.cjs +35 -16
  265. package/node_modules/msgpackr/dist/unpack-no-eval.cjs.map +1 -1
  266. package/node_modules/msgpackr/index.d.cts +2 -0
  267. package/node_modules/msgpackr/index.d.ts +2 -0
  268. package/node_modules/msgpackr/package.json +1 -1
  269. package/node_modules/msgpackr/stream.js +15 -10
  270. package/node_modules/msgpackr/unpack.js +35 -16
  271. package/node_modules/prosemirror-changeset/CHANGELOG.md +12 -0
  272. package/node_modules/prosemirror-changeset/README.md +31 -2
  273. package/node_modules/prosemirror-changeset/dist/index.cjs +17 -2
  274. package/node_modules/prosemirror-changeset/dist/index.d.cts +32 -2
  275. package/node_modules/prosemirror-changeset/dist/index.d.ts +32 -2
  276. package/node_modules/prosemirror-changeset/dist/index.js +18 -3
  277. package/node_modules/prosemirror-changeset/package.json +2 -2
  278. package/node_modules/prosemirror-changeset/src/README.md +4 -2
  279. package/node_modules/prosemirror-changeset/src/change.ts +18 -0
  280. package/node_modules/prosemirror-changeset/src/changeset.ts +10 -4
  281. package/node_modules/prosemirror-changeset/src/simplify.ts +1 -1
  282. package/node_modules/prosemirror-changeset/test/test-simplify.ts +3 -0
  283. package/node_modules/prosemirror-gapcursor/CHANGELOG.md +6 -0
  284. package/node_modules/prosemirror-gapcursor/dist/index.cjs +1 -1
  285. package/node_modules/prosemirror-gapcursor/dist/index.js +1 -1
  286. package/node_modules/prosemirror-gapcursor/package.json +3 -2
  287. package/node_modules/prosemirror-gapcursor/src/gapcursor.ts +1 -1
  288. package/node_modules/prosemirror-markdown/CHANGELOG.md +12 -0
  289. package/node_modules/prosemirror-markdown/dist/index.cjs +11 -1
  290. package/node_modules/prosemirror-markdown/dist/index.js +14 -2
  291. package/node_modules/prosemirror-markdown/package.json +1 -1
  292. package/node_modules/prosemirror-markdown/src/to_markdown.ts +12 -3
  293. package/node_modules/prosemirror-menu/CHANGELOG.md +18 -0
  294. package/node_modules/prosemirror-menu/CONTRIBUTING.md +22 -18
  295. package/node_modules/prosemirror-menu/README.md +69 -29
  296. package/node_modules/prosemirror-menu/dist/index.cjs +232 -48
  297. package/node_modules/prosemirror-menu/dist/index.d.cts +29 -14
  298. package/node_modules/prosemirror-menu/dist/index.d.ts +29 -14
  299. package/node_modules/prosemirror-menu/dist/index.js +229 -36
  300. package/node_modules/prosemirror-menu/package.json +2 -2
  301. package/node_modules/prosemirror-menu/src/README.md +30 -1
  302. package/node_modules/prosemirror-menu/src/icons.ts +3 -2
  303. package/node_modules/prosemirror-menu/src/menu.ts +193 -40
  304. package/node_modules/prosemirror-menu/src/menubar.ts +50 -5
  305. package/node_modules/prosemirror-menu/style/menu.css +28 -7
  306. package/node_modules/prosemirror-model/CHANGELOG.md +20 -0
  307. package/node_modules/prosemirror-model/CONTRIBUTING.md +19 -19
  308. package/node_modules/prosemirror-model/README.md +3 -3
  309. package/node_modules/prosemirror-model/dist/index.cjs +13 -10
  310. package/node_modules/prosemirror-model/dist/index.d.cts +25 -21
  311. package/node_modules/prosemirror-model/dist/index.d.ts +25 -21
  312. package/node_modules/prosemirror-model/dist/index.js +19 -23
  313. package/node_modules/prosemirror-model/package.json +2 -2
  314. package/node_modules/prosemirror-model/src/fragment.ts +1 -1
  315. package/node_modules/prosemirror-model/src/from_dom.ts +4 -1
  316. package/node_modules/prosemirror-model/src/node.ts +5 -4
  317. package/node_modules/prosemirror-model/src/replace.ts +6 -15
  318. package/node_modules/prosemirror-model/src/schema.ts +1 -1
  319. package/node_modules/prosemirror-model/src/to_dom.ts +24 -20
  320. package/node_modules/prosemirror-transform/CHANGELOG.md +16 -0
  321. package/node_modules/prosemirror-transform/dist/index.cjs +38 -4
  322. package/node_modules/prosemirror-transform/dist/index.d.cts +19 -0
  323. package/node_modules/prosemirror-transform/dist/index.d.ts +19 -0
  324. package/node_modules/prosemirror-transform/dist/index.js +52 -1
  325. package/node_modules/prosemirror-transform/package.json +1 -1
  326. package/node_modules/prosemirror-transform/src/replace.ts +16 -0
  327. package/node_modules/prosemirror-transform/src/replace_step.ts +10 -1
  328. package/node_modules/prosemirror-transform/src/transform.ts +21 -2
  329. package/node_modules/prosemirror-view/CHANGELOG.md +34 -2
  330. package/node_modules/prosemirror-view/CONTRIBUTING.md +19 -19
  331. package/node_modules/prosemirror-view/README.md +3 -3
  332. package/node_modules/prosemirror-view/dist/index.cjs +96 -40
  333. package/node_modules/prosemirror-view/dist/index.d.cts +2 -2
  334. package/node_modules/prosemirror-view/dist/index.d.ts +2 -2
  335. package/node_modules/prosemirror-view/dist/index.js +90 -39
  336. package/node_modules/prosemirror-view/package.json +2 -2
  337. package/node_modules/prosemirror-view/src/domchange.ts +1 -1
  338. package/node_modules/prosemirror-view/src/domobserver.ts +59 -16
  339. package/node_modules/prosemirror-view/src/index.ts +4 -4
  340. package/node_modules/prosemirror-view/src/input.ts +9 -6
  341. package/node_modules/prosemirror-view/src/viewdesc.ts +26 -22
  342. package/node_modules/prosemirror-view/style/prosemirror.css +1 -1
  343. package/package.json +5 -4
  344. package/src/client.mjs +2 -2
  345. package/src/config.mjs +1 -0
  346. package/src/helpers.mjs +2 -2
  347. package/src/index.mjs +31 -1
  348. package/src/initCodex.mjs +281 -0
  349. package/src/mcp.mjs +11 -1
  350. package/src/mcpShared.mjs +95 -5
  351. package/node_modules/@hcengineering/account-client/types/client.d.ts +0 -140
  352. package/node_modules/@hcengineering/account-client/types/client.d.ts.map +0 -1
  353. package/node_modules/@hcengineering/account-client/types/index.d.ts +0 -4
  354. package/node_modules/@hcengineering/account-client/types/index.d.ts.map +0 -1
  355. package/node_modules/@hcengineering/account-client/types/types.d.ts +0 -177
  356. package/node_modules/@hcengineering/account-client/types/types.d.ts.map +0 -1
  357. package/node_modules/@hcengineering/account-client/types/utils.d.ts +0 -5
  358. package/node_modules/@hcengineering/account-client/types/utils.d.ts.map +0 -1
  359. package/node_modules/@hcengineering/analytics/types/index.d.ts +0 -25
  360. package/node_modules/@hcengineering/analytics/types/index.d.ts.map +0 -1
  361. package/node_modules/@hcengineering/api-client/types/__tests__/config.test.d.ts +0 -2
  362. package/node_modules/@hcengineering/api-client/types/__tests__/config.test.d.ts.map +0 -1
  363. package/node_modules/@hcengineering/api-client/types/__tests__/markup-client.test.d.ts +0 -2
  364. package/node_modules/@hcengineering/api-client/types/__tests__/markup-client.test.d.ts.map +0 -1
  365. package/node_modules/@hcengineering/api-client/types/__tests__/markup-types.test.d.ts +0 -2
  366. package/node_modules/@hcengineering/api-client/types/__tests__/markup-types.test.d.ts.map +0 -1
  367. package/node_modules/@hcengineering/api-client/types/__tests__/rest-utils.test.d.ts +0 -2
  368. package/node_modules/@hcengineering/api-client/types/__tests__/rest-utils.test.d.ts.map +0 -1
  369. package/node_modules/@hcengineering/api-client/types/__tests__/utils.test.d.ts +0 -2
  370. package/node_modules/@hcengineering/api-client/types/__tests__/utils.test.d.ts.map +0 -1
  371. package/node_modules/@hcengineering/api-client/types/client.d.ts +0 -6
  372. package/node_modules/@hcengineering/api-client/types/client.d.ts.map +0 -1
  373. package/node_modules/@hcengineering/api-client/types/config.d.ts +0 -8
  374. package/node_modules/@hcengineering/api-client/types/config.d.ts.map +0 -1
  375. package/node_modules/@hcengineering/api-client/types/index.d.ts +0 -9
  376. package/node_modules/@hcengineering/api-client/types/index.d.ts.map +0 -1
  377. package/node_modules/@hcengineering/api-client/types/markup/client.d.ts +0 -5
  378. package/node_modules/@hcengineering/api-client/types/markup/client.d.ts.map +0 -1
  379. package/node_modules/@hcengineering/api-client/types/markup/index.d.ts +0 -3
  380. package/node_modules/@hcengineering/api-client/types/markup/index.d.ts.map +0 -1
  381. package/node_modules/@hcengineering/api-client/types/markup/types.d.ts +0 -41
  382. package/node_modules/@hcengineering/api-client/types/markup/types.d.ts.map +0 -1
  383. package/node_modules/@hcengineering/api-client/types/rest/index.d.ts +0 -4
  384. package/node_modules/@hcengineering/api-client/types/rest/index.d.ts.map +0 -1
  385. package/node_modules/@hcengineering/api-client/types/rest/rest.d.ts +0 -39
  386. package/node_modules/@hcengineering/api-client/types/rest/rest.d.ts.map +0 -1
  387. package/node_modules/@hcengineering/api-client/types/rest/tx.d.ts +0 -3
  388. package/node_modules/@hcengineering/api-client/types/rest/tx.d.ts.map +0 -1
  389. package/node_modules/@hcengineering/api-client/types/rest/types.d.ts +0 -16
  390. package/node_modules/@hcengineering/api-client/types/rest/types.d.ts.map +0 -1
  391. package/node_modules/@hcengineering/api-client/types/rest/utils.d.ts +0 -3
  392. package/node_modules/@hcengineering/api-client/types/rest/utils.d.ts.map +0 -1
  393. package/node_modules/@hcengineering/api-client/types/socket/browser.d.ts +0 -4
  394. package/node_modules/@hcengineering/api-client/types/socket/browser.d.ts.map +0 -1
  395. package/node_modules/@hcengineering/api-client/types/socket/index.d.ts +0 -3
  396. package/node_modules/@hcengineering/api-client/types/socket/index.d.ts.map +0 -1
  397. package/node_modules/@hcengineering/api-client/types/socket/node.d.ts +0 -4
  398. package/node_modules/@hcengineering/api-client/types/socket/node.d.ts.map +0 -1
  399. package/node_modules/@hcengineering/api-client/types/storage/client.d.ts +0 -21
  400. package/node_modules/@hcengineering/api-client/types/storage/client.d.ts.map +0 -1
  401. package/node_modules/@hcengineering/api-client/types/storage/error.d.ts +0 -10
  402. package/node_modules/@hcengineering/api-client/types/storage/error.d.ts.map +0 -1
  403. package/node_modules/@hcengineering/api-client/types/storage/index.d.ts +0 -4
  404. package/node_modules/@hcengineering/api-client/types/storage/index.d.ts.map +0 -1
  405. package/node_modules/@hcengineering/api-client/types/storage/types.d.ts +0 -10
  406. package/node_modules/@hcengineering/api-client/types/storage/types.d.ts.map +0 -1
  407. package/node_modules/@hcengineering/api-client/types/types.d.ts +0 -101
  408. package/node_modules/@hcengineering/api-client/types/types.d.ts.map +0 -1
  409. package/node_modules/@hcengineering/api-client/types/utils.d.ts +0 -12
  410. package/node_modules/@hcengineering/api-client/types/utils.d.ts.map +0 -1
  411. package/node_modules/@hcengineering/chunter/types/analytics.d.ts +0 -5
  412. package/node_modules/@hcengineering/chunter/types/analytics.d.ts.map +0 -1
  413. package/node_modules/@hcengineering/chunter/types/index.d.ts +0 -211
  414. package/node_modules/@hcengineering/chunter/types/index.d.ts.map +0 -1
  415. package/node_modules/@hcengineering/chunter/types/utils.d.ts +0 -7
  416. package/node_modules/@hcengineering/chunter/types/utils.d.ts.map +0 -1
  417. package/node_modules/@hcengineering/client/types/__tests__/client.test.d.ts +0 -2
  418. package/node_modules/@hcengineering/client/types/__tests__/client.test.d.ts.map +0 -1
  419. package/node_modules/@hcengineering/client/types/index.d.ts +0 -69
  420. package/node_modules/@hcengineering/client/types/index.d.ts.map +0 -1
  421. package/node_modules/@hcengineering/client-resources/types/__tests__/connection.test.d.ts +0 -2
  422. package/node_modules/@hcengineering/client-resources/types/__tests__/connection.test.d.ts.map +0 -1
  423. package/node_modules/@hcengineering/client-resources/types/__tests__/integration.test.d.ts +0 -45
  424. package/node_modules/@hcengineering/client-resources/types/__tests__/integration.test.d.ts.map +0 -1
  425. package/node_modules/@hcengineering/client-resources/types/connection.d.ts +0 -7
  426. package/node_modules/@hcengineering/client-resources/types/connection.d.ts.map +0 -1
  427. package/node_modules/@hcengineering/client-resources/types/index.d.ts +0 -11
  428. package/node_modules/@hcengineering/client-resources/types/index.d.ts.map +0 -1
  429. package/node_modules/@hcengineering/collaborator-client/types/__tests__/utils.test.d.ts +0 -2
  430. package/node_modules/@hcengineering/collaborator-client/types/__tests__/utils.test.d.ts.map +0 -1
  431. package/node_modules/@hcengineering/collaborator-client/types/client.d.ts +0 -34
  432. package/node_modules/@hcengineering/collaborator-client/types/client.d.ts.map +0 -1
  433. package/node_modules/@hcengineering/collaborator-client/types/index.d.ts +0 -3
  434. package/node_modules/@hcengineering/collaborator-client/types/index.d.ts.map +0 -1
  435. package/node_modules/@hcengineering/collaborator-client/types/utils.d.ts +0 -9
  436. package/node_modules/@hcengineering/collaborator-client/types/utils.d.ts.map +0 -1
  437. package/node_modules/@hcengineering/contact/types/__tests__/cache.test.d.ts +0 -2
  438. package/node_modules/@hcengineering/contact/types/__tests__/cache.test.d.ts.map +0 -1
  439. package/node_modules/@hcengineering/contact/types/analytics.d.ts +0 -6
  440. package/node_modules/@hcengineering/contact/types/analytics.d.ts.map +0 -1
  441. package/node_modules/@hcengineering/contact/types/avatar.d.ts +0 -12
  442. package/node_modules/@hcengineering/contact/types/avatar.d.ts.map +0 -1
  443. package/node_modules/@hcengineering/contact/types/cache.d.ts +0 -49
  444. package/node_modules/@hcengineering/contact/types/cache.d.ts.map +0 -1
  445. package/node_modules/@hcengineering/contact/types/index.d.ts +0 -367
  446. package/node_modules/@hcengineering/contact/types/index.d.ts.map +0 -1
  447. package/node_modules/@hcengineering/contact/types/types.d.ts +0 -25
  448. package/node_modules/@hcengineering/contact/types/types.d.ts.map +0 -1
  449. package/node_modules/@hcengineering/contact/types/utils.d.ts +0 -110
  450. package/node_modules/@hcengineering/contact/types/utils.d.ts.map +0 -1
  451. package/node_modules/@hcengineering/core/types/__tests__/client.test.d.ts +0 -2
  452. package/node_modules/@hcengineering/core/types/__tests__/client.test.d.ts.map +0 -1
  453. package/node_modules/@hcengineering/core/types/__tests__/clone.test.d.ts +0 -2
  454. package/node_modules/@hcengineering/core/types/__tests__/clone.test.d.ts.map +0 -1
  455. package/node_modules/@hcengineering/core/types/__tests__/collaboration.test.d.ts +0 -2
  456. package/node_modules/@hcengineering/core/types/__tests__/collaboration.test.d.ts.map +0 -1
  457. package/node_modules/@hcengineering/core/types/__tests__/collaborators.test.d.ts +0 -2
  458. package/node_modules/@hcengineering/core/types/__tests__/collaborators.test.d.ts.map +0 -1
  459. package/node_modules/@hcengineering/core/types/__tests__/common.test.d.ts +0 -2
  460. package/node_modules/@hcengineering/core/types/__tests__/common.test.d.ts.map +0 -1
  461. package/node_modules/@hcengineering/core/types/__tests__/connection.d.ts +0 -4
  462. package/node_modules/@hcengineering/core/types/__tests__/connection.d.ts.map +0 -1
  463. package/node_modules/@hcengineering/core/types/__tests__/contexts.test.d.ts +0 -2
  464. package/node_modules/@hcengineering/core/types/__tests__/contexts.test.d.ts.map +0 -1
  465. package/node_modules/@hcengineering/core/types/__tests__/hierarchy.test.d.ts +0 -2
  466. package/node_modules/@hcengineering/core/types/__tests__/hierarchy.test.d.ts.map +0 -1
  467. package/node_modules/@hcengineering/core/types/__tests__/lang.test.d.ts +0 -2
  468. package/node_modules/@hcengineering/core/types/__tests__/lang.test.d.ts.map +0 -1
  469. package/node_modules/@hcengineering/core/types/__tests__/limiter-edge-cases.test.d.ts +0 -2
  470. package/node_modules/@hcengineering/core/types/__tests__/limiter-edge-cases.test.d.ts.map +0 -1
  471. package/node_modules/@hcengineering/core/types/__tests__/limits.test.d.ts +0 -2
  472. package/node_modules/@hcengineering/core/types/__tests__/limits.test.d.ts.map +0 -1
  473. package/node_modules/@hcengineering/core/types/__tests__/memdb.test.d.ts +0 -2
  474. package/node_modules/@hcengineering/core/types/__tests__/memdb.test.d.ts.map +0 -1
  475. package/node_modules/@hcengineering/core/types/__tests__/minmodel.d.ts +0 -50
  476. package/node_modules/@hcengineering/core/types/__tests__/minmodel.d.ts.map +0 -1
  477. package/node_modules/@hcengineering/core/types/__tests__/objvalue.test.d.ts +0 -2
  478. package/node_modules/@hcengineering/core/types/__tests__/objvalue.test.d.ts.map +0 -1
  479. package/node_modules/@hcengineering/core/types/__tests__/operator-bugs.test.d.ts +0 -2
  480. package/node_modules/@hcengineering/core/types/__tests__/operator-bugs.test.d.ts.map +0 -1
  481. package/node_modules/@hcengineering/core/types/__tests__/operator.test.d.ts +0 -2
  482. package/node_modules/@hcengineering/core/types/__tests__/operator.test.d.ts.map +0 -1
  483. package/node_modules/@hcengineering/core/types/__tests__/rate-limiter.test.d.ts +0 -2
  484. package/node_modules/@hcengineering/core/types/__tests__/rate-limiter.test.d.ts.map +0 -1
  485. package/node_modules/@hcengineering/core/types/__tests__/time.test.d.ts +0 -2
  486. package/node_modules/@hcengineering/core/types/__tests__/time.test.d.ts.map +0 -1
  487. package/node_modules/@hcengineering/core/types/__tests__/utils.test.d.ts +0 -2
  488. package/node_modules/@hcengineering/core/types/__tests__/utils.test.d.ts.map +0 -1
  489. package/node_modules/@hcengineering/core/types/backup.d.ts +0 -26
  490. package/node_modules/@hcengineering/core/types/backup.d.ts.map +0 -1
  491. package/node_modules/@hcengineering/core/types/benchmark.d.ts +0 -19
  492. package/node_modules/@hcengineering/core/types/benchmark.d.ts.map +0 -1
  493. package/node_modules/@hcengineering/core/types/classes.d.ts +0 -716
  494. package/node_modules/@hcengineering/core/types/classes.d.ts.map +0 -1
  495. package/node_modules/@hcengineering/core/types/client.d.ts +0 -69
  496. package/node_modules/@hcengineering/core/types/client.d.ts.map +0 -1
  497. package/node_modules/@hcengineering/core/types/clone.d.ts +0 -3
  498. package/node_modules/@hcengineering/core/types/clone.d.ts.map +0 -1
  499. package/node_modules/@hcengineering/core/types/collaboration.d.ts +0 -16
  500. package/node_modules/@hcengineering/core/types/collaboration.d.ts.map +0 -1
  501. package/node_modules/@hcengineering/core/types/collaborators.d.ts +0 -3
  502. package/node_modules/@hcengineering/core/types/collaborators.d.ts.map +0 -1
  503. package/node_modules/@hcengineering/core/types/common.d.ts +0 -4
  504. package/node_modules/@hcengineering/core/types/common.d.ts.map +0 -1
  505. package/node_modules/@hcengineering/core/types/component.d.ts +0 -229
  506. package/node_modules/@hcengineering/core/types/component.d.ts.map +0 -1
  507. package/node_modules/@hcengineering/core/types/hierarchy.d.ts +0 -84
  508. package/node_modules/@hcengineering/core/types/hierarchy.d.ts.map +0 -1
  509. package/node_modules/@hcengineering/core/types/index.d.ts +0 -25
  510. package/node_modules/@hcengineering/core/types/index.d.ts.map +0 -1
  511. package/node_modules/@hcengineering/core/types/memdb.d.ts +0 -60
  512. package/node_modules/@hcengineering/core/types/memdb.d.ts.map +0 -1
  513. package/node_modules/@hcengineering/core/types/objvalue.d.ts +0 -10
  514. package/node_modules/@hcengineering/core/types/objvalue.d.ts.map +0 -1
  515. package/node_modules/@hcengineering/core/types/operations.d.ts +0 -87
  516. package/node_modules/@hcengineering/core/types/operations.d.ts.map +0 -1
  517. package/node_modules/@hcengineering/core/types/operator.d.ts +0 -16
  518. package/node_modules/@hcengineering/core/types/operator.d.ts.map +0 -1
  519. package/node_modules/@hcengineering/core/types/predicate.d.ts +0 -6
  520. package/node_modules/@hcengineering/core/types/predicate.d.ts.map +0 -1
  521. package/node_modules/@hcengineering/core/types/proxy.d.ts +0 -21
  522. package/node_modules/@hcengineering/core/types/proxy.d.ts.map +0 -1
  523. package/node_modules/@hcengineering/core/types/query.d.ts +0 -21
  524. package/node_modules/@hcengineering/core/types/query.d.ts.map +0 -1
  525. package/node_modules/@hcengineering/core/types/server.d.ts +0 -82
  526. package/node_modules/@hcengineering/core/types/server.d.ts.map +0 -1
  527. package/node_modules/@hcengineering/core/types/status.d.ts +0 -30
  528. package/node_modules/@hcengineering/core/types/status.d.ts.map +0 -1
  529. package/node_modules/@hcengineering/core/types/storage.d.ts +0 -233
  530. package/node_modules/@hcengineering/core/types/storage.d.ts.map +0 -1
  531. package/node_modules/@hcengineering/core/types/time.d.ts +0 -8
  532. package/node_modules/@hcengineering/core/types/time.d.ts.map +0 -1
  533. package/node_modules/@hcengineering/core/types/tx.d.ts +0 -261
  534. package/node_modules/@hcengineering/core/types/tx.d.ts.map +0 -1
  535. package/node_modules/@hcengineering/core/types/utils.d.ts +0 -207
  536. package/node_modules/@hcengineering/core/types/utils.d.ts.map +0 -1
  537. package/node_modules/@hcengineering/measurements/types/__tests__/context.test.d.ts +0 -2
  538. package/node_modules/@hcengineering/measurements/types/__tests__/context.test.d.ts.map +0 -1
  539. package/node_modules/@hcengineering/measurements/types/__tests__/index.test.d.ts +0 -2
  540. package/node_modules/@hcengineering/measurements/types/__tests__/index.test.d.ts.map +0 -1
  541. package/node_modules/@hcengineering/measurements/types/__tests__/metrics.test.d.ts +0 -2
  542. package/node_modules/@hcengineering/measurements/types/__tests__/metrics.test.d.ts.map +0 -1
  543. package/node_modules/@hcengineering/measurements/types/__tests__/performance.test.d.ts +0 -2
  544. package/node_modules/@hcengineering/measurements/types/__tests__/performance.test.d.ts.map +0 -1
  545. package/node_modules/@hcengineering/measurements/types/context.d.ts +0 -64
  546. package/node_modules/@hcengineering/measurements/types/context.d.ts.map +0 -1
  547. package/node_modules/@hcengineering/measurements/types/index.d.ts +0 -12
  548. package/node_modules/@hcengineering/measurements/types/index.d.ts.map +0 -1
  549. package/node_modules/@hcengineering/measurements/types/metrics.d.ts +0 -34
  550. package/node_modules/@hcengineering/measurements/types/metrics.d.ts.map +0 -1
  551. package/node_modules/@hcengineering/measurements/types/types.d.ts +0 -88
  552. package/node_modules/@hcengineering/measurements/types/types.d.ts.map +0 -1
  553. package/node_modules/@hcengineering/platform/types/__tests__/i18n.test.d.ts +0 -2
  554. package/node_modules/@hcengineering/platform/types/__tests__/i18n.test.d.ts.map +0 -1
  555. package/node_modules/@hcengineering/platform/types/__tests__/ident.test.d.ts +0 -2
  556. package/node_modules/@hcengineering/platform/types/__tests__/ident.test.d.ts.map +0 -1
  557. package/node_modules/@hcengineering/platform/types/__tests__/plugin.d.ts +0 -7
  558. package/node_modules/@hcengineering/platform/types/__tests__/plugin.d.ts.map +0 -1
  559. package/node_modules/@hcengineering/platform/types/__tests__/resource.test.d.ts +0 -2
  560. package/node_modules/@hcengineering/platform/types/__tests__/resource.test.d.ts.map +0 -1
  561. package/node_modules/@hcengineering/platform/types/event.d.ts +0 -39
  562. package/node_modules/@hcengineering/platform/types/event.d.ts.map +0 -1
  563. package/node_modules/@hcengineering/platform/types/i18n.d.ts +0 -28
  564. package/node_modules/@hcengineering/platform/types/i18n.d.ts.map +0 -1
  565. package/node_modules/@hcengineering/platform/types/ident.d.ts +0 -14
  566. package/node_modules/@hcengineering/platform/types/ident.d.ts.map +0 -1
  567. package/node_modules/@hcengineering/platform/types/index.d.ts +0 -19
  568. package/node_modules/@hcengineering/platform/types/index.d.ts.map +0 -1
  569. package/node_modules/@hcengineering/platform/types/metadata.d.ts +0 -38
  570. package/node_modules/@hcengineering/platform/types/metadata.d.ts.map +0 -1
  571. package/node_modules/@hcengineering/platform/types/platform.d.ts +0 -218
  572. package/node_modules/@hcengineering/platform/types/platform.d.ts.map +0 -1
  573. package/node_modules/@hcengineering/platform/types/resource.d.ts +0 -49
  574. package/node_modules/@hcengineering/platform/types/resource.d.ts.map +0 -1
  575. package/node_modules/@hcengineering/platform/types/status.d.ts +0 -60
  576. package/node_modules/@hcengineering/platform/types/status.d.ts.map +0 -1
  577. package/node_modules/@hcengineering/platform/types/testUtils.d.ts +0 -8
  578. package/node_modules/@hcengineering/platform/types/testUtils.d.ts.map +0 -1
  579. package/node_modules/@hcengineering/rank/types/__tests__/utils.test.d.ts +0 -2
  580. package/node_modules/@hcengineering/rank/types/__tests__/utils.test.d.ts.map +0 -1
  581. package/node_modules/@hcengineering/rank/types/index.d.ts +0 -3
  582. package/node_modules/@hcengineering/rank/types/index.d.ts.map +0 -1
  583. package/node_modules/@hcengineering/rank/types/types.d.ts +0 -2
  584. package/node_modules/@hcengineering/rank/types/types.d.ts.map +0 -1
  585. package/node_modules/@hcengineering/rank/types/utils.d.ts +0 -6
  586. package/node_modules/@hcengineering/rank/types/utils.d.ts.map +0 -1
  587. package/node_modules/@hcengineering/rpc/types/index.d.ts +0 -3
  588. package/node_modules/@hcengineering/rpc/types/index.d.ts.map +0 -1
  589. package/node_modules/@hcengineering/rpc/types/rpc.d.ts +0 -96
  590. package/node_modules/@hcengineering/rpc/types/rpc.d.ts.map +0 -1
  591. package/node_modules/@hcengineering/rpc/types/sliding.d.ts +0 -11
  592. package/node_modules/@hcengineering/rpc/types/sliding.d.ts.map +0 -1
  593. package/node_modules/@hcengineering/rpc/types/test/rateLimit.spec.d.ts +0 -2
  594. package/node_modules/@hcengineering/rpc/types/test/rateLimit.spec.d.ts.map +0 -1
  595. package/node_modules/@hcengineering/tags/types/analytics.d.ts +0 -5
  596. package/node_modules/@hcengineering/tags/types/analytics.d.ts.map +0 -1
  597. package/node_modules/@hcengineering/tags/types/index.d.ts +0 -105
  598. package/node_modules/@hcengineering/tags/types/index.d.ts.map +0 -1
  599. package/node_modules/@hcengineering/task/types/index.d.ts +0 -227
  600. package/node_modules/@hcengineering/task/types/index.d.ts.map +0 -1
  601. package/node_modules/@hcengineering/task/types/utils.d.ts +0 -61
  602. package/node_modules/@hcengineering/task/types/utils.d.ts.map +0 -1
  603. package/node_modules/@hcengineering/text/types/extensions.d.ts +0 -53
  604. package/node_modules/@hcengineering/text/types/extensions.d.ts.map +0 -1
  605. package/node_modules/@hcengineering/text/types/index.d.ts +0 -13
  606. package/node_modules/@hcengineering/text/types/index.d.ts.map +0 -1
  607. package/node_modules/@hcengineering/text/types/kit.d.ts +0 -12
  608. package/node_modules/@hcengineering/text/types/kit.d.ts.map +0 -1
  609. package/node_modules/@hcengineering/text/types/kits/common-kit.d.ts +0 -72
  610. package/node_modules/@hcengineering/text/types/kits/common-kit.d.ts.map +0 -1
  611. package/node_modules/@hcengineering/text/types/kits/server-kit.d.ts +0 -106
  612. package/node_modules/@hcengineering/text/types/kits/server-kit.d.ts.map +0 -1
  613. package/node_modules/@hcengineering/text/types/marks/code.d.ts +0 -8
  614. package/node_modules/@hcengineering/text/types/marks/code.d.ts.map +0 -1
  615. package/node_modules/@hcengineering/text/types/marks/colors.d.ts +0 -21
  616. package/node_modules/@hcengineering/text/types/marks/colors.d.ts.map +0 -1
  617. package/node_modules/@hcengineering/text/types/marks/inlineComment.d.ts +0 -5
  618. package/node_modules/@hcengineering/text/types/marks/inlineComment.d.ts.map +0 -1
  619. package/node_modules/@hcengineering/text/types/marks/noteBase.d.ts +0 -23
  620. package/node_modules/@hcengineering/text/types/marks/noteBase.d.ts.map +0 -1
  621. package/node_modules/@hcengineering/text/types/marks/qmsInlineCommentMark.d.ts +0 -6
  622. package/node_modules/@hcengineering/text/types/marks/qmsInlineCommentMark.d.ts.map +0 -1
  623. package/node_modules/@hcengineering/text/types/markup/__tests__/dsl.test.d.ts +0 -2
  624. package/node_modules/@hcengineering/text/types/markup/__tests__/dsl.test.d.ts.map +0 -1
  625. package/node_modules/@hcengineering/text/types/markup/__tests__/utils.test.d.ts +0 -5
  626. package/node_modules/@hcengineering/text/types/markup/__tests__/utils.test.d.ts.map +0 -1
  627. package/node_modules/@hcengineering/text/types/markup/utils.d.ts +0 -19
  628. package/node_modules/@hcengineering/text/types/markup/utils.d.ts.map +0 -1
  629. package/node_modules/@hcengineering/text/types/nodes/codeblock.d.ts +0 -12
  630. package/node_modules/@hcengineering/text/types/nodes/codeblock.d.ts.map +0 -1
  631. package/node_modules/@hcengineering/text/types/nodes/comment.d.ts +0 -6
  632. package/node_modules/@hcengineering/text/types/nodes/comment.d.ts.map +0 -1
  633. package/node_modules/@hcengineering/text/types/nodes/embed.d.ts +0 -3
  634. package/node_modules/@hcengineering/text/types/nodes/embed.d.ts.map +0 -1
  635. package/node_modules/@hcengineering/text/types/nodes/emoji.d.ts +0 -17
  636. package/node_modules/@hcengineering/text/types/nodes/emoji.d.ts.map +0 -1
  637. package/node_modules/@hcengineering/text/types/nodes/file.d.ts +0 -13
  638. package/node_modules/@hcengineering/text/types/nodes/file.d.ts.map +0 -1
  639. package/node_modules/@hcengineering/text/types/nodes/image.d.ts +0 -52
  640. package/node_modules/@hcengineering/text/types/nodes/image.d.ts.map +0 -1
  641. package/node_modules/@hcengineering/text/types/nodes/index.d.ts +0 -11
  642. package/node_modules/@hcengineering/text/types/nodes/index.d.ts.map +0 -1
  643. package/node_modules/@hcengineering/text/types/nodes/markdown.d.ts +0 -3
  644. package/node_modules/@hcengineering/text/types/nodes/markdown.d.ts.map +0 -1
  645. package/node_modules/@hcengineering/text/types/nodes/mermaid.d.ts +0 -4
  646. package/node_modules/@hcengineering/text/types/nodes/mermaid.d.ts.map +0 -1
  647. package/node_modules/@hcengineering/text/types/nodes/reference.d.ts +0 -18
  648. package/node_modules/@hcengineering/text/types/nodes/reference.d.ts.map +0 -1
  649. package/node_modules/@hcengineering/text/types/nodes/todo.d.ts +0 -3
  650. package/node_modules/@hcengineering/text/types/nodes/todo.d.ts.map +0 -1
  651. package/node_modules/@hcengineering/text/types/nodes/utils.d.ts +0 -6
  652. package/node_modules/@hcengineering/text/types/nodes/utils.d.ts.map +0 -1
  653. package/node_modules/@hcengineering/text/types/tiptapExtensions.d.ts +0 -28
  654. package/node_modules/@hcengineering/text/types/tiptapExtensions.d.ts.map +0 -1
  655. package/node_modules/@hcengineering/text-core/types/index.d.ts +0 -6
  656. package/node_modules/@hcengineering/text-core/types/index.d.ts.map +0 -1
  657. package/node_modules/@hcengineering/text-core/types/markup/__tests__/traverse.test.d.ts +0 -2
  658. package/node_modules/@hcengineering/text-core/types/markup/__tests__/traverse.test.d.ts.map +0 -1
  659. package/node_modules/@hcengineering/text-core/types/markup/__tests__/utils.test.d.ts +0 -2
  660. package/node_modules/@hcengineering/text-core/types/markup/__tests__/utils.test.d.ts.map +0 -1
  661. package/node_modules/@hcengineering/text-core/types/markup/dsl.d.ts +0 -25
  662. package/node_modules/@hcengineering/text-core/types/markup/dsl.d.ts.map +0 -1
  663. package/node_modules/@hcengineering/text-core/types/markup/model.d.ts +0 -74
  664. package/node_modules/@hcengineering/text-core/types/markup/model.d.ts.map +0 -1
  665. package/node_modules/@hcengineering/text-core/types/markup/reference.d.ts +0 -15
  666. package/node_modules/@hcengineering/text-core/types/markup/reference.d.ts.map +0 -1
  667. package/node_modules/@hcengineering/text-core/types/markup/traverse.d.ts +0 -6
  668. package/node_modules/@hcengineering/text-core/types/markup/traverse.d.ts.map +0 -1
  669. package/node_modules/@hcengineering/text-core/types/markup/utils.d.ts +0 -25
  670. package/node_modules/@hcengineering/text-core/types/markup/utils.d.ts.map +0 -1
  671. package/node_modules/@hcengineering/text-html/types/__tests__/html.test.d.ts +0 -2
  672. package/node_modules/@hcengineering/text-html/types/__tests__/html.test.d.ts.map +0 -1
  673. package/node_modules/@hcengineering/text-html/types/index.d.ts +0 -6
  674. package/node_modules/@hcengineering/text-html/types/index.d.ts.map +0 -1
  675. package/node_modules/@hcengineering/text-html/types/parser.d.ts +0 -10
  676. package/node_modules/@hcengineering/text-html/types/parser.d.ts.map +0 -1
  677. package/node_modules/@hcengineering/text-html/types/serializer.d.ts +0 -9
  678. package/node_modules/@hcengineering/text-html/types/serializer.d.ts.map +0 -1
  679. package/node_modules/@hcengineering/text-markdown/types/__tests__/markdown.test.d.ts +0 -9
  680. package/node_modules/@hcengineering/text-markdown/types/__tests__/markdown.test.d.ts.map +0 -1
  681. package/node_modules/@hcengineering/text-markdown/types/compare.d.ts +0 -10
  682. package/node_modules/@hcengineering/text-markdown/types/compare.d.ts.map +0 -1
  683. package/node_modules/@hcengineering/text-markdown/types/index.d.ts +0 -14
  684. package/node_modules/@hcengineering/text-markdown/types/index.d.ts.map +0 -1
  685. package/node_modules/@hcengineering/text-markdown/types/marks.d.ts +0 -8
  686. package/node_modules/@hcengineering/text-markdown/types/marks.d.ts.map +0 -1
  687. package/node_modules/@hcengineering/text-markdown/types/node.d.ts +0 -4
  688. package/node_modules/@hcengineering/text-markdown/types/node.d.ts.map +0 -1
  689. package/node_modules/@hcengineering/text-markdown/types/parser.d.ts +0 -50
  690. package/node_modules/@hcengineering/text-markdown/types/parser.d.ts.map +0 -1
  691. package/node_modules/@hcengineering/text-markdown/types/serializer.d.ts +0 -102
  692. package/node_modules/@hcengineering/text-markdown/types/serializer.d.ts.map +0 -1
  693. package/node_modules/@hcengineering/tracker/types/analytics.d.ts +0 -24
  694. package/node_modules/@hcengineering/tracker/types/analytics.d.ts.map +0 -1
  695. package/node_modules/@hcengineering/tracker/types/index.d.ts +0 -431
  696. package/node_modules/@hcengineering/tracker/types/index.d.ts.map +0 -1
@@ -73,6 +73,7 @@ __export(utils_exports, {
73
73
  getSocialIdByPersonIdCb: () => getSocialIdByPersonIdCb,
74
74
  getSocialStringsByEmployee: () => getSocialStringsByEmployee,
75
75
  includesAny: () => includesAny,
76
+ isDocCreatedByAccount: () => isDocCreatedByAccount,
76
77
  loadCachesForPersonId: () => loadCachesForPersonId,
77
78
  loadCachesForPersonIds: () => loadCachesForPersonIds,
78
79
  loadCachesForPersonRef: () => loadCachesForPersonRef,
@@ -82,7 +83,7 @@ __export(utils_exports, {
82
83
  });
83
84
  module.exports = __toCommonJS(utils_exports);
84
85
  var import_core = require("@hcengineering/core");
85
- var import_platform = require("@hcengineering/platform");
86
+ var import_platform = __toESM(require("@hcengineering/platform"));
86
87
  var import__ = __toESM(require("."));
87
88
  var import_types = require("./types");
88
89
  var import_cache = __toESM(require("./cache"));
@@ -112,6 +113,13 @@ function setCurrentEmployeeSpace(space) {
112
113
  currentEmployeeSpace = space;
113
114
  }
114
115
  __name(setCurrentEmployeeSpace, "setCurrentEmployeeSpace");
116
+ function isDocCreatedByAccount(doc, account) {
117
+ const creator = doc.createdBy;
118
+ if (creator === void 0) return false;
119
+ if (creator === account.primarySocialId) return true;
120
+ return account.socialIds.includes(creator);
121
+ }
122
+ __name(isDocCreatedByAccount, "isDocCreatedByAccount");
115
123
  function getAvatarColorForId(id) {
116
124
  if (id == null) return import_types.AVATAR_COLORS[0].color;
117
125
  let hash = 0;
@@ -338,125 +346,141 @@ async function ensureEmployee(ctx, me, client, socialIds, getGlobalPerson) {
338
346
  }
339
347
  __name(ensureEmployee, "ensureEmployee");
340
348
  async function ensureEmployeeForPerson(ctx, me, person, client, socialIds, globalPerson) {
341
- const txFactory = new import_core.TxFactory(me.primarySocialId);
342
- const personByUuid = await client.findOne(import__.default.class.Person, { personUuid: person.uuid });
343
- let personRef = personByUuid?._id;
344
- if (personRef === void 0) {
345
- const socialIdentity = await client.findOne(import__.default.class.SocialIdentity, {
346
- _id: { $in: person.socialIds }
347
- });
348
- personRef = socialIdentity?.attachedTo;
349
- }
350
- if (personRef === void 0) {
351
- await ctx.with("create-person", {}, async () => {
352
- if (globalPerson === void 0) {
353
- console.error("Cannot get global person");
354
- return null;
355
- }
356
- const data = {
357
- personUuid: person.uuid,
358
- name: combineName(globalPerson.firstName, globalPerson.lastName),
359
- city: globalPerson.city,
360
- avatarType: import__.AvatarType.COLOR
361
- };
362
- personRef = (0, import_core.generateId)();
363
- const createPersonTx = txFactory.createTxCreateDoc(import__.default.class.Person, import__.default.space.Contacts, data, personRef);
364
- await client.tx(createPersonTx);
365
- });
366
- } else if (personByUuid === void 0) {
367
- const updatePersonTx = txFactory.createTxUpdateDoc(import__.default.class.Person, import__.default.space.Contacts, personRef, {
368
- personUuid: person.uuid
369
- });
370
- await client.tx(updatePersonTx);
371
- }
372
- const existingIdentifiers = (0, import_core.toIdMap)(
373
- await client.findAll(import__.default.class.SocialIdentity, { _id: { $in: person.socialIds } })
374
- );
375
- for (const socialId of socialIds) {
376
- const existing = existingIdentifiers.get(socialId._id);
377
- if (existing == null) {
378
- await ctx.with("create-social-identity", {}, async () => {
379
- if (personRef === void 0) {
380
- console.error("Person not found");
349
+ let personRef;
350
+ try {
351
+ const txFactory = new import_core.TxFactory(me.primarySocialId);
352
+ const personByUuid = await client.findOne(import__.default.class.Person, { personUuid: person.uuid });
353
+ personRef = personByUuid?._id;
354
+ if (personRef === void 0) {
355
+ const socialIdentity = await client.findOne(import__.default.class.SocialIdentity, {
356
+ _id: { $in: person.socialIds }
357
+ });
358
+ personRef = socialIdentity?.attachedTo;
359
+ }
360
+ if (personRef === void 0) {
361
+ await ctx.with("create-person", {}, async () => {
362
+ if (globalPerson === void 0) {
363
+ console.error("Cannot get global person");
381
364
  return null;
382
365
  }
383
- const createSocialIdTx = txFactory.createTxCollectionCUD(
366
+ const data = {
367
+ personUuid: person.uuid,
368
+ name: combineName(globalPerson.firstName, globalPerson.lastName),
369
+ city: "",
370
+ avatarType: import__.AvatarType.COLOR
371
+ };
372
+ personRef = (0, import_core.generateId)();
373
+ const createPersonTx = txFactory.createTxCreateDoc(
384
374
  import__.default.class.Person,
385
- personRef,
386
375
  import__.default.space.Contacts,
387
- "socialIds",
388
- txFactory.createTxCreateDoc(
389
- import__.default.class.SocialIdentity,
390
- import__.default.space.Contacts,
391
- {
392
- attachedTo: personRef,
393
- attachedToClass: import__.default.class.Person,
394
- collection: "socialIds",
395
- type: socialId.type,
396
- value: socialId.value,
397
- key: (0, import_core.buildSocialIdString)(socialId),
398
- // TODO: fill it in trigger or on DB level as stored calculated column or smth?
399
- verifiedOn: socialId.verifiedOn,
400
- isDeleted: socialId.isDeleted
401
- },
402
- socialId._id
403
- )
376
+ data,
377
+ personRef
404
378
  );
405
- await client.tx(createSocialIdTx);
379
+ await client.tx(createPersonTx);
406
380
  });
407
- } else {
408
- if (existing.verifiedOn != null && existing.attachedTo !== personRef) {
409
- throw new Error("Confirmed social identity is attached to the wrong person");
410
- }
411
- const sidUpdate = {};
412
- let needUpdate = false;
413
- if (existing.verifiedOn == null) {
414
- sidUpdate.verifiedOn = socialId.verifiedOn;
415
- needUpdate = true;
416
- }
417
- if (existing.attachedTo !== personRef) {
418
- sidUpdate.attachedTo = personRef;
419
- needUpdate = true;
420
- }
421
- if (existing.isDeleted !== socialId.isDeleted && socialId.isDeleted === true) {
422
- sidUpdate.value = socialId.value;
423
- sidUpdate.key = socialId.key;
424
- sidUpdate.isDeleted = socialId.isDeleted;
425
- needUpdate = true;
381
+ } else if (personByUuid === void 0) {
382
+ const updatePersonTx = txFactory.createTxUpdateDoc(import__.default.class.Person, import__.default.space.Contacts, personRef, {
383
+ personUuid: person.uuid
384
+ });
385
+ await client.tx(updatePersonTx);
386
+ }
387
+ const existingIdentifiers = (0, import_core.toIdMap)(
388
+ await client.findAll(import__.default.class.SocialIdentity, { _id: { $in: person.socialIds } })
389
+ );
390
+ for (const socialId of socialIds) {
391
+ const existing = existingIdentifiers.get(socialId._id);
392
+ if (existing == null) {
393
+ await ctx.with("create-social-identity", {}, async () => {
394
+ if (personRef === void 0) {
395
+ console.error("Person not found");
396
+ return null;
397
+ }
398
+ const createSocialIdTx = txFactory.createTxCollectionCUD(
399
+ import__.default.class.Person,
400
+ personRef,
401
+ import__.default.space.Contacts,
402
+ "socialIds",
403
+ txFactory.createTxCreateDoc(
404
+ import__.default.class.SocialIdentity,
405
+ import__.default.space.Contacts,
406
+ {
407
+ attachedTo: personRef,
408
+ attachedToClass: import__.default.class.Person,
409
+ collection: "socialIds",
410
+ type: socialId.type,
411
+ value: socialId.value,
412
+ key: (0, import_core.buildSocialIdString)(socialId),
413
+ // TODO: fill it in trigger or on DB level as stored calculated column or smth?
414
+ verifiedOn: socialId.verifiedOn,
415
+ isDeleted: socialId.isDeleted ?? false
416
+ },
417
+ socialId._id
418
+ )
419
+ );
420
+ await client.tx(createSocialIdTx);
421
+ });
422
+ } else {
423
+ if (existing.verifiedOn != null && existing.attachedTo !== personRef) {
424
+ throw new Error("Confirmed social identity is attached to the wrong person");
425
+ }
426
+ const sidUpdate = {};
427
+ let needUpdate = false;
428
+ if (existing.verifiedOn == null) {
429
+ sidUpdate.verifiedOn = socialId.verifiedOn;
430
+ needUpdate = true;
431
+ }
432
+ if (existing.attachedTo !== personRef) {
433
+ sidUpdate.attachedTo = personRef;
434
+ needUpdate = true;
435
+ }
436
+ if (existing.isDeleted !== socialId.isDeleted && socialId.isDeleted === true) {
437
+ sidUpdate.value = socialId.value;
438
+ sidUpdate.key = socialId.key;
439
+ sidUpdate.isDeleted = socialId.isDeleted;
440
+ needUpdate = true;
441
+ }
442
+ if (needUpdate) {
443
+ const updateSocialIdentityTx = txFactory.createTxUpdateDoc(
444
+ import__.default.class.SocialIdentity,
445
+ import__.default.space.Contacts,
446
+ existing._id,
447
+ sidUpdate
448
+ );
449
+ await client.tx(updateSocialIdentityTx);
450
+ }
426
451
  }
427
- if (needUpdate) {
428
- const updateSocialIdentityTx = txFactory.createTxUpdateDoc(
429
- import__.default.class.SocialIdentity,
452
+ }
453
+ const employeeRole = person.role === import_core.AccountRole.Guest || person.role === import_core.AccountRole.ReadOnlyGuest ? "GUEST" : "USER";
454
+ const employee = await client.findOne(import__.default.mixin.Employee, { _id: personRef });
455
+ if (employee === void 0 || !import_core.Hierarchy.hasMixin(employee, import__.default.mixin.Employee) || !employee.active || employee.role !== employeeRole) {
456
+ await ctx.with("create-employee", {}, async () => {
457
+ if (personRef === void 0) {
458
+ console.error("Person not found");
459
+ return null;
460
+ }
461
+ const createEmployeeTx = txFactory.createTxMixin(
462
+ personRef,
463
+ import__.default.class.Person,
430
464
  import__.default.space.Contacts,
431
- existing._id,
432
- sidUpdate
465
+ import__.default.mixin.Employee,
466
+ {
467
+ active: true,
468
+ role: employeeRole
469
+ }
433
470
  );
434
- await client.tx(updateSocialIdentityTx);
435
- }
471
+ await client.tx(createEmployeeTx);
472
+ });
436
473
  }
437
- }
438
- const employeeRole = person.role === import_core.AccountRole.Guest || person.role === import_core.AccountRole.ReadOnlyGuest ? "GUEST" : "USER";
439
- const employee = await client.findOne(import__.default.mixin.Employee, { _id: personRef });
440
- if (employee === void 0 || !import_core.Hierarchy.hasMixin(employee, import__.default.mixin.Employee) || !employee.active || employee.role !== employeeRole) {
441
- await ctx.with("create-employee", {}, async () => {
442
- if (personRef === void 0) {
443
- console.error("Person not found");
444
- return null;
474
+ return personRef;
475
+ } catch (err) {
476
+ if (err instanceof import_platform.PlatformError && err.status.code === import_platform.default.status.Forbidden) {
477
+ if (personRef != null) {
478
+ ctx.info("Skip employee update for person without full access rights");
479
+ return personRef;
445
480
  }
446
- const createEmployeeTx = txFactory.createTxMixin(
447
- personRef,
448
- import__.default.class.Person,
449
- import__.default.space.Contacts,
450
- import__.default.mixin.Employee,
451
- {
452
- active: true,
453
- role: employeeRole
454
- }
455
- );
456
- await client.tx(createEmployeeTx);
457
- });
481
+ }
482
+ throw err;
458
483
  }
459
- return personRef;
460
484
  }
461
485
  __name(ensureEmployeeForPerson, "ensureEmployeeForPerson");
462
486
  const contactCache = import_cache.default.instance;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/utils.ts"],
4
- "sourcesContent": ["//\n// Copyright \u00A9 2023 Hardcore Engineering Inc.\n//\n// Licensed under the Eclipse Public License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License. You may\n// obtain a copy of the License at https://www.eclipse.org/legal/epl-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n//\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//\n\nimport {\n Account,\n AccountRole,\n AccountUuid,\n AttachedData,\n buildSocialIdString,\n Class,\n Client,\n Doc,\n FindResult,\n generateId,\n Hierarchy,\n MeasureContext,\n notEmpty,\n Person as GlobalPerson,\n PersonId,\n pickPrimarySocialId,\n Ref,\n SocialId,\n toIdMap,\n TxFactory,\n DocumentUpdate\n} from '@hcengineering/core'\nimport { getMetadata } from '@hcengineering/platform'\nimport { ColorDefinition } from '@hcengineering/ui'\nimport contact, {\n AvatarProvider,\n AvatarType,\n Channel,\n Contact,\n Employee,\n Person,\n PersonSpace,\n SocialIdentity,\n SocialIdentityRef\n} from '.'\n\nimport { AVATAR_COLORS, GravatarPlaceholderType } from './types'\nimport ContactCache from './cache'\n\nlet currentEmployee: Ref<Employee>\nlet currentEmployeeSpace: Ref<PersonSpace>\n\nconst employeeListeners: ((ref: Ref<Employee>) => void)[] = []\n/**\n * @public\n * @returns\n */\nexport function getCurrentEmployee (): Ref<Employee> {\n return currentEmployee\n}\n\nexport function getCurrentEmployeeSpace (): Ref<PersonSpace> {\n return currentEmployeeSpace\n}\n\nexport function addEmployeeListenrer (l: (ref: Ref<Employee>) => void): void {\n employeeListeners.push(l)\n}\n\n/**\n * @public\n * @param employee -\n */\nexport function setCurrentEmployee (employee: Ref<Employee>): void {\n currentEmployee = employee\n for (const l of employeeListeners) {\n l(employee)\n }\n}\n\nexport function setCurrentEmployeeSpace (space: Ref<PersonSpace>): void {\n currentEmployeeSpace = space\n}\n\n/**\n * @public\n */\nexport function getAvatarColorForId (id: string | null | undefined): string {\n if (id == null) return AVATAR_COLORS[0].color\n let hash = 0\n\n for (let i = 0; i < id.length; i++) {\n hash += id.charCodeAt(i)\n }\n\n return AVATAR_COLORS[hash % AVATAR_COLORS.length].color\n}\n\n/**\n * @public\n */\nexport function getAvatarColors (): readonly ColorDefinition[] {\n return AVATAR_COLORS\n}\n\n/**\n * @public\n */\nexport function getAvatarColorName (color: string): string {\n return AVATAR_COLORS.find((col) => col.color === color)?.name ?? AVATAR_COLORS[0].name\n}\n\n/**\n * @public\n */\nexport function getAvatarProviderId (kind: AvatarType): Ref<AvatarProvider> | undefined {\n switch (kind) {\n case AvatarType.GRAVATAR:\n return contact.avatarProvider.Gravatar\n case AvatarType.COLOR:\n return contact.avatarProvider.Color\n }\n return contact.avatarProvider.Image\n}\n\n/**\n * @public\n */\nexport function getGravatarUrl (\n gravatarId: string,\n width: number = 64,\n placeholder: GravatarPlaceholderType = 'identicon'\n): string {\n return `https://gravatar.com/avatar/${gravatarId}?s=${width}&d=${placeholder}`\n}\n\n/**\n * @public\n */\nexport async function checkHasGravatar (gravatarId: string, fetch?: typeof window.fetch): Promise<boolean> {\n try {\n return (await (fetch ?? window.fetch)(getGravatarUrl(gravatarId, 2048, '404'))).ok\n } catch {\n return false\n }\n}\n\n/**\n * @public\n */\nexport async function findContacts (\n client: Client,\n _class: Ref<Class<Doc>>,\n name: string,\n channels: AttachedData<Channel>[]\n): Promise<{ contacts: Contact[], channels: AttachedData<Channel>[] }> {\n if (channels.length === 0 && name.length === 0) {\n return { contacts: [], channels: [] }\n }\n // Take only first part of first name for match.\n const values = channels.map((it) => it.value)\n\n // Same name persons\n\n const potentialChannels = await client.findAll(contact.class.Channel, { value: { $in: values } }, { limit: 1000 })\n let potentialContactIds = Array.from(new Set(potentialChannels.map((it) => it.attachedTo as Ref<Contact>)).values())\n\n if (potentialContactIds.length === 0) {\n if (client.getHierarchy().isDerived(_class, contact.class.Person)) {\n const firstName = getFirstName(name).split(' ').shift() ?? ''\n const lastName = getLastName(name)\n // try match using just first/last name\n potentialContactIds = (\n await client.findAll(contact.class.Contact, { name: { $like: `${lastName}%${firstName}%` } }, { limit: 100 })\n ).map((it) => it._id)\n if (potentialContactIds.length === 0) {\n return { contacts: [], channels: [] }\n }\n } else if (client.getHierarchy().isDerived(_class, contact.class.Organization)) {\n // try match using just first/last name\n potentialContactIds = (\n await client.findAll(contact.class.Contact, { name: { $like: `${name}` } }, { limit: 100 })\n ).map((it) => it._id)\n if (potentialContactIds.length === 0) {\n return { contacts: [], channels: [] }\n }\n }\n }\n\n const potentialPersons: FindResult<Contact> = await client.findAll(\n contact.class.Contact,\n { _id: { $in: potentialContactIds } },\n {\n lookup: {\n _id: {\n channels: contact.class.Channel\n }\n }\n }\n )\n\n const result: Contact[] = []\n const resChannels: AttachedData<Channel>[] = []\n for (const c of potentialPersons) {\n let matches = 0\n if (c.name === name) {\n matches++\n }\n for (const ch of (c.$lookup?.channels as Channel[]) ?? []) {\n for (const chc of channels) {\n if (chc.provider === ch.provider && chc.value === ch.value.trim()) {\n // We have matched value\n resChannels.push(chc)\n matches += 2\n break\n }\n }\n }\n\n if (matches > 0) {\n result.push(c)\n }\n }\n return { contacts: result, channels: resChannels }\n}\n\n/**\n * @public\n */\nexport async function findPerson (client: Client, name: string, channels: AttachedData<Channel>[]): Promise<Person[]> {\n const result = await findContacts(client, contact.class.Person, name, channels)\n return result.contacts as Person[]\n}\n\nconst SEP = ','\n\n/**\n * @public\n */\nexport function combineName (first: string, last: string): string {\n return (last ?? '') + SEP + (first ?? '')\n}\n\n/**\n * @public\n */\nexport function getFirstName (name: string): string {\n return name !== undefined ? name.substring(name.indexOf(SEP) + 1) : ''\n}\n\n/**\n * @public\n */\nexport function getLastName (name: string): string {\n return name !== undefined ? name.substring(0, name.indexOf(SEP)) : ''\n}\n\n/**\n * @public\n */\nexport function formatName (name: string, lastNameFirst?: string): string {\n const lastNameFirstCombined =\n lastNameFirst !== undefined ? lastNameFirst === 'true' : getMetadata(contact.metadata.LastNameFirst) === true\n return lastNameFirstCombined\n ? getLastName(name) + ' ' + getFirstName(name)\n : getFirstName(name) + ' ' + getLastName(name)\n}\n\n/**\n * @public\n */\nexport function getName (hierarchy: Hierarchy, value: Contact, lastNameFirst?: string): string {\n if (isPerson(hierarchy, value)) {\n return formatName(value.name, lastNameFirst)\n }\n return value.name\n}\n\nfunction isPerson (hierarchy: Hierarchy, value: Contact): value is Person {\n return isPersonClass(hierarchy, value._class)\n}\n\nfunction isPersonClass (hierarchy: Hierarchy, _class: Ref<Class<Doc>>): boolean {\n return hierarchy.isDerived(_class, contact.class.Person)\n}\n\n/**\n * @public\n */\nexport function formatContactName (\n hierarchy: Hierarchy,\n _class: Ref<Class<Doc>>,\n name: string,\n lastNameFirst?: string\n): string {\n if (isPersonClass(hierarchy, _class)) {\n return formatName(name, lastNameFirst)\n }\n return name\n}\n\nexport function includesAny (members: PersonId[], ids: PersonId[]): boolean {\n return members.some((m) => ids.includes(m))\n}\n\nexport async function getPersonBySocialKey (client: Client, socialKey: string): Promise<Person | undefined> {\n const socialId = await client.findOne(contact.class.SocialIdentity, { key: socialKey })\n if (socialId === undefined) return undefined\n return await client.findOne(contact.class.Person, { _id: socialId?.attachedTo, _class: socialId?.attachedToClass })\n}\n\nexport async function getEmployeeBySocialId (client: Client, socialIdString: PersonId): Promise<Employee | undefined> {\n const socialId = await client.findOne(contact.class.SocialIdentity, { _id: socialIdString as SocialIdentityRef })\n\n if (socialId === undefined) return undefined\n\n return await client.findOne(contact.mixin.Employee, { _id: socialId.attachedTo as Ref<Employee> })\n}\n\nexport async function getPersonRefsBySocialIds (\n client: Client,\n ids: PersonId[] = []\n): Promise<Record<PersonId, Ref<Person>>> {\n const socialIds = await client.findAll(\n contact.class.SocialIdentity,\n ids.length === 0 ? {} : { _id: { $in: ids as SocialIdentityRef[] } }\n )\n const result: Record<PersonId, Ref<Person>> = {}\n\n for (const socialId of socialIds) {\n result[socialId._id] = socialId.attachedTo\n }\n\n return result\n}\n\nexport async function getPrimarySocialId (client: Client, person: Ref<Person>): Promise<PersonId | undefined> {\n const socialIds = await client.findAll(contact.class.SocialIdentity, { attachedTo: person, verifiedOn: { $gt: 0 } })\n\n if (socialIds.length === 0) {\n return\n }\n\n return pickPrimarySocialId(socialIds)._id\n}\n\nexport async function getAllSocialStringsByPersonId (client: Client, personId: PersonId): Promise<PersonId[]> {\n const socialId = await client.findOne(contact.class.SocialIdentity, {\n _id: personId as SocialIdentityRef,\n attachedToClass: contact.class.Person\n })\n\n if (socialId === undefined) {\n return []\n }\n\n const socialIds = await client.findAll(contact.class.SocialIdentity, { attachedTo: socialId.attachedTo })\n\n return socialIds.map((it) => it._id)\n}\n\nexport async function getAllSocialStringsByPersonRef (client: Client, person: Ref<Person>): Promise<PersonId[]> {\n const socialIds = await client.findAll(contact.class.SocialIdentity, { attachedTo: person })\n\n return socialIds.map((it) => it._id)\n}\n\nexport async function getSocialStringsByEmployee (client: Client): Promise<Record<Ref<Person>, PersonId[]>> {\n const employees = await client.findAll(contact.mixin.Employee, { active: true })\n const socialIds = await client.findAll(contact.class.SocialIdentity, {\n attachedTo: { $in: employees.map((it) => it._id) },\n attachedToClass: contact.class.Person\n })\n const socialStringsByPerson: Record<Ref<Employee>, PersonId[]> = {}\n\n for (const socialId of socialIds) {\n const socialStrings = socialStringsByPerson[socialId.attachedTo as Ref<Employee>]\n\n if (socialStrings === undefined) {\n socialStringsByPerson[socialId.attachedTo as Ref<Employee>] = []\n }\n socialStrings.push(socialId._id)\n }\n\n return socialStringsByPerson\n}\n\nexport async function getAllAccounts (client: Client): Promise<AccountUuid[]> {\n const employees = await client.findAll(contact.mixin.Employee, { active: true })\n\n return employees.map((it) => it.personUuid).filter(notEmpty)\n}\n\nexport async function getAllUserAccounts (client: Client): Promise<AccountUuid[]> {\n const employees = await client.findAll(contact.mixin.Employee, { active: true })\n\n return employees.map((it) => it.personUuid).filter(notEmpty)\n}\n\nexport async function ensureEmployee (\n ctx: MeasureContext,\n me: Account,\n client: Pick<Client, 'findOne' | 'findAll' | 'tx'>,\n socialIds: SocialId[],\n getGlobalPerson: () => Promise<GlobalPerson | undefined>\n): Promise<Ref<Employee> | null> {\n const globalPerson = await getGlobalPerson()\n return await ensureEmployeeForPerson(ctx, me, me, client, socialIds, globalPerson)\n}\n\nexport async function ensureEmployeeForPerson (\n ctx: MeasureContext,\n me: Account,\n person: Account,\n client: Pick<Client, 'findOne' | 'findAll' | 'tx'>,\n socialIds: SocialId[],\n globalPerson?: GlobalPerson\n): Promise<Ref<Employee> | null> {\n const txFactory = new TxFactory(me.primarySocialId)\n const personByUuid = await client.findOne(contact.class.Person, { personUuid: person.uuid })\n let personRef: Ref<Person> | undefined = personByUuid?._id\n\n if (personRef === undefined) {\n const socialIdentity = await client.findOne(contact.class.SocialIdentity, {\n _id: { $in: person.socialIds as SocialIdentityRef[] }\n })\n\n // This social id is confirmed globally as we only have ids of confirmed social identities in socialIds array\n personRef = socialIdentity?.attachedTo\n }\n\n if (personRef === undefined) {\n // Local person not found: neither by personUuid nor by a local social identity\n // Creating a new local person\n await ctx.with('create-person', {}, async () => {\n if (globalPerson === undefined) {\n console.error('Cannot get global person')\n return null\n }\n\n const data = {\n personUuid: person.uuid,\n name: combineName(globalPerson.firstName, globalPerson.lastName),\n city: globalPerson.city,\n avatarType: AvatarType.COLOR\n }\n personRef = generateId()\n\n const createPersonTx = txFactory.createTxCreateDoc(contact.class.Person, contact.space.Contacts, data, personRef)\n await client.tx(createPersonTx)\n })\n } else if (personByUuid === undefined) {\n // Local person found only by social identity, need to set personUuid\n const updatePersonTx = txFactory.createTxUpdateDoc(contact.class.Person, contact.space.Contacts, personRef, {\n personUuid: person.uuid\n })\n await client.tx(updatePersonTx)\n }\n\n const existingIdentifiers = toIdMap(\n await client.findAll(contact.class.SocialIdentity, { _id: { $in: person.socialIds as SocialIdentityRef[] } })\n )\n\n for (const socialId of socialIds) {\n const existing = existingIdentifiers.get(socialId._id as SocialIdentityRef)\n\n if (existing == null) {\n await ctx.with('create-social-identity', {}, async () => {\n if (personRef === undefined) {\n // something went wrong\n console.error('Person not found')\n return null\n }\n\n const createSocialIdTx = txFactory.createTxCollectionCUD(\n contact.class.Person,\n personRef,\n contact.space.Contacts,\n 'socialIds',\n txFactory.createTxCreateDoc(\n contact.class.SocialIdentity,\n contact.space.Contacts,\n {\n attachedTo: personRef,\n attachedToClass: contact.class.Person,\n collection: 'socialIds',\n type: socialId.type,\n value: socialId.value,\n key: buildSocialIdString(socialId), // TODO: fill it in trigger or on DB level as stored calculated column or smth?\n verifiedOn: socialId.verifiedOn,\n isDeleted: socialId.isDeleted\n },\n socialId._id as SocialIdentityRef\n )\n )\n await client.tx(createSocialIdTx)\n })\n } else {\n // If not confirmed locally can be attached to a different person (persons merge scenario)\n // Confirmed social identity should not be attached to a different person for now\n // It will change with accounts merge function\n if (existing.verifiedOn != null && existing.attachedTo !== personRef) {\n throw new Error('Confirmed social identity is attached to the wrong person')\n }\n\n // Check and update if needed. It can:\n // 1. Become verified (maybe with persons merge) (changes verifiedOn, attachedTo)\n const sidUpdate: DocumentUpdate<SocialIdentity> = {}\n let needUpdate = false\n\n // become verified\n if (existing.verifiedOn == null) {\n sidUpdate.verifiedOn = socialId.verifiedOn\n needUpdate = true\n }\n\n // merged from another person\n if (existing.attachedTo !== personRef) {\n sidUpdate.attachedTo = personRef\n // Bump collection in Person?\n needUpdate = true\n }\n\n // become deleted\n if (existing.isDeleted !== socialId.isDeleted && socialId.isDeleted === true) {\n sidUpdate.value = socialId.value\n sidUpdate.key = socialId.key\n sidUpdate.isDeleted = socialId.isDeleted\n needUpdate = true\n }\n\n if (needUpdate) {\n const updateSocialIdentityTx = txFactory.createTxUpdateDoc(\n contact.class.SocialIdentity,\n contact.space.Contacts,\n existing._id,\n sidUpdate\n )\n\n await client.tx(updateSocialIdentityTx)\n }\n }\n }\n\n // NOTE: it is important to create Employee after Person and SocialIdentities are ensured so all the triggers applied\n // on Employee creation will be able to properly map things\n const employeeRole = person.role === AccountRole.Guest || person.role === AccountRole.ReadOnlyGuest ? 'GUEST' : 'USER'\n const employee = await client.findOne(contact.mixin.Employee, { _id: personRef as Ref<Employee> })\n\n if (\n employee === undefined ||\n !Hierarchy.hasMixin(employee, contact.mixin.Employee) ||\n !employee.active ||\n employee.role !== employeeRole\n ) {\n await ctx.with('create-employee', {}, async () => {\n if (personRef === undefined) {\n // something went wrong\n console.error('Person not found')\n return null\n }\n\n const createEmployeeTx = txFactory.createTxMixin(\n personRef,\n contact.class.Person,\n contact.space.Contacts,\n contact.mixin.Employee,\n {\n active: true,\n role: employeeRole\n }\n )\n await client.tx(createEmployeeTx)\n })\n }\n\n // TODO: check for merged persons with this one and do the merge\n return personRef as Ref<Employee>\n}\n\nexport const contactCache = ContactCache.instance\n\nexport async function loadCachesForPersonId (client: Client, personId: PersonId): Promise<void> {\n if (personId == null || personId === '') return\n const sidObj = await client.findOne(\n contact.class.SocialIdentity,\n {\n _id: personId as SocialIdentityRef\n },\n {\n lookup: {\n attachedTo: contact.class.Person\n }\n }\n )\n\n contactCache.fillCachesForPersonId(personId, sidObj)\n}\n\nexport async function loadCachesForPersonIds (client: Client, personIds: PersonId[]): Promise<void> {\n const sidObjsMap = toIdMap(\n await client.findAll(\n contact.class.SocialIdentity,\n {\n _id: { $in: personIds as SocialIdentityRef[] }\n },\n {\n lookup: {\n attachedTo: contact.class.Person\n }\n }\n )\n )\n\n for (const personId of personIds) {\n const sidObj = sidObjsMap.get(personId as SocialIdentityRef)\n\n contactCache.fillCachesForPersonId(personId, sidObj)\n }\n}\n\nexport async function loadCachesForPersonRef (client: Client, personRef: Ref<Person>): Promise<void> {\n const person = await client.findOne(\n contact.class.Person,\n {\n _id: personRef\n },\n {\n lookup: {\n _id: { socialIds: contact.class.SocialIdentity }\n }\n }\n )\n\n contactCache.fillCachesForPersonRef(personRef, person)\n}\n\nexport async function loadCachesForPersonRefs (client: Client, personRefs: Array<Ref<Person>>): Promise<void> {\n const persons = toIdMap(\n await client.findAll(\n contact.class.Person,\n {\n _id: { $in: personRefs }\n },\n {\n lookup: {\n _id: { socialIds: contact.class.SocialIdentity }\n }\n }\n )\n )\n\n for (const personRef of personRefs) {\n const person = persons.get(personRef)\n\n contactCache.fillCachesForPersonRef(personRef, person)\n }\n}\n\nexport async function getPersonRefByPersonId (client: Client, personId: PersonId): Promise<Ref<Person> | null> {\n if (!contactCache.personRefByPersonId.has(personId)) {\n await loadCachesForPersonId(client, personId)\n }\n\n return contactCache.personRefByPersonId.get(personId) ?? null\n}\n\nexport function getPersonRefByPersonIdCb (\n client: Client,\n personId: PersonId,\n cb: (person: Ref<Person> | null) => void\n): void {\n let personRef: Ref<Person> | null | undefined = contactCache.personRefByPersonId.get(personId)\n if (personRef !== undefined) {\n cb(personRef)\n } else {\n void loadCachesForPersonId(client, personId).then(() => {\n personRef = contactCache.personRefByPersonId.get(personId)\n cb(personRef ?? null)\n })\n }\n}\n\nfunction getPersonRefsByPersonIdsFromCache (personIds: PersonId[]): Map<PersonId, Ref<Person>> {\n return new Map(\n personIds\n .map((pid) => {\n const ref = contactCache.personRefByPersonId.get(pid)\n return ref != null ? ([pid, ref] as const) : undefined\n })\n .filter(notEmpty)\n )\n}\n\nexport async function getPersonRefsByPersonIds (\n client: Client,\n personIds: PersonId[]\n): Promise<Map<PersonId, Ref<Person>>> {\n if (personIds.some((personId) => !contactCache.personRefByPersonId.has(personId))) {\n await loadCachesForPersonIds(client, personIds)\n }\n\n return getPersonRefsByPersonIdsFromCache(personIds)\n}\n\nexport function getPersonRefsByPersonIdsCb (\n client: Client,\n personIds: PersonId[],\n cb: (personRefs: Map<PersonId, Ref<Person>>) => void\n): void {\n if (personIds.some((personId) => !contactCache.personRefByPersonId.has(personId))) {\n void loadCachesForPersonIds(client, personIds).then(() => {\n const personRefs = getPersonRefsByPersonIdsFromCache(personIds)\n cb(personRefs)\n })\n } else {\n const personRefs = getPersonRefsByPersonIdsFromCache(personIds)\n cb(personRefs)\n }\n}\n\nexport async function getPersonByPersonId (client: Client, personId: PersonId): Promise<Readonly<Person> | null> {\n if (!contactCache.personByPersonId.has(personId)) {\n await loadCachesForPersonId(client, personId)\n }\n\n return contactCache.personByPersonId.get(personId) ?? null\n}\n\nexport function getPersonByPersonIdCb (\n client: Client,\n personId: PersonId,\n cb: (person: Readonly<Person> | null) => void\n): void {\n let person: Readonly<Person> | null | undefined = contactCache.personByPersonId.get(personId)\n if (person !== undefined) {\n cb(person)\n } else {\n void loadCachesForPersonId(client, personId).then(() => {\n person = contactCache.personByPersonId.get(personId) ?? null\n cb(person ?? null)\n })\n }\n}\n\nfunction getPersonsByPersonIdsFromCache (personIds: PersonId[]): Map<PersonId, Readonly<Person>> {\n return new Map(\n personIds\n .map((pid) => {\n const person = contactCache.personByPersonId.get(pid)\n return person != null ? ([pid, person] as const) : undefined\n })\n .filter(notEmpty)\n )\n}\n\nexport async function getPersonsByPersonIds (\n client: Client,\n personIds: PersonId[]\n): Promise<Map<PersonId, Readonly<Person>>> {\n if (personIds.some((personId) => !contactCache.personByPersonId.has(personId))) {\n await loadCachesForPersonIds(client, personIds)\n }\n\n return getPersonsByPersonIdsFromCache(personIds)\n}\n\nexport function getPersonsByPersonIdsCb (\n client: Client,\n personIds: PersonId[],\n cb: (persons: Map<PersonId, Readonly<Person>>) => void\n): void {\n if (personIds.some((personId) => !contactCache.personByPersonId.has(personId))) {\n void loadCachesForPersonIds(client, personIds).then(() => {\n const persons = getPersonsByPersonIdsFromCache(personIds)\n cb(persons)\n })\n } else {\n const persons = getPersonsByPersonIdsFromCache(personIds)\n cb(persons)\n }\n}\n\nexport async function getPersonByPersonRef (client: Client, personRef: Ref<Person>): Promise<Readonly<Person> | null> {\n if (!contactCache.personByRef.has(personRef)) {\n await loadCachesForPersonRef(client, personRef)\n }\n\n return contactCache.personByRef.get(personRef) ?? null\n}\n\nexport function getPersonByPersonRefCb (\n client: Client,\n personRef: Ref<Person>,\n cb: (person: Readonly<Person> | null) => void\n): void {\n let person: Readonly<Person> | null | undefined = contactCache.personByRef.get(personRef)\n if (person !== undefined) {\n cb(person)\n } else {\n void loadCachesForPersonRef(client, personRef).then(() => {\n person = contactCache.personByRef.get(personRef) ?? null\n cb(person ?? null)\n })\n }\n}\n\nfunction getPersonsByPersonRefsFromCache (personRefs: Array<Ref<Person>>): Map<Ref<Person>, Readonly<Person>> {\n return new Map(\n personRefs\n .map((personRef) => {\n const person = contactCache.personByRef.get(personRef)\n return person != null ? ([personRef, person] as const) : undefined\n })\n .filter(notEmpty)\n )\n}\n\nexport async function getPersonsByPersonRefs (\n client: Client,\n personRefs: Array<Ref<Person>>\n): Promise<Map<Ref<Person>, Readonly<Person>>> {\n if (personRefs.some((personRef) => !contactCache.personByRef.has(personRef))) {\n await loadCachesForPersonRefs(client, personRefs)\n }\n\n return getPersonsByPersonRefsFromCache(personRefs)\n}\n\nexport function getPersonsByPersonRefsCb (\n client: Client,\n personRefs: Array<Ref<Person>>,\n cb: (persons: Map<Ref<Person>, Readonly<Person>>) => void\n): void {\n if (personRefs.some((personRef) => !contactCache.personByRef.has(personRef))) {\n void loadCachesForPersonRefs(client, personRefs).then(() => {\n const persons = getPersonsByPersonRefsFromCache(personRefs)\n cb(persons)\n })\n } else {\n const persons = getPersonsByPersonRefsFromCache(personRefs)\n cb(persons)\n }\n}\n\nexport async function getSocialIdByPersonId (client: Client, personId: PersonId): Promise<SocialIdentity | null> {\n if (!contactCache.personRefByPersonId.has(personId)) {\n await loadCachesForPersonId(client, personId)\n }\n\n return contactCache.socialIdByPersonId.get(personId) ?? null\n}\n\nexport function getSocialIdByPersonIdCb (\n client: Client,\n personId: PersonId,\n cb: (socialId: SocialIdentity | null) => void\n): void {\n let socialId: SocialIdentity | null | undefined = contactCache.socialIdByPersonId.get(personId)\n if (socialId !== undefined) {\n cb(socialId)\n } else {\n void loadCachesForPersonId(client, personId).then(() => {\n socialId = contactCache.socialIdByPersonId.get(personId) ?? null\n cb(socialId ?? null)\n })\n }\n}\n\nexport type { Change as ContactCacheChange } from './cache'\n"],
5
- "mappings": "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",
6
- "names": ["contact", "ContactCache"]
4
+ "sourcesContent": ["//\n// Copyright \u00A9 2023 Hardcore Engineering Inc.\n//\n// Licensed under the Eclipse Public License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License. You may\n// obtain a copy of the License at https://www.eclipse.org/legal/epl-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n//\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//\n\nimport {\n Account,\n AccountRole,\n AccountUuid,\n AttachedData,\n buildSocialIdString,\n Class,\n Client,\n Doc,\n FindResult,\n generateId,\n Hierarchy,\n MeasureContext,\n notEmpty,\n Person as GlobalPerson,\n PersonId,\n pickPrimarySocialId,\n Ref,\n SocialId,\n toIdMap,\n TxFactory,\n DocumentUpdate\n} from '@hcengineering/core'\nimport platform, { getMetadata, PlatformError } from '@hcengineering/platform'\nimport { ColorDefinition } from '@hcengineering/ui'\nimport contact, {\n AvatarProvider,\n AvatarType,\n Channel,\n Contact,\n Employee,\n Person,\n PersonSpace,\n SocialIdentity,\n SocialIdentityRef\n} from '.'\n\nimport { AVATAR_COLORS, GravatarPlaceholderType } from './types'\nimport ContactCache from './cache'\n\nlet currentEmployee: Ref<Employee>\nlet currentEmployeeSpace: Ref<PersonSpace>\n\nconst employeeListeners: ((ref: Ref<Employee>) => void)[] = []\n/**\n * @public\n * @returns\n */\nexport function getCurrentEmployee (): Ref<Employee> {\n return currentEmployee\n}\n\nexport function getCurrentEmployeeSpace (): Ref<PersonSpace> {\n return currentEmployeeSpace\n}\n\nexport function addEmployeeListenrer (l: (ref: Ref<Employee>) => void): void {\n employeeListeners.push(l)\n}\n\n/**\n * @public\n * @param employee -\n */\nexport function setCurrentEmployee (employee: Ref<Employee>): void {\n currentEmployee = employee\n for (const l of employeeListeners) {\n l(employee)\n }\n}\n\nexport function setCurrentEmployeeSpace (space: Ref<PersonSpace>): void {\n currentEmployeeSpace = space\n}\n\n/**\n * True when {@link Doc.createdBy} is one of the given account's social identities.\n *\n * @public\n */\nexport function isDocCreatedByAccount (doc: Doc, account: Account): boolean {\n const creator = doc.createdBy\n if (creator === undefined) return false\n if (creator === account.primarySocialId) return true\n return account.socialIds.includes(creator)\n}\n\n/**\n * @public\n */\nexport function getAvatarColorForId (id: string | null | undefined): string {\n if (id == null) return AVATAR_COLORS[0].color\n let hash = 0\n\n for (let i = 0; i < id.length; i++) {\n hash += id.charCodeAt(i)\n }\n\n return AVATAR_COLORS[hash % AVATAR_COLORS.length].color\n}\n\n/**\n * @public\n */\nexport function getAvatarColors (): readonly ColorDefinition[] {\n return AVATAR_COLORS\n}\n\n/**\n * @public\n */\nexport function getAvatarColorName (color: string): string {\n return AVATAR_COLORS.find((col) => col.color === color)?.name ?? AVATAR_COLORS[0].name\n}\n\n/**\n * @public\n */\nexport function getAvatarProviderId (kind: AvatarType): Ref<AvatarProvider> | undefined {\n switch (kind) {\n case AvatarType.GRAVATAR:\n return contact.avatarProvider.Gravatar\n case AvatarType.COLOR:\n return contact.avatarProvider.Color\n }\n return contact.avatarProvider.Image\n}\n\n/**\n * @public\n */\nexport function getGravatarUrl (\n gravatarId: string,\n width: number = 64,\n placeholder: GravatarPlaceholderType = 'identicon'\n): string {\n return `https://gravatar.com/avatar/${gravatarId}?s=${width}&d=${placeholder}`\n}\n\n/**\n * @public\n */\nexport async function checkHasGravatar (gravatarId: string, fetch?: typeof window.fetch): Promise<boolean> {\n try {\n return (await (fetch ?? window.fetch)(getGravatarUrl(gravatarId, 2048, '404'))).ok\n } catch {\n return false\n }\n}\n\n/**\n * @public\n */\nexport async function findContacts (\n client: Client,\n _class: Ref<Class<Doc>>,\n name: string,\n channels: AttachedData<Channel>[]\n): Promise<{ contacts: Contact[], channels: AttachedData<Channel>[] }> {\n if (channels.length === 0 && name.length === 0) {\n return { contacts: [], channels: [] }\n }\n // Take only first part of first name for match.\n const values = channels.map((it) => it.value)\n\n // Same name persons\n\n const potentialChannels = await client.findAll(contact.class.Channel, { value: { $in: values } }, { limit: 1000 })\n let potentialContactIds = Array.from(new Set(potentialChannels.map((it) => it.attachedTo as Ref<Contact>)).values())\n\n if (potentialContactIds.length === 0) {\n if (client.getHierarchy().isDerived(_class, contact.class.Person)) {\n const firstName = getFirstName(name).split(' ').shift() ?? ''\n const lastName = getLastName(name)\n // try match using just first/last name\n potentialContactIds = (\n await client.findAll(contact.class.Contact, { name: { $like: `${lastName}%${firstName}%` } }, { limit: 100 })\n ).map((it) => it._id)\n if (potentialContactIds.length === 0) {\n return { contacts: [], channels: [] }\n }\n } else if (client.getHierarchy().isDerived(_class, contact.class.Organization)) {\n // try match using just first/last name\n potentialContactIds = (\n await client.findAll(contact.class.Contact, { name: { $like: `${name}` } }, { limit: 100 })\n ).map((it) => it._id)\n if (potentialContactIds.length === 0) {\n return { contacts: [], channels: [] }\n }\n }\n }\n\n const potentialPersons: FindResult<Contact> = await client.findAll(\n contact.class.Contact,\n { _id: { $in: potentialContactIds } },\n {\n lookup: {\n _id: {\n channels: contact.class.Channel\n }\n }\n }\n )\n\n const result: Contact[] = []\n const resChannels: AttachedData<Channel>[] = []\n for (const c of potentialPersons) {\n let matches = 0\n if (c.name === name) {\n matches++\n }\n for (const ch of (c.$lookup?.channels as Channel[]) ?? []) {\n for (const chc of channels) {\n if (chc.provider === ch.provider && chc.value === ch.value.trim()) {\n // We have matched value\n resChannels.push(chc)\n matches += 2\n break\n }\n }\n }\n\n if (matches > 0) {\n result.push(c)\n }\n }\n return { contacts: result, channels: resChannels }\n}\n\n/**\n * @public\n */\nexport async function findPerson (client: Client, name: string, channels: AttachedData<Channel>[]): Promise<Person[]> {\n const result = await findContacts(client, contact.class.Person, name, channels)\n return result.contacts as Person[]\n}\n\nconst SEP = ','\n\n/**\n * @public\n */\nexport function combineName (first: string, last: string): string {\n return (last ?? '') + SEP + (first ?? '')\n}\n\n/**\n * @public\n */\nexport function getFirstName (name: string): string {\n return name !== undefined ? name.substring(name.indexOf(SEP) + 1) : ''\n}\n\n/**\n * @public\n */\nexport function getLastName (name: string): string {\n return name !== undefined ? name.substring(0, name.indexOf(SEP)) : ''\n}\n\n/**\n * @public\n */\nexport function formatName (name: string, lastNameFirst?: string): string {\n const lastNameFirstCombined =\n lastNameFirst !== undefined ? lastNameFirst === 'true' : getMetadata(contact.metadata.LastNameFirst) === true\n return lastNameFirstCombined\n ? getLastName(name) + ' ' + getFirstName(name)\n : getFirstName(name) + ' ' + getLastName(name)\n}\n\n/**\n * @public\n */\nexport function getName (hierarchy: Hierarchy, value: Contact, lastNameFirst?: string): string {\n if (isPerson(hierarchy, value)) {\n return formatName(value.name, lastNameFirst)\n }\n return value.name\n}\n\nfunction isPerson (hierarchy: Hierarchy, value: Contact): value is Person {\n return isPersonClass(hierarchy, value._class)\n}\n\nfunction isPersonClass (hierarchy: Hierarchy, _class: Ref<Class<Doc>>): boolean {\n return hierarchy.isDerived(_class, contact.class.Person)\n}\n\n/**\n * @public\n */\nexport function formatContactName (\n hierarchy: Hierarchy,\n _class: Ref<Class<Doc>>,\n name: string,\n lastNameFirst?: string\n): string {\n if (isPersonClass(hierarchy, _class)) {\n return formatName(name, lastNameFirst)\n }\n return name\n}\n\nexport function includesAny (members: PersonId[], ids: PersonId[]): boolean {\n return members.some((m) => ids.includes(m))\n}\n\nexport async function getPersonBySocialKey (client: Client, socialKey: string): Promise<Person | undefined> {\n const socialId = await client.findOne(contact.class.SocialIdentity, { key: socialKey })\n if (socialId === undefined) return undefined\n return await client.findOne(contact.class.Person, { _id: socialId?.attachedTo, _class: socialId?.attachedToClass })\n}\n\nexport async function getEmployeeBySocialId (client: Client, socialIdString: PersonId): Promise<Employee | undefined> {\n const socialId = await client.findOne(contact.class.SocialIdentity, { _id: socialIdString as SocialIdentityRef })\n\n if (socialId === undefined) return undefined\n\n return await client.findOne(contact.mixin.Employee, { _id: socialId.attachedTo as Ref<Employee> })\n}\n\nexport async function getPersonRefsBySocialIds (\n client: Client,\n ids: PersonId[] = []\n): Promise<Record<PersonId, Ref<Person>>> {\n const socialIds = await client.findAll(\n contact.class.SocialIdentity,\n ids.length === 0 ? {} : { _id: { $in: ids as SocialIdentityRef[] } }\n )\n const result: Record<PersonId, Ref<Person>> = {}\n\n for (const socialId of socialIds) {\n result[socialId._id] = socialId.attachedTo\n }\n\n return result\n}\n\nexport async function getPrimarySocialId (client: Client, person: Ref<Person>): Promise<PersonId | undefined> {\n const socialIds = await client.findAll(contact.class.SocialIdentity, { attachedTo: person, verifiedOn: { $gt: 0 } })\n\n if (socialIds.length === 0) {\n return\n }\n\n return pickPrimarySocialId(socialIds)._id\n}\n\nexport async function getAllSocialStringsByPersonId (client: Client, personId: PersonId): Promise<PersonId[]> {\n const socialId = await client.findOne(contact.class.SocialIdentity, {\n _id: personId as SocialIdentityRef,\n attachedToClass: contact.class.Person\n })\n\n if (socialId === undefined) {\n return []\n }\n\n const socialIds = await client.findAll(contact.class.SocialIdentity, { attachedTo: socialId.attachedTo })\n\n return socialIds.map((it) => it._id)\n}\n\nexport async function getAllSocialStringsByPersonRef (client: Client, person: Ref<Person>): Promise<PersonId[]> {\n const socialIds = await client.findAll(contact.class.SocialIdentity, { attachedTo: person })\n\n return socialIds.map((it) => it._id)\n}\n\nexport async function getSocialStringsByEmployee (client: Client): Promise<Record<Ref<Person>, PersonId[]>> {\n const employees = await client.findAll(contact.mixin.Employee, { active: true })\n const socialIds = await client.findAll(contact.class.SocialIdentity, {\n attachedTo: { $in: employees.map((it) => it._id) },\n attachedToClass: contact.class.Person\n })\n const socialStringsByPerson: Record<Ref<Employee>, PersonId[]> = {}\n\n for (const socialId of socialIds) {\n const socialStrings = socialStringsByPerson[socialId.attachedTo as Ref<Employee>]\n\n if (socialStrings === undefined) {\n socialStringsByPerson[socialId.attachedTo as Ref<Employee>] = []\n }\n socialStrings.push(socialId._id)\n }\n\n return socialStringsByPerson\n}\n\nexport async function getAllAccounts (client: Client): Promise<AccountUuid[]> {\n const employees = await client.findAll(contact.mixin.Employee, { active: true })\n\n return employees.map((it) => it.personUuid).filter(notEmpty)\n}\n\nexport async function getAllUserAccounts (client: Client): Promise<AccountUuid[]> {\n const employees = await client.findAll(contact.mixin.Employee, { active: true })\n\n return employees.map((it) => it.personUuid).filter(notEmpty)\n}\n\nexport async function ensureEmployee (\n ctx: MeasureContext,\n me: Account,\n client: Pick<Client, 'findOne' | 'findAll' | 'tx'>,\n socialIds: SocialId[],\n getGlobalPerson: () => Promise<GlobalPerson | undefined>\n): Promise<Ref<Employee> | null> {\n const globalPerson = await getGlobalPerson()\n return await ensureEmployeeForPerson(ctx, me, me, client, socialIds, globalPerson)\n}\n\nexport async function ensureEmployeeForPerson (\n ctx: MeasureContext,\n me: Account,\n person: Account,\n client: Pick<Client, 'findOne' | 'findAll' | 'tx'>,\n socialIds: SocialId[],\n globalPerson?: GlobalPerson\n): Promise<Ref<Employee> | null> {\n let personRef: Ref<Person> | undefined\n try {\n const txFactory = new TxFactory(me.primarySocialId)\n const personByUuid = await client.findOne(contact.class.Person, { personUuid: person.uuid })\n personRef = personByUuid?._id\n\n if (personRef === undefined) {\n const socialIdentity = await client.findOne(contact.class.SocialIdentity, {\n _id: { $in: person.socialIds as SocialIdentityRef[] }\n })\n\n // This social id is confirmed globally as we only have ids of confirmed social identities in socialIds array\n personRef = socialIdentity?.attachedTo\n }\n\n if (personRef === undefined) {\n // Local person not found: neither by personUuid nor by a local social identity\n // Creating a new local person\n await ctx.with('create-person', {}, async () => {\n if (globalPerson === undefined) {\n console.error('Cannot get global person')\n return null\n }\n\n const data = {\n personUuid: person.uuid,\n name: combineName(globalPerson.firstName, globalPerson.lastName),\n city: '',\n avatarType: AvatarType.COLOR\n }\n personRef = generateId()\n\n const createPersonTx = txFactory.createTxCreateDoc(\n contact.class.Person,\n contact.space.Contacts,\n data,\n personRef\n )\n await client.tx(createPersonTx)\n })\n } else if (personByUuid === undefined) {\n // Local person found only by social identity, need to set personUuid\n const updatePersonTx = txFactory.createTxUpdateDoc(contact.class.Person, contact.space.Contacts, personRef, {\n personUuid: person.uuid\n })\n await client.tx(updatePersonTx)\n }\n\n const existingIdentifiers = toIdMap(\n await client.findAll(contact.class.SocialIdentity, { _id: { $in: person.socialIds as SocialIdentityRef[] } })\n )\n\n for (const socialId of socialIds) {\n const existing = existingIdentifiers.get(socialId._id as SocialIdentityRef)\n\n if (existing == null) {\n await ctx.with('create-social-identity', {}, async () => {\n if (personRef === undefined) {\n // something went wrong\n console.error('Person not found')\n return null\n }\n\n const createSocialIdTx = txFactory.createTxCollectionCUD(\n contact.class.Person,\n personRef,\n contact.space.Contacts,\n 'socialIds',\n txFactory.createTxCreateDoc(\n contact.class.SocialIdentity,\n contact.space.Contacts,\n {\n attachedTo: personRef,\n attachedToClass: contact.class.Person,\n collection: 'socialIds',\n type: socialId.type,\n value: socialId.value,\n key: buildSocialIdString(socialId), // TODO: fill it in trigger or on DB level as stored calculated column or smth?\n verifiedOn: socialId.verifiedOn,\n isDeleted: socialId.isDeleted ?? false\n },\n socialId._id as SocialIdentityRef\n )\n )\n await client.tx(createSocialIdTx)\n })\n } else {\n // If not confirmed locally can be attached to a different person (persons merge scenario)\n // Confirmed social identity should not be attached to a different person for now\n // It will change with accounts merge function\n if (existing.verifiedOn != null && existing.attachedTo !== personRef) {\n throw new Error('Confirmed social identity is attached to the wrong person')\n }\n\n // Check and update if needed. It can:\n // 1. Become verified (maybe with persons merge) (changes verifiedOn, attachedTo)\n const sidUpdate: DocumentUpdate<SocialIdentity> = {}\n let needUpdate = false\n\n // become verified\n if (existing.verifiedOn == null) {\n sidUpdate.verifiedOn = socialId.verifiedOn\n needUpdate = true\n }\n\n // merged from another person\n if (existing.attachedTo !== personRef) {\n sidUpdate.attachedTo = personRef\n // Bump collection in Person?\n needUpdate = true\n }\n\n // become deleted\n if (existing.isDeleted !== socialId.isDeleted && socialId.isDeleted === true) {\n sidUpdate.value = socialId.value\n sidUpdate.key = socialId.key\n sidUpdate.isDeleted = socialId.isDeleted\n needUpdate = true\n }\n\n if (needUpdate) {\n const updateSocialIdentityTx = txFactory.createTxUpdateDoc(\n contact.class.SocialIdentity,\n contact.space.Contacts,\n existing._id,\n sidUpdate\n )\n\n await client.tx(updateSocialIdentityTx)\n }\n }\n }\n\n // NOTE: it is important to create Employee after Person and SocialIdentities are ensured so all the triggers applied\n // on Employee creation will be able to properly map things\n const employeeRole =\n person.role === AccountRole.Guest || person.role === AccountRole.ReadOnlyGuest ? 'GUEST' : 'USER'\n const employee = await client.findOne(contact.mixin.Employee, { _id: personRef as Ref<Employee> })\n\n if (\n employee === undefined ||\n !Hierarchy.hasMixin(employee, contact.mixin.Employee) ||\n !employee.active ||\n employee.role !== employeeRole\n ) {\n await ctx.with('create-employee', {}, async () => {\n if (personRef === undefined) {\n // something went wrong\n console.error('Person not found')\n return null\n }\n\n const createEmployeeTx = txFactory.createTxMixin(\n personRef,\n contact.class.Person,\n contact.space.Contacts,\n contact.mixin.Employee,\n {\n active: true,\n role: employeeRole\n }\n )\n await client.tx(createEmployeeTx)\n })\n }\n\n // TODO: check for merged persons with this one and do the merge\n return personRef as Ref<Employee>\n } catch (err: any) {\n // If Forbidden error occurred, return personRef if it exists, otherwise throw error\n if (err instanceof PlatformError && err.status.code === platform.status.Forbidden) {\n if (personRef != null) {\n ctx.info('Skip employee update for person without full access rights')\n return personRef as Ref<Employee>\n }\n }\n throw err\n }\n}\n\nexport const contactCache = ContactCache.instance\n\nexport async function loadCachesForPersonId (client: Client, personId: PersonId): Promise<void> {\n if (personId == null || personId === '') return\n const sidObj = await client.findOne(\n contact.class.SocialIdentity,\n {\n _id: personId as SocialIdentityRef\n },\n {\n lookup: {\n attachedTo: contact.class.Person\n }\n }\n )\n\n contactCache.fillCachesForPersonId(personId, sidObj)\n}\n\nexport async function loadCachesForPersonIds (client: Client, personIds: PersonId[]): Promise<void> {\n const sidObjsMap = toIdMap(\n await client.findAll(\n contact.class.SocialIdentity,\n {\n _id: { $in: personIds as SocialIdentityRef[] }\n },\n {\n lookup: {\n attachedTo: contact.class.Person\n }\n }\n )\n )\n\n for (const personId of personIds) {\n const sidObj = sidObjsMap.get(personId as SocialIdentityRef)\n\n contactCache.fillCachesForPersonId(personId, sidObj)\n }\n}\n\nexport async function loadCachesForPersonRef (client: Client, personRef: Ref<Person>): Promise<void> {\n const person = await client.findOne(\n contact.class.Person,\n {\n _id: personRef\n },\n {\n lookup: {\n _id: { socialIds: contact.class.SocialIdentity }\n }\n }\n )\n\n contactCache.fillCachesForPersonRef(personRef, person)\n}\n\nexport async function loadCachesForPersonRefs (client: Client, personRefs: Array<Ref<Person>>): Promise<void> {\n const persons = toIdMap(\n await client.findAll(\n contact.class.Person,\n {\n _id: { $in: personRefs }\n },\n {\n lookup: {\n _id: { socialIds: contact.class.SocialIdentity }\n }\n }\n )\n )\n\n for (const personRef of personRefs) {\n const person = persons.get(personRef)\n\n contactCache.fillCachesForPersonRef(personRef, person)\n }\n}\n\nexport async function getPersonRefByPersonId (client: Client, personId: PersonId): Promise<Ref<Person> | null> {\n if (!contactCache.personRefByPersonId.has(personId)) {\n await loadCachesForPersonId(client, personId)\n }\n\n return contactCache.personRefByPersonId.get(personId) ?? null\n}\n\nexport function getPersonRefByPersonIdCb (\n client: Client,\n personId: PersonId,\n cb: (person: Ref<Person> | null) => void\n): void {\n let personRef: Ref<Person> | null | undefined = contactCache.personRefByPersonId.get(personId)\n if (personRef !== undefined) {\n cb(personRef)\n } else {\n void loadCachesForPersonId(client, personId).then(() => {\n personRef = contactCache.personRefByPersonId.get(personId)\n cb(personRef ?? null)\n })\n }\n}\n\nfunction getPersonRefsByPersonIdsFromCache (personIds: PersonId[]): Map<PersonId, Ref<Person>> {\n return new Map(\n personIds\n .map((pid) => {\n const ref = contactCache.personRefByPersonId.get(pid)\n return ref != null ? ([pid, ref] as const) : undefined\n })\n .filter(notEmpty)\n )\n}\n\nexport async function getPersonRefsByPersonIds (\n client: Client,\n personIds: PersonId[]\n): Promise<Map<PersonId, Ref<Person>>> {\n if (personIds.some((personId) => !contactCache.personRefByPersonId.has(personId))) {\n await loadCachesForPersonIds(client, personIds)\n }\n\n return getPersonRefsByPersonIdsFromCache(personIds)\n}\n\nexport function getPersonRefsByPersonIdsCb (\n client: Client,\n personIds: PersonId[],\n cb: (personRefs: Map<PersonId, Ref<Person>>) => void\n): void {\n if (personIds.some((personId) => !contactCache.personRefByPersonId.has(personId))) {\n void loadCachesForPersonIds(client, personIds).then(() => {\n const personRefs = getPersonRefsByPersonIdsFromCache(personIds)\n cb(personRefs)\n })\n } else {\n const personRefs = getPersonRefsByPersonIdsFromCache(personIds)\n cb(personRefs)\n }\n}\n\nexport async function getPersonByPersonId (client: Client, personId: PersonId): Promise<Readonly<Person> | null> {\n if (!contactCache.personByPersonId.has(personId)) {\n await loadCachesForPersonId(client, personId)\n }\n\n return contactCache.personByPersonId.get(personId) ?? null\n}\n\nexport function getPersonByPersonIdCb (\n client: Client,\n personId: PersonId,\n cb: (person: Readonly<Person> | null) => void\n): void {\n let person: Readonly<Person> | null | undefined = contactCache.personByPersonId.get(personId)\n if (person !== undefined) {\n cb(person)\n } else {\n void loadCachesForPersonId(client, personId).then(() => {\n person = contactCache.personByPersonId.get(personId) ?? null\n cb(person ?? null)\n })\n }\n}\n\nfunction getPersonsByPersonIdsFromCache (personIds: PersonId[]): Map<PersonId, Readonly<Person>> {\n return new Map(\n personIds\n .map((pid) => {\n const person = contactCache.personByPersonId.get(pid)\n return person != null ? ([pid, person] as const) : undefined\n })\n .filter(notEmpty)\n )\n}\n\nexport async function getPersonsByPersonIds (\n client: Client,\n personIds: PersonId[]\n): Promise<Map<PersonId, Readonly<Person>>> {\n if (personIds.some((personId) => !contactCache.personByPersonId.has(personId))) {\n await loadCachesForPersonIds(client, personIds)\n }\n\n return getPersonsByPersonIdsFromCache(personIds)\n}\n\nexport function getPersonsByPersonIdsCb (\n client: Client,\n personIds: PersonId[],\n cb: (persons: Map<PersonId, Readonly<Person>>) => void\n): void {\n if (personIds.some((personId) => !contactCache.personByPersonId.has(personId))) {\n void loadCachesForPersonIds(client, personIds).then(() => {\n const persons = getPersonsByPersonIdsFromCache(personIds)\n cb(persons)\n })\n } else {\n const persons = getPersonsByPersonIdsFromCache(personIds)\n cb(persons)\n }\n}\n\nexport async function getPersonByPersonRef (client: Client, personRef: Ref<Person>): Promise<Readonly<Person> | null> {\n if (!contactCache.personByRef.has(personRef)) {\n await loadCachesForPersonRef(client, personRef)\n }\n\n return contactCache.personByRef.get(personRef) ?? null\n}\n\nexport function getPersonByPersonRefCb (\n client: Client,\n personRef: Ref<Person>,\n cb: (person: Readonly<Person> | null) => void\n): void {\n let person: Readonly<Person> | null | undefined = contactCache.personByRef.get(personRef)\n if (person !== undefined) {\n cb(person)\n } else {\n void loadCachesForPersonRef(client, personRef).then(() => {\n person = contactCache.personByRef.get(personRef) ?? null\n cb(person ?? null)\n })\n }\n}\n\nfunction getPersonsByPersonRefsFromCache (personRefs: Array<Ref<Person>>): Map<Ref<Person>, Readonly<Person>> {\n return new Map(\n personRefs\n .map((personRef) => {\n const person = contactCache.personByRef.get(personRef)\n return person != null ? ([personRef, person] as const) : undefined\n })\n .filter(notEmpty)\n )\n}\n\nexport async function getPersonsByPersonRefs (\n client: Client,\n personRefs: Array<Ref<Person>>\n): Promise<Map<Ref<Person>, Readonly<Person>>> {\n if (personRefs.some((personRef) => !contactCache.personByRef.has(personRef))) {\n await loadCachesForPersonRefs(client, personRefs)\n }\n\n return getPersonsByPersonRefsFromCache(personRefs)\n}\n\nexport function getPersonsByPersonRefsCb (\n client: Client,\n personRefs: Array<Ref<Person>>,\n cb: (persons: Map<Ref<Person>, Readonly<Person>>) => void\n): void {\n if (personRefs.some((personRef) => !contactCache.personByRef.has(personRef))) {\n void loadCachesForPersonRefs(client, personRefs).then(() => {\n const persons = getPersonsByPersonRefsFromCache(personRefs)\n cb(persons)\n })\n } else {\n const persons = getPersonsByPersonRefsFromCache(personRefs)\n cb(persons)\n }\n}\n\nexport async function getSocialIdByPersonId (client: Client, personId: PersonId): Promise<SocialIdentity | null> {\n if (!contactCache.personRefByPersonId.has(personId)) {\n await loadCachesForPersonId(client, personId)\n }\n\n return contactCache.socialIdByPersonId.get(personId) ?? null\n}\n\nexport function getSocialIdByPersonIdCb (\n client: Client,\n personId: PersonId,\n cb: (socialId: SocialIdentity | null) => void\n): void {\n let socialId: SocialIdentity | null | undefined = contactCache.socialIdByPersonId.get(personId)\n if (socialId !== undefined) {\n cb(socialId)\n } else {\n void loadCachesForPersonId(client, personId).then(() => {\n socialId = contactCache.socialIdByPersonId.get(personId) ?? null\n cb(socialId ?? null)\n })\n }\n}\n\nexport type { Change as ContactCacheChange } from './cache'\n"],
5
+ "mappings": "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",
6
+ "names": ["contact", "platform", "ContactCache"]
7
7
  }
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
20
+ var workspaceMemberStatusUtils_exports = {};
21
+ __export(workspaceMemberStatusUtils_exports, {
22
+ WORKSPACE_MEMBER_STATUS_MESSAGE_MAX: () => WORKSPACE_MEMBER_STATUS_MESSAGE_MAX,
23
+ extractLeadingStatusEmoji: () => extractLeadingStatusEmoji,
24
+ getWorkspaceMemberStatusSubtitle: () => getWorkspaceMemberStatusSubtitle,
25
+ isWorkspaceMemberStatusVisible: () => isWorkspaceMemberStatusVisible,
26
+ trimWorkspaceMemberStatusMessage: () => trimWorkspaceMemberStatusMessage
27
+ });
28
+ module.exports = __toCommonJS(workspaceMemberStatusUtils_exports);
29
+ const WORKSPACE_MEMBER_STATUS_MESSAGE_MAX = 200;
30
+ function trimWorkspaceMemberStatusMessage(message) {
31
+ const trimmed = message.trim();
32
+ return Array.from(trimmed).slice(0, WORKSPACE_MEMBER_STATUS_MESSAGE_MAX).join("");
33
+ }
34
+ __name(trimWorkspaceMemberStatusMessage, "trimWorkspaceMemberStatusMessage");
35
+ function isWorkspaceMemberStatusVisible(s, now = Date.now()) {
36
+ if (s === void 0) return false;
37
+ if (s.clearAt !== void 0 && s.clearAt <= now) return false;
38
+ const m = s.message?.trim() ?? "";
39
+ return m !== "";
40
+ }
41
+ __name(isWorkspaceMemberStatusVisible, "isWorkspaceMemberStatusVisible");
42
+ function getWorkspaceMemberStatusSubtitle(s, now = Date.now()) {
43
+ if (!isWorkspaceMemberStatusVisible(s, now)) return void 0;
44
+ return s?.message?.trim() ?? "";
45
+ }
46
+ __name(getWorkspaceMemberStatusSubtitle, "getWorkspaceMemberStatusSubtitle");
47
+ const EMOJI_HEAD = /^\p{Extended_Pictographic}/u;
48
+ function extractLeadingStatusEmoji(raw) {
49
+ const text = raw?.trim() ?? "";
50
+ if (text === "") return void 0;
51
+ try {
52
+ const seg = new Intl.Segmenter(void 0, { granularity: "grapheme" });
53
+ const segments = [...seg.segment(text)].map((x) => x.segment);
54
+ if (segments.length === 0) return void 0;
55
+ if (!EMOJI_HEAD.test(segments[0])) return void 0;
56
+ let out = segments[0];
57
+ let i = 1;
58
+ while (i < segments.length) {
59
+ const s = segments[i];
60
+ if (s === "\u200D" && i + 1 < segments.length && EMOJI_HEAD.test(segments[i + 1])) {
61
+ out += s + segments[i + 1];
62
+ i += 2;
63
+ continue;
64
+ }
65
+ if (s === "\uFE0F" || /^[\u{1F3FB}-\u{1F3FF}]$/u.test(s)) {
66
+ out += s;
67
+ i++;
68
+ continue;
69
+ }
70
+ break;
71
+ }
72
+ return out;
73
+ } catch {
74
+ const m = text.match(/^(\p{Extended_Pictographic})/u);
75
+ return m?.[1];
76
+ }
77
+ }
78
+ __name(extractLeadingStatusEmoji, "extractLeadingStatusEmoji");
79
+ //# sourceMappingURL=workspaceMemberStatusUtils.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/workspaceMemberStatusUtils.ts"],
4
+ "sourcesContent": ["//\n// Copyright \u00A9 2026 Hardcore Engineering Inc.\n//\n// Licensed under the Eclipse Public License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License. You may\n// obtain a copy of the License at https://www.eclipse.org/legal/epl-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n//\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//\n\n/** @public */\nexport const WORKSPACE_MEMBER_STATUS_MESSAGE_MAX = 200\n\n/**\n * Minimal shape for status helpers (see {@link WorkspaceMemberStatus}).\n */\ninterface WorkspaceMemberStatusLike {\n message: string\n clearAt?: number\n}\n\n/** @public */\nexport function trimWorkspaceMemberStatusMessage (message: string): string {\n const trimmed = message.trim()\n return Array.from(trimmed).slice(0, WORKSPACE_MEMBER_STATUS_MESSAGE_MAX).join('')\n}\n\n/** @public */\nexport function isWorkspaceMemberStatusVisible (\n s: WorkspaceMemberStatusLike | undefined,\n now: number = Date.now()\n): boolean {\n if (s === undefined) return false\n if (s.clearAt !== undefined && s.clearAt <= now) return false\n const m = s.message?.trim() ?? ''\n return m !== ''\n}\n\n/**\n * Plain-text line for member lists / tooltips (full stored message, including any leading emoji).\n * @public\n */\nexport function getWorkspaceMemberStatusSubtitle (\n s: WorkspaceMemberStatusLike | undefined,\n now: number = Date.now()\n): string | undefined {\n if (!isWorkspaceMemberStatusVisible(s, now)) return undefined\n return s?.message?.trim() ?? ''\n}\n\nconst EMOJI_HEAD = /^\\p{Extended_Pictographic}/u\n\n/**\n * Returns the first emoji sequence at the start of the status message (after trim), or undefined.\n * Handles variation selectors, skin tones, and ZWJ sequences (e.g. family emoji).\n * @public\n */\nexport function extractLeadingStatusEmoji (raw: string | undefined): string | undefined {\n const text = raw?.trim() ?? ''\n if (text === '') return undefined\n\n try {\n const seg = new Intl.Segmenter(undefined, { granularity: 'grapheme' })\n const segments = [...seg.segment(text)].map((x) => x.segment)\n if (segments.length === 0) return undefined\n if (!EMOJI_HEAD.test(segments[0])) return undefined\n\n let out = segments[0]\n let i = 1\n while (i < segments.length) {\n const s = segments[i]\n if (s === '\\u200D' && i + 1 < segments.length && EMOJI_HEAD.test(segments[i + 1])) {\n out += s + segments[i + 1]\n i += 2\n continue\n }\n if (s === '\\uFE0F' || /^[\\u{1F3FB}-\\u{1F3FF}]$/u.test(s)) {\n out += s\n i++\n continue\n }\n break\n }\n return out\n } catch {\n const m = text.match(/^(\\p{Extended_Pictographic})/u)\n return m?.[1]\n }\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgBO,MAAM,sCAAsC;AAW5C,SAAS,iCAAkC,SAAyB;AACzE,QAAM,UAAU,QAAQ,KAAK;AAC7B,SAAO,MAAM,KAAK,OAAO,EAAE,MAAM,GAAG,mCAAmC,EAAE,KAAK,EAAE;AAClF;AAHgB;AAMT,SAAS,+BACd,GACA,MAAc,KAAK,IAAI,GACd;AACT,MAAI,MAAM,OAAW,QAAO;AAC5B,MAAI,EAAE,YAAY,UAAa,EAAE,WAAW,IAAK,QAAO;AACxD,QAAM,IAAI,EAAE,SAAS,KAAK,KAAK;AAC/B,SAAO,MAAM;AACf;AARgB;AAcT,SAAS,iCACd,GACA,MAAc,KAAK,IAAI,GACH;AACpB,MAAI,CAAC,+BAA+B,GAAG,GAAG,EAAG,QAAO;AACpD,SAAO,GAAG,SAAS,KAAK,KAAK;AAC/B;AANgB;AAQhB,MAAM,aAAa;AAOZ,SAAS,0BAA2B,KAA6C;AACtF,QAAM,OAAO,KAAK,KAAK,KAAK;AAC5B,MAAI,SAAS,GAAI,QAAO;AAExB,MAAI;AACF,UAAM,MAAM,IAAI,KAAK,UAAU,QAAW,EAAE,aAAa,WAAW,CAAC;AACrE,UAAM,WAAW,CAAC,GAAG,IAAI,QAAQ,IAAI,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO;AAC5D,QAAI,SAAS,WAAW,EAAG,QAAO;AAClC,QAAI,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,EAAG,QAAO;AAE1C,QAAI,MAAM,SAAS,CAAC;AACpB,QAAI,IAAI;AACR,WAAO,IAAI,SAAS,QAAQ;AAC1B,YAAM,IAAI,SAAS,CAAC;AACpB,UAAI,MAAM,YAAY,IAAI,IAAI,SAAS,UAAU,WAAW,KAAK,SAAS,IAAI,CAAC,CAAC,GAAG;AACjF,eAAO,IAAI,SAAS,IAAI,CAAC;AACzB,aAAK;AACL;AAAA,MACF;AACA,UAAI,MAAM,YAAY,2BAA2B,KAAK,CAAC,GAAG;AACxD,eAAO;AACP;AACA;AAAA,MACF;AACA;AAAA,IACF;AACA,WAAO;AAAA,EACT,QAAQ;AACN,UAAM,IAAI,KAAK,MAAM,+BAA+B;AACpD,WAAO,IAAI,CAAC;AAAA,EACd;AACF;AA/BgB;",
6
+ "names": []
7
+ }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hcengineering/contact",
3
- "version": "0.7.0",
3
+ "version": "0.7.423",
4
4
  "main": "lib/index.js",
5
5
  "exports": {
6
6
  ".": {
@@ -30,25 +30,28 @@
30
30
  "_phase:validate": "compile validate"
31
31
  },
32
32
  "devDependencies": {
33
- "@hcengineering/platform-rig": "^0.7.10",
34
- "@typescript-eslint/eslint-plugin": "^6.11.0",
33
+ "@hcengineering/platform-rig": "^0.7.423",
34
+ "@typescript-eslint/eslint-plugin": "^6.21.0",
35
35
  "eslint-plugin-import": "^2.26.0",
36
36
  "eslint-plugin-promise": "^6.1.1",
37
37
  "eslint-plugin-n": "^15.4.0",
38
38
  "eslint": "^8.54.0",
39
- "@typescript-eslint/parser": "^6.11.0",
39
+ "@typescript-eslint/parser": "^6.21.0",
40
40
  "eslint-config-standard-with-typescript": "^40.0.0",
41
- "prettier": "^3.1.0",
42
- "typescript": "^5.8.3",
41
+ "prettier": "^3.6.2",
42
+ "typescript": "^5.9.3",
43
43
  "jest": "^29.7.0",
44
44
  "ts-jest": "^29.1.1",
45
45
  "@types/jest": "^29.5.5"
46
46
  },
47
47
  "dependencies": {
48
- "@hcengineering/platform": "^0.7.3",
49
- "@hcengineering/core": "^0.7.3"
48
+ "@hcengineering/platform": "^0.7.423",
49
+ "@hcengineering/core": "^0.7.423"
50
+ },
51
+ "repository": {
52
+ "type": "git",
53
+ "url": "git+https://github.com/hcengineering/platform.git"
50
54
  },
51
- "repository": "https://github.com/hcengineering/platform",
52
55
  "publishConfig": {
53
56
  "access": "public"
54
57
  }