@crowi/api 2.0.0-alpha.0 → 2.0.0-alpha.2

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 (452) hide show
  1. package/dist/hono/handlers/access-token.d.ts +55 -55
  2. package/dist/hono/handlers/activation.d.ts +27 -27
  3. package/dist/hono/handlers/admin/app.d.ts +26 -26
  4. package/dist/hono/handlers/admin/auth.d.ts +24 -24
  5. package/dist/hono/handlers/admin/mail.d.ts +30 -30
  6. package/dist/hono/handlers/admin/plugins.d.ts +112 -112
  7. package/dist/hono/handlers/admin/search.d.ts +21 -21
  8. package/dist/hono/handlers/admin/security.d.ts +24 -24
  9. package/dist/hono/handlers/admin/storage.d.ts +19 -19
  10. package/dist/hono/handlers/admin/users.d.ts +399 -281
  11. package/dist/hono/handlers/admin/users.js +28 -0
  12. package/dist/hono/handlers/admin/users.js.map +1 -1
  13. package/dist/hono/handlers/adminCrypto.d.ts +32 -32
  14. package/dist/hono/handlers/app.d.ts +12 -8
  15. package/dist/hono/handlers/app.js +42 -1
  16. package/dist/hono/handlers/app.js.map +1 -1
  17. package/dist/hono/handlers/attachment-stream.js +23 -0
  18. package/dist/hono/handlers/attachment-stream.js.map +1 -1
  19. package/dist/hono/handlers/attachment.d.ts +180 -180
  20. package/dist/hono/handlers/autocomplete.d.ts +45 -45
  21. package/dist/hono/handlers/backlink.d.ts +33 -33
  22. package/dist/hono/handlers/bookmark.d.ts +95 -95
  23. package/dist/hono/handlers/comment.d.ts +55 -55
  24. package/dist/hono/handlers/draft.d.ts +27 -27
  25. package/dist/hono/handlers/draft.js +10 -0
  26. package/dist/hono/handlers/draft.js.map +1 -1
  27. package/dist/hono/handlers/emailChange.d.ts +25 -25
  28. package/dist/hono/handlers/installer.d.ts +16 -16
  29. package/dist/hono/handlers/inviteAccept.d.ts +37 -37
  30. package/dist/hono/handlers/me.d.ts +92 -92
  31. package/dist/hono/handlers/notification.d.ts +94 -94
  32. package/dist/hono/handlers/oauth.d.ts +58 -58
  33. package/dist/hono/handlers/page-collab.d.ts +20 -20
  34. package/dist/hono/handlers/page-preview.d.ts +7 -7
  35. package/dist/hono/handlers/page.d.ts +575 -324
  36. package/dist/hono/handlers/page.js +123 -6
  37. package/dist/hono/handlers/page.js.map +1 -1
  38. package/dist/hono/handlers/passwordReset.d.ts +37 -37
  39. package/dist/hono/handlers/presence.d.ts +44 -44
  40. package/dist/hono/handlers/revision.d.ts +99 -99
  41. package/dist/hono/handlers/search.d.ts +64 -64
  42. package/dist/hono/handlers/tokenAuth.d.ts +80 -80
  43. package/dist/hono/handlers/user.d.ts +102 -102
  44. package/dist/hono/handlers/user.js +15 -5
  45. package/dist/hono/handlers/user.js.map +1 -1
  46. package/dist/hono/index.d.ts +94 -94
  47. package/dist/mcp/result.d.ts +52 -11
  48. package/dist/mcp/result.js +66 -1
  49. package/dist/mcp/result.js.map +1 -1
  50. package/dist/mcp/tools/page.js +30 -5
  51. package/dist/mcp/tools/page.js.map +1 -1
  52. package/dist/mcp/tools/search.d.ts +12 -0
  53. package/dist/mcp/tools/search.js +21 -5
  54. package/dist/mcp/tools/search.js.map +1 -1
  55. package/dist/migration/helpers.d.ts +13 -0
  56. package/dist/migration/helpers.js +29 -0
  57. package/dist/migration/helpers.js.map +1 -0
  58. package/dist/migration/migrations/files-url-to-attachments.d.ts +35 -0
  59. package/dist/migration/migrations/files-url-to-attachments.js +291 -0
  60. package/dist/migration/migrations/files-url-to-attachments.js.map +1 -0
  61. package/dist/migration/migrations/index.js +6 -0
  62. package/dist/migration/migrations/index.js.map +1 -1
  63. package/dist/migration/migrations/published-current-revision.d.ts +47 -0
  64. package/dist/migration/migrations/published-current-revision.js +90 -0
  65. package/dist/migration/migrations/published-current-revision.js.map +1 -0
  66. package/dist/migration/migrations/relocate-reserved-api-paths.d.ts +3 -0
  67. package/dist/migration/migrations/relocate-reserved-api-paths.js +135 -0
  68. package/dist/migration/migrations/relocate-reserved-api-paths.js.map +1 -0
  69. package/dist/migration/migrations/wikilink-format.d.ts +0 -11
  70. package/dist/migration/migrations/wikilink-format.js +5 -156
  71. package/dist/migration/migrations/wikilink-format.js.map +1 -1
  72. package/dist/migration/migrations/wikilink-html-recover.d.ts +116 -0
  73. package/dist/migration/migrations/wikilink-html-recover.js +314 -0
  74. package/dist/migration/migrations/wikilink-html-recover.js.map +1 -0
  75. package/dist/models/page.d.ts +3 -0
  76. package/dist/models/page.js +40 -2
  77. package/dist/models/page.js.map +1 -1
  78. package/dist/models/user.d.ts +1 -0
  79. package/dist/models/user.js +40 -21
  80. package/dist/models/user.js.map +1 -1
  81. package/dist/renderer/core/headings.d.ts +12 -1
  82. package/dist/renderer/core/headings.js +48 -8
  83. package/dist/renderer/core/headings.js.map +1 -1
  84. package/dist/renderer/pipeline.d.ts +6 -0
  85. package/dist/renderer/pipeline.js.map +1 -1
  86. package/dist/util/page-response.js +19 -2
  87. package/dist/util/page-response.js.map +1 -1
  88. package/dist/util/replace-url.d.ts +85 -0
  89. package/dist/util/replace-url.js +251 -0
  90. package/dist/util/replace-url.js.map +1 -0
  91. package/package.json +13 -5
  92. package/public/images/file-not-found.png +0 -0
  93. package/views/mail/activation.mjml +9 -0
  94. package/views/mail/activation.text +13 -0
  95. package/views/mail/adminApprovalPending.mjml +7 -0
  96. package/views/mail/adminApprovalPending.text +11 -0
  97. package/views/mail/emailChange.mjml +9 -0
  98. package/views/mail/emailChange.text +13 -0
  99. package/views/mail/invite.mjml +9 -0
  100. package/views/mail/invite.text +13 -0
  101. package/views/mail/layout.mjml +38 -0
  102. package/views/mail/passwordChanged.mjml +4 -0
  103. package/views/mail/passwordChanged.text +9 -0
  104. package/views/mail/passwordReset.mjml +9 -0
  105. package/views/mail/passwordReset.text +13 -0
  106. package/views/mail/test.mjml +2 -0
  107. package/views/mail/test.text +7 -0
  108. package/dist/common/functions/path2name.d.ts +0 -1
  109. package/dist/common/functions/path2name.js +0 -22
  110. package/dist/common/functions/path2name.js.map +0 -1
  111. package/dist/common/functions/renderIcon.d.ts +0 -1
  112. package/dist/common/functions/renderIcon.js +0 -9
  113. package/dist/common/functions/renderIcon.js.map +0 -1
  114. package/dist/controllers/admin.d.ts +0 -3
  115. package/dist/controllers/admin.js +0 -474
  116. package/dist/controllers/admin.js.map +0 -1
  117. package/dist/controllers/attachment.d.ts +0 -4
  118. package/dist/controllers/attachment.js +0 -200
  119. package/dist/controllers/attachment.js.map +0 -1
  120. package/dist/controllers/backlink.d.ts +0 -3
  121. package/dist/controllers/backlink.js +0 -42
  122. package/dist/controllers/backlink.js.map +0 -1
  123. package/dist/controllers/bookmark.d.ts +0 -3
  124. package/dist/controllers/bookmark.js +0 -100
  125. package/dist/controllers/bookmark.js.map +0 -1
  126. package/dist/controllers/comment.d.ts +0 -3
  127. package/dist/controllers/comment.js +0 -111
  128. package/dist/controllers/comment.js.map +0 -1
  129. package/dist/controllers/index.d.ts +0 -25
  130. package/dist/controllers/index.js +0 -44
  131. package/dist/controllers/index.js.map +0 -1
  132. package/dist/controllers/installer.d.ts +0 -3
  133. package/dist/controllers/installer.js +0 -48
  134. package/dist/controllers/installer.js.map +0 -1
  135. package/dist/controllers/login.d.ts +0 -4
  136. package/dist/controllers/login.js +0 -438
  137. package/dist/controllers/login.js.map +0 -1
  138. package/dist/controllers/logout.d.ts +0 -5
  139. package/dist/controllers/logout.js +0 -11
  140. package/dist/controllers/logout.js.map +0 -1
  141. package/dist/controllers/me.d.ts +0 -4
  142. package/dist/controllers/me.js +0 -369
  143. package/dist/controllers/me.js.map +0 -1
  144. package/dist/controllers/notification.d.ts +0 -3
  145. package/dist/controllers/notification.js +0 -88
  146. package/dist/controllers/notification.js.map +0 -1
  147. package/dist/controllers/page.d.ts +0 -3
  148. package/dist/controllers/page.js +0 -881
  149. package/dist/controllers/page.js.map +0 -1
  150. package/dist/controllers/revision.d.ts +0 -3
  151. package/dist/controllers/revision.js +0 -91
  152. package/dist/controllers/revision.js.map +0 -1
  153. package/dist/controllers/search.d.ts +0 -3
  154. package/dist/controllers/search.js +0 -93
  155. package/dist/controllers/search.js.map +0 -1
  156. package/dist/controllers/share.d.ts +0 -3
  157. package/dist/controllers/share.js +0 -207
  158. package/dist/controllers/share.js.map +0 -1
  159. package/dist/controllers/shareAccess.d.ts +0 -3
  160. package/dist/controllers/shareAccess.js +0 -28
  161. package/dist/controllers/shareAccess.js.map +0 -1
  162. package/dist/controllers/slack.d.ts +0 -3
  163. package/dist/controllers/slack.js +0 -87
  164. package/dist/controllers/slack.js.map +0 -1
  165. package/dist/controllers/tokenAuth.d.ts +0 -10
  166. package/dist/controllers/tokenAuth.js +0 -292
  167. package/dist/controllers/tokenAuth.js.map +0 -1
  168. package/dist/controllers/user.d.ts +0 -3
  169. package/dist/controllers/user.js +0 -67
  170. package/dist/controllers/user.js.map +0 -1
  171. package/dist/controllers/version.d.ts +0 -4
  172. package/dist/controllers/version.js +0 -19
  173. package/dist/controllers/version.js.map +0 -1
  174. package/dist/crowi/express-init.d.ts +0 -4
  175. package/dist/crowi/express-init.js +0 -101
  176. package/dist/crowi/express-init.js.map +0 -1
  177. package/dist/form/admin/app.d.ts +0 -2
  178. package/dist/form/admin/app.js +0 -9
  179. package/dist/form/admin/app.js.map +0 -1
  180. package/dist/form/admin/auth.d.ts +0 -2
  181. package/dist/form/admin/auth.js +0 -9
  182. package/dist/form/admin/auth.js.map +0 -1
  183. package/dist/form/admin/aws.d.ts +0 -2
  184. package/dist/form/admin/aws.js +0 -13
  185. package/dist/form/admin/aws.js.map +0 -1
  186. package/dist/form/admin/github.d.ts +0 -2
  187. package/dist/form/admin/github.js +0 -15
  188. package/dist/form/admin/github.js.map +0 -1
  189. package/dist/form/admin/google.d.ts +0 -2
  190. package/dist/form/admin/google.js +0 -13
  191. package/dist/form/admin/google.js.map +0 -1
  192. package/dist/form/admin/mail.d.ts +0 -2
  193. package/dist/form/admin/mail.js +0 -13
  194. package/dist/form/admin/mail.js.map +0 -1
  195. package/dist/form/admin/sec.d.ts +0 -2
  196. package/dist/form/admin/sec.js +0 -10
  197. package/dist/form/admin/sec.js.map +0 -1
  198. package/dist/form/admin/slackSetting.d.ts +0 -2
  199. package/dist/form/admin/slackSetting.js +0 -13
  200. package/dist/form/admin/slackSetting.js.map +0 -1
  201. package/dist/form/admin/userEdit.d.ts +0 -2
  202. package/dist/form/admin/userEdit.js +0 -9
  203. package/dist/form/admin/userEdit.js.map +0 -1
  204. package/dist/form/admin/userInvite.d.ts +0 -2
  205. package/dist/form/admin/userInvite.js +0 -9
  206. package/dist/form/admin/userInvite.js.map +0 -1
  207. package/dist/form/comment.d.ts +0 -2
  208. package/dist/form/comment.js +0 -9
  209. package/dist/form/comment.js.map +0 -1
  210. package/dist/form/index.d.ts +0 -25
  211. package/dist/form/index.js +0 -48
  212. package/dist/form/index.js.map +0 -1
  213. package/dist/form/invited.d.ts +0 -2
  214. package/dist/form/invited.js +0 -13
  215. package/dist/form/invited.js.map +0 -1
  216. package/dist/form/login.d.ts +0 -2
  217. package/dist/form/login.js +0 -11
  218. package/dist/form/login.js.map +0 -1
  219. package/dist/form/me/apiToken.d.ts +0 -2
  220. package/dist/form/me/apiToken.js +0 -9
  221. package/dist/form/me/apiToken.js.map +0 -1
  222. package/dist/form/me/password.d.ts +0 -2
  223. package/dist/form/me/password.js +0 -11
  224. package/dist/form/me/password.js.map +0 -1
  225. package/dist/form/me/user.d.ts +0 -2
  226. package/dist/form/me/user.js +0 -9
  227. package/dist/form/me/user.js.map +0 -1
  228. package/dist/form/register.d.ts +0 -2
  229. package/dist/form/register.js +0 -13
  230. package/dist/form/register.js.map +0 -1
  231. package/dist/form/revision.d.ts +0 -2
  232. package/dist/form/revision.js +0 -13
  233. package/dist/form/revision.js.map +0 -1
  234. package/dist/hono/handlers/admin/share.d.ts +0 -106
  235. package/dist/hono/handlers/admin/share.js +0 -55
  236. package/dist/hono/handlers/admin/share.js.map +0 -1
  237. package/dist/middlewares/accessTokenParser.d.ts +0 -4
  238. package/dist/middlewares/accessTokenParser.js +0 -29
  239. package/dist/middlewares/accessTokenParser.js.map +0 -1
  240. package/dist/middlewares/adminRequired.d.ts +0 -10
  241. package/dist/middlewares/adminRequired.js +0 -35
  242. package/dist/middlewares/adminRequired.js.map +0 -1
  243. package/dist/middlewares/applicationInstalled.d.ts +0 -3
  244. package/dist/middlewares/applicationInstalled.js +0 -20
  245. package/dist/middlewares/applicationInstalled.js.map +0 -1
  246. package/dist/middlewares/applicationNotInstalled.d.ts +0 -3
  247. package/dist/middlewares/applicationNotInstalled.js +0 -13
  248. package/dist/middlewares/applicationNotInstalled.js.map +0 -1
  249. package/dist/middlewares/basicAuth.d.ts +0 -4
  250. package/dist/middlewares/basicAuth.js +0 -23
  251. package/dist/middlewares/basicAuth.js.map +0 -1
  252. package/dist/middlewares/csrfVerify.d.ts +0 -4
  253. package/dist/middlewares/csrfVerify.js +0 -24
  254. package/dist/middlewares/csrfVerify.js.map +0 -1
  255. package/dist/middlewares/encodeSpace.d.ts +0 -3
  256. package/dist/middlewares/encodeSpace.js +0 -14
  257. package/dist/middlewares/encodeSpace.js.map +0 -1
  258. package/dist/middlewares/fileAccessRightOrLoginRequired.d.ts +0 -4
  259. package/dist/middlewares/fileAccessRightOrLoginRequired.js +0 -29
  260. package/dist/middlewares/fileAccessRightOrLoginRequired.js.map +0 -1
  261. package/dist/middlewares/index.d.ts +0 -16
  262. package/dist/middlewares/index.js +0 -30
  263. package/dist/middlewares/index.js.map +0 -1
  264. package/dist/middlewares/jwtAdminRequired.d.ts +0 -8
  265. package/dist/middlewares/jwtAdminRequired.js +0 -35
  266. package/dist/middlewares/jwtAdminRequired.js.map +0 -1
  267. package/dist/middlewares/jwtAuth.d.ts +0 -4
  268. package/dist/middlewares/jwtAuth.js +0 -104
  269. package/dist/middlewares/jwtAuth.js.map +0 -1
  270. package/dist/middlewares/loginChecker.d.ts +0 -4
  271. package/dist/middlewares/loginChecker.js +0 -32
  272. package/dist/middlewares/loginChecker.js.map +0 -1
  273. package/dist/middlewares/loginRequired.d.ts +0 -4
  274. package/dist/middlewares/loginRequired.js +0 -88
  275. package/dist/middlewares/loginRequired.js.map +0 -1
  276. package/dist/routes/admin.d.ts +0 -4
  277. package/dist/routes/admin.js +0 -17
  278. package/dist/routes/admin.js.map +0 -1
  279. package/dist/routes/api/admin.d.ts +0 -4
  280. package/dist/routes/api/admin.js +0 -37
  281. package/dist/routes/api/admin.js.map +0 -1
  282. package/dist/routes/api/attachment.d.ts +0 -4
  283. package/dist/routes/api/attachment.js +0 -19
  284. package/dist/routes/api/attachment.js.map +0 -1
  285. package/dist/routes/api/bookmark.d.ts +0 -4
  286. package/dist/routes/api/bookmark.js +0 -15
  287. package/dist/routes/api/bookmark.js.map +0 -1
  288. package/dist/routes/api/comment.d.ts +0 -4
  289. package/dist/routes/api/comment.js +0 -14
  290. package/dist/routes/api/comment.js.map +0 -1
  291. package/dist/routes/api/index.d.ts +0 -4
  292. package/dist/routes/api/index.js +0 -36
  293. package/dist/routes/api/index.js.map +0 -1
  294. package/dist/routes/api/like.d.ts +0 -4
  295. package/dist/routes/api/like.js +0 -13
  296. package/dist/routes/api/like.js.map +0 -1
  297. package/dist/routes/api/notification.d.ts +0 -4
  298. package/dist/routes/api/notification.js +0 -15
  299. package/dist/routes/api/notification.js.map +0 -1
  300. package/dist/routes/api/page.d.ts +0 -4
  301. package/dist/routes/api/page.js +0 -24
  302. package/dist/routes/api/page.js.map +0 -1
  303. package/dist/routes/api/revision.d.ts +0 -4
  304. package/dist/routes/api/revision.js +0 -14
  305. package/dist/routes/api/revision.js.map +0 -1
  306. package/dist/routes/api/share.d.ts +0 -4
  307. package/dist/routes/api/share.js +0 -16
  308. package/dist/routes/api/share.js.map +0 -1
  309. package/dist/routes/api/version.d.ts +0 -4
  310. package/dist/routes/api/version.js +0 -10
  311. package/dist/routes/api/version.js.map +0 -1
  312. package/dist/routes/index.d.ts +0 -4
  313. package/dist/routes/index.js +0 -71
  314. package/dist/routes/index.js.map +0 -1
  315. package/dist/routes/login.d.ts +0 -4
  316. package/dist/routes/login.js +0 -18
  317. package/dist/routes/login.js.map +0 -1
  318. package/dist/routes/me.d.ts +0 -4
  319. package/dist/routes/me.js +0 -24
  320. package/dist/routes/me.js.map +0 -1
  321. package/dist/routes/ts-rest/admin/app.d.ts +0 -4
  322. package/dist/routes/ts-rest/admin/app.js +0 -67
  323. package/dist/routes/ts-rest/admin/app.js.map +0 -1
  324. package/dist/routes/ts-rest/admin/auth.d.ts +0 -4
  325. package/dist/routes/ts-rest/admin/auth.js +0 -95
  326. package/dist/routes/ts-rest/admin/auth.js.map +0 -1
  327. package/dist/routes/ts-rest/admin/index.d.ts +0 -10
  328. package/dist/routes/ts-rest/admin/index.js +0 -35
  329. package/dist/routes/ts-rest/admin/index.js.map +0 -1
  330. package/dist/routes/ts-rest/admin/mail.d.ts +0 -4
  331. package/dist/routes/ts-rest/admin/mail.js +0 -156
  332. package/dist/routes/ts-rest/admin/mail.js.map +0 -1
  333. package/dist/routes/ts-rest/admin/plugins.d.ts +0 -4
  334. package/dist/routes/ts-rest/admin/plugins.js +0 -317
  335. package/dist/routes/ts-rest/admin/plugins.js.map +0 -1
  336. package/dist/routes/ts-rest/admin/search.d.ts +0 -4
  337. package/dist/routes/ts-rest/admin/search.js +0 -67
  338. package/dist/routes/ts-rest/admin/search.js.map +0 -1
  339. package/dist/routes/ts-rest/admin/security.d.ts +0 -4
  340. package/dist/routes/ts-rest/admin/security.js +0 -114
  341. package/dist/routes/ts-rest/admin/security.js.map +0 -1
  342. package/dist/routes/ts-rest/admin/share.d.ts +0 -4
  343. package/dist/routes/ts-rest/admin/share.js +0 -69
  344. package/dist/routes/ts-rest/admin/share.js.map +0 -1
  345. package/dist/routes/ts-rest/admin/storage.d.ts +0 -4
  346. package/dist/routes/ts-rest/admin/storage.js +0 -59
  347. package/dist/routes/ts-rest/admin/storage.js.map +0 -1
  348. package/dist/routes/ts-rest/admin/users.d.ts +0 -4
  349. package/dist/routes/ts-rest/admin/users.js +0 -215
  350. package/dist/routes/ts-rest/admin/users.js.map +0 -1
  351. package/dist/routes/ts-rest/adminCrypto.d.ts +0 -4
  352. package/dist/routes/ts-rest/adminCrypto.js +0 -111
  353. package/dist/routes/ts-rest/adminCrypto.js.map +0 -1
  354. package/dist/routes/ts-rest/app.d.ts +0 -4
  355. package/dist/routes/ts-rest/app.js +0 -23
  356. package/dist/routes/ts-rest/app.js.map +0 -1
  357. package/dist/routes/ts-rest/attachment.d.ts +0 -4
  358. package/dist/routes/ts-rest/attachment.js +0 -830
  359. package/dist/routes/ts-rest/attachment.js.map +0 -1
  360. package/dist/routes/ts-rest/auth.d.ts +0 -4
  361. package/dist/routes/ts-rest/auth.js +0 -70
  362. package/dist/routes/ts-rest/auth.js.map +0 -1
  363. package/dist/routes/ts-rest/autocomplete.d.ts +0 -30
  364. package/dist/routes/ts-rest/autocomplete.js +0 -189
  365. package/dist/routes/ts-rest/autocomplete.js.map +0 -1
  366. package/dist/routes/ts-rest/backlink.d.ts +0 -4
  367. package/dist/routes/ts-rest/backlink.js +0 -106
  368. package/dist/routes/ts-rest/backlink.js.map +0 -1
  369. package/dist/routes/ts-rest/bookmark.d.ts +0 -4
  370. package/dist/routes/ts-rest/bookmark.js +0 -189
  371. package/dist/routes/ts-rest/bookmark.js.map +0 -1
  372. package/dist/routes/ts-rest/comment.d.ts +0 -4
  373. package/dist/routes/ts-rest/comment.js +0 -217
  374. package/dist/routes/ts-rest/comment.js.map +0 -1
  375. package/dist/routes/ts-rest/draft.d.ts +0 -22
  376. package/dist/routes/ts-rest/draft.js +0 -200
  377. package/dist/routes/ts-rest/draft.js.map +0 -1
  378. package/dist/routes/ts-rest/index.d.ts +0 -4
  379. package/dist/routes/ts-rest/index.js +0 -103
  380. package/dist/routes/ts-rest/index.js.map +0 -1
  381. package/dist/routes/ts-rest/installer.d.ts +0 -4
  382. package/dist/routes/ts-rest/installer.js +0 -77
  383. package/dist/routes/ts-rest/installer.js.map +0 -1
  384. package/dist/routes/ts-rest/me.d.ts +0 -4
  385. package/dist/routes/ts-rest/me.js +0 -410
  386. package/dist/routes/ts-rest/me.js.map +0 -1
  387. package/dist/routes/ts-rest/notification.d.ts +0 -4
  388. package/dist/routes/ts-rest/notification.js +0 -241
  389. package/dist/routes/ts-rest/notification.js.map +0 -1
  390. package/dist/routes/ts-rest/page-collab.d.ts +0 -29
  391. package/dist/routes/ts-rest/page-collab.js +0 -90
  392. package/dist/routes/ts-rest/page-collab.js.map +0 -1
  393. package/dist/routes/ts-rest/page-preview.d.ts +0 -26
  394. package/dist/routes/ts-rest/page-preview.js +0 -80
  395. package/dist/routes/ts-rest/page-preview.js.map +0 -1
  396. package/dist/routes/ts-rest/page.d.ts +0 -4
  397. package/dist/routes/ts-rest/page.js +0 -676
  398. package/dist/routes/ts-rest/page.js.map +0 -1
  399. package/dist/routes/ts-rest/presence.d.ts +0 -30
  400. package/dist/routes/ts-rest/presence.js +0 -155
  401. package/dist/routes/ts-rest/presence.js.map +0 -1
  402. package/dist/routes/ts-rest/revision.d.ts +0 -4
  403. package/dist/routes/ts-rest/revision.js +0 -240
  404. package/dist/routes/ts-rest/revision.js.map +0 -1
  405. package/dist/routes/ts-rest/search.d.ts +0 -4
  406. package/dist/routes/ts-rest/search.js +0 -121
  407. package/dist/routes/ts-rest/search.js.map +0 -1
  408. package/dist/routes/ts-rest/tokenAuth.d.ts +0 -4
  409. package/dist/routes/ts-rest/tokenAuth.js +0 -94
  410. package/dist/routes/ts-rest/tokenAuth.js.map +0 -1
  411. package/dist/routes/ts-rest/user.d.ts +0 -4
  412. package/dist/routes/ts-rest/user.js +0 -307
  413. package/dist/routes/ts-rest/user.js.map +0 -1
  414. package/dist/types/express.d.ts +0 -34
  415. package/dist/types/express.js +0 -50
  416. package/dist/types/express.js.map +0 -1
  417. package/dist/util/accessTokenParser.d.ts +0 -1
  418. package/dist/util/accessTokenParser.js +0 -34
  419. package/dist/util/accessTokenParser.js.map +0 -1
  420. package/dist/util/apiPaginate.d.ts +0 -11
  421. package/dist/util/apiPaginate.js +0 -33
  422. package/dist/util/apiPaginate.js.map +0 -1
  423. package/dist/util/apiResponse.d.ts +0 -9
  424. package/dist/util/apiResponse.js +0 -23
  425. package/dist/util/apiResponse.js.map +0 -1
  426. package/dist/util/auth.d.ts +0 -11
  427. package/dist/util/auth.js +0 -48
  428. package/dist/util/auth.js.map +0 -1
  429. package/dist/util/aws-config-migration.d.ts +0 -11
  430. package/dist/util/aws-config-migration.js +0 -68
  431. package/dist/util/aws-config-migration.js.map +0 -1
  432. package/dist/util/formUtil.d.ts +0 -2
  433. package/dist/util/formUtil.js +0 -15
  434. package/dist/util/formUtil.js.map +0 -1
  435. package/dist/util/githubAuth.d.ts +0 -2
  436. package/dist/util/githubAuth.js +0 -82
  437. package/dist/util/githubAuth.js.map +0 -1
  438. package/dist/util/googleAuth.d.ts +0 -2
  439. package/dist/util/googleAuth.js +0 -85
  440. package/dist/util/googleAuth.js.map +0 -1
  441. package/dist/util/mailer.d.ts +0 -7
  442. package/dist/util/mailer.js +0 -98
  443. package/dist/util/mailer.js.map +0 -1
  444. package/dist/util/page-status-migration.d.ts +0 -23
  445. package/dist/util/page-status-migration.js +0 -48
  446. package/dist/util/page-status-migration.js.map +0 -1
  447. package/dist/util/ssr.d.ts +0 -3
  448. package/dist/util/ssr.js +0 -9
  449. package/dist/util/ssr.js.map +0 -1
  450. package/dist/util/view.d.ts +0 -10
  451. package/dist/util/view.js +0 -99
  452. package/dist/util/view.js.map +0 -1
