fa-mcp-sdk 0.2.243 → 0.2.247

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.
@@ -1,4 +1,8 @@
1
+ # SERVICE_NAME - service name. If this variable is not specified, it is taken from package.json.name
1
2
  SERVICE_NAME={{project.name}}
3
+ # PRODUCT_NAME - If this variable is not specified, it is taken from package.json.productName
4
+ # PRODUCT_NAME=
5
+
2
6
  NODE_ENV={{NODE_ENV}}
3
7
  # Used for PM2
4
8
  SERVICE_INSTANCE={{SERVICE_INSTANCE}}
@@ -574,7 +574,7 @@ function generateTokenApp(port?: number): Server;
574
574
  generateTokenApp();
575
575
 
576
576
  // Start on custom port
577
- generateTokenApp(8080);
577
+ generateTokenApp(1234);
578
578
 
579
579
  // Can also be run directly from command line:
580
580
  // npx ts-node node_modules/fa-mcp-sdk/dist/core/auth/token-generator/server.js
@@ -310,9 +310,9 @@ import { isPortAvailable, checkPortAvailability } from 'fa-mcp-sdk';
310
310
  function isPortAvailable (port: number, host: string = '0.0.0.0'): Promise<boolean> {...}
311
311
 
312
312
  // Examples:
313
- const available1 = await isPortAvailable(3000); // Check on all interfaces
314
- const available2 = await isPortAvailable(3000, 'localhost'); // Check on localhost
315
- const available3 = await isPortAvailable(8080, '192.168.1.10'); // Check on specific IP
313
+ const available1 = await isPortAvailable(1234); // Check on all interfaces
314
+ const available2 = await isPortAvailable(1234, 'localhost'); // Check on localhost
315
+ const available3 = await isPortAvailable(1234, '192.168.1.10'); // Check on specific IP
316
316
 
