UNPKG

@sugarcube/plugin-facebook

Version:
72 lines (60 loc) 2.05 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.feed = exports.user = exports.page = exports.fetchByAppToken = void 0; var _fp = require("lodash/fp"); var _core = require("@sugarcube/core"); var _requestPromise = _interopRequireDefault(require("request-promise")); var _entities = require("./entities"); var _fields = require("./fields"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const { curry2, curry3, curry4 } = _core.utils; const FB_API_URL = "https://graph.facebook.com"; const FB_API_VERSION = "v2.10"; const fetchApi = curry3("fetchApi", (accessToken, endpoint, qs) => { const opts = { uri: [FB_API_URL, FB_API_VERSION, endpoint].join("/"), json: true, qs: (0, _fp.merge)(qs, { access_token: accessToken }) }; return (0, _requestPromise.default)(opts); }); const fetchEdge = async (edge, fields, limit, fetcher, id) => { let results = []; let offset = 0; for (;;) { // eslint-disable-next-line no-await-in-loop const data = await fetcher(`${id}/${edge}`, { fields, offset, limit: 100 }).then((0, _fp.get)("data")); results = results.concat(data); offset = results.length; if (data.length === 0) break; if (limit !== 0 && results.length >= limit) break; } return results; }; const fetchByAppToken = curry4("fetchByAppToken", (appId, appSecret, endpoint, qs) => { const accessToken = `${appId}|${appSecret}`; return fetchApi(accessToken, endpoint, qs); }); exports.fetchByAppToken = fetchByAppToken; const page = curry2("page", (fetcher, id) => fetcher(id, { fields: _fields.pageFields }).then(_entities.pageEntity)); exports.page = page; const user = curry2("user", (fetcher, id) => fetcher(id, { fields: _fields.userFields }).then(_entities.userEntity)); exports.user = user; const feed = curry3("feed", (limit, fetcher, id) => fetchEdge("feed", _fields.postFields, limit, fetcher, id).then(_entities.feedEntity)); exports.feed = feed;