@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,681 @@
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.USER_UNIQUE_COLLATION = void 0;
7
+ exports.tombstoneIdentity = tombstoneIdentity;
8
+ const mongoose_1 = require("mongoose");
9
+ const debug_1 = __importDefault(require("debug"));
10
+ const crypto_1 = __importDefault(require("crypto"));
11
+ const bcryptjs_1 = __importDefault(require("bcryptjs"));
12
+ const async_1 = __importDefault(require("async"));
13
+ const config_1 = require("../models/config");
14
+ const mail_token_1 = require("../util/mail-token");
15
+ const mongoose_paginate_1 = require("../util/mongoose-paginate");
16
+ const STATUS_REGISTERED = 1;
17
+ const STATUS_ACTIVE = 2;
18
+ const STATUS_SUSPENDED = 3;
19
+ const STATUS_DELETED = 4;
20
+ const STATUS_INVITED = 5;
21
+ /**
22
+ * Case-insensitive collation for the username / email unique indexes
23
+ * (feature-user-identity-uniqueness §b). `strength: 2` folds case (and
24
+ * accents) so `Sotarok` and `sotarok` collide, while the stored value keeps
25
+ * its original casing (display is verbatim). Kept as a module constant so the
26
+ * schema declaration and the migration's duplicate detection use the exact
27
+ * same locale/strength.
28
+ */
29
+ exports.USER_UNIQUE_COLLATION = { locale: 'en', strength: 2 };
30
+ /**
31
+ * Build the tombstone identity for a user being logically deleted
32
+ * (feature-migration-framework §Phase 5, tombstone approach — 2026-06-04).
33
+ *
34
+ * On STATUS_DELETED we discard the original username / email and replace them
35
+ * with per-id sentinels so the **plain** unique indexes (no
36
+ * `partialFilterExpression`, to stay portable to PostgreSQL) never collide a
37
+ * departed user against a living one, and so a living user can re-claim the
38
+ * freed name. The departed user shows as "deleted user" (Slack-style), so the
39
+ * original values are not preserved anywhere.
40
+ *
41
+ * `email` is `required` so it must always carry a value; `username` is
42
+ * `sparse`-indexed so an unset value would also be index-safe, but we set the
43
+ * tombstone there too for consistency (a deleted user reads back as
44
+ * `deleted-<id>` everywhere rather than sometimes blank).
45
+ */
46
+ function tombstoneIdentity(id) {
47
+ const suffix = id.toString();
48
+ return { username: `deleted-${suffix}`, email: `deleted-${suffix}@deleted.invalid` };
49
+ }
50
+ const LANG_EN = 'en';
51
+ const LANG_JA = 'ja';
52
+ // Legacy regional variants ('en-US' / 'en-GB') were retired; only 'en' / 'ja'
53
+ // remain. Existing rows carrying a legacy value are coerced to 'en' by the
54
+ // `pre('validate')` hook below, so the tightened enum never rejects them.
55
+ const LEGACY_LANGS = ['en-US', 'en-GB'];
56
+ const THEME_SYSTEM = 'system';
57
+ const THEME_LIGHT = 'light';
58
+ const THEME_DARK = 'dark';
59
+ const PAGE_ITEMS = 50;
60
+ exports.default = (crowi) => {
61
+ const debug = (0, debug_1.default)('crowi:models:user');
62
+ const userEvent = crowi.event('User');
63
+ const userSchema = new mongoose_1.Schema({
64
+ userId: String,
65
+ image: String,
66
+ googleId: String,
67
+ githubId: String,
68
+ name: { type: String, index: true },
69
+ username: { type: String },
70
+ email: { type: String, required: true },
71
+ introduction: { type: String },
72
+ password: { type: String, select: false },
73
+ lang: {
74
+ type: String,
75
+ enum: Object.values(getLanguageLabels()),
76
+ default: LANG_EN,
77
+ },
78
+ theme: {
79
+ type: String,
80
+ enum: [THEME_SYSTEM, THEME_LIGHT, THEME_DARK],
81
+ default: THEME_SYSTEM,
82
+ },
83
+ status: { type: Number, required: true, default: STATUS_ACTIVE, index: true },
84
+ createdAt: { type: Date, default: Date.now },
85
+ admin: { type: Boolean, default: false, index: true },
86
+ emailConfirmedAt: { type: Date, default: null },
87
+ });
88
+ (0, mongoose_paginate_1.applyPaginatePlugin)(userSchema);
89
+ // feature-user-identity-uniqueness — DB-level uniqueness on username / email
90
+ // (the final defence; app-layer findOne pre-checks remain only for UX).
91
+ //
92
+ // Tombstone + plain unique (no partialFilterExpression) so this stays
93
+ // portable to a future PostgreSQL backend (citext / lower() + plain UNIQUE).
94
+ // STATUS_DELETED users are renamed to `deleted-<id>` (see tombstoneIdentity /
95
+ // statusDelete), so they never collide a living user and free their name.
96
+ //
97
+ // - email: required on every user → plain unique + case-insensitive collation.
98
+ // - username: `sparse` so the INVITED rows created without a username
99
+ // (createUsersByInvitation sets no `username` field) stay out of the index
100
+ // and don't collide on a missing value; collation folds case like email.
101
+ //
102
+ // autoIndex is ON (mongoose default) so a fresh install builds these on boot;
103
+ // the `user-unique-prepare` preflight migration dedups + tombstones existing
104
+ // data so the build never hits E11000 on an in-place v1→v2 upgrade.
105
+ userSchema.index({ email: 1 }, { unique: true, collation: exports.USER_UNIQUE_COLLATION });
106
+ userSchema.index({ username: 1 }, { unique: true, sparse: true, collation: exports.USER_UNIQUE_COLLATION });
107
+ // `onActivated` is async but `emit('activated', ...)` (a synchronous
108
+ // EventEmitter dispatch) does not await it. Track the returned promise so
109
+ // the user-page creation it kicks off — which re-fires page events and
110
+ // fans out to backlink / watch / mention — can be drained by the test
111
+ // harness before disconnect. Production never drains, so this only adds
112
+ // the side-effect to the in-flight set.
113
+ //
114
+ // `onActivated` swallows errors only inside `createUserPage`; its own
115
+ // `findPage()` / `rename()` awaits are not caught, so a rejection there
116
+ // would surface as an unhandled rejection. Attach `.catch(debug)` here so
117
+ // the tracked promise can never reject — symmetric with the other
118
+ // fire-and-forget call sites.
119
+ userEvent.on('activated', (user) => {
120
+ crowi.trackSideEffect(Promise.resolve(userEvent.onActivated(user)).catch((err) => {
121
+ debug('userEvent activated handler failed', err);
122
+ }));
123
+ });
124
+ function decideUserStatusOnRegistration() {
125
+ const Config = crowi.model('Config');
126
+ const config = crowi.getConfig();
127
+ if (!config.crowi) {
128
+ return STATUS_ACTIVE; // is this ok?
129
+ }
130
+ // status decided depends on registrationMode
131
+ switch (config.crowi['security:registrationMode']) {
132
+ case Config.SECURITY_REGISTRATION_MODE_OPEN:
133
+ return STATUS_ACTIVE;
134
+ case Config.SECURITY_REGISTRATION_MODE_RESTRICTED:
135
+ case Config.SECURITY_REGISTRATION_MODE_CLOSED: // 一応
136
+ return STATUS_REGISTERED;
137
+ default:
138
+ return STATUS_ACTIVE; // どっちにすんのがいいんだろうな
139
+ }
140
+ }
141
+ function generateRandomTempPassword() {
142
+ const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!=-_';
143
+ let password = '';
144
+ const len = 12;
145
+ for (let i = 0; i < len; i++) {
146
+ const randomPoz = Math.floor(Math.random() * chars.length);
147
+ password += chars.substring(randomPoz, randomPoz + 1);
148
+ }
149
+ return password;
150
+ }
151
+ /**
152
+ * Generate password hash using SHA-256 (legacy algorithm)
153
+ * This is kept for backward compatibility with existing passwords
154
+ */
155
+ function generatePasswordLegacy(password) {
156
+ const hasher = crypto_1.default.createHash('sha256');
157
+ hasher.update(crowi.env.PASSWORD_SEED + password);
158
+ return hasher.digest('hex');
159
+ }
160
+ /**
161
+ * Generate password hash using bcrypt (recommended)
162
+ * Bcrypt hashes start with $2a$ or $2b$ prefix
163
+ */
164
+ function generatePasswordHash(password) {
165
+ const saltRounds = 10;
166
+ return bcryptjs_1.default.hashSync(password, saltRounds);
167
+ }
168
+ /**
169
+ * Check if a hash is a bcrypt hash
170
+ * Bcrypt hashes start with $2a$ or $2b$ prefix
171
+ */
172
+ function isBcryptHash(hash) {
173
+ return hash && (hash.startsWith('$2a$') || hash.startsWith('$2b$'));
174
+ }
175
+ function getLanguageLabels() {
176
+ const lang = {
177
+ LANG_EN,
178
+ LANG_JA,
179
+ };
180
+ return lang;
181
+ }
182
+ // Coerce a legacy regional `lang` ('en-US' / 'en-GB') to 'en' before
183
+ // validation so saving a doc loaded from a pre-existing row never trips the
184
+ // tightened ['en','ja'] enum. Self-healing: the row is normalised on its
185
+ // next save, no separate data migration required.
186
+ userSchema.pre('validate', function (next) {
187
+ if (this.lang && LEGACY_LANGS.includes(this.lang)) {
188
+ this.lang = LANG_EN;
189
+ }
190
+ next();
191
+ });
192
+ userSchema.methods.isPasswordSet = function () {
193
+ if (this.password) {
194
+ return true;
195
+ }
196
+ return false;
197
+ };
198
+ userSchema.methods.isPasswordValid = function (password) {
199
+ debug('Password check - stored hash format:', isBcryptHash(this.password) ? 'bcrypt' : 'legacy SHA-256');
200
+ // Check if stored password is a bcrypt hash
201
+ if (isBcryptHash(this.password)) {
202
+ return bcryptjs_1.default.compareSync(password, this.password);
203
+ }
204
+ // Fall back to legacy SHA-256 verification for backward compatibility
205
+ const inputHash = generatePasswordLegacy(password);
206
+ debug('Password check - stored:', this.password);
207
+ debug('Password check - input hash (legacy):', inputHash);
208
+ debug('Password check - PASSWORD_SEED exists:', !!crowi.env.PASSWORD_SEED);
209
+ return this.password == inputHash;
210
+ };
211
+ userSchema.methods.setPassword = function (password) {
212
+ // Always use bcrypt for new passwords
213
+ this.password = generatePasswordHash(password);
214
+ debug('Password set using bcrypt');
215
+ return this;
216
+ };
217
+ userSchema.methods.isEmailSet = function () {
218
+ if (this.email) {
219
+ return true;
220
+ }
221
+ return false;
222
+ };
223
+ // mongoose 7 dropped the callback form of Document#save(). These public
224
+ // model methods keep their `(err, userData)` callback signature for the
225
+ // handler call sites; only the internal save is switched to the promise
226
+ // form, with this bridge forwarding resolution/rejection to the callback.
227
+ // `doc` is typed by the schema-method `this`, which mongoose 8 hydrates to
228
+ // a richer type than the bare `UserDocument`, so accept any saveable doc.
229
+ function bridgeSave(saving, fallback, callback) {
230
+ saving.then((userData) => callback(null, userData),
231
+ // On a save failure there is no saved document; the legacy callback
232
+ // form also surfaced the in-memory doc, so forward it as the error case.
233
+ (err) => callback(err, fallback));
234
+ }
235
+ userSchema.methods.updatePassword = function (password, callback) {
236
+ this.setPassword(password);
237
+ bridgeSave(this.save(), this, callback);
238
+ };
239
+ userSchema.methods.updateImage = function (image, callback) {
240
+ this.image = image;
241
+ bridgeSave(this.save(), this, callback);
242
+ };
243
+ userSchema.methods.updateEmail = function (email) {
244
+ this.email = email;
245
+ return this.save();
246
+ };
247
+ userSchema.methods.updateNameAndEmail = function (name, email) {
248
+ this.name = name;
249
+ this.email = email;
250
+ return this.save();
251
+ };
252
+ userSchema.methods.deleteImage = function (callback) {
253
+ return this.updateImage(null, callback);
254
+ };
255
+ userSchema.methods.updateGoogleId = function (googleId) {
256
+ this.googleId = googleId;
257
+ return this.save();
258
+ };
259
+ userSchema.methods.deleteGoogleId = function () {
260
+ return this.updateGoogleId(null);
261
+ };
262
+ userSchema.methods.updateGitHubId = function (githubId) {
263
+ this.githubId = githubId;
264
+ return this.save();
265
+ };
266
+ userSchema.methods.deleteGitHubId = function () {
267
+ return this.updateGitHubId(null);
268
+ };
269
+ userSchema.methods.countValidThirdPartyIds = function () {
270
+ const config = crowi.getConfig();
271
+ const googleId = (0, config_1.googleLoginEnabled)(config) && this.googleId;
272
+ const githubId = (0, config_1.githubLoginEnabled)(config) && this.githubId;
273
+ const validIds = [googleId, githubId].filter(Boolean);
274
+ return validIds.length;
275
+ };
276
+ userSchema.methods.hasValidThirdPartyId = function () {
277
+ return this.countValidThirdPartyIds() > 0;
278
+ };
279
+ userSchema.methods.canDisconnectThirdPartyId = function () {
280
+ const config = crowi.getConfig();
281
+ return !(0, config_1.isDisabledPasswordAuth)(config) || this.countValidThirdPartyIds() > 1;
282
+ };
283
+ userSchema.methods.activateInvitedUser = function (username, name, password, callback) {
284
+ this.setPassword(password);
285
+ this.name = name;
286
+ this.username = username;
287
+ this.status = STATUS_ACTIVE;
288
+ // Clicking the invite link proves control of the email address.
289
+ this.emailConfirmedAt = new Date();
290
+ this.save().then((userData) => {
291
+ userEvent.emit('activated', userData);
292
+ return callback(null, userData);
293
+ }, (err) => callback(err, this));
294
+ };
295
+ userSchema.methods.removeFromAdmin = function (callback) {
296
+ debug('Remove from admin', this);
297
+ this.admin = false;
298
+ bridgeSave(this.save(), this, callback);
299
+ };
300
+ userSchema.methods.makeAdmin = function (callback) {
301
+ debug('Admin', this);
302
+ this.admin = true;
303
+ bridgeSave(this.save(), this, callback);
304
+ };
305
+ userSchema.methods.statusActivate = function (callback) {
306
+ debug('Activate User', this);
307
+ this.status = STATUS_ACTIVE;
308
+ this.save().then((userData) => {
309
+ userEvent.emit('activated', userData);
310
+ return callback(null, userData);
311
+ }, (err) => callback(err, this));
312
+ };
313
+ userSchema.methods.statusSuspend = function (callback) {
314
+ debug('Suspend User', this);
315
+ this.status = STATUS_SUSPENDED;
316
+ if (this.email === undefined || this.email === null) {
317
+ // migrate old data
318
+ this.email = '-';
319
+ }
320
+ if (this.name === undefined || this.name === null) {
321
+ // migrate old data
322
+ this.name = '-' + Date.now();
323
+ }
324
+ if (this.username === undefined || this.username === null) {
325
+ // migrate old data
326
+ this.username = '-';
327
+ }
328
+ bridgeSave(this.save(), this, callback);
329
+ };
330
+ userSchema.methods.statusDelete = function (callback) {
331
+ debug('Delete User', this);
332
+ this.status = STATUS_DELETED;
333
+ this.password = '';
334
+ // Tombstone the identity: discard the original username / email and write
335
+ // per-id sentinels so the plain unique indexes free the name for re-use and
336
+ // never collide this departed user against a living one (Phase 5 tombstone
337
+ // approach). The former fixed `deleted@deleted` email collided across every
338
+ // deleted user under a plain unique index.
339
+ const tombstone = tombstoneIdentity(this._id);
340
+ this.username = tombstone.username;
341
+ this.email = tombstone.email;
342
+ this.googleId = null;
343
+ this.image = null;
344
+ bridgeSave(this.save(), this, callback);
345
+ };
346
+ userSchema.methods.populateSecrets = async function () {
347
+ return User.findById(this._id, '+password').exec();
348
+ };
349
+ userSchema.statics.getLanguageLabels = getLanguageLabels;
350
+ userSchema.statics.getUserStatusLabels = function () {
351
+ const userStatus = {};
352
+ userStatus[STATUS_REGISTERED] = '承認待ち';
353
+ userStatus[STATUS_ACTIVE] = 'Active';
354
+ userStatus[STATUS_SUSPENDED] = 'Suspended';
355
+ userStatus[STATUS_DELETED] = 'Deleted';
356
+ userStatus[STATUS_INVITED] = '招待済み';
357
+ return userStatus;
358
+ };
359
+ userSchema.statics.isEmailValid = function (email) {
360
+ const config = crowi.getConfig();
361
+ const whitelist = config.crowi['security:registrationWhiteList'];
362
+ if (!Array.isArray(whitelist) || whitelist.length === 0) {
363
+ return true;
364
+ }
365
+ const target = String(email ?? '')
366
+ .trim()
367
+ .toLowerCase();
368
+ if (target.length === 0)
369
+ return false;
370
+ // Each whitelist entry is matched as a literal (no regex), case-insensitively:
371
+ // - 'admin@example.com' → exact full-address match
372
+ // - '@example.com' → any local-part at that domain
373
+ // - 'example.com' → that domain or any subdomain of it
374
+ // This replaces the legacy `new RegExp(entry + '$')`, which left entries
375
+ // unanchored at the start (so 'example.com' also matched 'notexample.com'),
376
+ // unescaped (metachars like '.' matched any char; a bad entry threw), and
377
+ // case-sensitive.
378
+ return whitelist.some(function (allowedEmail) {
379
+ const entry = String(allowedEmail ?? '')
380
+ .trim()
381
+ .toLowerCase();
382
+ if (entry.length === 0)
383
+ return false;
384
+ if (entry.startsWith('@'))
385
+ return target.endsWith(entry);
386
+ if (entry.includes('@'))
387
+ return target === entry;
388
+ return target.endsWith(`@${entry}`) || target.endsWith(`.${entry}`);
389
+ });
390
+ };
391
+ userSchema.statics.isGitHubAccountValid = function (organizations) {
392
+ const config = crowi.getConfig();
393
+ const org = config.crowi['github:organization'];
394
+ const orgs = organizations || [];
395
+ return !org || orgs.includes(org);
396
+ };
397
+ userSchema.statics.findUsers = function (options, callback) {
398
+ const sort = options.sort || { status: 1, createdAt: 1 };
399
+ // mongoose 7 dropped Query#exec(callback); bridge the promise to the
400
+ // existing callback signature.
401
+ this.find()
402
+ .sort(sort)
403
+ .skip(options.skip || 0)
404
+ .limit(options.limit || 21)
405
+ .exec()
406
+ .then((userData) => callback(null, userData), (err) => callback(err, []));
407
+ };
408
+ userSchema.statics.findAllUsers = function (options = {}) {
409
+ const sort = options.sort || { createdAt: -1 };
410
+ let status = options.status || [STATUS_ACTIVE, STATUS_SUSPENDED];
411
+ const fields = options.fields;
412
+ if (!Array.isArray(status)) {
413
+ status = [status];
414
+ }
415
+ return User.find()
416
+ .or(status.map((s) => {
417
+ return { status: s };
418
+ }))
419
+ .select(fields)
420
+ .sort(sort)
421
+ .exec();
422
+ };
423
+ userSchema.statics.findUsersByIds = function (ids, options = {}) {
424
+ const sort = options.sort || { createdAt: -1 };
425
+ const status = options.status || STATUS_ACTIVE;
426
+ const fields = options.fields;
427
+ return User.find({ _id: { $in: ids }, status: status })
428
+ .select(fields)
429
+ .sort(sort)
430
+ .exec();
431
+ };
432
+ userSchema.statics.findAdmins = function (callback) {
433
+ this.find({ admin: true })
434
+ .exec()
435
+ .then((admins) => {
436
+ debug('Admins: ', admins);
437
+ callback(null, admins);
438
+ }, (err) => callback(err, []));
439
+ };
440
+ userSchema.statics.findUsersWithPagination = function (options, query, callback) {
441
+ const sort = options.sort || { status: 1, username: 1, createdAt: 1 };
442
+ // mongoose-paginate-v2 returns a promise; the callback form was removed.
443
+ // Result fields totalDocs/totalPages replace mongoose-paginate's
444
+ // total/pages — callers that need the legacy names absorb the rename.
445
+ this.paginate(query, {
446
+ page: options.page || 1,
447
+ limit: options.limit || PAGE_ITEMS,
448
+ sort,
449
+ // Drop secret fields at the Mongo layer instead of stripping them
450
+ // client-side via toUserPublic. Saves bandwidth between Mongo and
451
+ // Node and ensures no admin handler accidentally leaks a hash.
452
+ select: '-password -googleId -githubId',
453
+ }).then((result) => callback(null, result), (err) => {
454
+ debug('Error on pagination:', err);
455
+ return callback(err, null);
456
+ });
457
+ };
458
+ userSchema.statics.findUsersByPartOfEmail = function (emailPart, options) {
459
+ const status = options.status || null;
460
+ const emailPartRegExp = new RegExp(emailPart.replace(/[-/\\^$*+?.()|[\]{}]/g, '\\$&'));
461
+ const query = User.find({ email: emailPartRegExp });
462
+ if (status) {
463
+ query.and({ status });
464
+ }
465
+ return query.limit(PAGE_ITEMS + 1).exec();
466
+ };
467
+ userSchema.statics.findUserByUsername = function (username) {
468
+ return User.findOne({ username }).exec();
469
+ };
470
+ userSchema.statics.findUserByGoogleId = function (googleId) {
471
+ return User.findOne({ googleId }).exec();
472
+ };
473
+ userSchema.statics.findUserByGitHubId = function (githubId) {
474
+ return User.findOne({ githubId }).exec();
475
+ };
476
+ userSchema.statics.findUserByEmail = function (email) {
477
+ return User.findOne({ email }).exec();
478
+ };
479
+ userSchema.statics.findUserByEmailAndPassword = async function (email, password) {
480
+ // First, try to find user by email and legacy SHA-256 hash (for backward compatibility)
481
+ const hashedPasswordLegacy = generatePasswordLegacy(password);
482
+ let user = await User.findOne({ email, password: hashedPasswordLegacy }).select('+password').exec();
483
+ if (user) {
484
+ debug('User found with legacy SHA-256 password');
485
+ return user;
486
+ }
487
+ // If not found, find user by email and verify bcrypt password
488
+ user = await User.findOne({ email }).select('+password').exec();
489
+ if (user && user.password && isBcryptHash(user.password)) {
490
+ const isValid = bcryptjs_1.default.compareSync(password, user.password);
491
+ if (isValid) {
492
+ debug('User found with bcrypt password');
493
+ return user;
494
+ }
495
+ }
496
+ return null;
497
+ };
498
+ userSchema.statics.isRegisterableUsername = async function (username, callback) {
499
+ const userData = await User.findOne({ username });
500
+ if (userData) {
501
+ return callback(false);
502
+ }
503
+ return callback(true);
504
+ };
505
+ userSchema.statics.isRegisterable = async function (email, username, callback) {
506
+ let emailUsable = true;
507
+ let usernameUsable = true;
508
+ let userData = null;
509
+ // username check
510
+ userData = await User.findOne({ username });
511
+ if (userData) {
512
+ usernameUsable = false;
513
+ }
514
+ // email check
515
+ userData = await User.findOne({ email });
516
+ if (userData) {
517
+ emailUsable = false;
518
+ }
519
+ if (!emailUsable || !usernameUsable) {
520
+ return callback(false, { email: emailUsable, username: usernameUsable });
521
+ }
522
+ return callback(true, {});
523
+ };
524
+ userSchema.statics.removeCompletelyById = function (id, callback) {
525
+ // mongoose 7 dropped findById(cb) and Document#remove(); use the promise
526
+ // form + deleteOne(). The public (err, 1|null) callback is preserved.
527
+ User.findById(id)
528
+ .then((userData) => {
529
+ if (!userData) {
530
+ return callback(null, null);
531
+ }
532
+ debug('Removing user:', userData);
533
+ // 物理削除可能なのは、招待中ユーザーのみ
534
+ // 利用を一度開始したユーザーは論理削除のみ可能
535
+ if (userData.status !== STATUS_INVITED) {
536
+ return callback(new Error('Cannot remove completely the user whoes status is not INVITED'), null);
537
+ }
538
+ return userData.deleteOne().then(() => callback(null, 1), (err) => callback(err, null));
539
+ })
540
+ .catch((err) => callback(err, null));
541
+ };
542
+ userSchema.statics.resetPasswordByRandomString = async function (id) {
543
+ const userData = await User.findById(id);
544
+ if (!userData) {
545
+ throw new Error('User not found');
546
+ }
547
+ // is updatable check
548
+ // if (userData.isUp
549
+ const newPassword = generateRandomTempPassword();
550
+ userData.setPassword(newPassword);
551
+ const user = await userData.save();
552
+ return { user, newPassword };
553
+ };
554
+ userSchema.statics.createUsersByInvitation = function (emailList, toSendEmail, callback) {
555
+ const createdUserList = [];
556
+ const config = crowi.getConfig();
557
+ const mailer = crowi.getMailer();
558
+ if (!Array.isArray(emailList)) {
559
+ debug('emailList is not array');
560
+ }
561
+ async_1.default.each(emailList, function (email, next) {
562
+ const newUser = new User();
563
+ let password;
564
+ email = email.trim();
565
+ // email check
566
+ // TODO: 削除済みはチェック対象から外そう〜
567
+ // mongoose 7 dropped the callback forms of findOne()/save(); use
568
+ // promises inside the async.each iteratee, still calling next().
569
+ User.findOne({ email })
570
+ .then((user) => {
571
+ // The user is exists
572
+ if (user) {
573
+ createdUserList.push({ email, password: null, user: null });
574
+ return next();
575
+ }
576
+ password = Math.random().toString(36).slice(-16);
577
+ newUser.email = email;
578
+ newUser.setPassword(password);
579
+ newUser.createdAt = Date.now();
580
+ newUser.status = STATUS_INVITED;
581
+ return newUser.save().then((saved) => {
582
+ createdUserList.push({ email, password, user: saved });
583
+ debug('saved!', email);
584
+ next();
585
+ }, () => {
586
+ createdUserList.push({ email, password: null, user: null });
587
+ debug('save failed!! ', email);
588
+ next();
589
+ });
590
+ })
591
+ .catch(() => {
592
+ createdUserList.push({ email, password: null, user: null });
593
+ debug('save failed!! ', email);
594
+ next();
595
+ });
596
+ }, function (err) {
597
+ if (err) {
598
+ debug('error occured while iterate email list');
599
+ }
600
+ if (toSendEmail) {
601
+ const mailTokenUtil = (0, mail_token_1.createMailTokenUtil)();
602
+ const brand = mailer.brandVars();
603
+ // Absolute base for the invite link (CLIENT_URL).
604
+ const baseUrl = crowi.getBaseUrl() || '';
605
+ async_1.default.each(createdUserList, function (item, next) {
606
+ // Skip rows that already existed or failed to save.
607
+ if (!item.user) {
608
+ return next();
609
+ }
610
+ // Token-based invite link — no plaintext password is ever
611
+ // emailed; the invitee sets their own credentials on accept.
612
+ const { token } = mailTokenUtil.signMailToken({
613
+ purpose: 'invite',
614
+ userId: item.user._id.toString(),
615
+ email: item.email,
616
+ });
617
+ const inviteUrl = `${baseUrl}/invite/accept?token=${token}`;
618
+ mailer
619
+ .send({
620
+ to: item.email,
621
+ htmlTemplate: 'invite',
622
+ vars: { ...brand, inviteUrl, email: item.email },
623
+ })
624
+ // A send failure must not abort user creation — log and
625
+ // continue so the remaining invitations still go out.
626
+ .then(() => debug('completed to send invitation to', item.email))
627
+ .catch((err) => debug('failed to send invitation email: ', err))
628
+ .finally(() => next());
629
+ }, function (err) {
630
+ debug('Sending invitation email completed.', err);
631
+ });
632
+ }
633
+ debug('createdUserList!!! ', createdUserList);
634
+ return callback(null, createdUserList);
635
+ });
636
+ };
637
+ userSchema.statics.createUserByEmailAndPassword = function (name, username, email, password, lang, callback) {
638
+ const newUser = new User();
639
+ newUser.name = name;
640
+ newUser.username = username;
641
+ newUser.email = email;
642
+ newUser.setPassword(password);
643
+ newUser.lang = lang;
644
+ newUser.createdAt = Date.now();
645
+ newUser.status = decideUserStatusOnRegistration();
646
+ // mongoose 7 dropped Document#save(callback); bridge the promise.
647
+ newUser.save().then((userData) => {
648
+ if (userData.status == STATUS_ACTIVE) {
649
+ userEvent.emit('activated', userData);
650
+ }
651
+ return callback(null, userData);
652
+ }, (err) => callback(err, null));
653
+ };
654
+ userSchema.statics.createUserPictureFilePath = function (user, ext) {
655
+ ext = '.' + ext;
656
+ return 'user/' + user._id + ext;
657
+ };
658
+ userSchema.statics.getUsernameByPath = function (path) {
659
+ let username = null;
660
+ let m;
661
+ if ((m = path.match(/^\/user\/([^/]+)\/?/))) {
662
+ username = m[1];
663
+ }
664
+ return username;
665
+ };
666
+ const User = (0, mongoose_1.model)('User', userSchema);
667
+ // 静的プロパティをスキーマではなくモデルに直接割り当て
668
+ User.STATUS_REGISTERED = STATUS_REGISTERED;
669
+ User.STATUS_ACTIVE = STATUS_ACTIVE;
670
+ User.STATUS_SUSPENDED = STATUS_SUSPENDED;
671
+ User.STATUS_DELETED = STATUS_DELETED;
672
+ User.STATUS_INVITED = STATUS_INVITED;
673
+ User.PAGE_ITEMS = PAGE_ITEMS;
674
+ User.LANG_EN = LANG_EN;
675
+ User.LANG_JA = LANG_JA;
676
+ User.THEME_SYSTEM = THEME_SYSTEM;
677
+ User.THEME_LIGHT = THEME_LIGHT;
678
+ User.THEME_DARK = THEME_DARK;
679
+ return User;
680
+ };
681
+ //# sourceMappingURL=user.js.map