@@ -1,95 +0,0 @@
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 express_1 = require("@ts-rest/express");
7
- const api_contract_1 = require("@crowi/api-contract");
8
- const express_2 = require("express");
9
- const admin_config_1 = require("../../../util/admin-config");
10
- const ts_rest_helpers_1 = require("../../../util/ts-rest-helpers");
11
- const debug_1 = __importDefault(require("debug"));
12
- const debug = (0, debug_1.default)('crowi:routes:ts-rest:admin:auth');
13
- const KEY_REQUIRE_THIRD_PARTY_AUTH = 'auth:requireThirdPartyAuth';
14
- const KEY_DISABLE_PASSWORD_AUTH = 'auth:disablePasswordAuth';
15
- const readAuthSettings = (crowi) => {
16
- const ns = (0, admin_config_1.getCrowiConfigNamespace)(crowi);
17
- return {
18
- requireThirdPartyAuth: (0, admin_config_1.coerceBoolean)(ns[KEY_REQUIRE_THIRD_PARTY_AUTH]),
19
- disablePasswordAuth: (0, admin_config_1.coerceBoolean)(ns[KEY_DISABLE_PASSWORD_AUTH]),
20
- };
21
- };
22
- exports.default = (crowi, _app) => {
23
- const s = (0, express_1.initServer)();
24
- const router = (0, express_2.Router)();
25
- const authRouter = s.router(api_contract_1.apiContract.admin.auth, {
26
- /**
27
- * GET /api/v2/admin/auth
28
- * Returns the two `auth:*` config values currently in effect.
29
- * Authorization (jwt + admin) is handled by the surrounding adminRouter
30
- * middleware; missing/forbidden auth never reaches this handler.
31
- */
32
- getAuthSettings: async () => {
33
- try {
34
- const settings = readAuthSettings(crowi);
35
- return { status: 200, body: settings };
36
- }
37
- catch (err) {
38
- const error = err;
39
- debug('Error reading auth settings:', error.message);
40
- return ts_rest_helpers_1.internalServerErrorResponse;
41
- }
42
- },
43
- /**
44
- * PUT /api/v2/admin/auth
45
- * Persists the two `auth:*` keys via configService.saveConfig('crowi', ...).
46
- *
47
- * Self-lockout guard: if the requester sets `disablePasswordAuth: true`
48
- * but their own account is not connected to a valid third-party identity
49
- * (Google / GitHub), reject with 422. Mirrors the legacy guard in
50
- * controllers/admin.ts:postSettings — it intentionally checks only the
51
- * acting admin, not other admins, matching the previous behaviour.
52
- *
53
- * - We only write the two auth keys we own; saveConfig merges into the
54
- * existing 'crowi' namespace so unrelated keys (app:*, security:*,
55
- * mail:*) are untouched.
56
- * - Returns the post-save settings so the UI doesn't need a follow-up GET.
57
- */
58
- updateAuthSettings: async ({ body, req }) => {
59
- // jwtAdminRequired guarantees req.user is populated; the augmentation
60
- // declares it optional so we re-narrow here.
61
- const user = req.user;
62
- if (body.disablePasswordAuth && !user.hasValidThirdPartyId()) {
63
- return {
64
- status: 422,
65
- body: {
66
- error: {
67
- code: 'PASSWORD_AUTH_REQUIRES_THIRDPARTY',
68
- // Wire-level fallback; UIs key off `code` and render the
69
- // localised message via paraglide. Kept non-empty so legacy
70
- // / scripted callers see a hint without grepping for the code.
71
- message: 'Disabling password auth requires the acting admin to be connected to a valid third-party identity.',
72
- },
73
- },
74
- };
75
- }
76
- try {
77
- await crowi.getConfigService().saveConfig('crowi', {
78
- [KEY_REQUIRE_THIRD_PARTY_AUTH]: body.requireThirdPartyAuth,
79
- [KEY_DISABLE_PASSWORD_AUTH]: body.disablePasswordAuth,
80
- });
81
- }
82
- catch (err) {
83
- const error = err;
84
- debug('Error saving auth settings:', error.message);
85
- return ts_rest_helpers_1.internalServerErrorResponse;
86
- }
87
- // Re-read from the in-memory cache (saveConfig updates it) so the
88
- // response reflects the new values without a Mongo round-trip.
89
- return { status: 200, body: readAuthSettings(crowi) };
90
- },
91
- });
92
- (0, express_1.createExpressEndpoints)(api_contract_1.apiContract.admin.auth, authRouter, router);
93
- return router;
94
- };
95
- //# sourceMappingURL=auth.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../../src/routes/ts-rest/admin/auth.ts"],"names":[],"mappings":";;;;;AAAA,8CAAsE;AACtE,sDAAqE;AAErE,qCAA0C;AAE1C,wDAA+E;AAC/E,8DAAuE;AACvE,kDAA0B;AAE1B,MAAM,KAAK,GAAG,IAAA,eAAK,EAAC,iCAAiC,CAAC,CAAC;AAEvD,MAAM,4BAA4B,GAAG,4BAA4B,CAAC;AAClE,MAAM,yBAAyB,GAAG,0BAA0B,CAAC;AAE7D,MAAM,gBAAgB,GAAG,CAAC,KAAY,EAAgB,EAAE;IACtD,MAAM,EAAE,GAAG,IAAA,sCAAuB,EAAC,KAAK,CAAC,CAAC;IAC1C,OAAO;QACL,qBAAqB,EAAE,IAAA,4BAAa,EAAC,EAAE,CAAC,4BAA4B,CAAC,CAAC;QACtE,mBAAmB,EAAE,IAAA,4BAAa,EAAC,EAAE,CAAC,yBAAyB,CAAC,CAAC;KAClE,CAAC;AACJ,CAAC,CAAC;AAEF,kBAAe,CAAC,KAAY,EAAE,IAAa,EAAE,EAAE;IAC7C,MAAM,CAAC,GAAG,IAAA,oBAAU,GAAE,CAAC;IACvB,MAAM,MAAM,GAAG,IAAA,gBAAM,GAAE,CAAC;IAExB,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,0BAAW,CAAC,KAAK,CAAC,IAAI,EAAE;QAClD;;;;;WAKG;QACH,eAAe,EAAE,KAAK,IAAI,EAAE;YAC1B,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;gBACzC,OAAO,EAAE,MAAM,EAAE,GAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;YAClD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,KAAK,GAAG,GAAY,CAAC;gBAC3B,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;gBACrD,OAAO,6CAA2B,CAAC;YACrC,CAAC;QACH,CAAC;QAED;;;;;;;;;;;;;;WAcG;QACH,kBAAkB,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE;YAC1C,sEAAsE;YACtE,6CAA6C;YAC7C,MAAM,IAAI,GAAG,GAAG,CAAC,IAAoB,CAAC;YAEtC,IAAI,IAAI,CAAC,mBAAmB,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,CAAC;gBAC7D,OAAO;oBACL,MAAM,EAAE,GAAY;oBACpB,IAAI,EAAE;wBACJ,KAAK,EAAE;4BACL,IAAI,EAAE,mCAA4C;4BAClD,yDAAyD;4BACzD,4DAA4D;4BAC5D,+DAA+D;4BAC/D,OAAO,EAAE,oGAAoG;yBAC9G;qBACF;iBACF,CAAC;YACJ,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,KAAK,CAAC,gBAAgB,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE;oBACjD,CAAC,4BAA4B,CAAC,EAAE,IAAI,CAAC,qBAAqB;oBAC1D,CAAC,yBAAyB,CAAC,EAAE,IAAI,CAAC,mBAAmB;iBACtD,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,KAAK,GAAG,GAAY,CAAC;gBAC3B,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;gBACpD,OAAO,6CAA2B,CAAC;YACrC,CAAC;YAED,kEAAkE;YAClE,+DAA+D;YAC/D,OAAO,EAAE,MAAM,EAAE,GAAY,EAAE,IAAI,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;QACjE,CAAC;KACF,CAAC,CAAC;IAEH,IAAA,gCAAsB,EAAC,0BAAW,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IAEnE,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC"}
@@ -1,10 +0,0 @@
1
- import Crowi from '../../../crowi';
2
- import { Express } from 'express';
3
- /**
4
- * Aggregate router for all admin-only ts-rest endpoints. Mounted under the
5
- * adminRouter in `routes/ts-rest/index.ts` which already applies
6
- * `jwtAdminRequired` (JWT + admin permission). Individual sub-routers should
7
- * therefore not re-implement authorization.
8
- */
9
- declare const _default: (crowi: Crowi, app: Express) => import("express-serve-static-core").Router;
10
- export default _default;
@@ -1,35 +0,0 @@
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 express_1 = require("express");
7
- const app_1 = __importDefault(require("./app"));
8
- const auth_1 = __importDefault(require("./auth"));
9
- const mail_1 = __importDefault(require("./mail"));
10
- const plugins_1 = __importDefault(require("./plugins"));
11
- const search_1 = __importDefault(require("./search"));
12
- const security_1 = __importDefault(require("./security"));
13
- const share_1 = __importDefault(require("./share"));
14
- const storage_1 = __importDefault(require("./storage"));
15
- const users_1 = __importDefault(require("./users"));
16
- /**
17
- * Aggregate router for all admin-only ts-rest endpoints. Mounted under the
18
- * adminRouter in `routes/ts-rest/index.ts` which already applies
19
- * `jwtAdminRequired` (JWT + admin permission). Individual sub-routers should
20
- * therefore not re-implement authorization.
21
- */
22
- exports.default = (crowi, app) => {
23
- const router = (0, express_1.Router)();
24
- router.use((0, app_1.default)(crowi, app));
25
- router.use((0, auth_1.default)(crowi, app));
26
- router.use((0, security_1.default)(crowi, app));
27
- router.use((0, mail_1.default)(crowi, app));
28
- router.use((0, share_1.default)(crowi, app));
29
- router.use((0, storage_1.default)(crowi, app));
30
- router.use((0, search_1.default)(crowi, app));
31
- router.use((0, users_1.default)(crowi, app));
32
- router.use((0, plugins_1.default)(crowi, app));
33
- return router;
34
- };
35
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/routes/ts-rest/admin/index.ts"],"names":[],"mappings":";;;;;AACA,qCAA0C;AAC1C,gDAA8B;AAC9B,kDAAgC;AAChC,kDAAgC;AAChC,wDAAsC;AACtC,sDAAoC;AACpC,0DAAwC;AACxC,oDAAkC;AAClC,wDAAsC;AACtC,oDAAkC;AAElC;;;;;GAKG;AACH,kBAAe,CAAC,KAAY,EAAE,GAAY,EAAE,EAAE;IAC5C,MAAM,MAAM,GAAG,IAAA,gBAAM,GAAE,CAAC;IAExB,MAAM,CAAC,GAAG,CAAC,IAAA,aAAS,EAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IAClC,MAAM,CAAC,GAAG,CAAC,IAAA,cAAU,EAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IACnC,MAAM,CAAC,GAAG,CAAC,IAAA,kBAAc,EAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IACvC,MAAM,CAAC,GAAG,CAAC,IAAA,cAAU,EAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IACnC,MAAM,CAAC,GAAG,CAAC,IAAA,eAAW,EAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IACpC,MAAM,CAAC,GAAG,CAAC,IAAA,iBAAa,EAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IACtC,MAAM,CAAC,GAAG,CAAC,IAAA,gBAAY,EAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IACrC,MAAM,CAAC,GAAG,CAAC,IAAA,eAAW,EAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IACpC,MAAM,CAAC,GAAG,CAAC,IAAA,iBAAa,EAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IAEtC,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC"}
@@ -1,4 +0,0 @@
1
- import { Express } from 'express';
2
- import Crowi from '../../../crowi';
3
- declare const _default: (crowi: Crowi, _app: Express) => import("express-serve-static-core").Router;
4
- export default _default;
@@ -1,156 +0,0 @@
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 express_1 = require("@ts-rest/express");
7
- const api_contract_1 = require("@crowi/api-contract");
8
- const express_2 = require("express");
9
- const admin_config_1 = require("../../../util/admin-config");
10
- const debug_1 = __importDefault(require("debug"));
11
- const debug = (0, debug_1.default)('crowi:routes:ts-rest:admin:mail');
12
- const KEY_FROM = 'mail:from';
13
- const KEY_SMTP_HOST = 'mail:smtpHost';
14
- const KEY_SMTP_PORT = 'mail:smtpPort';
15
- const KEY_SMTP_USER = 'mail:smtpUser';
16
- const KEY_SMTP_PASSWORD = 'mail:smtpPassword';
17
- const KEY_AWS_REGION = 'mail:aws:region';
18
- const KEY_AWS_ACCESS_KEY = 'mail:aws:accessKeyId';
19
- const KEY_AWS_SECRET = 'mail:aws:secretAccessKey';
20
- exports.default = (crowi, _app) => {
21
- const s = (0, express_1.initServer)();
22
- const router = (0, express_2.Router)();
23
- const router_ = s.router(api_contract_1.apiContract.admin.mail, {
24
- getMailSettings: async () => {
25
- const ns = (0, admin_config_1.getCrowiConfigNamespace)(crowi);
26
- const smtpPassword = (0, admin_config_1.coerceString)(ns[KEY_SMTP_PASSWORD]);
27
- const awsSecret = (0, admin_config_1.coerceString)(ns[KEY_AWS_SECRET]);
28
- return {
29
- status: 200,
30
- body: {
31
- from: (0, admin_config_1.coerceString)(ns[KEY_FROM]),
32
- smtpHost: (0, admin_config_1.coerceString)(ns[KEY_SMTP_HOST]),
33
- smtpPort: (0, admin_config_1.coerceNumber)(ns[KEY_SMTP_PORT]),
34
- smtpUser: (0, admin_config_1.coerceString)(ns[KEY_SMTP_USER]),
35
- smtpPassword: { hasValue: smtpPassword.length > 0 },
36
- aws: {
37
- region: (0, admin_config_1.coerceString)(ns[KEY_AWS_REGION]),
38
- accessKeyId: (0, admin_config_1.coerceString)(ns[KEY_AWS_ACCESS_KEY]),
39
- secretAccessKey: { hasValue: awsSecret.length > 0 },
40
- },
41
- },
42
- };
43
- },
44
- /**
45
- * Partial update. `smtpPassword` and `aws.secretAccessKey` follow the same
46
- * three-state semantics admin/app uses:
47
- * - omitted → not added to the payload, value stays untouched.
48
- * - empty '' → forwarded as '' to clear the row.
49
- * - non-empty → forwarded; auto-encryption kicks in via `isSensitiveConfig`.
50
- *
51
- * After persisting we re-run `crowi.setupMailer()` so the in-memory mailer
52
- * reflects the new values without a server restart.
53
- */
54
- updateMailSettings: async ({ body }) => {
55
- const updates = {};
56
- if (body.from !== undefined)
57
- updates[KEY_FROM] = body.from;
58
- if (body.smtpHost !== undefined)
59
- updates[KEY_SMTP_HOST] = body.smtpHost;
60
- if (body.smtpPort !== undefined)
61
- updates[KEY_SMTP_PORT] = body.smtpPort;
62
- if (body.smtpUser !== undefined)
63
- updates[KEY_SMTP_USER] = body.smtpUser;
64
- if (body.smtpPassword !== undefined)
65
- updates[KEY_SMTP_PASSWORD] = body.smtpPassword;
66
- if (body.aws) {
67
- const { region, accessKeyId, secretAccessKey } = body.aws;
68
- if (region !== undefined)
69
- updates[KEY_AWS_REGION] = region;
70
- if (accessKeyId !== undefined)
71
- updates[KEY_AWS_ACCESS_KEY] = accessKeyId;
72
- if (secretAccessKey !== undefined)
73
- updates[KEY_AWS_SECRET] = secretAccessKey;
74
- }
75
- if (Object.keys(updates).length > 0) {
76
- debug('updateMailSettings keys=%o', Object.keys(updates));
77
- await crowi.getConfigService().saveConfig('crowi', updates);
78
- crowi.setupMailer();
79
- }
80
- return { status: 200, body: { ok: true } };
81
- },
82
- /**
83
- * Send a test mail to the calling admin's email. Mirrors the legacy
84
- * `validateMailSetting` controller: builds an SMTP transport from the
85
- * supplied option (or current saved values) and dispatches a fixed-text
86
- * mail. Network errors surface as 502.
87
- */
88
- sendTestMail: async ({ body, req }) => {
89
- const user = req.user;
90
- if (!user || !user.email) {
91
- return {
92
- status: 502,
93
- body: { error: { code: 'MAIL_TEST_FAILED', message: 'No email address on the calling user' } },
94
- };
95
- }
96
- const ns = (0, admin_config_1.getCrowiConfigNamespace)(crowi);
97
- const host = body?.smtpHost ?? (0, admin_config_1.coerceString)(ns[KEY_SMTP_HOST]);
98
- const port = body?.smtpPort ?? (0, admin_config_1.coerceNumber)(ns[KEY_SMTP_PORT]);
99
- const smtpUser = body?.smtpUser ?? (0, admin_config_1.coerceString)(ns[KEY_SMTP_USER]);
100
- const smtpPassword = body?.smtpPassword ?? (0, admin_config_1.coerceString)(ns[KEY_SMTP_PASSWORD]);
101
- if (!host || !port) {
102
- return {
103
- status: 502,
104
- body: { error: { code: 'MAIL_TEST_FAILED', message: 'SMTP host / port is not configured' } },
105
- };
106
- }
107
- const option = {
108
- host,
109
- port,
110
- };
111
- if (smtpUser && smtpPassword) {
112
- option.auth = { user: smtpUser, pass: smtpPassword };
113
- }
114
- if (port === 465) {
115
- option.secure = true;
116
- }
117
- const mailer = crowi.mailer;
118
- if (!mailer || typeof mailer.createSMTPClient !== 'function') {
119
- return {
120
- status: 502,
121
- body: { error: { code: 'MAIL_TEST_FAILED', message: 'Mailer is not initialized' } },
122
- };
123
- }
124
- const smtpClient = mailer.createSMTPClient(option);
125
- try {
126
- await new Promise((resolve, reject) => {
127
- smtpClient.sendMail({
128
- to: user.email,
129
- // ASCII-only: this is an SMTP smoke test that has to land
130
- // in the recipient's inbox even when the configured
131
- // transport's character-encoding settings are wrong.
132
- subject: 'Crowi: SMTP test mail',
133
- text: 'This is a test message dispatched from the Crowi admin SMTP settings page.',
134
- }, (err) => {
135
- if (err)
136
- reject(err);
137
- else
138
- resolve();
139
- });
140
- });
141
- }
142
- catch (err) {
143
- const error = err;
144
- debug('sendTestMail failed: %s', error.message);
145
- return {
146
- status: 502,
147
- body: { error: { code: 'MAIL_TEST_FAILED', message: error.message } },
148
- };
149
- }
150
- return { status: 200, body: { ok: true, to: user.email } };
151
- },
152
- });
153
- (0, express_1.createExpressEndpoints)(api_contract_1.apiContract.admin.mail, router_, router);
154
- return router;
155
- };
156
- //# sourceMappingURL=mail.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mail.js","sourceRoot":"","sources":["../../../../src/routes/ts-rest/admin/mail.ts"],"names":[],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- import { Express } from 'express';
2
- import Crowi from '../../../crowi';
3
- declare const _default: (crowi: Crowi, _app: Express) => import("express-serve-static-core").Router;
4
- export default _default;
@@ -1,317 +0,0 @@
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 express_1 = require("@ts-rest/express");
7
- const express_2 = require("express");
8
- const api_contract_1 = require("@crowi/api-contract");
9
- const schema_serializer_1 = require("../../../plugin/schema-serializer");
10
- const ts_rest_helpers_1 = require("../../../util/ts-rest-helpers");
11
- const debug_1 = __importDefault(require("debug"));
12
- const debug = (0, debug_1.default)('crowi:routes:ts-rest:admin:plugins');
13
- exports.default = (crowi, _app) => {
14
- const s = (0, express_1.initServer)();
15
- const router = (0, express_2.Router)();
16
- const pluginsRouter = s.router(api_contract_1.apiContract.admin.plugins, {
17
- /**
18
- * GET /api/v2/admin/plugins
19
- *
20
- * Lists every plugin currently loaded by the PluginManager along
21
- * with its declared registry slots. The admin "Plugins" page
22
- * renders this as a table.
23
- */
24
- listPlugins: async () => {
25
- const manager = crowi.pluginManager;
26
- if (!manager) {
27
- return { status: 200, body: { plugins: [] } };
28
- }
29
- const all = manager.getLoadedPlugins();
30
- const plugins = all.map((p) => toPluginInfo(p, all));
31
- return { status: 200, body: { plugins } };
32
- },
33
- /**
34
- * GET /api/v2/admin/plugins/:name/config
35
- *
36
- * Get the form schema + current values for a single plugin.
37
- * Sensitive fields are masked to `{ hasValue: boolean }` before
38
- * returning so plaintext secrets never reach the browser.
39
- */
40
- getPluginConfig: async ({ query }) => {
41
- const manager = crowi.pluginManager;
42
- const plugin = manager?.getLoadedPlugin(query.name);
43
- if (!plugin) {
44
- return pluginNotFound(query.name);
45
- }
46
- if (!plugin.configSchema) {
47
- // Plugin has no configurable values; return an empty form.
48
- return {
49
- status: 200,
50
- body: { name: plugin.name, fields: [], values: {} },
51
- };
52
- }
53
- const fields = (0, schema_serializer_1.serializeConfigSchema)(plugin.configSchema);
54
- const ns = readPluginNamespace(crowi, plugin.name);
55
- const values = {};
56
- for (const field of fields) {
57
- if (field.kind === 'secret') {
58
- const raw = ns[field.name];
59
- values[field.name] = { hasValue: typeof raw === 'string' && raw.length > 0 };
60
- }
61
- else {
62
- values[field.name] = ns[field.name] ?? field.defaultValue ?? null;
63
- }
64
- }
65
- return {
66
- status: 200,
67
- body: { name: plugin.name, fields, values },
68
- };
69
- },
70
- /**
71
- * PUT /api/v2/admin/plugins/:name/config
72
- *
73
- * Validate the request body through the plugin's Zod schema and
74
- * persist each field into `plugin:<name>:*` config rows. Sensitive
75
- * fields follow the three-state convention used by /admin/app and
76
- * /admin/mail:
77
- * - undefined / missing → leave value untouched
78
- * - empty string → clear the saved value
79
- * - non-empty string → replace and re-encrypt
80
- */
81
- updatePluginConfig: async ({ query, body }) => {
82
- const manager = crowi.pluginManager;
83
- const plugin = manager?.getLoadedPlugin(query.name);
84
- if (!plugin) {
85
- return pluginNotFound(query.name);
86
- }
87
- if (!plugin.configSchema) {
88
- return {
89
- status: 422,
90
- body: {
91
- error: {
92
- code: 'PLUGIN_CONFIG_VALIDATION_FAILED',
93
- message: 'Plugin does not declare any configurable values',
94
- issues: [],
95
- },
96
- },
97
- };
98
- }
99
- const fields = (0, schema_serializer_1.serializeConfigSchema)(plugin.configSchema);
100
- const fieldsByName = new Map(fields.map((f) => [f.name, f]));
101
- // Build a candidate object using new values + existing values
102
- // for fields the operator did not touch (so secret-untouched
103
- // doesn't overwrite the saved secret).
104
- const existing = readPluginNamespace(crowi, plugin.name);
105
- const merged = { ...existing };
106
- const toWrite = {};
107
- for (const [key, value] of Object.entries(body.values)) {
108
- const field = fieldsByName.get(key);
109
- if (!field) {
110
- // Ignore unknown keys. The Zod parse below would also catch
111
- // them via `.strict()`, but we strip first so users get
112
- // friendlier per-field errors instead of a global one.
113
- continue;
114
- }
115
- if (field.kind === 'secret' && value === undefined) {
116
- // explicitly leave untouched
117
- continue;
118
- }
119
- merged[key] = value;
120
- toWrite[key] = value;
121
- }
122
- const parsed = plugin.configSchema.safeParse(merged);
123
- if (!parsed.success) {
124
- return {
125
- status: 422,
126
- body: {
127
- error: {
128
- code: 'PLUGIN_CONFIG_VALIDATION_FAILED',
129
- message: 'Plugin config failed validation',
130
- issues: parsed.error.issues.map((i) => ({
131
- path: i.path.map((p) => (typeof p === 'symbol' ? String(p) : p)),
132
- message: i.message,
133
- })),
134
- },
135
- },
136
- };
137
- }
138
- const configService = crowi.getConfigService();
139
- const writes = {};
140
- for (const [key, value] of Object.entries(toWrite)) {
141
- writes[`plugin:${plugin.name}:${key}`] = value;
142
- }
143
- try {
144
- if (Object.keys(writes).length > 0) {
145
- await configService.saveConfig('crowi', writes);
146
- }
147
- }
148
- catch (err) {
149
- const error = err;
150
- debug('Error saving plugin config:', error.message);
151
- return ts_rest_helpers_1.internalServerErrorResponse;
152
- }
153
- let hotReloaded = false;
154
- let reconfigureFailed = false;
155
- const pluginManager = crowi.pluginManager;
156
- if (pluginManager && Object.keys(writes).length > 0) {
157
- const result = await pluginManager.reconfigureAffected([`plugin:${plugin.name}`]);
158
- hotReloaded = result.attempted > 0 && result.succeeded === result.attempted;
159
- reconfigureFailed = result.attempted > result.succeeded;
160
- }
161
- return { status: 200, body: { ok: true, hotReloaded, reconfigureFailed } };
162
- },
163
- /**
164
- * POST /api/v2/admin/plugins/render-cache/clear-all
165
- *
166
- * Drops every PluginRenderCache document. Surfaced by the
167
- * "Clear all render cache" button in the admin UI. The next
168
- * render of any embed-bearing page repopulates the cache.
169
- */
170
- clearRenderCacheAll: async () => {
171
- const renderer = crowi.renderer;
172
- if (!renderer) {
173
- return ts_rest_helpers_1.internalServerErrorResponse;
174
- }
175
- try {
176
- const removedCount = await renderer.cache.invalidateAll();
177
- return {
178
- status: 200,
179
- body: {
180
- ok: true,
181
- clearedAt: new Date().toISOString(),
182
- removedCount,
183
- },
184
- };
185
- }
186
- catch (err) {
187
- debug('clearRenderCacheAll failed:', err.message);
188
- return ts_rest_helpers_1.internalServerErrorResponse;
189
- }
190
- },
191
- /**
192
- * POST /api/v2/admin/plugins/render-cache/clear-plugin?name=…
193
- *
194
- * Drops PluginRenderCache documents whose `pluginName` matches.
195
- * Returns 404 when the named plugin is not loaded; that prevents
196
- * typos from silently succeeding ("nothing matched, but ok").
197
- */
198
- clearRenderCachePlugin: async ({ query }) => {
199
- const renderer = crowi.renderer;
200
- const manager = crowi.pluginManager;
201
- if (!renderer) {
202
- return ts_rest_helpers_1.internalServerErrorResponse;
203
- }
204
- if (manager && !manager.getLoadedPlugin(query.name)) {
205
- return pluginNotFound(query.name);
206
- }
207
- try {
208
- const removedCount = await renderer.cache.invalidatePlugin(query.name);
209
- return {
210
- status: 200,
211
- body: {
212
- ok: true,
213
- clearedAt: new Date().toISOString(),
214
- removedCount,
215
- },
216
- };
217
- }
218
- catch (err) {
219
- debug('clearRenderCachePlugin failed:', err.message);
220
- return ts_rest_helpers_1.internalServerErrorResponse;
221
- }
222
- },
223
- });
224
- (0, express_1.createExpressEndpoints)(api_contract_1.apiContract.admin.plugins, pluginsRouter, router);
225
- return router;
226
- };
227
- const toPluginInfo = (plugin, all) => ({
228
- name: plugin.name,
229
- version: plugin.version,
230
- requires: plugin.requires,
231
- hasConfig: !!plugin.configSchema,
232
- registers: collectRegistrySlots(plugin),
233
- adminPlacement: resolvePlacement(plugin),
234
- supportsHotReload: hasReconfigureOrDependent(plugin, all),
235
- });
236
- /**
237
- * A plugin "supports hot reload" if changing its config can be applied
238
- * live. That is true when the plugin itself implements `reconfigure`
239
- * OR when a plugin that requires it does — config-only base plugins
240
- * (e.g. `@crowi/plugin-aws`) flow through this transitively because
241
- * the dependents fan-out fires their reconfigure.
242
- */
243
- function hasReconfigureOrDependent(plugin, all) {
244
- if (plugin.reconfigure)
245
- return true;
246
- for (const other of all) {
247
- if (other.requires?.includes(plugin.name) && other.reconfigure)
248
- return true;
249
- }
250
- return false;
251
- }
252
- function collectRegistrySlots(plugin) {
253
- const slots = [];
254
- if (plugin.registerStorage)
255
- slots.push('storage');
256
- if (plugin.registerSearch)
257
- slots.push('search');
258
- if (plugin.registerAuth)
259
- slots.push('auth');
260
- if (plugin.registerNotifier)
261
- slots.push('notifier');
262
- return slots;
263
- }
264
- /**
265
- * Compute the effective sidebar placement for a plugin. The plugin's
266
- * own `adminPlacement` wins where it sets a field; missing fields
267
- * fall back to derived defaults:
268
- * - section: derived from register* hooks (storage / search / auth /
269
- * notification → matching section). Plugins with no register*
270
- * hook need to declare `section: 'shared'` themselves to appear
271
- * under the "shared services" section; if they didn't declare it
272
- * either, fall through to `'settings'`.
273
- * - label: defaults to the plugin's npm name.
274
- * - icon: optional, no default.
275
- */
276
- function resolvePlacement(plugin) {
277
- const declared = plugin.adminPlacement;
278
- const derivedSection = deriveSectionFromHooks(plugin);
279
- return {
280
- section: declared?.section ?? derivedSection ?? 'settings',
281
- label: declared?.label ?? plugin.name,
282
- icon: declared?.icon,
283
- };
284
- }
285
- function deriveSectionFromHooks(plugin) {
286
- if (plugin.registerStorage)
287
- return 'storage';
288
- if (plugin.registerAuth)
289
- return 'auth';
290
- if (plugin.registerNotifier)
291
- return 'notification';
292
- // search has no top-level section in the to-be sidebar; surface
293
- // search-only plugins under "settings" by default.
294
- return undefined;
295
- }
296
- function readPluginNamespace(crowi, pluginName) {
297
- const all = crowi.getConfig();
298
- const crowiNs = (all && typeof all === 'object' ? all.crowi : undefined) ?? {};
299
- const prefix = `plugin:${pluginName}:`;
300
- const out = {};
301
- for (const [key, value] of Object.entries(crowiNs)) {
302
- if (key.startsWith(prefix)) {
303
- out[key.slice(prefix.length)] = value;
304
- }
305
- }
306
- return out;
307
- }
308
- const pluginNotFound = (name) => ({
309
- status: 404,
310
- body: {
311
- error: {
312
- code: 'PLUGIN_NOT_FOUND',
313
- message: `Plugin '${name}' is not loaded`,
314
- },
315
- },
316
- });
317
- //# sourceMappingURL=plugins.js.map