migration/deno-v4 #1

Merged
philkunz merged 28 commits from migration/deno-v4 into main 2025-10-19 15:14:04 +00:00
14 changed files with 121 additions and 43 deletions
Showing only changes of commit a649c598ad - Show all commits

34
deno.json Normal file
View File

@@ -0,0 +1,34 @@
{
"name": "@serve.zone/nupst",
"version": "4.0.0",
"exports": "./mod.ts",
"tasks": {
"dev": "deno run --allow-all mod.ts",
"compile": "deno task compile:all",
"compile:all": "bash scripts/compile-all.sh",
"test": "deno test --allow-all tests/",
"check": "deno check mod.ts",
"fmt": "deno fmt",
"lint": "deno lint"
},
"lint": {
"rules": {
"tags": ["recommended"]
}
},
"fmt": {
"useTabs": false,
"lineWidth": 100,
"indentWidth": 2,
"semiColons": true
},
"compilerOptions": {
"lib": ["deno.window"],
"strict": true
},
"imports": {
"@std/cli": "jsr:@std/cli@^1.0.0",
"@std/fmt": "jsr:@std/fmt@^1.0.0",
"@std/path": "jsr:@std/path@^1.0.0"
}
}

44
mod.ts Normal file
View File

@@ -0,0 +1,44 @@
#!/usr/bin/env -S deno run --allow-all
/**
* NUPST - UPS Shutdown Tool
*
* A command-line tool for monitoring SNMP-enabled UPS devices and
* initiating system shutdown when power conditions are critical.
*
* Required Permissions:
* - --allow-net: SNMP communication with UPS devices
* - --allow-read: Read configuration files (/etc/nupst/config.json)
* - --allow-write: Write configuration files
* - --allow-run: Execute system commands (systemctl, shutdown, git, bash)
* - --allow-sys: Access system information (hostname, OS details)
* - --allow-env: Read environment variables
*
* @module
*/
import { NupstCli } from './ts/cli.ts';
/**
* Main entry point for the NUPST application
* Parses command-line arguments and executes the requested command
*/
async function main(): Promise<void> {
const cli = new NupstCli();
// Deno.args is already 0-indexed (unlike Node's process.argv which starts at index 2)
// We need to prepend placeholder args to match the existing CLI parser expectations
const args = ['deno', 'mod.ts', ...Deno.args];
await cli.parseAndExecute(args);
}
// Execute main and handle errors
if (import.meta.main) {
try {
await main();
} catch (error) {
console.error(`Error: ${error instanceof Error ? error.message : String(error)}`);
Deno.exit(1);
}
}

View File

@@ -1,6 +1,6 @@
import { execSync } from 'child_process';
import { Nupst } from './nupst.js';
import { logger } from './logger.js';
import { execSync } from "node:child_process";
import { Nupst } from './nupst.ts';
import { logger } from './logger.ts';
/**
* Class for handling CLI commands

View File

@@ -1,7 +1,7 @@
import { Nupst } from '../nupst.js';
import { logger } from '../logger.js';
import * as helpers from '../helpers/index.js';
import { type IGroupConfig } from '../daemon.js';
import { Nupst } from '../nupst.ts';
import { logger } from '../logger.ts';
import * as helpers from '../helpers/index.ts';
import { type IGroupConfig } from '../daemon.ts';
/**
* Class for handling group-related CLI commands

View File

@@ -1,6 +1,6 @@
import { execSync } from 'child_process';
import { Nupst } from '../nupst.js';
import { logger } from '../logger.js';
import { execSync } from "node:child_process";
import { Nupst } from '../nupst.ts';
import { logger } from '../logger.ts';
/**
* Class for handling service-related CLI commands

View File

@@ -1,7 +1,7 @@
import { execSync } from 'child_process';
import { Nupst } from '../nupst.js';
import { logger } from '../logger.js';
import * as helpers from '../helpers/index.js';
import { execSync } from "node:child_process";
import { Nupst } from '../nupst.ts';
import { logger } from '../logger.ts';
import * as helpers from '../helpers/index.ts';
/**
* Class for handling UPS-related CLI commands

View File

@@ -1,10 +1,10 @@
import * as fs from 'fs';
import * as path from 'path';
import { exec, execFile } from 'child_process';
import { promisify } from 'util';
import { NupstSnmp } from './snmp/manager.js';
import type { ISnmpConfig } from './snmp/types.js';
import { logger } from './logger.js';
import * as fs from "node:fs";
import * as path from "node:path";
import { exec, execFile } from "node:child_process";
import { promisify } from "node:util";
import { NupstSnmp } from './snmp/manager.ts';
import type { ISnmpConfig } from './snmp/types.ts';
import { logger } from './logger.ts';
const execAsync = promisify(exec);
const execFileAsync = promisify(execFile);

View File

@@ -1 +1 @@
export * from './shortid.js';
export * from './shortid.ts';

View File

@@ -1,7 +1,7 @@
#!/usr/bin/env node
import { NupstCli } from './cli.js';
import { logger } from './logger.js';
import { NupstCli } from './cli.ts';
import { logger } from './logger.ts';
/**
* Main entry point for NUPST

View File

@@ -1,12 +1,12 @@
import { NupstSnmp } from './snmp/manager.js';
import { NupstDaemon } from './daemon.js';
import { NupstSystemd } from './systemd.js';
import { commitinfo } from './00_commitinfo_data.js';
import { logger } from './logger.js';
import { UpsHandler } from './cli/ups-handler.js';
import { GroupHandler } from './cli/group-handler.js';
import { ServiceHandler } from './cli/service-handler.js';
import * as https from 'https';
import { NupstSnmp } from './snmp/manager.ts';
import { NupstDaemon } from './daemon.ts';
import { NupstSystemd } from './systemd.ts';
import { commitinfo } from './00_commitinfo_data.ts';
import { logger } from './logger.ts';
import { UpsHandler } from './cli/ups-handler.ts';
import { GroupHandler } from './cli/group-handler.ts';
import { ServiceHandler } from './cli/service-handler.ts';
import * as https from "node:https";
/**
* Main Nupst class that coordinates all components

View File

@@ -4,7 +4,7 @@
*/
// Re-export all public types
export type { IUpsStatus, IOidSet, TUpsModel, ISnmpConfig } from './types.js';
export type { IUpsStatus, IOidSet, TUpsModel, ISnmpConfig } from './types.ts';
// Re-export the SNMP manager class
export { NupstSnmp } from './manager.js';
export { NupstSnmp } from './manager.ts';

View File

@@ -1,6 +1,6 @@
import * as snmp from 'net-snmp';
import type { IOidSet, ISnmpConfig, TUpsModel, IUpsStatus } from './types.js';
import { UpsOidSets } from './oid-sets.js';
import * as snmp from "npm:net-snmp@3.20.0";
import type { IOidSet, ISnmpConfig, TUpsModel, IUpsStatus } from './types.ts';
import { UpsOidSets } from './oid-sets.ts';
/**
* Class for SNMP communication with UPS devices

View File

@@ -1,4 +1,4 @@
import type { IOidSet, TUpsModel } from './types.js';
import type { IOidSet, TUpsModel } from './types.ts';
/**
* OID sets for different UPS models

View File

@@ -1,7 +1,7 @@
import { promises as fs } from 'fs';
import { execSync } from 'child_process';
import { NupstDaemon } from './daemon.js';
import { logger } from './logger.js';
import { promises as fs } from "node:fs";
import { execSync } from "node:child_process";
import { NupstDaemon } from './daemon.ts';
import { logger } from './logger.ts';
/**
* Class for managing systemd service