@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,98 @@
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
+ const debug_1 = __importDefault(require("debug"));
7
+ const nodemailer_1 = __importDefault(require("nodemailer"));
8
+ const nodemailer_ses_transport_1 = __importDefault(require("nodemailer-ses-transport"));
9
+ const debug = (0, debug_1.default)('crowi:lib:mailer');
10
+ exports.default = (crowi) => {
11
+ 'use strict';
12
+ const config = crowi.getConfig();
13
+ const mailConfig = {};
14
+ let mailer = {};
15
+ function createSMTPClient(option) {
16
+ debug('createSMTPClient option', option);
17
+ if (!option) {
18
+ option = {
19
+ host: config.crowi['mail:smtpHost'],
20
+ port: config.crowi['mail:smtpPort'],
21
+ };
22
+ if (config.crowi['mail:smtpUser'] && config.crowi['mail:smtpPassword']) {
23
+ option.auth = {
24
+ user: config.crowi['mail:smtpUser'],
25
+ pass: config.crowi['mail:smtpPassword'],
26
+ };
27
+ }
28
+ if (option.port === 465) {
29
+ option.secure = true;
30
+ }
31
+ }
32
+ option.tls = { rejectUnauthorized: false };
33
+ const client = nodemailer_1.default.createTransport(option);
34
+ debug('mailer set up for SMTP', client);
35
+ return client;
36
+ }
37
+ function createSESClient(option) {
38
+ if (!option) {
39
+ option = {
40
+ accessKeyId: config.crowi['mail:aws:accessKeyId'],
41
+ secretAccessKey: config.crowi['mail:aws:secretAccessKey'],
42
+ };
43
+ }
44
+ const client = nodemailer_1.default.createTransport((0, nodemailer_ses_transport_1.default)(option));
45
+ debug('mailer set up for SES', client);
46
+ return client;
47
+ }
48
+ function initialize() {
49
+ if (!config.crowi || !config.crowi['mail:from']) {
50
+ mailer = undefined;
51
+ return;
52
+ }
53
+ if (config.crowi['mail:smtpHost'] && config.crowi['mail:smtpPort']) {
54
+ // SMTP 設定がある場合はそれを優先
55
+ mailer = createSMTPClient();
56
+ }
57
+ else if (config.crowi['mail:aws:accessKeyId'] && config.crowi['mail:aws:secretAccessKey']) {
58
+ // AWS 設定がある場合はSESを設定
59
+ mailer = createSESClient();
60
+ }
61
+ else {
62
+ mailer = undefined;
63
+ }
64
+ mailConfig.from = config.crowi['mail:from'];
65
+ mailConfig.subject = config.crowi['app:title'] + 'からのメール';
66
+ debug('mailer initialized');
67
+ }
68
+ function setupMailConfig(overrideConfig) {
69
+ const c = overrideConfig;
70
+ let mc = {};
71
+ mc = mailConfig;
72
+ mc.to = c.to;
73
+ mc.from = c.from || mailConfig.from;
74
+ mc.text = c.text;
75
+ mc.subject = c.subject || mailConfig.subject;
76
+ return mc;
77
+ }
78
+ function send(config, callback) {
79
+ if (mailer) {
80
+ // テンプレート処理をシンプルなテキスト代入に変更
81
+ // 将来的には別のメールテンプレートエンジンに置き換える必要があります
82
+ config.text = config.vars ? JSON.stringify(config.vars) : 'メール本文(テンプレートエンジン削除のため詳細は表示できません)';
83
+ return mailer.sendMail(setupMailConfig(config), callback);
84
+ }
85
+ else {
86
+ debug('Mailer is not completed to set up. Please set up SMTP or AWS setting.');
87
+ return callback(new Error('Mailer is not completed to set up. Please set up SMTP or AWS setting.'), null);
88
+ }
89
+ }
90
+ initialize();
91
+ return {
92
+ createSMTPClient: createSMTPClient,
93
+ createSESClient: createSESClient,
94
+ mailer: mailer,
95
+ send: send,
96
+ };
97
+ };
98
+ //# sourceMappingURL=mailer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mailer.js","sourceRoot":"","sources":["../../src/util/mailer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * feature-user-identity-uniqueness §d — map a MongoDB duplicate-key error
3
+ * (E11000) raised by the `users.username` / `users.email` unique indexes to a
4
+ * caller-facing error code.
5
+ *
6
+ * The unique indexes are the final defence: the write paths pre-check with a
7
+ * `findOne`, but a race between that check and the `save()` can still land two
8
+ * concurrent inserts/updates, in which case the second one fails with E11000.
9
+ * Without this mapping it would surface as a generic 500; with it the handler
10
+ * returns the same `USERNAME_TAKEN` / `EMAIL_TAKEN` it would have returned from
11
+ * the pre-check.
12
+ *
13
+ * Detection prefers `err.keyPattern` (the driver populates it with the index's
14
+ * key spec, e.g. `{ email: 1 }`), falling back to scanning the message for the
15
+ * index/key name when an older driver omits `keyPattern`.
16
+ */
17
+ import type { ErrorCode } from '@crowi/api-contract';
18
+ /** True iff `err` is a MongoDB duplicate-key (E11000) error. */
19
+ export declare function isDuplicateKeyError(err: unknown): boolean;
20
+ /**
21
+ * Map a duplicate-key error on the user identity indexes to `USERNAME_TAKEN` /
22
+ * `EMAIL_TAKEN`. Returns `null` when `err` is not an E11000 error, or is on a
23
+ * field this util doesn't own (so the caller can fall through to its generic
24
+ * 500 handling rather than mislabel an unrelated conflict).
25
+ */
26
+ export declare function mapDuplicateKeyError(err: unknown): ErrorCode | null;
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isDuplicateKeyError = isDuplicateKeyError;
4
+ exports.mapDuplicateKeyError = mapDuplicateKeyError;
5
+ /** Mongo duplicate-key errors carry `code === 11000`. */
6
+ const DUPLICATE_KEY_CODE = 11000;
7
+ const asMongoError = (err) => {
8
+ if (typeof err !== 'object' || err === null)
9
+ return null;
10
+ return err;
11
+ };
12
+ /** True iff `err` is a MongoDB duplicate-key (E11000) error. */
13
+ function isDuplicateKeyError(err) {
14
+ return asMongoError(err)?.code === DUPLICATE_KEY_CODE;
15
+ }
16
+ /**
17
+ * Map a duplicate-key error on the user identity indexes to `USERNAME_TAKEN` /
18
+ * `EMAIL_TAKEN`. Returns `null` when `err` is not an E11000 error, or is on a
19
+ * field this util doesn't own (so the caller can fall through to its generic
20
+ * 500 handling rather than mislabel an unrelated conflict).
21
+ */
22
+ function mapDuplicateKeyError(err) {
23
+ const mongoErr = asMongoError(err);
24
+ if (!mongoErr || mongoErr.code !== DUPLICATE_KEY_CODE)
25
+ return null;
26
+ // Preferred: the driver's structured key spec (`{ email: 1 }` etc.).
27
+ const keys = mongoErr.keyPattern ? Object.keys(mongoErr.keyPattern) : Object.keys(mongoErr.keyValue ?? {});
28
+ if (keys.includes('email'))
29
+ return 'EMAIL_TAKEN';
30
+ if (keys.includes('username'))
31
+ return 'USERNAME_TAKEN';
32
+ // Fallback: parse the index name out of the message
33
+ // (`... index: email_1 dup key: ...`).
34
+ const message = mongoErr.message ?? '';
35
+ if (/index:\s*email/i.test(message))
36
+ return 'EMAIL_TAKEN';
37
+ if (/index:\s*username/i.test(message))
38
+ return 'USERNAME_TAKEN';
39
+ return null;
40
+ }
41
+ //# sourceMappingURL=map-duplicate-key-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map-duplicate-key-error.js","sourceRoot":"","sources":["../../src/util/map-duplicate-key-error.ts"],"names":[],"mappings":";;AAkCA,kDAEC;AAQD,oDAgBC;AA1CD,yDAAyD;AACzD,MAAM,kBAAkB,GAAG,KAAK,CAAC;AASjC,MAAM,YAAY,GAAG,CAAC,GAAY,EAAiC,EAAE;IACnE,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACzD,OAAO,GAA6B,CAAC;AACvC,CAAC,CAAC;AAEF,gEAAgE;AAChE,SAAgB,mBAAmB,CAAC,GAAY;IAC9C,OAAO,YAAY,CAAC,GAAG,CAAC,EAAE,IAAI,KAAK,kBAAkB,CAAC;AACxD,CAAC;AAED;;;;;GAKG;AACH,SAAgB,oBAAoB,CAAC,GAAY;IAC/C,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,KAAK,kBAAkB;QAAE,OAAO,IAAI,CAAC;IAEnE,qEAAqE;IACrE,MAAM,IAAI,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;IAC3G,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,aAAa,CAAC;IACjD,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;QAAE,OAAO,gBAAgB,CAAC;IAEvD,oDAAoD;IACpD,uCAAuC;IACvC,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC;IACvC,IAAI,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,aAAa,CAAC;IAC1D,IAAI,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,gBAAgB,CAAC;IAEhE,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Apply the `mongoose-paginate-v2` plugin to a schema.
3
+ *
4
+ * mongoose-paginate-v2 types its default export as `(schema: Schema) => void`,
5
+ * which mongoose 8's generic `Schema.plugin()` does not accept directly; the
6
+ * plugin only augments the schema with `paginate`, so apply it against the
7
+ * schema's loosened base type. Centralized here so the cast + rationale live
8
+ * in one place rather than being repeated per model.
9
+ */
10
+ export declare function applyPaginatePlugin<TSchema>(schema: TSchema): void;
@@ -0,0 +1,23 @@
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.applyPaginatePlugin = applyPaginatePlugin;
7
+ const mongoose_paginate_v2_1 = __importDefault(require("mongoose-paginate-v2"));
8
+ /**
9
+ * Apply the `mongoose-paginate-v2` plugin to a schema.
10
+ *
11
+ * mongoose-paginate-v2 types its default export as `(schema: Schema) => void`,
12
+ * which mongoose 8's generic `Schema.plugin()` does not accept directly; the
13
+ * plugin only augments the schema with `paginate`, so apply it against the
14
+ * schema's loosened base type. Centralized here so the cast + rationale live
15
+ * in one place rather than being repeated per model.
16
+ */
17
+ function applyPaginatePlugin(schema) {
18
+ // Widen the model's concrete schema to the base `Schema` so mongoose 8's
19
+ // generic `plugin()` accepts mongoose-paginate-v2's loosely-typed export.
20
+ // (Centralizes the cast that each model previously repeated inline.)
21
+ schema.plugin(mongoose_paginate_v2_1.default);
22
+ }
23
+ //# sourceMappingURL=mongoose-paginate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mongoose-paginate.js","sourceRoot":"","sources":["../../src/util/mongoose-paginate.ts"],"names":[],"mappings":";;;;;AAYA,kDAKC;AAhBD,gFAAoD;AAEpD;;;;;;;;GAQG;AACH,SAAgB,mBAAmB,CAAU,MAAe;IAC1D,yEAAyE;IACzE,0EAA0E;IAC1E,qEAAqE;IACpE,MAA4B,CAAC,MAAM,CAAC,8BAAgB,CAAC,CAAC;AACzD,CAAC"}
@@ -0,0 +1,35 @@
1
+ import { type NotificationsTokenPayload } from '@crowi/api-contract';
2
+ /** Claims signed into a notifications token. */
3
+ export interface NotificationsTokenClaims {
4
+ /**
5
+ * The requesting user's `_id`. The `/notifications/<userId>` WS
6
+ * handshake rejects a token whose `selfUserId` does not match the
7
+ * URL path segment so one user can never subscribe to another's
8
+ * channel even with a valid token.
9
+ */
10
+ selfUserId: string;
11
+ }
12
+ export interface SignNotificationsTokenResult {
13
+ /** Compact JWT string presented by the browser on the WebSocket connect. */
14
+ token: string;
15
+ /** Absolute expiry timestamp; mirrors `exp * 1000` as a Date. */
16
+ expiresAt: Date;
17
+ }
18
+ /**
19
+ * Build a sign / verify pair bound to a freshly resolved secret. Each
20
+ * `createNotificationsTokenUtil()` call returns a new instance — the
21
+ * util's surface (sign / verify) is cheap (a single jsonwebtoken call)
22
+ * so memoising is unnecessary, and the previous cached-singleton
23
+ * implementation pinned the secret to whatever env state existed at the
24
+ * first call (a problem for test / boot ordering: a `WS_TOKEN_SECRET`
25
+ * set after first util construction would be ignored).
26
+ */
27
+ declare function buildNotificationsTokenUtil(): {
28
+ signNotificationsToken: (claims: NotificationsTokenClaims) => SignNotificationsTokenResult;
29
+ verifyNotificationsToken: (token: string) => NotificationsTokenPayload | null;
30
+ ttlSeconds: number;
31
+ issuer: string;
32
+ };
33
+ export type NotificationsTokenUtil = ReturnType<typeof buildNotificationsTokenUtil>;
34
+ export declare function createNotificationsTokenUtil(): NotificationsTokenUtil;
35
+ export {};
@@ -0,0 +1,140 @@
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.createNotificationsTokenUtil = createNotificationsTokenUtil;
7
+ const node_crypto_1 = __importDefault(require("node:crypto"));
8
+ const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
9
+ const api_contract_1 = require("@crowi/api-contract");
10
+ const debug_1 = __importDefault(require("debug"));
11
+ const debug = (0, debug_1.default)('crowi:util:notifications-token');
12
+ /**
13
+ * Issuer claim used to sign / verify notifications tokens.
14
+ *
15
+ * Distinct from the collab wsToken issuer (`'crowi-collab'`, see
16
+ * `util/ws-token.ts`), the presence token issuer (`'crowi-presence'`,
17
+ * see `util/presence-token.ts`), and the HTTP access/refresh token
18
+ * issuer (`'crowi'`). The three WebSocket issuers all share the same
19
+ * `WS_TOKEN_SECRET` key material but verify against different `iss`
20
+ * claims, so a leaked token for one channel is never replayable
21
+ * against the others — `/collab` carries write access to the Y.Doc,
22
+ * `/presence` is per-page viewer tracking, `/notifications` is the
23
+ * per-user invalidation channel.
24
+ */
25
+ const NOTIFICATIONS_TOKEN_ISSUER = 'crowi-notifications';
26
+ /**
27
+ * Lifetime of an issued notifications token. 60 seconds — short enough
28
+ * that a leaked token has minimal blast radius (the notifications
29
+ * channel only carries `{type:'changed'}` ticks, no notification data,
30
+ * so a hijacked subscription is a low-value target but the principle
31
+ * of least privilege still applies). The browser uses `expiresAt` to
32
+ * proactively re-fetch ~30s before expiry; the realistic refresh
33
+ * cadence becomes ~30s rather than the 5-minute presence cadence.
34
+ */
35
+ const NOTIFICATIONS_TOKEN_TTL_SECONDS = 60;
36
+ /**
37
+ * Tracks whether the "secret missing" warning has already been emitted,
38
+ * so it fires at most once per process regardless of how many
39
+ * `createNotificationsTokenUtil()` calls the handler / model layer makes.
40
+ */
41
+ let warnedMissingSecret = false;
42
+ /**
43
+ * Resolve the signing secret. Reads `WS_TOKEN_SECRET` per call so a test
44
+ * that mutates the env between imports / util constructions still picks
45
+ * up the latest value.
46
+ *
47
+ * The "secret missing" warning is emitted here (lazily, on first
48
+ * resolution) rather than at module-load time: this module is imported
49
+ * transitively before `app.ts` runs `dotenv.config()`, so a load-time
50
+ * `process.env` read fires a false warning even when `.env` defines
51
+ * `WS_TOKEN_SECRET`. `warnedMissingSecret` keeps it to once per process.
52
+ * Silenced under tests.
53
+ */
54
+ const resolveNotificationsTokenSecret = () => {
55
+ const fromEnv = process.env.WS_TOKEN_SECRET;
56
+ if (fromEnv && fromEnv.length > 0) {
57
+ debug('notifications token secret resolved from WS_TOKEN_SECRET');
58
+ return fromEnv;
59
+ }
60
+ if (!warnedMissingSecret && process.env.NODE_ENV !== 'test') {
61
+ warnedMissingSecret = true;
62
+ console.warn('[crowi] WS_TOKEN_SECRET is not set — notifications tokens will be signed with a random in-memory secret. ' +
63
+ 'Process restarts will invalidate outstanding notifications tokens, and multi-instance deployments ' +
64
+ 'will not be able to cross-verify them. Set WS_TOKEN_SECRET to a stable base64-encoded 32-byte ' +
65
+ 'value (`openssl rand -base64 32`) in production.');
66
+ }
67
+ return node_crypto_1.default.randomBytes(32).toString('base64');
68
+ };
69
+ /**
70
+ * Build a sign / verify pair bound to a freshly resolved secret. Each
71
+ * `createNotificationsTokenUtil()` call returns a new instance — the
72
+ * util's surface (sign / verify) is cheap (a single jsonwebtoken call)
73
+ * so memoising is unnecessary, and the previous cached-singleton
74
+ * implementation pinned the secret to whatever env state existed at the
75
+ * first call (a problem for test / boot ordering: a `WS_TOKEN_SECRET`
76
+ * set after first util construction would be ignored).
77
+ */
78
+ function buildNotificationsTokenUtil() {
79
+ const secret = resolveNotificationsTokenSecret();
80
+ /**
81
+ * Sign a notifications token for the given claims. Returns the
82
+ * compact JWT plus the absolute expiry; the handler serialises the
83
+ * timestamp into `NotificationsTokenResponseSchema.expiresAt`.
84
+ *
85
+ * A fresh `jti` (random UUID) is mixed into the payload so two
86
+ * tokens minted within the same second are byte-different. The
87
+ * browser uses the token string as a react `useEffect` dependency
88
+ * (it dials the WebSocket whenever the token changes) — without a
89
+ * `jti`, the iat/exp pair is identical and the dep stays stable, so
90
+ * a re-mint at the same second does not trigger the effect. The
91
+ * verifier ignores `jti`, keeping the token stateless.
92
+ */
93
+ function signNotificationsToken(claims) {
94
+ // Pin `iat` ourselves so the response's `expiresAt` is exactly the
95
+ // same instant as the JWT's `exp` claim (same rationale as the
96
+ // collab / presence token utils).
97
+ const iat = Math.floor(Date.now() / 1000);
98
+ const exp = iat + NOTIFICATIONS_TOKEN_TTL_SECONDS;
99
+ const jti = node_crypto_1.default.randomUUID();
100
+ const token = jsonwebtoken_1.default.sign({ ...claims, jti, iat, exp }, secret, {
101
+ issuer: NOTIFICATIONS_TOKEN_ISSUER,
102
+ algorithm: 'HS256',
103
+ });
104
+ return { token, expiresAt: new Date(exp * 1000) };
105
+ }
106
+ /**
107
+ * Verify a notifications token. Returns the validated payload, or
108
+ * `null` for any failure (expired, bad signature, wrong issuer,
109
+ * malformed claims). Callers must treat `null` as "reject the
110
+ * connection".
111
+ */
112
+ function verifyNotificationsToken(token) {
113
+ try {
114
+ const decoded = jsonwebtoken_1.default.verify(token, secret, {
115
+ issuer: NOTIFICATIONS_TOKEN_ISSUER,
116
+ algorithms: ['HS256'],
117
+ });
118
+ const parsed = api_contract_1.NotificationsTokenPayloadSchema.safeParse(decoded);
119
+ if (!parsed.success) {
120
+ debug('notifications token payload failed schema validation:', parsed.error.issues);
121
+ return null;
122
+ }
123
+ return parsed.data;
124
+ }
125
+ catch (err) {
126
+ debug('notifications token verification failed:', err.message);
127
+ return null;
128
+ }
129
+ }
130
+ return {
131
+ signNotificationsToken,
132
+ verifyNotificationsToken,
133
+ ttlSeconds: NOTIFICATIONS_TOKEN_TTL_SECONDS,
134
+ issuer: NOTIFICATIONS_TOKEN_ISSUER,
135
+ };
136
+ }
137
+ function createNotificationsTokenUtil() {
138
+ return buildNotificationsTokenUtil();
139
+ }
140
+ //# sourceMappingURL=notifications-token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notifications-token.js","sourceRoot":"","sources":["../../src/util/notifications-token.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type Crowi from '../crowi';
2
+ export declare function runOAuthClientSeed(crowi: Crowi): Promise<void>;
@@ -0,0 +1,48 @@
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.runOAuthClientSeed = runOAuthClientSeed;
7
+ const api_contract_1 = require("@crowi/api-contract");
8
+ const debug_1 = __importDefault(require("debug"));
9
+ const debug = (0, debug_1.default)('crowi:util:oauth-client-seed');
10
+ /**
11
+ * RFC-0010 Phase 3 — seed the first-party `crowi-cli` OAuth client.
12
+ *
13
+ * Idempotent boot step (PHASE3-Q2): `$setOnInsert` only writes on the very
14
+ * first run, so re-running boot — or upgrading an instance that already
15
+ * has the row — never clobbers an operator's later edits to the client.
16
+ * Modelled on the other boot-time init steps (it runs alongside the
17
+ * migration framework's `runBootMigrations`, but stays framework-external
18
+ * per RFC-0008 §12.6 — OAuth client seeding is a seed, not a migration).
19
+ *
20
+ * `crowi-cli` is a **public** client (no secret, PKCE-only). Its
21
+ * `redirectUris` list the loopback hosts; the per-login ephemeral port is
22
+ * matched at request time by `util/oauth-redirect-uri.ts`. It may request
23
+ * any issuable scope (catalog minus `admin:*`).
24
+ */
25
+ const CROWI_CLI_CLIENT_ID = 'crowi-cli';
26
+ async function runOAuthClientSeed(crowi) {
27
+ const OAuthClient = crowi.model('OAuthClient');
28
+ const result = await OAuthClient.updateOne({ clientId: CROWI_CLI_CLIENT_ID }, {
29
+ $setOnInsert: {
30
+ clientId: CROWI_CLI_CLIENT_ID,
31
+ name: 'Crowi CLI',
32
+ type: 'public',
33
+ secretHash: null,
34
+ redirectUris: ['http://127.0.0.1', 'http://localhost'],
35
+ allowedScopes: [...api_contract_1.ISSUABLE_SCOPES],
36
+ firstParty: true,
37
+ trusted: false,
38
+ createdAt: new Date(),
39
+ },
40
+ }, { upsert: true });
41
+ if (result.upsertedCount) {
42
+ console.log(`[crowi] Seeded first-party OAuth client '${CROWI_CLI_CLIENT_ID}'.`);
43
+ }
44
+ else {
45
+ debug('crowi-cli client already present — nothing to seed');
46
+ }
47
+ }
48
+ //# sourceMappingURL=oauth-client-seed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth-client-seed.js","sourceRoot":"","sources":["../../src/util/oauth-client-seed.ts"],"names":[],"mappings":";;;;;AAwBA,gDA0BC;AAlDD,sDAAsD;AACtD,kDAA0B;AAI1B,MAAM,KAAK,GAAG,IAAA,eAAK,EAAC,8BAA8B,CAAC,CAAC;AAEpD;;;;;;;;;;;;;;GAcG;AACH,MAAM,mBAAmB,GAAG,WAAW,CAAC;AAEjC,KAAK,UAAU,kBAAkB,CAAC,KAAY;IACnD,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAE/C,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,SAAS,CACxC,EAAE,QAAQ,EAAE,mBAAmB,EAAE,EACjC;QACE,YAAY,EAAE;YACZ,QAAQ,EAAE,mBAAmB;YAC7B,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,IAAI;YAChB,YAAY,EAAE,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;YACtD,aAAa,EAAE,CAAC,GAAG,8BAAe,CAAC;YACnC,UAAU,EAAE,IAAI;YAChB,OAAO,EAAE,KAAK;YACd,SAAS,EAAE,IAAI,IAAI,EAAE;SACtB;KACF,EACD,EAAE,MAAM,EAAE,IAAI,EAAE,CACjB,CAAC;IAEF,IAAK,MAAqC,CAAC,aAAa,EAAE,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,4CAA4C,mBAAmB,IAAI,CAAC,CAAC;IACnF,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,oDAAoD,CAAC,CAAC;IAC9D,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { OAuthClientDocument } from '../models/oauth-client';
2
+ export declare function isRedirectUriAllowed(client: Pick<OAuthClientDocument, 'redirectUris'>, requestedUri: string): boolean;
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isRedirectUriAllowed = isRedirectUriAllowed;
4
+ /**
5
+ * RFC-0010 §Security — redirect_uri validation for the Auth Code flow.
6
+ *
7
+ * Two rules:
8
+ *
9
+ * - **Loopback** (`127.0.0.1` / `localhost`, http): allowed if the client
10
+ * registered a matching loopback host, *regardless of port*. Native /
11
+ * CLI clients bind an ephemeral loopback port per login (RFC 8252
12
+ * §7.3), so the port cannot be pre-registered; the host match is the
13
+ * security boundary.
14
+ * - **Everything else**: must match one of the client's `redirectUris`
15
+ * exactly (string equality), preventing open-redirect to an attacker
16
+ * origin.
17
+ *
18
+ * Anything that does not parse as a URL, or uses a non-http(s) scheme, is
19
+ * rejected.
20
+ */
21
+ const LOOPBACK_HOSTS = new Set(['127.0.0.1', 'localhost', '[::1]', '::1']);
22
+ function isLoopbackHost(hostname) {
23
+ return LOOPBACK_HOSTS.has(hostname);
24
+ }
25
+ function isRedirectUriAllowed(client, requestedUri) {
26
+ let requested;
27
+ try {
28
+ requested = new URL(requestedUri);
29
+ }
30
+ catch {
31
+ return false;
32
+ }
33
+ // Only http(s) callbacks. (Loopback CLI callbacks are http.)
34
+ if (requested.protocol !== 'http:' && requested.protocol !== 'https:') {
35
+ return false;
36
+ }
37
+ if (isLoopbackHost(requested.hostname)) {
38
+ // Loopback: any registered loopback host of the same hostname matches,
39
+ // ignoring the (ephemeral) port. Path must still match if registered,
40
+ // but the seeded crowi-cli registers bare hosts so any path on the
41
+ // loopback host is accepted.
42
+ return client.redirectUris.some((registered) => {
43
+ try {
44
+ const reg = new URL(registered);
45
+ return isLoopbackHost(reg.hostname) && reg.hostname === requested.hostname && reg.protocol === requested.protocol;
46
+ }
47
+ catch {
48
+ return false;
49
+ }
50
+ });
51
+ }
52
+ // Non-loopback: exact string match against a registered URI.
53
+ return client.redirectUris.includes(requestedUri);
54
+ }
55
+ //# sourceMappingURL=oauth-redirect-uri.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth-redirect-uri.js","sourceRoot":"","sources":["../../src/util/oauth-redirect-uri.ts"],"names":[],"mappings":";;AA0BA,oDA8BC;AAtDD;;;;;;;;;;;;;;;;GAgBG;AAEH,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;AAE3E,SAAS,cAAc,CAAC,QAAgB;IACtC,OAAO,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AACtC,CAAC;AAED,SAAgB,oBAAoB,CAAC,MAAiD,EAAE,YAAoB;IAC1G,IAAI,SAAc,CAAC;IACnB,IAAI,CAAC;QACH,SAAS,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;IAED,6DAA6D;IAC7D,IAAI,SAAS,CAAC,QAAQ,KAAK,OAAO,IAAI,SAAS,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACtE,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,cAAc,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvC,uEAAuE;QACvE,sEAAsE;QACtE,mEAAmE;QACnE,6BAA6B;QAC7B,OAAO,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE;YAC7C,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;gBAChC,OAAO,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,QAAQ,CAAC;YACpH,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,6DAA6D;IAC7D,OAAO,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;AACpD,CAAC"}
@@ -0,0 +1,113 @@
1
+ import type { Revision, RevisionMetaShape } from '@crowi/api-contract';
2
+ import { Types } from 'mongoose';
3
+ import type Crowi from '../crowi';
4
+ import type { PageDocument } from '../models/page';
5
+ import { type RevisionMetaContent } from '../models/revision';
6
+ import { type PopulatedUser } from './ts-rest-helpers';
7
+ /**
8
+ * Shape of a populated `revision` field as it appears on Mongoose documents
9
+ * after `.populate('revision', ...)`. `path` mirrors `Page.path` and `body`
10
+ * is the markdown source. `author` may itself be populated (full user) or
11
+ * remain an `ObjectId` ref — we narrow with `isPopulatedUser` at the call
12
+ * site.
13
+ */
14
+ export interface PopulatedRevision {
15
+ _id: Types.ObjectId;
16
+ path: string;
17
+ body: string;
18
+ format?: string;
19
+ author?: PopulatedUser | null;
20
+ createdAt?: Date;
21
+ meta?: RevisionMetaContent;
22
+ /** RFC-0002 Phase 3 — transformed mdast persisted verbatim. */
23
+ renderedAst?: unknown;
24
+ /** RFC-0002 round 3.1 — semver of the pipeline that produced `renderedAst`. */
25
+ rendererVersion?: string;
26
+ /** RFC-0010 — edit channel ('web' | 'oauth' | 'pat'); absent = web. */
27
+ editVia?: 'web' | 'oauth' | 'pat';
28
+ }
29
+ /**
30
+ * Looser shape than `PageDocument`: covers both Mongoose documents and the
31
+ * plain objects produced by `.toObject()` / `.lean()`. Every field is
32
+ * optional except `_id` + `path` so populated and unpopulated views (e.g.
33
+ * search hit pre-populate) both fit.
34
+ */
35
+ export interface PageLike {
36
+ _id: Types.ObjectId | string;
37
+ path: string;
38
+ revision?: PopulatedRevision | Types.ObjectId | null;
39
+ redirectTo?: string | null;
40
+ status?: string | null;
41
+ grant?: number;
42
+ grantedUsers?: (Types.ObjectId | string)[];
43
+ creator?: PopulatedUser | Types.ObjectId | null;
44
+ lastUpdateUser?: PopulatedUser | Types.ObjectId | null;
45
+ liker?: (Types.ObjectId | string)[];
46
+ commentCount?: number;
47
+ extended?: Record<string, unknown>;
48
+ createdAt?: Date;
49
+ updatedAt?: Date;
50
+ latestRevision?: Types.ObjectId | string;
51
+ likerCount?: number;
52
+ seenUsersCount?: number;
53
+ toObject?: () => PageLike;
54
+ }
55
+ /**
56
+ * Heuristic: a `revision` field is populated when it has the `_id` + `path`
57
+ * + `body` triplet. Plain `ObjectId` refs only carry `_id`.
58
+ */
59
+ export declare const isPopulatedRevision: (value: unknown) => value is PopulatedRevision;
60
+ export interface RevisionResponseOptions {
61
+ /**
62
+ * Emit `revision.meta` (currently just `meta.toc`). Off by default —
63
+ * only single-revision read paths (getPage, getRevision) consume it.
64
+ * List endpoints (listPages, search hits, recently-viewed, bookmarks,
65
+ * me) skip it: the TOC adds payload weight without being rendered.
66
+ */
67
+ withMeta?: boolean;
68
+ /**
69
+ * RFC-0002 Phase 3: emit `revision.renderedAst` (transformed mdast
70
+ * the web client renders directly). Off by default — list endpoints
71
+ * skip it because the AST is 5-10x the body size in JSON form.
72
+ * Only single-page detail (getPage) and single-revision detail
73
+ * (getRevision) opt in. Legacy revisions without a stored
74
+ * `renderedAst` are filled in by `computeRevisionRenderedAstAsync`.
75
+ */
76
+ withRenderedAst?: boolean;
77
+ }
78
+ export declare const toRevisionResponse: (revision: PopulatedRevision, options?: RevisionResponseOptions) => Revision;
79
+ export declare const resolveRevisionMeta: (stored: RevisionMetaContent | undefined, emit: boolean | undefined) => RevisionMetaShape | undefined;
80
+ /**
81
+ * Async fallback compute for revision render artifacts (meta +
82
+ * renderedAst). Detail endpoints (getPage, getRevision) call this AFTER
83
+ * `pageToResponse` so the projection path stays sync; meta + AST get
84
+ * attached to the populated revision response in one go.
85
+ *
86
+ * Why one call instead of two: legacy revisions (Phase 1: only `toc`
87
+ * stored / Phase 2: meta but no `renderedAst`) would otherwise trigger
88
+ * back-to-back `runMetadata` + `runRender` invocations, each running a
89
+ * full parse+transform+shiki pipeline on the same body. `runRender`
90
+ * already produces both, so fold the calls into one and pull the
91
+ * needed pieces out.
92
+ *
93
+ * Stored values stay authoritative on merge: Phase 1's `toc` (the
94
+ * anchor ids the heading stamper aligns against) wins over recomputed
95
+ * ones, and a stored `renderedAst` is returned verbatim without
96
+ * re-rendering.
97
+ */
98
+ export declare const computeRevisionRenderArtifactsAsync: (crowi: Crowi, storedMeta: RevisionMetaContent | undefined, storedAst: unknown, body: string, storedRendererVersion?: string, pageId?: string) => Promise<{
99
+ meta?: RevisionMetaShape;
100
+ renderedAst?: unknown;
101
+ }>;
102
+ export type PageToResponseOptions = RevisionResponseOptions;
103
+ /**
104
+ * Project a populated Page document (or plain `PageLike`) into the contract
105
+ * Page shape. Unpopulated refs collapse safely:
106
+ * - revision: ObjectId-ref → undefined
107
+ * - creator / lastUpdateUser: ObjectId-ref → null
108
+ *
109
+ * Returns `any` because the runtime shape satisfies either `Page` or
110
+ * `PageWithRevision` depending on whether revision was populated; ts-rest
111
+ * contracts pin one or the other and each handler narrows at its return.
112
+ */
113
+ export declare const pageToResponse: (page: PageDocument | PageLike, options?: PageToResponseOptions) => any;