@get-technology-inc/jamf-docs-mcp-server 3.0.5 → 3.0.7

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 (183) hide show
  1. package/dist/core/constants/doc-types.d.ts +48 -0
  2. package/dist/core/constants/doc-types.d.ts.map +1 -0
  3. package/dist/core/constants/doc-types.js +58 -0
  4. package/dist/core/constants/doc-types.js.map +1 -0
  5. package/dist/core/constants/index.d.ts +16 -0
  6. package/dist/core/constants/index.d.ts.map +1 -0
  7. package/dist/core/constants/index.js +12 -0
  8. package/dist/core/constants/index.js.map +1 -0
  9. package/dist/core/constants/limits.d.ts +39 -0
  10. package/dist/core/constants/limits.d.ts.map +1 -0
  11. package/dist/core/constants/limits.js +51 -0
  12. package/dist/core/constants/limits.js.map +1 -0
  13. package/dist/core/constants/locales.d.ts +34 -0
  14. package/dist/core/constants/locales.d.ts.map +1 -0
  15. package/dist/core/constants/locales.js +20 -0
  16. package/dist/core/constants/locales.js.map +1 -0
  17. package/dist/core/constants/products.d.ts +127 -0
  18. package/dist/core/constants/products.d.ts.map +1 -0
  19. package/dist/core/constants/products.js +135 -0
  20. package/dist/core/constants/products.js.map +1 -0
  21. package/dist/core/constants/topics.d.ts +168 -0
  22. package/dist/core/constants/topics.d.ts.map +1 -0
  23. package/dist/core/constants/topics.js +186 -0
  24. package/dist/core/constants/topics.js.map +1 -0
  25. package/dist/core/constants.d.ts +7 -404
  26. package/dist/core/constants.d.ts.map +1 -1
  27. package/dist/core/constants.js +16 -427
  28. package/dist/core/constants.js.map +1 -1
  29. package/dist/core/http-client.d.ts +14 -2
  30. package/dist/core/http-client.d.ts.map +1 -1
  31. package/dist/core/http-client.js +148 -17
  32. package/dist/core/http-client.js.map +1 -1
  33. package/dist/core/index.d.ts +12 -12
  34. package/dist/core/index.d.ts.map +1 -1
  35. package/dist/core/index.js +12 -13
  36. package/dist/core/index.js.map +1 -1
  37. package/dist/core/resources/index.js +1 -1
  38. package/dist/core/resources/index.js.map +1 -1
  39. package/dist/core/schemas/index.d.ts +3 -1
  40. package/dist/core/schemas/index.d.ts.map +1 -1
  41. package/dist/core/schemas/index.js +12 -1
  42. package/dist/core/schemas/index.js.map +1 -1
  43. package/dist/core/schemas/output.d.ts +7 -0
  44. package/dist/core/schemas/output.d.ts.map +1 -1
  45. package/dist/core/schemas/output.js +7 -0
  46. package/dist/core/schemas/output.js.map +1 -1
  47. package/dist/core/services/article-service.d.ts +24 -0
  48. package/dist/core/services/article-service.d.ts.map +1 -0
  49. package/dist/core/services/article-service.js +118 -0
  50. package/dist/core/services/article-service.js.map +1 -0
  51. package/dist/core/services/content-parser.d.ts +38 -0
  52. package/dist/core/services/content-parser.d.ts.map +1 -0
  53. package/dist/core/services/content-parser.js +146 -0
  54. package/dist/core/services/content-parser.js.map +1 -0
  55. package/dist/core/services/ft-client.d.ts +52 -0
  56. package/dist/core/services/ft-client.d.ts.map +1 -0
  57. package/dist/core/services/ft-client.js +87 -0
  58. package/dist/core/services/ft-client.js.map +1 -0
  59. package/dist/core/services/glossary.d.ts +9 -5
  60. package/dist/core/services/glossary.d.ts.map +1 -1
  61. package/dist/core/services/glossary.js +174 -107
  62. package/dist/core/services/glossary.js.map +1 -1
  63. package/dist/core/services/interfaces/cache.d.ts +6 -6
  64. package/dist/core/services/interfaces/cache.d.ts.map +1 -1
  65. package/dist/core/services/interfaces/index.d.ts +3 -3
  66. package/dist/core/services/interfaces/index.d.ts.map +1 -1
  67. package/dist/core/services/interfaces/logger.d.ts +17 -10
  68. package/dist/core/services/interfaces/logger.d.ts.map +1 -1
  69. package/dist/core/services/interfaces/metadata.d.ts +0 -10
  70. package/dist/core/services/interfaces/metadata.d.ts.map +1 -1
  71. package/dist/core/services/interfaces/providers.d.ts +26 -10
  72. package/dist/core/services/interfaces/providers.d.ts.map +1 -1
  73. package/dist/core/services/logging.d.ts +38 -18
  74. package/dist/core/services/logging.d.ts.map +1 -1
  75. package/dist/core/services/logging.js +78 -29
  76. package/dist/core/services/logging.js.map +1 -1
  77. package/dist/core/services/maps-registry.d.ts +82 -0
  78. package/dist/core/services/maps-registry.d.ts.map +1 -0
  79. package/dist/core/services/maps-registry.js +232 -0
  80. package/dist/core/services/maps-registry.js.map +1 -0
  81. package/dist/core/services/metadata.d.ts +18 -9
  82. package/dist/core/services/metadata.d.ts.map +1 -1
  83. package/dist/core/services/metadata.js +113 -254
  84. package/dist/core/services/metadata.js.map +1 -1
  85. package/dist/core/services/search-service.d.ts +31 -0
  86. package/dist/core/services/search-service.d.ts.map +1 -0
  87. package/dist/core/services/search-service.js +471 -0
  88. package/dist/core/services/search-service.js.map +1 -0
  89. package/dist/core/services/toc-service.d.ts +30 -0
  90. package/dist/core/services/toc-service.d.ts.map +1 -0
  91. package/dist/core/services/toc-service.js +101 -0
  92. package/dist/core/services/toc-service.js.map +1 -0
  93. package/dist/core/services/tokenizer.d.ts +1 -1
  94. package/dist/core/services/tokenizer.d.ts.map +1 -1
  95. package/dist/core/services/tokenizer.js +3 -3
  96. package/dist/core/services/tokenizer.js.map +1 -1
  97. package/dist/core/services/topic-resolver.d.ts +57 -0
  98. package/dist/core/services/topic-resolver.d.ts.map +1 -0
  99. package/dist/core/services/topic-resolver.js +185 -0
  100. package/dist/core/services/topic-resolver.js.map +1 -0
  101. package/dist/core/tools/batch-get-articles.d.ts +0 -2
  102. package/dist/core/tools/batch-get-articles.d.ts.map +1 -1
  103. package/dist/core/tools/batch-get-articles.js +12 -46
  104. package/dist/core/tools/batch-get-articles.js.map +1 -1
  105. package/dist/core/tools/get-article.d.ts.map +1 -1
  106. package/dist/core/tools/get-article.js +29 -112
  107. package/dist/core/tools/get-article.js.map +1 -1
  108. package/dist/core/tools/get-toc.js +1 -1
  109. package/dist/core/tools/get-toc.js.map +1 -1
  110. package/dist/core/tools/search.js +5 -5
  111. package/dist/core/tools/search.js.map +1 -1
  112. package/dist/core/types/context.d.ts +5 -2
  113. package/dist/core/types/context.d.ts.map +1 -1
  114. package/dist/core/types.d.ts +141 -31
  115. package/dist/core/types.d.ts.map +1 -1
  116. package/dist/core/types.js.map +1 -1
  117. package/dist/core/utils/bundle.d.ts +14 -1
  118. package/dist/core/utils/bundle.d.ts.map +1 -1
  119. package/dist/core/utils/bundle.js +19 -2
  120. package/dist/core/utils/bundle.js.map +1 -1
  121. package/dist/core/utils/format-article.d.ts +45 -0
  122. package/dist/core/utils/format-article.d.ts.map +1 -0
  123. package/dist/core/utils/format-article.js +138 -0
  124. package/dist/core/utils/format-article.js.map +1 -0
  125. package/dist/core/utils/ft-metadata.d.ts +22 -0
  126. package/dist/core/utils/ft-metadata.d.ts.map +1 -0
  127. package/dist/core/utils/ft-metadata.js +30 -0
  128. package/dist/core/utils/ft-metadata.js.map +1 -0
  129. package/dist/core/utils/sanitize.d.ts.map +1 -1
  130. package/dist/core/utils/sanitize.js +0 -2
  131. package/dist/core/utils/sanitize.js.map +1 -1
  132. package/dist/core/utils/url.d.ts.map +1 -1
  133. package/dist/core/utils/url.js +0 -1
  134. package/dist/core/utils/url.js.map +1 -1
  135. package/dist/index.js +10 -6
  136. package/dist/index.js.map +1 -1
  137. package/dist/platforms/node/http-server.d.ts +13 -0
  138. package/dist/platforms/node/http-server.d.ts.map +1 -0
  139. package/dist/platforms/node/http-server.js +231 -0
  140. package/dist/platforms/node/http-server.js.map +1 -0
  141. package/dist/platforms/node/index.d.ts +1 -1
  142. package/dist/platforms/node/index.d.ts.map +1 -1
  143. package/dist/platforms/node/index.js +1 -1
  144. package/dist/platforms/node/index.js.map +1 -1
  145. package/dist/platforms/node/logger.d.ts +13 -2
  146. package/dist/platforms/node/logger.d.ts.map +1 -1
  147. package/dist/platforms/node/logger.js +17 -4
  148. package/dist/platforms/node/logger.js.map +1 -1
  149. package/dist/transport/http-handler.d.ts +25 -0
  150. package/dist/transport/http-handler.d.ts.map +1 -0
  151. package/dist/transport/http-handler.js +193 -0
  152. package/dist/transport/http-handler.js.map +1 -0
  153. package/dist/transport/http-types.d.ts +22 -0
  154. package/dist/transport/http-types.d.ts.map +1 -0
  155. package/dist/transport/http-types.js +65 -0
  156. package/dist/transport/http-types.js.map +1 -0
  157. package/dist/transport/http.d.ts +4 -8
  158. package/dist/transport/http.d.ts.map +1 -1
  159. package/dist/transport/http.js +4 -376
  160. package/dist/transport/http.js.map +1 -1
  161. package/dist/transport/index.js +2 -2
  162. package/dist/transport/index.js.map +1 -1
  163. package/dist/transport/rate-limiter.d.ts +16 -0
  164. package/dist/transport/rate-limiter.d.ts.map +1 -0
  165. package/dist/transport/rate-limiter.js +55 -0
  166. package/dist/transport/rate-limiter.js.map +1 -0
  167. package/package.json +3 -3
  168. package/dist/core/services/interfaces.d.ts +0 -94
  169. package/dist/core/services/interfaces.d.ts.map +0 -1
  170. package/dist/core/services/interfaces.js +0 -8
  171. package/dist/core/services/interfaces.js.map +0 -1
  172. package/dist/core/services/scraper.d.ts +0 -90
  173. package/dist/core/services/scraper.d.ts.map +0 -1
  174. package/dist/core/services/scraper.js +0 -966
  175. package/dist/core/services/scraper.js.map +0 -1
  176. package/dist/core/utils/doc-type.d.ts +0 -12
  177. package/dist/core/utils/doc-type.d.ts.map +0 -1
  178. package/dist/core/utils/doc-type.js +0 -24
  179. package/dist/core/utils/doc-type.js.map +0 -1
  180. package/dist/platforms/node/metadata.d.ts +0 -18
  181. package/dist/platforms/node/metadata.d.ts.map +0 -1
  182. package/dist/platforms/node/metadata.js +0 -35
  183. package/dist/platforms/node/metadata.js.map +0 -1
