@wuwei-labs/srsly
Version:
TypeScript SDK for SRSLY
94 lines • 3.69 kB
JavaScript
"use strict";
/**
* @purpose Simplified updateConfig instruction wrapper
*
* Thin convenience wrapper around Codama-generated updateConfig instruction.
* Updates the global program configuration settings.
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.updateConfig = updateConfig;
const kit_1 = require("@solana/kit");
const instructions_1 = require("../generated/codama/instructions");
const config_1 = require("../utils/config");
const signer_1 = require("../utils/signer");
const instructions_2 = require("../utils/instructions");
/**
* Convert a value to Option type
*/
function toOption(value) {
return value === null || value === undefined ? (0, kit_1.none)() : (0, kit_1.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
* });
* ```
*/
async function updateConfig(params, config) {
// Merge config
const finalConfig = (0, config_1.mergeConfig)(config);
// Validate required params
if (!params.admin) {
throw new Error('admin is required');
}
// Convert admin to transaction signer
const adminSigner = (0, signer_1.toTransactionSigner)(params.admin);
// Get network-specific addresses
const addresses = (0, config_1.getAddresses)(config);
const programAddress = (0, kit_1.address)(addresses.srsly);
// Convert newAdmin to address if provided
const newAdminAddress = params.newAdmin ? (0, kit_1.address)(params.newAdmin) : undefined;
// Convert atlasMint to address if provided
const atlasMintAddress = params.atlasMint ? (0, kit_1.address)(params.atlasMint) : undefined;
// Call Codama-generated instruction
const kitInstruction = await (0, instructions_1.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 (0, instructions_2.prepareInstructions)(kitInstruction, {
computeUnits: params.computeUnits,
PublicKey: finalConfig.PublicKey,
});
}
//# sourceMappingURL=updateConfig.js.map