@cyanheads/brapi-mcp-server 0.3.5

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 (238) hide show
  1. package/CLAUDE.md +391 -0
  2. package/Dockerfile +99 -0
  3. package/LICENSE +201 -0
  4. package/README.md +590 -0
  5. package/changelog/0.1.x/0.1.0.md +19 -0
  6. package/changelog/0.1.x/0.1.1.md +27 -0
  7. package/changelog/0.1.x/0.1.2.md +22 -0
  8. package/changelog/0.2.x/0.2.0.md +35 -0
  9. package/changelog/0.2.x/0.2.1.md +36 -0
  10. package/changelog/0.3.x/0.3.0.md +38 -0
  11. package/changelog/0.3.x/0.3.1.md +40 -0
  12. package/changelog/0.3.x/0.3.2.md +29 -0
  13. package/changelog/0.3.x/0.3.3.md +19 -0
  14. package/changelog/0.3.x/0.3.4.md +33 -0
  15. package/changelog/0.3.x/0.3.5.md +24 -0
  16. package/changelog/template.md +51 -0
  17. package/dist/config/alias-credentials.d.ts +82 -0
  18. package/dist/config/alias-credentials.d.ts.map +1 -0
  19. package/dist/config/alias-credentials.js +159 -0
  20. package/dist/config/alias-credentials.js.map +1 -0
  21. package/dist/config/server-config.d.ts +39 -0
  22. package/dist/config/server-config.d.ts.map +1 -0
  23. package/dist/config/server-config.js +128 -0
  24. package/dist/config/server-config.js.map +1 -0
  25. package/dist/index.d.ts +10 -0
  26. package/dist/index.d.ts.map +1 -0
  27. package/dist/index.js +85 -0
  28. package/dist/index.js.map +1 -0
  29. package/dist/mcp-server/prompts/definitions/brapi-eda-study.prompt.d.ts +14 -0
  30. package/dist/mcp-server/prompts/definitions/brapi-eda-study.prompt.d.ts.map +1 -0
  31. package/dist/mcp-server/prompts/definitions/brapi-eda-study.prompt.js +75 -0
  32. package/dist/mcp-server/prompts/definitions/brapi-eda-study.prompt.js.map +1 -0
  33. package/dist/mcp-server/prompts/definitions/brapi-meta-analysis.prompt.d.ts +16 -0
  34. package/dist/mcp-server/prompts/definitions/brapi-meta-analysis.prompt.d.ts.map +1 -0
  35. package/dist/mcp-server/prompts/definitions/brapi-meta-analysis.prompt.js +109 -0
  36. package/dist/mcp-server/prompts/definitions/brapi-meta-analysis.prompt.js.map +1 -0
  37. package/dist/mcp-server/resources/definitions/brapi-calls.resource.d.ts +11 -0
  38. package/dist/mcp-server/resources/definitions/brapi-calls.resource.d.ts.map +1 -0
  39. package/dist/mcp-server/resources/definitions/brapi-calls.resource.js +46 -0
  40. package/dist/mcp-server/resources/definitions/brapi-calls.resource.js.map +1 -0
  41. package/dist/mcp-server/resources/definitions/brapi-dataset.resource.d.ts +13 -0
  42. package/dist/mcp-server/resources/definitions/brapi-dataset.resource.d.ts.map +1 -0
  43. package/dist/mcp-server/resources/definitions/brapi-dataset.resource.js +26 -0
  44. package/dist/mcp-server/resources/definitions/brapi-dataset.resource.js.map +1 -0
  45. package/dist/mcp-server/resources/definitions/brapi-filters.resource.d.ts +19 -0
  46. package/dist/mcp-server/resources/definitions/brapi-filters.resource.d.ts.map +1 -0
  47. package/dist/mcp-server/resources/definitions/brapi-filters.resource.js +45 -0
  48. package/dist/mcp-server/resources/definitions/brapi-filters.resource.js.map +1 -0
  49. package/dist/mcp-server/resources/definitions/brapi-germplasm.resource.d.ts +18 -0
  50. package/dist/mcp-server/resources/definitions/brapi-germplasm.resource.d.ts.map +1 -0
  51. package/dist/mcp-server/resources/definitions/brapi-germplasm.resource.js +34 -0
  52. package/dist/mcp-server/resources/definitions/brapi-germplasm.resource.js.map +1 -0
  53. package/dist/mcp-server/resources/definitions/brapi-server-info.resource.d.ts +11 -0
  54. package/dist/mcp-server/resources/definitions/brapi-server-info.resource.d.ts.map +1 -0
  55. package/dist/mcp-server/resources/definitions/brapi-server-info.resource.js +28 -0
  56. package/dist/mcp-server/resources/definitions/brapi-server-info.resource.js.map +1 -0
  57. package/dist/mcp-server/resources/definitions/brapi-study.resource.d.ts +18 -0
  58. package/dist/mcp-server/resources/definitions/brapi-study.resource.d.ts.map +1 -0
  59. package/dist/mcp-server/resources/definitions/brapi-study.resource.js +34 -0
  60. package/dist/mcp-server/resources/definitions/brapi-study.resource.js.map +1 -0
  61. package/dist/mcp-server/tools/definitions/brapi-connect.tool.d.ts +82 -0
  62. package/dist/mcp-server/tools/definitions/brapi-connect.tool.d.ts.map +1 -0
  63. package/dist/mcp-server/tools/definitions/brapi-connect.tool.js +106 -0
  64. package/dist/mcp-server/tools/definitions/brapi-connect.tool.js.map +1 -0
  65. package/dist/mcp-server/tools/definitions/brapi-describe-filters.tool.d.ts +41 -0
  66. package/dist/mcp-server/tools/definitions/brapi-describe-filters.tool.d.ts.map +1 -0
  67. package/dist/mcp-server/tools/definitions/brapi-describe-filters.tool.js +88 -0
  68. package/dist/mcp-server/tools/definitions/brapi-describe-filters.tool.js.map +1 -0
  69. package/dist/mcp-server/tools/definitions/brapi-find-genotype-calls.tool.d.ts +74 -0
  70. package/dist/mcp-server/tools/definitions/brapi-find-genotype-calls.tool.d.ts.map +1 -0
  71. package/dist/mcp-server/tools/definitions/brapi-find-genotype-calls.tool.js +386 -0
  72. package/dist/mcp-server/tools/definitions/brapi-find-genotype-calls.tool.js.map +1 -0
  73. package/dist/mcp-server/tools/definitions/brapi-find-germplasm.tool.d.ts +72 -0
  74. package/dist/mcp-server/tools/definitions/brapi-find-germplasm.tool.d.ts.map +1 -0
  75. package/dist/mcp-server/tools/definitions/brapi-find-germplasm.tool.js +290 -0
  76. package/dist/mcp-server/tools/definitions/brapi-find-germplasm.tool.js.map +1 -0
  77. package/dist/mcp-server/tools/definitions/brapi-find-images.tool.d.ts +65 -0
  78. package/dist/mcp-server/tools/definitions/brapi-find-images.tool.d.ts.map +1 -0
  79. package/dist/mcp-server/tools/definitions/brapi-find-images.tool.js +243 -0
  80. package/dist/mcp-server/tools/definitions/brapi-find-images.tool.js.map +1 -0
  81. package/dist/mcp-server/tools/definitions/brapi-find-locations.tool.d.ts +63 -0
  82. package/dist/mcp-server/tools/definitions/brapi-find-locations.tool.d.ts.map +1 -0
  83. package/dist/mcp-server/tools/definitions/brapi-find-locations.tool.js +278 -0
  84. package/dist/mcp-server/tools/definitions/brapi-find-locations.tool.js.map +1 -0
  85. package/dist/mcp-server/tools/definitions/brapi-find-observations.tool.d.ts +74 -0
  86. package/dist/mcp-server/tools/definitions/brapi-find-observations.tool.d.ts.map +1 -0
  87. package/dist/mcp-server/tools/definitions/brapi-find-observations.tool.js +288 -0
  88. package/dist/mcp-server/tools/definitions/brapi-find-observations.tool.js.map +1 -0
  89. package/dist/mcp-server/tools/definitions/brapi-find-studies.tool.d.ts +69 -0
  90. package/dist/mcp-server/tools/definitions/brapi-find-studies.tool.d.ts.map +1 -0
  91. package/dist/mcp-server/tools/definitions/brapi-find-studies.tool.js +243 -0
  92. package/dist/mcp-server/tools/definitions/brapi-find-studies.tool.js.map +1 -0
  93. package/dist/mcp-server/tools/definitions/brapi-find-variables.tool.d.ts +86 -0
  94. package/dist/mcp-server/tools/definitions/brapi-find-variables.tool.d.ts.map +1 -0
  95. package/dist/mcp-server/tools/definitions/brapi-find-variables.tool.js +337 -0
  96. package/dist/mcp-server/tools/definitions/brapi-find-variables.tool.js.map +1 -0
  97. package/dist/mcp-server/tools/definitions/brapi-find-variants.tool.d.ts +59 -0
  98. package/dist/mcp-server/tools/definitions/brapi-find-variants.tool.d.ts.map +1 -0
  99. package/dist/mcp-server/tools/definitions/brapi-find-variants.tool.js +248 -0
  100. package/dist/mcp-server/tools/definitions/brapi-find-variants.tool.js.map +1 -0
  101. package/dist/mcp-server/tools/definitions/brapi-get-germplasm.tool.d.ts +59 -0
  102. package/dist/mcp-server/tools/definitions/brapi-get-germplasm.tool.d.ts.map +1 -0
  103. package/dist/mcp-server/tools/definitions/brapi-get-germplasm.tool.js +306 -0
  104. package/dist/mcp-server/tools/definitions/brapi-get-germplasm.tool.js.map +1 -0
  105. package/dist/mcp-server/tools/definitions/brapi-get-image.tool.d.ts +57 -0
  106. package/dist/mcp-server/tools/definitions/brapi-get-image.tool.d.ts.map +1 -0
  107. package/dist/mcp-server/tools/definitions/brapi-get-image.tool.js +291 -0
  108. package/dist/mcp-server/tools/definitions/brapi-get-image.tool.js.map +1 -0
  109. package/dist/mcp-server/tools/definitions/brapi-get-study.tool.d.ts +75 -0
  110. package/dist/mcp-server/tools/definitions/brapi-get-study.tool.d.ts.map +1 -0
  111. package/dist/mcp-server/tools/definitions/brapi-get-study.tool.js +323 -0
  112. package/dist/mcp-server/tools/definitions/brapi-get-study.tool.js.map +1 -0
  113. package/dist/mcp-server/tools/definitions/brapi-manage-dataset.tool.d.ts +87 -0
  114. package/dist/mcp-server/tools/definitions/brapi-manage-dataset.tool.d.ts.map +1 -0
  115. package/dist/mcp-server/tools/definitions/brapi-manage-dataset.tool.js +296 -0
  116. package/dist/mcp-server/tools/definitions/brapi-manage-dataset.tool.js.map +1 -0
  117. package/dist/mcp-server/tools/definitions/brapi-raw-get.tool.d.ts +35 -0
  118. package/dist/mcp-server/tools/definitions/brapi-raw-get.tool.d.ts.map +1 -0
  119. package/dist/mcp-server/tools/definitions/brapi-raw-get.tool.js +148 -0
  120. package/dist/mcp-server/tools/definitions/brapi-raw-get.tool.js.map +1 -0
  121. package/dist/mcp-server/tools/definitions/brapi-raw-search.tool.d.ts +33 -0
  122. package/dist/mcp-server/tools/definitions/brapi-raw-search.tool.d.ts.map +1 -0
  123. package/dist/mcp-server/tools/definitions/brapi-raw-search.tool.js +126 -0
  124. package/dist/mcp-server/tools/definitions/brapi-raw-search.tool.js.map +1 -0
  125. package/dist/mcp-server/tools/definitions/brapi-server-info.tool.d.ts +51 -0
  126. package/dist/mcp-server/tools/definitions/brapi-server-info.tool.d.ts.map +1 -0
  127. package/dist/mcp-server/tools/definitions/brapi-server-info.tool.js +41 -0
  128. package/dist/mcp-server/tools/definitions/brapi-server-info.tool.js.map +1 -0
  129. package/dist/mcp-server/tools/definitions/brapi-submit-observations.tool.d.ts +117 -0
  130. package/dist/mcp-server/tools/definitions/brapi-submit-observations.tool.d.ts.map +1 -0
  131. package/dist/mcp-server/tools/definitions/brapi-submit-observations.tool.js +574 -0
  132. package/dist/mcp-server/tools/definitions/brapi-submit-observations.tool.js.map +1 -0
  133. package/dist/mcp-server/tools/definitions/brapi-walk-pedigree.tool.d.ts +52 -0
  134. package/dist/mcp-server/tools/definitions/brapi-walk-pedigree.tool.d.ts.map +1 -0
  135. package/dist/mcp-server/tools/definitions/brapi-walk-pedigree.tool.js +420 -0
  136. package/dist/mcp-server/tools/definitions/brapi-walk-pedigree.tool.js.map +1 -0
  137. package/dist/mcp-server/tools/shared/connect-auth-schema.d.ts +29 -0
  138. package/dist/mcp-server/tools/shared/connect-auth-schema.d.ts.map +1 -0
  139. package/dist/mcp-server/tools/shared/connect-auth-schema.js +55 -0
  140. package/dist/mcp-server/tools/shared/connect-auth-schema.js.map +1 -0
  141. package/dist/mcp-server/tools/shared/find-helpers.d.ts +143 -0
  142. package/dist/mcp-server/tools/shared/find-helpers.d.ts.map +1 -0
  143. package/dist/mcp-server/tools/shared/find-helpers.js +319 -0
  144. package/dist/mcp-server/tools/shared/find-helpers.js.map +1 -0
  145. package/dist/mcp-server/tools/shared/orientation-envelope.d.ts +97 -0
  146. package/dist/mcp-server/tools/shared/orientation-envelope.d.ts.map +1 -0
  147. package/dist/mcp-server/tools/shared/orientation-envelope.js +254 -0
  148. package/dist/mcp-server/tools/shared/orientation-envelope.js.map +1 -0
  149. package/dist/mcp-server/tools/shared/raw-routing-hints.d.ts +10 -0
  150. package/dist/mcp-server/tools/shared/raw-routing-hints.d.ts.map +1 -0
  151. package/dist/mcp-server/tools/shared/raw-routing-hints.js +46 -0
  152. package/dist/mcp-server/tools/shared/raw-routing-hints.js.map +1 -0
  153. package/dist/services/brapi-client/brapi-client.d.ts +76 -0
  154. package/dist/services/brapi-client/brapi-client.d.ts.map +1 -0
  155. package/dist/services/brapi-client/brapi-client.js +320 -0
  156. package/dist/services/brapi-client/brapi-client.js.map +1 -0
  157. package/dist/services/brapi-client/index.d.ts +9 -0
  158. package/dist/services/brapi-client/index.d.ts.map +1 -0
  159. package/dist/services/brapi-client/index.js +7 -0
  160. package/dist/services/brapi-client/index.js.map +1 -0
  161. package/dist/services/brapi-client/types.d.ts +82 -0
  162. package/dist/services/brapi-client/types.d.ts.map +1 -0
  163. package/dist/services/brapi-client/types.js +8 -0
  164. package/dist/services/brapi-client/types.js.map +1 -0
  165. package/dist/services/brapi-filters/catalog.d.ts +14 -0
  166. package/dist/services/brapi-filters/catalog.d.ts.map +1 -0
  167. package/dist/services/brapi-filters/catalog.js +490 -0
  168. package/dist/services/brapi-filters/catalog.js.map +1 -0
  169. package/dist/services/brapi-filters/index.d.ts +8 -0
  170. package/dist/services/brapi-filters/index.d.ts.map +1 -0
  171. package/dist/services/brapi-filters/index.js +7 -0
  172. package/dist/services/brapi-filters/index.js.map +1 -0
  173. package/dist/services/brapi-filters/types.d.ts +23 -0
  174. package/dist/services/brapi-filters/types.d.ts.map +1 -0
  175. package/dist/services/brapi-filters/types.js +9 -0
  176. package/dist/services/brapi-filters/types.js.map +1 -0
  177. package/dist/services/capability-registry/capability-registry.d.ts +51 -0
  178. package/dist/services/capability-registry/capability-registry.d.ts.map +1 -0
  179. package/dist/services/capability-registry/capability-registry.js +234 -0
  180. package/dist/services/capability-registry/capability-registry.js.map +1 -0
  181. package/dist/services/capability-registry/index.d.ts +9 -0
  182. package/dist/services/capability-registry/index.d.ts.map +1 -0
  183. package/dist/services/capability-registry/index.js +7 -0
  184. package/dist/services/capability-registry/index.js.map +1 -0
  185. package/dist/services/capability-registry/types.d.ts +67 -0
  186. package/dist/services/capability-registry/types.d.ts.map +1 -0
  187. package/dist/services/capability-registry/types.js +9 -0
  188. package/dist/services/capability-registry/types.js.map +1 -0
  189. package/dist/services/dataset-store/dataset-store.d.ts +35 -0
  190. package/dist/services/dataset-store/dataset-store.d.ts.map +1 -0
  191. package/dist/services/dataset-store/dataset-store.js +190 -0
  192. package/dist/services/dataset-store/dataset-store.js.map +1 -0
  193. package/dist/services/dataset-store/index.d.ts +8 -0
  194. package/dist/services/dataset-store/index.d.ts.map +1 -0
  195. package/dist/services/dataset-store/index.js +7 -0
  196. package/dist/services/dataset-store/index.js.map +1 -0
  197. package/dist/services/dataset-store/types.d.ts +65 -0
  198. package/dist/services/dataset-store/types.d.ts.map +1 -0
  199. package/dist/services/dataset-store/types.js +8 -0
  200. package/dist/services/dataset-store/types.js.map +1 -0
  201. package/dist/services/ontology-resolver/index.d.ts +8 -0
  202. package/dist/services/ontology-resolver/index.d.ts.map +1 -0
  203. package/dist/services/ontology-resolver/index.js +7 -0
  204. package/dist/services/ontology-resolver/index.js.map +1 -0
  205. package/dist/services/ontology-resolver/ontology-resolver.d.ts +49 -0
  206. package/dist/services/ontology-resolver/ontology-resolver.d.ts.map +1 -0
  207. package/dist/services/ontology-resolver/ontology-resolver.js +99 -0
  208. package/dist/services/ontology-resolver/ontology-resolver.js.map +1 -0
  209. package/dist/services/ontology-resolver/types.d.ts +38 -0
  210. package/dist/services/ontology-resolver/types.d.ts.map +1 -0
  211. package/dist/services/ontology-resolver/types.js +8 -0
  212. package/dist/services/ontology-resolver/types.js.map +1 -0
  213. package/dist/services/reference-data-cache/index.d.ts +9 -0
  214. package/dist/services/reference-data-cache/index.d.ts.map +1 -0
  215. package/dist/services/reference-data-cache/index.js +7 -0
  216. package/dist/services/reference-data-cache/index.js.map +1 -0
  217. package/dist/services/reference-data-cache/reference-data-cache.d.ts +31 -0
  218. package/dist/services/reference-data-cache/reference-data-cache.d.ts.map +1 -0
  219. package/dist/services/reference-data-cache/reference-data-cache.js +131 -0
  220. package/dist/services/reference-data-cache/reference-data-cache.js.map +1 -0
  221. package/dist/services/reference-data-cache/types.d.ts +42 -0
  222. package/dist/services/reference-data-cache/types.d.ts.map +1 -0
  223. package/dist/services/reference-data-cache/types.js +9 -0
  224. package/dist/services/reference-data-cache/types.js.map +1 -0
  225. package/dist/services/server-registry/index.d.ts +9 -0
  226. package/dist/services/server-registry/index.d.ts.map +1 -0
  227. package/dist/services/server-registry/index.js +7 -0
  228. package/dist/services/server-registry/index.js.map +1 -0
  229. package/dist/services/server-registry/server-registry.d.ts +57 -0
  230. package/dist/services/server-registry/server-registry.d.ts.map +1 -0
  231. package/dist/services/server-registry/server-registry.js +210 -0
  232. package/dist/services/server-registry/server-registry.js.map +1 -0
  233. package/dist/services/server-registry/types.d.ts +43 -0
  234. package/dist/services/server-registry/types.d.ts.map +1 -0
  235. package/dist/services/server-registry/types.js +10 -0
  236. package/dist/services/server-registry/types.js.map +1 -0
  237. package/package.json +86 -0
  238. package/server.json +99 -0
