├── .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 |
--------------------------------------------------------------------------------