mirror of https://github.com/Aelita4/sshmon.git
				
				
				
			Add TypeScript support
This commit is contained in:
		
							parent
							
								
									aa84456054
								
							
						
					
					
						commit
						f59b28d37d
					
				| 
						 | 
				
			
			@ -0,0 +1,50 @@
 | 
			
		|||
module.exports = {
 | 
			
		||||
    parser: "@typescript-eslint/parser", // Specifies the ESLint parser
 | 
			
		||||
    parserOptions: {
 | 
			
		||||
      ecmaVersion: 2020, // Allows for the parsing of modern ECMAScript features
 | 
			
		||||
      sourceType: "module", // Allows for the use of imports
 | 
			
		||||
    },
 | 
			
		||||
    extends: [
 | 
			
		||||
      "plugin:@typescript-eslint/recommended", // Uses the recommended rules from the @typescript-eslint/eslint-plugin
 | 
			
		||||
    ],
 | 
			
		||||
    rules: {
 | 
			
		||||
      // Place to specify ESLint rules. Can be used to overwrite rules specified from the extended configs
 | 
			
		||||
      // e.g. "@typescript-eslint/explicit-function-return-type": "off",
 | 
			
		||||
      "eqeqeq": 2,
 | 
			
		||||
      "semi": 2,
 | 
			
		||||
      // "arrow-spacing": ["warn", { "before": true, "after": true }],
 | 
			
		||||
      // "brace-style": ["error", "stroustrup", { "allowSingleLine": true }],
 | 
			
		||||
      // "comma-dangle": ["error", "always-multiline"],
 | 
			
		||||
      // "comma-spacing": "error",
 | 
			
		||||
      // "comma-style": "error",
 | 
			
		||||
      // "curly": ["error", "multi-line", "consistent"],
 | 
			
		||||
      // "dot-location": ["error", "property"],
 | 
			
		||||
      // "handle-callback-err": "off",
 | 
			
		||||
      // "keyword-spacing": "error",
 | 
			
		||||
      // "max-nested-callbacks": ["error", { "max": 4 }],
 | 
			
		||||
      // "max-statements-per-line": ["error", { "max": 2 }],
 | 
			
		||||
      // "no-console": "off",
 | 
			
		||||
      // "no-empty-function": "error",
 | 
			
		||||
      // "no-floating-decimal": "error",
 | 
			
		||||
      // "no-lonely-if": "error",
 | 
			
		||||
      // "no-multi-spaces": "error",
 | 
			
		||||
      // "no-multiple-empty-lines": ["error", { "max": 2, "maxEOF": 1, "maxBOF": 0 }],
 | 
			
		||||
      // "no-shadow": ["error", { "allow": ["err", "resolve", "reject"] }],
 | 
			
		||||
      // "no-trailing-spaces": ["error"],
 | 
			
		||||
      // "no-var": "error",
 | 
			
		||||
      // "object-curly-spacing": ["error", "always"],
 | 
			
		||||
      // "prefer-const": "error",
 | 
			
		||||
      // "semi": ["error", "always"],
 | 
			
		||||
      // "space-before-blocks": "error",
 | 
			
		||||
      // "space-before-function-paren": ["error", {
 | 
			
		||||
      //   "anonymous": "never",
 | 
			
		||||
      //   "named": "never",
 | 
			
		||||
      //   "asyncArrow": "always",
 | 
			
		||||
      // }],
 | 
			
		||||
      // "space-in-parens": "error",
 | 
			
		||||
      // "space-infix-ops": "error",
 | 
			
		||||
      // "space-unary-ops": "error",
 | 
			
		||||
      // "spaced-comment": "error",
 | 
			
		||||
      // "yoda": "error",
 | 
			
		||||
    },
 | 
			
		||||
  };
 | 
			
		||||
| 
						 | 
				
			
			@ -1,2 +1,3 @@
 | 
			
		|||
node_modules/
 | 
			
		||||
src/data.json
 | 
			
		||||
data.json
 | 
			
		||||
