├── .editorconfig ├── .github └── workflows │ └── codeql-analysis.yml ├── .gitignore ├── CHANGELOG.md ├── LICENSE ├── README.md ├── auto.js ├── decrypter.sh ├── files └── .gitkeep ├── index.js ├── lib ├── fileHelper.js ├── gmail.js ├── googleAPIWrapper.js └── questions.js ├── package-lock.json └── package.json /.editorconfig: -------------------------------------------------------------------------------- 1 | 2 | root = true 3 | 4 | [*] 5 | indent_style = space 6 | indent_size = 2 7 | charset = utf-8 8 | trim_trailing_whitespace = true 9 | insert_final_newline = true 10 | end_of_line = lf 11 | # editorconfig-tools is unable to ignore longs strings or urls 12 | max_line_length = off 13 | 14 | [CHANGELOG.md] 15 | indent_size = false -------------------------------------------------------------------------------- /.github/workflows/codeql-analysis.yml: -------------------------------------------------------------------------------- 1 | # For most projects, this workflow file will not need changing; you simply need 2 | # to commit it to your repository. 3 | # 4 | # You may wish to alter this file to override the set of languages analyzed, 5 | # or to provide custom queries or build logic. 6 | # 7 | # ******** NOTE ******** 8 | # We have attempted to detect the languages in your repository. Please check 9 | # the `language` matrix defined below to confirm you have the correct set of 10 | # supported CodeQL languages. 11 | # 12 | name: "CodeQL" 13 | 14 | on: 15 | push: 16 | branches: [ master ] 17 | pull_request: 18 | # The branches below must be a subset of the branches above 19 | branches: [ master ] 20 | schedule: 21 | - cron: '36 12 * * 5' 22 | 23 | jobs: 24 | analyze: 25 | name: Analyze 26 | runs-on: ubuntu-latest 27 | permissions: 28 | actions: read 29 | contents: read 30 | security-events: write 31 | 32 | strategy: 33 | fail-fast: false 34 | matrix: 35 | language: [ 'javascript' ] 36 | # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ] 37 | # Learn more: 38 | # https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed 39 | 40 | steps: 41 | - name: Checkout repository 42 | uses: actions/checkout@v2 43 | 44 | # Initializes the CodeQL tools for scanning. 45 | - name: Initialize CodeQL 46 | uses: github/codeql-action/init@v1 47 | with: 48 | languages: ${{ matrix.language }} 49 | # If you wish to specify custom queries, you can do so here or in a config file. 50 | # By default, queries listed here will override any specified in a config file. 51 | # Prefix the list here with "+" to use these queries and those in the config file. 52 | # queries: ./path/to/local/query, your-org/your-repo/queries@main 53 | 54 | # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). 55 | # If this step fails, then you should remove it and run the build manually (see below) 56 | - name: Autobuild 57 | uses: github/codeql-action/autobuild@v1 58 | 59 | # ℹ️ Command-line programs to run using the OS shell. 60 | # 📚 https://git.io/JvXDl 61 | 62 | # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines 63 | # and modify them (or add more) to build your code if your project 64 | # uses a compiled language 65 | 66 | #- run: | 67 | # make bootstrap 68 | # make release 69 | 70 | - name: Perform CodeQL Analysis 71 | uses: github/codeql-action/analyze@v1 72 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | 8 | # Runtime data 9 | pids 10 | *.pid 11 | *.seed 12 | *.pid.lock 13 | 14 | # Directory for instrumented libs generated by jscoverage/JSCover 15 | lib-cov 16 | 17 | # Coverage directory used by tools like istanbul 18 | coverage 19 | 20 | # nyc test coverage 21 | .nyc_output 22 | 23 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 24 | .grunt 25 | 26 | # Bower dependency directory (https://bower.io/) 27 | bower_components 28 | 29 | # node-waf configuration 30 | .lock-wscript 31 | 32 | # Compiled binary addons (http://nodejs.org/api/addons.html) 33 | build/Release 34 | 35 | # Dependency directories 36 | node_modules/ 37 | jspm_packages/ 38 | 39 | # Typescript v1 declaration files 40 | typings/ 41 | 42 | # Optional npm cache directory 43 | .npm 44 | 45 | # Optional eslint cache 46 | .eslintcache 47 | 48 | # Optional REPL history 49 | .node_repl_history 50 | 51 | # Output of 'npm pack' 52 | *.tgz 53 | 54 | # Yarn Integrity file 55 | .yarn-integrity 56 | 57 | # dotenv environment variables file 58 | .env 59 | /files/*.* 60 | token.json 61 | credentials.json -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # 1.1.0 2 | - Used v38.0.0 of Google APIs -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 Munir Khakhi 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Gmail Bulk Attachment Downloader 2 | 3 | Currently gmail is not providing to download attachments from different different mails with in single click. Using this program you can do it now. 4 | 5 | You need `credentials.json` before start this utility. You can get it from https://developers.google.com/gmail/api/quickstart/nodejs by enable GMAIL API. 6 | Save file `credentials.json` in the root folder of the project 7 | 8 | Clone Project 9 | 10 | `git clone https://github.com/munir131/attachment-downloader` 11 | 12 | Install dependencies 13 | 14 | `npm i` 15 | 16 | Run program in interactive mode 17 | 18 | `node index.js` 19 | 20 | Run program in non-interactive mode 21 | 22 | `node index.js --label LABEL_NAME` 23 | 24 | ## Contributors 25 | 26 | Thanks to all the people who already contributed! 27 | 28 | 29 | 30 | 31 | 32 | Made with [contrib.rocks](https://contrib.rocks). 33 | -------------------------------------------------------------------------------- /auto.js: -------------------------------------------------------------------------------- 1 | const _ = require('lodash'); 2 | const atob = require('atob'); 3 | const fs = require('fs'); 4 | const inquirer = require('inquirer'); 5 | const path = require('path'); 6 | const ora = require('ora'); 7 | const yargs = require('yargs/yargs') 8 | const { hideBin } = require('yargs/helpers') 9 | 10 | const AuthFetcher = require('./lib/googleAPIWrapper'); 11 | const FileHelper = require('./lib/fileHelper'); 12 | const GmailHelper = require('./lib/gmail'); 13 | const { time } = require('console'); 14 | const mkdirp = require('mkdirp'); 15 | 16 | var RateLimiter = require('limiter').RateLimiter; 17 | var limiter = new RateLimiter(300, 'minute'); 18 | 19 | let pageCounter = 1; 20 | let listCounter = 0; 21 | let mailCounter = 0; 22 | let attachmentCounter = 0; 23 | 24 | let gmail; 25 | let coredata = {}; 26 | 27 | String.prototype.replaceAll = function (search, replacement) { 28 | var target = this; 29 | return target.split(search).join(replacement); 30 | } 31 | const argv = yargs(hideBin(process.argv)) 32 | .option('ext', { 33 | type: 'string', 34 | description: 'File extention which we want to save' 35 | }) 36 | .option('from', { 37 | type: 'string', 38 | description: 'Download files only from mail which come from given mail id' 39 | }) 40 | .option('fy', { 41 | type: 'boolean', 42 | description: 'Financial year wise folder structure' 43 | }) 44 | .argv 45 | 46 | const spinner = ora('Reading 1 page'); 47 | AuthFetcher.getAuthAndGmail(main); 48 | 49 | async function main(auth, gmailInstance) { 50 | 51 | let labels; 52 | let nextPageToken = null; 53 | gmail = gmailInstance; 54 | spinner.start() 55 | do { 56 | nextPageToken = await workflow(auth, spinner, nextPageToken) 57 | // In case of rate limit hit 58 | // await sleep(30000) 59 | } while (nextPageToken) 60 | spinner.stop() 61 | console.log("Check your folder :)") 62 | } 63 | 64 | function sleep(ms) { 65 | return new Promise(resolve => setTimeout(resolve, ms)); 66 | } 67 | 68 | async function workflow(auth, spinner, nextPageToken = null) { 69 | let token; 70 | return getMailIdsFromPage(auth, 500, nextPageToken) 71 | .then((response) => { 72 | coredata.mailList = response.ids; 73 | if (response.token) { 74 | token = response.token 75 | } 76 | return GmailHelper.fetchMailsByMailIds(gmail, auth, spinner, response.ids); 77 | }) 78 | .then((mails) => { 79 | coredata.attachments = pluckAttachments(mails); 80 | return fetchAndSaveAttachments(auth, coredata.attachments); 81 | }) 82 | .then(() => { 83 | return token 84 | }) 85 | .catch((e) => console.log(e)); 86 | } 87 | 88 | async function fetchAndSaveAttachments(auth, attachments) { 89 | let results = []; 90 | let promises = []; 91 | let processed = 0; 92 | let counter = 0; 93 | spinner.text = "Fetching attachment from mails" 94 | if (attachments.length > 0) { 95 | for (index in attachments) { 96 | if (attachments[index].id) { 97 | promises.push(fetchAndSaveAttachment(auth, attachments[index])); 98 | counter++; 99 | processed++; 100 | if (counter === 100) { 101 | attachs = await Promise.all(promises); 102 | _.merge(results, attachs); 103 | promises = []; 104 | counter = 0; 105 | } 106 | } 107 | } 108 | attachs = await Promise.all(promises); 109 | _.merge(results, attachs); 110 | } 111 | return results; 112 | } 113 | 114 | function fetchAndSaveAttachment(auth, attachment) { 115 | return new Promise((resolve, reject) => { 116 | gmail.users.messages.attachments.get({ 117 | auth: auth, 118 | userId: 'me', 119 | messageId: attachment.mailId, 120 | id: attachment.id 121 | }, function (err, response) { 122 | if (err) { 123 | console.log('The API returned an error: ' + err); 124 | reject(err); 125 | } 126 | if (!response) { 127 | console.log('Empty response: ' + response); 128 | reject(response); 129 | } 130 | var data = response.data.data.replaceAll('-', '+'); 131 | data = data.replaceAll('_', '/'); 132 | var content = fixBase64(data); 133 | resolve(content); 134 | }); 135 | }) 136 | .then((content) => { 137 | dirPath = FileHelper.getParentDir(argv, __dirname, attachment.time); 138 | mkdirp.sync(dirPath) 139 | var fileName = path.resolve(dirPath, attachment.name); 140 | return FileHelper.isFileExist(fileName) 141 | .then((isExist) => { 142 | if (isExist) { 143 | return FileHelper.getNewFileName(fileName); 144 | } 145 | return fileName; 146 | }) 147 | .then((availableFileName) => { 148 | spinner.text = ++attachmentCounter + " attachemets are saved" 149 | return FileHelper.saveFile(availableFileName, content); 150 | }) 151 | }) 152 | } 153 | 154 | 155 | function pluckAttachments(mails) { 156 | return _.compact(_.flatten(_.map(mails, (m) => { 157 | if (!m.data || !m.data.payload || !m.data.payload.parts) { 158 | return undefined; 159 | } 160 | return _.map(m.data.payload.parts, (p) => { 161 | if (!p.body || !p.body.attachmentId) { 162 | return undefined; 163 | } 164 | const attachment = { 165 | mailId: m.data.id, 166 | name: p.filename, 167 | id: p.body.attachmentId, 168 | time: m.data.internalDate 169 | }; 170 | return attachment; 171 | }) 172 | }))); 173 | } 174 | 175 | function getMailIdsFromPage(auth, maxResults = 500, nextPageToken) { 176 | let messageIds = []; 177 | const response = { 178 | token: nextPageToken, 179 | ids: [] 180 | } 181 | return new Promise((resolve, reject) => { 182 | const listOptions = { 183 | auth: auth, 184 | userId: 'me', 185 | maxResults: maxResults, 186 | pageToken: nextPageToken ? nextPageToken : undefined 187 | } 188 | if (argv.from) { 189 | listOptions.q = `from: ${argv.from}`; 190 | } 191 | gmail.users.messages.list(listOptions, function (err, response) { 192 | if (err) { 193 | console.log('The API returned an error: ' + err); 194 | reject(err); 195 | } 196 | if (response.data && response.data.nextPageToken) { 197 | messageIds = messageIds.concat(response.data.messages) 198 | spinner.text = "Reading page: " + ++pageCounter 199 | response.ids = messageIds 200 | response.token = response.data.nextPageToken 201 | resolve(response) 202 | } else { 203 | response.ids = response.data.messages 204 | response.token = undefined 205 | spinner.text = "All pages are read" 206 | resolve(response) 207 | } 208 | }); 209 | }); 210 | } 211 | 212 | function fixBase64(binaryData) { 213 | const base64str = binaryData// base64 string from thr response of server 214 | const binary = atob(base64str.replace(/\s/g, ''));// decode base64 string, remove space for IE compatibility 215 | const len = binary.length; // get binary length 216 | const buffer = new ArrayBuffer(len); // create ArrayBuffer with binary length 217 | const view = new Uint8Array(buffer); // create 8-bit Array 218 | 219 | // save unicode of binary data into 8-bit Array 220 | for (let i = 0; i < len; i++) { 221 | view[i] = binary.charCodeAt(i); 222 | } 223 | 224 | return view; 225 | } 226 | -------------------------------------------------------------------------------- /decrypter.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | DECRYPTED_FOLDER="decrypted" 4 | mkdir $DECRYPTED_FOLDER 5 | 6 | for f in *.pdf 7 | do 8 | qpdf --decrypt --password="$1" "$f" "$DECRYPTED_FOLDER/$f" 9 | done 10 | 11 | # https://www.ethanmick.com/author/ethan/ 12 | # https://www.ethanmick.com/decrypt-all-pdfs-in-a-directory/ -------------------------------------------------------------------------------- /files/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/munir131/attachment-downloader/2c4b76f66ebe1d395a44cfad300de3067e0b5a84/files/.gitkeep -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | const _ = require('lodash'); 2 | const atob = require('atob'); 3 | const fs = require('fs'); 4 | const inquirer = require('inquirer'); 5 | const path = require('path'); 6 | const ora = require('ora'); 7 | 8 | const AuthFetcher = require('./lib/googleAPIWrapper'); 9 | const FileHelper = require('./lib/fileHelper'); 10 | const { time } = require('console'); 11 | let pageCounter = 1; 12 | 13 | let messageIds = []; 14 | let gmail; 15 | String.prototype.replaceAll = function (search, replacement) { 16 | var target = this; 17 | return target.split(search).join(replacement); 18 | } 19 | 20 | const spinner = ora('Reading 1 page'); 21 | AuthFetcher.getAuthAndGmail(main); 22 | 23 | /** 24 | * Lists the labels in the user's account. 25 | * 26 | * @param {google.auth.OAuth2} auth An authorized OAuth2 client. 27 | */ 28 | function listLabels(auth, gmail) { 29 | return new Promise((resolve, reject) => { 30 | gmail.users.labels.list({ 31 | auth: auth, 32 | userId: 'me', 33 | }, (err, response) => { 34 | if (err) { 35 | console.log('The API returned an error: ' + err); 36 | reject(err); 37 | } 38 | resolve(response); 39 | }); 40 | }) 41 | } 42 | 43 | function main(auth, gmailInstance) { 44 | let labels; 45 | let coredata = {}; 46 | let workflow; 47 | gmail = gmailInstance; 48 | if (detectCommandOptions()) { 49 | workflow = scanForLabelOption; 50 | } else { 51 | workflow = defaultBehaviour; 52 | } 53 | workflow(auth, gmail, coredata) 54 | .then((mailList) => { 55 | coredata.mailList = mailList; 56 | return fetchMailsByMailIds(auth, mailList); 57 | }) 58 | .then((mails) => { 59 | 60 | coredata.attachments = pluckAllAttachments(mails); 61 | return fetchAndSaveAttachments(auth, coredata.attachments); 62 | }) 63 | .then(() => { 64 | spinner.stop() 65 | console.log('Done'); 66 | }) 67 | .catch((e) => console.log(e)); 68 | } 69 | 70 | const detectCommandOptions = () => process.argv.length > 2; 71 | 72 | const defaultBehaviour = (auth, gmail, coredata) => { 73 | return askForFilter() 74 | .then((option) => { 75 | if (option === 'label') { 76 | return listLabels(auth, gmail) 77 | .then((response) => { 78 | labels = response.data.labels; 79 | return labels; 80 | }) 81 | .then(askForLabel) 82 | .then((selectedLabel) => { 83 | coredata.label = selectedLabel; 84 | spinner.start() 85 | return getListOfMailIdByLabel(auth, coredata.label.id, 200); 86 | }); 87 | } else if (option === 'from') { 88 | return askForMail() 89 | .then((mailId) => { 90 | spinner.start() 91 | return getListOfMailIdByFromId(auth, mailId, 50); 92 | }); 93 | } else { 94 | spinner.start() 95 | return getAllMails(auth, 500) 96 | } 97 | }); 98 | }; 99 | 100 | const scanForLabelOption = (auth, gmail) => { 101 | return new Promise((resolve, reject) => { 102 | const paramsNumber = process.argv.length; 103 | if (paramsNumber == 4) { 104 | const optionName = process.argv[2]; 105 | if (optionName === '--label') { 106 | resolve(process.argv[3]); 107 | } 108 | } 109 | reject("WARNING: expected --label LABEL_NAME option") 110 | }) 111 | .then(labelName => { 112 | return listLabels(auth, gmail) 113 | .then(response => { 114 | const labelObj = _.find(response.data.labels, l => l.name === labelName); 115 | return getListOfMailIdByLabel(auth, labelObj.id, 200); 116 | }); 117 | }); 118 | }; 119 | 120 | async function fetchAndSaveAttachments(auth, attachments) { 121 | let results = []; 122 | let promises = []; 123 | let counter = 0; 124 | let processed = 0; 125 | spinner.text = "Fetching attachment from mails" 126 | for (index in attachments) { 127 | if (attachments[index].id) { 128 | promises.push(fetchAndSaveAttachment(auth, attachments[index])); 129 | counter++; 130 | processed++; 131 | if (counter === 100) { 132 | attachs = await Promise.all(promises); 133 | _.merge(results, attachs); 134 | promises = []; 135 | counter = 0; 136 | spinner.text = processed + " attachemets are saved" 137 | } 138 | } 139 | } 140 | attachs = await Promise.all(promises); 141 | _.merge(results, attachs); 142 | return results; 143 | } 144 | 145 | function fetchAndSaveAttachment(auth, attachment) { 146 | return new Promise((resolve, reject) => { 147 | gmail.users.messages.attachments.get({ 148 | auth: auth, 149 | userId: 'me', 150 | messageId: attachment.mailId, 151 | id: attachment.id 152 | }, function (err, response) { 153 | if (err) { 154 | console.log('The API returned an error: ' + err); 155 | reject(err); 156 | } 157 | if (!response) { 158 | console.log('Empty response: ' + response); 159 | reject(response); 160 | } 161 | var data = response.data.data.replaceAll('-', '+'); 162 | data = data.replaceAll('_', '/'); 163 | var content = fixBase64(data); 164 | resolve(content); 165 | }); 166 | }) 167 | .then((content) => { 168 | var fileName = path.resolve(__dirname, 'files', attachment.name); 169 | return FileHelper.isFileExist(fileName) 170 | .then((isExist) => { 171 | if (isExist) { 172 | return FileHelper.getNewFileName(fileName); 173 | } 174 | return fileName; 175 | }) 176 | .then((availableFileName) => { 177 | return FileHelper.saveFile(availableFileName, content); 178 | }) 179 | }) 180 | } 181 | 182 | 183 | function pluckAllAttachments(mails) { 184 | return _.compact(_.flatten(_.map(mails, (m) => { 185 | if (!m.data || !m.data.payload || !m.data.payload.parts) { 186 | return undefined; 187 | } 188 | if (m.data.payload.mimeType === "multipart/signed") { 189 | return _.flatten(_.map(m.data.payload.parts, (p) => { 190 | if (p.mimeType !== "multipart/mixed") { 191 | return undefined; 192 | } 193 | return _.map(p.parts, (pp) => { 194 | if (!pp.body || !pp.body.attachmentId) { 195 | return undefined; 196 | } 197 | const attachment = { 198 | mailId: m.data.id, 199 | name: pp.filename, 200 | id: pp.body.attachmentId 201 | }; 202 | return attachment; 203 | }) 204 | })) 205 | } else { 206 | return _.map(m.data.payload.parts, (p) => { 207 | if (!p.body || !p.body.attachmentId) { 208 | return undefined; 209 | } 210 | const attachment = { 211 | mailId: m.data.id, 212 | name: p.filename, 213 | id: p.body.attachmentId 214 | }; 215 | return attachment; 216 | }) 217 | } 218 | }))); 219 | } 220 | 221 | function askForLabel(labels) { 222 | return inquirer.prompt([ 223 | { 224 | type: 'list', 225 | name: 'label', 226 | message: 'Choose label for filter mails:', 227 | choices: _.map(labels, 'name'), 228 | filter: val => _.find(labels, l => l.name === val) 229 | } 230 | ]) 231 | .then(answers => answers.label); 232 | } 233 | 234 | function askForFilter(labels) { 235 | return inquirer.prompt([ 236 | { 237 | type: 'list', 238 | name: 'option', 239 | message: 'How do you like to filter', 240 | choices: ['Using from email Id', 'Using label', "All"], 241 | filter: val => { 242 | if (val === 'Using from email Id') { 243 | return 'from'; 244 | } else if (val === 'Using label') { 245 | return 'label'; 246 | } else { 247 | return 'all' 248 | } 249 | } 250 | } 251 | ]) 252 | .then(answers => answers.option); 253 | } 254 | 255 | function askForMail() { 256 | return inquirer.prompt([ 257 | { 258 | type: 'input', 259 | name: 'from', 260 | message: 'Enter from mailId:' 261 | } 262 | ]) 263 | .then(answers => answers.from); 264 | } 265 | 266 | function getListOfMailIdByLabel(auth, labelId, maxResults = 500, nextPageToken) { 267 | return new Promise((resolve, reject) => { 268 | gmail.users.messages.list({ 269 | auth: auth, 270 | userId: 'me', 271 | labelIds: labelId, 272 | maxResults: maxResults, 273 | pageToken: nextPageToken ? nextPageToken : undefined 274 | }, function (err, response) { 275 | if (err) { 276 | console.log('The API returned an error: ' + err); 277 | reject(err); 278 | } 279 | if (response.data) { 280 | messageIds = messageIds.concat(response.data.messages) 281 | if (response.data.nextPageToken) { 282 | spinner.text = "Reading page: " + ++pageCounter 283 | resolve(getListOfMailIdByLabel(auth, labelId, maxResults, response.data.nextPageToken)) 284 | } 285 | } 286 | spinner.text = "All pages are read" 287 | resolve(messageIds) 288 | }); 289 | }); 290 | } 291 | 292 | function getAllMails(auth, maxResults = 500, nextPageToken) { 293 | return new Promise((resolve, reject) => { 294 | gmail.users.messages.list({ 295 | auth: auth, 296 | userId: 'me', 297 | maxResults: maxResults, 298 | pageToken: nextPageToken ? nextPageToken : undefined 299 | }, function (err, response) { 300 | if (err) { 301 | console.log('The API returned an error: ' + err); 302 | reject(err); 303 | } 304 | if (response.data) { 305 | messageIds = messageIds.concat(response.data.messages) 306 | if (response.data.nextPageToken) { 307 | spinner.text = "Reading page: " + ++pageCounter 308 | resolve(getAllMails(auth, maxResults, response.data.nextPageToken)) 309 | } 310 | } 311 | spinner.text = "All pages are read" 312 | resolve(messageIds) 313 | }); 314 | }); 315 | } 316 | 317 | function getListOfMailIdByFromId(auth, mailId, maxResults = 500) { 318 | return new Promise((resolve, reject) => { 319 | gmail.users.messages.list({ 320 | auth: auth, 321 | userId: 'me', 322 | q: 'from:' + mailId, 323 | maxResults: maxResults 324 | }, function (err, response) { 325 | if (err) { 326 | console.log('The API returned an error: ' + err); 327 | reject(err); 328 | } 329 | resolve(response.data.messages); 330 | }); 331 | }); 332 | } 333 | 334 | async function fetchMailsByMailIds(auth, mailList) { 335 | let results = []; 336 | let promises = []; 337 | let counter = 0; 338 | let processed = 0; 339 | spinner.text = "Fetching each mail" 340 | for (index in mailList) { 341 | if (mailList[index]) { 342 | promises.push(getMail(auth, mailList[index].id)); 343 | counter++; 344 | processed++; 345 | if (counter === 100) { 346 | mails = await Promise.all(promises); 347 | results = results.concat(mails) 348 | promises = []; 349 | counter = 0; 350 | spinner.text = processed + " mails fetched" 351 | await sleep(3000) 352 | } 353 | } 354 | }; 355 | mails = await Promise.all(promises); 356 | results = results.concat(mails) 357 | return results; 358 | } 359 | 360 | function sleep(ms) { 361 | spinner.text = `sleeping for ${ms/1000} s` 362 | return new Promise(resolve => setTimeout(resolve, ms)); 363 | } 364 | 365 | function getMail(auth, mailId) { 366 | return new Promise((resolve, reject) => { 367 | gmail.users.messages.get({ 368 | userId: 'me', 369 | id: mailId, 370 | auth, 371 | }, (err, response) => { 372 | if (err) { 373 | reject(err); 374 | } 375 | resolve(response); 376 | }) 377 | }) 378 | } 379 | 380 | function fixBase64(binaryData) { 381 | const base64str = binaryData// base64 string from thr response of server 382 | const binary = atob(base64str.replace(/\s/g, ''));// decode base64 string, remove space for IE compatibility 383 | const len = binary.length; // get binary length 384 | const buffer = new ArrayBuffer(len); // create ArrayBuffer with binary length 385 | const view = new Uint8Array(buffer); // create 8-bit Array 386 | 387 | // save unicode of binary data into 8-bit Array 388 | for (let i = 0; i < len; i++) { 389 | view[i] = binary.charCodeAt(i); 390 | } 391 | 392 | return view; 393 | } 394 | -------------------------------------------------------------------------------- /lib/fileHelper.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs'); 2 | const path = require('path'); 3 | 4 | module.exports.getNewFileName = function (fileName) { 5 | const chunks = fileName.split('.') 6 | if (chunks.length > 1) { 7 | const ext = `.${chunks[chunks.length - 1]}` 8 | return chunks.slice(0, chunks.length - 1).join('.') + ' (' + Date.now() + ')' + ext; 9 | } 10 | return fileName + ' (' + Date.now() + ')'; 11 | 12 | } 13 | 14 | module.exports.saveFile = function (fileName, content) { 15 | return new Promise((resolve, reject) => { 16 | fs.writeFile(fileName, content, function (err) { 17 | if (err) { 18 | reject(err); 19 | } 20 | resolve(`${fileName} file was saved!`); 21 | }); 22 | }); 23 | } 24 | 25 | module.exports.isFileExist = function (fileName) { 26 | return new Promise((resolve, reject) => { 27 | fs.stat(fileName, (err) => { 28 | if (err) { 29 | resolve(false); 30 | } 31 | resolve(true); 32 | }) 33 | }); 34 | } 35 | 36 | module.exports.getParentDir = function (argv, baseDir, time) { 37 | const date = new Date(Number(time)); 38 | let dirPath = path.resolve(baseDir, 'files') 39 | if (argv.from) { 40 | dirPath = path.resolve(baseDir, 'files', argv.from) 41 | } 42 | if (argv.fy) { 43 | dirPath = path.resolve(dirPath, String(date.getFullYear())) 44 | } 45 | return dirPath 46 | } 47 | -------------------------------------------------------------------------------- /lib/gmail.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Lists the labels in the user's account. 3 | * 4 | * @param {google.auth.OAuth2} auth An authorized OAuth2 client. 5 | */ 6 | let counter = 0; 7 | 8 | module.exports.listLabels = function (auth, gmail) { 9 | return new Promise((resolve, reject) => { 10 | gmail.users.labels.list({ 11 | auth: auth, 12 | userId: 'me', 13 | }, (err, response) => { 14 | if (err) { 15 | console.log('The API returned an error: ' + err); 16 | reject(err); 17 | } 18 | resolve(response); 19 | }); 20 | }) 21 | } 22 | const getMail = function (gmail, auth, mailId) { 23 | 24 | return new Promise((resolve, reject) => { 25 | gmail.users.messages.get({ 26 | userId: 'me', 27 | id: mailId, 28 | auth, 29 | }, (err, response) => { 30 | if (err) { 31 | reject(err); 32 | } 33 | resolve(response); 34 | }) 35 | }) 36 | 37 | } 38 | 39 | module.exports.getMail = getMail 40 | 41 | module.exports.fetchMailsByMailIds = async function (gmail, auth, spinner, mailList) { 42 | let results = []; 43 | let promises = []; 44 | let processed = 0; 45 | spinner.text = "Fetching each mail" 46 | for (index in mailList) { 47 | if (mailList[index]) { 48 | promises.push(getMail(gmail, auth, mailList[index].id)); 49 | counter++; 50 | processed++; 51 | if (counter === 100) { 52 | mails = await Promise.all(promises); 53 | results = results.concat(mails) 54 | promises = []; 55 | counter = 0; 56 | spinner.text = processed + " mails fetched" 57 | } 58 | } 59 | }; 60 | mails = await Promise.all(promises); 61 | results = results.concat(mails) 62 | return results; 63 | } 64 | 65 | module.exports.getListOfMailIdByFromId = function (auth, mailId, maxResults = 500) { 66 | return new Promise((resolve, reject) => { 67 | gmail.users.messages.list({ 68 | auth: auth, 69 | userId: 'me', 70 | q: 'from:' + mailId, 71 | maxResults: maxResults 72 | }, function (err, response) { 73 | if (err) { 74 | console.log('The API returned an error: ' + err); 75 | reject(err); 76 | } 77 | resolve(response.data.messages); 78 | }); 79 | }); 80 | } 81 | -------------------------------------------------------------------------------- /lib/googleAPIWrapper.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs'); 2 | const readline = require('readline'); 3 | const {google} = require('googleapis'); 4 | const http = require('http'); 5 | const url = require('url'); 6 | let server; 7 | // If modifying these scopes, delete token.json. 8 | const SCOPES = ['https://www.googleapis.com/auth/gmail.readonly']; 9 | // The file token.json stores the user's access and refresh tokens, and is 10 | // created automatically when the authorization flow completes for the first 11 | // time. 12 | const TOKEN_PATH = 'token.json'; 13 | 14 | 15 | 16 | module.exports.getAuthAndGmail = function (callback) { 17 | // Load client secrets from a local file. 18 | fs.readFile('credentials.json', (err, content) => { 19 | if (err) return console.log('Error loading client secret file:', err); 20 | // Authorize a client with credentials, then call the Gmail API. 21 | authorize(JSON.parse(content), (auth) => { 22 | const gmail = google.gmail({version: 'v1', auth}); 23 | callback(auth, gmail); 24 | }); 25 | }); 26 | } 27 | 28 | /** 29 | * Create an OAuth2 client with the given credentials, and then execute the 30 | * given callback function. 31 | * @param {Object} credentials The authorization client credentials. 32 | * @param {function} callback The callback to call with the authorized client. 33 | */ 34 | function authorize(credentials, callback) { 35 | const {client_secret, client_id, redirect_uris} = credentials.installed; 36 | const oAuth2Client = new google.auth.OAuth2( 37 | client_id, client_secret, "http://localhost:47319"); 38 | 39 | // Check if we have previously stored a token. 40 | fs.readFile(TOKEN_PATH, (err, token) => { 41 | if (err) return getNewToken(oAuth2Client, callback); 42 | oAuth2Client.setCredentials(JSON.parse(token)); 43 | callback(oAuth2Client); 44 | }); 45 | } 46 | 47 | /** 48 | * Get and store new token after prompting for user authorization, and then 49 | * execute the given callback with the authorized OAuth2 client. 50 | * @param {google.auth.OAuth2} oAuth2Client The OAuth2 client to get token for. 51 | * @param {getEventsCallback} callback The callback for the authorized client. 52 | */ 53 | function getNewToken(oAuth2Client, callback) { 54 | const authUrl = oAuth2Client.generateAuthUrl({ 55 | access_type: 'offline', 56 | scope: SCOPES, 57 | }); 58 | console.log('Authorize this app by visiting this url:', authUrl); 59 | const rl = readline.createInterface({ 60 | input: process.stdin, 61 | output: process.stdout, 62 | }); 63 | server = http.createServer(function (req, res) { 64 | const queryObject = url.parse(req.url, true).query; 65 | code = queryObject.code 66 | 67 | res.writeHead(200, {'Content-Type': 'text/html'}); 68 | res.write("

