@cruxpay/js-sdk
Version:
CruxPay Javascript SDK
240 lines (239 loc) • 10.3 kB
JavaScript
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __read = (this && this.__read) || function (o, n) {
var m = typeof Symbol === "function" && o[Symbol.iterator];
if (!m) return o;
var i = m.call(o), r, ar = [], e;
try {
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
}
catch (error) { e = { error: error }; }
finally {
try {
if (r && !r.done && (m = i["return"])) m.call(i);
}
finally { if (e) throw e.error; }
}
return ar;
};
import { ErrorHelper, PackageErrorCode } from "./error";
export var DEFAULT_CRUX_NAMESPACE = "crux";
export var DEFAULT_BLOCKSTACK_NAMESPACE = "id";
export var CRUX_DOMAIN_SUFFIX = "_crux";
export var validateSubdomain = function (subDomain) {
var subdomainRegex = "^[a-z]([a-z]|[0-9]|-|_)*([a-z]|[0-9])$";
var subdomainMinLength = 4;
var subdomainMaxLength = 20;
// tslint:disable-next-line: tsr-detect-non-literal-regexp
if (!subDomain.match(new RegExp(subdomainRegex))) {
throw ErrorHelper.getPackageError(null, PackageErrorCode.SubdomainRegexMatchFailure);
}
if (subDomain.length < subdomainMinLength || subDomain.length > subdomainMaxLength) {
throw ErrorHelper.getPackageError(null, PackageErrorCode.SubdomainLengthCheckFailure);
}
};
var CruxId = /** @class */ (function () {
function CruxId(inputComponents) {
var _this = this;
this.toString = function () {
var cruxSubdomainPart = _this.components.subdomain + "@";
var otherPart = _this.components.domain + "." + _this.components.namespace;
return cruxSubdomainPart + otherPart;
};
// validateSubdomain(inputComponents.subdomain);
this.components = {
domain: inputComponents.domain.toLowerCase(),
namespace: DEFAULT_CRUX_NAMESPACE,
subdomain: inputComponents.subdomain.toLowerCase(),
};
}
CruxId.fromString = function (stringRepresentation) {
var _a;
stringRepresentation = stringRepresentation.toLowerCase();
var arrayCruxId = stringRepresentation.split(/[.@]/);
var cruxSubdomain = "";
var cruxDomain = "";
var cruxNamespace = "";
if (arrayCruxId.length === 3) {
_a = __read(arrayCruxId, 3), cruxSubdomain = _a[0], cruxDomain = _a[1], cruxNamespace = _a[2]; // foo@exodus.crux
}
else {
throw ErrorHelper.getPackageError(null, PackageErrorCode.CruxIdInvalidStructure);
}
if (cruxNamespace !== DEFAULT_CRUX_NAMESPACE) {
throw ErrorHelper.getPackageError(null, PackageErrorCode.CruxIdNamespaceValidation, cruxNamespace);
}
return new CruxId({ domain: cruxDomain, subdomain: cruxSubdomain });
};
return CruxId;
}());
export { CruxId };
var BlockstackId = /** @class */ (function () {
function BlockstackId(inputComponents) {
var _this = this;
this.toString = function () {
var bsSubdomainPart = _this.components.subdomain.length > 0 ? _this.components.subdomain + "." : "";
return bsSubdomainPart + _this.components.domain + "." + _this.components.namespace;
};
this.components = __assign(__assign({}, inputComponents), { namespace: DEFAULT_BLOCKSTACK_NAMESPACE });
}
BlockstackId.fromString = function (stringRepresentation) {
var _a, _b;
var arrayBsId = stringRepresentation.split(".");
var bsSubdomain = "";
var bsDomain = "";
var bsNamespace = "";
if (arrayBsId.length === 3) {
_a = __read(arrayBsId, 3), bsSubdomain = _a[0], bsDomain = _a[1], bsNamespace = _a[2];
}
else if (arrayBsId.length === 2) {
_b = __read(arrayBsId, 2), bsDomain = _b[0], bsNamespace = _b[1];
}
else {
throw ErrorHelper.getPackageError(null, PackageErrorCode.BlockstackIdInvalidStructure);
}
if (bsNamespace !== DEFAULT_BLOCKSTACK_NAMESPACE) {
throw ErrorHelper.getPackageError(null, PackageErrorCode.BlockstackIdNamespaceValidation, bsNamespace);
}
return new BlockstackId({ domain: bsDomain, subdomain: bsSubdomain });
};
return BlockstackId;
}());
export { BlockstackId };
var CruxDomainId = /** @class */ (function () {
function CruxDomainId(domain) {
var _this = this;
this.toString = function () {
return _this.components.domain + "." + _this.components.namespace;
};
this.components = {
domain: domain,
namespace: DEFAULT_CRUX_NAMESPACE,
};
}
CruxDomainId.fromString = function (stringRepresentation) {
var _a;
var arrayCruxId = stringRepresentation.split(/[.@]/);
var cruxDomain = "";
var cruxNamespace = "";
if (arrayCruxId.length === 2) {
_a = __read(arrayCruxId, 2), cruxDomain = _a[0], cruxNamespace = _a[1]; // exodus.crux
}
else {
throw ErrorHelper.getPackageError(null, PackageErrorCode.CruxDomainInvalidStructure);
}
if (cruxNamespace !== DEFAULT_CRUX_NAMESPACE) {
throw ErrorHelper.getPackageError(null, PackageErrorCode.CruxDomainNamespaceValidation, cruxNamespace);
}
return new CruxDomainId(cruxDomain);
};
return CruxDomainId;
}());
export { CruxDomainId };
var BlockstackDomainId = /** @class */ (function () {
function BlockstackDomainId(domain) {
var _this = this;
this.toString = function () {
return _this.components.domain + "." + _this.components.namespace;
};
this.components = {
domain: domain,
namespace: DEFAULT_BLOCKSTACK_NAMESPACE,
};
}
BlockstackDomainId.fromString = function (stringRepresentation) {
var _a;
var arrayBsId = stringRepresentation.split(".");
var bsDomain = "";
var bsNamespace = "";
if (arrayBsId.length === 2) {
_a = __read(arrayBsId, 2), bsDomain = _a[0], bsNamespace = _a[1];
}
else {
throw ErrorHelper.getPackageError(null, PackageErrorCode.BlockstackDomainInvalidStructure);
}
if (bsNamespace !== DEFAULT_BLOCKSTACK_NAMESPACE) {
throw ErrorHelper.getPackageError(null, PackageErrorCode.BlockstackDomainNamespaceValidation, bsNamespace);
}
return new BlockstackDomainId(bsDomain);
};
return BlockstackDomainId;
}());
export { BlockstackDomainId };
var IdTranslator = /** @class */ (function () {
function IdTranslator() {
}
IdTranslator.cruxDomainToBlockstackDomain = function (cruxDomain) {
if (cruxDomain.components.namespace !== DEFAULT_CRUX_NAMESPACE) {
throw ErrorHelper.getPackageError(null, PackageErrorCode.CruxDomainNamespaceValidation, cruxDomain.components.namespace);
}
return new BlockstackDomainId(IdTranslator.cruxDomainStringToBlockstackDomainString(cruxDomain.components.domain));
};
IdTranslator.blockstackDomainToCruxDomain = function (blockstackDomain) {
if (blockstackDomain.components.namespace !== DEFAULT_BLOCKSTACK_NAMESPACE) {
throw ErrorHelper.getPackageError(null, PackageErrorCode.CruxDomainNamespaceValidation, blockstackDomain.components.namespace);
}
return new CruxDomainId(IdTranslator.blockstackDomainStringToCruxDomainString(blockstackDomain.components.domain));
};
IdTranslator.cruxIdToBlockstackId = function (cruxId) {
if (cruxId.components.namespace !== DEFAULT_CRUX_NAMESPACE) {
throw ErrorHelper.getPackageError(null, PackageErrorCode.CruxIdNamespaceValidation, cruxId.components.namespace);
}
return new BlockstackId({
domain: IdTranslator.cruxDomainStringToBlockstackDomainString(cruxId.components.domain),
subdomain: cruxId.components.subdomain,
});
};
IdTranslator.blockstackIdToCruxId = function (blockstackId) {
if (!blockstackId.components.subdomain) {
throw ErrorHelper.getPackageError(null, PackageErrorCode.BlockstackIdInvalidSubdomainForTranslation);
}
if (blockstackId.components.namespace !== DEFAULT_BLOCKSTACK_NAMESPACE) {
throw ErrorHelper.getPackageError(null, PackageErrorCode.BlockstackIdNamespaceValidation, blockstackId.components.namespace);
}
if (!blockstackId.components.domain.endsWith(CRUX_DOMAIN_SUFFIX)) {
throw ErrorHelper.getPackageError(null, PackageErrorCode.InvalidBlockstackDomainForTranslation);
}
return new CruxId({
domain: IdTranslator.blockstackDomainStringToCruxDomainString(blockstackId.components.domain),
subdomain: blockstackId.components.subdomain,
});
};
IdTranslator.blockstackDomainStringToCruxDomainString = function (domainString) {
var match = domainString.match(new RegExp("^(.+)_crux$"));
if (!match) {
throw ErrorHelper.getPackageError(null, PackageErrorCode.InvalidBlockstackDomainForTranslation);
}
return match[1];
};
IdTranslator.cruxDomainStringToBlockstackDomainString = function (cruxDomainString) {
return cruxDomainString + "_crux";
};
IdTranslator.cruxToBlockstack = function (crux) {
if (crux instanceof CruxDomainId) {
return IdTranslator.cruxDomainToBlockstackDomain(crux);
}
else {
return IdTranslator.cruxIdToBlockstackId(crux);
}
};
IdTranslator.blockstackToCrux = function (crux) {
if (crux instanceof BlockstackDomainId) {
return IdTranslator.blockstackDomainToCruxDomain(crux);
}
else {
return IdTranslator.blockstackIdToCruxId(crux);
}
};
return IdTranslator;
}());
export { IdTranslator };