@digital-science-dsl/dimensions-analytics-mcp 0.5.3

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 (722) hide show
  1. package/CHANGELOG.md +61 -0
  2. package/README.md +152 -0
  3. package/bin/dimensions-analytics-mcp-http.js +2 -0
  4. package/bin/dimensions-analytics-mcp.js +2 -0
  5. package/dist/client/auth/config-loaders.d.ts +22 -0
  6. package/dist/client/auth/config-loaders.d.ts.map +1 -0
  7. package/dist/client/auth/config-loaders.js +68 -0
  8. package/dist/client/auth/config-loaders.js.map +1 -0
  9. package/dist/client/auth/decorators/index.d.ts +7 -0
  10. package/dist/client/auth/decorators/index.d.ts.map +1 -0
  11. package/dist/client/auth/decorators/index.js +6 -0
  12. package/dist/client/auth/decorators/index.js.map +1 -0
  13. package/dist/client/auth/decorators/with-caching.d.ts +81 -0
  14. package/dist/client/auth/decorators/with-caching.d.ts.map +1 -0
  15. package/dist/client/auth/decorators/with-caching.js +168 -0
  16. package/dist/client/auth/decorators/with-caching.js.map +1 -0
  17. package/dist/client/auth/factory.d.ts +13 -0
  18. package/dist/client/auth/factory.d.ts.map +1 -0
  19. package/dist/client/auth/factory.js +29 -0
  20. package/dist/client/auth/factory.js.map +1 -0
  21. package/dist/client/auth/index.d.ts +7 -0
  22. package/dist/client/auth/index.d.ts.map +1 -0
  23. package/dist/client/auth/index.js +6 -0
  24. package/dist/client/auth/index.js.map +1 -0
  25. package/dist/client/auth/jwt-utils.d.ts +17 -0
  26. package/dist/client/auth/jwt-utils.d.ts.map +1 -0
  27. package/dist/client/auth/jwt-utils.js +33 -0
  28. package/dist/client/auth/jwt-utils.js.map +1 -0
  29. package/dist/client/auth/node.d.ts +16 -0
  30. package/dist/client/auth/node.d.ts.map +1 -0
  31. package/dist/client/auth/node.js +15 -0
  32. package/dist/client/auth/node.js.map +1 -0
  33. package/dist/client/auth/providers/index.d.ts +2 -0
  34. package/dist/client/auth/providers/index.d.ts.map +1 -0
  35. package/dist/client/auth/providers/index.js +2 -0
  36. package/dist/client/auth/providers/index.js.map +1 -0
  37. package/dist/client/auth/providers/jwt-auth-provider.d.ts +70 -0
  38. package/dist/client/auth/providers/jwt-auth-provider.d.ts.map +1 -0
  39. package/dist/client/auth/providers/jwt-auth-provider.js +134 -0
  40. package/dist/client/auth/providers/jwt-auth-provider.js.map +1 -0
  41. package/dist/client/auth/schemas.d.ts +19 -0
  42. package/dist/client/auth/schemas.d.ts.map +1 -0
  43. package/dist/client/auth/schemas.js +23 -0
  44. package/dist/client/auth/schemas.js.map +1 -0
  45. package/dist/client/auth/types.d.ts +25 -0
  46. package/dist/client/auth/types.d.ts.map +1 -0
  47. package/dist/client/auth/types.js +9 -0
  48. package/dist/client/auth/types.js.map +1 -0
  49. package/dist/client/command.d.ts +44 -0
  50. package/dist/client/command.d.ts.map +1 -0
  51. package/dist/client/command.js +23 -0
  52. package/dist/client/command.js.map +1 -0
  53. package/dist/client/config/index.d.ts +11 -0
  54. package/dist/client/config/index.d.ts.map +1 -0
  55. package/dist/client/config/index.js +8 -0
  56. package/dist/client/config/index.js.map +1 -0
  57. package/dist/client/config/loader.d.ts +27 -0
  58. package/dist/client/config/loader.d.ts.map +1 -0
  59. package/dist/client/config/loader.js +128 -0
  60. package/dist/client/config/loader.js.map +1 -0
  61. package/dist/client/config/node.d.ts +18 -0
  62. package/dist/client/config/node.d.ts.map +1 -0
  63. package/dist/client/config/node.js +17 -0
  64. package/dist/client/config/node.js.map +1 -0
  65. package/dist/client/config/schemas.d.ts +23 -0
  66. package/dist/client/config/schemas.d.ts.map +1 -0
  67. package/dist/client/config/schemas.js +24 -0
  68. package/dist/client/config/schemas.js.map +1 -0
  69. package/dist/client/config/types.d.ts +37 -0
  70. package/dist/client/config/types.d.ts.map +1 -0
  71. package/dist/client/config/types.js +6 -0
  72. package/dist/client/config/types.js.map +1 -0
  73. package/dist/client/config/unified-loader.d.ts +41 -0
  74. package/dist/client/config/unified-loader.d.ts.map +1 -0
  75. package/dist/client/config/unified-loader.js +86 -0
  76. package/dist/client/config/unified-loader.js.map +1 -0
  77. package/dist/client/config.d.ts +43 -0
  78. package/dist/client/config.d.ts.map +1 -0
  79. package/dist/client/config.js +56 -0
  80. package/dist/client/config.js.map +1 -0
  81. package/dist/client/deployment-config.d.ts +36 -0
  82. package/dist/client/deployment-config.d.ts.map +1 -0
  83. package/dist/client/deployment-config.js +79 -0
  84. package/dist/client/deployment-config.js.map +1 -0
  85. package/dist/client/errors.d.ts +180 -0
  86. package/dist/client/errors.d.ts.map +1 -0
  87. package/dist/client/errors.js +253 -0
  88. package/dist/client/errors.js.map +1 -0
  89. package/dist/client/http-client.d.ts +215 -0
  90. package/dist/client/http-client.d.ts.map +1 -0
  91. package/dist/client/http-client.js +419 -0
  92. package/dist/client/http-client.js.map +1 -0
  93. package/dist/client/index.d.ts +28 -0
  94. package/dist/client/index.d.ts.map +1 -0
  95. package/dist/client/index.js +18 -0
  96. package/dist/client/index.js.map +1 -0
  97. package/dist/client/internal-dsl-client.d.ts +30 -0
  98. package/dist/client/internal-dsl-client.d.ts.map +1 -0
  99. package/dist/client/internal-dsl-client.js +101 -0
  100. package/dist/client/internal-dsl-client.js.map +1 -0
  101. package/dist/client/rate-limiter.d.ts +79 -0
  102. package/dist/client/rate-limiter.d.ts.map +1 -0
  103. package/dist/client/rate-limiter.js +118 -0
  104. package/dist/client/rate-limiter.js.map +1 -0
  105. package/dist/client/resolve-api-key-user.d.ts +24 -0
  106. package/dist/client/resolve-api-key-user.d.ts.map +1 -0
  107. package/dist/client/resolve-api-key-user.js +80 -0
  108. package/dist/client/resolve-api-key-user.js.map +1 -0
  109. package/dist/client/types.d.ts +44 -0
  110. package/dist/client/types.d.ts.map +1 -0
  111. package/dist/client/types.js +10 -0
  112. package/dist/client/types.js.map +1 -0
  113. package/dist/dsl/client.d.ts +330 -0
  114. package/dist/dsl/client.d.ts.map +1 -0
  115. package/dist/dsl/client.js +433 -0
  116. package/dist/dsl/client.js.map +1 -0
  117. package/dist/dsl/commands/apply-filters.d.ts +15 -0
  118. package/dist/dsl/commands/apply-filters.d.ts.map +1 -0
  119. package/dist/dsl/commands/apply-filters.js +29 -0
  120. package/dist/dsl/commands/apply-filters.js.map +1 -0
  121. package/dist/dsl/commands/facet/index.d.ts +6 -0
  122. package/dist/dsl/commands/facet/index.d.ts.map +1 -0
  123. package/dist/dsl/commands/facet/index.js +6 -0
  124. package/dist/dsl/commands/facet/index.js.map +1 -0
  125. package/dist/dsl/commands/facet/schemas.d.ts +71 -0
  126. package/dist/dsl/commands/facet/schemas.d.ts.map +1 -0
  127. package/dist/dsl/commands/facet/schemas.js +84 -0
  128. package/dist/dsl/commands/facet/schemas.js.map +1 -0
  129. package/dist/dsl/commands/functions/ClassifyCommand.d.ts +96 -0
  130. package/dist/dsl/commands/functions/ClassifyCommand.d.ts.map +1 -0
  131. package/dist/dsl/commands/functions/ClassifyCommand.js +95 -0
  132. package/dist/dsl/commands/functions/ClassifyCommand.js.map +1 -0
  133. package/dist/dsl/commands/functions/ExtractAffiliationsCommand.d.ts +86 -0
  134. package/dist/dsl/commands/functions/ExtractAffiliationsCommand.d.ts.map +1 -0
  135. package/dist/dsl/commands/functions/ExtractAffiliationsCommand.js +131 -0
  136. package/dist/dsl/commands/functions/ExtractAffiliationsCommand.js.map +1 -0
  137. package/dist/dsl/commands/functions/ExtractConceptsCommand.d.ts +73 -0
  138. package/dist/dsl/commands/functions/ExtractConceptsCommand.d.ts.map +1 -0
  139. package/dist/dsl/commands/functions/ExtractConceptsCommand.js +110 -0
  140. package/dist/dsl/commands/functions/ExtractConceptsCommand.js.map +1 -0
  141. package/dist/dsl/commands/functions/ExtractGrantsCommand.d.ts +66 -0
  142. package/dist/dsl/commands/functions/ExtractGrantsCommand.d.ts.map +1 -0
  143. package/dist/dsl/commands/functions/ExtractGrantsCommand.js +87 -0
  144. package/dist/dsl/commands/functions/ExtractGrantsCommand.js.map +1 -0
  145. package/dist/dsl/commands/functions/index.d.ts +10 -0
  146. package/dist/dsl/commands/functions/index.d.ts.map +1 -0
  147. package/dist/dsl/commands/functions/index.js +10 -0
  148. package/dist/dsl/commands/functions/index.js.map +1 -0
  149. package/dist/dsl/commands/index.d.ts +8 -0
  150. package/dist/dsl/commands/index.d.ts.map +1 -0
  151. package/dist/dsl/commands/index.js +7 -0
  152. package/dist/dsl/commands/index.js.map +1 -0
  153. package/dist/dsl/commands/validate-input.d.ts +18 -0
  154. package/dist/dsl/commands/validate-input.d.ts.map +1 -0
  155. package/dist/dsl/commands/validate-input.js +27 -0
  156. package/dist/dsl/commands/validate-input.js.map +1 -0
  157. package/dist/dsl/create-client.d.ts +32 -0
  158. package/dist/dsl/create-client.d.ts.map +1 -0
  159. package/dist/dsl/create-client.js +58 -0
  160. package/dist/dsl/create-client.js.map +1 -0
  161. package/dist/dsl/fluent-query-builder.d.ts +439 -0
  162. package/dist/dsl/fluent-query-builder.d.ts.map +1 -0
  163. package/dist/dsl/fluent-query-builder.js +534 -0
  164. package/dist/dsl/fluent-query-builder.js.map +1 -0
  165. package/dist/dsl/index.d.ts +32 -0
  166. package/dist/dsl/index.d.ts.map +1 -0
  167. package/dist/dsl/index.js +31 -0
  168. package/dist/dsl/index.js.map +1 -0
  169. package/dist/dsl/pagination.d.ts +82 -0
  170. package/dist/dsl/pagination.d.ts.map +1 -0
  171. package/dist/dsl/pagination.js +135 -0
  172. package/dist/dsl/pagination.js.map +1 -0
  173. package/dist/dsl/query-builder.d.ts +456 -0
  174. package/dist/dsl/query-builder.d.ts.map +1 -0
  175. package/dist/dsl/query-builder.js +994 -0
  176. package/dist/dsl/query-builder.js.map +1 -0
  177. package/dist/dsl/response-parser.d.ts +111 -0
  178. package/dist/dsl/response-parser.d.ts.map +1 -0
  179. package/dist/dsl/response-parser.js +210 -0
  180. package/dist/dsl/response-parser.js.map +1 -0
  181. package/dist/dsl/schema/cache.d.ts +52 -0
  182. package/dist/dsl/schema/cache.d.ts.map +1 -0
  183. package/dist/dsl/schema/cache.js +97 -0
  184. package/dist/dsl/schema/cache.js.map +1 -0
  185. package/dist/dsl/schema/extract.d.ts +18 -0
  186. package/dist/dsl/schema/extract.d.ts.map +1 -0
  187. package/dist/dsl/schema/extract.js +41 -0
  188. package/dist/dsl/schema/extract.js.map +1 -0
  189. package/dist/dsl/schema/index.d.ts +13 -0
  190. package/dist/dsl/schema/index.d.ts.map +1 -0
  191. package/dist/dsl/schema/index.js +12 -0
  192. package/dist/dsl/schema/index.js.map +1 -0
  193. package/dist/dsl/schema/load.d.ts +41 -0
  194. package/dist/dsl/schema/load.d.ts.map +1 -0
  195. package/dist/dsl/schema/load.js +119 -0
  196. package/dist/dsl/schema/load.js.map +1 -0
  197. package/dist/dsl/schema/store.d.ts +137 -0
  198. package/dist/dsl/schema/store.d.ts.map +1 -0
  199. package/dist/dsl/schema/store.js +204 -0
  200. package/dist/dsl/schema/store.js.map +1 -0
  201. package/dist/dsl/schema/structured-entities.d.ts +21 -0
  202. package/dist/dsl/schema/structured-entities.d.ts.map +1 -0
  203. package/dist/dsl/schema/structured-entities.js +39 -0
  204. package/dist/dsl/schema/structured-entities.js.map +1 -0
  205. package/dist/dsl/schema/summary.d.ts +51 -0
  206. package/dist/dsl/schema/summary.d.ts.map +1 -0
  207. package/dist/dsl/schema/summary.js +61 -0
  208. package/dist/dsl/schema/summary.js.map +1 -0
  209. package/dist/dsl/schema/types.d.ts +36 -0
  210. package/dist/dsl/schema/types.d.ts.map +1 -0
  211. package/dist/dsl/schema/types.js +6 -0
  212. package/dist/dsl/schema/types.js.map +1 -0
  213. package/dist/dsl/schema/validation.d.ts +21 -0
  214. package/dist/dsl/schema/validation.d.ts.map +1 -0
  215. package/dist/dsl/schema/validation.js +44 -0
  216. package/dist/dsl/schema/validation.js.map +1 -0
  217. package/dist/dsl/types/buckets.d.ts +18 -0
  218. package/dist/dsl/types/buckets.d.ts.map +1 -0
  219. package/dist/dsl/types/buckets.js +6 -0
  220. package/dist/dsl/types/buckets.js.map +1 -0
  221. package/dist/dsl/types/common.d.ts +91 -0
  222. package/dist/dsl/types/common.d.ts.map +1 -0
  223. package/dist/dsl/types/common.js +6 -0
  224. package/dist/dsl/types/common.js.map +1 -0
  225. package/dist/dsl/types/entities.d.ts +35 -0
  226. package/dist/dsl/types/entities.d.ts.map +1 -0
  227. package/dist/dsl/types/entities.js +11 -0
  228. package/dist/dsl/types/entities.js.map +1 -0
  229. package/dist/dsl/types/index.d.ts +12 -0
  230. package/dist/dsl/types/index.d.ts.map +1 -0
  231. package/dist/dsl/types/index.js +7 -0
  232. package/dist/dsl/types/index.js.map +1 -0
  233. package/dist/dsl/types/return-clauses.d.ts +107 -0
  234. package/dist/dsl/types/return-clauses.d.ts.map +1 -0
  235. package/dist/dsl/types/return-clauses.js +22 -0
  236. package/dist/dsl/types/return-clauses.js.map +1 -0
  237. package/dist/dsl/types/special-functions.d.ts +175 -0
  238. package/dist/dsl/types/special-functions.d.ts.map +1 -0
  239. package/dist/dsl/types/special-functions.js +25 -0
  240. package/dist/dsl/types/special-functions.js.map +1 -0
  241. package/dist/dsl/types/vocabulary.d.ts +21 -0
  242. package/dist/dsl/types/vocabulary.d.ts.map +1 -0
  243. package/dist/dsl/types/vocabulary.js +44 -0
  244. package/dist/dsl/types/vocabulary.js.map +1 -0
  245. package/dist/dsl/usage-policy.d.ts +87 -0
  246. package/dist/dsl/usage-policy.d.ts.map +1 -0
  247. package/dist/dsl/usage-policy.js +133 -0
  248. package/dist/dsl/usage-policy.js.map +1 -0
  249. package/dist/dsl/utils/escape.d.ts +24 -0
  250. package/dist/dsl/utils/escape.d.ts.map +1 -0
  251. package/dist/dsl/utils/escape.js +124 -0
  252. package/dist/dsl/utils/escape.js.map +1 -0
  253. package/dist/dsl/utils/sanitize.d.ts +13 -0
  254. package/dist/dsl/utils/sanitize.d.ts.map +1 -0
  255. package/dist/dsl/utils/sanitize.js +19 -0
  256. package/dist/dsl/utils/sanitize.js.map +1 -0
  257. package/dist/dsl/utils/string-utils.d.ts +35 -0
  258. package/dist/dsl/utils/string-utils.d.ts.map +1 -0
  259. package/dist/dsl/utils/string-utils.js +145 -0
  260. package/dist/dsl/utils/string-utils.js.map +1 -0
  261. package/dist/dsl/utils/validate-field-name.d.ts +11 -0
  262. package/dist/dsl/utils/validate-field-name.d.ts.map +1 -0
  263. package/dist/dsl/utils/validate-field-name.js +18 -0
  264. package/dist/dsl/utils/validate-field-name.js.map +1 -0
  265. package/dist/examples/dsl-examples.d.ts +11 -0
  266. package/dist/examples/dsl-examples.d.ts.map +1 -0
  267. package/dist/examples/dsl-examples.js +49 -0
  268. package/dist/examples/dsl-examples.js.map +1 -0
  269. package/dist/examples/usage-scenarios.d.ts +22 -0
  270. package/dist/examples/usage-scenarios.d.ts.map +1 -0
  271. package/dist/examples/usage-scenarios.js +173 -0
  272. package/dist/examples/usage-scenarios.js.map +1 -0
  273. package/dist/funder-org-names.d.ts +12 -0
  274. package/dist/funder-org-names.d.ts.map +1 -0
  275. package/dist/funder-org-names.js +30 -0
  276. package/dist/funder-org-names.js.map +1 -0
  277. package/dist/http-main.d.ts +7 -0
  278. package/dist/http-main.d.ts.map +1 -0
  279. package/dist/http-main.js +36 -0
  280. package/dist/http-main.js.map +1 -0
  281. package/dist/http.d.ts +29 -0
  282. package/dist/http.d.ts.map +1 -0
  283. package/dist/http.js +173 -0
  284. package/dist/http.js.map +1 -0
  285. package/dist/index.d.ts +9 -0
  286. package/dist/index.d.ts.map +1 -0
  287. package/dist/index.js +7 -0
  288. package/dist/index.js.map +1 -0
  289. package/dist/kwq/build-query.d.ts +26 -0
  290. package/dist/kwq/build-query.d.ts.map +1 -0
  291. package/dist/kwq/build-query.js +37 -0
  292. package/dist/kwq/build-query.js.map +1 -0
  293. package/dist/kwq/concept-groups.d.ts +49 -0
  294. package/dist/kwq/concept-groups.d.ts.map +1 -0
  295. package/dist/kwq/concept-groups.js +55 -0
  296. package/dist/kwq/concept-groups.js.map +1 -0
  297. package/dist/kwq/dsl-assembler.d.ts +28 -0
  298. package/dist/kwq/dsl-assembler.d.ts.map +1 -0
  299. package/dist/kwq/dsl-assembler.js +124 -0
  300. package/dist/kwq/dsl-assembler.js.map +1 -0
  301. package/dist/kwq/ensemble.d.ts +38 -0
  302. package/dist/kwq/ensemble.d.ts.map +1 -0
  303. package/dist/kwq/ensemble.js +107 -0
  304. package/dist/kwq/ensemble.js.map +1 -0
  305. package/dist/kwq/index.d.ts +16 -0
  306. package/dist/kwq/index.d.ts.map +1 -0
  307. package/dist/kwq/index.js +14 -0
  308. package/dist/kwq/index.js.map +1 -0
  309. package/dist/kwq/types.d.ts +120 -0
  310. package/dist/kwq/types.d.ts.map +1 -0
  311. package/dist/kwq/types.js +11 -0
  312. package/dist/kwq/types.js.map +1 -0
  313. package/dist/lambda.d.ts +10 -0
  314. package/dist/lambda.d.ts.map +1 -0
  315. package/dist/lambda.js +4 -0
  316. package/dist/lambda.js.map +1 -0
  317. package/dist/main.d.ts +8 -0
  318. package/dist/main.d.ts.map +1 -0
  319. package/dist/main.js +33 -0
  320. package/dist/main.js.map +1 -0
  321. package/dist/mcp/batch-fetch.d.ts +89 -0
  322. package/dist/mcp/batch-fetch.d.ts.map +1 -0
  323. package/dist/mcp/batch-fetch.js +178 -0
  324. package/dist/mcp/batch-fetch.js.map +1 -0
  325. package/dist/mcp/examples/dsl-examples.d.ts +21 -0
  326. package/dist/mcp/examples/dsl-examples.d.ts.map +1 -0
  327. package/dist/mcp/examples/dsl-examples.js +61 -0
  328. package/dist/mcp/examples/dsl-examples.js.map +1 -0
  329. package/dist/mcp/examples/usage-scenarios.d.ts +20 -0
  330. package/dist/mcp/examples/usage-scenarios.d.ts.map +1 -0
  331. package/dist/mcp/examples/usage-scenarios.js +169 -0
  332. package/dist/mcp/examples/usage-scenarios.js.map +1 -0
  333. package/dist/mcp/export-format.d.ts +43 -0
  334. package/dist/mcp/export-format.d.ts.map +1 -0
  335. package/dist/mcp/export-format.js +92 -0
  336. package/dist/mcp/export-format.js.map +1 -0
  337. package/dist/mcp/funder-org-names.d.ts +12 -0
  338. package/dist/mcp/funder-org-names.d.ts.map +1 -0
  339. package/dist/mcp/funder-org-names.js +30 -0
  340. package/dist/mcp/funder-org-names.js.map +1 -0
  341. package/dist/mcp/http-server.d.ts +20 -0
  342. package/dist/mcp/http-server.d.ts.map +1 -0
  343. package/dist/mcp/http-server.js +118 -0
  344. package/dist/mcp/http-server.js.map +1 -0
  345. package/dist/mcp/middleware/field-aliases.d.ts +97 -0
  346. package/dist/mcp/middleware/field-aliases.d.ts.map +1 -0
  347. package/dist/mcp/middleware/field-aliases.js +208 -0
  348. package/dist/mcp/middleware/field-aliases.js.map +1 -0
  349. package/dist/mcp/resources/schema.d.ts +13 -0
  350. package/dist/mcp/resources/schema.d.ts.map +1 -0
  351. package/dist/mcp/resources/schema.js +262 -0
  352. package/dist/mcp/resources/schema.js.map +1 -0
  353. package/dist/mcp/schema/context.d.ts +10 -0
  354. package/dist/mcp/schema/context.d.ts.map +1 -0
  355. package/dist/mcp/schema/context.js +6 -0
  356. package/dist/mcp/schema/context.js.map +1 -0
  357. package/dist/mcp/schema/index.d.ts +8 -0
  358. package/dist/mcp/schema/index.d.ts.map +1 -0
  359. package/dist/mcp/schema/index.js +6 -0
  360. package/dist/mcp/schema/index.js.map +1 -0
  361. package/dist/mcp/server.d.ts +56 -0
  362. package/dist/mcp/server.d.ts.map +1 -0
  363. package/dist/mcp/server.js +168 -0
  364. package/dist/mcp/server.js.map +1 -0
  365. package/dist/mcp/shared-schema.d.ts +13 -0
  366. package/dist/mcp/shared-schema.d.ts.map +1 -0
  367. package/dist/mcp/shared-schema.js +28 -0
  368. package/dist/mcp/shared-schema.js.map +1 -0
  369. package/dist/mcp/tools/analytics-filters.d.ts +18 -0
  370. package/dist/mcp/tools/analytics-filters.d.ts.map +1 -0
  371. package/dist/mcp/tools/analytics-filters.js +35 -0
  372. package/dist/mcp/tools/analytics-filters.js.map +1 -0
  373. package/dist/mcp/tools/analytics.d.ts +16 -0
  374. package/dist/mcp/tools/analytics.d.ts.map +1 -0
  375. package/dist/mcp/tools/analytics.js +381 -0
  376. package/dist/mcp/tools/analytics.js.map +1 -0
  377. package/dist/mcp/tools/concept-profile.d.ts +14 -0
  378. package/dist/mcp/tools/concept-profile.d.ts.map +1 -0
  379. package/dist/mcp/tools/concept-profile.js +130 -0
  380. package/dist/mcp/tools/concept-profile.js.map +1 -0
  381. package/dist/mcp/tools/dataset-profile.d.ts +15 -0
  382. package/dist/mcp/tools/dataset-profile.d.ts.map +1 -0
  383. package/dist/mcp/tools/dataset-profile.js +194 -0
  384. package/dist/mcp/tools/dataset-profile.js.map +1 -0
  385. package/dist/mcp/tools/fetch-search-pages.d.ts +15 -0
  386. package/dist/mcp/tools/fetch-search-pages.d.ts.map +1 -0
  387. package/dist/mcp/tools/fetch-search-pages.js +237 -0
  388. package/dist/mcp/tools/fetch-search-pages.js.map +1 -0
  389. package/dist/mcp/tools/functions.d.ts +14 -0
  390. package/dist/mcp/tools/functions.d.ts.map +1 -0
  391. package/dist/mcp/tools/functions.js +87 -0
  392. package/dist/mcp/tools/functions.js.map +1 -0
  393. package/dist/mcp/tools/impact-chain.d.ts +15 -0
  394. package/dist/mcp/tools/impact-chain.d.ts.map +1 -0
  395. package/dist/mcp/tools/impact-chain.js +96 -0
  396. package/dist/mcp/tools/impact-chain.js.map +1 -0
  397. package/dist/mcp/tools/kwq.d.ts +19 -0
  398. package/dist/mcp/tools/kwq.d.ts.map +1 -0
  399. package/dist/mcp/tools/kwq.js +156 -0
  400. package/dist/mcp/tools/kwq.js.map +1 -0
  401. package/dist/mcp/tools/lookup.d.ts +14 -0
  402. package/dist/mcp/tools/lookup.d.ts.map +1 -0
  403. package/dist/mcp/tools/lookup.js +146 -0
  404. package/dist/mcp/tools/lookup.js.map +1 -0
  405. package/dist/mcp/tools/policy-profile.d.ts +15 -0
  406. package/dist/mcp/tools/policy-profile.d.ts.map +1 -0
  407. package/dist/mcp/tools/policy-profile.js +174 -0
  408. package/dist/mcp/tools/policy-profile.js.map +1 -0
  409. package/dist/mcp/tools/profile.d.ts +14 -0
  410. package/dist/mcp/tools/profile.d.ts.map +1 -0
  411. package/dist/mcp/tools/profile.js +349 -0
  412. package/dist/mcp/tools/profile.js.map +1 -0
  413. package/dist/mcp/tools/query.d.ts +16 -0
  414. package/dist/mcp/tools/query.d.ts.map +1 -0
  415. package/dist/mcp/tools/query.js +75 -0
  416. package/dist/mcp/tools/query.js.map +1 -0
  417. package/dist/mcp/tools/schema.d.ts +23 -0
  418. package/dist/mcp/tools/schema.d.ts.map +1 -0
  419. package/dist/mcp/tools/schema.js +124 -0
  420. package/dist/mcp/tools/schema.js.map +1 -0
  421. package/dist/mcp/tools/search-entity-metadata.d.ts +18 -0
  422. package/dist/mcp/tools/search-entity-metadata.d.ts.map +1 -0
  423. package/dist/mcp/tools/search-entity-metadata.js +221 -0
  424. package/dist/mcp/tools/search-entity-metadata.js.map +1 -0
  425. package/dist/mcp/tools/search-input.d.ts +58 -0
  426. package/dist/mcp/tools/search-input.d.ts.map +1 -0
  427. package/dist/mcp/tools/search-input.js +76 -0
  428. package/dist/mcp/tools/search-input.js.map +1 -0
  429. package/dist/mcp/tools/search.d.ts +24 -0
  430. package/dist/mcp/tools/search.d.ts.map +1 -0
  431. package/dist/mcp/tools/search.js +115 -0
  432. package/dist/mcp/tools/search.js.map +1 -0
  433. package/dist/mcp/utils.d.ts +82 -0
  434. package/dist/mcp/utils.d.ts.map +1 -0
  435. package/dist/mcp/utils.js +126 -0
  436. package/dist/mcp/utils.js.map +1 -0
  437. package/dist/middleware/field-aliases.d.ts +97 -0
  438. package/dist/middleware/field-aliases.d.ts.map +1 -0
  439. package/dist/middleware/field-aliases.js +208 -0
  440. package/dist/middleware/field-aliases.js.map +1 -0
  441. package/dist/resources/schema.d.ts +13 -0
  442. package/dist/resources/schema.d.ts.map +1 -0
  443. package/dist/resources/schema.js +204 -0
  444. package/dist/resources/schema.js.map +1 -0
  445. package/dist/schema/context.d.ts +10 -0
  446. package/dist/schema/context.d.ts.map +1 -0
  447. package/dist/schema/context.js +6 -0
  448. package/dist/schema/context.js.map +1 -0
  449. package/dist/schema/index.d.ts +9 -0
  450. package/dist/schema/index.d.ts.map +1 -0
  451. package/dist/schema/index.js +6 -0
  452. package/dist/schema/index.js.map +1 -0
  453. package/dist/schema/load.d.ts +43 -0
  454. package/dist/schema/load.d.ts.map +1 -0
  455. package/dist/schema/load.js +139 -0
  456. package/dist/schema/load.js.map +1 -0
  457. package/dist/schema/store.d.ts +112 -0
  458. package/dist/schema/store.d.ts.map +1 -0
  459. package/dist/schema/store.js +173 -0
  460. package/dist/schema/store.js.map +1 -0
  461. package/dist/schema/structured-entities.d.ts +21 -0
  462. package/dist/schema/structured-entities.d.ts.map +1 -0
  463. package/dist/schema/structured-entities.js +39 -0
  464. package/dist/schema/structured-entities.js.map +1 -0
  465. package/dist/schema/types.d.ts +36 -0
  466. package/dist/schema/types.d.ts.map +1 -0
  467. package/dist/schema/types.js +6 -0
  468. package/dist/schema/types.js.map +1 -0
  469. package/dist/server.d.ts +57 -0
  470. package/dist/server.d.ts.map +1 -0
  471. package/dist/server.js +144 -0
  472. package/dist/server.js.map +1 -0
  473. package/dist/telemetry.d.ts +172 -0
  474. package/dist/telemetry.d.ts.map +1 -0
  475. package/dist/telemetry.js +233 -0
  476. package/dist/telemetry.js.map +1 -0
  477. package/dist/tools/analytics-filters.d.ts +18 -0
  478. package/dist/tools/analytics-filters.d.ts.map +1 -0
  479. package/dist/tools/analytics-filters.js +35 -0
  480. package/dist/tools/analytics-filters.js.map +1 -0
  481. package/dist/tools/analytics.d.ts +16 -0
  482. package/dist/tools/analytics.d.ts.map +1 -0
  483. package/dist/tools/analytics.js +381 -0
  484. package/dist/tools/analytics.js.map +1 -0
  485. package/dist/tools/concept-profile.d.ts +14 -0
  486. package/dist/tools/concept-profile.d.ts.map +1 -0
  487. package/dist/tools/concept-profile.js +130 -0
  488. package/dist/tools/concept-profile.js.map +1 -0
  489. package/dist/tools/dataset-profile.d.ts +15 -0
  490. package/dist/tools/dataset-profile.d.ts.map +1 -0
  491. package/dist/tools/dataset-profile.js +194 -0
  492. package/dist/tools/dataset-profile.js.map +1 -0
  493. package/dist/tools/functions.d.ts +14 -0
  494. package/dist/tools/functions.d.ts.map +1 -0
  495. package/dist/tools/functions.js +294 -0
  496. package/dist/tools/functions.js.map +1 -0
  497. package/dist/tools/impact-chain.d.ts +15 -0
  498. package/dist/tools/impact-chain.d.ts.map +1 -0
  499. package/dist/tools/impact-chain.js +96 -0
  500. package/dist/tools/impact-chain.js.map +1 -0
  501. package/dist/tools/kwq.d.ts +19 -0
  502. package/dist/tools/kwq.d.ts.map +1 -0
  503. package/dist/tools/kwq.js +156 -0
  504. package/dist/tools/kwq.js.map +1 -0
  505. package/dist/tools/lookup.d.ts +14 -0
  506. package/dist/tools/lookup.d.ts.map +1 -0
  507. package/dist/tools/lookup.js +213 -0
  508. package/dist/tools/lookup.js.map +1 -0
  509. package/dist/tools/policy-profile.d.ts +15 -0
  510. package/dist/tools/policy-profile.d.ts.map +1 -0
  511. package/dist/tools/policy-profile.js +174 -0
  512. package/dist/tools/policy-profile.js.map +1 -0
  513. package/dist/tools/profile.d.ts +14 -0
  514. package/dist/tools/profile.d.ts.map +1 -0
  515. package/dist/tools/profile.js +349 -0
  516. package/dist/tools/profile.js.map +1 -0
  517. package/dist/tools/query.d.ts +16 -0
  518. package/dist/tools/query.d.ts.map +1 -0
  519. package/dist/tools/query.js +53 -0
  520. package/dist/tools/query.js.map +1 -0
  521. package/dist/tools/schema.d.ts +23 -0
  522. package/dist/tools/schema.d.ts.map +1 -0
  523. package/dist/tools/schema.js +124 -0
  524. package/dist/tools/schema.js.map +1 -0
  525. package/dist/tools/search-entity-metadata.d.ts +18 -0
  526. package/dist/tools/search-entity-metadata.d.ts.map +1 -0
  527. package/dist/tools/search-entity-metadata.js +221 -0
  528. package/dist/tools/search-entity-metadata.js.map +1 -0
  529. package/dist/tools/search.d.ts +23 -0
  530. package/dist/tools/search.d.ts.map +1 -0
  531. package/dist/tools/search.js +110 -0
  532. package/dist/tools/search.js.map +1 -0
  533. package/dist/tools/solr-fields.d.ts +39 -0
  534. package/dist/tools/solr-fields.d.ts.map +1 -0
  535. package/dist/tools/solr-fields.js +40 -0
  536. package/dist/tools/solr-fields.js.map +1 -0
  537. package/dist/utils.d.ts +70 -0
  538. package/dist/utils.d.ts.map +1 -0
  539. package/dist/utils.js +104 -0
  540. package/dist/utils.js.map +1 -0
  541. package/package.json +41 -0
  542. package/src/client/auth/config-loaders.ts +81 -0
  543. package/src/client/auth/decorators/index.ts +7 -0
  544. package/src/client/auth/decorators/with-caching.ts +237 -0
  545. package/src/client/auth/factory.ts +34 -0
  546. package/src/client/auth/index.ts +6 -0
  547. package/src/client/auth/jwt-utils.ts +36 -0
  548. package/src/client/auth/node.ts +16 -0
  549. package/src/client/auth/providers/index.ts +1 -0
  550. package/src/client/auth/providers/jwt-auth-provider.ts +153 -0
  551. package/src/client/auth/schemas.ts +25 -0
  552. package/src/client/auth/types.ts +30 -0
  553. package/src/client/command.ts +54 -0
  554. package/src/client/config/index.ts +15 -0
  555. package/src/client/config/loader.ts +155 -0
  556. package/src/client/config/node.ts +22 -0
  557. package/src/client/config/schemas.ts +28 -0
  558. package/src/client/config/types.ts +39 -0
  559. package/src/client/config/unified-loader.ts +118 -0
  560. package/src/client/config.ts +69 -0
  561. package/src/client/deployment-config.ts +98 -0
  562. package/src/client/errors.ts +295 -0
  563. package/src/client/http-client.ts +577 -0
  564. package/src/client/index.ts +68 -0
  565. package/src/client/internal-dsl-client.ts +128 -0
  566. package/src/client/rate-limiter.ts +139 -0
  567. package/src/client/resolve-api-key-user.ts +99 -0
  568. package/src/client/types.ts +44 -0
  569. package/src/dsl/client.ts +538 -0
  570. package/src/dsl/commands/apply-filters.ts +35 -0
  571. package/src/dsl/commands/facet/index.ts +12 -0
  572. package/src/dsl/commands/facet/schemas.ts +101 -0
  573. package/src/dsl/commands/functions/ClassifyCommand.ts +129 -0
  574. package/src/dsl/commands/functions/ExtractAffiliationsCommand.ts +163 -0
  575. package/src/dsl/commands/functions/ExtractConceptsCommand.ts +141 -0
  576. package/src/dsl/commands/functions/ExtractGrantsCommand.ts +112 -0
  577. package/src/dsl/commands/functions/index.ts +31 -0
  578. package/src/dsl/commands/index.ts +29 -0
  579. package/src/dsl/commands/validate-input.ts +29 -0
  580. package/src/dsl/create-client.ts +80 -0
  581. package/src/dsl/fluent-query-builder.ts +684 -0
  582. package/src/dsl/index.ts +206 -0
  583. package/src/dsl/pagination.ts +202 -0
  584. package/src/dsl/query-builder.ts +1120 -0
  585. package/src/dsl/response-parser.ts +299 -0
  586. package/src/dsl/schema/cache.ts +124 -0
  587. package/src/dsl/schema/extract.ts +44 -0
  588. package/src/dsl/schema/index.ts +50 -0
  589. package/src/dsl/schema/load.ts +160 -0
  590. package/src/dsl/schema/store.ts +253 -0
  591. package/src/dsl/schema/structured-entities.ts +44 -0
  592. package/src/dsl/schema/summary.ts +94 -0
  593. package/src/dsl/schema/types.ts +40 -0
  594. package/src/dsl/schema/validation.ts +56 -0
  595. package/src/dsl/types/buckets.ts +22 -0
  596. package/src/dsl/types/common.ts +99 -0
  597. package/src/dsl/types/entities.ts +43 -0
  598. package/src/dsl/types/index.ts +63 -0
  599. package/src/dsl/types/return-clauses.ts +147 -0
  600. package/src/dsl/types/special-functions.ts +220 -0
  601. package/src/dsl/types/vocabulary.ts +82 -0
  602. package/src/dsl/usage-policy.ts +219 -0
  603. package/src/dsl/utils/escape.ts +123 -0
  604. package/src/dsl/utils/sanitize.ts +21 -0
  605. package/src/dsl/utils/string-utils.ts +147 -0
  606. package/src/dsl/utils/validate-field-name.ts +19 -0
  607. package/src/http-main.ts +41 -0
  608. package/src/index.ts +14 -0
  609. package/src/main.ts +40 -0
  610. package/src/mcp/batch-fetch.ts +255 -0
  611. package/src/mcp/examples/dsl-examples.ts +66 -0
  612. package/src/mcp/examples/usage-scenarios.ts +185 -0
  613. package/src/mcp/export-format.ts +113 -0
  614. package/src/mcp/funder-org-names.ts +30 -0
  615. package/src/mcp/http-server.ts +148 -0
  616. package/src/mcp/middleware/field-aliases.ts +274 -0
  617. package/src/mcp/resources/schema.ts +364 -0
  618. package/src/mcp/schema/context.ts +11 -0
  619. package/src/mcp/schema/index.ts +38 -0
  620. package/src/mcp/server.ts +247 -0
  621. package/src/mcp/shared-schema.ts +34 -0
  622. package/src/mcp/tools/analytics-filters.ts +46 -0
  623. package/src/mcp/tools/analytics.ts +453 -0
  624. package/src/mcp/tools/fetch-search-pages.ts +329 -0
  625. package/src/mcp/tools/functions.ts +105 -0
  626. package/src/mcp/tools/lookup.ts +182 -0
  627. package/src/mcp/tools/query.ts +91 -0
  628. package/src/mcp/tools/schema.ts +147 -0
  629. package/src/mcp/tools/search-entity-metadata.ts +253 -0
  630. package/src/mcp/tools/search-input.ts +87 -0
  631. package/src/mcp/tools/search.ts +168 -0
  632. package/src/mcp/utils.ts +199 -0
  633. package/test/client/auth/config-loaders.test.ts +92 -0
  634. package/test/client/auth/decorators/with-caching.test.ts +482 -0
  635. package/test/client/auth/factory.test.ts +68 -0
  636. package/test/client/auth/providers/jwt-auth-provider.test.ts +398 -0
  637. package/test/client/auth/types.test.ts +18 -0
  638. package/test/client/command.test.ts +163 -0
  639. package/test/client/config/loader.test.ts +377 -0
  640. package/test/client/config/unified-loader.test.ts +136 -0
  641. package/test/client/deployment-config.test.ts +69 -0
  642. package/test/client/errors/index.test.ts +408 -0
  643. package/test/client/helpers/mock-fetch.ts +42 -0
  644. package/test/client/http-client.test.ts +1148 -0
  645. package/test/client/integration/auth-providers.integration.test.ts +186 -0
  646. package/test/client/internal-dsl-client.test.ts +76 -0
  647. package/test/client/rate-limiter.test.ts +204 -0
  648. package/test/client/resolve-api-key-user.test.ts +87 -0
  649. package/test/dsl/client.special-functions.test.ts +387 -0
  650. package/test/dsl/client.test.ts +457 -0
  651. package/test/dsl/commands/apply-filters.test.ts +147 -0
  652. package/test/dsl/commands/functions/ClassifyCommand.test.ts +170 -0
  653. package/test/dsl/commands/functions/ExtractAffiliationsCommand.test.ts +306 -0
  654. package/test/dsl/commands/functions/ExtractConceptsCommand.test.ts +136 -0
  655. package/test/dsl/commands/functions/ExtractGrantsCommand.test.ts +202 -0
  656. package/test/dsl/commands/search/filters.test.ts +42 -0
  657. package/test/dsl/fluent-query-builder.test.ts +865 -0
  658. package/test/dsl/integration/client.integration.test.ts +294 -0
  659. package/test/dsl/integration/facet-api.integration.test.ts +276 -0
  660. package/test/dsl/integration/field-existence.integration.test.ts +148 -0
  661. package/test/dsl/integration/fluent-api-docs-examples.integration.test.ts +988 -0
  662. package/test/dsl/integration/fluent-api.integration.test.ts +615 -0
  663. package/test/dsl/integration/search-helpers.ts +27 -0
  664. package/test/dsl/integration/special-functions.integration.test.ts +224 -0
  665. package/test/dsl/integration/test-config.ts +52 -0
  666. package/test/dsl/pagination.test.ts +86 -0
  667. package/test/dsl/query-builder.test.ts +1775 -0
  668. package/test/dsl/response-parser.test.ts +520 -0
  669. package/test/dsl/schema/cache.test.ts +53 -0
  670. package/test/dsl/schema/load.test.ts +165 -0
  671. package/test/dsl/schema/summary.test.ts +61 -0
  672. package/test/dsl/schema/validation.test.ts +46 -0
  673. package/test/dsl/time-series.test.ts +135 -0
  674. package/test/dsl/unnest.test.ts +151 -0
  675. package/test/dsl/usage-policy.test.ts +100 -0
  676. package/test/dsl/utils/escape.property.test.ts +109 -0
  677. package/test/dsl/utils/escape.test.ts +140 -0
  678. package/test/dsl/utils/validate-field-name.property.test.ts +99 -0
  679. package/test/dsl/utils/validate-field-name.test.ts +55 -0
  680. package/test/examples/dsl-examples.test.ts +29 -0
  681. package/test/examples/usage-scenarios.test.ts +90 -0
  682. package/test/fixtures/describe-schema.json +4000 -0
  683. package/test/funder-org-names.test.ts +20 -0
  684. package/test/helpers/schema-fixture.ts +18 -0
  685. package/test/helpers/tool-test-harness.ts +114 -0
  686. package/test/integration/assertions.ts +263 -0
  687. package/test/integration/env.ts +108 -0
  688. package/test/integration/harness.ts +307 -0
  689. package/test/integration/hosted-client.ts +56 -0
  690. package/test/integration/hosted-mocks.ts +81 -0
  691. package/test/integration/hosted-run.ts +86 -0
  692. package/test/integration/hosted.e2e.test.ts +101 -0
  693. package/test/integration/reporter.ts +100 -0
  694. package/test/integration/run.ts +74 -0
  695. package/test/integration/suites/analytics.integration.ts +72 -0
  696. package/test/integration/suites/functions.integration.ts +37 -0
  697. package/test/integration/suites/hosted-smoke.integration.ts +38 -0
  698. package/test/integration/suites/index.ts +22 -0
  699. package/test/integration/suites/lookup.integration.ts +57 -0
  700. package/test/integration/suites/query.integration.ts +49 -0
  701. package/test/integration/suites/resources.integration.ts +68 -0
  702. package/test/integration/suites/search.integration.ts +80 -0
  703. package/test/integration/types.ts +92 -0
  704. package/test/integration/verify-usage-scenarios.ts +162 -0
  705. package/test/mcp/export-format.test.ts +67 -0
  706. package/test/mcp/http-server.test.ts +80 -0
  707. package/test/middleware/field-aliases.test.ts +287 -0
  708. package/test/resources/schema.test.ts +28 -0
  709. package/test/schema/describe-contract.test.ts +24 -0
  710. package/test/schema/store.test.ts +45 -0
  711. package/test/server.test.ts +170 -0
  712. package/test/tools/analytics-filters.test.ts +35 -0
  713. package/test/tools/analytics.test.ts +419 -0
  714. package/test/tools/fetch-search-pages.test.ts +200 -0
  715. package/test/tools/functions.test.ts +153 -0
  716. package/test/tools/lookup.test.ts +296 -0
  717. package/test/tools/query.test.ts +100 -0
  718. package/test/tools/schema.test.ts +37 -0
  719. package/test/tools/search.test.ts +415 -0
  720. package/test/utils.test.ts +45 -0
  721. package/tsconfig.json +9 -0
  722. package/tsconfig.tsbuildinfo +1 -0