@@ -3,30 +3,50 @@
3
3
  *
4
4
  * Provides dual output: MCP notifications (visible to AI clients) + stderr (visible to developers).
5
5
  * Log level filtering for MCP notifications is handled by the SDK (logging/setLevel).
6
+ *
7
+ * LoggingService is a class that holds the MCP server reference as instance state,
8
+ * avoiding module-level mutable singletons that are incompatible with
9
+ * Cloudflare Workers (where module scope persists across requests).
6
10
  */
7
11
  import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
12
+ import type { Logger, WriteStderrFn } from './interfaces/index.js';
13
+ export type { Logger, WriteStderrFn };
8
14
  /**
9
- * Register the MCP server instance for sending log notifications.
10
- * Must be called after server creation but before tools are invoked.
11
- */
12
- export declare function setServer(server: McpServer): void;
13
- /**
14
- * Logger instance bound to a specific logger name.
15
+ * Logging service that holds MCP server reference as instance state.
16
+ *
17
+ * Each server instance should create its own LoggingService, so that
18
+ * multiple servers running in the same isolate don't share state.
19
+ *
20
+ * @param writeStderr - Optional writer function for stderr-style output.
21
+ * Defaults to `console.error`. Pass `console.log` or a no-op for
22
+ * platforms without stderr (e.g. Cloudflare Workers).
15
23
  */
