@get-technology-inc/jamf-docs-mcp-server 3.0.6 → 3.0.8

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 (190) hide show
  1. package/README.md +37 -2
  2. package/dist/core/constants/doc-types.d.ts +48 -0
  3. package/dist/core/constants/doc-types.d.ts.map +1 -0
  4. package/dist/core/constants/doc-types.js +58 -0
  5. package/dist/core/constants/doc-types.js.map +1 -0
  6. package/dist/core/constants/index.d.ts +16 -0
  7. package/dist/core/constants/index.d.ts.map +1 -0
  8. package/dist/core/constants/index.js +12 -0
  9. package/dist/core/constants/index.js.map +1 -0
  10. package/dist/core/constants/limits.d.ts +39 -0
  11. package/dist/core/constants/limits.d.ts.map +1 -0
  12. package/dist/core/constants/limits.js +51 -0
  13. package/dist/core/constants/limits.js.map +1 -0
  14. package/dist/core/constants/locales.d.ts +34 -0
  15. package/dist/core/constants/locales.d.ts.map +1 -0
  16. package/dist/core/constants/locales.js +20 -0
  17. package/dist/core/constants/locales.js.map +1 -0
  18. package/dist/core/constants/products.d.ts +127 -0
  19. package/dist/core/constants/products.d.ts.map +1 -0
  20. package/dist/core/constants/products.js +135 -0
  21. package/dist/core/constants/products.js.map +1 -0
  22. package/dist/core/constants/topics.d.ts +168 -0
  23. package/dist/core/constants/topics.d.ts.map +1 -0
  24. package/dist/core/constants/topics.js +186 -0
  25. package/dist/core/constants/topics.js.map +1 -0
  26. package/dist/core/constants.d.ts +7 -404
  27. package/dist/core/constants.d.ts.map +1 -1
  28. package/dist/core/constants.js +16 -427
  29. package/dist/core/constants.js.map +1 -1
  30. package/dist/core/http-client.d.ts +14 -2
  31. package/dist/core/http-client.d.ts.map +1 -1
  32. package/dist/core/http-client.js +148 -17
  33. package/dist/core/http-client.js.map +1 -1
  34. package/dist/core/index.d.ts +12 -12
  35. package/dist/core/index.d.ts.map +1 -1
  36. package/dist/core/index.js +12 -13
  37. package/dist/core/index.js.map +1 -1
  38. package/dist/core/resources/index.js +1 -1
  39. package/dist/core/resources/index.js.map +1 -1
  40. package/dist/core/schemas/index.d.ts +3 -1
  41. package/dist/core/schemas/index.d.ts.map +1 -1
  42. package/dist/core/schemas/index.js +13 -3
  43. package/dist/core/schemas/index.js.map +1 -1
  44. package/dist/core/schemas/output.d.ts +7 -0
  45. package/dist/core/schemas/output.d.ts.map +1 -1
  46. package/dist/core/schemas/output.js +7 -0
  47. package/dist/core/schemas/output.js.map +1 -1
  48. package/dist/core/services/article-service.d.ts +24 -0
  49. package/dist/core/services/article-service.d.ts.map +1 -0
  50. package/dist/core/services/article-service.js +140 -0
  51. package/dist/core/services/article-service.js.map +1 -0
  52. package/dist/core/services/content-parser.d.ts +38 -0
  53. package/dist/core/services/content-parser.d.ts.map +1 -0
  54. package/dist/core/services/content-parser.js +148 -0
  55. package/dist/core/services/content-parser.js.map +1 -0
  56. package/dist/core/services/ft-client.d.ts +52 -0
  57. package/dist/core/services/ft-client.d.ts.map +1 -0
  58. package/dist/core/services/ft-client.js +87 -0
  59. package/dist/core/services/ft-client.js.map +1 -0
  60. package/dist/core/services/glossary.d.ts +9 -5
  61. package/dist/core/services/glossary.d.ts.map +1 -1
  62. package/dist/core/services/glossary.js +175 -108
  63. package/dist/core/services/glossary.js.map +1 -1
  64. package/dist/core/services/interfaces/cache.d.ts +6 -6
  65. package/dist/core/services/interfaces/cache.d.ts.map +1 -1
  66. package/dist/core/services/interfaces/index.d.ts +3 -3
  67. package/dist/core/services/interfaces/index.d.ts.map +1 -1
  68. package/dist/core/services/interfaces/logger.d.ts +17 -10
  69. package/dist/core/services/interfaces/logger.d.ts.map +1 -1
  70. package/dist/core/services/interfaces/metadata.d.ts +0 -10
  71. package/dist/core/services/interfaces/metadata.d.ts.map +1 -1
  72. package/dist/core/services/interfaces/providers.d.ts +23 -10
  73. package/dist/core/services/interfaces/providers.d.ts.map +1 -1
  74. package/dist/core/services/logging.d.ts +38 -18
  75. package/dist/core/services/logging.d.ts.map +1 -1
  76. package/dist/core/services/logging.js +78 -29
  77. package/dist/core/services/logging.js.map +1 -1
  78. package/dist/core/services/maps-registry.d.ts +82 -0
  79. package/dist/core/services/maps-registry.d.ts.map +1 -0
  80. package/dist/core/services/maps-registry.js +232 -0
  81. package/dist/core/services/maps-registry.js.map +1 -0
  82. package/dist/core/services/metadata.d.ts +18 -9
  83. package/dist/core/services/metadata.d.ts.map +1 -1
  84. package/dist/core/services/metadata.js +113 -254
  85. package/dist/core/services/metadata.js.map +1 -1
  86. package/dist/core/services/search-service.d.ts +31 -0
  87. package/dist/core/services/search-service.d.ts.map +1 -0
  88. package/dist/core/services/search-service.js +462 -0
  89. package/dist/core/services/search-service.js.map +1 -0
  90. package/dist/core/services/toc-service.d.ts +30 -0
  91. package/dist/core/services/toc-service.d.ts.map +1 -0
  92. package/dist/core/services/toc-service.js +107 -0
  93. package/dist/core/services/toc-service.js.map +1 -0
  94. package/dist/core/services/tokenizer.d.ts +20 -1
  95. package/dist/core/services/tokenizer.d.ts.map +1 -1
  96. package/dist/core/services/tokenizer.js +32 -4
  97. package/dist/core/services/tokenizer.js.map +1 -1
  98. package/dist/core/services/topic-resolver.d.ts +74 -0
  99. package/dist/core/services/topic-resolver.d.ts.map +1 -0
  100. package/dist/core/services/topic-resolver.js +191 -0
  101. package/dist/core/services/topic-resolver.js.map +1 -0
  102. package/dist/core/tools/batch-get-articles.d.ts +0 -2
  103. package/dist/core/tools/batch-get-articles.d.ts.map +1 -1
  104. package/dist/core/tools/batch-get-articles.js +18 -46
  105. package/dist/core/tools/batch-get-articles.js.map +1 -1
  106. package/dist/core/tools/get-article.d.ts.map +1 -1
  107. package/dist/core/tools/get-article.js +29 -112
  108. package/dist/core/tools/get-article.js.map +1 -1
  109. package/dist/core/tools/get-toc.js +1 -1
  110. package/dist/core/tools/get-toc.js.map +1 -1
  111. package/dist/core/tools/glossary-lookup.d.ts.map +1 -1
  112. package/dist/core/tools/glossary-lookup.js +26 -7
  113. package/dist/core/tools/glossary-lookup.js.map +1 -1
  114. package/dist/core/tools/list-products.d.ts.map +1 -1
  115. package/dist/core/tools/list-products.js +5 -3
  116. package/dist/core/tools/list-products.js.map +1 -1
  117. package/dist/core/tools/search.js +5 -5
  118. package/dist/core/tools/search.js.map +1 -1
  119. package/dist/core/types/context.d.ts +5 -2
  120. package/dist/core/types/context.d.ts.map +1 -1
  121. package/dist/core/types.d.ts +141 -31
  122. package/dist/core/types.d.ts.map +1 -1
  123. package/dist/core/types.js.map +1 -1
  124. package/dist/core/utils/bundle.d.ts +14 -1
  125. package/dist/core/utils/bundle.d.ts.map +1 -1
  126. package/dist/core/utils/bundle.js +19 -2
  127. package/dist/core/utils/bundle.js.map +1 -1
  128. package/dist/core/utils/format-article.d.ts +49 -0
  129. package/dist/core/utils/format-article.d.ts.map +1 -0
  130. package/dist/core/utils/format-article.js +188 -0
  131. package/dist/core/utils/format-article.js.map +1 -0
  132. package/dist/core/utils/ft-metadata.d.ts +22 -0
  133. package/dist/core/utils/ft-metadata.d.ts.map +1 -0
  134. package/dist/core/utils/ft-metadata.js +30 -0
  135. package/dist/core/utils/ft-metadata.js.map +1 -0
  136. package/dist/core/utils/sanitize.d.ts.map +1 -1
  137. package/dist/core/utils/sanitize.js +0 -2
  138. package/dist/core/utils/sanitize.js.map +1 -1
  139. package/dist/core/utils/url.d.ts.map +1 -1
  140. package/dist/core/utils/url.js +0 -1
  141. package/dist/core/utils/url.js.map +1 -1
  142. package/dist/index.js +10 -6
  143. package/dist/index.js.map +1 -1
  144. package/dist/platforms/node/http-server.d.ts +13 -0
  145. package/dist/platforms/node/http-server.d.ts.map +1 -0
  146. package/dist/platforms/node/http-server.js +231 -0
  147. package/dist/platforms/node/http-server.js.map +1 -0
  148. package/dist/platforms/node/index.d.ts +1 -1
  149. package/dist/platforms/node/index.d.ts.map +1 -1
  150. package/dist/platforms/node/index.js +1 -1
  151. package/dist/platforms/node/index.js.map +1 -1
  152. package/dist/platforms/node/logger.d.ts +13 -2
  153. package/dist/platforms/node/logger.d.ts.map +1 -1
  154. package/dist/platforms/node/logger.js +17 -4
  155. package/dist/platforms/node/logger.js.map +1 -1
  156. package/dist/transport/http-handler.d.ts +25 -0
  157. package/dist/transport/http-handler.d.ts.map +1 -0
  158. package/dist/transport/http-handler.js +193 -0
  159. package/dist/transport/http-handler.js.map +1 -0
  160. package/dist/transport/http-types.d.ts +22 -0
  161. package/dist/transport/http-types.d.ts.map +1 -0
  162. package/dist/transport/http-types.js +65 -0
  163. package/dist/transport/http-types.js.map +1 -0
  164. package/dist/transport/http.d.ts +4 -8
  165. package/dist/transport/http.d.ts.map +1 -1
  166. package/dist/transport/http.js +4 -376
  167. package/dist/transport/http.js.map +1 -1
  168. package/dist/transport/index.js +2 -2
  169. package/dist/transport/index.js.map +1 -1
  170. package/dist/transport/rate-limiter.d.ts +16 -0
  171. package/dist/transport/rate-limiter.d.ts.map +1 -0
  172. package/dist/transport/rate-limiter.js +55 -0
  173. package/dist/transport/rate-limiter.js.map +1 -0
  174. package/package.json +3 -3
  175. package/dist/core/services/interfaces.d.ts +0 -94
  176. package/dist/core/services/interfaces.d.ts.map +0 -1
  177. package/dist/core/services/interfaces.js +0 -8
  178. package/dist/core/services/interfaces.js.map +0 -1
  179. package/dist/core/services/scraper.d.ts +0 -90
  180. package/dist/core/services/scraper.d.ts.map +0 -1
  181. package/dist/core/services/scraper.js +0 -990
  182. package/dist/core/services/scraper.js.map +0 -1
  183. package/dist/core/utils/doc-type.d.ts +0 -12
  184. package/dist/core/utils/doc-type.d.ts.map +0 -1
  185. package/dist/core/utils/doc-type.js +0 -24
  186. package/dist/core/utils/doc-type.js.map +0 -1
  187. package/dist/platforms/node/metadata.d.ts +0 -18
  188. package/dist/platforms/node/metadata.d.ts.map +0 -1
  189. package/dist/platforms/node/metadata.js +0 -35
  190. package/dist/platforms/node/metadata.js.map +0 -1
