{"id":18847,"library":"tengits-dbm","title":"tengits-dbm","description":"tengits-dbm (Database Manager CLI) is a command-line tool for MySQL connection management, migration, and data comparison. Current version is 1.0.12, released with moderate cadence, no changelog available. Key features: SSH tunnel support, AES-256-GCM encrypted password storage, connection pooling, schema/data comparison with multiple modes, and cross-server migration. Requires Node.js >=18.0.0, ships TypeScript types. Primarily aimed at developers and DevOps needing a scriptable, secure MySQL CLI with migration capabilities, differentiating by built-in SSH tunneling and encrypted credential storage.","status":"active","version":"1.0.12","language":"javascript","source_language":"en","source_url":null,"tags":["javascript","cli","database","mysql","ssh-tunnel","migration","connection-manager","typescript"],"install":[{"cmd":"npm install tengits-dbm","lang":"bash","label":"npm"},{"cmd":"yarn add tengits-dbm","lang":"bash","label":"yarn"},{"cmd":"pnpm add tengits-dbm","lang":"bash","label":"pnpm"}],"dependencies":[],"imports":[{"note":"ESM-only package; TypeScript types included. Import the DBM class for programmatic use. CJS require() will fail because package is type module.","wrong":"const dbm = require('tengits-dbm'); const DBM = require('tengits-dbm').DBM;","symbol":"DBM CLI","correct":"import { DBM } from 'tengits-dbm'"},{"note":"ESM import for connection pool manager class; used for managing database connection pools. Not exported in CommonJS.","wrong":"const ConnectionPoolManager = require('tengits-dbm').ConnectionPoolManager;","symbol":"ConnectionPoolManager","correct":"import { ConnectionPoolManager } from 'tengits-dbm'"},{"note":"Utility function for encrypting passwords using AES-256-GCM. Only available via named ESM import.","wrong":"const encryptPassword = require('tengits-dbm').encryptPassword;","symbol":"encryptPassword","correct":"import { encryptPassword } from 'tengits-dbm'"},{"note":"Utility function for decrypting passwords. Must be used with the same master password as encryption.","wrong":"const decryptPassword = require('tengits-dbm').decryptPassword;","symbol":"decryptPassword","correct":"import { decryptPassword } from 'tengits-dbm'"}],"quickstart":{"code":"// Set master password (required for encrypted storage)\nprocess.env.DBM_MASTER_PASSWORD = 'your-secure-master-password';\n\nimport { DBM } from 'tengits-dbm';\n\nconst dbm = new DBM();\n\n// Add a direct connection\nawait dbm.addConnection('mydb', {\n  host: '192.168.1.100',\n  port: 3306,\n  user: 'root',\n  password: 'mypassword'\n});\n\n// List all connections\nconst connections = await dbm.listConnections();\nconsole.log(connections);\n\n// Test connection\nconst testResult = await dbm.testConnection('mydb');\nconsole.log(testResult ? 'Connection OK' : 'Connection failed');\n\n// List databases\nconst databases = await dbm.listDatabases('mydb');\nconsole.log(databases);\n\n// Execute SQL\nconst result = await dbm.executeSQL('mydb', {\n  database: 'mydatabase',\n  sql: 'SELECT * FROM users LIMIT 10'\n});\nconsole.log(result);\n\n// Remove connection\nawait dbm.removeConnection('mydb');","lang":"typescript","description":"Programmatic usage of DBM CLI: add connection, list, test, query databases, and remove connection with proper ESM imports."},"warnings":[{"fix":"export DBM_MASTER_PASSWORD='your-master-password' or set process.env.DBM_MASTER_PASSWORD in code before importing dbm.","message":"Master password must be set via environment variable DBM_MASTER_PASSWORD before any operation; otherwise encryption/decryption fails silently or throws.","severity":"gotcha","affected_versions":">=1.0.0"},{"fix":"Use ESM import syntax: import { DBM } from 'tengits-dbm'","message":"CommonJS require is not supported; package is type: module. Using require will throw ERR_REQUIRE_ESM.","severity":"deprecated","affected_versions":">=1.0.0"},{"fix":"Prefer --ssh-key-file over --ssh-password for SSH connections.","message":"SSH password authentication may expose credentials in process list (e.g., via ps aux). Use SSH key authentication whenever possible.","severity":"gotcha","affected_versions":">=1.0.0"},{"fix":"Use the ConnectionPoolManager to configure shorter timeout or increase max connections.","message":"Connection pool timeout default is 5 minutes; long-running queries may cause pool exhaustion if connections are not released properly.","severity":"breaking","affected_versions":">=1.0.0"},{"fix":"Always backup target database before forced migration; use --backup flag.","message":"Database migration using --force overwrites target without confirmation; accidental data loss possible.","severity":"gotcha","affected_versions":">=1.0.0"}],"env_vars":null,"last_verified":"2026-04-25T00:00:00.000Z","next_check":"2026-07-24T00:00:00.000Z","problems":[{"fix":"Change to ESM import: import { DBM } from 'tengits-dbm'; or set type: module in package.json.","cause":"Using CommonJS require() on an ESM-only package.","error":"ERR_REQUIRE_ESM: require() of ES Module /path/to/tengits-dbm/index.js not supported"},{"fix":"Set process.env.DBM_MASTER_PASSWORD = 'your-pass'; before using dbm.","cause":"Missing environment variable DBM_MASTER_PASSWORD before calling encryption-related functions.","error":"Error: Master password not set. Set DBM_MASTER_PASSWORD environment variable."},{"fix":"Use import { DBM } from 'tengits-dbm'; then const dbm = new DBM(); and call dbm.addConnection(...).","cause":"Using wrong import or not initializing DBM instance properly.","error":"TypeError: dbm.addConnection is not a function"}],"ecosystem":"npm","meta_description":null,"install_score":null,"install_tag":null,"quickstart_score":null,"quickstart_tag":null}