@oap75/api
Version:
JavaScript API for Subsocial blockchain.
122 lines (121 loc) • 4.3 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getNewIdsFromEvent = exports.resolveCidOfContent = exports.isValidIpfsCid = exports.asIpfsCid = exports.isIpfs = exports.getPostIdFromExtension = exports.getSharedPostId = exports.isAccountId = exports.asAccountId = exports.getUniqueIds = void 0;
const classes_1 = require("@subsocial/types/substrate/classes");
const types_1 = require("@subsocial/types");
const utils_1 = require("@subsocial/utils");
const registry_1 = __importDefault(require("@subsocial/types/substrate/registry"));
const types_2 = require("@polkadot/types");
const log = (0, utils_1.newLogger)('Subsocial Api Utils');
const getUniqueIds = (ids) => {
if ((0, utils_1.isEmptyArray)(ids))
return [];
const knownIds = new Set();
const uniqueIds = [];
ids.forEach(id => {
if (typeof (id === null || id === void 0 ? void 0 : id.toString) === 'function') {
const idStr = id.toString();
if (!knownIds.has(idStr)) {
knownIds.add(idStr);
uniqueIds.push(id);
}
}
});
return uniqueIds;
};
exports.getUniqueIds = getUniqueIds;
function asAccountId(id) {
try {
if (id instanceof types_2.GenericAccountId) {
return id;
}
else if ((0, utils_1.nonEmptyStr)(id)) {
return new types_2.GenericAccountId(registry_1.default, id);
}
return undefined;
}
catch (_a) {
return undefined;
}
}
exports.asAccountId = asAccountId;
function isAccountId(id) {
return !!asAccountId(id);
}
exports.isAccountId = isAccountId;
const getSharedPostId = (postData) => {
var _a;
if (!postData)
return undefined;
const ext = (_a = postData === null || postData === void 0 ? void 0 : postData.struct) === null || _a === void 0 ? void 0 : _a.extension;
const sharedPostId = (ext === null || ext === void 0 ? void 0 : ext.isSharedPost) ? ext.asSharedPost : undefined;
sharedPostId && log.debug('Shared post id:', sharedPostId.toString());
return sharedPostId;
};
exports.getSharedPostId = getSharedPostId;
/** Return original post id from shared post or root post id if this post is a comment. */
const getPostIdFromExtension = (postData) => {
if (!postData)
return undefined;
const ext = postData.struct.extension;
if (ext) {
const { isSharedPost, isComment } = ext;
if (isComment || ext.value instanceof classes_1.Comment) {
return ext.asComment.rootPostId;
}
else if (isSharedPost) {
return ext.asSharedPost;
}
}
return undefined;
};
exports.getPostIdFromExtension = getPostIdFromExtension;
const isIpfs = (content) => content && (content.isIpfs || content.IPFS);
exports.isIpfs = isIpfs;
const asIpfsCid = (cid) => {
if (!cid)
return undefined;
if (cid instanceof types_1.CID) {
return cid;
}
else if (typeof cid === 'string') {
return new types_1.CID(cid);
}
else if (typeof (cid === null || cid === void 0 ? void 0 : cid.toU8a) === 'function') {
return new types_1.CID(cid.toString());
}
else {
throw new Error('Wrong type of IPFS CID. Valid types are: string | CID | IpfsCid');
}
};
exports.asIpfsCid = asIpfsCid;
const isValidIpfsCid = (cid) => {
try {
return !!(0, exports.asIpfsCid)(cid);
}
catch (_a) {
return false;
}
};
exports.isValidIpfsCid = isValidIpfsCid;
const resolveCidOfContent = (content) => ((0, utils_1.isDef)(content) && content.isIpfs)
? content.asIpfs.toHuman()
: undefined;
exports.resolveCidOfContent = resolveCidOfContent;
function getNewIdsFromEvent(txResult, eventType = 'Created') {
const newIds = [];
txResult.events.find(event => {
const { event: { data, method } } = event;
if (method.indexOf(eventType) >= 0) {
const [/* owner */ , ...ids] = data.toArray();
newIds.push(...ids);
return true;
}
return false;
});
return newIds;
}
exports.getNewIdsFromEvent = getNewIdsFromEvent;