bitfire-lark-mcp 1.0.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 (395) hide show
  1. package/CHANGELOG.md +73 -0
  2. package/LICENSE +9 -0
  3. package/README.md +217 -0
  4. package/README_ZH.md +214 -0
  5. package/dist/auth/config.d.ts +12 -0
  6. package/dist/auth/config.js +17 -0
  7. package/dist/auth/handler/handler-local.d.ts +21 -0
  8. package/dist/auth/handler/handler-local.js +123 -0
  9. package/dist/auth/handler/handler.d.ts +32 -0
  10. package/dist/auth/handler/handler.js +117 -0
  11. package/dist/auth/handler/index.d.ts +2 -0
  12. package/dist/auth/handler/index.js +18 -0
  13. package/dist/auth/index.d.ts +4 -0
  14. package/dist/auth/index.js +20 -0
  15. package/dist/auth/provider/index.d.ts +3 -0
  16. package/dist/auth/provider/index.js +19 -0
  17. package/dist/auth/provider/oauth.d.ts +18 -0
  18. package/dist/auth/provider/oauth.js +147 -0
  19. package/dist/auth/provider/oidc.d.ts +18 -0
  20. package/dist/auth/provider/oidc.js +172 -0
  21. package/dist/auth/provider/types.d.ts +8 -0
  22. package/dist/auth/provider/types.js +2 -0
  23. package/dist/auth/store.d.ts +39 -0
  24. package/dist/auth/store.js +213 -0
  25. package/dist/auth/types.d.ts +13 -0
  26. package/dist/auth/types.js +2 -0
  27. package/dist/auth/utils/encryption.d.ts +7 -0
  28. package/dist/auth/utils/encryption.js +40 -0
  29. package/dist/auth/utils/index.d.ts +3 -0
  30. package/dist/auth/utils/index.js +19 -0
  31. package/dist/auth/utils/is-token-valid.d.ts +7 -0
  32. package/dist/auth/utils/is-token-valid.js +28 -0
  33. package/dist/auth/utils/pkce.d.ts +6 -0
  34. package/dist/auth/utils/pkce.js +20 -0
  35. package/dist/auth/utils/storage-manager.d.ts +17 -0
  36. package/dist/auth/utils/storage-manager.js +135 -0
  37. package/dist/cli/index.d.ts +1 -0
  38. package/dist/cli/index.js +5 -0
  39. package/dist/cli/login-handler.d.ts +16 -0
  40. package/dist/cli/login-handler.js +142 -0
  41. package/dist/cli.d.ts +4 -0
  42. package/dist/cli.js +122 -0
  43. package/dist/index.d.ts +3 -0
  44. package/dist/index.js +19 -0
  45. package/dist/mcp-server/index.d.ts +2 -0
  46. package/dist/mcp-server/index.js +18 -0
  47. package/dist/mcp-server/shared/index.d.ts +2 -0
  48. package/dist/mcp-server/shared/index.js +18 -0
  49. package/dist/mcp-server/shared/init.d.ts +10 -0
  50. package/dist/mcp-server/shared/init.js +121 -0
  51. package/dist/mcp-server/shared/types.d.ts +40 -0
  52. package/dist/mcp-server/shared/types.js +10 -0
  53. package/dist/mcp-server/transport/index.d.ts +3 -0
  54. package/dist/mcp-server/transport/index.js +19 -0
  55. package/dist/mcp-server/transport/sse.d.ts +2 -0
  56. package/dist/mcp-server/transport/sse.js +75 -0
  57. package/dist/mcp-server/transport/stdio.d.ts +2 -0
  58. package/dist/mcp-server/transport/stdio.js +36 -0
  59. package/dist/mcp-server/transport/streamable.d.ts +2 -0
  60. package/dist/mcp-server/transport/streamable.js +86 -0
  61. package/dist/mcp-server/transport/utils.d.ts +16 -0
  62. package/dist/mcp-server/transport/utils.js +34 -0
  63. package/dist/mcp-tool/constants.d.ts +49 -0
  64. package/dist/mcp-tool/constants.js +118 -0
  65. package/dist/mcp-tool/document-tool/index.d.ts +1 -0
  66. package/dist/mcp-tool/document-tool/index.js +17 -0
  67. package/dist/mcp-tool/document-tool/read-full-content/extract-text.d.ts +53 -0
  68. package/dist/mcp-tool/document-tool/read-full-content/extract-text.js +109 -0
  69. package/dist/mcp-tool/document-tool/read-full-content/index.d.ts +3 -0
  70. package/dist/mcp-tool/document-tool/read-full-content/index.js +9 -0
  71. package/dist/mcp-tool/document-tool/read-full-content/reader.d.ts +12 -0
  72. package/dist/mcp-tool/document-tool/read-full-content/reader.js +283 -0
  73. package/dist/mcp-tool/document-tool/read-full-content/types.d.ts +78 -0
  74. package/dist/mcp-tool/document-tool/read-full-content/types.js +2 -0
  75. package/dist/mcp-tool/document-tool/read-full-content/whiteboard.d.ts +53 -0
  76. package/dist/mcp-tool/document-tool/read-full-content/whiteboard.js +174 -0
  77. package/dist/mcp-tool/document-tool/recall/index.d.ts +2 -0
  78. package/dist/mcp-tool/document-tool/recall/index.js +39 -0
  79. package/dist/mcp-tool/document-tool/recall/request.d.ts +2 -0
  80. package/dist/mcp-tool/document-tool/recall/request.js +25 -0
  81. package/dist/mcp-tool/document-tool/recall/type.d.ts +19 -0
  82. package/dist/mcp-tool/document-tool/recall/type.js +2 -0
  83. package/dist/mcp-tool/index.d.ts +5 -0
  84. package/dist/mcp-tool/index.js +21 -0
  85. package/dist/mcp-tool/mcp-tool.d.ts +52 -0
  86. package/dist/mcp-tool/mcp-tool.js +198 -0
  87. package/dist/mcp-tool/tools/en/builtin-tools/docx/builtin.d.ts +6 -0
  88. package/dist/mcp-tool/tools/en/builtin-tools/docx/builtin.js +303 -0
  89. package/dist/mcp-tool/tools/en/builtin-tools/im/buildin.d.ts +4 -0
  90. package/dist/mcp-tool/tools/en/builtin-tools/im/buildin.js +63 -0
  91. package/dist/mcp-tool/tools/en/builtin-tools/index.d.ts +4 -0
  92. package/dist/mcp-tool/tools/en/builtin-tools/index.js +6 -0
  93. package/dist/mcp-tool/tools/en/gen-tools/index.d.ts +113 -0
  94. package/dist/mcp-tool/tools/en/gen-tools/index.js +127 -0
  95. package/dist/mcp-tool/tools/en/gen-tools/zod/acs_v1.d.ts +562 -0
  96. package/dist/mcp-tool/tools/en/gen-tools/zod/acs_v1.js +264 -0
  97. package/dist/mcp-tool/tools/en/gen-tools/zod/admin_v1.d.ts +912 -0
  98. package/dist/mcp-tool/tools/en/gen-tools/zod/admin_v1.js +449 -0
  99. package/dist/mcp-tool/tools/en/gen-tools/zod/aily_v1.d.ts +1213 -0
  100. package/dist/mcp-tool/tools/en/gen-tools/zod/aily_v1.js +560 -0
  101. package/dist/mcp-tool/tools/en/gen-tools/zod/apaas_v1.d.ts +2530 -0
  102. package/dist/mcp-tool/tools/en/gen-tools/zod/apaas_v1.js +949 -0
  103. package/dist/mcp-tool/tools/en/gen-tools/zod/application_v5.d.ts +80 -0
  104. package/dist/mcp-tool/tools/en/gen-tools/zod/application_v5.js +53 -0
  105. package/dist/mcp-tool/tools/en/gen-tools/zod/application_v6.d.ts +1008 -0
  106. package/dist/mcp-tool/tools/en/gen-tools/zod/application_v6.js +775 -0
  107. package/dist/mcp-tool/tools/en/gen-tools/zod/approval_v4.d.ts +3928 -0
  108. package/dist/mcp-tool/tools/en/gen-tools/zod/approval_v4.js +1602 -0
  109. package/dist/mcp-tool/tools/en/gen-tools/zod/attendance_v1.d.ts +6043 -0
  110. package/dist/mcp-tool/tools/en/gen-tools/zod/attendance_v1.js +1857 -0
  111. package/dist/mcp-tool/tools/en/gen-tools/zod/auth_v3.d.ts +151 -0
  112. package/dist/mcp-tool/tools/en/gen-tools/zod/auth_v3.js +71 -0
  113. package/dist/mcp-tool/tools/en/gen-tools/zod/authen_v1.d.ts +26 -0
  114. package/dist/mcp-tool/tools/en/gen-tools/zod/authen_v1.js +17 -0
  115. package/dist/mcp-tool/tools/en/gen-tools/zod/baike_v1.d.ts +2174 -0
  116. package/dist/mcp-tool/tools/en/gen-tools/zod/baike_v1.js +594 -0
  117. package/dist/mcp-tool/tools/en/gen-tools/zod/base_v2.d.ts +755 -0
  118. package/dist/mcp-tool/tools/en/gen-tools/zod/base_v2.js +234 -0
  119. package/dist/mcp-tool/tools/en/gen-tools/zod/bitable_v1.d.ts +3541 -0
  120. package/dist/mcp-tool/tools/en/gen-tools/zod/bitable_v1.js +1786 -0
  121. package/dist/mcp-tool/tools/en/gen-tools/zod/board_v1.d.ts +40 -0
  122. package/dist/mcp-tool/tools/en/gen-tools/zod/board_v1.js +18 -0
  123. package/dist/mcp-tool/tools/en/gen-tools/zod/calendar_v4.d.ts +2075 -0
  124. package/dist/mcp-tool/tools/en/gen-tools/zod/calendar_v4.js +1594 -0
  125. package/dist/mcp-tool/tools/en/gen-tools/zod/cardkit_v1.d.ts +528 -0
  126. package/dist/mcp-tool/tools/en/gen-tools/zod/cardkit_v1.js +260 -0
  127. package/dist/mcp-tool/tools/en/gen-tools/zod/compensation_v1.d.ts +189 -0
  128. package/dist/mcp-tool/tools/en/gen-tools/zod/compensation_v1.js +132 -0
  129. package/dist/mcp-tool/tools/en/gen-tools/zod/contact_v3.d.ts +4274 -0
  130. package/dist/mcp-tool/tools/en/gen-tools/zod/contact_v3.js +2583 -0
  131. package/dist/mcp-tool/tools/en/gen-tools/zod/corehr_v1.d.ts +16873 -0
  132. package/dist/mcp-tool/tools/en/gen-tools/zod/corehr_v1.js +5045 -0
  133. package/dist/mcp-tool/tools/en/gen-tools/zod/corehr_v2.d.ts +29387 -0
  134. package/dist/mcp-tool/tools/en/gen-tools/zod/corehr_v2.js +7787 -0
  135. package/dist/mcp-tool/tools/en/gen-tools/zod/directory_v1.d.ts +4274 -0
  136. package/dist/mcp-tool/tools/en/gen-tools/zod/directory_v1.js +1367 -0
  137. package/dist/mcp-tool/tools/en/gen-tools/zod/docs_v1.d.ts +58 -0
  138. package/dist/mcp-tool/tools/en/gen-tools/zod/docs_v1.js +28 -0
  139. package/dist/mcp-tool/tools/en/gen-tools/zod/docx_v1.d.ts +93466 -0
  140. package/dist/mcp-tool/tools/en/gen-tools/zod/docx_v1.js +14350 -0
  141. package/dist/mcp-tool/tools/en/gen-tools/zod/drive_v1.d.ts +3251 -0
  142. package/dist/mcp-tool/tools/en/gen-tools/zod/drive_v1.js +1422 -0
  143. package/dist/mcp-tool/tools/en/gen-tools/zod/drive_v2.d.ts +174 -0
  144. package/dist/mcp-tool/tools/en/gen-tools/zod/drive_v2.js +117 -0
  145. package/dist/mcp-tool/tools/en/gen-tools/zod/ehr_v1.d.ts +86 -0
  146. package/dist/mcp-tool/tools/en/gen-tools/zod/ehr_v1.js +48 -0
  147. package/dist/mcp-tool/tools/en/gen-tools/zod/event_v1.d.ts +44 -0
  148. package/dist/mcp-tool/tools/en/gen-tools/zod/event_v1.js +17 -0
  149. package/dist/mcp-tool/tools/en/gen-tools/zod/helpdesk_v1.d.ts +733 -0
  150. package/dist/mcp-tool/tools/en/gen-tools/zod/helpdesk_v1.js +285 -0
  151. package/dist/mcp-tool/tools/en/gen-tools/zod/hire_v1.d.ts +10076 -0
  152. package/dist/mcp-tool/tools/en/gen-tools/zod/hire_v1.js +6065 -0
  153. package/dist/mcp-tool/tools/en/gen-tools/zod/hire_v2.d.ts +158 -0
  154. package/dist/mcp-tool/tools/en/gen-tools/zod/hire_v2.js +61 -0
  155. package/dist/mcp-tool/tools/en/gen-tools/zod/human_authentication_v1.d.ts +70 -0
  156. package/dist/mcp-tool/tools/en/gen-tools/zod/human_authentication_v1.js +27 -0
  157. package/dist/mcp-tool/tools/en/gen-tools/zod/im_v1.d.ts +3043 -0
  158. package/dist/mcp-tool/tools/en/gen-tools/zod/im_v1.js +1869 -0
  159. package/dist/mcp-tool/tools/en/gen-tools/zod/im_v2.d.ts +2176 -0
  160. package/dist/mcp-tool/tools/en/gen-tools/zod/im_v2.js +460 -0
  161. package/dist/mcp-tool/tools/en/gen-tools/zod/lingo_v1.d.ts +2301 -0
  162. package/dist/mcp-tool/tools/en/gen-tools/zod/lingo_v1.js +669 -0
  163. package/dist/mcp-tool/tools/en/gen-tools/zod/mail_v1.d.ts +2462 -0
  164. package/dist/mcp-tool/tools/en/gen-tools/zod/mail_v1.js +1655 -0
  165. package/dist/mcp-tool/tools/en/gen-tools/zod/mdm_v1.d.ts +104 -0
  166. package/dist/mcp-tool/tools/en/gen-tools/zod/mdm_v1.js +45 -0
  167. package/dist/mcp-tool/tools/en/gen-tools/zod/mdm_v3.d.ts +329 -0
  168. package/dist/mcp-tool/tools/en/gen-tools/zod/mdm_v3.js +78 -0
  169. package/dist/mcp-tool/tools/en/gen-tools/zod/minutes_v1.d.ts +92 -0
  170. package/dist/mcp-tool/tools/en/gen-tools/zod/minutes_v1.js +62 -0
  171. package/dist/mcp-tool/tools/en/gen-tools/zod/moments_v1.d.ts +52 -0
  172. package/dist/mcp-tool/tools/en/gen-tools/zod/moments_v1.js +24 -0
  173. package/dist/mcp-tool/tools/en/gen-tools/zod/okr_v1.d.ts +1628 -0
  174. package/dist/mcp-tool/tools/en/gen-tools/zod/okr_v1.js +434 -0
  175. package/dist/mcp-tool/tools/en/gen-tools/zod/optical_char_recognition_v1.d.ts +38 -0
  176. package/dist/mcp-tool/tools/en/gen-tools/zod/optical_char_recognition_v1.js +17 -0
  177. package/dist/mcp-tool/tools/en/gen-tools/zod/passport_v1.d.ts +131 -0
  178. package/dist/mcp-tool/tools/en/gen-tools/zod/passport_v1.js +59 -0
  179. package/dist/mcp-tool/tools/en/gen-tools/zod/payroll_v1.d.ts +333 -0
  180. package/dist/mcp-tool/tools/en/gen-tools/zod/payroll_v1.js +176 -0
  181. package/dist/mcp-tool/tools/en/gen-tools/zod/performance_v1.d.ts +309 -0
  182. package/dist/mcp-tool/tools/en/gen-tools/zod/performance_v1.js +178 -0
  183. package/dist/mcp-tool/tools/en/gen-tools/zod/performance_v2.d.ts +1177 -0
  184. package/dist/mcp-tool/tools/en/gen-tools/zod/performance_v2.js +559 -0
  185. package/dist/mcp-tool/tools/en/gen-tools/zod/personal_settings_v1.d.ts +640 -0
  186. package/dist/mcp-tool/tools/en/gen-tools/zod/personal_settings_v1.js +303 -0
  187. package/dist/mcp-tool/tools/en/gen-tools/zod/report_v1.d.ts +192 -0
  188. package/dist/mcp-tool/tools/en/gen-tools/zod/report_v1.js +71 -0
  189. package/dist/mcp-tool/tools/en/gen-tools/zod/search_v2.d.ts +1695 -0
  190. package/dist/mcp-tool/tools/en/gen-tools/zod/search_v2.js +446 -0
  191. package/dist/mcp-tool/tools/en/gen-tools/zod/security_and_compliance_v1.d.ts +68 -0
  192. package/dist/mcp-tool/tools/en/gen-tools/zod/security_and_compliance_v1.js +32 -0
  193. package/dist/mcp-tool/tools/en/gen-tools/zod/sheets_v3.d.ts +979 -0
  194. package/dist/mcp-tool/tools/en/gen-tools/zod/sheets_v3.js +721 -0
  195. package/dist/mcp-tool/tools/en/gen-tools/zod/speech_to_text_v1.d.ts +225 -0
  196. package/dist/mcp-tool/tools/en/gen-tools/zod/speech_to_text_v1.js +65 -0
  197. package/dist/mcp-tool/tools/en/gen-tools/zod/task_v1.d.ts +1161 -0
  198. package/dist/mcp-tool/tools/en/gen-tools/zod/task_v1.js +672 -0
  199. package/dist/mcp-tool/tools/en/gen-tools/zod/task_v2.d.ts +6051 -0
  200. package/dist/mcp-tool/tools/en/gen-tools/zod/task_v2.js +1970 -0
  201. package/dist/mcp-tool/tools/en/gen-tools/zod/tenant_v2.d.ts +31 -0
  202. package/dist/mcp-tool/tools/en/gen-tools/zod/tenant_v2.js +24 -0
  203. package/dist/mcp-tool/tools/en/gen-tools/zod/translation_v1.d.ts +80 -0
  204. package/dist/mcp-tool/tools/en/gen-tools/zod/translation_v1.js +37 -0
  205. package/dist/mcp-tool/tools/en/gen-tools/zod/trust_party_v1.d.ts +182 -0
  206. package/dist/mcp-tool/tools/en/gen-tools/zod/trust_party_v1.js +141 -0
  207. package/dist/mcp-tool/tools/en/gen-tools/zod/vc_v1.d.ts +5725 -0
  208. package/dist/mcp-tool/tools/en/gen-tools/zod/vc_v1.js +1751 -0
  209. package/dist/mcp-tool/tools/en/gen-tools/zod/verification_v1.d.ts +21 -0
  210. package/dist/mcp-tool/tools/en/gen-tools/zod/verification_v1.js +14 -0
  211. package/dist/mcp-tool/tools/en/gen-tools/zod/wiki_v1.d.ts +72 -0
  212. package/dist/mcp-tool/tools/en/gen-tools/zod/wiki_v1.js +19 -0
  213. package/dist/mcp-tool/tools/en/gen-tools/zod/wiki_v2.d.ts +843 -0
  214. package/dist/mcp-tool/tools/en/gen-tools/zod/wiki_v2.js +381 -0
  215. package/dist/mcp-tool/tools/en/gen-tools/zod/workplace_v1.d.ts +116 -0
  216. package/dist/mcp-tool/tools/en/gen-tools/zod/workplace_v1.js +77 -0
  217. package/dist/mcp-tool/tools/index.d.ts +104 -0
  218. package/dist/mcp-tool/tools/index.js +9 -0
  219. package/dist/mcp-tool/tools/zh/builtin-tools/docx/builtin.d.ts +6 -0
  220. package/dist/mcp-tool/tools/zh/builtin-tools/docx/builtin.js +282 -0
  221. package/dist/mcp-tool/tools/zh/builtin-tools/im/buildin.d.ts +4 -0
  222. package/dist/mcp-tool/tools/zh/builtin-tools/im/buildin.js +63 -0
  223. package/dist/mcp-tool/tools/zh/builtin-tools/index.d.ts +4 -0
  224. package/dist/mcp-tool/tools/zh/builtin-tools/index.js +6 -0
  225. package/dist/mcp-tool/tools/zh/gen-tools/index.d.ts +113 -0
  226. package/dist/mcp-tool/tools/zh/gen-tools/index.js +127 -0
  227. package/dist/mcp-tool/tools/zh/gen-tools/zod/acs_v1.d.ts +562 -0
  228. package/dist/mcp-tool/tools/zh/gen-tools/zod/acs_v1.js +277 -0
  229. package/dist/mcp-tool/tools/zh/gen-tools/zod/admin_v1.d.ts +912 -0
  230. package/dist/mcp-tool/tools/zh/gen-tools/zod/admin_v1.js +430 -0
  231. package/dist/mcp-tool/tools/zh/gen-tools/zod/aily_v1.d.ts +1213 -0
  232. package/dist/mcp-tool/tools/zh/gen-tools/zod/aily_v1.js +541 -0
  233. package/dist/mcp-tool/tools/zh/gen-tools/zod/apaas_v1.d.ts +2530 -0
  234. package/dist/mcp-tool/tools/zh/gen-tools/zod/apaas_v1.js +885 -0
  235. package/dist/mcp-tool/tools/zh/gen-tools/zod/application_v5.d.ts +80 -0
  236. package/dist/mcp-tool/tools/zh/gen-tools/zod/application_v5.js +59 -0
  237. package/dist/mcp-tool/tools/zh/gen-tools/zod/application_v6.d.ts +1007 -0
  238. package/dist/mcp-tool/tools/zh/gen-tools/zod/application_v6.js +721 -0
  239. package/dist/mcp-tool/tools/zh/gen-tools/zod/approval_v4.d.ts +3928 -0
  240. package/dist/mcp-tool/tools/zh/gen-tools/zod/approval_v4.js +1532 -0
  241. package/dist/mcp-tool/tools/zh/gen-tools/zod/attendance_v1.d.ts +6043 -0
  242. package/dist/mcp-tool/tools/zh/gen-tools/zod/attendance_v1.js +1620 -0
  243. package/dist/mcp-tool/tools/zh/gen-tools/zod/auth_v3.d.ts +151 -0
  244. package/dist/mcp-tool/tools/zh/gen-tools/zod/auth_v3.js +87 -0
  245. package/dist/mcp-tool/tools/zh/gen-tools/zod/authen_v1.d.ts +26 -0
  246. package/dist/mcp-tool/tools/zh/gen-tools/zod/authen_v1.js +17 -0
  247. package/dist/mcp-tool/tools/zh/gen-tools/zod/baike_v1.d.ts +2174 -0
  248. package/dist/mcp-tool/tools/zh/gen-tools/zod/baike_v1.js +574 -0
  249. package/dist/mcp-tool/tools/zh/gen-tools/zod/base_v2.d.ts +755 -0
  250. package/dist/mcp-tool/tools/zh/gen-tools/zod/base_v2.js +270 -0
  251. package/dist/mcp-tool/tools/zh/gen-tools/zod/bitable_v1.d.ts +3541 -0
  252. package/dist/mcp-tool/tools/zh/gen-tools/zod/bitable_v1.js +1864 -0
  253. package/dist/mcp-tool/tools/zh/gen-tools/zod/board_v1.d.ts +40 -0
  254. package/dist/mcp-tool/tools/zh/gen-tools/zod/board_v1.js +18 -0
  255. package/dist/mcp-tool/tools/zh/gen-tools/zod/calendar_v4.d.ts +2075 -0
  256. package/dist/mcp-tool/tools/zh/gen-tools/zod/calendar_v4.js +1533 -0
  257. package/dist/mcp-tool/tools/zh/gen-tools/zod/cardkit_v1.d.ts +528 -0
  258. package/dist/mcp-tool/tools/zh/gen-tools/zod/cardkit_v1.js +248 -0
  259. package/dist/mcp-tool/tools/zh/gen-tools/zod/compensation_v1.d.ts +189 -0
  260. package/dist/mcp-tool/tools/zh/gen-tools/zod/compensation_v1.js +130 -0
  261. package/dist/mcp-tool/tools/zh/gen-tools/zod/contact_v3.d.ts +4274 -0
  262. package/dist/mcp-tool/tools/zh/gen-tools/zod/contact_v3.js +2394 -0
  263. package/dist/mcp-tool/tools/zh/gen-tools/zod/corehr_v1.d.ts +16957 -0
  264. package/dist/mcp-tool/tools/zh/gen-tools/zod/corehr_v1.js +4753 -0
  265. package/dist/mcp-tool/tools/zh/gen-tools/zod/corehr_v2.d.ts +29869 -0
  266. package/dist/mcp-tool/tools/zh/gen-tools/zod/corehr_v2.js +7902 -0
  267. package/dist/mcp-tool/tools/zh/gen-tools/zod/directory_v1.d.ts +4324 -0
  268. package/dist/mcp-tool/tools/zh/gen-tools/zod/directory_v1.js +1340 -0
  269. package/dist/mcp-tool/tools/zh/gen-tools/zod/docs_v1.d.ts +58 -0
  270. package/dist/mcp-tool/tools/zh/gen-tools/zod/docs_v1.js +26 -0
  271. package/dist/mcp-tool/tools/zh/gen-tools/zod/docx_v1.d.ts +116719 -0
  272. package/dist/mcp-tool/tools/zh/gen-tools/zod/docx_v1.js +14949 -0
  273. package/dist/mcp-tool/tools/zh/gen-tools/zod/drive_v1.d.ts +3251 -0
  274. package/dist/mcp-tool/tools/zh/gen-tools/zod/drive_v1.js +1395 -0
  275. package/dist/mcp-tool/tools/zh/gen-tools/zod/drive_v2.d.ts +174 -0
  276. package/dist/mcp-tool/tools/zh/gen-tools/zod/drive_v2.js +115 -0
  277. package/dist/mcp-tool/tools/zh/gen-tools/zod/ehr_v1.d.ts +86 -0
  278. package/dist/mcp-tool/tools/zh/gen-tools/zod/ehr_v1.js +48 -0
  279. package/dist/mcp-tool/tools/zh/gen-tools/zod/event_v1.d.ts +44 -0
  280. package/dist/mcp-tool/tools/zh/gen-tools/zod/event_v1.js +25 -0
  281. package/dist/mcp-tool/tools/zh/gen-tools/zod/helpdesk_v1.d.ts +733 -0
  282. package/dist/mcp-tool/tools/zh/gen-tools/zod/helpdesk_v1.js +279 -0
  283. package/dist/mcp-tool/tools/zh/gen-tools/zod/hire_v1.d.ts +10085 -0
  284. package/dist/mcp-tool/tools/zh/gen-tools/zod/hire_v1.js +5787 -0
  285. package/dist/mcp-tool/tools/zh/gen-tools/zod/hire_v2.d.ts +158 -0
  286. package/dist/mcp-tool/tools/zh/gen-tools/zod/hire_v2.js +64 -0
  287. package/dist/mcp-tool/tools/zh/gen-tools/zod/human_authentication_v1.d.ts +70 -0
  288. package/dist/mcp-tool/tools/zh/gen-tools/zod/human_authentication_v1.js +27 -0
  289. package/dist/mcp-tool/tools/zh/gen-tools/zod/im_v1.d.ts +3043 -0
  290. package/dist/mcp-tool/tools/zh/gen-tools/zod/im_v1.js +1812 -0
  291. package/dist/mcp-tool/tools/zh/gen-tools/zod/im_v2.d.ts +2176 -0
  292. package/dist/mcp-tool/tools/zh/gen-tools/zod/im_v2.js +454 -0
  293. package/dist/mcp-tool/tools/zh/gen-tools/zod/lingo_v1.d.ts +2301 -0
  294. package/dist/mcp-tool/tools/zh/gen-tools/zod/lingo_v1.js +650 -0
  295. package/dist/mcp-tool/tools/zh/gen-tools/zod/mail_v1.d.ts +2465 -0
  296. package/dist/mcp-tool/tools/zh/gen-tools/zod/mail_v1.js +1467 -0
  297. package/dist/mcp-tool/tools/zh/gen-tools/zod/mdm_v1.d.ts +104 -0
  298. package/dist/mcp-tool/tools/zh/gen-tools/zod/mdm_v1.js +45 -0
  299. package/dist/mcp-tool/tools/zh/gen-tools/zod/mdm_v3.d.ts +329 -0
  300. package/dist/mcp-tool/tools/zh/gen-tools/zod/mdm_v3.js +76 -0
  301. package/dist/mcp-tool/tools/zh/gen-tools/zod/minutes_v1.d.ts +92 -0
  302. package/dist/mcp-tool/tools/zh/gen-tools/zod/minutes_v1.js +62 -0
  303. package/dist/mcp-tool/tools/zh/gen-tools/zod/moments_v1.d.ts +52 -0
  304. package/dist/mcp-tool/tools/zh/gen-tools/zod/moments_v1.js +20 -0
  305. package/dist/mcp-tool/tools/zh/gen-tools/zod/okr_v1.d.ts +1664 -0
  306. package/dist/mcp-tool/tools/zh/gen-tools/zod/okr_v1.js +455 -0
  307. package/dist/mcp-tool/tools/zh/gen-tools/zod/optical_char_recognition_v1.d.ts +38 -0
  308. package/dist/mcp-tool/tools/zh/gen-tools/zod/optical_char_recognition_v1.js +17 -0
  309. package/dist/mcp-tool/tools/zh/gen-tools/zod/passport_v1.d.ts +131 -0
  310. package/dist/mcp-tool/tools/zh/gen-tools/zod/passport_v1.js +53 -0
  311. package/dist/mcp-tool/tools/zh/gen-tools/zod/payroll_v1.d.ts +609 -0
  312. package/dist/mcp-tool/tools/zh/gen-tools/zod/payroll_v1.js +321 -0
  313. package/dist/mcp-tool/tools/zh/gen-tools/zod/performance_v1.d.ts +309 -0
  314. package/dist/mcp-tool/tools/zh/gen-tools/zod/performance_v1.js +165 -0
  315. package/dist/mcp-tool/tools/zh/gen-tools/zod/performance_v2.d.ts +1177 -0
  316. package/dist/mcp-tool/tools/zh/gen-tools/zod/performance_v2.js +525 -0
  317. package/dist/mcp-tool/tools/zh/gen-tools/zod/personal_settings_v1.d.ts +640 -0
  318. package/dist/mcp-tool/tools/zh/gen-tools/zod/personal_settings_v1.js +295 -0
  319. package/dist/mcp-tool/tools/zh/gen-tools/zod/report_v1.d.ts +194 -0
  320. package/dist/mcp-tool/tools/zh/gen-tools/zod/report_v1.js +72 -0
  321. package/dist/mcp-tool/tools/zh/gen-tools/zod/search_v2.d.ts +1695 -0
  322. package/dist/mcp-tool/tools/zh/gen-tools/zod/search_v2.js +556 -0
  323. package/dist/mcp-tool/tools/zh/gen-tools/zod/security_and_compliance_v1.d.ts +68 -0
  324. package/dist/mcp-tool/tools/zh/gen-tools/zod/security_and_compliance_v1.js +32 -0
  325. package/dist/mcp-tool/tools/zh/gen-tools/zod/sheets_v3.d.ts +979 -0
  326. package/dist/mcp-tool/tools/zh/gen-tools/zod/sheets_v3.js +821 -0
  327. package/dist/mcp-tool/tools/zh/gen-tools/zod/speech_to_text_v1.d.ts +225 -0
  328. package/dist/mcp-tool/tools/zh/gen-tools/zod/speech_to_text_v1.js +65 -0
  329. package/dist/mcp-tool/tools/zh/gen-tools/zod/task_v1.d.ts +1161 -0
  330. package/dist/mcp-tool/tools/zh/gen-tools/zod/task_v1.js +647 -0
  331. package/dist/mcp-tool/tools/zh/gen-tools/zod/task_v2.d.ts +6077 -0
  332. package/dist/mcp-tool/tools/zh/gen-tools/zod/task_v2.js +1894 -0
  333. package/dist/mcp-tool/tools/zh/gen-tools/zod/tenant_v2.d.ts +31 -0
  334. package/dist/mcp-tool/tools/zh/gen-tools/zod/tenant_v2.js +24 -0
  335. package/dist/mcp-tool/tools/zh/gen-tools/zod/translation_v1.d.ts +80 -0
  336. package/dist/mcp-tool/tools/zh/gen-tools/zod/translation_v1.js +37 -0
  337. package/dist/mcp-tool/tools/zh/gen-tools/zod/trust_party_v1.d.ts +182 -0
  338. package/dist/mcp-tool/tools/zh/gen-tools/zod/trust_party_v1.js +137 -0
  339. package/dist/mcp-tool/tools/zh/gen-tools/zod/vc_v1.d.ts +5725 -0
  340. package/dist/mcp-tool/tools/zh/gen-tools/zod/vc_v1.js +1640 -0
  341. package/dist/mcp-tool/tools/zh/gen-tools/zod/verification_v1.d.ts +21 -0
  342. package/dist/mcp-tool/tools/zh/gen-tools/zod/verification_v1.js +14 -0
  343. package/dist/mcp-tool/tools/zh/gen-tools/zod/wiki_v1.d.ts +72 -0
  344. package/dist/mcp-tool/tools/zh/gen-tools/zod/wiki_v1.js +34 -0
  345. package/dist/mcp-tool/tools/zh/gen-tools/zod/wiki_v2.d.ts +843 -0
  346. package/dist/mcp-tool/tools/zh/gen-tools/zod/wiki_v2.js +376 -0
  347. package/dist/mcp-tool/tools/zh/gen-tools/zod/workplace_v1.d.ts +116 -0
  348. package/dist/mcp-tool/tools/zh/gen-tools/zod/workplace_v1.js +77 -0
  349. package/dist/mcp-tool/types/index.d.ts +53 -0
  350. package/dist/mcp-tool/types/index.js +9 -0
  351. package/dist/mcp-tool/utils/case-transf.d.ts +2 -0
  352. package/dist/mcp-tool/utils/case-transf.js +15 -0
  353. package/dist/mcp-tool/utils/filter-tools.d.ts +2 -0
  354. package/dist/mcp-tool/utils/filter-tools.js +27 -0
  355. package/dist/mcp-tool/utils/get-should-use-uat.d.ts +2 -0
  356. package/dist/mcp-tool/utils/get-should-use-uat.js +18 -0
  357. package/dist/mcp-tool/utils/handler.d.ts +2 -0
  358. package/dist/mcp-tool/utils/handler.js +92 -0
  359. package/dist/mcp-tool/utils/index.d.ts +4 -0
  360. package/dist/mcp-tool/utils/index.js +20 -0
  361. package/dist/utils/clean-env-args.d.ts +1 -0
  362. package/dist/utils/clean-env-args.js +12 -0
  363. package/dist/utils/constants.d.ts +18 -0
  364. package/dist/utils/constants.js +35 -0
  365. package/dist/utils/http-instance.d.ts +2 -0
  366. package/dist/utils/http-instance.js +21 -0
  367. package/dist/utils/logger.d.ts +22 -0
  368. package/dist/utils/logger.js +97 -0
  369. package/dist/utils/noop.d.ts +1 -0
  370. package/dist/utils/noop.js +6 -0
  371. package/dist/utils/parser-string-array.d.ts +1 -0
  372. package/dist/utils/parser-string-array.js +13 -0
  373. package/dist/utils/safe-json-parse.d.ts +1 -0
  374. package/dist/utils/safe-json-parse.js +14 -0
  375. package/dist/utils/version.d.ts +1 -0
  376. package/dist/utils/version.js +52 -0
  377. package/docs/development/mcp-develop-and-publish.md +273 -0
  378. package/docs/examples/read-wiki-with-board.md +114 -0
  379. package/docs/examples/wiki-board-architecture-summary.md +88 -0
  380. package/docs/recall-mcp/README.md +137 -0
  381. package/docs/recall-mcp/README_ZH.md +137 -0
  382. package/docs/reference/cli/cli-zh.md +92 -0
  383. package/docs/reference/cli/cli.md +92 -0
  384. package/docs/reference/tool-presets/presets-zh.md +122 -0
  385. package/docs/reference/tool-presets/presets.md +122 -0
  386. package/docs/reference/tool-presets/tools-en.md +1516 -0
  387. package/docs/reference/tool-presets/tools-zh.md +1533 -0
  388. package/docs/troubleshooting/faq-zh.md +67 -0
  389. package/docs/troubleshooting/faq.md +67 -0
  390. package/docs/usage/bitfire-lark-mcp-setup.md +119 -0
  391. package/docs/usage/configuration/configuration-zh.md +344 -0
  392. package/docs/usage/configuration/configuration.md +344 -0
  393. package/docs/usage/docker/docker-zh.md +101 -0
  394. package/docs/usage/docker/docker.md +106 -0
  395. package/package.json +64 -0
