vacuum-sol 1.0.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 (62) hide show
  1. package/README.md +362 -0
  2. package/dist/config.d.ts +15 -0
  3. package/dist/config.d.ts.map +1 -0
  4. package/dist/config.js +58 -0
  5. package/dist/config.js.map +1 -0
  6. package/dist/core/detector.d.ts +36 -0
  7. package/dist/core/detector.d.ts.map +1 -0
  8. package/dist/core/detector.js +142 -0
  9. package/dist/core/detector.js.map +1 -0
  10. package/dist/core/monitor.d.ts +31 -0
  11. package/dist/core/monitor.d.ts.map +1 -0
  12. package/dist/core/monitor.js +172 -0
  13. package/dist/core/monitor.js.map +1 -0
  14. package/dist/core/reclaimer.d.ts +30 -0
  15. package/dist/core/reclaimer.d.ts.map +1 -0
  16. package/dist/core/reclaimer.js +182 -0
  17. package/dist/core/reclaimer.js.map +1 -0
  18. package/dist/core/types.d.ts +125 -0
  19. package/dist/core/types.d.ts.map +1 -0
  20. package/dist/core/types.js +2 -0
  21. package/dist/core/types.js.map +1 -0
  22. package/dist/db/accounts.d.ts +71 -0
  23. package/dist/db/accounts.d.ts.map +1 -0
  24. package/dist/db/accounts.js +205 -0
  25. package/dist/db/accounts.js.map +1 -0
  26. package/dist/db/index.d.ts +14 -0
  27. package/dist/db/index.d.ts.map +1 -0
  28. package/dist/db/index.js +104 -0
  29. package/dist/db/index.js.map +1 -0
  30. package/dist/db/operators.d.ts +48 -0
  31. package/dist/db/operators.d.ts.map +1 -0
  32. package/dist/db/operators.js +201 -0
  33. package/dist/db/operators.js.map +1 -0
  34. package/dist/index.d.ts +3 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +473 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/server/index.d.ts +5 -0
  39. package/dist/server/index.d.ts.map +1 -0
  40. package/dist/server/index.js +121 -0
  41. package/dist/server/index.js.map +1 -0
  42. package/dist/services/reporter.d.ts +28 -0
  43. package/dist/services/reporter.d.ts.map +1 -0
  44. package/dist/services/reporter.js +107 -0
  45. package/dist/services/reporter.js.map +1 -0
  46. package/dist/services/solana.d.ts +59 -0
  47. package/dist/services/solana.d.ts.map +1 -0
  48. package/dist/services/solana.js +162 -0
  49. package/dist/services/solana.js.map +1 -0
  50. package/dist/services/telegram.d.ts +20 -0
  51. package/dist/services/telegram.d.ts.map +1 -0
  52. package/dist/services/telegram.js +213 -0
  53. package/dist/services/telegram.js.map +1 -0
  54. package/dist/utils/helpers.d.ts +55 -0
  55. package/dist/utils/helpers.d.ts.map +1 -0
  56. package/dist/utils/helpers.js +116 -0
  57. package/dist/utils/helpers.js.map +1 -0
  58. package/dist/utils/logger.d.ts +14 -0
  59. package/dist/utils/logger.d.ts.map +1 -0
  60. package/dist/utils/logger.js +70 -0
  61. package/dist/utils/logger.js.map +1 -0
  62. package/package.json +69 -0
