UNPKG

@sugarcube/plugin-twitter

Version:
146 lines (126 loc) 4.82 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "isTwitterTweet", { enumerable: true, get: function () { return _sourceTypes.isTwitterTweet; } }); Object.defineProperty(exports, "isTwitterFeed", { enumerable: true, get: function () { return _sourceTypes.isTwitterFeed; } }); Object.defineProperty(exports, "parseTweetId", { enumerable: true, get: function () { return _sourceTypes.parseTweetId; } }); Object.defineProperty(exports, "parseTwitterUser", { enumerable: true, get: function () { return _sourceTypes.parseTwitterUser; } }); Object.defineProperty(exports, "normalizeTwitterTweetUrl", { enumerable: true, get: function () { return _sourceTypes.normalizeTwitterTweetUrl; } }); Object.defineProperty(exports, "normalizeTwitterUserUrl", { enumerable: true, get: function () { return _sourceTypes.normalizeTwitterUserUrl; } }); exports.default = exports.recurse = exports.throttle = exports.cursorify = exports.request = exports.twitterDate = exports.paramsString = void 0; var _fp = require("lodash/fp"); var _dashp = require("dashp"); var _pify = _interopRequireDefault(require("pify")); var _twitter = _interopRequireDefault(require("twitter")); var _moment = _interopRequireDefault(require("moment")); var _sourceTypes = require("@sugarcube/source-types"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const mapObj = _fp.map.convert({ cap: false }); const paramsString = (0, _fp.flow)([mapObj((k, v) => `${k}=${v}`), (0, _fp.join)("&")]); exports.paramsString = paramsString; const twitterDate = ds => (0, _moment.default)(ds, "ddd MMM D HH:mm:ss Z YYYY"); exports.twitterDate = twitterDate; const client = (0, _fp.curry)((consumerKey, consumerSecret, accessToken, accessSecret) => { const t = new _twitter.default({ consumer_key: consumerKey, consumer_secret: consumerSecret, access_token_key: accessToken, access_token_secret: accessSecret }); return { getAsync: (0, _pify.default)(t.get).bind(t) }; }); const request = (0, _fp.curry)((cfg, baseUrl, params) => client((0, _fp.get)("twitter.consumer_key", cfg), (0, _fp.get)("twitter.consumer_secret", cfg), (0, _fp.get)("twitter.consumer_access_token_key", cfg), (0, _fp.get)("twitter.consumer_access_token_secret", cfg)).getAsync(baseUrl, params)); exports.request = request; const cursorify = fn => { const cursor = -1; const cursorFields = ["next_cursor", "next_cursor_str", "previous_cursor", "previous_cursor_str"]; const iter = (params, nextCursor, results = []) => { const cursorParams = (0, _fp.merge)(params, { cursor: nextCursor }); return fn(cursorParams).then(result => { // We stop the recursion when the cursor is set to 0. See twitter API. if (result.next_cursor === 0) { const final = (0, _fp.concat)(results, result); return (0, _fp.flow)([(0, _fp.map)((0, _fp.omit)(cursorFields)), (0, _fp.reduce)((memo, rs) => (0, _fp.concat)(memo, (0, _fp.keys)(rs)), []), _fp.uniq, (0, _fp.reduce)((memo, k) => (0, _fp.flow)([_fp.compact, (0, _fp.pluck)(k), _fp.flatten])(final), [])])(final); } return iter(params, result.next_cursor_str, (0, _fp.concat)(results, result)); }); }; return params => iter(params, cursor); }; exports.cursorify = cursorify; const throttle = (0, _fp.curry)((ms, fn) => args => fn(args).then((0, _dashp.delay)(ms))); exports.throttle = throttle; const recurse = (0, _fp.curry)((maxDepth, key, fn) => { const iter = (params, depth, recurseFrom = null) => fn(params).then(results => { if (depth < maxDepth) { return (0, _dashp.foldP)((memo, result) => { const nextDepth = depth + 1; const target = result[key]; // eslint-disable-next-line promise/no-nesting return iter((0, _fp.merge)(params, { [key]: target }), nextDepth, target).then(r => (0, _fp.concat)(memo, (0, _fp.mergeAll)([result, { _sc_graph_depth: depth, _sc_graph_from: recurseFrom }, (0, _fp.map)((0, _fp.merge)({ _sc_graph_depth: nextDepth, _sc_graph_from: target }), r)]))); }, [], results); } return results; }); return params => iter(params, 0, params[key]); }); exports.recurse = recurse; var _default = { paramsString, twitterDate, request, cursorify, throttle, recurse, parseTweetId: _sourceTypes.parseTweetId, parseTwitterUser: _sourceTypes.parseTwitterUser, normalizeTwitterTweetUrl: _sourceTypes.normalizeTwitterTweetUrl, normalizeTwitterUserUrl: _sourceTypes.normalizeTwitterUserUrl, isTwitterFeed: _sourceTypes.isTwitterFeed, isTwitterTweet: _sourceTypes.isTwitterTweet }; exports.default = _default;