@egain/egain-mcp-server 1.0.1

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 (693) hide show
  1. package/.speakeasy/templates/src/lib/env.ts +1 -0
  2. package/README.md +119 -0
  3. package/bin/mcp-server.js +47817 -0
  4. package/bin/mcp-server.js.map +371 -0
  5. package/esm/src/cloudflare-worker/cloudflare-worker.d.ts +17 -0
  6. package/esm/src/cloudflare-worker/cloudflare-worker.d.ts.map +1 -0
  7. package/esm/src/cloudflare-worker/cloudflare-worker.js +72 -0
  8. package/esm/src/cloudflare-worker/cloudflare-worker.js.map +1 -0
  9. package/esm/src/cloudflare-worker/landing-page.d.ts +2 -0
  10. package/esm/src/cloudflare-worker/landing-page.d.ts.map +1 -0
  11. package/esm/src/cloudflare-worker/landing-page.js +330 -0
  12. package/esm/src/cloudflare-worker/landing-page.js.map +1 -0
  13. package/esm/src/core.d.ts +10 -0
  14. package/esm/src/core.d.ts.map +1 -0
  15. package/esm/src/core.js +13 -0
  16. package/esm/src/core.js.map +1 -0
  17. package/esm/src/funcs/getAnnouncements.d.ts +25 -0
  18. package/esm/src/funcs/getAnnouncements.d.ts.map +1 -0
  19. package/esm/src/funcs/getAnnouncements.js +111 -0
  20. package/esm/src/funcs/getAnnouncements.js.map +1 -0
  21. package/esm/src/funcs/getAnswers.d.ts +25 -0
  22. package/esm/src/funcs/getAnswers.d.ts.map +1 -0
  23. package/esm/src/funcs/getAnswers.js +115 -0
  24. package/esm/src/funcs/getAnswers.js.map +1 -0
  25. package/esm/src/funcs/getArticle.d.ts +28 -0
  26. package/esm/src/funcs/getArticle.d.ts.map +1 -0
  27. package/esm/src/funcs/getArticle.js +118 -0
  28. package/esm/src/funcs/getArticle.js.map +1 -0
  29. package/esm/src/funcs/getPopularArticles.d.ts +25 -0
  30. package/esm/src/funcs/getPopularArticles.d.ts.map +1 -0
  31. package/esm/src/funcs/getPopularArticles.js +111 -0
  32. package/esm/src/funcs/getPopularArticles.js.map +1 -0
  33. package/esm/src/funcs/getPortals.d.ts +23 -0
  34. package/esm/src/funcs/getPortals.d.ts.map +1 -0
  35. package/esm/src/funcs/getPortals.js +106 -0
  36. package/esm/src/funcs/getPortals.js.map +1 -0
  37. package/esm/src/funcs/makeSuggestion.d.ts +25 -0
  38. package/esm/src/funcs/makeSuggestion.d.ts.map +1 -0
  39. package/esm/src/funcs/makeSuggestion.js +104 -0
  40. package/esm/src/funcs/makeSuggestion.js.map +1 -0
  41. package/esm/src/funcs/queryAnswers.d.ts +25 -0
  42. package/esm/src/funcs/queryAnswers.d.ts.map +1 -0
  43. package/esm/src/funcs/queryAnswers.js +109 -0
  44. package/esm/src/funcs/queryAnswers.js.map +1 -0
  45. package/esm/src/funcs/queryRetrieve.d.ts +27 -0
  46. package/esm/src/funcs/queryRetrieve.d.ts.map +1 -0
  47. package/esm/src/funcs/queryRetrieve.js +115 -0
  48. package/esm/src/funcs/queryRetrieve.js.map +1 -0
  49. package/esm/src/funcs/querySearch.d.ts +16 -0
  50. package/esm/src/funcs/querySearch.d.ts.map +1 -0
  51. package/esm/src/funcs/querySearch.js +98 -0
  52. package/esm/src/funcs/querySearch.js.map +1 -0
  53. package/esm/src/funcs/retrieveChunks.d.ts +27 -0
  54. package/esm/src/funcs/retrieveChunks.d.ts.map +1 -0
  55. package/esm/src/funcs/retrieveChunks.js +117 -0
  56. package/esm/src/funcs/retrieveChunks.js.map +1 -0
  57. package/esm/src/funcs/searchAiSearch.d.ts +16 -0
  58. package/esm/src/funcs/searchAiSearch.d.ts.map +1 -0
  59. package/esm/src/funcs/searchAiSearch.js +102 -0
  60. package/esm/src/funcs/searchAiSearch.js.map +1 -0
  61. package/esm/src/hooks/auth-hook.d.ts +100 -0
  62. package/esm/src/hooks/auth-hook.d.ts.map +1 -0
  63. package/esm/src/hooks/auth-hook.js +1565 -0
  64. package/esm/src/hooks/auth-hook.js.map +1 -0
  65. package/esm/src/hooks/hooks.d.ts +25 -0
  66. package/esm/src/hooks/hooks.d.ts.map +1 -0
  67. package/esm/src/hooks/hooks.js +82 -0
  68. package/esm/src/hooks/hooks.js.map +1 -0
  69. package/esm/src/hooks/portal-cache-hook.d.ts +34 -0
  70. package/esm/src/hooks/portal-cache-hook.d.ts.map +1 -0
  71. package/esm/src/hooks/portal-cache-hook.js +441 -0
  72. package/esm/src/hooks/portal-cache-hook.js.map +1 -0
  73. package/esm/src/hooks/portal-lookup-hook.d.ts +17 -0
  74. package/esm/src/hooks/portal-lookup-hook.d.ts.map +1 -0
  75. package/esm/src/hooks/portal-lookup-hook.js +374 -0
  76. package/esm/src/hooks/portal-lookup-hook.js.map +1 -0
  77. package/esm/src/hooks/registration.d.ts +3 -0
  78. package/esm/src/hooks/registration.d.ts.map +1 -0
  79. package/esm/src/hooks/registration.js +36 -0
  80. package/esm/src/hooks/registration.js.map +1 -0
  81. package/esm/src/hooks/server-routing-hook.d.ts +19 -0
  82. package/esm/src/hooks/server-routing-hook.d.ts.map +1 -0
  83. package/esm/src/hooks/server-routing-hook.js +43 -0
  84. package/esm/src/hooks/server-routing-hook.js.map +1 -0
  85. package/esm/src/hooks/types.d.ts +76 -0
  86. package/esm/src/hooks/types.d.ts.map +1 -0
  87. package/esm/src/hooks/types.js +5 -0
  88. package/esm/src/hooks/types.js.map +1 -0
  89. package/esm/src/lib/base64.d.ts +10 -0
  90. package/esm/src/lib/base64.d.ts.map +1 -0
  91. package/esm/src/lib/base64.js +29 -0
  92. package/esm/src/lib/base64.js.map +1 -0
  93. package/esm/src/lib/config.d.ts +57 -0
  94. package/esm/src/lib/config.d.ts.map +1 -0
  95. package/esm/src/lib/config.js +46 -0
  96. package/esm/src/lib/config.js.map +1 -0
  97. package/esm/src/lib/dlv.d.ts +14 -0
  98. package/esm/src/lib/dlv.d.ts.map +1 -0
  99. package/esm/src/lib/dlv.js +46 -0
  100. package/esm/src/lib/dlv.js.map +1 -0
  101. package/esm/src/lib/encodings.d.ts +52 -0
  102. package/esm/src/lib/encodings.d.ts.map +1 -0
  103. package/esm/src/lib/encodings.js +354 -0
  104. package/esm/src/lib/encodings.js.map +1 -0
  105. package/esm/src/lib/env.d.ts +15 -0
  106. package/esm/src/lib/env.d.ts.map +1 -0
  107. package/esm/src/lib/env.js +27 -0
  108. package/esm/src/lib/env.js.map +1 -0
  109. package/esm/src/lib/files.d.ts +13 -0
  110. package/esm/src/lib/files.d.ts.map +1 -0
  111. package/esm/src/lib/files.js +73 -0
  112. package/esm/src/lib/files.js.map +1 -0
  113. package/esm/src/lib/http.d.ts +67 -0
  114. package/esm/src/lib/http.d.ts.map +1 -0
  115. package/esm/src/lib/http.js +209 -0
  116. package/esm/src/lib/http.js.map +1 -0
  117. package/esm/src/lib/is-plain-object.d.ts +2 -0
  118. package/esm/src/lib/is-plain-object.d.ts.map +1 -0
  119. package/esm/src/lib/is-plain-object.js +38 -0
  120. package/esm/src/lib/is-plain-object.js.map +1 -0
  121. package/esm/src/lib/logger.d.ts +6 -0
  122. package/esm/src/lib/logger.d.ts.map +1 -0
  123. package/esm/src/lib/logger.js +5 -0
  124. package/esm/src/lib/logger.js.map +1 -0
  125. package/esm/src/lib/matchers.d.ts +66 -0
  126. package/esm/src/lib/matchers.d.ts.map +1 -0
  127. package/esm/src/lib/matchers.js +209 -0
  128. package/esm/src/lib/matchers.js.map +1 -0
  129. package/esm/src/lib/primitives.d.ts +11 -0
  130. package/esm/src/lib/primitives.d.ts.map +1 -0
  131. package/esm/src/lib/primitives.js +81 -0
  132. package/esm/src/lib/primitives.js.map +1 -0
  133. package/esm/src/lib/result.d.ts +31 -0
  134. package/esm/src/lib/result.d.ts.map +1 -0
  135. package/esm/src/lib/result.js +31 -0
  136. package/esm/src/lib/result.js.map +1 -0
  137. package/esm/src/lib/retries.d.ts +38 -0
  138. package/esm/src/lib/retries.d.ts.map +1 -0
  139. package/esm/src/lib/retries.js +150 -0
  140. package/esm/src/lib/retries.js.map +1 -0
  141. package/esm/src/lib/schemas.d.ts +19 -0
  142. package/esm/src/lib/schemas.d.ts.map +1 -0
  143. package/esm/src/lib/schemas.js +57 -0
  144. package/esm/src/lib/schemas.js.map +1 -0
  145. package/esm/src/lib/sdks.d.ts +63 -0
  146. package/esm/src/lib/sdks.d.ts.map +1 -0
  147. package/esm/src/lib/sdks.js +258 -0
  148. package/esm/src/lib/sdks.js.map +1 -0
  149. package/esm/src/lib/security.d.ts +83 -0
  150. package/esm/src/lib/security.d.ts.map +1 -0
  151. package/esm/src/lib/security.js +138 -0
  152. package/esm/src/lib/security.js.map +1 -0
  153. package/esm/src/lib/url.d.ts +5 -0
  154. package/esm/src/lib/url.d.ts.map +1 -0
  155. package/esm/src/lib/url.js +22 -0
  156. package/esm/src/lib/url.js.map +1 -0
  157. package/esm/src/mcp-server/cli/start/command.d.ts +2 -0
  158. package/esm/src/mcp-server/cli/start/command.d.ts.map +1 -0
  159. package/esm/src/mcp-server/cli/start/command.js +96 -0
  160. package/esm/src/mcp-server/cli/start/command.js.map +1 -0
  161. package/esm/src/mcp-server/cli/start/impl.d.ts +17 -0
  162. package/esm/src/mcp-server/cli/start/impl.d.ts.map +1 -0
  163. package/esm/src/mcp-server/cli/start/impl.js +98 -0
  164. package/esm/src/mcp-server/cli/start/impl.js.map +1 -0
  165. package/esm/src/mcp-server/cli.d.ts +6 -0
  166. package/esm/src/mcp-server/cli.d.ts.map +1 -0
  167. package/esm/src/mcp-server/cli.js +7 -0
  168. package/esm/src/mcp-server/cli.js.map +1 -0
  169. package/esm/src/mcp-server/console-logger.d.ts +9 -0
  170. package/esm/src/mcp-server/console-logger.d.ts.map +1 -0
  171. package/esm/src/mcp-server/console-logger.js +56 -0
  172. package/esm/src/mcp-server/console-logger.js.map +1 -0
  173. package/esm/src/mcp-server/extensions.d.ts +11 -0
  174. package/esm/src/mcp-server/extensions.d.ts.map +1 -0
  175. package/esm/src/mcp-server/extensions.js +5 -0
  176. package/esm/src/mcp-server/extensions.js.map +1 -0
  177. package/esm/src/mcp-server/mcp-server.d.ts +2 -0
  178. package/esm/src/mcp-server/mcp-server.d.ts.map +1 -0
  179. package/esm/src/mcp-server/mcp-server.js +23 -0
  180. package/esm/src/mcp-server/mcp-server.js.map +1 -0
  181. package/esm/src/mcp-server/prompts.d.ts +26 -0
  182. package/esm/src/mcp-server/prompts.d.ts.map +1 -0
  183. package/esm/src/mcp-server/prompts.js +47 -0
  184. package/esm/src/mcp-server/prompts.js.map +1 -0
  185. package/esm/src/mcp-server/resources.d.ts +32 -0
  186. package/esm/src/mcp-server/resources.d.ts.map +1 -0
  187. package/esm/src/mcp-server/resources.js +82 -0
  188. package/esm/src/mcp-server/resources.js.map +1 -0
  189. package/esm/src/mcp-server/scopes.d.ts +3 -0
  190. package/esm/src/mcp-server/scopes.d.ts.map +1 -0
  191. package/esm/src/mcp-server/scopes.js +5 -0
  192. package/esm/src/mcp-server/scopes.js.map +1 -0
  193. package/esm/src/mcp-server/server.d.ts +16 -0
  194. package/esm/src/mcp-server/server.d.ts.map +1 -0
  195. package/esm/src/mcp-server/server.js +53 -0
  196. package/esm/src/mcp-server/server.js.map +1 -0
  197. package/esm/src/mcp-server/shared.d.ts +8 -0
  198. package/esm/src/mcp-server/shared.d.ts.map +1 -0
  199. package/esm/src/mcp-server/shared.js +61 -0
  200. package/esm/src/mcp-server/shared.js.map +1 -0
  201. package/esm/src/mcp-server/tools/getAnnouncements.d.ts +7 -0
  202. package/esm/src/mcp-server/tools/getAnnouncements.d.ts.map +1 -0
  203. package/esm/src/mcp-server/tools/getAnnouncements.js +44 -0
  204. package/esm/src/mcp-server/tools/getAnnouncements.js.map +1 -0
  205. package/esm/src/mcp-server/tools/getAnswers.d.ts +7 -0
  206. package/esm/src/mcp-server/tools/getAnswers.d.ts.map +1 -0
  207. package/esm/src/mcp-server/tools/getAnswers.js +44 -0
  208. package/esm/src/mcp-server/tools/getAnswers.js.map +1 -0
  209. package/esm/src/mcp-server/tools/getArticle.d.ts +7 -0
  210. package/esm/src/mcp-server/tools/getArticle.d.ts.map +1 -0
  211. package/esm/src/mcp-server/tools/getArticle.js +47 -0
  212. package/esm/src/mcp-server/tools/getArticle.js.map +1 -0
  213. package/esm/src/mcp-server/tools/getPopularArticles.d.ts +7 -0
  214. package/esm/src/mcp-server/tools/getPopularArticles.d.ts.map +1 -0
  215. package/esm/src/mcp-server/tools/getPopularArticles.js +44 -0
  216. package/esm/src/mcp-server/tools/getPopularArticles.js.map +1 -0
  217. package/esm/src/mcp-server/tools/getPortals.d.ts +7 -0
  218. package/esm/src/mcp-server/tools/getPortals.d.ts.map +1 -0
  219. package/esm/src/mcp-server/tools/getPortals.js +42 -0
  220. package/esm/src/mcp-server/tools/getPortals.js.map +1 -0
  221. package/esm/src/mcp-server/tools/makeSuggestion.d.ts +7 -0
  222. package/esm/src/mcp-server/tools/makeSuggestion.d.ts.map +1 -0
  223. package/esm/src/mcp-server/tools/makeSuggestion.js +44 -0
  224. package/esm/src/mcp-server/tools/makeSuggestion.js.map +1 -0
  225. package/esm/src/mcp-server/tools/queryAnswers.d.ts +7 -0
  226. package/esm/src/mcp-server/tools/queryAnswers.d.ts.map +1 -0
  227. package/esm/src/mcp-server/tools/queryAnswers.js +44 -0
  228. package/esm/src/mcp-server/tools/queryAnswers.js.map +1 -0
  229. package/esm/src/mcp-server/tools/queryRetrieve.d.ts +7 -0
  230. package/esm/src/mcp-server/tools/queryRetrieve.d.ts.map +1 -0
  231. package/esm/src/mcp-server/tools/queryRetrieve.js +46 -0
  232. package/esm/src/mcp-server/tools/queryRetrieve.js.map +1 -0
  233. package/esm/src/mcp-server/tools/querySearch.d.ts +7 -0
  234. package/esm/src/mcp-server/tools/querySearch.d.ts.map +1 -0
  235. package/esm/src/mcp-server/tools/querySearch.js +35 -0
  236. package/esm/src/mcp-server/tools/querySearch.js.map +1 -0
  237. package/esm/src/mcp-server/tools/retrieveChunks.d.ts +7 -0
  238. package/esm/src/mcp-server/tools/retrieveChunks.d.ts.map +1 -0
  239. package/esm/src/mcp-server/tools/retrieveChunks.js +46 -0
  240. package/esm/src/mcp-server/tools/retrieveChunks.js.map +1 -0
  241. package/esm/src/mcp-server/tools/searchAiSearch.d.ts +7 -0
  242. package/esm/src/mcp-server/tools/searchAiSearch.d.ts.map +1 -0
  243. package/esm/src/mcp-server/tools/searchAiSearch.js +35 -0
  244. package/esm/src/mcp-server/tools/searchAiSearch.js.map +1 -0
  245. package/esm/src/mcp-server/tools.d.ts +37 -0
  246. package/esm/src/mcp-server/tools.d.ts.map +1 -0
  247. package/esm/src/mcp-server/tools.js +78 -0
  248. package/esm/src/mcp-server/tools.js.map +1 -0
  249. package/esm/src/models/acceptlanguage.d.ts +7 -0
  250. package/esm/src/models/acceptlanguage.d.ts.map +1 -0
  251. package/esm/src/models/acceptlanguage.js +25 -0
  252. package/esm/src/models/acceptlanguage.js.map +1 -0
  253. package/esm/src/models/accessibleportal.d.ts +12 -0
  254. package/esm/src/models/accessibleportal.d.ts.map +1 -0
  255. package/esm/src/models/accessibleportal.js +14 -0
  256. package/esm/src/models/accessibleportal.js.map +1 -0
  257. package/esm/src/models/additionalsnippets.d.ts +17 -0
  258. package/esm/src/models/additionalsnippets.d.ts.map +1 -0
  259. package/esm/src/models/additionalsnippets.js +23 -0
  260. package/esm/src/models/additionalsnippets.js.map +1 -0
  261. package/esm/src/models/aisearchop.d.ts +23 -0
  262. package/esm/src/models/aisearchop.d.ts.map +1 -0
  263. package/esm/src/models/aisearchop.js +24 -0
  264. package/esm/src/models/aisearchop.js.map +1 -0
  265. package/esm/src/models/allaccessibleportals.d.ts +12 -0
  266. package/esm/src/models/allaccessibleportals.d.ts.map +1 -0
  267. package/esm/src/models/allaccessibleportals.js +11 -0
  268. package/esm/src/models/allaccessibleportals.js.map +1 -0
  269. package/esm/src/models/answersrequest.d.ts +28 -0
  270. package/esm/src/models/answersrequest.d.ts.map +1 -0
  271. package/esm/src/models/answersrequest.js +28 -0
  272. package/esm/src/models/answersrequest.js.map +1 -0
  273. package/esm/src/models/answersresponse.d.ts +34 -0
  274. package/esm/src/models/answersresponse.d.ts.map +1 -0
  275. package/esm/src/models/answersresponse.js +38 -0
  276. package/esm/src/models/answersresponse.js.map +1 -0
  277. package/esm/src/models/article.d.ts +59 -0
  278. package/esm/src/models/article.d.ts.map +1 -0
  279. package/esm/src/models/article.js +59 -0
  280. package/esm/src/models/article.js.map +1 -0
  281. package/esm/src/models/articleadditionalattributes.d.ts +4 -0
  282. package/esm/src/models/articleadditionalattributes.d.ts.map +1 -0
  283. package/esm/src/models/articleadditionalattributes.js +22 -0
  284. package/esm/src/models/articleadditionalattributes.js.map +1 -0
  285. package/esm/src/models/articleattachment.d.ts +16 -0
  286. package/esm/src/models/articleattachment.d.ts.map +1 -0
  287. package/esm/src/models/articleattachment.js +20 -0
  288. package/esm/src/models/articleattachment.js.map +1 -0
  289. package/esm/src/models/articleresult.d.ts +43 -0
  290. package/esm/src/models/articleresult.d.ts.map +1 -0
  291. package/esm/src/models/articleresult.js +42 -0
  292. package/esm/src/models/articleresult.js.map +1 -0
  293. package/esm/src/models/articleresultadditionalattributes.d.ts +4 -0
  294. package/esm/src/models/articleresultadditionalattributes.d.ts.map +1 -0
  295. package/esm/src/models/articleresultadditionalattributes.js +21 -0
  296. package/esm/src/models/articleresultadditionalattributes.js.map +1 -0
  297. package/esm/src/models/articleresults.d.ts +12 -0
  298. package/esm/src/models/articleresults.d.ts.map +1 -0
  299. package/esm/src/models/articleresults.js +11 -0
  300. package/esm/src/models/articleresults.js.map +1 -0
  301. package/esm/src/models/articlesearchresult.d.ts +57 -0
  302. package/esm/src/models/articlesearchresult.d.ts.map +1 -0
  303. package/esm/src/models/articlesearchresult.js +62 -0
  304. package/esm/src/models/articlesearchresult.js.map +1 -0
  305. package/esm/src/models/articletype.d.ts +17 -0
  306. package/esm/src/models/articletype.d.ts.map +1 -0
  307. package/esm/src/models/articletype.js +24 -0
  308. package/esm/src/models/articletype.js.map +1 -0
  309. package/esm/src/models/attachmentforcreatesuggestion.d.ts +9 -0
  310. package/esm/src/models/attachmentforcreatesuggestion.d.ts.map +1 -0
  311. package/esm/src/models/attachmentforcreatesuggestion.js +8 -0
  312. package/esm/src/models/attachmentforcreatesuggestion.js.map +1 -0
  313. package/esm/src/models/bookmarkstatus.d.ts +12 -0
  314. package/esm/src/models/bookmarkstatus.d.ts.map +1 -0
  315. package/esm/src/models/bookmarkstatus.js +11 -0
  316. package/esm/src/models/bookmarkstatus.js.map +1 -0
  317. package/esm/src/models/complianceforarticle.d.ts +24 -0
  318. package/esm/src/models/complianceforarticle.d.ts.map +1 -0
  319. package/esm/src/models/complianceforarticle.js +15 -0
  320. package/esm/src/models/complianceforarticle.js.map +1 -0
  321. package/esm/src/models/createdby.d.ts +10 -0
  322. package/esm/src/models/createdby.d.ts.map +1 -0
  323. package/esm/src/models/createdby.js +12 -0
  324. package/esm/src/models/createdby.js.map +1 -0
  325. package/esm/src/models/createsuggestion.d.ts +43 -0
  326. package/esm/src/models/createsuggestion.d.ts.map +1 -0
  327. package/esm/src/models/createsuggestion.js +47 -0
  328. package/esm/src/models/createsuggestion.js.map +1 -0
  329. package/esm/src/models/customattribute.d.ts +13 -0
  330. package/esm/src/models/customattribute.d.ts.map +1 -0
  331. package/esm/src/models/customattribute.js +19 -0
  332. package/esm/src/models/customattribute.js.map +1 -0
  333. package/esm/src/models/department.d.ts +7 -0
  334. package/esm/src/models/department.d.ts.map +1 -0
  335. package/esm/src/models/department.js +9 -0
  336. package/esm/src/models/department.js.map +1 -0
  337. package/esm/src/models/edition.d.ts +22 -0
  338. package/esm/src/models/edition.d.ts.map +1 -0
  339. package/esm/src/models/edition.js +18 -0
  340. package/esm/src/models/edition.js.map +1 -0
  341. package/esm/src/models/errors/apierror.d.ts +13 -0
  342. package/esm/src/models/errors/apierror.d.ts.map +1 -0
  343. package/esm/src/models/errors/apierror.js +12 -0
  344. package/esm/src/models/errors/apierror.js.map +1 -0
  345. package/esm/src/models/errors/httpclienterrors.d.ts +44 -0
  346. package/esm/src/models/errors/httpclienterrors.d.ts.map +1 -0
  347. package/esm/src/models/errors/httpclienterrors.js +56 -0
  348. package/esm/src/models/errors/httpclienterrors.js.map +1 -0
  349. package/esm/src/models/errors/sdkvalidationerror.d.ts +20 -0
  350. package/esm/src/models/errors/sdkvalidationerror.d.ts.map +1 -0
  351. package/esm/src/models/errors/sdkvalidationerror.js +85 -0
  352. package/esm/src/models/errors/sdkvalidationerror.js.map +1 -0
  353. package/esm/src/models/folderbreadcrumb.d.ts +10 -0
  354. package/esm/src/models/folderbreadcrumb.d.ts.map +1 -0
  355. package/esm/src/models/folderbreadcrumb.js +9 -0
  356. package/esm/src/models/folderbreadcrumb.js.map +1 -0
  357. package/esm/src/models/foldersummary.d.ts +12 -0
  358. package/esm/src/models/foldersummary.d.ts.map +1 -0
  359. package/esm/src/models/foldersummary.js +11 -0
  360. package/esm/src/models/foldersummary.js.map +1 -0
  361. package/esm/src/models/getannouncementarticlesop.d.ts +25 -0
  362. package/esm/src/models/getannouncementarticlesop.d.ts.map +1 -0
  363. package/esm/src/models/getannouncementarticlesop.js +26 -0
  364. package/esm/src/models/getannouncementarticlesop.js.map +1 -0
  365. package/esm/src/models/getarticlebyidop.d.ts +57 -0
  366. package/esm/src/models/getarticlebyidop.d.ts.map +1 -0
  367. package/esm/src/models/getarticlebyidop.js +130 -0
  368. package/esm/src/models/getarticlebyidop.js.map +1 -0
  369. package/esm/src/models/getmyportalsop.d.ts +28 -0
  370. package/esm/src/models/getmyportalsop.d.ts.map +1 -0
  371. package/esm/src/models/getmyportalsop.js +29 -0
  372. package/esm/src/models/getmyportalsop.js.map +1 -0
  373. package/esm/src/models/getpopulararticlesop.d.ts +24 -0
  374. package/esm/src/models/getpopulararticlesop.d.ts.map +1 -0
  375. package/esm/src/models/getpopulararticlesop.js +25 -0
  376. package/esm/src/models/getpopulararticlesop.js.map +1 -0
  377. package/esm/src/models/l10nstring.d.ts +7 -0
  378. package/esm/src/models/l10nstring.d.ts.map +1 -0
  379. package/esm/src/models/l10nstring.js +9 -0
  380. package/esm/src/models/l10nstring.js.map +1 -0
  381. package/esm/src/models/languagecode.d.ts +7 -0
  382. package/esm/src/models/languagecode.d.ts.map +1 -0
  383. package/esm/src/models/languagecode.js +40 -0
  384. package/esm/src/models/languagecode.js.map +1 -0
  385. package/esm/src/models/languagecodeparameter.d.ts +7 -0
  386. package/esm/src/models/languagecodeparameter.d.ts.map +1 -0
  387. package/esm/src/models/languagecodeparameter.js +41 -0
  388. package/esm/src/models/languagecodeparameter.js.map +1 -0
  389. package/esm/src/models/languagequeryparameter.d.ts +7 -0
  390. package/esm/src/models/languagequeryparameter.d.ts.map +1 -0
  391. package/esm/src/models/languagequeryparameter.js +41 -0
  392. package/esm/src/models/languagequeryparameter.js.map +1 -0
  393. package/esm/src/models/link.d.ts +10 -0
  394. package/esm/src/models/link.d.ts.map +1 -0
  395. package/esm/src/models/link.js +9 -0
  396. package/esm/src/models/link.js.map +1 -0
  397. package/esm/src/models/makesuggestionop.d.ts +18 -0
  398. package/esm/src/models/makesuggestionop.d.ts.map +1 -0
  399. package/esm/src/models/makesuggestionop.js +19 -0
  400. package/esm/src/models/makesuggestionop.js.map +1 -0
  401. package/esm/src/models/mandatorylanguagequeryparameter.d.ts +7 -0
  402. package/esm/src/models/mandatorylanguagequeryparameter.d.ts.map +1 -0
  403. package/esm/src/models/mandatorylanguagequeryparameter.js +40 -0
  404. package/esm/src/models/mandatorylanguagequeryparameter.js.map +1 -0
  405. package/esm/src/models/milestone.d.ts +10 -0
  406. package/esm/src/models/milestone.d.ts.map +1 -0
  407. package/esm/src/models/milestone.js +9 -0
  408. package/esm/src/models/milestone.js.map +1 -0
  409. package/esm/src/models/milestonename.d.ts +10 -0
  410. package/esm/src/models/milestonename.d.ts.map +1 -0
  411. package/esm/src/models/milestonename.js +9 -0
  412. package/esm/src/models/milestonename.js.map +1 -0
  413. package/esm/src/models/modifiedby.d.ts +10 -0
  414. package/esm/src/models/modifiedby.d.ts.map +1 -0
  415. package/esm/src/models/modifiedby.js +12 -0
  416. package/esm/src/models/modifiedby.js.map +1 -0
  417. package/esm/src/models/order.d.ts +4 -0
  418. package/esm/src/models/order.d.ts.map +1 -0
  419. package/esm/src/models/order.js +9 -0
  420. package/esm/src/models/order.js.map +1 -0
  421. package/esm/src/models/ownedby.d.ts +10 -0
  422. package/esm/src/models/ownedby.d.ts.map +1 -0
  423. package/esm/src/models/ownedby.js +13 -0
  424. package/esm/src/models/ownedby.js.map +1 -0
  425. package/esm/src/models/paginationinfo.d.ts +10 -0
  426. package/esm/src/models/paginationinfo.d.ts.map +1 -0
  427. package/esm/src/models/paginationinfo.js +12 -0
  428. package/esm/src/models/paginationinfo.js.map +1 -0
  429. package/esm/src/models/personalization.d.ts +25 -0
  430. package/esm/src/models/personalization.d.ts.map +1 -0
  431. package/esm/src/models/personalization.js +22 -0
  432. package/esm/src/models/personalization.js.map +1 -0
  433. package/esm/src/models/postportalidanswersop.d.ts +24 -0
  434. package/esm/src/models/postportalidanswersop.d.ts.map +1 -0
  435. package/esm/src/models/postportalidanswersop.js +25 -0
  436. package/esm/src/models/postportalidanswersop.js.map +1 -0
  437. package/esm/src/models/postportalidretrieveop.d.ts +26 -0
  438. package/esm/src/models/postportalidretrieveop.d.ts.map +1 -0
  439. package/esm/src/models/postportalidretrieveop.js +27 -0
  440. package/esm/src/models/postportalidretrieveop.js.map +1 -0
  441. package/esm/src/models/publishview.d.ts +13 -0
  442. package/esm/src/models/publishview.d.ts.map +1 -0
  443. package/esm/src/models/publishview.js +15 -0
  444. package/esm/src/models/publishview.js.map +1 -0
  445. package/esm/src/models/referenceresponse.d.ts +25 -0
  446. package/esm/src/models/referenceresponse.d.ts.map +1 -0
  447. package/esm/src/models/referenceresponse.js +30 -0
  448. package/esm/src/models/referenceresponse.js.map +1 -0
  449. package/esm/src/models/retrieverequest.d.ts +18 -0
  450. package/esm/src/models/retrieverequest.d.ts.map +1 -0
  451. package/esm/src/models/retrieverequest.js +21 -0
  452. package/esm/src/models/retrieverequest.js.map +1 -0
  453. package/esm/src/models/retrieveresponse.d.ts +37 -0
  454. package/esm/src/models/retrieveresponse.d.ts.map +1 -0
  455. package/esm/src/models/retrieveresponse.js +37 -0
  456. package/esm/src/models/retrieveresponse.js.map +1 -0
  457. package/esm/src/models/schemaslink.d.ts +8 -0
  458. package/esm/src/models/schemaslink.d.ts.map +1 -0
  459. package/esm/src/models/schemaslink.js +10 -0
  460. package/esm/src/models/schemaslink.js.map +1 -0
  461. package/esm/src/models/searchresponse.d.ts +14 -0
  462. package/esm/src/models/searchresponse.d.ts.map +1 -0
  463. package/esm/src/models/searchresponse.js +12 -0
  464. package/esm/src/models/searchresponse.js.map +1 -0
  465. package/esm/src/models/searchresult.d.ts +27 -0
  466. package/esm/src/models/searchresult.d.ts.map +1 -0
  467. package/esm/src/models/searchresult.js +32 -0
  468. package/esm/src/models/searchresult.js.map +1 -0
  469. package/esm/src/models/security.d.ts +6 -0
  470. package/esm/src/models/security.d.ts.map +1 -0
  471. package/esm/src/models/security.js +9 -0
  472. package/esm/src/models/security.js.map +1 -0
  473. package/esm/src/models/shorturl.d.ts +9 -0
  474. package/esm/src/models/shorturl.d.ts.map +1 -0
  475. package/esm/src/models/shorturl.js +12 -0
  476. package/esm/src/models/shorturl.js.map +1 -0
  477. package/esm/src/models/sortidnamedepartment.d.ts +4 -0
  478. package/esm/src/models/sortidnamedepartment.d.ts.map +1 -0
  479. package/esm/src/models/sortidnamedepartment.js +10 -0
  480. package/esm/src/models/sortidnamedepartment.js.map +1 -0
  481. package/esm/src/models/stage.d.ts +11 -0
  482. package/esm/src/models/stage.d.ts.map +1 -0
  483. package/esm/src/models/stage.js +11 -0
  484. package/esm/src/models/stage.js.map +1 -0
  485. package/esm/src/models/structuredauthoringfields.d.ts +10 -0
  486. package/esm/src/models/structuredauthoringfields.d.ts.map +1 -0
  487. package/esm/src/models/structuredauthoringfields.js +12 -0
  488. package/esm/src/models/structuredauthoringfields.js.map +1 -0
  489. package/esm/src/models/tag.d.ts +7 -0
  490. package/esm/src/models/tag.d.ts.map +1 -0
  491. package/esm/src/models/tag.js +9 -0
  492. package/esm/src/models/tag.js.map +1 -0
  493. package/esm/src/models/tagcategory.d.ts +14 -0
  494. package/esm/src/models/tagcategory.d.ts.map +1 -0
  495. package/esm/src/models/tagcategory.js +13 -0
  496. package/esm/src/models/tagcategory.js.map +1 -0
  497. package/esm/src/models/taggroup.d.ts +7 -0
  498. package/esm/src/models/taggroup.d.ts.map +1 -0
  499. package/esm/src/models/taggroup.js +10 -0
  500. package/esm/src/models/taggroup.js.map +1 -0
  501. package/esm/src/models/taggroups.d.ts +7 -0
  502. package/esm/src/models/taggroups.d.ts.map +1 -0
  503. package/esm/src/models/taggroups.js +9 -0
  504. package/esm/src/models/taggroups.js.map +1 -0
  505. package/esm/src/models/tags.d.ts +7 -0
  506. package/esm/src/models/tags.d.ts.map +1 -0
  507. package/esm/src/models/tags.js +9 -0
  508. package/esm/src/models/tags.js.map +1 -0
  509. package/esm/src/models/topicbreadcrumb.d.ts +10 -0
  510. package/esm/src/models/topicbreadcrumb.d.ts.map +1 -0
  511. package/esm/src/models/topicbreadcrumb.js +9 -0
  512. package/esm/src/models/topicbreadcrumb.js.map +1 -0
  513. package/esm/src/models/topicsummary.d.ts +10 -0
  514. package/esm/src/models/topicsummary.d.ts.map +1 -0
  515. package/esm/src/models/topicsummary.js +9 -0
  516. package/esm/src/models/topicsummary.js.map +1 -0
  517. package/esm/src/models/workflow.d.ts +10 -0
  518. package/esm/src/models/workflow.d.ts.map +1 -0
  519. package/esm/src/models/workflow.js +10 -0
  520. package/esm/src/models/workflow.js.map +1 -0
  521. package/esm/src/models/workflowmilestone.d.ts +4 -0
  522. package/esm/src/models/workflowmilestone.d.ts.map +1 -0
  523. package/esm/src/models/workflowmilestone.js +10 -0
  524. package/esm/src/models/workflowmilestone.js.map +1 -0
  525. package/esm/src/models/wserrorcommon.d.ts +17 -0
  526. package/esm/src/models/wserrorcommon.d.ts.map +1 -0
  527. package/esm/src/models/wserrorcommon.js +16 -0
  528. package/esm/src/models/wserrorcommon.js.map +1 -0
  529. package/esm/src/types/async.d.ts +23 -0
  530. package/esm/src/types/async.d.ts.map +1 -0
  531. package/esm/src/types/async.js +28 -0
  532. package/esm/src/types/async.js.map +1 -0
  533. package/esm/src/types/blobs.d.ts +2 -0
  534. package/esm/src/types/blobs.d.ts.map +1 -0
  535. package/esm/src/types/blobs.js +20 -0
  536. package/esm/src/types/blobs.js.map +1 -0
  537. package/esm/src/types/enums.d.ts +12 -0
  538. package/esm/src/types/enums.d.ts.map +1 -0
  539. package/esm/src/types/enums.js +7 -0
  540. package/esm/src/types/enums.js.map +1 -0
  541. package/esm/src/types/fp.d.ts +31 -0
  542. package/esm/src/types/fp.d.ts.map +1 -0
  543. package/esm/src/types/fp.js +31 -0
  544. package/esm/src/types/fp.js.map +1 -0
  545. package/esm/src/types/rfcdate.d.ts +21 -0
  546. package/esm/src/types/rfcdate.d.ts.map +1 -0
  547. package/esm/src/types/rfcdate.js +43 -0
  548. package/esm/src/types/rfcdate.js.map +1 -0
  549. package/esm/src/types/streams.d.ts +2 -0
  550. package/esm/src/types/streams.d.ts.map +1 -0
  551. package/esm/src/types/streams.js +15 -0
  552. package/esm/src/types/streams.js.map +1 -0
  553. package/esm/worker-configuration.d.ts +4 -0
  554. package/esm/worker-configuration.d.ts.map +1 -0
  555. package/esm/worker-configuration.js +5 -0
  556. package/esm/worker-configuration.js.map +1 -0
  557. package/manifest.json +96 -0
  558. package/package.json +41 -0
  559. package/scripts/login.js +93 -0
  560. package/scripts/logout.js +53 -0
  561. package/src/cloudflare-worker/cloudflare-worker.ts +98 -0
  562. package/src/cloudflare-worker/landing-page.ts +337 -0
  563. package/src/core.ts +13 -0
  564. package/src/funcs/getAnnouncements.ts +202 -0
  565. package/src/funcs/getArticle.ts +208 -0
  566. package/src/funcs/getPopularArticles.ts +198 -0
  567. package/src/funcs/getPortals.ts +190 -0
  568. package/src/funcs/makeSuggestion.ts +191 -0
  569. package/src/funcs/queryAnswers.ts +191 -0
  570. package/src/funcs/queryRetrieve.ts +197 -0
  571. package/src/funcs/querySearch.ts +181 -0
  572. package/src/hooks/auth-hook.ts +1752 -0
  573. package/src/hooks/auth-pages/config-page.js +531 -0
  574. package/src/hooks/hooks.ts +132 -0
  575. package/src/hooks/portal-cache-hook.ts +505 -0
  576. package/src/hooks/portal-lookup-hook.ts +429 -0
  577. package/src/hooks/registration.ts +43 -0
  578. package/src/hooks/server-routing-hook.ts +58 -0
  579. package/src/hooks/types.ts +107 -0
  580. package/src/lib/base64.ts +37 -0
  581. package/src/lib/config.ts +89 -0
  582. package/src/lib/dlv.ts +53 -0
  583. package/src/lib/encodings.ts +483 -0
  584. package/src/lib/env.ts +41 -0
  585. package/src/lib/files.ts +82 -0
  586. package/src/lib/http.ts +323 -0
  587. package/src/lib/is-plain-object.ts +43 -0
  588. package/src/lib/logger.ts +9 -0
  589. package/src/lib/matchers.ts +350 -0
  590. package/src/lib/primitives.ts +113 -0
  591. package/src/lib/result.ts +50 -0
  592. package/src/lib/retries.ts +218 -0
  593. package/src/lib/schemas.ts +91 -0
  594. package/src/lib/sdks.ts +409 -0
  595. package/src/lib/security.ts +260 -0
  596. package/src/lib/url.ts +33 -0
  597. package/src/mcp-server/cli/start/command.ts +100 -0
  598. package/src/mcp-server/cli/start/impl.ts +133 -0
  599. package/src/mcp-server/cli.ts +13 -0
  600. package/src/mcp-server/console-logger.ts +76 -0
  601. package/src/mcp-server/extensions.ts +17 -0
  602. package/src/mcp-server/mcp-server.ts +26 -0
  603. package/src/mcp-server/prompts.ts +121 -0
  604. package/src/mcp-server/resources.ts +176 -0
  605. package/src/mcp-server/scopes.ts +7 -0
  606. package/src/mcp-server/server.ts +91 -0
  607. package/src/mcp-server/shared.ts +78 -0
  608. package/src/mcp-server/tools/getAnnouncements.ts +53 -0
  609. package/src/mcp-server/tools/getArticle.ts +56 -0
  610. package/src/mcp-server/tools/getPopularArticles.ts +53 -0
  611. package/src/mcp-server/tools/getPortals.ts +51 -0
  612. package/src/mcp-server/tools/makeSuggestion.ts +53 -0
  613. package/src/mcp-server/tools/queryAnswers.ts +53 -0
  614. package/src/mcp-server/tools/queryRetrieve.ts +55 -0
  615. package/src/mcp-server/tools/querySearch.ts +44 -0
  616. package/src/mcp-server/tools.ts +156 -0
  617. package/src/models/acceptlanguage.ts +30 -0
  618. package/src/models/accessibleportal.ts +27 -0
  619. package/src/models/additionalsnippets.ts +43 -0
  620. package/src/models/aisearchop.ts +62 -0
  621. package/src/models/allaccessibleportals.ts +27 -0
  622. package/src/models/answersrequest.ts +67 -0
  623. package/src/models/answersresponse.ts +88 -0
  624. package/src/models/article.ts +120 -0
  625. package/src/models/articleadditionalattributes.ts +27 -0
  626. package/src/models/articleattachment.ts +38 -0
  627. package/src/models/articleresult.ts +91 -0
  628. package/src/models/articleresults.ts +24 -0
  629. package/src/models/articlesearchresult.ts +139 -0
  630. package/src/models/articletype.ts +42 -0
  631. package/src/models/attachmentforcreatesuggestion.ts +18 -0
  632. package/src/models/bookmarkstatus.ts +28 -0
  633. package/src/models/complianceforarticle.ts +48 -0
  634. package/src/models/createdby.ts +22 -0
  635. package/src/models/createsuggestion.ts +108 -0
  636. package/src/models/customattribute.ts +33 -0
  637. package/src/models/department.ts +16 -0
  638. package/src/models/edition.ts +40 -0
  639. package/src/models/errors/apierror.ts +21 -0
  640. package/src/models/errors/httpclienterrors.ts +62 -0
  641. package/src/models/errors/sdkvalidationerror.ts +97 -0
  642. package/src/models/folderbreadcrumb.ts +21 -0
  643. package/src/models/foldersummary.ts +27 -0
  644. package/src/models/getannouncementarticlesop.ts +68 -0
  645. package/src/models/getarticlebyidop.ts +182 -0
  646. package/src/models/getmyportalsop.ts +78 -0
  647. package/src/models/getpopulararticlesop.ts +66 -0
  648. package/src/models/l10nstring.ts +19 -0
  649. package/src/models/languagecode.ts +43 -0
  650. package/src/models/languagecodeparameter.ts +48 -0
  651. package/src/models/languagequeryparameter.ts +48 -0
  652. package/src/models/link.ts +17 -0
  653. package/src/models/makesuggestionop.ts +47 -0
  654. package/src/models/mandatorylanguagequeryparameter.ts +47 -0
  655. package/src/models/milestone.ts +16 -0
  656. package/src/models/milestonename.ts +22 -0
  657. package/src/models/modifiedby.ts +25 -0
  658. package/src/models/order.ts +12 -0
  659. package/src/models/ownedby.ts +22 -0
  660. package/src/models/paginationinfo.ts +24 -0
  661. package/src/models/personalization.ts +55 -0
  662. package/src/models/postportalidanswersop.ts +62 -0
  663. package/src/models/postportalidretrieveop.ts +68 -0
  664. package/src/models/publishview.ts +35 -0
  665. package/src/models/referenceresponse.ts +60 -0
  666. package/src/models/retrieverequest.ts +47 -0
  667. package/src/models/retrieveresponse.ts +92 -0
  668. package/src/models/schemaslink.ts +21 -0
  669. package/src/models/searchresponse.ts +34 -0
  670. package/src/models/searchresult.ts +64 -0
  671. package/src/models/security.ts +14 -0
  672. package/src/models/shorturl.ts +20 -0
  673. package/src/models/sortidnamedepartment.ts +15 -0
  674. package/src/models/stage.ts +20 -0
  675. package/src/models/structuredauthoringfields.ts +24 -0
  676. package/src/models/tagcategory.ts +28 -0
  677. package/src/models/taggroup.ts +13 -0
  678. package/src/models/taggroups.ts +13 -0
  679. package/src/models/tags.ts +15 -0
  680. package/src/models/topicbreadcrumb.ts +21 -0
  681. package/src/models/topicsummary.ts +24 -0
  682. package/src/models/workflow.ts +16 -0
  683. package/src/models/workflowmilestone.ts +13 -0
  684. package/src/models/wserrorcommon.ts +34 -0
  685. package/src/types/async.ts +68 -0
  686. package/src/types/blobs.ts +23 -0
  687. package/src/types/enums.ts +16 -0
  688. package/src/types/fp.ts +50 -0
  689. package/src/types/rfcdate.ts +54 -0
  690. package/src/types/streams.ts +21 -0
  691. package/tsconfig.json +36 -0
  692. package/worker-configuration.d.ts +8489 -0
  693. package/worker-configuration.ts +11 -0