out/
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										10
									
								
								package.json
								
								
								
								
							
							
						
						
									
										10
									
								
								package.json
								
								
								
								
							| 
						 | 
				
			
			@ -10,7 +10,15 @@
 | 
			
		|||
  "author": "",
 | 
			
		||||
  "license": "ISC",
 | 
			
		||||
  "dependencies": {
 | 
			
		||||
    "ejs": "^3.1.8",
 | 
			
		||||
    "eslint": "^8.22.0",
 | 
			
		||||
    "express": "^4.18.1",
 | 
			
		||||
    "ping": "^0.4.2"
 | 
			
		||||
    "ping": "^0.4.2",
 | 
			
		||||
    "typescript": "^4.7.4"
 | 
			
		||||
  },
 | 
			
		||||
  "devDependencies": {
 | 
			
		||||
    "@types/express": "^4.17.13",
 | 
			
		||||
    "@types/node": "^18.7.6",
 | 
			
		||||
    "@types/ping": "^0.4.1"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,8 +1,8 @@
 | 
			
		|||
const express = require('express');
 | 
			
		||||
const Ping = require('ping');
 | 
			
		||||
const fs = require('fs');
 | 
			
		||||
import express, { Request, Response } from 'express';
 | 
			
		||||
import * as Ping from 'ping';
 | 
			
		||||
import * as fs from 'fs';
 | 
			
		||||
 | 
			
		||||
const ping = async host => {
 | 
			
		||||
const ping = async (host: string) => {
 | 
			
		||||
    const result = await Ping.promise.probe(host, {
 | 
			
		||||
        timeout: 2,
 | 
			
		||||
        extra: ["-i", "2"],
 | 
			
		||||
| 
						 | 
				
			
			@ -10,17 +10,17 @@ const ping = async host => {
 | 
			
		|||
    return result;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const app = new express();
 | 
			
		||||
const app = express();
 | 
			
		||||
 | 
			
		||||
const pings = new Map();
 | 
			
		||||
 | 
			
		||||
if(!fs.existsSync("data.json")) fs.writeFileSync("data.json", "[]");
 | 
			
		||||
let addresses = JSON.parse(fs.readFileSync("./data.json", {encoding:'utf8', flag:'r'}))
 | 
			
		||||
addresses.forEach(a => pings.set(a, -1));
 | 
			
		||||
if(!fs.existsSync("../data.json")) fs.writeFileSync("../data.json", "[]");
 | 
			
		||||
let addresses = JSON.parse(fs.readFileSync("../data.json", {encoding:'utf8', flag:'r'}))
 | 
			
		||||
addresses.forEach((a: string) => pings.set(a, -1));
 | 
			
		||||
const timeoutDelay = 60000;
 | 
			
		||||
 | 
			
		||||
app.get("/", async (req, res) => {
 | 
			
		||||
    addresses = JSON.parse(fs.readFileSync("./data.json", {encoding:'utf8', flag:'r'}))
 | 
			
		||||
app.get("/", async (req: Request, res: Response) => {
 | 
			
		||||
    addresses = JSON.parse(fs.readFileSync("../data.json", {encoding:'utf8', flag:'r'}))
 | 
			
		||||
    let out = `<html><head><script>const addresses = ["${addresses.join('", "')}"];
 | 
			
		||||
    function clock() {
 | 
			
		||||
        
 | 
			
		||||
| 
						 | 
				
			
			@ -83,7 +83,7 @@ app.get("/", async (req, res) => {
 | 
			
		|||
    </script></head><body><div id="time">12:00:00</div><div id="main"></div><div id="eta"></div><br />
 | 
			
		||||
    <input type="text" name="ipaddr" id="ipaddr" value=""><input type="submit" id="but" name="but" value="Add" onClick="addIP()"><br /><br /><div id="addresses"><table id="tab">`;
 | 
			
		||||
 | 
			
		||||
    addresses.forEach(a => {
 | 
			
		||||
    addresses.forEach((a: string) => {
 | 
			
		||||
        out += `<div id="${a}_main"><tr><td><input type="button" name="${a}_rem" value="x" onClick="removeIP('${a}')"></td><td><div style="display: inline-block;" id="${a}_addr">${a}</div></td><td><div style="display: inline-block; margin-left: 5em" id="${a}_status"><span>WAITING</span></div></td></tr></div>`;
 | 
			
		||||
    })
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -98,7 +98,7 @@ app.get("/", async (req, res) => {
 | 
			
		|||
    res.send(out);
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
app.get("/ping/:ip", async (req, res) => {
 | 
			
		||||
app.get("/ping/:ip", async (req: Request, res: Response) => {
 | 
			
		||||
    const ip = req.params.ip;
 | 
			
		||||
    const r = await ping(ip);
 | 
			
		||||
    if(!r.alive && pings.get(ip) === -1) pings.set(ip, Date.now());
 | 
			
		||||
| 
						 | 
				
			
			@ -107,7 +107,7 @@ app.get("/ping/:ip", async (req, res) => {
 | 
			
		|||
    res.end(JSON.stringify(r));
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
app.get("/downtime/:ip", async (req, res) => {
 | 
			
		||||
app.get("/downtime/:ip", async (req: Request, res: Response) => {
 | 
			
		||||
    const ip = req.params.ip;
 | 
			
		||||
 | 
			
		||||
    const json = { downSince: pings.get(ip) };
 | 
			
		||||
| 
						 | 
				
			
			@ -116,29 +116,30 @@ app.get("/downtime/:ip", async (req, res) => {
 | 
			
		|||
    res.end(JSON.stringify(json));
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
app.get("/addIP/:ip", async (req, res) => {
 | 
			
		||||
    if(!fs.existsSync("data.json")) fs.writeFileSync("data.json", "[]");
 | 
			
		||||
    const json = JSON.parse(fs.readFileSync("./data.json", {encoding:'utf8', flag:'r'}));
 | 
			
		||||
app.get("/addIP/:ip", async (req: Request, res: Response) => {
 | 
			
		||||
    if(!fs.existsSync("../data.json")) fs.writeFileSync("../data.json", "[]");
 | 
			
		||||
    const json = JSON.parse(fs.readFileSync("../data.json", {encoding:'utf8', flag:'r'}));
 | 
			
		||||
 | 
			
		||||
    json.push(req.params.ip);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    fs.writeFileSync("./data.json", JSON.stringify(json))
 | 
			
		||||
    fs.writeFileSync("../data.json", JSON.stringify(json))
 | 
			
		||||
 | 
			
		||||
    res.setHeader('Content-Type', 'application/json');
 | 
			
		||||
    res.end(JSON.stringify({ status: "OK" }));
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
app.get("/removeIP/:ip", async (req, res) => {
 | 
			
		||||
    if(!fs.existsSync("data.json")) fs.writeFileSync("data.json", "[]");
 | 
			
		||||
    const json = JSON.parse(fs.readFileSync("./data.json", {encoding:'utf8', flag:'r'}));
 | 
			
		||||
app.get("/removeIP/:ip", async (req: Request, res: Response) => {
 | 
			
		||||
    if(!fs.existsSync("../data.json")) fs.writeFileSync("../data.json", "[]");
 | 
			
		||||
    const json = JSON.parse(fs.readFileSync("../data.json", {encoding:'utf8', flag:'r'}));
 | 
			
		||||
 | 
			
		||||
    json.splice(json.indexOf(req.params.ip.toString()), 1)
 | 
			
		||||
 | 
			
		||||
    fs.writeFileSync("./data.json", JSON.stringify(json))
 | 
			
		||||
    fs.writeFileSync("../data.json", JSON.stringify(json))
 | 
			
		||||
 | 
			
		||||
    res.setHeader('Content-Type', 'application/json');
 | 
			
		||||
    res.end(JSON.stringify({ status: "OK" }));
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
app.set('view engine', 'ejs');
 | 
			
		||||
app.listen(8080, () => console.log('rdy'));
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,100 @@
 | 
			
		|||
{
 | 
			
		||||
    "compilerOptions": {
 | 
			
		||||
      /* Visit https://aka.ms/tsconfig.json to read more about this file */
 | 
			
		||||
  
 | 
			
		||||
      /* Projects */
 | 
			
		||||
      // "incremental": true,                              /* Enable incremental compilation */
 | 
			
		||||
      // "composite": true,                                /* Enable constraints that allow a TypeScript project to be used with project references. */
 | 
			
		||||
      // "tsBuildInfoFile": "./",                          /* Specify the folder for .tsbuildinfo incremental compilation files. */
 | 
			
		||||
      // "disableSourceOfProjectReferenceRedirect": true,  /* Disable preferring source files instead of declaration files when referencing composite projects */
 | 
			
		||||
      // "disableSolutionSearching": true,                 /* Opt a project out of multi-project reference checking when editing. */
 | 
			
		||||
      // "disableReferencedProjectLoad": true,             /* Reduce the number of projects loaded automatically by TypeScript. */
 | 
			
		||||
  
 | 
			
		||||
      /* Language and Environment */
 | 
			
		||||
      "target": "ESNext",                                  /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */
 | 
			
		||||
      // "lib": [],                                        /* Specify a set of bundled library declaration files that describe the target runtime environment. */
 | 
			
		||||
      // "jsx": "preserve",                                /* Specify what JSX code is generated. */
 | 
			
		||||
      // "experimentalDecorators": true,                   /* Enable experimental support for TC39 stage 2 draft decorators. */
 | 
			
		||||
      // "emitDecoratorMetadata": true,                    /* Emit design-type metadata for decorated declarations in source files. */
 | 
			
		||||
      // "jsxFactory": "",                                 /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h' */
 | 
			
		||||
      // "jsxFragmentFactory": "",                         /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */
 | 
			
		||||
      // "jsxImportSource": "",                            /* Specify module specifier used to import the JSX factory functions when using `jsx: react-jsx*`.` */
 | 
			
		||||
      // "reactNamespace": "",                             /* Specify the object invoked for `createElement`. This only applies when targeting `react` JSX emit. */
 | 
			
		||||
      // "noLib": true,                                    /* Disable including any library files, including the default lib.d.ts. */
 | 
			
		||||
      // "useDefineForClassFields": true,                  /* Emit ECMAScript-standard-compliant class fields. */
 | 
			
		||||
  
 | 
			
		||||
      /* Modules */
 | 
			
		||||
      "module": "commonjs",                                /* Specify what module code is generated. */
 | 
			
		||||
      "rootDir": "./src",                                  /* Specify the root folder within your source files. */
 | 
			
		||||
      // "moduleResolution": "node",                       /* Specify how TypeScript looks up a file from a given module specifier. */
 | 
			
		||||
      // "baseUrl": "./",                                  /* Specify the base directory to resolve non-relative module names. */
 | 
			
		||||
      // "paths": {},                                      /* Specify a set of entries that re-map imports to additional lookup locations. */
 | 
			
		||||
      // "rootDirs": [],                                   /* Allow multiple folders to be treated as one when resolving modules. */
 | 
			
		||||
      // "typeRoots": [],                                  /* Specify multiple folders that act like `./node_modules/@types`. */
 | 
			
		||||
      // "types": [],                                      /* Specify type package names to be included without being referenced in a source file. */
 | 
			
		||||
      // "allowUmdGlobalAccess": true,                     /* Allow accessing UMD globals from modules. */
 | 
			
		||||
      "resolveJsonModule": true,                           /* Enable importing .json files */
 | 
			
		||||
      // "noResolve": true,                                /* Disallow `import`s, `require`s or `<reference>`s from expanding the number of files TypeScript should add to a project. */
 | 
			
		||||
  
 | 
			
		||||
      /* JavaScript Support */
 | 
			
		||||
      // "allowJs": true,                                  /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */
 | 
			
		||||
      // "checkJs": true,                                  /* Enable error reporting in type-checked JavaScript files. */
 | 
			
		||||
      // "maxNodeModuleJsDepth": 1,                        /* Specify the maximum folder depth used for checking JavaScript files from `node_modules`. Only applicable with `allowJs`. */
 | 
			
		||||
  
 | 
			
		||||
      /* Emit */
 | 
			
		||||
      // "declaration": true,                              /* Generate .d.ts files from TypeScript and JavaScript files in your project. */
 | 
			
		||||
      // "declarationMap": true,                           /* Create sourcemaps for d.ts files. */
 | 
			
		||||
      // "emitDeclarationOnly": true,                      /* Only output d.ts files and not JavaScript files. */
 | 
			
		||||
      // "sourceMap": true,                                /* Create source map files for emitted JavaScript files. */
 | 
			
		||||
      // "outFile": "./",                                  /* Specify a file that bundles all outputs into one JavaScript file. If `declaration` is true, also designates a file that bundles all .d.ts output. */
 | 
			
		||||
      "outDir": "out",                                     /* Specify an output folder for all emitted files. */
 | 
			
		||||
      // "removeComments": true,                           /* Disable emitting comments. */
 | 
			
		||||
      // "noEmit": true,                                   /* Disable emitting files from a compilation. */
 | 
			
		||||
      // "importHelpers": true,                            /* Allow importing helper functions from tslib once per project, instead of including them per-file. */
 | 
			
		||||
      // "importsNotUsedAsValues": "remove",               /* Specify emit/checking behavior for imports that are only used for types */
 | 
			
		||||
      // "downlevelIteration": true,                       /* Emit more compliant, but verbose and less performant JavaScript for iteration. */
 | 
			
		||||
      // "sourceRoot": "",                                 /* Specify the root path for debuggers to find the reference source code. */
 | 
			
		||||
      // "mapRoot": "",                                    /* Specify the location where debugger should locate map files instead of generated locations. */
 | 
			
		||||
      // "inlineSourceMap": true,                          /* Include sourcemap files inside the emitted JavaScript. */
 | 
			
		||||
      // "inlineSources": true,                            /* Include source code in the sourcemaps inside the emitted JavaScript. */
 | 
			
		||||
      // "emitBOM": true,                                  /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */
 | 
			
		||||
      // "newLine": "crlf",                                /* Set the newline character for emitting files. */
 | 
			
		||||
      // "stripInternal": true,                            /* Disable emitting declarations that have `@internal` in their JSDoc comments. */
 | 
			
		||||
      // "noEmitHelpers": true,                            /* Disable generating custom helper functions like `__extends` in compiled output. */
 | 
			
		||||
      // "noEmitOnError": true,                            /* Disable emitting files if any type checking errors are reported. */
 | 
			
		||||
      // "preserveConstEnums": true,                       /* Disable erasing `const enum` declarations in generated code. */
 | 
			
		||||
      // "declarationDir": "./",                           /* Specify the output directory for generated declaration files. */
 | 
			
		||||
  
 | 
			
		||||
      /* Interop Constraints */
 | 
			
		||||
      // "isolatedModules": true,                          /* Ensure that each file can be safely transpiled without relying on other imports. */
 | 
			
		||||
      // "allowSyntheticDefaultImports": true,             /* Allow 'import x from y' when a module doesn't have a default export. */
 | 
			
		||||
      "esModuleInterop": true,                             /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility. */
 | 
			
		||||
      // "preserveSymlinks": true,                         /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */
 | 
			
		||||
      "forceConsistentCasingInFileNames": true,            /* Ensure that casing is correct in imports. */
 | 
			
		||||
  
 | 
			
		||||
      /* Type Checking */
 | 
			
		||||
      "strict": true,                                      /* Enable all strict type-checking options. */
 | 
			
		||||
      // "noImplicitAny": true,                            /* Enable error reporting for expressions and declarations with an implied `any` type.. */
 | 
			
		||||
      // "strictNullChecks": true,                         /* When type checking, take into account `null` and `undefined`. */
 | 
			
		||||
      // "strictFunctionTypes": true,                      /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */
 | 
			
		||||
      // "strictBindCallApply": true,                      /* Check that the arguments for `bind`, `call`, and `apply` methods match the original function. */
 | 
			
		||||
      // "strictPropertyInitialization": true,             /* Check for class properties that are declared but not set in the constructor. */
 | 
			
		||||
      // "noImplicitThis": true,                           /* Enable error reporting when `this` is given the type `any`. */
 | 
			
		||||
      // "useUnknownInCatchVariables": true,               /* Type catch clause variables as 'unknown' instead of 'any'. */
 | 
			
		||||
      // "alwaysStrict": true,                             /* Ensure 'use strict' is always emitted. */
 | 
			
		||||
      // "noUnusedLocals": true,                           /* Enable error reporting when a local variables aren't read. */
 | 
			
		||||
      // "noUnusedParameters": true,                       /* Raise an error when a function parameter isn't read */
 | 
			
		||||
      // "exactOptionalPropertyTypes": true,               /* Interpret optional property types as written, rather than adding 'undefined'. */
 | 
			
		||||
      // "noImplicitReturns": true,                        /* Enable error reporting for codepaths that do not explicitly return in a function. */
 | 
			
		||||
      // "noFallthroughCasesInSwitch": true,               /* Enable error reporting for fallthrough cases in switch statements. */
 | 
			
		||||
      // "noUncheckedIndexedAccess": true,                 /* Include 'undefined' in index signature results */
 | 
			
		||||
      // "noImplicitOverride": true,                       /* Ensure overriding members in derived classes are marked with an override modifier. */
 | 
			
		||||
      // "noPropertyAccessFromIndexSignature": true,       /* Enforces using indexed accessors for keys declared using an indexed type */
 | 
			
		||||
      // "allowUnusedLabels": true,                        /* Disable error reporting for unused labels. */
 | 
			
		||||
      // "allowUnreachableCode": true,                     /* Disable error reporting for unreachable code. */
 | 
			
		||||
  
 | 
			
		||||
      /* Completeness */
 | 
			
		||||
      // "skipDefaultLibCheck": true,                      /* Skip type checking .d.ts files that are included with TypeScript. */
 | 
			
		||||
      "skipLibCheck": true                                 /* Skip type checking all .d.ts files. */
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
		Loading…
	
		Reference in New Issue