UNPKG

@subsocial/api

Version:
295 lines (294 loc) 13.6 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __rest = (this && this.__rest) || function (s, e) { var t = {}; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p]; if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]]; } return t; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.BasicSubsocialApi = void 0; const inner_1 = require("./inner"); const loadPostStructs_1 = require("../utils/loadPostStructs"); const utils_1 = require("@subsocial/utils"); class BasicSubsocialApi extends inner_1.InnerSubsocialApi { constructor() { super(...arguments); this.structFinders = { findSpaces: this.findPublicSpaces.bind(this), findPosts: this.findPublicPosts.bind(this), findProfileSpaces: this.findProfileSpaces.bind(this) }; } /** * Find and load an array of information about spaces (both for Unlisted and Public spaces) from the Subsocial blockchain and IPFS by a given array of * space `ids`. * * @param ids - An array of the ids of the desired spaces. * * @returns An array of data about desired spaces aggregated from the Subsocial blockchain and IPFS. If there are no * spaces corresponding to the given array of `ids`, an empty array is returned. */ findAllSpaces(ids) { return __awaiter(this, void 0, void 0, function* () { return this.findSpaces({ ids }); }); } /** * Find and load an array of information about public spaces from Subsocial blockchain and IPFS by a given array of * space `ids`. * * A space is considered public if it meets the following conditions: * - The `hidden` field on its blockchain structure is `false`. * - There is a corresponding JSON file that represents the space's content on IPFS. * * @param ids - An array of the ids of the desired spaces. * * @returns An array of data about desired spaces aggregated from Subsocial blockchain and IPFS. If no corresponding * spaces to given array of `ids`, an empty array is returned. */ findPublicSpaces(ids) { return __awaiter(this, void 0, void 0, function* () { return this.findSpaces({ ids, visibility: 'onlyPublic', withContentOnly: true }); }); } /** * Find and load an array of information about unlisted spaces from Subsocial blockchain and IPFS by a given array of * space `ids`. * * Space is considered unlisted if it meets either of these conditions: * - The `hidden` field on it's blockchain structure is `true`. * - Or there is no corresponding JSON file that represents the space's content on IPFS. * * @param ids - An array of ids of desired spaces. * * @returns An array of data about desired spaces aggregated from Subsocial blockchain and IPFS. If no corresponding * spaces to given array of `ids`, an empty array is returned. */ findUnlistedSpaces(ids) { return __awaiter(this, void 0, void 0, function* () { return this.findSpaces({ ids, visibility: 'onlyUnlisted' }); }); } /** * Find and load an array of information about posts (both Unlisted and Public posts) from the Subsocial blockchain and IPFS by a given array of * post `ids`. * * * @param ids - An array of the ids of the desired posts. * * @returns An array of data about desired posts aggregated from the Subsocial blockchain and IPFS. If there are no * posts corresponding to the given array of `ids`, an empty array is returned. */ findAllPosts(ids) { return __awaiter(this, void 0, void 0, function* () { return this.findPosts({ ids }); }); } /** * Find and load an array of information about public posts from Subsocial blockchain and IPFS by a given array of * post `ids`. * * A post is considered public if it meets the following conditions: * - The `hidden` field on its blockchain structure is `false`. * - There is a corresponding JSON file that represents the post's content on IPFS. * * @param ids - An array of the ids of the desired posts. * * @returns An array of data about desired posts aggregated from Subsocial blockchain and IPFS. If no corresponding * posts to given array of `ids`, an empty array is returned. */ findPublicPosts(ids) { return __awaiter(this, void 0, void 0, function* () { return this.findPosts({ ids, visibility: 'onlyPublic', withContentOnly: true }); }); } /** * Find and load an array of information about unlisted posts from Subsocial blockchain and IPFS by a given array of * post `ids`. * * Post is considered unlisted if it meets either of these conditions: * - The `hidden` field on it's blockchain structure is `true`. * - Or there is no corresponding JSON file that represents the post's content on IPFS. * * @param ids - An array of ids of desired posts * * @returns An array of data about desired posts aggregated from Subsocial blockchain and IPFS. If no corresponding * posts to given array of `ids`, an empty array is returned. */ findUnlistedPosts(ids) { return __awaiter(this, void 0, void 0, function* () { return this.findPosts({ ids, visibility: 'onlyUnlisted' }); }); } /** Find and load posts with their extension and owner's profile (if defined). */ findPostsWithSomeDetails(filter) { return __awaiter(this, void 0, void 0, function* () { const posts = yield this.findPosts(filter); return (0, loadPostStructs_1.loadAndSetPostRelatedStructs)(posts, this.structFinders, filter); }); } findPublicPostsWithSomeDetails(filter) { return __awaiter(this, void 0, void 0, function* () { return this.findPostsWithSomeDetails(Object.assign(Object.assign({}, filter), { visibility: 'onlyPublic' })); }); } findUnlistedPostsWithSomeDetails(filter) { return __awaiter(this, void 0, void 0, function* () { return this.findPostsWithSomeDetails(Object.assign(Object.assign({}, filter), { visibility: 'onlyUnlisted' })); }); } findPostsWithAllDetails({ ids, visibility }) { return __awaiter(this, void 0, void 0, function* () { return this.findPostsWithSomeDetails({ ids, withSpace: true, withOwner: true, visibility }); }); } findPublicPostsWithAllDetails(ids) { return __awaiter(this, void 0, void 0, function* () { return this.findPostsWithAllDetails({ ids, visibility: 'onlyPublic' }); }); } findUnlistedPostsWithAllDetails(ids) { return __awaiter(this, void 0, void 0, function* () { return this.findPostsWithAllDetails({ ids, visibility: 'onlyUnlisted' }); }); } /** * Find and load an array of information about profile spaces from the Subsocial blockchain and IPFS by a given array of * account ids `accountsIds`. * * A profile space is just a space set to a profile. * * @param accountsIds - An array of the account ids related to the desired profile spaces * * @returns An array of data about desired profile spaces aggregated from the Subsocial blockchain and IPFS. If there are no * profile spaces corresponding to the given array of `spaceIds`, an empty array is returned. */ findProfileSpaces(accountIds) { return __awaiter(this, void 0, void 0, function* () { const spaceIds = yield this.substrate.profileSpaceIdsByAccounts(accountIds); return this.findAllSpaces(spaceIds); }); } // Functions that return a single element /** * Find and load information about a public space from Subsocial blockchain and IPFS using space id. * * Space is considered public if it meets these conditions: * - The `hidden` field on it's blockchain structure is `false`. * - And there is a corresponding JSON file that represents the space's content on IPFS. * * @param id - Id of desired space. * * @returns Data about desired space aggregated from blockchain and IPFS. If no corresponding space to given id, * `undefined` is returned. */ findPublicSpace(id) { return __awaiter(this, void 0, void 0, function* () { return (0, utils_1.getFirstOrUndefined)(yield this.findPublicSpaces([id])); }); } /** * Find and load information about an unlisted space from blockchain and from IPFS by a given space id. * * Space is considered unlisted if it meets either of these conditions: * - The `hidden` field on it's blockchain structure is `true`. * - Or there is no corresponding JSON file that represents the space's content on IPFS. * * @param id - Id of desired space. * * @returns Data about a desired space aggregated from blockchain and IPFS. If no corresponding space to given id, * `undefined` is returned. */ findUnlistedSpace(id) { return __awaiter(this, void 0, void 0, function* () { return (0, utils_1.getFirstOrUndefined)(yield this.findUnlistedSpaces([id])); }); } /** * Find and load information about a public post from Subsocial blockchain and IPFS using post id. * * Post is considered public if it meets the next conditions: * - The `hidden` field on it's blockchain structure is `false`. * - And there is a corresponding JSON file that represents the post's content on IPFS. * * @param id - Id of desired post. * * @returns Data about desired post aggregated from blockchain and IPFS. If no corresponding post to given id, * `undefined` is returned. */ findPublicPost(id) { return __awaiter(this, void 0, void 0, function* () { return (0, utils_1.getFirstOrUndefined)(yield this.findPublicPosts([id])); }); } /** * Find and load information about an unlisted post from blockchain and from IPFS by a given post id. * * Post is considered unlisted if it meets either of these conditions: * - The `hidden` field on it's blockchain structure is `true`. * - Or there is no corresponding JSON file that represents the post's content on IPFS. * * @param id - Id of desired post. * * @returns Data about desired post aggregated from blockchain and IPFS. If no corresponding post to given id, * `undefined` is returned. */ findUnlistedPost(id) { return __awaiter(this, void 0, void 0, function* () { return (0, utils_1.getFirstOrUndefined)(yield this.findUnlistedPosts([id])); }); } findPostWithSomeDetails(_a) { var { id } = _a, opts = __rest(_a, ["id"]); return __awaiter(this, void 0, void 0, function* () { return (0, utils_1.getFirstOrUndefined)(yield this.findPostsWithSomeDetails(Object.assign({ ids: [id] }, opts))); }); } findPublicPostWithSomeDetails(_a) { var { id } = _a, opts = __rest(_a, ["id"]); return __awaiter(this, void 0, void 0, function* () { return (0, utils_1.getFirstOrUndefined)(yield this.findPublicPostsWithSomeDetails(Object.assign({ ids: [id] }, opts))); }); } findUnlistedPostWithSomeDetails(_a) { var { id } = _a, opts = __rest(_a, ["id"]); return __awaiter(this, void 0, void 0, function* () { return (0, utils_1.getFirstOrUndefined)(yield this.findUnlistedPostsWithSomeDetails(Object.assign({ ids: [id] }, opts))); }); } findPostWithAllDetails(id) { return __awaiter(this, void 0, void 0, function* () { return (0, utils_1.getFirstOrUndefined)(yield this.findPostsWithAllDetails({ ids: [id] })); }); } findPublicPostWithAllDetails(id) { return __awaiter(this, void 0, void 0, function* () { return (0, utils_1.getFirstOrUndefined)(yield this.findPublicPostsWithAllDetails([id])); }); } findUnlistedPostWithAllDetails(id) { return __awaiter(this, void 0, void 0, function* () { return (0, utils_1.getFirstOrUndefined)(yield this.findUnlistedPostsWithAllDetails([id])); }); } findProfileSpace(accountId) { return __awaiter(this, void 0, void 0, function* () { return (0, utils_1.getFirstOrUndefined)(yield this.findProfileSpaces([accountId])); }); } } exports.BasicSubsocialApi = BasicSubsocialApi;