@crowi/api 2.0.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (887) hide show
  1. package/LICENSE +21 -0
  2. package/dist/app.d.ts +8 -0
  3. package/dist/app.js +65 -0
  4. package/dist/app.js.map +1 -0
  5. package/dist/collab/attach.d.ts +33 -0
  6. package/dist/collab/attach.js +341 -0
  7. package/dist/collab/attach.js.map +1 -0
  8. package/dist/collab/extension-redis.d.ts +25 -0
  9. package/dist/collab/extension-redis.js +133 -0
  10. package/dist/collab/extension-redis.js.map +1 -0
  11. package/dist/common/functions/path2name.d.ts +1 -0
  12. package/dist/common/functions/path2name.js +22 -0
  13. package/dist/common/functions/path2name.js.map +1 -0
  14. package/dist/common/functions/renderIcon.d.ts +1 -0
  15. package/dist/common/functions/renderIcon.js +9 -0
  16. package/dist/common/functions/renderIcon.js.map +1 -0
  17. package/dist/controllers/admin.d.ts +3 -0
  18. package/dist/controllers/admin.js +474 -0
  19. package/dist/controllers/admin.js.map +1 -0
  20. package/dist/controllers/attachment.d.ts +4 -0
  21. package/dist/controllers/attachment.js +200 -0
  22. package/dist/controllers/attachment.js.map +1 -0
  23. package/dist/controllers/backlink.d.ts +3 -0
  24. package/dist/controllers/backlink.js +42 -0
  25. package/dist/controllers/backlink.js.map +1 -0
  26. package/dist/controllers/bookmark.d.ts +3 -0
  27. package/dist/controllers/bookmark.js +100 -0
  28. package/dist/controllers/bookmark.js.map +1 -0
  29. package/dist/controllers/comment.d.ts +3 -0
  30. package/dist/controllers/comment.js +111 -0
  31. package/dist/controllers/comment.js.map +1 -0
  32. package/dist/controllers/index.d.ts +25 -0
  33. package/dist/controllers/index.js +44 -0
  34. package/dist/controllers/index.js.map +1 -0
  35. package/dist/controllers/installer.d.ts +3 -0
  36. package/dist/controllers/installer.js +48 -0
  37. package/dist/controllers/installer.js.map +1 -0
  38. package/dist/controllers/login.d.ts +4 -0
  39. package/dist/controllers/login.js +438 -0
  40. package/dist/controllers/login.js.map +1 -0
  41. package/dist/controllers/logout.d.ts +5 -0
  42. package/dist/controllers/logout.js +11 -0
  43. package/dist/controllers/logout.js.map +1 -0
  44. package/dist/controllers/me.d.ts +4 -0
  45. package/dist/controllers/me.js +369 -0
  46. package/dist/controllers/me.js.map +1 -0
  47. package/dist/controllers/notification.d.ts +3 -0
  48. package/dist/controllers/notification.js +88 -0
  49. package/dist/controllers/notification.js.map +1 -0
  50. package/dist/controllers/page.d.ts +3 -0
  51. package/dist/controllers/page.js +881 -0
  52. package/dist/controllers/page.js.map +1 -0
  53. package/dist/controllers/revision.d.ts +3 -0
  54. package/dist/controllers/revision.js +91 -0
  55. package/dist/controllers/revision.js.map +1 -0
  56. package/dist/controllers/search.d.ts +3 -0
  57. package/dist/controllers/search.js +93 -0
  58. package/dist/controllers/search.js.map +1 -0
  59. package/dist/controllers/share.d.ts +3 -0
  60. package/dist/controllers/share.js +207 -0
  61. package/dist/controllers/share.js.map +1 -0
  62. package/dist/controllers/shareAccess.d.ts +3 -0
  63. package/dist/controllers/shareAccess.js +28 -0
  64. package/dist/controllers/shareAccess.js.map +1 -0
  65. package/dist/controllers/slack.d.ts +3 -0
  66. package/dist/controllers/slack.js +87 -0
  67. package/dist/controllers/slack.js.map +1 -0
  68. package/dist/controllers/tokenAuth.d.ts +10 -0
  69. package/dist/controllers/tokenAuth.js +292 -0
  70. package/dist/controllers/tokenAuth.js.map +1 -0
  71. package/dist/controllers/user.d.ts +3 -0
  72. package/dist/controllers/user.js +67 -0
  73. package/dist/controllers/user.js.map +1 -0
  74. package/dist/controllers/version.d.ts +4 -0
  75. package/dist/controllers/version.js +19 -0
  76. package/dist/controllers/version.js.map +1 -0
  77. package/dist/crowi/express-init.d.ts +4 -0
  78. package/dist/crowi/express-init.js +101 -0
  79. package/dist/crowi/express-init.js.map +1 -0
  80. package/dist/crowi/index.d.ts +245 -0
  81. package/dist/crowi/index.js +726 -0
  82. package/dist/crowi/index.js.map +1 -0
  83. package/dist/events/activity.d.ts +7 -0
  84. package/dist/events/activity.js +15 -0
  85. package/dist/events/activity.js.map +1 -0
  86. package/dist/events/bookmark.d.ts +8 -0
  87. package/dist/events/bookmark.js +16 -0
  88. package/dist/events/bookmark.js.map +1 -0
  89. package/dist/events/comment.d.ts +6 -0
  90. package/dist/events/comment.js +14 -0
  91. package/dist/events/comment.js.map +1 -0
  92. package/dist/events/config.d.ts +6 -0
  93. package/dist/events/config.js +12 -0
  94. package/dist/events/config.js.map +1 -0
  95. package/dist/events/index.d.ts +17 -0
  96. package/dist/events/index.js +22 -0
  97. package/dist/events/index.js.map +1 -0
  98. package/dist/events/mention-dispatch.d.ts +44 -0
  99. package/dist/events/mention-dispatch.js +151 -0
  100. package/dist/events/mention-dispatch.js.map +1 -0
  101. package/dist/events/notification.d.ts +7 -0
  102. package/dist/events/notification.js +15 -0
  103. package/dist/events/notification.js.map +1 -0
  104. package/dist/events/page.d.ts +44 -0
  105. package/dist/events/page.js +134 -0
  106. package/dist/events/page.js.map +1 -0
  107. package/dist/events/render-cache.d.ts +24 -0
  108. package/dist/events/render-cache.js +63 -0
  109. package/dist/events/render-cache.js.map +1 -0
  110. package/dist/events/user.d.ts +9 -0
  111. package/dist/events/user.js +39 -0
  112. package/dist/events/user.js.map +1 -0
  113. package/dist/form/admin/app.d.ts +2 -0
  114. package/dist/form/admin/app.js +9 -0
  115. package/dist/form/admin/app.js.map +1 -0
  116. package/dist/form/admin/auth.d.ts +2 -0
  117. package/dist/form/admin/auth.js +9 -0
  118. package/dist/form/admin/auth.js.map +1 -0
  119. package/dist/form/admin/aws.d.ts +2 -0
  120. package/dist/form/admin/aws.js +13 -0
  121. package/dist/form/admin/aws.js.map +1 -0
  122. package/dist/form/admin/github.d.ts +2 -0
  123. package/dist/form/admin/github.js +15 -0
  124. package/dist/form/admin/github.js.map +1 -0
  125. package/dist/form/admin/google.d.ts +2 -0
  126. package/dist/form/admin/google.js +13 -0
  127. package/dist/form/admin/google.js.map +1 -0
  128. package/dist/form/admin/mail.d.ts +2 -0
  129. package/dist/form/admin/mail.js +13 -0
  130. package/dist/form/admin/mail.js.map +1 -0
  131. package/dist/form/admin/sec.d.ts +2 -0
  132. package/dist/form/admin/sec.js +10 -0
  133. package/dist/form/admin/sec.js.map +1 -0
  134. package/dist/form/admin/slackSetting.d.ts +2 -0
  135. package/dist/form/admin/slackSetting.js +13 -0
  136. package/dist/form/admin/slackSetting.js.map +1 -0
  137. package/dist/form/admin/userEdit.d.ts +2 -0
  138. package/dist/form/admin/userEdit.js +9 -0
  139. package/dist/form/admin/userEdit.js.map +1 -0
  140. package/dist/form/admin/userInvite.d.ts +2 -0
  141. package/dist/form/admin/userInvite.js +9 -0
  142. package/dist/form/admin/userInvite.js.map +1 -0
  143. package/dist/form/comment.d.ts +2 -0
  144. package/dist/form/comment.js +9 -0
  145. package/dist/form/comment.js.map +1 -0
  146. package/dist/form/index.d.ts +25 -0
  147. package/dist/form/index.js +48 -0
  148. package/dist/form/index.js.map +1 -0
  149. package/dist/form/invited.d.ts +2 -0
  150. package/dist/form/invited.js +13 -0
  151. package/dist/form/invited.js.map +1 -0
  152. package/dist/form/login.d.ts +2 -0
  153. package/dist/form/login.js +11 -0
  154. package/dist/form/login.js.map +1 -0
  155. package/dist/form/me/apiToken.d.ts +2 -0
  156. package/dist/form/me/apiToken.js +9 -0
  157. package/dist/form/me/apiToken.js.map +1 -0
  158. package/dist/form/me/password.d.ts +2 -0
  159. package/dist/form/me/password.js +11 -0
  160. package/dist/form/me/password.js.map +1 -0
  161. package/dist/form/me/user.d.ts +2 -0
  162. package/dist/form/me/user.js +9 -0
  163. package/dist/form/me/user.js.map +1 -0
  164. package/dist/form/register.d.ts +2 -0
  165. package/dist/form/register.js +13 -0
  166. package/dist/form/register.js.map +1 -0
  167. package/dist/form/revision.d.ts +2 -0
  168. package/dist/form/revision.js +13 -0
  169. package/dist/form/revision.js.map +1 -0
  170. package/dist/hono/app.d.ts +19 -0
  171. package/dist/hono/app.js +21 -0
  172. package/dist/hono/app.js.map +1 -0
  173. package/dist/hono/handlers/_helpers/errors.d.ts +61 -0
  174. package/dist/hono/handlers/_helpers/errors.js +51 -0
  175. package/dist/hono/handlers/_helpers/errors.js.map +1 -0
  176. package/dist/hono/handlers/_helpers/user-shape.d.ts +46 -0
  177. package/dist/hono/handlers/_helpers/user-shape.js +23 -0
  178. package/dist/hono/handlers/_helpers/user-shape.js.map +1 -0
  179. package/dist/hono/handlers/access-token.d.ts +221 -0
  180. package/dist/hono/handlers/access-token.js +113 -0
  181. package/dist/hono/handlers/access-token.js.map +1 -0
  182. package/dist/hono/handlers/activation.d.ts +117 -0
  183. package/dist/hono/handlers/activation.js +77 -0
  184. package/dist/hono/handlers/activation.js.map +1 -0
  185. package/dist/hono/handlers/admin/app.d.ts +123 -0
  186. package/dist/hono/handlers/admin/app.js +76 -0
  187. package/dist/hono/handlers/admin/app.js.map +1 -0
  188. package/dist/hono/handlers/admin/auth.d.ts +127 -0
  189. package/dist/hono/handlers/admin/auth.js +91 -0
  190. package/dist/hono/handlers/admin/auth.js.map +1 -0
  191. package/dist/hono/handlers/admin/mail.d.ts +168 -0
  192. package/dist/hono/handlers/admin/mail.js +76 -0
  193. package/dist/hono/handlers/admin/mail.js.map +1 -0
  194. package/dist/hono/handlers/admin/plugins.d.ts +409 -0
  195. package/dist/hono/handlers/admin/plugins.js +257 -0
  196. package/dist/hono/handlers/admin/plugins.js.map +1 -0
  197. package/dist/hono/handlers/admin/search.d.ts +57 -0
  198. package/dist/hono/handlers/admin/search.js +55 -0
  199. package/dist/hono/handlers/admin/search.js.map +1 -0
  200. package/dist/hono/handlers/admin/security.d.ts +112 -0
  201. package/dist/hono/handlers/admin/security.js +71 -0
  202. package/dist/hono/handlers/admin/security.js.map +1 -0
  203. package/dist/hono/handlers/admin/share.d.ts +106 -0
  204. package/dist/hono/handlers/admin/share.js +55 -0
  205. package/dist/hono/handlers/admin/share.js.map +1 -0
  206. package/dist/hono/handlers/admin/storage.d.ts +55 -0
  207. package/dist/hono/handlers/admin/storage.js +40 -0
  208. package/dist/hono/handlers/admin/storage.js.map +1 -0
  209. package/dist/hono/handlers/admin/users.d.ts +1230 -0
  210. package/dist/hono/handlers/admin/users.js +316 -0
  211. package/dist/hono/handlers/admin/users.js.map +1 -0
  212. package/dist/hono/handlers/adminCrypto.d.ts +110 -0
  213. package/dist/hono/handlers/adminCrypto.js +151 -0
  214. package/dist/hono/handlers/adminCrypto.js.map +1 -0
  215. package/dist/hono/handlers/app.d.ts +26 -0
  216. package/dist/hono/handlers/app.js +34 -0
  217. package/dist/hono/handlers/app.js.map +1 -0
  218. package/dist/hono/handlers/attachment-stream.d.ts +4 -0
  219. package/dist/hono/handlers/attachment-stream.js +211 -0
  220. package/dist/hono/handlers/attachment-stream.js.map +1 -0
  221. package/dist/hono/handlers/attachment.d.ts +687 -0
  222. package/dist/hono/handlers/attachment.js +566 -0
  223. package/dist/hono/handlers/attachment.js.map +1 -0
  224. package/dist/hono/handlers/autocomplete.d.ts +160 -0
  225. package/dist/hono/handlers/autocomplete.js +181 -0
  226. package/dist/hono/handlers/autocomplete.js.map +1 -0
  227. package/dist/hono/handlers/backlink.d.ts +78 -0
  228. package/dist/hono/handlers/backlink.js +93 -0
  229. package/dist/hono/handlers/backlink.js.map +1 -0
  230. package/dist/hono/handlers/bookmark.d.ts +558 -0
  231. package/dist/hono/handlers/bookmark.js +166 -0
  232. package/dist/hono/handlers/bookmark.js.map +1 -0
  233. package/dist/hono/handlers/comment.d.ts +231 -0
  234. package/dist/hono/handlers/comment.js +191 -0
  235. package/dist/hono/handlers/comment.js.map +1 -0
  236. package/dist/hono/handlers/draft.d.ts +136 -0
  237. package/dist/hono/handlers/draft.js +191 -0
  238. package/dist/hono/handlers/draft.js.map +1 -0
  239. package/dist/hono/handlers/emailChange.d.ts +124 -0
  240. package/dist/hono/handlers/emailChange.js +79 -0
  241. package/dist/hono/handlers/emailChange.js.map +1 -0
  242. package/dist/hono/handlers/installer.d.ts +94 -0
  243. package/dist/hono/handlers/installer.js +93 -0
  244. package/dist/hono/handlers/installer.js.map +1 -0
  245. package/dist/hono/handlers/inviteAccept.d.ts +180 -0
  246. package/dist/hono/handlers/inviteAccept.js +94 -0
  247. package/dist/hono/handlers/inviteAccept.js.map +1 -0
  248. package/dist/hono/handlers/me.d.ts +401 -0
  249. package/dist/hono/handlers/me.js +390 -0
  250. package/dist/hono/handlers/me.js.map +1 -0
  251. package/dist/hono/handlers/notification.d.ts +274 -0
  252. package/dist/hono/handlers/notification.js +224 -0
  253. package/dist/hono/handlers/notification.js.map +1 -0
  254. package/dist/hono/handlers/oauth.d.ts +299 -0
  255. package/dist/hono/handlers/oauth.js +443 -0
  256. package/dist/hono/handlers/oauth.js.map +1 -0
  257. package/dist/hono/handlers/page-collab.d.ts +79 -0
  258. package/dist/hono/handlers/page-collab.js +98 -0
  259. package/dist/hono/handlers/page-collab.js.map +1 -0
  260. package/dist/hono/handlers/page-preview.d.ts +48 -0
  261. package/dist/hono/handlers/page-preview.js +83 -0
  262. package/dist/hono/handlers/page-preview.js.map +1 -0
  263. package/dist/hono/handlers/page.d.ts +2059 -0
  264. package/dist/hono/handlers/page.js +793 -0
  265. package/dist/hono/handlers/page.js.map +1 -0
  266. package/dist/hono/handlers/passwordReset.d.ts +181 -0
  267. package/dist/hono/handlers/passwordReset.js +101 -0
  268. package/dist/hono/handlers/passwordReset.js.map +1 -0
  269. package/dist/hono/handlers/presence.d.ts +178 -0
  270. package/dist/hono/handlers/presence.js +163 -0
  271. package/dist/hono/handlers/presence.js.map +1 -0
  272. package/dist/hono/handlers/revision.d.ts +345 -0
  273. package/dist/hono/handlers/revision.js +202 -0
  274. package/dist/hono/handlers/revision.js.map +1 -0
  275. package/dist/hono/handlers/search.d.ts +208 -0
  276. package/dist/hono/handlers/search.js +152 -0
  277. package/dist/hono/handlers/search.js.map +1 -0
  278. package/dist/hono/handlers/tokenAuth.d.ts +369 -0
  279. package/dist/hono/handlers/tokenAuth.js +240 -0
  280. package/dist/hono/handlers/tokenAuth.js.map +1 -0
  281. package/dist/hono/handlers/user.d.ts +710 -0
  282. package/dist/hono/handlers/user.js +212 -0
  283. package/dist/hono/handlers/user.js.map +1 -0
  284. package/dist/hono/index.d.ts +289 -0
  285. package/dist/hono/index.js +240 -0
  286. package/dist/hono/index.js.map +1 -0
  287. package/dist/hono/middleware/admin.d.ts +5 -0
  288. package/dist/hono/middleware/admin.js +34 -0
  289. package/dist/hono/middleware/admin.js.map +1 -0
  290. package/dist/hono/middleware/auth.d.ts +54 -0
  291. package/dist/hono/middleware/auth.js +142 -0
  292. package/dist/hono/middleware/auth.js.map +1 -0
  293. package/dist/hono/middleware/cors.d.ts +3 -0
  294. package/dist/hono/middleware/cors.js +86 -0
  295. package/dist/hono/middleware/cors.js.map +1 -0
  296. package/dist/hono/middleware/default-hook.d.ts +8 -0
  297. package/dist/hono/middleware/default-hook.js +17 -0
  298. package/dist/hono/middleware/default-hook.js.map +1 -0
  299. package/dist/hono/middleware/error-handler.d.ts +2 -0
  300. package/dist/hono/middleware/error-handler.js +20 -0
  301. package/dist/hono/middleware/error-handler.js.map +1 -0
  302. package/dist/hono/middleware/rate-limit.d.ts +57 -0
  303. package/dist/hono/middleware/rate-limit.js +42 -0
  304. package/dist/hono/middleware/rate-limit.js.map +1 -0
  305. package/dist/hono/middleware/require-scope.d.ts +50 -0
  306. package/dist/hono/middleware/require-scope.js +64 -0
  307. package/dist/hono/middleware/require-scope.js.map +1 -0
  308. package/dist/hono/path-rewrite.d.ts +15 -0
  309. package/dist/hono/path-rewrite.js +59 -0
  310. package/dist/hono/path-rewrite.js.map +1 -0
  311. package/dist/mail/i18n/en.d.ts +2 -0
  312. package/dist/mail/i18n/en.js +66 -0
  313. package/dist/mail/i18n/en.js.map +1 -0
  314. package/dist/mail/i18n/index.d.ts +46 -0
  315. package/dist/mail/i18n/index.js +31 -0
  316. package/dist/mail/i18n/index.js.map +1 -0
  317. package/dist/mail/i18n/ja.d.ts +2 -0
  318. package/dist/mail/i18n/ja.js +66 -0
  319. package/dist/mail/i18n/ja.js.map +1 -0
  320. package/dist/mcp/attach.d.ts +25 -0
  321. package/dist/mcp/attach.js +104 -0
  322. package/dist/mcp/attach.js.map +1 -0
  323. package/dist/mcp/dispatch.d.ts +59 -0
  324. package/dist/mcp/dispatch.js +70 -0
  325. package/dist/mcp/dispatch.js.map +1 -0
  326. package/dist/mcp/result.d.ts +40 -0
  327. package/dist/mcp/result.js +78 -0
  328. package/dist/mcp/result.js.map +1 -0
  329. package/dist/mcp/server.d.ts +67 -0
  330. package/dist/mcp/server.js +113 -0
  331. package/dist/mcp/server.js.map +1 -0
  332. package/dist/mcp/tools/page.d.ts +2 -0
  333. package/dist/mcp/tools/page.js +256 -0
  334. package/dist/mcp/tools/page.js.map +1 -0
  335. package/dist/mcp/tools/search.d.ts +2 -0
  336. package/dist/mcp/tools/search.js +36 -0
  337. package/dist/mcp/tools/search.js.map +1 -0
  338. package/dist/middlewares/accessTokenParser.d.ts +4 -0
  339. package/dist/middlewares/accessTokenParser.js +29 -0
  340. package/dist/middlewares/accessTokenParser.js.map +1 -0
  341. package/dist/middlewares/adminRequired.d.ts +10 -0
  342. package/dist/middlewares/adminRequired.js +35 -0
  343. package/dist/middlewares/adminRequired.js.map +1 -0
  344. package/dist/middlewares/applicationInstalled.d.ts +3 -0
  345. package/dist/middlewares/applicationInstalled.js +20 -0
  346. package/dist/middlewares/applicationInstalled.js.map +1 -0
  347. package/dist/middlewares/applicationNotInstalled.d.ts +3 -0
  348. package/dist/middlewares/applicationNotInstalled.js +13 -0
  349. package/dist/middlewares/applicationNotInstalled.js.map +1 -0
  350. package/dist/middlewares/basicAuth.d.ts +4 -0
  351. package/dist/middlewares/basicAuth.js +23 -0
  352. package/dist/middlewares/basicAuth.js.map +1 -0
  353. package/dist/middlewares/csrfVerify.d.ts +4 -0
  354. package/dist/middlewares/csrfVerify.js +24 -0
  355. package/dist/middlewares/csrfVerify.js.map +1 -0
  356. package/dist/middlewares/encodeSpace.d.ts +3 -0
  357. package/dist/middlewares/encodeSpace.js +14 -0
  358. package/dist/middlewares/encodeSpace.js.map +1 -0
  359. package/dist/middlewares/fileAccessRightOrLoginRequired.d.ts +4 -0
  360. package/dist/middlewares/fileAccessRightOrLoginRequired.js +29 -0
  361. package/dist/middlewares/fileAccessRightOrLoginRequired.js.map +1 -0
  362. package/dist/middlewares/index.d.ts +16 -0
  363. package/dist/middlewares/index.js +30 -0
  364. package/dist/middlewares/index.js.map +1 -0
  365. package/dist/middlewares/jwtAdminRequired.d.ts +8 -0
  366. package/dist/middlewares/jwtAdminRequired.js +35 -0
  367. package/dist/middlewares/jwtAdminRequired.js.map +1 -0
  368. package/dist/middlewares/jwtAuth.d.ts +4 -0
  369. package/dist/middlewares/jwtAuth.js +104 -0
  370. package/dist/middlewares/jwtAuth.js.map +1 -0
  371. package/dist/middlewares/loginChecker.d.ts +4 -0
  372. package/dist/middlewares/loginChecker.js +32 -0
  373. package/dist/middlewares/loginChecker.js.map +1 -0
  374. package/dist/middlewares/loginRequired.d.ts +4 -0
  375. package/dist/middlewares/loginRequired.js +88 -0
  376. package/dist/middlewares/loginRequired.js.map +1 -0
  377. package/dist/migration/cli-api.d.ts +83 -0
  378. package/dist/migration/cli-api.js +128 -0
  379. package/dist/migration/cli-api.js.map +1 -0
  380. package/dist/migration/migrations/index.d.ts +12 -0
  381. package/dist/migration/migrations/index.js +24 -0
  382. package/dist/migration/migrations/index.js.map +1 -0
  383. package/dist/migration/migrations/page-status-default.d.ts +25 -0
  384. package/dist/migration/migrations/page-status-default.js +79 -0
  385. package/dist/migration/migrations/page-status-default.js.map +1 -0
  386. package/dist/migration/migrations/revisions-schema-unify.d.ts +33 -0
  387. package/dist/migration/migrations/revisions-schema-unify.js +88 -0
  388. package/dist/migration/migrations/revisions-schema-unify.js.map +1 -0
  389. package/dist/migration/migrations/user-unique-prepare.d.ts +1 -0
  390. package/dist/migration/migrations/user-unique-prepare.js +214 -0
  391. package/dist/migration/migrations/user-unique-prepare.js.map +1 -0
  392. package/dist/migration/migrations/wikilink-format.d.ts +97 -0
  393. package/dist/migration/migrations/wikilink-format.js +418 -0
  394. package/dist/migration/migrations/wikilink-format.js.map +1 -0
  395. package/dist/migration/rebuild-api.d.ts +50 -0
  396. package/dist/migration/rebuild-api.js +45 -0
  397. package/dist/migration/rebuild-api.js.map +1 -0
  398. package/dist/migration/rebuild-runner.d.ts +64 -0
  399. package/dist/migration/rebuild-runner.js +42 -0
  400. package/dist/migration/rebuild-runner.js.map +1 -0
  401. package/dist/migration/rebuilds/index.d.ts +26 -0
  402. package/dist/migration/rebuilds/index.js +69 -0
  403. package/dist/migration/rebuilds/index.js.map +1 -0
  404. package/dist/migration/registry.d.ts +15 -0
  405. package/dist/migration/registry.js +96 -0
  406. package/dist/migration/registry.js.map +1 -0
  407. package/dist/migration/run-boot-migrations.d.ts +31 -0
  408. package/dist/migration/run-boot-migrations.js +95 -0
  409. package/dist/migration/run-boot-migrations.js.map +1 -0
  410. package/dist/migration/runner.d.ts +120 -0
  411. package/dist/migration/runner.js +276 -0
  412. package/dist/migration/runner.js.map +1 -0
  413. package/dist/migration/types.d.ts +153 -0
  414. package/dist/migration/types.js +13 -0
  415. package/dist/migration/types.js.map +1 -0
  416. package/dist/models/activity.d.ts +34 -0
  417. package/dist/models/activity.js +263 -0
  418. package/dist/models/activity.js.map +1 -0
  419. package/dist/models/attachment.d.ts +25 -0
  420. package/dist/models/attachment.js +82 -0
  421. package/dist/models/attachment.js.map +1 -0
  422. package/dist/models/backlink.d.ts +19 -0
  423. package/dist/models/backlink.js +138 -0
  424. package/dist/models/backlink.js.map +1 -0
  425. package/dist/models/bookmark.d.ts +28 -0
  426. package/dist/models/bookmark.js +136 -0
  427. package/dist/models/bookmark.js.map +1 -0
  428. package/dist/models/comment.d.ts +21 -0
  429. package/dist/models/comment.js +87 -0
  430. package/dist/models/comment.js.map +1 -0
  431. package/dist/models/config-sensitive.d.ts +21 -0
  432. package/dist/models/config-sensitive.js +71 -0
  433. package/dist/models/config-sensitive.js.map +1 -0
  434. package/dist/models/config.d.ts +34 -0
  435. package/dist/models/config.js +161 -0
  436. package/dist/models/config.js.map +1 -0
  437. package/dist/models/index.d.ts +30 -0
  438. package/dist/models/index.js +55 -0
  439. package/dist/models/index.js.map +1 -0
  440. package/dist/models/migration-application.d.ts +54 -0
  441. package/dist/models/migration-application.js +36 -0
  442. package/dist/models/migration-application.js.map +1 -0
  443. package/dist/models/notification.d.ts +28 -0
  444. package/dist/models/notification.js +285 -0
  445. package/dist/models/notification.js.map +1 -0
  446. package/dist/models/oauth-authorization-code.d.ts +34 -0
  447. package/dist/models/oauth-authorization-code.js +100 -0
  448. package/dist/models/oauth-authorization-code.js.map +1 -0
  449. package/dist/models/oauth-client.d.ts +36 -0
  450. package/dist/models/oauth-client.js +56 -0
  451. package/dist/models/oauth-client.js.map +1 -0
  452. package/dist/models/oauth-device-code.d.ts +55 -0
  453. package/dist/models/oauth-device-code.js +158 -0
  454. package/dist/models/oauth-device-code.js.map +1 -0
  455. package/dist/models/oauth-refresh-token.d.ts +31 -0
  456. package/dist/models/oauth-refresh-token.js +118 -0
  457. package/dist/models/oauth-refresh-token.js.map +1 -0
  458. package/dist/models/page-yjs-update.d.ts +35 -0
  459. package/dist/models/page-yjs-update.js +33 -0
  460. package/dist/models/page-yjs-update.js.map +1 -0
  461. package/dist/models/page.d.ts +200 -0
  462. package/dist/models/page.js +1117 -0
  463. package/dist/models/page.js.map +1 -0
  464. package/dist/models/personal-access-token.d.ts +30 -0
  465. package/dist/models/personal-access-token.js +107 -0
  466. package/dist/models/personal-access-token.js.map +1 -0
  467. package/dist/models/plugin-render-cache.d.ts +40 -0
  468. package/dist/models/plugin-render-cache.js +39 -0
  469. package/dist/models/plugin-render-cache.js.map +1 -0
  470. package/dist/models/revision.d.ts +145 -0
  471. package/dist/models/revision.js +241 -0
  472. package/dist/models/revision.js.map +1 -0
  473. package/dist/models/share.d.ts +38 -0
  474. package/dist/models/share.js +137 -0
  475. package/dist/models/share.js.map +1 -0
  476. package/dist/models/shareAccess.d.ts +20 -0
  477. package/dist/models/shareAccess.js +45 -0
  478. package/dist/models/shareAccess.js.map +1 -0
  479. package/dist/models/tracking.d.ts +14 -0
  480. package/dist/models/tracking.js +14 -0
  481. package/dist/models/tracking.js.map +1 -0
  482. package/dist/models/updatePost.d.ts +25 -0
  483. package/dist/models/updatePost.js +87 -0
  484. package/dist/models/updatePost.js.map +1 -0
  485. package/dist/models/user.d.ts +144 -0
  486. package/dist/models/user.js +681 -0
  487. package/dist/models/user.js.map +1 -0
  488. package/dist/models/watcher.d.ts +23 -0
  489. package/dist/models/watcher.js +75 -0
  490. package/dist/models/watcher.js.map +1 -0
  491. package/dist/notifications/attach.d.ts +63 -0
  492. package/dist/notifications/attach.js +426 -0
  493. package/dist/notifications/attach.js.map +1 -0
  494. package/dist/notifications/channel.d.ts +13 -0
  495. package/dist/notifications/channel.js +18 -0
  496. package/dist/notifications/channel.js.map +1 -0
  497. package/dist/plugin/index.d.ts +2 -0
  498. package/dist/plugin/index.js +6 -0
  499. package/dist/plugin/index.js.map +1 -0
  500. package/dist/plugin/plugin-context.d.ts +22 -0
  501. package/dist/plugin/plugin-context.js +126 -0
  502. package/dist/plugin/plugin-context.js.map +1 -0
  503. package/dist/plugin/plugin-manager.d.ts +164 -0
  504. package/dist/plugin/plugin-manager.js +328 -0
  505. package/dist/plugin/plugin-manager.js.map +1 -0
  506. package/dist/plugin/plugin-namespace.d.ts +28 -0
  507. package/dist/plugin/plugin-namespace.js +53 -0
  508. package/dist/plugin/plugin-namespace.js.map +1 -0
  509. package/dist/plugin/registries.d.ts +38 -0
  510. package/dist/plugin/registries.js +71 -0
  511. package/dist/plugin/registries.js.map +1 -0
  512. package/dist/plugin/schema-serializer.d.ts +34 -0
  513. package/dist/plugin/schema-serializer.js +122 -0
  514. package/dist/plugin/schema-serializer.js.map +1 -0
  515. package/dist/plugin/topo-sort.d.ts +15 -0
  516. package/dist/plugin/topo-sort.js +59 -0
  517. package/dist/plugin/topo-sort.js.map +1 -0
  518. package/dist/presence/attach.d.ts +36 -0
  519. package/dist/presence/attach.js +399 -0
  520. package/dist/presence/attach.js.map +1 -0
  521. package/dist/renderer/__fixtures__/echo-embed.d.ts +27 -0
  522. package/dist/renderer/__fixtures__/echo-embed.js +24 -0
  523. package/dist/renderer/__fixtures__/echo-embed.js.map +1 -0
  524. package/dist/renderer/cache/index.d.ts +60 -0
  525. package/dist/renderer/cache/index.js +219 -0
  526. package/dist/renderer/cache/index.js.map +1 -0
  527. package/dist/renderer/cache/mongodb-cache.d.ts +82 -0
  528. package/dist/renderer/cache/mongodb-cache.js +180 -0
  529. package/dist/renderer/cache/mongodb-cache.js.map +1 -0
  530. package/dist/renderer/cache/reservation.d.ts +20 -0
  531. package/dist/renderer/cache/reservation.js +115 -0
  532. package/dist/renderer/cache/reservation.js.map +1 -0
  533. package/dist/renderer/core/_mdast-walk.d.ts +35 -0
  534. package/dist/renderer/core/_mdast-walk.js +45 -0
  535. package/dist/renderer/core/_mdast-walk.js.map +1 -0
  536. package/dist/renderer/core/code-block-dispatch.d.ts +31 -0
  537. package/dist/renderer/core/code-block-dispatch.js +166 -0
  538. package/dist/renderer/core/code-block-dispatch.js.map +1 -0
  539. package/dist/renderer/core/code-blocks.d.ts +12 -0
  540. package/dist/renderer/core/code-blocks.js +32 -0
  541. package/dist/renderer/core/code-blocks.js.map +1 -0
  542. package/dist/renderer/core/embed-tags.d.ts +14 -0
  543. package/dist/renderer/core/embed-tags.js +154 -0
  544. package/dist/renderer/core/embed-tags.js.map +1 -0
  545. package/dist/renderer/core/headings.d.ts +16 -0
  546. package/dist/renderer/core/headings.js +31 -0
  547. package/dist/renderer/core/headings.js.map +1 -0
  548. package/dist/renderer/core/index.d.ts +65 -0
  549. package/dist/renderer/core/index.js +83 -0
  550. package/dist/renderer/core/index.js.map +1 -0
  551. package/dist/renderer/core/mention-resolve.d.ts +39 -0
  552. package/dist/renderer/core/mention-resolve.js +75 -0
  553. package/dist/renderer/core/mention-resolve.js.map +1 -0
  554. package/dist/renderer/core/mentions.d.ts +2 -0
  555. package/dist/renderer/core/mentions.js +83 -0
  556. package/dist/renderer/core/mentions.js.map +1 -0
  557. package/dist/renderer/core/syntax-highlight.d.ts +21 -0
  558. package/dist/renderer/core/syntax-highlight.js +64 -0
  559. package/dist/renderer/core/syntax-highlight.js.map +1 -0
  560. package/dist/renderer/core/url-inline-expand.d.ts +9 -0
  561. package/dist/renderer/core/url-inline-expand.js +157 -0
  562. package/dist/renderer/core/url-inline-expand.js.map +1 -0
  563. package/dist/renderer/core/wikilinks.d.ts +2 -0
  564. package/dist/renderer/core/wikilinks.js +118 -0
  565. package/dist/renderer/core/wikilinks.js.map +1 -0
  566. package/dist/renderer/index.d.ts +67 -0
  567. package/dist/renderer/index.js +99 -0
  568. package/dist/renderer/index.js.map +1 -0
  569. package/dist/renderer/pipeline.d.ts +134 -0
  570. package/dist/renderer/pipeline.js +203 -0
  571. package/dist/renderer/pipeline.js.map +1 -0
  572. package/dist/renderer/registry.d.ts +83 -0
  573. package/dist/renderer/registry.js +130 -0
  574. package/dist/renderer/registry.js.map +1 -0
  575. package/dist/renderer/serialize.d.ts +27 -0
  576. package/dist/renderer/serialize.js +46 -0
  577. package/dist/renderer/serialize.js.map +1 -0
  578. package/dist/renderer/version.d.ts +30 -0
  579. package/dist/renderer/version.js +34 -0
  580. package/dist/renderer/version.js.map +1 -0
  581. package/dist/routes/admin.d.ts +4 -0
  582. package/dist/routes/admin.js +17 -0
  583. package/dist/routes/admin.js.map +1 -0
  584. package/dist/routes/api/admin.d.ts +4 -0
  585. package/dist/routes/api/admin.js +37 -0
  586. package/dist/routes/api/admin.js.map +1 -0
  587. package/dist/routes/api/attachment.d.ts +4 -0
  588. package/dist/routes/api/attachment.js +19 -0
  589. package/dist/routes/api/attachment.js.map +1 -0
  590. package/dist/routes/api/bookmark.d.ts +4 -0
  591. package/dist/routes/api/bookmark.js +15 -0
  592. package/dist/routes/api/bookmark.js.map +1 -0
  593. package/dist/routes/api/comment.d.ts +4 -0
  594. package/dist/routes/api/comment.js +14 -0
  595. package/dist/routes/api/comment.js.map +1 -0
  596. package/dist/routes/api/index.d.ts +4 -0
  597. package/dist/routes/api/index.js +36 -0
  598. package/dist/routes/api/index.js.map +1 -0
  599. package/dist/routes/api/like.d.ts +4 -0
  600. package/dist/routes/api/like.js +13 -0
  601. package/dist/routes/api/like.js.map +1 -0
  602. package/dist/routes/api/notification.d.ts +4 -0
  603. package/dist/routes/api/notification.js +15 -0
  604. package/dist/routes/api/notification.js.map +1 -0
  605. package/dist/routes/api/page.d.ts +4 -0
  606. package/dist/routes/api/page.js +24 -0
  607. package/dist/routes/api/page.js.map +1 -0
  608. package/dist/routes/api/revision.d.ts +4 -0
  609. package/dist/routes/api/revision.js +14 -0
  610. package/dist/routes/api/revision.js.map +1 -0
  611. package/dist/routes/api/share.d.ts +4 -0
  612. package/dist/routes/api/share.js +16 -0
  613. package/dist/routes/api/share.js.map +1 -0
  614. package/dist/routes/api/version.d.ts +4 -0
  615. package/dist/routes/api/version.js +10 -0
  616. package/dist/routes/api/version.js.map +1 -0
  617. package/dist/routes/index.d.ts +4 -0
  618. package/dist/routes/index.js +71 -0
  619. package/dist/routes/index.js.map +1 -0
  620. package/dist/routes/login.d.ts +4 -0
  621. package/dist/routes/login.js +18 -0
  622. package/dist/routes/login.js.map +1 -0
  623. package/dist/routes/me.d.ts +4 -0
  624. package/dist/routes/me.js +24 -0
  625. package/dist/routes/me.js.map +1 -0
  626. package/dist/routes/ts-rest/admin/app.d.ts +4 -0
  627. package/dist/routes/ts-rest/admin/app.js +67 -0
  628. package/dist/routes/ts-rest/admin/app.js.map +1 -0
  629. package/dist/routes/ts-rest/admin/auth.d.ts +4 -0
  630. package/dist/routes/ts-rest/admin/auth.js +95 -0
  631. package/dist/routes/ts-rest/admin/auth.js.map +1 -0
  632. package/dist/routes/ts-rest/admin/index.d.ts +10 -0
  633. package/dist/routes/ts-rest/admin/index.js +35 -0
  634. package/dist/routes/ts-rest/admin/index.js.map +1 -0
  635. package/dist/routes/ts-rest/admin/mail.d.ts +4 -0
  636. package/dist/routes/ts-rest/admin/mail.js +156 -0
  637. package/dist/routes/ts-rest/admin/mail.js.map +1 -0
  638. package/dist/routes/ts-rest/admin/plugins.d.ts +4 -0
  639. package/dist/routes/ts-rest/admin/plugins.js +317 -0
  640. package/dist/routes/ts-rest/admin/plugins.js.map +1 -0
  641. package/dist/routes/ts-rest/admin/search.d.ts +4 -0
  642. package/dist/routes/ts-rest/admin/search.js +67 -0
  643. package/dist/routes/ts-rest/admin/search.js.map +1 -0
  644. package/dist/routes/ts-rest/admin/security.d.ts +4 -0
  645. package/dist/routes/ts-rest/admin/security.js +114 -0
  646. package/dist/routes/ts-rest/admin/security.js.map +1 -0
  647. package/dist/routes/ts-rest/admin/share.d.ts +4 -0
  648. package/dist/routes/ts-rest/admin/share.js +69 -0
  649. package/dist/routes/ts-rest/admin/share.js.map +1 -0
  650. package/dist/routes/ts-rest/admin/storage.d.ts +4 -0
  651. package/dist/routes/ts-rest/admin/storage.js +59 -0
  652. package/dist/routes/ts-rest/admin/storage.js.map +1 -0
  653. package/dist/routes/ts-rest/admin/users.d.ts +4 -0
  654. package/dist/routes/ts-rest/admin/users.js +215 -0
  655. package/dist/routes/ts-rest/admin/users.js.map +1 -0
  656. package/dist/routes/ts-rest/adminCrypto.d.ts +4 -0
  657. package/dist/routes/ts-rest/adminCrypto.js +111 -0
  658. package/dist/routes/ts-rest/adminCrypto.js.map +1 -0
  659. package/dist/routes/ts-rest/app.d.ts +4 -0
  660. package/dist/routes/ts-rest/app.js +23 -0
  661. package/dist/routes/ts-rest/app.js.map +1 -0
  662. package/dist/routes/ts-rest/attachment.d.ts +4 -0
  663. package/dist/routes/ts-rest/attachment.js +830 -0
  664. package/dist/routes/ts-rest/attachment.js.map +1 -0
  665. package/dist/routes/ts-rest/auth.d.ts +4 -0
  666. package/dist/routes/ts-rest/auth.js +70 -0
  667. package/dist/routes/ts-rest/auth.js.map +1 -0
  668. package/dist/routes/ts-rest/autocomplete.d.ts +30 -0
  669. package/dist/routes/ts-rest/autocomplete.js +189 -0
  670. package/dist/routes/ts-rest/autocomplete.js.map +1 -0
  671. package/dist/routes/ts-rest/backlink.d.ts +4 -0
  672. package/dist/routes/ts-rest/backlink.js +106 -0
  673. package/dist/routes/ts-rest/backlink.js.map +1 -0
  674. package/dist/routes/ts-rest/bookmark.d.ts +4 -0
  675. package/dist/routes/ts-rest/bookmark.js +189 -0
  676. package/dist/routes/ts-rest/bookmark.js.map +1 -0
  677. package/dist/routes/ts-rest/comment.d.ts +4 -0
  678. package/dist/routes/ts-rest/comment.js +217 -0
  679. package/dist/routes/ts-rest/comment.js.map +1 -0
  680. package/dist/routes/ts-rest/draft.d.ts +22 -0
  681. package/dist/routes/ts-rest/draft.js +200 -0
  682. package/dist/routes/ts-rest/draft.js.map +1 -0
  683. package/dist/routes/ts-rest/index.d.ts +4 -0
  684. package/dist/routes/ts-rest/index.js +103 -0
  685. package/dist/routes/ts-rest/index.js.map +1 -0
  686. package/dist/routes/ts-rest/installer.d.ts +4 -0
  687. package/dist/routes/ts-rest/installer.js +77 -0
  688. package/dist/routes/ts-rest/installer.js.map +1 -0
  689. package/dist/routes/ts-rest/me.d.ts +4 -0
  690. package/dist/routes/ts-rest/me.js +410 -0
  691. package/dist/routes/ts-rest/me.js.map +1 -0
  692. package/dist/routes/ts-rest/notification.d.ts +4 -0
  693. package/dist/routes/ts-rest/notification.js +241 -0
  694. package/dist/routes/ts-rest/notification.js.map +1 -0
  695. package/dist/routes/ts-rest/page-collab.d.ts +29 -0
  696. package/dist/routes/ts-rest/page-collab.js +90 -0
  697. package/dist/routes/ts-rest/page-collab.js.map +1 -0
  698. package/dist/routes/ts-rest/page-preview.d.ts +26 -0
  699. package/dist/routes/ts-rest/page-preview.js +80 -0
  700. package/dist/routes/ts-rest/page-preview.js.map +1 -0
  701. package/dist/routes/ts-rest/page.d.ts +4 -0
  702. package/dist/routes/ts-rest/page.js +676 -0
  703. package/dist/routes/ts-rest/page.js.map +1 -0
  704. package/dist/routes/ts-rest/presence.d.ts +30 -0
  705. package/dist/routes/ts-rest/presence.js +155 -0
  706. package/dist/routes/ts-rest/presence.js.map +1 -0
  707. package/dist/routes/ts-rest/revision.d.ts +4 -0
  708. package/dist/routes/ts-rest/revision.js +240 -0
  709. package/dist/routes/ts-rest/revision.js.map +1 -0
  710. package/dist/routes/ts-rest/search.d.ts +4 -0
  711. package/dist/routes/ts-rest/search.js +121 -0
  712. package/dist/routes/ts-rest/search.js.map +1 -0
  713. package/dist/routes/ts-rest/tokenAuth.d.ts +4 -0
  714. package/dist/routes/ts-rest/tokenAuth.js +94 -0
  715. package/dist/routes/ts-rest/tokenAuth.js.map +1 -0
  716. package/dist/routes/ts-rest/user.d.ts +4 -0
  717. package/dist/routes/ts-rest/user.js +307 -0
  718. package/dist/routes/ts-rest/user.js.map +1 -0
  719. package/dist/service/config.d.ts +50 -0
  720. package/dist/service/config.js +202 -0
  721. package/dist/service/config.js.map +1 -0
  722. package/dist/service/lru.d.ts +11 -0
  723. package/dist/service/lru.js +47 -0
  724. package/dist/service/lru.js.map +1 -0
  725. package/dist/service/mail.d.ts +107 -0
  726. package/dist/service/mail.js +220 -0
  727. package/dist/service/mail.js.map +1 -0
  728. package/dist/service/notification.d.ts +9 -0
  729. package/dist/service/notification.js +19 -0
  730. package/dist/service/notification.js.map +1 -0
  731. package/dist/service/presence.d.ts +219 -0
  732. package/dist/service/presence.js +602 -0
  733. package/dist/service/presence.js.map +1 -0
  734. package/dist/types/error.d.ts +13 -0
  735. package/dist/types/error.js +13 -0
  736. package/dist/types/error.js.map +1 -0
  737. package/dist/types/express.d.ts +34 -0
  738. package/dist/types/express.js +50 -0
  739. package/dist/types/express.js.map +1 -0
  740. package/dist/types/mongoose-extensions.d.ts +8 -0
  741. package/dist/types/mongoose-extensions.js +24 -0
  742. package/dist/types/mongoose-extensions.js.map +1 -0
  743. package/dist/util/accessTokenParser.d.ts +1 -0
  744. package/dist/util/accessTokenParser.js +34 -0
  745. package/dist/util/accessTokenParser.js.map +1 -0
  746. package/dist/util/activityDefine.d.ts +15 -0
  747. package/dist/util/activityDefine.js +52 -0
  748. package/dist/util/activityDefine.js.map +1 -0
  749. package/dist/util/admin-config.d.ts +57 -0
  750. package/dist/util/admin-config.js +99 -0
  751. package/dist/util/admin-config.js.map +1 -0
  752. package/dist/util/admin-pager.d.ts +24 -0
  753. package/dist/util/admin-pager.js +73 -0
  754. package/dist/util/admin-pager.js.map +1 -0
  755. package/dist/util/apiPaginate.d.ts +11 -0
  756. package/dist/util/apiPaginate.js +33 -0
  757. package/dist/util/apiPaginate.js.map +1 -0
  758. package/dist/util/apiResponse.d.ts +9 -0
  759. package/dist/util/apiResponse.js +23 -0
  760. package/dist/util/apiResponse.js.map +1 -0
  761. package/dist/util/auth.d.ts +11 -0
  762. package/dist/util/auth.js +48 -0
  763. package/dist/util/auth.js.map +1 -0
  764. package/dist/util/auto-watch.d.ts +35 -0
  765. package/dist/util/auto-watch.js +24 -0
  766. package/dist/util/auto-watch.js.map +1 -0
  767. package/dist/util/autocomplete-match.d.ts +44 -0
  768. package/dist/util/autocomplete-match.js +80 -0
  769. package/dist/util/autocomplete-match.js.map +1 -0
  770. package/dist/util/aws-config-migration.d.ts +11 -0
  771. package/dist/util/aws-config-migration.js +68 -0
  772. package/dist/util/aws-config-migration.js.map +1 -0
  773. package/dist/util/boot-reporter.d.ts +130 -0
  774. package/dist/util/boot-reporter.js +242 -0
  775. package/dist/util/boot-reporter.js.map +1 -0
  776. package/dist/util/collab-cap.d.ts +39 -0
  777. package/dist/util/collab-cap.js +90 -0
  778. package/dist/util/collab-cap.js.map +1 -0
  779. package/dist/util/crypto.d.ts +39 -0
  780. package/dist/util/crypto.js +105 -0
  781. package/dist/util/crypto.js.map +1 -0
  782. package/dist/util/dedup-users.d.ts +96 -0
  783. package/dist/util/dedup-users.js +149 -0
  784. package/dist/util/dedup-users.js.map +1 -0
  785. package/dist/util/editor-cap-counter.d.ts +90 -0
  786. package/dist/util/editor-cap-counter.js +175 -0
  787. package/dist/util/editor-cap-counter.js.map +1 -0
  788. package/dist/util/fileUploader.d.ts +55 -0
  789. package/dist/util/fileUploader.js +70 -0
  790. package/dist/util/fileUploader.js.map +1 -0
  791. package/dist/util/formUtil.d.ts +2 -0
  792. package/dist/util/formUtil.js +15 -0
  793. package/dist/util/formUtil.js.map +1 -0
  794. package/dist/util/githubAuth.d.ts +2 -0
  795. package/dist/util/githubAuth.js +82 -0
  796. package/dist/util/githubAuth.js.map +1 -0
  797. package/dist/util/googleAuth.d.ts +2 -0
  798. package/dist/util/googleAuth.js +85 -0
  799. package/dist/util/googleAuth.js.map +1 -0
  800. package/dist/util/jwt.d.ts +50 -0
  801. package/dist/util/jwt.js +127 -0
  802. package/dist/util/jwt.js.map +1 -0
  803. package/dist/util/linkDetector.d.ts +3 -0
  804. package/dist/util/linkDetector.js +91 -0
  805. package/dist/util/linkDetector.js.map +1 -0
  806. package/dist/util/mail-token.d.ts +24 -0
  807. package/dist/util/mail-token.js +117 -0
  808. package/dist/util/mail-token.js.map +1 -0
  809. package/dist/util/mailer.d.ts +7 -0
  810. package/dist/util/mailer.js +98 -0
  811. package/dist/util/mailer.js.map +1 -0
  812. package/dist/util/map-duplicate-key-error.d.ts +26 -0
  813. package/dist/util/map-duplicate-key-error.js +41 -0
  814. package/dist/util/map-duplicate-key-error.js.map +1 -0
  815. package/dist/util/mongoose-paginate.d.ts +10 -0
  816. package/dist/util/mongoose-paginate.js +23 -0
  817. package/dist/util/mongoose-paginate.js.map +1 -0
  818. package/dist/util/notifications-token.d.ts +35 -0
  819. package/dist/util/notifications-token.js +140 -0
  820. package/dist/util/notifications-token.js.map +1 -0
  821. package/dist/util/oauth-client-seed.d.ts +2 -0
  822. package/dist/util/oauth-client-seed.js +48 -0
  823. package/dist/util/oauth-client-seed.js.map +1 -0
  824. package/dist/util/oauth-redirect-uri.d.ts +2 -0
  825. package/dist/util/oauth-redirect-uri.js +55 -0
  826. package/dist/util/oauth-redirect-uri.js.map +1 -0
  827. package/dist/util/page-response.d.ts +113 -0
  828. package/dist/util/page-response.js +154 -0
  829. package/dist/util/page-response.js.map +1 -0
  830. package/dist/util/page-search-index.d.ts +19 -0
  831. package/dist/util/page-search-index.js +91 -0
  832. package/dist/util/page-search-index.js.map +1 -0
  833. package/dist/util/page-status-migration.d.ts +23 -0
  834. package/dist/util/page-status-migration.js +48 -0
  835. package/dist/util/page-status-migration.js.map +1 -0
  836. package/dist/util/path.d.ts +2 -0
  837. package/dist/util/path.js +12 -0
  838. package/dist/util/path.js.map +1 -0
  839. package/dist/util/pkce.d.ts +13 -0
  840. package/dist/util/pkce.js +30 -0
  841. package/dist/util/pkce.js.map +1 -0
  842. package/dist/util/presence-token.d.ts +21 -0
  843. package/dist/util/presence-token.js +120 -0
  844. package/dist/util/presence-token.js.map +1 -0
  845. package/dist/util/rate-limit.d.ts +67 -0
  846. package/dist/util/rate-limit.js +87 -0
  847. package/dist/util/rate-limit.js.map +1 -0
  848. package/dist/util/rebuild-backlink.d.ts +25 -0
  849. package/dist/util/rebuild-backlink.js +7 -0
  850. package/dist/util/rebuild-backlink.js.map +1 -0
  851. package/dist/util/rebuild-renderer.d.ts +31 -0
  852. package/dist/util/rebuild-renderer.js +7 -0
  853. package/dist/util/rebuild-renderer.js.map +1 -0
  854. package/dist/util/redis-opts.d.ts +17 -0
  855. package/dist/util/redis-opts.js +40 -0
  856. package/dist/util/redis-opts.js.map +1 -0
  857. package/dist/util/regex.d.ts +2 -0
  858. package/dist/util/regex.js +8 -0
  859. package/dist/util/regex.js.map +1 -0
  860. package/dist/util/search-rebuild.d.ts +18 -0
  861. package/dist/util/search-rebuild.js +28 -0
  862. package/dist/util/search-rebuild.js.map +1 -0
  863. package/dist/util/ssr.d.ts +3 -0
  864. package/dist/util/ssr.js +9 -0
  865. package/dist/util/ssr.js.map +1 -0
  866. package/dist/util/storage-copy.d.ts +40 -0
  867. package/dist/util/storage-copy.js +123 -0
  868. package/dist/util/storage-copy.js.map +1 -0
  869. package/dist/util/ts-rest-helpers.d.ts +110 -0
  870. package/dist/util/ts-rest-helpers.js +110 -0
  871. package/dist/util/ts-rest-helpers.js.map +1 -0
  872. package/dist/util/url.d.ts +1 -0
  873. package/dist/util/url.js +11 -0
  874. package/dist/util/url.js.map +1 -0
  875. package/dist/util/user-code.d.ts +10 -0
  876. package/dist/util/user-code.js +55 -0
  877. package/dist/util/user-code.js.map +1 -0
  878. package/dist/util/view.d.ts +10 -0
  879. package/dist/util/view.js +99 -0
  880. package/dist/util/view.js.map +1 -0
  881. package/dist/util/watcher-backfill.d.ts +30 -0
  882. package/dist/util/watcher-backfill.js +43 -0
  883. package/dist/util/watcher-backfill.js.map +1 -0
  884. package/dist/util/ws-token.d.ts +24 -0
  885. package/dist/util/ws-token.js +134 -0
  886. package/dist/util/ws-token.js.map +1 -0
  887. package/package.json +106 -0
