UNPKG

blockstack

Version:

The Blockstack Javascript library for authentication, identity, and storage.

160 lines (142 loc) 5.1 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.safety = undefined; var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); var _config = require('../config'); function isNameValid() { var fullyQualifiedName = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; var NAME_PART_RULE = /^[a-z0-9\-_+]+$/; var LENGTH_MAX_NAME = 37; if (!fullyQualifiedName || fullyQualifiedName.length > LENGTH_MAX_NAME) { return Promise.resolve(false); } var nameParts = fullyQualifiedName.split('.'); if (nameParts.length !== 2) { return Promise.resolve(false); } return Promise.resolve(nameParts.reduce(function (agg, namePart) { if (!agg) { return false; } else { return NAME_PART_RULE.test(namePart); } }, true)); } function isNamespaceValid(namespaceID) { var NAMESPACE_RULE = /^[a-z0-9\-_]{1,19}$/; return Promise.resolve(namespaceID.match(NAMESPACE_RULE) !== null); } function isNameAvailable(fullyQualifiedName) { return _config.config.network.getNameInfo(fullyQualifiedName).then(function () { return false; }).catch(function (e) { if (e.message === 'Name not found') { return true; } else { throw e; } }); } function isNamespaceAvailable(namespaceID) { return _config.config.network.getNamespaceInfo(namespaceID).then(function () { return false; }).catch(function (e) { if (e.message === 'Namespace not found') { return true; } else { throw e; } }); } function ownsName(fullyQualifiedName, ownerAddress) { return _config.config.network.getNameInfo(fullyQualifiedName).then(function (nameInfo) { return nameInfo.address === ownerAddress; }).catch(function (e) { if (e.message === 'Name not found') { return false; } else { throw e; } }); } function revealedNamespace(namespaceID, revealAddress) { return _config.config.network.getNamespaceInfo(namespaceID).then(function (namespaceInfo) { return namespaceInfo.recipient_address === revealAddress; }).catch(function (e) { if (e.message === 'Namespace not found') { return false; } else { throw e; } }); } function namespaceIsReady(namespaceID) { return _config.config.network.getNamespaceInfo(namespaceID).then(function (namespaceInfo) { return namespaceInfo.ready; }).catch(function (e) { if (e.message === 'Namespace not found') { return false; } else { throw e; } }); } function namespaceIsRevealed(namespaceID) { return _config.config.network.getNamespaceInfo(namespaceID).then(function (namespaceInfo) { return !namespaceInfo.ready; }).catch(function (e) { if (e.message === 'Namespace not found') { return false; } else { throw e; } }); } function isInGracePeriod(fullyQualifiedName) { var network = _config.config.network; return Promise.all([network.getNameInfo(fullyQualifiedName), network.getBlockHeight(), network.getGracePeriod(fullyQualifiedName)]).then(function (_ref) { var _ref2 = _slicedToArray(_ref, 3), nameInfo = _ref2[0], blockHeight = _ref2[1], gracePeriod = _ref2[2]; var expiresAt = nameInfo.expire_block; return blockHeight >= expiresAt && blockHeight < gracePeriod + expiresAt; }).catch(function (e) { if (e.message === 'Name not found') { return false; } else { throw e; } }); } function addressCanReceiveName(address) { return _config.config.network.getNamesOwned(address).then(function (names) { return Promise.all(names.map(function (name) { return isNameValid(name); })).then(function (validNames) { return validNames.filter(function (nameValid) { return nameValid; }).length < 25; }); }); } function isAccountSpendable(address, tokenType, blockHeight) { return _config.config.network.getAccountStatus(address, tokenType).then(function (accountStatus) { return accountStatus.transfer_send_block_id >= blockHeight; }); } var safety = exports.safety = { addressCanReceiveName: addressCanReceiveName, isInGracePeriod: isInGracePeriod, ownsName: ownsName, isNameAvailable: isNameAvailable, isNameValid: isNameValid, isNamespaceValid: isNamespaceValid, isNamespaceAvailable: isNamespaceAvailable, revealedNamespace: revealedNamespace, namespaceIsReady: namespaceIsReady, namespaceIsRevealed: namespaceIsRevealed, isAccountSpendable: isAccountSpendable };