@@ -1,8 +1,11 @@
1
1
  /**
2
2
  * Glossary service for parsing and looking up Jamf documentation glossary terms
3
3
  *
4
- * Jamf's glossary uses DITA glossentry format where each term is a separate page:
5
- * <h1 class="glossterm">Term Name</h1>
4
+ * Uses Fluid Topics API on learn.jamf.com:
5
+ * - GET /api/khub/maps/{mapId}/toc — list all glossary terms
6
+ * - GET /api/khub/maps/{mapId}/topics/{contentId}/content — term HTML
7
+ *
8
+ * Jamf's glossary uses DITA glossentry format where each term is a separate topic:
6
9
  * <div class="glossdef"><p>Definition text</p></div>
7
10
  *
8
11
  * Also supports fallback formats:
@@ -13,16 +16,62 @@
13
16
  */
14
17
  import Fuse from 'fuse.js';
15
18
  import * as cheerio from 'cheerio';
16
- import TurndownService from 'turndown';
17
19
  import { SELECTORS, TOKEN_CONFIG, DEFAULT_LOCALE, } from '../constants.js';
18
- import { searchDocumentation, fetchHtml, transformToBackendUrl, transformToFrontendUrl, } from './scraper.js';
19
- import { estimateTokens } from './tokenizer.js';
20
+ import { fetchMapToc, fetchTopicContent } from './ft-client.js';
21
+ import { buildDisplayUrl } from './topic-resolver.js';
22
+ import { cleanHtml, htmlToMarkdown } from './content-parser.js';
23
+ import { truncateItemsToTokenLimit } from './tokenizer.js';
20
24
  import { limitConcurrency } from '../utils/concurrency.js';
