@fairmint/canton-node-sdk
Version:
Canton Node SDK
50 lines • 2 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createParty = createParty;
const offers_1 = require("../amulet/offers");
const pre_approve_transfers_1 = require("../amulet/pre-approve-transfers");
/**
* Creates a party, optionally funds the wallet and if funded it then creates a preapproval contract for the party.
*
* @param options - Configuration options for party creation
* @returns Promise resolving to the party creation result
*/
async function createParty(options) {
// Use provided clients directly
const { ledgerClient, validatorClient } = options;
const amountNum = parseFloat(options.amount);
if (isNaN(amountNum) || amountNum < 0) {
throw new Error(`Invalid amount: "${options.amount}". Amount must be a valid non-negative number.`);
}
// Create user via Validator API
const userStatus = await validatorClient.createUser({ name: options.partyName });
const result = {
partyId: userStatus.party_id,
};
// Skip funding if amount is 0
if (amountNum === 0) {
return result;
}
// Create and accept transfer offer
const transferOfferContractId = await (0, offers_1.createTransferOffer)({
ledgerClient,
receiverPartyId: result.partyId,
amount: options.amount,
description: `Welcome transfer for ${options.partyName}`,
});
// Accept transfer offer
await (0, offers_1.acceptTransferOffer)({
ledgerClient,
transferOfferContractId,
acceptingPartyId: result.partyId,
});
// Wait 30 seconds for transfer to settle
await new Promise((resolve) => setTimeout(resolve, 30000));
// Create transfer preapproval
const preapprovalResult = await (0, pre_approve_transfers_1.preApproveTransfers)(ledgerClient, validatorClient, {
receiverPartyId: result.partyId,
});
result.preapprovalContractId = preapprovalResult.contractId;
return result;
}
//# sourceMappingURL=createParty.js.map