@tracking-exposed/data
Version:
A common data layer for tracking exposed.
93 lines (76 loc) • 3.25 kB
JavaScript
;
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