├── .circleci └── config.yml ├── .gitignore ├── README.md ├── index.js ├── package.json └── yarn.lock /.circleci/config.yml: -------------------------------------------------------------------------------- 1 | version: 2.1 2 | 3 | defaults: &defaults 4 | working_directory: ~/repo 5 | docker: 6 | - image: circleci/node:10 7 | 8 | commands: 9 | install: 10 | steps: 11 | - checkout 12 | - restore_cache: 13 | keys: 14 | - dependency-cache-{{ checksum "package.json" }} 15 | - dependency-cache- 16 | - run: npm install 17 | - save_cache: 18 | key: dependency-cache-{{ checksum "package.json" }} 19 | paths: 20 | - node_modules 21 | 22 | jobs: 23 | retweet: 24 | <<: *defaults 25 | steps: 26 | - install 27 | - run: node index.js 28 | 29 | workflows: 30 | version: 2 31 | 32 | test: 33 | jobs: 34 | - retweet 35 | 36 | poll: 37 | triggers: 38 | - schedule: 39 | # Every day at EST 12:00PM (UTC 17:00PM) 40 | cron: "0 17 * * *" 41 | filters: 42 | branches: 43 | only: 44 | - master 45 | jobs: 46 | - retweet 47 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .DS_Store 3 | .env 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Retweeter 2 | 3 | > Auto retweet from another account using CircleCI scheduled workflows 4 | 5 | ## Setup 6 | 7 | Register a Twitter app and create a `.env` file: 8 | 9 | ``` 10 | CONSUMER_KEY=xxx 11 | CONSUMER_SECRET=xxx 12 | ACCESS_TOKEN=xxx 13 | ACCESS_TOKEN_SECRET=xxx 14 | 15 | TARGET_USERNAME=UserToRetweetFrom 16 | POLL_COUNT=10 17 | TWEET_MATCH="You should retweet this" # can be regex 18 | ``` 19 | 20 | Adjust poll rate in `.circleci/config.yml`. 21 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config() 2 | 3 | const Twitter = require('twitter') 4 | 5 | const client = new Twitter({ 6 | consumer_key: process.env.CONSUMER_KEY, 7 | consumer_secret: process.env.CONSUMER_SECRET, 8 | access_token_key: process.env.ACCESS_TOKEN, 9 | access_token_secret: process.env.ACCESS_TOKEN_SECRET 10 | }) 11 | 12 | const usernames = process.env.TARGET_USERNAME.split(',') 13 | const regexes = process.env.TWEET_MATCH.split(',').map(re => new RegExp(re)) 14 | 15 | async function retweet(username, regex) { 16 | const latest = await client.get('/statuses/user_timeline', { 17 | screen_name: username, 18 | count: parseInt(process.env.POLL_COUNT || 10, 10), 19 | include_rts: false, 20 | tweet_mode: 'extended' 21 | }) 22 | 23 | let hasMatch = false 24 | for (const tweet of latest) { 25 | if (regex.test(tweet.full_text)) { 26 | hasMatch = true 27 | console.log() 28 | console.log('!!! Matched tweet !!!') 29 | console.log({ 30 | text: tweet.full_text, 31 | created_at: tweet.created_at, 32 | id: tweet.id_str 33 | }) 34 | console.log() 35 | await client.post(`/statuses/retweet/${tweet.id_str}`, {}) 36 | break 37 | } else if (!process.env.CI) { 38 | console.log() 39 | console.log('Non-matching tweet:') 40 | console.log(tweet.full_text) 41 | console.log() 42 | } 43 | } 44 | 45 | if (!hasMatch) { 46 | console.log(`No matching tweets from @${username} with regex ${regex.source}.`) 47 | } 48 | } 49 | 50 | ;(async () => { 51 | let hasError = false 52 | for (let i = 0; i < usernames.length; i++) { 53 | try { 54 | await retweet(usernames[i], regexes[i]) 55 | } catch (e) { 56 | if (!Array.isArray(e) || e[0].code !== 327) { 57 | console.log('Error encountered!') 58 | console.log(e) 59 | hasError = true 60 | } else { 61 | console.log('Already retweeted.') 62 | } 63 | } 64 | } 65 | if (hasError) { 66 | process.exit(1) 67 | } 68 | })() 69 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "dotenv": "^6.2.0", 4 | "twitter": "^1.7.1" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | ajv@^6.5.5: 6 | version "6.6.2" 7 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.6.2.tgz#caceccf474bf3fc3ce3b147443711a24063cc30d" 8 | integrity sha512-FBHEW6Jf5TB9MGBgUUA9XHkTbjXYfAUjY43ACMfmdMRHniyoMHjHjzD50OK8LGDWQwp4rWEsIq5kEqq7rvIM1g== 9 | dependencies: 10 | fast-deep-equal "^2.0.1" 11 | fast-json-stable-stringify "^2.0.0" 12 | json-schema-traverse "^0.4.1" 13 | uri-js "^4.2.2" 14 | 15 | asn1@~0.2.3: 16 | version "0.2.4" 17 | resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" 18 | integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== 19 | dependencies: 20 | safer-buffer "~2.1.0" 21 | 22 | assert-plus@1.0.0, assert-plus@^1.0.0: 23 | version "1.0.0" 24 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" 25 | integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= 26 | 27 | asynckit@^0.4.0: 28 | version "0.4.0" 29 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 30 | integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= 31 | 32 | aws-sign2@~0.7.0: 33 | version "0.7.0" 34 | resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" 35 | integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= 36 | 37 | aws4@^1.8.0: 38 | version "1.8.0" 39 | resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" 40 | integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== 41 | 42 | bcrypt-pbkdf@^1.0.0: 43 | version "1.0.2" 44 | resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" 45 | integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= 46 | dependencies: 47 | tweetnacl "^0.14.3" 48 | 49 | caseless@~0.12.0: 50 | version "0.12.0" 51 | resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" 52 | integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= 53 | 54 | combined-stream@^1.0.6, combined-stream@~1.0.6: 55 | version "1.0.7" 56 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.7.tgz#2d1d24317afb8abe95d6d2c0b07b57813539d828" 57 | integrity sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w== 58 | dependencies: 59 | delayed-stream "~1.0.0" 60 | 61 | core-util-is@1.0.2: 62 | version "1.0.2" 63 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 64 | integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= 65 | 66 | dashdash@^1.12.0: 67 | version "1.14.1" 68 | resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" 69 | integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= 70 | dependencies: 71 | assert-plus "^1.0.0" 72 | 73 | deep-extend@^0.5.0: 74 | version "0.5.1" 75 | resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.5.1.tgz#b894a9dd90d3023fbf1c55a394fb858eb2066f1f" 76 | integrity sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w== 77 | 78 | delayed-stream@~1.0.0: 79 | version "1.0.0" 80 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 81 | integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= 82 | 83 | dotenv@^6.2.0: 84 | version "6.2.0" 85 | resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-6.2.0.tgz#941c0410535d942c8becf28d3f357dbd9d476064" 86 | integrity sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w== 87 | 88 | ecc-jsbn@~0.1.1: 89 | version "0.1.2" 90 | resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" 91 | integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= 92 | dependencies: 93 | jsbn "~0.1.0" 94 | safer-buffer "^2.1.0" 95 | 96 | extend@~3.0.2: 97 | version "3.0.2" 98 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" 99 | integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== 100 | 101 | extsprintf@1.3.0: 102 | version "1.3.0" 103 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" 104 | integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= 105 | 106 | extsprintf@^1.2.0: 107 | version "1.4.0" 108 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" 109 | integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= 110 | 111 | fast-deep-equal@^2.0.1: 112 | version "2.0.1" 113 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" 114 | integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= 115 | 116 | fast-json-stable-stringify@^2.0.0: 117 | version "2.0.0" 118 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" 119 | integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= 120 | 121 | forever-agent@~0.6.1: 122 | version "0.6.1" 123 | resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" 124 | integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= 125 | 126 | form-data@~2.3.2: 127 | version "2.3.3" 128 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" 129 | integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== 130 | dependencies: 131 | asynckit "^0.4.0" 132 | combined-stream "^1.0.6" 133 | mime-types "^2.1.12" 134 | 135 | getpass@^0.1.1: 136 | version "0.1.7" 137 | resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" 138 | integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= 139 | dependencies: 140 | assert-plus "^1.0.0" 141 | 142 | har-schema@^2.0.0: 143 | version "2.0.0" 144 | resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" 145 | integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= 146 | 147 | har-validator@~5.1.0: 148 | version "5.1.3" 149 | resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" 150 | integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== 151 | dependencies: 152 | ajv "^6.5.5" 153 | har-schema "^2.0.0" 154 | 155 | http-signature@~1.2.0: 156 | version "1.2.0" 157 | resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" 158 | integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= 159 | dependencies: 160 | assert-plus "^1.0.0" 161 | jsprim "^1.2.2" 162 | sshpk "^1.7.0" 163 | 164 | is-typedarray@~1.0.0: 165 | version "1.0.0" 166 | resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" 167 | integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= 168 | 169 | isstream@~0.1.2: 170 | version "0.1.2" 171 | resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" 172 | integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= 173 | 174 | jsbn@~0.1.0: 175 | version "0.1.1" 176 | resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" 177 | integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= 178 | 179 | json-schema-traverse@^0.4.1: 180 | version "0.4.1" 181 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 182 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 183 | 184 | json-schema@0.2.3: 185 | version "0.2.3" 186 | resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" 187 | integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= 188 | 189 | json-stringify-safe@~5.0.1: 190 | version "5.0.1" 191 | resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" 192 | integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= 193 | 194 | jsprim@^1.2.2: 195 | version "1.4.1" 196 | resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" 197 | integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= 198 | dependencies: 199 | assert-plus "1.0.0" 200 | extsprintf "1.3.0" 201 | json-schema "0.2.3" 202 | verror "1.10.0" 203 | 204 | mime-db@~1.37.0: 205 | version "1.37.0" 206 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.37.0.tgz#0b6a0ce6fdbe9576e25f1f2d2fde8830dc0ad0d8" 207 | integrity sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg== 208 | 209 | mime-types@^2.1.12, mime-types@~2.1.19: 210 | version "2.1.21" 211 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.21.tgz#28995aa1ecb770742fe6ae7e58f9181c744b3f96" 212 | integrity sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg== 213 | dependencies: 214 | mime-db "~1.37.0" 215 | 216 | oauth-sign@~0.9.0: 217 | version "0.9.0" 218 | resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" 219 | integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== 220 | 221 | performance-now@^2.1.0: 222 | version "2.1.0" 223 | resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" 224 | integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= 225 | 226 | psl@^1.1.24: 227 | version "1.1.31" 228 | resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.31.tgz#e9aa86d0101b5b105cbe93ac6b784cd547276184" 229 | integrity sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw== 230 | 231 | punycode@^1.4.1: 232 | version "1.4.1" 233 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" 234 | integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= 235 | 236 | punycode@^2.1.0: 237 | version "2.1.1" 238 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 239 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 240 | 241 | qs@~6.5.2: 242 | version "6.5.2" 243 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" 244 | integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== 245 | 246 | request@^2.72.0: 247 | version "2.88.0" 248 | resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" 249 | integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== 250 | dependencies: 251 | aws-sign2 "~0.7.0" 252 | aws4 "^1.8.0" 253 | caseless "~0.12.0" 254 | combined-stream "~1.0.6" 255 | extend "~3.0.2" 256 | forever-agent "~0.6.1" 257 | form-data "~2.3.2" 258 | har-validator "~5.1.0" 259 | http-signature "~1.2.0" 260 | is-typedarray "~1.0.0" 261 | isstream "~0.1.2" 262 | json-stringify-safe "~5.0.1" 263 | mime-types "~2.1.19" 264 | oauth-sign "~0.9.0" 265 | performance-now "^2.1.0" 266 | qs "~6.5.2" 267 | safe-buffer "^5.1.2" 268 | tough-cookie "~2.4.3" 269 | tunnel-agent "^0.6.0" 270 | uuid "^3.3.2" 271 | 272 | safe-buffer@^5.0.1, safe-buffer@^5.1.2: 273 | version "5.1.2" 274 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 275 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 276 | 277 | safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: 278 | version "2.1.2" 279 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 280 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 281 | 282 | sshpk@^1.7.0: 283 | version "1.16.0" 284 | resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.0.tgz#1d4963a2fbffe58050aa9084ca20be81741c07de" 285 | integrity sha512-Zhev35/y7hRMcID/upReIvRse+I9SVhyVre/KTJSJQWMz3C3+G+HpO7m1wK/yckEtujKZ7dS4hkVxAnmHaIGVQ== 286 | dependencies: 287 | asn1 "~0.2.3" 288 | assert-plus "^1.0.0" 289 | bcrypt-pbkdf "^1.0.0" 290 | dashdash "^1.12.0" 291 | ecc-jsbn "~0.1.1" 292 | getpass "^0.1.1" 293 | jsbn "~0.1.0" 294 | safer-buffer "^2.0.2" 295 | tweetnacl "~0.14.0" 296 | 297 | tough-cookie@~2.4.3: 298 | version "2.4.3" 299 | resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" 300 | integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ== 301 | dependencies: 302 | psl "^1.1.24" 303 | punycode "^1.4.1" 304 | 305 | tunnel-agent@^0.6.0: 306 | version "0.6.0" 307 | resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" 308 | integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= 309 | dependencies: 310 | safe-buffer "^5.0.1" 311 | 312 | tweetnacl@^0.14.3, tweetnacl@~0.14.0: 313 | version "0.14.5" 314 | resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" 315 | integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= 316 | 317 | twitter@^1.7.1: 318 | version "1.7.1" 319 | resolved "https://registry.yarnpkg.com/twitter/-/twitter-1.7.1.tgz#0762378f1dc1c050e48f666aca904e24b1a962f4" 320 | integrity sha1-B2I3jx3BwFDkj2ZqypBOJLGpYvQ= 321 | dependencies: 322 | deep-extend "^0.5.0" 323 | request "^2.72.0" 324 | 325 | uri-js@^4.2.2: 326 | version "4.2.2" 327 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" 328 | integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== 329 | dependencies: 330 | punycode "^2.1.0" 331 | 332 | uuid@^3.3.2: 333 | version "3.3.2" 334 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" 335 | integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== 336 | 337 | verror@1.10.0: 338 | version "1.10.0" 339 | resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" 340 | integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= 341 | dependencies: 342 | assert-plus "^1.0.0" 343 | core-util-is "1.0.2" 344 | extsprintf "^1.2.0" 345 | --------------------------------------------------------------------------------