blockstack
Version:
The Blockstack Javascript library for authentication, identity, and storage.
160 lines (142 loc) • 5.1 kB
JavaScript
;
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
};