@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,110 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.loadGrantedPage = exports.internalServerErrorResponse = exports.invalidPageIdResponse = exports.pageNotFoundResponse = exports.isPopulatedUser = exports.isValidObjectId = exports.toUserPublic = exports.toPageUser = exports.toStringId = exports.toISOStringOrNull = void 0;
4
+ const api_contract_1 = require("@crowi/api-contract");
5
+ const toISOStringOrNull = (date) => {
6
+ if (!date)
7
+ return null;
8
+ return date instanceof Date ? date.toISOString() : String(date);
9
+ };
10
+ exports.toISOStringOrNull = toISOStringOrNull;
11
+ const toStringId = (id) => {
12
+ return typeof id === 'string' ? id : id.toString();
13
+ };
14
+ exports.toStringId = toStringId;
15
+ const toPageUser = (user) => ({
16
+ _id: user._id.toString(),
17
+ id: user._id.toString(),
18
+ username: user.username,
19
+ name: user.name,
20
+ email: user.email,
21
+ image: user.image || null,
22
+ createdAt: (0, exports.toISOStringOrNull)(user.createdAt) || new Date().toISOString(),
23
+ });
24
+ exports.toPageUser = toPageUser;
25
+ const KNOWN_USER_STATUSES = new Set(Object.values(api_contract_1.UserPublicStatus));
26
+ /**
27
+ * Narrow Mongo's `status: number` to the typed enum on the wire. Hand-edited
28
+ * rows or pre-migration data outside 1..5 collapse to `undefined` so the
29
+ * response still satisfies the schema instead of 500-ing in the response
30
+ * validator.
31
+ */
32
+ const toUserStatus = (status) => {
33
+ return status !== undefined && KNOWN_USER_STATUSES.has(status) ? status : undefined;
34
+ };
35
+ const toUserPublic = (user) => ({
36
+ _id: (0, exports.toStringId)(user._id),
37
+ id: (0, exports.toStringId)(user._id),
38
+ username: user.username ?? '',
39
+ name: user.name ?? '',
40
+ email: user.email ?? '',
41
+ image: user.image ?? null,
42
+ introduction: user.introduction ?? '',
43
+ createdAt: (0, exports.toISOStringOrNull)(user.createdAt) ?? new Date().toISOString(),
44
+ admin: user.admin ?? false,
45
+ status: toUserStatus(user.status),
46
+ });
47
+ exports.toUserPublic = toUserPublic;
48
+ /**
49
+ * Strict 24-character hex string check for Mongo ObjectId.
50
+ * `Types.ObjectId.isValid()` accepts 12-byte buffers and other formats; we
51
+ * only accept the canonical hex string used in URLs and request bodies.
52
+ */
53
+ const isValidObjectId = (id) => typeof id === 'string' && /^[0-9a-f]{24}$/.test(id);
54
+ exports.isValidObjectId = isValidObjectId;
55
+ /**
56
+ * Heuristic for "this is a populated user document, not just an ObjectId".
57
+ * The 4 ts-rest routes all need this; the loose form (only _id + username +
58
+ * email) covers all current call sites.
59
+ */
60
+ const isPopulatedUser = (value) => {
61
+ return !!value && typeof value === 'object' && '_id' in value && 'username' in value && 'email' in value;
62
+ };
63
+ exports.isPopulatedUser = isPopulatedUser;
64
+ /**
65
+ * Standard 404 for "page not found OR not granted". Mapped to 404 (not 403)
66
+ * so we do not leak page existence to callers without grant.
67
+ */
68
+ exports.pageNotFoundResponse = {
69
+ status: 404,
70
+ body: { error: { code: 'PAGE_NOT_FOUND', message: 'Page not found' } },
71
+ };
72
+ /**
73
+ * Standard 400 for an invalid page_id (not 24-char hex).
74
+ */
75
+ exports.invalidPageIdResponse = {
76
+ status: 400,
77
+ body: { error: { code: 'INVALID_PAGE_ID', message: 'Invalid page_id' } },
78
+ };
79
+ /**
80
+ * Standard 500 for an unexpected handler failure. Used by every admin
81
+ * handler that wraps its body in try/catch and needs to surface a typed
82
+ * `InternalServerError` shape (see `schemas/common.ts:InternalServerErrorSchema`).
83
+ */
84
+ exports.internalServerErrorResponse = {
85
+ status: 500,
86
+ body: { error: { code: 'INTERNAL_ERROR', message: 'Internal server error' } },
87
+ };
88
+ /**
89
+ * Validate `pageId` and resolve a granted Page document, or return the
90
+ * standard 400 / 404 response otherwise. Centralises the
91
+ * isValidObjectId + findPageByIdAndGrantedUser + leak-prevention catch
92
+ * pattern that ts-rest page-related routes (page / bookmark / comment /
93
+ * revision / notification) all need.
94
+ */
95
+ const loadGrantedPage = async (Page, pageId, user) => {
96
+ if (!(0, exports.isValidObjectId)(pageId)) {
97
+ return { error: exports.invalidPageIdResponse };
98
+ }
99
+ try {
100
+ const page = await Page.findPageByIdAndGrantedUser(pageId, user);
101
+ if (!page)
102
+ return { error: exports.pageNotFoundResponse };
103
+ return { page };
104
+ }
105
+ catch {
106
+ return { error: exports.pageNotFoundResponse };
107
+ }
108
+ };
109
+ exports.loadGrantedPage = loadGrantedPage;
110
+ //# sourceMappingURL=ts-rest-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ts-rest-helpers.js","sourceRoot":"","sources":["../../src/util/ts-rest-helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare const getContinueUrl: (req?: any) => any;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getContinueUrl = void 0;
4
+ const getContinueUrl = (req = {}) => {
5
+ const { body = {}, query = {} } = req;
6
+ const url = body.continue || query.continue;
7
+ const continueUrl = /^(?![/\\]{2,})\/.*$/.test(url) ? url : '/';
8
+ return continueUrl;
9
+ };
10
+ exports.getContinueUrl = getContinueUrl;
11
+ //# sourceMappingURL=url.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url.js","sourceRoot":"","sources":["../../src/util/url.ts"],"names":[],"mappings":";;;AAAO,MAAM,cAAc,GAAG,CAAC,MAAW,EAAE,EAAE,EAAE;IAC9C,MAAM,EAAE,IAAI,GAAG,EAAE,EAAE,KAAK,GAAG,EAAE,EAAE,GAAG,GAAG,CAAC;IACtC,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC;IAC5C,MAAM,WAAW,GAAG,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAEhE,OAAO,WAAW,CAAC;AACrB,CAAC,CAAC;AANW,QAAA,cAAc,kBAMzB"}
@@ -0,0 +1,10 @@
1
+ /** Generate a fresh `ABCD-1234`-form user code (uniqueness enforced by caller). */
2
+ export declare function generateUserCode(): string;
3
+ /**
4
+ * Normalise a user-entered code for lookup: upper-case, strip everything that
5
+ * is not an allowed letter/digit (spaces, dashes, etc.), then re-insert the
6
+ * canonical dash after the 4th character when the length matches. This lets a
7
+ * user type `abcd1234`, `abcd-1234`, or `ABCD 1234` and still match the
8
+ * stored `ABCD-1234`.
9
+ */
10
+ export declare function normalizeUserCode(input: string): string;
@@ -0,0 +1,55 @@
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.generateUserCode = generateUserCode;
7
+ exports.normalizeUserCode = normalizeUserCode;
8
+ const node_crypto_1 = __importDefault(require("node:crypto"));
9
+ /**
10
+ * RFC-0010 Phase 4 (RFC 8628 §6.1) — human-typed `user_code` generation.
11
+ *
12
+ * The user types this code into `/oauth/device` on a second device, so the
13
+ * alphabet deliberately drops ambiguous glyphs:
14
+ *
15
+ * - vowels (A E I O U) — avoids accidentally spelling words.
16
+ * - look-alikes 0/O, 1/I/L — removed from the letter set; digits 0-9 are
17
+ * kept but the letters that resemble them are not, so a `0` is always a
18
+ * digit and an `I` never appears.
19
+ *
20
+ * Format is `ABCD-1234` (4 letters + dash + 4 digits). Uniqueness is the
21
+ * caller's responsibility: the `OAuthDeviceCode` model has a unique index on
22
+ * `userCode` and retries generation on a duplicate-key error.
23
+ */
24
+ /** Consonant-only letters, ambiguous glyphs removed (RFC 8628 §6.1). `L` is
25
+ * dropped too — it reads as `1`/`I` in many fonts. */
26
+ const USER_CODE_LETTERS = 'BCDFGHJKMNPQRSTVWXZ';
27
+ const USER_CODE_DIGITS = '0123456789';
28
+ const LETTER_COUNT = 4;
29
+ const DIGIT_COUNT = 4;
30
+ function pick(alphabet, count) {
31
+ let out = '';
32
+ for (let i = 0; i < count; i += 1) {
33
+ out += alphabet[node_crypto_1.default.randomInt(alphabet.length)];
34
+ }
35
+ return out;
36
+ }
37
+ /** Generate a fresh `ABCD-1234`-form user code (uniqueness enforced by caller). */
38
+ function generateUserCode() {
39
+ return `${pick(USER_CODE_LETTERS, LETTER_COUNT)}-${pick(USER_CODE_DIGITS, DIGIT_COUNT)}`;
40
+ }
41
+ /**
42
+ * Normalise a user-entered code for lookup: upper-case, strip everything that
43
+ * is not an allowed letter/digit (spaces, dashes, etc.), then re-insert the
44
+ * canonical dash after the 4th character when the length matches. This lets a
45
+ * user type `abcd1234`, `abcd-1234`, or `ABCD 1234` and still match the
46
+ * stored `ABCD-1234`.
47
+ */
48
+ function normalizeUserCode(input) {
49
+ const cleaned = input.toUpperCase().replace(/[^A-Z0-9]/g, '');
50
+ if (cleaned.length === LETTER_COUNT + DIGIT_COUNT) {
51
+ return `${cleaned.slice(0, LETTER_COUNT)}-${cleaned.slice(LETTER_COUNT)}`;
52
+ }
53
+ return cleaned;
54
+ }
55
+ //# sourceMappingURL=user-code.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-code.js","sourceRoot":"","sources":["../../src/util/user-code.ts"],"names":[],"mappings":";;;;;AAkCA,4CAEC;AASD,8CAMC;AAnDD,8DAAiC;AAEjC;;;;;;;;;;;;;;GAcG;AAEH;sDACsD;AACtD,MAAM,iBAAiB,GAAG,qBAAqB,CAAC;AAChD,MAAM,gBAAgB,GAAG,YAAY,CAAC;AACtC,MAAM,YAAY,GAAG,CAAC,CAAC;AACvB,MAAM,WAAW,GAAG,CAAC,CAAC;AAEtB,SAAS,IAAI,CAAC,QAAgB,EAAE,KAAa;IAC3C,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAClC,GAAG,IAAI,QAAQ,CAAC,qBAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,mFAAmF;AACnF,SAAgB,gBAAgB;IAC9B,OAAO,GAAG,IAAI,CAAC,iBAAiB,EAAE,YAAY,CAAC,IAAI,IAAI,CAAC,gBAAgB,EAAE,WAAW,CAAC,EAAE,CAAC;AAC3F,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,iBAAiB,CAAC,KAAa;IAC7C,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;IAC9D,IAAI,OAAO,CAAC,MAAM,KAAK,YAAY,GAAG,WAAW,EAAE,CAAC;QAClD,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;IAC5E,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,10 @@
1
+ import Crowi from '../crowi';
2
+ import { AppContext } from 'src/types/appContext';
3
+ export declare const parentPath: (path: string) => string;
4
+ export declare const isUserPageList: (path: string) => boolean;
5
+ export declare const isUserPage: (path: string) => boolean;
6
+ export declare const isTopPage: (path: string) => path is "/";
7
+ export declare const isTrashPage: (path: string) => boolean;
8
+ export declare const userPageRoot: (user: any) => string;
9
+ export declare const picture: (user: any) => any;
10
+ export declare const getAppContext: (crowi: Crowi, req: any) => AppContext;
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getAppContext = exports.picture = exports.userPageRoot = exports.isTrashPage = exports.isTopPage = exports.isUserPage = exports.isUserPageList = exports.parentPath = void 0;
4
+ const config_1 = require("../models/config");
5
+ // Static functions related to view used by swig (functions and filters) and react
6
+ const parentPath = (path) => {
7
+ if (path === '/' || path.match(/.+\/$/)) {
8
+ return path;
9
+ }
10
+ return path + '/';
11
+ };
12
+ exports.parentPath = parentPath;
13
+ const isUserPageList = (path) => /^\/user\/[^/]+\/$/.test(path) || /^\/user\/$/.test(path);
14
+ exports.isUserPageList = isUserPageList;
15
+ const isUserPage = (path) => /^\/user\/[^/]+$/.test(path);
16
+ exports.isUserPage = isUserPage;
17
+ const isTopPage = (path) => path === '/';
18
+ exports.isTopPage = isTopPage;
19
+ const isTrashPage = (path) => /^\/trash\/.*/.test(path);
20
+ exports.isTrashPage = isTrashPage;
21
+ const userPageRoot = (user) => {
22
+ if (!user || !user.username) {
23
+ return '';
24
+ }
25
+ return '/user/' + user.username;
26
+ };
27
+ exports.userPageRoot = userPageRoot;
28
+ const picture = (user) => {
29
+ if (!user) {
30
+ return '';
31
+ }
32
+ if (user.image && user.image != '/images/userpicture.png') {
33
+ return user.image;
34
+ }
35
+ else {
36
+ return '/images/userpicture.png';
37
+ }
38
+ };
39
+ exports.picture = picture;
40
+ const getUserContext = (req) => {
41
+ const { _id = null, name = '', username = '', image = '', email = null, googleId = null, githubId = null, admin = false, lang = '' } = req.user || {};
42
+ return {
43
+ _id,
44
+ name,
45
+ username,
46
+ image,
47
+ email,
48
+ googleId,
49
+ githubId,
50
+ admin,
51
+ language: lang,
52
+ };
53
+ };
54
+ const getConfigContext = (config) => {
55
+ const { crowi } = config || {};
56
+ return {
57
+ crowi: {
58
+ 'app:confidential': crowi['app:confidential'] || null,
59
+ },
60
+ };
61
+ };
62
+ const getAppContext = (crowi, req) => {
63
+ const config = req.config;
64
+ const env = crowi.getEnv();
65
+ const Config = crowi.model('Config');
66
+ return {
67
+ title: (config.crowi['app:title'] || 'Crowi'),
68
+ path: req.path || '',
69
+ url: config.crowi['app:url'] || '',
70
+ auth: {
71
+ requireThirdPartyAuth: (0, config_1.isRequiredThirdPartyAuth)(config),
72
+ canDisconnectThirdPartyId: req.user ? req.user.canDisconnectThirdPartyId() : false,
73
+ disablePasswordAuth: (0, config_1.isDisabledPasswordAuth)(config),
74
+ providers: {
75
+ google: (0, config_1.googleLoginEnabled)(config),
76
+ github: (0, config_1.githubLoginEnabled)(config),
77
+ },
78
+ },
79
+ upload: {
80
+ image: Config.isUploadable(),
81
+ file: Config.isUploadable(),
82
+ },
83
+ search: {
84
+ isConfigured: !!crowi.getSearcher(),
85
+ },
86
+ security: {
87
+ registrationWhiteList: config.crowi['security:registrationWhiteList'] || [],
88
+ },
89
+ user: getUserContext(req),
90
+ env: {
91
+ PLANTUML_URI: env.PLANTUML_URI || null,
92
+ MATHJAX: env.MATHJAX || null,
93
+ },
94
+ config: getConfigContext(config),
95
+ csrfToken: req.csrfToken,
96
+ };
97
+ };
98
+ exports.getAppContext = getAppContext;
99
+ //# sourceMappingURL=view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view.js","sourceRoot":"","sources":["../../src/util/view.ts"],"names":[],"mappings":";;;AAEA,8CAA6H;AAE7H,kFAAkF;AAE3E,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,EAAE;IACzC,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QACxC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,IAAI,GAAG,GAAG,CAAC;AACpB,CAAC,CAAC;AANW,QAAA,UAAU,cAMrB;AAEK,MAAM,cAAc,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAA7F,QAAA,cAAc,kBAA+E;AAEnG,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAA5D,QAAA,UAAU,cAAkD;AAElE,MAAM,SAAS,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,KAAK,GAAG,CAAC;AAA3C,QAAA,SAAS,aAAkC;AAEjD,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAA1D,QAAA,WAAW,eAA+C;AAEhE,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE,EAAE;IACnC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC5B,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;AAClC,CAAC,CAAC;AALW,QAAA,YAAY,gBAKvB;AAEK,MAAM,OAAO,GAAG,CAAC,IAAI,EAAE,EAAE;IAC9B,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,yBAAyB,EAAE,CAAC;QAC1D,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;SAAM,CAAC;QACN,OAAO,yBAAyB,CAAC;IACnC,CAAC;AACH,CAAC,CAAC;AAVW,QAAA,OAAO,WAUlB;AAEF,MAAM,cAAc,GAAG,CAAC,GAAG,EAAsB,EAAE;IACjD,MAAM,EAAE,GAAG,GAAG,IAAI,EAAE,IAAI,GAAG,EAAE,EAAE,QAAQ,GAAG,EAAE,EAAE,KAAK,GAAG,EAAE,EAAE,KAAK,GAAG,IAAI,EAAE,QAAQ,GAAG,IAAI,EAAE,QAAQ,GAAG,IAAI,EAAE,KAAK,GAAG,KAAK,EAAE,IAAI,GAAG,EAAE,EAAE,GAAG,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;IACtJ,OAAO;QACL,GAAG;QACH,IAAI;QACJ,QAAQ;QACR,KAAK;QACL,KAAK;QACL,QAAQ;QACR,QAAQ;QACR,KAAK;QACL,QAAQ,EAAE,IAAI;KACf,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,EAAE;IAClC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC;IAC/B,OAAO;QACL,KAAK,EAAE;YACL,kBAAkB,EAAE,KAAK,CAAC,kBAAkB,CAAC,IAAI,IAAI;SACtD;KACF,CAAC;AACJ,CAAC,CAAC;AAEK,MAAM,aAAa,GAAG,CAAC,KAAY,EAAE,GAAG,EAAc,EAAE;IAC7D,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;IAC1B,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;IAC3B,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAErC,OAAO;QACL,KAAK,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,OAAO,CAAwB;QACpE,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE;QACpB,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE;QAClC,IAAI,EAAE;YACJ,qBAAqB,EAAE,IAAA,iCAAwB,EAAC,MAAM,CAAC;YACvD,yBAAyB,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,yBAAyB,EAAE,CAAC,CAAC,CAAC,KAAK;YAClF,mBAAmB,EAAE,IAAA,+BAAsB,EAAC,MAAM,CAAC;YACnD,SAAS,EAAE;gBACT,MAAM,EAAE,IAAA,2BAAkB,EAAC,MAAM,CAAC;gBAClC,MAAM,EAAE,IAAA,2BAAkB,EAAC,MAAM,CAAC;aACnC;SACF;QACD,MAAM,EAAE;YACN,KAAK,EAAE,MAAM,CAAC,YAAY,EAAE;YAC5B,IAAI,EAAE,MAAM,CAAC,YAAY,EAAE;SAC5B;QACD,MAAM,EAAE;YACN,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE;SACpC;QACD,QAAQ,EAAE;YACR,qBAAqB,EAAE,MAAM,CAAC,KAAK,CAAC,gCAAgC,CAAC,IAAI,EAAE;SAC5E;QACD,IAAI,EAAE,cAAc,CAAC,GAAG,CAAC;QACzB,GAAG,EAAE;YACH,YAAY,EAAE,GAAG,CAAC,YAAY,IAAI,IAAI;YACtC,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,IAAI;SAC7B;QACD,MAAM,EAAE,gBAAgB,CAAC,MAAM,CAAC;QAChC,SAAS,EAAE,GAAG,CAAC,SAAoC;KACpD,CAAC;AACJ,CAAC,CAAC;AApCW,QAAA,aAAa,iBAoCxB"}
@@ -0,0 +1,30 @@
1
+ import type Crowi from '../crowi';
2
+ /**
3
+ * feature-watch-autosubscribe — one-shot WATCH backfill for pages that
4
+ * predate auto-watch.
5
+ *
6
+ * Auto-watch only materialises `Watcher(STATUS_WATCH)` rows for *future*
7
+ * participation (create / edit / comment — see `util/auto-watch.ts`). The
8
+ * notification fan-out is now watcher-only
9
+ * (`models/activity.ts:getNotificationTargetUsers`), so pages created
10
+ * before auto-watch landed have no watcher rows and their past
11
+ * participants silently stop being notified.
12
+ *
13
+ * This walks every non-redirect page and materialises a WATCH row for its
14
+ * implicit pre-watcher notification set — creator + comment authors +
15
+ * revision authors, exactly what `Page.getNotificationTargetUsers()`
16
+ * returned and the old fan-out used. It reuses `autoWatchPage`, so an
17
+ * existing IGNORE opt-out is respected and existing WATCH rows are left
18
+ * untouched. Idempotent: a second run creates nothing.
19
+ *
20
+ * Run via `crowi-admin watcher backfill [--dry-run]`.
21
+ */
22
+ export interface WatcherBackfillSummary {
23
+ pagesScanned: number;
24
+ /** WATCH rows created — or, in dry-run, that WOULD be created. */
25
+ watchersCreated: number;
26
+ dryRun: boolean;
27
+ }
28
+ export declare function runWatcherBackfill(crowi: Crowi, opts?: {
29
+ dryRun?: boolean;
30
+ }): Promise<WatcherBackfillSummary>;
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runWatcherBackfill = runWatcherBackfill;
4
+ const auto_watch_1 = require("./auto-watch");
5
+ async function runWatcherBackfill(crowi, opts = {}) {
6
+ const dryRun = Boolean(opts.dryRun);
7
+ const Page = crowi.model('Page');
8
+ const Watcher = crowi.model('Watcher');
9
+ let pagesScanned = 0;
10
+ let watchersCreated = 0;
11
+ // Redirect stubs never notify, so skip them. Cursor so a large
12
+ // collection doesn't have to fit in memory.
13
+ const cursor = Page.find({ redirectTo: null }).cursor();
14
+ for (let page = await cursor.next(); page != null; page = await cursor.next()) {
15
+ pagesScanned++;
16
+ // creator + comment authors + revision authors (already de-duped).
17
+ const targets = (await page.getNotificationTargetUsers());
18
+ const seen = new Set();
19
+ const pageId = page._id;
20
+ for (const userId of targets) {
21
+ if (!userId)
22
+ continue;
23
+ const key = String(userId);
24
+ if (seen.has(key))
25
+ continue;
26
+ seen.add(key);
27
+ if (dryRun) {
28
+ // Mirror autoWatchPage's predicate without writing: a WATCH would
29
+ // be created only when no Watcher row (WATCH or IGNORE) exists.
30
+ const existing = await Watcher.findByUserIdAndTargetId(userId, pageId);
31
+ if (!existing)
32
+ watchersCreated++;
33
+ }
34
+ else {
35
+ const { newlyWatching } = await (0, auto_watch_1.autoWatchPage)(Watcher, userId, pageId);
36
+ if (newlyWatching)
37
+ watchersCreated++;
38
+ }
39
+ }
40
+ }
41
+ return { pagesScanned, watchersCreated, dryRun };
42
+ }
43
+ //# sourceMappingURL=watcher-backfill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watcher-backfill.js","sourceRoot":"","sources":["../../src/util/watcher-backfill.ts"],"names":[],"mappings":";;AA+BA,gDAsCC;AAnED,6CAA6C;AA6BtC,KAAK,UAAU,kBAAkB,CAAC,KAAY,EAAE,OAA6B,EAAE;IACpF,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACjC,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAEvC,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,eAAe,GAAG,CAAC,CAAC;IAExB,+DAA+D;IAC/D,4CAA4C;IAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;IACxD,KAAK,IAAI,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,EAAE,IAAI,IAAI,IAAI,EAAE,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QAC9E,YAAY,EAAE,CAAC;QAEf,mEAAmE;QACnE,MAAM,OAAO,GAAG,CAAC,MAAM,IAAI,CAAC,0BAA0B,EAAE,CAA6C,CAAC;QACtG,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAqB,CAAC;QAE1C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,CAAC,MAAM;gBAAE,SAAS;YACtB,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;YAC3B,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,SAAS;YAC5B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAEd,IAAI,MAAM,EAAE,CAAC;gBACX,kEAAkE;gBAClE,gEAAgE;gBAChE,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,uBAAuB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBACvE,IAAI,CAAC,QAAQ;oBAAE,eAAe,EAAE,CAAC;YACnC,CAAC;iBAAM,CAAC;gBACN,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,IAAA,0BAAa,EAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;gBACvE,IAAI,aAAa;oBAAE,eAAe,EAAE,CAAC;YACvC,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC;AACnD,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { type WsTokenPayload } from '@crowi/api-contract';
2
+ /**
3
+ * Claims signed into the wsToken. The exported runtime schema lives in
4
+ * `@crowi/api-contract` (`WsTokenPayloadSchema`) — Phase 3 Hocuspocus
5
+ * code parses the verified payload through the same schema, so the
6
+ * shape only has one source of truth.
7
+ */
8
+ export interface WsTokenClaims {
9
+ userId: string;
10
+ pageId: string;
11
+ readonly: boolean;
12
+ }
13
+ export interface SignWsTokenResult {
14
+ /** Compact JWT string presented by the browser provider on connect. */
15
+ token: string;
16
+ /** ISO 8601 expiry timestamp, mirrors `exp * 1000` as a Date. */
17
+ expiresAt: Date;
18
+ }
19
+ export declare function createWsTokenUtil(): {
20
+ signWsToken: (claims: WsTokenClaims) => SignWsTokenResult;
21
+ verifyWsToken: (token: string) => WsTokenPayload | null;
22
+ ttlSeconds: number;
23
+ issuer: string;
24
+ };
@@ -0,0 +1,134 @@
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.createWsTokenUtil = createWsTokenUtil;
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:ws-token');
12
+ /**
13
+ * Issuer claim used to sign / verify wsTokens. Distinct from the
14
+ * access/refresh token issuer (`'crowi'`) so a leaked access-token
15
+ * secret can never be replayed against Hocuspocus, and a leaked
16
+ * wsToken secret can never be replayed against the HTTP JWT auth.
17
+ */
18
+ const WS_TOKEN_ISSUER = 'crowi-collab';
19
+ /**
20
+ * Lifetime of an issued wsToken. Hocuspocus refuses tokens whose `exp`
21
+ * has passed; the browser provider uses `expiresAt` to proactively
22
+ * refresh well before the WebSocket would otherwise be torn down.
23
+ * Five minutes is short enough that a leaked token has limited blast
24
+ * radius and long enough to cover typical reconnect storms.
25
+ */
26
+ const WS_TOKEN_TTL_SECONDS = 300;
27
+ /**
28
+ * Resolve the WS_TOKEN_SECRET once per util instance:
29
+ *
30
+ * - If `WS_TOKEN_SECRET` is set in the env, use it as-is. Operators
31
+ * are expected to share the same value across api + Hocuspocus +
32
+ * all multi-instance deployments (see RFC-0003 §Phase 9 docs).
33
+ * - Otherwise, generate a 32-byte random secret in-memory and log a
34
+ * warning. The process can still sign and verify its own tokens
35
+ * (closure-stable), but **process restarts invalidate all
36
+ * outstanding tokens** and **other instances cannot verify them**.
37
+ *
38
+ * The base64 encoding matches the existing `CROWI_ENCRYPTION_KEY`
39
+ * convention so operators have a single mental model for "key
40
+ * material" envs.
41
+ */
42
+ const resolveWsTokenSecret = () => {
43
+ const fromEnv = process.env.WS_TOKEN_SECRET;
44
+ if (fromEnv && fromEnv.length > 0) {
45
+ debug('WS_TOKEN_SECRET resolved from env');
46
+ return fromEnv;
47
+ }
48
+ const generated = node_crypto_1.default.randomBytes(32).toString('base64');
49
+ console.warn('[crowi] WS_TOKEN_SECRET is not set — generated a random secret in-memory. ' +
50
+ 'Process restarts will invalidate all outstanding wsTokens, and multi-instance ' +
51
+ 'deployments will not be able to cross-verify tokens. Set WS_TOKEN_SECRET to ' +
52
+ 'a stable base64-encoded 32-byte value (`openssl rand -base64 32`) in production.');
53
+ return generated;
54
+ };
55
+ /**
56
+ * Build a sign / verify pair bound to a single resolved secret. Crowi
57
+ * boots once per process, so the closure-captured secret is stable for
58
+ * the lifetime of the process; both the HTTP handler and the Hocuspocus
59
+ * `onAuthenticate` hook use the same factory so sign / verify can never
60
+ * drift apart in a single process.
61
+ *
62
+ * When `WS_TOKEN_SECRET` is unset, `resolveWsTokenSecret` generates a
63
+ * fresh random secret per invocation. Two `createWsTokenUtil()` calls in
64
+ * the same process would otherwise close over *different* random
65
+ * secrets, which silently breaks HTTP-sign / Hocuspocus-verify in dev.
66
+ * Memoise the factory result so every caller in the process shares one
67
+ * closure (= one secret) regardless of when they call.
68
+ *
69
+ * The secret is read directly from `process.env.WS_TOKEN_SECRET` (not
70
+ * via `crowi.getConfig()`) on purpose — out-of-band Hocuspocus
71
+ * deployments read the same env, so env is the single source of truth
72
+ * for cross-process secret distribution. This intentionally diverges
73
+ * from `createJwtUtil(crowi)`, which reads from config to allow
74
+ * admin-UI rotation.
75
+ */
76
+ let cachedUtil = null;
77
+ function buildWsTokenUtil() {
78
+ const secret = resolveWsTokenSecret();
79
+ /**
80
+ * Sign a wsToken for the given claims. Returns the compact JWT plus
81
+ * the absolute ISO expiry; callers serialise the timestamp into the
82
+ * wire payload (`WsTokenResponseSchema.expiresAt`).
83
+ */
84
+ function signWsToken(claims) {
85
+ // Pin `iat` ourselves so the response's `expiresAt` is **exactly**
86
+ // the same instant as the JWT's `exp` claim — recomputing from
87
+ // `Date.now()` after `jwt.sign(...)` would drift by ~1ms and made
88
+ // proactive-refresh logic harder to reason about.
89
+ const iat = Math.floor(Date.now() / 1000);
90
+ const exp = iat + WS_TOKEN_TTL_SECONDS;
91
+ const token = jsonwebtoken_1.default.sign({ ...claims, iat, exp }, secret, {
92
+ issuer: WS_TOKEN_ISSUER,
93
+ algorithm: 'HS256',
94
+ });
95
+ return { token, expiresAt: new Date(exp * 1000) };
96
+ }
97
+ /**
98
+ * Verify a wsToken. Returns the validated payload, or `null` for any
99
+ * failure (expired, bad signature, wrong issuer, malformed claims).
100
+ * Callers must treat `null` as "reject the connection" — never log
101
+ * the raw token (it is a bearer credential until `exp`).
102
+ */
103
+ function verifyWsToken(token) {
104
+ try {
105
+ const decoded = jsonwebtoken_1.default.verify(token, secret, {
106
+ issuer: WS_TOKEN_ISSUER,
107
+ algorithms: ['HS256'],
108
+ });
109
+ const parsed = api_contract_1.WsTokenPayloadSchema.safeParse(decoded);
110
+ if (!parsed.success) {
111
+ debug('wsToken payload failed schema validation:', parsed.error.issues);
112
+ return null;
113
+ }
114
+ return parsed.data;
115
+ }
116
+ catch (err) {
117
+ debug('wsToken verification failed:', err.message);
118
+ return null;
119
+ }
120
+ }
121
+ return {
122
+ signWsToken,
123
+ verifyWsToken,
124
+ ttlSeconds: WS_TOKEN_TTL_SECONDS,
125
+ issuer: WS_TOKEN_ISSUER,
126
+ };
127
+ }
128
+ function createWsTokenUtil() {
129
+ if (cachedUtil === null) {
130
+ cachedUtil = buildWsTokenUtil();
131
+ }
132
+ return cachedUtil;
133
+ }
134
+ //# sourceMappingURL=ws-token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ws-token.js","sourceRoot":"","sources":["../../src/util/ws-token.ts"],"names":[],"mappings":";;;;;AAuJA,8CAKC;AA5JD,8DAAiC;AACjC,gEAA+B;AAC/B,sDAAgF;AAChF,kDAA0B;AAE1B,MAAM,KAAK,GAAG,IAAA,eAAK,EAAC,qBAAqB,CAAC,CAAC;AAE3C;;;;;GAKG;AACH,MAAM,eAAe,GAAG,cAAc,CAAC;AAEvC;;;;;;GAMG;AACH,MAAM,oBAAoB,GAAG,GAAG,CAAC;AAqBjC;;;;;;;;;;;;;;GAcG;AACH,MAAM,oBAAoB,GAAG,GAAW,EAAE;IACxC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IAC5C,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClC,KAAK,CAAC,mCAAmC,CAAC,CAAC;QAC3C,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,MAAM,SAAS,GAAG,qBAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC5D,OAAO,CAAC,IAAI,CACV,4EAA4E;QAC1E,gFAAgF;QAChF,8EAA8E;QAC9E,kFAAkF,CACrF,CAAC;IACF,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,IAAI,UAAU,GAA+C,IAAI,CAAC;AAElE,SAAS,gBAAgB;IACvB,MAAM,MAAM,GAAG,oBAAoB,EAAE,CAAC;IAEtC;;;;OAIG;IACH,SAAS,WAAW,CAAC,MAAqB;QACxC,mEAAmE;QACnE,+DAA+D;QAC/D,kEAAkE;QAClE,kDAAkD;QAClD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAC1C,MAAM,GAAG,GAAG,GAAG,GAAG,oBAAoB,CAAC;QACvC,MAAM,KAAK,GAAG,sBAAG,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE;YACtD,MAAM,EAAE,eAAe;YACvB,SAAS,EAAE,OAAO;SACnB,CAAC,CAAC;QACH,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC;IACpD,CAAC;IAED;;;;;OAKG;IACH,SAAS,aAAa,CAAC,KAAa;QAClC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,sBAAG,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE;gBACxC,MAAM,EAAE,eAAe;gBACvB,UAAU,EAAE,CAAC,OAAO,CAAC;aACtB,CAAC,CAAC;YACH,MAAM,MAAM,GAAG,mCAAoB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YACvD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,KAAK,CAAC,2CAA2C,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBACxE,OAAO,IAAI,CAAC;YACd,CAAC;YACD,OAAO,MAAM,CAAC,IAAI,CAAC;QACrB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,KAAK,CAAC,8BAA8B,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC;YAC9D,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,OAAO;QACL,WAAW;QACX,aAAa;QACb,UAAU,EAAE,oBAAoB;QAChC,MAAM,EAAE,eAAe;KACxB,CAAC;AACJ,CAAC;AAED,SAAgB,iBAAiB;IAC/B,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QACxB,UAAU,GAAG,gBAAgB,EAAE,CAAC;IAClC,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC"}