@get-technology-inc/jamf-docs-mcp-server 1.1.0 → 1.2.0
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.
- package/dist/completions.d.ts +13 -0
- package/dist/completions.d.ts.map +1 -0
- package/dist/completions.js +31 -0
- package/dist/completions.js.map +1 -0
- package/dist/constants.d.ts +119 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +178 -13
- package/dist/constants.js.map +1 -1
- package/dist/index.js +43 -7
- package/dist/index.js.map +1 -1
- package/dist/prompts/compare-versions.d.ts +7 -0
- package/dist/prompts/compare-versions.d.ts.map +1 -0
- package/dist/prompts/compare-versions.js +56 -0
- package/dist/prompts/compare-versions.js.map +1 -0
- package/dist/prompts/index.d.ts +6 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +12 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/prompts/setup-guide.d.ts +7 -0
- package/dist/prompts/setup-guide.d.ts.map +1 -0
- package/dist/prompts/setup-guide.js +53 -0
- package/dist/prompts/setup-guide.js.map +1 -0
- package/dist/prompts/troubleshoot.d.ts +7 -0
- package/dist/prompts/troubleshoot.d.ts.map +1 -0
- package/dist/prompts/troubleshoot.js +52 -0
- package/dist/prompts/troubleshoot.js.map +1 -0
- package/dist/resources/index.d.ts.map +1 -1
- package/dist/resources/index.js +78 -2
- package/dist/resources/index.js.map +1 -1
- package/dist/schemas/index.d.ts +10 -7
- package/dist/schemas/index.d.ts.map +1 -1
- package/dist/schemas/index.js +18 -16
- package/dist/schemas/index.js.map +1 -1
- package/dist/schemas/output.d.ts +63 -0
- package/dist/schemas/output.d.ts.map +1 -0
- package/dist/schemas/output.js +63 -0
- package/dist/schemas/output.js.map +1 -0
- package/dist/services/cache.d.ts +37 -3
- package/dist/services/cache.d.ts.map +1 -1
- package/dist/services/cache.js +139 -15
- package/dist/services/cache.js.map +1 -1
- package/dist/services/metadata.d.ts.map +1 -1
- package/dist/services/metadata.js +22 -9
- package/dist/services/metadata.js.map +1 -1
- package/dist/services/scraper.d.ts +1 -0
- package/dist/services/scraper.d.ts.map +1 -1
- package/dist/services/scraper.js +59 -10
- package/dist/services/scraper.js.map +1 -1
- package/dist/tools/get-article.d.ts.map +1 -1
- package/dist/tools/get-article.js +36 -10
- package/dist/tools/get-article.js.map +1 -1
- package/dist/tools/get-toc.d.ts.map +1 -1
- package/dist/tools/get-toc.js +37 -7
- package/dist/tools/get-toc.js.map +1 -1
- package/dist/tools/list-products.d.ts.map +1 -1
- package/dist/tools/list-products.js +23 -12
- package/dist/tools/list-products.js.map +1 -1
- package/dist/tools/search.d.ts.map +1 -1
- package/dist/tools/search.js +50 -17
- package/dist/tools/search.js.map +1 -1
- package/dist/transport/http.d.ts +12 -0
- package/dist/transport/http.d.ts.map +1 -0
- package/dist/transport/http.js +297 -0
- package/dist/transport/http.js.map +1 -0
- package/dist/transport/index.d.ts +13 -0
- package/dist/transport/index.d.ts.map +1 -0
- package/dist/transport/index.js +40 -0
- package/dist/transport/index.js.map +1 -0
- package/dist/types.d.ts +5 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/doc-type.d.ts +9 -0
- package/dist/utils/doc-type.d.ts.map +1 -0
- package/dist/utils/doc-type.js +16 -0
- package/dist/utils/doc-type.js.map +1 -0
- package/dist/utils/progress.d.ts +13 -0
- package/dist/utils/progress.d.ts.map +1 -0
- package/dist/utils/progress.js +18 -0
- package/dist/utils/progress.js.map +1 -0
- package/dist/utils/sanitize.d.ts +30 -0
- package/dist/utils/sanitize.d.ts.map +1 -0
- package/dist/utils/sanitize.js +57 -0
- package/dist/utils/sanitize.js.map +1 -0
- package/dist/utils/url.d.ts +11 -0
- package/dist/utils/url.d.ts.map +1 -0
- package/dist/utils/url.js +23 -0
- package/dist/utils/url.js.map +1 -0
- package/package.json +7 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compare-versions.js","sourceRoot":"","sources":["../../src/prompts/compare-versions.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,iDAAiD,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,MAAM,UAAU,6BAA6B,CAAC,MAAiB;IAC7D,MAAM,CAAC,cAAc,CACnB,uBAAuB,EACvB;QACE,KAAK,EAAE,uBAAuB;QAC9B,WAAW,EACT,kFAAkF;QACpF,UAAU,EAAE;YACV,OAAO,EAAE,WAAW,CAClB,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAC1B,qEAAqE,CACtE,EACD,eAAe,CAChB;YACD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,2CAA2C,CAAC;YACnF,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,6CAA6C,CAAC;SACtF;KACF,EACD,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE;QACxD,OAAO;YACL,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAe;oBACrB,OAAO,EAAE;wBACP,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,kDAAkD,QAAQ,QAAQ,QAAQ,OAAO,OAAO;;;;;6CAK/D,OAAO,kBAAkB,QAAQ,+BAA+B,QAAQ;;;;6BAIxF,QAAQ;6BACR,QAAQ;;;;;;;;oCAQD,QAAQ;;;;;WAKjC,OAAO;aACL,QAAQ;aACR,QAAQ,EAAE;qBACV;iBACF;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKzE,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAIvD"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Prompt registration
|
|
3
|
+
*/
|
|
4
|
+
import { registerTroubleshootPrompt } from './troubleshoot.js';
|
|
5
|
+
import { registerSetupGuidePrompt } from './setup-guide.js';
|
|
6
|
+
import { registerCompareVersionsPrompt } from './compare-versions.js';
|
|
7
|
+
export function registerPrompts(server) {
|
|
8
|
+
registerTroubleshootPrompt(server);
|
|
9
|
+
registerSetupGuidePrompt(server);
|
|
10
|
+
registerCompareVersionsPrompt(server);
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,6BAA6B,EAAE,MAAM,uBAAuB,CAAC;AAEtE,MAAM,UAAU,eAAe,CAAC,MAAiB;IAC/C,0BAA0B,CAAC,MAAM,CAAC,CAAC;IACnC,wBAAwB,CAAC,MAAM,CAAC,CAAC;IACjC,6BAA6B,CAAC,MAAM,CAAC,CAAC;AACxC,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* jamf_setup_guide prompt
|
|
3
|
+
* Guides AI through creating a setup guide from Jamf documentation.
|
|
4
|
+
*/
|
|
5
|
+
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
6
|
+
export declare function registerSetupGuidePrompt(server: McpServer): void;
|
|
7
|
+
//# sourceMappingURL=setup-guide.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-guide.d.ts","sourceRoot":"","sources":["../../src/prompts/setup-guide.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKzE,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAsDhE"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* jamf_setup_guide prompt
|
|
3
|
+
* Guides AI through creating a setup guide from Jamf documentation.
|
|
4
|
+
*/
|
|
5
|
+
import { z } from 'zod';
|
|
6
|
+
import { completable } from '@modelcontextprotocol/sdk/server/completable.js';
|
|
7
|
+
import { completeProduct } from '../completions.js';
|
|
8
|
+
export function registerSetupGuidePrompt(server) {
|
|
9
|
+
server.registerPrompt('jamf_setup_guide', {
|
|
10
|
+
title: 'Jamf Setup Guide',
|
|
11
|
+
description: 'Generate a step-by-step setup guide for a Jamf feature using official documentation',
|
|
12
|
+
argsSchema: {
|
|
13
|
+
feature: z.string().max(2000).describe('The feature or capability to set up'),
|
|
14
|
+
product: completable(z.string().optional().describe('Jamf product ID (jamf-pro, jamf-school, jamf-connect, jamf-protect)'), completeProduct),
|
|
15
|
+
},
|
|
16
|
+
}, ({ feature, product }) => {
|
|
17
|
+
const productFilter = product !== undefined && product !== ''
|
|
18
|
+
? `, product: "${product}"`
|
|
19
|
+
: '';
|
|
20
|
+
return {
|
|
21
|
+
messages: [
|
|
22
|
+
{
|
|
23
|
+
role: 'user',
|
|
24
|
+
content: {
|
|
25
|
+
type: 'text',
|
|
26
|
+
text: `I need a step-by-step setup guide for: "${feature}"
|
|
27
|
+
|
|
28
|
+
Please follow these steps using the Jamf documentation tools:
|
|
29
|
+
|
|
30
|
+
1. **Search for setup documentation**
|
|
31
|
+
Use \`jamf_docs_search\` with query related to "${feature}" setup/configuration${productFilter !== '' ? ` and filter by ${productFilter}` : ''}.
|
|
32
|
+
|
|
33
|
+
2. **Find the primary setup article**
|
|
34
|
+
Review search results and use \`jamf_docs_get_article\` with \`summaryOnly: true\` to identify the main setup/configuration article.
|
|
35
|
+
|
|
36
|
+
3. **Extract detailed steps**
|
|
37
|
+
Use \`jamf_docs_get_article\` to get the full content of the primary article. If it's long, use the \`section\` parameter to fetch specific sections like "Prerequisites" or "Configuration".
|
|
38
|
+
|
|
39
|
+
4. **Compile the setup guide**
|
|
40
|
+
Based on the documentation, provide:
|
|
41
|
+
- Prerequisites and requirements
|
|
42
|
+
- Step-by-step setup instructions
|
|
43
|
+
- Configuration options and recommendations
|
|
44
|
+
- Verification steps to confirm successful setup
|
|
45
|
+
|
|
46
|
+
Feature: ${feature}${product !== undefined && product !== '' ? `\nProduct: ${product}` : ''}`,
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
],
|
|
50
|
+
};
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=setup-guide.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-guide.js","sourceRoot":"","sources":["../../src/prompts/setup-guide.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,iDAAiD,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,MAAM,UAAU,wBAAwB,CAAC,MAAiB;IACxD,MAAM,CAAC,cAAc,CACnB,kBAAkB,EAClB;QACE,KAAK,EAAE,kBAAkB;QACzB,WAAW,EACT,qFAAqF;QACvF,UAAU,EAAE;YACV,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,qCAAqC,CAAC;YAC7E,OAAO,EAAE,WAAW,CAClB,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAC5B,qEAAqE,CACtE,EACD,eAAe,CAChB;SACF;KACF,EACD,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE;QACvB,MAAM,aAAa,GAAG,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,EAAE;YAC3D,CAAC,CAAC,eAAe,OAAO,GAAG;YAC3B,CAAC,CAAC,EAAE,CAAC;QACP,OAAO;YACL,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAe;oBACrB,OAAO,EAAE;wBACP,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,2CAA2C,OAAO;;;;;qDAKjB,OAAO,wBAAwB,aAAa,KAAK,EAAE,CAAC,CAAC,CAAC,kBAAkB,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;;;;WAetI,OAAO,GAAG,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,cAAc,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;qBAChF;iBACF;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* jamf_troubleshoot prompt
|
|
3
|
+
* Guides AI through a troubleshooting workflow using Jamf documentation.
|
|
4
|
+
*/
|
|
5
|
+
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
6
|
+
export declare function registerTroubleshootPrompt(server: McpServer): void;
|
|
7
|
+
//# sourceMappingURL=troubleshoot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"troubleshoot.d.ts","sourceRoot":"","sources":["../../src/prompts/troubleshoot.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKzE,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAoDlE"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* jamf_troubleshoot prompt
|
|
3
|
+
* Guides AI through a troubleshooting workflow using Jamf documentation.
|
|
4
|
+
*/
|
|
5
|
+
import { z } from 'zod';
|
|
6
|
+
import { completable } from '@modelcontextprotocol/sdk/server/completable.js';
|
|
7
|
+
import { completeProduct } from '../completions.js';
|
|
8
|
+
export function registerTroubleshootPrompt(server) {
|
|
9
|
+
server.registerPrompt('jamf_troubleshoot', {
|
|
10
|
+
title: 'Troubleshoot Jamf Issue',
|
|
11
|
+
description: 'Guide through troubleshooting a Jamf issue using official documentation',
|
|
12
|
+
argsSchema: {
|
|
13
|
+
problem: z.string().max(2000).describe('Description of the issue to troubleshoot'),
|
|
14
|
+
product: completable(z.string().optional().describe('Jamf product ID (jamf-pro, jamf-school, jamf-connect, jamf-protect)'), completeProduct),
|
|
15
|
+
},
|
|
16
|
+
}, ({ problem, product }) => {
|
|
17
|
+
const productFilter = product !== undefined && product !== ''
|
|
18
|
+
? `, product: "${product}"`
|
|
19
|
+
: '';
|
|
20
|
+
return {
|
|
21
|
+
messages: [
|
|
22
|
+
{
|
|
23
|
+
role: 'user',
|
|
24
|
+
content: {
|
|
25
|
+
type: 'text',
|
|
26
|
+
text: `I need help troubleshooting a Jamf issue: "${problem}"
|
|
27
|
+
|
|
28
|
+
Please follow these steps using the Jamf documentation tools:
|
|
29
|
+
|
|
30
|
+
1. **Search for relevant documentation**
|
|
31
|
+
Use \`jamf_docs_search\` with query based on the problem description${productFilter !== '' ? ` and filter by ${productFilter}` : ''}.
|
|
32
|
+
|
|
33
|
+
2. **Review the most relevant articles**
|
|
34
|
+
For each promising search result, use \`jamf_docs_get_article\` with \`summaryOnly: true\` to quickly assess relevance.
|
|
35
|
+
|
|
36
|
+
3. **Deep dive into the solution**
|
|
37
|
+
For the most relevant article(s), use \`jamf_docs_get_article\` with the full content to find specific troubleshooting steps.
|
|
38
|
+
|
|
39
|
+
4. **Provide a structured diagnosis**
|
|
40
|
+
Based on the documentation, provide:
|
|
41
|
+
- Likely root cause(s)
|
|
42
|
+
- Step-by-step resolution
|
|
43
|
+
- Related articles for further reference
|
|
44
|
+
|
|
45
|
+
Problem: ${problem}${product !== undefined && product !== '' ? `\nProduct: ${product}` : ''}`,
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
],
|
|
49
|
+
};
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=troubleshoot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"troubleshoot.js","sourceRoot":"","sources":["../../src/prompts/troubleshoot.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,iDAAiD,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,MAAM,UAAU,0BAA0B,CAAC,MAAiB;IAC1D,MAAM,CAAC,cAAc,CACnB,mBAAmB,EACnB;QACE,KAAK,EAAE,yBAAyB;QAChC,WAAW,EAAE,yEAAyE;QACtF,UAAU,EAAE;YACV,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,0CAA0C,CAAC;YAClF,OAAO,EAAE,WAAW,CAClB,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAC5B,qEAAqE,CACtE,EACD,eAAe,CAChB;SACF;KACF,EACD,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE;QACvB,MAAM,aAAa,GAAG,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,EAAE;YAC3D,CAAC,CAAC,eAAe,OAAO,GAAG;YAC3B,CAAC,CAAC,EAAE,CAAC;QACP,OAAO;YACL,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAe;oBACrB,OAAO,EAAE;wBACP,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,8CAA8C,OAAO;;;;;yEAKA,aAAa,KAAK,EAAE,CAAC,CAAC,CAAC,kBAAkB,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;;;WAc3H,OAAO,GAAG,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,cAAc,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;qBAChF;iBACF;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/resources/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/resources/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAgCzE;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAoHzD"}
|
package/dist/resources/index.js
CHANGED
|
@@ -5,7 +5,28 @@
|
|
|
5
5
|
* without needing to call tools. Data is fetched from the API
|
|
6
6
|
* with fallback to static constants.
|
|
7
7
|
*/
|
|
8
|
-
import {
|
|
8
|
+
import { ResourceTemplate } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
9
|
+
import { JAMF_PRODUCTS } from '../constants.js';
|
|
10
|
+
import { getProductsResourceData, getTopicsResourceData, getAvailableVersions } from '../services/metadata.js';
|
|
11
|
+
import { fetchTableOfContents } from '../services/scraper.js';
|
|
12
|
+
import { completeProduct } from '../completions.js';
|
|
13
|
+
function validateProductId(productId, uri) {
|
|
14
|
+
const productIdStr = String(productId);
|
|
15
|
+
if (productIdStr in JAMF_PRODUCTS) {
|
|
16
|
+
return { valid: true, id: productIdStr };
|
|
17
|
+
}
|
|
18
|
+
const validIds = Object.keys(JAMF_PRODUCTS).join(', ');
|
|
19
|
+
return {
|
|
20
|
+
valid: false,
|
|
21
|
+
errorResponse: {
|
|
22
|
+
contents: [{
|
|
23
|
+
uri: uri.href,
|
|
24
|
+
mimeType: 'text/plain',
|
|
25
|
+
text: `Invalid product ID: "${productIdStr}". Valid products: ${validIds}`,
|
|
26
|
+
}],
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
}
|
|
9
30
|
/**
|
|
10
31
|
* Register all MCP resources
|
|
11
32
|
*/
|
|
@@ -40,6 +61,61 @@ export function registerResources(server) {
|
|
|
40
61
|
}]
|
|
41
62
|
};
|
|
42
63
|
});
|
|
43
|
-
|
|
64
|
+
// Resource template: Product-specific TOC
|
|
65
|
+
server.registerResource('product-toc', new ResourceTemplate('jamf://products/{productId}/toc', {
|
|
66
|
+
list: undefined,
|
|
67
|
+
complete: { productId: completeProduct },
|
|
68
|
+
}), {
|
|
69
|
+
title: 'Product Table of Contents',
|
|
70
|
+
description: 'Table of contents for a specific Jamf product documentation',
|
|
71
|
+
mimeType: 'application/json',
|
|
72
|
+
}, async (uri, { productId }) => {
|
|
73
|
+
const validation = validateProductId(productId, uri);
|
|
74
|
+
if (!validation.valid) {
|
|
75
|
+
return validation.errorResponse;
|
|
76
|
+
}
|
|
77
|
+
const tocResult = await fetchTableOfContents(validation.id, 'current', {
|
|
78
|
+
maxTokens: 20000,
|
|
79
|
+
});
|
|
80
|
+
return {
|
|
81
|
+
contents: [{
|
|
82
|
+
uri: uri.href,
|
|
83
|
+
mimeType: 'application/json',
|
|
84
|
+
text: JSON.stringify({
|
|
85
|
+
product: JAMF_PRODUCTS[validation.id].name,
|
|
86
|
+
totalEntries: tocResult.pagination.totalItems,
|
|
87
|
+
toc: tocResult.toc,
|
|
88
|
+
}, null, 2),
|
|
89
|
+
}],
|
|
90
|
+
};
|
|
91
|
+
});
|
|
92
|
+
// Resource template: Product-specific versions
|
|
93
|
+
server.registerResource('product-versions', new ResourceTemplate('jamf://products/{productId}/versions', {
|
|
94
|
+
list: undefined,
|
|
95
|
+
complete: { productId: completeProduct },
|
|
96
|
+
}), {
|
|
97
|
+
title: 'Product Documentation Versions',
|
|
98
|
+
description: 'Available documentation versions for a specific Jamf product',
|
|
99
|
+
mimeType: 'application/json',
|
|
100
|
+
}, async (uri, { productId }) => {
|
|
101
|
+
const validation = validateProductId(productId, uri);
|
|
102
|
+
if (!validation.valid) {
|
|
103
|
+
return validation.errorResponse;
|
|
104
|
+
}
|
|
105
|
+
const versions = await getAvailableVersions(validation.id);
|
|
106
|
+
return {
|
|
107
|
+
contents: [{
|
|
108
|
+
uri: uri.href,
|
|
109
|
+
mimeType: 'application/json',
|
|
110
|
+
text: JSON.stringify({
|
|
111
|
+
product: JAMF_PRODUCTS[validation.id].name,
|
|
112
|
+
productId: validation.id,
|
|
113
|
+
versions,
|
|
114
|
+
latestVersion: JAMF_PRODUCTS[validation.id].latestVersion,
|
|
115
|
+
}, null, 2),
|
|
116
|
+
}],
|
|
117
|
+
};
|
|
118
|
+
});
|
|
119
|
+
console.error('Registered resources: jamf://products, jamf://topics,', 'jamf://products/{productId}/toc, jamf://products/{productId}/versions');
|
|
44
120
|
}
|
|
45
121
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/resources/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EACL,uBAAuB,EACvB,qBAAqB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/resources/index.ts"],"names":[],"mappings":"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"}
|
package/dist/schemas/index.d.ts
CHANGED
|
@@ -17,13 +17,16 @@ export type ListProductsInput = z.infer<typeof ListProductsInputSchema>;
|
|
|
17
17
|
*/
|
|
18
18
|
export declare const SearchInputSchema: z.ZodObject<{
|
|
19
19
|
query: z.ZodString;
|
|
20
|
-
product: z.ZodOptional<z.ZodEnum<{
|
|
20
|
+
product: import("@modelcontextprotocol/sdk/server/completable.js").CompletableSchema<z.ZodOptional<z.ZodEnum<{
|
|
21
21
|
[x: string]: string;
|
|
22
|
-
}
|
|
23
|
-
topic: z.ZodOptional<z.ZodEnum<{
|
|
22
|
+
}>>>;
|
|
23
|
+
topic: import("@modelcontextprotocol/sdk/server/completable.js").CompletableSchema<z.ZodOptional<z.ZodEnum<{
|
|
24
|
+
[x: string]: string;
|
|
25
|
+
}>>>;
|
|
26
|
+
version: import("@modelcontextprotocol/sdk/server/completable.js").CompletableSchema<z.ZodOptional<z.ZodString>>;
|
|
27
|
+
docType: z.ZodOptional<z.ZodEnum<{
|
|
24
28
|
[x: string]: string;
|
|
25
29
|
}>>;
|
|
26
|
-
version: z.ZodOptional<z.ZodString>;
|
|
27
30
|
limit: z.ZodDefault<z.ZodNumber>;
|
|
28
31
|
page: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
|
|
29
32
|
maxTokens: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
|
|
@@ -48,10 +51,10 @@ export type GetArticleInput = z.infer<typeof GetArticleInputSchema>;
|
|
|
48
51
|
* Schema for jamf_docs_get_toc
|
|
49
52
|
*/
|
|
50
53
|
export declare const GetTocInputSchema: z.ZodObject<{
|
|
51
|
-
product: z.ZodEnum<{
|
|
54
|
+
product: import("@modelcontextprotocol/sdk/server/completable.js").CompletableSchema<z.ZodEnum<{
|
|
52
55
|
[x: string]: string;
|
|
53
|
-
}
|
|
54
|
-
version: z.ZodOptional<z.ZodString
|
|
56
|
+
}>>;
|
|
57
|
+
version: import("@modelcontextprotocol/sdk/server/completable.js").CompletableSchema<z.ZodOptional<z.ZodString>>;
|
|
55
58
|
page: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
|
|
56
59
|
maxTokens: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
|
|
57
60
|
outputMode: z.ZodDefault<z.ZodEnum<typeof OutputMode>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EACL,cAAc,EACd,UAAU,EAOX,MAAM,iBAAiB,CAAC;AA0BzB;;GAEG;AACH,eAAO,MAAM,uBAAuB;;;;kBAYzB,CAAC;AAEZ,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;kBAqDnB,CAAC;AAEZ,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D;;GAEG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;kBAgCvB,CAAC;AAEZ,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;kBA6BnB,CAAC;AAEZ,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC"}
|
package/dist/schemas/index.js
CHANGED
|
@@ -2,11 +2,10 @@
|
|
|
2
2
|
* Zod schemas for input validation
|
|
3
3
|
*/
|
|
4
4
|
import { z } from 'zod';
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
const topicIds = Object.keys(JAMF_TOPICS);
|
|
5
|
+
import { completable } from '@modelcontextprotocol/sdk/server/completable.js';
|
|
6
|
+
import { ResponseFormat, OutputMode, CONTENT_LIMITS, TOKEN_CONFIG, PAGINATION_CONFIG, PRODUCT_IDS, TOPIC_IDS, DOC_TYPE_IDS } from '../constants.js';
|
|
7
|
+
import { completeProduct, completeTopic, completeVersion } from '../completions.js';
|
|
8
|
+
import { isAllowedHostname } from '../utils/url.js';
|
|
10
9
|
// Response format enum
|
|
11
10
|
const ResponseFormatSchema = z.nativeEnum(ResponseFormat);
|
|
12
11
|
// Output mode enum
|
|
@@ -47,15 +46,18 @@ export const SearchInputSchema = z.object({
|
|
|
47
46
|
.min(2, 'Query must be at least 2 characters')
|
|
48
47
|
.max(200, 'Query must not exceed 200 characters')
|
|
49
48
|
.describe('Search keywords to find in Jamf documentation'),
|
|
50
|
-
product: z.enum(
|
|
49
|
+
product: completable(z.enum(PRODUCT_IDS)
|
|
51
50
|
.optional()
|
|
52
|
-
.describe('Filter by product: jamf-pro, jamf-school, jamf-connect, jamf-protect'),
|
|
53
|
-
topic: z.enum(
|
|
51
|
+
.describe('Filter by product: jamf-pro, jamf-school, jamf-connect, jamf-protect'), completeProduct),
|
|
52
|
+
topic: completable(z.enum(TOPIC_IDS)
|
|
54
53
|
.optional()
|
|
55
|
-
.describe('Filter by topic: enrollment, profiles, security, inventory, policies, smart-groups, apps, identity, api, network'),
|
|
56
|
-
version: z.string()
|
|
54
|
+
.describe('Filter by topic: enrollment, profiles, security, inventory, policies, smart-groups, apps, identity, api, network'), completeTopic),
|
|
55
|
+
version: completable(z.string()
|
|
57
56
|
.optional()
|
|
58
|
-
.describe('Filter by version (e.g., "11.5.0", "10.x")'),
|
|
57
|
+
.describe('Filter by version (e.g., "11.5.0", "10.x")'), completeVersion),
|
|
58
|
+
docType: z.enum(DOC_TYPE_IDS)
|
|
59
|
+
.optional()
|
|
60
|
+
.describe('Filter by document type: documentation, release-notes, install-guide, technical-paper, configuration-guide, training'),
|
|
59
61
|
limit: z.number()
|
|
60
62
|
.int()
|
|
61
63
|
.min(1)
|
|
@@ -81,7 +83,7 @@ export const SearchInputSchema = z.object({
|
|
|
81
83
|
export const GetArticleInputSchema = z.object({
|
|
82
84
|
url: z.string()
|
|
83
85
|
.url('Must be a valid URL')
|
|
84
|
-
.refine((url) =>
|
|
86
|
+
.refine((url) => isAllowedHostname(url), 'URL must be from docs.jamf.com or learn.jamf.com')
|
|
85
87
|
.describe('Full URL of the Jamf documentation article'),
|
|
86
88
|
section: z.string()
|
|
87
89
|
.optional()
|
|
@@ -106,11 +108,11 @@ export const GetArticleInputSchema = z.object({
|
|
|
106
108
|
* Schema for jamf_docs_get_toc
|
|
107
109
|
*/
|
|
108
110
|
export const GetTocInputSchema = z.object({
|
|
109
|
-
product: z.enum(
|
|
110
|
-
.describe('Product ID: jamf-pro, jamf-school, jamf-connect, jamf-protect'),
|
|
111
|
-
version: z.string()
|
|
111
|
+
product: completable(z.enum(PRODUCT_IDS)
|
|
112
|
+
.describe('Product ID: jamf-pro, jamf-school, jamf-connect, jamf-protect'), completeProduct),
|
|
113
|
+
version: completable(z.string()
|
|
112
114
|
.optional()
|
|
113
|
-
.describe('Specific version (defaults to latest)'),
|
|
115
|
+
.describe('Specific version (defaults to latest)'), completeVersion),
|
|
114
116
|
page: PageSchema
|
|
115
117
|
.optional()
|
|
116
118
|
.describe(`Page number for pagination (1-${PAGINATION_CONFIG.MAX_PAGE}, default: 1)`),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,cAAc,EACd,UAAU,EACV,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Zod output schemas for structured tool output (outputSchema + structuredContent)
|
|
3
|
+
*/
|
|
4
|
+
import { z } from 'zod';
|
|
5
|
+
export declare const ProductListOutputSchema: z.ZodObject<{
|
|
6
|
+
products: z.ZodArray<z.ZodObject<{
|
|
7
|
+
id: z.ZodString;
|
|
8
|
+
name: z.ZodString;
|
|
9
|
+
description: z.ZodString;
|
|
10
|
+
currentVersion: z.ZodString;
|
|
11
|
+
availableVersions: z.ZodArray<z.ZodString>;
|
|
12
|
+
}, z.core.$strip>>;
|
|
13
|
+
topics: z.ZodArray<z.ZodObject<{
|
|
14
|
+
id: z.ZodString;
|
|
15
|
+
name: z.ZodString;
|
|
16
|
+
keywords: z.ZodArray<z.ZodString>;
|
|
17
|
+
}, z.core.$strip>>;
|
|
18
|
+
}, z.core.$strip>;
|
|
19
|
+
export declare const SearchOutputSchema: z.ZodObject<{
|
|
20
|
+
query: z.ZodString;
|
|
21
|
+
totalResults: z.ZodNumber;
|
|
22
|
+
page: z.ZodNumber;
|
|
23
|
+
totalPages: z.ZodNumber;
|
|
24
|
+
hasMore: z.ZodBoolean;
|
|
25
|
+
results: z.ZodArray<z.ZodObject<{
|
|
26
|
+
title: z.ZodString;
|
|
27
|
+
url: z.ZodString;
|
|
28
|
+
snippet: z.ZodString;
|
|
29
|
+
product: z.ZodString;
|
|
30
|
+
version: z.ZodOptional<z.ZodString>;
|
|
31
|
+
docType: z.ZodOptional<z.ZodString>;
|
|
32
|
+
}, z.core.$strip>>;
|
|
33
|
+
suggestions: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
34
|
+
}, z.core.$strip>;
|
|
35
|
+
export declare const ArticleOutputSchema: z.ZodObject<{
|
|
36
|
+
title: z.ZodString;
|
|
37
|
+
url: z.ZodString;
|
|
38
|
+
content: z.ZodString;
|
|
39
|
+
product: z.ZodOptional<z.ZodString>;
|
|
40
|
+
version: z.ZodOptional<z.ZodString>;
|
|
41
|
+
lastUpdated: z.ZodOptional<z.ZodString>;
|
|
42
|
+
breadcrumb: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
43
|
+
sections: z.ZodArray<z.ZodObject<{
|
|
44
|
+
id: z.ZodString;
|
|
45
|
+
title: z.ZodString;
|
|
46
|
+
level: z.ZodNumber;
|
|
47
|
+
tokenCount: z.ZodNumber;
|
|
48
|
+
}, z.core.$strip>>;
|
|
49
|
+
truncated: z.ZodBoolean;
|
|
50
|
+
}, z.core.$strip>;
|
|
51
|
+
export declare const TocOutputSchema: z.ZodObject<{
|
|
52
|
+
product: z.ZodString;
|
|
53
|
+
version: z.ZodString;
|
|
54
|
+
totalEntries: z.ZodNumber;
|
|
55
|
+
page: z.ZodNumber;
|
|
56
|
+
totalPages: z.ZodNumber;
|
|
57
|
+
hasMore: z.ZodBoolean;
|
|
58
|
+
entries: z.ZodArray<z.ZodObject<{
|
|
59
|
+
title: z.ZodString;
|
|
60
|
+
url: z.ZodString;
|
|
61
|
+
}, z.core.$strip>>;
|
|
62
|
+
}, z.core.$strip>;
|
|
63
|
+
//# sourceMappingURL=output.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/schemas/output.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;iBAalC,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;iBAe7B,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;iBAe9B,CAAC;AAEH,eAAO,MAAM,eAAe;;;;;;;;;;;iBAW1B,CAAC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Zod output schemas for structured tool output (outputSchema + structuredContent)
|
|
3
|
+
*/
|
|
4
|
+
import { z } from 'zod';
|
|
5
|
+
export const ProductListOutputSchema = z.object({
|
|
6
|
+
products: z.array(z.object({
|
|
7
|
+
id: z.string(),
|
|
8
|
+
name: z.string(),
|
|
9
|
+
description: z.string(),
|
|
10
|
+
currentVersion: z.string(),
|
|
11
|
+
availableVersions: z.array(z.string()),
|
|
12
|
+
})),
|
|
13
|
+
topics: z.array(z.object({
|
|
14
|
+
id: z.string(),
|
|
15
|
+
name: z.string(),
|
|
16
|
+
keywords: z.array(z.string()),
|
|
17
|
+
})),
|
|
18
|
+
});
|
|
19
|
+
export const SearchOutputSchema = z.object({
|
|
20
|
+
query: z.string(),
|
|
21
|
+
totalResults: z.number(),
|
|
22
|
+
page: z.number(),
|
|
23
|
+
totalPages: z.number(),
|
|
24
|
+
hasMore: z.boolean(),
|
|
25
|
+
results: z.array(z.object({
|
|
26
|
+
title: z.string(),
|
|
27
|
+
url: z.string(),
|
|
28
|
+
snippet: z.string(),
|
|
29
|
+
product: z.string(),
|
|
30
|
+
version: z.string().optional(),
|
|
31
|
+
docType: z.string().optional(),
|
|
32
|
+
})),
|
|
33
|
+
suggestions: z.array(z.string()).optional(),
|
|
34
|
+
});
|
|
35
|
+
export const ArticleOutputSchema = z.object({
|
|
36
|
+
title: z.string(),
|
|
37
|
+
url: z.string(),
|
|
38
|
+
content: z.string(),
|
|
39
|
+
product: z.string().optional(),
|
|
40
|
+
version: z.string().optional(),
|
|
41
|
+
lastUpdated: z.string().optional(),
|
|
42
|
+
breadcrumb: z.array(z.string()).optional(),
|
|
43
|
+
sections: z.array(z.object({
|
|
44
|
+
id: z.string(),
|
|
45
|
+
title: z.string(),
|
|
46
|
+
level: z.number(),
|
|
47
|
+
tokenCount: z.number(),
|
|
48
|
+
})),
|
|
49
|
+
truncated: z.boolean(),
|
|
50
|
+
});
|
|
51
|
+
export const TocOutputSchema = z.object({
|
|
52
|
+
product: z.string(),
|
|
53
|
+
version: z.string(),
|
|
54
|
+
totalEntries: z.number(),
|
|
55
|
+
page: z.number(),
|
|
56
|
+
totalPages: z.number(),
|
|
57
|
+
hasMore: z.boolean(),
|
|
58
|
+
entries: z.array(z.object({
|
|
59
|
+
title: z.string(),
|
|
60
|
+
url: z.string(),
|
|
61
|
+
})),
|
|
62
|
+
});
|
|
63
|
+
//# sourceMappingURL=output.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/schemas/output.ts"],"names":[],"mappings":"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"}
|
package/dist/services/cache.d.ts
CHANGED
|
@@ -1,22 +1,56 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Caching service for Jamf documentation
|
|
3
3
|
*
|
|
4
|
-
* Provides file-based caching with TTL support
|
|
4
|
+
* Provides file-based caching with TTL support and LRU memory eviction
|
|
5
5
|
*/
|
|
6
|
+
import { z } from 'zod';
|
|
6
7
|
/**
|
|
7
|
-
*
|
|
8
|
+
* Zod schema for validating cache entries read from disk
|
|
9
|
+
*/
|
|
10
|
+
export declare const CacheEntrySchema: z.ZodObject<{
|
|
11
|
+
data: z.ZodUnknown;
|
|
12
|
+
timestamp: z.ZodNumber;
|
|
13
|
+
ttl: z.ZodNumber;
|
|
14
|
+
}, z.core.$strip>;
|
|
15
|
+
/**
|
|
16
|
+
* File-based cache implementation with LRU-bounded memory cache
|
|
8
17
|
*/
|
|
9
18
|
declare class FileCache {
|
|
10
19
|
private readonly cacheDir;
|
|
20
|
+
private readonly maxEntries;
|
|
11
21
|
private readonly memoryCache;
|
|
12
|
-
|
|
22
|
+
private readonly lruMap;
|
|
23
|
+
private readonly lruHead;
|
|
24
|
+
private readonly lruTail;
|
|
25
|
+
private dirCreated;
|
|
26
|
+
constructor(cacheDir?: string, maxEntries?: number);
|
|
13
27
|
private static getCacheKey;
|
|
14
28
|
private getCachePath;
|
|
15
29
|
private ensureCacheDir;
|
|
30
|
+
/**
|
|
31
|
+
* Move a node to the front of the LRU list (most recently used)
|
|
32
|
+
*/
|
|
33
|
+
private lruMoveToFront;
|
|
34
|
+
/**
|
|
35
|
+
* Add a key to the LRU list (at front)
|
|
36
|
+
*/
|
|
37
|
+
private lruAdd;
|
|
38
|
+
/**
|
|
39
|
+
* Remove a key from the LRU list
|
|
40
|
+
*/
|
|
41
|
+
private lruRemove;
|
|
42
|
+
/**
|
|
43
|
+
* Evict the least recently used entry from memory cache
|
|
44
|
+
*/
|
|
45
|
+
private lruEvictLeast;
|
|
16
46
|
/**
|
|
17
47
|
* Get a value from cache
|
|
18
48
|
*/
|
|
19
49
|
get<T>(key: string): Promise<T | null>;
|
|
50
|
+
/**
|
|
51
|
+
* Store in memory cache, evicting LRU entry if at capacity
|
|
52
|
+
*/
|
|
53
|
+
private memoryCacheSet;
|
|
20
54
|
/**
|
|
21
55
|
* Set a value in cache
|
|
22
56
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/services/cache.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/services/cache.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;;iBAI3B,CAAC;AAWH;;GAEG;AACH,cAAM,SAAS;IACb,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA0C;IACtE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA8B;IACrD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwD;IAChF,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwD;IAChF,OAAO,CAAC,UAAU,CAAS;gBAEf,QAAQ,GAAE,MAAkB,EAAE,UAAU,GAAE,MAA0B;IAOhF,OAAO,CAAC,MAAM,CAAC,WAAW;IAI1B,OAAO,CAAC,YAAY;YAIN,cAAc;IAM5B;;OAEG;IACH,OAAO,CAAC,cAAc;IAWtB;;OAEG;IACH,OAAO,CAAC,MAAM;IAWd;;OAEG;IACH,OAAO,CAAC,SAAS;IAUjB;;OAEG;IACH,OAAO,CAAC,aAAa;IAOrB;;OAEG;IACG,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IA4C5C;;OAEG;IACH,OAAO,CAAC,cAAc;IAQtB;;OAEG;IACG,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,GAAE,MAAkC,GAAG,OAAO,CAAC,IAAI,CAAC;IAwB7F;;OAEG;IACG,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMxC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB5B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAwBzF;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;CAoD/B;AAGD,eAAO,MAAM,KAAK,WAAkB,CAAC"}
|