arweave-account
Version:
Account protocol library on Arweave by Metaweave.xyz
117 lines (116 loc) • 4.96 kB
JavaScript
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const config_1 = __importDefault(require("./config"));
const constants_1 = require("./constants");
class Data {
static getURLfromURI(URI) {
let ressource;
const gc = config_1.default.gateway;
// Look for simple txids to be compatible with arweave account protocol v0.2
if (/^[a-zA-Z0-9\-_]{43}$/.test(URI))
return `${gc.protocol}://${gc.host}:${gc.port}/${URI}`;
// ar://<txid>
else if (ressource = URI.match(/^ar:\/\/([a-zA-Z0-9\-_]{43})$/))
return `${gc.protocol}://${gc.host}:${gc.port}/${ressource[1]}`;
// http URLs
else if (/^https?:\/\/.+$/.test(URI))
return URI;
// corrupted data (default avatar)
else
return `${gc.protocol}://${gc.host}:${gc.port}/${config_1.default.defaultAvatarURI}`;
}
static getUniqueHandle(addr, handleName) {
if (handleName && typeof handleName === 'string')
return `@${handleName}#${addr.slice(0, 3)}${addr.slice(addr.length - 3)}`;
else
return `${addr.slice(0, 5)}...${addr.slice(addr.length - 5)}`;
}
static isEncodedAccount(obj) {
return obj.handle !== undefined
&& obj.handle.length > 0;
}
static getAvatarURI(avatar) {
return avatar && avatar !== constants_1.NO_AVATAR_FLAG ? avatar : config_1.default.defaultAvatarURI;
}
static setAvatarURI(avatar) {
return avatar && avatar !== config_1.default.defaultAvatarURI ? avatar : constants_1.NO_AVATAR_FLAG;
}
static getBannerURI(banner) {
return banner && banner !== constants_1.NO_BANNER_FLAG ? banner : config_1.default.defaultBannerURI;
}
static setBannerURI(banner) {
return banner && banner !== config_1.default.defaultBannerURI ? banner : constants_1.NO_BANNER_FLAG;
}
static isProfile(obj) {
return obj.handleName !== undefined
&& obj.handleName.length > 0
&& obj.links !== undefined;
}
static getDefaultAccount(addr) {
return {
txid: null,
addr,
handle: this.getUniqueHandle(addr),
profile: {
handleName: "",
avatar: config_1.default.defaultAvatarURI,
avatarURL: this.getURLfromURI(config_1.default.defaultAvatarURI),
banner: config_1.default.defaultBannerURI,
bannerURL: this.getURLfromURI(config_1.default.defaultBannerURI),
name: "",
bio: "",
email: "",
links: {},
wallets: {}
}
};
}
static encodeForStorage(profile) {
let data = { handle: profile.handleName };
if (profile.avatar)
data = Object.assign(Object.assign({}, data), { avatar: this.setAvatarURI(profile.avatar) });
if (profile.banner)
data = Object.assign(Object.assign({}, data), { banner: this.setBannerURI(profile.banner) });
if (profile.name)
data = Object.assign(Object.assign({}, data), { name: profile.name });
if (profile.bio)
data = Object.assign(Object.assign({}, data), { bio: profile.bio });
if (profile.email)
data = Object.assign(Object.assign({}, data), { email: profile.email });
if (profile.links)
data = Object.assign(Object.assign({}, data), { links: profile.links });
if (profile.wallets)
data = Object.assign(Object.assign({}, data), { wallets: profile.wallets });
return data;
}
/*
* return default account object if no account or corrupted data
*/
static decode(txid, addr, data) {
/* default account data */
return this.isEncodedAccount(data)
?
{
txid,
addr,
handle: this.getUniqueHandle(addr, data.handle),
profile: {
handleName: data.handle ? data.handle : "",
avatar: this.getAvatarURI(data.avatar),
avatarURL: this.getURLfromURI(this.getAvatarURI(data.avatar)),
banner: this.getBannerURI(data.banner),
bannerURL: this.getURLfromURI(this.getBannerURI(data.banner)),
name: data.name ? data.name : "",
bio: data.bio ? data.bio : "",
email: data.email ? data.email : "",
links: data.links ? data.links : {},
wallets: data.wallets ? data.wallets : {}
}
}
: this.getDefaultAccount(addr);
}
}
exports.default = Data;
;