@wuwei-labs/srsly
Version:
TypeScript SDK for SRSLY
47 lines • 1.76 kB
JavaScript
;
/**
* @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