SYMBOL INDEX (290 symbols across 80 files) FILE: misc/playground/cli/spike/HackerNews/code.js function searchFor (line 3) | async function searchFor(searchTerm) { function captureCommentsId (line 18) | async function captureCommentsId(keyword) { function searchForStoriesComments (line 33) | async function searchForStoriesComments(keyword) { function dumpEverything (line 46) | async function dumpEverything(keyword) { function constructObjectArray (line 64) | async function constructObjectArray(keyword) { function spin (line 85) | function spin(array, window) { FILE: misc/playground/cli/spike/HackerNews/code2.js function searchFor (line 3) | async function searchFor() { function StoriesOnFrontPage (line 14) | async function StoriesOnFrontPage() { function frontComments (line 35) | async function frontComments() { function midcomments (line 70) | async function midcomments() { function lastlayercomments (line 112) | async function lastlayercomments() { function constructObjectArray (line 132) | async function constructObjectArray() { FILE: misc/playground/cli/spike/HackerNews/mainindex.js function news (line 4) | async function news(keyword) { FILE: misc/playground/cli/spike/HackerNews/renderer/pdf/createpdf.js function footerMarkup (line 4) | function footerMarkup() { function createPdf (line 21) | async function createPdf(outputPath, htmlContent) { FILE: misc/playground/cli/spike/HackerNews/renderer/pdf/index.js function generatePDF (line 5) | async function generatePDF(data, outputPath) { FILE: misc/playground/cli/spike/HackerNews/renderer/render-template.js function renderTemplate (line 11) | async function renderTemplate(data, templateName) { FILE: misc/playground/cli/spike/cli-epub/epub.js function generateEpub (line 18) | function generateEpub (directory) { FILE: misc/playground/cli/spike/json-to-pdf-cli/script.js function main (line 33) | function main() { function getHtml (line 42) | function getHtml(tweetData) { function getPdf (line 62) | function getPdf(htmlContent) { FILE: misc/playground/cli/spike/pdf-from-html-cli/create-pdf.js function createPdf (line 5) | async function createPdf(outputPath, htmlContent) { FILE: misc/playground/cli/spike/pdf-from-html-cli/index.js function main (line 6) | async function main() { FILE: misc/playground/cli/spike/pdf-from-html-cli/render-template.js function renderTemplate (line 6) | function renderTemplate(data, templateName) { FILE: misc/playground/cli/spike/phase2-server/api/index.js class API (line 3) | class API { method getTwitterThread (line 4) | static async getTwitterThread(req, res) { FILE: misc/playground/cli/spike/simple-pdf-to-json/json2pdf.js function displayTable (line 19) | function displayTable(tweets){ FILE: misc/playground/cli/spike/simple-pdf-to-json/simple-pdf-to-json/newjson2pdf.js function display (line 27) | function display(_tweet) { FILE: misc/playground/cli/spike/simple-pdf-to-json/simple-pdf-to-json/old codes/oldjson2pdf.js function displayTable (line 19) | function displayTable(tweets){ FILE: misc/playground/cli/spike/twindle-thread/script.js function main (line 2) | function main(){ FILE: misc/playground/cli/spike/twitter-api/script-version1-searchendpoint.js constant BEARER_TOKEN (line 4) | const BEARER_TOKEN = 'Bearer '; constant TWEET_LOOKUP_ENDPOINT (line 5) | const TWEET_LOOKUP_ENDPOINT = 'https://api.twitter.com/1.1/statuses/show... constant SEARCH_ENDPOINT (line 6) | const SEARCH_ENDPOINT = 'https://api.twitter.com/1.1/search/tweets.json?... constant SAMPLE_TWEET (line 7) | const SAMPLE_TWEET = 'https://twitter.com/AriBerman/status/1320872258085... function getTweetId (line 15) | function getTweetId(tweet_url) { function getScreenName (line 19) | function getScreenName(tweet_url) { function getURL (line 24) | function getURL(url_type) { function getTweets (line 35) | function getTweets(tweet_url) { function processResponse (line 43) | function processResponse(url_type, responseJSON) { function processTweetLookup (line 50) | function processTweetLookup(responseJSON) { function processSearchResponse (line 60) | function processSearchResponse(responseJSON) { function getTweetObject (line 74) | function getTweetObject(responseJSON) { function getTweetArray (line 78) | function getTweetArray(responseJSON) { function getUserObject (line 82) | function getUserObject(responseJSON) { function createCustomTweet (line 86) | function createCustomTweet(tweet_object, user_object) { function isTweetNotOlderThanSevenDays (line 96) | function isTweetNotOlderThanSevenDays(tweet) { function fetchURL (line 108) | async function fetchURL(url, url_type) { FILE: misc/playground/cli/spike/twitter-api/script-version1-usertimeline.js constant BEARER_TOKEN (line 4) | const BEARER_TOKEN = 'Bearer '; constant TWEET_LOOKUP_ENDPOINT (line 5) | const TWEET_LOOKUP_ENDPOINT = 'https://api.twitter.com/1.1/statuses/show... constant USER_TIMELINE_ENDPOINT (line 6) | const USER_TIMELINE_ENDPOINT = 'https://api.twitter.com/1.1/statuses/use... constant SAMPLE_TWEET (line 7) | const SAMPLE_TWEET = 'https://twitter.com/AriBerman/status/1320872258085... function getTweetId (line 15) | function getTweetId(tweet_url) { function getScreenName (line 19) | function getScreenName(tweet_url) { function getURL (line 24) | function getURL(url_type) { function getTweets (line 35) | function getTweets(tweet_url) { function processResponse (line 43) | function processResponse(url_type, responseJSON) { function processTweetLookup (line 50) | function processTweetLookup(responseJSON) { function processSearchResponse (line 60) | function processSearchResponse(responseJSON) { function getTweetObject (line 74) | function getTweetObject(responseJSON) { function getTweetArray (line 78) | function getTweetArray(responseJSON) { function getUserObject (line 82) | function getUserObject(responseJSON) { function createCustomTweet (line 86) | function createCustomTweet(tweet_object, user_object) { function isTweetNotOlderThanSevenDays (line 96) | function isTweetNotOlderThanSevenDays(tweet) { function fetchURL (line 108) | async function fetchURL(url, url_type) { FILE: misc/playground/cli/spike/twitter-api/script-version2-conversation.js constant BEARER_TOKEN (line 3) | const BEARER_TOKEN = 'Bearer '; constant ENDPOINT_TO_FETCH_CONVERSATION_ID (line 4) | const ENDPOINT_TO_FETCH_CONVERSATION_ID = 'https://api.twitter.com/2/twe... constant TWEET_FIELDS (line 5) | const TWEET_FIELDS = '&tweet.fields=attachments,author_id,context_annota... constant USER_FIELDS (line 6) | const USER_FIELDS = '&user.fields=created_at,description,entities,locati... constant MEDIA_FIELDS (line 7) | const MEDIA_FIELDS = '&media.fields=duration_ms,height,preview_image_url... constant POLL_FIELDS (line 8) | const POLL_FIELDS = '&poll.fields=duration_minutes,end_datetime,voting_s... constant PLACE_FIELDS (line 9) | const PLACE_FIELDS = '&place.fields=contained_within,country,country_cod... constant EXPANSIONS (line 10) | const EXPANSIONS = '&expansions=author_id'; constant ENDPOINT_TO_FETCH_CONVERSATION_TWEETS (line 11) | const ENDPOINT_TO_FETCH_CONVERSATION_TWEETS = 'https://api.twitter.com/2... constant SAMPLE_TWEET (line 12) | const SAMPLE_TWEET = 'https://twitter.com/AriBerman/status/1320872258085... function getTweetId (line 20) | function getTweetId(tweet_url) { function getScreenName (line 24) | function getScreenName(tweet_url) { function getURL (line 29) | function getURL(url_type) { function getTweets (line 41) | function getTweets(tweet_url) { function processResponse (line 49) | function processResponse(url_type, responseJSON) { function processTweetLookup (line 56) | function processTweetLookup(responseJSON) { function processSearchResponse (line 68) | function processSearchResponse(responseJSON) { function getTweetObject (line 82) | function getTweetObject(responseJSON) { function getTweetArray (line 86) | function getTweetArray(responseJSON) { function getUserObject (line 90) | function getUserObject(responseJSON) { function createCustomTweet (line 94) | function createCustomTweet(tweet_object, user_object) { function isTweetNotOlderThanSevenDays (line 106) | function isTweetNotOlderThanSevenDays(tweet) { function fetchURL (line 117) | async function fetchURL(url, url_type) { FILE: misc/twindle-thread/backend/common.d.ts type ProcessEnv (line 2) | interface ProcessEnv { FILE: misc/twindle-thread/backend/src/add-thread.js function addThread (line 13) | async function addThread(req, res) { function Response (line 136) | function Response(error, message, res) { FILE: misc/twindle-thread/backend/src/error/api.js class NetworkRequestError (line 3) | class NetworkRequestError extends TwitterError { method constructor (line 4) | constructor() { class TokenNotProvidedError (line 9) | class TokenNotProvidedError extends TwitterError { method constructor (line 10) | constructor() { class InvalidTokenError (line 15) | class InvalidTokenError extends TwitterError { method constructor (line 16) | constructor() { class BadTwitterRequestError (line 24) | class BadTwitterRequestError extends TwitterError { method constructor (line 25) | constructor() { class TwitterServiceError (line 33) | class TwitterServiceError extends TwitterError { method constructor (line 34) | constructor() { class TweetIDNotProvidedError (line 42) | class TweetIDNotProvidedError extends TwitterError { method constructor (line 43) | constructor() { class TweetDoesNotExist (line 48) | class TweetDoesNotExist extends TwitterError { method constructor (line 49) | constructor() { class UserScreenNameInvalid (line 54) | class UserScreenNameInvalid extends TwitterError { method constructor (line 55) | constructor() { FILE: misc/twindle-thread/backend/src/error/base.js class TwitterError (line 3) | class TwitterError extends UserError { method constructor (line 4) | constructor(name, message) { FILE: misc/twindle-thread/backend/src/error/validation.js class TweetDeletedError (line 3) | class TweetDeletedError extends TwitterError { method constructor (line 4) | constructor() { class TweetOlderThan7DaysError (line 9) | class TweetOlderThan7DaysError extends TwitterError { method constructor (line 10) | constructor() { class TweetNotFirstOfThreadError (line 15) | class TweetNotFirstOfThreadError extends TwitterError { method constructor (line 16) | constructor() { FILE: misc/twindle-thread/backend/src/get-thread-data.js function getThreadData (line 9) | async function getThreadData(req, res) { function Response (line 83) | async function Response(error, message, data, res) { FILE: misc/twindle-thread/backend/src/get-threads-list.js function getThreadsLists (line 15) | async function getThreadsLists(req, res) { function Response (line 130) | function Response(error, message, data, res) { FILE: misc/twindle-thread/backend/src/helpers/connection.js function dbInstance (line 8) | async function dbInstance() { FILE: misc/twindle-thread/backend/src/helpers/error.js class UserError (line 3) | class UserError extends Error { method constructor (line 9) | constructor(name, message) { FILE: misc/twindle-thread/backend/src/helpers/score.js function calculateTwitterScore (line 11) | function calculateTwitterScore(likes, retweets, repliesCount, dateCreate... FILE: misc/twindle-thread/backend/src/helpers/setup-db.sql type twitter_users (line 3) | CREATE TABLE IF NOT EXISTS twitter_users ( type twitter_threads (line 10) | CREATE TABLE IF NOT EXISTS twitter_threads ( FILE: misc/twindle-thread/backend/src/twitter/constants.js constant TWEET_FIELDS (line 1) | const TWEET_FIELDS = constant EXPANSIONS (line 5) | const EXPANSIONS = "&expansions=author_id,attachments.media_keys"; constant USER_FIELDS (line 6) | const USER_FIELDS = constant MEDIA_FIELDS (line 8) | const MEDIA_FIELDS = constant PLACE_FIELDS (line 10) | const PLACE_FIELDS = "&place.fields=contained_within,country,country_cod... constant POLL_FIELDS (line 11) | const POLL_FIELDS = "&poll.fields=duration_minutes,end_datetime,voting_s... constant MAX_RESULTS (line 12) | const MAX_RESULTS = "&max_results=100"; FILE: misc/twindle-thread/backend/src/twitter/twitter-endpoints/tweets.js constant BASE_ENDPOINT (line 5) | const BASE_ENDPOINT = "https://api.twitter.com/2/tweets?ids="; FILE: misc/twindle-thread/backend/src/twitter/types.d.ts type Mention (line 1) | interface Mention { type Hashtag (line 7) | interface Hashtag { type EntityUrl (line 13) | interface EntityUrl { type Attachments (line 32) | interface Attachments { type User (line 37) | interface User { type ConversationResponseData (line 66) | interface ConversationResponseData { type IncludesMedia (line 100) | interface IncludesMedia { type ConversationIncludes (line 109) | interface ConversationIncludes { type ConversationResponse (line 117) | interface ConversationResponse { type CustomMedia (line 128) | interface CustomMedia { type LinkWithImage (line 138) | interface LinkWithImage { type CustomTweetData (line 150) | interface CustomTweetData { type CustomTweets (line 162) | interface CustomTweets { FILE: misc/twindle-thread/src/constants.js constant API (line 3) | const API = { FILE: misc/twindle-thread/src/helpers/fetch.js function getFetch (line 13) | async function getFetch(url, params = {}, options = {}) { function postFetch (line 30) | async function postFetch(url, data, options = {}) { FILE: misc/twindle-thread/types.d.ts type IListItemData (line 1) | interface IListItemData { type IListItemUser (line 14) | interface IListItemUser { type HTMLProps (line 23) | interface HTMLProps { FILE: misc/twindle-web/index.js function addEmailToGoogleSheet (line 13) | function addEmailToGoogleSheet(event) { function validateEmail (line 30) | function validateEmail(email) { FILE: misc/twindle-web/scripts/testimonials.js function goFront (line 53) | async function goFront(d) { function goBack (line 69) | async function goBack(d) { FILE: misc/twindle-web/team_details/team_details.js function generateCard (line 3) | function generateCard(info) { function pushToDom (line 45) | async function pushToDom() { FILE: twindle-cli/src/cli.js function prepareCli (line 132) | function prepareCli() { function getCommandLineObject (line 137) | async function getCommandLineObject() { function validateGithubURL (line 266) | async function validateGithubURL(gitHubURL) { FILE: twindle-cli/src/common.d.ts type ProcessEnv (line 2) | interface ProcessEnv { type Console (line 25) | interface Console { FILE: twindle-cli/src/env.js constant BEARER_TOKEN (line 12) | const BEARER_TOKEN = "Bearer " + twitterAuthToken; FILE: twindle-cli/src/fileOpener.js function command (line 9) | function command() { FILE: twindle-cli/src/github/githubparse/app.js function getHtml (line 7) | async function getHtml(urlData) { FILE: twindle-cli/src/github/githubparse/convert.js function convertHTML (line 6) | function convertHTML(fetchURL) { FILE: twindle-cli/src/hacker-news/code.js function fetchItem (line 31) | async function fetchItem(url) { function getStories (line 48) | async function getStories(storyId, numTopComments, numCommentLevels) { function appendComments (line 84) | async function appendComments(parent, numTopComments, iterationLevel, nu... function getCommentResponses (line 104) | async function getCommentResponses(parent, numTopComments) { function getStoryObject (line 138) | async function getStoryObject(result) { function getCommentObject (line 179) | async function getCommentObject(result, iterationLevel) { function getUser (line 197) | async function getUser(author) { FILE: twindle-cli/src/helpers/error.js class UserError (line 3) | class UserError extends Error { method constructor (line 9) | constructor(name, message) { FILE: twindle-cli/src/helpers/logger.js function devLog (line 1) | function devLog(...args) { FILE: twindle-cli/src/index.js function main (line 20) | async function main() { function getDataFromSource (line 69) | async function getDataFromSource(cliObject) { function getTweets (line 91) | async function getTweets(cliObject) { function getDataFromGithub (line 110) | async function getDataFromGithub({ githubURL }) { function getDataFromHackernews (line 114) | async function getDataFromHackernews({ storyId, numTopComments, numComme... function getDataFromArticle (line 118) | async function getDataFromArticle({ articleUrl }) { function calculateFileName (line 122) | function calculateFileName(cliObject, data) { function calculateGenericFileName (line 134) | function calculateGenericFileName(cliObject, component1, component2) { function calculateFileNameForTwitter (line 141) | function calculateFileNameForTwitter(cliObject, data) { function calculateFileNameForGitHub (line 152) | function calculateFileNameForGitHub(cliObject, data) { function calculateFileNameForHackernews (line 167) | function calculateFileNameForHackernews(cliObject, data) { function calculateFileNameForArticle (line 182) | function calculateFileNameForArticle(cliObject, data) { function writeToMockFile (line 189) | async function writeToMockFile(cliObject, outputFilename, data) { FILE: twindle-cli/src/readability/index.js constant JSDOM (line 3) | const JSDOM = require("jsdom").JSDOM; function readURL (line 6) | async function readURL(testUrl) { function getJSDOM (line 22) | async function getJSDOM(url) { function getParsedArticle (line 27) | function getParsedArticle(windowDocument) { function getArticleJSON (line 32) | function getArticleJSON(article, url, windowDocument) { function getURLDomain (line 46) | function getURLDomain(url) { FILE: twindle-cli/src/renderer/epub/epub.js function generateEpub (line 18) | function generateEpub(directory) { FILE: twindle-cli/src/renderer/epub/index.js function generateEpub (line 23) | async function generateEpub(srcData, src, outputPath) { FILE: twindle-cli/src/renderer/epub/render-template.js function renderTemplate (line 14) | async function renderTemplate(data, src) { function renderTwitterTemplate (line 21) | async function renderTwitterTemplate(data) { function renderGithubTemplate (line 64) | async function renderGithubTemplate(data) { function renderHackernewsTemplate (line 108) | async function renderHackernewsTemplate(data) { function renderArticleTemplate (line 168) | async function renderArticleTemplate(data) { FILE: twindle-cli/src/renderer/mobi/index.js function generateMobi (line 12) | async function generateMobi(srcData, src, outputPath) { FILE: twindle-cli/src/renderer/pdf/create-pdf.js function footerMarkup (line 4) | function footerMarkup() { function createPdf (line 21) | async function createPdf(outputPath, htmlContent) { FILE: twindle-cli/src/renderer/pdf/index.js function generatePDF (line 6) | async function generatePDF(srcData, src, outputPath) { FILE: twindle-cli/src/renderer/pdf/render-template.js function renderTemplate (line 17) | async function renderTemplate(data, src) { function renderTwitterTemplate (line 24) | async function renderTwitterTemplate(data) { function renderGithubTemplate (line 48) | async function renderGithubTemplate(data) { function renderHackernewsTemplate (line 72) | async function renderHackernewsTemplate(data) { function renderArticleTemplate (line 102) | async function renderArticleTemplate(data) { FILE: twindle-cli/src/setup/init.js function onErr (line 77) | function onErr(err) { FILE: twindle-cli/src/twitter/api/constants.js constant TWEET_FIELDS (line 1) | const TWEET_FIELDS = constant EXPANSIONS (line 5) | const EXPANSIONS = "&expansions=author_id,attachments.media_keys"; constant USER_FIELDS (line 6) | const USER_FIELDS = constant MEDIA_FIELDS (line 8) | const MEDIA_FIELDS = constant PLACE_FIELDS (line 10) | const PLACE_FIELDS = "&place.fields=contained_within,country,country_cod... constant POLL_FIELDS (line 11) | const POLL_FIELDS = "&poll.fields=duration_minutes,end_datetime,voting_s... constant MAX_RESULTS (line 12) | const MAX_RESULTS = "&max_results=100"; FILE: twindle-cli/src/twitter/api/twitter-endpoints/search.js constant BASE_ENDPOINT (line 5) | const BASE_ENDPOINT = FILE: twindle-cli/src/twitter/api/twitter-endpoints/tweets.js constant BASE_ENDPOINT (line 5) | const BASE_ENDPOINT = "https://api.twitter.com/2/tweets?ids="; FILE: twindle-cli/src/twitter/api/twitter-endpoints/user_timeline.js constant BASE_ENDPOINT (line 4) | const BASE_ENDPOINT = FILE: twindle-cli/src/twitter/error/api.js class NetworkRequestError (line 3) | class NetworkRequestError extends TwitterError { method constructor (line 4) | constructor() { class TokenNotProvidedError (line 9) | class TokenNotProvidedError extends TwitterError { method constructor (line 10) | constructor() { class InvalidTokenError (line 15) | class InvalidTokenError extends TwitterError { method constructor (line 16) | constructor() { class BadTwitterRequestError (line 24) | class BadTwitterRequestError extends TwitterError { method constructor (line 25) | constructor() { class TwitterServiceError (line 33) | class TwitterServiceError extends TwitterError { method constructor (line 34) | constructor() { class TweetIDNotProvidedError (line 42) | class TweetIDNotProvidedError extends TwitterError { method constructor (line 43) | constructor() { class TweetDoesNotExist (line 48) | class TweetDoesNotExist extends TwitterError { method constructor (line 49) | constructor() { class UserScreenNameInvalid (line 54) | class UserScreenNameInvalid extends TwitterError { method constructor (line 55) | constructor() { FILE: twindle-cli/src/twitter/error/base.js class TwitterError (line 3) | class TwitterError extends UserError { method constructor (line 4) | constructor(name, message) { FILE: twindle-cli/src/twitter/error/validation.js class TweetDeletedError (line 3) | class TweetDeletedError extends TwitterError { method constructor (line 4) | constructor() { class TweetOlderThan7DaysError (line 9) | class TweetOlderThan7DaysError extends TwitterError { method constructor (line 10) | constructor() { class TweetNotFirstOfThreadError (line 15) | class TweetNotFirstOfThreadError extends TwitterError { method constructor (line 16) | constructor() { FILE: twindle-cli/src/twitter/transformations/helpers.js function fixLineBreaks (line 65) | function fixLineBreaks(tweet) { FILE: twindle-cli/src/twitter/transformations/rich-rendering.js function renderMedia (line 17) | function renderMedia(tweetObj) { function renderOutsiderLinks (line 85) | async function renderOutsiderLinks(tweetObj, embedded) { function renderMentionsHashtags (line 185) | function renderMentionsHashtags({ text = "", mentions = [], hashtags = [... function fixUserDescription (line 219) | function fixUserDescription(user) { function _renderRichTweets (line 256) | async function _renderRichTweets(tweetObj, embedded = false) { function sanitizeForHandlebars (line 274) | function sanitizeForHandlebars(tweetObj) { function _renderEmbeddedTweets (line 295) | async function _renderEmbeddedTweets(tweetObj, token) { function renderRichTweets (line 356) | async function renderRichTweets(tweetObj, token, isUserTimeline) { FILE: twindle-cli/src/twitter/transformations/search-endpoint.js function processSearchResponse (line 11) | async function processSearchResponse(responseJSON, token) { function processReplies (line 46) | async function processReplies(responseJSON, token) { function updateReplies (line 76) | async function updateReplies(responseJSON, replies, finalTweetsData, tok... FILE: twindle-cli/src/twitter/transformations/tweet-endpoint.js function processTweetLookup (line 13) | async function processTweetLookup(responseJSON, token) { FILE: twindle-cli/src/twitter/transformations/tweets-array-endpoint.js function processTweetsArray (line 10) | async function processTweetsArray(responseJSON, token) { function processReplies (line 70) | async function processReplies(responseJSON, token) { function updateReplies (line 90) | async function updateReplies(responseJSON, replies, finalTweetsData, tok... FILE: twindle-cli/src/twitter/transformations/user-timeline-endpoint.js function processUserTweets (line 12) | async function processUserTweets(screenName, responseJSON, token) { FILE: twindle-cli/src/twitter/twitter.js function counter (line 24) | function counter({ initial, final }) { function getTweetsFromUser (line 77) | async function getTweetsFromUser(screenName, token) { FILE: twindle-cli/src/twitter/validations/tweet-endpoint.js function processResponse (line 39) | function processResponse(response) { FILE: twindle-cli/src/types/twitter.ts type Mention (line 1) | interface Mention { type Hashtag (line 7) | interface Hashtag { type EntityUrl (line 13) | interface EntityUrl { type Attachments (line 32) | interface Attachments { type User (line 37) | interface User { type ConversationResponseData (line 66) | interface ConversationResponseData { type IncludesMedia (line 101) | interface IncludesMedia { type ConversationIncludes (line 110) | interface ConversationIncludes { type ConversationResponse (line 118) | interface ConversationResponse { type CustomMedia (line 129) | type CustomMedia = { type LinkWithImage (line 139) | interface LinkWithImage { type Answer (line 151) | interface Answer extends Pick {} type Reply (line 153) | interface Reply extends Pick { type CustomTweetData (line 159) | interface CustomTweetData { type CommonData (line 173) | interface CommonData { type CustomTweets (line 180) | interface CustomTweets { FILE: twindle-cli/src/utils/env.js function getBearerToken (line 11) | function getBearerToken() { function getTwindleLibraryPath (line 18) | function getTwindleLibraryPath() { function getEmailConfig (line 24) | function getEmailConfig() { FILE: twindle-cli/src/utils/helpers.js function isValidEmail (line 11) | function isValidEmail(email) { FILE: twindle-cli/src/utils/image.js function encodeImage (line 8) | async function encodeImage(url) { FILE: twindle-cli/src/utils/library.js function createLibraryIfNotExists (line 18) | function createLibraryIfNotExists() { FILE: twindle-cli/src/utils/send-email.js function sendMail (line 16) | async function sendMail({ subject, emailTo, attachments }) { FILE: twindle-cli/src/utils/send-to-kindle.js function sendToKindle (line 6) | async function sendToKindle(kindleEmail, filePath) {