@@ -0,0 +1,65 @@
1
+ /**
2
+ * @fileoverview Dataset lifecycle types — provenance, metadata, paginated
3
+ * load responses. All JSON-serializable so they round-trip through `ctx.state`.
4
+ *
5
+ * @module services/dataset-store/types
6
+ */
7
+ export interface CreateDatasetInput {
8
+ /** BrAPI base URL the dataset was pulled from. */
9
+ baseUrl: string;
10
+ /** Optional column list; inferred from the first row when omitted. */
11
+ columns?: string[];
12
+ /** Cap the producer applied — number of rows that would have been pulled without truncation. Omit when no cap was applied. */
13
+ maxRows?: number;
14
+ /** Full query params / filter map — required for reproducibility. */
15
+ query: unknown;
16
+ /** Row payload. */
17
+ rows: Record<string, unknown>[];
18
+ /** Original tool / operation that produced the dataset (e.g. 'find_studies'). */
19
+ source: string;
20
+ /** True when the producer hit a cap before exhausting the upstream result set. */
21
+ truncated?: boolean;
22
+ }
23
+ export interface DatasetMetadata {
24
+ baseUrl: string;
25
+ columns: string[];
26
+ /** ISO 8601 create timestamp. */
27
+ createdAt: string;
28
+ datasetId: string;
29
+ /** ISO 8601 expiry — when the TTL will evict the dataset. */
30
+ expiresAt: string;
31
+ /** Cap that was applied at create time. Omitted when none. */
32
+ maxRows?: number;
33
+ query: unknown;
34
+ rowCount: number;
35
+ /** Serialized payload size in bytes (UTF-8 JSON). */
36
+ sizeBytes: number;
37
+ source: string;
38
+ /** True when the dataset rows were capped before exhausting upstream. */
39
+ truncated?: boolean;
40
+ }
41
+ export interface DatasetLoadOptions {
42
+ /** Subset of columns to return. Omitted → all columns. */
43
+ columns?: string[];
44
+ /** 1-indexed page number. Default 1. */
45
+ page?: number;
46
+ /** Rows per page. Default 100, max 1000. */
47
+ pageSize?: number;
48
+ }
49
+ export interface DatasetPage {
50
+ datasetId: string;
51
+ page: number;
52
+ pageSize: number;
53
+ rows: Record<string, unknown>[];
54
+ totalPages: number;
55
+ totalRows: number;
56
+ }
57
+ export interface DatasetListOptions {
58
+ cursor?: string;
59
+ limit?: number;
60
+ }
61
+ export interface DatasetListPage {
62
+ cursor?: string;
63
+ datasets: DatasetMetadata[];
64
+ }
65
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/services/dataset-store/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,kBAAkB;IACjC,kDAAkD;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,sEAAsE;IACtE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,8HAA8H;IAC9H,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qEAAqE;IACrE,KAAK,EAAE,OAAO,CAAC;IACf,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAChC,iFAAiF;IACjF,MAAM,EAAE,MAAM,CAAC;IACf,kFAAkF;IAClF,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,iCAAiC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,6DAA6D;IAC7D,SAAS,EAAE,MAAM,CAAC;IAClB,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,qDAAqD;IACrD,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,yEAAyE;IACzE,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IACjC,0DAA0D;IAC1D,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,wCAAwC;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,eAAe,EAAE,CAAC;CAC7B"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @fileoverview Dataset lifecycle types — provenance, metadata, paginated
3
+ * load responses. All JSON-serializable so they round-trip through `ctx.state`.
4
+ *
5
+ * @module services/dataset-store/types
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/services/dataset-store/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @fileoverview Public API barrel for the OntologyResolver service.
3
+ *
4
+ * @module services/ontology-resolver
5
+ */
6
+ export { getOntologyResolver, initOntologyResolver, OntologyResolver, resetOntologyResolver, type VariableLike, } from './ontology-resolver.js';
7
+ export type { OntologyCandidate, ResolveOptions } from './types.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/ontology-resolver/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,gBAAgB,EAChB,qBAAqB,EACrB,KAAK,YAAY,GAClB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @fileoverview Public API barrel for the OntologyResolver service.
3
+ *
4
+ * @module services/ontology-resolver
5
+ */
6
+ export { getOntologyResolver, initOntologyResolver, OntologyResolver, resetOntologyResolver, } from './ontology-resolver.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/ontology-resolver/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,gBAAgB,EAChB,qBAAqB,GAEtB,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * @fileoverview Free-text → ontology-term matcher for observation variables.
3
+ * The default backend scores each variable record against the query using
4
+ * substring + synonym matching; no network I/O of its own (variable lists
5
+ * are fetched upstream by the caller). Designed to be swappable — embedding-
6
+ * backed implementations can replace this one without changing the tool
7
+ * surface.
8
+ *
9
+ * @module services/ontology-resolver/ontology-resolver
10
+ */
11
+ import type { OntologyCandidate, ResolveOptions } from './types.js';
12
+ /**
13
+ * Loose shape of a BrAPI observation-variable record. Every field is
14
+ * optional because server implementations vary in what they populate.
15
+ */
16
+ export interface VariableLike {
17
+ method?: {
18
+ methodName?: string;
19
+ };
20
+ observationVariableDbId?: string;
21
+ observationVariableName?: string;
22
+ observationVariablePUI?: string;
23
+ ontologyDbId?: string;
24
+ ontologyName?: string;
25
+ scale?: {
26
+ scaleName?: string;
27
+ };
28
+ synonyms?: string[] | undefined;
29
+ trait?: {
30
+ traitClass?: string;
31
+ description?: string;
32
+ name?: string;
33
+ synonyms?: string[];
34
+ };
35
+ }
36
+ export declare class OntologyResolver {
37
+ /**
38
+ * Rank a pool of variables against a free-text query. Returns up to
39
+ * `limit` candidates sorted by match quality (exact PUI > name match >
40
+ * synonym match). When the query is empty, returns the pool unchanged
41
+ * (up to the limit).
42
+ */
43
+ match(query: string, variables: readonly VariableLike[], options?: ResolveOptions): OntologyCandidate[];
44
+ private scoreOne;
45
+ }
46
+ export declare function initOntologyResolver(): void;
47
+ export declare function getOntologyResolver(): OntologyResolver;
48
+ export declare function resetOntologyResolver(): void;
49
+ //# sourceMappingURL=ontology-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ontology-resolver.d.ts","sourceRoot":"","sources":["../../../src/services/ontology-resolver/ontology-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEpE;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACjC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAChC,KAAK,CAAC,EAAE;QACN,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;CACH;AAED,qBAAa,gBAAgB;IAC3B;;;;;OAKG;IACH,KAAK,CACH,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,SAAS,YAAY,EAAE,EAClC,OAAO,GAAE,cAAmB,GAC3B,iBAAiB,EAAE;IAoBtB,OAAO,CAAC,QAAQ;CA4CjB;AAmBD,wBAAgB,oBAAoB,IAAI,IAAI,CAE3C;AAED,wBAAgB,mBAAmB,IAAI,gBAAgB,CAKtD;AAED,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C"}
@@ -0,0 +1,99 @@
1
+ /**
2
+ * @fileoverview Free-text → ontology-term matcher for observation variables.
3
+ * The default backend scores each variable record against the query using
4
+ * substring + synonym matching; no network I/O of its own (variable lists
5
+ * are fetched upstream by the caller). Designed to be swappable — embedding-
6
+ * backed implementations can replace this one without changing the tool
7
+ * surface.
8
+ *
9
+ * @module services/ontology-resolver/ontology-resolver
10
+ */
11
+ export class OntologyResolver {
12
+ /**
13
+ * Rank a pool of variables against a free-text query. Returns up to
14
+ * `limit` candidates sorted by match quality (exact PUI > name match >
15
+ * synonym match). When the query is empty, returns the pool unchanged
16
+ * (up to the limit).
17
+ */
18
+ match(query, variables, options = {}) {
19
+ const limit = options.limit ?? 10;
20
+ const normalized = query.trim().toLowerCase();
21
+ if (!normalized) {
22
+ return variables.slice(0, limit).map((v) => toCandidate(v, 'nameMatch'));
23
+ }
24
+ const scored = [];
25
+ for (const variable of variables) {
26
+ if (options.ontologyDbId && variable.ontologyDbId !== options.ontologyDbId)
27
+ continue;
28
+ const match = this.scoreOne(variable, normalized);
29
+ if (match)
30
+ scored.push(match);
31
+ }
32
+ scored.sort((a, b) => b.score - a.score);
33
+ return scored.slice(0, limit).map((s) => s.candidate);
34
+ }
35
+ scoreOne(variable, query) {
36
+ const pui = variable.observationVariablePUI?.toLowerCase();
37
+ if (pui && pui === query) {
38
+ return { candidate: toCandidate(variable, 'puiMatch'), score: 100 };
39
+ }
40
+ const name = variable.observationVariableName?.toLowerCase();
41
+ if (name) {
42
+ if (name === query)
43
+ return { candidate: toCandidate(variable, 'nameMatch'), score: 90 };
44
+ if (name.includes(query))
45
+ return { candidate: toCandidate(variable, 'nameMatch'), score: 60 };
46
+ }
47
+ const synonymMatch = variable.synonyms?.find((s) => s.toLowerCase().includes(query));
48
+ if (synonymMatch) {
49
+ return { candidate: toCandidate(variable, 'synonymMatch'), score: 50 };
50
+ }
51
+ const traitSynonymMatch = variable.trait?.synonyms?.find((s) => s.toLowerCase().includes(query));
52
+ if (traitSynonymMatch) {
53
+ return { candidate: toCandidate(variable, 'synonymMatch'), score: 40 };
54
+ }
55
+ const traitName = variable.trait?.name?.toLowerCase();
56
+ if (traitName?.includes(query)) {
57
+ return { candidate: toCandidate(variable, 'nameMatch'), score: 35 };
58
+ }
59
+ const traitClass = variable.trait?.traitClass?.toLowerCase();
60
+ if (traitClass && traitClass === query) {
61
+ return { candidate: toCandidate(variable, 'traitClassMatch'), score: 30 };
62
+ }
63
+ const traitDescription = variable.trait?.description?.toLowerCase();
64
+ if (traitDescription?.includes(query)) {
65
+ return { candidate: toCandidate(variable, 'nameMatch'), score: 20 };
66
+ }
67
+ return;
68
+ }
69
+ }
70
+ function toCandidate(variable, source) {
71
+ const candidate = { source };
72
+ if (variable.observationVariablePUI)
73
+ candidate.termId = variable.observationVariablePUI;
74
+ const name = variable.observationVariableName ?? variable.trait?.name;
75
+ if (name)
76
+ candidate.name = name;
77
+ if (variable.trait?.description)
78
+ candidate.description = variable.trait.description;
79
+ if (variable.ontologyDbId)
80
+ candidate.ontologyDbId = variable.ontologyDbId;
81
+ const combinedSynonyms = [...(variable.synonyms ?? []), ...(variable.trait?.synonyms ?? [])];
82
+ if (combinedSynonyms.length > 0)
83
+ candidate.synonyms = Array.from(new Set(combinedSynonyms));
84
+ return candidate;
85
+ }
86
+ let _resolver;
87
+ export function initOntologyResolver() {
88
+ _resolver = new OntologyResolver();
89
+ }
90
+ export function getOntologyResolver() {
91
+ if (!_resolver) {
92
+ throw new Error('OntologyResolver not initialized — call initOntologyResolver() in setup()');
93
+ }
94
+ return _resolver;
95
+ }
96
+ export function resetOntologyResolver() {
97
+ _resolver = undefined;
98
+ }
99
+ //# sourceMappingURL=ontology-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ontology-resolver.js","sourceRoot":"","sources":["../../../src/services/ontology-resolver/ontology-resolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * @fileoverview Types for OntologyResolver — resolved ontology-URI candidates
3
+ * with score and source attribution.
4
+ *
5
+ * @module services/ontology-resolver/types
6
+ */
7
+ /**
8
+ * One candidate match returned by `OntologyResolver.resolve`. `source`
9
+ * reports how the match was produced so downstream tooling can surface the
10
+ * degradation path to users (e.g. "substring match — server has no /ontologies").
11
+ */
12
+ export interface OntologyCandidate {
13
+ /** Short definition or description, when available. */
14
+ description?: string;
15
+ /** Display name of the trait/variable/term. */
16
+ name?: string;
17
+ /** Originating ontology (e.g. "CO_334"). */
18
+ ontologyDbId?: string;
19
+ /**
20
+ * How the candidate was surfaced:
21
+ * - `puiMatch` — exact match on `observationVariablePUIs`
22
+ * - `nameMatch` — substring match on `observationVariableNames`
23
+ * - `synonymMatch` — match on a registered synonym
24
+ * - `traitClassMatch` — match via trait class
25
+ */
26
+ source: 'puiMatch' | 'nameMatch' | 'synonymMatch' | 'traitClassMatch';
27
+ /** Synonyms registered for this term. */
28
+ synonyms?: string[];
29
+ /** Persistent ontology URI or term ID (e.g. "CO_334:0000013"). */
30
+ termId?: string;
31
+ }
32
+ export interface ResolveOptions {
33
+ /** Max candidates to return. Default 10. */
34
+ limit?: number;
35
+ /** Optional ontology scope (e.g. "CO_334"). */
36
+ ontologyDbId?: string;
37
+ }
38
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/services/ontology-resolver/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,uDAAuD;IACvD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+CAA+C;IAC/C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,4CAA4C;IAC5C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;;OAMG;IACH,MAAM,EAAE,UAAU,GAAG,WAAW,GAAG,cAAc,GAAG,iBAAiB,CAAC;IACtE,yCAAyC;IACzC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,kEAAkE;IAClE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @fileoverview Types for OntologyResolver — resolved ontology-URI candidates
3
+ * with score and source attribution.
4
+ *
5
+ * @module services/ontology-resolver/types
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/services/ontology-resolver/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @fileoverview Public API barrel for the ReferenceDataCache service.
3
+ *
4
+ * @module services/reference-data-cache
5
+ */
6
+ export type { ReferenceLookupOptions } from './reference-data-cache.js';
7
+ export { getReferenceDataCache, initReferenceDataCache, ReferenceDataCache, resetReferenceDataCache, } from './reference-data-cache.js';
8
+ export type { Location, Program, Trial } from './types.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/reference-data-cache/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,YAAY,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,kBAAkB,EAClB,uBAAuB,GACxB,MAAM,2BAA2B,CAAC;AACnC,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @fileoverview Public API barrel for the ReferenceDataCache service.
3
+ *
4
+ * @module services/reference-data-cache
5
+ */
6
+ export { getReferenceDataCache, initReferenceDataCache, ReferenceDataCache, resetReferenceDataCache, } from './reference-data-cache.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/reference-data-cache/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,kBAAkB,EAClB,uBAAuB,GACxB,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * @fileoverview Per-connection batch cache for BrAPI reference nouns —
3
+ * programs, trials, locations. Used by tools (e.g. `find_studies`) to
4
+ * resolve foreign keys in a single upstream call per noun instead of N+1
5
+ * per-row lookups. Cache keys are tenant-scoped via `ctx.state` with TTL
6
+ * from `BRAPI_REFERENCE_CACHE_TTL_SECONDS`.
7
+ *
8
+ * @module services/reference-data-cache/reference-data-cache
9
+ */
10
+ import type { Context } from '@cyanheads/mcp-ts-core';
11
+ import type { ServerConfig } from '../../config/server-config.js';
12
+ import { type BrapiClient, type BrapiRequestOptions } from '../../services/brapi-client/index.js';
13
+ import type { Location, Program, Trial } from './types.js';
14
+ export type ReferenceLookupOptions = Pick<BrapiRequestOptions, 'auth'>;
15
+ export declare class ReferenceDataCache {
16
+ private readonly serverConfig;
17
+ private readonly client;
18
+ constructor(serverConfig: ServerConfig, client?: () => BrapiClient);
19
+ getPrograms(baseUrl: string, programDbIds: readonly string[], ctx: Context, options?: ReferenceLookupOptions): Promise<Map<string, Program>>;
20
+ getTrials(baseUrl: string, trialDbIds: readonly string[], ctx: Context, options?: ReferenceLookupOptions): Promise<Map<string, Trial>>;
21
+ getLocations(baseUrl: string, locationDbIds: readonly string[], ctx: Context, options?: ReferenceLookupOptions): Promise<Map<string, Location>>;
22
+ /** Drop every cached entry for a base URL across all reference nouns. */
23
+ invalidate(baseUrl: string, ctx: Context): Promise<void>;
24
+ private batchResolve;
25
+ private fetchBatch;
26
+ private deletePrefix;
27
+ }
28
+ export declare function initReferenceDataCache(serverConfig: ServerConfig): void;
29
+ export declare function getReferenceDataCache(): ReferenceDataCache;
30
+ export declare function resetReferenceDataCache(): void;
31
+ //# sourceMappingURL=reference-data-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reference-data-cache.d.ts","sourceRoot":"","sources":["../../../src/services/reference-data-cache/reference-data-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EACL,KAAK,WAAW,EAEhB,KAAK,mBAAmB,EAEzB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAE3D,MAAM,MAAM,sBAAsB,GAAG,IAAI,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC;AA8BvE,qBAAa,kBAAkB;IAE3B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,YAAY,EAAE,YAAY,EAC1B,MAAM,GAAE,MAAM,WAA4B;IAG7D,WAAW,CACT,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,SAAS,MAAM,EAAE,EAC/B,GAAG,EAAE,OAAO,EACZ,OAAO,CAAC,EAAE,sBAAsB,GAC/B,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAIhC,SAAS,CACP,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,SAAS,MAAM,EAAE,EAC7B,GAAG,EAAE,OAAO,EACZ,OAAO,CAAC,EAAE,sBAAsB,GAC/B,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAI9B,YAAY,CACV,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,SAAS,MAAM,EAAE,EAChC,GAAG,EAAE,OAAO,EACZ,OAAO,CAAC,EAAE,sBAAsB,GAC/B,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAIjC,yEAAyE;IACnE,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;YAShD,YAAY;YAsCZ,UAAU;YAoBV,YAAY;CAY3B;AAiBD,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI,CAEvE;AAED,wBAAgB,qBAAqB,IAAI,kBAAkB,CAO1D;AAED,wBAAgB,uBAAuB,IAAI,IAAI,CAE9C"}
@@ -0,0 +1,131 @@
1
+ /**
2
+ * @fileoverview Per-connection batch cache for BrAPI reference nouns —
3
+ * programs, trials, locations. Used by tools (e.g. `find_studies`) to
4
+ * resolve foreign keys in a single upstream call per noun instead of N+1
5
+ * per-row lookups. Cache keys are tenant-scoped via `ctx.state` with TTL
6
+ * from `BRAPI_REFERENCE_CACHE_TTL_SECONDS`.
7
+ *
8
+ * @module services/reference-data-cache/reference-data-cache
9
+ */
10
+ import { getBrapiClient, } from '../../services/brapi-client/index.js';
11
+ const PROGRAM_CFG = {
12
+ endpoint: '/programs',
13
+ idFilter: 'programDbIds',
14
+ idField: 'programDbId',
15
+ cachePrefix: 'program',
16
+ };
17
+ const TRIAL_CFG = {
18
+ endpoint: '/trials',
19
+ idFilter: 'trialDbIds',
20
+ idField: 'trialDbId',
21
+ cachePrefix: 'trial',
22
+ };
23
+ const LOCATION_CFG = {
24
+ endpoint: '/locations',
25
+ idFilter: 'locationDbIds',
26
+ idField: 'locationDbId',
27
+ cachePrefix: 'location',
28
+ };
29
+ export class ReferenceDataCache {
30
+ serverConfig;
31
+ client;
32
+ constructor(serverConfig, client = getBrapiClient) {
33
+ this.serverConfig = serverConfig;
34
+ this.client = client;
35
+ }
36
+ getPrograms(baseUrl, programDbIds, ctx, options) {
37
+ return this.batchResolve(PROGRAM_CFG, baseUrl, programDbIds, ctx, options);
38
+ }
39
+ getTrials(baseUrl, trialDbIds, ctx, options) {
40
+ return this.batchResolve(TRIAL_CFG, baseUrl, trialDbIds, ctx, options);
41
+ }
42
+ getLocations(baseUrl, locationDbIds, ctx, options) {
43
+ return this.batchResolve(LOCATION_CFG, baseUrl, locationDbIds, ctx, options);
44
+ }
45
+ /** Drop every cached entry for a base URL across all reference nouns. */
46
+ async invalidate(baseUrl, ctx) {
47
+ const serverSlug = sanitizeKey(baseUrl);
48
+ await Promise.all([
49
+ this.deletePrefix(ctx, `brapi/ref/${PROGRAM_CFG.cachePrefix}/${serverSlug}/`),
50
+ this.deletePrefix(ctx, `brapi/ref/${TRIAL_CFG.cachePrefix}/${serverSlug}/`),
51
+ this.deletePrefix(ctx, `brapi/ref/${LOCATION_CFG.cachePrefix}/${serverSlug}/`),
52
+ ]);
53
+ }
54
+ async batchResolve(cfg, baseUrl, ids, ctx, options = {}) {
55
+ if (ids.length === 0)
56
+ return new Map();
57
+ const uniqueIds = Array.from(new Set(ids));
58
+ const serverSlug = sanitizeKey(baseUrl);
59
+ const keyFor = (id) => `brapi/ref/${cfg.cachePrefix}/${serverSlug}/${id}`;
60
+ const cached = await ctx.state.getMany(uniqueIds.map(keyFor));
61
+ const results = new Map();
62
+ const missing = [];
63
+ for (const id of uniqueIds) {
64
+ const hit = cached.get(keyFor(id));
65
+ if (hit)
66
+ results.set(id, hit);
67
+ else
68
+ missing.push(id);
69
+ }
70
+ if (missing.length === 0)
71
+ return results;
72
+ const fetched = await this.fetchBatch(cfg, baseUrl, missing, ctx, options);
73
+ const ttl = this.serverConfig.referenceCacheTtlSeconds;
74
+ await Promise.all(fetched.map(async (item) => {
75
+ const id = String(item[cfg.idField] ?? '');
76
+ if (!id)
77
+ return;
78
+ await ctx.state.set(keyFor(id), item, { ttl });
79
+ results.set(id, item);
80
+ }));
81
+ return results;
82
+ }
83
+ async fetchBatch(cfg, baseUrl, ids, ctx, options) {
84
+ const requestOptions = {
85
+ params: { [cfg.idFilter]: ids, pageSize: ids.length },
86
+ };
87
+ if (options.auth)
88
+ requestOptions.auth = options.auth;
89
+ const env = await this.client().get(baseUrl, cfg.endpoint, ctx, requestOptions);
90
+ return extractDataArray(env);
91
+ }
92
+ async deletePrefix(ctx, prefix) {
93
+ let cursor;
94
+ do {
95
+ const listOpts = { limit: 100 };
96
+ if (cursor !== undefined)
97
+ listOpts.cursor = cursor;
98
+ const page = await ctx.state.list(prefix, listOpts);
99
+ if (page.items.length > 0) {
100
+ await ctx.state.deleteMany(page.items.map((item) => item.key));
101
+ }
102
+ cursor = page.cursor;
103
+ } while (cursor);
104
+ }
105
+ }
106
+ function extractDataArray(envelope) {
107
+ const result = envelope.result;
108
+ if (Array.isArray(result))
109
+ return result;
110
+ if (result && typeof result === 'object' && 'data' in result && Array.isArray(result.data)) {
111
+ return result.data;
112
+ }
113
+ return [];
114
+ }
115
+ function sanitizeKey(value) {
116
+ return value.replace(/[^a-zA-Z0-9]/g, '-');
117
+ }
118
+ let _cache;
119
+ export function initReferenceDataCache(serverConfig) {
120
+ _cache = new ReferenceDataCache(serverConfig);
121
+ }
122
+ export function getReferenceDataCache() {
123
+ if (!_cache) {
124
+ throw new Error('ReferenceDataCache not initialized — call initReferenceDataCache() in setup()');
125
+ }
126
+ return _cache;
127
+ }
128
+ export function resetReferenceDataCache() {
129
+ _cache = undefined;
130
+ }
131
+ //# sourceMappingURL=reference-data-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reference-data-cache.js","sourceRoot":"","sources":["../../../src/services/reference-data-cache/reference-data-cache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * @fileoverview Reference-data shapes for FK resolution — programs, trials,
3
+ * locations. Every non-id field is optional because BrAPI server
4
+ * implementations vary wildly in what they populate.
5
+ *
6
+ * @module services/reference-data-cache/types
7
+ */
8
+ export interface Program {
9
+ abbreviation?: string;
10
+ commonCropName?: string;
11
+ documentationURL?: string;
12
+ leadPersonDbId?: string;
13
+ leadPersonName?: string;
14
+ objective?: string;
15
+ programDbId: string;
16
+ programName?: string;
17
+ }
18
+ export interface Trial {
19
+ active?: boolean;
20
+ commonCropName?: string;
21
+ documentationURL?: string;
22
+ endDate?: string;
23
+ programDbId?: string;
24
+ programName?: string;
25
+ startDate?: string;
26
+ trialDbId: string;
27
+ trialDescription?: string;
28
+ trialName?: string;
29
+ }
30
+ export interface Location {
31
+ abbreviation?: string;
32
+ altitude?: number;
33
+ countryCode?: string;
34
+ countryName?: string;
35
+ documentationURL?: string;
36
+ latitude?: number;
37
+ locationDbId: string;
38
+ locationName?: string;
39
+ locationType?: string;
40
+ longitude?: number;
41
+ }
42
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/services/reference-data-cache/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,OAAO;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,KAAK;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,QAAQ;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @fileoverview Reference-data shapes for FK resolution — programs, trials,
3
+ * locations. Every non-id field is optional because BrAPI server
4
+ * implementations vary wildly in what they populate.
5
+ *
6
+ * @module services/reference-data-cache/types
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/services/reference-data-cache/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @fileoverview Public API barrel for the ServerRegistry service.
3
+ *
4
+ * @module services/server-registry
5
+ */
6
+ export type { RegisterInput, TokenFetcher } from './server-registry.js';
7
+ export { DEFAULT_ALIAS, getServerRegistry, initServerRegistry, resetServerRegistry, ServerRegistry, } from './server-registry.js';
8
+ export type { AuthMode, ConnectAuth, RegisteredServer } from './types.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/server-registry/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACxE,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,GACf,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @fileoverview Public API barrel for the ServerRegistry service.
3
+ *
4
+ * @module services/server-registry
5
+ */
6
+ export { DEFAULT_ALIAS, getServerRegistry, initServerRegistry, resetServerRegistry, ServerRegistry, } from './server-registry.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/server-registry/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,GACf,MAAM,sBAAsB,CAAC"}