UNPKG

@wuwei-labs/srsly

Version:
47 lines 1.76 kB
"use strict"; /** * @purpose Fleet account utilities for SRSLY * * Fetches fleet state data from the Star Atlas SAGE program. */ Object.defineProperty(exports, "__esModule", { value: true }); exports.fetchFleet = fetchFleet; const kit_1 = require("@solana/kit"); const fleet_1 = require("../generated/codama/types/fleet"); const config_1 = require("../utils/config"); const rpc_1 = require("../utils/rpc"); /** Anchor discriminator size (8 bytes) */ const DISCRIMINATOR_SIZE = 8; /** * Fetch fleet state from the Star Atlas SAGE program * * @param fleetAddress - Fleet account address * @param rpcUrl - Optional RPC endpoint URL. If not provided, uses RPC from global config * @returns Decoded fleet data including stats (ShipStats) * @throws Error if fleet account not found or fetch fails * * @example * ```typescript * const fleet = await fetchFleet('FleetAddress...'); * console.log(fleet.ownerProfile, fleet.gameId, fleet.stats); * ``` */ async function fetchFleet(fleetAddress, rpcUrl) { try { const resolvedRpcUrl = rpcUrl || (0, config_1.getRpcUrl)(); const rpc = (0, rpc_1.createRpc)(resolvedRpcUrl); const base64Encoder = (0, kit_1.getBase64Encoder)(); const { value } = await rpc .getAccountInfo(fleetAddress, { encoding: 'base64' }) .send(); if (!value || !value?.data) { throw new Error(`Fleet account not found: ${fleetAddress}`); } const bytes = base64Encoder.encode(value.data[0]); return (0, fleet_1.getFleetDecoder)().decode(bytes.subarray(DISCRIMINATOR_SIZE)); } catch (error) { throw new Error(`Failed to fetch fleet state at ${fleetAddress}: ${error.message}`); } } //# sourceMappingURL=fleet.js.map