From 85273461b067824667d3f230d9ac39955b616559 Mon Sep 17 00:00:00 2001 From: Steve Bazyl Date: Thu, 22 Sep 2022 12:05:42 -0600 Subject: [PATCH 01/33] chore: Disable date/time in docs While useful, disabling to allow detecting no-op doc changes in workflows. --- jsdoc.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/jsdoc.json b/jsdoc.json index e218753b..ab041955 100644 --- a/jsdoc.json +++ b/jsdoc.json @@ -8,7 +8,8 @@ }, "templates": { "default": { - "outputSourceFiles": false + "outputSourceFiles": false, + "includeDate": false } } } From 611c1766298846ea99fccbdfb1c86d2095d61d26 Mon Sep 17 00:00:00 2001 From: Steve Bazyl Date: Thu, 22 Sep 2022 12:07:00 -0600 Subject: [PATCH 02/33] chore: Make workflow manually callable --- .github/workflows/update-dist.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/update-dist.yml b/.github/workflows/update-dist.yml index d68f5d06..b742a08b 100644 --- a/.github/workflows/update-dist.yml +++ b/.github/workflows/update-dist.yml @@ -1,4 +1,4 @@ -on: [pull_request] +on: [pull_request, workflow_dispatch] name: Update dist folder jobs: update-dist-src: From cf14956f8639e5270b8eadc290c74bfeb47a4be2 Mon Sep 17 00:00:00 2001 From: Nathan Sollenberger Date: Thu, 22 Sep 2022 12:08:44 -0600 Subject: [PATCH 03/33] chore: adds entrypoint (#398) Fixes `Module not found: Error: Can't resolve 'OAuth2' in '/Users/.../src' [...] Field 'browser' doesn't contain a valid alias configuration` when trying to import this package as an ES module. --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index d9891035..51ab56a1 100644 --- a/package.json +++ b/package.json @@ -37,5 +37,6 @@ "doc": "jsdoc -c jsdoc.json src/*.js README.md", "push": "cd src; clasp push", "test": "mocha" - } + }, + "exports": "./dist/OAuth2.gs" } From 64769169c724ee8e375e663285d351f99dc1c423 Mon Sep 17 00:00:00 2001 From: Steve Bazyl Date: Thu, 22 Sep 2022 12:11:14 -0600 Subject: [PATCH 04/33] chore: Add fix command + delint existing files (#392) --- gulpfile.js | 8 +++++ package.json | 1 + samples/StackOverflow.gs | 24 +++++++-------- samples/Twitter.gs | 66 ++++++++++++++++++++-------------------- src/OAuth2.js | 6 ++-- test/mocks/lock.js | 11 +++---- test/mocks/utilities.js | 20 ++++++------ test/test.js | 24 +++++++-------- 8 files changed, 84 insertions(+), 76 deletions(-) diff --git a/gulpfile.js b/gulpfile.js index 0d04b76c..3d65c52c 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -59,3 +59,11 @@ gulp.task('lint', () => { } })); }); + +gulp.task('fix', () => { + return gulp.src(['src/*.js', 'samples/*.gs', 'test/**/*.js', '!node_modules/**']) + .pipe(eslint({fix: true})) + .pipe(eslint.format()) + .pipe(gulp.dest(file => file.base)) +}); + diff --git a/package.json b/package.json index 51ab56a1..3066cee0 100644 --- a/package.json +++ b/package.json @@ -34,6 +34,7 @@ "scripts": { "dist": "gulp dist", "lint": "gulp lint", + "lint:fix": "gulp fix", "doc": "jsdoc -c jsdoc.json src/*.js README.md", "push": "cd src; clasp push", "test": "mocha" diff --git a/samples/StackOverflow.gs b/samples/StackOverflow.gs index 764ed222..8142c74b 100644 --- a/samples/StackOverflow.gs +++ b/samples/StackOverflow.gs @@ -21,7 +21,7 @@ function run() { } else { var authorizationUrl = service.getAuthorizationUrl(); Logger.log('Open the following URL and re-run the script: %s', - authorizationUrl); + authorizationUrl); } } @@ -37,20 +37,20 @@ function reset() { */ function getService_() { return OAuth2.createService('Stack Overflow') - // Set the endpoint URLs. - .setAuthorizationBaseUrl('https://stackoverflow.com/oauth') - .setTokenUrl('https://stackoverflow.com/oauth/access_token/json') + // Set the endpoint URLs. + .setAuthorizationBaseUrl('https://stackoverflow.com/oauth') + .setTokenUrl('https://stackoverflow.com/oauth/access_token/json') - // Set the client ID and secret. - .setClientId(CLIENT_ID) - .setClientSecret(CLIENT_SECRET) + // Set the client ID and secret. + .setClientId(CLIENT_ID) + .setClientSecret(CLIENT_SECRET) - // Set the name of the callback function that should be invoked to - // complete the OAuth flow. - .setCallbackFunction('authCallback') + // Set the name of the callback function that should be invoked to + // complete the OAuth flow. + .setCallbackFunction('authCallback') - // Set the property store where authorized tokens should be persisted. - .setPropertyStore(PropertiesService.getUserProperties()); + // Set the property store where authorized tokens should be persisted. + .setPropertyStore(PropertiesService.getUserProperties()); } /** diff --git a/samples/Twitter.gs b/samples/Twitter.gs index 24eec571..67094e90 100644 --- a/samples/Twitter.gs +++ b/samples/Twitter.gs @@ -22,7 +22,7 @@ function run() { } else { var authorizationUrl = service.getAuthorizationUrl(); Logger.log('Open the following URL and re-run the script: %s', - authorizationUrl); + authorizationUrl); } } @@ -42,34 +42,34 @@ function getService_() { pkceChallengeVerifier(); var userProps = PropertiesService.getUserProperties(); return OAuth2.createService('Twitter') - // Set the endpoint URLs. - .setAuthorizationBaseUrl('https://twitter.com/i/oauth2/authorize') - .setTokenUrl( - 'https://api.twitter.com/2/oauth2/token?code_verifier=' + userProps.getProperty("code_verifier")) + // Set the endpoint URLs. + .setAuthorizationBaseUrl('https://twitter.com/i/oauth2/authorize') + .setTokenUrl( + 'https://api.twitter.com/2/oauth2/token?code_verifier=' + userProps.getProperty('code_verifier')) - // Set the client ID and secret. - .setClientId(CLIENT_ID) - .setClientSecret(CLIENT_SECRET) + // Set the client ID and secret. + .setClientId(CLIENT_ID) + .setClientSecret(CLIENT_SECRET) - // Set the name of the callback function that should be invoked to - // complete the OAuth flow. - .setCallbackFunction('authCallback') + // Set the name of the callback function that should be invoked to + // complete the OAuth flow. + .setCallbackFunction('authCallback') - // Set the property store where authorized tokens should be persisted. - .setPropertyStore(userProps) + // Set the property store where authorized tokens should be persisted. + .setPropertyStore(userProps) - // Set the scopes to request (space-separated for Twitter services). - .setScope('users.read tweet.read offline.access') - - // Add parameters in the authorization url - .setParam('response_type', 'code') - .setParam('code_challenge_method', 'S256') - .setParam('code_challenge', userProps.getProperty("code_challenge")) + // Set the scopes to request (space-separated for Twitter services). + .setScope('users.read tweet.read offline.access') - .setTokenHeaders({ - 'Authorization': 'Basic ' + Utilities.base64Encode(CLIENT_ID + ':' + CLIENT_SECRET), - 'Content-Type': 'application/x-www-form-urlencoded' - }) + // Add parameters in the authorization url + .setParam('response_type', 'code') + .setParam('code_challenge_method', 'S256') + .setParam('code_challenge', userProps.getProperty('code_challenge')) + + .setTokenHeaders({ + 'Authorization': 'Basic ' + Utilities.base64Encode(CLIENT_ID + ':' + CLIENT_SECRET), + 'Content-Type': 'application/x-www-form-urlencoded' + }); } /** @@ -97,21 +97,21 @@ function logRedirectUri() { */ function pkceChallengeVerifier() { var userProps = PropertiesService.getUserProperties(); - if (!userProps.getProperty("code_verifier")) { - var verifier = ""; - var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~"; + if (!userProps.getProperty('code_verifier')) { + var verifier = ''; + var possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~'; for (var i = 0; i < 128; i++) { verifier += possible.charAt(Math.floor(Math.random() * possible.length)); } - var sha256Hash = Utilities.computeDigest(Utilities.DigestAlgorithm.SHA_256, verifier) + var sha256Hash = Utilities.computeDigest(Utilities.DigestAlgorithm.SHA_256, verifier); var challenge = Utilities.base64Encode(sha256Hash) - .replace(/\+/g, '-') - .replace(/\//g, '_') - .replace(/=+$/, '') - userProps.setProperty("code_verifier", verifier) - userProps.setProperty("code_challenge", challenge) + .replace(/\+/g, '-') + .replace(/\//g, '_') + .replace(/=+$/, ''); + userProps.setProperty('code_verifier', verifier); + userProps.setProperty('code_challenge', challenge); } } diff --git a/src/OAuth2.js b/src/OAuth2.js index e3e566f2..d2b95a7b 100644 --- a/src/OAuth2.js +++ b/src/OAuth2.js @@ -65,12 +65,12 @@ function getRedirectUri(optScriptId) { */ function getServiceNames(propertyStore) { var props = propertyStore.getProperties(); - return Object.keys(props).filter(function (key) { + return Object.keys(props).filter(function(key) { var parts = key.split('.'); return key.indexOf(STORAGE_PREFIX_) == 0 && parts.length > 1 && parts[1]; - }).map(function (key) { + }).map(function(key) { return key.split('.')[1]; - }).reduce(function (result, key) { + }).reduce(function(result, key) { if (result.indexOf(key) < 0) { result.push(key); } diff --git a/test/mocks/lock.js b/test/mocks/lock.js index 75c626e3..8c68b27d 100644 --- a/test/mocks/lock.js +++ b/test/mocks/lock.js @@ -15,15 +15,14 @@ */ /** - * @file Mocks out Apps Script's LockService.Lock. Does not implement correct lock - * semantics at the moment. Previous versions relied on node-fibers which is now - * obsolete. It's possible to recreate apps script multi-threaded environment - * via worker threads and implement proper locking and that may be considered - * in the future. + * @file Mocks out Apps Script's LockService.Lock. Does not implement + * correct lock semantics at the moment. Previous versions relied on + * node-fibers which is now obsolete. It's possible to recreate apps + * script multi-threaded environment via worker threads and implement + * proper locking and that may be considered in the future. */ var locked = false; -var waitingFibers = []; var MockLock = function() { this.hasLock_ = false; diff --git a/test/mocks/utilities.js b/test/mocks/utilities.js index 21481675..5627e81a 100644 --- a/test/mocks/utilities.js +++ b/test/mocks/utilities.js @@ -22,14 +22,14 @@ var MockUtilities = function(optCache) { this.store = optCache || {}; this.counter = 0; }; - + MockUtilities.prototype.base64Encode = function(data) { -return Buffer.from(data).toString('base64'); + return Buffer.from(data).toString('base64'); }; MockUtilities.prototype.base64EncodeWebSafe = function(data) { return URLSafeBase64.encode(Buffer.from(data)); -} +}; MockUtilities.prototype.base64DecodeWebSafe = function(data) { return URLSafeBase64.decode(data); @@ -44,17 +44,17 @@ MockUtilities.prototype.newBlob = function(data) { }; MockUtilities.prototype.DigestAlgorithm = { - SHA_256: 'sha256' + SHA_256: 'sha256' }; MockUtilities.prototype.Charset = { - US_ASCII: 'us_ascii' + US_ASCII: 'us_ascii' }; MockUtilities.prototype.computeDigest = function(algorithm, data, charSet) { - const hash = crypto.createHash(algorithm); - hash.update(data); - return hash.digest('utf8'); -} + const hash = crypto.createHash(algorithm); + hash.update(data); + return hash.digest('utf8'); +}; -module.exports = MockUtilities; \ No newline at end of file +module.exports = MockUtilities; diff --git a/test/test.js b/test/test.js index dc123636..252d6d29 100644 --- a/test/test.js +++ b/test/test.js @@ -308,11 +308,11 @@ describe('Service', () => { }); var service = OAuth2.createService('test') - .setClientId('abc') - .setClientSecret('def') - .setTokenUrl('http://www.example.com/') - .setPropertyStore(properties) - .setLock(lock); + .setClientId('abc') + .setClientSecret('def') + .setTokenUrl('http://www.example.com/') + .setPropertyStore(properties) + .setLock(lock); service.hasAccess(); assert.equal(lock.counter, 1); done(); @@ -376,12 +376,12 @@ describe('Service', () => { access_token: Math.random().toString(36) }); OAuth2.createService('test') - .setClientId('abc') - .setClientSecret('def') - .setTokenUrl('http://www.example.com/') - .setPropertyStore(properties) - .setLock(lock) - .refresh(); + .setClientId('abc') + .setClientSecret('def') + .setTokenUrl('http://www.example.com/') + .setPropertyStore(properties) + .setLock(lock) + .refresh(); assert.equal(lock.counter, 1); done(); }); @@ -597,7 +597,7 @@ describe('Service', () => { expiresAt: ONE_HOUR_LATER_SECONDS, refreshTokenExpiresAt: ONE_HOUR_LATER_SECONDS }; - console.log('test') + console.log('test'); assert.isTrue(service.canRefresh_(token)); }); From 4893adbaf04a0e720fa9e295c96b65819cc983c6 Mon Sep 17 00:00:00 2001 From: Steve Bazyl Date: Thu, 22 Sep 2022 12:29:43 -0600 Subject: [PATCH 05/33] chore: Relax line limit on linter + minor delinting --- .eslintrc.js | 6 ++++++ package-lock.json | 1 + samples/Onshape.gs | 4 ++-- samples/Twitter.gs | 4 ++-- 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 8714fb90..f9bb7a3e 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -28,6 +28,12 @@ module.exports = { "rules": { "comma-dangle": "off", "no-var": "off", + "max-len": [ + "error", { + "code": 100, + "ignoreUrls": true + } + ], "generator-star-spacing": ["error", {"anonymous": "neither"}], } }; diff --git a/package-lock.json b/package-lock.json index 0dfb5c2f..350dafc8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,6 +5,7 @@ "requires": true, "packages": { "": { + "name": "apps-script-oauth2", "version": "1.41.0", "license": "Apache-2.0", "devDependencies": { diff --git a/samples/Onshape.gs b/samples/Onshape.gs index dee3f18b..18762be4 100644 --- a/samples/Onshape.gs +++ b/samples/Onshape.gs @@ -25,7 +25,7 @@ function run() { }); var result = JSON.parse(response.getContentText()); Logger.log(JSON.stringify(result, null, 2)); - } else { + } else { var authorizationUrl = service.getAuthorizationUrl(); Logger.log('Open the following URL and re-run the script: %s', authorizationUrl); @@ -78,4 +78,4 @@ function authCallback(request) { */ function logRedirectUri() { Logger.log(OAuth2.getRedirectUri()); -} \ No newline at end of file +} diff --git a/samples/Twitter.gs b/samples/Twitter.gs index 67094e90..d149882d 100644 --- a/samples/Twitter.gs +++ b/samples/Twitter.gs @@ -31,8 +31,8 @@ function run() { */ function reset() { getService_().reset(); - PropertiesService.getUserProperties().deleteProperty("code_challenge"); - PropertiesService.getUserProperties().deleteProperty("code_verifier"); + PropertiesService.getUserProperties().deleteProperty('code_challenge'); + PropertiesService.getUserProperties().deleteProperty('code_verifier'); } /** From 045731f0aee9941d04042b474cb945dac645d394 Mon Sep 17 00:00:00 2001 From: Steve Bazyl Date: Thu, 22 Sep 2022 12:32:46 -0600 Subject: [PATCH 06/33] chore: Update dependencies --- package-lock.json | 477 +++++++++++----------------------------------- package.json | 2 +- 2 files changed, 107 insertions(+), 372 deletions(-) diff --git a/package-lock.json b/package-lock.json index 350dafc8..16a69e2f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "@google/clasp": "2.4.1", "chai": "4.3.6", "del": "6.0.0", - "eslint": "8.21.0", + "eslint": "8.23.1", "eslint-config-google": "0.14.0", "gas-local": "1.3.1", "gulp": "4.0.2", @@ -146,14 +146,14 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", - "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.2.tgz", + "integrity": "sha512-AXYd23w1S/bv3fTs3Lz0vjiYemS08jWkI3hYyS9I1ry+0f+Yjs1wm+sU0BS8qDOPrBIkp4qHYC16I8uVtpLajQ==", "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.3.2", + "espree": "^9.4.0", "globals": "^13.15.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", @@ -163,6 +163,9 @@ }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/@eslint/eslintrc/node_modules/minimatch": { @@ -545,6 +548,19 @@ "url": "https://github.com/sponsors/nzakas" } }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, "node_modules/@humanwhocodes/object-schema": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", @@ -1941,36 +1957,6 @@ "typedarray": "^0.0.6" } }, - "node_modules/concat-stream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "node_modules/concat-stream/node_modules/readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/concat-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/concat-with-sourcemaps": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz", @@ -2591,14 +2577,15 @@ } }, "node_modules/eslint": { - "version": "8.21.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.21.0.tgz", - "integrity": "sha512-/XJ1+Qurf1T9G2M5IHrsjp+xrGT73RZf23xA1z5wB1ZzzEAWSZKvRwhWxTFp1rvkvCfwcvAUNAP31bhKTTGfDA==", + "version": "8.23.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.23.1.tgz", + "integrity": "sha512-w7C1IXCc6fNqjpuYd0yPlcTKKmHlHHktRkzmBPZ+7cvNBQuiNjx0xaMTjAJGCafJhQkrFJooREv0CtrVzmHwqg==", "dev": true, "dependencies": { - "@eslint/eslintrc": "^1.3.0", + "@eslint/eslintrc": "^1.3.2", "@humanwhocodes/config-array": "^0.10.4", "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", + "@humanwhocodes/module-importer": "^1.0.1", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -2608,13 +2595,12 @@ "eslint-scope": "^7.1.1", "eslint-utils": "^3.0.0", "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.3", + "espree": "^9.4.0", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "find-up": "^5.0.0", - "functional-red-black-tree": "^1.0.1", "glob-parent": "^6.0.1", "globals": "^13.15.0", "globby": "^11.1.0", @@ -2623,6 +2609,7 @@ "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", + "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", @@ -2633,8 +2620,7 @@ "regexpp": "^3.2.0", "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "text-table": "^0.2.0" }, "bin": { "eslint": "bin/eslint.js" @@ -2753,9 +2739,9 @@ } }, "node_modules/espree": { - "version": "9.3.3", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.3.tgz", - "integrity": "sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng==", + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz", + "integrity": "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==", "dev": true, "dependencies": { "acorn": "^8.8.0", @@ -4261,7 +4247,7 @@ "node_modules/glob-parent": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", "dev": true, "dependencies": { "is-glob": "^3.1.0", @@ -4283,7 +4269,7 @@ "node_modules/glob-stream": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", - "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=", + "integrity": "sha512-uMbLGAP3S2aDOHUDfdoYcdIePUCfysbAd0IAoWVZbeGU/oNQ8asHVSshLDJUPWxfzj8zsCG7/XeHPHTtow0nsw==", "dev": true, "dependencies": { "extend": "^3.0.0", @@ -4302,9 +4288,9 @@ } }, "node_modules/glob-watcher": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.3.tgz", - "integrity": "sha512-8tWsULNEPHKQ2MR4zXuzSmqbdyV5PtwwCaWSGQ1WwHsJ07ilNeN1JB8ntxhckbnpSHaf9dXFUHzIWvm1I13dsg==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.5.tgz", + "integrity": "sha512-zOZgGGEHPklZNjZQaZ9f41i7F2YwE+tS5ZHrDhbBCk3stwahn5vQxnFmBJZHoYdusR6R1bLSXeGUy/BhctwKzw==", "dev": true, "dependencies": { "anymatch": "^2.0.0", @@ -4312,12 +4298,22 @@ "chokidar": "^2.0.0", "is-negated-glob": "^1.0.0", "just-debounce": "^1.0.0", + "normalize-path": "^3.0.0", "object.defaults": "^1.1.0" }, "engines": { "node": ">= 0.10" } }, + "node_modules/glob-watcher/node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/global-modules": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", @@ -4576,21 +4572,6 @@ "node": ">=0.10.0" } }, - "node_modules/gulp-clean/node_modules/clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/gulp-clean/node_modules/clone-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", - "dev": true - }, "node_modules/gulp-clean/node_modules/extend-shallow": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz", @@ -4628,32 +4609,6 @@ "node": ">=0.10.0" } }, - "node_modules/gulp-clean/node_modules/replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/gulp-clean/node_modules/vinyl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz", - "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==", - "dev": true, - "dependencies": { - "clone": "^2.1.1", - "clone-buffer": "^1.0.0", - "clone-stats": "^1.0.0", - "cloneable-readable": "^1.0.0", - "remove-trailing-separator": "^1.0.1", - "replace-ext": "^1.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/gulp-concat": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/gulp-concat/-/gulp-concat-2.6.1.tgz", @@ -4668,47 +4623,6 @@ "node": ">= 0.10" } }, - "node_modules/gulp-concat/node_modules/clone": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz", - "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/gulp-concat/node_modules/clone-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", - "dev": true - }, - "node_modules/gulp-concat/node_modules/replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/gulp-concat/node_modules/vinyl": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.1.0.tgz", - "integrity": "sha1-Ah+cLPlR1rk5lDyJ617lrdT9kkw=", - "dev": true, - "dependencies": { - "clone": "^2.1.1", - "clone-buffer": "^1.0.0", - "clone-stats": "^1.0.0", - "cloneable-readable": "^1.0.0", - "remove-trailing-separator": "^1.0.1", - "replace-ext": "^1.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/gulp-contains": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/gulp-contains/-/gulp-contains-1.2.0.tgz", @@ -6211,6 +6125,12 @@ "node": ">=0.10.0" } }, + "node_modules/js-sdsl": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.4.tgz", + "integrity": "sha512-Y2/yD55y5jteOAmY50JbUZYwk3CP3wnLPEZnlR1w9oKhITrBEtAxwuWKebFf8hMrPMgbYwFoWK/lH2sBkErELw==", + "dev": true + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -6898,9 +6818,9 @@ } }, "node_modules/mocha/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "engines": { "node": ">=8" @@ -7882,9 +7802,9 @@ } }, "node_modules/path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, "node_modules/path-root": { @@ -7988,31 +7908,6 @@ "node": ">= 0.10" } }, - "node_modules/plugin-error/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/plugin-error/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", @@ -9282,36 +9177,6 @@ "xtend": "~4.0.0" } }, - "node_modules/through2/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "node_modules/through2/node_modules/readable-stream": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.4.tgz", - "integrity": "sha512-vuYxeWYM+fde14+rajzqgeohAI7YoJcHE7kXDAc4Nk0EbuKnJfqtY9YtRkLo/tqkuF7MsBQRhPnPeyjYITp3ZQ==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.0.3", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/through2/node_modules/string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/time-stamp": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", @@ -10167,14 +10032,14 @@ "dev": true }, "@eslint/eslintrc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", - "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.2.tgz", + "integrity": "sha512-AXYd23w1S/bv3fTs3Lz0vjiYemS08jWkI3hYyS9I1ry+0f+Yjs1wm+sU0BS8qDOPrBIkp4qHYC16I8uVtpLajQ==", "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.3.2", + "espree": "^9.4.0", "globals": "^13.15.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", @@ -10451,6 +10316,12 @@ "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", "dev": true }, + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true + }, "@humanwhocodes/object-schema": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", @@ -11521,38 +11392,6 @@ "inherits": "^2.0.3", "readable-stream": "^2.2.2", "typedarray": "^0.0.6" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } } }, "concat-with-sourcemaps": { @@ -12051,14 +11890,15 @@ "dev": true }, "eslint": { - "version": "8.21.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.21.0.tgz", - "integrity": "sha512-/XJ1+Qurf1T9G2M5IHrsjp+xrGT73RZf23xA1z5wB1ZzzEAWSZKvRwhWxTFp1rvkvCfwcvAUNAP31bhKTTGfDA==", + "version": "8.23.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.23.1.tgz", + "integrity": "sha512-w7C1IXCc6fNqjpuYd0yPlcTKKmHlHHktRkzmBPZ+7cvNBQuiNjx0xaMTjAJGCafJhQkrFJooREv0CtrVzmHwqg==", "dev": true, "requires": { - "@eslint/eslintrc": "^1.3.0", + "@eslint/eslintrc": "^1.3.2", "@humanwhocodes/config-array": "^0.10.4", "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", + "@humanwhocodes/module-importer": "^1.0.1", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -12068,13 +11908,12 @@ "eslint-scope": "^7.1.1", "eslint-utils": "^3.0.0", "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.3", + "espree": "^9.4.0", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "find-up": "^5.0.0", - "functional-red-black-tree": "^1.0.1", "glob-parent": "^6.0.1", "globals": "^13.15.0", "globby": "^11.1.0", @@ -12083,6 +11922,7 @@ "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", + "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", @@ -12093,8 +11933,7 @@ "regexpp": "^3.2.0", "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "text-table": "^0.2.0" }, "dependencies": { "ansi-regex": { @@ -12173,9 +12012,9 @@ "dev": true }, "espree": { - "version": "9.3.3", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.3.tgz", - "integrity": "sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng==", + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz", + "integrity": "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==", "dev": true, "requires": { "acorn": "^8.8.0", @@ -13356,7 +13195,7 @@ "glob-parent": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", "dev": true, "requires": { "is-glob": "^3.1.0", @@ -13377,7 +13216,7 @@ "glob-stream": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", - "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=", + "integrity": "sha512-uMbLGAP3S2aDOHUDfdoYcdIePUCfysbAd0IAoWVZbeGU/oNQ8asHVSshLDJUPWxfzj8zsCG7/XeHPHTtow0nsw==", "dev": true, "requires": { "extend": "^3.0.0", @@ -13393,9 +13232,9 @@ } }, "glob-watcher": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.3.tgz", - "integrity": "sha512-8tWsULNEPHKQ2MR4zXuzSmqbdyV5PtwwCaWSGQ1WwHsJ07ilNeN1JB8ntxhckbnpSHaf9dXFUHzIWvm1I13dsg==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.5.tgz", + "integrity": "sha512-zOZgGGEHPklZNjZQaZ9f41i7F2YwE+tS5ZHrDhbBCk3stwahn5vQxnFmBJZHoYdusR6R1bLSXeGUy/BhctwKzw==", "dev": true, "requires": { "anymatch": "^2.0.0", @@ -13403,7 +13242,16 @@ "chokidar": "^2.0.0", "is-negated-glob": "^1.0.0", "just-debounce": "^1.0.0", + "normalize-path": "^3.0.0", "object.defaults": "^1.1.0" + }, + "dependencies": { + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + } } }, "global-modules": { @@ -13629,18 +13477,6 @@ "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", "dev": true }, - "clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", - "dev": true - }, - "clone-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", - "dev": true - }, "extend-shallow": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz", @@ -13668,26 +13504,6 @@ "arr-union": "^2.0.1", "extend-shallow": "^1.1.2" } - }, - "replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", - "dev": true - }, - "vinyl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz", - "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==", - "dev": true, - "requires": { - "clone": "^2.1.1", - "clone-buffer": "^1.0.0", - "clone-stats": "^1.0.0", - "cloneable-readable": "^1.0.0", - "remove-trailing-separator": "^1.0.1", - "replace-ext": "^1.0.0" - } } } }, @@ -13700,40 +13516,6 @@ "concat-with-sourcemaps": "^1.0.0", "through2": "^2.0.0", "vinyl": "^2.0.0" - }, - "dependencies": { - "clone": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz", - "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=", - "dev": true - }, - "clone-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", - "dev": true - }, - "replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", - "dev": true - }, - "vinyl": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.1.0.tgz", - "integrity": "sha1-Ah+cLPlR1rk5lDyJ617lrdT9kkw=", - "dev": true, - "requires": { - "clone": "^2.1.1", - "clone-buffer": "^1.0.0", - "clone-stats": "^1.0.0", - "cloneable-readable": "^1.0.0", - "remove-trailing-separator": "^1.0.1", - "replace-ext": "^1.0.0" - } - } } }, "gulp-contains": { @@ -14862,6 +14644,12 @@ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true }, + "js-sdsl": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.4.tgz", + "integrity": "sha512-Y2/yD55y5jteOAmY50JbUZYwk3CP3wnLPEZnlR1w9oKhITrBEtAxwuWKebFf8hMrPMgbYwFoWK/lH2sBkErELw==", + "dev": true + }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -15414,9 +15202,9 @@ "dev": true }, "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, "anymatch": { @@ -16134,9 +15922,9 @@ "dev": true }, "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, "path-root": { @@ -16208,27 +15996,6 @@ "arr-diff": "^4.0.0", "arr-union": "^3.1.0", "extend-shallow": "^3.0.2" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } } }, "posix-character-classes": { @@ -17227,38 +16994,6 @@ "requires": { "readable-stream": "^2.1.5", "xtend": "~4.0.1" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.4.tgz", - "integrity": "sha512-vuYxeWYM+fde14+rajzqgeohAI7YoJcHE7kXDAc4Nk0EbuKnJfqtY9YtRkLo/tqkuF7MsBQRhPnPeyjYITp3ZQ==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.0.3", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } } }, "through2-filter": { diff --git a/package.json b/package.json index 3066cee0..236c7687 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "@google/clasp": "2.4.1", "chai": "4.3.6", "del": "6.0.0", - "eslint": "8.21.0", + "eslint": "8.23.1", "eslint-config-google": "0.14.0", "gas-local": "1.3.1", "gulp": "4.0.2", From babe818c066bab85ced874d81829a2db3e8222c7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 22 Sep 2022 12:34:36 -0600 Subject: [PATCH 07/33] build(deps): bump ini and ini (#399) Bumps [ini](https://github.com/npm/ini) and [ini](https://github.com/npm/ini). These dependencies needed to be updated together. Updates `ini` from 1.3.5 to 1.3.7 - [Release notes](https://github.com/npm/ini/releases) - [Changelog](https://github.com/npm/ini/blob/main/CHANGELOG.md) - [Commits](https://github.com/npm/ini/compare/v1.3.5...v1.3.7) Updates `ini` from 1.3.7 to 1.3.7 - [Release notes](https://github.com/npm/ini/releases) - [Changelog](https://github.com/npm/ini/blob/main/CHANGELOG.md) - [Commits](https://github.com/npm/ini/compare/v1.3.5...v1.3.7) --- updated-dependencies: - dependency-name: ini dependency-type: indirect - dependency-name: ini dependency-type: indirect ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 16a69e2f..fdf431b6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5539,9 +5539,9 @@ "dev": true }, "node_modules/ini": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", - "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==", + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true }, "node_modules/inquirer": { @@ -14202,9 +14202,9 @@ "dev": true }, "ini": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", - "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==", + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true }, "inquirer": { From 506a5eb52a9b4601eeff9d63a3b647af6fd02d9a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 22 Sep 2022 12:35:03 -0600 Subject: [PATCH 08/33] Bump minimist from 1.2.5 to 1.2.6 (#355) Bumps [minimist](https://github.com/substack/minimist) from 1.2.5 to 1.2.6. - [Release notes](https://github.com/substack/minimist/releases) - [Commits](https://github.com/substack/minimist/compare/1.2.5...1.2.6) --- updated-dependencies: - dependency-name: minimist dependency-type: indirect ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 6 ------ 1 file changed, 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index fdf431b6..3bd56310 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12767,12 +12767,6 @@ "brace-expansion": "^1.1.7" } }, - "minimist": { - "version": "1.2.5", - "bundled": true, - "dev": true, - "optional": true - }, "minipass": { "version": "2.9.0", "bundled": true, From 861f9ac803f7676eeb9a805d3d1f8e0e80cfc6ae Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 22 Sep 2022 12:35:22 -0600 Subject: [PATCH 09/33] Bump pathval from 1.1.0 to 1.1.1 (#343) Bumps [pathval](https://github.com/chaijs/pathval) from 1.1.0 to 1.1.1. - [Release notes](https://github.com/chaijs/pathval/releases) - [Changelog](https://github.com/chaijs/pathval/blob/master/CHANGELOG.md) - [Commits](https://github.com/chaijs/pathval/compare/v1.1.0...v1.1.1) --- updated-dependencies: - dependency-name: pathval dependency-type: indirect ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> From 33d7ae38cb37d9bf9e0d32a88f7d8ef59c5126d3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 22 Sep 2022 12:36:26 -0600 Subject: [PATCH 10/33] Bump path-parse from 1.0.6 to 1.0.7 (#319) Bumps [path-parse](https://github.com/jbgutierrez/path-parse) from 1.0.6 to 1.0.7. - [Release notes](https://github.com/jbgutierrez/path-parse/releases) - [Commits](https://github.com/jbgutierrez/path-parse/commits/v1.0.7) --- updated-dependencies: - dependency-name: path-parse dependency-type: indirect ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> From 625520094ec96e969b09e2e719431165d43b06d7 Mon Sep 17 00:00:00 2001 From: Steve Bazyl Date: Fri, 23 Sep 2022 10:22:01 -0600 Subject: [PATCH 11/33] chore: ignore docs dir for license check --- .github/header-checker-lint.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 .github/header-checker-lint.yml diff --git a/.github/header-checker-lint.yml b/.github/header-checker-lint.yml new file mode 100644 index 00000000..2f8ca36f --- /dev/null +++ b/.github/header-checker-lint.yml @@ -0,0 +1,12 @@ +allowedCopyrightHolders: + - 'Google LLC' +allowedLicenses: + - 'Apache-2.0' + - 'MIT' + - 'BSD-3' +sourceFileExtensions: + - 'ts' + - 'js' + - 'java' +ignoreFiles: + - 'docs/**' \ No newline at end of file From 9773c5e472cdcad8e76360c23f658052238220f1 Mon Sep 17 00:00:00 2001 From: googleworkspace-bot <109114539+googleworkspace-bot@users.noreply.github.com> Date: Fri, 23 Sep 2022 10:24:06 -0600 Subject: [PATCH 12/33] chore(main): release 1.42.0 (#395) * chore(main): release 1.42.0 * chore: Update dist/ and docs/ directories * Update CHANGELOG.md * chore: Update dist/ and docs/ directories Co-authored-by: Steve Bazyl --- CHANGELOG.md | 12 + dist/OAuth2.gs | 54 +++- docs/Service_.html | 436 ++++++++++++++++++++++++++++-- docs/Storage_.html | 20 +- docs/global.html | 351 ++++++++++++++++++++++-- docs/index.html | 26 +- docs/scripts/linenumber.js | 16 -- docs/scripts/prettify/lang-css.js | 16 -- docs/scripts/prettify/prettify.js | 16 -- docs/styles/jsdoc-default.css | 16 -- docs/styles/prettify-jsdoc.css | 16 -- docs/styles/prettify-tomorrow.css | 16 -- package-lock.json | 4 +- package.json | 2 +- 14 files changed, 820 insertions(+), 181 deletions(-) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000..3917630f --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,12 @@ +# Changelog + +## 1.42.0 (2022-09-22) + +### Features + +* PKCE code verifier support ([#339](https://github.com/googleworkspace/apps-script-oauth2/pull/339)) + +### Bug Fixes + +* "Prompt" property for auth URL in sample ([#317](https://github.com/googleworkspace/apps-script-oauth2/issues/317)) ([6da6876](https://github.com/googleworkspace/apps-script-oauth2/commit/6da68763a98586ae0bc916e5258ea7f0bebf4cb2)) +* prevent samples from leaking OAuth client ID + Secret to users ([#379](https://github.com/googleworkspace/apps-script-oauth2/issues/379)) ([a5480c1](https://github.com/googleworkspace/apps-script-oauth2/commit/a5480c177386a807461b84d1b84627e272bc2355)) diff --git a/dist/OAuth2.gs b/dist/OAuth2.gs index db80e1f9..7f3b7768 100644 --- a/dist/OAuth2.gs +++ b/dist/OAuth2.gs @@ -48,7 +48,7 @@ function createService(serviceName) { /** * Returns the redirect URI that will be used for a given script. Often this URI * needs to be entered into a configuration screen of your OAuth provider. - * @param {string} [optScriptId] The script ID of your script, which can be + * @param {string=} optScriptId The script ID of your script, which can be * found in the Script Editor UI under "File > Project properties". Defaults * to the script ID of the script being executed. * @return {string} The redirect URI. @@ -56,7 +56,7 @@ function createService(serviceName) { function getRedirectUri(optScriptId) { var scriptId = optScriptId || ScriptApp.getScriptId(); return 'https://script.google.com/macros/d/' + encodeURIComponent(scriptId) + - '/usercallback'; + '/usercallback'; } /** @@ -228,7 +228,7 @@ Service_.prototype.setCodeVerififer = function(codeVerifier) { }; /** - * Sets teh code verifier to a randomly generated challenge string. + * Sets the code verifier to a randomly generated challenge string. * @return {!Service_} This service, for chaining */ Service_.prototype.generateCodeVerifier = function() { @@ -724,10 +724,35 @@ Service_.prototype.parseToken_ = function(content) { } else { throw new Error('Unknown token format: ' + this.tokenFormat_); } - token.granted_time = getTimeInSeconds_(new Date()); + this.ensureExpiresAtSet_(token); return token; }; +/** + * Adds expiresAt annotations on the token if not set. + * @param {string} token A token. + * @private + */ +Service_.prototype.ensureExpiresAtSet_ = function(token) { + // handle prior migrations + if (token.expiresAt !== undefined) { + return; + } + + // granted_time was added in prior versions of this library + var grantedTime = token.granted_time || getTimeInSeconds_(new Date()); + var expiresIn = token.expires_in_sec || token.expires_in || token.expires; + if (expiresIn) { + var expiresAt = grantedTime + Number(expiresIn); + token.expiresAt = expiresAt; + } + var refreshTokenExpiresIn = token.refresh_token_expires_in; + if (refreshTokenExpiresIn) { + var refreshTokenExpiresAt = grantedTime + Number(refreshTokenExpiresIn); + token.refreshTokenExpiresAt = refreshTokenExpiresAt; + } +}; + /** * Refreshes a token that has expired. This is only possible if offline access * was requested when the token was authorized. @@ -754,6 +779,11 @@ Service_.prototype.refresh = function() { if (!newToken.refresh_token) { newToken.refresh_token = token.refresh_token; } + this.ensureExpiresAtSet_(token); + // Propagate refresh token expiry if new token omits it + if (newToken.refreshTokenExpiresAt === undefined) { + newToken.refreshTokenExpiresAt = token.refreshTokenExpiresAt; + } this.saveToken_(newToken); }); }; @@ -805,6 +835,13 @@ Service_.prototype.isExpired_ = function(token) { var now = getTimeInSeconds_(new Date()); // Check the authorization token's expiration. + if (token.expiresAt) { + if (token.expiresAt - now < Service_.EXPIRATION_BUFFER_SECONDS_) { + expired = true; + } + } + + // Previous code path, provided for migration purpose, can be removed later var expiresIn = token.expires_in_sec || token.expires_in || token.expires; if (expiresIn) { var expiresTime = token.granted_time + Number(expiresIn); @@ -833,13 +870,14 @@ Service_.prototype.isExpired_ = function(token) { */ Service_.prototype.canRefresh_ = function(token) { if (!token.refresh_token) return false; - var expiresIn = token.refresh_token_expires_in; - if (!expiresIn) { + this.ensureExpiresAtSet_(token); + if (token.refreshTokenExpiresAt === undefined) { return true; } else { - var expiresTime = token.granted_time + Number(expiresIn); var now = getTimeInSeconds_(new Date()); - return expiresTime - now > Service_.EXPIRATION_BUFFER_SECONDS_; + return ( + token.refreshTokenExpiresAt - now > Service_.EXPIRATION_BUFFER_SECONDS_ + ); } }; diff --git a/docs/Service_.html b/docs/Service_.html index 2dfe6cb4..c3f48cfc 100644 --- a/docs/Service_.html +++ b/docs/Service_.html @@ -1,20 +1,4 @@ - - @@ -491,6 +475,111 @@
Returns:
+

generateCodeVerifier() → (non-null) {Service_}

+ + + + + + +
+ Sets the code verifier to a randomly generated challenge string. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ This service, for chaining +
+ + + +
+
+ Type +
+
+ +Service_ + + +
+
+ + + + + + + + + + + + +

getAccessToken() → {string}

@@ -2734,6 +2823,317 @@
Returns:
+

setCodeChallengeMethod(method) → (non-null) {Service_}

+ + + + + + +
+ Set the code challenge method for PKCE. The default value method +when a code verifier is set is S256. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
method + + +string + + + + Challenge method, either "S256" or "plain"
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ This service, for chaining +
+ + + +
+
+ Type +
+
+ +Service_ + + +
+
+ + + + + + + + + + + + + +

setCodeVerififer(codeVerifier) → (non-null) {Service_}

+ + + + + + +
+ Set the code verifier used for PKCE. For most use cases, +prefer `generateCodeVerifier` to automatically initialize the +value with a generated challenge string. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
codeVerifier + + +string + + + + A random challenge string
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ This service, for chaining +
+ + + +
+
+ Type +
+
+ +Service_ + + +
+
+ + + + + + + + + + + + +

setExpirationMinutes(expirationMinutes) → (non-null) {Service_}

@@ -5316,13 +5716,13 @@
Returns:

- Documentation generated by JSDoc 3.6.4 on Fri May 14 2021 09:53:29 GMT-0400 (Eastern Daylight Time) + Documentation generated by JSDoc 3.6.11
diff --git a/docs/Storage_.html b/docs/Storage_.html index cc4c9d88..43c1a6fe 100644 --- a/docs/Storage_.html +++ b/docs/Storage_.html @@ -1,20 +1,4 @@ - - @@ -1045,13 +1029,13 @@
Parameters:

- Documentation generated by JSDoc 3.6.4 on Fri May 14 2021 09:53:29 GMT-0400 (Eastern Daylight Time) + Documentation generated by JSDoc 3.6.11
diff --git a/docs/global.html b/docs/global.html index 3b144825..a9409b0a 100644 --- a/docs/global.html +++ b/docs/global.html @@ -1,20 +1,4 @@ - - @@ -576,6 +560,183 @@
Returns:
+

encodeChallenge_(method, codeVerifier) → {string}

+ + + + + + +
+ Encodes a challenge string for PKCE. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
method + + +string + + + + Encoding method (S256 or plain)
codeVerifier + + +string + + + + String to encode
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ BASE64(SHA256(ASCII(codeVerifier))) +
+ + + +
+
+ Type +
+
+ +string + + +
+
+ + + + + + + + + + + + +

encodeJwt_(payload, key) → {string}

@@ -753,6 +914,160 @@
Returns:
+

encodeUrlSafeBase64NoPadding_(value) → {string}

+ + + + + + +
+ Wrapper around base64 encoded to strip padding. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
value + + +string + + + +
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ Web safe base64 encoded with padding removed. +
+ + + +
+
+ Type +
+
+ +string + + +
+
+ + + + + + + + + + + + +

extend_(destination, source) → {Object}

@@ -1726,13 +2041,13 @@
Returns:

- Documentation generated by JSDoc 3.6.4 on Fri May 14 2021 09:53:29 GMT-0400 (Eastern Daylight Time) + Documentation generated by JSDoc 3.6.11
diff --git a/docs/index.html b/docs/index.html index 7500cc9d..db77c345 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1,20 +1,4 @@ - - @@ -59,8 +43,7 @@

-

OAuth2 for Apps Script

-

OAuth2 for Apps Script is a library for Google Apps Script that provides the +

OAuth2 for Apps Script is a library for Google Apps Script that provides the ability to create and authorize OAuth2 tokens as well as refresh them when they expire. This library uses Apps Script's StateTokenBuilder @@ -131,6 +114,9 @@

1. Create the OAuth2 service

information is not persisted to any data store, so you'll need to create this object each time you want to use it. The example below shows how to create a service for the Google Drive API.

+

Ensure the method is private (has an underscore at the end of the name) to +prevent clients from being able to call the method to read your client ID and +secret.

function getDriveService_() {
   // Create a new service with the given name. The name will be used when
   // persisting the authorized token, so ensure it is unique within the
@@ -836,13 +822,13 @@ 

Utilities.js


- Documentation generated by JSDoc 3.6.4 on Fri May 14 2021 09:53:29 GMT-0400 (Eastern Daylight Time) + Documentation generated by JSDoc 3.6.11
diff --git a/docs/scripts/linenumber.js b/docs/scripts/linenumber.js index 8e949198..4354785c 100644 --- a/docs/scripts/linenumber.js +++ b/docs/scripts/linenumber.js @@ -1,19 +1,3 @@ -/** - * Copyright 2022 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - /*global document */ (() => { const source = document.getElementsByClassName('prettyprint source linenums'); diff --git a/docs/scripts/prettify/lang-css.js b/docs/scripts/prettify/lang-css.js index 4504d176..041e1f59 100644 --- a/docs/scripts/prettify/lang-css.js +++ b/docs/scripts/prettify/lang-css.js @@ -1,18 +1,2 @@ -/** - * Copyright 2022 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\f\r ]+/,null," \t\r\n "]],[["str",/^"(?:[^\n\f\r"\\]|\\(?:\r\n?|\n|\f)|\\[\S\s])*"/,null],["str",/^'(?:[^\n\f\r'\\]|\\(?:\r\n?|\n|\f)|\\[\S\s])*'/,null],["lang-css-str",/^url\(([^"')]*)\)/i],["kwd",/^(?:url|rgb|!important|@import|@page|@media|@charset|inherit)(?=[^\w-]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*)\s*:/i],["com",/^\/\*[^*]*\*+(?:[^*/][^*]*\*+)*\//],["com", /^(?:<\!--|--\>)/],["lit",/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],["lit",/^#[\da-f]{3,6}/i],["pln",/^-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*/i],["pun",/^[^\s\w"']+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[["kwd",/^-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[["str",/^[^"')]+/]]),["css-str"]); diff --git a/docs/scripts/prettify/prettify.js b/docs/scripts/prettify/prettify.js index 61409473..eef5ad7e 100644 --- a/docs/scripts/prettify/prettify.js +++ b/docs/scripts/prettify/prettify.js @@ -1,19 +1,3 @@ -/** - * Copyright 2022 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - var q=null;window.PR_SHOULD_USE_CONTINUATION=!0; (function(){function L(a){function m(a){var f=a.charCodeAt(0);if(f!==92)return f;var b=a.charAt(1);return(f=r[b])?f:"0"<=b&&b<="7"?parseInt(a.substring(1),8):b==="u"||b==="x"?parseInt(a.substring(2),16):a.charCodeAt(1)}function e(a){if(a<32)return(a<16?"\\x0":"\\x")+a.toString(16);a=String.fromCharCode(a);if(a==="\\"||a==="-"||a==="["||a==="]")a="\\"+a;return a}function h(a){for(var f=a.substring(1,a.length-1).match(/\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\[0-3][0-7]{0,2}|\\[0-7]{1,2}|\\[\S\s]|[^\\]/g),a= [],b=[],o=f[0]==="^",c=o?1:0,i=f.length;c122||(d<65||j>90||b.push([Math.max(65,j)|32,Math.min(d,90)|32]),d<97||j>122||b.push([Math.max(97,j)&-33,Math.min(d,122)&-33]))}}b.sort(function(a,f){return a[0]-f[0]||f[1]-a[1]});f=[];j=[NaN,NaN];for(c=0;c Date: Fri, 23 Sep 2022 10:33:17 -0600 Subject: [PATCH 13/33] fix: Remove use of 'let' for Rhino compatibility --- src/Service.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Service.js b/src/Service.js index f16bd45c..119ee5a4 100644 --- a/src/Service.js +++ b/src/Service.js @@ -140,7 +140,7 @@ Service_.prototype.setCodeVerififer = function(codeVerifier) { */ Service_.prototype.generateCodeVerifier = function() { const rawBytes = []; - for (let i = 0; i < 32; ++i) { + for (var i = 0; i < 32; ++i) { const r = Math.floor(Math.random() * 255); rawBytes[i] = r; } From f6fdc9ac98bb4c099c002c60b1a5ddced66f95f1 Mon Sep 17 00:00:00 2001 From: Steve Bazyl Date: Fri, 23 Sep 2022 10:37:20 -0600 Subject: [PATCH 14/33] fix: Remove use of 'let' for Rhino compatibility --- src/Utilities.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Utilities.js b/src/Utilities.js index dfcbd0fc..c39a88fb 100644 --- a/src/Utilities.js +++ b/src/Utilities.js @@ -137,7 +137,7 @@ function decodeJwt_(jwt) { * @return {string} Web safe base64 encoded with padding removed. */ function encodeUrlSafeBase64NoPadding_(value) { - let encodedValue = Utilities.base64EncodeWebSafe(value); + var encodedValue = Utilities.base64EncodeWebSafe(value); encodedValue = encodedValue.slice(0, encodedValue.indexOf('=')); return encodedValue; } From df653f4859287eff91b250fdcbc49e7570907c26 Mon Sep 17 00:00:00 2001 From: googleworkspace-bot <109114539+googleworkspace-bot@users.noreply.github.com> Date: Fri, 23 Sep 2022 10:38:15 -0600 Subject: [PATCH 15/33] chore(main): release 1.42.1 (#400) --- CHANGELOG.md | 8 ++++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3917630f..8f998cde 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## [1.42.1](https://github.com/googleworkspace/apps-script-oauth2/compare/v1.42.0...v1.42.1) (2022-09-23) + + +### Bug Fixes + +* Remove use of 'let' for Rhino compatibility ([f6fdc9a](https://github.com/googleworkspace/apps-script-oauth2/commit/f6fdc9ac98bb4c099c002c60b1a5ddced66f95f1)) +* Remove use of 'let' for Rhino compatibility ([089a3e4](https://github.com/googleworkspace/apps-script-oauth2/commit/089a3e4af8c06b82156e76ef2b78b5f202a0a0e5)) + ## 1.42.0 (2022-09-22) ### Features diff --git a/package-lock.json b/package-lock.json index 4928b994..18506749 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "apps-script-oauth2", - "version": "1.42.0", + "version": "1.42.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "apps-script-oauth2", - "version": "1.42.0", + "version": "1.42.1", "license": "Apache-2.0", "devDependencies": { "@google/clasp": "2.4.1", diff --git a/package.json b/package.json index 60f34607..d537b686 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "apps-script-oauth2", - "version": "1.42.0", + "version": "1.42.1", "description": "OAuth2 for Apps Script is a library for Google Apps Script that provides the ability to create and authorize OAuth2 tokens as well as refresh them when they expire.", "repository": { "type": "git", From 87ac240d1dc9524a2281b67ef70f9af154474a32 Mon Sep 17 00:00:00 2001 From: Steve Bazyl Date: Fri, 23 Sep 2022 13:15:47 -0600 Subject: [PATCH 16/33] chore: Ensure description quoted when creating new version with clasp --- .github/workflows/release-please.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml index 68cfc3e2..f1e92cee 100644 --- a/.github/workflows/release-please.yml +++ b/.github/workflows/release-please.yml @@ -30,4 +30,4 @@ jobs: run: | cd src npx @google/clasp push - MESSAGE=$(git log -1 --pretty=%B) npx @google/clasp version ${MESSAGE} + MESSAGE=$(git log -1 --pretty=%B) npx @google/clasp version "${MESSAGE}" From 64e73f6b5aa2aaea369c7e8bd15e01b99adf0988 Mon Sep 17 00:00:00 2001 From: googleworkspace-bot <109114539+googleworkspace-bot@users.noreply.github.com> Date: Fri, 30 Sep 2022 08:56:23 -0600 Subject: [PATCH 17/33] chore: Synced local '.github/sync-repo-settings.yaml' with remote 'sync-files/defaults/.github/sync-repo-settings.yaml' (#401) --- .github/sync-repo-settings.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/sync-repo-settings.yaml b/.github/sync-repo-settings.yaml index 1e81cab7..fc025621 100644 --- a/.github/sync-repo-settings.yaml +++ b/.github/sync-repo-settings.yaml @@ -37,3 +37,5 @@ branchProtectionRules: permissionRules: - team: workspace-devrel-dpe permission: admin + - team: workspace-devrel + permission: write From 90c5ae9d29f6e1684d0e257073b884e7d034b25b Mon Sep 17 00:00:00 2001 From: googleworkspace-bot <109114539+googleworkspace-bot@users.noreply.github.com> Date: Mon, 3 Oct 2022 10:27:36 -0600 Subject: [PATCH 18/33] chore: Synced local '.github/sync-repo-settings.yaml' with remote 'sync-files/defaults/.github/sync-repo-settings.yaml' (#403) --- .github/sync-repo-settings.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/sync-repo-settings.yaml b/.github/sync-repo-settings.yaml index fc025621..7b363bc4 100644 --- a/.github/sync-repo-settings.yaml +++ b/.github/sync-repo-settings.yaml @@ -38,4 +38,4 @@ permissionRules: - team: workspace-devrel-dpe permission: admin - team: workspace-devrel - permission: write + permission: push From 3d7eaf91981d2923de790e87be3aa66c9b735916 Mon Sep 17 00:00:00 2001 From: Steve Bazyl Date: Tue, 4 Oct 2022 15:01:02 -0600 Subject: [PATCH 19/33] chore: Renovate -> dependabot --- renovate.json | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 renovate.json diff --git a/renovate.json b/renovate.json deleted file mode 100644 index f45d8f11..00000000 --- a/renovate.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "extends": [ - "config:base" - ] -} From 058c71f627ab6c5a6b0cbeeaee3f3138daf56621 Mon Sep 17 00:00:00 2001 From: Steve Bazyl Date: Tue, 4 Oct 2022 15:02:52 -0600 Subject: [PATCH 20/33] chore: Enable dependabot --- .github/dependabot.yml | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 00000000..14ff1326 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,8 @@ +version: 2 +updates: + - package-ecosystem: "npm" + directory: "/" + schedule: + interval: "weekly" + commit-message: + prefix: "chore(deps):" From 97b99c69eab8347a42fbba65902bffa8ec0ce0b7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 4 Oct 2022 15:05:33 -0600 Subject: [PATCH 21/33] chore(deps): bump eslint from 8.23.1 to 8.24.0 (#404) Bumps [eslint](https://github.com/eslint/eslint) from 8.23.1 to 8.24.0. - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/compare/v8.23.1...v8.24.0) --- updated-dependencies: - dependency-name: eslint dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 36 +++++++++++++++++++++--------------- package.json | 2 +- 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/package-lock.json b/package-lock.json index 18506749..c5fb40a7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "@google/clasp": "2.4.1", "chai": "4.3.6", "del": "6.0.0", - "eslint": "8.23.1", + "eslint": "8.24.0", "eslint-config-google": "0.14.0", "gas-local": "1.3.1", "gulp": "4.0.2", @@ -525,9 +525,9 @@ } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz", - "integrity": "sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==", + "version": "0.10.7", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.7.tgz", + "integrity": "sha512-MDl6D6sBsaV452/QSdX+4CXIjZhIcI0PELsxUjk4U828yd58vk3bTIvk/6w5FY+4hIy9sLW0sfrV7K7Kc++j/w==", "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", @@ -2577,13 +2577,13 @@ } }, "node_modules/eslint": { - "version": "8.23.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.23.1.tgz", - "integrity": "sha512-w7C1IXCc6fNqjpuYd0yPlcTKKmHlHHktRkzmBPZ+7cvNBQuiNjx0xaMTjAJGCafJhQkrFJooREv0CtrVzmHwqg==", + "version": "8.24.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.24.0.tgz", + "integrity": "sha512-dWFaPhGhTAiPcCgm3f6LI2MBWbogMnTJzFBbhXVRQDJPkr9pGZvVjlVfXd+vyDcWPA2Ic9L2AXPIQM0+vk/cSQ==", "dev": true, "dependencies": { "@eslint/eslintrc": "^1.3.2", - "@humanwhocodes/config-array": "^0.10.4", + "@humanwhocodes/config-array": "^0.10.5", "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", "@humanwhocodes/module-importer": "^1.0.1", "ajv": "^6.10.0", @@ -10300,9 +10300,9 @@ } }, "@humanwhocodes/config-array": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz", - "integrity": "sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==", + "version": "0.10.7", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.7.tgz", + "integrity": "sha512-MDl6D6sBsaV452/QSdX+4CXIjZhIcI0PELsxUjk4U828yd58vk3bTIvk/6w5FY+4hIy9sLW0sfrV7K7Kc++j/w==", "dev": true, "requires": { "@humanwhocodes/object-schema": "^1.2.1", @@ -11890,13 +11890,13 @@ "dev": true }, "eslint": { - "version": "8.23.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.23.1.tgz", - "integrity": "sha512-w7C1IXCc6fNqjpuYd0yPlcTKKmHlHHktRkzmBPZ+7cvNBQuiNjx0xaMTjAJGCafJhQkrFJooREv0CtrVzmHwqg==", + "version": "8.24.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.24.0.tgz", + "integrity": "sha512-dWFaPhGhTAiPcCgm3f6LI2MBWbogMnTJzFBbhXVRQDJPkr9pGZvVjlVfXd+vyDcWPA2Ic9L2AXPIQM0+vk/cSQ==", "dev": true, "requires": { "@eslint/eslintrc": "^1.3.2", - "@humanwhocodes/config-array": "^0.10.4", + "@humanwhocodes/config-array": "^0.10.5", "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", "@humanwhocodes/module-importer": "^1.0.1", "ajv": "^6.10.0", @@ -12767,6 +12767,12 @@ "brace-expansion": "^1.1.7" } }, + "minimist": { + "version": "1.2.5", + "bundled": true, + "dev": true, + "optional": true + }, "minipass": { "version": "2.9.0", "bundled": true, diff --git a/package.json b/package.json index d537b686..7b70541d 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "@google/clasp": "2.4.1", "chai": "4.3.6", "del": "6.0.0", - "eslint": "8.23.1", + "eslint": "8.24.0", "eslint-config-google": "0.14.0", "gas-local": "1.3.1", "gulp": "4.0.2", From 743fe22f9ca7feb85e83bcb8073dd72579aecbf0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 30 Nov 2022 17:00:27 -0700 Subject: [PATCH 22/33] chore(deps): bump @google/clasp from 2.4.1 to 2.4.2 (#405) Bumps [@google/clasp](https://github.com/google/clasp) from 2.4.1 to 2.4.2. - [Release notes](https://github.com/google/clasp/releases) - [Changelog](https://github.com/google/clasp/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/clasp/compare/v2.4.1...v2.4.2) --- updated-dependencies: - dependency-name: "@google/clasp" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 910 +++++++++++++++++++++++++++++++++++++++------- package.json | 2 +- 2 files changed, 788 insertions(+), 124 deletions(-) diff --git a/package-lock.json b/package-lock.json index c5fb40a7..97de3aa6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "1.42.1", "license": "Apache-2.0", "devDependencies": { - "@google/clasp": "2.4.1", + "@google/clasp": "2.4.2", "chai": "4.3.6", "del": "6.0.0", "eslint": "8.24.0", @@ -181,23 +181,24 @@ } }, "node_modules/@google/clasp": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@google/clasp/-/clasp-2.4.1.tgz", - "integrity": "sha512-csjufiygKXa845N04Mp8DWxHx2GiGp2RviuKAvvanC/+NoU4Fmxo9aLKATpC7XL5mNSYqy+VhTikFTZEP2u9Kg==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@google/clasp/-/clasp-2.4.2.tgz", + "integrity": "sha512-SrHzWSotR8c7mNBVwH81sFCc4HhoDrCevicJehQlvrvgdTvLIiU0Pfb5EYCzWUPBSC4Ez/nvW6wxsgaK7RrPjQ==", "dev": true, "dependencies": { - "chalk": "^4.1.1", - "chokidar": "^3.5.1", - "cli-truncate": "^2.1.0", - "commander": "^7.2.0", + "@sindresorhus/is": "^4.0.1", + "chalk": "^4.1.2", + "chokidar": "^3.5.2", + "cli-truncate": "^3.0.0", + "commander": "^8.1.0", "debounce": "^1.2.1", - "dotf": "^2.0.0", - "find-up": "^5.0.0", + "dotf": "^2.0.2", + "find-up": "^6.0.0", "fs-extra": "^10.0.0", "fuzzy": "^0.1.3", - "google-auth-library": "^7.1.2", - "googleapis": "^76.0.0", - "inquirer": "^8.1.0", + "google-auth-library": "^7.6.2", + "googleapis": "^84.0.0", + "inquirer": "^8.1.2", "inquirer-autocomplete-prompt-ipt": "^2.0.0", "is-reachable": "^5.0.0", "log-symbols": "^5.0.0", @@ -205,17 +206,16 @@ "make-dir": "^3.1.0", "multimatch": "^5.0.0", "normalize-newline": "^4.1.0", - "open": "^8.2.0", - "ora": "^5.4.1", - "p-map": "^5.0.0", + "open": "^8.2.1", + "ora": "^6.0.0", + "p-map": "^5.1.0", "read-pkg-up": "^8.0.0", "recursive-readdir": "^2.2.2", "server-destroy": "^1.0.1", "split-lines": "^3.0.0", "strip-bom": "^5.0.0", - "ts2gas": "^4.0.0", - "typescript": "^4.3.2", - "wtfnode": "^0.8.4" + "ts2gas": "^4.2.0", + "typescript": "^4.4.2" }, "bin": { "clasp": "build/src/index.js" @@ -224,6 +224,18 @@ "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, + "node_modules/@google/clasp/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, "node_modules/@google/clasp/node_modules/anymatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", @@ -246,6 +258,17 @@ "node": ">=8" } }, + "node_modules/@google/clasp/node_modules/bl": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-5.0.0.tgz", + "integrity": "sha512-8vxFNZ0pflFfi0WXA3WQXlj6CaMEwsmh63I1CNp0q+wWv8sD0ARx1KovSQd0l2GkwrMIOyedq0EF1FxI+RCZLQ==", + "dev": true, + "dependencies": { + "buffer": "^6.0.3", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, "node_modules/@google/clasp/node_modules/braces": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", @@ -258,6 +281,30 @@ "node": ">=8" } }, + "node_modules/@google/clasp/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, "node_modules/@google/clasp/node_modules/chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -285,6 +332,21 @@ "fsevents": "~2.3.2" } }, + "node_modules/@google/clasp/node_modules/cli-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", + "dev": true, + "dependencies": { + "restore-cursor": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@google/clasp/node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -297,6 +359,22 @@ "node": ">=8" } }, + "node_modules/@google/clasp/node_modules/find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dev": true, + "dependencies": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@google/clasp/node_modules/fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", @@ -347,6 +425,18 @@ "node": ">=8" } }, + "node_modules/@google/clasp/node_modules/is-interactive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@google/clasp/node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -368,6 +458,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@google/clasp/node_modules/locate-path": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.1.1.tgz", + "integrity": "sha512-vJXaRMJgRVD3+cUZs3Mncj2mxpt5mP0EmNOsxRSZRMlbqjvxzDEOIUWXGmavo0ZC9+tNZCBLQ66reA11nbpHZg==", + "dev": true, + "dependencies": { + "p-locate": "^6.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@google/clasp/node_modules/log-symbols": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz", @@ -420,6 +525,71 @@ "node": ">=0.10.0" } }, + "node_modules/@google/clasp/node_modules/ora": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/ora/-/ora-6.1.2.tgz", + "integrity": "sha512-EJQ3NiP5Xo94wJXIzAyOtSb0QEIAUu7m8t6UZ9krbz0vAJqr92JpcK/lEXg91q6B9pEGqrykkd2EQplnifDSBw==", + "dev": true, + "dependencies": { + "bl": "^5.0.0", + "chalk": "^5.0.0", + "cli-cursor": "^4.0.0", + "cli-spinners": "^2.6.1", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^1.1.0", + "log-symbols": "^5.1.0", + "strip-ansi": "^7.0.1", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@google/clasp/node_modules/ora/node_modules/chalk": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.0.1.tgz", + "integrity": "sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@google/clasp/node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@google/clasp/node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dev": true, + "dependencies": { + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@google/clasp/node_modules/parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", @@ -438,6 +608,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@google/clasp/node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, "node_modules/@google/clasp/node_modules/read-pkg": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-6.0.0.tgz", @@ -473,6 +652,102 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@google/clasp/node_modules/read-pkg-up/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@google/clasp/node_modules/read-pkg-up/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@google/clasp/node_modules/read-pkg-up/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@google/clasp/node_modules/read-pkg-up/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@google/clasp/node_modules/read-pkg-up/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@google/clasp/node_modules/read-pkg-up/node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@google/clasp/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/@google/clasp/node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -485,6 +760,42 @@ "node": ">=8.10.0" } }, + "node_modules/@google/clasp/node_modules/restore-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@google/clasp/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/@google/clasp/node_modules/semver": { "version": "7.3.7", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", @@ -500,6 +811,30 @@ "node": ">=10" } }, + "node_modules/@google/clasp/node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/@google/clasp/node_modules/strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, "node_modules/@google/clasp/node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -518,7 +853,19 @@ "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", "dev": true, "engines": { - "node": ">=10" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@google/clasp/node_modules/yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "dev": true, + "engines": { + "node": ">=12.20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -1131,15 +1478,6 @@ "node": ">=0.10.0" } }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/async-done": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz", @@ -1300,9 +1638,9 @@ ] }, "node_modules/bignumber.js": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.2.tgz", - "integrity": "sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.0.tgz", + "integrity": "sha512-4LwHK4nfDOraBCtst+wOWIHbu1vhvAPJK8g8nROd4iuc3PSEjWif/qwbkh8jwCJz6yDBvtU4KPynETgrfh7y3A==", "dev": true, "engines": { "node": "*" @@ -1731,21 +2069,71 @@ } }, "node_modules/cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", + "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", "dev": true, "dependencies": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" + "slice-ansi": "^5.0.0", + "string-width": "^5.0.0" }, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/cli-truncate/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/cli-truncate/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/cli-truncate/node_modules/strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, "node_modules/cli-width": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", @@ -1909,12 +2297,12 @@ } }, "node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", "dev": true, "engines": { - "node": ">= 10" + "node": ">= 12" } }, "node_modules/component-emitter": { @@ -2469,6 +2857,12 @@ "object.defaults": "^1.1.0" } }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, "node_modules/ecdsa-sig-formatter": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", @@ -3142,9 +3536,9 @@ "dev": true }, "node_modules/fast-text-encoding": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.4.tgz", - "integrity": "sha512-x6lDDm/tBAzX9kmsPcZsNbvDs3Zey3+scsxaZElS8xWLgUMAg/oFLeewfUz0mu1CblHhhsu15jGkraldkFh8KQ==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.6.tgz", + "integrity": "sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==", "dev": true }, "node_modules/fastq": { @@ -4187,9 +4581,9 @@ } }, "node_modules/get-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", "dev": true, "dependencies": { "function-bind": "^1.1.1", @@ -4427,9 +4821,9 @@ } }, "node_modules/googleapis": { - "version": "76.0.0", - "resolved": "https://registry.npmjs.org/googleapis/-/googleapis-76.0.0.tgz", - "integrity": "sha512-l/TFSW7IRFcb7wF641BlmuP8Ox1ncuzJk5Fcs2947otlGBm5ktDxFhPkmrcNDaG+LWPQsuDwP1ojL0xV39cpmw==", + "version": "84.0.0", + "resolved": "https://registry.npmjs.org/googleapis/-/googleapis-84.0.0.tgz", + "integrity": "sha512-5WWLwmraulw3p55lu0gNpLz2FME1gcuR7QxgmUdAVHMiVN4LEasYjJV9p36gxcf2TMe6bn6+PgQ/63+CvBEgoQ==", "dev": true, "dependencies": { "google-auth-library": "^7.0.2", @@ -8625,17 +9019,43 @@ } }, "node_modules/slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", "dev": true, "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.1.tgz", + "integrity": "sha512-qDOv24WjnYuL+wbwHdlsYZFy+cgPtrYw0Tn7GLORicQp9BkQLzrgI3Pm4VyR9ERZ41YTn7KlMPuL1n05WdZvmg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/snapdragon": { @@ -9795,15 +10215,6 @@ "node": ">=4" } }, - "node_modules/wtfnode": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/wtfnode/-/wtfnode-0.8.4.tgz", - "integrity": "sha512-64GEKtMt/MUBuAm+8kHqP74ojjafzu00aT0JKsmkIwYmjRQ/odO0yhbzKLm+Z9v1gMla+8dwITRKzTAlHsB+Og==", - "dev": true, - "bin": { - "wtfnode": "proxy.js" - } - }, "node_modules/xmlcreate": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz", @@ -10060,23 +10471,24 @@ } }, "@google/clasp": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@google/clasp/-/clasp-2.4.1.tgz", - "integrity": "sha512-csjufiygKXa845N04Mp8DWxHx2GiGp2RviuKAvvanC/+NoU4Fmxo9aLKATpC7XL5mNSYqy+VhTikFTZEP2u9Kg==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@google/clasp/-/clasp-2.4.2.tgz", + "integrity": "sha512-SrHzWSotR8c7mNBVwH81sFCc4HhoDrCevicJehQlvrvgdTvLIiU0Pfb5EYCzWUPBSC4Ez/nvW6wxsgaK7RrPjQ==", "dev": true, "requires": { - "chalk": "^4.1.1", - "chokidar": "^3.5.1", - "cli-truncate": "^2.1.0", - "commander": "^7.2.0", + "@sindresorhus/is": "^4.0.1", + "chalk": "^4.1.2", + "chokidar": "^3.5.2", + "cli-truncate": "^3.0.0", + "commander": "^8.1.0", "debounce": "^1.2.1", - "dotf": "^2.0.0", - "find-up": "^5.0.0", + "dotf": "^2.0.2", + "find-up": "^6.0.0", "fs-extra": "^10.0.0", "fuzzy": "^0.1.3", - "google-auth-library": "^7.1.2", - "googleapis": "^76.0.0", - "inquirer": "^8.1.0", + "google-auth-library": "^7.6.2", + "googleapis": "^84.0.0", + "inquirer": "^8.1.2", "inquirer-autocomplete-prompt-ipt": "^2.0.0", "is-reachable": "^5.0.0", "log-symbols": "^5.0.0", @@ -10084,19 +10496,24 @@ "make-dir": "^3.1.0", "multimatch": "^5.0.0", "normalize-newline": "^4.1.0", - "open": "^8.2.0", - "ora": "^5.4.1", - "p-map": "^5.0.0", + "open": "^8.2.1", + "ora": "^6.0.0", + "p-map": "^5.1.0", "read-pkg-up": "^8.0.0", "recursive-readdir": "^2.2.2", "server-destroy": "^1.0.1", "split-lines": "^3.0.0", "strip-bom": "^5.0.0", - "ts2gas": "^4.0.0", - "typescript": "^4.3.2", - "wtfnode": "^0.8.4" + "ts2gas": "^4.2.0", + "typescript": "^4.4.2" }, "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + }, "anymatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", @@ -10113,6 +10530,17 @@ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true }, + "bl": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-5.0.0.tgz", + "integrity": "sha512-8vxFNZ0pflFfi0WXA3WQXlj6CaMEwsmh63I1CNp0q+wWv8sD0ARx1KovSQd0l2GkwrMIOyedq0EF1FxI+RCZLQ==", + "dev": true, + "requires": { + "buffer": "^6.0.3", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, "braces": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", @@ -10122,6 +10550,16 @@ "fill-range": "^7.0.1" } }, + "buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, "chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -10138,6 +10576,15 @@ "readdirp": "~3.6.0" } }, + "cli-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", + "dev": true, + "requires": { + "restore-cursor": "^4.0.0" + } + }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -10147,6 +10594,16 @@ "to-regex-range": "^5.0.1" } }, + "find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dev": true, + "requires": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + } + }, "fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", @@ -10181,6 +10638,12 @@ "binary-extensions": "^2.0.0" } }, + "is-interactive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", + "dev": true + }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -10193,6 +10656,15 @@ "integrity": "sha512-wH+U77omcRzevfIG8dDhTS0V9zZyweakfD01FULl97+0EHiJTTZtJqxPSkIIo/SDPv/i07k/C9jAPY+jwLLeUQ==", "dev": true }, + "locate-path": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.1.1.tgz", + "integrity": "sha512-vJXaRMJgRVD3+cUZs3Mncj2mxpt5mP0EmNOsxRSZRMlbqjvxzDEOIUWXGmavo0ZC9+tNZCBLQ66reA11nbpHZg==", + "dev": true, + "requires": { + "p-locate": "^6.0.0" + } + }, "log-symbols": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz", @@ -10229,6 +10701,49 @@ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, + "ora": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/ora/-/ora-6.1.2.tgz", + "integrity": "sha512-EJQ3NiP5Xo94wJXIzAyOtSb0QEIAUu7m8t6UZ9krbz0vAJqr92JpcK/lEXg91q6B9pEGqrykkd2EQplnifDSBw==", + "dev": true, + "requires": { + "bl": "^5.0.0", + "chalk": "^5.0.0", + "cli-cursor": "^4.0.0", + "cli-spinners": "^2.6.1", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^1.1.0", + "log-symbols": "^5.1.0", + "strip-ansi": "^7.0.1", + "wcwidth": "^1.0.1" + }, + "dependencies": { + "chalk": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.0.1.tgz", + "integrity": "sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==", + "dev": true + } + } + }, + "p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "requires": { + "yocto-queue": "^1.0.0" + } + }, + "p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dev": true, + "requires": { + "p-limit": "^4.0.0" + } + }, "parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", @@ -10241,6 +10756,12 @@ "lines-and-columns": "^1.1.6" } }, + "path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "dev": true + }, "read-pkg": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-6.0.0.tgz", @@ -10262,6 +10783,68 @@ "find-up": "^5.0.0", "read-pkg": "^6.0.0", "type-fest": "^1.0.1" + }, + "dependencies": { + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true + } + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } }, "readdirp": { @@ -10273,6 +10856,22 @@ "picomatch": "^2.2.1" } }, + "restore-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, "semver": { "version": "7.3.7", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", @@ -10282,6 +10881,24 @@ "lru-cache": "^6.0.0" } }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -10296,6 +10913,12 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", "dev": true + }, + "yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "dev": true } } }, @@ -10759,12 +11382,6 @@ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", "dev": true }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true - }, "async-done": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz", @@ -10883,9 +11500,9 @@ "dev": true }, "bignumber.js": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.2.tgz", - "integrity": "sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.0.tgz", + "integrity": "sha512-4LwHK4nfDOraBCtst+wOWIHbu1vhvAPJK8g8nROd4iuc3PSEjWif/qwbkh8jwCJz6yDBvtU4KPynETgrfh7y3A==", "dev": true }, "binary-extensions": { @@ -11212,13 +11829,47 @@ "dev": true }, "cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", + "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", "dev": true, "requires": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" + "slice-ansi": "^5.0.0", + "string-width": "^5.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + } } }, "cli-width": { @@ -11355,9 +12006,9 @@ "dev": true }, "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", "dev": true }, "component-emitter": { @@ -11794,6 +12445,12 @@ "object.defaults": "^1.1.0" } }, + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, "ecdsa-sig-formatter": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", @@ -12334,9 +12991,9 @@ "dev": true }, "fast-text-encoding": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.4.tgz", - "integrity": "sha512-x6lDDm/tBAzX9kmsPcZsNbvDs3Zey3+scsxaZElS8xWLgUMAg/oFLeewfUz0mu1CblHhhsu15jGkraldkFh8KQ==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.6.tgz", + "integrity": "sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==", "dev": true }, "fastq": { @@ -13153,9 +13810,9 @@ "dev": true }, "get-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", "dev": true, "requires": { "function-bind": "^1.1.1", @@ -13337,9 +13994,9 @@ } }, "googleapis": { - "version": "76.0.0", - "resolved": "https://registry.npmjs.org/googleapis/-/googleapis-76.0.0.tgz", - "integrity": "sha512-l/TFSW7IRFcb7wF641BlmuP8Ox1ncuzJk5Fcs2947otlGBm5ktDxFhPkmrcNDaG+LWPQsuDwP1ojL0xV39cpmw==", + "version": "84.0.0", + "resolved": "https://registry.npmjs.org/googleapis/-/googleapis-84.0.0.tgz", + "integrity": "sha512-5WWLwmraulw3p55lu0gNpLz2FME1gcuR7QxgmUdAVHMiVN4LEasYjJV9p36gxcf2TMe6bn6+PgQ/63+CvBEgoQ==", "dev": true, "requires": { "google-auth-library": "^7.0.2", @@ -16552,14 +17209,27 @@ "dev": true }, "slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", "dev": true, "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.1.tgz", + "integrity": "sha512-qDOv24WjnYuL+wbwHdlsYZFy+cgPtrYw0Tn7GLORicQp9BkQLzrgI3Pm4VyR9ERZ41YTn7KlMPuL1n05WdZvmg==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "dev": true + } } }, "snapdragon": { @@ -17511,12 +18181,6 @@ "mkdirp": "^0.5.1" } }, - "wtfnode": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/wtfnode/-/wtfnode-0.8.4.tgz", - "integrity": "sha512-64GEKtMt/MUBuAm+8kHqP74ojjafzu00aT0JKsmkIwYmjRQ/odO0yhbzKLm+Z9v1gMla+8dwITRKzTAlHsB+Og==", - "dev": true - }, "xmlcreate": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz", diff --git a/package.json b/package.json index 7b70541d..b1ad1535 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ }, "homepage": "https://github.com/googlesamples/apps-script-oauth2", "devDependencies": { - "@google/clasp": "2.4.1", + "@google/clasp": "2.4.2", "chai": "4.3.6", "del": "6.0.0", "eslint": "8.24.0", From 8e858e7bb53e83904105587587aecea6ddb76110 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 30 Nov 2022 17:00:52 -0700 Subject: [PATCH 23/33] chore(deps): bump eslint from 8.24.0 to 8.28.0 (#414) Bumps [eslint](https://github.com/eslint/eslint) from 8.24.0 to 8.28.0. - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/compare/v8.24.0...v8.28.0) --- updated-dependencies: - dependency-name: eslint dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 119 ++++++++++++++++++++++++---------------------- package.json | 2 +- 2 files changed, 64 insertions(+), 57 deletions(-) diff --git a/package-lock.json b/package-lock.json index 97de3aa6..64acf3ca 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "@google/clasp": "2.4.2", "chai": "4.3.6", "del": "6.0.0", - "eslint": "8.24.0", + "eslint": "8.28.0", "eslint-config-google": "0.14.0", "gas-local": "1.3.1", "gulp": "4.0.2", @@ -146,9 +146,9 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.2.tgz", - "integrity": "sha512-AXYd23w1S/bv3fTs3Lz0vjiYemS08jWkI3hYyS9I1ry+0f+Yjs1wm+sU0BS8qDOPrBIkp4qHYC16I8uVtpLajQ==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", + "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", "dev": true, "dependencies": { "ajv": "^6.12.4", @@ -872,27 +872,29 @@ } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.10.7", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.7.tgz", - "integrity": "sha512-MDl6D6sBsaV452/QSdX+4CXIjZhIcI0PELsxUjk4U828yd58vk3bTIvk/6w5FY+4hIy9sLW0sfrV7K7Kc++j/w==", + "version": "0.11.7", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.7.tgz", + "integrity": "sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw==", "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", - "minimatch": "^3.0.4" + "minimatch": "^3.0.5" }, "engines": { "node": ">=10.10.0" } }, - "node_modules/@humanwhocodes/gitignore-to-minimatch": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", - "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", + "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, "node_modules/@humanwhocodes/module-importer": { @@ -2971,15 +2973,15 @@ } }, "node_modules/eslint": { - "version": "8.24.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.24.0.tgz", - "integrity": "sha512-dWFaPhGhTAiPcCgm3f6LI2MBWbogMnTJzFBbhXVRQDJPkr9pGZvVjlVfXd+vyDcWPA2Ic9L2AXPIQM0+vk/cSQ==", + "version": "8.28.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.28.0.tgz", + "integrity": "sha512-S27Di+EVyMxcHiwDrFzk8dJYAaD+/5SoWKxL1ri/71CRHsnJnRDPNt2Kzj24+MT9FDupf4aqqyqPrvI8MvQ4VQ==", "dev": true, "dependencies": { - "@eslint/eslintrc": "^1.3.2", - "@humanwhocodes/config-array": "^0.10.5", - "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", + "@eslint/eslintrc": "^1.3.3", + "@humanwhocodes/config-array": "^0.11.6", "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -2995,14 +2997,14 @@ "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "find-up": "^5.0.0", - "glob-parent": "^6.0.1", + "glob-parent": "^6.0.2", "globals": "^13.15.0", - "globby": "^11.1.0", "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", @@ -3133,9 +3135,9 @@ } }, "node_modules/espree": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz", - "integrity": "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==", + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", "dev": true, "dependencies": { "acorn": "^8.8.0", @@ -4739,9 +4741,9 @@ } }, "node_modules/globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "version": "13.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.18.0.tgz", + "integrity": "sha512-/mR4KI8Ps2spmoc0Ulu9L7agOF0du1CZNQ3dke8yItYlyKNmGrkONemBbd6V8UTc1Wgcqn21t3WYB7dbRmh6/A==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -10443,9 +10445,9 @@ "dev": true }, "@eslint/eslintrc": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.2.tgz", - "integrity": "sha512-AXYd23w1S/bv3fTs3Lz0vjiYemS08jWkI3hYyS9I1ry+0f+Yjs1wm+sU0BS8qDOPrBIkp4qHYC16I8uVtpLajQ==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", + "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", "dev": true, "requires": { "ajv": "^6.12.4", @@ -10923,22 +10925,27 @@ } }, "@humanwhocodes/config-array": { - "version": "0.10.7", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.7.tgz", - "integrity": "sha512-MDl6D6sBsaV452/QSdX+4CXIjZhIcI0PELsxUjk4U828yd58vk3bTIvk/6w5FY+4hIy9sLW0sfrV7K7Kc++j/w==", + "version": "0.11.7", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.7.tgz", + "integrity": "sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw==", "dev": true, "requires": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", - "minimatch": "^3.0.4" + "minimatch": "^3.0.5" + }, + "dependencies": { + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } } }, - "@humanwhocodes/gitignore-to-minimatch": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", - "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", - "dev": true - }, "@humanwhocodes/module-importer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", @@ -12547,15 +12554,15 @@ "dev": true }, "eslint": { - "version": "8.24.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.24.0.tgz", - "integrity": "sha512-dWFaPhGhTAiPcCgm3f6LI2MBWbogMnTJzFBbhXVRQDJPkr9pGZvVjlVfXd+vyDcWPA2Ic9L2AXPIQM0+vk/cSQ==", + "version": "8.28.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.28.0.tgz", + "integrity": "sha512-S27Di+EVyMxcHiwDrFzk8dJYAaD+/5SoWKxL1ri/71CRHsnJnRDPNt2Kzj24+MT9FDupf4aqqyqPrvI8MvQ4VQ==", "dev": true, "requires": { - "@eslint/eslintrc": "^1.3.2", - "@humanwhocodes/config-array": "^0.10.5", - "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", + "@eslint/eslintrc": "^1.3.3", + "@humanwhocodes/config-array": "^0.11.6", "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -12571,14 +12578,14 @@ "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "find-up": "^5.0.0", - "glob-parent": "^6.0.1", + "glob-parent": "^6.0.2", "globals": "^13.15.0", - "globby": "^11.1.0", "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", @@ -12669,9 +12676,9 @@ "dev": true }, "espree": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz", - "integrity": "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==", + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", "dev": true, "requires": { "acorn": "^8.8.0", @@ -13936,9 +13943,9 @@ } }, "globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "version": "13.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.18.0.tgz", + "integrity": "sha512-/mR4KI8Ps2spmoc0Ulu9L7agOF0du1CZNQ3dke8yItYlyKNmGrkONemBbd6V8UTc1Wgcqn21t3WYB7dbRmh6/A==", "dev": true, "requires": { "type-fest": "^0.20.2" diff --git a/package.json b/package.json index b1ad1535..acf3096e 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "@google/clasp": "2.4.2", "chai": "4.3.6", "del": "6.0.0", - "eslint": "8.24.0", + "eslint": "8.28.0", "eslint-config-google": "0.14.0", "gas-local": "1.3.1", "gulp": "4.0.2", From bcb4360306f1f50795d1eec315b9f7c221a14ebd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 30 Nov 2022 17:01:07 -0700 Subject: [PATCH 24/33] chore(deps): bump mocha from 10.0.0 to 10.1.0 (#408) Bumps [mocha](https://github.com/mochajs/mocha) from 10.0.0 to 10.1.0. - [Release notes](https://github.com/mochajs/mocha/releases) - [Changelog](https://github.com/mochajs/mocha/blob/master/CHANGELOG.md) - [Commits](https://github.com/mochajs/mocha/compare/v10.0.0...v10.1.0) --- updated-dependencies: - dependency-name: mocha dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 28 +++++++--------------------- package.json | 2 +- 2 files changed, 8 insertions(+), 22 deletions(-) diff --git a/package-lock.json b/package-lock.json index 64acf3ca..eaee1962 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,7 +23,7 @@ "gulp-expose": "0.0.7", "gulp-rename": "2.0.0", "jsdoc": "3.6.11", - "mocha": "10.0.0", + "mocha": "10.1.0", "urlsafe-base64": "1.0.0" } }, @@ -1057,12 +1057,6 @@ "@types/node": "*" } }, - "node_modules/@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", - "dev": true - }, "node_modules/abort-controller": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", @@ -7164,12 +7158,11 @@ } }, "node_modules/mocha": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.0.0.tgz", - "integrity": "sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.1.0.tgz", + "integrity": "sha512-vUF7IYxEoN7XhQpFLxQAEMtE4W91acW4B6En9l97MwE9stL1A9gusXfoHZCLVHDUJ/7V5+lbCM6yMqzo5vNymg==", "dev": true, "dependencies": { - "@ungap/promise-all-settled": "1.1.2", "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", "chokidar": "3.5.3", @@ -11081,12 +11074,6 @@ "@types/node": "*" } }, - "@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", - "dev": true - }, "abort-controller": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", @@ -15830,12 +15817,11 @@ } }, "mocha": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.0.0.tgz", - "integrity": "sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.1.0.tgz", + "integrity": "sha512-vUF7IYxEoN7XhQpFLxQAEMtE4W91acW4B6En9l97MwE9stL1A9gusXfoHZCLVHDUJ/7V5+lbCM6yMqzo5vNymg==", "dev": true, "requires": { - "@ungap/promise-all-settled": "1.1.2", "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", "chokidar": "3.5.3", diff --git a/package.json b/package.json index acf3096e..0a076284 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "gulp-expose": "0.0.7", "gulp-rename": "2.0.0", "jsdoc": "3.6.11", - "mocha": "10.0.0", + "mocha": "10.1.0", "urlsafe-base64": "1.0.0" }, "scripts": { From e6afdfb52d613f4e99002bf72228b32a7299cfc7 Mon Sep 17 00:00:00 2001 From: Steve Bazyl Date: Wed, 30 Nov 2022 16:59:32 -0700 Subject: [PATCH 25/33] feat: Allow usage without client_secret for services that only rely on PKCE --- src/Service.js | 1 - test/test.js | 52 +++++++++++++++++++++++++++++++++++++++----------- 2 files changed, 41 insertions(+), 12 deletions(-) diff --git a/src/Service.js b/src/Service.js index 119ee5a4..68bd3e7f 100644 --- a/src/Service.js +++ b/src/Service.js @@ -448,7 +448,6 @@ Service_.prototype.handleCallback = function(callbackRequest) { } validate_({ 'Client ID': this.clientId_, - 'Client Secret': this.clientSecret_, 'Token URL': this.tokenUrl_ }); var payload = { diff --git a/test/test.js b/test/test.js index 252d6d29..1e8317f7 100644 --- a/test/test.js +++ b/test/test.js @@ -22,6 +22,7 @@ var MockCache = require('./mocks/cache'); var MockLock = require('./mocks/lock'); var MockScriptApp = require('./mocks/script'); var MockUtilities = require('./mocks/utilities'); + var mocks = { ScriptApp: new MockScriptApp(), UrlFetchApp: new MockUrlFetchApp(), @@ -514,6 +515,27 @@ describe('Service', () => { assert.include(authorizationUrl, 'code_challenge'); assert.include(authorizationUrl, 'code_challenge_method=S256'); }); + + + it('should use supply verifier when exchanging code', () => { + var service = OAuth2.createService('test') + .setAuthorizationBaseUrl('http://www.example.com/') + .setTokenUrl('http://www.example.com/token') + .setClientId('abc') + .setCallbackFunction('authCallback') + .generateCodeVerifier(); + var authorizationUrl = service.getAuthorizationUrl({}); + var state = extractStateTokenFromUrl(authorizationUrl); + mocks.UrlFetchApp.resultFunction = (url, opts) => { + assert.isNotNull(opts.payload.code_verifier, 'Code verifier not present'); + return `{ "access_token": "123" }`; + }; + service.handleCallback({ + parameter: Object.assign({ + code: 'test', + }, state.arguments) + }); + }); }); describe('#getAuthorizationUrl()', () => { @@ -527,17 +549,7 @@ describe('Service', () => { foo: 'bar' }); - // Extract the state token from the URL and parse it. For example, the - // URL http://www.example.com?state=%7B%22a%22%3A1%7D would produce - // {a: 1}. - var querystring = authorizationUrl.split('?')[1]; - var params = querystring.split('&').reduce((result, pair) => { - var parts = pair.split('=').map(decodeURIComponent); - result[parts[0]] = parts[1]; - return result; - }, {}); - var state = JSON.parse(params.state); - + var state = extractStateTokenFromUrl(authorizationUrl); assert.equal(state.arguments.foo, 'bar'); }); }); @@ -858,3 +870,21 @@ describe('Utilities', () => { }); }); }); + + +/* + *Extract the state token from the URL and parse it. For example, the + * URL http://www.example.com?state=%7B%22a%22%3A1%7D would produce + * {a: 1}. + */ +function extractStateTokenFromUrl(authorizationUrl) { + var querystring = authorizationUrl.split('?')[1]; + var params = querystring.split('&').reduce((result, pair) => { + var parts = pair.split('=').map(decodeURIComponent); + result[parts[0]] = parts[1]; + return result; + }, {}); + var state = JSON.parse(params.state); + return state; +} + From 2d0985fbe826b512e2c6298aa217dd904bbebbad Mon Sep 17 00:00:00 2001 From: googleworkspace-bot <109114539+googleworkspace-bot@users.noreply.github.com> Date: Wed, 30 Nov 2022 17:25:14 -0700 Subject: [PATCH 26/33] chore(main): release 1.43.0 (#415) --- CHANGELOG.md | 7 +++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8f998cde..e242bbe4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [1.43.0](https://github.com/googleworkspace/apps-script-oauth2/compare/v1.42.1...v1.43.0) (2022-12-01) + + +### Features + +* Allow usage without client_secret for services that only rely on PKCE ([e6afdfb](https://github.com/googleworkspace/apps-script-oauth2/commit/e6afdfb52d613f4e99002bf72228b32a7299cfc7)) + ## [1.42.1](https://github.com/googleworkspace/apps-script-oauth2/compare/v1.42.0...v1.42.1) (2022-09-23) diff --git a/package-lock.json b/package-lock.json index eaee1962..fd93c427 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "apps-script-oauth2", - "version": "1.42.1", + "version": "1.43.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "apps-script-oauth2", - "version": "1.42.1", + "version": "1.43.0", "license": "Apache-2.0", "devDependencies": { "@google/clasp": "2.4.2", diff --git a/package.json b/package.json index 0a076284..07c4e71d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "apps-script-oauth2", - "version": "1.42.1", + "version": "1.43.0", "description": "OAuth2 for Apps Script is a library for Google Apps Script that provides the ability to create and authorize OAuth2 tokens as well as refresh them when they expire.", "repository": { "type": "git", From 67cae4034d0936dbe90b95f74cddd1ad35d799fd Mon Sep 17 00:00:00 2001 From: Steve Bazyl Date: Fri, 2 Dec 2022 11:37:31 -0700 Subject: [PATCH 27/33] chore: Update dist folder --- dist/OAuth2.gs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/dist/OAuth2.gs b/dist/OAuth2.gs index 7f3b7768..adf3bb84 100644 --- a/dist/OAuth2.gs +++ b/dist/OAuth2.gs @@ -233,7 +233,7 @@ Service_.prototype.setCodeVerififer = function(codeVerifier) { */ Service_.prototype.generateCodeVerifier = function() { const rawBytes = []; - for (let i = 0; i < 32; ++i) { + for (var i = 0; i < 32; ++i) { const r = Math.floor(Math.random() * 255); rawBytes[i] = r; } @@ -541,7 +541,6 @@ Service_.prototype.handleCallback = function(callbackRequest) { } validate_({ 'Client ID': this.clientId_, - 'Client Secret': this.clientSecret_, 'Token URL': this.tokenUrl_ }); var payload = { @@ -1301,7 +1300,7 @@ function decodeJwt_(jwt) { * @return {string} Web safe base64 encoded with padding removed. */ function encodeUrlSafeBase64NoPadding_(value) { - let encodedValue = Utilities.base64EncodeWebSafe(value); + var encodedValue = Utilities.base64EncodeWebSafe(value); encodedValue = encodedValue.slice(0, encodedValue.indexOf('=')); return encodedValue; } From 91d7aa320dd15760417c43628944b5b5b8cf0778 Mon Sep 17 00:00:00 2001 From: Eric Koleda Date: Thu, 16 Mar 2023 16:51:15 -0400 Subject: [PATCH 28/33] fix: Dropbox sample not getting refresh token (#435) --- samples/Dropbox.gs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/samples/Dropbox.gs b/samples/Dropbox.gs index 79826b10..b29ce884 100644 --- a/samples/Dropbox.gs +++ b/samples/Dropbox.gs @@ -53,8 +53,8 @@ function getService_() { // Set the property store where authorized tokens should be persisted. .setPropertyStore(PropertiesService.getUserProperties()) - // Set the response type to code (required). - .setParam('response_type', 'code'); + // Enable offline access (refresh_token). + .setParam('token_access_type', 'offline'); } /** From 9499dba62922538cb65f28cdfbefa5848e9aaa09 Mon Sep 17 00:00:00 2001 From: Kostiantyn Plakhotia Date: Thu, 16 Mar 2023 22:58:24 +0200 Subject: [PATCH 29/33] fix(basecamp): type parameter (#427) * fix: type parameter * chore: lint --- samples/Basecamp.gs | 32 +++++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/samples/Basecamp.gs b/samples/Basecamp.gs index cbdc66d0..d7f45023 100644 --- a/samples/Basecamp.gs +++ b/samples/Basecamp.gs @@ -35,10 +35,11 @@ function reset() { function getService_() { return OAuth2.createService('Basecamp') // Set the endpoint URLs. - .setAuthorizationBaseUrl( - 'https://launchpad.37signals.com/authorization/new?type=web_server') - .setTokenUrl( - 'https://launchpad.37signals.com/authorization/token?type=web_server') + .setAuthorizationBaseUrl('https://launchpad.37signals.com/authorization/new') + .setTokenUrl('https://launchpad.37signals.com/authorization/token') + + // Set the required type param + .setParam('type', 'web_server') // Set the client ID and secret. .setClientId(CLIENT_ID) @@ -49,7 +50,11 @@ function getService_() { .setCallbackFunction('authCallback') // Set the property store where authorized tokens should be persisted. - .setPropertyStore(PropertiesService.getUserProperties()); + .setPropertyStore(PropertiesService.getUserProperties()) + + // Set the handler for adding Basecamp's required type parameter to the + // payload: + .setTokenPayloadHandler(basecampTokenHandler); } /** @@ -65,6 +70,23 @@ function authCallback(request) { } } +/** + * Adds the Basecamp API's required type parameter to the access token + * request payload. + */ +function basecampTokenHandler(payload) { + // If it's refresh request from library + if (payload.grant_type === 'refresh_token') { + // Basecamp refresh token API returns error if type is not specified + payload.type = 'refresh'; + } else { + // Basecamp token API returns error if type is not specified + payload.type = 'web_server'; + } + + return payload; +} + /** * Logs the redict URI to register. */ From f57c727da61be0c51e12a465368bb669216996ff Mon Sep 17 00:00:00 2001 From: Sergii Kauk Date: Thu, 14 Dec 2023 16:15:18 +0100 Subject: [PATCH 30/33] fix(Twitter): Use builtin code verifier capability (#457) --- samples/Twitter.gs | 36 +++--------------------------------- 1 file changed, 3 insertions(+), 33 deletions(-) diff --git a/samples/Twitter.gs b/samples/Twitter.gs index d149882d..3c3ed32f 100644 --- a/samples/Twitter.gs +++ b/samples/Twitter.gs @@ -31,21 +31,17 @@ function run() { */ function reset() { getService_().reset(); - PropertiesService.getUserProperties().deleteProperty('code_challenge'); - PropertiesService.getUserProperties().deleteProperty('code_verifier'); } /** * Configures the service. */ function getService_() { - pkceChallengeVerifier(); var userProps = PropertiesService.getUserProperties(); return OAuth2.createService('Twitter') // Set the endpoint URLs. .setAuthorizationBaseUrl('https://twitter.com/i/oauth2/authorize') - .setTokenUrl( - 'https://api.twitter.com/2/oauth2/token?code_verifier=' + userProps.getProperty('code_verifier')) + .setTokenUrl('https://api.twitter.com/2/oauth2/token') // Set the client ID and secret. .setClientId(CLIENT_ID) @@ -61,10 +57,8 @@ function getService_() { // Set the scopes to request (space-separated for Twitter services). .setScope('users.read tweet.read offline.access') - // Add parameters in the authorization url - .setParam('response_type', 'code') - .setParam('code_challenge_method', 'S256') - .setParam('code_challenge', userProps.getProperty('code_challenge')) + // Generate code verifier parameter + .generateCodeVerifier() .setTokenHeaders({ 'Authorization': 'Basic ' + Utilities.base64Encode(CLIENT_ID + ':' + CLIENT_SECRET), @@ -91,27 +85,3 @@ function authCallback(request) { function logRedirectUri() { Logger.log(OAuth2.getRedirectUri()); } - -/** - * Generates code_verifier & code_challenge for PKCE - */ -function pkceChallengeVerifier() { - var userProps = PropertiesService.getUserProperties(); - if (!userProps.getProperty('code_verifier')) { - var verifier = ''; - var possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~'; - - for (var i = 0; i < 128; i++) { - verifier += possible.charAt(Math.floor(Math.random() * possible.length)); - } - - var sha256Hash = Utilities.computeDigest(Utilities.DigestAlgorithm.SHA_256, verifier); - - var challenge = Utilities.base64Encode(sha256Hash) - .replace(/\+/g, '-') - .replace(/\//g, '_') - .replace(/=+$/, ''); - userProps.setProperty('code_verifier', verifier); - userProps.setProperty('code_challenge', challenge); - } -} From aae9287bbe2fc35c302ed61ef520e5fa09fc5b4d Mon Sep 17 00:00:00 2001 From: Anna Romanova Date: Thu, 27 Feb 2025 08:45:17 -0800 Subject: [PATCH 31/33] fix: issue with refreshing token when client_secret is not set (#513) * Fix issue with refreshing token when client_secret is not set * check that refreshed token has refreshTokenExpiresAt set --- dist/OAuth2.gs | 1 - src/Service.js | 1 - test/test.js | 29 +++++++++++++++++++++++++++++ 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/dist/OAuth2.gs b/dist/OAuth2.gs index adf3bb84..ce97757c 100644 --- a/dist/OAuth2.gs +++ b/dist/OAuth2.gs @@ -759,7 +759,6 @@ Service_.prototype.ensureExpiresAtSet_ = function(token) { Service_.prototype.refresh = function() { validate_({ 'Client ID': this.clientId_, - 'Client Secret': this.clientSecret_, 'Token URL': this.tokenUrl_ }); diff --git a/src/Service.js b/src/Service.js index 68bd3e7f..e7527fe1 100644 --- a/src/Service.js +++ b/src/Service.js @@ -666,7 +666,6 @@ Service_.prototype.ensureExpiresAtSet_ = function(token) { Service_.prototype.refresh = function() { validate_({ 'Client ID': this.clientId_, - 'Client Secret': this.clientSecret_, 'Token URL': this.tokenUrl_ }); diff --git a/test/test.js b/test/test.js index 1e8317f7..fe7aca71 100644 --- a/test/test.js +++ b/test/test.js @@ -387,6 +387,35 @@ describe('Service', () => { done(); }); + it('should refresh token granted for PKCE', () => { + const NOW_SECONDS = OAuth2.getTimeInSeconds_(new Date()); + const ONE_HOUR_AGO_SECONDS = NOW_SECONDS - 360; + var token = { + granted_time: ONE_HOUR_AGO_SECONDS, + expires_in: 100, + refresh_token: 'bar', + refresh_token_expires_in: 720 + }; + var properties = new MockProperties({ + 'oauth2.test': JSON.stringify(token) + }); + + mocks.UrlFetchApp.resultFunction = () => JSON.stringify({ + access_token: Math.random().toString(36) + }); + + OAuth2.createService('test') + .setClientId('test') + .setTokenUrl('http://www.example.com/') + .setPropertyStore(properties) + .generateCodeVerifier() + .refresh(); + + var storedToken = JSON.parse(properties.getProperty('oauth2.test')); + assert.equal(storedToken.refresh_token, 'bar'); + assert.equal(storedToken.refreshTokenExpiresAt, NOW_SECONDS + 360); + }); + it('should retain refresh expiry', () => { const NOW_SECONDS = OAuth2.getTimeInSeconds_(new Date()); const ONE_HOUR_AGO_SECONDS = NOW_SECONDS - 360; From 4b24e0311488a54c82513da88162d7cde690536f Mon Sep 17 00:00:00 2001 From: googleworkspace-bot <109114539+googleworkspace-bot@users.noreply.github.com> Date: Tue, 18 Nov 2025 15:43:05 -0700 Subject: [PATCH 32/33] chore: Created local '.gemini/' from remote 'sync-files/defaults/.gemini/' (#545) --- .gemini/GEMINI.md | 12 ++++++++++++ .gemini/config.yaml | 12 ++++++++++++ .gemini/settings.json | 8 ++++++++ 3 files changed, 32 insertions(+) create mode 100644 .gemini/GEMINI.md create mode 100644 .gemini/config.yaml create mode 100644 .gemini/settings.json diff --git a/.gemini/GEMINI.md b/.gemini/GEMINI.md new file mode 100644 index 00000000..0f175c59 --- /dev/null +++ b/.gemini/GEMINI.md @@ -0,0 +1,12 @@ +# Overview + +This codebase is part of the Google Workspace GitHub organization, https://github.com/googleworkspace. + +## Style Guide + +Use open source best practices for code style and formatting with a preference for Google's style guides. + +## Tools + +- Verify against Google Workspace documentation with the `workspace-developer` MCP server tools. +- Use `gh` for GitHub interactions. diff --git a/.gemini/config.yaml b/.gemini/config.yaml new file mode 100644 index 00000000..a4814a5f --- /dev/null +++ b/.gemini/config.yaml @@ -0,0 +1,12 @@ +# Config for the Gemini Pull Request Review Bot. +# https://github.com/marketplace/gemini-code-assist +have_fun: false +code_review: + disable: false + comment_severity_threshold: "HIGH" + max_review_comments: -1 + pull_request_opened: + help: false + summary: true + code_review: true +ignore_patterns: [] diff --git a/.gemini/settings.json b/.gemini/settings.json new file mode 100644 index 00000000..ec3565d5 --- /dev/null +++ b/.gemini/settings.json @@ -0,0 +1,8 @@ +{ + "mcpServers": { + "workspace-developer": { + "httpUrl": "https://workspace-developer.goog/mcp", + "trust": true + } + } +} \ No newline at end of file From 12b6d6b30a7c80e72ecb736f1318941323574a4c Mon Sep 17 00:00:00 2001 From: googleworkspace-bot <109114539+googleworkspace-bot@users.noreply.github.com> Date: Tue, 18 Nov 2025 15:47:20 -0700 Subject: [PATCH 33/33] chore: Synced file(s) with googleworkspace/.github --- .vscode/extensions.json | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .vscode/extensions.json diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 00000000..4a9deaa4 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,5 @@ +{ + "recommendations": [ + "google-workspace.google-workspace-developer-tools" + ] +} \ No newline at end of file