UNPKG

@wuwei-labs/srsly

Version:
91 lines 3.5 kB
/** * @purpose Simplified updateConfig instruction wrapper * * Thin convenience wrapper around Codama-generated updateConfig instruction. * Updates the global program configuration settings. */ import { address, some, none } from '@solana/kit'; import { getUpdateConfigInstructionAsync } from '../generated/codama/instructions'; import { mergeConfig, getAddresses } from '../utils/config'; import { toTransactionSigner } from '../utils/signer'; import { prepareInstructions } from '../utils/instructions'; /** * Convert a value to Option type */ function toOption(value) { return value === null || value === undefined ? none() : some(value); } /** * Update one or more global program settings. All fields are optional — * only the ones you supply change. * * @param params - Configuration update parameters * @param config - Optional SDK configuration overrides * @returns Kit instruction (or web3.js if PublicKey in config) * * @example * ```typescript * // Update service fee * const ix = await updateConfig({ * admin: adminWallet, * serviceFeeBps: 1000 // 10% * }); * * // Update multiple settings * const ix2 = await updateConfig({ * admin: adminWallet, * serviceFeeBps: 1500, * reservationsEnabled: true, * pointsPerDay: 100 * }); * * // Change admin * const ix3 = await updateConfig({ * admin: currentAdmin, * newAdmin: newAdminAddress * }); * ``` */ export async function updateConfig(params, config) { // Merge config const finalConfig = mergeConfig(config); // Validate required params if (!params.admin) { throw new Error('admin is required'); } // Convert admin to transaction signer const adminSigner = toTransactionSigner(params.admin); // Get network-specific addresses const addresses = getAddresses(config); const programAddress = address(addresses.srsly); // Convert newAdmin to address if provided const newAdminAddress = params.newAdmin ? address(params.newAdmin) : undefined; // Convert atlasMint to address if provided const atlasMintAddress = params.atlasMint ? address(params.atlasMint) : undefined; // Call Codama-generated instruction const kitInstruction = await getUpdateConfigInstructionAsync({ admin: adminSigner, adminArg: toOption(newAdminAddress), stardustToAtlas: toOption(params.stardustToAtlas), serviceFeeBps: toOption(params.serviceFeeBps), baseBps: toOption(params.baseBps), rentalDurationMinSeconds: toOption(params.rentalDurationMinSeconds), rentalDurationMaxSeconds: toOption(params.rentalDurationMaxSeconds), atlasMint: toOption(atlasMintAddress), reservationsEnabled: toOption(params.reservationsEnabled), pointsPerDay: toOption(params.pointsPerDay), cancellationPenalty: toOption(params.cancellationPenalty), minCaptureThreshold: toOption(params.minCaptureThreshold), weightBase: toOption(params.weightBase), weightMultiplier: toOption(params.weightMultiplier), maxWeight: toOption(params.maxWeight), captureRateBps: toOption(params.captureRateBps), atlasPerPoint: toOption(params.atlasPerPoint), contestedMultiplierMaxBps: toOption(params.contestedMultiplierMaxBps), }, { programAddress }); return prepareInstructions(kitInstruction, { computeUnits: params.computeUnits, PublicKey: finalConfig.PublicKey, }); } //# sourceMappingURL=updateConfig.js.map