@sugarcube/plugin-twitter
Version:
Query the Twitter API as a SugarCube plugin.
146 lines (126 loc) • 4.82 kB
JavaScript
"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;