@okxweb3/coin-stellar
Version:
@okxweb3/coin-stellar is a Stellar SDK for building Web3 wallets and applications. It supports Stellar and PI blockchains, enabling private key management, address generation, transaction signing, trustline creation, and asset transfers
159 lines • 5.08 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Memo = exports.MemoReturn = exports.MemoHash = exports.MemoText = exports.MemoID = exports.MemoNone = void 0;
const js_xdr_1 = require("@stellar/js-xdr");
const bignumber_1 = __importDefault(require("./util/bignumber"));
const xdr_1 = __importDefault(require("./xdr"));
exports.MemoNone = 'none';
exports.MemoID = 'id';
exports.MemoText = 'text';
exports.MemoHash = 'hash';
exports.MemoReturn = 'return';
class Memo {
constructor(type, value = null) {
this._type = type;
this._value = value;
switch (this._type) {
case exports.MemoNone:
break;
case exports.MemoID:
Memo._validateIdValue(value);
break;
case exports.MemoText:
Memo._validateTextValue(value);
break;
case exports.MemoHash:
case exports.MemoReturn:
Memo._validateHashValue(value);
if (typeof value === 'string') {
this._value = Buffer.from(value, 'hex');
}
break;
default:
throw new Error('Invalid memo type');
}
}
get type() {
return this._type;
}
set type(type) {
throw new Error('Memo is immutable');
}
get value() {
switch (this._type) {
case exports.MemoNone:
return null;
case exports.MemoID:
case exports.MemoText:
return this._value;
case exports.MemoHash:
case exports.MemoReturn:
return Buffer.from(this._value);
default:
throw new Error('Invalid memo type');
}
}
set value(value) {
throw new Error('Memo is immutable');
}
static _validateIdValue(value) {
const error = new Error(`Expects a int64 as a string. Got ${value}`);
if (typeof value !== 'string') {
throw error;
}
let number;
try {
number = new bignumber_1.default(value);
}
catch (e) {
throw error;
}
if (!number.isFinite()) {
throw error;
}
if (number.isNaN()) {
throw error;
}
}
static _validateTextValue(value) {
if (!xdr_1.default.Memo.armTypeForArm('text').isValid(value)) {
throw new Error('Expects string, array or buffer, max 28 bytes');
}
}
static _validateHashValue(value) {
const error = new Error(`Expects a 32 byte hash value or hex encoded string. Got ${value}`);
if (value === null || typeof value === 'undefined') {
throw error;
}
let valueBuffer;
if (typeof value === 'string') {
if (!/^[0-9A-Fa-f]{64}$/g.test(value)) {
throw error;
}
valueBuffer = Buffer.from(value, 'hex');
}
else if (Buffer.isBuffer(value)) {
valueBuffer = Buffer.from(value);
}
else {
throw error;
}
if (!valueBuffer.length || valueBuffer.length !== 32) {
throw error;
}
}
static none() {
return new Memo(exports.MemoNone);
}
static text(text) {
return new Memo(exports.MemoText, text);
}
static id(id) {
return new Memo(exports.MemoID, id);
}
static hash(hash) {
return new Memo(exports.MemoHash, hash);
}
static return(hash) {
return new Memo(exports.MemoReturn, hash);
}
toXDRObject() {
switch (this._type) {
case exports.MemoNone:
return xdr_1.default.Memo.memoNone();
case exports.MemoID:
return xdr_1.default.Memo.memoId(js_xdr_1.UnsignedHyper.fromString(this._value));
case exports.MemoText:
return xdr_1.default.Memo.memoText(this._value);
case exports.MemoHash:
return xdr_1.default.Memo.memoHash(this._value);
case exports.MemoReturn:
return xdr_1.default.Memo.memoReturn(this._value);
default:
return null;
}
}
static fromXDRObject(object) {
switch (object.arm()) {
case 'id':
return Memo.id(object.value().toString());
case 'text':
return Memo.text(object.value());
case 'hash':
return Memo.hash(object.value());
case 'retHash':
return Memo.return(object.value());
default:
break;
}
if (typeof object.value() === 'undefined') {
return Memo.none();
}
throw new Error('Unknown type');
}
}
exports.Memo = Memo;
//# sourceMappingURL=memo.js.map