@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,253 @@
1
+ /**
2
+ * In-memory schema store built from `describe schema` responses.
3
+ * @module schema/store
4
+ */
5
+
6
+ import { STRUCTURED_ENTITY_TYPES, type StructuredEntityType } from "./structured-entities.js";
7
+ import { buildSchemaSummary, type SchemaSummary } from "./summary.js";
8
+ import type { DescribeSchemaResponse, EntityDescribe, SourceDescribe } from "./types.js";
9
+
10
+ /** How the schema store was populated. */
11
+ export type SchemaLoadSource = "api" | "cache";
12
+
13
+ /** Optional metadata when constructing a {@link SchemaStore}. */
14
+ export type SchemaStoreMetadata = {
15
+ readonly loadSource?: SchemaLoadSource;
16
+ readonly stale?: boolean;
17
+ readonly cachedAt?: Date;
18
+ };
19
+
20
+ /** Operational limits mirrored from upstream DSL constants. */
21
+ export const SCHEMA_LIMITS = {
22
+ maxLimit: 1000,
23
+ maxOffset: 50000,
24
+ maxPages: 50,
25
+ maxFacetBuckets: 1000,
26
+ requestsPerMinute: 30,
27
+ } as const;
28
+
29
+ /**
30
+ * Read-only schema catalog with derived helper views for tools and clients.
31
+ */
32
+ export class SchemaStore {
33
+ readonly #version: string | undefined;
34
+ readonly #loadedAt: Date;
35
+ readonly #loadSource: SchemaLoadSource;
36
+ readonly #stale: boolean;
37
+ readonly #cachedAt: Date | undefined;
38
+ readonly #sources: ReadonlyMap<string, SourceDescribe>;
39
+ readonly #entities: ReadonlyMap<string, EntityDescribe>;
40
+ readonly #raw: DescribeSchemaResponse;
41
+
42
+ /**
43
+ * @param response - Parsed `describe schema` payload
44
+ * @param version - Optional DSL version from `describe version`
45
+ * @param loadedAt - Timestamp when schema was loaded
46
+ * @param metadata - Cache/API provenance
47
+ */
48
+ constructor(
49
+ response: DescribeSchemaResponse,
50
+ version?: string,
51
+ loadedAt: Date = new Date(),
52
+ metadata: SchemaStoreMetadata = {},
53
+ ) {
54
+ this.#raw = response;
55
+ this.#version = version;
56
+ this.#loadedAt = loadedAt;
57
+ this.#loadSource = metadata.loadSource ?? "api";
58
+ this.#stale = metadata.stale ?? false;
59
+ this.#cachedAt = metadata.cachedAt;
60
+ this.#sources = new Map(Object.entries(response.sources ?? {}));
61
+ this.#entities = new Map(Object.entries(response.entities ?? {}));
62
+ }
63
+
64
+ /** Whether schema came from the API or disk cache. */
65
+ get loadSource(): SchemaLoadSource {
66
+ return this.#loadSource;
67
+ }
68
+
69
+ /** True when serving from cache after an API failure or expired TTL. */
70
+ get stale(): boolean {
71
+ return this.#stale;
72
+ }
73
+
74
+ /** When the on-disk cache was written, if known. */
75
+ get cachedAt(): Date | undefined {
76
+ return this.#cachedAt;
77
+ }
78
+
79
+ /** DSL version string, if known. */
80
+ get version(): string | undefined {
81
+ return this.#version;
82
+ }
83
+
84
+ /** When this store was populated. */
85
+ get loadedAt(): Date {
86
+ return this.#loadedAt;
87
+ }
88
+
89
+ /** Full describe payload. */
90
+ get raw(): DescribeSchemaResponse {
91
+ return this.#raw;
92
+ }
93
+
94
+ /** All source names. */
95
+ sourceNames(): readonly string[] {
96
+ return [...this.#sources.keys()].sort();
97
+ }
98
+
99
+ /** All auxiliary entity names. */
100
+ entityNames(): readonly string[] {
101
+ return [...this.#entities.keys()].sort();
102
+ }
103
+
104
+ /**
105
+ * Returns a source schema by name.
106
+ * @param name - Source name (e.g. `publications`)
107
+ * @returns Source schema or undefined
108
+ */
109
+ getSource(name: string): SourceDescribe | undefined {
110
+ return this.#sources.get(name);
111
+ }
112
+
113
+ /**
114
+ * Returns an auxiliary entity schema by name.
115
+ * @param name - Entity name (e.g. `journals`)
116
+ * @returns Entity schema or undefined
117
+ */
118
+ getEntity(name: string): EntityDescribe | undefined {
119
+ return this.#entities.get(name);
120
+ }
121
+
122
+ /**
123
+ * Filterable field names for a source.
124
+ * @param source - Source name
125
+ * @returns Field names where `is_filter` is true
126
+ */
127
+ filterableFields(source: string): readonly string[] {
128
+ const fields = this.#sources.get(source)?.fields ?? {};
129
+ return Object.entries(fields)
130
+ .filter(([, f]) => f.is_filter === true)
131
+ .map(([name]) => name)
132
+ .sort();
133
+ }
134
+
135
+ /**
136
+ * Facet field names for a source.
137
+ * @param source - Source name
138
+ * @returns Field names marked as facets or entity fields
139
+ */
140
+ facetFields(source: string): readonly string[] {
141
+ const fields = this.#sources.get(source)?.fields ?? {};
142
+ return Object.entries(fields)
143
+ .filter(([, f]) => f.is_facet === true || f.is_entity === true)
144
+ .map(([name]) => name)
145
+ .sort();
146
+ }
147
+
148
+ /**
149
+ * Search index names for a source.
150
+ * @param source - Source name
151
+ * @returns Search field/index names
152
+ */
153
+ searchIndexes(source: string): readonly string[] {
154
+ const raw = this.#sources.get(source)?.search_fields;
155
+ if (!raw) return [];
156
+ if (Array.isArray(raw)) return [...raw].sort();
157
+ return Object.keys(raw).sort();
158
+ }
159
+
160
+ /**
161
+ * Aggregation indicator names for a source.
162
+ * @param source - Source name
163
+ * @returns Metric names
164
+ */
165
+ metrics(source: string): readonly string[] {
166
+ const raw = this.#sources.get(source)?.metrics;
167
+ if (!raw) return [];
168
+ if (Array.isArray(raw)) return [...raw].sort();
169
+ return Object.keys(raw).sort();
170
+ }
171
+
172
+ /**
173
+ * Named fieldsets for a source.
174
+ * @param source - Source name
175
+ * @returns Fieldset name to field list map
176
+ */
177
+ fieldsets(source: string): Readonly<Record<string, readonly string[]>> {
178
+ return this.#sources.get(source)?.fieldsets ?? {};
179
+ }
180
+
181
+ /**
182
+ * Core entity types supported by structured search tools.
183
+ * @returns Structured sources that exist in the loaded describe schema
184
+ */
185
+ structuredEntityTypes(): readonly StructuredEntityType[] {
186
+ return STRUCTURED_ENTITY_TYPES.filter((entity) => this.#sources.has(entity));
187
+ }
188
+
189
+ /**
190
+ * Health/stats payload for `/health`.
191
+ * @returns Summary object
192
+ */
193
+ stats(): {
194
+ dslVersion: string | undefined;
195
+ sourceCount: number;
196
+ entityCount: number;
197
+ schemaLoadedAt: string;
198
+ loadSource: SchemaLoadSource;
199
+ stale: boolean;
200
+ cachedAt: string | undefined;
201
+ } {
202
+ return {
203
+ dslVersion: this.#version,
204
+ sourceCount: this.#sources.size,
205
+ entityCount: this.#entities.size,
206
+ schemaLoadedAt: this.#loadedAt.toISOString(),
207
+ loadSource: this.#loadSource,
208
+ stale: this.#stale,
209
+ cachedAt: this.#cachedAt?.toISOString(),
210
+ };
211
+ }
212
+
213
+ /**
214
+ * Compact overview for cold-start discovery (fields, facets, resource URIs).
215
+ * @returns Summary payload
216
+ */
217
+ summary(): SchemaSummary {
218
+ return buildSchemaSummary(this);
219
+ }
220
+
221
+ /**
222
+ * Comma-separated facet fields for tool descriptions.
223
+ * @param source - Source name
224
+ * @returns Hint string
225
+ */
226
+ facetFieldsHint(source: string): string {
227
+ return this.facetFields(source).join(", ") || "(none)";
228
+ }
229
+
230
+ /**
231
+ * Comma-separated metrics for tool descriptions.
232
+ * @param source - Source name
233
+ * @returns Hint string
234
+ */
235
+ metricsHint(source: string): string {
236
+ return this.metrics(source).join(", ") || "(none)";
237
+ }
238
+ }
239
+
240
+ /**
241
+ * Builds a {@link SchemaStore} from a describe response.
242
+ * @param response - `describe schema` JSON
243
+ * @param version - Optional DSL version
244
+ * @returns Schema store instance
245
+ */
246
+ export function createSchemaStoreFromResponse(
247
+ response: DescribeSchemaResponse,
248
+ version?: string,
249
+ loadedAt?: Date,
250
+ metadata?: SchemaStoreMetadata,
251
+ ): SchemaStore {
252
+ return new SchemaStore(response, version, loadedAt, metadata);
253
+ }
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Structured search entity types supported by search tools.
3
+ * @module schema/structured-entities
4
+ */
5
+
6
+ /** Source names that have dedicated structured search tools. */
7
+ export const STRUCTURED_ENTITY_TYPES = [
8
+ "publications",
9
+ "grants",
10
+ "researchers",
11
+ "patents",
12
+ "clinical_trials",
13
+ "datasets",
14
+ "policy_documents",
15
+ "organizations",
16
+ ] as const;
17
+
18
+ /** A source with a structured search tool. */
19
+ export type StructuredEntityType = (typeof STRUCTURED_ENTITY_TYPES)[number];
20
+
21
+ /**
22
+ * Tool name for a structured entity.
23
+ * @param source - Dimensions source name
24
+ * @returns Tool name (e.g. `search_publications`)
25
+ */
26
+ export function searchToolName(source: StructuredEntityType): string {
27
+ return `search_${source}`;
28
+ }
29
+
30
+ /**
31
+ * JSON result key for entity rows (camelCase where historical tools used it).
32
+ * @param source - Dimensions source name
33
+ * @returns Property name in tool output
34
+ */
35
+ export function searchResultKey(source: StructuredEntityType): string {
36
+ switch (source) {
37
+ case "clinical_trials":
38
+ return "clinicalTrials";
39
+ case "policy_documents":
40
+ return "policyDocuments";
41
+ default:
42
+ return source;
43
+ }
44
+ }
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Compact schema summary for cold-start and agent discovery.
3
+ * @module schema/summary
4
+ */
5
+
6
+ import { SCHEMA_LIMITS, type SchemaStore } from "./store.js";
7
+
8
+ /** MCP resource URIs for drilling into the full schema. */
9
+ export const SCHEMA_RESOURCE_URIS = {
10
+ full: "dimensions://schema",
11
+ summary: "dimensions://schema/summary",
12
+ version: "dimensions://schema/version",
13
+ limits: "dimensions://schema/limits",
14
+ policy: "dimensions://schema/policy",
15
+ fields: "dimensions://fields/{entityType}",
16
+ source: "dimensions://schema/sources/{sourceName}",
17
+ entity: "dimensions://schema/entities/{entityName}",
18
+ examples: "dimensions://examples",
19
+ examplesBySource: "dimensions://examples/{source}",
20
+ } as const;
21
+
22
+ /** Per-source counts derived from describe schema. */
23
+ export type SchemaSourceSummary = {
24
+ readonly filterableFieldCount: number;
25
+ readonly facetFieldCount: number;
26
+ readonly searchIndexCount: number;
27
+ readonly metricCount: number;
28
+ readonly fieldsetNames: readonly string[];
29
+ };
30
+
31
+ /** Compact schema overview for agents and MCP tools. */
32
+ export type SchemaSummary = {
33
+ readonly version: string | undefined;
34
+ readonly loadedAt: string;
35
+ readonly cachedAt: string | undefined;
36
+ readonly stale: boolean;
37
+ readonly loadSource: "api" | "cache";
38
+ readonly limits: typeof SCHEMA_LIMITS;
39
+ readonly stats: {
40
+ readonly sourceCount: number;
41
+ readonly entityCount: number;
42
+ readonly structuredEntityTypes: readonly string[];
43
+ };
44
+ readonly sources: Readonly<Record<string, SchemaSourceSummary>>;
45
+ readonly entities: readonly string[];
46
+ readonly resources: typeof SCHEMA_RESOURCE_URIS;
47
+ readonly hint: string;
48
+ };
49
+
50
+ /**
51
+ * Builds a compact schema summary from a loaded {@link SchemaStore}.
52
+ * @param store - Loaded schema store
53
+ * @returns Summary payload for tools and resources
54
+ */
55
+ export function buildSchemaSummary(store: SchemaStore): SchemaSummary {
56
+ const sources: Record<string, SchemaSourceSummary> = {};
57
+ for (const name of store.sourceNames()) {
58
+ const fieldsets = store.fieldsets(name);
59
+ sources[name] = {
60
+ filterableFieldCount: store.filterableFields(name).length,
61
+ facetFieldCount: store.facetFields(name).length,
62
+ searchIndexCount: store.searchIndexes(name).length,
63
+ metricCount: store.metrics(name).length,
64
+ fieldsetNames: Object.keys(fieldsets).sort(),
65
+ };
66
+ }
67
+
68
+ const stats = store.stats();
69
+ const staleNote = store.stale
70
+ ? " (stale cache — call refresh_schema when the API is reachable)"
71
+ : "";
72
+
73
+ return {
74
+ version: store.version,
75
+ loadedAt: store.loadedAt.toISOString(),
76
+ cachedAt: store.cachedAt?.toISOString(),
77
+ stale: store.stale,
78
+ loadSource: store.loadSource,
79
+ limits: SCHEMA_LIMITS,
80
+ stats: {
81
+ sourceCount: stats.sourceCount,
82
+ entityCount: stats.entityCount,
83
+ structuredEntityTypes: store.structuredEntityTypes(),
84
+ },
85
+ sources,
86
+ entities: store.entityNames(),
87
+ resources: SCHEMA_RESOURCE_URIS,
88
+ hint:
89
+ `Use dimensions://fields/{entityType} for filterable fields and aliases. ` +
90
+ `Read dimensions://schema/policy before large paginated pulls. ` +
91
+ `Use dimensions://schema/sources/{name} or describe_schema with source/entity for detail. ` +
92
+ `Full raw describe: describe_schema with full=true or dimensions://schema.${staleNote}`,
93
+ };
94
+ }
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Types for Dimensions `describe` API responses.
3
+ * @module schema/types
4
+ */
5
+
6
+ /** Field metadata from `describe schema` / `describe source`. */
7
+ export type DescribeField = {
8
+ readonly type: string;
9
+ readonly description?: string;
10
+ readonly long_description?: string;
11
+ readonly is_entity?: boolean;
12
+ readonly is_filter?: boolean;
13
+ readonly is_facet?: boolean;
14
+ readonly is_multivalue?: boolean;
15
+ };
16
+
17
+ /** Per-source schema slice from `describe schema`. */
18
+ export type SourceDescribe = {
19
+ readonly fields: Readonly<Record<string, DescribeField>>;
20
+ readonly fieldsets?: Readonly<Record<string, readonly string[]>>;
21
+ readonly metrics?: readonly string[];
22
+ readonly search_fields?: readonly string[];
23
+ };
24
+
25
+ /** Auxiliary entity schema from `describe schema`. */
26
+ export type EntityDescribe = {
27
+ readonly fields: Readonly<Record<string, DescribeField>>;
28
+ };
29
+
30
+ /** Full response from `describe schema`. */
31
+ export type DescribeSchemaResponse = {
32
+ readonly sources: Readonly<Record<string, SourceDescribe>>;
33
+ readonly entities: Readonly<Record<string, EntityDescribe>>;
34
+ };
35
+
36
+ /** Response from `describe version`. */
37
+ export type DescribeVersionResponse = {
38
+ readonly version?: string;
39
+ readonly release?: string;
40
+ };
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Runtime validation helpers using {@link SchemaStore} when available.
3
+ * @module schema/validation
4
+ */
5
+
6
+ import { ValidationError } from "../../client/index.js";
7
+ import type { EntityType, SearchIndex } from "../types/vocabulary.js";
8
+ import { VALID_ENTITIES, VALID_INDEXES } from "../types/vocabulary.js";
9
+ import type { SchemaStore } from "./store.js";
10
+
11
+ /**
12
+ * Validates a Dimensions source/entity name.
13
+ * @param schemaStore - Optional loaded describe schema
14
+ * @param entity - Source name (e.g. `publications`)
15
+ * @throws {ValidationError} When the source is unknown
16
+ */
17
+ export function assertValidEntity(schemaStore: SchemaStore | undefined, entity: string): void {
18
+ if (schemaStore) {
19
+ if (!schemaStore.getSource(entity)) {
20
+ const known = schemaStore.sourceNames().join(", ");
21
+ throw new ValidationError(
22
+ `Unknown source: ${entity}${known ? `. Known sources: ${known}` : ""}`,
23
+ );
24
+ }
25
+ return;
26
+ }
27
+ if (!VALID_ENTITIES.includes(entity as EntityType)) {
28
+ throw new ValidationError(`Invalid entity type: ${entity}`);
29
+ }
30
+ }
31
+
32
+ /**
33
+ * Validates a search index for the current source.
34
+ * @param schemaStore - Optional loaded describe schema
35
+ * @param entity - Active source from {@link QueryBuilder.search}, if set
36
+ * @param index - Search index name
37
+ * @throws {ValidationError} When the index is unknown
38
+ */
39
+ export function assertValidSearchIndex(
40
+ schemaStore: SchemaStore | undefined,
41
+ entity: string | null,
42
+ index: string,
43
+ ): void {
44
+ if (schemaStore && entity) {
45
+ const indexes = schemaStore.searchIndexes(entity);
46
+ if (indexes.length > 0 && !indexes.includes(index)) {
47
+ throw new ValidationError(
48
+ `Invalid search index "${index}" for ${entity}. Valid indexes: ${indexes.join(", ")}`,
49
+ );
50
+ }
51
+ return;
52
+ }
53
+ if (!VALID_INDEXES.includes(index as SearchIndex)) {
54
+ throw new ValidationError(`Invalid search index: ${index}`);
55
+ }
56
+ }
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Bucket types for Dimensions API facet results.
3
+ * @module types/buckets
4
+ */
5
+
6
+ /**
7
+ * Base bucket with id and count (always present).
8
+ */
9
+ export interface BaseBucket {
10
+ readonly id: string | number;
11
+ readonly count: number;
12
+ }
13
+
14
+ /**
15
+ * Bucket with dynamic aggregation indicator properties from the API.
16
+ */
17
+ export type BucketWithAggregations<
18
+ TBucket extends BaseBucket = BaseBucket,
19
+ TIndicators extends readonly string[] = readonly string[],
20
+ > = TBucket & {
21
+ readonly [K in TIndicators[number]]?: number;
22
+ };
@@ -0,0 +1,99 @@
1
+ /**
2
+ * Common type definitions shared across Dimensions API entities.
3
+ * @module types/common
4
+ */
5
+
6
+ /**
7
+ * Represents an author of a publication or other research output.
8
+ */
9
+ export interface Author {
10
+ /** Dimensions author ID */
11
+ id?: string;
12
+ /** Author's first name */
13
+ first_name?: string;
14
+ /** Author's last name */
15
+ last_name?: string;
16
+ /** Author's full name (if first/last not available) */
17
+ full_name?: string;
18
+ /** ORCID identifier */
19
+ orcid?: string;
20
+ /** Author's institutional affiliations */
21
+ affiliations?: Affiliation[];
22
+ }
23
+
24
+ /**
25
+ * Represents an institutional affiliation.
26
+ */
27
+ export interface Affiliation {
28
+ /** Dimensions affiliation ID */
29
+ id?: string;
30
+ /** Institution name */
31
+ name: string;
32
+ /** City where institution is located */
33
+ city?: string;
34
+ /** State/province where institution is located */
35
+ state?: string;
36
+ /** Country where institution is located */
37
+ country?: string;
38
+ }
39
+
40
+ /**
41
+ * Represents a research organization (university, institute, etc.).
42
+ */
43
+ export interface ResearchOrg {
44
+ /** Dimensions organization ID */
45
+ id?: string;
46
+ /** Organization name */
47
+ name: string;
48
+ /** City where organization is located */
49
+ city?: string;
50
+ /** Country where organization is located */
51
+ country?: string;
52
+ }
53
+
54
+ /**
55
+ * Represents a funding organization.
56
+ */
57
+ export interface FunderOrg {
58
+ /** Dimensions funder ID */
59
+ id?: string;
60
+ /** Funder name */
61
+ name: string;
62
+ /** Funder acronym (e.g., "NIH", "NSF") */
63
+ acronym?: string;
64
+ /** Country where funder is based */
65
+ country?: string;
66
+ }
67
+
68
+ /**
69
+ * Represents a category code (FOR, SDG, etc.).
70
+ */
71
+ export interface CategoryCode {
72
+ /** Category code identifier */
73
+ id: string;
74
+ /** Category name */
75
+ name: string;
76
+ }
77
+
78
+ /**
79
+ * Represents a concept with its relevance score.
80
+ */
81
+ export interface ConceptScore {
82
+ /** Concept name */
83
+ concept: string;
84
+ /** Relevance score */
85
+ relevance: number;
86
+ }
87
+
88
+ /**
89
+ * Represents a journal or publication venue.
90
+ */
91
+ export interface Journal {
92
+ /** Dimensions journal ID */
93
+ id?: string;
94
+ /** Journal title */
95
+ title: string;
96
+ }
97
+
98
+ // Re-export QueryExecutor from core for backwards compatibility
99
+ export type { QueryExecutor } from "../../client/index.js";
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Entity type definitions for Dimensions API responses.
3
+ *
4
+ * Best-effort TypeScript shapes for API result rows. Field names and availability
5
+ * come from live `describe schema` (see {@link SchemaStore}); these types are not
6
+ * validated at runtime.
7
+ *
8
+ * @module types/entities
9
+ */
10
+
11
+ /**
12
+ * Base row returned by structured search — always includes `id`; other fields vary by source.
13
+ */
14
+ export interface DimensionsEntityBase {
15
+ /** Dimensions record ID */
16
+ id: string;
17
+ /** Additional fields from the API (see describe schema / return clause) */
18
+ [key: string]: unknown;
19
+ }
20
+
21
+ /** @see DimensionsEntityBase */
22
+ export type Publication = DimensionsEntityBase;
23
+
24
+ /** @see DimensionsEntityBase */
25
+ export type Grant = DimensionsEntityBase;
26
+
27
+ /** @see DimensionsEntityBase */
28
+ export type Researcher = DimensionsEntityBase;
29
+
30
+ /** @see DimensionsEntityBase */
31
+ export type Patent = DimensionsEntityBase;
32
+
33
+ /** @see DimensionsEntityBase */
34
+ export type ClinicalTrial = DimensionsEntityBase;
35
+
36
+ /** @see DimensionsEntityBase */
37
+ export type Dataset = DimensionsEntityBase;
38
+
39
+ /** @see DimensionsEntityBase */
40
+ export type PolicyDocument = DimensionsEntityBase;
41
+
42
+ /** @see DimensionsEntityBase */
43
+ export type Organization = DimensionsEntityBase;