21
- const turndown = new TurndownService({
22
- headingStyle: 'atx',
23
- codeBlockStyle: 'fenced',
24
- bulletListMarker: '-',
25
- });
25
+ /** Return a zero-entry result when there is nothing to report. */
26
+ function emptyGlossaryResult(maxTokens) {
27
+ return {
28
+ entries: [],
29
+ totalMatches: 0,
30
+ tokenInfo: { tokenCount: 0, truncated: false, maxTokens },
31
+ };
32
+ }
33
+ // ─── Fluid Topics API helpers ───────────────────────────────────
34
+ /**
35
+ * Fetch the glossary TOC from Fluid Topics via ft-client.
36
+ * The TOC is a tree: root node has children, each child is a glossary term.
37
+ * Cached with article TTL to avoid repeated requests.
38
+ */
39
+ async function fetchGlossaryToc(ctx, mapId, locale) {
40
+ const cacheKey = `${locale}:glossary-toc`;
41
+ const cached = await ctx.cache.get(cacheKey);
42
+ if (cached !== null) {
43
+ return cached;
44
+ }
45
+ const nodes = await fetchMapToc(mapId);
46
+ // Flatten: collect all leaf terms (children of the root)
47
+ const terms = [];
48
+ for (const node of nodes) {
49
+ // Skip non-term entries like "Glossary Revision History"
50
+ if (node.children && node.children.length > 0) {
51
+ for (const child of node.children) {
52
+ if (!child.title.toLowerCase().includes('revision history')) {
53
+ terms.push(child);
54
+ }
55
+ }
56
+ }
57
+ }
58
+ await ctx.cache.set(cacheKey, terms, ctx.config.cacheTtl.article);
59
+ return terms;
60
+ }
61
+ /**
62
+ * Fetch the HTML content of a single glossary topic via ft-client.
63
+ */
64
+ async function fetchGlossaryContent(ctx, mapId, contentId, locale) {
65
+ const cacheKey = `${locale}:glossary-content:${contentId}`;
66
+ const cached = await ctx.cache.get(cacheKey);
67
+ if (cached !== null) {
68
+ return cached;
69
+ }
70
+ const html = await fetchTopicContent(mapId, contentId);
71
+ await ctx.cache.set(cacheKey, html, ctx.config.cacheTtl.article);
72
+ return html;
73
+ }
74
+ // ─── HTML parsing ───────────────────────────────────────────────
26
75
  /**
27
76
  * Parse glossary entries from HTML content.
28
77
  *
@@ -34,8 +83,7 @@ const turndown = new TurndownService({
34
83
  */
