@ar.io/sdk
Version:
[](https://codecov.io/gh/ar-io/ar-io-sdk)
152 lines (151 loc) • 6.86 kB
JavaScript
import { mARIOToken } from '../../types/token.js';
import { assertEnoughMARIOBalance, assertLockLengthInRange, confirmationPrompt, customTagsFromOptions, formatARIOWithCommas, formatMARIOToARIOWithCommas, requiredMARIOFromOptions, requiredPositiveIntegerFromOptions, requiredStringFromOptions, requiredTargetAndQuantityFromOptions, writeARIOFromOptions, } from '../utils.js';
export async function transferCLICommand(options) {
const { target, arioQuantity } = requiredTargetAndQuantityFromOptions(options);
const { ario, signerAddress } = writeARIOFromOptions(options);
if (!options.skipConfirmation) {
await assertEnoughMARIOBalance({
ario,
address: signerAddress,
mARIOQuantity: arioQuantity.toMARIO(),
});
const confirm = await confirmationPrompt(`Are you sure you want to transfer ${formatARIOWithCommas(arioQuantity)} ARIO to ${target}?`);
if (!confirm) {
return { message: 'Transfer aborted by user' };
}
}
const result = await ario.transfer({
target,
qty: arioQuantity.toMARIO().valueOf(),
}, customTagsFromOptions(options));
const output = {
senderAddress: signerAddress,
transferResult: result,
message: `Successfully transferred ${formatARIOWithCommas(arioQuantity)} ARIO to ${target}`,
};
return output;
}
export async function vaultedTransferCLICommand(o) {
const mARIOQuantity = requiredMARIOFromOptions(o, 'quantity');
const recipient = requiredStringFromOptions(o, 'recipient');
const { ario, signerAddress } = writeARIOFromOptions(o);
const lockLengthMs = requiredPositiveIntegerFromOptions(o, 'lockLengthMs');
assertLockLengthInRange(lockLengthMs);
if (!o.skipConfirmation) {
await assertEnoughMARIOBalance({
ario,
address: signerAddress,
mARIOQuantity,
});
const confirm = await confirmationPrompt(`Are you sure you want transfer ${formatMARIOToARIOWithCommas(mARIOQuantity)} ARIO to ${recipient}, locked in a ${o.revokable ? '' : 'non-'}revokable vault for ${lockLengthMs}ms?`);
if (!confirm) {
return { message: 'Transfer aborted by user' };
}
}
const result = await ario.vaultedTransfer({
recipient,
quantity: mARIOQuantity,
lockLengthMs,
revokable: o.revokable,
}, customTagsFromOptions(o));
const output = {
senderAddress: signerAddress,
transferResult: result,
message: `Successfully vaulted transferred ${formatMARIOToARIOWithCommas(mARIOQuantity)} ARIO to ${recipient}`,
};
return output;
}
export async function revokeVaultCLICommand(o) {
const { ario, signerAddress } = writeARIOFromOptions(o);
const vaultId = requiredStringFromOptions(o, 'vaultId');
const recipient = requiredStringFromOptions(o, 'recipient');
if (!o.skipConfirmation) {
const vault = await ario.getVault({ vaultId, address: recipient });
const confirm = await confirmationPrompt(`Are you sure you want to revoke vault with id ${vaultId} from ${recipient} with balance ${formatARIOWithCommas(new mARIOToken(vault.balance).toARIO())} ARIO?`);
if (!confirm) {
return { message: 'Revoke aborted by user' };
}
}
const result = await ario.revokeVault({
vaultId,
recipient,
}, customTagsFromOptions(o));
const output = {
senderAddress: signerAddress,
transferResult: result,
message: `Successfully revoked vault with id ${vaultId}`,
};
return output;
}
export async function createVaultCLICommand(o) {
const mARIOQuantity = requiredMARIOFromOptions(o, 'quantity');
const { ario, signerAddress } = writeARIOFromOptions(o);
const lockLengthMs = requiredPositiveIntegerFromOptions(o, 'lockLengthMs');
assertLockLengthInRange(lockLengthMs);
if (!o.skipConfirmation) {
await assertEnoughMARIOBalance({
ario,
address: signerAddress,
mARIOQuantity,
});
const confirm = await confirmationPrompt(`Are you sure you want to create a vault with ${formatMARIOToARIOWithCommas(mARIOQuantity)} ARIO, locked for ${lockLengthMs}ms?`);
if (!confirm) {
return { message: 'Vault creation aborted by user' };
}
}
const result = await ario.createVault({
quantity: mARIOQuantity,
lockLengthMs,
}, customTagsFromOptions(o));
const output = {
senderAddress: signerAddress,
transferResult: result,
message: `Successfully created vault with ${formatMARIOToARIOWithCommas(mARIOQuantity)} ARIO`,
};
return output;
}
export async function extendVaultCLICommand(o) {
const { ario, signerAddress } = writeARIOFromOptions(o);
const vaultId = requiredStringFromOptions(o, 'vaultId');
const extendLengthMs = requiredPositiveIntegerFromOptions(o, 'extendLengthMs');
assertLockLengthInRange(extendLengthMs, false);
if (!o.skipConfirmation) {
const vault = await ario.getVault({ vaultId, address: signerAddress });
const confirm = await confirmationPrompt(`Are you sure you want to extend vault with id ${vaultId} for ${extendLengthMs}ms with balance ${formatARIOWithCommas(new mARIOToken(vault.balance).toARIO())} ARIO?`);
if (!confirm) {
return { message: 'Vault extension aborted by user' };
}
}
const result = await ario.extendVault({
vaultId,
extendLengthMs,
}, customTagsFromOptions(o));
const output = {
senderAddress: signerAddress,
transferResult: result,
message: `Successfully extended vault with id ${vaultId}`,
};
return output;
}
export async function increaseVaultCLICommand(o) {
const mARIOQuantity = requiredMARIOFromOptions(o, 'quantity');
const { ario, signerAddress } = writeARIOFromOptions(o);
const vaultId = requiredStringFromOptions(o, 'vaultId');
if (!o.skipConfirmation) {
const vault = await ario.getVault({ vaultId, address: signerAddress });
const confirm = await confirmationPrompt(`Are you sure you want to increase vault with id ${vaultId} by ${formatMARIOToARIOWithCommas(mARIOQuantity)} ARIO with balance ${formatARIOWithCommas(new mARIOToken(vault.balance).toARIO())} ARIO?`);
if (!confirm) {
return { message: 'Vault increase aborted by user' };
}
}
const result = await ario.increaseVault({
vaultId,
quantity: mARIOQuantity,
}, customTagsFromOptions(o));
const output = {
senderAddress: signerAddress,
transferResult: result,
message: `Successfully increased vault with id ${vaultId} by ${formatMARIOToARIOWithCommas(mARIOQuantity)} ARIO`,
};
return output;
}