UNPKG

@tracking-exposed/data

Version:
93 lines (76 loc) 3.25 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = exports.toRss = exports.fetchByEntities = exports.addEntities = exports.store = exports.fetch = void 0; var _rss = _interopRequireDefault(require("rss")); var _mongo = require("./mongo"); var _utils = require("./utils"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; } const fetch = async (mongo, id) => { const impression = await (0, _mongo.findOneBy)(mongo, "impressions2", { id }); if (impression == null) return Promise.resolve(null); const html = await (0, _mongo.findOneBy)(mongo, "htmls2", { id: impression.htmlId }); return Promise.resolve(Object.assign({}, impression, { html })); }; exports.fetch = fetch; const store = async (mongo, data) => { const { html } = data, impression = _objectWithoutProperties(data, ["html"]); await Promise.all([(0, _mongo.upsertOne)(mongo, "impressions2", { id: impression.id }, impression), (0, _mongo.upsertOne)(mongo, "htmls2", { id: html.id }, html)]); }; exports.store = store; const addEntities = async (mongo, id, entities) => (0, _mongo.addToSet)(mongo, "impressions2", { id }, "entities", entities); exports.addEntities = addEntities; const fetchByEntities = async (mongo, entities) => { const impressions = await (0, _mongo.findByMember)(mongo, "impressions2", "entities", entities); return Promise.all(impressions.map(async impression => { const html = await (0, _mongo.findOneBy)(mongo, "htmls2", { id: impression.htmlId }); return Object.assign({}, impression, { html }); })); }; exports.fetchByEntities = fetchByEntities; const toRss = (url, feedHeader, impressions) => { const feed = new _rss.default(feedHeader); impressions.forEach(impression => { if (impression.html != null && impression.html.permaLink != null && impression.html.text != null) { feed.item({ title: impression.html.source != null ? `From ${impression.html.source}` : `Missing author name ${impression.html.permaLink}`, description: impression.html.text, url: impression.html && impression.html.permaLink.startsWith("/") ? `https://www.facebook.com${impression.html.permaLink}` : impression.html.permaLink, guid: (0, _utils.sha1)(impression.html.text), date: impression.html.savingTime }); } }); return feed.xml(); }; exports.toRss = toRss; var _default = { fetch, store, addEntities, fetchByEntities, toRss }; exports.default = _default; //# sourceMappingURL=impressions.js.map