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