@@ -0,0 +1,602 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.EDITING_REFRESH_MS = exports.EDITING_TTL_MS = exports.EDITING_HASH_PREFIX = exports.VIEWER_TTL_MS = exports.VIEWER_HASH_PREFIX = exports.PRESENCE_UPDATES_CHANNEL = exports._setPresenceServiceForTesting = void 0;
7
+ exports.createPresenceService = createPresenceService;
8
+ exports.getPresenceService = getPresenceService;
9
+ exports.createPresenceCollabDeps = createPresenceCollabDeps;
10
+ const node_events_1 = require("node:events");
11
+ const debug_1 = __importDefault(require("debug"));
12
+ const debug = (0, debug_1.default)('crowi:service:presence');
13
+ /**
14
+ * RFC-0005 — page-presence service.
15
+ *
16
+ * Tracks which users are currently *viewing* a page (the live-presence
17
+ * row above the page title). Editor-side presence (peer cursors,
18
+ * typing badges) is RFC-0003's concern and lives in `@crowi/collab`.
19
+ *
20
+ * Replaces the RFC-0003 Phase 5 `markEditing` no-op stub that
21
+ * previously occupied this file — the swap point the stub's comment
22
+ * promised. The collab package still calls into presence through a
23
+ * dependency-injected adapter (`createPresenceCollabDeps` below) so
24
+ * `@crowi/collab` never imports `@crowi/api`.
25
+ *
26
+ * Wire-level design:
27
+ *
28
+ * - Viewer hash: `crowi:presence:viewers:<pageId>` — a Redis hash,
29
+ * one field per viewing `userId`, value a JSON blob with the
30
+ * viewer's denormalised identity + `joinedAt` + `lastHeartbeatAt`.
31
+ * - TTL: the hash carries a *key-level* `EXPIRE` (re-applied on every
32
+ * write) so an idle page's hash evaporates. Per-*field* TTL would
33
+ * need `HEXPIRE` (Redis 7.4 / node-redis v5) which this codebase's
34
+ * node-redis v4.7 does not expose — instead each field stores
35
+ * `lastHeartbeatAt` and `listViewers` filters out entries whose
36
+ * last heartbeat is older than `VIEWER_TTL_MS`, sweeping the stale
37
+ * fields from the hash as a side effect.
38
+ * - Pub/sub: `crowi:presence:updates` carries `<pageId>` strings.
39
+ * When a viewer joins / leaves on api instance A, A publishes the
40
+ * pageId; every instance (including A) re-broadcasts the fresh
41
+ * viewer list to its locally-connected clients. Same
42
+ * Redis-as-shared-state pattern as RFC-0003.
43
+ * - `isEditing`: NOT stored in the viewer hash. It is derived at
44
+ * `listViewers` time from a dedicated, short-lived *editing hash*
45
+ * `crowi:presence:editing:<pageId>` — one field per editor
46
+ * connection (`<userId>:<socketId>`), value `lastSeenAt`
47
+ * (epoch-ms). The collab process refreshes its own fields every
48
+ * `EDITING_REFRESH_MS`; a field older than `EDITING_TTL_MS` is
49
+ * considered stale and swept. This replaces the earlier design
50
+ * that joined the RFC-0003 editor-cap Set: that Set is a *soft
51
+ * concurrency-limit counter* with a 24h key TTL whose members are
52
+ * only SREM'd on a clean `onDisconnect`, so an api crash / restart
53
+ * could leave stale members for up to 24h and paint the `✏️` badge
54
+ * on plain viewers. The editing hash self-heals: when the editing
55
+ * process dies it stops refreshing, and every field ages out
56
+ * within `EDITING_TTL_MS`.
57
+ *
58
+ * Fail-soft posture: when `crowi.redis` is null (REDIS_URL unset,
59
+ * single-instance dev) presence degrades to an in-process-only store
60
+ * with no cross-instance fan-out. The `/presence` WebSocket still works
61
+ * for viewers connected to the same process.
62
+ */
63
+ /** Redis key prefix for the per-page viewer hash. */
64
+ const VIEWER_HASH_PREFIX = 'crowi:presence:viewers:';
65
+ exports.VIEWER_HASH_PREFIX = VIEWER_HASH_PREFIX;
66
+ /** Redis pub/sub channel for cross-instance viewer-list invalidation. */
67
+ const PRESENCE_UPDATES_CHANNEL = 'crowi:presence:updates';
68
+ exports.PRESENCE_UPDATES_CHANNEL = PRESENCE_UPDATES_CHANNEL;
69
+ /**
70
+ * Redis key prefix for the per-page *editing hash* — the presence-owned
71
+ * short-lived editing signal that drives the `✏️` badge. One field per
72
+ * editor connection (`<userId>:<socketId>`), value `lastSeenAt`.
73
+ */
74
+ const EDITING_HASH_PREFIX = 'crowi:presence:editing:';
75
+ exports.EDITING_HASH_PREFIX = EDITING_HASH_PREFIX;
76
+ /**
77
+ * A viewer entry is considered live for 30s after its last heartbeat.
78
+ * The browser heartbeats every 15s, so a viewer normally refreshes
79
+ * twice within the window; a single dropped heartbeat does not evict.
80
+ */
81
+ const VIEWER_TTL_MS = 30_000;
82
+ exports.VIEWER_TTL_MS = VIEWER_TTL_MS;
83
+ /**
84
+ * Key-level TTL for the viewer hash. Comfortably above `VIEWER_TTL_MS`
85
+ * so a page with one slow-to-leave viewer keeps its hash, but bounded
86
+ * so an abandoned page's hash is reaped within a minute of the last
87
+ * heartbeat even if no `leave` ever fires.
88
+ */
89
+ const VIEWER_HASH_TTL_SECONDS = 60;
90
+ /**
91
+ * An editing-hash field is considered live for 30s after its last
92
+ * refresh. The collab process refreshes every `EDITING_REFRESH_MS`
93
+ * (10s) so a healthy editor field stays comfortably fresh; once the
94
+ * editing process dies and stops refreshing, the field ages out within
95
+ * this window and the badge disappears.
96
+ */
97
+ const EDITING_TTL_MS = 30_000;
98
+ exports.EDITING_TTL_MS = EDITING_TTL_MS;
99
+ /**
100
+ * Key-level TTL for the editing hash, re-applied on every write.
101
+ * Comfortably above `EDITING_TTL_MS` so a slow-to-disconnect editor
102
+ * keeps the hash, but bounded so an abandoned page's editing hash is
103
+ * reaped even if no `unmarkEditing` ever fires.
104
+ */
105
+ const EDITING_HASH_TTL_SECONDS = 60;
106
+ /**
107
+ * Interval at which the collab→presence adapter refreshes the
108
+ * `lastSeenAt` of every live editor connection it owns. Well under
109
+ * `EDITING_TTL_MS` so a single missed tick does not age a field out.
110
+ */
111
+ const EDITING_REFRESH_MS = 10_000;
112
+ exports.EDITING_REFRESH_MS = EDITING_REFRESH_MS;
113
+ const viewerHashKey = (pageId) => `${VIEWER_HASH_PREFIX}${pageId}`;
114
+ const editingHashKey = (pageId) => `${EDITING_HASH_PREFIX}${pageId}`;
115
+ const editingField = (userId, socketId) => `${userId}:${socketId}`;
116
+ /** Inverse of `editingField` — the `userId` portion of a `<userId>:<socketId>` field. */
117
+ const editingFieldUserId = (field) => {
118
+ const sep = field.indexOf(':');
119
+ return sep < 0 ? field : field.slice(0, sep);
120
+ };
121
+ /**
122
+ * Build a presence service.
123
+ *
124
+ * - `redis` present → cross-instance mode: viewer state in Redis,
125
+ * change notifications fan out via pub/sub.
126
+ * - `redis` null → single-instance mode: viewer state in a
127
+ * process-local Map, change notifications are emitted directly.
128
+ *
129
+ * The two modes share the same `PresenceService` surface so the
130
+ * `/presence` handler never branches on Redis availability.
131
+ */
132
+ async function createPresenceService(redis) {
133
+ // Local EventEmitter the `/presence` handler subscribes to. In Redis
134
+ // mode it is fed by the pub/sub subscriber + local publishes; in
135
+ // single-instance mode it is emitted directly.
136
+ const emitter = new node_events_1.EventEmitter();
137
+ // EventEmitter's default 10-listener cap warns once per page with
138
+ // many connected sockets; presence legitimately has one listener per
139
+ // connected socket, so lift the cap.
140
+ emitter.setMaxListeners(0);
141
+ const emitChange = (pageId) => {
142
+ emitter.emit('change', pageId);
143
+ };
144
+ if (redis === null) {
145
+ return createInProcessPresenceService(emitter, emitChange);
146
+ }
147
+ return createRedisPresenceService(redis, emitter, emitChange);
148
+ }
149
+ /**
150
+ * Single-instance (no Redis) implementation. Viewer state lives in a
151
+ * process-local Map; the editing signal is tracked in a parallel
152
+ * process-local Map (`editing`), keyed `<pageId>` → `<userId>:<socketId>`
153
+ * → `lastSeenAt`, mirroring the Redis editing hash. `isEditing` is
154
+ * therefore accurate in single-instance dev too.
155
+ */
156
+ function createInProcessPresenceService(emitter, emitChange) {
157
+ const pages = new Map();
158
+ // pageId → (`<userId>:<socketId>` → lastSeenAt). Mirrors the Redis
159
+ // editing hash for the no-Redis dev path.
160
+ const editing = new Map();
161
+ const pageMap = (pageId) => {
162
+ let m = pages.get(pageId);
163
+ if (!m) {
164
+ m = new Map();
165
+ pages.set(pageId, m);
166
+ }
167
+ return m;
168
+ };
169
+ const editingMap = (pageId) => {
170
+ let m = editing.get(pageId);
171
+ if (!m) {
172
+ m = new Map();
173
+ editing.set(pageId, m);
174
+ }
175
+ return m;
176
+ };
177
+ /**
178
+ * Set of userIds with a fresh editing signal for a page. Stale
179
+ * fields (older than `EDITING_TTL_MS`) are swept as a side effect —
180
+ * same pattern as the Redis implementation.
181
+ */
182
+ const editingUserIds = (pageId) => {
183
+ const m = editing.get(pageId);
184
+ const ids = new Set();
185
+ if (!m)
186
+ return ids;
187
+ const cutoff = Date.now() - EDITING_TTL_MS;
188
+ for (const [field, lastSeenAt] of m) {
189
+ if (lastSeenAt < cutoff) {
190
+ m.delete(field);
191
+ continue;
192
+ }
193
+ ids.add(editingFieldUserId(field));
194
+ }
195
+ return ids;
196
+ };
197
+ return {
198
+ async join(pageId, viewer) {
199
+ const now = Date.now();
200
+ const m = pageMap(pageId);
201
+ const existing = m.get(viewer.userId);
202
+ m.set(viewer.userId, {
203
+ userId: viewer.userId,
204
+ username: viewer.username,
205
+ displayName: viewer.displayName,
206
+ avatarUrl: viewer.avatarUrl,
207
+ joinedAt: existing?.joinedAt ?? now,
208
+ lastHeartbeatAt: now,
209
+ });
210
+ emitChange(pageId);
211
+ },
212
+ async heartbeat(pageId, userId) {
213
+ const entry = pages.get(pageId)?.get(userId);
214
+ if (!entry)
215
+ return false;
216
+ entry.lastHeartbeatAt = Date.now();
217
+ return true;
218
+ },
219
+ async leave(pageId, userId) {
220
+ if (pages.get(pageId)?.delete(userId)) {
221
+ emitChange(pageId);
222
+ }
223
+ },
224
+ async listViewers(pageId) {
225
+ const m = pages.get(pageId);
226
+ if (!m)
227
+ return [];
228
+ const cutoff = Date.now() - VIEWER_TTL_MS;
229
+ const editingIds = editingUserIds(pageId);
230
+ const out = [];
231
+ for (const [userId, entry] of m) {
232
+ if (entry.lastHeartbeatAt < cutoff) {
233
+ m.delete(userId);
234
+ continue;
235
+ }
236
+ out.push({
237
+ userId: entry.userId,
238
+ username: entry.username,
239
+ displayName: entry.displayName,
240
+ avatarUrl: entry.avatarUrl,
241
+ isEditing: editingIds.has(entry.userId),
242
+ joinedAt: entry.joinedAt,
243
+ });
244
+ }
245
+ return out.sort((a, b) => a.joinedAt - b.joinedAt);
246
+ },
247
+ async markEditing(pageId, userId, socketId) {
248
+ editingMap(pageId).set(editingField(userId, socketId), Date.now());
249
+ emitChange(pageId);
250
+ },
251
+ async refreshEditing(pageId, userId, socketId) {
252
+ // Keep-alive only — no broadcast (the editing set is unchanged).
253
+ editingMap(pageId).set(editingField(userId, socketId), Date.now());
254
+ },
255
+ async unmarkEditing(pageId, userId, socketId) {
256
+ editing.get(pageId)?.delete(editingField(userId, socketId));
257
+ emitChange(pageId);
258
+ },
259
+ onViewersChanged(listener) {
260
+ emitter.on('change', listener);
261
+ return () => emitter.off('change', listener);
262
+ },
263
+ async shutdown() {
264
+ emitter.removeAllListeners();
265
+ },
266
+ };
267
+ }
268
+ /**
269
+ * Cross-instance (Redis) implementation.
270
+ *
271
+ * A *dedicated* subscriber client is duplicated off the shared
272
+ * `crowi.redis` — node-redis v4 puts a connection into subscriber mode
273
+ * on `subscribe`, after which it can no longer issue regular commands,
274
+ * so the hash writes must go through the original (non-subscriber)
275
+ * client.
276
+ */
277
+ async function createRedisPresenceService(redis, emitter, emitChange) {
278
+ let subscriber = null;
279
+ try {
280
+ const dup = redis.duplicate();
281
+ await dup.connect();
282
+ await dup.subscribe(PRESENCE_UPDATES_CHANNEL, (message) => {
283
+ // The published message is the bare pageId.
284
+ if (message)
285
+ emitChange(message);
286
+ });
287
+ subscriber = dup;
288
+ debug('presence pub/sub subscriber connected on %s', PRESENCE_UPDATES_CHANNEL);
289
+ }
290
+ catch (err) {
291
+ // A subscriber failure degrades presence to single-instance
292
+ // behaviour for *this* process — local clients still work, but
293
+ // cross-instance fan-out is lost. Never fatal.
294
+ console.warn('[crowi:presence] pub/sub subscriber setup failed — cross-instance fan-out disabled:', err.message);
295
+ }
296
+ /**
297
+ * Publish a viewer-list change. Also emits locally so the publishing
298
+ * instance re-broadcasts without waiting for the pub/sub round-trip.
299
+ * The subscriber on *this* process will also see the published
300
+ * message and fire `change` again — harmless (the second broadcast
301
+ * sends an identical viewer list); emitting locally is the
302
+ * lower-latency path and the subscriber is what reaches the *other*
303
+ * instances.
304
+ */
305
+ const publishChange = async (pageId) => {
306
+ emitChange(pageId);
307
+ try {
308
+ await redis.publish(PRESENCE_UPDATES_CHANNEL, pageId);
309
+ }
310
+ catch (err) {
311
+ console.warn(`[crowi:presence] publish failed for page ${pageId}:`, err.message);
312
+ }
313
+ };
314
+ /** Read + parse the viewer hash, dropping fields that fail to parse. */
315
+ const readHash = async (pageId) => {
316
+ const raw = await redis.hGetAll(viewerHashKey(pageId));
317
+ const out = new Map();
318
+ for (const [userId, json] of Object.entries(raw ?? {})) {
319
+ try {
320
+ const parsed = JSON.parse(json);
321
+ if (parsed && typeof parsed.lastHeartbeatAt === 'number') {
322
+ out.set(userId, parsed);
323
+ }
324
+ }
325
+ catch {
326
+ // Corrupt field — ignore; it expires with the hash TTL.
327
+ debug('dropping unparseable viewer field user=%s page=%s', userId, pageId);
328
+ }
329
+ }
330
+ return out;
331
+ };
332
+ /**
333
+ * Extract the set of userIds currently editing this page from the
334
+ * presence-owned editing hash. Fields are `<userId>:<socketId>` with
335
+ * a `lastSeenAt` value; a field older than `EDITING_TTL_MS` is stale
336
+ * and swept from the hash as a side effect (same pattern as the
337
+ * viewer-hash stale sweep). A user with multiple editor tabs appears
338
+ * once in the resulting set.
339
+ */
340
+ const editingUserIds = async (pageId) => {
341
+ try {
342
+ const raw = await redis.hGetAll(editingHashKey(pageId));
343
+ const ids = new Set();
344
+ const stale = [];
345
+ const cutoff = Date.now() - EDITING_TTL_MS;
346
+ for (const [field, value] of Object.entries(raw ?? {})) {
347
+ const lastSeenAt = Number(value);
348
+ if (!Number.isFinite(lastSeenAt) || lastSeenAt < cutoff) {
349
+ stale.push(field);
350
+ continue;
351
+ }
352
+ ids.add(editingFieldUserId(field));
353
+ }
354
+ if (stale.length > 0) {
355
+ try {
356
+ await redis.hDel(editingHashKey(pageId), stale);
357
+ }
358
+ catch (err) {
359
+ debug('stale editing-field sweep failed for page %s: %s', pageId, err.message);
360
+ }
361
+ }
362
+ return ids;
363
+ }
364
+ catch (err) {
365
+ // Editing is advisory — a failed read just means no `✏️` badge.
366
+ console.warn(`[crowi:presence] editing-hash read failed for page ${pageId}:`, err.message);
367
+ return new Set();
368
+ }
369
+ };
370
+ /**
371
+ * Write (or refresh) an editing-hash field's `lastSeenAt` and re-apply
372
+ * the key TTL. Shared by `markEditing` and `refreshEditing`; failures
373
+ * are warn-only (editing is advisory — a failed write just means no
374
+ * `✏️` badge).
375
+ */
376
+ const writeEditingField = async (pageId, userId, socketId) => {
377
+ const key = editingHashKey(pageId);
378
+ try {
379
+ await redis.hSet(key, editingField(userId, socketId), String(Date.now()));
380
+ await redis.expire(key, EDITING_HASH_TTL_SECONDS);
381
+ }
382
+ catch (err) {
383
+ console.warn(`[crowi:presence] editing-hash write failed for page ${pageId}:`, err.message);
384
+ }
385
+ };
386
+ return {
387
+ async join(pageId, viewer) {
388
+ const key = viewerHashKey(pageId);
389
+ const now = Date.now();
390
+ // Preserve the original joinedAt across re-joins / extra tabs so
391
+ // avatar ordering stays stable.
392
+ let joinedAt = now;
393
+ try {
394
+ const existingRaw = await redis.hGet(key, viewer.userId);
395
+ if (existingRaw) {
396
+ const existing = JSON.parse(existingRaw);
397
+ if (typeof existing.joinedAt === 'number')
398
+ joinedAt = existing.joinedAt;
399
+ }
400
+ }
401
+ catch {
402
+ // Treat an unreadable prior entry as a fresh join.
403
+ }
404
+ const stored = {
405
+ userId: viewer.userId,
406
+ username: viewer.username,
407
+ displayName: viewer.displayName,
408
+ avatarUrl: viewer.avatarUrl,
409
+ joinedAt,
410
+ lastHeartbeatAt: now,
411
+ };
412
+ await redis.hSet(key, viewer.userId, JSON.stringify(stored));
413
+ await redis.expire(key, VIEWER_HASH_TTL_SECONDS);
414
+ await publishChange(pageId);
415
+ },
416
+ async heartbeat(pageId, userId) {
417
+ const key = viewerHashKey(pageId);
418
+ const existingRaw = await redis.hGet(key, userId);
419
+ if (!existingRaw)
420
+ return false;
421
+ let existing;
422
+ try {
423
+ existing = JSON.parse(existingRaw);
424
+ }
425
+ catch {
426
+ return false;
427
+ }
428
+ existing.lastHeartbeatAt = Date.now();
429
+ await redis.hSet(key, userId, JSON.stringify(existing));
430
+ await redis.expire(key, VIEWER_HASH_TTL_SECONDS);
431
+ // A heartbeat doesn't change *who* is here, so no broadcast — it
432
+ // only refreshes the TTL.
433
+ return true;
434
+ },
435
+ async leave(pageId, userId) {
436
+ const removed = await redis.hDel(viewerHashKey(pageId), userId);
437
+ if (removed > 0) {
438
+ await publishChange(pageId);
439
+ }
440
+ },
441
+ async listViewers(pageId) {
442
+ const [hash, editing] = await Promise.all([readHash(pageId), editingUserIds(pageId)]);
443
+ const cutoff = Date.now() - VIEWER_TTL_MS;
444
+ const stale = [];
445
+ const out = [];
446
+ for (const [userId, entry] of hash) {
447
+ if (entry.lastHeartbeatAt < cutoff) {
448
+ stale.push(userId);
449
+ continue;
450
+ }
451
+ out.push({
452
+ userId: entry.userId,
453
+ username: entry.username,
454
+ displayName: entry.displayName,
455
+ avatarUrl: entry.avatarUrl,
456
+ isEditing: editing.has(entry.userId),
457
+ joinedAt: entry.joinedAt,
458
+ });
459
+ }
460
+ // Sweep stale fields so an abandoned page eventually empties its
461
+ // hash even with HEXPIRE unavailable.
462
+ if (stale.length > 0) {
463
+ try {
464
+ await redis.hDel(viewerHashKey(pageId), stale);
465
+ }
466
+ catch (err) {
467
+ debug('stale-field sweep failed for page %s: %s', pageId, err.message);
468
+ }
469
+ }
470
+ return out.sort((a, b) => a.joinedAt - b.joinedAt);
471
+ },
472
+ async markEditing(pageId, userId, socketId) {
473
+ // Record a fresh editing signal in the presence-owned editing
474
+ // hash, then publish so the editor immediately gets an `✏️` badge.
475
+ await writeEditingField(pageId, userId, socketId);
476
+ debug('markEditing page=%s user=%s socket=%s — publishing viewer-list change', pageId, userId, socketId);
477
+ await publishChange(pageId);
478
+ },
479
+ async refreshEditing(pageId, userId, socketId) {
480
+ // Keep-alive for a live editor connection. NO publish: the editing
481
+ // set is unchanged, so a refresh must not trigger a redundant
482
+ // viewer-list broadcast.
483
+ await writeEditingField(pageId, userId, socketId);
484
+ },
485
+ async unmarkEditing(pageId, userId, socketId) {
486
+ try {
487
+ await redis.hDel(editingHashKey(pageId), editingField(userId, socketId));
488
+ }
489
+ catch (err) {
490
+ console.warn(`[crowi:presence] unmarkEditing delete failed for page ${pageId}:`, err.message);
491
+ }
492
+ debug('unmarkEditing page=%s user=%s socket=%s — publishing viewer-list change', pageId, userId, socketId);
493
+ await publishChange(pageId);
494
+ },
495
+ onViewersChanged(listener) {
496
+ emitter.on('change', listener);
497
+ return () => emitter.off('change', listener);
498
+ },
499
+ async shutdown() {
500
+ emitter.removeAllListeners();
501
+ if (subscriber) {
502
+ try {
503
+ await subscriber.disconnect();
504
+ }
505
+ catch (err) {
506
+ debug('subscriber disconnect failed: %s', err.message);
507
+ }
508
+ subscriber = null;
509
+ }
510
+ },
511
+ };
512
+ }
513
+ /**
514
+ * Process-shared presence service. Lazy so the api can boot without an
515
+ * immediate Redis round-trip; the service materialises on the first
516
+ * `/presence` connect or the first collab `onAuthenticate`.
517
+ *
518
+ * Stores the in-flight promise (not the resolved service) so concurrent
519
+ * first callers race onto the same instance — one subscriber client,
520
+ * one EventEmitter.
521
+ */
522
+ let cachedService = null;
523
+ function getPresenceService(crowi) {
524
+ if (cachedService)
525
+ return cachedService;
526
+ // `crowi.redis` is typed `any` on the Crowi class; narrow it to the
527
+ // structural client surface (or null) the service expects.
528
+ const redis = crowi.redis ?? null;
529
+ cachedService = createPresenceService(redis);
530
+ return cachedService;
531
+ }
532
+ function createPresenceCollabDeps(crowi) {
533
+ // socketId → { pageId, userId } for every live editor connection
534
+ // this process owns. Drives the periodic refresher below.
535
+ const liveEditors = new Map();
536
+ let refreshTimer = null;
537
+ // Lazily start the refresher on the first `markEditing`. `.unref()`
538
+ // so the timer never keeps the process alive on its own.
539
+ const ensureRefresher = () => {
540
+ if (refreshTimer !== null)
541
+ return;
542
+ refreshTimer = setInterval(() => {
543
+ void (async () => {
544
+ let service;
545
+ try {
546
+ service = await getPresenceService(crowi);
547
+ }
548
+ catch {
549
+ // Service not resolvable right now — skip this tick.
550
+ return;
551
+ }
552
+ // Snapshot the entries: a concurrent `unmarkEditing` may mutate
553
+ // `liveEditors` while the refresh awaits are in flight.
554
+ const entries = Array.from(liveEditors.entries());
555
+ await Promise.all(entries.map(([socketId, { pageId, userId }]) => service.refreshEditing(pageId, userId, socketId).catch((err) => {
556
+ debug('refreshEditing tick failed for socket %s: %s', socketId, err.message);
557
+ })));
558
+ })();
559
+ }, EDITING_REFRESH_MS);
560
+ refreshTimer.unref();
561
+ };
562
+ return {
563
+ async markEditing(pageId, userId, socketId) {
564
+ liveEditors.set(socketId, { pageId, userId });
565
+ ensureRefresher();
566
+ try {
567
+ const service = await getPresenceService(crowi);
568
+ await service.markEditing(pageId, userId, socketId);
569
+ }
570
+ catch (err) {
571
+ console.warn('[crowi:presence] collab markEditing wiring failed (non-blocking):', err.message);
572
+ }
573
+ },
574
+ async unmarkEditing(pageId, userId, socketId) {
575
+ liveEditors.delete(socketId);
576
+ try {
577
+ const service = await getPresenceService(crowi);
578
+ await service.unmarkEditing(pageId, userId, socketId);
579
+ }
580
+ catch (err) {
581
+ console.warn('[crowi:presence] collab unmarkEditing wiring failed (non-blocking):', err.message);
582
+ }
583
+ },
584
+ shutdown() {
585
+ if (refreshTimer !== null) {
586
+ clearInterval(refreshTimer);
587
+ refreshTimer = null;
588
+ }
589
+ liveEditors.clear();
590
+ },
591
+ };
592
+ }
593
+ /**
594
+ * Test helper — inject a pre-built service or reset to lazy. Pass a
595
+ * fake to exercise the `/presence` handler / collab wiring without
596
+ * Redis; pass `null` to clear the cache.
597
+ */
598
+ const _setPresenceServiceForTesting = (service) => {
599
+ cachedService = service == null ? null : Promise.resolve(service);
600
+ };
601
+ exports._setPresenceServiceForTesting = _setPresenceServiceForTesting;
602
+ //# sourceMappingURL=presence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presence.js","sourceRoot":"","sources":["../../src/service/presence.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export interface CustomError extends Error {
2
+ code?: number | string;
3
+ errors?: {
4
+ [key: string]: {
5
+ message: string;
6
+ [key: string]: any;
7
+ };
8
+ };
9
+ status?: number;
10
+ statusCode?: number;
11
+ stack?: string;
12
+ }
13
+ export declare function asCustomError(err: unknown): CustomError;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.asCustomError = asCustomError;
4
+ // エラーを安全に型変換するためのヘルパー関数
5
+ function asCustomError(err) {
6
+ if (err instanceof Error) {
7
+ return err;
8
+ }
9
+ // エラーでない場合は新しいエラーを作成
10
+ const customError = new Error(typeof err === 'string' ? err : 'Unknown error');
11
+ return customError;
12
+ }
13
+ //# sourceMappingURL=error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.js","sourceRoot":"","sources":["../../src/types/error.ts"],"names":[],"mappings":";;AAeA,sCAQC;AATD,wBAAwB;AACxB,SAAgB,aAAa,CAAC,GAAY;IACxC,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;QACzB,OAAO,GAAkB,CAAC;IAC5B,CAAC;IAED,qBAAqB;IACrB,MAAM,WAAW,GAAG,IAAI,KAAK,CAAC,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;IAC/E,OAAO,WAA0B,CAAC;AACpC,CAAC"}