@@ -0,0 +1,429 @@
1
+ /**
2
+ * Portal Lookup Hook for eGain MCP Server
3
+ * Translates portal names to portal IDs in request parameters before sending requests
4
+ */
5
+
6
+ import { BeforeRequestHook, BeforeRequestContext } from "./types.js";
7
+ import { PortalCacheHook } from "./portal-cache-hook.js";
8
+
9
+ export class PortalLookupHook implements BeforeRequestHook {
10
+ constructor(private portalCache: PortalCacheHook) {}
11
+
12
+ private translatePortalName(portalName: string): string | null {
13
+ // Skip if it's already a numeric ID
14
+ if (/^\d+$/.test(portalName)) {
15
+ return null; // Already an ID, no translation needed
16
+ }
17
+
18
+ // Check cache readiness using the same logic as beforeCreateRequest
19
+ const availablePortals = this.portalCache.getAvailablePortals();
20
+ const cacheInitialized = this.portalCache.isCacheInitialized();
21
+ const cacheReady = cacheInitialized || availablePortals.length > 0;
22
+
23
+ if (!cacheReady) {
24
+ const isInitializing = this.portalCache.isCacheInitializing();
25
+ if (isInitializing) {
26
+ console.error(`⚠️ LOOKUP: Portal cache still initializing, cannot translate portal name: "${portalName}"`);
27
+ console.error('💡 LOOKUP: Race condition detected - cache initialization in progress');
28
+ } else {
29
+ console.error(`⚠️ LOOKUP: Portal cache not ready, cannot translate portal name: "${portalName}"`);
30
+ }
31
+ return null;
32
+ }
33
+
34
+ // Try exact match first
35
+ let portalId = this.portalCache.getPortalId(portalName);
36
+
37
+ if (portalId) {
38
+ console.error(`✅ LOOKUP: Exact match found "${portalName}" -> "${portalId}"`);
39
+ return portalId;
40
+ }
41
+
42
+ // Try fuzzy matching if exact match fails
43
+ portalId = this.fuzzyMatchPortal(portalName, availablePortals);
44
+
45
+ if (portalId) {
46
+ console.error(`✅ LOOKUP: Fuzzy match found for "${portalName}" -> "${portalId}"`);
47
+ } else {
48
+ console.error(`⚠️ LOOKUP: Portal name "${portalName}" not found in cache. Available portals:`,
49
+ availablePortals.map(p => p.name).join(', '));
50
+ }
51
+
52
+ return portalId;
53
+ }
54
+
55
+ private fuzzyMatchPortal(searchName: string, availablePortals: Array<{id: string, name: string}>): string | null {
56
+ const normalizedSearch = searchName.toLowerCase().trim();
57
+
58
+ // Remove common suffixes/prefixes that might differ
59
+ const cleanSearch = normalizedSearch
60
+ .replace(/\s*portal\s*$/i, '')
61
+ .replace(/^portal\s*/i, '')
62
+ .trim();
63
+
64
+ for (const portal of availablePortals) {
65
+ const normalizedPortal = portal.name.toLowerCase().trim();
66
+ const cleanPortal = normalizedPortal
67
+ .replace(/\s*portal\s*$/i, '')
68
+ .replace(/^portal\s*/i, '')
69
+ .trim();
70
+
71
+ // Try various matching strategies
72
+ if (
73
+ // Exact match after cleaning
74
+ cleanSearch === cleanPortal ||
75
+ // Contains match (search contains portal name or vice versa)
76
+ cleanSearch.includes(cleanPortal) ||
77
+ cleanPortal.includes(cleanSearch) ||
78
+ // Partial word match
79
+ this.wordsMatch(cleanSearch, cleanPortal)
80
+ ) {
81
+ console.error(`🎯 LOOKUP: Fuzzy matched "${searchName}" -> "${portal.name}" (${portal.id})`);
82
+ return portal.id;
83
+ }
84
+ }
85
+
86
+ return null;
87
+ }
88
+
89
+ private wordsMatch(search: string, target: string): boolean {
90
+ const searchWords = search.split(/\s+/).filter(w => w.length > 2);
91
+ const targetWords = target.split(/\s+/).filter(w => w.length > 2);
92
+
93
+ // If either has significant words, check if any match
94
+ if (searchWords.length > 0 && targetWords.length > 0) {
95
+ return searchWords.some(sw =>
96
+ targetWords.some(tw =>
97
+ sw.includes(tw) || tw.includes(sw)
98
+ )
99
+ );
100
+ }
101
+
102
+ return false;
103
+ }
104
+
105
+ // Get default portal ID (only from cache, no hard-coded fallbacks)
106
+ private getDefaultPortalId(): string | null {
107
+ // Try common default portal names from cache only
108
+ const defaultPortalNames = ['Master Portal'];
109
+
110
+ for (const defaultName of defaultPortalNames) {
111
+ const portalId = this.translatePortalName(defaultName);
112
+ if (portalId) {
113
+ console.error(`🎯 LOOKUP: Using default portal "${defaultName}" -> ${portalId}`);
114
+ return portalId;
115
+ }
116
+ }
117
+
118
+ console.error('⚠️ LOOKUP: No default portal found in cache');
119
+ return null;
120
+ }
121
+
122
+ // Get portal name from ID (reverse lookup)
123
+ private getPortalNameFromId(portalId: string): string | null {
124
+ const availablePortals = this.portalCache.getAvailablePortals();
125
+ for (const portal of availablePortals) {
126
+ if (portal.id === portalId) {
127
+ return portal.name;
128
+ }
129
+ }
130
+
131
+ return null;
132
+ }
133
+
134
+
135
+ async beforeRequest(_hookCtx: BeforeRequestContext, request: Request): Promise<Request> {
136
+ // console.error('🔍 LOOKUP: ===== PORTAL LOOKUP HOOK TRIGGERED =====');
137
+ // console.error('🔍 LOOKUP: Request URL:', request.url);
138
+ // console.error('🔍 LOOKUP: Request method:', request.method);
139
+
140
+
141
+ // Check if cache is ready (should be ready from SDKInit)
142
+
143
+ // Check if URL contains portal name in path (e.g., /portals/{portalName}/)
144
+ const urlObj = new URL(request.url);
145
+ // console.error('🔍 LOOKUP: Full URL:', request.url);
146
+ // console.error('🔍 LOOKUP: URL pathname:', urlObj.pathname);
147
+ // console.error('🔍 LOOKUP: Testing regex /\\/portals\\/([^\\/]+)/ against pathname...');
148
+
149
+ const portalPathMatch = urlObj.pathname.match(/\/portals\/([^\/]+)/);
150
+ // console.error('🔍 LOOKUP: Regex match result:', portalPathMatch);
151
+
152
+ if (portalPathMatch && portalPathMatch[1]) {
153
+ const portalNameInPath = portalPathMatch[1];
154
+
155
+ // Check if it's already a proper portal ID
156
+ const portalIdPattern = /^[a-zA-Z0-9]{2,4}-\d{4,15}$/;
157
+ if (!portalIdPattern.test(portalNameInPath)) {
158
+ console.error(`🔍 LOOKUP: Portal name "${portalNameInPath}" in URL path needs translation...`);
159
+
160
+ // Get cache info
161
+ const availablePortals = this.portalCache.getAvailablePortals();
162
+ const cacheInitialized = this.portalCache.isCacheInitialized();
163
+ const cacheReady = cacheInitialized || availablePortals.length > 0;
164
+
165
+ if (!cacheReady) {
166
+ console.error(`⚠️ LOOKUP: Cache not ready, cannot translate portal name "${portalNameInPath}" from URL path`);
167
+ // Don't return here - let it continue to wait for cache initialization
168
+ } else {
169
+ const translatedPortalId = this.translatePortalName(portalNameInPath);
170
+ if (translatedPortalId) {
171
+ console.error(`🔄 LOOKUP: SUCCESS! Translating URL path: "${portalNameInPath}" -> "${translatedPortalId}"`);
172
+
173
+ // Replace portal name in URL path with portal ID
174
+ const newPathname = urlObj.pathname.replace(`/portals/${portalNameInPath}`, `/portals/${translatedPortalId}`);
175
+ urlObj.pathname = newPathname;
176
+
177
+ console.error(`🔄 LOOKUP: Original URL: ${request.url}`);
178
+ console.error(`🔄 LOOKUP: Modified URL: ${urlObj.toString()}`);
179
+
180
+ // Create new request with modified URL
181
+ const newRequest = new Request(urlObj.toString(), {
182
+ method: request.method,
183
+ headers: request.headers,
184
+ body: request.body
185
+ });
186
+
187
+ console.error(`🔄 LOOKUP: ===== RETURNING MODIFIED REQUEST (URL PATH) =====`);
188
+ return newRequest;
189
+ } else {
190
+ console.error(`❌ LOOKUP: Failed to translate portal name "${portalNameInPath}" from URL path`);
191
+ }
192
+ }
193
+ } else {
194
+ console.error(`✅ LOOKUP: Portal ID "${portalNameInPath}" in URL path already in correct format`);
195
+ }
196
+ }
197
+
198
+ // If cache is initializing, wait for it to complete
199
+ if (this.portalCache.isCacheInitializing()) {
200
+ console.error('⏳ LOOKUP: Cache is initializing, waiting for completion...');
201
+ await this.portalCache.waitForCacheInitialization();
202
+ console.error('✅ LOOKUP: Cache initialization completed');
203
+
204
+ // Re-check URL translation now that cache is ready
205
+ const portalPathMatch = urlObj.pathname.match(/\/portals\/([^\/]+)/);
206
+ if (portalPathMatch && portalPathMatch[1]) {
207
+ const portalNameInPath = portalPathMatch[1];
208
+ const portalIdPattern = /^[a-zA-Z0-9]{2,4}-\d{4,15}$/;
209
+
210
+ if (!portalIdPattern.test(portalNameInPath)) {
211
+ console.error(`🔄 LOOKUP: Re-checking URL translation after cache initialization for: "${portalNameInPath}"`);
212
+
213
+ const translatedPortalId = this.translatePortalName(portalNameInPath);
214
+ if (translatedPortalId) {
215
+ console.error(`🔄 LOOKUP: SUCCESS! Post-cache translating URL path: "${portalNameInPath}" -> "${translatedPortalId}"`);
216
+
217
+ // Replace portal name in URL path with portal ID
218
+ const newPathname = urlObj.pathname.replace(`/portals/${portalNameInPath}`, `/portals/${translatedPortalId}`);
219
+ urlObj.pathname = newPathname;
220
+
221
+ console.error(`🔄 LOOKUP: Original URL: ${request.url}`);
222
+ console.error(`🔄 LOOKUP: Modified URL: ${urlObj.toString()}`);
223
+
224
+ // Create new request with modified URL
225
+ const newRequest = new Request(urlObj.toString(), {
226
+ method: request.method,
227
+ headers: request.headers,
228
+ body: request.body
229
+ });
230
+
231
+ // console.error(`🔄 LOOKUP: ===== RETURNING MODIFIED REQUEST (POST-CACHE) =====`);
232
+ return newRequest;
233
+ } else {
234
+ console.error(`❌ LOOKUP: Post-cache translation failed for portal name "${portalNameInPath}"`);
235
+ }
236
+ }
237
+ }
238
+ }
239
+
240
+ const availablePortals = this.portalCache.getAvailablePortals();
241
+ const cacheReady = this.portalCache.isCacheInitialized() || availablePortals.length > 0;
242
+
243
+ if (!cacheReady) {
244
+ console.error('⚠️ LOOKUP: Portal cache not ready, using fallback behavior');
245
+ console.error('💡 LOOKUP: Will use portalId as-is and attempt minimal translation');
246
+ // Don't return early - try to do what we can with the request
247
+ }
248
+
249
+ console.error(`📂 LOOKUP: Portal cache ready with ${availablePortals.length} portals, proceeding with translation`);
250
+
251
+ // Process request body for portal name translation
252
+ if (request.headers.get('content-type')?.includes('application/json')) {
253
+ try {
254
+ // Clone the request to avoid "already used" error
255
+ const clonedRequest = request.clone();
256
+ const body = await clonedRequest.text();
257
+ if (body.trim().startsWith('{') || body.trim().startsWith('[')) {
258
+ const parsedJson = JSON.parse(body);
259
+ let bodyModified = false;
260
+
261
+
262
+ // Check for both portalID (uppercase D) and portalId (lowercase d)
263
+ const currentPortalId = parsedJson.portalID || parsedJson.portalId;
264
+
265
+ // Log current portal lookup context
266
+ if (parsedJson.channel && parsedJson.channel.name) {
267
+ console.error(`🎯 LOOKUP: Portal name detected in channel.name: "${parsedJson.channel.name}"`);
268
+ } else if (parsedJson.channel && parsedJson.channel.type === 'portal') {
269
+ console.error(`⚠️ LOOKUP: Channel type is "portal" but no channel.name provided for lookup`);
270
+ } else {
271
+ console.error(`📋 LOOKUP: No portal name in channel.name, will use portalID as-is: ${currentPortalId}`);
272
+ }
273
+
274
+ // Process portal_name in JSON body
275
+ if (parsedJson.portal_name && typeof parsedJson.portal_name === 'string') {
276
+ const portalId = this.translatePortalName(parsedJson.portal_name);
277
+ if (portalId) {
278
+ console.error(`🔄 LOOKUP: Translated JSON field portal_name: "${parsedJson.portal_name}" -> portal_id: "${portalId}"`);
279
+ parsedJson.portal_id = portalId;
280
+ delete parsedJson.portal_name;
281
+ bodyModified = true;
282
+ }
283
+ }
284
+
285
+ // Process portalID field (MCP tools use uppercase D)
286
+
287
+ if (parsedJson.portalID && typeof parsedJson.portalID === 'string') {
288
+
289
+ // Check if portalID doesn't match the expected pattern (prefix-digits)
290
+ const portalIdPattern = /^[a-zA-Z0-9]{2,4}-\d{4,15}$/;
291
+ const patternMatches = portalIdPattern.test(parsedJson.portalID);
292
+
293
+ if (!patternMatches) {
294
+
295
+ const translatedPortalId = this.translatePortalName(parsedJson.portalID);
296
+ console.error(`🔍 LOOKUP: Translation result: "${translatedPortalId}"`);
297
+
298
+ if (translatedPortalId) {
299
+ console.error(`🔄 LOOKUP: SUCCESS! Translated portalID: "${parsedJson.portalID}" -> "${translatedPortalId}"`);
300
+ console.error(`🔄 LOOKUP: BEFORE assignment - parsedJson.portalID = "${parsedJson.portalID}"`);
301
+ parsedJson.portalID = translatedPortalId;
302
+ console.error(`🔄 LOOKUP: AFTER assignment - parsedJson.portalID = "${parsedJson.portalID}"`);
303
+ bodyModified = true;
304
+ console.error(`🔄 LOOKUP: bodyModified set to: ${bodyModified}`);
305
+ } else {
306
+ console.error(`❌ LOOKUP: Failed to translate portalID "${parsedJson.portalID}". Available portals: ${availablePortals.map(p => p.name).slice(0, 5).join(', ')}${availablePortals.length > 5 ? '...' : ''}`);
307
+ }
308
+ } else {
309
+ console.error(`✅ LOOKUP: portalID "${parsedJson.portalID}" already in correct format, no translation needed`);
310
+ }
311
+ }
312
+
313
+ // Process portalId field (lowercase d for compatibility)
314
+ if (parsedJson.portalId && typeof parsedJson.portalId === 'string') {
315
+ // Check if portalId doesn't match the expected pattern (prefix-digits)
316
+ const portalIdPattern = /^[a-zA-Z0-9]{2,4}-\d{4,15}$/;
317
+ if (!portalIdPattern.test(parsedJson.portalId)) {
318
+ console.error(`🔍 LOOKUP: portalId "${parsedJson.portalId}" doesn't match expected pattern, attempting translation...`);
319
+ const translatedPortalId = this.translatePortalName(parsedJson.portalId);
320
+ if (translatedPortalId) {
321
+ console.error(`🔄 LOOKUP: Translated portalId: "${parsedJson.portalId}" -> "${translatedPortalId}"`);
322
+ parsedJson.portalId = translatedPortalId;
323
+ bodyModified = true;
324
+ } else {
325
+ console.error(`❌ LOOKUP: Failed to translate portalId "${parsedJson.portalId}". Available portals: ${availablePortals.map(p => p.name).slice(0, 5).join(', ')}${availablePortals.length > 5 ? '...' : ''}`);
326
+ }
327
+ } else {
328
+ console.error(`✅ LOOKUP: portalId "${parsedJson.portalId}" already in correct format, no translation needed`);
329
+ }
330
+ }
331
+
332
+ // Process channel.name in JSON body (for eGain requests)
333
+ if (parsedJson.channel &&
334
+ typeof parsedJson.channel === 'object' &&
335
+ parsedJson.channel.name &&
336
+ typeof parsedJson.channel.name === 'string') {
337
+ const portalId = this.translatePortalName(parsedJson.channel.name);
338
+ if (portalId) {
339
+ console.error(`🔄 LOOKUP: Translated JSON field channel.name: "${parsedJson.channel.name}" -> portalId: "${portalId}"`);
340
+ parsedJson.portalId = portalId;
341
+ bodyModified = true;
342
+ } else {
343
+ console.error(`❌ LOOKUP: Failed to translate portal name "${parsedJson.channel.name}". Available portals: ${availablePortals.map(p => p.name).slice(0, 5).join(', ')}${availablePortals.length > 5 ? '...' : ''}`);
344
+ console.error(`💡 LOOKUP: Make sure the portal name matches exactly or use fuzzy matching patterns`);
345
+ }
346
+ }
347
+
348
+ // Process portalId if it's 1 (default/placeholder) and we have channel info
349
+ if (parsedJson.portalId === 1 &&
350
+ parsedJson.channel &&
351
+ typeof parsedJson.channel === 'object' &&
352
+ parsedJson.channel.name &&
353
+ typeof parsedJson.channel.name === 'string') {
354
+ const portalId = this.translatePortalName(parsedJson.channel.name);
355
+ if (portalId) {
356
+ console.error(`🔄 LOOKUP: Replaced default portalId: 1 with "${parsedJson.channel.name}" -> portalId: "${portalId}"`);
357
+ parsedJson.portalId = portalId;
358
+ bodyModified = true;
359
+ }
360
+ }
361
+
362
+ // Handle case where channel.type is "portal" but no channel.name is provided
363
+ if (parsedJson.portalId === 1 &&
364
+ parsedJson.channel &&
365
+ typeof parsedJson.channel === 'object' &&
366
+ parsedJson.channel.type === 'portal' &&
367
+ !parsedJson.channel.name) {
368
+ console.error('⚠️ LOOKUP: Portal type="portal" specified but no channel.name provided for lookup');
369
+ if (cacheReady) {
370
+ // Try to get a default portal from cache
371
+ const portalId = this.getDefaultPortalId();
372
+ if (portalId) {
373
+ const portalName = this.getPortalNameFromId(portalId) || 'Default Portal';
374
+ console.error(`🔄 LOOKUP: No portal name provided, using default portal: "${portalName}" -> portalId: "${portalId}"`);
375
+ parsedJson.portalId = portalId;
376
+ // Also set the channel name for clarity
377
+ parsedJson.channel.name = portalName;
378
+ bodyModified = true;
379
+ } else {
380
+ console.error('❌ LOOKUP: No portal name provided and no default portal available in cache');
381
+ console.error('💡 LOOKUP: Please specify channel.name with a valid portal name (e.g., "eBrain")');
382
+ }
383
+ } else {
384
+ // Cache not ready - cannot proceed without cache
385
+ console.error('❌ LOOKUP: Cache not ready and no default portal available');
386
+ console.error('💡 LOOKUP: Portal cache must be initialized before making requests');
387
+ }
388
+ }
389
+
390
+ // Handle case where portalId is a placeholder value (like 100) that needs translation
391
+ if ((parsedJson.portalId === 100 || parsedJson.portalId === 1) &&
392
+ parsedJson.channel &&
393
+ typeof parsedJson.channel === 'object' &&
394
+ parsedJson.channel.type === 'portal' &&
395
+ !cacheReady) {
396
+ console.error('❌ LOOKUP: Cache not ready and portalId needs translation - cannot proceed without cache');
397
+ console.error('💡 LOOKUP: Please ensure portal cache is initialized before making requests');
398
+ // Don't use hardcoded fallbacks - let the request fail properly
399
+ }
400
+
401
+ if (bodyModified) {
402
+ const newBody = JSON.stringify(parsedJson);
403
+ // console.error(`🔄 LOOKUP: ===== REQUEST BODY MODIFIED =====`);
404
+ // console.error(`🔄 LOOKUP: Original body: ${body}`);
405
+ // console.error(`🔄 LOOKUP: Modified body: ${newBody}`);
406
+ // console.error(`🔄 LOOKUP: Creating new request with modified body...`);
407
+
408
+ const newRequest = new Request(request.url, {
409
+ method: request.method,
410
+ headers: request.headers,
411
+ body: newBody
412
+ });
413
+
414
+ console.error(`🔄 LOOKUP: ===== RETURNING MODIFIED REQUEST =====`);
415
+ return newRequest;
416
+ } else {
417
+ // console.error(`🔄 LOOKUP: No modifications made to request body`);
418
+ // console.error('⚠️ Request body NOT modified. Final request will use original portalId:', parsedJson.portalId || parsedJson.portalID);
419
+ }
420
+ }
421
+ } catch (error) {
422
+ console.error('Failed to parse JSON body for portal translation:', error);
423
+ }
424
+ }
425
+
426
+ console.error(`🔄 LOOKUP: ===== RETURNING ORIGINAL REQUEST =====`);
427
+ return request;
428
+ }
429
+ }
@@ -0,0 +1,43 @@
1
+ import { Hooks } from "./types.js";
2
+ import { AuthenticationHook } from "./auth-hook.js";
3
+ import { PortalCacheHook } from "./portal-cache-hook.js";
4
+ import { PortalLookupHook } from "./portal-lookup-hook.js";
5
+ import { ServerRoutingHook } from "./server-routing-hook.js";
6
+
7
+ /*
8
+ * This file is only ever generated once on the first generation and then is free to be modified.
9
+ * Any hooks you wish to add should be registered in the initHooks function. Feel free to define them
10
+ * in this file or in separate files in the hooks folder.
11
+ */
12
+
13
+ export function initHooks(hooks: Hooks) {
14
+ console.error('🚀 Initializing eGain MCP hooks...');
15
+
16
+ // 1. Server Routing Hook - routes operations to correct API server
17
+ // Register this FIRST before request creation so URLs are correct from the start
18
+ const serverRoutingHook = new ServerRoutingHook();
19
+ hooks.registerBeforeCreateRequestHook(serverRoutingHook);
20
+ console.error('✅ ROUTING: Registered server routing hook for before create request');
21
+
22
+ // 2. Portal Cache Hook - caches portal names/IDs after authentication
23
+ // Create this so we can pass it to the auth hook
24
+ const portalCacheHook = new PortalCacheHook();
25
+ hooks.registerSDKInitHook(portalCacheHook); // Handles full initialization
26
+ hooks.registerBeforeCreateRequestHook(portalCacheHook); // Synchronous readiness check only
27
+ console.error('✅ CACHE: Registered portal cache hook for SDK init and before create request');
28
+
29
+ // 3. Authentication Hook - handles login popup and token management
30
+ // Pass portal cache hook reference so it can trigger cache initialization after auth
31
+ const authHook = new AuthenticationHook(portalCacheHook);
32
+ hooks.registerSDKInitHook(authHook);
33
+ hooks.registerBeforeRequestHook(authHook); // Register for automatic token refresh
34
+ console.error('✅ AUTH: Registered authentication hook for SDK init and before request');
35
+
36
+ // 4. Portal Lookup Hook - translates portal names to IDs in requests
37
+ // Now synchronous since cache is guaranteed ready after SDKInit
38
+ const portalLookupHook = new PortalLookupHook(portalCacheHook);
39
+ hooks.registerBeforeRequestHook(portalLookupHook); // Should be mostly synchronous now
40
+ console.error('✅ LOOKUP: Registered portal lookup hook for before request');
41
+
42
+ console.error('🎉 All eGain MCP hooks registered successfully!');
43
+ }
@@ -0,0 +1,58 @@
1
+ import { BeforeCreateRequestContext, BeforeCreateRequestHook } from "./types.js";
2
+ import { RequestInput } from "../lib/http.js";
3
+
4
+ /**
5
+ * Server Routing Hook
6
+ *
7
+ * Automatically routes operations to the correct API server:
8
+ * - Most operations → Portal Manager API (server_0): /knowledge/portalmgr/v4
9
+ * - Answers & Retrieve → AI Services API (server_1): /core/aiservices/v4
10
+ *
11
+ * Why this hook exists:
12
+ * Speakeasy doesn't support automatic per-operation server routing.
13
+ * Using operation-level servers in the OpenAPI spec breaks the --api-domain flag.
14
+ * This hook provides transparent routing while keeping --api-domain functional.
15
+ */
16
+ export class ServerRoutingHook implements BeforeCreateRequestHook {
17
+ // Operations that need AI Services API
18
+ private readonly aiServicesOperations = new Set([
19
+ "post_/{portalID}/answers",
20
+ "post_/{portalID}/retrieve",
21
+ ]);
22
+
23
+ beforeCreateRequest(
24
+ hookCtx: BeforeCreateRequestContext,
25
+ input: RequestInput
26
+ ): RequestInput {
27
+ const operationID = hookCtx.operationID;
28
+
29
+ // Check if this operation needs AI Services API
30
+ if (this.aiServicesOperations.has(operationID)) {
31
+ console.error(`🔀 ROUTING: Operation "${operationID}" → AI Services API (/core/aiservices/v4)`);
32
+
33
+ // Parse the URL
34
+ const url = new URL(input.url);
35
+
36
+ // Replace Portal Manager path with AI Services path
37
+ if (url.pathname.includes('/knowledge/portalmgr/v4')) {
38
+ url.pathname = url.pathname.replace(
39
+ '/knowledge/portalmgr/v4',
40
+ '/core/aiservices/v4'
41
+ );
42
+
43
+ console.error(`🔀 ROUTING: Rewritten URL: ${url.toString()}`);
44
+
45
+ return {
46
+ ...input,
47
+ url,
48
+ };
49
+ } else {
50
+ console.error(`⚠️ ROUTING: Expected /knowledge/portalmgr/v4 in URL but found: ${url.pathname}`);
51
+ }
52
+ }
53
+
54
+ // All other operations stay on Portal Manager API (default)
55
+ return input;
56
+ }
57
+ }
58
+
@@ -0,0 +1,107 @@
1
+ /*
2
+ * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
3
+ */
4
+
5
+ import { SDKOptions } from "../lib/config.js";
6
+ import { RequestInput } from "../lib/http.js";
7
+ import { RetryConfig } from "../lib/retries.js";
8
+ import { SecurityState } from "../lib/security.js";
9
+
10
+ export type HookContext = {
11
+ baseURL: string | URL;
12
+ operationID: string;
13
+ oAuth2Scopes: string[] | null;
14
+ securitySource?: any | (() => Promise<any>);
15
+ retryConfig: RetryConfig;
16
+ resolvedSecurity: SecurityState | null;
17
+ options: SDKOptions;
18
+ };
19
+
20
+ export type Awaitable<T> = T | Promise<T>;
21
+
22
+ export type BeforeCreateRequestContext = HookContext & {};
23
+ export type BeforeRequestContext = HookContext & {};
24
+ export type AfterSuccessContext = HookContext & {};
25
+ export type AfterErrorContext = HookContext & {};
26
+
27
+ /**
28
+ * SDKInitHook is called when the SDK is initializing. The
29
+ * hook can return a new baseURL and HTTP client to be used by the SDK.
30
+ */
31
+ export interface SDKInitHook {
32
+ sdkInit: (opts: SDKOptions) => SDKOptions;
33
+ }
34
+
35
+ export interface BeforeCreateRequestHook {
36
+ /**
37
+ * A hook that is called before the SDK creates a `Request` object. The hook
38
+ * can modify how a request is constructed since certain modifications, like
39
+ * changing the request URL, cannot be done on a request object directly.
40
+ */
41
+ beforeCreateRequest: (
42
+ hookCtx: BeforeCreateRequestContext,
43
+ input: RequestInput,
44
+ ) => RequestInput;
45
+ }
46
+
47
+ export interface BeforeRequestHook {
48
+ /**
49
+ * A hook that is called before the SDK sends a request. The hook can
50
+ * introduce instrumentation code such as logging, tracing and metrics or
51
+ * replace the request before it is sent or throw an error to stop the
52
+ * request from being sent.
53
+ */
54
+ beforeRequest: (
55
+ hookCtx: BeforeRequestContext,
56
+ request: Request,
57
+ ) => Awaitable<Request>;
58
+ }
59
+
60
+ export interface AfterSuccessHook {
61
+ /**
62
+ * A hook that is called after the SDK receives a response. The hook can
63
+ * introduce instrumentation code such as logging, tracing and metrics or
64
+ * modify the response before it is handled or throw an error to stop the
65
+ * response from being handled.
66
+ */
67
+ afterSuccess: (
68
+ hookCtx: AfterSuccessContext,
69
+ response: Response,
70
+ ) => Awaitable<Response>;
71
+ }
72
+
73
+ export interface AfterErrorHook {
74
+ /**
75
+ * A hook that is called after the SDK encounters an error, or a
76
+ * non-successful response. The hook can introduce instrumentation code such
77
+ * as logging, tracing and metrics or modify the response or error values.
78
+ */
79
+ afterError: (
80
+ hookCtx: AfterErrorContext,
81
+ response: Response | null,
82
+ error: unknown,
83
+ ) => Awaitable<{
84
+ response: Response | null;
85
+ error: unknown;
86
+ }>;
87
+ }
88
+
89
+ export interface Hooks {
90
+ /** Registers a hook to be used by the SDK for initialization event. */
91
+ registerSDKInitHook(hook: SDKInitHook): void;
92
+ /** Registers a hook to be used by the SDK for to modify `Request` construction. */
93
+ registerBeforeCreateRequestHook(hook: BeforeCreateRequestHook): void;
94
+ /** Registers a hook to be used by the SDK for the before request event. */
95
+ registerBeforeRequestHook(hook: BeforeRequestHook): void;
96
+ /** Registers a hook to be used by the SDK for the after success event. */
97
+ registerAfterSuccessHook(hook: AfterSuccessHook): void;
98
+ /** Registers a hook to be used by the SDK for the after error event. */
99
+ registerAfterErrorHook(hook: AfterErrorHook): void;
100
+ }
101
+
102
+ export type Hook =
103
+ | SDKInitHook
104
+ | BeforeCreateRequestHook
105
+ | BeforeRequestHook
106
+ | AfterSuccessHook
107
+ | AfterErrorHook;
@@ -0,0 +1,37 @@
1
+ /*
2
+ * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
3
+ */
4
+
5
+ import * as z from "zod";
6
+
7
+ export function bytesToBase64(u8arr: Uint8Array): string {
8
+ return btoa(String.fromCodePoint(...u8arr));
9
+ }
10
+
11
+ export function bytesFromBase64(encoded: string): Uint8Array {
12
+ return Uint8Array.from(atob(encoded), (c) => c.charCodeAt(0));
13
+ }
14
+
15
+ export function stringToBytes(str: string): Uint8Array {
16
+ return new TextEncoder().encode(str);
17
+ }
18
+
19
+ export function stringFromBytes(u8arr: Uint8Array): string {
20
+ return new TextDecoder().decode(u8arr);
21
+ }
22
+
23
+ export function stringToBase64(str: string): string {
24
+ return bytesToBase64(stringToBytes(str));
25
+ }
26
+
27
+ export function stringFromBase64(b64str: string): string {
28
+ return stringFromBytes(bytesFromBase64(b64str));
29
+ }
30
+
31
+ export const zodOutbound = z
32
+ .instanceof(Uint8Array)
33
+ .or(z.string().transform(stringToBytes));
34
+
35
+ export const zodInbound = z
36
+ .instanceof(Uint8Array)
37
+ .or(z.string().transform(bytesFromBase64));