@@ -0,0 +1,116 @@
1
+ import { LAMPORTS_PER_SOL, PublicKey } from '@solana/web3.js';
2
+ /**
3
+ * Convert lamports to SOL with fixed decimal places
4
+ */
5
+ export function lamportsToSol(lamports, decimals = 6) {
6
+ return Number((lamports / LAMPORTS_PER_SOL).toFixed(decimals));
7
+ }
8
+ /**
9
+ * Convert SOL to lamports
10
+ */
11
+ export function solToLamports(sol) {
12
+ return Math.floor(sol * LAMPORTS_PER_SOL);
13
+ }
14
+ /**
15
+ * Format lamports as SOL string with symbol
16
+ */
17
+ export function formatSol(lamports) {
18
+ return `${lamportsToSol(lamports)} SOL`;
19
+ }
20
+ /**
21
+ * Shorten a public key for display
22
+ */
23
+ export function shortenPubkey(pubkey, chars = 4) {
24
+ const str = typeof pubkey === 'string' ? pubkey : pubkey.toBase58();
25
+ return `${str.slice(0, chars)}...${str.slice(-chars)}`;
26
+ }
27
+ /**
28
+ * Validate a public key string
29
+ */
30
+ export function isValidPubkey(str) {
31
+ try {
32
+ new PublicKey(str);
33
+ return true;
34
+ }
35
+ catch {
36
+ return false;
37
+ }
38
+ }
39
+ /**
40
+ * Parse a public key string safely
41
+ */
42
+ export function parsePubkey(str) {
43
+ try {
44
+ return new PublicKey(str);
45
+ }
46
+ catch {
47
+ return null;
48
+ }
49
+ }
50
+ /**
51
+ * Calculate rent for a given account size
52
+ * Based on Solana's rent calculation (approx 0.00089 SOL per byte per year for 2 years)
53
+ */
54
+ export function calculateMinimumRent(dataSize) {
55
+ // Solana rent: 19.055441478439427 lamports per byte per epoch (2 days)
56
+ // Rent-exempt = 2 years = 365 epochs
57
+ // ~6.96 lamports per byte for rent-exempt
58
+ const LAMPORTS_PER_BYTE_YEAR = 3480;
59
+ const YEARS_FOR_EXEMPT = 2;
60
+ const ACCOUNT_HEADER_SIZE = 128; // Account metadata overhead
61
+ return ((dataSize + ACCOUNT_HEADER_SIZE) * LAMPORTS_PER_BYTE_YEAR * YEARS_FOR_EXEMPT);
62
+ }
63
+ /**
64
+ * Token Account size (165 bytes) minimum rent
65
+ */
66
+ export const TOKEN_ACCOUNT_RENT = 2039280; // ~0.00204 SOL
67
+ /**
68
+ * Sleep for a given duration
69
+ */
70
+ export function sleep(ms) {
71
+ return new Promise((resolve) => setTimeout(resolve, ms));
72
+ }
73
+ /**
74
+ * Retry a function with exponential backoff
75
+ */
76
+ export async function retry(fn, maxRetries = 3, baseDelayMs = 1000) {
77
+ let lastError;
78
+ for (let attempt = 0; attempt < maxRetries; attempt++) {
79
+ try {
80
+ return await fn();
81
+ }
82
+ catch (error) {
83
+ lastError = error;
84
+ if (attempt < maxRetries - 1) {
85
+ const delay = baseDelayMs * Math.pow(2, attempt);
86
+ await sleep(delay);
87
+ }
88
+ }
89
+ }
90
+ throw lastError;
91
+ }
92
+ /**
93
+ * Format a date for display
94
+ */
95
+ export function formatDate(date) {
96
+ return date.toISOString().replace('T', ' ').slice(0, 19);
97
+ }
98
+ /**
99
+ * Calculate days since a date
100
+ */
101
+ export function daysSince(date) {
102
+ const now = new Date();
103
+ const diffMs = now.getTime() - date.getTime();
104
+ return Math.floor(diffMs / (1000 * 60 * 60 * 24));
105
+ }
106
+ /**
107
+ * Chunk an array into smaller arrays
108
+ */
109
+ export function chunk(array, size) {
110
+ const chunks = [];
111
+ for (let i = 0; i < array.length; i += size) {
112
+ chunks.push(array.slice(i, i + size));
113
+ }
114
+ return chunks;
115
+ }
116
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/utils/helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export type LogLevel = 'debug' | 'info' | 'warn' | 'error' | 'success';
2
+ export declare function setLogLevel(level: LogLevel): void;
3
+ export declare const logger: {
4
+ debug(message: string, ...args: unknown[]): void;
5
+ info(message: string, ...args: unknown[]): void;
6
+ warn(message: string, ...args: unknown[]): void;
7
+ error(message: string, ...args: unknown[]): void;
8
+ success(message: string, ...args: unknown[]): void;
9
+ table(data: Record<string, unknown>[]): void;
10
+ box(title: string, content: string): void;
11
+ divider(): void;
12
+ newline(): void;
13
+ };
14
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAA;AAYtE,wBAAgB,WAAW,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAEjD;AAUD,eAAO,MAAM,MAAM;mBACF,MAAM,WAAW,OAAO,EAAE,GAAG,IAAI;kBAUlC,MAAM,WAAW,OAAO,EAAE,GAAG,IAAI;kBAMjC,MAAM,WAAW,OAAO,EAAE,GAAG,IAAI;mBAUhC,MAAM,WAAW,OAAO,EAAE,GAAG,IAAI;qBAU/B,MAAM,WAAW,OAAO,EAAE,GAAG,IAAI;gBAWtC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,IAAI;eAKjC,MAAM,WAAW,MAAM,GAAG,IAAI;eAe9B,IAAI;eAKJ,IAAI;CAGhB,CAAA"}
@@ -0,0 +1,70 @@
1
+ import chalk from 'chalk';
2
+ const LOG_LEVELS = {
3
+ debug: 0,
4
+ info: 1,
5
+ warn: 2,
6
+ error: 3,
7
+ success: 1,
8
+ };
9
+ let currentLogLevel = 'info';
10
+ export function setLogLevel(level) {
11
+ currentLogLevel = level;
12
+ }
13
+ function shouldLog(level) {
14
+ return LOG_LEVELS[level] >= LOG_LEVELS[currentLogLevel];
15
+ }
16
+ function formatTimestamp() {
17
+ return new Date().toISOString().slice(11, 19);
18
+ }
19
+ export const logger = {
20
+ debug(message, ...args) {
21
+ if (shouldLog('debug')) {
22
+ console.log(chalk.gray(`[${formatTimestamp()}] [DEBUG]`), message, ...args);
23
+ }
24
+ },
25
+ info(message, ...args) {
26
+ if (shouldLog('info')) {
27
+ console.log(chalk.blue(`[${formatTimestamp()}] [INFO]`), message, ...args);
28
+ }
29
+ },
30
+ warn(message, ...args) {
31
+ if (shouldLog('warn')) {
32
+ console.log(chalk.yellow(`[${formatTimestamp()}] [WARN]`), message, ...args);
33
+ }
34
+ },
35
+ error(message, ...args) {
36
+ if (shouldLog('error')) {
37
+ console.error(chalk.red(`[${formatTimestamp()}] [ERROR]`), message, ...args);
38
+ }
39
+ },
40
+ success(message, ...args) {
41
+ if (shouldLog('success')) {
42
+ console.log(chalk.green(`[${formatTimestamp()}] [SUCCESS]`), message, ...args);
43
+ }
44
+ },
45
+ // Special formatting for tables and reports
46
+ table(data) {
47
+ console.table(data);
48
+ },
49
+ // Box for important messages
50
+ box(title, content) {
51
+ const width = Math.max(title.length, ...content.split('\n').map((l) => l.length)) + 4;
52
+ const border = '─'.repeat(width);
53
+ console.log(chalk.cyan(`┌${border}┐`));
54
+ console.log(chalk.cyan(`│ ${chalk.bold(title.padEnd(width - 2))} │`));
55
+ console.log(chalk.cyan(`├${border}┤`));
56
+ for (const line of content.split('\n')) {
57
+ console.log(chalk.cyan(`│ ${line.padEnd(width - 2)} │`));
58
+ }
59
+ console.log(chalk.cyan(`└${border}┘`));
60
+ },
61
+ // Divider
62
+ divider() {
63
+ console.log(chalk.gray('─'.repeat(50)));
64
+ },
65
+ // Empty line
66
+ newline() {
67
+ console.log();
68
+ },
69
+ };
70
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,69 @@
1
+ {
2
+ "name": "vacuum-sol",
3
+ "version": "1.0.0",
4
+ "description": "Vacuum - Suck up forgotten rent from Solana accounts",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "bin": {
8
+ "vacuum": "./dist/index.js"
9
+ },
10
+ "scripts": {
11
+ "build": "tsc",
12
+ "dev": "tsx watch src/index.ts",
13
+ "start": "node dist/index.js",
14
+ "test": "vitest run",
15
+ "test:watch": "vitest",
16
+ "lint": "eslint src --ext .ts",
17
+ "simulate": "tsx scripts/simulate.ts"
18
+ },
19
+ "keywords": [
20
+ "solana",
21
+ "rent",
22
+ "reclaim",
23
+ "automation",
24
+ "cli",
25
+ "bot",
26
+ "telegram",
27
+ "web3",
28
+ "token-accounts"
29
+ ],
30
+ "author": "Don-Vicks",
31
+ "license": "MIT",
32
+ "repository": {
33
+ "type": "git",
34
+ "url": "https://github.com/Don-Vicks/vaccum.git"
35
+ },
36
+ "homepage": "https://github.com/Don-Vicks/vaccum#readme",
37
+ "bugs": {
38
+ "url": "https://github.com/Don-Vicks/vaccum/issues"
39
+ },
40
+ "files": [
41
+ "dist",
42
+ "README.md",
43
+ "LICENSE"
44
+ ],
45
+ "dependencies": {
46
+ "@solana/spl-token": "^0.4.9",
47
+ "@solana/web3.js": "^1.98.0",
48
+ "better-sqlite3": "^11.7.0",
49
+ "chalk": "^5.4.1",
50
+ "commander": "^13.0.0",
51
+ "cors": "^2.8.6",
52
+ "dotenv": "^16.4.7",
53
+ "express": "^5.2.1",
54
+ "ora": "^8.1.1",
55
+ "telegraf": "^4.16.3"
56
+ },
57
+ "devDependencies": {
58
+ "@types/better-sqlite3": "^7.6.12",
59
+ "@types/cors": "^2.8.19",
60
+ "@types/express": "^5.0.6",
61
+ "@types/node": "^22.10.5",
62
+ "tsx": "^4.19.2",
63
+ "typescript": "^5.7.3",
64
+ "vitest": "^2.1.8"
65
+ },
66
+ "engines": {
67
+ "node": ">=20.0.0"
68
+ }
69
+ }