dankgrinder 8.98.0 → 8.99.0

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.
Files changed (2) hide show
  1. package/lib/grinder.js +28 -29
  2. package/package.json +1 -1
package/lib/grinder.js CHANGED
@@ -3172,7 +3172,6 @@ async function start(apiKey, apiUrl, opts = {}) {
3172
3172
  let shutdownInProgress = false;
3173
3173
 
3174
3174
  async function gracefulShutdown(signal) {
3175
- const chalk = require('chalk');
3176
3175
  if (shutdownInProgress) return;
3177
3176
  shutdownInProgress = true;
3178
3177
  shutdownCalled = true;
@@ -3187,46 +3186,42 @@ async function start(apiKey, apiUrl, opts = {}) {
3187
3186
  // Build the stats table visually gracefully
3188
3187
  let finalCoins = 0;
3189
3188
  let finalCmds = 0;
3190
-
3191
- const figlet = require('figlet');
3192
-
3193
- let table = '';
3194
-
3195
-
3196
- table += ' ' + chalk.dim('────────────────────────────────────────────────────────────────────────────────────────────────') + '\n\n';
3197
- table += ' ' + chalk.dim('ACCOUNT'.padEnd(25)) + chalk.dim('GAINED'.padEnd(15)) + chalk.dim('COMMANDS'.padEnd(10)) + chalk.dim('OK %') + '\n\n';
3189
+
3190
+ let figlet;
3191
+ try { figlet = require('figlet'); } catch {}
3192
+
3193
+ const divLine = '────────────────────────────────────────────────────────────────────────────────────────────────';
3194
+
3195
+ let table = '\n';
3196
+ table += ` ${c.dim}${divLine}${c.reset}\n\n`;
3197
+ table += ` ${c.dim}${'ACCOUNT'.padEnd(25)}${'GAINED'.padEnd(15)}${'COMMANDS'.padEnd(10)}${'OK %'}${c.reset}\n\n`;
3198
3198
 
3199
3199
  for (const wk of workers) {
3200
3200
  const rate = wk.stats.commands > 0 ? ((wk.stats.successes / wk.stats.commands) * 100).toFixed(0) : 0;
3201
3201
  finalCoins += wk.stats.coins || 0;
3202
3202
  finalCmds += wk.stats.commands || 0;
3203
-
3204
- const unRaw = (wk.username || '?').substring(0, 23);
3205
- const coinsRaw = '+⏣' + (wk.stats.coins || 0).toLocaleString();
3206
- const cmdsRaw = String(wk.stats.commands || 0);
3207
- const okRaw = rate + '%';
3208
-
3209
- const un = unRaw.padEnd(25);
3210
- const coins = coinsRaw.substring(0, 14).padEnd(15);
3211
- const cmds = cmdsRaw.substring(0, 8).padEnd(10);
3212
- const ok = okRaw.substring(0, 6).padEnd(6);
3213
-
3203
+
3204
+ const un = (wk.username || '?').substring(0, 23).padEnd(25);
3205
+ const coins = ('+⏣' + (wk.stats.coins || 0).toLocaleString()).substring(0, 14).padEnd(15);
3206
+ const cmds = String(wk.stats.commands || 0).substring(0, 8).padEnd(10);
3207
+ const ok = (rate + '%').substring(0, 6).padEnd(6);
3208
+
3214
3209
  table += ` ${c.cyan}${un}${c.reset} ${c.green}${coins}${c.reset} ${cmds} ${ok}\n`;
3215
3210
  }
3216
-
3211
+
3217
3212
  if (workers.length === 0) {
3218
- table += ` ${c.dim}${'No workers...'.padEnd(25)}${c.reset} ${''.padEnd(15)} ${''.padEnd(10)} ${''.padEnd(6)}\n`;
3213
+ table += ` ${c.dim}${'No workers...'.padEnd(25)}${c.reset}\n`;
3219
3214
  }
3220
-
3221
- table += '\n ' + chalk.dim('────────────────────────────────────────────────────────────────────────────────────────────────') + '\n';
3215
+
3216
+ table += `\n ${c.dim}${divLine}${c.reset}\n`;
3222
3217
  process.stdout.write(table);
3223
3218
 
3224
3219
  const memFinal = Math.round((process.memoryUsage?.rss?.() ?? process.memoryUsage().rss) / 1048576);
3225
3220
  const cpm = globalCmdRate.getRate().toFixed(1);
3226
-
3227
- console.log('\n ' + chalk.magenta('◆') + ' ' + chalk.bold('TOTAL') + ' ' + chalk.green('+⏣' + finalCoins.toLocaleString()) + ' ' + chalk.dim('in ' + ui.formatUptime()));
3228
- console.log(' ' + chalk.cyan('◆') + ' ' + chalk.bold('STATS') + ' ' + finalCmds + chalk.dim(' cmds │ ') + '~' + cpm + chalk.dim(' cmd/m │ ') + memFinal + chalk.dim('MB RAM'));
3229
- console.log('\n');
3221
+
3222
+ console.log(`\n ${c.magenta}◆${c.reset} ${c.bold}TOTAL${c.reset} ${c.green}+⏣${finalCoins.toLocaleString()}${c.reset} ${c.dim}in ${ui.formatUptime()}${c.reset}`);
3223
+ console.log(` ${c.cyan}◆${c.reset} ${c.bold}STATS${c.reset} ${finalCmds}${c.dim} cmds │ ${c.reset}~${cpm}${c.dim} cmd/m │ ${c.reset}${memFinal}${c.dim}MB RAM${c.reset}`);
3224
+ console.log('');
3230
3225
 
3231
3226
 
3232
3227
  // Stop workers immediately (don't wait) — instant shutdown
@@ -3258,7 +3253,11 @@ const figlet = require('figlet');
3258
3253
 
3259
3254
  const disResult = redis?.disconnect?.();
3260
3255
  if (disResult && typeof disResult.catch === 'function') disResult.catch(() => {});
3261
- console.log(chalk.magenta + figlet.textSync('GOODBYE!', { font: 'ANSI Shadow' }) + c.reset + '\n');
3256
+ if (figlet) {
3257
+ console.log(c.magenta + figlet.textSync('GOODBYE!', { font: 'ANSI Shadow' }) + c.reset + '\n');
3258
+ } else {
3259
+ console.log(`${c.magenta}${c.bold}GOODBYE!${c.reset}\n`);
3260
+ }
3262
3261
  // Force exit so Ctrl+C always terminates immediately
3263
3262
  setTimeout(() => process.exit(0), 2000);
3264
3263
  process.exit(0);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dankgrinder",
3
- "version": "8.98.0",
3
+ "version": "8.99.0",
4
4
  "description": "Dank Memer automation engine — grind coins while you sleep",
5
5
  "bin": {
6
6
  "dankgrinder": "bin/dankgrinder.js"