connection.ts•1.58 kB
import { Connection, clusterApiUrl, Keypair } from '@solana/web3.js';
import { Program, AnchorProvider, Idl } from '@project-serum/anchor';
import { Wallet } from '@project-serum/anchor';
import path from 'path';
import { fileURLToPath } from 'url';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const idl = JSON.parse(await import('fs').then(fs => 
  fs.promises.readFile(path.resolve(__dirname, '../../reference/idls/mpl_hybrid.json'), 'utf-8')
));
export class ConnectionManager {
  private static instance: ConnectionManager;
  private connection: Connection;
  private program: Program;
  private constructor() {
    // Initialize connection to Solana devnet
    this.connection = new Connection(clusterApiUrl('devnet'));
    
    // Create a dummy wallet since we're only reading data
    const wallet = new Wallet(Keypair.generate());
    
    // Create provider
    const provider = new AnchorProvider(this.connection, wallet, {
      commitment: 'confirmed',
    });
    // Initialize program (this would be replaced with actual MPL-404 program ID and IDL)
    this.program = new Program(
      idl as Idl,
      'MPL4o4wMzndgh8T1NVDxELQCj5UQfYTYEkabX3wNKtb',
      provider
    );
  }
  public static getInstance(): ConnectionManager {
    if (!ConnectionManager.instance) {
      ConnectionManager.instance = new ConnectionManager();
    }
    return ConnectionManager.instance;
  }
  public getConnection(): Connection {
    return this.connection;
  }
  public getProgram(): Program {
    return this.program;
  }
}