@@ -0,0 +1,172 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LarkOIDC2OAuthServerProvider = void 0;
4
+ const store_1 = require("../store");
5
+ const is_token_valid_1 = require("../utils/is-token-valid");
6
+ const pkce_1 = require("../utils/pkce");
7
+ const zod_1 = require("zod");
8
+ const http_instance_1 = require("../../utils/http-instance");
9
+ const logger_1 = require("../../utils/logger");
10
+ const LarkOIDCTokenSchema = zod_1.z.object({
11
+ code: zod_1.z.number(),
12
+ msg: zod_1.z.string().optional(),
13
+ data: zod_1.z.object({
14
+ access_token: zod_1.z.string(),
15
+ token_type: zod_1.z.string(),
16
+ refresh_token: zod_1.z.string().optional(),
17
+ expires_in: zod_1.z.number().optional(),
18
+ refresh_expires_in: zod_1.z.number().optional(),
19
+ scope: zod_1.z.string().optional(),
20
+ }),
21
+ });
22
+ class LarkOIDC2OAuthServerProvider {
23
+ constructor(options) {
24
+ this.skipLocalPkceValidation = true;
25
+ const { domain } = options;
26
+ this._endpoints = {
27
+ appAccessTokenUrl: `${domain}/open-apis/auth/v3/app_access_token/internal`,
28
+ authorizationUrl: `${domain}/open-apis/authen/v1/index`,
29
+ tokenUrl: `${domain}/open-apis/authen/v1/oidc/access_token`,
30
+ refreshTokenUrl: `${domain}/open-apis/authen/v1/oidc/refresh_access_token`,
31
+ registrationUrl: `${domain}/open-apis/authen/v1/index`,
32
+ };
33
+ this._options = options;
34
+ }
35
+ get clientsStore() {
36
+ return store_1.authStore;
37
+ }
38
+ async authorize(client, params, res) {
39
+ const targetUrl = new URL(this._endpoints.authorizationUrl);
40
+ const searchParams = new URLSearchParams({
41
+ app_id: this._options.appId,
42
+ redirect_uri: this._options.callbackUrl + '?redirect_uri=' + client.redirect_uris[0],
43
+ });
44
+ if (params.state) {
45
+ searchParams.set('state', params.state);
46
+ }
47
+ if (params.codeChallenge) {
48
+ store_1.authStore.storeCodeVerifier(`challenge_${client.client_id}`, params.codeChallenge);
49
+ }
50
+ targetUrl.search = searchParams.toString();
51
+ logger_1.logger.info(`[LarkOIDC2OAuthServerProvider] Redirecting to authorization URL: ${targetUrl.toString()}`);
52
+ res.redirect(targetUrl.toString());
53
+ }
54
+ async challengeForAuthorizationCode(_client, _authorizationCode) {
55
+ return '';
56
+ }
57
+ async exchangeAuthorizationCode(client, authorizationCode, codeVerifier, _redirectUri) {
58
+ var _a, _b, _c, _d, _e;
59
+ if (codeVerifier) {
60
+ const storedChallenge = store_1.authStore.getCodeVerifier(`challenge_${client.client_id}`);
61
+ if (!storedChallenge) {
62
+ logger_1.logger.error(`[LarkOIDC2OAuthServerProvider] exchangeAuthorizationCode: PKCE validation failed: code challenge not found`);
63
+ throw new Error('PKCE validation failed: code challenge not found');
64
+ }
65
+ const expectedChallenge = (0, pkce_1.generateCodeChallenge)(codeVerifier);
66
+ if (expectedChallenge !== storedChallenge) {
67
+ logger_1.logger.error(`[LarkOIDC2OAuthServerProvider] exchangeAuthorizationCode: PKCE validation failed: code verifier does not match challenge`);
68
+ throw new Error('PKCE validation failed: code verifier does not match challenge');
69
+ }
70
+ store_1.authStore.removeCodeVerifier(`challenge_${client.client_id}`);
71
+ }
72
+ const params = {
73
+ grant_type: 'authorization_code',
74
+ code: authorizationCode,
75
+ };
76
+ try {
77
+ logger_1.logger.info(`[LarkOIDC2OAuthServerProvider] Exchanging authorization code for client ${client.client_id}; appId: ${this._options.appId}`);
78
+ const appAccessTokenResponse = await http_instance_1.commonHttpInstance.post(this._endpoints.appAccessTokenUrl, { app_id: this._options.appId, app_secret: this._options.appSecret }, { headers: { 'Content-Type': 'application/json; charset=utf-8' } });
79
+ const { app_access_token: appAccessToken } = appAccessTokenResponse.data;
80
+ const response = await http_instance_1.commonHttpInstance.post(this._endpoints.tokenUrl, params, {
81
+ headers: { 'Content-Type': 'application/json; charset=utf-8', Authorization: `Bearer ${appAccessToken}` },
82
+ });
83
+ const data = response.data;
84
+ const parseResult = LarkOIDCTokenSchema.safeParse(data);
85
+ if (!parseResult.success) {
86
+ throw new Error(`Token parse failed: invalid response: ${data === null || data === void 0 ? void 0 : data.code}, ${data === null || data === void 0 ? void 0 : data.msg}`);
87
+ }
88
+ const token = parseResult.data;
89
+ const expiresAt = token.data.expires_in ? token.data.expires_in + Date.now() / 1000 : undefined;
90
+ await store_1.authStore.storeToken({
91
+ clientId: client.client_id,
92
+ token: token.data.access_token,
93
+ scopes: ((_a = token.data.scope) === null || _a === void 0 ? void 0 : _a.split(' ')) || [],
94
+ expiresAt,
95
+ extra: {
96
+ refreshToken: token.data.refresh_token,
97
+ token,
98
+ appId: this._options.appId,
99
+ appSecret: this._options.appSecret,
100
+ },
101
+ });
102
+ logger_1.logger.info(`[LarkOIDC2OAuthServerProvider] Successfully exchanged authorization code for client ${client.client_id}; appId: ${this._options.appId}; token: ${Boolean(token.data.access_token)}; refreshToken: ${Boolean(token.data.refresh_token)};expiresAt: ${expiresAt}`);
103
+ return {
104
+ access_token: token.data.access_token,
105
+ token_type: token.data.token_type,
106
+ expires_in: token.data.expires_in,
107
+ scope: token.data.scope,
108
+ refresh_token: token.data.refresh_token,
109
+ };
110
+ }
111
+ catch (error) {
112
+ logger_1.logger.error(`[LarkOIDC2OAuthServerProvider] exchangeAuthorizationCode: Token exchange failed: ${((_b = error.response) === null || _b === void 0 ? void 0 : _b.status) || error.status} ${((_c = error.response) === null || _c === void 0 ? void 0 : _c.data) || error.message}`);
113
+ throw new Error(`Token exchange failed: ${((_d = error.response) === null || _d === void 0 ? void 0 : _d.status) || error.status} ${((_e = error.response) === null || _e === void 0 ? void 0 : _e.data) || error.message}`);
114
+ }
115
+ }
116
+ async exchangeRefreshToken(client, refreshToken, _scopes) {
117
+ var _a, _b, _c, _d, _e, _f, _g;
118
+ const originalToken = await store_1.authStore.getTokenByRefreshToken(refreshToken);
119
+ if (!originalToken) {
120
+ logger_1.logger.error(`[LarkOIDC2OAuthServerProvider] exchangeRefreshToken: Refresh token is invalid`);
121
+ throw new Error('refresh token is invalid');
122
+ }
123
+ const appId = ((_a = originalToken.extra) === null || _a === void 0 ? void 0 : _a.app_id) || this._options.appId;
124
+ const appSecret = ((_b = originalToken.extra) === null || _b === void 0 ? void 0 : _b.app_secret) || this._options.appSecret;
125
+ try {
126
+ logger_1.logger.info(`[LarkOIDC2OAuthServerProvider] Refreshing token for client ${client.client_id}`);
127
+ const appAccessTokenResponse = await http_instance_1.commonHttpInstance.post(this._endpoints.appAccessTokenUrl, { app_id: appId, app_secret: appSecret }, { headers: { 'Content-Type': 'application/json; charset=utf-8' } });
128
+ const { app_access_token: appAccessToken } = appAccessTokenResponse.data;
129
+ const response = await http_instance_1.commonHttpInstance.post(this._endpoints.refreshTokenUrl, { grant_type: 'refresh_token', refresh_token: refreshToken }, { headers: { 'Content-Type': 'application/json; charset=utf-8', Authorization: `Bearer ${appAccessToken}` } });
130
+ const data = response.data;
131
+ const parseResult = LarkOIDCTokenSchema.safeParse(data);
132
+ if (!parseResult.success) {
133
+ throw new Error(`Token parse failed: invalid response: ${data === null || data === void 0 ? void 0 : data.code}, ${data === null || data === void 0 ? void 0 : data.msg}`);
134
+ }
135
+ const token = parseResult.data;
136
+ const expiresAt = token.data.expires_in ? token.data.expires_in + Date.now() / 1000 : undefined;
137
+ await store_1.authStore.storeToken({
138
+ clientId: client.client_id,
139
+ token: token.data.access_token,
140
+ scopes: ((_c = token.data.scope) === null || _c === void 0 ? void 0 : _c.split(' ')) || [],
141
+ expiresAt,
142
+ extra: { refreshToken: token.data.refresh_token, token, appId, appSecret },
143
+ });
144
+ logger_1.logger.info(`[LarkOIDC2OAuthServerProvider] Successfully refreshed token for client ${client.client_id}; appId: ${appId}; token: ${Boolean(token.data.access_token)}; refreshToken: ${Boolean(token.data.refresh_token)};expiresAt: ${expiresAt}`);
145
+ return {
146
+ access_token: token.data.access_token,
147
+ token_type: token.data.token_type,
148
+ expires_in: token.data.expires_in,
149
+ scope: token.data.scope,
150
+ refresh_token: token.data.refresh_token,
151
+ };
152
+ }
153
+ catch (error) {
154
+ logger_1.logger.error(`[LarkOIDC2OAuthServerProvider] exchangeRefreshToken: Token refresh failed: ${((_d = error.response) === null || _d === void 0 ? void 0 : _d.status) || error.status} ${((_e = error.response) === null || _e === void 0 ? void 0 : _e.data) || error.message}`);
155
+ throw new Error(`Token refresh failed: ${((_f = error.response) === null || _f === void 0 ? void 0 : _f.status) || error.status} ${((_g = error.response) === null || _g === void 0 ? void 0 : _g.data) || error.message}`);
156
+ }
157
+ }
158
+ async verifyAccessToken(token) {
159
+ const { valid, token: storedToken } = await (0, is_token_valid_1.isTokenValid)(token);
160
+ if (!valid) {
161
+ return {
162
+ token: (storedToken === null || storedToken === void 0 ? void 0 : storedToken.token) || '',
163
+ clientId: (storedToken === null || storedToken === void 0 ? void 0 : storedToken.clientId) || '',
164
+ scopes: (storedToken === null || storedToken === void 0 ? void 0 : storedToken.scopes) || [],
165
+ expiresAt: (storedToken === null || storedToken === void 0 ? void 0 : storedToken.expiresAt) || 1,
166
+ extra: (storedToken === null || storedToken === void 0 ? void 0 : storedToken.extra) || {},
167
+ };
168
+ }
169
+ return storedToken;
170
+ }
171
+ }
172
+ exports.LarkOIDC2OAuthServerProvider = LarkOIDC2OAuthServerProvider;
@@ -0,0 +1,8 @@
1
+ export interface LarkProxyOAuthServerProviderOptions {
2
+ domain: string;
3
+ host: string;
4
+ port: number;
5
+ appId: string;
6
+ appSecret: string;
7
+ callbackUrl: string;
8
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,39 @@
1
+ import { AuthInfo } from '@modelcontextprotocol/sdk/server/auth/types.js';
2
+ import { OAuthClientInformationFull } from '@modelcontextprotocol/sdk/shared/auth.js';
3
+ import { OAuthRegisteredClientsStore } from '@modelcontextprotocol/sdk/server/auth/clients.js';
4
+ export declare class AuthStore implements OAuthRegisteredClientsStore {
5
+ private storageDataCache;
6
+ private codeVerifiers;
7
+ private initializePromise;
8
+ private fileWatcher;
9
+ private isReloading;
10
+ private isInitializedStorageSuccess;
11
+ constructor();
12
+ private initialize;
13
+ private performInitialization;
14
+ private setupFileWatcher;
15
+ private handleFileChange;
16
+ private loadFromStorage;
17
+ private saveToStorage;
18
+ private clearExpiredTokens;
19
+ storeToken(token: AuthInfo): Promise<AuthInfo>;
20
+ removeToken(accessToken: string): Promise<void>;
21
+ getToken(accessToken: string): Promise<AuthInfo | undefined>;
22
+ getTokenByRefreshToken(refreshToken: string): Promise<AuthInfo | undefined>;
23
+ getLocalAccessToken(appId: string): Promise<string | undefined>;
24
+ storeLocalAccessToken(accessToken: string, appId: string): Promise<string>;
25
+ removeLocalAccessToken(appId: string): Promise<void>;
26
+ removeAllLocalAccessTokens(): Promise<void>;
27
+ getAllLocalAccessTokens(): Promise<{
28
+ [appId: string]: string;
29
+ }>;
30
+ registerClient(client: OAuthClientInformationFull): Promise<OAuthClientInformationFull>;
31
+ getClient(id: string): Promise<OAuthClientInformationFull | undefined>;
32
+ removeClient(clientId: string): Promise<void>;
33
+ storeCodeVerifier(key: string, codeVerifier: string): void;
34
+ getCodeVerifier(key: string): string | undefined;
35
+ removeCodeVerifier(key: string): void;
36
+ clearExpiredCodeVerifiers(): void;
37
+ destroy(): void;
38
+ }
39
+ export declare const authStore: AuthStore;
@@ -0,0 +1,213 @@
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.authStore = exports.AuthStore = void 0;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const storage_manager_1 = require("./utils/storage-manager");
9
+ const logger_1 = require("../utils/logger");
10
+ class AuthStore {
11
+ constructor() {
12
+ this.storageDataCache = { tokens: {}, clients: {} };
13
+ this.codeVerifiers = new Map();
14
+ this.isReloading = false;
15
+ this.isInitializedStorageSuccess = false;
16
+ this.initialize();
17
+ }
18
+ async initialize() {
19
+ if (this.initializePromise) {
20
+ return this.initializePromise;
21
+ }
22
+ this.initializePromise = this.performInitialization();
23
+ await this.initializePromise;
24
+ }
25
+ async performInitialization() {
26
+ try {
27
+ await this.loadFromStorage();
28
+ logger_1.logger.info(`[AuthStore] Initialized storage successfully with ${Object.keys(this.storageDataCache.tokens).length} tokens`);
29
+ await this.clearExpiredTokens();
30
+ this.setupFileWatcher();
31
+ this.isInitializedStorageSuccess = true;
32
+ }
33
+ catch (error) {
34
+ logger_1.logger.error(`[AuthStore] Failed to initialize: ${error}`);
35
+ this.isInitializedStorageSuccess = false;
36
+ }
37
+ }
38
+ setupFileWatcher() {
39
+ try {
40
+ if (fs_1.default.existsSync(storage_manager_1.storageManager.storageFile)) {
41
+ logger_1.logger.info(`[AuthStore] Setup file watcher for ${storage_manager_1.storageManager.storageFile}`);
42
+ this.fileWatcher = fs_1.default.watch(storage_manager_1.storageManager.storageFile, () => {
43
+ this.handleFileChange();
44
+ });
45
+ }
46
+ }
47
+ catch (error) {
48
+ logger_1.logger.error(`[AuthStore] Failed to setup file watcher: ${error}`);
49
+ }
50
+ }
51
+ async handleFileChange() {
52
+ if (this.isReloading) {
53
+ return;
54
+ }
55
+ this.isReloading = true;
56
+ try {
57
+ logger_1.logger.info(`[AuthStore] Reloading storage from ${storage_manager_1.storageManager.storageFile}`);
58
+ await new Promise((resolve) => setTimeout(resolve, 100));
59
+ await this.loadFromStorage();
60
+ }
61
+ catch (error) {
62
+ logger_1.logger.error(`[AuthStore] Failed to reload storage: ${error}`);
63
+ }
64
+ finally {
65
+ this.isReloading = false;
66
+ }
67
+ }
68
+ async loadFromStorage() {
69
+ const storageData = await storage_manager_1.storageManager.loadStorageData();
70
+ this.storageDataCache = storageData;
71
+ }
72
+ async saveToStorage() {
73
+ if (!this.isInitializedStorageSuccess) {
74
+ return;
75
+ }
76
+ await storage_manager_1.storageManager.saveStorageData(this.storageDataCache);
77
+ }
78
+ async clearExpiredTokens() {
79
+ if (!this.storageDataCache || !this.storageDataCache.tokens) {
80
+ return;
81
+ }
82
+ const now = Date.now() / 1000;
83
+ let hasExpiredTokens = false;
84
+ const expiredTokenKeys = [];
85
+ for (const [tokenKey, token] of Object.entries(this.storageDataCache.tokens)) {
86
+ // 7 days after expires clear the token
87
+ if (token.expiresAt && token.expiresAt + 7 * 24 * 60 * 60 < now) {
88
+ expiredTokenKeys.push(tokenKey);
89
+ }
90
+ }
91
+ if (expiredTokenKeys.length > 0) {
92
+ for (const tokenKey of expiredTokenKeys) {
93
+ delete this.storageDataCache.tokens[tokenKey];
94
+ }
95
+ hasExpiredTokens = true;
96
+ }
97
+ if (this.storageDataCache.localTokens) {
98
+ const orphanedLocalTokenKeys = [];
99
+ for (const [appId, tokenKey] of Object.entries(this.storageDataCache.localTokens)) {
100
+ if (!this.storageDataCache.tokens[tokenKey]) {
101
+ orphanedLocalTokenKeys.push(appId);
102
+ }
103
+ }
104
+ if (orphanedLocalTokenKeys.length > 0) {
105
+ for (const appId of orphanedLocalTokenKeys) {
106
+ delete this.storageDataCache.localTokens[appId];
107
+ }
108
+ hasExpiredTokens = true;
109
+ }
110
+ }
111
+ if (hasExpiredTokens) {
112
+ logger_1.logger.info(`[AuthStore] Cleared expired tokens`);
113
+ await this.saveToStorage();
114
+ }
115
+ }
116
+ async storeToken(token) {
117
+ await this.initialize();
118
+ this.storageDataCache.tokens[token.token] = token;
119
+ await this.saveToStorage();
120
+ return token;
121
+ }
122
+ async removeToken(accessToken) {
123
+ await this.initialize();
124
+ delete this.storageDataCache.tokens[accessToken];
125
+ await this.saveToStorage();
126
+ }
127
+ async getToken(accessToken) {
128
+ await this.initialize();
129
+ return this.storageDataCache.tokens[accessToken];
130
+ }
131
+ async getTokenByRefreshToken(refreshToken) {
132
+ await this.initialize();
133
+ return Object.values(this.storageDataCache.tokens).find((token) => { var _a; return ((_a = token.extra) === null || _a === void 0 ? void 0 : _a.refreshToken) === refreshToken; });
134
+ }
135
+ async getLocalAccessToken(appId) {
136
+ var _a;
137
+ await this.initialize();
138
+ return (_a = this.storageDataCache.localTokens) === null || _a === void 0 ? void 0 : _a[appId];
139
+ }
140
+ async storeLocalAccessToken(accessToken, appId) {
141
+ await this.initialize();
142
+ if (!this.storageDataCache.localTokens) {
143
+ this.storageDataCache.localTokens = {};
144
+ }
145
+ this.storageDataCache.localTokens[appId] = accessToken;
146
+ await this.saveToStorage();
147
+ return accessToken;
148
+ }
149
+ async removeLocalAccessToken(appId) {
150
+ var _a;
151
+ await this.initialize();
152
+ if ((_a = this.storageDataCache.localTokens) === null || _a === void 0 ? void 0 : _a[appId]) {
153
+ logger_1.logger.info(`[AuthStore] Removing local access token for app: ${appId}`);
154
+ const tokenToRemove = this.storageDataCache.localTokens[appId];
155
+ delete this.storageDataCache.tokens[tokenToRemove];
156
+ delete this.storageDataCache.localTokens[appId];
157
+ await this.saveToStorage();
158
+ }
159
+ }
160
+ async removeAllLocalAccessTokens() {
161
+ await this.initialize();
162
+ logger_1.logger.info('[AuthStore] Removing all local access tokens');
163
+ if (this.storageDataCache.localTokens) {
164
+ const tokens = Object.values(this.storageDataCache.localTokens);
165
+ for (const token of tokens) {
166
+ if (this.storageDataCache.tokens[token]) {
167
+ delete this.storageDataCache.tokens[token];
168
+ }
169
+ }
170
+ }
171
+ this.storageDataCache.localTokens = {};
172
+ await this.saveToStorage();
173
+ }
174
+ async getAllLocalAccessTokens() {
175
+ await this.initialize();
176
+ return this.storageDataCache.localTokens || {};
177
+ }
178
+ async registerClient(client) {
179
+ await this.initialize();
180
+ this.storageDataCache.clients[client.client_id] = client;
181
+ await this.saveToStorage();
182
+ return client;
183
+ }
184
+ async getClient(id) {
185
+ await this.initialize();
186
+ return this.storageDataCache.clients[id];
187
+ }
188
+ async removeClient(clientId) {
189
+ await this.initialize();
190
+ delete this.storageDataCache.clients[clientId];
191
+ await this.saveToStorage();
192
+ }
193
+ storeCodeVerifier(key, codeVerifier) {
194
+ this.codeVerifiers.set(key, codeVerifier);
195
+ }
196
+ getCodeVerifier(key) {
197
+ return this.codeVerifiers.get(key);
198
+ }
199
+ removeCodeVerifier(key) {
200
+ this.codeVerifiers.delete(key);
201
+ }
202
+ clearExpiredCodeVerifiers() {
203
+ this.codeVerifiers.clear();
204
+ }
205
+ destroy() {
206
+ if (this.fileWatcher) {
207
+ this.fileWatcher.close();
208
+ this.fileWatcher = undefined;
209
+ }
210
+ }
211
+ }
212
+ exports.AuthStore = AuthStore;
213
+ exports.authStore = new AuthStore();
@@ -0,0 +1,13 @@
1
+ import { AuthInfo } from '@modelcontextprotocol/sdk/server/auth/types.js';
2
+ import { OAuthClientInformationFull } from '@modelcontextprotocol/sdk/shared/auth.js';
3
+ export interface StorageData {
4
+ localTokens?: {
5
+ [appId: string]: string;
6
+ };
7
+ tokens: {
8
+ [key: string]: AuthInfo;
9
+ };
10
+ clients: {
11
+ [key: string]: OAuthClientInformationFull;
12
+ };
13
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,7 @@
1
+ export declare class EncryptionUtil {
2
+ private aesKey;
3
+ constructor(aesKey: string);
4
+ encrypt(data: string): string;
5
+ decrypt(encryptedData: string): string;
6
+ static generateKey(): string;
7
+ }
@@ -0,0 +1,40 @@
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.EncryptionUtil = void 0;
7
+ const crypto_1 = __importDefault(require("crypto"));
8
+ const config_1 = require("../config");
9
+ const logger_1 = require("../../utils/logger");
10
+ class EncryptionUtil {
11
+ constructor(aesKey) {
12
+ this.aesKey = aesKey;
13
+ }
14
+ encrypt(data) {
15
+ const iv = crypto_1.default.randomBytes(config_1.AUTH_CONFIG.ENCRYPTION.IV_LENGTH);
16
+ const key = Buffer.from(this.aesKey, 'hex');
17
+ const cipher = crypto_1.default.createCipheriv(config_1.AUTH_CONFIG.ENCRYPTION.ALGORITHM, key, iv);
18
+ let encrypted = cipher.update(data, 'utf8', 'hex');
19
+ encrypted += cipher.final('hex');
20
+ return iv.toString('hex') + ':' + encrypted;
21
+ }
22
+ decrypt(encryptedData) {
23
+ const parts = encryptedData.split(':');
24
+ if (parts.length !== 2) {
25
+ logger_1.logger.error(`[EncryptionUtil] decrypt: Invalid encrypted data format`);
26
+ throw new Error('Invalid encrypted data format');
27
+ }
28
+ const iv = Buffer.from(parts[0], 'hex');
29
+ const encrypted = parts[1];
30
+ const key = Buffer.from(this.aesKey, 'hex');
31
+ const decipher = crypto_1.default.createDecipheriv(config_1.AUTH_CONFIG.ENCRYPTION.ALGORITHM, key, iv);
32
+ let decrypted = decipher.update(encrypted, 'hex', 'utf8');
33
+ decrypted += decipher.final('utf8');
34
+ return decrypted;
35
+ }
36
+ static generateKey() {
37
+ return crypto_1.default.randomBytes(config_1.AUTH_CONFIG.ENCRYPTION.KEY_LENGTH).toString('hex');
38
+ }
39
+ }
40
+ exports.EncryptionUtil = EncryptionUtil;
@@ -0,0 +1,3 @@
1
+ export * from './is-token-valid';
2
+ export * from './pkce';
3
+ export * from './storage-manager';
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./is-token-valid"), exports);
18
+ __exportStar(require("./pkce"), exports);
19
+ __exportStar(require("./storage-manager"), exports);
@@ -0,0 +1,7 @@
1
+ import { AuthInfo } from '@modelcontextprotocol/sdk/server/auth/types.js';
2
+ export declare function isTokenValid(accessToken?: string): Promise<{
3
+ valid: boolean;
4
+ isExpired: boolean;
5
+ token: AuthInfo | undefined;
6
+ }>;
7
+ export declare function isTokenExpired(token?: AuthInfo): boolean;
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isTokenValid = isTokenValid;
4
+ exports.isTokenExpired = isTokenExpired;
5
+ const store_1 = require("../store");
6
+ async function isTokenValid(accessToken) {
7
+ if (!accessToken) {
8
+ return { valid: false, isExpired: false, token: undefined };
9
+ }
10
+ const token = await store_1.authStore.getToken(accessToken);
11
+ if (!token) {
12
+ return { valid: false, isExpired: false, token: undefined };
13
+ }
14
+ const isExpired = isTokenExpired(token);
15
+ if (isExpired) {
16
+ return { valid: false, isExpired: true, token };
17
+ }
18
+ return { valid: true, isExpired: false, token };
19
+ }
20
+ function isTokenExpired(token) {
21
+ if (!token) {
22
+ return false;
23
+ }
24
+ if (token.expiresAt && token.expiresAt < Date.now() / 1000) {
25
+ return true;
26
+ }
27
+ return false;
28
+ }
@@ -0,0 +1,6 @@
1
+ export declare function generateCodeVerifier(): string;
2
+ export declare function generateCodeChallenge(codeVerifier: string): string;
3
+ export declare function generatePKCEPair(): {
4
+ codeVerifier: string;
5
+ codeChallenge: string;
6
+ };
@@ -0,0 +1,20 @@
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.generateCodeVerifier = generateCodeVerifier;
7
+ exports.generateCodeChallenge = generateCodeChallenge;
8
+ exports.generatePKCEPair = generatePKCEPair;
9
+ const crypto_1 = __importDefault(require("crypto"));
10
+ function generateCodeVerifier() {
11
+ return crypto_1.default.randomBytes(32).toString('base64url');
12
+ }
13
+ function generateCodeChallenge(codeVerifier) {
14
+ return crypto_1.default.createHash('sha256').update(codeVerifier).digest('base64url');
15
+ }
16
+ function generatePKCEPair() {
17
+ const codeVerifier = generateCodeVerifier();
18
+ const codeChallenge = generateCodeChallenge(codeVerifier);
19
+ return { codeVerifier, codeChallenge };
20
+ }
@@ -0,0 +1,17 @@
1
+ import { StorageData } from '../types';
2
+ export declare class StorageManager {
3
+ private encryptionUtil;
4
+ private initializePromise;
5
+ private isInitializedStorageSuccess;
6
+ constructor();
7
+ get storageFile(): string;
8
+ private initialize;
9
+ private performInitialization;
10
+ private initializeEncryption;
11
+ private ensureStorageDir;
12
+ encrypt(data: string): string;
13
+ decrypt(encryptedData: string): string;
14
+ loadStorageData(): Promise<StorageData>;
15
+ saveStorageData(data: StorageData): Promise<void>;
16
+ }
17
+ export declare const storageManager: StorageManager;