@sugarcube/plugin-facebook
Version:
Fetch data from facebook for sugarcube.
72 lines (60 loc) • 2.05 kB
JavaScript
;
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;