317
317
  if (available1) {
318
318
  console.log('Port 3000 is available');
@@ -29,14 +29,19 @@ export default [
29
29
  rules: {
30
30
  ...tsPlugin.configs.recommended.rules,
31
31
  '@typescript-eslint/ban-ts-comment': 'off',
32
- '@typescript-eslint/no-unused-vars': 'off',
32
+ '@typescript-eslint/no-unused-vars': ['warn', {
33
+ 'argsIgnorePattern': '^_',
34
+ 'varsIgnorePattern': '^_',
35
+ 'caughtErrorsIgnorePattern': '^_',
36
+ 'ignoreRestSiblings': true,
37
+ }],
33
38
  '@typescript-eslint/no-unsafe-function-type': 'off',
34
39
  'unused-imports/no-unused-imports': 'error',
35
40
  'unused-imports/no-unused-vars': ['warn', {
36
41
  'argsIgnorePattern': '^_',
37
42
  'varsIgnorePattern': '^_',
38
43
  'caughtErrorsIgnorePattern': '^_',
39
- 'ignoreRestSiblings': true
44
+ 'ignoreRestSiblings': true,
40
45
  }],
41
46
  '@typescript-eslint/no-explicit-any': 'off',
42
47
  '@typescript-eslint/no-unsafe-member-access': 'off',
@@ -45,9 +50,9 @@ export default [
45
50
  'ts': 'never',
46
51
  'js': 'always',
47
52
  'pattern': {
48
- '**/*.ts': 'always'
53
+ '**/*.ts': 'always',
49
54
  },
50
- 'ignorePackages': true
55
+ 'ignorePackages': true,
51
56
  }],
52
57
  // Formatting rules
53
58
  'semi': ['error', 'always'],
@@ -55,7 +60,7 @@ export default [
55
60
  'space-before-function-paren': ['error', {
56
61
  'anonymous': 'always',
57
62
  'named': 'always',
58
- 'asyncArrow': 'always'
63
+ 'asyncArrow': 'always',
59
64
  }],
60
65
  'object-curly-spacing': ['error', 'always'],
61
66
  'curly': ['error', 'all'],
@@ -80,13 +85,21 @@ export default [
80
85
  },
81
86
  rules: {
82
87
  'import/no-default-export': 'off',
88
+ // Unused variables/imports rules
89
+ 'unused-imports/no-unused-imports': 'warn',
90
+ 'unused-imports/no-unused-vars': ['warn', {
91
+ 'argsIgnorePattern': '^_',
92
+ 'varsIgnorePattern': '^_',
93
+ 'caughtErrorsIgnorePattern': '^_',
94
+ 'ignoreRestSiblings': true,
95
+ }],
83
96
  // Formatting rules
84
97
  'semi': ['error', 'always'],
85
98
  'quotes': ['error', 'single', { 'avoidEscape': true }],
86
99
  'space-before-function-paren': ['error', {
87
100
  'anonymous': 'always',
88
101
  'named': 'always',
89
- 'asyncArrow': 'always'
102
+ 'asyncArrow': 'always',
90
103
  }],
91
104
  'object-curly-spacing': ['error', 'always'],
92
105
  'curly': ['error', 'all'],
@@ -47,7 +47,7 @@
47
47
  "dependencies": {
48
48
  "@modelcontextprotocol/sdk": "^1.25.2",
49
49
  "dotenv": "^17.2.3",
50
- "fa-mcp-sdk": "^0.2.243"
50
+ "fa-mcp-sdk": "^0.2.247"
51
51
  },
52
52
  "devDependencies": {
53
53
  "@types/express": "^5.0.6",
@@ -78,7 +78,7 @@ consul:
78
78
  token: '***'
79
79
  service:
80
80
  enable: {{consul.service.enable}} # true - Allows registration of the service with the consul
81
- name: <name> # Here you can specify an alternative name for the service. String "<name>" will be replaced by <package.json>.name at initialization
81
+ name: <name> # Here you can specify an alternative name for the service. String "<name>" will be replaced by env SERVICE_NAME | <package.json>.name at initialization
82
82
  instance: '{{SERVICE_INSTANCE}}' # This value will be specified as a suffix in the id of the service
83
83
  version: <version> # String "<version>" will be replaced by <package.json>.version at initialization
84
84
  description: <description> # Here you can specify an alternative name description. String "<description>" will be replaced by <package.json>.description at initialization
@@ -1 +1 @@
1
- {"version":3,"file":"init-config.d.ts","sourceRoot":"","sources":["../../../src/core/bootstrap/init-config.ts"],"names":[],"mappings":"AAEA,OAAO,aAAa,CAAC;AAErB,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,eAAO,MAAM,MAAM,EAAE,SAAwC,CAAC;AAK9D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAiDpD,eAAO,MAAM,SAAS,EAAE,SAAyB,CAAC;AAElD;;GAEG;AACH,wBAAgB,gBAAgB,IAAK,GAAG,CASvC;AAED,wBAAgB,cAAc,IAAK,aAAa,CAE/C"}
1
+ {"version":3,"file":"init-config.d.ts","sourceRoot":"","sources":["../../../src/core/bootstrap/init-config.ts"],"names":[],"mappings":"AAEA,OAAO,aAAa,CAAC;AAErB,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,eAAO,MAAM,MAAM,EAAE,SAAwC,CAAC;AAK9D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAoDpD,eAAO,MAAM,SAAS,EAAE,SAAyB,CAAC;AAElD;;GAEG;AACH,wBAAgB,gBAAgB,IAAK,GAAG,CASvC;AAED,wBAAgB,cAAc,IAAK,aAAa,CAE/C"}
@@ -5,7 +5,10 @@ export const config = configModule.util.toObject();
5
5
  import { readFileSync } from 'fs';
6
6
  import * as path from 'path';
7
7
  import { trim } from '../utils/utils.js';
8
- const { name, productName, version, description, keywords, repository, homepage } = JSON.parse(readFileSync(path.join(process.cwd(), 'package.json'), 'utf-8'));
8
+ const pj = JSON.parse(readFileSync(path.join(process.cwd(), 'package.json'), 'utf-8'));
9
+ const { version, description, keywords, repository, homepage } = pj;
10
+ const name = process.env.SERVICE_NAME || pj.name;
11
+ const productName = process.env.PRODUCT_NAME || pj.productName;
9
12
  /**
10
13
  * Build application configuration from YAML and environment variables
11
14
  * Priority: environment variables > config.yaml > defaults
@@ -1 +1 @@
1
- {"version":3,"file":"init-config.js","sourceRoot":"","sources":["../../../src/core/bootstrap/init-config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init-config.js","sourceRoot":"","sources":["../../../src/core/bootstrap/init-config.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,6 @@
2
2
  let toolsData = [];
3
3
  let resourcesData = [];
4
4
  let promptsData = [];
5
- let pageData = {};
6
5
 
7
6
  // Set primary color CSS variable
8
7
  function setPrimaryColor (color) {
@@ -133,7 +132,6 @@ async function loadPageData () {
133
132
  }
134
133
 
135
134
  const data = await response.json();
136
- pageData = data;
137
135
 
138
136
  // Set theme color
139
137
  setPrimaryColor(data.primaryColor);
@@ -155,6 +153,7 @@ async function loadPageData () {
155
153
  }
156
154
  }
157
155
 
156
+ // eslint-disable-next-line unused-imports/no-unused-vars
158
157
  function openModal (sectionName) {
159
158
  const modal = document.getElementById(sectionName + '-modal');
160
159
  const tableBody = document.getElementById(sectionName + '-table').querySelector('tbody');
@@ -272,6 +271,7 @@ function generatePromptsTableRows (prompts) {
272
271
  ).join('');
273
272
  }
274
273
 
274
+ // eslint-disable-next-line unused-imports/no-unused-vars
275
275
  function toggleDetails (sectionName, index) {
276
276
  const detailRow = document.getElementById(sectionName + '-detail-' + index);
277
277
  const toggleLink = document.getElementById(sectionName + '-toggle-' + index);
@@ -322,6 +322,7 @@ function toggleDetails (sectionName, index) {
322
322
  }
323
323
 
324
324
  // Handle prompt details and prompt content display
325
+ // eslint-disable-next-line unused-imports/no-unused-vars
325
326
  async function togglePromptDetails (sectionName, index, displayType) {
326
327
  const detailRow = document.getElementById(sectionName + '-detail-' + index);
327
328
  const toggleLinkDetails = document.getElementById(sectionName + '-toggle-details-' + index);
@@ -414,6 +415,7 @@ async function togglePromptDetails (sectionName, index, displayType) {
414
415
  }
415
416
 
416
417
  // Handle resource details and resource content display
418
+ // eslint-disable-next-line unused-imports/no-unused-vars
417
419
  async function toggleResourceDetails (sectionName, index, displayType) {
418
420
  const detailRow = document.getElementById(sectionName + '-detail-' + index);
419
421
  const toggleLinkDetails = document.getElementById(sectionName + '-toggle-details-' + index);
@@ -516,6 +518,7 @@ async function toggleResourceDetails (sectionName, index, displayType) {
516
518
  }
517
519
 
518
520
  // Health Check Modal
521
+ // eslint-disable-next-line unused-imports/no-unused-vars
519
522
  async function openHealthCheckModal () {
520
523
  const modal = document.getElementById('health-modal');
521
524
  const loading = document.getElementById('health-loading');
@@ -599,7 +602,7 @@ function addCopyButton (contentElement) {
599
602
  notification.classList.remove('show');
600
603
  }, 1000);
601
604
 
602
- } catch (err) {
605
+ } catch {
603
606
  // Fallback for browsers that don't support clipboard API
604
607
  const textArea = document.createElement('textarea');
605
608
  textArea.value = textToCopy;
@@ -104,7 +104,7 @@ async function initializeAuth () {
104
104
  showTokenModal('Token is invalid or expired.');
105
105
  return false;
106
106
  }
107
- } catch (error) {
107
+ } catch {
108
108
  // authFetch already handles 401 and shows modal
109
109
  return false;
110
110
  }
@@ -207,6 +207,7 @@ function addKeyValuePair (key = '', value = '', readonly = false, placeholder =
207
207
  keyValuePairCount++;
208
208
  }
209
209
 
210
+ // eslint-disable-next-line unused-imports/no-unused-vars
210
211
  function removeKeyValuePair (button) {
211
212
  button.parentElement.remove();
212
213
  keyValuePairCount--;
@@ -251,7 +252,7 @@ function addCopyButtonToTokenOutput (tokenOutput, token) {
251
252
  notification.classList.remove('show');
252
253
  }, 1000);
253
254
 
254
- } catch (err) {
255
+ } catch {
255
256
  // Fallback for browsers that don't support clipboard API
256
257
  const textArea = document.createElement('textarea');
257
258
  textArea.value = token;
@@ -504,6 +505,7 @@ async function initializeForm () {
504
505
  }
505
506
 
506
507
  // Logout function
508
+ // eslint-disable-next-line unused-imports/no-unused-vars
507
509
  async function logout () {
508
510
  try {
509
511
  // For token-based auth, just clear the stored token
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "fa-mcp-sdk",
3
3
  "productName": "FA MCP SDK",
4
- "version": "0.2.243",
4
+ "version": "0.2.247",
5
5
  "description": "Core infrastructure and templates for building Model Context Protocol (MCP) servers with TypeScript",
6
6
  "type": "module",
7
7
  "main": "dist/core/index.js",
@@ -27,7 +27,7 @@ async function killProcessOnPort (portNumber) {
27
27
  try {
28
28
  const result = await execAsync(`netstat -ano | findstr :${portNumber}`);
29
29
  stdout = result.stdout;
30
- } catch (error) {
30
+ } catch {
31
31
  // findstr returns error when no matches found
32
32
  console.log(`No process found on port ${portNumber}`);
33
33
  return;