16
- export interface Logger {
17
- debug: (data: unknown) => void;
18
- info: (data: unknown) => void;
19
- notice: (data: unknown) => void;
20
- warning: (data: unknown) => void;
21
- error: (data: unknown) => void;
22
- critical: (data: unknown) => void;
23
- alert: (data: unknown) => void;
24
- emergency: (data: unknown) => void;
24
+ export declare class LoggingService {
25
+ private mcpServer;
26
+ private readonly writeStderr;
27
+ constructor(writeStderr?: WriteStderrFn);
28
+ /**
29
+ * Register the MCP server instance for sending log notifications.
30
+ * Must be called after server creation but before tools are invoked.
31
+ */
32
+ setServer(server: McpServer): void;
33
+ /**
34
+ * Create a named logger instance.
35
+ *
36
+ * @param name - Logger name identifying the source module
37
+ */
38
+ createLogger(name: string): Logger;
39
+ private log;
40
+ private sendMcpLog;
25
41
  }
26
42
  /**
27
- * Create a named logger instance.
43
+ * Create a stderr-only logger (no MCP notifications).
44
+ *
45
+ * Use this for bootstrap / transport code that runs before
46
+ * a ServerContext is available, or outside of a request scope.
28
47
  *
29
- * @param name - Logger name identifying the source module (e.g., 'search', 'cache', 'scraper')
48
+ * @param name - Logger name identifying the source module
49
+ * @param writeStderr - Optional writer function (defaults to console.error)
30
50
  */
31
- export declare function createLogger(name: string): Logger;
51
+ export declare function createStderrLogger(name: string, writeStderr?: WriteStderrFn): Logger;
32
52
  //# sourceMappingURL=logging.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"logging.d.ts","sourceRoot":"","sources":["../../../src/core/services/logging.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKzE;;;GAGG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAEjD;AAED;;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;AAiCD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAWjD"}
1
+ {"version":3,"file":"logging.d.ts","sourceRoot":"","sources":["../../../src/core/services/logging.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEnE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;AA6BtC;;;;;;;;;GASG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,SAAS,CAA0B;IAC3C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAgB;gBAEhC,WAAW,CAAC,EAAE,aAAa;IAIvC;;;OAGG;IACH,SAAS,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI;IAIlC;;;;OAIG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAalC,OAAO,CAAC,GAAG;IAKX,OAAO,CAAC,UAAU;CAUnB;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,WAAW,CAAC,EAAE,aAAa,GAC1B,MAAM,CAYR"}
@@ -3,16 +3,19 @@
3
3
  *
4
4
  * Provides dual output: MCP notifications (visible to AI clients) + stderr (visible to developers).
5
5
  * Log level filtering for MCP notifications is handled by the SDK (logging/setLevel).
6
+ *
7
+ * LoggingService is a class that holds the MCP server reference as instance state,
8
+ * avoiding module-level mutable singletons that are incompatible with
9
+ * Cloudflare Workers (where module scope persists across requests).
6
10
  */
7
- let mcpServer = null;
8
11
  /**
9
- * Register the MCP server instance for sending log notifications.
10
- * Must be called after server creation but before tools are invoked.
12
+ * Default writer delegates to console.error (Node.js stderr).
13
+ * Uses late binding so test spies on console.error are respected.
11
14
  */
12
- export function setServer(server) {
13
- mcpServer = server;
15
+ function defaultWriteStderr(formatted) {
16
+ console.error(formatted);
14
17
  }
15
- function writeStderr(level, loggerName, data) {
18
+ function formatLogLine(level, loggerName, data) {
16
19
  const label = level.toUpperCase();
17
20
  let message;
18
21
  if (typeof data === 'string') {
@@ -26,36 +29,82 @@ function writeStderr(level, loggerName, data) {
26
29
  message = String(data);
27
30
  }
28
31
  }
29
- console.error(`[${label}] [${loggerName}] ${message}`);
32
+ return `[${label}] [${loggerName}] ${message}`;
30
33
  }
31
- function sendMcpLog(level, loggerName, data) {
32
- if (mcpServer === null) {
33
- return;
34
+ /**
35
+ * Logging service that holds MCP server reference as instance state.
36
+ *
37
+ * Each server instance should create its own LoggingService, so that
38
+ * multiple servers running in the same isolate don't share state.
39
+ *
40
+ * @param writeStderr - Optional writer function for stderr-style output.
41
+ * Defaults to `console.error`. Pass `console.log` or a no-op for
42
+ * platforms without stderr (e.g. Cloudflare Workers).
43
+ */
44
+ export class LoggingService {
45
+ mcpServer = null;
46
+ writeStderr;
47
+ constructor(writeStderr) {
48
+ this.writeStderr = writeStderr ?? defaultWriteStderr;
49
+ }
50
+ /**
51
+ * Register the MCP server instance for sending log notifications.
52
+ * Must be called after server creation but before tools are invoked.
53
+ */
54
+ setServer(server) {
55
+ this.mcpServer = server;
56
+ }
57
+ /**
58
+ * Create a named logger instance.
59
+ *
60
+ * @param name - Logger name identifying the source module
61
+ */
62
+ createLogger(name) {
63
+ return {
64
+ debug: (data) => { this.log('debug', name, data); },
65
+ info: (data) => { this.log('info', name, data); },
66
+ notice: (data) => { this.log('notice', name, data); },
67
+ warning: (data) => { this.log('warning', name, data); },
68
+ error: (data) => { this.log('error', name, data); },
69
+ critical: (data) => { this.log('critical', name, data); },
70
+ alert: (data) => { this.log('alert', name, data); },
71
+ emergency: (data) => { this.log('emergency', name, data); },
72
+ };
73
+ }
74
+ log(level, loggerName, data) {
75
+ this.writeStderr(formatLogLine(level, loggerName, data));
76
+ this.sendMcpLog(level, loggerName, data);
77
+ }
78
+ sendMcpLog(level, loggerName, data) {
79
+ if (this.mcpServer === null) {
80
+ return;
81
+ }
82
+ // Fire-and-forget: don't await, don't throw
83
+ this.mcpServer.sendLoggingMessage({ level, logger: loggerName, data }).catch(() => {
84
+ // Silently ignore send failures (server may not be connected yet)
85
+ });
34
86
  }
35
- // Fire-and-forget: don't await, don't throw
36
- mcpServer.sendLoggingMessage({ level, logger: loggerName, data }).catch(() => {
37
- // Silently ignore send failures (server may not be connected yet)
38
- });
39
- }
40
- function log(level, loggerName, data) {
41
- writeStderr(level, loggerName, data);
42
- sendMcpLog(level, loggerName, data);
43
87
  }
44
88
  /**
45
- * Create a named logger instance.
89
+ * Create a stderr-only logger (no MCP notifications).
90
+ *
91
+ * Use this for bootstrap / transport code that runs before
92
+ * a ServerContext is available, or outside of a request scope.
46
93
  *
47
- * @param name - Logger name identifying the source module (e.g., 'search', 'cache', 'scraper')
94
+ * @param name - Logger name identifying the source module
95
+ * @param writeStderr - Optional writer function (defaults to console.error)
48
96
  */
49
- export function createLogger(name) {
97
+ export function createStderrLogger(name, writeStderr) {
98
+ const writer = writeStderr ?? defaultWriteStderr;
50
99
  return {
51
- debug: (data) => { log('debug', name, data); },
52
- info: (data) => { log('info', name, data); },
53
- notice: (data) => { log('notice', name, data); },
54
- warning: (data) => { log('warning', name, data); },
55
- error: (data) => { log('error', name, data); },
56
- critical: (data) => { log('critical', name, data); },
57
- alert: (data) => { log('alert', name, data); },
58
- emergency: (data) => { log('emergency', name, data); },
100
+ debug: (data) => { writer(formatLogLine('debug', name, data)); },
101
+ info: (data) => { writer(formatLogLine('info', name, data)); },
102
+ notice: (data) => { writer(formatLogLine('notice', name, data)); },
103
+ warning: (data) => { writer(formatLogLine('warning', name, data)); },
104
+ error: (data) => { writer(formatLogLine('error', name, data)); },
105
+ critical: (data) => { writer(formatLogLine('critical', name, data)); },
106
+ alert: (data) => { writer(formatLogLine('alert', name, data)); },
107
+ emergency: (data) => { writer(formatLogLine('emergency', name, data)); },
59
108
  };
60
109
  }
61
110
  //# sourceMappingURL=logging.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"logging.js","sourceRoot":"","sources":["../../../src/core/services/logging.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,IAAI,SAAS,GAAqB,IAAI,CAAC;AAEvC;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,MAAiB;IACzC,SAAS,GAAG,MAAM,CAAC;AACrB,CAAC;AAgBD,SAAS,WAAW,CAAC,KAAmB,EAAE,UAAkB,EAAE,IAAa;IACzE,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAClC,IAAI,OAAe,CAAC;IACpB,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,OAAO,GAAG,IAAI,CAAC;IACjB,CAAC;SAAM,CAAC;QACN,IAAI,CAAC;YACH,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IACD,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,UAAU,KAAK,OAAO,EAAE,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,UAAU,CAAC,KAAmB,EAAE,UAAkB,EAAE,IAAa;IACxE,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QACvB,OAAO;IACT,CAAC;IAED,4CAA4C;IAC5C,SAAS,CAAC,kBAAkB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;QAC3E,kEAAkE;IACpE,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,GAAG,CAAC,KAAmB,EAAE,UAAkB,EAAE,IAAa;IACjE,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;IACrC,UAAU,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;AACtC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO;QACL,KAAK,EAAE,CAAC,IAAa,EAAE,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QACvD,IAAI,EAAE,CAAC,IAAa,EAAE,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QACrD,MAAM,EAAE,CAAC,IAAa,EAAE,EAAE,GAAG,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QACzD,OAAO,EAAE,CAAC,IAAa,EAAE,EAAE,GAAG,GAAG,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3D,KAAK,EAAE,CAAC,IAAa,EAAE,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QACvD,QAAQ,EAAE,CAAC,IAAa,EAAE,EAAE,GAAG,GAAG,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7D,KAAK,EAAE,CAAC,IAAa,EAAE,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QACvD,SAAS,EAAE,CAAC,IAAa,EAAE,EAAE,GAAG,GAAG,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;KAChE,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"logging.js","sourceRoot":"","sources":["../../../src/core/services/logging.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Maps Registry — product/version/locale → mapId resolution
3
+ *
4
+ * Builds a lookup table from FT's GET /api/khub/maps response.
5
+ * All mapIds are dynamically discovered, nothing hardcoded.
6
+ *
7
+ * Key concepts:
8
+ * - `bundleStem`: product identifier without version (e.g., "jamf-pro-documentation")
9
+ * Derived from `version_bundle_stem` metadata, or parsed from `bundle` values.
10
+ * - Each map is locale-specific (separate mapId per language)
11
+ * - `latestVersion=yes` marks the current version
12
+ */
13
+ import { fetchMaps } from './ft-client.js';
14
+ import { type LocaleId } from '../constants.js';
15
+ import type { CacheProvider, MapsProvider } from './interfaces/index.js';
16
+ export interface MapEntry {
17
+ mapId: string;
18
+ title: string;
19
+ bundleStem: string;
20
+ version: string;
21
+ locale: string;
22
+ isLatest: boolean;
23
+ bundleValues: string[];
24
+ }
25
+ export interface RegistryProductInfo {
26
+ bundleStem: string;
27
+ title: string;
28
+ versions: string[];
29
+ }
30
+ export declare class MapsRegistry {
31
+ private readonly cache;
32
+ private entries;
33
+ private builtAt;
34
+ private buildPromise;
35
+ private readonly fetchMapsFn;
36
+ private readonly mapsProvider;
37
+ private readonly cacheTtl;
38
+ constructor(cache: CacheProvider, fetchMapsFn?: typeof fetchMaps, mapsProvider?: MapsProvider, cacheTtl?: number);
39
+ /**
40
+ * Reset the registry so the next `ensureBuilt()` call re-fetches from
41
+ * the API (or cache). Use this to force invalidation when stale data
42
+ * is suspected.
43
+ */
44
+ reset(): void;
45
+ /**
46
+ * Build the registry from FT API (cached).
47
+ * Uses in-flight deduplication to prevent thundering herd when
48
+ * multiple concurrent callers invoke ensureBuilt() simultaneously.
49
+ */
50
+ ensureBuilt(): Promise<void>;
51
+ /**
52
+ * Internal build logic: fetch maps from cache or API and populate entries.
53
+ */
54
+ private doBuild;
55
+ private parseMap;
56
+ /**
57
+ * Resolve a product + optional version + locale to a mapId.
58
+ * Returns null if not found.
59
+ */
60
+ resolveMapId(bundleStem: string, version?: string, locale?: LocaleId): Promise<string | null>;
61
+ private findMap;
62
+ /**
63
+ * Resolve a legacy bundleId (e.g., "jamf-pro-documentation-11.12.0")
64
+ * to a mapId.
65
+ */
66
+ resolveFromBundleId(bundleId: string, locale?: LocaleId): Promise<string | null>;
67
+ /**
68
+ * Find the glossary map for a given locale.
69
+ * Searches for maps with bundleStem containing "glossary".
70
+ */
71
+ resolveGlossaryMapId(locale?: LocaleId): Promise<string | null>;
72
+ /**
73
+ * Get all unique products for a locale.
74
+ */
75
+ getProducts(locale?: LocaleId): Promise<RegistryProductInfo[]>;
76
+ /**
77
+ * Get available versions for a product.
78
+ * Filters entries directly instead of rebuilding the full product catalogue.
79
+ */
80
+ getVersions(bundleStem: string, locale?: LocaleId): Promise<string[]>;
81
+ }
82
+ //# sourceMappingURL=maps-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"maps-registry.d.ts","sourceRoot":"","sources":["../../../src/core/services/maps-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEhE,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAWzE,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AA+BD,qBAAa,YAAY;IASrB,OAAO,CAAC,QAAQ,CAAC,KAAK;IARxB,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,YAAY,CAA8B;IAClD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAmB;IAC/C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA2B;IACxD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAGf,KAAK,EAAE,aAAa,EACrC,WAAW,CAAC,EAAE,OAAO,SAAS,EAC9B,YAAY,CAAC,EAAE,YAAY,EAC3B,QAAQ,CAAC,EAAE,MAAM;IAOnB;;;;OAIG;IACH,KAAK,IAAI,IAAI;IAKb;;;;OAIG;IACG,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAclC;;OAEG;YACW,OAAO;IAiBrB,OAAO,CAAC,QAAQ;IAahB;;;OAGG;IACG,YAAY,CAChB,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,QAAQ,GAChB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAgBzB,OAAO,CAAC,OAAO;IAkBf;;;OAGG;IACG,mBAAmB,CACvB,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,QAAQ,GAChB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAwBzB;;;OAGG;IACG,oBAAoB,CAAC,MAAM,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAarE;;OAEG;IACG,WAAW,CAAC,MAAM,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAoCpE;;;OAGG;IACG,WAAW,CACf,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,QAAQ,GAChB,OAAO,CAAC,MAAM,EAAE,CAAC;CAcrB"}
@@ -0,0 +1,232 @@
1
+ /**
2
+ * Maps Registry — product/version/locale → mapId resolution
3
+ *
4
+ * Builds a lookup table from FT's GET /api/khub/maps response.
5
+ * All mapIds are dynamically discovered, nothing hardcoded.
6
+ *
7
+ * Key concepts:
8
+ * - `bundleStem`: product identifier without version (e.g., "jamf-pro-documentation")
9
+ * Derived from `version_bundle_stem` metadata, or parsed from `bundle` values.
10
+ * - Each map is locale-specific (separate mapId per language)
11
+ * - `latestVersion=yes` marks the current version
12
+ */
13
+ import { fetchMaps } from './ft-client.js';
14
+ import { DEFAULT_LOCALE } from '../constants.js';
15
+ import { getMetaValue, getMetaValues, FT_META } from '../utils/ft-metadata.js';
16
+ import { compareVersions, extractVersionFromBundleId, stripVersionSuffix, stripCurrentSuffix, } from '../utils/bundle.js';
17
+ // ─── Metadata helpers ───────────────────────────────────────────
18
+ /**
19
+ * Derive bundleStem from metadata.
20
+ * Prefers `version_bundle_stem` (clean stem), otherwise parses `bundle` values.
21
+ */
22
+ function deriveBundleStem(metadata) {
23
+ const stem = getMetaValue(metadata, FT_META.VERSION_BUNDLE_STEM);
24
+ if (stem !== '') {
25
+ return stem;
26
+ }
27
+ // Parse from bundle values: strip version suffixes and "-current"
28
+ const bundles = getMetaValues(metadata, FT_META.BUNDLE);
29
+ if (bundles.length === 0) {
30
+ return '';
31
+ }
32
+ // Take the shortest bundle value as it's likely the stem
33
+ // e.g., ['jamf-pro-documentation-11.26.0', 'jamf-pro-documentation-current']
34
+ // → sorted by length → 'jamf-pro-documentation-current'
35
+ // Then strip known suffixes
36
+ const sorted = [...bundles].sort((a, b) => a.length - b.length);
37
+ const candidate = sorted[0] ?? '';
38
+ return stripVersionSuffix(stripCurrentSuffix(candidate));
39
+ }
40
+ // ─── Registry ───────────────────────────────────────────────────
41
+ const CACHE_KEY = 'maps-registry';
42
+ const DEFAULT_CACHE_TTL = 24 * 60 * 60 * 1000; // 24 hours
43
+ const GLOSSARY_BUNDLE_STEM = 'jamf-technical-glossary';
44
+ export class MapsRegistry {
45
+ cache;
46
+ entries = [];
47
+ builtAt = 0;
48
+ buildPromise = null;
49
+ fetchMapsFn;
50
+ mapsProvider;
51
+ cacheTtl;
52
+ constructor(cache, fetchMapsFn, mapsProvider, cacheTtl) {
53
+ this.cache = cache;
54
+ this.fetchMapsFn = fetchMapsFn ?? fetchMaps;
55
+ this.mapsProvider = mapsProvider;
56
+ this.cacheTtl = cacheTtl ?? DEFAULT_CACHE_TTL;
57
+ }
58
+ /**
59
+ * Reset the registry so the next `ensureBuilt()` call re-fetches from
60
+ * the API (or cache). Use this to force invalidation when stale data
61
+ * is suspected.
62
+ */
63
+ reset() {
64
+ this.builtAt = 0;
65
+ this.entries = [];
66
+ }
67
+ /**
68
+ * Build the registry from FT API (cached).
69
+ * Uses in-flight deduplication to prevent thundering herd when
70
+ * multiple concurrent callers invoke ensureBuilt() simultaneously.
71
+ */
72
+ async ensureBuilt() {
73
+ if (this.builtAt > 0 && (Date.now() - this.builtAt) < this.cacheTtl) {
74
+ return;
75
+ }
76
+ if (this.buildPromise !== null) {
77
+ await this.buildPromise;
78
+ return;
79
+ }
80
+ this.buildPromise = this.doBuild();
81
+ try {
82
+ await this.buildPromise;
83
+ }
84
+ finally {
85
+ this.buildPromise = null;
86
+ }
87
+ }
88
+ /**
89
+ * Internal build logic: fetch maps from cache or API and populate entries.
90
+ */
91
+ async doBuild() {
92
+ const cached = await this.cache.get(CACHE_KEY);
93
+ if (cached !== null) {
94
+ this.entries = cached;
95
+ this.builtAt = Date.now();
96
+ return;
97
+ }
98
+ const maps = this.mapsProvider !== undefined
99
+ ? await this.mapsProvider.getMaps()
100
+ : await this.fetchMapsFn();
101
+ this.entries = maps.map(m => this.parseMap(m));
102
+ this.builtAt = Date.now();
103
+ await this.cache.set(CACHE_KEY, this.entries, this.cacheTtl);
104
+ }
105
+ parseMap(map) {
106
+ const { metadata } = map;
107
+ return {
108
+ mapId: map.id,
109
+ title: map.title,
110
+ bundleStem: deriveBundleStem(metadata),
111
+ version: getMetaValue(metadata, FT_META.VERSION),
112
+ locale: getMetaValue(metadata, FT_META.LOCALE),
113
+ isLatest: getMetaValue(metadata, FT_META.LATEST_VERSION) === 'yes',
114
+ bundleValues: getMetaValues(metadata, FT_META.BUNDLE),
115
+ };
116
+ }
117
+ /**
118
+ * Resolve a product + optional version + locale to a mapId.
119
+ * Returns null if not found.
120
+ */
121
+ async resolveMapId(bundleStem, version, locale) {
122
+ await this.ensureBuilt();
123
+ const loc = locale ?? DEFAULT_LOCALE;
124
+ // Normalize: strip -current suffix if present
125
+ const normalizedStem = stripCurrentSuffix(bundleStem);
126
+ // Try exact locale first, then fallback to en-US
127
+ const match = this.findMap(normalizedStem, version, loc)
128
+ ?? (loc !== DEFAULT_LOCALE
129
+ ? this.findMap(normalizedStem, version, DEFAULT_LOCALE)
130
+ : null);
131
+ return match?.mapId ?? null;
132
+ }
133
+ findMap(bundleStem, version, locale) {
134
+ const candidates = this.entries.filter(e => e.bundleStem === bundleStem && e.locale === locale);
135
+ if (version !== undefined && version !== '' && version !== 'current') {
136
+ return candidates.find(e => e.version === version);
137
+ }
138
+ // Default: latest version
139
+ return candidates.find(e => e.isLatest)
140
+ ?? candidates[0]; // fallback to any match
141
+ }
142
+ /**
143
+ * Resolve a legacy bundleId (e.g., "jamf-pro-documentation-11.12.0")
144
+ * to a mapId.
145
+ */
146
+ async resolveFromBundleId(bundleId, locale) {
147
+ await this.ensureBuilt();
148
+ const loc = locale ?? DEFAULT_LOCALE;
149
+ // Direct match against bundle metadata values
150
+ const direct = this.entries.find(e => e.locale === loc && e.bundleValues.includes(bundleId));
151
+ if (direct) {
152
+ return direct.mapId;
153
+ }
154
+ // Fallback: parse stem + version from bundleId
155
+ const stripped = stripCurrentSuffix(bundleId);
156
+ // Try to extract version: "jamf-pro-documentation-11.12.0" → version = "11.12.0"
157
+ const version = extractVersionFromBundleId(stripped);
158
+ if (version !== null) {
159
+ const stem = stripVersionSuffix(stripped);
160
+ return await this.resolveMapId(stem, version, locale);
161
+ }
162
+ // No version — treat as stem, resolve latest
163
+ return await this.resolveMapId(stripped, undefined, locale);
164
+ }
165
+ /**
166
+ * Find the glossary map for a given locale.
167
+ * Searches for maps with bundleStem containing "glossary".
168
+ */
169
+ async resolveGlossaryMapId(locale) {
170
+ await this.ensureBuilt();
171
+ const loc = locale ?? DEFAULT_LOCALE;
172
+ const match = this.entries.find(e => e.bundleStem === GLOSSARY_BUNDLE_STEM && e.locale === loc) ?? this.entries.find(e => e.bundleStem === GLOSSARY_BUNDLE_STEM && e.locale === DEFAULT_LOCALE);
173
+ return match?.mapId ?? null;
174
+ }
175
+ /**
176
+ * Get all unique products for a locale.
177
+ */
178
+ async getProducts(locale) {
179
+ await this.ensureBuilt();
180
+ const loc = locale ?? DEFAULT_LOCALE;
181
+ const productMap = new Map();
182
+ for (const entry of this.entries) {
183
+ if (entry.locale !== loc) {
184
+ continue;
185
+ }
186
+ if (entry.bundleStem === '') {
187
+ continue;
188
+ }
189
+ const existing = productMap.get(entry.bundleStem);
190
+ if (existing) {
191
+ if (entry.version !== '' && !existing.versions.includes(entry.version)) {
192
+ existing.versions.push(entry.version);
193
+ }
194
+ // Use latest version's title
195
+ if (entry.isLatest) {
196
+ existing.title = entry.title;
197
+ }
198
+ }
199
+ else {
200
+ productMap.set(entry.bundleStem, {
201
+ bundleStem: entry.bundleStem,
202
+ title: entry.title,
203
+ versions: entry.version !== '' ? [entry.version] : [],
204
+ });
205
+ }
206
+ }
207
+ // Sort versions descending within each product
208
+ for (const product of productMap.values()) {
209
+ product.versions.sort((a, b) => compareVersions(b, a));
210
+ }
211
+ return [...productMap.values()];
212
+ }
213
+ /**
214
+ * Get available versions for a product.
215
+ * Filters entries directly instead of rebuilding the full product catalogue.
216
+ */
217
+ async getVersions(bundleStem, locale) {
218
+ await this.ensureBuilt();
219
+ const loc = locale ?? DEFAULT_LOCALE;
220
+ const versions = [];
221
+ for (const entry of this.entries) {
222
+ if (entry.bundleStem !== bundleStem || entry.locale !== loc) {
223
+ continue;
224
+ }
225
+ if (entry.version !== '' && !versions.includes(entry.version)) {
226
+ versions.push(entry.version);
227
+ }
228
+ }
229
+ return versions.sort((a, b) => compareVersions(b, a));
230
+ }
231
+ }
232
+ //# sourceMappingURL=maps-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"maps-registry.js","sourceRoot":"","sources":["../../../src/core/services/maps-registry.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * Metadata service for Jamf documentation
3
3
  *
4
- * Dynamically fetches product versions and topic categories from the API
5
- * with fallback to static constants.
4
+ * Dynamically fetches product versions and topic categories from the
5
+ * Fluid Topics MapsRegistry with fallback to static constants.
6
6
  */
7
7
  import { type ProductId } from '../constants.js';
8
8
  import type { ServerContext } from '../types/context.js';
@@ -28,25 +28,34 @@ export interface TocCategory {
28
28
  children: string[];
29
29
  }
30
30
  /**
31
- * Get all products with their latest metadata
32
- * Uses cache with fallback to static constants
31
+ * Get all products with their latest metadata.
32
+ * Uses MapsRegistry to discover products and versions dynamically,
33
+ * with fallback to static JAMF_PRODUCTS constants.
33
34
  */
34
35
  export declare function getProductsMetadata(ctx: ServerContext): Promise<ProductMetadata[]>;
35
36
  /**
36
- * Get the bundle ID for a specific product and version
37
- * Returns the latest bundle ID if version is undefined or 'current'
37
+ * Get the bundle ID for a specific product and version.
38
+ * Returns the latest bundle ID if version is undefined or 'current'.
39
+ *
40
+ * The returned value is a legacy-compatible bundleId string
41
+ * (e.g. 'jamf-pro-documentation-11.24.0') used for URL construction.
38
42
  */
39
43
  export declare function getBundleIdForVersion(ctx: ServerContext, productId: ProductId, version?: string): Promise<string | null>;
40
44
  /**
41
- * Get available versions for a product
45
+ * Get available versions for a product.
46
+ *
47
+ * Uses MapsRegistry.getVersions() to fetch versions for a single product
48
+ * instead of loading the full product catalogue via getProductsMetadata().
49
+ * Falls back to the static JAMF_PRODUCTS constant on failure.
42
50
  */
43
51
  export declare function getAvailableVersions(ctx: ServerContext, productId: ProductId): Promise<string[]>;
44
52
  /**
45
- * Get all topics, combining TOC-derived from all products and manual topics
53
+ * Get all topics. Returns manual topics from JAMF_TOPICS constants.
54
+ * The manual topics serve as the authoritative topic category list.
46
55
  */
47
56
  export declare function getTopicsMetadata(ctx: ServerContext): Promise<TopicMetadata[]>;
48
57
  /**
49
- * Check which products have TOC content available
58
+ * Check which products have documentation available via MapsRegistry.
50
59
  */
51
60
  export declare function getProductAvailability(ctx: ServerContext): Promise<Record<string, boolean>>;
52
61
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../../src/core/services/metadata.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAIL,KAAK,SAAS,EACf,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAQzD,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,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,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAuID;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAiDxF;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,aAAa,EAClB,SAAS,EAAE,SAAS,EACpB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAuBxB;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,aAAa,EAClB,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC,MAAM,EAAE,CAAC,CAInB;AAwHD;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAgDpF;AAMD;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAgCjG;AAMD;;GAEG;AACH,wBAAsB,uBAAuB,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC;IACzE,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE;QACR,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,aAAa,EAAE,MAAM,CAAC;QACtB,iBAAiB,EAAE,MAAM,EAAE,CAAC;QAC5B,QAAQ,EAAE,MAAM,CAAC;KAClB,EAAE,CAAC;IACJ,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC,CAgBD;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC;IACvE,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE;QACN,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,EAAE,CAAC;IACJ,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC,CAeD"}
1
+ {"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../../src/core/services/metadata.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAGL,KAAK,SAAS,EACf,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAMzD,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,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,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AA8DD;;;;GAIG;AACH,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CA4CxF;AAED;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,aAAa,EAClB,SAAS,EAAE,SAAS,EACpB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA0BxB;AAED;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,aAAa,EAClB,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC,MAAM,EAAE,CAAC,CAiBnB;AAMD;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAuBpF;AAMD;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,aAAa,GACjB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAkClC;AAMD;;GAEG;AACH,wBAAsB,uBAAuB,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC;IACzE,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE;QACR,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,aAAa,EAAE,MAAM,CAAC;QACtB,iBAAiB,EAAE,MAAM,EAAE,CAAC;QAC5B,QAAQ,EAAE,MAAM,CAAC;KAClB,EAAE,CAAC;IACJ,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC,CAgBD;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC;IACvE,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE;QACN,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,EAAE,CAAC;IACJ,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC,CAeD"}