@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,79 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.pageStatusDefault = void 0;
4
+ const page_1 = require("../../models/page");
5
+ const types_1 = require("../types");
6
+ /**
7
+ * RFC-0008 §10.1 — `page-status-default` (boot layer).
8
+ *
9
+ * Ported from the former standalone `runPageStatusMigration`
10
+ * (`src/util/page-status-migration.ts`). RFC-0004 introduced a first-class
11
+ * `Page.status` field; pages created before it read back as `null`. This
12
+ * boot migration backfills `status='published'` onto every such legacy row.
13
+ *
14
+ * Why: `Page.isPublished()` already treats `null` as published for
15
+ * back-compat, but the query-level `$or` filters and the collab draft gate
16
+ * are clearer — and future-proof against a stricter `required: true` — when
17
+ * every row carries an explicit value.
18
+ *
19
+ * Behaviour preserved exactly from the old util:
20
+ * - `{ status: null }` matches both an explicit `null` and a missing field
21
+ * in MongoDB query semantics, so a single condition covers every legacy
22
+ * shape.
23
+ * - Idempotent: the filter only matches rows still unset, so a second run
24
+ * touches nothing.
25
+ * - Pages already `published` / `draft` / `deleted` / `deprecated` / `wip`
26
+ * are left exactly as they are — in particular this never rewrites a
27
+ * `draft` back to `published`, which would violate the one-way
28
+ * transition rule.
29
+ */
30
+ exports.pageStatusDefault = (0, types_1.defineMigration)({
31
+ id: 'page-status-default',
32
+ fromVersion: '1.x',
33
+ toVersion: '2.0',
34
+ layer: 'boot',
35
+ description: 'Backfill page.status (RFC-0004)',
36
+ /**
37
+ * Cheap, index-backed probe: `Page.status` is declared `index: true`
38
+ * (models/page.ts), so a single `findOne({ status: null })` lookup is
39
+ * covered by that index and never scans the collection. Pending iff at
40
+ * least one legacy page is still missing a status.
41
+ */
42
+ isPending: async (ctx) => {
43
+ const Page = ctx.crowi.model('Page');
44
+ const legacy = await Page.findOne({ status: null }).select('_id').lean().exec();
45
+ return legacy != null;
46
+ },
47
+ /**
48
+ * Optional `plan` detail: count the remaining legacy rows. Not called at
49
+ * boot — only `isPending` runs there.
50
+ */
51
+ detect: async (ctx) => {
52
+ const Page = ctx.crowi.model('Page');
53
+ const remaining = await Page.countDocuments({ status: null }).exec();
54
+ return {
55
+ summary: `${remaining} legacy page row(s) without status`,
56
+ counts: { remaining },
57
+ };
58
+ },
59
+ stages: [
60
+ {
61
+ name: 'backfill-status',
62
+ fn: async (ctx) => {
63
+ if (ctx.dryRun) {
64
+ return { name: 'backfill-status', transformed: 0 };
65
+ }
66
+ const Page = ctx.crowi.model('Page');
67
+ const result = await Page.updateMany({ status: null }, { $set: { status: page_1.STATUS_PUBLISHED } });
68
+ // Mongoose's UpdateResult exposes `modifiedCount`; fall back to 0 for
69
+ // any driver shape that omits it.
70
+ const modified = result.modifiedCount ?? 0;
71
+ if (modified > 0) {
72
+ ctx.logger.info(`page-status-default: backfilled status='published' on ${modified} legacy page row(s)`);
73
+ }
74
+ return { name: 'backfill-status', transformed: modified };
75
+ },
76
+ },
77
+ ],
78
+ });
79
+ //# sourceMappingURL=page-status-default.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-status-default.js","sourceRoot":"","sources":["../../../src/migration/migrations/page-status-default.ts"],"names":[],"mappings":";;;AAAA,0CAAmD;AAEnD,oCAA2C;AAE3C;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACU,QAAA,iBAAiB,GAAG,IAAA,uBAAe,EAAC;IAC/C,EAAE,EAAE,qBAAqB;IACzB,WAAW,EAAE,KAAK;IAClB,SAAS,EAAE,KAAK;IAChB,KAAK,EAAE,MAAM;IACb,WAAW,EAAE,iCAAiC;IAE9C;;;;;OAKG;IACH,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QACvB,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACrC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;QAChF,OAAO,MAAM,IAAI,IAAI,CAAC;IACxB,CAAC;IAED;;;OAGG;IACH,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QACpB,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACrC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACrE,OAAO;YACL,OAAO,EAAE,GAAG,SAAS,oCAAoC;YACzD,MAAM,EAAE,EAAE,SAAS,EAAE;SACtB,CAAC;IACJ,CAAC;IAED,MAAM,EAAE;QACN;YACE,IAAI,EAAE,iBAAiB;YACvB,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;gBAChB,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;oBACf,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;gBACrD,CAAC;gBACD,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBACrC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,uBAAgB,EAAE,EAAE,CAAC,CAAC;gBAC/F,sEAAsE;gBACtE,kCAAkC;gBAClC,MAAM,QAAQ,GAAI,MAAqC,CAAC,aAAa,IAAI,CAAC,CAAC;gBAC3E,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;oBACjB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,yDAAyD,QAAQ,qBAAqB,CAAC,CAAC;gBAC1G,CAAC;gBACD,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC;YAC5D,CAAC;SACF;KACF;CACF,CAAC,CAAC"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * RFC-0008 §10.3 step5 — `revisions-schema-unify`.
3
+ *
4
+ * Backfills `revision.type = 'snapshot'` onto v1.x revisions written before
5
+ * the field existed. `Revision.type` (`'snapshot' | 'incremental'`) was added
6
+ * by RFC-0003 and the read path already treats `undefined` as `'snapshot'`
7
+ * for back-compat. Phase 6 is therefore NOT a new-field addition — it is a
8
+ * one-time backfill of the existing field plus closing the write source so
9
+ * the value is always present going forward.
10
+ *
11
+ * Closing the write source: `models/revision.ts` now declares
12
+ * `type: { default: 'snapshot' }`, so every newly written revision — even on
13
+ * the HTTP API path (`Page.createPage` / `Page.updatePage`), which never
14
+ * passes an explicit `type` — lands with a concrete value. Without that
15
+ * default this migration would re-pend on every fresh revision and, as a boot
16
+ * migration, permanently block boot (the Phase 3 wikilink lesson).
17
+ *
18
+ * ── RFC LAYER DEVIATION ──────────────────────────────────────────────
19
+ * RFC-0008 §10.3 / Appendix A classify this as a `preflight` migration.
20
+ * We deliberately run it as `layer: 'boot'` instead: once the schema
21
+ * `default: 'snapshot'` closes the write source, the transform reduces to a
22
+ * single idempotent `updateMany({ type: null }, ...)` backfill — structurally
23
+ * identical to `page-status-default` (also boot). It is cheap, index-backed,
24
+ * and non-destructive, so boot-auto is the right fit. This deviation is noted
25
+ * in TODO.md as well.
26
+ * ─────────────────────────────────────────────────────────────────────
27
+ *
28
+ * Scope: `type` ONLY. `contributors` is left untouched (v1.x has no `savedBy`
29
+ * either; we do not fabricate collaboration history, and the wire format
30
+ * already omits an undefined `contributors`). `renderedAst` is the
31
+ * `rebuild renderer` task's responsibility per RFC-0008.
32
+ */
33
+ export declare const revisionsSchemaUnify: import("../types").MigrationDefinition;
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.revisionsSchemaUnify = void 0;
4
+ const types_1 = require("../types");
5
+ /**
6
+ * RFC-0008 §10.3 step5 — `revisions-schema-unify`.
7
+ *
8
+ * Backfills `revision.type = 'snapshot'` onto v1.x revisions written before
9
+ * the field existed. `Revision.type` (`'snapshot' | 'incremental'`) was added
10
+ * by RFC-0003 and the read path already treats `undefined` as `'snapshot'`
11
+ * for back-compat. Phase 6 is therefore NOT a new-field addition — it is a
12
+ * one-time backfill of the existing field plus closing the write source so
13
+ * the value is always present going forward.
14
+ *
15
+ * Closing the write source: `models/revision.ts` now declares
16
+ * `type: { default: 'snapshot' }`, so every newly written revision — even on
17
+ * the HTTP API path (`Page.createPage` / `Page.updatePage`), which never
18
+ * passes an explicit `type` — lands with a concrete value. Without that
19
+ * default this migration would re-pend on every fresh revision and, as a boot
20
+ * migration, permanently block boot (the Phase 3 wikilink lesson).
21
+ *
22
+ * ── RFC LAYER DEVIATION ──────────────────────────────────────────────
23
+ * RFC-0008 §10.3 / Appendix A classify this as a `preflight` migration.
24
+ * We deliberately run it as `layer: 'boot'` instead: once the schema
25
+ * `default: 'snapshot'` closes the write source, the transform reduces to a
26
+ * single idempotent `updateMany({ type: null }, ...)` backfill — structurally
27
+ * identical to `page-status-default` (also boot). It is cheap, index-backed,
28
+ * and non-destructive, so boot-auto is the right fit. This deviation is noted
29
+ * in TODO.md as well.
30
+ * ─────────────────────────────────────────────────────────────────────
31
+ *
32
+ * Scope: `type` ONLY. `contributors` is left untouched (v1.x has no `savedBy`
33
+ * either; we do not fabricate collaboration history, and the wire format
34
+ * already omits an undefined `contributors`). `renderedAst` is the
35
+ * `rebuild renderer` task's responsibility per RFC-0008.
36
+ */
37
+ exports.revisionsSchemaUnify = (0, types_1.defineMigration)({
38
+ id: 'revisions-schema-unify',
39
+ fromVersion: '2.0',
40
+ toVersion: '2.1',
41
+ layer: 'boot',
42
+ description: 'Unify revision schema (backfill type:snapshot)',
43
+ /**
44
+ * Cheap, index-backed probe: `Revision.type` is declared `index: true`
45
+ * (models/revision.ts), so `findOne({ type: null })` is covered by that
46
+ * index and never scans the collection. `{ type: null }` matches both a
47
+ * missing field and an explicit `null` in MongoDB query semantics, so a
48
+ * single condition covers every legacy shape. Pending iff at least one
49
+ * legacy revision is still missing a type. After apply (and because new
50
+ * revisions are filled by the schema `default`) this stays false — no
51
+ * permanent boot block.
52
+ */
53
+ isPending: async (ctx) => {
54
+ const Revision = ctx.crowi.model('Revision');
55
+ const legacy = await Revision.findOne({ type: null }).select('_id').lean().exec();
56
+ return legacy != null;
57
+ },
58
+ /**
59
+ * Optional `plan` detail: count the remaining legacy rows. Not called at
60
+ * boot — only `isPending` runs there. Index-backed count on `type`.
61
+ */
62
+ detect: async (ctx) => {
63
+ const Revision = ctx.crowi.model('Revision');
64
+ const remaining = await Revision.countDocuments({ type: null }).exec();
65
+ return {
66
+ summary: `${remaining} legacy revision row(s) without type`,
67
+ counts: { remaining },
68
+ };
69
+ },
70
+ stages: [
71
+ {
72
+ name: 'backfill-type',
73
+ fn: async (ctx) => {
74
+ if (ctx.dryRun) {
75
+ return { name: 'backfill-type', transformed: 0 };
76
+ }
77
+ const Revision = ctx.crowi.model('Revision');
78
+ const result = await Revision.updateMany({ type: null }, { $set: { type: 'snapshot' } });
79
+ const modified = result.modifiedCount ?? 0;
80
+ if (modified > 0) {
81
+ ctx.logger.info(`revisions-schema-unify: backfilled type='snapshot' on ${modified} legacy revision row(s)`);
82
+ }
83
+ return { name: 'backfill-type', transformed: modified };
84
+ },
85
+ },
86
+ ],
87
+ });
88
+ //# sourceMappingURL=revisions-schema-unify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"revisions-schema-unify.js","sourceRoot":"","sources":["../../../src/migration/migrations/revisions-schema-unify.ts"],"names":[],"mappings":";;;AAEA,oCAA2C;AAE3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACU,QAAA,oBAAoB,GAAG,IAAA,uBAAe,EAAC;IAClD,EAAE,EAAE,wBAAwB;IAC5B,WAAW,EAAE,KAAK;IAClB,SAAS,EAAE,KAAK;IAChB,KAAK,EAAE,MAAM;IACb,WAAW,EAAE,gDAAgD;IAE7D;;;;;;;;;OASG;IACH,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QACvB,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAkB,CAAC;QAC9D,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;QAClF,OAAO,MAAM,IAAI,IAAI,CAAC;IACxB,CAAC;IAED;;;OAGG;IACH,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QACpB,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAkB,CAAC;QAC9D,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACvE,OAAO;YACL,OAAO,EAAE,GAAG,SAAS,sCAAsC;YAC3D,MAAM,EAAE,EAAE,SAAS,EAAE;SACtB,CAAC;IACJ,CAAC;IAED,MAAM,EAAE;QACN;YACE,IAAI,EAAE,eAAe;YACrB,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;gBAChB,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;oBACf,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;gBACnD,CAAC;gBACD,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAkB,CAAC;gBAC9D,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;gBACzF,MAAM,QAAQ,GAAI,MAAqC,CAAC,aAAa,IAAI,CAAC,CAAC;gBAC3E,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;oBACjB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,yDAAyD,QAAQ,yBAAyB,CAAC,CAAC;gBAC9G,CAAC;gBACD,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC;YAC1D,CAAC;SACF;KACF;CACF,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export declare const userUniquePrepare: import("../types").MigrationDefinition;
@@ -0,0 +1,214 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.userUniquePrepare = void 0;
4
+ const dedup_users_1 = require("../../util/dedup-users");
5
+ const types_1 = require("../types");
6
+ /**
7
+ * RFC-0008 §11 / feature-user-identity-uniqueness — `user-unique-prepare`
8
+ * (preflight layer).
9
+ *
10
+ * Prepares the `users` collection so the plain unique indexes on
11
+ * `username` / `email` (declared in `models/user.ts`, built by autoIndex on
12
+ * boot) can build without E11000:
13
+ *
14
+ * 1. `dedup-username` — merge living users that collide on a
15
+ * case-insensitive username, reassigning every ownership reference to the
16
+ * survivor (uniqueness spec §c) and deleting the losers.
17
+ * 2. `dedup-email` — same for email.
18
+ * 3. `tombstone-deleted` — rename any STATUS_DELETED user whose original
19
+ * username/email would collide with a living user (or another deleted
20
+ * user) to the per-id `deleted-<id>` tombstone, matching the runtime
21
+ * `statusDelete` behaviour. Without this, a legacy deleted row that kept
22
+ * its original identity would collide a living user on index build.
23
+ *
24
+ * Index BUILDING is not done here (§9): the schema declares the indexes and
25
+ * Mongoose autoIndex builds them. This migration only prepares the data.
26
+ *
27
+ * `isPending` is conservative (§6.2): it reports pending whenever a residual
28
+ * collision exists that would fail an index build, and once the stages run it
29
+ * flips to false (no permanent boot block — same lesson as Phase 3). The
30
+ * comparison folds case (matching the index collation `{ locale:'en',
31
+ * strength:2 }`) via `$toLower` in the aggregation.
32
+ */
33
+ // STATUS_DELETED is `4` (models/user.ts). Re-declared locally rather than
34
+ // imported so this migration has no boot-order coupling to the User model
35
+ // factory; the value is part of the v1 data contract and does not change.
36
+ const STATUS_DELETED = 4;
37
+ /**
38
+ * Find living-user duplicate groups for `field` (`username` | `email`), folding
39
+ * case so `Sotarok` and `sotarok` collide (mirrors the index collation).
40
+ * STATUS_DELETED users are excluded — they are handled by `tombstone-deleted`,
41
+ * not merged. Rows missing the field (e.g. INVITED with no username) are
42
+ * excluded so the sparse index's exempt rows never form a group.
43
+ */
44
+ async function findLivingDuplicateGroups(ctx, field) {
45
+ const users = ctx.db.collection('users');
46
+ const rows = await users
47
+ .aggregate([
48
+ { $match: { status: { $ne: STATUS_DELETED }, [field]: { $type: 'string', $ne: '' } } },
49
+ { $group: { _id: { $toLower: `$${field}` }, ids: { $push: '$_id' }, n: { $sum: 1 } } },
50
+ { $match: { n: { $gt: 1 } } },
51
+ ])
52
+ .toArray();
53
+ return rows.map((r) => ({ key: String(r._id), ids: r.ids }));
54
+ }
55
+ /**
56
+ * Find STATUS_DELETED users whose stored username/email is NOT already the
57
+ * tombstone form for their id — i.e. legacy deleted rows that still hold a real
58
+ * identity which could collide a living user on index build. Returns their ids.
59
+ */
60
+ async function findUntombstonedDeleted(ctx) {
61
+ const users = ctx.db.collection('users');
62
+ const rows = await users.find({ status: STATUS_DELETED }).project({ _id: 1, username: 1, email: 1 }).toArray();
63
+ const out = [];
64
+ for (const row of rows) {
65
+ const id = row._id;
66
+ const expectedEmail = `deleted-${id.toString()}@deleted.invalid`;
67
+ const expectedUsername = `deleted-${id.toString()}`;
68
+ const email = row.email;
69
+ const username = row.username;
70
+ if (email !== expectedEmail || (username != null && username !== expectedUsername)) {
71
+ out.push(id);
72
+ }
73
+ }
74
+ return out;
75
+ }
76
+ /**
77
+ * True iff the not-yet-tombstoned deleted set collides (case-folded) with any
78
+ * living user — the only deleted-side condition that fails an index build. A
79
+ * deleted row whose identity is unique among living + other deleted rows would
80
+ * not fail the build, so we report pending only when a real collision exists
81
+ * (conservative but not over-eager).
82
+ */
83
+ async function deletedCollidesWithLiving(ctx) {
84
+ const users = ctx.db.collection('users');
85
+ // For each field, group by lowercased value across ALL users (living +
86
+ // deleted) and look for a group that mixes a deleted row with a living one.
87
+ for (const field of ['email', 'username']) {
88
+ const rows = await users
89
+ .aggregate([
90
+ { $match: { [field]: { $type: 'string', $ne: '' } } },
91
+ {
92
+ $group: {
93
+ _id: { $toLower: `$${field}` },
94
+ living: { $sum: { $cond: [{ $ne: ['$status', STATUS_DELETED] }, 1, 0] } },
95
+ deleted: { $sum: { $cond: [{ $eq: ['$status', STATUS_DELETED] }, 1, 0] } },
96
+ },
97
+ },
98
+ { $match: { living: { $gte: 1 }, deleted: { $gte: 1 } } },
99
+ { $limit: 1 },
100
+ ])
101
+ .toArray();
102
+ if (rows.length > 0)
103
+ return true;
104
+ }
105
+ return false;
106
+ }
107
+ exports.userUniquePrepare = (0, types_1.defineMigration)({
108
+ id: 'user-unique-prepare',
109
+ fromVersion: '1.x',
110
+ toVersion: '2.0',
111
+ layer: 'preflight',
112
+ description: 'Deduplicate users (unique index via autoIndex)',
113
+ /**
114
+ * Pending iff a plain unique index build would fail E11000. Two residual
115
+ * conditions (both folded to the index collation):
116
+ *
117
+ * - a living-vs-living duplicate on username or email, or
118
+ * - a not-yet-tombstoned DELETED user colliding with a living user.
119
+ *
120
+ * Conservative (§6.2): once `dedup-*` + `tombstone-deleted` run, every group
121
+ * is resolved and this returns false, so boot under preflight+block clears
122
+ * (no permanent block). Short-circuits at the first collision found.
123
+ */
124
+ isPending: async (ctx) => {
125
+ const usernameDupes = await findLivingDuplicateGroups(ctx, 'username');
126
+ if (usernameDupes.length > 0)
127
+ return true;
128
+ const emailDupes = await findLivingDuplicateGroups(ctx, 'email');
129
+ if (emailDupes.length > 0)
130
+ return true;
131
+ return deletedCollidesWithLiving(ctx);
132
+ },
133
+ /** Full-scan report for `plan`: duplicate group counts + tombstone targets. */
134
+ detect: async (ctx) => {
135
+ const usernameDupes = await findLivingDuplicateGroups(ctx, 'username');
136
+ const emailDupes = await findLivingDuplicateGroups(ctx, 'email');
137
+ const tombstoneTargets = await findUntombstonedDeleted(ctx);
138
+ return {
139
+ summary: `${usernameDupes.length} duplicate username group(s), ${emailDupes.length} duplicate email group(s), ${tombstoneTargets.length} deleted user(s) to tombstone`,
140
+ counts: {
141
+ usernameGroups: usernameDupes.length,
142
+ emailGroups: emailDupes.length,
143
+ tombstoneTargets: tombstoneTargets.length,
144
+ },
145
+ };
146
+ },
147
+ stages: [
148
+ {
149
+ name: 'dedup-username',
150
+ fn: async (ctx) => {
151
+ const groups = await findLivingDuplicateGroups(ctx, 'username');
152
+ const mergeGroups = [];
153
+ for (const group of groups) {
154
+ mergeGroups.push(await (0, dedup_users_1.chooseSurvivor)(ctx.db, group.ids));
155
+ }
156
+ ctx.progress.setTotal(mergeGroups.length);
157
+ const result = await (0, dedup_users_1.mergeUserGroups)(ctx.db, mergeGroups, { dryRun: ctx.dryRun, logger: ctx.logger });
158
+ if (!ctx.dryRun && result.usersRemoved > 0) {
159
+ ctx.logger.info(`user-unique-prepare: merged ${result.usersRemoved} duplicate-username user(s) across ${result.groupsMerged} group(s)`);
160
+ }
161
+ return {
162
+ name: 'dedup-username',
163
+ transformed: result.usersRemoved,
164
+ stats: { groups: result.groupsMerged, reassigned: result.reassigned, deletedConflicting: result.deletedConflicting },
165
+ };
166
+ },
167
+ },
168
+ {
169
+ name: 'dedup-email',
170
+ fn: async (ctx) => {
171
+ const groups = await findLivingDuplicateGroups(ctx, 'email');
172
+ const mergeGroups = [];
173
+ for (const group of groups) {
174
+ mergeGroups.push(await (0, dedup_users_1.chooseSurvivor)(ctx.db, group.ids));
175
+ }
176
+ ctx.progress.setTotal(mergeGroups.length);
177
+ const result = await (0, dedup_users_1.mergeUserGroups)(ctx.db, mergeGroups, { dryRun: ctx.dryRun, logger: ctx.logger });
178
+ if (!ctx.dryRun && result.usersRemoved > 0) {
179
+ ctx.logger.info(`user-unique-prepare: merged ${result.usersRemoved} duplicate-email user(s) across ${result.groupsMerged} group(s)`);
180
+ }
181
+ return {
182
+ name: 'dedup-email',
183
+ transformed: result.usersRemoved,
184
+ stats: { groups: result.groupsMerged, reassigned: result.reassigned, deletedConflicting: result.deletedConflicting },
185
+ };
186
+ },
187
+ },
188
+ {
189
+ name: 'tombstone-deleted',
190
+ fn: async (ctx) => {
191
+ const targets = await findUntombstonedDeleted(ctx);
192
+ if (ctx.dryRun) {
193
+ return { name: 'tombstone-deleted', transformed: 0, stats: { wouldTombstone: targets.length } };
194
+ }
195
+ const users = ctx.db.collection('users');
196
+ ctx.progress.setTotal(targets.length);
197
+ let tombstoned = 0;
198
+ for (const id of targets) {
199
+ // Same tombstone shape as runtime statusDelete / tombstoneIdentity.
200
+ await users.updateOne({ _id: id }, {
201
+ $set: { username: `deleted-${id.toString()}`, email: `deleted-${id.toString()}@deleted.invalid` },
202
+ });
203
+ tombstoned += 1;
204
+ ctx.progress.increment();
205
+ }
206
+ if (tombstoned > 0) {
207
+ ctx.logger.info(`user-unique-prepare: tombstoned ${tombstoned} legacy deleted user(s)`);
208
+ }
209
+ return { name: 'tombstone-deleted', transformed: tombstoned };
210
+ },
211
+ },
212
+ ],
213
+ });
214
+ //# sourceMappingURL=user-unique-prepare.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-unique-prepare.js","sourceRoot":"","sources":["../../../src/migration/migrations/user-unique-prepare.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * RFC-0008 §10.2 step 4 / §4.3.1 — `wikilink-format` (preflight layer).
3
+ *
4
+ * Ported from the former standalone `crowi-admin migrate --only=wikilink`
5
+ * (`packages/admin-cli/src/commands/migrate-wikilink.ts`). The migration
6
+ * rewrites v1 angle-bracket internal links (`</path>` / `</path|alias>`) to
7
+ * the v2 wikilink form (`[[path]]` / `[[path|alias]]`).
8
+ *
9
+ * Why this is a migration (not just a CLI command): the old command called
10
+ * `Revision.prepareRevision` + `Page.pushRevision` directly, bypassing
11
+ * `Page.updatePage`. That path never nulls `yjsState` / `yjsCheckpointAt`, so
12
+ * any user editing a rewritten page stayed pinned to a stale `Y.Doc` and could
13
+ * silently revert the migration on their next autosave (RFC-0008 §4.3.1
14
+ * "Motivating bug"). Routing every body rewrite through `ctx.rewritePageBody`
15
+ * (= the `updatePage`-equivalent path) repoints `currentRevision` and nulls the
16
+ * Yjs snapshot, so the next `onLoadDocument` rebuilds from the new body. As a
17
+ * preflight migration this is persistence-only (no live force-reload broadcast):
18
+ * preflight runs in a maintenance window with no connected editors (§4.3.1).
19
+ *
20
+ * The textual conversion logic below is moved verbatim from the old command so
21
+ * the rewrite output is byte-identical to the legacy migrator.
22
+ */
23
+ /**
24
+ * HTML5 element name set used to reject `</foo>` matches whose first path
25
+ * segment is actually a closing HTML tag. Source:
26
+ * https://developer.mozilla.org/en-US/docs/Web/HTML/Element — the full
27
+ * standard element list as of the HTML Living Standard.
28
+ *
29
+ * Kept as a top-level `Set<string>` so detection runs O(1) per match.
30
+ * `h1`..`h6` are listed explicitly because the regex captures `foo` for
31
+ * `</foo>` and we want both `</h1>` and `</h6>` to be rejected.
32
+ */
33
+ export declare const KNOWN_HTML_ELEMENTS: ReadonlySet<string>;
34
+ /**
35
+ * v1 angle-bracket internal link form. The capture group grabs the path-style
36
+ * payload (starts with `/`, no whitespace, no `<` / `>` / `|` other than the
37
+ * optional `|alias` segment). See `packages/api/src/util/linkDetector.ts` — v1
38
+ * used `<(/[^>]+)>` for the same primitive; we tighten it here to:
39
+ *
40
+ * - leading `/` to keep this strictly path-style (not arbitrary text)
41
+ * - no whitespace inside the **path** (Crowi page paths cannot contain spaces)
42
+ * - no `<` / `>` until the closing `>` and no `|` until the optional alias
43
+ * - optional `|alias` (free-form text, no `<` / `>`)
44
+ *
45
+ * Detection only — see `shouldRewriteWikilink` for the HTML-element filter.
46
+ */
47
+ export declare const WIKILINK_DETECTION_REGEX: RegExp;
48
+ /**
49
+ * True iff `body` contains at least one *genuine* legacy wikilink — i.e. a
50
+ * `</...>` match that survives the full `shouldRewriteWikilink` HTML-element
51
+ * filter. `</div>` and other close tags return false.
52
+ *
53
+ * `</` is used as a cheap prefilter so bodies that cannot possibly contain a
54
+ * legacy wikilink skip the regex entirely; the verdict itself is the full
55
+ * detection rule (not the substring), so a body whose only `</` occurrences are
56
+ * HTML close tags correctly reports false. Shared by `isPending` (current-
57
+ * revision verdict) and `collectRewritablePages` (full detect/stage scan) so
58
+ * the detection logic lives in one place.
59
+ */
60
+ export declare function bodyHasRewritableWikilink(body: string): boolean;
61
+ /**
62
+ * Decide whether a detected `</...>` match is a v1 wikilink we should rewrite,
63
+ * or a coincidental HTML close tag we must leave alone.
64
+ *
65
+ * The rule: reject when the **first path segment** (everything between the
66
+ * leading `/` and the next `/`, `#`, or end-of-payload) is a known HTML element
67
+ * name (lowercased). Crowi page paths are case-sensitive, so `</Section>` is a
68
+ * wikilink (page `Section`) while `</section>` is the HTML element.
69
+ */
70
+ export declare function shouldRewriteWikilink(innerPath: string): boolean;
71
+ /**
72
+ * Per-body detection result — `occurrences[].raw` preserves the original raw
73
+ * match (e.g. `</docs/api>`) so a dry-run report can print the exact textual
74
+ * substring being touched.
75
+ */
76
+ export interface WikilinkOccurrence {
77
+ raw: string;
78
+ path: string;
79
+ alias?: string;
80
+ }
81
+ /**
82
+ * Single-pass detect-and-rewrite. Returns the rewritten body together with the
83
+ * occurrence list so callers don't walk the regex twice. `body` is returned by
84
+ * reference when nothing changed, letting callers cheap-skip via
85
+ * `result.body === body`. Pure function — no side effects, no I/O.
86
+ */
87
+ export declare function rewriteAndDetect(body: string): {
88
+ body: string;
89
+ occurrences: WikilinkOccurrence[];
90
+ };
91
+ /**
92
+ * Convenience wrapper for tests / callers that only need the rewritten body.
93
+ * The migration hot path uses `rewriteAndDetect` to avoid walking the regex
94
+ * twice.
95
+ */
96
+ export declare function rewriteWikilinks(body: string): string;
97
+ export declare const wikilinkFormat: import("../types").MigrationDefinition;