@@ -0,0 +1,538 @@
1
+ /**
2
+ * Main DimensionsClient class for interacting with the Dimensions API.
3
+ * Orchestrates authentication, rate limiting, and HTTP communication.
4
+ * @module client
5
+ */
6
+
7
+ import type {
8
+ AuthProvider,
9
+ Command,
10
+ DimensionsClientConfig,
11
+ DslResponse,
12
+ QueryExecutorOptions,
13
+ ResolvedDimensionsClientConfig,
14
+ } from "../client/index.js";
15
+ import {
16
+ createAuthProvider,
17
+ DimensionsClientConfigSchema,
18
+ HttpClient,
19
+ InternalDslClient,
20
+ RateLimiter,
21
+ ValidationError,
22
+ } from "../client/index.js";
23
+ import {
24
+ ClassifyCommand,
25
+ ExtractAffiliationsCommand,
26
+ ExtractConceptsCommand,
27
+ ExtractGrantsCommand,
28
+ } from "./commands/functions/index.js";
29
+ import { type EntityTypeMap, FluentQueryBuilder } from "./fluent-query-builder.js";
30
+ import { QueryBuilder } from "./query-builder.js";
31
+ import type { SchemaStore } from "./schema/index.js";
32
+ import type {
33
+ ClinicalTrial,
34
+ Dataset,
35
+ Grant,
36
+ Organization,
37
+ Patent,
38
+ PolicyDocument,
39
+ Publication,
40
+ Researcher,
41
+ } from "./types/entities.js";
42
+ import type {
43
+ AffiliationInput,
44
+ ClassificationSystem,
45
+ ClassifyInput,
46
+ ClassifyResponse,
47
+ ExtractAffiliationsResponse,
48
+ ExtractConceptsResponse,
49
+ ExtractGrantsInput,
50
+ ExtractGrantsResponse,
51
+ } from "./types/special-functions.js";
52
+
53
+ /**
54
+ * Rate limit status information.
55
+ */
56
+ export interface RateLimitInfo {
57
+ /** Number of requests remaining in the current window */
58
+ remaining: number;
59
+ /** Time in milliseconds until the rate limit window resets */
60
+ resetInMs: number;
61
+ }
62
+
63
+ /**
64
+ * Client for interacting with the Dimensions Analytics API.
65
+ * Handles authentication, rate limiting, and command execution.
66
+ *
67
+ * @example
68
+ * ```typescript
69
+ * const client = new DimensionsClient({ apiKey: "your-api-key" });
70
+ *
71
+ * const result = await client.send(
72
+ * client.rawQuery('search publications for "machine learning" return publications limit 10')
73
+ * );
74
+ * ```
75
+ */
76
+ export class DimensionsClient {
77
+ private readonly config: ResolvedDimensionsClientConfig;
78
+ private readonly authProvider?: AuthProvider;
79
+ private readonly httpClient?: HttpClient;
80
+ private readonly internalClient?: InternalDslClient;
81
+ private readonly rateLimiter: RateLimiter;
82
+ private schemaStore?: SchemaStore;
83
+
84
+ /**
85
+ * Creates a new DimensionsClient instance.
86
+ * @param config - Client configuration
87
+ * @throws {ValidationError} If configuration is invalid
88
+ */
89
+ constructor(config: DimensionsClientConfig) {
90
+ // Validate and apply defaults
91
+ const parseResult = DimensionsClientConfigSchema.safeParse(config);
92
+ if (!parseResult.success) {
93
+ throw new ValidationError(`Invalid configuration: ${parseResult.error.message}`, {
94
+ issues: parseResult.error.issues,
95
+ });
96
+ }
97
+ this.config = parseResult.data;
98
+
99
+ if (this.config.backend === "internal") {
100
+ const internal = this.config.internal!;
101
+ this.internalClient = new InternalDslClient({
102
+ config: internal.service,
103
+ userEmail: internal.userEmail,
104
+ clientIp: internal.clientIp,
105
+ timeout: this.config.timeout,
106
+ });
107
+ this.rateLimiter = new RateLimiter({
108
+ maxRequests: 1000,
109
+ windowMs: 60_000,
110
+ });
111
+ return;
112
+ }
113
+
114
+ this.authProvider = createAuthProvider({
115
+ type: "jwt",
116
+ apiKey: this.config.apiKey!,
117
+ authUrl: `${this.config.baseUrl}/api/auth.json`,
118
+ timeout: this.config.timeout,
119
+ });
120
+
121
+ this.rateLimiter = new RateLimiter({
122
+ maxRequests: this.config.rateLimitPerMinute,
123
+ windowMs: 60_000,
124
+ });
125
+
126
+ this.httpClient = new HttpClient({
127
+ baseUrl: this.config.baseUrl,
128
+ authProvider: this.authProvider,
129
+ timeout: this.config.timeout,
130
+ maxRetries: this.config.maxRetries,
131
+ retryDelay: this.config.retryDelay,
132
+ rateLimiter: this.rateLimiter,
133
+ });
134
+ }
135
+
136
+ private async executeDslQuery(
137
+ dsl: string,
138
+ endpoint: string,
139
+ options?: QueryExecutorOptions,
140
+ ): Promise<DslResponse> {
141
+ if (this.internalClient) {
142
+ return this.internalClient.query(dsl, options);
143
+ }
144
+ const response = await this.httpClient!.query(dsl, endpoint, options);
145
+ return response as DslResponse;
146
+ }
147
+
148
+ /**
149
+ * Sends a command to the Dimensions API.
150
+ * @param command - The command to execute
151
+ * @returns The transformed response
152
+ * @throws {ValidationError} If command input is invalid
153
+ * @throws {AuthenticationError} If authentication fails
154
+ * @throws {RateLimitError} If rate limit is exceeded
155
+ * @throws {QuerySyntaxError} If query syntax is invalid
156
+ * @throws {ServerError} If server error occurs
157
+ * @throws {NetworkError} If network error occurs
158
+ * @throws {TimeoutError} If request times out
159
+ */
160
+ async send<TInput, TOutput>(command: Command<TInput, TOutput>): Promise<TOutput> {
161
+ // Build DSL query
162
+ const dsl = command.resolveQuery?.() ?? "";
163
+ const endpoint = command.resolveEndpoint();
164
+
165
+ // Validate DSL before sending if enabled
166
+ if (dsl && this.config.validateQueries) {
167
+ this.assertValidDsl(dsl);
168
+ }
169
+
170
+ // Execute HTTP query (auth and rate limiting are handled by HttpClient)
171
+ const response = await this.executeDslQuery(dsl, endpoint, undefined);
172
+
173
+ // Transform response if command has a transformer
174
+ if (command.transformResponse) {
175
+ return command.transformResponse(response);
176
+ }
177
+
178
+ // Return raw response if no transformer
179
+ return response as TOutput;
180
+ }
181
+
182
+ /**
183
+ * Gets current rate limit status.
184
+ * @returns Rate limit information
185
+ */
186
+ getRateLimitInfo(): RateLimitInfo {
187
+ return {
188
+ remaining: this.rateLimiter.getRemainingRequests(),
189
+ resetInMs: this.rateLimiter.getTimeUntilNextSlot(),
190
+ };
191
+ }
192
+
193
+ /**
194
+ * Invalidates the cached authentication token.
195
+ * Forces a new token to be fetched on the next request.
196
+ */
197
+ invalidateToken(): void {
198
+ this.authProvider?.invalidate();
199
+ }
200
+
201
+ /**
202
+ * Resets the rate limiter, clearing all recorded request timestamps.
203
+ * Useful for testing or when starting a fresh session.
204
+ */
205
+ resetRateLimiter(): void {
206
+ this.rateLimiter.reset();
207
+ }
208
+
209
+ /**
210
+ * Executes a raw DSL query against the Dimensions API.
211
+ * Use this for generic/dynamic queries not covered by specific commands.
212
+ *
213
+ * @param dsl - The DSL query string to execute
214
+ * @param options - Optional signal and timeout overrides
215
+ * @returns The raw API response
216
+ * @throws {AuthenticationError} If authentication fails
217
+ * @throws {RateLimitError} If rate limit is exceeded
218
+ * @throws {QuerySyntaxError} If query syntax is invalid
219
+ * @throws {ServerError} If server error occurs
220
+ * @throws {NetworkError} If network error occurs
221
+ * @throws {TimeoutError} If request times out
222
+ *
223
+ * @example
224
+ * ```typescript
225
+ * const response = await client.rawQuery(
226
+ * 'search publications for "CRISPR" return publications[id+title] limit 10'
227
+ * );
228
+ * console.log(response.publications);
229
+ * ```
230
+ */
231
+ async rawQuery(dsl: string, options?: QueryExecutorOptions): Promise<DslResponse> {
232
+ // Validate DSL before sending if enabled
233
+ if (this.config.validateQueries) {
234
+ this.assertValidDsl(dsl);
235
+ }
236
+
237
+ // Execute HTTP query (auth and rate limiting are handled by HttpClient)
238
+ const response = await this.executeDslQuery(dsl, "/api/dsl/v2", options);
239
+
240
+ return response;
241
+ }
242
+
243
+ /**
244
+ * Validates a DSL string and throws {@link ValidationError} if it is invalid.
245
+ * @param dsl - The DSL query string to validate
246
+ * @throws {ValidationError} If the DSL fails parsing or semantic validation
247
+ */
248
+ private assertValidDsl(_dsl: string): void {
249
+ // Local parser validation removed; Dimensions API validates on execute.
250
+ }
251
+
252
+ /**
253
+ * Attaches a loaded describe schema for QueryBuilder entity/index validation.
254
+ * @param store - Schema from {@link loadSchema} or {@link getOrLoadSchema}
255
+ */
256
+ attachSchemaStore(store: SchemaStore): void {
257
+ this.schemaStore = store;
258
+ }
259
+
260
+ /**
261
+ * Creates a {@link QueryBuilder} validated against the attached schema when present.
262
+ * @returns New query builder instance
263
+ */
264
+ createQueryBuilder(): QueryBuilder {
265
+ return new QueryBuilder(this.schemaStore);
266
+ }
267
+
268
+ // #region Fluent API Entity Entry Points
269
+
270
+ /**
271
+ * Creates a type-safe fluent query builder for the specified entity.
272
+ * @param entity - The entity type key
273
+ * @returns A FluentQueryBuilder typed to the entity
274
+ */
275
+ private createFluentBuilder<K extends keyof EntityTypeMap>(
276
+ entity: K,
277
+ ): FluentQueryBuilder<EntityTypeMap[K], K> {
278
+ return new FluentQueryBuilder<EntityTypeMap[K], K>(this, entity, this.schemaStore);
279
+ }
280
+
281
+ /**
282
+ * Creates a fluent query builder for publications.
283
+ * @returns A FluentQueryBuilder configured for publications
284
+ *
285
+ * @example
286
+ * ```typescript
287
+ * const result = await client
288
+ * .publications()
289
+ * .for("machine learning")
290
+ * .where("year", ">=", 2020)
291
+ * .fields(["id", "title", "doi"])
292
+ * .execute();
293
+ * ```
294
+ */
295
+ publications(): FluentQueryBuilder<Publication, "publications"> {
296
+ return this.createFluentBuilder("publications");
297
+ }
298
+
299
+ /**
300
+ * Creates a fluent query builder for grants.
301
+ * @returns A FluentQueryBuilder configured for grants
302
+ *
303
+ * @example
304
+ * ```typescript
305
+ * const result = await client
306
+ * .grants()
307
+ * .for("cancer research")
308
+ * .where("funding_usd", ">", 1000000)
309
+ * .execute();
310
+ * ```
311
+ */
312
+ grants(): FluentQueryBuilder<Grant, "grants"> {
313
+ return this.createFluentBuilder("grants");
314
+ }
315
+
316
+ /**
317
+ * Creates a fluent query builder for researchers.
318
+ * @returns A FluentQueryBuilder configured for researchers
319
+ *
320
+ * @example
321
+ * ```typescript
322
+ * const result = await client
323
+ * .researchers()
324
+ * .for("smith")
325
+ * .whereNotEmpty("orcid_id")
326
+ * .execute();
327
+ * ```
328
+ */
329
+ researchers(): FluentQueryBuilder<Researcher, "researchers"> {
330
+ return this.createFluentBuilder("researchers");
331
+ }
332
+
333
+ /**
334
+ * Creates a fluent query builder for patents.
335
+ * @returns A FluentQueryBuilder configured for patents
336
+ *
337
+ * @example
338
+ * ```typescript
339
+ * const result = await client
340
+ * .patents()
341
+ * .for("battery technology")
342
+ * .where("year", ">=", 2020)
343
+ * .execute();
344
+ * ```
345
+ */
346
+ patents(): FluentQueryBuilder<Patent, "patents"> {
347
+ return this.createFluentBuilder("patents");
348
+ }
349
+
350
+ /**
351
+ * Creates a fluent query builder for clinical trials.
352
+ * @returns A FluentQueryBuilder configured for clinical_trials
353
+ *
354
+ * @example
355
+ * ```typescript
356
+ * const result = await client
357
+ * .clinicalTrials()
358
+ * .for("diabetes")
359
+ * .where("phase", "=", "Phase 3")
360
+ * .execute();
361
+ * ```
362
+ */
363
+ clinicalTrials(): FluentQueryBuilder<ClinicalTrial, "clinical_trials"> {
364
+ return this.createFluentBuilder("clinical_trials");
365
+ }
366
+
367
+ /**
368
+ * Creates a fluent query builder for datasets.
369
+ * @returns A FluentQueryBuilder configured for datasets
370
+ *
371
+ * @example
372
+ * ```typescript
373
+ * const result = await client
374
+ * .datasets()
375
+ * .for("genomics")
376
+ * .where("year", ">=", 2020)
377
+ * .execute();
378
+ * ```
379
+ */
380
+ datasets(): FluentQueryBuilder<Dataset, "datasets"> {
381
+ return this.createFluentBuilder("datasets");
382
+ }
383
+
384
+ /**
385
+ * Creates a fluent query builder for policy documents.
386
+ * @returns A FluentQueryBuilder configured for policy_documents
387
+ *
388
+ * @example
389
+ * ```typescript
390
+ * const result = await client
391
+ * .policyDocuments()
392
+ * .for("climate change")
393
+ * .execute();
394
+ * ```
395
+ */
396
+ policyDocuments(): FluentQueryBuilder<PolicyDocument, "policy_documents"> {
397
+ return this.createFluentBuilder("policy_documents");
398
+ }
399
+
400
+ /**
401
+ * Creates a fluent query builder for organizations.
402
+ * @returns A FluentQueryBuilder configured for organizations
403
+ *
404
+ * @example
405
+ * ```typescript
406
+ * const result = await client
407
+ * .organizations()
408
+ * .for("stanford")
409
+ * .execute();
410
+ * ```
411
+ */
412
+ organizations(): FluentQueryBuilder<Organization, "organizations"> {
413
+ return this.createFluentBuilder("organizations");
414
+ }
415
+
416
+ // #endregion
417
+
418
+ // #region Special Function Methods
419
+
420
+ /**
421
+ * Classifies text using a specified Dimensions classification system.
422
+ * Supports FOR, SDG, RCDC, and other research classification taxonomies.
423
+ *
424
+ * @template S - The classification system type
425
+ * @param options - Classification options including title, abstract, and system
426
+ * @returns Classification codes with their names
427
+ * @throws {ValidationError} If input validation fails
428
+ * @throws {AuthenticationError} If authentication fails
429
+ * @throws {QuerySyntaxError} If query syntax is invalid
430
+ *
431
+ * @example
432
+ * ```typescript
433
+ * const result = await client.classify({
434
+ * title: "Burnout and intentions to quit the nursing profession",
435
+ * abstract: "BACKGROUND: Burnout is an occupational disease...",
436
+ * system: "FOR"
437
+ * });
438
+ * console.log(result.FOR); // [{ id: "1117", name: "Public Health..." }]
439
+ * ```
440
+ */
441
+ async classify<S extends ClassificationSystem>(
442
+ options: ClassifyInput & { system: S },
443
+ ): Promise<ClassifyResponse<S>> {
444
+ return this.send(new ClassifyCommand<S>(options));
445
+ }
446
+
447
+ /**
448
+ * Extracts concepts from text using Dimensions natural language processing.
449
+ *
450
+ * @template WithScores - Whether to include relevance scores
451
+ * @param text - Text to extract concepts from
452
+ * @param options - Optional settings including returnScores
453
+ * @returns Array of concepts, optionally with relevance scores
454
+ * @throws {ValidationError} If input validation fails
455
+ * @throws {AuthenticationError} If authentication fails
456
+ * @throws {QuerySyntaxError} If query syntax is invalid
457
+ *
458
+ * @example
459
+ * ```typescript
460
+ * // Simple extraction
461
+ * const concepts = await client.extractConcepts(
462
+ * "Machine learning algorithms for drug discovery"
463
+ * );
464
+ * console.log(concepts.extracted_concepts); // ["machine learning", "drug discovery", ...]
465
+ *
466
+ * // With relevance scores
467
+ * const conceptsWithScores = await client.extractConcepts(
468
+ * "Machine learning algorithms for drug discovery",
469
+ * { returnScores: true }
470
+ * );
471
+ * console.log(conceptsWithScores.extracted_concepts);
472
+ * // [{ concept: "machine learning", relevance: 0.95 }, ...]
473
+ * ```
474
+ */
475
+ async extractConcepts<WithScores extends boolean = false>(
476
+ text: string,
477
+ options?: { returnScores?: WithScores },
478
+ ): Promise<ExtractConceptsResponse<WithScores>> {
479
+ return this.send(
480
+ new ExtractConceptsCommand<WithScores>({
481
+ text,
482
+ returnScores: (options?.returnScores ?? false) as WithScores,
483
+ }),
484
+ );
485
+ }
486
+
487
+ /**
488
+ * Extracts and resolves organization affiliations using Dimensions entity resolution.
489
+ * Takes freetext or structured affiliation data and returns matched organizations.
490
+ *
491
+ * @param affiliations - Array of affiliation inputs to resolve
492
+ * @returns Array of resolved organization matches with confidence scores
493
+ * @throws {ValidationError} If input validation fails
494
+ * @throws {AuthenticationError} If authentication fails
495
+ * @throws {QuerySyntaxError} If query syntax is invalid
496
+ *
497
+ * @example
498
+ * ```typescript
499
+ * const result = await client.extractAffiliations([
500
+ * { affiliation: "University of Oxford, UK" },
501
+ * { name: "Stanford", city: "Stanford", country: "USA" }
502
+ * ]);
503
+ * console.log(result.extracted_affiliations);
504
+ * // [{ id: "grid.4991.5", name: "University of Oxford", score: 0.95 }, ...]
505
+ * ```
506
+ */
507
+ async extractAffiliations(
508
+ affiliations: readonly AffiliationInput[],
509
+ ): Promise<ExtractAffiliationsResponse> {
510
+ return this.send(new ExtractAffiliationsCommand({ affiliations }));
511
+ }
512
+
513
+ /**
514
+ * Resolves a grant number to a Dimensions grant ID.
515
+ * Takes a grant number and optional funder information to find the matching grant.
516
+ *
517
+ * @param options - Grant lookup parameters
518
+ * @returns Resolved grant ID, or null if no match found
519
+ * @throws {ValidationError} If input validation fails
520
+ * @throws {AuthenticationError} If authentication fails
521
+ * @throws {QuerySyntaxError} If query syntax is invalid
522
+ *
523
+ * @example
524
+ * ```typescript
525
+ * const result = await client.extractGrants({
526
+ * grantNumber: "R01HL117329",
527
+ * fundref: "100000050"
528
+ * });
529
+ * console.log(result.grant_id);
530
+ * // "grant.2544064"
531
+ * ```
532
+ */
533
+ async extractGrants(options: ExtractGrantsInput): Promise<ExtractGrantsResponse> {
534
+ return this.send(new ExtractGrantsCommand(options));
535
+ }
536
+
537
+ // #endregion
538
+ }
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Shared helper for applying extended where filters to a QueryBuilder.
3
+ * @module commands/apply-filters
4
+ */
5
+
6
+ import type { QueryBuilder } from "../query-builder.js";
7
+ import type { ExtendedWhereFilterInput } from "./facet/schemas.js";
8
+
9
+ /**
10
+ * Applies an array of extended where filters to a QueryBuilder instance.
11
+ * Dispatches to the appropriate QueryBuilder method based on the filter operator.
12
+ *
13
+ * @param builder - QueryBuilder instance to apply filters to
14
+ * @param filters - Array of extended where filters
15
+ */
16
+ export function applyFilters(
17
+ builder: QueryBuilder,
18
+ filters: readonly ExtendedWhereFilterInput[],
19
+ ): void {
20
+ for (const f of filters) {
21
+ switch (f.operator) {
22
+ case "is_empty":
23
+ builder.whereEmpty(f.field);
24
+ break;
25
+ case "is_not_empty":
26
+ builder.whereNotEmpty(f.field);
27
+ break;
28
+ case "in":
29
+ builder.whereIn(f.field, f.value);
30
+ break;
31
+ default:
32
+ builder.where(f.field, f.operator, f.value);
33
+ }
34
+ }
35
+ }
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Facet-related schemas shared by QueryBuilder and MCP tools.
3
+ * @module commands/facet
4
+ */
5
+
6
+ export {
7
+ EntitySchema,
8
+ type ExtendedWhereFilterInput,
9
+ ExtendedWhereFilterSchema,
10
+ type WhereFilterInput,
11
+ WhereFilterSchema,
12
+ } from "./schemas.js";
@@ -0,0 +1,101 @@
1
+ /**
2
+ * Shared Zod schemas for facet and aggregate commands.
3
+ * @module commands/facet/schemas
4
+ */
5
+
6
+ import { z } from "zod";
7
+ import { ValidationError } from "../../../client/index.js";
8
+ import { VALID_ENTITIES } from "../../types/vocabulary.js";
9
+
10
+ /**
11
+ * Zod schema for the entity type field, derived from the core VALID_ENTITIES constant.
12
+ */
13
+ export const EntitySchema = z.enum(VALID_ENTITIES as unknown as [string, ...string[]]);
14
+
15
+ /**
16
+ * Schema for where clause filters used in facet/aggregate commands.
17
+ * Supports basic comparison operators for field-level filtering.
18
+ */
19
+ export const WhereFilterSchema = z.object({
20
+ /** Field name to filter on */
21
+ field: z.string().min(1),
22
+ /** Comparison operator */
23
+ operator: z.enum(["=", "!=", ">", "<", ">=", "<="]),
24
+ /** Value to compare against */
25
+ value: z.union([z.string(), z.number(), z.boolean()]),
26
+ });
27
+
28
+ /**
29
+ * Input type for a where clause filter.
30
+ */
31
+ export type WhereFilterInput = z.infer<typeof WhereFilterSchema>;
32
+
33
+ /**
34
+ * Schema for scalar comparison filters (=, !=, >, <, >=, <=).
35
+ */
36
+ const ScalarFilterSchema = z.object({
37
+ /** Field name to filter on */
38
+ field: z.string().min(1),
39
+ /** Scalar comparison operator */
40
+ operator: z.enum(["=", "!=", ">", "<", ">=", "<="]),
41
+ /** Value to compare against */
42
+ value: z.union([z.string(), z.number(), z.boolean()]),
43
+ });
44
+
45
+ /**
46
+ * Schema for set membership filters (in).
47
+ */
48
+ const InFilterSchema = z.object({
49
+ /** Field name to filter on */
50
+ field: z.string().min(1),
51
+ /** Set membership operator */
52
+ operator: z.literal("in"),
53
+ /** Values to match against (scalar is coerced to single-element array) */
54
+ value: z.union([
55
+ z.string().transform((v) => [v]),
56
+ z.number().transform((v) => [v]),
57
+ z.array(z.string()).min(1),
58
+ z.array(z.number()).min(1),
59
+ ]),
60
+ });
61
+
62
+ /**
63
+ * Schema for emptiness check filters (is_empty, is_not_empty).
64
+ */
65
+ const EmptinessFilterSchema = z.object({
66
+ /** Field name to filter on */
67
+ field: z.string().min(1),
68
+ /** Emptiness check operator */
69
+ operator: z.enum(["is_empty", "is_not_empty"]),
70
+ });
71
+
72
+ /**
73
+ * Extended where filter schema supporting all DSL filter operators.
74
+ * Covers scalar comparisons, set membership (in), and emptiness checks (is_empty/is_not_empty).
75
+ *
76
+ * Uses a discriminated union on `operator` for precise type narrowing.
77
+ */
78
+ export const ExtendedWhereFilterSchema = z.discriminatedUnion("operator", [
79
+ ScalarFilterSchema,
80
+ InFilterSchema,
81
+ EmptinessFilterSchema.extend({ operator: z.literal("is_empty") }),
82
+ EmptinessFilterSchema.extend({ operator: z.literal("is_not_empty") }),
83
+ ]);
84
+
85
+ /**
86
+ * Input type for an extended where filter (supports in/is_empty/is_not_empty).
87
+ */
88
+ export type ExtendedWhereFilterInput = z.infer<typeof ExtendedWhereFilterSchema>;
89
+
90
+ /**
91
+ * Validates that a raw API response is a non-null object.
92
+ * @param response - The raw API response
93
+ * @returns The response as a record
94
+ * @throws {ValidationError} If response is not a non-null object
95
+ */
96
+ export function assertObjectResponse(response: unknown): Record<string, unknown> {
97
+ if (response == null || typeof response !== "object" || Array.isArray(response)) {
98
+ throw new ValidationError("Expected object response from API");
99
+ }
100
+ return response as Record<string, unknown>;
101
+ }