35
84
  export function parseGlossaryEntries(html, sourceUrl, product) {
36
85
  const $ = cheerio.load(html);
37
- // Remove unwanted elements
38
- $(SELECTORS.REMOVE).remove();
86
+ cleanHtml($);
39
87
  // 1. Try DITA glossentry format (Jamf's actual structure)
40
88
  const ditaEntries = parseDitaGlossentry($, sourceUrl, product);
41
89
  if (ditaEntries.length > 0) {
@@ -76,7 +124,7 @@ function parseDitaGlossentry($, sourceUrl, product) {
76
124
  let definition = '';
77
125
  if (glossdef.length > 0) {
78
126
  const defHtml = glossdef.html() ?? '';
79
- definition = turndown.turndown(defHtml).trim();
127
+ definition = htmlToMarkdown(defHtml).trim();
80
128
  }
81
129
  // If no glossdef, try to get any content after the heading
82
130
  if (definition === '') {
@@ -86,7 +134,7 @@ function parseDitaGlossentry($, sourceUrl, product) {
86
134
  const clone = article.clone();
87
135
  clone.find('h1').remove();
88
136
  const bodyHtml = clone.html() ?? '';
89
- definition = turndown.turndown(bodyHtml).trim();
137
+ definition = htmlToMarkdown(bodyHtml).trim();
90
138
  }
91
139
  }
92
140
  if (definition === '') {
@@ -111,7 +159,7 @@ function parseDlFormat($, sourceUrl, product) {
111
159
  let next = $(dt).next();
112
160
  while (next.length > 0 && next.is('dd')) {
113
161
  const ddHtml = next.html() ?? '';
114
- ddParts.push(turndown.turndown(ddHtml).trim());
162
+ ddParts.push(htmlToMarkdown(ddHtml).trim());
115
163
  next = next.next();
116
164
  }
117
165
  const definition = ddParts.join('\n\n');
@@ -147,7 +195,7 @@ function parseHeadingFormat($, sourceUrl, product) {
147
195
  break;
148
196
  }
149
197
  const html = next.html() ?? '';
150
- const text = turndown.turndown(html).trim();
198
+ const text = htmlToMarkdown(html).trim();
151
199
  if (text !== '') {
152
200
  parts.push(text);
153
201
  }
@@ -169,7 +217,7 @@ function parseFallbackFormat($, sourceUrl, product) {
169
217
  return [];
170
218
  }
171
219
  const html = contentArea.html() ?? '';
172
- const content = turndown.turndown(html).trim();
220
+ const content = htmlToMarkdown(html).trim();
173
221
  if (content === '') {
174
222
  return [];
175
223
  }
@@ -180,6 +228,38 @@ function parseFallbackFormat($, sourceUrl, product) {
180
228
  product,
181
229
  }];
182
230
  }
231
+ const fuseCacheByServer = new WeakMap();
232
+ /** Get (or lazily create) the GlossaryFuseCache for the given context. */
233
+ function getFuseCacheForContext(ctx) {
234
+ let cache = fuseCacheByServer.get(ctx.cache);
235
+ if (cache === undefined) {
236
+ cache = new Map();
237
+ fuseCacheByServer.set(ctx.cache, cache);
238
+ }
239
+ return cache;
240
+ }
241
+ const TOC_FUSE_OPTIONS = {
242
+ keys: [{ name: 'title', weight: 1.0 }],
243
+ threshold: 0.4,
244
+ includeScore: true,
245
+ ignoreLocation: true,
246
+ minMatchCharLength: 2,
247
+ };
248
+ /**
249
+ * Get or create a Fuse index for the given TOC entries.
250
+ * Rebuilds the index when the entries array reference changes
251
+ * (i.e., the cache was refreshed).
252
+ */
253
+ function getTocFuse(fuseCache, locale, entries) {
254
+ const cached = fuseCache.get(locale);
255
+ if (cached?.source === entries) {
256
+ return cached.fuse;
257
+ }
258
+ const fuse = new Fuse(entries, TOC_FUSE_OPTIONS);
259
+ fuseCache.set(locale, { source: entries, fuse });
260
+ return fuse;
261
+ }
262
+ // ─── Fuzzy matching ─────────────────────────────────────────────
183
263
  /**
184
264
  * Search for matching glossary entries using fuse.js fuzzy matching.
185
265
  * Used to rank and filter entries collected from multiple glossary pages.
@@ -193,135 +273,122 @@ export function searchGlossaryEntries(entries, term) {
193
273
  { name: 'term', weight: 0.7 },
194
274
  { name: 'definition', weight: 0.3 },
195
275
  ],
196
- threshold: 0.5,
276
+ threshold: 0.3,
197
277
  includeScore: true,
198
278
  ignoreLocation: true,
199
279
  minMatchCharLength: 2,
200
280
  });
201
281
  const results = fuse.search(term);
202
282
  // If fuse.js returns no results, return all entries as-is
203
- // (the search API already filtered for relevance)
204
283
  if (results.length === 0) {
205
284
  return entries;
206
285
  }
207
286
  return results.map(r => r.item);
208
287
  }
288
+ // ─── Main lookup ────────────────────────────────────────────────
209
289
  /**
210
290
  * Look up a glossary term across Jamf documentation.
211
291
  *
212
292
  * Strategy:
213
- * 1. Search via Zoomin API with docType=glossary to find glossary pages
214
- * 2. Fetch and parse each glossary page (with caching)
215
- * 3. Use fuse.js to rank matching terms
293
+ * 1. Fetch glossary TOC from Fluid Topics API (cached)
294
+ * 2. Fuzzy-match term against TOC titles
295
+ * 3. Fetch and parse matching glossary topics
296
+ * 4. Rank results with fuse.js and apply token limit
216
297
  */
217
298
  export async function lookupGlossaryTerm(ctx, params) {
218
299
  if (ctx.glossaryProvider) {
219
300
  const provided = await ctx.glossaryProvider.lookup(params);
220
- if (provided !== null)
301
+ if (provided !== null) {
221
302
  return provided;
303
+ }
222
304
  }
223
305
  const log = ctx.logger.createLogger('glossary');
224
- const { term, product, language, maxTokens = TOKEN_CONFIG.DEFAULT_MAX_TOKENS } = params;
225
- const locale = language ?? DEFAULT_LOCALE;
226
- log.info(`Looking up glossary term: "${term}" (product=${product ?? 'all'}, locale=${locale})`);
227
- // Step 1: Search for glossary pages via Zoomin API
228
- const searchParams = {
229
- query: term,
230
- product,
231
- docType: 'glossary',
232
- language: locale,
233
- limit: 10,
234
- page: 1,
235
- };
236
- const searchResult = await searchDocumentation(ctx, searchParams);
237
- // If docType filter was relaxed, it means no actual glossary pages were found
238
- const docTypeRelaxed = searchResult.filterRelaxation?.removed.includes('docType') === true;
239
- if (searchResult.results.length === 0 || docTypeRelaxed) {
240
- log.info(docTypeRelaxed
241
- ? 'docType filter was relaxed — no actual glossary pages found'
242
- : 'No glossary pages found via search API');
243
- return {
244
- entries: [],
245
- totalMatches: 0,
246
- tokenInfo: { tokenCount: 0, truncated: false, maxTokens },
247
- };
306
+ const { term, maxTokens = TOKEN_CONFIG.DEFAULT_MAX_TOKENS } = params;
307
+ const locale = params.language ?? DEFAULT_LOCALE;
308
+ log.info(`Looking up glossary term: "${term}"` +
309
+ ` (product=${params.product ?? 'all'}, locale=${locale})`);
310
+ // Resolve glossary mapId dynamically via MapsRegistry
311
+ let mapId;
312
+ try {
313
+ mapId = await ctx.mapsRegistry.resolveGlossaryMapId(locale);
248
314
  }
249
- // Step 2: Fetch and parse glossary pages concurrently (with caching)
250
- const seenUrls = new Set();
251
- const uniqueResults = searchResult.results.filter(r => {
252
- if (seenUrls.has(r.url)) {
253
- return false;
254
- }
255
- seenUrls.add(r.url);
256
- return true;
257
- });
258
- const tasks = uniqueResults.map(result => async () => {
315
+ catch (error) {
316
+ log.error(`Failed to resolve glossary mapId: ${String(error)}`);
317
+ return emptyGlossaryResult(maxTokens);
318
+ }
319
+ if (mapId === null) {
320
+ log.info(`No glossary map found for locale="${locale}"`);
321
+ return emptyGlossaryResult(maxTokens);
322
+ }
323
+ log.info(`Resolved glossary mapId: ${mapId} (locale=${locale})`);
324
+ // Step 1: Fetch glossary TOC (cached after first call)
325
+ let tocEntries;
326
+ try {
327
+ tocEntries = await fetchGlossaryToc(ctx, mapId, locale);
328
+ }
329
+ catch (error) {
330
+ log.error(`Failed to fetch glossary TOC: ${String(error)}`);
331
+ return emptyGlossaryResult(maxTokens);
332
+ }
333
+ if (tocEntries.length === 0) {
334
+ log.info('Glossary TOC is empty');
335
+ return emptyGlossaryResult(maxTokens);
336
+ }
337
+ // Step 2: Fuzzy-match term against TOC titles (Fuse index is cached per locale)
338
+ const fuseCache = getFuseCacheForContext(ctx);
339
+ const tocFuse = getTocFuse(fuseCache, locale, tocEntries);
340
+ const tocMatches = tocFuse.search(term);
341
+ // If no fuzzy match, try exact substring match as fallback
342
+ const matchedTocEntries = tocMatches.length > 0
343
+ ? tocMatches.map(m => m.item)
344
+ : tocEntries.filter(e => e.title.toLowerCase().includes(term.toLowerCase()));
345
+ if (matchedTocEntries.length === 0) {
346
+ log.info(`No matching glossary terms found for "${term}"`);
347
+ return emptyGlossaryResult(maxTokens);
348
+ }
349
+ log.info(`Found ${matchedTocEntries.length} TOC matches for "${term}"`);
350
+ // Step 3: Fetch and parse content for top matches (limit to 10)
351
+ const toFetch = matchedTocEntries.slice(0, 10);
352
+ const tasks = toFetch.map(tocNode => async () => {
259
353
  try {
260
- return await fetchAndParseGlossaryPage(ctx, result.url, locale, result.product ?? undefined);
354
+ const html = await fetchGlossaryContent(ctx, mapId, tocNode.contentId, locale);
355
+ const displayUrl = buildDisplayUrl(tocNode.prettyUrl);
356
+ // Try parsing with the existing format parsers
357
+ const parsed = parseGlossaryEntries(html, displayUrl);
358
+ // If parsing returned nothing, use TOC title + raw HTML as fallback
359
+ if (parsed.length === 0 && html.trim() !== '') {
360
+ const definition = htmlToMarkdown(html).trim();
361
+ if (definition !== '') {
362
+ return [{
363
+ term: tocNode.title,
364
+ definition,
365
+ url: displayUrl,
366
+ }];
367
+ }
368
+ }
369
+ return parsed;
261
370
  }
262
371
  catch (error) {
263
- log.warning(`Failed to fetch glossary page ${result.url}: ${String(error)}`);
372
+ log.warning(`Failed to fetch glossary entry "${tocNode.title}": ${String(error)}`);
264
373
  return [];
265
374
  }
266
375
  });
267
376
  const fetchedEntries = await limitConcurrency(tasks, 3);
268
377
  const allEntries = fetchedEntries.flat();
269
378
  if (allEntries.length === 0) {
270
- return {
271
- entries: [],
272
- totalMatches: 0,
273
- tokenInfo: { tokenCount: 0, truncated: false, maxTokens },
274
- };
379
+ return emptyGlossaryResult(maxTokens);
275
380
  }
276
- // Step 3: Rank with fuse.js (search API already filtered, fuse.js re-ranks)
381
+ // Step 4: Rank with fuse.js and apply token limit
277
382
  const matchedEntries = searchGlossaryEntries(allEntries, term);
278
- // Step 4: Apply token limit
279
- const includedEntries = [];
280
- let runningTokens = 0;
281
- let truncated = false;
282
- for (const entry of matchedEntries) {
283
- const entryTokens = estimateTokens(`${entry.term}: ${entry.definition}`);
284
- if (runningTokens + entryTokens > maxTokens) {
285
- truncated = true;
286
- break;
287
- }
288
- includedEntries.push(entry);
289
- runningTokens += entryTokens;
290
- }
291
- const tokenInfo = {
292
- tokenCount: runningTokens,
293
- truncated,
294
- maxTokens,
295
- };
296
- log.info(`Found ${matchedEntries.length} matches, returning ${includedEntries.length} (truncated=${String(truncated)})`);
383
+ const glossaryEntryToString = (e) => `${e.term}: ${e.definition}`;
384
+ const { items: includedEntries, tokenInfo } = truncateItemsToTokenLimit(matchedEntries, maxTokens, glossaryEntryToString, 1, matchedEntries.length);
385
+ log.info(`Found ${matchedEntries.length} matches, ` +
386
+ `returning ${includedEntries.length} ` +
387
+ `(truncated=${String(tokenInfo.truncated)})`);
297
388
  return {
298
389
  entries: includedEntries,
299
390
  totalMatches: matchedEntries.length,
300
391
  tokenInfo,
301
392
  };
302
393
  }
303
- /**
304
- * Fetch a glossary page and parse its entries (with caching)
305
- */
306
- async function fetchAndParseGlossaryPage(ctx, url, locale, product) {
307
- const log = ctx.logger.createLogger('glossary');
308
- const cacheKey = `${locale}:glossary:${url}`;
309
- // Check cache
310
- const cached = await ctx.cache.get(cacheKey);
311
- if (cached !== null) {
312
- log.info(`Cache hit for glossary page: ${url}`);
313
- return cached;
314
- }
315
- // Fetch raw HTML (reuses scraper's throttle + error handling)
316
- log.info(`Fetching glossary page: ${url}`);
317
- const backendUrl = transformToBackendUrl(url);
318
- const html = await fetchHtml(ctx, backendUrl, locale);
319
- // Transform URL to frontend format for display
320
- const displayUrl = transformToFrontendUrl(url);
321
- const entries = parseGlossaryEntries(html, displayUrl, product);
322
- // Cache parsed entries
323
- await ctx.cache.set(cacheKey, entries, ctx.config.cacheTtl.article);
324
- log.info(`Cached ${entries.length} glossary entries from: ${url}`);
325
- return entries;
326
- }
327
394
  //# sourceMappingURL=glossary.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"glossary.js","sourceRoot":"","sources":["../../../src/core/services/glossary.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"glossary.js","sourceRoot":"","sources":["../../../src/core/services/glossary.ts"],"names":[],"mappings":"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"}
@@ -13,11 +13,11 @@ export interface CacheStats {
13
13
  * Platform-agnostic cache provider
14
14
  */
15
15
  export interface CacheProvider {
16
- get<T>(key: string): Promise<T | null>;
17
- set<T>(key: string, value: T, ttl?: number): Promise<void>;
18
- delete(key: string): Promise<boolean>;
19
- clear(): Promise<void>;
20
- stats(): Promise<CacheStats>;
21
- prune(): Promise<number>;
16
+ get: <T>(key: string) => Promise<T | null>;
17
+ set: <T>(key: string, value: T, ttl?: number) => Promise<void>;
18
+ delete: (key: string) => Promise<boolean>;
19
+ clear: () => Promise<void>;
20
+ stats: () => Promise<CacheStats>;
21
+ prune: () => Promise<number>;
22
22
  }
23
23
  //# sourceMappingURL=cache.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../../../src/core/services/interfaces/cache.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACvC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACtC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,KAAK,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC;IAC7B,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CAC1B"}
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../../../src/core/services/interfaces/cache.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAC3C,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/D,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1C,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,KAAK,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC;IACjC,KAAK,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;CAC9B"}
@@ -4,7 +4,7 @@
4
4
  * Re-exports all platform abstraction interfaces from domain-specific files.
5
5
  */
6
6
  export type { CacheProvider, CacheStats } from './cache.js';
7
- export type { MetadataStore, ProductMetadata, TopicMetadata, TocEntry, TocData, } from './metadata.js';
8
- export type { Logger, LoggerFactory } from './logger.js';
9
- export type { SearchProvider, ArticleProvider, GlossaryProvider, TocProvider, } from './providers.js';
7
+ export type { ProductMetadata, TopicMetadata, TocEntry, TocData, } from './metadata.js';
8
+ export type { Logger, LoggerFactory, WriteStderrFn } from './logger.js';
9
+ export type { SearchProvider, ArticleProvider, GlossaryProvider, TocProvider, MapsProvider, } from './providers.js';
10
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/services/interfaces/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC5D,YAAY,EACV,aAAa,EACb,eAAe,EACf,aAAa,EACb,QAAQ,EACR,OAAO,GACR,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACzD,YAAY,EACV,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,WAAW,GACZ,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/services/interfaces/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC5D,YAAY,EACV,eAAe,EACf,aAAa,EACb,QAAQ,EACR,OAAO,GACR,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACxE,YAAY,EACV,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,WAAW,EACX,YAAY,GACb,MAAM,gBAAgB,CAAC"}
@@ -6,20 +6,27 @@ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
6
6
  * Logger instance bound to a specific module name
7
7
  */
8
8
  export interface Logger {
9
- debug(data: unknown): void;
10
- info(data: unknown): void;
11
- notice(data: unknown): void;
12
- warning(data: unknown): void;
13
- error(data: unknown): void;
14
- critical(data: unknown): void;
15
- alert(data: unknown): void;
16
- emergency(data: unknown): void;
9
+ debug: (data: unknown) => void;
10
+ info: (data: unknown) => void;
11
+ notice: (data: unknown) => void;
12
+ warning: (data: unknown) => void;
13
+ error: (data: unknown) => void;
14
+ critical: (data: unknown) => void;
15
+ alert: (data: unknown) => void;
16
+ emergency: (data: unknown) => void;
17
17
  }
18
+ /**
19
+ * Function signature for writing formatted log output.
20
+ * Defaults to `console.error` (stderr on Node.js).
21
+ * Platforms without stderr (e.g. Cloudflare Workers) can supply
22
+ * `console.log` or a no-op.
23
+ */
24
+ export type WriteStderrFn = (formatted: string) => void;
18
25
  /**
19
26
  * Factory for creating named logger instances
20
27
  */
21
28
  export interface LoggerFactory {
22
- createLogger(name: string): Logger;
23
- setServer(server: McpServer): void;
29
+ createLogger: (name: string) => Logger;
30
+ setServer: (server: McpServer) => void;
24
31
  }
25
32
  //# sourceMappingURL=logger.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../../src/core/services/interfaces/logger.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,KAAK,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;IAC3B,IAAI,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;IAC1B,MAAM,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;IAC5B,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;IAC7B,KAAK,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;IAC9B,KAAK,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;IAC3B,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACnC,SAAS,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC;CACpC"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../../src/core/services/interfaces/logger.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,KAAK,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/B,IAAI,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC9B,MAAM,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAChC,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACjC,KAAK,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/B,QAAQ,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAClC,KAAK,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/B,SAAS,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CACpC;AAED;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IACvC,SAAS,EAAE,CAAC,MAAM,EAAE,SAAS,KAAK,IAAI,CAAC;CACxC"}
@@ -38,14 +38,4 @@ export interface TocData {
38
38
  product: string;
39
39
  version: string;
40
40
  }
41
- /**
42
- * Platform-agnostic metadata store for Jamf documentation
43
- */
44
- export interface MetadataStore {
45
- getProducts(): Promise<ProductMetadata[]>;
46
- getTopics(): Promise<TopicMetadata[]>;
47
- getToc(productId: string, bundleId: string): Promise<TocData>;
48
- getBundleIdForVersion(productId: string, version?: string): Promise<string | null>;
49
- getAvailableVersions(productId: string): Promise<string[]>;
50
- }
51
41
  //# sourceMappingURL=metadata.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../../../src/core/services/interfaces/metadata.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,KAAK,GAAG,QAAQ,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,OAAO,EAAE,QAAQ,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,WAAW,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IAC1C,SAAS,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IACtC,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9D,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACnF,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;CAC5D"}
1
+ {"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../../../src/core/services/interfaces/metadata.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,KAAK,GAAG,QAAQ,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,OAAO,EAAE,QAAQ,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB"}
@@ -10,42 +10,55 @@
10
10
  * - null: fall through to the default implementation.
11
11
  */
12
12
  import type { ProductId, LocaleId } from '../../constants.js';
13
- import type { SearchParams, SearchResult, GlossaryLookupResult } from '../../types.js';
14
- import type { FetchArticleResult, FetchArticleOptions, FetchTocResult, FetchTocOptions } from '../scraper.js';
13
+ import type { SearchParams, SearchResult, GlossaryLookupResult, FetchArticleResult, FetchArticleOptions, FetchTocResult, FetchTocOptions, FtMapInfo } from '../../types.js';
15
14
  /**
16
15
  * Custom search backend (e.g., Vectorize semantic search).
17
16
  *
18
17
  * Return all matched results as a flat array. The core handles pagination,
19
18
  * token truncation, version deduplication, and filter relaxation.
20
- * Return `null` to fall through to the default Zoomin API search.
19
+ * Return `null` to fall through to the default Fluid Topics API search.
21
20
  */
22
21
  export interface SearchProvider {
23
- search(params: SearchParams): Promise<SearchResult[] | null>;
22
+ search: (params: SearchParams) => Promise<SearchResult[] | null>;
24
23
  }
25
24
  /**
26
25
  * Custom article provider (e.g., R2 local storage).
27
- * Return null to fall through to the default web scraping.
26
+ * Return null to fall through to the default Fluid Topics API fetch.
27
+ *
28
+ * Primary method is `getArticleByIds` — in the FT world, ID-based access
29
+ * is the fast path (mapId + contentId are always resolved first).
30
+ * The optional `getArticle` method provides a URL-based fallback.
28
31
  */
29
32
  export interface ArticleProvider {
30
- getArticle(url: string, options?: FetchArticleOptions): Promise<FetchArticleResult | null>;
33
+ /** ID-based fetch — primary method, used when mapId+contentId are known. */
34
+ getArticleByIds: (mapId: string, contentId: string, options?: FetchArticleOptions) => Promise<FetchArticleResult | null>;
35
+ /** Optional URL-based fallback — used when ID-based fetch returns null. */
36
+ getArticle?: (url: string, options?: FetchArticleOptions) => Promise<FetchArticleResult | null>;
31
37
  }
32
38
  /**
33
39
  * Custom glossary provider (e.g., D1 database).
34
- * Return null to fall through to the default glossary scraping.
40
+ * Return null to fall through to the default Fluid Topics API glossary.
35
41
  */
36
42
  export interface GlossaryProvider {
37
- lookup(params: {
43
+ lookup: (params: {
38
44
  term: string;
39
45
  product?: ProductId | undefined;
40
46
  language?: LocaleId | undefined;
41
47
  maxTokens?: number | undefined;
42
- }): Promise<GlossaryLookupResult | null>;
48
+ }) => Promise<GlossaryLookupResult | null>;
43
49
  }
44
50
  /**
45
51
  * Custom table-of-contents provider (e.g., D1/R2 stored TOC).
46
52
  * Return null to fall through to the default TOC fetching.
47
53
  */
48
54
  export interface TocProvider {
49
- getTableOfContents(product: ProductId, version: string, options?: FetchTocOptions): Promise<FetchTocResult | null>;
55
+ getTableOfContents: (product: ProductId, version: string, options?: FetchTocOptions) => Promise<FetchTocResult | null>;
56
+ }
57
+ /**
58
+ * Custom maps provider (e.g., KV storage on Workers).
59
+ * When present, MapsRegistry uses this instead of the FT API fetchMaps().
60
+ */
61
+ export interface MapsProvider {
62
+ getMaps: () => Promise<FtMapInfo[]>;
50
63
  }
51
64
  //# sourceMappingURL=providers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../../../src/core/services/interfaces/providers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACvF,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,EACd,eAAe,EAChB,MAAM,eAAe,CAAC;AAEvB;;;;;;GAMG;AACH,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC,CAAC;CAC9D;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,UAAU,CACR,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC;CACvC;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,MAAM,EAAE;QACb,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;QAChC,QAAQ,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;QAChC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;KAChC,GAAG,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAAC;CAC1C;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,kBAAkB,CAChB,OAAO,EAAE,SAAS,EAClB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;CACnC"}
1
+ {"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../../../src/core/services/interfaces/providers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,KAAK,EACV,YAAY,EACZ,YAAY,EACZ,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,SAAS,EACV,MAAM,gBAAgB,CAAC;AAExB;;;;;;GAMG;AACH,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,OAAO,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC,CAAC;CAClE;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,eAAe;IAC9B,4EAA4E;IAC5E,eAAe,EAAE,CACf,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,mBAAmB,KAC1B,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC;IAExC,2EAA2E;IAC3E,UAAU,CAAC,EAAE,CACX,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,mBAAmB,KAC1B,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC;CACzC;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,CAAC,MAAM,EAAE;QACf,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;QAChC,QAAQ,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;QAChC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;KAChC,KAAK,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAAC;CAC5C;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,kBAAkB,EAAE,CAClB,OAAO,EAAE,SAAS,EAClB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,eAAe,KACtB,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;CACrC;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;CACrC"}