diamante-base
Version:
Low-level support library for the Diamante network.
269 lines (257 loc) • 8.28 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.MemoText = exports.MemoReturn = exports.MemoNone = exports.MemoID = exports.MemoHash = exports.Memo = void 0;
var _diamanteJsXdr = require("diamante-js-xdr");
var _bignumber = _interopRequireDefault(require("./util/bignumber"));
var _xdr = _interopRequireDefault(require("./xdr"));
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
/**
* Type of {@link Memo}.
*/
var MemoNone = exports.MemoNone = 'none';
/**
* Type of {@link Memo}.
*/
var MemoID = exports.MemoID = 'id';
/**
* Type of {@link Memo}.
*/
var MemoText = exports.MemoText = 'text';
/**
* Type of {@link Memo}.
*/
var MemoHash = exports.MemoHash = 'hash';
/**
* Type of {@link Memo}.
*/
var MemoReturn = exports.MemoReturn = 'return';
/**
* `Memo` represents memos attached to transactions.
*
* @param {string} type - `MemoNone`, `MemoID`, `MemoText`, `MemoHash` or `MemoReturn`
* @param {*} value - `string` for `MemoID`, `MemoText`, buffer of hex string for `MemoHash` or `MemoReturn`
* @see [Transactions concept](https://developers.diamante.org/docs/glossary/transactions/)
* @class Memo
*/
var Memo = exports.Memo = /*#__PURE__*/function () {
function Memo(type) {
var value = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
_classCallCheck(this, Memo);
this._type = type;
this._value = value;
switch (this._type) {
case MemoNone:
break;
case MemoID:
Memo._validateIdValue(value);
break;
case MemoText:
Memo._validateTextValue(value);
break;
case MemoHash:
case MemoReturn:
Memo._validateHashValue(value);
// We want MemoHash and MemoReturn to have Buffer as a value
if (typeof value === 'string') {
this._value = Buffer.from(value, 'hex');
}
break;
default:
throw new Error('Invalid memo type');
}
}
/**
* Contains memo type: `MemoNone`, `MemoID`, `MemoText`, `MemoHash` or `MemoReturn`
*/
return _createClass(Memo, [{
key: "type",
get: function get() {
return this._type;
},
set: function set(type) {
throw new Error('Memo is immutable');
}
/**
* Contains memo value:
* * `null` for `MemoNone`,
* * `string` for `MemoID`,
* * `Buffer` for `MemoText` after decoding using `fromXDRObject`, original value otherwise,
* * `Buffer` for `MemoHash`, `MemoReturn`.
*/
}, {
key: "value",
get: function get() {
switch (this._type) {
case MemoNone:
return null;
case MemoID:
case MemoText:
return this._value;
case MemoHash:
case MemoReturn:
return Buffer.from(this._value);
default:
throw new Error('Invalid memo type');
}
},
set: function set(value) {
throw new Error('Memo is immutable');
}
}, {
key: "toXDRObject",
value:
/**
* Returns XDR memo object.
* @returns {xdr.Memo}
*/
function toXDRObject() {
switch (this._type) {
case MemoNone:
return _xdr["default"].Memo.memoNone();
case MemoID:
return _xdr["default"].Memo.memoId(_diamanteJsXdr.UnsignedHyper.fromString(this._value));
case MemoText:
return _xdr["default"].Memo.memoText(this._value);
case MemoHash:
return _xdr["default"].Memo.memoHash(this._value);
case MemoReturn:
return _xdr["default"].Memo.memoReturn(this._value);
default:
return null;
}
}
/**
* Returns {@link Memo} from XDR memo object.
* @param {xdr.Memo} object XDR memo object
* @returns {Memo}
*/
}], [{
key: "_validateIdValue",
value: function _validateIdValue(value) {
var error = new Error("Expects a int64 as a string. Got ".concat(value));
if (typeof value !== 'string') {
throw error;
}
var number;
try {
number = new _bignumber["default"](value);
} catch (e) {
throw error;
}
// Infinity
if (!number.isFinite()) {
throw error;
}
// NaN
if (number.isNaN()) {
throw error;
}
}
}, {
key: "_validateTextValue",
value: function _validateTextValue(value) {
if (!_xdr["default"].Memo.armTypeForArm('text').isValid(value)) {
throw new Error('Expects string, array or buffer, max 28 bytes');
}
}
}, {
key: "_validateHashValue",
value: function _validateHashValue(value) {
var error = new Error("Expects a 32 byte hash value or hex encoded string. Got ".concat(value));
if (value === null || typeof value === 'undefined') {
throw error;
}
var 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;
}
}
/**
* Returns an empty memo (`MemoNone`).
* @returns {Memo}
*/
}, {
key: "none",
value: function none() {
return new Memo(MemoNone);
}
/**
* Creates and returns a `MemoText` memo.
* @param {string} text - memo text
* @returns {Memo}
*/
}, {
key: "text",
value: function text(_text) {
return new Memo(MemoText, _text);
}
/**
* Creates and returns a `MemoID` memo.
* @param {string} id - 64-bit number represented as a string
* @returns {Memo}
*/
}, {
key: "id",
value: function id(_id) {
return new Memo(MemoID, _id);
}
/**
* Creates and returns a `MemoHash` memo.
* @param {array|string} hash - 32 byte hash or hex encoded string
* @returns {Memo}
*/
}, {
key: "hash",
value: function hash(_hash) {
return new Memo(MemoHash, _hash);
}
/**
* Creates and returns a `MemoReturn` memo.
* @param {array|string} hash - 32 byte hash or hex encoded string
* @returns {Memo}
*/
}, {
key: "return",
value: function _return(hash) {
return new Memo(MemoReturn, hash);
}
}, {
key: "fromXDRObject",
value: function 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');
}
}]);
}();
;