You have successfully login. Please go back to terminal.

\n\n"); 69 | res.end(); 70 | oAuth2Client.getToken(code, (err, token) => { 71 | console.log(code) 72 | if (err) return console.error('Error retrieving access token', err); 73 | oAuth2Client.setCredentials(token); 74 | // Store the token to disk for later program executions 75 | fs.writeFile(TOKEN_PATH, JSON.stringify(token), (err) => { 76 | if (err) return console.error(err); 77 | console.log('Token stored to', TOKEN_PATH); 78 | }); 79 | callback(oAuth2Client); 80 | }); 81 | }) 82 | server.listen(47319); 83 | // rl.question('Enter the code from that page here: ', (code) => { 84 | // rl.close(); 85 | // oAuth2Client.getToken(code, (err, token) => { 86 | // if (err) return console.error('Error retrieving access token', err); 87 | // oAuth2Client.setCredentials(token); 88 | // // Store the token to disk for later program executions 89 | // fs.writeFile(TOKEN_PATH, JSON.stringify(token), (err) => { 90 | // if (err) return console.error(err); 91 | // console.log('Token stored to', TOKEN_PATH); 92 | // }); 93 | // callback(oAuth2Client); 94 | // }); 95 | // }); 96 | } 97 | 98 | /** 99 | * Lists the labels in the user's account. 100 | * 101 | * @param {google.auth.OAuth2} auth An authorized OAuth2 client. 102 | */ 103 | function listLabels(auth) { 104 | const gmail = google.gmail({version: 'v1', auth}); 105 | gmail.users.labels.list({ 106 | userId: 'me', 107 | }, (err, res) => { 108 | if (err) return console.log('The API returned an error: ' + err); 109 | const labels = res.data.labels; 110 | if (labels.length) { 111 | console.log('Labels:'); 112 | labels.forEach((label) => { 113 | console.log(`- ${label.name}`); 114 | }); 115 | } else { 116 | console.log('No labels found.'); 117 | } 118 | }); 119 | } 120 | -------------------------------------------------------------------------------- /lib/questions.js: -------------------------------------------------------------------------------- 1 | module.exports.askForFilter = function (labels) { 2 | return inquirer.prompt([ 3 | { 4 | type: 'list', 5 | name: 'option', 6 | message: 'How do you like to filter', 7 | choices: ['Using from email Id', 'Using label', "All"], 8 | filter: val => { 9 | if (val === 'Using from email Id') { 10 | return 'from'; 11 | } else if (val === 'Using label') { 12 | return 'label'; 13 | } else { 14 | return 'all' 15 | } 16 | } 17 | } 18 | ]) 19 | .then(answers => answers.option); 20 | } 21 | 22 | module.exports.askForMail = function () { 23 | return inquirer.prompt([ 24 | { 25 | type: 'input', 26 | name: 'from', 27 | message: 'Enter from mailId:' 28 | } 29 | ]) 30 | .then(answers => answers.from); 31 | } 32 | 33 | module.exports.askForLabel = function (labels) { 34 | return inquirer.prompt([ 35 | { 36 | type: 'list', 37 | name: 'label', 38 | message: 'Choose label for filter mails:', 39 | choices: _.map(labels, 'name'), 40 | filter: val => _.find(labels, l => l.name === val) 41 | } 42 | ]) 43 | .then(answers => answers.label); 44 | } 45 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "attachment-downloader", 3 | "version": "1.1.1", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "attachment-downloader", 9 | "version": "1.1.1", 10 | "license": "MIT", 11 | "dependencies": { 12 | "atob": "^2.1.2", 13 | "googleapis": "^107.0.0", 14 | "inquirer": "^6.2.1", 15 | "limiter": "^1.1.5", 16 | "lodash": "^4.17.21", 17 | "mkdirp": "^1.0.4", 18 | "moment": "^2.29.2", 19 | "moment-timezone": "^0.5.35", 20 | "ora": "^5.1.0", 21 | "yargs": "^16.1.0" 22 | }, 23 | "devDependencies": {} 24 | }, 25 | "node_modules/agent-base": { 26 | "version": "6.0.2", 27 | "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", 28 | "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", 29 | "dependencies": { 30 | "debug": "4" 31 | }, 32 | "engines": { 33 | "node": ">= 6.0.0" 34 | } 35 | }, 36 | "node_modules/ansi-escapes": { 37 | "version": "3.2.0", 38 | "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", 39 | "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", 40 | "engines": { 41 | "node": ">=4" 42 | } 43 | }, 44 | "node_modules/ansi-regex": { 45 | "version": "4.1.1", 46 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", 47 | "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", 48 | "engines": { 49 | "node": ">=6" 50 | } 51 | }, 52 | "node_modules/ansi-styles": { 53 | "version": "3.2.1", 54 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 55 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 56 | "dependencies": { 57 | "color-convert": "^1.9.0" 58 | }, 59 | "engines": { 60 | "node": ">=4" 61 | } 62 | }, 63 | "node_modules/arrify": { 64 | "version": "2.0.1", 65 | "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", 66 | "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", 67 | "engines": { 68 | "node": ">=8" 69 | } 70 | }, 71 | "node_modules/atob": { 72 | "version": "2.1.2", 73 | "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", 74 | "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", 75 | "bin": { 76 | "atob": "bin/atob.js" 77 | }, 78 | "engines": { 79 | "node": ">= 4.5.0" 80 | } 81 | }, 82 | "node_modules/base64-js": { 83 | "version": "1.5.1", 84 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", 85 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", 86 | "funding": [ 87 | { 88 | "type": "github", 89 | "url": "https://github.com/sponsors/feross" 90 | }, 91 | { 92 | "type": "patreon", 93 | "url": "https://www.patreon.com/feross" 94 | }, 95 | { 96 | "type": "consulting", 97 | "url": "https://feross.org/support" 98 | } 99 | ] 100 | }, 101 | "node_modules/bignumber.js": { 102 | "version": "9.1.0", 103 | "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.0.tgz", 104 | "integrity": "sha512-4LwHK4nfDOraBCtst+wOWIHbu1vhvAPJK8g8nROd4iuc3PSEjWif/qwbkh8jwCJz6yDBvtU4KPynETgrfh7y3A==", 105 | "engines": { 106 | "node": "*" 107 | } 108 | }, 109 | "node_modules/bl": { 110 | "version": "4.1.0", 111 | "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", 112 | "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", 113 | "dependencies": { 114 | "buffer": "^5.5.0", 115 | "inherits": "^2.0.4", 116 | "readable-stream": "^3.4.0" 117 | } 118 | }, 119 | "node_modules/buffer": { 120 | "version": "5.7.1", 121 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", 122 | "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", 123 | "funding": [ 124 | { 125 | "type": "github", 126 | "url": "https://github.com/sponsors/feross" 127 | }, 128 | { 129 | "type": "patreon", 130 | "url": "https://www.patreon.com/feross" 131 | }, 132 | { 133 | "type": "consulting", 134 | "url": "https://feross.org/support" 135 | } 136 | ], 137 | "dependencies": { 138 | "base64-js": "^1.3.1", 139 | "ieee754": "^1.1.13" 140 | } 141 | }, 142 | "node_modules/buffer-equal-constant-time": { 143 | "version": "1.0.1", 144 | "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", 145 | "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" 146 | }, 147 | "node_modules/call-bind": { 148 | "version": "1.0.2", 149 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 150 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 151 | "dependencies": { 152 | "function-bind": "^1.1.1", 153 | "get-intrinsic": "^1.0.2" 154 | }, 155 | "funding": { 156 | "url": "https://github.com/sponsors/ljharb" 157 | } 158 | }, 159 | "node_modules/chalk": { 160 | "version": "2.4.2", 161 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 162 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 163 | "dependencies": { 164 | "ansi-styles": "^3.2.1", 165 | "escape-string-regexp": "^1.0.5", 166 | "supports-color": "^5.3.0" 167 | }, 168 | "engines": { 169 | "node": ">=4" 170 | } 171 | }, 172 | "node_modules/chardet": { 173 | "version": "0.7.0", 174 | "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", 175 | "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" 176 | }, 177 | "node_modules/cli-cursor": { 178 | "version": "2.1.0", 179 | "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", 180 | "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", 181 | "dependencies": { 182 | "restore-cursor": "^2.0.0" 183 | }, 184 | "engines": { 185 | "node": ">=4" 186 | } 187 | }, 188 | "node_modules/cli-spinners": { 189 | "version": "2.7.0", 190 | "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz", 191 | "integrity": "sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==", 192 | "engines": { 193 | "node": ">=6" 194 | }, 195 | "funding": { 196 | "url": "https://github.com/sponsors/sindresorhus" 197 | } 198 | }, 199 | "node_modules/cli-width": { 200 | "version": "2.2.1", 201 | "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", 202 | "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==" 203 | }, 204 | "node_modules/cliui": { 205 | "version": "7.0.4", 206 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", 207 | "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", 208 | "dependencies": { 209 | "string-width": "^4.2.0", 210 | "strip-ansi": "^6.0.0", 211 | "wrap-ansi": "^7.0.0" 212 | } 213 | }, 214 | "node_modules/cliui/node_modules/ansi-regex": { 215 | "version": "5.0.1", 216 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 217 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 218 | "engines": { 219 | "node": ">=8" 220 | } 221 | }, 222 | "node_modules/cliui/node_modules/is-fullwidth-code-point": { 223 | "version": "3.0.0", 224 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 225 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 226 | "engines": { 227 | "node": ">=8" 228 | } 229 | }, 230 | "node_modules/cliui/node_modules/string-width": { 231 | "version": "4.2.3", 232 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 233 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 234 | "dependencies": { 235 | "emoji-regex": "^8.0.0", 236 | "is-fullwidth-code-point": "^3.0.0", 237 | "strip-ansi": "^6.0.1" 238 | }, 239 | "engines": { 240 | "node": ">=8" 241 | } 242 | }, 243 | "node_modules/cliui/node_modules/strip-ansi": { 244 | "version": "6.0.1", 245 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 246 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 247 | "dependencies": { 248 | "ansi-regex": "^5.0.1" 249 | }, 250 | "engines": { 251 | "node": ">=8" 252 | } 253 | }, 254 | "node_modules/clone": { 255 | "version": "1.0.4", 256 | "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", 257 | "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", 258 | "engines": { 259 | "node": ">=0.8" 260 | } 261 | }, 262 | "node_modules/color-convert": { 263 | "version": "1.9.3", 264 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 265 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 266 | "dependencies": { 267 | "color-name": "1.1.3" 268 | } 269 | }, 270 | "node_modules/color-name": { 271 | "version": "1.1.3", 272 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 273 | "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" 274 | }, 275 | "node_modules/debug": { 276 | "version": "4.3.4", 277 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 278 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 279 | "dependencies": { 280 | "ms": "2.1.2" 281 | }, 282 | "engines": { 283 | "node": ">=6.0" 284 | }, 285 | "peerDependenciesMeta": { 286 | "supports-color": { 287 | "optional": true 288 | } 289 | } 290 | }, 291 | "node_modules/defaults": { 292 | "version": "1.0.3", 293 | "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", 294 | "integrity": "sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==", 295 | "dependencies": { 296 | "clone": "^1.0.2" 297 | } 298 | }, 299 | "node_modules/ecdsa-sig-formatter": { 300 | "version": "1.0.11", 301 | "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", 302 | "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", 303 | "dependencies": { 304 | "safe-buffer": "^5.0.1" 305 | } 306 | }, 307 | "node_modules/emoji-regex": { 308 | "version": "8.0.0", 309 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 310 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" 311 | }, 312 | "node_modules/escalade": { 313 | "version": "3.1.1", 314 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 315 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", 316 | "engines": { 317 | "node": ">=6" 318 | } 319 | }, 320 | "node_modules/escape-string-regexp": { 321 | "version": "1.0.5", 322 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 323 | "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", 324 | "engines": { 325 | "node": ">=0.8.0" 326 | } 327 | }, 328 | "node_modules/extend": { 329 | "version": "3.0.2", 330 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", 331 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" 332 | }, 333 | "node_modules/external-editor": { 334 | "version": "3.1.0", 335 | "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", 336 | "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", 337 | "dependencies": { 338 | "chardet": "^0.7.0", 339 | "iconv-lite": "^0.4.24", 340 | "tmp": "^0.0.33" 341 | }, 342 | "engines": { 343 | "node": ">=4" 344 | } 345 | }, 346 | "node_modules/fast-text-encoding": { 347 | "version": "1.0.4", 348 | "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.4.tgz", 349 | "integrity": "sha512-x6lDDm/tBAzX9kmsPcZsNbvDs3Zey3+scsxaZElS8xWLgUMAg/oFLeewfUz0mu1CblHhhsu15jGkraldkFh8KQ==" 350 | }, 351 | "node_modules/figures": { 352 | "version": "2.0.0", 353 | "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", 354 | "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", 355 | "dependencies": { 356 | "escape-string-regexp": "^1.0.5" 357 | }, 358 | "engines": { 359 | "node": ">=4" 360 | } 361 | }, 362 | "node_modules/function-bind": { 363 | "version": "1.1.1", 364 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 365 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 366 | }, 367 | "node_modules/gaxios": { 368 | "version": "5.0.1", 369 | "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-5.0.1.tgz", 370 | "integrity": "sha512-keK47BGKHyyOVQxgcUaSaFvr3ehZYAlvhvpHXy0YB2itzZef+GqZR8TBsfVRWghdwlKrYsn+8L8i3eblF7Oviw==", 371 | "dependencies": { 372 | "extend": "^3.0.2", 373 | "https-proxy-agent": "^5.0.0", 374 | "is-stream": "^2.0.0", 375 | "node-fetch": "^2.6.7" 376 | }, 377 | "engines": { 378 | "node": ">=12" 379 | } 380 | }, 381 | "node_modules/gcp-metadata": { 382 | "version": "5.0.0", 383 | "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-5.0.0.tgz", 384 | "integrity": "sha512-gfwuX3yA3nNsHSWUL4KG90UulNiq922Ukj3wLTrcnX33BB7PwB1o0ubR8KVvXu9nJH+P5w1j2SQSNNqto+H0DA==", 385 | "dependencies": { 386 | "gaxios": "^5.0.0", 387 | "json-bigint": "^1.0.0" 388 | }, 389 | "engines": { 390 | "node": ">=12" 391 | } 392 | }, 393 | "node_modules/get-caller-file": { 394 | "version": "2.0.5", 395 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 396 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 397 | "engines": { 398 | "node": "6.* || 8.* || >= 10.*" 399 | } 400 | }, 401 | "node_modules/get-intrinsic": { 402 | "version": "1.1.2", 403 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", 404 | "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", 405 | "dependencies": { 406 | "function-bind": "^1.1.1", 407 | "has": "^1.0.3", 408 | "has-symbols": "^1.0.3" 409 | }, 410 | "funding": { 411 | "url": "https://github.com/sponsors/ljharb" 412 | } 413 | }, 414 | "node_modules/google-auth-library": { 415 | "version": "8.4.0", 416 | "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-8.4.0.tgz", 417 | "integrity": "sha512-cg/usxyQEmq4PPDBQRt+kGIrfL3k+mOrAoS9Xv1hitQL66AoY7iWvRBcYo3Rb0w4V1t9e/GqW2/D4honlAtMDg==", 418 | "dependencies": { 419 | "arrify": "^2.0.0", 420 | "base64-js": "^1.3.0", 421 | "ecdsa-sig-formatter": "^1.0.11", 422 | "fast-text-encoding": "^1.0.0", 423 | "gaxios": "^5.0.0", 424 | "gcp-metadata": "^5.0.0", 425 | "gtoken": "^6.1.0", 426 | "jws": "^4.0.0", 427 | "lru-cache": "^6.0.0" 428 | }, 429 | "engines": { 430 | "node": ">=12" 431 | } 432 | }, 433 | "node_modules/google-p12-pem": { 434 | "version": "4.0.1", 435 | "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-4.0.1.tgz", 436 | "integrity": "sha512-WPkN4yGtz05WZ5EhtlxNDWPhC4JIic6G8ePitwUWy4l+XPVYec+a0j0Ts47PDtW59y3RwAhUd9/h9ZZ63px6RQ==", 437 | "dependencies": { 438 | "node-forge": "^1.3.1" 439 | }, 440 | "bin": { 441 | "gp12-pem": "build/src/bin/gp12-pem.js" 442 | }, 443 | "engines": { 444 | "node": ">=12.0.0" 445 | } 446 | }, 447 | "node_modules/googleapis": { 448 | "version": "107.0.0", 449 | "resolved": "https://registry.npmjs.org/googleapis/-/googleapis-107.0.0.tgz", 450 | "integrity": "sha512-emMvsOEPvE9/DxrOVCMblQzKAhaar37c5JPAqYXoo+hxPpzFefkpN5ayIJFgatDpUWCSMvWtP3CcEWfFhFA7QA==", 451 | "dependencies": { 452 | "google-auth-library": "^8.0.2", 453 | "googleapis-common": "^6.0.0" 454 | }, 455 | "engines": { 456 | "node": ">=12.0.0" 457 | } 458 | }, 459 | "node_modules/googleapis-common": { 460 | "version": "6.0.1", 461 | "resolved": "https://registry.npmjs.org/googleapis-common/-/googleapis-common-6.0.1.tgz", 462 | "integrity": "sha512-COe4g+58FoIkLUe4ljlCl6ytgSqPYIyCrT9kEp+VDL3Ca5NAOqExZ13whJUZklmSgxS3isEbTBt5c7SgD0kfMA==", 463 | "dependencies": { 464 | "extend": "^3.0.2", 465 | "gaxios": "^5.0.1", 466 | "google-auth-library": "^8.0.2", 467 | "qs": "^6.7.0", 468 | "url-template": "^2.0.8", 469 | "uuid": "^8.0.0" 470 | }, 471 | "engines": { 472 | "node": ">=12.0.0" 473 | } 474 | }, 475 | "node_modules/gtoken": { 476 | "version": "6.1.1", 477 | "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-6.1.1.tgz", 478 | "integrity": "sha512-HPM4VzzPEGxjQ7T2xLrdSYBs+h1c0yHAUiN+8RHPDoiZbndlpg9Sx3SjWcrTt9+N3FHsSABEpjvdQVan5AAuZQ==", 479 | "dependencies": { 480 | "gaxios": "^5.0.1", 481 | "google-p12-pem": "^4.0.0", 482 | "jws": "^4.0.0" 483 | }, 484 | "engines": { 485 | "node": ">=12.0.0" 486 | } 487 | }, 488 | "node_modules/has": { 489 | "version": "1.0.3", 490 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 491 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 492 | "dependencies": { 493 | "function-bind": "^1.1.1" 494 | }, 495 | "engines": { 496 | "node": ">= 0.4.0" 497 | } 498 | }, 499 | "node_modules/has-flag": { 500 | "version": "3.0.0", 501 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 502 | "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", 503 | "engines": { 504 | "node": ">=4" 505 | } 506 | }, 507 | "node_modules/has-symbols": { 508 | "version": "1.0.3", 509 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 510 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", 511 | "engines": { 512 | "node": ">= 0.4" 513 | }, 514 | "funding": { 515 | "url": "https://github.com/sponsors/ljharb" 516 | } 517 | }, 518 | "node_modules/https-proxy-agent": { 519 | "version": "5.0.1", 520 | "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", 521 | "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", 522 | "dependencies": { 523 | "agent-base": "6", 524 | "debug": "4" 525 | }, 526 | "engines": { 527 | "node": ">= 6" 528 | } 529 | }, 530 | "node_modules/iconv-lite": { 531 | "version": "0.4.24", 532 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 533 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 534 | "dependencies": { 535 | "safer-buffer": ">= 2.1.2 < 3" 536 | }, 537 | "engines": { 538 | "node": ">=0.10.0" 539 | } 540 | }, 541 | "node_modules/ieee754": { 542 | "version": "1.2.1", 543 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", 544 | "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", 545 | "funding": [ 546 | { 547 | "type": "github", 548 | "url": "https://github.com/sponsors/feross" 549 | }, 550 | { 551 | "type": "patreon", 552 | "url": "https://www.patreon.com/feross" 553 | }, 554 | { 555 | "type": "consulting", 556 | "url": "https://feross.org/support" 557 | } 558 | ] 559 | }, 560 | "node_modules/inherits": { 561 | "version": "2.0.4", 562 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 563 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 564 | }, 565 | "node_modules/inquirer": { 566 | "version": "6.5.2", 567 | "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", 568 | "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", 569 | "dependencies": { 570 | "ansi-escapes": "^3.2.0", 571 | "chalk": "^2.4.2", 572 | "cli-cursor": "^2.1.0", 573 | "cli-width": "^2.0.0", 574 | "external-editor": "^3.0.3", 575 | "figures": "^2.0.0", 576 | "lodash": "^4.17.12", 577 | "mute-stream": "0.0.7", 578 | "run-async": "^2.2.0", 579 | "rxjs": "^6.4.0", 580 | "string-width": "^2.1.0", 581 | "strip-ansi": "^5.1.0", 582 | "through": "^2.3.6" 583 | }, 584 | "engines": { 585 | "node": ">=6.0.0" 586 | } 587 | }, 588 | "node_modules/is-fullwidth-code-point": { 589 | "version": "2.0.0", 590 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 591 | "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", 592 | "engines": { 593 | "node": ">=4" 594 | } 595 | }, 596 | "node_modules/is-interactive": { 597 | "version": "1.0.0", 598 | "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", 599 | "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", 600 | "engines": { 601 | "node": ">=8" 602 | } 603 | }, 604 | "node_modules/is-stream": { 605 | "version": "2.0.1", 606 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", 607 | "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", 608 | "engines": { 609 | "node": ">=8" 610 | }, 611 | "funding": { 612 | "url": "https://github.com/sponsors/sindresorhus" 613 | } 614 | }, 615 | "node_modules/is-unicode-supported": { 616 | "version": "0.1.0", 617 | "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", 618 | "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", 619 | "engines": { 620 | "node": ">=10" 621 | }, 622 | "funding": { 623 | "url": "https://github.com/sponsors/sindresorhus" 624 | } 625 | }, 626 | "node_modules/json-bigint": { 627 | "version": "1.0.0", 628 | "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", 629 | "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", 630 | "dependencies": { 631 | "bignumber.js": "^9.0.0" 632 | } 633 | }, 634 | "node_modules/jwa": { 635 | "version": "2.0.0", 636 | "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", 637 | "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", 638 | "dependencies": { 639 | "buffer-equal-constant-time": "1.0.1", 640 | "ecdsa-sig-formatter": "1.0.11", 641 | "safe-buffer": "^5.0.1" 642 | } 643 | }, 644 | "node_modules/jws": { 645 | "version": "4.0.0", 646 | "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", 647 | "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", 648 | "dependencies": { 649 | "jwa": "^2.0.0", 650 | "safe-buffer": "^5.0.1" 651 | } 652 | }, 653 | "node_modules/limiter": { 654 | "version": "1.1.5", 655 | "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz", 656 | "integrity": "sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==" 657 | }, 658 | "node_modules/lodash": { 659 | "version": "4.17.21", 660 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 661 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" 662 | }, 663 | "node_modules/log-symbols": { 664 | "version": "4.1.0", 665 | "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", 666 | "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", 667 | "dependencies": { 668 | "chalk": "^4.1.0", 669 | "is-unicode-supported": "^0.1.0" 670 | }, 671 | "engines": { 672 | "node": ">=10" 673 | }, 674 | "funding": { 675 | "url": "https://github.com/sponsors/sindresorhus" 676 | } 677 | }, 678 | "node_modules/log-symbols/node_modules/ansi-styles": { 679 | "version": "4.3.0", 680 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 681 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 682 | "dependencies": { 683 | "color-convert": "^2.0.1" 684 | }, 685 | "engines": { 686 | "node": ">=8" 687 | }, 688 | "funding": { 689 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 690 | } 691 | }, 692 | "node_modules/log-symbols/node_modules/chalk": { 693 | "version": "4.1.2", 694 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 695 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 696 | "dependencies": { 697 | "ansi-styles": "^4.1.0", 698 | "supports-color": "^7.1.0" 699 | }, 700 | "engines": { 701 | "node": ">=10" 702 | }, 703 | "funding": { 704 | "url": "https://github.com/chalk/chalk?sponsor=1" 705 | } 706 | }, 707 | "node_modules/log-symbols/node_modules/color-convert": { 708 | "version": "2.0.1", 709 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 710 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 711 | "dependencies": { 712 | "color-name": "~1.1.4" 713 | }, 714 | "engines": { 715 | "node": ">=7.0.0" 716 | } 717 | }, 718 | "node_modules/log-symbols/node_modules/color-name": { 719 | "version": "1.1.4", 720 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 721 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 722 | }, 723 | "node_modules/log-symbols/node_modules/has-flag": { 724 | "version": "4.0.0", 725 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 726 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 727 | "engines": { 728 | "node": ">=8" 729 | } 730 | }, 731 | "node_modules/log-symbols/node_modules/supports-color": { 732 | "version": "7.2.0", 733 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 734 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 735 | "dependencies": { 736 | "has-flag": "^4.0.0" 737 | }, 738 | "engines": { 739 | "node": ">=8" 740 | } 741 | }, 742 | "node_modules/lru-cache": { 743 | "version": "6.0.0", 744 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 745 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 746 | "dependencies": { 747 | "yallist": "^4.0.0" 748 | }, 749 | "engines": { 750 | "node": ">=10" 751 | } 752 | }, 753 | "node_modules/mimic-fn": { 754 | "version": "1.2.0", 755 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", 756 | "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", 757 | "engines": { 758 | "node": ">=4" 759 | } 760 | }, 761 | "node_modules/mkdirp": { 762 | "version": "1.0.4", 763 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", 764 | "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", 765 | "bin": { 766 | "mkdirp": "bin/cmd.js" 767 | }, 768 | "engines": { 769 | "node": ">=10" 770 | } 771 | }, 772 | "node_modules/moment": { 773 | "version": "2.29.4", 774 | "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", 775 | "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", 776 | "engines": { 777 | "node": "*" 778 | } 779 | }, 780 | "node_modules/moment-timezone": { 781 | "version": "0.5.35", 782 | "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.35.tgz", 783 | "integrity": "sha512-cY/pBOEXepQvlgli06ttCTKcIf8cD1nmNwOKQQAdHBqYApQSpAqotBMX0RJZNgMp6i0PlZuf1mFtnlyEkwyvFw==", 784 | "dependencies": { 785 | "moment": ">= 2.9.0" 786 | }, 787 | "engines": { 788 | "node": "*" 789 | } 790 | }, 791 | "node_modules/ms": { 792 | "version": "2.1.2", 793 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 794 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 795 | }, 796 | "node_modules/mute-stream": { 797 | "version": "0.0.7", 798 | "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", 799 | "integrity": "sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==" 800 | }, 801 | "node_modules/node-fetch": { 802 | "version": "2.6.7", 803 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", 804 | "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", 805 | "dependencies": { 806 | "whatwg-url": "^5.0.0" 807 | }, 808 | "engines": { 809 | "node": "4.x || >=6.0.0" 810 | }, 811 | "peerDependencies": { 812 | "encoding": "^0.1.0" 813 | }, 814 | "peerDependenciesMeta": { 815 | "encoding": { 816 | "optional": true 817 | } 818 | } 819 | }, 820 | "node_modules/node-forge": { 821 | "version": "1.3.1", 822 | "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", 823 | "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", 824 | "engines": { 825 | "node": ">= 6.13.0" 826 | } 827 | }, 828 | "node_modules/object-inspect": { 829 | "version": "1.12.2", 830 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", 831 | "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", 832 | "funding": { 833 | "url": "https://github.com/sponsors/ljharb" 834 | } 835 | }, 836 | "node_modules/onetime": { 837 | "version": "2.0.1", 838 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", 839 | "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", 840 | "dependencies": { 841 | "mimic-fn": "^1.0.0" 842 | }, 843 | "engines": { 844 | "node": ">=4" 845 | } 846 | }, 847 | "node_modules/ora": { 848 | "version": "5.4.1", 849 | "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", 850 | "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", 851 | "dependencies": { 852 | "bl": "^4.1.0", 853 | "chalk": "^4.1.0", 854 | "cli-cursor": "^3.1.0", 855 | "cli-spinners": "^2.5.0", 856 | "is-interactive": "^1.0.0", 857 | "is-unicode-supported": "^0.1.0", 858 | "log-symbols": "^4.1.0", 859 | "strip-ansi": "^6.0.0", 860 | "wcwidth": "^1.0.1" 861 | }, 862 | "engines": { 863 | "node": ">=10" 864 | }, 865 | "funding": { 866 | "url": "https://github.com/sponsors/sindresorhus" 867 | } 868 | }, 869 | "node_modules/ora/node_modules/ansi-regex": { 870 | "version": "5.0.1", 871 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 872 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 873 | "engines": { 874 | "node": ">=8" 875 | } 876 | }, 877 | "node_modules/ora/node_modules/ansi-styles": { 878 | "version": "4.3.0", 879 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 880 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 881 | "dependencies": { 882 | "color-convert": "^2.0.1" 883 | }, 884 | "engines": { 885 | "node": ">=8" 886 | }, 887 | "funding": { 888 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 889 | } 890 | }, 891 | "node_modules/ora/node_modules/chalk": { 892 | "version": "4.1.2", 893 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 894 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 895 | "dependencies": { 896 | "ansi-styles": "^4.1.0", 897 | "supports-color": "^7.1.0" 898 | }, 899 | "engines": { 900 | "node": ">=10" 901 | }, 902 | "funding": { 903 | "url": "https://github.com/chalk/chalk?sponsor=1" 904 | } 905 | }, 906 | "node_modules/ora/node_modules/cli-cursor": { 907 | "version": "3.1.0", 908 | "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", 909 | "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", 910 | "dependencies": { 911 | "restore-cursor": "^3.1.0" 912 | }, 913 | "engines": { 914 | "node": ">=8" 915 | } 916 | }, 917 | "node_modules/ora/node_modules/color-convert": { 918 | "version": "2.0.1", 919 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 920 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 921 | "dependencies": { 922 | "color-name": "~1.1.4" 923 | }, 924 | "engines": { 925 | "node": ">=7.0.0" 926 | } 927 | }, 928 | "node_modules/ora/node_modules/color-name": { 929 | "version": "1.1.4", 930 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 931 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 932 | }, 933 | "node_modules/ora/node_modules/has-flag": { 934 | "version": "4.0.0", 935 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 936 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 937 | "engines": { 938 | "node": ">=8" 939 | } 940 | }, 941 | "node_modules/ora/node_modules/mimic-fn": { 942 | "version": "2.1.0", 943 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", 944 | "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", 945 | "engines": { 946 | "node": ">=6" 947 | } 948 | }, 949 | "node_modules/ora/node_modules/onetime": { 950 | "version": "5.1.2", 951 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", 952 | "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", 953 | "dependencies": { 954 | "mimic-fn": "^2.1.0" 955 | }, 956 | "engines": { 957 | "node": ">=6" 958 | }, 959 | "funding": { 960 | "url": "https://github.com/sponsors/sindresorhus" 961 | } 962 | }, 963 | "node_modules/ora/node_modules/restore-cursor": { 964 | "version": "3.1.0", 965 | "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", 966 | "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", 967 | "dependencies": { 968 | "onetime": "^5.1.0", 969 | "signal-exit": "^3.0.2" 970 | }, 971 | "engines": { 972 | "node": ">=8" 973 | } 974 | }, 975 | "node_modules/ora/node_modules/strip-ansi": { 976 | "version": "6.0.1", 977 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 978 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 979 | "dependencies": { 980 | "ansi-regex": "^5.0.1" 981 | }, 982 | "engines": { 983 | "node": ">=8" 984 | } 985 | }, 986 | "node_modules/ora/node_modules/supports-color": { 987 | "version": "7.2.0", 988 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 989 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 990 | "dependencies": { 991 | "has-flag": "^4.0.0" 992 | }, 993 | "engines": { 994 | "node": ">=8" 995 | } 996 | }, 997 | "node_modules/os-tmpdir": { 998 | "version": "1.0.2", 999 | "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", 1000 | "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", 1001 | "engines": { 1002 | "node": ">=0.10.0" 1003 | } 1004 | }, 1005 | "node_modules/qs": { 1006 | "version": "6.11.0", 1007 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", 1008 | "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", 1009 | "dependencies": { 1010 | "side-channel": "^1.0.4" 1011 | }, 1012 | "engines": { 1013 | "node": ">=0.6" 1014 | }, 1015 | "funding": { 1016 | "url": "https://github.com/sponsors/ljharb" 1017 | } 1018 | }, 1019 | "node_modules/readable-stream": { 1020 | "version": "3.6.0", 1021 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", 1022 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", 1023 | "dependencies": { 1024 | "inherits": "^2.0.3", 1025 | "string_decoder": "^1.1.1", 1026 | "util-deprecate": "^1.0.1" 1027 | }, 1028 | "engines": { 1029 | "node": ">= 6" 1030 | } 1031 | }, 1032 | "node_modules/require-directory": { 1033 | "version": "2.1.1", 1034 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 1035 | "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", 1036 | "engines": { 1037 | "node": ">=0.10.0" 1038 | } 1039 | }, 1040 | "node_modules/restore-cursor": { 1041 | "version": "2.0.0", 1042 | "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", 1043 | "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", 1044 | "dependencies": { 1045 | "onetime": "^2.0.0", 1046 | "signal-exit": "^3.0.2" 1047 | }, 1048 | "engines": { 1049 | "node": ">=4" 1050 | } 1051 | }, 1052 | "node_modules/run-async": { 1053 | "version": "2.4.1", 1054 | "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", 1055 | "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", 1056 | "engines": { 1057 | "node": ">=0.12.0" 1058 | } 1059 | }, 1060 | "node_modules/rxjs": { 1061 | "version": "6.6.7", 1062 | "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", 1063 | "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", 1064 | "dependencies": { 1065 | "tslib": "^1.9.0" 1066 | }, 1067 | "engines": { 1068 | "npm": ">=2.0.0" 1069 | } 1070 | }, 1071 | "node_modules/safe-buffer": { 1072 | "version": "5.2.1", 1073 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 1074 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 1075 | "funding": [ 1076 | { 1077 | "type": "github", 1078 | "url": "https://github.com/sponsors/feross" 1079 | }, 1080 | { 1081 | "type": "patreon", 1082 | "url": "https://www.patreon.com/feross" 1083 | }, 1084 | { 1085 | "type": "consulting", 1086 | "url": "https://feross.org/support" 1087 | } 1088 | ] 1089 | }, 1090 | "node_modules/safer-buffer": { 1091 | "version": "2.1.2", 1092 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 1093 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 1094 | }, 1095 | "node_modules/side-channel": { 1096 | "version": "1.0.4", 1097 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", 1098 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", 1099 | "dependencies": { 1100 | "call-bind": "^1.0.0", 1101 | "get-intrinsic": "^1.0.2", 1102 | "object-inspect": "^1.9.0" 1103 | }, 1104 | "funding": { 1105 | "url": "https://github.com/sponsors/ljharb" 1106 | } 1107 | }, 1108 | "node_modules/signal-exit": { 1109 | "version": "3.0.7", 1110 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", 1111 | "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" 1112 | }, 1113 | "node_modules/string_decoder": { 1114 | "version": "1.3.0", 1115 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", 1116 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", 1117 | "dependencies": { 1118 | "safe-buffer": "~5.2.0" 1119 | } 1120 | }, 1121 | "node_modules/string-width": { 1122 | "version": "2.1.1", 1123 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", 1124 | "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", 1125 | "dependencies": { 1126 | "is-fullwidth-code-point": "^2.0.0", 1127 | "strip-ansi": "^4.0.0" 1128 | }, 1129 | "engines": { 1130 | "node": ">=4" 1131 | } 1132 | }, 1133 | "node_modules/string-width/node_modules/ansi-regex": { 1134 | "version": "3.0.1", 1135 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", 1136 | "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", 1137 | "engines": { 1138 | "node": ">=4" 1139 | } 1140 | }, 1141 | "node_modules/string-width/node_modules/strip-ansi": { 1142 | "version": "4.0.0", 1143 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", 1144 | "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", 1145 | "dependencies": { 1146 | "ansi-regex": "^3.0.0" 1147 | }, 1148 | "engines": { 1149 | "node": ">=4" 1150 | } 1151 | }, 1152 | "node_modules/strip-ansi": { 1153 | "version": "5.2.0", 1154 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", 1155 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", 1156 | "dependencies": { 1157 | "ansi-regex": "^4.1.0" 1158 | }, 1159 | "engines": { 1160 | "node": ">=6" 1161 | } 1162 | }, 1163 | "node_modules/supports-color": { 1164 | "version": "5.5.0", 1165 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 1166 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 1167 | "dependencies": { 1168 | "has-flag": "^3.0.0" 1169 | }, 1170 | "engines": { 1171 | "node": ">=4" 1172 | } 1173 | }, 1174 | "node_modules/through": { 1175 | "version": "2.3.8", 1176 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 1177 | "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" 1178 | }, 1179 | "node_modules/tmp": { 1180 | "version": "0.0.33", 1181 | "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", 1182 | "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", 1183 | "dependencies": { 1184 | "os-tmpdir": "~1.0.2" 1185 | }, 1186 | "engines": { 1187 | "node": ">=0.6.0" 1188 | } 1189 | }, 1190 | "node_modules/tr46": { 1191 | "version": "0.0.3", 1192 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", 1193 | "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" 1194 | }, 1195 | "node_modules/tslib": { 1196 | "version": "1.14.1", 1197 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", 1198 | "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" 1199 | }, 1200 | "node_modules/url-template": { 1201 | "version": "2.0.8", 1202 | "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", 1203 | "integrity": "sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw==" 1204 | }, 1205 | "node_modules/util-deprecate": { 1206 | "version": "1.0.2", 1207 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1208 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" 1209 | }, 1210 | "node_modules/uuid": { 1211 | "version": "8.3.2", 1212 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", 1213 | "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", 1214 | "bin": { 1215 | "uuid": "dist/bin/uuid" 1216 | } 1217 | }, 1218 | "node_modules/wcwidth": { 1219 | "version": "1.0.1", 1220 | "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", 1221 | "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", 1222 | "dependencies": { 1223 | "defaults": "^1.0.3" 1224 | } 1225 | }, 1226 | "node_modules/webidl-conversions": { 1227 | "version": "3.0.1", 1228 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", 1229 | "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" 1230 | }, 1231 | "node_modules/whatwg-url": { 1232 | "version": "5.0.0", 1233 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", 1234 | "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", 1235 | "dependencies": { 1236 | "tr46": "~0.0.3", 1237 | "webidl-conversions": "^3.0.0" 1238 | } 1239 | }, 1240 | "node_modules/wrap-ansi": { 1241 | "version": "7.0.0", 1242 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 1243 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 1244 | "dependencies": { 1245 | "ansi-styles": "^4.0.0", 1246 | "string-width": "^4.1.0", 1247 | "strip-ansi": "^6.0.0" 1248 | }, 1249 | "engines": { 1250 | "node": ">=10" 1251 | }, 1252 | "funding": { 1253 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 1254 | } 1255 | }, 1256 | "node_modules/wrap-ansi/node_modules/ansi-regex": { 1257 | "version": "5.0.1", 1258 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 1259 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 1260 | "engines": { 1261 | "node": ">=8" 1262 | } 1263 | }, 1264 | "node_modules/wrap-ansi/node_modules/ansi-styles": { 1265 | "version": "4.3.0", 1266 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 1267 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 1268 | "dependencies": { 1269 | "color-convert": "^2.0.1" 1270 | }, 1271 | "engines": { 1272 | "node": ">=8" 1273 | }, 1274 | "funding": { 1275 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 1276 | } 1277 | }, 1278 | "node_modules/wrap-ansi/node_modules/color-convert": { 1279 | "version": "2.0.1", 1280 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 1281 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 1282 | "dependencies": { 1283 | "color-name": "~1.1.4" 1284 | }, 1285 | "engines": { 1286 | "node": ">=7.0.0" 1287 | } 1288 | }, 1289 | "node_modules/wrap-ansi/node_modules/color-name": { 1290 | "version": "1.1.4", 1291 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 1292 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 1293 | }, 1294 | "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { 1295 | "version": "3.0.0", 1296 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1297 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 1298 | "engines": { 1299 | "node": ">=8" 1300 | } 1301 | }, 1302 | "node_modules/wrap-ansi/node_modules/string-width": { 1303 | "version": "4.2.3", 1304 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 1305 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 1306 | "dependencies": { 1307 | "emoji-regex": "^8.0.0", 1308 | "is-fullwidth-code-point": "^3.0.0", 1309 | "strip-ansi": "^6.0.1" 1310 | }, 1311 | "engines": { 1312 | "node": ">=8" 1313 | } 1314 | }, 1315 | "node_modules/wrap-ansi/node_modules/strip-ansi": { 1316 | "version": "6.0.1", 1317 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1318 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1319 | "dependencies": { 1320 | "ansi-regex": "^5.0.1" 1321 | }, 1322 | "engines": { 1323 | "node": ">=8" 1324 | } 1325 | }, 1326 | "node_modules/y18n": { 1327 | "version": "5.0.8", 1328 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", 1329 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", 1330 | "engines": { 1331 | "node": ">=10" 1332 | } 1333 | }, 1334 | "node_modules/yallist": { 1335 | "version": "4.0.0", 1336 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 1337 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" 1338 | }, 1339 | "node_modules/yargs": { 1340 | "version": "16.2.0", 1341 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", 1342 | "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", 1343 | "dependencies": { 1344 | "cliui": "^7.0.2", 1345 | "escalade": "^3.1.1", 1346 | "get-caller-file": "^2.0.5", 1347 | "require-directory": "^2.1.1", 1348 | "string-width": "^4.2.0", 1349 | "y18n": "^5.0.5", 1350 | "yargs-parser": "^20.2.2" 1351 | }, 1352 | "engines": { 1353 | "node": ">=10" 1354 | } 1355 | }, 1356 | "node_modules/yargs-parser": { 1357 | "version": "20.2.9", 1358 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", 1359 | "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", 1360 | "engines": { 1361 | "node": ">=10" 1362 | } 1363 | }, 1364 | "node_modules/yargs/node_modules/ansi-regex": { 1365 | "version": "5.0.1", 1366 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 1367 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 1368 | "engines": { 1369 | "node": ">=8" 1370 | } 1371 | }, 1372 | "node_modules/yargs/node_modules/is-fullwidth-code-point": { 1373 | "version": "3.0.0", 1374 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1375 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 1376 | "engines": { 1377 | "node": ">=8" 1378 | } 1379 | }, 1380 | "node_modules/yargs/node_modules/string-width": { 1381 | "version": "4.2.3", 1382 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 1383 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 1384 | "dependencies": { 1385 | "emoji-regex": "^8.0.0", 1386 | "is-fullwidth-code-point": "^3.0.0", 1387 | "strip-ansi": "^6.0.1" 1388 | }, 1389 | "engines": { 1390 | "node": ">=8" 1391 | } 1392 | }, 1393 | "node_modules/yargs/node_modules/strip-ansi": { 1394 | "version": "6.0.1", 1395 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1396 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1397 | "dependencies": { 1398 | "ansi-regex": "^5.0.1" 1399 | }, 1400 | "engines": { 1401 | "node": ">=8" 1402 | } 1403 | } 1404 | }, 1405 | "dependencies": { 1406 | "agent-base": { 1407 | "version": "6.0.2", 1408 | "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", 1409 | "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", 1410 | "requires": { 1411 | "debug": "4" 1412 | } 1413 | }, 1414 | "ansi-escapes": { 1415 | "version": "3.2.0", 1416 | "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", 1417 | "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==" 1418 | }, 1419 | "ansi-regex": { 1420 | "version": "4.1.1", 1421 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", 1422 | "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==" 1423 | }, 1424 | "ansi-styles": { 1425 | "version": "3.2.1", 1426 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 1427 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 1428 | "requires": { 1429 | "color-convert": "^1.9.0" 1430 | } 1431 | }, 1432 | "arrify": { 1433 | "version": "2.0.1", 1434 | "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", 1435 | "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==" 1436 | }, 1437 | "atob": { 1438 | "version": "2.1.2", 1439 | "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", 1440 | "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" 1441 | }, 1442 | "base64-js": { 1443 | "version": "1.5.1", 1444 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", 1445 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" 1446 | }, 1447 | "bignumber.js": { 1448 | "version": "9.1.0", 1449 | "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.0.tgz", 1450 | "integrity": "sha512-4LwHK4nfDOraBCtst+wOWIHbu1vhvAPJK8g8nROd4iuc3PSEjWif/qwbkh8jwCJz6yDBvtU4KPynETgrfh7y3A==" 1451 | }, 1452 | "bl": { 1453 | "version": "4.1.0", 1454 | "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", 1455 | "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", 1456 | "requires": { 1457 | "buffer": "^5.5.0", 1458 | "inherits": "^2.0.4", 1459 | "readable-stream": "^3.4.0" 1460 | } 1461 | }, 1462 | "buffer": { 1463 | "version": "5.7.1", 1464 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", 1465 | "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", 1466 | "requires": { 1467 | "base64-js": "^1.3.1", 1468 | "ieee754": "^1.1.13" 1469 | } 1470 | }, 1471 | "buffer-equal-constant-time": { 1472 | "version": "1.0.1", 1473 | "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", 1474 | "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" 1475 | }, 1476 | "call-bind": { 1477 | "version": "1.0.2", 1478 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 1479 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 1480 | "requires": { 1481 | "function-bind": "^1.1.1", 1482 | "get-intrinsic": "^1.0.2" 1483 | } 1484 | }, 1485 | "chalk": { 1486 | "version": "2.4.2", 1487 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 1488 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 1489 | "requires": { 1490 | "ansi-styles": "^3.2.1", 1491 | "escape-string-regexp": "^1.0.5", 1492 | "supports-color": "^5.3.0" 1493 | } 1494 | }, 1495 | "chardet": { 1496 | "version": "0.7.0", 1497 | "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", 1498 | "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" 1499 | }, 1500 | "cli-cursor": { 1501 | "version": "2.1.0", 1502 | "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", 1503 | "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", 1504 | "requires": { 1505 | "restore-cursor": "^2.0.0" 1506 | } 1507 | }, 1508 | "cli-spinners": { 1509 | "version": "2.7.0", 1510 | "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz", 1511 | "integrity": "sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==" 1512 | }, 1513 | "cli-width": { 1514 | "version": "2.2.1", 1515 | "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", 1516 | "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==" 1517 | }, 1518 | "cliui": { 1519 | "version": "7.0.4", 1520 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", 1521 | "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", 1522 | "requires": { 1523 | "string-width": "^4.2.0", 1524 | "strip-ansi": "^6.0.0", 1525 | "wrap-ansi": "^7.0.0" 1526 | }, 1527 | "dependencies": { 1528 | "ansi-regex": { 1529 | "version": "5.0.1", 1530 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 1531 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" 1532 | }, 1533 | "is-fullwidth-code-point": { 1534 | "version": "3.0.0", 1535 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1536 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" 1537 | }, 1538 | "string-width": { 1539 | "version": "4.2.3", 1540 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 1541 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 1542 | "requires": { 1543 | "emoji-regex": "^8.0.0", 1544 | "is-fullwidth-code-point": "^3.0.0", 1545 | "strip-ansi": "^6.0.1" 1546 | } 1547 | }, 1548 | "strip-ansi": { 1549 | "version": "6.0.1", 1550 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1551 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1552 | "requires": { 1553 | "ansi-regex": "^5.0.1" 1554 | } 1555 | } 1556 | } 1557 | }, 1558 | "clone": { 1559 | "version": "1.0.4", 1560 | "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", 1561 | "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==" 1562 | }, 1563 | "color-convert": { 1564 | "version": "1.9.3", 1565 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 1566 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 1567 | "requires": { 1568 | "color-name": "1.1.3" 1569 | } 1570 | }, 1571 | "color-name": { 1572 | "version": "1.1.3", 1573 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 1574 | "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" 1575 | }, 1576 | "debug": { 1577 | "version": "4.3.4", 1578 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 1579 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 1580 | "requires": { 1581 | "ms": "2.1.2" 1582 | } 1583 | }, 1584 | "defaults": { 1585 | "version": "1.0.3", 1586 | "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", 1587 | "integrity": "sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==", 1588 | "requires": { 1589 | "clone": "^1.0.2" 1590 | } 1591 | }, 1592 | "ecdsa-sig-formatter": { 1593 | "version": "1.0.11", 1594 | "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", 1595 | "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", 1596 | "requires": { 1597 | "safe-buffer": "^5.0.1" 1598 | } 1599 | }, 1600 | "emoji-regex": { 1601 | "version": "8.0.0", 1602 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 1603 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" 1604 | }, 1605 | "escalade": { 1606 | "version": "3.1.1", 1607 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 1608 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" 1609 | }, 1610 | "escape-string-regexp": { 1611 | "version": "1.0.5", 1612 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 1613 | "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" 1614 | }, 1615 | "extend": { 1616 | "version": "3.0.2", 1617 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", 1618 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" 1619 | }, 1620 | "external-editor": { 1621 | "version": "3.1.0", 1622 | "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", 1623 | "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", 1624 | "requires": { 1625 | "chardet": "^0.7.0", 1626 | "iconv-lite": "^0.4.24", 1627 | "tmp": "^0.0.33" 1628 | } 1629 | }, 1630 | "fast-text-encoding": { 1631 | "version": "1.0.4", 1632 | "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.4.tgz", 1633 | "integrity": "sha512-x6lDDm/tBAzX9kmsPcZsNbvDs3Zey3+scsxaZElS8xWLgUMAg/oFLeewfUz0mu1CblHhhsu15jGkraldkFh8KQ==" 1634 | }, 1635 | "figures": { 1636 | "version": "2.0.0", 1637 | "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", 1638 | "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", 1639 | "requires": { 1640 | "escape-string-regexp": "^1.0.5" 1641 | } 1642 | }, 1643 | "function-bind": { 1644 | "version": "1.1.1", 1645 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 1646 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 1647 | }, 1648 | "gaxios": { 1649 | "version": "5.0.1", 1650 | "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-5.0.1.tgz", 1651 | "integrity": "sha512-keK47BGKHyyOVQxgcUaSaFvr3ehZYAlvhvpHXy0YB2itzZef+GqZR8TBsfVRWghdwlKrYsn+8L8i3eblF7Oviw==", 1652 | "requires": { 1653 | "extend": "^3.0.2", 1654 | "https-proxy-agent": "^5.0.0", 1655 | "is-stream": "^2.0.0", 1656 | "node-fetch": "^2.6.7" 1657 | } 1658 | }, 1659 | "gcp-metadata": { 1660 | "version": "5.0.0", 1661 | "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-5.0.0.tgz", 1662 | "integrity": "sha512-gfwuX3yA3nNsHSWUL4KG90UulNiq922Ukj3wLTrcnX33BB7PwB1o0ubR8KVvXu9nJH+P5w1j2SQSNNqto+H0DA==", 1663 | "requires": { 1664 | "gaxios": "^5.0.0", 1665 | "json-bigint": "^1.0.0" 1666 | } 1667 | }, 1668 | "get-caller-file": { 1669 | "version": "2.0.5", 1670 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 1671 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" 1672 | }, 1673 | "get-intrinsic": { 1674 | "version": "1.1.2", 1675 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", 1676 | "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", 1677 | "requires": { 1678 | "function-bind": "^1.1.1", 1679 | "has": "^1.0.3", 1680 | "has-symbols": "^1.0.3" 1681 | } 1682 | }, 1683 | "google-auth-library": { 1684 | "version": "8.4.0", 1685 | "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-8.4.0.tgz", 1686 | "integrity": "sha512-cg/usxyQEmq4PPDBQRt+kGIrfL3k+mOrAoS9Xv1hitQL66AoY7iWvRBcYo3Rb0w4V1t9e/GqW2/D4honlAtMDg==", 1687 | "requires": { 1688 | "arrify": "^2.0.0", 1689 | "base64-js": "^1.3.0", 1690 | "ecdsa-sig-formatter": "^1.0.11", 1691 | "fast-text-encoding": "^1.0.0", 1692 | "gaxios": "^5.0.0", 1693 | "gcp-metadata": "^5.0.0", 1694 | "gtoken": "^6.1.0", 1695 | "jws": "^4.0.0", 1696 | "lru-cache": "^6.0.0" 1697 | } 1698 | }, 1699 | "google-p12-pem": { 1700 | "version": "4.0.1", 1701 | "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-4.0.1.tgz", 1702 | "integrity": "sha512-WPkN4yGtz05WZ5EhtlxNDWPhC4JIic6G8ePitwUWy4l+XPVYec+a0j0Ts47PDtW59y3RwAhUd9/h9ZZ63px6RQ==", 1703 | "requires": { 1704 | "node-forge": "^1.3.1" 1705 | } 1706 | }, 1707 | "googleapis": { 1708 | "version": "107.0.0", 1709 | "resolved": "https://registry.npmjs.org/googleapis/-/googleapis-107.0.0.tgz", 1710 | "integrity": "sha512-emMvsOEPvE9/DxrOVCMblQzKAhaar37c5JPAqYXoo+hxPpzFefkpN5ayIJFgatDpUWCSMvWtP3CcEWfFhFA7QA==", 1711 | "requires": { 1712 | "google-auth-library": "^8.0.2", 1713 | "googleapis-common": "^6.0.0" 1714 | } 1715 | }, 1716 | "googleapis-common": { 1717 | "version": "6.0.1", 1718 | "resolved": "https://registry.npmjs.org/googleapis-common/-/googleapis-common-6.0.1.tgz", 1719 | "integrity": "sha512-COe4g+58FoIkLUe4ljlCl6ytgSqPYIyCrT9kEp+VDL3Ca5NAOqExZ13whJUZklmSgxS3isEbTBt5c7SgD0kfMA==", 1720 | "requires": { 1721 | "extend": "^3.0.2", 1722 | "gaxios": "^5.0.1", 1723 | "google-auth-library": "^8.0.2", 1724 | "qs": "^6.7.0", 1725 | "url-template": "^2.0.8", 1726 | "uuid": "^8.0.0" 1727 | } 1728 | }, 1729 | "gtoken": { 1730 | "version": "6.1.1", 1731 | "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-6.1.1.tgz", 1732 | "integrity": "sha512-HPM4VzzPEGxjQ7T2xLrdSYBs+h1c0yHAUiN+8RHPDoiZbndlpg9Sx3SjWcrTt9+N3FHsSABEpjvdQVan5AAuZQ==", 1733 | "requires": { 1734 | "gaxios": "^5.0.1", 1735 | "google-p12-pem": "^4.0.0", 1736 | "jws": "^4.0.0" 1737 | } 1738 | }, 1739 | "has": { 1740 | "version": "1.0.3", 1741 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 1742 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 1743 | "requires": { 1744 | "function-bind": "^1.1.1" 1745 | } 1746 | }, 1747 | "has-flag": { 1748 | "version": "3.0.0", 1749 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 1750 | "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" 1751 | }, 1752 | "has-symbols": { 1753 | "version": "1.0.3", 1754 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 1755 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" 1756 | }, 1757 | "https-proxy-agent": { 1758 | "version": "5.0.1", 1759 | "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", 1760 | "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", 1761 | "requires": { 1762 | "agent-base": "6", 1763 | "debug": "4" 1764 | } 1765 | }, 1766 | "iconv-lite": { 1767 | "version": "0.4.24", 1768 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 1769 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 1770 | "requires": { 1771 | "safer-buffer": ">= 2.1.2 < 3" 1772 | } 1773 | }, 1774 | "ieee754": { 1775 | "version": "1.2.1", 1776 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", 1777 | "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" 1778 | }, 1779 | "inherits": { 1780 | "version": "2.0.4", 1781 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1782 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 1783 | }, 1784 | "inquirer": { 1785 | "version": "6.5.2", 1786 | "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", 1787 | "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", 1788 | "requires": { 1789 | "ansi-escapes": "^3.2.0", 1790 | "chalk": "^2.4.2", 1791 | "cli-cursor": "^2.1.0", 1792 | "cli-width": "^2.0.0", 1793 | "external-editor": "^3.0.3", 1794 | "figures": "^2.0.0", 1795 | "lodash": "^4.17.12", 1796 | "mute-stream": "0.0.7", 1797 | "run-async": "^2.2.0", 1798 | "rxjs": "^6.4.0", 1799 | "string-width": "^2.1.0", 1800 | "strip-ansi": "^5.1.0", 1801 | "through": "^2.3.6" 1802 | } 1803 | }, 1804 | "is-fullwidth-code-point": { 1805 | "version": "2.0.0", 1806 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 1807 | "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==" 1808 | }, 1809 | "is-interactive": { 1810 | "version": "1.0.0", 1811 | "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", 1812 | "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==" 1813 | }, 1814 | "is-stream": { 1815 | "version": "2.0.1", 1816 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", 1817 | "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" 1818 | }, 1819 | "is-unicode-supported": { 1820 | "version": "0.1.0", 1821 | "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", 1822 | "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==" 1823 | }, 1824 | "json-bigint": { 1825 | "version": "1.0.0", 1826 | "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", 1827 | "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", 1828 | "requires": { 1829 | "bignumber.js": "^9.0.0" 1830 | } 1831 | }, 1832 | "jwa": { 1833 | "version": "2.0.0", 1834 | "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", 1835 | "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", 1836 | "requires": { 1837 | "buffer-equal-constant-time": "1.0.1", 1838 | "ecdsa-sig-formatter": "1.0.11", 1839 | "safe-buffer": "^5.0.1" 1840 | } 1841 | }, 1842 | "jws": { 1843 | "version": "4.0.0", 1844 | "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", 1845 | "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", 1846 | "requires": { 1847 | "jwa": "^2.0.0", 1848 | "safe-buffer": "^5.0.1" 1849 | } 1850 | }, 1851 | "limiter": { 1852 | "version": "1.1.5", 1853 | "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz", 1854 | "integrity": "sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==" 1855 | }, 1856 | "lodash": { 1857 | "version": "4.17.21", 1858 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 1859 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" 1860 | }, 1861 | "log-symbols": { 1862 | "version": "4.1.0", 1863 | "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", 1864 | "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", 1865 | "requires": { 1866 | "chalk": "^4.1.0", 1867 | "is-unicode-supported": "^0.1.0" 1868 | }, 1869 | "dependencies": { 1870 | "ansi-styles": { 1871 | "version": "4.3.0", 1872 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 1873 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 1874 | "requires": { 1875 | "color-convert": "^2.0.1" 1876 | } 1877 | }, 1878 | "chalk": { 1879 | "version": "4.1.2", 1880 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 1881 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 1882 | "requires": { 1883 | "ansi-styles": "^4.1.0", 1884 | "supports-color": "^7.1.0" 1885 | } 1886 | }, 1887 | "color-convert": { 1888 | "version": "2.0.1", 1889 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 1890 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 1891 | "requires": { 1892 | "color-name": "~1.1.4" 1893 | } 1894 | }, 1895 | "color-name": { 1896 | "version": "1.1.4", 1897 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 1898 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 1899 | }, 1900 | "has-flag": { 1901 | "version": "4.0.0", 1902 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1903 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" 1904 | }, 1905 | "supports-color": { 1906 | "version": "7.2.0", 1907 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 1908 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 1909 | "requires": { 1910 | "has-flag": "^4.0.0" 1911 | } 1912 | } 1913 | } 1914 | }, 1915 | "lru-cache": { 1916 | "version": "6.0.0", 1917 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 1918 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 1919 | "requires": { 1920 | "yallist": "^4.0.0" 1921 | } 1922 | }, 1923 | "mimic-fn": { 1924 | "version": "1.2.0", 1925 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", 1926 | "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" 1927 | }, 1928 | "mkdirp": { 1929 | "version": "1.0.4", 1930 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", 1931 | "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" 1932 | }, 1933 | "moment": { 1934 | "version": "2.29.4", 1935 | "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", 1936 | "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" 1937 | }, 1938 | "moment-timezone": { 1939 | "version": "0.5.35", 1940 | "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.35.tgz", 1941 | "integrity": "sha512-cY/pBOEXepQvlgli06ttCTKcIf8cD1nmNwOKQQAdHBqYApQSpAqotBMX0RJZNgMp6i0PlZuf1mFtnlyEkwyvFw==", 1942 | "requires": { 1943 | "moment": ">= 2.9.0" 1944 | } 1945 | }, 1946 | "ms": { 1947 | "version": "2.1.2", 1948 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1949 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 1950 | }, 1951 | "mute-stream": { 1952 | "version": "0.0.7", 1953 | "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", 1954 | "integrity": "sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==" 1955 | }, 1956 | "node-fetch": { 1957 | "version": "2.6.7", 1958 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", 1959 | "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", 1960 | "requires": { 1961 | "whatwg-url": "^5.0.0" 1962 | } 1963 | }, 1964 | "node-forge": { 1965 | "version": "1.3.1", 1966 | "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", 1967 | "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==" 1968 | }, 1969 | "object-inspect": { 1970 | "version": "1.12.2", 1971 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", 1972 | "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" 1973 | }, 1974 | "onetime": { 1975 | "version": "2.0.1", 1976 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", 1977 | "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", 1978 | "requires": { 1979 | "mimic-fn": "^1.0.0" 1980 | } 1981 | }, 1982 | "ora": { 1983 | "version": "5.4.1", 1984 | "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", 1985 | "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", 1986 | "requires": { 1987 | "bl": "^4.1.0", 1988 | "chalk": "^4.1.0", 1989 | "cli-cursor": "^3.1.0", 1990 | "cli-spinners": "^2.5.0", 1991 | "is-interactive": "^1.0.0", 1992 | "is-unicode-supported": "^0.1.0", 1993 | "log-symbols": "^4.1.0", 1994 | "strip-ansi": "^6.0.0", 1995 | "wcwidth": "^1.0.1" 1996 | }, 1997 | "dependencies": { 1998 | "ansi-regex": { 1999 | "version": "5.0.1", 2000 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 2001 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" 2002 | }, 2003 | "ansi-styles": { 2004 | "version": "4.3.0", 2005 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 2006 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 2007 | "requires": { 2008 | "color-convert": "^2.0.1" 2009 | } 2010 | }, 2011 | "chalk": { 2012 | "version": "4.1.2", 2013 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 2014 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 2015 | "requires": { 2016 | "ansi-styles": "^4.1.0", 2017 | "supports-color": "^7.1.0" 2018 | } 2019 | }, 2020 | "cli-cursor": { 2021 | "version": "3.1.0", 2022 | "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", 2023 | "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", 2024 | "requires": { 2025 | "restore-cursor": "^3.1.0" 2026 | } 2027 | }, 2028 | "color-convert": { 2029 | "version": "2.0.1", 2030 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 2031 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 2032 | "requires": { 2033 | "color-name": "~1.1.4" 2034 | } 2035 | }, 2036 | "color-name": { 2037 | "version": "1.1.4", 2038 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 2039 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 2040 | }, 2041 | "has-flag": { 2042 | "version": "4.0.0", 2043 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 2044 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" 2045 | }, 2046 | "mimic-fn": { 2047 | "version": "2.1.0", 2048 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", 2049 | "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" 2050 | }, 2051 | "onetime": { 2052 | "version": "5.1.2", 2053 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", 2054 | "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", 2055 | "requires": { 2056 | "mimic-fn": "^2.1.0" 2057 | } 2058 | }, 2059 | "restore-cursor": { 2060 | "version": "3.1.0", 2061 | "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", 2062 | "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", 2063 | "requires": { 2064 | "onetime": "^5.1.0", 2065 | "signal-exit": "^3.0.2" 2066 | } 2067 | }, 2068 | "strip-ansi": { 2069 | "version": "6.0.1", 2070 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 2071 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 2072 | "requires": { 2073 | "ansi-regex": "^5.0.1" 2074 | } 2075 | }, 2076 | "supports-color": { 2077 | "version": "7.2.0", 2078 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 2079 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 2080 | "requires": { 2081 | "has-flag": "^4.0.0" 2082 | } 2083 | } 2084 | } 2085 | }, 2086 | "os-tmpdir": { 2087 | "version": "1.0.2", 2088 | "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", 2089 | "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==" 2090 | }, 2091 | "qs": { 2092 | "version": "6.11.0", 2093 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", 2094 | "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", 2095 | "requires": { 2096 | "side-channel": "^1.0.4" 2097 | } 2098 | }, 2099 | "readable-stream": { 2100 | "version": "3.6.0", 2101 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", 2102 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", 2103 | "requires": { 2104 | "inherits": "^2.0.3", 2105 | "string_decoder": "^1.1.1", 2106 | "util-deprecate": "^1.0.1" 2107 | } 2108 | }, 2109 | "require-directory": { 2110 | "version": "2.1.1", 2111 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 2112 | "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" 2113 | }, 2114 | "restore-cursor": { 2115 | "version": "2.0.0", 2116 | "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", 2117 | "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", 2118 | "requires": { 2119 | "onetime": "^2.0.0", 2120 | "signal-exit": "^3.0.2" 2121 | } 2122 | }, 2123 | "run-async": { 2124 | "version": "2.4.1", 2125 | "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", 2126 | "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" 2127 | }, 2128 | "rxjs": { 2129 | "version": "6.6.7", 2130 | "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", 2131 | "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", 2132 | "requires": { 2133 | "tslib": "^1.9.0" 2134 | } 2135 | }, 2136 | "safe-buffer": { 2137 | "version": "5.2.1", 2138 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 2139 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" 2140 | }, 2141 | "safer-buffer": { 2142 | "version": "2.1.2", 2143 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 2144 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 2145 | }, 2146 | "side-channel": { 2147 | "version": "1.0.4", 2148 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", 2149 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", 2150 | "requires": { 2151 | "call-bind": "^1.0.0", 2152 | "get-intrinsic": "^1.0.2", 2153 | "object-inspect": "^1.9.0" 2154 | } 2155 | }, 2156 | "signal-exit": { 2157 | "version": "3.0.7", 2158 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", 2159 | "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" 2160 | }, 2161 | "string_decoder": { 2162 | "version": "1.3.0", 2163 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", 2164 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", 2165 | "requires": { 2166 | "safe-buffer": "~5.2.0" 2167 | } 2168 | }, 2169 | "string-width": { 2170 | "version": "2.1.1", 2171 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", 2172 | "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", 2173 | "requires": { 2174 | "is-fullwidth-code-point": "^2.0.0", 2175 | "strip-ansi": "^4.0.0" 2176 | }, 2177 | "dependencies": { 2178 | "ansi-regex": { 2179 | "version": "3.0.1", 2180 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", 2181 | "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==" 2182 | }, 2183 | "strip-ansi": { 2184 | "version": "4.0.0", 2185 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", 2186 | "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", 2187 | "requires": { 2188 | "ansi-regex": "^3.0.0" 2189 | } 2190 | } 2191 | } 2192 | }, 2193 | "strip-ansi": { 2194 | "version": "5.2.0", 2195 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", 2196 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", 2197 | "requires": { 2198 | "ansi-regex": "^4.1.0" 2199 | } 2200 | }, 2201 | "supports-color": { 2202 | "version": "5.5.0", 2203 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 2204 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 2205 | "requires": { 2206 | "has-flag": "^3.0.0" 2207 | } 2208 | }, 2209 | "through": { 2210 | "version": "2.3.8", 2211 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 2212 | "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" 2213 | }, 2214 | "tmp": { 2215 | "version": "0.0.33", 2216 | "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", 2217 | "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", 2218 | "requires": { 2219 | "os-tmpdir": "~1.0.2" 2220 | } 2221 | }, 2222 | "tr46": { 2223 | "version": "0.0.3", 2224 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", 2225 | "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" 2226 | }, 2227 | "tslib": { 2228 | "version": "1.14.1", 2229 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", 2230 | "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" 2231 | }, 2232 | "url-template": { 2233 | "version": "2.0.8", 2234 | "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", 2235 | "integrity": "sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw==" 2236 | }, 2237 | "util-deprecate": { 2238 | "version": "1.0.2", 2239 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 2240 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" 2241 | }, 2242 | "uuid": { 2243 | "version": "8.3.2", 2244 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", 2245 | "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" 2246 | }, 2247 | "wcwidth": { 2248 | "version": "1.0.1", 2249 | "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", 2250 | "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", 2251 | "requires": { 2252 | "defaults": "^1.0.3" 2253 | } 2254 | }, 2255 | "webidl-conversions": { 2256 | "version": "3.0.1", 2257 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", 2258 | "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" 2259 | }, 2260 | "whatwg-url": { 2261 | "version": "5.0.0", 2262 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", 2263 | "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", 2264 | "requires": { 2265 | "tr46": "~0.0.3", 2266 | "webidl-conversions": "^3.0.0" 2267 | } 2268 | }, 2269 | "wrap-ansi": { 2270 | "version": "7.0.0", 2271 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 2272 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 2273 | "requires": { 2274 | "ansi-styles": "^4.0.0", 2275 | "string-width": "^4.1.0", 2276 | "strip-ansi": "^6.0.0" 2277 | }, 2278 | "dependencies": { 2279 | "ansi-regex": { 2280 | "version": "5.0.1", 2281 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 2282 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" 2283 | }, 2284 | "ansi-styles": { 2285 | "version": "4.3.0", 2286 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 2287 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 2288 | "requires": { 2289 | "color-convert": "^2.0.1" 2290 | } 2291 | }, 2292 | "color-convert": { 2293 | "version": "2.0.1", 2294 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 2295 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 2296 | "requires": { 2297 | "color-name": "~1.1.4" 2298 | } 2299 | }, 2300 | "color-name": { 2301 | "version": "1.1.4", 2302 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 2303 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 2304 | }, 2305 | "is-fullwidth-code-point": { 2306 | "version": "3.0.0", 2307 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 2308 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" 2309 | }, 2310 | "string-width": { 2311 | "version": "4.2.3", 2312 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 2313 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 2314 | "requires": { 2315 | "emoji-regex": "^8.0.0", 2316 | "is-fullwidth-code-point": "^3.0.0", 2317 | "strip-ansi": "^6.0.1" 2318 | } 2319 | }, 2320 | "strip-ansi": { 2321 | "version": "6.0.1", 2322 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 2323 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 2324 | "requires": { 2325 | "ansi-regex": "^5.0.1" 2326 | } 2327 | } 2328 | } 2329 | }, 2330 | "y18n": { 2331 | "version": "5.0.8", 2332 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", 2333 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" 2334 | }, 2335 | "yallist": { 2336 | "version": "4.0.0", 2337 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 2338 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" 2339 | }, 2340 | "yargs": { 2341 | "version": "16.2.0", 2342 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", 2343 | "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", 2344 | "requires": { 2345 | "cliui": "^7.0.2", 2346 | "escalade": "^3.1.1", 2347 | "get-caller-file": "^2.0.5", 2348 | "require-directory": "^2.1.1", 2349 | "string-width": "^4.2.0", 2350 | "y18n": "^5.0.5", 2351 | "yargs-parser": "^20.2.2" 2352 | }, 2353 | "dependencies": { 2354 | "ansi-regex": { 2355 | "version": "5.0.1", 2356 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 2357 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" 2358 | }, 2359 | "is-fullwidth-code-point": { 2360 | "version": "3.0.0", 2361 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 2362 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" 2363 | }, 2364 | "string-width": { 2365 | "version": "4.2.3", 2366 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 2367 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 2368 | "requires": { 2369 | "emoji-regex": "^8.0.0", 2370 | "is-fullwidth-code-point": "^3.0.0", 2371 | "strip-ansi": "^6.0.1" 2372 | } 2373 | }, 2374 | "strip-ansi": { 2375 | "version": "6.0.1", 2376 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 2377 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 2378 | "requires": { 2379 | "ansi-regex": "^5.0.1" 2380 | } 2381 | } 2382 | } 2383 | }, 2384 | "yargs-parser": { 2385 | "version": "20.2.9", 2386 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", 2387 | "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" 2388 | } 2389 | } 2390 | } 2391 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "attachment-downloader", 3 | "version": "1.1.1", 4 | "description": "Gmail bulk attachment downloader", 5 | "main": "index.js", 6 | "directories": { 7 | "lib": "lib" 8 | }, 9 | "dependencies": { 10 | "atob": "^2.1.2", 11 | "googleapis": "^107.0.0", 12 | "inquirer": "^6.2.1", 13 | "limiter": "^1.1.5", 14 | "lodash": "^4.17.21", 15 | "mkdirp": "^1.0.4", 16 | "moment": "^2.29.2", 17 | "moment-timezone": "^0.5.35", 18 | "ora": "^5.1.0", 19 | "yargs": "^16.1.0" 20 | }, 21 | "devDependencies": {}, 22 | "scripts": { 23 | "test": "echo \"Error: no test specified\" && exit 1" 24 | }, 25 | "repository": { 26 | "type": "git", 27 | "url": "git+https://github.com/munir131/attachment-downloader.git" 28 | }, 29 | "keywords": [ 30 | "Gmail", 31 | "Bulk", 32 | "Attachment", 33 | "Download", 34 | "Node", 35 | "Google", 36 | "API", 37 | "oAuth", 38 | "Decrypt" 39 | ], 40 | "author": "Munir Khakhi", 41 | "license": "MIT", 42 | "bugs": { 43 | "url": "https://github.com/munir131/attachment-downloader/issues" 44 | }, 45 | "homepage": "https://github.com/munir131/attachment-downloader#readme", 46 | "publishConfig": { 47 | "registry": "https://npm.pkg.github.com/" 48 | } 49 | } 50 | --------------------------------------------------------------------------------