diff --git a/apps/worker/src/scripts/generate-totp.ts b/apps/worker/src/scripts/generate-totp.ts index 2d3424e..09aa74a 100644 --- a/apps/worker/src/scripts/generate-totp.ts +++ b/apps/worker/src/scripts/generate-totp.ts @@ -82,6 +82,26 @@ function generateTOTP(secret: string, timeStep: number = 30, digits: number = 6) return generateHOTP(secret, counter, digits); } +// === Help === + +function printHelp(): void { + console.log( + `generate-totp - emit a current 6-digit TOTP code for a base32-encoded secret. + +Usage: + generate-totp --secret + generate-totp --help + +Options: + --secret Base32-encoded TOTP shared secret (characters A-Z, 2-7). + -h, --help Show this help and exit. + +Output: + JSON to stdout. On success: {"status":"success","totpCode":"123456","expiresIn":}. + On error: {"status":"error","message":"...","retryable":false} (exit 1).`, + ); +} + // === Argument Parsing === function parseSecret(argv: string[]): string { @@ -97,6 +117,11 @@ function parseSecret(argv: string[]): string { // === Main === function main(): void { + if (process.argv.includes('--help') || process.argv.includes('-h')) { + printHelp(); + return; + } + const secret = parseSecret(process.argv); if (!secret) { diff --git a/apps/worker/src/scripts/save-deliverable.ts b/apps/worker/src/scripts/save-deliverable.ts index 8459abe..31e1919 100644 --- a/apps/worker/src/scripts/save-deliverable.ts +++ b/apps/worker/src/scripts/save-deliverable.ts @@ -19,6 +19,31 @@ import { mkdirSync, readFileSync, writeFileSync } from 'node:fs'; import { join, resolve } from 'node:path'; import { DELIVERABLE_FILENAMES, type DeliverableType } from '../types/deliverables.js'; +// === Help === + +function printHelp(): void { + const types = Object.keys(DELIVERABLE_FILENAMES).join(', '); + console.log( + `save-deliverable - save a Shannon pentest deliverable under its canonical filename. + +Usage: + save-deliverable --type --file-path + save-deliverable --type --content '' + save-deliverable --help + +Options: + --type Deliverable type (required). One of: + ${types} + --file-path Path of a file whose contents to save (preferred for large content). + --content Inline content string to save. + -h, --help Show this help and exit. + +Output: + JSON to stdout. On success: {"status":"success","filepath":"..."}. + On error: {"status":"error","message":"...","retryable":true|false} (exit 1).`, + ); +} + // === Argument Parsing === interface ParsedArgs { @@ -69,6 +94,11 @@ function saveDeliverableFile(targetDir: string, filename: string, content: strin // === Main === function main(): void { + if (process.argv.includes('--help') || process.argv.includes('-h')) { + printHelp(); + return; + } + const args = parseArgs(process.argv); // 1. Validate --type