@pooflabs/server 0.0.23-rc-6 → 0.0.23-rc-7

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.
@@ -25,8 +25,9 @@ export declare class SolanaKeypairProvider implements AuthProvider {
25
25
  */
26
26
  signAndSubmitTransaction(transaction: Transaction | VersionedTransaction, feePayer?: anchor.web3.PublicKey): Promise<string>;
27
27
  /**
28
- * Submits a signed transaction and waits for confirmation using polling.
29
- * Shared by both signAndSubmitTransaction and runTransactionInner.
28
+ * Submits a signed transaction and waits for confirmation using
29
+ * sendRawTransaction + confirmTransaction with a blockhash-based
30
+ * strategy, which handles blockhash expiry properly.
30
31
  */
31
32
  private submitAndConfirmTransaction;
32
33
  private getRpcUrl;
package/dist/index.js CHANGED
@@ -157,42 +157,35 @@ class SolanaKeypairProvider {
157
157
  // 3. Sign the transaction
158
158
  const signedTx = await this.signTransaction(transaction);
159
159
  // 4. Submit and confirm using shared helper
160
- const { signature } = await this.submitAndConfirmTransaction(signedTx, connection);
160
+ const { signature } = await this.submitAndConfirmTransaction(signedTx, connection, { blockhash, lastValidBlockHeight });
161
161
  return signature;
162
162
  }
163
163
  /* ----------------------------------------------------------- *
164
164
  * Private Helpers
165
165
  * ----------------------------------------------------------- */
166
166
  /**
167
- * Submits a signed transaction and waits for confirmation using polling.
168
- * Shared by both signAndSubmitTransaction and runTransactionInner.
167
+ * Submits a signed transaction and waits for confirmation using
168
+ * sendRawTransaction + confirmTransaction with a blockhash-based
169
+ * strategy, which handles blockhash expiry properly.
169
170
  */
170
- async submitAndConfirmTransaction(signedTx, connection, options) {
171
- var _a, _b;
172
- const sig = await connection.sendRawTransaction(signedTx.serialize(), {
171
+ async submitAndConfirmTransaction(signedTx, connection, blockhashInfo, options) {
172
+ const rawTx = signedTx.serialize();
173
+ console.log("Connection rpcUrl", connection.rpcEndpoint);
174
+ const sig = await connection.sendRawTransaction(rawTx, {
173
175
  preflightCommitment: 'confirmed',
174
176
  skipPreflight: true,
175
177
  });
176
- console.log("Connection rpcUrl", connection.rpcEndpoint);
177
178
  console.log("Signature", sig);
178
- // Wait for confirmation using polling
179
- const startTime = Date.now();
180
- const timeoutMs = 10 * 1000; // 10 seconds
181
- while (true) {
182
- const st = await connection.getSignatureStatus(sig);
183
- console.log(JSON.stringify(st, null, 2));
184
- if ((_a = st === null || st === void 0 ? void 0 : st.value) === null || _a === void 0 ? void 0 : _a.err) {
185
- throw new Error(`Transaction failed on-chain: ${JSON.stringify(st.value.err)}`);
186
- }
187
- const status = (_b = st === null || st === void 0 ? void 0 : st.value) === null || _b === void 0 ? void 0 : _b.confirmationStatus;
188
- if (status === 'confirmed') {
189
- break;
190
- }
191
- if (Date.now() - startTime > timeoutMs) {
192
- throw new Error(`Transaction confirmation timeout after ${timeoutMs / 1000} seconds`);
193
- }
194
- await new Promise(resolve => setTimeout(resolve, 500));
179
+ // Confirm using blockhash-based strategy (handles expiry properly)
180
+ const confirmation = await connection.confirmTransaction({
181
+ signature: sig,
182
+ blockhash: blockhashInfo.blockhash,
183
+ lastValidBlockHeight: blockhashInfo.lastValidBlockHeight,
184
+ }, 'confirmed');
185
+ if (confirmation.value.err) {
186
+ throw new Error(`Transaction failed on-chain: ${JSON.stringify(confirmation.value.err)}`);
195
187
  }
188
+ console.log("Confirmed signature", sig);
196
189
  // Optionally fetch transaction info
197
190
  let txInfo = null;
198
191
  if (options === null || options === void 0 ? void 0 : options.fetchTxInfo) {
@@ -350,7 +343,7 @@ class SolanaKeypairProvider {
350
343
  return { signedTransaction: tx, blockNumber: 0, gasUsed: '0', data: '' };
351
344
  }
352
345
  // Submit and confirm using shared helper
353
- const { signature, txInfo } = await this.submitAndConfirmTransaction(tx, connection, { fetchTxInfo: true });
346
+ const { signature, txInfo } = await this.submitAndConfirmTransaction(tx, connection, { blockhash, lastValidBlockHeight }, { fetchTxInfo: true });
354
347
  return {
355
348
  transactionSignature: signature,
356
349
  blockNumber: (_a = txInfo === null || txInfo === void 0 ? void 0 : txInfo.slot) !== null && _a !== void 0 ? _a : 0,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/auth/providers/solana-keypair-provider.ts","../src/auth/providers/offchain-auth-provider.ts","../src/auth/index.ts","../src/global.ts","../src/utils.ts"],"sourcesContent":["import { Buffer } from 'buffer';\nimport {\n ComputeBudgetProgram,\n Connection,\n Keypair,\n Transaction,\n VersionedTransaction,\n VersionedTransactionResponse\n} from '@solana/web3.js';\nimport * as anchor from '@coral-xyz/anchor';\nimport nacl from 'tweetnacl';\nimport bs58 from 'bs58';\n\nimport type {\n AuthProvider,\n EVMTransaction,\n SolTransaction,\n TransactionResult,\n User,\n SetOptions,\n} from '@pooflabs/core';\n\nimport {\n convertRemainingAccounts,\n buildSetDocumentsTransaction,\n} from '@pooflabs/core';\nimport { SOLANA_DEVNET_RPC_URL, SOLANA_MAINNET_RPC_URL, SURFNET_RPC_URL } from '..';\n\n/* ------------------------------------------------------------- *\n * REQUIRED ENV-VAR\n * ------------------------------------------------------------- */\nconst ENV_VAR = 'TAROBASE_SOLANA_KEYPAIR'; // base-58 or JSON array\n\nfunction loadKeypairFromEnv(): Keypair {\n const secret = process?.env?.[ENV_VAR];\n if (!secret) {\n throw new Error(\n `Missing ${ENV_VAR}. Set it to a base58 secret key or JSON array.`,\n );\n }\n\n try {\n const secretKey = secret.trim().startsWith('[')\n ? Uint8Array.from(JSON.parse(secret))\n : bs58.decode(secret.trim());\n\n return Keypair.fromSecretKey(secretKey);\n } catch (err) {\n throw new Error(\n `Unable to parse ${ENV_VAR}. Ensure it is valid base58 or a JSON array.`,\n );\n }\n}\n\n/* ──────────────────────────────────────────────────────────\n * Helper – fetch getPriorityFeeEstimate\n * ──────────────────────────────────────────────────────── */\nasync function fetchPriorityFee(rpcEndpoint: string, rawUnsignedTxBuffer: Uint8Array) {\n try {\n const res = await fetch(rpcEndpoint, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n jsonrpc: \"2.0\",\n id: \"1\",\n method: \"getPriorityFeeEstimate\",\n params: [{\n transaction: bs58.encode(rawUnsignedTxBuffer), options: {\n recommended: true\n }\n }]\n })\n });\n const data = await res.json() as { result: { priorityFeeEstimate: number } };\n console.log(\"Got fee from Helius\", data);\n const fee = data?.result?.priorityFeeEstimate ?? null;\n console.log(\"Got fee from Helius\", fee);\n if (fee != null && fee > 0) {\n return Math.ceil(Number(fee) * 1.2);\n } else {\n console.log(\"No fee from Helius, using default 10000\");\n return Math.ceil(10000 * 1.2);\n }\n } catch (err) {\n console.warn(\"Priority‑fee estimate failed:\", err);\n return Math.ceil(10000 * 1.2);\n }\n}\n\nexport class SolanaKeypairProvider implements AuthProvider {\n private readonly keypair: Keypair;\n\n constructor(\n private readonly networkUrl: string | null = null,\n ) {\n this.keypair = loadKeypairFromEnv();\n }\n\n /* ----------------------------------------------------------- *\n * (Auth stubs – fill in later if needed)\n * ----------------------------------------------------------- */\n async login(): Promise<User | null> { throw new Error('Not implemented'); }\n async restoreSession(): Promise<User | null> { throw new Error('Not implemented'); }\n async logout(): Promise<void> { throw new Error('Not implemented'); }\n\n /* ----------------------------------------------------------- *\n * Sign arbitrary message\n * ----------------------------------------------------------- */\n async signMessage(message: string): Promise<string> {\n const sig = nacl.sign.detached(\n new TextEncoder().encode(message),\n this.keypair.secretKey,\n );\n return Buffer.from(sig).toString('base64');\n }\n\n /* ----------------------------------------------------------- *\n * Sign transaction\n * ----------------------------------------------------------- */\n async signTransaction(transaction: Transaction | VersionedTransaction): Promise<Transaction | VersionedTransaction> {\n // Use duck typing instead of instanceof to handle multiple @solana/web3.js versions\n const isLegacyTransaction = 'recentBlockhash' in transaction && !('message' in transaction && 'staticAccountKeys' in (transaction as any).message);\n\n if (isLegacyTransaction) {\n (transaction as Transaction).partialSign(this.keypair);\n } else {\n (transaction as VersionedTransaction).sign([this.keypair]);\n }\n return transaction;\n }\n\n /**\n * Signs and submits a Solana transaction to the network.\n *\n * This method handles blockhash and transaction confirmation automatically - you do NOT need to\n * set recentBlockhash or lastValidBlockHeight on the transaction before calling this method.\n * The network/RPC URL is derived from the provider's configuration (set during initialization).\n *\n * @param transaction - The transaction to sign and submit (Transaction or VersionedTransaction)\n * @param feePayer - Optional fee payer public key. If not provided and the transaction doesn't\n * already have a feePayer set, the keypair's public key will be used.\n * Useful for co-signing scenarios where a different account pays the fees.\n * @returns The transaction signature\n */\n async signAndSubmitTransaction(\n transaction: Transaction | VersionedTransaction,\n feePayer?: anchor.web3.PublicKey\n ): Promise<string> {\n // 1. Get RPC URL and create connection\n const rpcUrl = this.getRpcUrl();\n const connection = new Connection(rpcUrl, 'confirmed');\n\n // 2. Get fresh blockhash and set it on the transaction before signing\n const { blockhash, lastValidBlockHeight } = await connection.getLatestBlockhash('confirmed');\n\n // Use duck typing instead of instanceof to handle multiple @solana/web3.js versions\n const isLegacyTransaction = 'recentBlockhash' in transaction && !('message' in transaction && 'staticAccountKeys' in (transaction as any).message);\n\n if (isLegacyTransaction) {\n const legacyTx = transaction as Transaction;\n legacyTx.recentBlockhash = blockhash;\n legacyTx.lastValidBlockHeight = lastValidBlockHeight;\n\n // Set feePayer if not already set\n if (!legacyTx.feePayer) {\n legacyTx.feePayer = feePayer ?? this.keypair.publicKey;\n }\n } else {\n // VersionedTransaction\n const versionedTx = transaction as VersionedTransaction;\n versionedTx.message.recentBlockhash = blockhash;\n // Note: VersionedTransaction feePayer is set in the message at creation time\n // and cannot be modified after creation\n }\n\n // 3. Sign the transaction\n const signedTx = await this.signTransaction(transaction);\n\n // 4. Submit and confirm using shared helper\n const { signature } = await this.submitAndConfirmTransaction(signedTx, connection);\n return signature;\n }\n\n /* ----------------------------------------------------------- *\n * Private Helpers\n * ----------------------------------------------------------- */\n\n /**\n * Submits a signed transaction and waits for confirmation using polling.\n * Shared by both signAndSubmitTransaction and runTransactionInner.\n */\n private async submitAndConfirmTransaction(\n signedTx: Transaction | VersionedTransaction,\n connection: Connection,\n options?: { fetchTxInfo?: boolean }\n ): Promise<{ signature: string; txInfo: any }> {\n const sig = await connection.sendRawTransaction(signedTx.serialize(), {\n preflightCommitment: 'confirmed',\n skipPreflight: true,\n });\n console.log(\"Connection rpcUrl\", connection.rpcEndpoint);\n console.log(\"Signature\", sig);\n\n // Wait for confirmation using polling\n const startTime = Date.now();\n const timeoutMs = 10 * 1000; // 10 seconds\n\n while (true) {\n const st = await connection.getSignatureStatus(sig);\n console.log(JSON.stringify(st, null, 2));\n\n if (st?.value?.err) {\n throw new Error(`Transaction failed on-chain: ${JSON.stringify(st.value.err)}`);\n }\n\n const status = st?.value?.confirmationStatus;\n if (status === 'confirmed') {\n break;\n }\n\n if (Date.now() - startTime > timeoutMs) {\n throw new Error(`Transaction confirmation timeout after ${timeoutMs / 1000} seconds`);\n }\n\n await new Promise(resolve => setTimeout(resolve, 500));\n }\n\n // Optionally fetch transaction info\n let txInfo : VersionedTransactionResponse | null = null;\n if (options?.fetchTxInfo) {\n txInfo = await connection.getTransaction(sig, {\n maxSupportedTransactionVersion: 0,\n commitment: 'confirmed'\n });\n }\n\n return { signature: sig, txInfo };\n }\n\n private getRpcUrl(network?: string): string {\n if (this.networkUrl) {\n return this.networkUrl;\n }\n if (network === 'solana_devnet') {\n return SOLANA_DEVNET_RPC_URL;\n } else if (network === 'solana_mainnet') {\n return SOLANA_MAINNET_RPC_URL;\n } else if (network === 'surfnet') {\n return SURFNET_RPC_URL;\n }\n return SOLANA_MAINNET_RPC_URL; // default to mainnet\n }\n\n /* ----------------------------------------------------------- *\n * Transaction runner\n * ----------------------------------------------------------- */\n async runTransaction(\n _evm?: EVMTransaction,\n sol?: SolTransaction,\n opts?: SetOptions,\n ): Promise<TransactionResult> {\n if (!sol) throw new Error('Solana transaction data required');\n\n const kp = this.keypair;\n\n // Helper for duck typing - checks if transaction is legacy Transaction vs VersionedTransaction\n const isLegacyTx = (tx: Transaction | VersionedTransaction): boolean => {\n return 'recentBlockhash' in tx && !('message' in tx && 'staticAccountKeys' in (tx as any).message);\n };\n\n const wallet: anchor.Wallet = {\n publicKey: kp.publicKey,\n signTransaction: async (tx: Transaction | VersionedTransaction) => {\n // Use duck typing instead of instanceof to handle multiple @solana/web3.js versions\n if (isLegacyTx(tx)) {\n (tx as Transaction).partialSign(kp);\n } else {\n (tx as VersionedTransaction).sign([kp]);\n }\n return tx;\n },\n signAllTransactions: async (txs: (Transaction | VersionedTransaction)[]) =>\n txs.map((t) => {\n // Use duck typing instead of instanceof to handle multiple @solana/web3.js versions\n if (isLegacyTx(t)) {\n (t as Transaction).partialSign(kp);\n } else {\n (t as VersionedTransaction).sign([kp]);\n }\n return t;\n }),\n } as unknown as anchor.Wallet;\n\n /* de-dupe remaining accounts */\n const deduped = (() => {\n const fin: ReturnType<typeof convertRemainingAccounts> = [];\n for (const acc of convertRemainingAccounts(\n sol.txArgs[0].remainingAccounts,\n )) {\n const ex = fin.find((x) => x.pubkey.equals(acc.pubkey));\n if (ex) {\n ex.isSigner ||= acc.isSigner;\n ex.isWritable ||= acc.isWritable;\n } else fin.push(acc);\n }\n return fin;\n })();\n\n let retries = 0;\n let didPass = false;\n let delay = 1000;\n let toReturn: TransactionResult | null = null;\n let errorMessage = \"\";\n while (retries < 5) {\n try {\n toReturn = await this.runTransactionInner(sol, opts, wallet, kp, deduped);\n didPass = true;\n break;\n } catch (error: any) {\n console.log(\"Error building and sending transaction on retry:\", retries, error);\n await new Promise(resolve => setTimeout(resolve, delay));\n // Exponential backoff\n delay *= 1.5;\n retries++;\n errorMessage = error.message || JSON.stringify(error, null, 2);\n }\n }\n if (!didPass) {\n throw new Error(`Failed to send transaction after 5 retries: ${errorMessage}`);\n }\n return toReturn as TransactionResult;\n }\n\n private async runTransactionInner(sol: SolTransaction, opts: SetOptions | undefined, wallet: anchor.Wallet, kp: Keypair, deduped: ReturnType<typeof convertRemainingAccounts>): Promise<TransactionResult> {\n\n let rpcUrl = this.getRpcUrl(sol.network);\n console.log('Using RPC URL:', rpcUrl);\n const connection = new Connection(rpcUrl, 'confirmed');\n\n const anchorProvider = new anchor.AnchorProvider(\n connection,\n wallet,\n anchor.AnchorProvider.defaultOptions(),\n );\n\n const app_id = sol.appId;\n if (!app_id) throw new Error('app_id missing');\n\n let { tx, blockhash, lastValidBlockHeight } = await buildSetDocumentsTransaction(\n connection,\n sol.txArgs[0].idl,\n anchorProvider,\n kp.publicKey,\n {\n app_id,\n documents: sol.txArgs[0].setDocumentData,\n delete_paths: sol.txArgs[0].deletePaths,\n txData: sol.txArgs[0].txData\n },\n deduped,\n sol.lutKey,\n sol.preInstructions,\n false,\n );\n\n // Helper for duck typing - checks if transaction is legacy Transaction vs VersionedTransaction\n const isLegacyTx = (t: Transaction | VersionedTransaction): boolean => {\n return 'recentBlockhash' in t && !('message' in t && 'staticAccountKeys' in (t as any).message);\n };\n\n // Refresh blockhash and lastValidBlockHeight\n // Use duck typing instead of instanceof to handle multiple @solana/web3.js versions\n if (isLegacyTx(tx)) {\n (tx as Transaction).partialSign(kp);\n (tx as Transaction).recentBlockhash = blockhash;\n (tx as Transaction).lastValidBlockHeight = lastValidBlockHeight;\n (tx as Transaction).feePayer = kp.publicKey;\n } else {\n (tx as VersionedTransaction).sign([kp]);\n (tx as VersionedTransaction).message.recentBlockhash = blockhash;\n }\n\n // 3️⃣ Optional priority‑fee instruction\n\n const rawUnsigned = tx.serialize({ requireAllSignatures: false });\n const microLamports = await fetchPriorityFee(\n connection.rpcEndpoint,\n rawUnsigned\n );\n\n if (microLamports != null) {\n // Use duck typing instead of instanceof to handle multiple @solana/web3.js versions\n if (isLegacyTx(tx)) {\n (tx as Transaction).instructions.unshift(\n ComputeBudgetProgram.setComputeUnitPrice({ microLamports })\n );\n (tx as Transaction).partialSign(kp);\n } else {\n // Rebuild the transaction with the new priority fee\n const roundTwo = await buildSetDocumentsTransaction(\n connection,\n sol.txArgs[0].idl,\n anchorProvider,\n kp.publicKey,\n {\n app_id,\n documents: sol.txArgs[0].setDocumentData,\n delete_paths: sol.txArgs[0].deletePaths,\n txData: sol.txArgs[0].txData\n },\n deduped,\n sol.lutKey,\n [ComputeBudgetProgram.setComputeUnitPrice({ microLamports }), ...sol.preInstructions],\n false,\n );\n tx = roundTwo.tx as VersionedTransaction;\n blockhash = roundTwo.blockhash;\n lastValidBlockHeight = roundTwo.lastValidBlockHeight;\n (tx as VersionedTransaction).sign([kp]);\n (tx as VersionedTransaction).message.recentBlockhash = blockhash;\n }\n }\n\n if (opts?.shouldSubmitTx === false) {\n return { signedTransaction: tx, blockNumber: 0, gasUsed: '0', data: '' };\n }\n\n // Submit and confirm using shared helper\n const { signature, txInfo } = await this.submitAndConfirmTransaction(tx, connection, { fetchTxInfo: true });\n\n return {\n transactionSignature: signature,\n blockNumber: txInfo?.slot ?? 0,\n gasUsed: txInfo?.meta?.fee.toString() ?? '0',\n data: txInfo?.meta,\n };\n }\n\n /* ----------------------------------------------------------- */\n async getNativeMethods() {\n return { keypair: this.keypair };\n }\n}\n","import { AuthProvider } from '@pooflabs/core';\nimport { Transaction, VersionedTransaction } from '@solana/web3.js';\nimport * as crypto from 'crypto';\n\n/**\n * Server-side OffchainAuthProvider wrapper for the poofnet environment.\n *\n * For signMessage, this generates a mock signature using SHA-256 hashing.\n * This is used for offchain transaction signing.\n */\nexport class OffchainAuthProvider implements AuthProvider {\n private wrappedProvider: AuthProvider;\n\n constructor(wrappedProvider: AuthProvider) {\n this.wrappedProvider = wrappedProvider;\n }\n\n async login(): Promise<any> {\n return this.wrappedProvider.login();\n }\n\n async logout(): Promise<void> {\n return this.wrappedProvider.logout();\n }\n\n async restoreSession(): Promise<any> {\n return this.wrappedProvider.restoreSession();\n }\n\n async getNativeMethods(): Promise<any> {\n return this.wrappedProvider.getNativeMethods();\n }\n\n async signMessage(message: string): Promise<string> {\n // Delegate to wrapped provider for real signing\n return this.wrappedProvider.signMessage(message);\n }\n\n async signMessageMock(message: string): Promise<string> {\n // Generate mock signature (SHA-256 hash of message, base64 encoded)\n // This is used for offchain transaction signing\n const hash = crypto.createHash('sha256').update(message).digest('base64');\n return hash;\n }\n\n async signTransaction(transaction: Transaction | VersionedTransaction): Promise<Transaction | VersionedTransaction> {\n throw new Error('Poofnet does not support real Solana transactions. Deploy your project to mainnet to use this feature.');\n }\n\n /**\n * Sign and submit transaction - not supported in poofnet environment.\n * See the real providers (PhantomWalletProvider, PrivyWalletProvider, SolanaKeypairProvider)\n * for the full implementation with blockhash handling and feePayer support.\n */\n async signAndSubmitTransaction(\n _transaction: Transaction | VersionedTransaction,\n _feePayer?: any\n ): Promise<string> {\n throw new Error('Poofnet does not support real Solana transactions. Deploy your project to mainnet to use this feature.');\n }\n\n async runTransaction(evmTransactionData?: any, solTransactionData?: any, options?: any): Promise<any> {\n return this.wrappedProvider.runTransaction(evmTransactionData, solTransactionData, options);\n }\n}\n","import { getConfig } from '@pooflabs/core';\nimport { AuthProvider } from '@pooflabs/core';\nimport { SolanaKeypairProvider } from './providers/solana-keypair-provider';\nimport { OffchainAuthProvider } from './providers/offchain-auth-provider';\n\nlet currentAuthProvider: AuthProvider | null = null;\n\nexport const SOLANA_DEVNET_RPC_URL = \"https://idelle-8nxsep-fast-devnet.helius-rpc.com\";\nexport const SOLANA_MAINNET_RPC_URL = \"https://celestia-cegncv-fast-mainnet.helius-rpc.com\";\nexport const SURFNET_RPC_URL = \"https://surfpool.fly.dev\";\n\nexport async function getAuthProvider(): Promise<AuthProvider> {\n const config = await getConfig();\n\n if (currentAuthProvider) {\n // If provider exists but chain is \"offchain\" and it's not already wrapped, rewrap it\n if (config.chain === \"offchain\" && !(currentAuthProvider instanceof OffchainAuthProvider)) {\n currentAuthProvider = new OffchainAuthProvider(currentAuthProvider);\n }\n return currentAuthProvider;\n }\n\n currentAuthProvider = await matchAuthProvider(config.rpcUrl ?? null);\n \n // Wrap with OffchainAuthProvider for offchain chain\n if (config.chain === \"offchain\") {\n currentAuthProvider = new OffchainAuthProvider(currentAuthProvider);\n }\n\n return currentAuthProvider;\n}\n\nexport async function matchAuthProvider(rpcUrl: string | null): Promise<AuthProvider> {\n return new SolanaKeypairProvider(rpcUrl);\n}","import { AuthProvider } from '@pooflabs/core';\nimport { getAuthProvider } from './auth';\nimport { init as configInit, ClientConfig } from '@pooflabs/core';\n\nlet authProviderInstance: AuthProvider | null = null;\n\nconst SOLANA_DEVNET_RPC_URL = \"https://api.devnet.solana.com\";\nconst SOLANA_MAINNET_RPC_URL = \"https://celestia-cegncv-fast-mainnet.helius-rpc.com\";\nconst SURFNET_RPC_URL = \"https://surfpool.fly.dev\";\n\nexport async function init(newConfig: Partial<ClientConfig>): Promise<void> {\n // Initialize config first so getAuthProvider can access it\n // Server-side skips backend init since it already has all needed config\n await configInit({ ...newConfig, isServer: true, skipBackendInit: true });\n\n // Get the auth provider (which will wrap it if chain is \"offchain\")\n authProviderInstance = await getAuthProvider();\n\n // Update config with the wrapped provider\n await configInit({ ...newConfig, authProvider: authProviderInstance, isServer: true, skipBackendInit: true });\n}","import { getIdToken as getIdTokenCore } from '@pooflabs/core';\n\n// Wrapper for getIdToken - passes isServer=true for server-side usage\nexport async function getIdToken(): Promise<string | null> {\n return getIdTokenCore(true);\n}\n"],"names":["Keypair","Buffer","Connection","convertRemainingAccounts","anchor","buildSetDocumentsTransaction","ComputeBudgetProgram","crypto","getConfig","configInit","getIdTokenCore"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/auth/providers/solana-keypair-provider.ts","../src/auth/providers/offchain-auth-provider.ts","../src/auth/index.ts","../src/global.ts","../src/utils.ts"],"sourcesContent":["import { Buffer } from 'buffer';\nimport {\n ComputeBudgetProgram,\n Connection,\n Keypair,\n Transaction,\n VersionedTransaction,\n VersionedTransactionResponse\n} from '@solana/web3.js';\nimport * as anchor from '@coral-xyz/anchor';\nimport nacl from 'tweetnacl';\nimport bs58 from 'bs58';\n\nimport type {\n AuthProvider,\n EVMTransaction,\n SolTransaction,\n TransactionResult,\n User,\n SetOptions,\n} from '@pooflabs/core';\n\nimport {\n convertRemainingAccounts,\n buildSetDocumentsTransaction,\n} from '@pooflabs/core';\nimport { SOLANA_DEVNET_RPC_URL, SOLANA_MAINNET_RPC_URL, SURFNET_RPC_URL } from '..';\n\n/* ------------------------------------------------------------- *\n * REQUIRED ENV-VAR\n * ------------------------------------------------------------- */\nconst ENV_VAR = 'TAROBASE_SOLANA_KEYPAIR'; // base-58 or JSON array\n\nfunction loadKeypairFromEnv(): Keypair {\n const secret = process?.env?.[ENV_VAR];\n if (!secret) {\n throw new Error(\n `Missing ${ENV_VAR}. Set it to a base58 secret key or JSON array.`,\n );\n }\n\n try {\n const secretKey = secret.trim().startsWith('[')\n ? Uint8Array.from(JSON.parse(secret))\n : bs58.decode(secret.trim());\n\n return Keypair.fromSecretKey(secretKey);\n } catch (err) {\n throw new Error(\n `Unable to parse ${ENV_VAR}. Ensure it is valid base58 or a JSON array.`,\n );\n }\n}\n\n/* ──────────────────────────────────────────────────────────\n * Helper – fetch getPriorityFeeEstimate\n * ──────────────────────────────────────────────────────── */\nasync function fetchPriorityFee(rpcEndpoint: string, rawUnsignedTxBuffer: Uint8Array) {\n try {\n const res = await fetch(rpcEndpoint, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n jsonrpc: \"2.0\",\n id: \"1\",\n method: \"getPriorityFeeEstimate\",\n params: [{\n transaction: bs58.encode(rawUnsignedTxBuffer), options: {\n recommended: true\n }\n }]\n })\n });\n const data = await res.json() as { result: { priorityFeeEstimate: number } };\n console.log(\"Got fee from Helius\", data);\n const fee = data?.result?.priorityFeeEstimate ?? null;\n console.log(\"Got fee from Helius\", fee);\n if (fee != null && fee > 0) {\n return Math.ceil(Number(fee) * 1.2);\n } else {\n console.log(\"No fee from Helius, using default 10000\");\n return Math.ceil(10000 * 1.2);\n }\n } catch (err) {\n console.warn(\"Priority‑fee estimate failed:\", err);\n return Math.ceil(10000 * 1.2);\n }\n}\n\nexport class SolanaKeypairProvider implements AuthProvider {\n private readonly keypair: Keypair;\n\n constructor(\n private readonly networkUrl: string | null = null,\n ) {\n this.keypair = loadKeypairFromEnv();\n }\n\n /* ----------------------------------------------------------- *\n * (Auth stubs – fill in later if needed)\n * ----------------------------------------------------------- */\n async login(): Promise<User | null> { throw new Error('Not implemented'); }\n async restoreSession(): Promise<User | null> { throw new Error('Not implemented'); }\n async logout(): Promise<void> { throw new Error('Not implemented'); }\n\n /* ----------------------------------------------------------- *\n * Sign arbitrary message\n * ----------------------------------------------------------- */\n async signMessage(message: string): Promise<string> {\n const sig = nacl.sign.detached(\n new TextEncoder().encode(message),\n this.keypair.secretKey,\n );\n return Buffer.from(sig).toString('base64');\n }\n\n /* ----------------------------------------------------------- *\n * Sign transaction\n * ----------------------------------------------------------- */\n async signTransaction(transaction: Transaction | VersionedTransaction): Promise<Transaction | VersionedTransaction> {\n // Use duck typing instead of instanceof to handle multiple @solana/web3.js versions\n const isLegacyTransaction = 'recentBlockhash' in transaction && !('message' in transaction && 'staticAccountKeys' in (transaction as any).message);\n\n if (isLegacyTransaction) {\n (transaction as Transaction).partialSign(this.keypair);\n } else {\n (transaction as VersionedTransaction).sign([this.keypair]);\n }\n return transaction;\n }\n\n /**\n * Signs and submits a Solana transaction to the network.\n *\n * This method handles blockhash and transaction confirmation automatically - you do NOT need to\n * set recentBlockhash or lastValidBlockHeight on the transaction before calling this method.\n * The network/RPC URL is derived from the provider's configuration (set during initialization).\n *\n * @param transaction - The transaction to sign and submit (Transaction or VersionedTransaction)\n * @param feePayer - Optional fee payer public key. If not provided and the transaction doesn't\n * already have a feePayer set, the keypair's public key will be used.\n * Useful for co-signing scenarios where a different account pays the fees.\n * @returns The transaction signature\n */\n async signAndSubmitTransaction(\n transaction: Transaction | VersionedTransaction,\n feePayer?: anchor.web3.PublicKey\n ): Promise<string> {\n // 1. Get RPC URL and create connection\n const rpcUrl = this.getRpcUrl();\n const connection = new Connection(rpcUrl, 'confirmed');\n\n // 2. Get fresh blockhash and set it on the transaction before signing\n const { blockhash, lastValidBlockHeight } = await connection.getLatestBlockhash('confirmed');\n\n // Use duck typing instead of instanceof to handle multiple @solana/web3.js versions\n const isLegacyTransaction = 'recentBlockhash' in transaction && !('message' in transaction && 'staticAccountKeys' in (transaction as any).message);\n\n if (isLegacyTransaction) {\n const legacyTx = transaction as Transaction;\n legacyTx.recentBlockhash = blockhash;\n legacyTx.lastValidBlockHeight = lastValidBlockHeight;\n\n // Set feePayer if not already set\n if (!legacyTx.feePayer) {\n legacyTx.feePayer = feePayer ?? this.keypair.publicKey;\n }\n } else {\n // VersionedTransaction\n const versionedTx = transaction as VersionedTransaction;\n versionedTx.message.recentBlockhash = blockhash;\n // Note: VersionedTransaction feePayer is set in the message at creation time\n // and cannot be modified after creation\n }\n\n // 3. Sign the transaction\n const signedTx = await this.signTransaction(transaction);\n\n // 4. Submit and confirm using shared helper\n const { signature } = await this.submitAndConfirmTransaction(\n signedTx, connection, { blockhash, lastValidBlockHeight }\n );\n return signature;\n }\n\n /* ----------------------------------------------------------- *\n * Private Helpers\n * ----------------------------------------------------------- */\n\n /**\n * Submits a signed transaction and waits for confirmation using\n * sendRawTransaction + confirmTransaction with a blockhash-based\n * strategy, which handles blockhash expiry properly.\n */\n private async submitAndConfirmTransaction(\n signedTx: Transaction | VersionedTransaction,\n connection: Connection,\n blockhashInfo: { blockhash: string; lastValidBlockHeight: number },\n options?: { fetchTxInfo?: boolean }\n ): Promise<{ signature: string; txInfo: any }> {\n const rawTx = signedTx.serialize();\n\n console.log(\"Connection rpcUrl\", connection.rpcEndpoint);\n\n const sig = await connection.sendRawTransaction(rawTx, {\n preflightCommitment: 'confirmed',\n skipPreflight: true,\n });\n\n console.log(\"Signature\", sig);\n\n // Confirm using blockhash-based strategy (handles expiry properly)\n const confirmation = await connection.confirmTransaction(\n {\n signature: sig,\n blockhash: blockhashInfo.blockhash,\n lastValidBlockHeight: blockhashInfo.lastValidBlockHeight,\n },\n 'confirmed'\n );\n\n if (confirmation.value.err) {\n throw new Error(`Transaction failed on-chain: ${JSON.stringify(confirmation.value.err)}`);\n }\n\n console.log(\"Confirmed signature\", sig);\n\n // Optionally fetch transaction info\n let txInfo : VersionedTransactionResponse | null = null;\n if (options?.fetchTxInfo) {\n txInfo = await connection.getTransaction(sig, {\n maxSupportedTransactionVersion: 0,\n commitment: 'confirmed'\n });\n }\n\n return { signature: sig, txInfo };\n }\n\n private getRpcUrl(network?: string): string {\n if (this.networkUrl) {\n return this.networkUrl;\n }\n if (network === 'solana_devnet') {\n return SOLANA_DEVNET_RPC_URL;\n } else if (network === 'solana_mainnet') {\n return SOLANA_MAINNET_RPC_URL;\n } else if (network === 'surfnet') {\n return SURFNET_RPC_URL;\n }\n return SOLANA_MAINNET_RPC_URL; // default to mainnet\n }\n\n /* ----------------------------------------------------------- *\n * Transaction runner\n * ----------------------------------------------------------- */\n async runTransaction(\n _evm?: EVMTransaction,\n sol?: SolTransaction,\n opts?: SetOptions,\n ): Promise<TransactionResult> {\n if (!sol) throw new Error('Solana transaction data required');\n\n const kp = this.keypair;\n\n // Helper for duck typing - checks if transaction is legacy Transaction vs VersionedTransaction\n const isLegacyTx = (tx: Transaction | VersionedTransaction): boolean => {\n return 'recentBlockhash' in tx && !('message' in tx && 'staticAccountKeys' in (tx as any).message);\n };\n\n const wallet: anchor.Wallet = {\n publicKey: kp.publicKey,\n signTransaction: async (tx: Transaction | VersionedTransaction) => {\n // Use duck typing instead of instanceof to handle multiple @solana/web3.js versions\n if (isLegacyTx(tx)) {\n (tx as Transaction).partialSign(kp);\n } else {\n (tx as VersionedTransaction).sign([kp]);\n }\n return tx;\n },\n signAllTransactions: async (txs: (Transaction | VersionedTransaction)[]) =>\n txs.map((t) => {\n // Use duck typing instead of instanceof to handle multiple @solana/web3.js versions\n if (isLegacyTx(t)) {\n (t as Transaction).partialSign(kp);\n } else {\n (t as VersionedTransaction).sign([kp]);\n }\n return t;\n }),\n } as unknown as anchor.Wallet;\n\n /* de-dupe remaining accounts */\n const deduped = (() => {\n const fin: ReturnType<typeof convertRemainingAccounts> = [];\n for (const acc of convertRemainingAccounts(\n sol.txArgs[0].remainingAccounts,\n )) {\n const ex = fin.find((x) => x.pubkey.equals(acc.pubkey));\n if (ex) {\n ex.isSigner ||= acc.isSigner;\n ex.isWritable ||= acc.isWritable;\n } else fin.push(acc);\n }\n return fin;\n })();\n\n let retries = 0;\n let didPass = false;\n let delay = 1000;\n let toReturn: TransactionResult | null = null;\n let errorMessage = \"\";\n while (retries < 5) {\n try {\n toReturn = await this.runTransactionInner(sol, opts, wallet, kp, deduped);\n didPass = true;\n break;\n } catch (error: any) {\n console.log(\"Error building and sending transaction on retry:\", retries, error);\n await new Promise(resolve => setTimeout(resolve, delay));\n // Exponential backoff\n delay *= 1.5;\n retries++;\n errorMessage = error.message || JSON.stringify(error, null, 2);\n }\n }\n if (!didPass) {\n throw new Error(`Failed to send transaction after 5 retries: ${errorMessage}`);\n }\n return toReturn as TransactionResult;\n }\n\n private async runTransactionInner(sol: SolTransaction, opts: SetOptions | undefined, wallet: anchor.Wallet, kp: Keypair, deduped: ReturnType<typeof convertRemainingAccounts>): Promise<TransactionResult> {\n\n let rpcUrl = this.getRpcUrl(sol.network);\n console.log('Using RPC URL:', rpcUrl);\n const connection = new Connection(rpcUrl, 'confirmed');\n\n const anchorProvider = new anchor.AnchorProvider(\n connection,\n wallet,\n anchor.AnchorProvider.defaultOptions(),\n );\n\n const app_id = sol.appId;\n if (!app_id) throw new Error('app_id missing');\n\n let { tx, blockhash, lastValidBlockHeight } = await buildSetDocumentsTransaction(\n connection,\n sol.txArgs[0].idl,\n anchorProvider,\n kp.publicKey,\n {\n app_id,\n documents: sol.txArgs[0].setDocumentData,\n delete_paths: sol.txArgs[0].deletePaths,\n txData: sol.txArgs[0].txData\n },\n deduped,\n sol.lutKey,\n sol.preInstructions,\n false,\n );\n\n // Helper for duck typing - checks if transaction is legacy Transaction vs VersionedTransaction\n const isLegacyTx = (t: Transaction | VersionedTransaction): boolean => {\n return 'recentBlockhash' in t && !('message' in t && 'staticAccountKeys' in (t as any).message);\n };\n\n // Refresh blockhash and lastValidBlockHeight\n // Use duck typing instead of instanceof to handle multiple @solana/web3.js versions\n if (isLegacyTx(tx)) {\n (tx as Transaction).partialSign(kp);\n (tx as Transaction).recentBlockhash = blockhash;\n (tx as Transaction).lastValidBlockHeight = lastValidBlockHeight;\n (tx as Transaction).feePayer = kp.publicKey;\n } else {\n (tx as VersionedTransaction).sign([kp]);\n (tx as VersionedTransaction).message.recentBlockhash = blockhash;\n }\n\n // 3️⃣ Optional priority‑fee instruction\n\n const rawUnsigned = tx.serialize({ requireAllSignatures: false });\n const microLamports = await fetchPriorityFee(\n connection.rpcEndpoint,\n rawUnsigned\n );\n\n if (microLamports != null) {\n // Use duck typing instead of instanceof to handle multiple @solana/web3.js versions\n if (isLegacyTx(tx)) {\n (tx as Transaction).instructions.unshift(\n ComputeBudgetProgram.setComputeUnitPrice({ microLamports })\n );\n (tx as Transaction).partialSign(kp);\n } else {\n // Rebuild the transaction with the new priority fee\n const roundTwo = await buildSetDocumentsTransaction(\n connection,\n sol.txArgs[0].idl,\n anchorProvider,\n kp.publicKey,\n {\n app_id,\n documents: sol.txArgs[0].setDocumentData,\n delete_paths: sol.txArgs[0].deletePaths,\n txData: sol.txArgs[0].txData\n },\n deduped,\n sol.lutKey,\n [ComputeBudgetProgram.setComputeUnitPrice({ microLamports }), ...sol.preInstructions],\n false,\n );\n tx = roundTwo.tx as VersionedTransaction;\n blockhash = roundTwo.blockhash;\n lastValidBlockHeight = roundTwo.lastValidBlockHeight;\n (tx as VersionedTransaction).sign([kp]);\n (tx as VersionedTransaction).message.recentBlockhash = blockhash;\n }\n }\n\n if (opts?.shouldSubmitTx === false) {\n return { signedTransaction: tx, blockNumber: 0, gasUsed: '0', data: '' };\n }\n\n // Submit and confirm using shared helper\n const { signature, txInfo } = await this.submitAndConfirmTransaction(\n tx, connection, { blockhash, lastValidBlockHeight }, { fetchTxInfo: true }\n );\n\n return {\n transactionSignature: signature,\n blockNumber: txInfo?.slot ?? 0,\n gasUsed: txInfo?.meta?.fee.toString() ?? '0',\n data: txInfo?.meta,\n };\n }\n\n /* ----------------------------------------------------------- */\n async getNativeMethods() {\n return { keypair: this.keypair };\n }\n}\n","import { AuthProvider } from '@pooflabs/core';\nimport { Transaction, VersionedTransaction } from '@solana/web3.js';\nimport * as crypto from 'crypto';\n\n/**\n * Server-side OffchainAuthProvider wrapper for the poofnet environment.\n *\n * For signMessage, this generates a mock signature using SHA-256 hashing.\n * This is used for offchain transaction signing.\n */\nexport class OffchainAuthProvider implements AuthProvider {\n private wrappedProvider: AuthProvider;\n\n constructor(wrappedProvider: AuthProvider) {\n this.wrappedProvider = wrappedProvider;\n }\n\n async login(): Promise<any> {\n return this.wrappedProvider.login();\n }\n\n async logout(): Promise<void> {\n return this.wrappedProvider.logout();\n }\n\n async restoreSession(): Promise<any> {\n return this.wrappedProvider.restoreSession();\n }\n\n async getNativeMethods(): Promise<any> {\n return this.wrappedProvider.getNativeMethods();\n }\n\n async signMessage(message: string): Promise<string> {\n // Delegate to wrapped provider for real signing\n return this.wrappedProvider.signMessage(message);\n }\n\n async signMessageMock(message: string): Promise<string> {\n // Generate mock signature (SHA-256 hash of message, base64 encoded)\n // This is used for offchain transaction signing\n const hash = crypto.createHash('sha256').update(message).digest('base64');\n return hash;\n }\n\n async signTransaction(transaction: Transaction | VersionedTransaction): Promise<Transaction | VersionedTransaction> {\n throw new Error('Poofnet does not support real Solana transactions. Deploy your project to mainnet to use this feature.');\n }\n\n /**\n * Sign and submit transaction - not supported in poofnet environment.\n * See the real providers (PhantomWalletProvider, PrivyWalletProvider, SolanaKeypairProvider)\n * for the full implementation with blockhash handling and feePayer support.\n */\n async signAndSubmitTransaction(\n _transaction: Transaction | VersionedTransaction,\n _feePayer?: any\n ): Promise<string> {\n throw new Error('Poofnet does not support real Solana transactions. Deploy your project to mainnet to use this feature.');\n }\n\n async runTransaction(evmTransactionData?: any, solTransactionData?: any, options?: any): Promise<any> {\n return this.wrappedProvider.runTransaction(evmTransactionData, solTransactionData, options);\n }\n}\n","import { getConfig } from '@pooflabs/core';\nimport { AuthProvider } from '@pooflabs/core';\nimport { SolanaKeypairProvider } from './providers/solana-keypair-provider';\nimport { OffchainAuthProvider } from './providers/offchain-auth-provider';\n\nlet currentAuthProvider: AuthProvider | null = null;\n\nexport const SOLANA_DEVNET_RPC_URL = \"https://idelle-8nxsep-fast-devnet.helius-rpc.com\";\nexport const SOLANA_MAINNET_RPC_URL = \"https://celestia-cegncv-fast-mainnet.helius-rpc.com\";\nexport const SURFNET_RPC_URL = \"https://surfpool.fly.dev\";\n\nexport async function getAuthProvider(): Promise<AuthProvider> {\n const config = await getConfig();\n\n if (currentAuthProvider) {\n // If provider exists but chain is \"offchain\" and it's not already wrapped, rewrap it\n if (config.chain === \"offchain\" && !(currentAuthProvider instanceof OffchainAuthProvider)) {\n currentAuthProvider = new OffchainAuthProvider(currentAuthProvider);\n }\n return currentAuthProvider;\n }\n\n currentAuthProvider = await matchAuthProvider(config.rpcUrl ?? null);\n \n // Wrap with OffchainAuthProvider for offchain chain\n if (config.chain === \"offchain\") {\n currentAuthProvider = new OffchainAuthProvider(currentAuthProvider);\n }\n\n return currentAuthProvider;\n}\n\nexport async function matchAuthProvider(rpcUrl: string | null): Promise<AuthProvider> {\n return new SolanaKeypairProvider(rpcUrl);\n}","import { AuthProvider } from '@pooflabs/core';\nimport { getAuthProvider } from './auth';\nimport { init as configInit, ClientConfig } from '@pooflabs/core';\n\nlet authProviderInstance: AuthProvider | null = null;\n\nconst SOLANA_DEVNET_RPC_URL = \"https://api.devnet.solana.com\";\nconst SOLANA_MAINNET_RPC_URL = \"https://celestia-cegncv-fast-mainnet.helius-rpc.com\";\nconst SURFNET_RPC_URL = \"https://surfpool.fly.dev\";\n\nexport async function init(newConfig: Partial<ClientConfig>): Promise<void> {\n // Initialize config first so getAuthProvider can access it\n // Server-side skips backend init since it already has all needed config\n await configInit({ ...newConfig, isServer: true, skipBackendInit: true });\n\n // Get the auth provider (which will wrap it if chain is \"offchain\")\n authProviderInstance = await getAuthProvider();\n\n // Update config with the wrapped provider\n await configInit({ ...newConfig, authProvider: authProviderInstance, isServer: true, skipBackendInit: true });\n}","import { getIdToken as getIdTokenCore } from '@pooflabs/core';\n\n// Wrapper for getIdToken - passes isServer=true for server-side usage\nexport async function getIdToken(): Promise<string | null> {\n return getIdTokenCore(true);\n}\n"],"names":["Keypair","Buffer","Connection","convertRemainingAccounts","anchor","buildSetDocumentsTransaction","ComputeBudgetProgram","crypto","getConfig","configInit","getIdTokenCore"],"mappings":"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"}
package/dist/index.mjs CHANGED
@@ -137,42 +137,35 @@ class SolanaKeypairProvider {
137
137
  // 3. Sign the transaction
138
138
  const signedTx = await this.signTransaction(transaction);
139
139
  // 4. Submit and confirm using shared helper
140
- const { signature } = await this.submitAndConfirmTransaction(signedTx, connection);
140
+ const { signature } = await this.submitAndConfirmTransaction(signedTx, connection, { blockhash, lastValidBlockHeight });
141
141
  return signature;
142
142
  }
143
143
  /* ----------------------------------------------------------- *
144
144
  * Private Helpers
145
145
  * ----------------------------------------------------------- */
146
146
  /**
147
- * Submits a signed transaction and waits for confirmation using polling.
148
- * Shared by both signAndSubmitTransaction and runTransactionInner.
147
+ * Submits a signed transaction and waits for confirmation using
148
+ * sendRawTransaction + confirmTransaction with a blockhash-based
149
+ * strategy, which handles blockhash expiry properly.
149
150
  */
150
- async submitAndConfirmTransaction(signedTx, connection, options) {
151
- var _a, _b;
152
- const sig = await connection.sendRawTransaction(signedTx.serialize(), {
151
+ async submitAndConfirmTransaction(signedTx, connection, blockhashInfo, options) {
152
+ const rawTx = signedTx.serialize();
153
+ console.log("Connection rpcUrl", connection.rpcEndpoint);
154
+ const sig = await connection.sendRawTransaction(rawTx, {
153
155
  preflightCommitment: 'confirmed',
154
156
  skipPreflight: true,
155
157
  });
156
- console.log("Connection rpcUrl", connection.rpcEndpoint);
157
158
  console.log("Signature", sig);
158
- // Wait for confirmation using polling
159
- const startTime = Date.now();
160
- const timeoutMs = 10 * 1000; // 10 seconds
161
- while (true) {
162
- const st = await connection.getSignatureStatus(sig);
163
- console.log(JSON.stringify(st, null, 2));
164
- if ((_a = st === null || st === void 0 ? void 0 : st.value) === null || _a === void 0 ? void 0 : _a.err) {
165
- throw new Error(`Transaction failed on-chain: ${JSON.stringify(st.value.err)}`);
166
- }
167
- const status = (_b = st === null || st === void 0 ? void 0 : st.value) === null || _b === void 0 ? void 0 : _b.confirmationStatus;
168
- if (status === 'confirmed') {
169
- break;
170
- }
171
- if (Date.now() - startTime > timeoutMs) {
172
- throw new Error(`Transaction confirmation timeout after ${timeoutMs / 1000} seconds`);
173
- }
174
- await new Promise(resolve => setTimeout(resolve, 500));
159
+ // Confirm using blockhash-based strategy (handles expiry properly)
160
+ const confirmation = await connection.confirmTransaction({
161
+ signature: sig,
162
+ blockhash: blockhashInfo.blockhash,
163
+ lastValidBlockHeight: blockhashInfo.lastValidBlockHeight,
164
+ }, 'confirmed');
165
+ if (confirmation.value.err) {
166
+ throw new Error(`Transaction failed on-chain: ${JSON.stringify(confirmation.value.err)}`);
175
167
  }
168
+ console.log("Confirmed signature", sig);
176
169
  // Optionally fetch transaction info
177
170
  let txInfo = null;
178
171
  if (options === null || options === void 0 ? void 0 : options.fetchTxInfo) {
@@ -330,7 +323,7 @@ class SolanaKeypairProvider {
330
323
  return { signedTransaction: tx, blockNumber: 0, gasUsed: '0', data: '' };
331
324
  }
332
325
  // Submit and confirm using shared helper
333
- const { signature, txInfo } = await this.submitAndConfirmTransaction(tx, connection, { fetchTxInfo: true });
326
+ const { signature, txInfo } = await this.submitAndConfirmTransaction(tx, connection, { blockhash, lastValidBlockHeight }, { fetchTxInfo: true });
334
327
  return {
335
328
  transactionSignature: signature,
336
329
  blockNumber: (_a = txInfo === null || txInfo === void 0 ? void 0 : txInfo.slot) !== null && _a !== void 0 ? _a : 0,
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../src/auth/providers/solana-keypair-provider.ts","../src/auth/providers/offchain-auth-provider.ts","../src/auth/index.ts","../src/global.ts","../src/utils.ts"],"sourcesContent":["import { Buffer } from 'buffer';\nimport {\n ComputeBudgetProgram,\n Connection,\n Keypair,\n Transaction,\n VersionedTransaction,\n VersionedTransactionResponse\n} from '@solana/web3.js';\nimport * as anchor from '@coral-xyz/anchor';\nimport nacl from 'tweetnacl';\nimport bs58 from 'bs58';\n\nimport type {\n AuthProvider,\n EVMTransaction,\n SolTransaction,\n TransactionResult,\n User,\n SetOptions,\n} from '@pooflabs/core';\n\nimport {\n convertRemainingAccounts,\n buildSetDocumentsTransaction,\n} from '@pooflabs/core';\nimport { SOLANA_DEVNET_RPC_URL, SOLANA_MAINNET_RPC_URL, SURFNET_RPC_URL } from '..';\n\n/* ------------------------------------------------------------- *\n * REQUIRED ENV-VAR\n * ------------------------------------------------------------- */\nconst ENV_VAR = 'TAROBASE_SOLANA_KEYPAIR'; // base-58 or JSON array\n\nfunction loadKeypairFromEnv(): Keypair {\n const secret = process?.env?.[ENV_VAR];\n if (!secret) {\n throw new Error(\n `Missing ${ENV_VAR}. Set it to a base58 secret key or JSON array.`,\n );\n }\n\n try {\n const secretKey = secret.trim().startsWith('[')\n ? Uint8Array.from(JSON.parse(secret))\n : bs58.decode(secret.trim());\n\n return Keypair.fromSecretKey(secretKey);\n } catch (err) {\n throw new Error(\n `Unable to parse ${ENV_VAR}. Ensure it is valid base58 or a JSON array.`,\n );\n }\n}\n\n/* ──────────────────────────────────────────────────────────\n * Helper – fetch getPriorityFeeEstimate\n * ──────────────────────────────────────────────────────── */\nasync function fetchPriorityFee(rpcEndpoint: string, rawUnsignedTxBuffer: Uint8Array) {\n try {\n const res = await fetch(rpcEndpoint, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n jsonrpc: \"2.0\",\n id: \"1\",\n method: \"getPriorityFeeEstimate\",\n params: [{\n transaction: bs58.encode(rawUnsignedTxBuffer), options: {\n recommended: true\n }\n }]\n })\n });\n const data = await res.json() as { result: { priorityFeeEstimate: number } };\n console.log(\"Got fee from Helius\", data);\n const fee = data?.result?.priorityFeeEstimate ?? null;\n console.log(\"Got fee from Helius\", fee);\n if (fee != null && fee > 0) {\n return Math.ceil(Number(fee) * 1.2);\n } else {\n console.log(\"No fee from Helius, using default 10000\");\n return Math.ceil(10000 * 1.2);\n }\n } catch (err) {\n console.warn(\"Priority‑fee estimate failed:\", err);\n return Math.ceil(10000 * 1.2);\n }\n}\n\nexport class SolanaKeypairProvider implements AuthProvider {\n private readonly keypair: Keypair;\n\n constructor(\n private readonly networkUrl: string | null = null,\n ) {\n this.keypair = loadKeypairFromEnv();\n }\n\n /* ----------------------------------------------------------- *\n * (Auth stubs – fill in later if needed)\n * ----------------------------------------------------------- */\n async login(): Promise<User | null> { throw new Error('Not implemented'); }\n async restoreSession(): Promise<User | null> { throw new Error('Not implemented'); }\n async logout(): Promise<void> { throw new Error('Not implemented'); }\n\n /* ----------------------------------------------------------- *\n * Sign arbitrary message\n * ----------------------------------------------------------- */\n async signMessage(message: string): Promise<string> {\n const sig = nacl.sign.detached(\n new TextEncoder().encode(message),\n this.keypair.secretKey,\n );\n return Buffer.from(sig).toString('base64');\n }\n\n /* ----------------------------------------------------------- *\n * Sign transaction\n * ----------------------------------------------------------- */\n async signTransaction(transaction: Transaction | VersionedTransaction): Promise<Transaction | VersionedTransaction> {\n // Use duck typing instead of instanceof to handle multiple @solana/web3.js versions\n const isLegacyTransaction = 'recentBlockhash' in transaction && !('message' in transaction && 'staticAccountKeys' in (transaction as any).message);\n\n if (isLegacyTransaction) {\n (transaction as Transaction).partialSign(this.keypair);\n } else {\n (transaction as VersionedTransaction).sign([this.keypair]);\n }\n return transaction;\n }\n\n /**\n * Signs and submits a Solana transaction to the network.\n *\n * This method handles blockhash and transaction confirmation automatically - you do NOT need to\n * set recentBlockhash or lastValidBlockHeight on the transaction before calling this method.\n * The network/RPC URL is derived from the provider's configuration (set during initialization).\n *\n * @param transaction - The transaction to sign and submit (Transaction or VersionedTransaction)\n * @param feePayer - Optional fee payer public key. If not provided and the transaction doesn't\n * already have a feePayer set, the keypair's public key will be used.\n * Useful for co-signing scenarios where a different account pays the fees.\n * @returns The transaction signature\n */\n async signAndSubmitTransaction(\n transaction: Transaction | VersionedTransaction,\n feePayer?: anchor.web3.PublicKey\n ): Promise<string> {\n // 1. Get RPC URL and create connection\n const rpcUrl = this.getRpcUrl();\n const connection = new Connection(rpcUrl, 'confirmed');\n\n // 2. Get fresh blockhash and set it on the transaction before signing\n const { blockhash, lastValidBlockHeight } = await connection.getLatestBlockhash('confirmed');\n\n // Use duck typing instead of instanceof to handle multiple @solana/web3.js versions\n const isLegacyTransaction = 'recentBlockhash' in transaction && !('message' in transaction && 'staticAccountKeys' in (transaction as any).message);\n\n if (isLegacyTransaction) {\n const legacyTx = transaction as Transaction;\n legacyTx.recentBlockhash = blockhash;\n legacyTx.lastValidBlockHeight = lastValidBlockHeight;\n\n // Set feePayer if not already set\n if (!legacyTx.feePayer) {\n legacyTx.feePayer = feePayer ?? this.keypair.publicKey;\n }\n } else {\n // VersionedTransaction\n const versionedTx = transaction as VersionedTransaction;\n versionedTx.message.recentBlockhash = blockhash;\n // Note: VersionedTransaction feePayer is set in the message at creation time\n // and cannot be modified after creation\n }\n\n // 3. Sign the transaction\n const signedTx = await this.signTransaction(transaction);\n\n // 4. Submit and confirm using shared helper\n const { signature } = await this.submitAndConfirmTransaction(signedTx, connection);\n return signature;\n }\n\n /* ----------------------------------------------------------- *\n * Private Helpers\n * ----------------------------------------------------------- */\n\n /**\n * Submits a signed transaction and waits for confirmation using polling.\n * Shared by both signAndSubmitTransaction and runTransactionInner.\n */\n private async submitAndConfirmTransaction(\n signedTx: Transaction | VersionedTransaction,\n connection: Connection,\n options?: { fetchTxInfo?: boolean }\n ): Promise<{ signature: string; txInfo: any }> {\n const sig = await connection.sendRawTransaction(signedTx.serialize(), {\n preflightCommitment: 'confirmed',\n skipPreflight: true,\n });\n console.log(\"Connection rpcUrl\", connection.rpcEndpoint);\n console.log(\"Signature\", sig);\n\n // Wait for confirmation using polling\n const startTime = Date.now();\n const timeoutMs = 10 * 1000; // 10 seconds\n\n while (true) {\n const st = await connection.getSignatureStatus(sig);\n console.log(JSON.stringify(st, null, 2));\n\n if (st?.value?.err) {\n throw new Error(`Transaction failed on-chain: ${JSON.stringify(st.value.err)}`);\n }\n\n const status = st?.value?.confirmationStatus;\n if (status === 'confirmed') {\n break;\n }\n\n if (Date.now() - startTime > timeoutMs) {\n throw new Error(`Transaction confirmation timeout after ${timeoutMs / 1000} seconds`);\n }\n\n await new Promise(resolve => setTimeout(resolve, 500));\n }\n\n // Optionally fetch transaction info\n let txInfo : VersionedTransactionResponse | null = null;\n if (options?.fetchTxInfo) {\n txInfo = await connection.getTransaction(sig, {\n maxSupportedTransactionVersion: 0,\n commitment: 'confirmed'\n });\n }\n\n return { signature: sig, txInfo };\n }\n\n private getRpcUrl(network?: string): string {\n if (this.networkUrl) {\n return this.networkUrl;\n }\n if (network === 'solana_devnet') {\n return SOLANA_DEVNET_RPC_URL;\n } else if (network === 'solana_mainnet') {\n return SOLANA_MAINNET_RPC_URL;\n } else if (network === 'surfnet') {\n return SURFNET_RPC_URL;\n }\n return SOLANA_MAINNET_RPC_URL; // default to mainnet\n }\n\n /* ----------------------------------------------------------- *\n * Transaction runner\n * ----------------------------------------------------------- */\n async runTransaction(\n _evm?: EVMTransaction,\n sol?: SolTransaction,\n opts?: SetOptions,\n ): Promise<TransactionResult> {\n if (!sol) throw new Error('Solana transaction data required');\n\n const kp = this.keypair;\n\n // Helper for duck typing - checks if transaction is legacy Transaction vs VersionedTransaction\n const isLegacyTx = (tx: Transaction | VersionedTransaction): boolean => {\n return 'recentBlockhash' in tx && !('message' in tx && 'staticAccountKeys' in (tx as any).message);\n };\n\n const wallet: anchor.Wallet = {\n publicKey: kp.publicKey,\n signTransaction: async (tx: Transaction | VersionedTransaction) => {\n // Use duck typing instead of instanceof to handle multiple @solana/web3.js versions\n if (isLegacyTx(tx)) {\n (tx as Transaction).partialSign(kp);\n } else {\n (tx as VersionedTransaction).sign([kp]);\n }\n return tx;\n },\n signAllTransactions: async (txs: (Transaction | VersionedTransaction)[]) =>\n txs.map((t) => {\n // Use duck typing instead of instanceof to handle multiple @solana/web3.js versions\n if (isLegacyTx(t)) {\n (t as Transaction).partialSign(kp);\n } else {\n (t as VersionedTransaction).sign([kp]);\n }\n return t;\n }),\n } as unknown as anchor.Wallet;\n\n /* de-dupe remaining accounts */\n const deduped = (() => {\n const fin: ReturnType<typeof convertRemainingAccounts> = [];\n for (const acc of convertRemainingAccounts(\n sol.txArgs[0].remainingAccounts,\n )) {\n const ex = fin.find((x) => x.pubkey.equals(acc.pubkey));\n if (ex) {\n ex.isSigner ||= acc.isSigner;\n ex.isWritable ||= acc.isWritable;\n } else fin.push(acc);\n }\n return fin;\n })();\n\n let retries = 0;\n let didPass = false;\n let delay = 1000;\n let toReturn: TransactionResult | null = null;\n let errorMessage = \"\";\n while (retries < 5) {\n try {\n toReturn = await this.runTransactionInner(sol, opts, wallet, kp, deduped);\n didPass = true;\n break;\n } catch (error: any) {\n console.log(\"Error building and sending transaction on retry:\", retries, error);\n await new Promise(resolve => setTimeout(resolve, delay));\n // Exponential backoff\n delay *= 1.5;\n retries++;\n errorMessage = error.message || JSON.stringify(error, null, 2);\n }\n }\n if (!didPass) {\n throw new Error(`Failed to send transaction after 5 retries: ${errorMessage}`);\n }\n return toReturn as TransactionResult;\n }\n\n private async runTransactionInner(sol: SolTransaction, opts: SetOptions | undefined, wallet: anchor.Wallet, kp: Keypair, deduped: ReturnType<typeof convertRemainingAccounts>): Promise<TransactionResult> {\n\n let rpcUrl = this.getRpcUrl(sol.network);\n console.log('Using RPC URL:', rpcUrl);\n const connection = new Connection(rpcUrl, 'confirmed');\n\n const anchorProvider = new anchor.AnchorProvider(\n connection,\n wallet,\n anchor.AnchorProvider.defaultOptions(),\n );\n\n const app_id = sol.appId;\n if (!app_id) throw new Error('app_id missing');\n\n let { tx, blockhash, lastValidBlockHeight } = await buildSetDocumentsTransaction(\n connection,\n sol.txArgs[0].idl,\n anchorProvider,\n kp.publicKey,\n {\n app_id,\n documents: sol.txArgs[0].setDocumentData,\n delete_paths: sol.txArgs[0].deletePaths,\n txData: sol.txArgs[0].txData\n },\n deduped,\n sol.lutKey,\n sol.preInstructions,\n false,\n );\n\n // Helper for duck typing - checks if transaction is legacy Transaction vs VersionedTransaction\n const isLegacyTx = (t: Transaction | VersionedTransaction): boolean => {\n return 'recentBlockhash' in t && !('message' in t && 'staticAccountKeys' in (t as any).message);\n };\n\n // Refresh blockhash and lastValidBlockHeight\n // Use duck typing instead of instanceof to handle multiple @solana/web3.js versions\n if (isLegacyTx(tx)) {\n (tx as Transaction).partialSign(kp);\n (tx as Transaction).recentBlockhash = blockhash;\n (tx as Transaction).lastValidBlockHeight = lastValidBlockHeight;\n (tx as Transaction).feePayer = kp.publicKey;\n } else {\n (tx as VersionedTransaction).sign([kp]);\n (tx as VersionedTransaction).message.recentBlockhash = blockhash;\n }\n\n // 3️⃣ Optional priority‑fee instruction\n\n const rawUnsigned = tx.serialize({ requireAllSignatures: false });\n const microLamports = await fetchPriorityFee(\n connection.rpcEndpoint,\n rawUnsigned\n );\n\n if (microLamports != null) {\n // Use duck typing instead of instanceof to handle multiple @solana/web3.js versions\n if (isLegacyTx(tx)) {\n (tx as Transaction).instructions.unshift(\n ComputeBudgetProgram.setComputeUnitPrice({ microLamports })\n );\n (tx as Transaction).partialSign(kp);\n } else {\n // Rebuild the transaction with the new priority fee\n const roundTwo = await buildSetDocumentsTransaction(\n connection,\n sol.txArgs[0].idl,\n anchorProvider,\n kp.publicKey,\n {\n app_id,\n documents: sol.txArgs[0].setDocumentData,\n delete_paths: sol.txArgs[0].deletePaths,\n txData: sol.txArgs[0].txData\n },\n deduped,\n sol.lutKey,\n [ComputeBudgetProgram.setComputeUnitPrice({ microLamports }), ...sol.preInstructions],\n false,\n );\n tx = roundTwo.tx as VersionedTransaction;\n blockhash = roundTwo.blockhash;\n lastValidBlockHeight = roundTwo.lastValidBlockHeight;\n (tx as VersionedTransaction).sign([kp]);\n (tx as VersionedTransaction).message.recentBlockhash = blockhash;\n }\n }\n\n if (opts?.shouldSubmitTx === false) {\n return { signedTransaction: tx, blockNumber: 0, gasUsed: '0', data: '' };\n }\n\n // Submit and confirm using shared helper\n const { signature, txInfo } = await this.submitAndConfirmTransaction(tx, connection, { fetchTxInfo: true });\n\n return {\n transactionSignature: signature,\n blockNumber: txInfo?.slot ?? 0,\n gasUsed: txInfo?.meta?.fee.toString() ?? '0',\n data: txInfo?.meta,\n };\n }\n\n /* ----------------------------------------------------------- */\n async getNativeMethods() {\n return { keypair: this.keypair };\n }\n}\n","import { AuthProvider } from '@pooflabs/core';\nimport { Transaction, VersionedTransaction } from '@solana/web3.js';\nimport * as crypto from 'crypto';\n\n/**\n * Server-side OffchainAuthProvider wrapper for the poofnet environment.\n *\n * For signMessage, this generates a mock signature using SHA-256 hashing.\n * This is used for offchain transaction signing.\n */\nexport class OffchainAuthProvider implements AuthProvider {\n private wrappedProvider: AuthProvider;\n\n constructor(wrappedProvider: AuthProvider) {\n this.wrappedProvider = wrappedProvider;\n }\n\n async login(): Promise<any> {\n return this.wrappedProvider.login();\n }\n\n async logout(): Promise<void> {\n return this.wrappedProvider.logout();\n }\n\n async restoreSession(): Promise<any> {\n return this.wrappedProvider.restoreSession();\n }\n\n async getNativeMethods(): Promise<any> {\n return this.wrappedProvider.getNativeMethods();\n }\n\n async signMessage(message: string): Promise<string> {\n // Delegate to wrapped provider for real signing\n return this.wrappedProvider.signMessage(message);\n }\n\n async signMessageMock(message: string): Promise<string> {\n // Generate mock signature (SHA-256 hash of message, base64 encoded)\n // This is used for offchain transaction signing\n const hash = crypto.createHash('sha256').update(message).digest('base64');\n return hash;\n }\n\n async signTransaction(transaction: Transaction | VersionedTransaction): Promise<Transaction | VersionedTransaction> {\n throw new Error('Poofnet does not support real Solana transactions. Deploy your project to mainnet to use this feature.');\n }\n\n /**\n * Sign and submit transaction - not supported in poofnet environment.\n * See the real providers (PhantomWalletProvider, PrivyWalletProvider, SolanaKeypairProvider)\n * for the full implementation with blockhash handling and feePayer support.\n */\n async signAndSubmitTransaction(\n _transaction: Transaction | VersionedTransaction,\n _feePayer?: any\n ): Promise<string> {\n throw new Error('Poofnet does not support real Solana transactions. Deploy your project to mainnet to use this feature.');\n }\n\n async runTransaction(evmTransactionData?: any, solTransactionData?: any, options?: any): Promise<any> {\n return this.wrappedProvider.runTransaction(evmTransactionData, solTransactionData, options);\n }\n}\n","import { getConfig } from '@pooflabs/core';\nimport { AuthProvider } from '@pooflabs/core';\nimport { SolanaKeypairProvider } from './providers/solana-keypair-provider';\nimport { OffchainAuthProvider } from './providers/offchain-auth-provider';\n\nlet currentAuthProvider: AuthProvider | null = null;\n\nexport const SOLANA_DEVNET_RPC_URL = \"https://idelle-8nxsep-fast-devnet.helius-rpc.com\";\nexport const SOLANA_MAINNET_RPC_URL = \"https://celestia-cegncv-fast-mainnet.helius-rpc.com\";\nexport const SURFNET_RPC_URL = \"https://surfpool.fly.dev\";\n\nexport async function getAuthProvider(): Promise<AuthProvider> {\n const config = await getConfig();\n\n if (currentAuthProvider) {\n // If provider exists but chain is \"offchain\" and it's not already wrapped, rewrap it\n if (config.chain === \"offchain\" && !(currentAuthProvider instanceof OffchainAuthProvider)) {\n currentAuthProvider = new OffchainAuthProvider(currentAuthProvider);\n }\n return currentAuthProvider;\n }\n\n currentAuthProvider = await matchAuthProvider(config.rpcUrl ?? null);\n \n // Wrap with OffchainAuthProvider for offchain chain\n if (config.chain === \"offchain\") {\n currentAuthProvider = new OffchainAuthProvider(currentAuthProvider);\n }\n\n return currentAuthProvider;\n}\n\nexport async function matchAuthProvider(rpcUrl: string | null): Promise<AuthProvider> {\n return new SolanaKeypairProvider(rpcUrl);\n}","import { AuthProvider } from '@pooflabs/core';\nimport { getAuthProvider } from './auth';\nimport { init as configInit, ClientConfig } from '@pooflabs/core';\n\nlet authProviderInstance: AuthProvider | null = null;\n\nconst SOLANA_DEVNET_RPC_URL = \"https://api.devnet.solana.com\";\nconst SOLANA_MAINNET_RPC_URL = \"https://celestia-cegncv-fast-mainnet.helius-rpc.com\";\nconst SURFNET_RPC_URL = \"https://surfpool.fly.dev\";\n\nexport async function init(newConfig: Partial<ClientConfig>): Promise<void> {\n // Initialize config first so getAuthProvider can access it\n // Server-side skips backend init since it already has all needed config\n await configInit({ ...newConfig, isServer: true, skipBackendInit: true });\n\n // Get the auth provider (which will wrap it if chain is \"offchain\")\n authProviderInstance = await getAuthProvider();\n\n // Update config with the wrapped provider\n await configInit({ ...newConfig, authProvider: authProviderInstance, isServer: true, skipBackendInit: true });\n}","import { getIdToken as getIdTokenCore } from '@pooflabs/core';\n\n// Wrapper for getIdToken - passes isServer=true for server-side usage\nexport async function getIdToken(): Promise<string | null> {\n return getIdTokenCore(true);\n}\n"],"names":["configInit","getIdTokenCore"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../src/auth/providers/solana-keypair-provider.ts","../src/auth/providers/offchain-auth-provider.ts","../src/auth/index.ts","../src/global.ts","../src/utils.ts"],"sourcesContent":["import { Buffer } from 'buffer';\nimport {\n ComputeBudgetProgram,\n Connection,\n Keypair,\n Transaction,\n VersionedTransaction,\n VersionedTransactionResponse\n} from '@solana/web3.js';\nimport * as anchor from '@coral-xyz/anchor';\nimport nacl from 'tweetnacl';\nimport bs58 from 'bs58';\n\nimport type {\n AuthProvider,\n EVMTransaction,\n SolTransaction,\n TransactionResult,\n User,\n SetOptions,\n} from '@pooflabs/core';\n\nimport {\n convertRemainingAccounts,\n buildSetDocumentsTransaction,\n} from '@pooflabs/core';\nimport { SOLANA_DEVNET_RPC_URL, SOLANA_MAINNET_RPC_URL, SURFNET_RPC_URL } from '..';\n\n/* ------------------------------------------------------------- *\n * REQUIRED ENV-VAR\n * ------------------------------------------------------------- */\nconst ENV_VAR = 'TAROBASE_SOLANA_KEYPAIR'; // base-58 or JSON array\n\nfunction loadKeypairFromEnv(): Keypair {\n const secret = process?.env?.[ENV_VAR];\n if (!secret) {\n throw new Error(\n `Missing ${ENV_VAR}. Set it to a base58 secret key or JSON array.`,\n );\n }\n\n try {\n const secretKey = secret.trim().startsWith('[')\n ? Uint8Array.from(JSON.parse(secret))\n : bs58.decode(secret.trim());\n\n return Keypair.fromSecretKey(secretKey);\n } catch (err) {\n throw new Error(\n `Unable to parse ${ENV_VAR}. Ensure it is valid base58 or a JSON array.`,\n );\n }\n}\n\n/* ──────────────────────────────────────────────────────────\n * Helper – fetch getPriorityFeeEstimate\n * ──────────────────────────────────────────────────────── */\nasync function fetchPriorityFee(rpcEndpoint: string, rawUnsignedTxBuffer: Uint8Array) {\n try {\n const res = await fetch(rpcEndpoint, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n jsonrpc: \"2.0\",\n id: \"1\",\n method: \"getPriorityFeeEstimate\",\n params: [{\n transaction: bs58.encode(rawUnsignedTxBuffer), options: {\n recommended: true\n }\n }]\n })\n });\n const data = await res.json() as { result: { priorityFeeEstimate: number } };\n console.log(\"Got fee from Helius\", data);\n const fee = data?.result?.priorityFeeEstimate ?? null;\n console.log(\"Got fee from Helius\", fee);\n if (fee != null && fee > 0) {\n return Math.ceil(Number(fee) * 1.2);\n } else {\n console.log(\"No fee from Helius, using default 10000\");\n return Math.ceil(10000 * 1.2);\n }\n } catch (err) {\n console.warn(\"Priority‑fee estimate failed:\", err);\n return Math.ceil(10000 * 1.2);\n }\n}\n\nexport class SolanaKeypairProvider implements AuthProvider {\n private readonly keypair: Keypair;\n\n constructor(\n private readonly networkUrl: string | null = null,\n ) {\n this.keypair = loadKeypairFromEnv();\n }\n\n /* ----------------------------------------------------------- *\n * (Auth stubs – fill in later if needed)\n * ----------------------------------------------------------- */\n async login(): Promise<User | null> { throw new Error('Not implemented'); }\n async restoreSession(): Promise<User | null> { throw new Error('Not implemented'); }\n async logout(): Promise<void> { throw new Error('Not implemented'); }\n\n /* ----------------------------------------------------------- *\n * Sign arbitrary message\n * ----------------------------------------------------------- */\n async signMessage(message: string): Promise<string> {\n const sig = nacl.sign.detached(\n new TextEncoder().encode(message),\n this.keypair.secretKey,\n );\n return Buffer.from(sig).toString('base64');\n }\n\n /* ----------------------------------------------------------- *\n * Sign transaction\n * ----------------------------------------------------------- */\n async signTransaction(transaction: Transaction | VersionedTransaction): Promise<Transaction | VersionedTransaction> {\n // Use duck typing instead of instanceof to handle multiple @solana/web3.js versions\n const isLegacyTransaction = 'recentBlockhash' in transaction && !('message' in transaction && 'staticAccountKeys' in (transaction as any).message);\n\n if (isLegacyTransaction) {\n (transaction as Transaction).partialSign(this.keypair);\n } else {\n (transaction as VersionedTransaction).sign([this.keypair]);\n }\n return transaction;\n }\n\n /**\n * Signs and submits a Solana transaction to the network.\n *\n * This method handles blockhash and transaction confirmation automatically - you do NOT need to\n * set recentBlockhash or lastValidBlockHeight on the transaction before calling this method.\n * The network/RPC URL is derived from the provider's configuration (set during initialization).\n *\n * @param transaction - The transaction to sign and submit (Transaction or VersionedTransaction)\n * @param feePayer - Optional fee payer public key. If not provided and the transaction doesn't\n * already have a feePayer set, the keypair's public key will be used.\n * Useful for co-signing scenarios where a different account pays the fees.\n * @returns The transaction signature\n */\n async signAndSubmitTransaction(\n transaction: Transaction | VersionedTransaction,\n feePayer?: anchor.web3.PublicKey\n ): Promise<string> {\n // 1. Get RPC URL and create connection\n const rpcUrl = this.getRpcUrl();\n const connection = new Connection(rpcUrl, 'confirmed');\n\n // 2. Get fresh blockhash and set it on the transaction before signing\n const { blockhash, lastValidBlockHeight } = await connection.getLatestBlockhash('confirmed');\n\n // Use duck typing instead of instanceof to handle multiple @solana/web3.js versions\n const isLegacyTransaction = 'recentBlockhash' in transaction && !('message' in transaction && 'staticAccountKeys' in (transaction as any).message);\n\n if (isLegacyTransaction) {\n const legacyTx = transaction as Transaction;\n legacyTx.recentBlockhash = blockhash;\n legacyTx.lastValidBlockHeight = lastValidBlockHeight;\n\n // Set feePayer if not already set\n if (!legacyTx.feePayer) {\n legacyTx.feePayer = feePayer ?? this.keypair.publicKey;\n }\n } else {\n // VersionedTransaction\n const versionedTx = transaction as VersionedTransaction;\n versionedTx.message.recentBlockhash = blockhash;\n // Note: VersionedTransaction feePayer is set in the message at creation time\n // and cannot be modified after creation\n }\n\n // 3. Sign the transaction\n const signedTx = await this.signTransaction(transaction);\n\n // 4. Submit and confirm using shared helper\n const { signature } = await this.submitAndConfirmTransaction(\n signedTx, connection, { blockhash, lastValidBlockHeight }\n );\n return signature;\n }\n\n /* ----------------------------------------------------------- *\n * Private Helpers\n * ----------------------------------------------------------- */\n\n /**\n * Submits a signed transaction and waits for confirmation using\n * sendRawTransaction + confirmTransaction with a blockhash-based\n * strategy, which handles blockhash expiry properly.\n */\n private async submitAndConfirmTransaction(\n signedTx: Transaction | VersionedTransaction,\n connection: Connection,\n blockhashInfo: { blockhash: string; lastValidBlockHeight: number },\n options?: { fetchTxInfo?: boolean }\n ): Promise<{ signature: string; txInfo: any }> {\n const rawTx = signedTx.serialize();\n\n console.log(\"Connection rpcUrl\", connection.rpcEndpoint);\n\n const sig = await connection.sendRawTransaction(rawTx, {\n preflightCommitment: 'confirmed',\n skipPreflight: true,\n });\n\n console.log(\"Signature\", sig);\n\n // Confirm using blockhash-based strategy (handles expiry properly)\n const confirmation = await connection.confirmTransaction(\n {\n signature: sig,\n blockhash: blockhashInfo.blockhash,\n lastValidBlockHeight: blockhashInfo.lastValidBlockHeight,\n },\n 'confirmed'\n );\n\n if (confirmation.value.err) {\n throw new Error(`Transaction failed on-chain: ${JSON.stringify(confirmation.value.err)}`);\n }\n\n console.log(\"Confirmed signature\", sig);\n\n // Optionally fetch transaction info\n let txInfo : VersionedTransactionResponse | null = null;\n if (options?.fetchTxInfo) {\n txInfo = await connection.getTransaction(sig, {\n maxSupportedTransactionVersion: 0,\n commitment: 'confirmed'\n });\n }\n\n return { signature: sig, txInfo };\n }\n\n private getRpcUrl(network?: string): string {\n if (this.networkUrl) {\n return this.networkUrl;\n }\n if (network === 'solana_devnet') {\n return SOLANA_DEVNET_RPC_URL;\n } else if (network === 'solana_mainnet') {\n return SOLANA_MAINNET_RPC_URL;\n } else if (network === 'surfnet') {\n return SURFNET_RPC_URL;\n }\n return SOLANA_MAINNET_RPC_URL; // default to mainnet\n }\n\n /* ----------------------------------------------------------- *\n * Transaction runner\n * ----------------------------------------------------------- */\n async runTransaction(\n _evm?: EVMTransaction,\n sol?: SolTransaction,\n opts?: SetOptions,\n ): Promise<TransactionResult> {\n if (!sol) throw new Error('Solana transaction data required');\n\n const kp = this.keypair;\n\n // Helper for duck typing - checks if transaction is legacy Transaction vs VersionedTransaction\n const isLegacyTx = (tx: Transaction | VersionedTransaction): boolean => {\n return 'recentBlockhash' in tx && !('message' in tx && 'staticAccountKeys' in (tx as any).message);\n };\n\n const wallet: anchor.Wallet = {\n publicKey: kp.publicKey,\n signTransaction: async (tx: Transaction | VersionedTransaction) => {\n // Use duck typing instead of instanceof to handle multiple @solana/web3.js versions\n if (isLegacyTx(tx)) {\n (tx as Transaction).partialSign(kp);\n } else {\n (tx as VersionedTransaction).sign([kp]);\n }\n return tx;\n },\n signAllTransactions: async (txs: (Transaction | VersionedTransaction)[]) =>\n txs.map((t) => {\n // Use duck typing instead of instanceof to handle multiple @solana/web3.js versions\n if (isLegacyTx(t)) {\n (t as Transaction).partialSign(kp);\n } else {\n (t as VersionedTransaction).sign([kp]);\n }\n return t;\n }),\n } as unknown as anchor.Wallet;\n\n /* de-dupe remaining accounts */\n const deduped = (() => {\n const fin: ReturnType<typeof convertRemainingAccounts> = [];\n for (const acc of convertRemainingAccounts(\n sol.txArgs[0].remainingAccounts,\n )) {\n const ex = fin.find((x) => x.pubkey.equals(acc.pubkey));\n if (ex) {\n ex.isSigner ||= acc.isSigner;\n ex.isWritable ||= acc.isWritable;\n } else fin.push(acc);\n }\n return fin;\n })();\n\n let retries = 0;\n let didPass = false;\n let delay = 1000;\n let toReturn: TransactionResult | null = null;\n let errorMessage = \"\";\n while (retries < 5) {\n try {\n toReturn = await this.runTransactionInner(sol, opts, wallet, kp, deduped);\n didPass = true;\n break;\n } catch (error: any) {\n console.log(\"Error building and sending transaction on retry:\", retries, error);\n await new Promise(resolve => setTimeout(resolve, delay));\n // Exponential backoff\n delay *= 1.5;\n retries++;\n errorMessage = error.message || JSON.stringify(error, null, 2);\n }\n }\n if (!didPass) {\n throw new Error(`Failed to send transaction after 5 retries: ${errorMessage}`);\n }\n return toReturn as TransactionResult;\n }\n\n private async runTransactionInner(sol: SolTransaction, opts: SetOptions | undefined, wallet: anchor.Wallet, kp: Keypair, deduped: ReturnType<typeof convertRemainingAccounts>): Promise<TransactionResult> {\n\n let rpcUrl = this.getRpcUrl(sol.network);\n console.log('Using RPC URL:', rpcUrl);\n const connection = new Connection(rpcUrl, 'confirmed');\n\n const anchorProvider = new anchor.AnchorProvider(\n connection,\n wallet,\n anchor.AnchorProvider.defaultOptions(),\n );\n\n const app_id = sol.appId;\n if (!app_id) throw new Error('app_id missing');\n\n let { tx, blockhash, lastValidBlockHeight } = await buildSetDocumentsTransaction(\n connection,\n sol.txArgs[0].idl,\n anchorProvider,\n kp.publicKey,\n {\n app_id,\n documents: sol.txArgs[0].setDocumentData,\n delete_paths: sol.txArgs[0].deletePaths,\n txData: sol.txArgs[0].txData\n },\n deduped,\n sol.lutKey,\n sol.preInstructions,\n false,\n );\n\n // Helper for duck typing - checks if transaction is legacy Transaction vs VersionedTransaction\n const isLegacyTx = (t: Transaction | VersionedTransaction): boolean => {\n return 'recentBlockhash' in t && !('message' in t && 'staticAccountKeys' in (t as any).message);\n };\n\n // Refresh blockhash and lastValidBlockHeight\n // Use duck typing instead of instanceof to handle multiple @solana/web3.js versions\n if (isLegacyTx(tx)) {\n (tx as Transaction).partialSign(kp);\n (tx as Transaction).recentBlockhash = blockhash;\n (tx as Transaction).lastValidBlockHeight = lastValidBlockHeight;\n (tx as Transaction).feePayer = kp.publicKey;\n } else {\n (tx as VersionedTransaction).sign([kp]);\n (tx as VersionedTransaction).message.recentBlockhash = blockhash;\n }\n\n // 3️⃣ Optional priority‑fee instruction\n\n const rawUnsigned = tx.serialize({ requireAllSignatures: false });\n const microLamports = await fetchPriorityFee(\n connection.rpcEndpoint,\n rawUnsigned\n );\n\n if (microLamports != null) {\n // Use duck typing instead of instanceof to handle multiple @solana/web3.js versions\n if (isLegacyTx(tx)) {\n (tx as Transaction).instructions.unshift(\n ComputeBudgetProgram.setComputeUnitPrice({ microLamports })\n );\n (tx as Transaction).partialSign(kp);\n } else {\n // Rebuild the transaction with the new priority fee\n const roundTwo = await buildSetDocumentsTransaction(\n connection,\n sol.txArgs[0].idl,\n anchorProvider,\n kp.publicKey,\n {\n app_id,\n documents: sol.txArgs[0].setDocumentData,\n delete_paths: sol.txArgs[0].deletePaths,\n txData: sol.txArgs[0].txData\n },\n deduped,\n sol.lutKey,\n [ComputeBudgetProgram.setComputeUnitPrice({ microLamports }), ...sol.preInstructions],\n false,\n );\n tx = roundTwo.tx as VersionedTransaction;\n blockhash = roundTwo.blockhash;\n lastValidBlockHeight = roundTwo.lastValidBlockHeight;\n (tx as VersionedTransaction).sign([kp]);\n (tx as VersionedTransaction).message.recentBlockhash = blockhash;\n }\n }\n\n if (opts?.shouldSubmitTx === false) {\n return { signedTransaction: tx, blockNumber: 0, gasUsed: '0', data: '' };\n }\n\n // Submit and confirm using shared helper\n const { signature, txInfo } = await this.submitAndConfirmTransaction(\n tx, connection, { blockhash, lastValidBlockHeight }, { fetchTxInfo: true }\n );\n\n return {\n transactionSignature: signature,\n blockNumber: txInfo?.slot ?? 0,\n gasUsed: txInfo?.meta?.fee.toString() ?? '0',\n data: txInfo?.meta,\n };\n }\n\n /* ----------------------------------------------------------- */\n async getNativeMethods() {\n return { keypair: this.keypair };\n }\n}\n","import { AuthProvider } from '@pooflabs/core';\nimport { Transaction, VersionedTransaction } from '@solana/web3.js';\nimport * as crypto from 'crypto';\n\n/**\n * Server-side OffchainAuthProvider wrapper for the poofnet environment.\n *\n * For signMessage, this generates a mock signature using SHA-256 hashing.\n * This is used for offchain transaction signing.\n */\nexport class OffchainAuthProvider implements AuthProvider {\n private wrappedProvider: AuthProvider;\n\n constructor(wrappedProvider: AuthProvider) {\n this.wrappedProvider = wrappedProvider;\n }\n\n async login(): Promise<any> {\n return this.wrappedProvider.login();\n }\n\n async logout(): Promise<void> {\n return this.wrappedProvider.logout();\n }\n\n async restoreSession(): Promise<any> {\n return this.wrappedProvider.restoreSession();\n }\n\n async getNativeMethods(): Promise<any> {\n return this.wrappedProvider.getNativeMethods();\n }\n\n async signMessage(message: string): Promise<string> {\n // Delegate to wrapped provider for real signing\n return this.wrappedProvider.signMessage(message);\n }\n\n async signMessageMock(message: string): Promise<string> {\n // Generate mock signature (SHA-256 hash of message, base64 encoded)\n // This is used for offchain transaction signing\n const hash = crypto.createHash('sha256').update(message).digest('base64');\n return hash;\n }\n\n async signTransaction(transaction: Transaction | VersionedTransaction): Promise<Transaction | VersionedTransaction> {\n throw new Error('Poofnet does not support real Solana transactions. Deploy your project to mainnet to use this feature.');\n }\n\n /**\n * Sign and submit transaction - not supported in poofnet environment.\n * See the real providers (PhantomWalletProvider, PrivyWalletProvider, SolanaKeypairProvider)\n * for the full implementation with blockhash handling and feePayer support.\n */\n async signAndSubmitTransaction(\n _transaction: Transaction | VersionedTransaction,\n _feePayer?: any\n ): Promise<string> {\n throw new Error('Poofnet does not support real Solana transactions. Deploy your project to mainnet to use this feature.');\n }\n\n async runTransaction(evmTransactionData?: any, solTransactionData?: any, options?: any): Promise<any> {\n return this.wrappedProvider.runTransaction(evmTransactionData, solTransactionData, options);\n }\n}\n","import { getConfig } from '@pooflabs/core';\nimport { AuthProvider } from '@pooflabs/core';\nimport { SolanaKeypairProvider } from './providers/solana-keypair-provider';\nimport { OffchainAuthProvider } from './providers/offchain-auth-provider';\n\nlet currentAuthProvider: AuthProvider | null = null;\n\nexport const SOLANA_DEVNET_RPC_URL = \"https://idelle-8nxsep-fast-devnet.helius-rpc.com\";\nexport const SOLANA_MAINNET_RPC_URL = \"https://celestia-cegncv-fast-mainnet.helius-rpc.com\";\nexport const SURFNET_RPC_URL = \"https://surfpool.fly.dev\";\n\nexport async function getAuthProvider(): Promise<AuthProvider> {\n const config = await getConfig();\n\n if (currentAuthProvider) {\n // If provider exists but chain is \"offchain\" and it's not already wrapped, rewrap it\n if (config.chain === \"offchain\" && !(currentAuthProvider instanceof OffchainAuthProvider)) {\n currentAuthProvider = new OffchainAuthProvider(currentAuthProvider);\n }\n return currentAuthProvider;\n }\n\n currentAuthProvider = await matchAuthProvider(config.rpcUrl ?? null);\n \n // Wrap with OffchainAuthProvider for offchain chain\n if (config.chain === \"offchain\") {\n currentAuthProvider = new OffchainAuthProvider(currentAuthProvider);\n }\n\n return currentAuthProvider;\n}\n\nexport async function matchAuthProvider(rpcUrl: string | null): Promise<AuthProvider> {\n return new SolanaKeypairProvider(rpcUrl);\n}","import { AuthProvider } from '@pooflabs/core';\nimport { getAuthProvider } from './auth';\nimport { init as configInit, ClientConfig } from '@pooflabs/core';\n\nlet authProviderInstance: AuthProvider | null = null;\n\nconst SOLANA_DEVNET_RPC_URL = \"https://api.devnet.solana.com\";\nconst SOLANA_MAINNET_RPC_URL = \"https://celestia-cegncv-fast-mainnet.helius-rpc.com\";\nconst SURFNET_RPC_URL = \"https://surfpool.fly.dev\";\n\nexport async function init(newConfig: Partial<ClientConfig>): Promise<void> {\n // Initialize config first so getAuthProvider can access it\n // Server-side skips backend init since it already has all needed config\n await configInit({ ...newConfig, isServer: true, skipBackendInit: true });\n\n // Get the auth provider (which will wrap it if chain is \"offchain\")\n authProviderInstance = await getAuthProvider();\n\n // Update config with the wrapped provider\n await configInit({ ...newConfig, authProvider: authProviderInstance, isServer: true, skipBackendInit: true });\n}","import { getIdToken as getIdTokenCore } from '@pooflabs/core';\n\n// Wrapper for getIdToken - passes isServer=true for server-side usage\nexport async function getIdToken(): Promise<string | null> {\n return getIdTokenCore(true);\n}\n"],"names":["configInit","getIdTokenCore"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pooflabs/server",
3
- "version": "0.0.23-rc-6",
3
+ "version": "0.0.23-rc-7",
4
4
  "description": "Server SDK for Poof API - Node.js/Backend implementation",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",