diff --git a/.vscode/launch.json b/.vscode/launch.json
new file mode 100644
index 00000000..6d2d982e
--- /dev/null
+++ b/.vscode/launch.json
@@ -0,0 +1,12 @@
+{
+ "version": "0.2.0",
+ "configurations": [
+ {
+ "name": "Launch server-side",
+ "type": "node-terminal",
+ "request": "launch",
+ "cwd": "${workspaceFolder}/packages/backend",
+ "command": "yarn dev"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/packages/backend/package.json b/packages/backend/package.json
index 16f07efe..8b12557f 100644
--- a/packages/backend/package.json
+++ b/packages/backend/package.json
@@ -22,6 +22,7 @@
"express": "~4.16.1",
"express-graphql": "^0.12.0",
"flickr-sdk": "^3.10.0",
+ "googleapis": "^89.0.0",
"graphql-type-json": "^0.3.2",
"http-errors": "~1.6.3",
"knex": "^0.95.11",
diff --git a/packages/backend/src/apps/firebase/assets/favicon.svg b/packages/backend/src/apps/firebase/assets/favicon.svg
new file mode 100644
index 00000000..bd2ee11b
--- /dev/null
+++ b/packages/backend/src/apps/firebase/assets/favicon.svg
@@ -0,0 +1,35 @@
+
+
diff --git a/packages/backend/src/apps/firebase/index.ts b/packages/backend/src/apps/firebase/index.ts
new file mode 100644
index 00000000..af62c3aa
--- /dev/null
+++ b/packages/backend/src/apps/firebase/index.ts
@@ -0,0 +1,78 @@
+import { google, google as GoogleApi } from 'googleapis';
+import App from '../../models/app';
+import Field from '../../types/field';
+
+export default class Firebase {
+ oauthClient: any
+ connectionData: any
+ appData: any
+
+ scopes: string[] = [
+ 'https://www.googleapis.com/auth/datastore',
+ 'https://www.googleapis.com/auth/firebase',
+ 'https://www.googleapis.com/auth/user.emails.read',
+ 'profile',
+ ]
+
+ constructor(connectionData: any) {
+ this.appData = App.findOneByKey('firebase');
+ this.connectionData = connectionData;
+
+ this.oauthClient = new GoogleApi.auth.OAuth2(
+ connectionData.consumerKey,
+ connectionData.consumerSecret,
+ this.oauthRedirectUrl,
+ );
+
+ GoogleApi.options({ auth: this.oauthClient });
+ }
+
+ get oauthRedirectUrl() {
+ return this.appData.fields.find((field: Field) => field.key == 'oAuthRedirectUrl').value;
+ }
+
+ async createAuthLink() {
+ const url = this.oauthClient.generateAuthUrl({
+ access_type: 'offline',
+ scope: this.scopes
+ });
+
+ return { url };
+ }
+
+ async verifyCredentials() {
+ const { tokens } = await this.oauthClient.getToken(this.connectionData.oauthVerifier);
+ this.oauthClient.setCredentials(tokens);
+
+ const people = GoogleApi.people('v1');
+
+ const { data } = await people.people.get({
+ resourceName: 'people/me',
+ personFields: 'emailAddresses',
+ });
+
+ const { emailAddresses, resourceName: userId } = data;
+ const primaryEmailAddress = emailAddresses.find(emailAddress => emailAddress.metadata.primary);
+
+ return {
+ consumerKey: this.connectionData.consumerKey,
+ consumerSecret: this.connectionData.consumerSecret,
+ accessToken: tokens.access_token,
+ refreshToken: tokens.refresh_token,
+ tokenType: tokens.token_type,
+ expiryDate: tokens.expiry_date,
+ scope: tokens.scope,
+ screenName: primaryEmailAddress.value,
+ userId,
+ }
+ }
+
+ async isStillVerified() {
+ try {
+ await this.oauthClient.getTokenInfo(this.connectionData.accessToken);
+ return true;
+ } catch {
+ return false
+ }
+ }
+}
diff --git a/packages/backend/src/apps/firebase/info.json b/packages/backend/src/apps/firebase/info.json
new file mode 100644
index 00000000..51800125
--- /dev/null
+++ b/packages/backend/src/apps/firebase/info.json
@@ -0,0 +1,218 @@
+{
+ "name": "Firebase",
+ "key": "firebase",
+ "iconUrl": "{BASE_URL}/apps/firebase/assets/favicon.svg",
+ "docUrl": "https://automatisch.io/docs/firebase",
+ "primaryColor": "ffca28",
+ "fields": [
+ {
+ "key": "oAuthRedirectUrl",
+ "label": "OAuth Redirect URL",
+ "type": "string",
+ "required": true,
+ "readOnly": true,
+ "value": "https://localhost:3001/app/firebase/connections/add",
+ "placeholder": null,
+ "description": "When asked to input an OAuth callback or redirect URL in Firebase OAuth, enter the URL above.",
+ "docUrl": "https://automatisch.io/docs/firebase#oauth-redirect-url",
+ "clickToCopy": true
+ },
+ {
+ "key": "consumerKey",
+ "label": "Consumer Key",
+ "type": "string",
+ "required": true,
+ "readOnly": false,
+ "value": null,
+ "placeholder": null,
+ "description": null,
+ "docUrl": "https://automatisch.io/docs/firebase#consumer-key",
+ "clickToCopy": false
+ },
+ {
+ "key": "consumerSecret",
+ "label": "Consumer Secret",
+ "type": "string",
+ "required": true,
+ "readOnly": false,
+ "value": null,
+ "placeholder": null,
+ "description": null,
+ "docUrl": "https://automatisch.io/docs/firebase#consumer-secret",
+ "clickToCopy": false
+ }
+ ],
+ "authenticationSteps": [
+ {
+ "step": 1,
+ "type": "mutation",
+ "name": "createConnection",
+ "fields": [
+ {
+ "name": "key",
+ "value": "{key}"
+ },
+ {
+ "name": "data",
+ "value": null,
+ "fields": [
+ {
+ "name": "consumerKey",
+ "value": "{fields.consumerKey}"
+ },
+ {
+ "name": "consumerSecret",
+ "value": "{fields.consumerSecret}"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "step": 2,
+ "type": "mutation",
+ "name": "createAuthLink",
+ "fields": [
+ {
+ "name": "id",
+ "value": "{createConnection.id}"
+ }
+ ]
+ },
+ {
+ "step": 3,
+ "type": "openWithPopup",
+ "name": "openAuthPopup",
+ "fields": [
+ {
+ "name": "url",
+ "value": "{createAuthLink.url}"
+ }
+ ]
+ },
+ {
+ "step": 4,
+ "type": "mutation",
+ "name": "updateConnection",
+ "fields": [
+ {
+ "name": "id",
+ "value": "{createConnection.id}"
+ },
+ {
+ "name": "data",
+ "value": null,
+ "fields": [
+ {
+ "name": "oauthVerifier",
+ "value": "{openAuthPopup.code}"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "step": 5,
+ "type": "mutation",
+ "name": "verifyConnection",
+ "fields": [
+ {
+ "name": "id",
+ "value": "{createConnection.id}"
+ }
+ ]
+ }
+ ],
+ "reconnectionSteps": [
+ {
+ "step": 1,
+ "type": "mutation",
+ "name": "resetConnection",
+ "fields": [
+ {
+ "name": "id",
+ "value": "{connection.id}"
+ }
+ ]
+ },
+ {
+ "step": 2,
+ "type": "mutation",
+ "name": "updateConnection",
+ "fields": [
+ {
+ "name": "id",
+ "value": "{connection.id}"
+ },
+ {
+ "name": "data",
+ "value": null,
+ "fields": [
+ {
+ "name": "consumerKey",
+ "value": "{fields.consumerKey}"
+ },
+ {
+ "name": "consumerSecret",
+ "value": "{fields.consumerSecret}"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "step": 3,
+ "type": "mutation",
+ "name": "createAuthLink",
+ "fields": [
+ {
+ "name": "id",
+ "value": "{connection.id}"
+ }
+ ]
+ },
+ {
+ "step": 4,
+ "type": "openWithPopup",
+ "name": "openAuthPopup",
+ "fields": [
+ {
+ "name": "url",
+ "value": "{createAuthLink.url}"
+ }
+ ]
+ },
+ {
+ "step": 5,
+ "type": "mutation",
+ "name": "updateConnection",
+ "fields": [
+ {
+ "name": "id",
+ "value": "{connection.id}"
+ },
+ {
+ "name": "data",
+ "value": null,
+ "fields": [
+ {
+ "name": "oauthVerifier",
+ "value": "{openAuthPopup.code}"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "step": 6,
+ "type": "mutation",
+ "name": "verifyConnection",
+ "fields": [
+ {
+ "name": "id",
+ "value": "{connection.id}"
+ }
+ ]
+ }
+ ]
+}
diff --git a/packages/backend/src/apps/twitter/info.json b/packages/backend/src/apps/twitter/info.json
index 2ce73457..0629db15 100644
--- a/packages/backend/src/apps/twitter/info.json
+++ b/packages/backend/src/apps/twitter/info.json
@@ -82,7 +82,7 @@
{
"step": 3,
"type": "openWithPopup",
- "name": "openTwitterAuthPopup",
+ "name": "openAuthPopup",
"fields": [
{
"name": "url",
@@ -105,7 +105,7 @@
"fields": [
{
"name": "oauthVerifier",
- "value": "{openTwitterAuthPopup.oauth_verifier}"
+ "value": "{openAuthPopup.oauth_verifier}"
}
]
}
@@ -174,7 +174,7 @@
{
"step": 4,
"type": "openWithPopup",
- "name": "openTwitterAuthPopup",
+ "name": "openAuthPopup",
"fields": [
{
"name": "url",
@@ -197,7 +197,7 @@
"fields": [
{
"name": "oauthVerifier",
- "value": "{openTwitterAuthPopup.oauth_verifier}"
+ "value": "{openAuthPopup.oauth_verifier}"
}
]
}
diff --git a/packages/web/src/components/AppIcon/index.tsx b/packages/web/src/components/AppIcon/index.tsx
index 46525f86..adfdb30c 100644
--- a/packages/web/src/components/AppIcon/index.tsx
+++ b/packages/web/src/components/AppIcon/index.tsx
@@ -1,3 +1,4 @@
+import * as React from 'react';
import Avatar from '@mui/material/Avatar';
type AppIconProps = {
@@ -6,11 +7,22 @@ type AppIconProps = {
color?: string;
};
+const inlineImgStyle: React.CSSProperties = {
+ objectFit: 'contain',
+};
+
export default function AppIcon(props: AppIconProps) {
const { name, url } = props;
const color = url ? 'white' : props.color
-
+
return (
-
+
);
};
diff --git a/yarn.lock b/yarn.lock
index ab8d6173..5f314388 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -3661,6 +3661,13 @@ abbrev@1:
resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
+abort-controller@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392"
+ integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==
+ dependencies:
+ event-target-shim "^5.0.0"
+
accepts@^1.3.7, accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7:
version "1.3.7"
resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd"
@@ -4012,7 +4019,7 @@ arrify@^1.0.1:
resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=
-arrify@^2.0.1:
+arrify@^2.0.0, arrify@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa"
integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==
@@ -4392,7 +4399,7 @@ balanced-match@^1.0.0:
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
-base64-js@^1.0.2, base64-js@^1.3.1:
+base64-js@^1.0.2, base64-js@^1.3.0, base64-js@^1.3.1:
version "1.5.1"
resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
@@ -4457,6 +4464,11 @@ big.js@^5.2.2:
resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328"
integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==
+bignumber.js@^9.0.0:
+ version "9.0.1"
+ resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.1.tgz#8d7ba124c882bfd8e43260c67475518d0689e4e5"
+ integrity sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==
+
binary-extensions@^1.0.0:
version "1.13.1"
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65"
@@ -4696,6 +4708,11 @@ bser@2.1.1:
dependencies:
node-int64 "^0.4.0"
+buffer-equal-constant-time@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819"
+ integrity sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=
+
buffer-from@^1.0.0:
version "1.1.2"
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
@@ -6526,6 +6543,13 @@ ecc-jsbn@~0.1.1:
jsbn "~0.1.0"
safer-buffer "^2.1.0"
+ecdsa-sig-formatter@1.0.11, ecdsa-sig-formatter@^1.0.11:
+ version "1.0.11"
+ resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf"
+ integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==
+ dependencies:
+ safe-buffer "^5.0.1"
+
ee-first@1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
@@ -7046,6 +7070,11 @@ etag@~1.8.1:
resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=
+event-target-shim@^5.0.0:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789"
+ integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==
+
eventemitter3@^4.0.0, eventemitter3@^4.0.4:
version "4.0.7"
resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f"
@@ -7253,7 +7282,7 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2:
assign-symbols "^1.0.0"
is-extendable "^1.0.1"
-extend@^3.0.0, extend@~3.0.2:
+extend@^3.0.0, extend@^3.0.2, extend@~3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
@@ -7322,6 +7351,11 @@ fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6:
resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
+fast-text-encoding@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/fast-text-encoding/-/fast-text-encoding-1.0.3.tgz#ec02ac8e01ab8a319af182dae2681213cfe9ce53"
+ integrity sha512-dtm4QZH9nZtcDt8qJiOH9fcQd1NAgi+K1O2DbE6GG1PPCK/BWfOH3idCTRQ4ImXRUOyopDEgDEnVEE7Y/2Wrig==
+
fastq@^1.6.0:
version "1.13.0"
resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c"
@@ -7696,6 +7730,25 @@ gauge@~2.7.3:
strip-ansi "^3.0.1"
wide-align "^1.1.0"
+gaxios@^4.0.0:
+ version "4.3.2"
+ resolved "https://registry.yarnpkg.com/gaxios/-/gaxios-4.3.2.tgz#845827c2dc25a0213c8ab4155c7a28910f5be83f"
+ integrity sha512-T+ap6GM6UZ0c4E6yb1y/hy2UB6hTrqhglp3XfmU9qbLCGRYhLVV5aRPpC4EmoG8N8zOnkYCgoBz+ScvGAARY6Q==
+ dependencies:
+ abort-controller "^3.0.0"
+ extend "^3.0.2"
+ https-proxy-agent "^5.0.0"
+ is-stream "^2.0.0"
+ node-fetch "^2.6.1"
+
+gcp-metadata@^4.2.0:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/gcp-metadata/-/gcp-metadata-4.3.1.tgz#fb205fe6a90fef2fd9c85e6ba06e5559ee1eefa9"
+ integrity sha512-x850LS5N7V1F3UcV7PoupzGsyD6iVwTVvsh3tbXfkctZnBnjW5yu5z1/3k3SehF7TyoTIe78rJs02GMMy+LF+A==
+ dependencies:
+ gaxios "^4.0.0"
+ json-bigint "^1.0.0"
+
gensync@^1.0.0-beta.1, gensync@^1.0.0-beta.2:
version "1.0.0-beta.2"
resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
@@ -7930,6 +7983,48 @@ globby@^6.1.0:
pify "^2.0.0"
pinkie-promise "^2.0.0"
+google-auth-library@^7.0.2:
+ version "7.10.1"
+ resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-7.10.1.tgz#e44ac923bc3540215aaead6e1fd117ee06883f51"
+ integrity sha512-nQxgM1ZopUMcpMnu95kOSzI+9tJl4YDOZJomSTBGlRLpxfBopdwto7WvzoI87HuN0nQqVETgOsHi/C/po1rppA==
+ dependencies:
+ arrify "^2.0.0"
+ base64-js "^1.3.0"
+ ecdsa-sig-formatter "^1.0.11"
+ fast-text-encoding "^1.0.0"
+ gaxios "^4.0.0"
+ gcp-metadata "^4.2.0"
+ gtoken "^5.0.4"
+ jws "^4.0.0"
+ lru-cache "^6.0.0"
+
+google-p12-pem@^3.0.3:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/google-p12-pem/-/google-p12-pem-3.1.2.tgz#c3d61c2da8e10843ff830fdb0d2059046238c1d4"
+ integrity sha512-tjf3IQIt7tWCDsa0ofDQ1qqSCNzahXDxdAGJDbruWqu3eCg5CKLYKN+hi0s6lfvzYZ1GDVr+oDF9OOWlDSdf0A==
+ dependencies:
+ node-forge "^0.10.0"
+
+googleapis-common@^5.0.2:
+ version "5.0.5"
+ resolved "https://registry.yarnpkg.com/googleapis-common/-/googleapis-common-5.0.5.tgz#4c7160be1ed7e4cc8cdbcdb6eac8a4b3a61dd782"
+ integrity sha512-o2dgoW4x4fLIAN+IVAOccz3mEH8Lj1LP9c9BSSvkNJEn+U7UZh0WSr4fdH08x5VH7+sstIpd1lOYFZD0g7j4pw==
+ dependencies:
+ extend "^3.0.2"
+ gaxios "^4.0.0"
+ google-auth-library "^7.0.2"
+ qs "^6.7.0"
+ url-template "^2.0.8"
+ uuid "^8.0.0"
+
+googleapis@^89.0.0:
+ version "89.0.0"
+ resolved "https://registry.yarnpkg.com/googleapis/-/googleapis-89.0.0.tgz#03de7b1467c066d48b989f6a8384857ef6971e69"
+ integrity sha512-eH91BN+6R/Mp5uulrhKWGwKAbibfDNOIu1Oq8n12aFTiqb23/A9kVdRhituYVqhRqSWLr/kv1dpFbd6n+uN+7Q==
+ dependencies:
+ google-auth-library "^7.0.2"
+ googleapis-common "^5.0.2"
+
got@^9.6.0:
version "9.6.0"
resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85"
@@ -7974,6 +8069,15 @@ growly@^1.3.0:
resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081"
integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=
+gtoken@^5.0.4:
+ version "5.3.1"
+ resolved "https://registry.yarnpkg.com/gtoken/-/gtoken-5.3.1.tgz#c1c2598a826f2b5df7c6bb53d7be6cf6d50c3c78"
+ integrity sha512-yqOREjzLHcbzz1UrQoxhBtpk8KjrVhuqPE7od1K2uhyxG2BHjKZetlbLw/SPZak/QqTIQW+addS+EcjqQsZbwQ==
+ dependencies:
+ gaxios "^4.0.0"
+ google-p12-pem "^3.0.3"
+ jws "^4.0.0"
+
gzip-size@5.1.1:
version "5.1.1"
resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.1.1.tgz#cb9bee692f87c0612b232840a873904e4c135274"
@@ -9659,6 +9763,13 @@ jsesc@~0.5.0:
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=
+json-bigint@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/json-bigint/-/json-bigint-1.0.0.tgz#ae547823ac0cad8398667f8cd9ef4730f5b01ff1"
+ integrity sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==
+ dependencies:
+ bignumber.js "^9.0.0"
+
json-buffer@3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898"
@@ -9762,6 +9873,23 @@ just-extend@^4.0.2:
resolved "https://registry.yarnpkg.com/just-extend/-/just-extend-4.2.1.tgz#ef5e589afb61e5d66b24eca749409a8939a8c744"
integrity sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==
+jwa@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/jwa/-/jwa-2.0.0.tgz#a7e9c3f29dae94027ebcaf49975c9345593410fc"
+ integrity sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==
+ dependencies:
+ buffer-equal-constant-time "1.0.1"
+ ecdsa-sig-formatter "1.0.11"
+ safe-buffer "^5.0.1"
+
+jws@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/jws/-/jws-4.0.0.tgz#2d4e8cf6a318ffaa12615e9dec7e86e6c97310f4"
+ integrity sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==
+ dependencies:
+ jwa "^2.0.0"
+ safe-buffer "^5.0.1"
+
keyv@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9"
@@ -12834,7 +12962,7 @@ qs@6.7.0:
resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc"
integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==
-qs@^6.5.1, qs@^6.9.4:
+qs@^6.5.1, qs@^6.7.0, qs@^6.9.4:
version "6.10.1"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.1.tgz#4931482fa8d647a5aab799c5271d2133b981fb6a"
integrity sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==
@@ -15481,6 +15609,11 @@ url-parse@^1.4.3, url-parse@^1.5.3:
querystringify "^2.1.1"
requires-port "^1.0.0"
+url-template@^2.0.8:
+ version "2.0.8"
+ resolved "https://registry.yarnpkg.com/url-template/-/url-template-2.0.8.tgz#fc565a3cccbff7730c775f5641f9555791439f21"
+ integrity sha1-/FZaPMy/93MMd19WQflVV5FDnyE=
+
url@^0.11.0:
version "0.11.0"
resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"
@@ -15553,7 +15686,7 @@ uuid@^3.3.2, uuid@^3.4.0:
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
-uuid@^8.3.0:
+uuid@^8.0.0, uuid@^8.3.0:
version "8.3.2"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==