From 5a72fda375697156ec67fe7cf86b216f72681271 Mon Sep 17 00:00:00 2001 From: Keyur Shah Date: Mon, 1 Nov 2021 16:28:30 +0530 Subject: [PATCH] Firebase Lib Update To Moduler Code --- package-lock.json | 2261 ++++++++++++++++------------ package.json | 2 +- src/alternative/alternative.ts | 348 +++-- src/definitions.ts | 50 +- src/facades.ts | 425 +++--- src/operators.ts | 50 +- src/providers/apple.provider.ts | 21 +- src/providers/facebook.provider.ts | 18 +- src/providers/google.provider.ts | 33 +- src/providers/phone.provider.ts | 36 +- src/providers/twitter.provider.ts | 34 +- src/web.ts | 77 +- 12 files changed, 1968 insertions(+), 1387 deletions(-) diff --git a/package-lock.json b/package-lock.json index 255fb1b00..ebfd9859a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,19 +5,20 @@ "requires": true, "packages": { "": { - "version": "3.0.0-rc.0", + "name": "capacitor-firebase-auth", + "version": "3.0.0", "license": "MIT", "dependencies": { - "@capacitor/core": "^3.0.0-rc.0" + "@capacitor/core": "next" }, "devDependencies": { - "@capacitor/android": "^3.0.0-rc.0", - "@capacitor/ios": "^3.0.0-rc.0", + "@capacitor/android": "next", + "@capacitor/ios": "next", "rimraf": "^3.0.0", "typescript": "^3.9.5 || ^4.0.0" }, "peerDependencies": { - "firebase": "^8.3.0", + "firebase": "^9.2.0", "rxjs": "~6.6.6" } }, @@ -48,253 +49,404 @@ } }, "node_modules/@firebase/analytics": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/@firebase/analytics/-/analytics-0.6.5.tgz", - "integrity": "sha512-0yNdAtLRIS7wTs8eUSPHfQyypAbGha0MVpfnl18CTq1sLpdzHICn7CyCMYhc0ewlFdTCIHLjw4ZQoSTwtBHfkQ==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@firebase/analytics/-/analytics-0.7.2.tgz", + "integrity": "sha512-YxLsPojufkfe3FFg6imOMQdfdJwu5hig17jnldpdmqemj1gOIwE/peTBrksP4rxnIra26XhsBRppcPcVQyxMNQ==", + "peer": true, + "dependencies": { + "@firebase/component": "0.5.7", + "@firebase/installations": "0.5.2", + "@firebase/logger": "0.3.0", + "@firebase/util": "1.4.0", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app": "0.x" + } + }, + "node_modules/@firebase/analytics-compat": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@firebase/analytics-compat/-/analytics-compat-0.1.3.tgz", + "integrity": "sha512-FpaJ4sbJnryCRBkKIE45L2wGt2oCmlRK+AZc4JQHw20vb8Mf1WG1qGO+FGNoFev3lJSAd21tyhoLdPvbCTnOZQ==", "peer": true, "dependencies": { - "@firebase/analytics-types": "0.4.0", - "@firebase/component": "0.2.1", - "@firebase/installations": "0.4.21", - "@firebase/logger": "0.2.6", - "@firebase/util": "0.4.0", - "tslib": "^2.0.0" + "@firebase/analytics": "0.7.2", + "@firebase/analytics-types": "0.7.0", + "@firebase/component": "0.5.7", + "@firebase/util": "1.4.0", + "tslib": "^2.1.0" }, "peerDependencies": { - "@firebase/app": "0.x", - "@firebase/app-types": "0.x" + "@firebase/app-compat": "0.x" } }, "node_modules/@firebase/analytics-types": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@firebase/analytics-types/-/analytics-types-0.4.0.tgz", - "integrity": "sha512-Jj2xW+8+8XPfWGkv9HPv/uR+Qrmq37NPYT352wf7MvE9LrstpLVmFg3LqG6MCRr5miLAom5sen2gZ+iOhVDeRA==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@firebase/analytics-types/-/analytics-types-0.7.0.tgz", + "integrity": "sha512-DNE2Waiwy5+zZnCfintkDtBfaW6MjIG883474v6Z0K1XZIvl76cLND4iv0YUb48leyF+PJK1KO2XrgHb/KpmhQ==", "peer": true }, "node_modules/@firebase/app": { - "version": "0.6.16", - "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.6.16.tgz", - "integrity": "sha512-QGqfvDQ4AK54y2ysttdgtTsyuLGfN0OksdmWSHLDs7HBJg9nJkZUuFA/cJ1cftpPSVxpCbnro+OU1FtRgapzAA==", + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.7.5.tgz", + "integrity": "sha512-4CzYlE0bM9rzAD/MkZ01ineWyRQ3bZK/9sH4xROHKcKj3pMu7svMUnIXkk2qIC+UUYHKp6BG+FhRNNtxUzEDSw==", + "peer": true, + "dependencies": { + "@firebase/component": "0.5.7", + "@firebase/logger": "0.3.0", + "@firebase/util": "1.4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@firebase/app-check": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@firebase/app-check/-/app-check-0.4.2.tgz", + "integrity": "sha512-DFYt22lUMvvncN3v6x9ZRE2/HHBQdRQyYtHwakAcZrRUALJiU16iDwl2CABuW4JKytTmMj+xXo0fjSIRWtwT/w==", "peer": true, "dependencies": { - "@firebase/app-types": "0.6.1", - "@firebase/component": "0.2.1", - "@firebase/logger": "0.2.6", - "@firebase/util": "0.4.0", - "dom-storage": "2.1.0", - "tslib": "^2.0.0", - "xmlhttprequest": "1.8.0" + "@firebase/component": "0.5.7", + "@firebase/logger": "0.3.0", + "@firebase/util": "1.4.0", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app": "0.x" + } + }, + "node_modules/@firebase/app-check-compat": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@firebase/app-check-compat/-/app-check-compat-0.1.3.tgz", + "integrity": "sha512-ka5ggmfucQDwEJTcFsXPJJ+ygPZz4Q44D5yb0sksfOAsUSpzAR83jDSxebOgTvvk+axNCFamxOsrZEV6KKDjEg==", + "peer": true, + "dependencies": { + "@firebase/app-check": "0.4.2", + "@firebase/component": "0.5.7", + "@firebase/logger": "0.3.0", + "@firebase/util": "1.4.0", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.x" + } + }, + "node_modules/@firebase/app-check-interop-types": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@firebase/app-check-interop-types/-/app-check-interop-types-0.1.0.tgz", + "integrity": "sha512-uZfn9s4uuRsaX5Lwx+gFP3B6YsyOKUE+Rqa6z9ojT4VSRAsZFko9FRn6OxQUA1z5t5d08fY4pf+/+Dkd5wbdbA==", + "peer": true + }, + "node_modules/@firebase/app-compat": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@firebase/app-compat/-/app-compat-0.1.6.tgz", + "integrity": "sha512-kz0PZitZbHb2SpaCOrBng+8Mu2LQia9CDFl1G+CIStB+LhM4r4kgdD5T1sd2bl1ngzUqdWU4QGW0YcVv4WzWcg==", + "peer": true, + "dependencies": { + "@firebase/app": "0.7.5", + "@firebase/component": "0.5.7", + "@firebase/logger": "0.3.0", + "@firebase/util": "1.4.0", + "tslib": "^2.1.0" } }, "node_modules/@firebase/app-types": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.6.1.tgz", - "integrity": "sha512-L/ZnJRAq7F++utfuoTKX4CLBG5YR7tFO3PLzG1/oXXKEezJ0kRL3CMRoueBEmTCzVb/6SIs2Qlaw++uDgi5Xyg==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.7.0.tgz", + "integrity": "sha512-6fbHQwDv2jp/v6bXhBw2eSRbNBpxHcd1NBF864UksSMVIqIyri9qpJB1Mn6sGZE+bnDsSQBC5j2TbMxYsJQkQg==", "peer": true }, "node_modules/@firebase/auth": { - "version": "0.16.4", - "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-0.16.4.tgz", - "integrity": "sha512-zgHPK6/uL6+nAyG9zqammHTF1MQpAN7z/jVRLYkDZS4l81H08b2SzApLbRfW/fmy665xqb5MK7sVH0V1wsiCNw==", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-0.19.0.tgz", + "integrity": "sha512-0gcBdZkN53PhdzcWkJsjq4NU6gLUXI6Iv9G8xq0BlKyvlMXI76tKXUcWabiWnh8al8DOOuvpKz9Jiscl0/Z+Mw==", "peer": true, "dependencies": { - "@firebase/auth-types": "0.10.2" + "@firebase/component": "0.5.7", + "@firebase/logger": "0.3.0", + "@firebase/util": "1.4.0", + "node-fetch": "2.6.5", + "selenium-webdriver": "4.0.0-rc-1", + "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app": "0.x" } }, + "node_modules/@firebase/auth-compat": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@firebase/auth-compat/-/auth-compat-0.2.0.tgz", + "integrity": "sha512-5Dh2tsxLQs7PgfV4Qs5h9kgWNTBqElfclXmTkGvYyOOGjQ1MGUuze4Zd6NNeN+SgmPsRB6U/qEBJLDkTP1Lz+g==", + "peer": true, + "dependencies": { + "@firebase/auth": "0.19.0", + "@firebase/auth-types": "0.11.0", + "@firebase/component": "0.5.7", + "@firebase/util": "1.4.0", + "node-fetch": "2.6.5", + "selenium-webdriver": "^4.0.0-beta.2", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.x" + } + }, "node_modules/@firebase/auth-interop-types": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.1.5.tgz", - "integrity": "sha512-88h74TMQ6wXChPA6h9Q3E1Jg6TkTHep2+k63OWg3s0ozyGVMeY+TTOti7PFPzq5RhszQPQOoCi59es4MaRvgCw==", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.1.6.tgz", + "integrity": "sha512-etIi92fW3CctsmR9e3sYM3Uqnoq861M0Id9mdOPF6PWIg38BXL5k4upCNBggGUpLIS0H1grMOvy/wn1xymwe2g==", "peer": true, "peerDependencies": { "@firebase/app-types": "0.x", - "@firebase/util": "0.x" + "@firebase/util": "1.x" } }, "node_modules/@firebase/auth-types": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/@firebase/auth-types/-/auth-types-0.10.2.tgz", - "integrity": "sha512-0GMWVWh5TBCYIQfVerxzDsuvhoFpK0++O9LtP3FWkwYo7EAxp6w0cftAg/8ntU1E5Wg56Ry0b6ti/YGP6g0jlg==", + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@firebase/auth-types/-/auth-types-0.11.0.tgz", + "integrity": "sha512-q7Bt6cx+ySj9elQHTsKulwk3+qDezhzRBFC9zlQ1BjgMueUOnGMcvqmU0zuKlQ4RhLSH7MNAdBV2znVaoN3Vxw==", "peer": true, "peerDependencies": { "@firebase/app-types": "0.x", - "@firebase/util": "0.x" + "@firebase/util": "1.x" } }, "node_modules/@firebase/component": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.2.1.tgz", - "integrity": "sha512-WfBFABfKYcRFjgMA7ydPLokSa+GkuZd+FD00KrZLAfslpHxs6cCFXdklvP8NEb1oDLqYakRXBqWdelH9/Whacg==", + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.5.7.tgz", + "integrity": "sha512-CiAHUPXh2hn/lpzMShNmfAxHNQhKQwmQUJSYMPCjf2bCCt4Z2vLGpS+UWEuNFm9Zf8LNmkS+Z+U/s4Obi5carg==", "peer": true, "dependencies": { - "@firebase/util": "0.4.0", - "tslib": "^2.0.0" + "@firebase/util": "1.4.0", + "tslib": "^2.1.0" } }, "node_modules/@firebase/database": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@firebase/database/-/database-0.9.5.tgz", - "integrity": "sha512-sfS5ZvU7UqztMAP9y3t/AQRNhqDrHJT6/W1JBmEivjSxf1MLLbCafZMFbksuvl2iog73wOGDuoDzSHvhtSQvvg==", + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/@firebase/database/-/database-0.12.2.tgz", + "integrity": "sha512-Y1LZR1LIQM8YKMkeUPpAq3/e53hcfcXO+JEZ6vCzBeD6xRawqmpw6B5/DzePdCNNvjcqheXzSaR7T39eRZo/wA==", + "peer": true, + "dependencies": { + "@firebase/auth-interop-types": "0.1.6", + "@firebase/component": "0.5.7", + "@firebase/logger": "0.3.0", + "@firebase/util": "1.4.0", + "faye-websocket": "0.11.4", + "tslib": "^2.1.0" + } + }, + "node_modules/@firebase/database-compat": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@firebase/database-compat/-/database-compat-0.1.2.tgz", + "integrity": "sha512-sV32QIRSNIBj/6OYtpmPzA/SfQz1/NBZbhxg9dIhGaSt9e5HaMxXRuz2lImudX0Sd/v8DKdExrxa++K6rKrRtA==", "peer": true, "dependencies": { - "@firebase/auth-interop-types": "0.1.5", - "@firebase/component": "0.2.1", - "@firebase/database-types": "0.7.0", - "@firebase/logger": "0.2.6", - "@firebase/util": "0.4.0", - "faye-websocket": "0.11.3", - "tslib": "^2.0.0" + "@firebase/component": "0.5.7", + "@firebase/database": "0.12.2", + "@firebase/database-types": "0.9.1", + "@firebase/logger": "0.3.0", + "@firebase/util": "1.4.0", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.x" } }, "node_modules/@firebase/database-types": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-0.7.0.tgz", - "integrity": "sha512-FduQmPpUUOHgbOt7/vWlC1ntSLMEqqYessdQ/ODd7RFWm53iVa0T1mpIDtNwqd8gW3k7cajjSjcLjfQGtvLGDg==", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-0.9.1.tgz", + "integrity": "sha512-RUixK/YrbpxbfdE+nYP0wMcEsz1xPTnafP0q3UlSS/+fW744OITKtR1J0cMRaXbvY7EH0wUVTNVkrtgxYY8IgQ==", "peer": true, "dependencies": { - "@firebase/app-types": "0.6.1" + "@firebase/app-types": "0.7.0", + "@firebase/util": "1.4.0" } }, "node_modules/@firebase/firestore": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-2.2.0.tgz", - "integrity": "sha512-/p0oR73zgAlEHgqCIt5v2m8ADOign6APkZ0QG5bJQVSDqPXjB89ktI3v8x0qtRtzKm/pd3lmyoD/raOh/ItsZA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-3.2.0.tgz", + "integrity": "sha512-LuL5oUlEsHmB4AzxGi+HqQ9dZvuBo+p2sRAribm8dUFbGdWEillPqX4UEHZHzkDQWmAUD3P92YiV2d34PnL/Tw==", "peer": true, "dependencies": { - "@firebase/component": "0.2.1", - "@firebase/firestore-types": "2.2.0", - "@firebase/logger": "0.2.6", - "@firebase/util": "0.4.0", - "@firebase/webchannel-wrapper": "0.4.1", - "@grpc/grpc-js": "^1.0.0", - "@grpc/proto-loader": "^0.5.0", - "node-fetch": "2.6.1", - "tslib": "^2.0.0" + "@firebase/component": "0.5.7", + "@firebase/logger": "0.3.0", + "@firebase/util": "1.4.0", + "@firebase/webchannel-wrapper": "0.6.0", + "@grpc/grpc-js": "^1.3.2", + "@grpc/proto-loader": "^0.6.0", + "node-fetch": "2.6.5", + "tslib": "^2.1.0" }, "engines": { - "node": "^8.13.0 || >=10.10.0" + "node": ">=10.10.0" }, "peerDependencies": { - "@firebase/app": "0.x", - "@firebase/app-types": "0.x" + "@firebase/app": "0.x" + } + }, + "node_modules/@firebase/firestore-compat": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@firebase/firestore-compat/-/firestore-compat-0.1.5.tgz", + "integrity": "sha512-V2lsD64tnz4xwqKPKzWXw3KjykYzF87k8wcYDNKLjAgqrVlv8klBYHLbbU7tondN01Se6HvvwlADHVZvX9Zn7A==", + "peer": true, + "dependencies": { + "@firebase/component": "0.5.7", + "@firebase/firestore": "3.2.0", + "@firebase/firestore-types": "2.5.0", + "@firebase/util": "1.4.0", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.x" } }, "node_modules/@firebase/firestore-types": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@firebase/firestore-types/-/firestore-types-2.2.0.tgz", - "integrity": "sha512-5kZZtQ32FIRJP1029dw+ZVNRCclKOErHv1+Xn0pw/5Fq3dxroA/ZyFHqDu+uV52AyWHhNLjCqX43ibm4YqOzRw==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@firebase/firestore-types/-/firestore-types-2.5.0.tgz", + "integrity": "sha512-I6c2m1zUhZ5SH0cWPmINabDyH5w0PPFHk2UHsjBpKdZllzJZ2TwTkXbDtpHUZNmnc/zAa0WNMNMvcvbb/xJLKA==", "peer": true, "peerDependencies": { - "@firebase/app-types": "0.x" + "@firebase/app-types": "0.x", + "@firebase/util": "1.x" } }, "node_modules/@firebase/functions": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/@firebase/functions/-/functions-0.6.3.tgz", - "integrity": "sha512-02dqjin4V9PvuZLU6d14azyRZZ5cUSPT5CvE2SbGjAcXYdlFIg5Cy6T50dl48UsbmmNO40kXNB1dGESp2A4cWw==", + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/@firebase/functions/-/functions-0.7.3.tgz", + "integrity": "sha512-LxLbR9UtULLKMWSs6vtlte2Ka5tBDPGeGwX8Mto2uAtaNdrkoWKdhiJ4OTQx1YTCRIbTQnTg3t50NO8afzTEcQ==", + "peer": true, + "dependencies": { + "@firebase/app-check-interop-types": "0.1.0", + "@firebase/auth-interop-types": "0.1.6", + "@firebase/component": "0.5.7", + "@firebase/messaging-interop-types": "0.1.0", + "@firebase/util": "1.4.0", + "node-fetch": "2.6.5", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app": "0.x" + } + }, + "node_modules/@firebase/functions-compat": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@firebase/functions-compat/-/functions-compat-0.1.4.tgz", + "integrity": "sha512-mC/z0uJbGk/RRskabvvDylpMHMsNNwNIxrjBJy3J8ADZUqpJTMuT4gq+pHlPemYqLBZuN8TffIZNVPajXxqc+Q==", "peer": true, "dependencies": { - "@firebase/component": "0.2.1", - "@firebase/functions-types": "0.4.0", - "@firebase/messaging-types": "0.5.0", - "node-fetch": "2.6.1", - "tslib": "^2.0.0" + "@firebase/component": "0.5.7", + "@firebase/functions": "0.7.3", + "@firebase/functions-types": "0.5.0", + "@firebase/util": "1.4.0", + "tslib": "^2.1.0" }, "peerDependencies": { - "@firebase/app": "0.x", - "@firebase/app-types": "0.x" + "@firebase/app-compat": "0.x" } }, "node_modules/@firebase/functions-types": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@firebase/functions-types/-/functions-types-0.4.0.tgz", - "integrity": "sha512-3KElyO3887HNxtxNF1ytGFrNmqD+hheqjwmT3sI09FaDCuaxGbOnsXAXH2eQ049XRXw9YQpHMgYws/aUNgXVyQ==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@firebase/functions-types/-/functions-types-0.5.0.tgz", + "integrity": "sha512-qza0M5EwX+Ocrl1cYI14zoipUX4gI/Shwqv0C1nB864INAD42Dgv4v94BCyxGHBg2kzlWy8PNafdP7zPO8aJQA==", "peer": true }, "node_modules/@firebase/installations": { - "version": "0.4.21", - "resolved": "https://registry.npmjs.org/@firebase/installations/-/installations-0.4.21.tgz", - "integrity": "sha512-tMoAb1lHAQefdknWbKxSp2CEWWV/f4aeq4PjhzWurJEJN4RQ620ITbtuKregnGnYHu9lDzhyZ51H4s6+BhjCxA==", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@firebase/installations/-/installations-0.5.2.tgz", + "integrity": "sha512-k43qItRUnjIhAcxFRhGrox2ZBY/CFJOizB30hej9HuWOFv4qXoMZOmLtKzyjskFhRn/HW8iBUVguNFAEf6iehw==", "peer": true, "dependencies": { - "@firebase/component": "0.2.1", - "@firebase/installations-types": "0.3.4", - "@firebase/util": "0.4.0", + "@firebase/component": "0.5.7", + "@firebase/util": "1.4.0", "idb": "3.0.2", - "tslib": "^2.0.0" + "tslib": "^2.1.0" }, "peerDependencies": { - "@firebase/app": "0.x", - "@firebase/app-types": "0.x" + "@firebase/app": "0.x" } }, - "node_modules/@firebase/installations-types": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@firebase/installations-types/-/installations-types-0.3.4.tgz", - "integrity": "sha512-RfePJFovmdIXb6rYwtngyxuEcWnOrzdZd9m7xAW0gRxDIjBT20n3BOhjpmgRWXo/DAxRmS7bRjWAyTHY9cqN7Q==", + "node_modules/@firebase/logger": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.3.0.tgz", + "integrity": "sha512-7oQ+TctqekfgZImWkKuda50JZfkmAKMgh5qY4aR4pwRyqZXuJXN1H/BKkHvN1y0S4XWtF0f/wiCLKHhyi1ppPA==", "peer": true, - "peerDependencies": { - "@firebase/app-types": "0.x" + "dependencies": { + "tslib": "^2.1.0" } }, - "node_modules/@firebase/logger": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.2.6.tgz", - "integrity": "sha512-KIxcUvW/cRGWlzK9Vd2KB864HlUnCfdTH0taHE0sXW5Xl7+W68suaeau1oKNEqmc3l45azkd4NzXTCWZRZdXrw==", - "peer": true - }, "node_modules/@firebase/messaging": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/@firebase/messaging/-/messaging-0.7.5.tgz", - "integrity": "sha512-jA1pdV/DrfvzSVKLuff2hYo2AvU0CdZ901TngxscJqKYViZEoqAGw2v/kC70uRwEG0Tc2M/SRHstHpeFADlP0Q==", + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@firebase/messaging/-/messaging-0.9.2.tgz", + "integrity": "sha512-v95cny/HsupEvFiewsobjEtQ8ItMCPsg+29VLP51SIS3Ix7Kg2TJLZ2tfHkESRFazIhf2+GNwR8hdXoajqz2og==", "peer": true, "dependencies": { - "@firebase/component": "0.2.1", - "@firebase/installations": "0.4.21", - "@firebase/messaging-types": "0.5.0", - "@firebase/util": "0.4.0", + "@firebase/component": "0.5.7", + "@firebase/installations": "0.5.2", + "@firebase/messaging-interop-types": "0.1.0", + "@firebase/util": "1.4.0", "idb": "3.0.2", - "tslib": "^2.0.0" + "tslib": "^2.1.0" }, "peerDependencies": { - "@firebase/app": "0.x", - "@firebase/app-types": "0.x" + "@firebase/app": "0.x" } }, - "node_modules/@firebase/messaging-types": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@firebase/messaging-types/-/messaging-types-0.5.0.tgz", - "integrity": "sha512-QaaBswrU6umJYb/ZYvjR5JDSslCGOH6D9P136PhabFAHLTR4TWjsaACvbBXuvwrfCXu10DtcjMxqfhdNIB1Xfg==", + "node_modules/@firebase/messaging-compat": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@firebase/messaging-compat/-/messaging-compat-0.1.2.tgz", + "integrity": "sha512-ORxqIlnstjRhTpQsX7A0K9ifBTrqI7MNdWwCRbhvTh7GkzmhMe7ht+YAALrdvHD3Qty49UFrHznaIbF7Gr+nwA==", "peer": true, + "dependencies": { + "@firebase/component": "0.5.7", + "@firebase/messaging": "0.9.2", + "@firebase/util": "1.4.0", + "tslib": "^2.1.0" + }, "peerDependencies": { - "@firebase/app-types": "0.x" + "@firebase/app-compat": "0.x" } }, + "node_modules/@firebase/messaging-interop-types": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@firebase/messaging-interop-types/-/messaging-interop-types-0.1.0.tgz", + "integrity": "sha512-DbvUl/rXAZpQeKBnwz0NYY5OCqr2nFA0Bj28Fmr3NXGqR4PAkfTOHuQlVtLO1Nudo3q0HxAYLa68ZDAcuv2uKQ==", + "peer": true + }, "node_modules/@firebase/performance": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/@firebase/performance/-/performance-0.4.7.tgz", - "integrity": "sha512-wxau4qrAy5W+kIoXPUm5hJVX4+vY3wVC9QqWNzoqb+L5tMHxIoeEqxvJo8abjv4pa0/YaVl1XKAZdvvoe7c/dA==", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@firebase/performance/-/performance-0.5.2.tgz", + "integrity": "sha512-xHrt/BNiln3OIW9hyqKwck0x4C7Km+XKYQsP8cPDBh8AWFh//DB0ta7DuMXw7JGIuyKpK2D3iq5aQNS0MzMvSw==", + "peer": true, + "dependencies": { + "@firebase/component": "0.5.7", + "@firebase/installations": "0.5.2", + "@firebase/logger": "0.3.0", + "@firebase/util": "1.4.0", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app": "0.x" + } + }, + "node_modules/@firebase/performance-compat": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@firebase/performance-compat/-/performance-compat-0.1.2.tgz", + "integrity": "sha512-L9rt89eIPaucGsO/bwF199mS5+BV3kHTfK1Fr1vCmGL87kLpV8DKVccKc7Z0ZwQelfMvXOGy5jVqH/sHhiQAYg==", "peer": true, "dependencies": { - "@firebase/component": "0.2.1", - "@firebase/installations": "0.4.21", - "@firebase/logger": "0.2.6", - "@firebase/performance-types": "0.0.13", - "@firebase/util": "0.4.0", - "tslib": "^2.0.0" + "@firebase/component": "0.5.7", + "@firebase/logger": "0.3.0", + "@firebase/performance": "0.5.2", + "@firebase/performance-types": "0.1.0", + "@firebase/util": "1.4.0", + "tslib": "^2.1.0" }, "peerDependencies": { - "@firebase/app": "0.x", - "@firebase/app-types": "0.x" + "@firebase/app-compat": "0.x" } }, "node_modules/@firebase/performance-types": { - "version": "0.0.13", - "resolved": "https://registry.npmjs.org/@firebase/performance-types/-/performance-types-0.0.13.tgz", - "integrity": "sha512-6fZfIGjQpwo9S5OzMpPyqgYAUZcFzZxHFqOyNtorDIgNXq33nlldTL/vtaUZA8iT9TT5cJlCrF/jthKU7X21EA==", + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@firebase/performance-types/-/performance-types-0.1.0.tgz", + "integrity": "sha512-6p1HxrH0mpx+622Ql6fcxFxfkYSBpE3LSuwM7iTtYU2nw91Hj6THC8Bc8z4nboIq7WvgsT/kOTYVVZzCSlXl8w==", "peer": true }, "node_modules/@firebase/polyfill": { @@ -309,92 +461,127 @@ } }, "node_modules/@firebase/remote-config": { - "version": "0.1.32", - "resolved": "https://registry.npmjs.org/@firebase/remote-config/-/remote-config-0.1.32.tgz", - "integrity": "sha512-nPPhKSUHgwlv2hazke6keBkkadW+/VCpNbq3P9L8oWxq7hKQz7MYAC5LU6PqexNmWQqGFiYyX5J8XDUU3gH/NQ==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@firebase/remote-config/-/remote-config-0.3.1.tgz", + "integrity": "sha512-31nZ0NEcARw1wYKIpoAx63rA0ao28e9zYNrlSC08mBiouSOxu69lthiO0V1ZrFqR/iW9+7M2MqnOUhJ6/LYEwQ==", + "peer": true, + "dependencies": { + "@firebase/component": "0.5.7", + "@firebase/installations": "0.5.2", + "@firebase/logger": "0.3.0", + "@firebase/util": "1.4.0", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app": "0.x" + } + }, + "node_modules/@firebase/remote-config-compat": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@firebase/remote-config-compat/-/remote-config-compat-0.1.2.tgz", + "integrity": "sha512-j+joqwZAOO1L3pTlK8aQ3M+781ZbbOtV/TNpU4Tulqq+Psfjlx5SOYVfuF8njbbWGPLhLReFwmEjyE3jnm9hrQ==", "peer": true, "dependencies": { - "@firebase/component": "0.2.1", - "@firebase/installations": "0.4.21", - "@firebase/logger": "0.2.6", - "@firebase/remote-config-types": "0.1.9", - "@firebase/util": "0.4.0", - "tslib": "^2.0.0" + "@firebase/component": "0.5.7", + "@firebase/logger": "0.3.0", + "@firebase/remote-config": "0.3.1", + "@firebase/remote-config-types": "0.2.0", + "@firebase/util": "1.4.0", + "tslib": "^2.1.0" }, "peerDependencies": { - "@firebase/app": "0.x", - "@firebase/app-types": "0.x" + "@firebase/app-compat": "0.x" } }, "node_modules/@firebase/remote-config-types": { - "version": "0.1.9", - "resolved": "https://registry.npmjs.org/@firebase/remote-config-types/-/remote-config-types-0.1.9.tgz", - "integrity": "sha512-G96qnF3RYGbZsTRut7NBX0sxyczxt1uyCgXQuH/eAfUCngxjEGcZQnBdy6mvSdqdJh5mC31rWPO4v9/s7HwtzA==", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@firebase/remote-config-types/-/remote-config-types-0.2.0.tgz", + "integrity": "sha512-hqK5sCPeZvcHQ1D6VjJZdW6EexLTXNMJfPdTwbD8NrXUw6UjWC4KWhLK/TSlL0QPsQtcKRkaaoP+9QCgKfMFPw==", "peer": true }, "node_modules/@firebase/storage": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/@firebase/storage/-/storage-0.4.4.tgz", - "integrity": "sha512-3mH6IR04Lvk16kQQ7CMumpppNcqN6RVcqSD3jzaB8P6vbzDVRyk7Dnhd00Eigd++q5FdNRpW3h8xGvHPWDYfKQ==", + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/@firebase/storage/-/storage-0.8.4.tgz", + "integrity": "sha512-Flv25G8J4hp9wa9qTy9UoaBRl2Vcsr+FGaK6RaRUAzoMw2PA46ZPt/DChJZWxKgpmOq/7HyRc8qNTwqqDJt7dA==", "peer": true, "dependencies": { - "@firebase/component": "0.2.1", - "@firebase/storage-types": "0.3.13", - "@firebase/util": "0.4.0", - "tslib": "^2.0.0" + "@firebase/component": "0.5.7", + "@firebase/util": "1.4.0", + "node-fetch": "2.6.5", + "tslib": "^2.1.0" }, "peerDependencies": { - "@firebase/app": "0.x", - "@firebase/app-types": "0.x" + "@firebase/app": "0.x" + } + }, + "node_modules/@firebase/storage-compat": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@firebase/storage-compat/-/storage-compat-0.1.4.tgz", + "integrity": "sha512-EV14tdnjm5yewGBgsUarGPzRUgqQX26+NVHIW1AoT+bMoODlL5ypYGv2/QA9Phi7JBvo5cAcTe4stEsu3CTF0g==", + "peer": true, + "dependencies": { + "@firebase/component": "0.5.7", + "@firebase/storage": "0.8.4", + "@firebase/storage-types": "0.6.0", + "@firebase/util": "1.4.0", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.x" } }, "node_modules/@firebase/storage-types": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@firebase/storage-types/-/storage-types-0.3.13.tgz", - "integrity": "sha512-pL7b8d5kMNCCL0w9hF7pr16POyKkb3imOW7w0qYrhBnbyJTdVxMWZhb0HxCFyQWC0w3EiIFFmxoz8NTFZDEFog==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@firebase/storage-types/-/storage-types-0.6.0.tgz", + "integrity": "sha512-1LpWhcCb1ftpkP/akhzjzeFxgVefs6eMD2QeKiJJUGH1qOiows2w5o0sKCUSQrvrRQS1lz3SFGvNR1Ck/gqxeA==", "peer": true, "peerDependencies": { "@firebase/app-types": "0.x", - "@firebase/util": "0.x" + "@firebase/util": "1.x" } }, "node_modules/@firebase/util": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@firebase/util/-/util-0.4.0.tgz", - "integrity": "sha512-z8A+9YGM61ZXQ2KBSVwxXaELOJjG+EQ374YolqNVMvWBJzTNGZGaVP81Ggl8XD10Xinyt1Dgdo86JDV0OAnvqA==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.4.0.tgz", + "integrity": "sha512-Qn58d+DVi1nGn0bA9RV89zkz0zcbt6aUcRdyiuub/SuEvjKYstWmHcHwh1C0qmE1wPf9a3a+AuaRtduaGaRT7A==", "peer": true, "dependencies": { - "tslib": "^2.0.0" + "tslib": "^2.1.0" } }, "node_modules/@firebase/webchannel-wrapper": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-0.4.1.tgz", - "integrity": "sha512-0yPjzuzGMkW1GkrC8yWsiN7vt1OzkMIi9HgxRmKREZl2wnNPOKo/yScTjXf/O57HM8dltqxPF6jlNLFVtc2qdw==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-0.6.0.tgz", + "integrity": "sha512-Pz4+7HPzKvOFI1ICQ6pyUv/VgStEWq9IGiVaaV1cQLi66NIA1mD5INnY4CDNoVAxlkuZvDEUZ+cVHLQ8iwA2hQ==", "peer": true }, "node_modules/@grpc/grpc-js": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.2.11.tgz", - "integrity": "sha512-DZqx3nHBm2OGY7NKq4sppDEfx4nBAsQH/d/H/yxo/+BwpVLWLGs+OorpwQ+Fqd6EgpDEoi4MhqndjGUeLl/5GA==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.4.2.tgz", + "integrity": "sha512-aUN6oGk9un8rfYWz73nQgFxPCYJQYd8LpIGguZHBsNduBMyqG6EWANrsVBuTG+nl/l4dKb3x+qi1l9+oxDxqGg==", "peer": true, "dependencies": { - "@types/node": ">=12.12.47", - "google-auth-library": "^6.1.1", - "semver": "^6.2.0" + "@grpc/proto-loader": "^0.6.4", + "@types/node": ">=12.12.47" }, "engines": { "node": "^8.13.0 || >=10.10.0" } }, "node_modules/@grpc/proto-loader": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.5.6.tgz", - "integrity": "sha512-DT14xgw3PSzPxwS13auTEwxhMMOoz33DPUKNtmYK/QYbBSpLXJy78FGGs5yVoxVobEqPm4iW9MOIoz0A3bLTRQ==", + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.6.tgz", + "integrity": "sha512-cdMaPZ8AiFz6ua6PUbP+LKbhwJbFXnrQ/mlnKGUyzDUZ3wp7vPLksnmLCBX6SHgSmjX7CbNVNLFYD5GmmjO4GQ==", "peer": true, "dependencies": { + "@types/long": "^4.0.1", "lodash.camelcase": "^4.3.0", - "protobufjs": "^6.8.6" + "long": "^4.0.0", + "protobufjs": "^6.10.0", + "yargs": "^16.1.1" + }, + "bin": { + "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" }, "engines": { "node": ">=6" @@ -471,100 +658,82 @@ "peer": true }, "node_modules/@types/node": { - "version": "14.14.34", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.34.tgz", - "integrity": "sha512-dBPaxocOK6UVyvhbnpFIj2W+S+1cBTkHQbFQfeeJhoKFbzYcVUGHvddeWPSucKATb3F0+pgDq0i6ghEaZjsugA==", + "version": "16.11.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.6.tgz", + "integrity": "sha512-ua7PgUoeQFjmWPcoo9khiPum3Pd60k4/2ZGXt18sm2Slk0W0xZTqt5Y0Ny1NyBiN1EVQ/+FaF9NcY4Qe6rwk5w==", "peer": true }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "peer": true, - "dependencies": { - "event-target-shim": "^5.0.0" - }, "engines": { - "node": ">=6.5" + "node": ">=8" } }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "peer": true, "dependencies": { - "debug": "4" + "color-convert": "^2.0.1" }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", - "peer": true, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "peer": true - }, - "node_modules/bignumber.js": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.1.tgz", - "integrity": "sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==", - "peer": true, - "engines": { - "node": "*" - } + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, - "node_modules/buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=", + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "peer": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "peer": true }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "node_modules/core-js": { "version": "3.6.5", @@ -577,66 +746,31 @@ "url": "https://opencollective.com/core-js" } }, - "node_modules/debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "peer": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/dom-storage": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/dom-storage/-/dom-storage-2.1.0.tgz", - "integrity": "sha512-g6RpyWXzl0RR6OTElHKBl7nwnK87GUyZMYC7JWsB/IA73vpqK2K6LT39x4VepLxlSsWBFrPVLnsSR5Jyty0+2Q==", - "peer": true, - "engines": { - "node": "*" - } + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "peer": 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", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "peer": true, - "dependencies": { - "safe-buffer": "^5.0.1" - } + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "peer": true }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "peer": true, "engines": { "node": ">=6" } }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "peer": true - }, - "node_modules/fast-text-encoding": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.3.tgz", - "integrity": "sha512-dtm4QZH9nZtcDt8qJiOH9fcQd1NAgi+K1O2DbE6GG1PPCK/BWfOH3idCTRQ4ImXRUOyopDEgDEnVEE7Y/2Wrig==", - "peer": true - }, "node_modules/faye-websocket": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", - "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", "peer": true, "dependencies": { "websocket-driver": ">=0.5.1" @@ -646,70 +780,57 @@ } }, "node_modules/firebase": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/firebase/-/firebase-8.3.0.tgz", - "integrity": "sha512-Dyc16NwXth4TIJ12doQkUnwSrTqlJ1sCmTIOqFdCPT+EBMgD7jAj3cy/fnbRM9YdQ0CJYXVSz4aC/fJbDKSn8A==", + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/firebase/-/firebase-9.2.0.tgz", + "integrity": "sha512-48/pyuzBHbhmgJLdHbEVnNkisYI5/8NkvzVfnVbjZMqVW2fIHDs6A0WVBFBRVqmzX0kDqqhGmWN9LkkYCo6mnQ==", "peer": true, "dependencies": { - "@firebase/analytics": "0.6.5", - "@firebase/app": "0.6.16", - "@firebase/app-types": "0.6.1", - "@firebase/auth": "0.16.4", - "@firebase/database": "0.9.5", - "@firebase/firestore": "2.2.0", - "@firebase/functions": "0.6.3", - "@firebase/installations": "0.4.21", - "@firebase/messaging": "0.7.5", - "@firebase/performance": "0.4.7", + "@firebase/analytics": "0.7.2", + "@firebase/analytics-compat": "0.1.3", + "@firebase/app": "0.7.5", + "@firebase/app-check": "0.4.2", + "@firebase/app-check-compat": "0.1.3", + "@firebase/app-compat": "0.1.6", + "@firebase/app-types": "0.7.0", + "@firebase/auth": "0.19.0", + "@firebase/auth-compat": "0.2.0", + "@firebase/database": "0.12.2", + "@firebase/database-compat": "0.1.2", + "@firebase/firestore": "3.2.0", + "@firebase/firestore-compat": "0.1.5", + "@firebase/functions": "0.7.3", + "@firebase/functions-compat": "0.1.4", + "@firebase/installations": "0.5.2", + "@firebase/messaging": "0.9.2", + "@firebase/messaging-compat": "0.1.2", + "@firebase/performance": "0.5.2", + "@firebase/performance-compat": "0.1.2", "@firebase/polyfill": "0.3.36", - "@firebase/remote-config": "0.1.32", - "@firebase/storage": "0.4.4", - "@firebase/util": "0.4.0" - }, - "engines": { - "node": "^8.13.0 || >=10.10.0" + "@firebase/remote-config": "0.3.1", + "@firebase/remote-config-compat": "0.1.2", + "@firebase/storage": "0.8.4", + "@firebase/storage-compat": "0.1.4", + "@firebase/util": "1.4.0" } }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, - "node_modules/gaxios": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.2.0.tgz", - "integrity": "sha512-Ms7fNifGv0XVU+6eIyL9LB7RVESeML9+cMvkwGS70xyD6w2Z80wl6RiqiJ9k1KFlJCUTQqFFc8tXmPQfSKUe8g==", + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "peer": true, - "dependencies": { - "abort-controller": "^3.0.0", - "extend": "^3.0.2", - "https-proxy-agent": "^5.0.0", - "is-stream": "^2.0.0", - "node-fetch": "^2.3.0" - }, "engines": { - "node": ">=10" - } - }, - "node_modules/gcp-metadata": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.2.1.tgz", - "integrity": "sha512-tSk+REe5iq/N+K+SK1XjZJUrFPuDqGZVzCy2vocIHIGmPlTGsa8owXMJwGkrXr73NO0AzhPW4MF2DEHz7P2AVw==", - "peer": true, - "dependencies": { - "gaxios": "^4.0.0", - "json-bigint": "^1.0.0" - }, - "engines": { - "node": ">=10" + "node": "6.* || 8.* || >= 10.*" } }, "node_modules/glob": { "version": "7.1.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -722,85 +843,28 @@ "node": "*" } }, - "node_modules/google-auth-library": { - "version": "6.1.6", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-6.1.6.tgz", - "integrity": "sha512-Q+ZjUEvLQj/lrVHF/IQwRo6p3s8Nc44Zk/DALsN+ac3T4HY/g/3rrufkgtl+nZ1TW7DNAw5cTChdVp4apUXVgQ==", - "peer": true, - "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" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/google-p12-pem": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.0.3.tgz", - "integrity": "sha512-wS0ek4ZtFx/ACKYF3JhyGe5kzH7pgiQ7J5otlumqR9psmWMYc+U9cErKlCYVYHoUaidXHdZ2xbo34kB+S+24hA==", - "peer": true, - "dependencies": { - "node-forge": "^0.10.0" - }, - "bin": { - "gp12-pem": "build/src/bin/gp12-pem.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/gtoken": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.2.1.tgz", - "integrity": "sha512-OY0BfPKe3QnMsY9MzTHTSKn+Vl2l1CcLe6BwDEQj00mbbkl5nyQ/7EUREstg4fQNZ8iYE7br4JJ7TdKeDOPWmw==", - "peer": true, - "dependencies": { - "gaxios": "^4.0.0", - "google-p12-pem": "^3.0.3", - "jws": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/http-parser-js": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==", "peer": true }, - "node_modules/https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", - "peer": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/idb": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/idb/-/idb-3.0.2.tgz", "integrity": "sha512-+FLa/0sTXqyux0o6C+i2lOR0VoS60LU/jzUo5xjfY6+7sEEgy4Gz1O7yFBXvjd7N0NyIGWIRg8DcQSLEG+VSPw==", "peer": true }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=", + "peer": true + }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -809,46 +873,42 @@ "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "node_modules/is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "peer": true, "engines": { "node": ">=8" } }, - "node_modules/json-bigint": { + "node_modules/isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", - "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", - "peer": true, - "dependencies": { - "bignumber.js": "^9.0.0" - } + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "peer": true }, - "node_modules/jwa": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", - "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", + "node_modules/jszip": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.7.1.tgz", + "integrity": "sha512-ghL0tz1XG9ZEmRMcEN2vt7xabrDdqHHeykgARpmZ0BiIctWxM47Vt63ZO2dnp4QYt/xJVLLy5Zv1l/xRdh2byg==", "peer": true, "dependencies": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "set-immediate-shim": "~1.0.1" } }, - "node_modules/jws": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", - "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", + "node_modules/lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", "peer": true, "dependencies": { - "jwa": "^2.0.0", - "safe-buffer": "^5.0.1" + "immediate": "~3.0.5" } }, "node_modules/lodash.camelcase": { @@ -863,23 +923,10 @@ "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==", "peer": true }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "peer": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -887,48 +934,46 @@ "node": "*" } }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "peer": true - }, "node_modules/node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.5.tgz", + "integrity": "sha512-mmlIVHJEu5rnIxgEgez6b9GgWXbkZj5YZ7fx+2r94a2E+Uirsp6HsPTPlomfdHtpt/B0cdKviwkoaM6pyvUOpQ==", "peer": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, "engines": { "node": "4.x || >=6.0.0" } }, - "node_modules/node-forge": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", - "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", - "peer": true, - "engines": { - "node": ">= 6.0.0" - } - }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, "dependencies": { "wrappy": "1" } }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "peer": true + }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true, "engines": { "node": ">=0.10.0" } }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "peer": true + }, "node_modules/promise-polyfill": { "version": "8.1.3", "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-8.1.3.tgz", @@ -936,9 +981,9 @@ "peer": true }, "node_modules/protobufjs": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.10.2.tgz", - "integrity": "sha512-27yj+04uF6ya9l+qfpH187aqEzfCF4+Uit0I9ZBQVqK09hk/SQzKa2MUqUpXaVa7LOFRg1TSSr3lVxGOk6c0SQ==", + "version": "6.11.2", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.2.tgz", + "integrity": "sha512-4BQJoPooKJl2G9j3XftkIXjoC9C0Av2NOrWmbLWT1vH32GcSUHjM0Arra6UfTsVyfMAuFzaLucXn1sadxJydAw==", "hasInstallScript": true, "peer": true, "dependencies": { @@ -953,7 +998,7 @@ "@protobufjs/pool": "^1.1.0", "@protobufjs/utf8": "^1.1.0", "@types/long": "^4.0.1", - "@types/node": "^13.7.0", + "@types/node": ">=13.7.0", "long": "^4.0.0" }, "bin": { @@ -961,17 +1006,34 @@ "pbts": "bin/pbts" } }, - "node_modules/protobufjs/node_modules/@types/node": { - "version": "13.13.46", - "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.46.tgz", - "integrity": "sha512-dqpbzK/KDsOlEt+oyB3rv+u1IxlLFziZu/Z0adfRKoelkr+sTd6QcgiQC+HWq/vkYkHwG5ot2LxgV05aAjnhcg==", - "peer": true + "node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "peer": 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/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "peer": true, + "engines": { + "node": ">=0.10.0" + } }, "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, "dependencies": { "glob": "^7.1.3" }, @@ -998,34 +1060,88 @@ "peer": true }, "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==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "peer": true }, - "node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "node_modules/selenium-webdriver": { + "version": "4.0.0-rc-1", + "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.0.0-rc-1.tgz", + "integrity": "sha512-bcrwFPRax8fifRP60p7xkWDGSJJoMkPAzufMlk5K2NyLPht/YZzR2WcIk1+3gR8VOCLlst1P2PI+MXACaFzpIw==", "peer": true, - "bin": { - "semver": "bin/semver.js" + "dependencies": { + "jszip": "^3.6.0", + "rimraf": "^3.0.2", + "tmp": "^0.2.1", + "ws": ">=7.4.6" + }, + "engines": { + "node": ">= 10.15.0" + } + }, + "node_modules/set-immediate-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "peer": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "peer": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "peer": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "peer": true, + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" } }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", + "peer": true + }, "node_modules/tslib": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", @@ -1044,6 +1160,18 @@ "node": ">=4.2.0" } }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "peer": true + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", + "peer": true + }, "node_modules/websocket-driver": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", @@ -1073,26 +1201,94 @@ "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==", "peer": true }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "peer": true, + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "peer": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "node_modules/ws": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", + "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", + "peer": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } }, - "node_modules/xmlhttprequest": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", - "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=", + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "peer": true, "engines": { - "node": ">=0.4.0" + "node": ">=10" } }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "peer": true + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "peer": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "peer": true, + "engines": { + "node": ">=10" + } } }, "dependencies": { @@ -1119,211 +1315,344 @@ "requires": {} }, "@firebase/analytics": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/@firebase/analytics/-/analytics-0.6.5.tgz", - "integrity": "sha512-0yNdAtLRIS7wTs8eUSPHfQyypAbGha0MVpfnl18CTq1sLpdzHICn7CyCMYhc0ewlFdTCIHLjw4ZQoSTwtBHfkQ==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@firebase/analytics/-/analytics-0.7.2.tgz", + "integrity": "sha512-YxLsPojufkfe3FFg6imOMQdfdJwu5hig17jnldpdmqemj1gOIwE/peTBrksP4rxnIra26XhsBRppcPcVQyxMNQ==", + "peer": true, + "requires": { + "@firebase/component": "0.5.7", + "@firebase/installations": "0.5.2", + "@firebase/logger": "0.3.0", + "@firebase/util": "1.4.0", + "tslib": "^2.1.0" + } + }, + "@firebase/analytics-compat": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@firebase/analytics-compat/-/analytics-compat-0.1.3.tgz", + "integrity": "sha512-FpaJ4sbJnryCRBkKIE45L2wGt2oCmlRK+AZc4JQHw20vb8Mf1WG1qGO+FGNoFev3lJSAd21tyhoLdPvbCTnOZQ==", "peer": true, "requires": { - "@firebase/analytics-types": "0.4.0", - "@firebase/component": "0.2.1", - "@firebase/installations": "0.4.21", - "@firebase/logger": "0.2.6", - "@firebase/util": "0.4.0", - "tslib": "^2.0.0" + "@firebase/analytics": "0.7.2", + "@firebase/analytics-types": "0.7.0", + "@firebase/component": "0.5.7", + "@firebase/util": "1.4.0", + "tslib": "^2.1.0" } }, "@firebase/analytics-types": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@firebase/analytics-types/-/analytics-types-0.4.0.tgz", - "integrity": "sha512-Jj2xW+8+8XPfWGkv9HPv/uR+Qrmq37NPYT352wf7MvE9LrstpLVmFg3LqG6MCRr5miLAom5sen2gZ+iOhVDeRA==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@firebase/analytics-types/-/analytics-types-0.7.0.tgz", + "integrity": "sha512-DNE2Waiwy5+zZnCfintkDtBfaW6MjIG883474v6Z0K1XZIvl76cLND4iv0YUb48leyF+PJK1KO2XrgHb/KpmhQ==", "peer": true }, "@firebase/app": { - "version": "0.6.16", - "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.6.16.tgz", - "integrity": "sha512-QGqfvDQ4AK54y2ysttdgtTsyuLGfN0OksdmWSHLDs7HBJg9nJkZUuFA/cJ1cftpPSVxpCbnro+OU1FtRgapzAA==", + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.7.5.tgz", + "integrity": "sha512-4CzYlE0bM9rzAD/MkZ01ineWyRQ3bZK/9sH4xROHKcKj3pMu7svMUnIXkk2qIC+UUYHKp6BG+FhRNNtxUzEDSw==", + "peer": true, + "requires": { + "@firebase/component": "0.5.7", + "@firebase/logger": "0.3.0", + "@firebase/util": "1.4.0", + "tslib": "^2.1.0" + } + }, + "@firebase/app-check": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@firebase/app-check/-/app-check-0.4.2.tgz", + "integrity": "sha512-DFYt22lUMvvncN3v6x9ZRE2/HHBQdRQyYtHwakAcZrRUALJiU16iDwl2CABuW4JKytTmMj+xXo0fjSIRWtwT/w==", + "peer": true, + "requires": { + "@firebase/component": "0.5.7", + "@firebase/logger": "0.3.0", + "@firebase/util": "1.4.0", + "tslib": "^2.1.0" + } + }, + "@firebase/app-check-compat": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@firebase/app-check-compat/-/app-check-compat-0.1.3.tgz", + "integrity": "sha512-ka5ggmfucQDwEJTcFsXPJJ+ygPZz4Q44D5yb0sksfOAsUSpzAR83jDSxebOgTvvk+axNCFamxOsrZEV6KKDjEg==", + "peer": true, + "requires": { + "@firebase/app-check": "0.4.2", + "@firebase/component": "0.5.7", + "@firebase/logger": "0.3.0", + "@firebase/util": "1.4.0", + "tslib": "^2.1.0" + } + }, + "@firebase/app-check-interop-types": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@firebase/app-check-interop-types/-/app-check-interop-types-0.1.0.tgz", + "integrity": "sha512-uZfn9s4uuRsaX5Lwx+gFP3B6YsyOKUE+Rqa6z9ojT4VSRAsZFko9FRn6OxQUA1z5t5d08fY4pf+/+Dkd5wbdbA==", + "peer": true + }, + "@firebase/app-compat": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@firebase/app-compat/-/app-compat-0.1.6.tgz", + "integrity": "sha512-kz0PZitZbHb2SpaCOrBng+8Mu2LQia9CDFl1G+CIStB+LhM4r4kgdD5T1sd2bl1ngzUqdWU4QGW0YcVv4WzWcg==", "peer": true, "requires": { - "@firebase/app-types": "0.6.1", - "@firebase/component": "0.2.1", - "@firebase/logger": "0.2.6", - "@firebase/util": "0.4.0", - "dom-storage": "2.1.0", - "tslib": "^2.0.0", - "xmlhttprequest": "1.8.0" + "@firebase/app": "0.7.5", + "@firebase/component": "0.5.7", + "@firebase/logger": "0.3.0", + "@firebase/util": "1.4.0", + "tslib": "^2.1.0" } }, "@firebase/app-types": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.6.1.tgz", - "integrity": "sha512-L/ZnJRAq7F++utfuoTKX4CLBG5YR7tFO3PLzG1/oXXKEezJ0kRL3CMRoueBEmTCzVb/6SIs2Qlaw++uDgi5Xyg==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.7.0.tgz", + "integrity": "sha512-6fbHQwDv2jp/v6bXhBw2eSRbNBpxHcd1NBF864UksSMVIqIyri9qpJB1Mn6sGZE+bnDsSQBC5j2TbMxYsJQkQg==", "peer": true }, "@firebase/auth": { - "version": "0.16.4", - "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-0.16.4.tgz", - "integrity": "sha512-zgHPK6/uL6+nAyG9zqammHTF1MQpAN7z/jVRLYkDZS4l81H08b2SzApLbRfW/fmy665xqb5MK7sVH0V1wsiCNw==", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-0.19.0.tgz", + "integrity": "sha512-0gcBdZkN53PhdzcWkJsjq4NU6gLUXI6Iv9G8xq0BlKyvlMXI76tKXUcWabiWnh8al8DOOuvpKz9Jiscl0/Z+Mw==", + "peer": true, + "requires": { + "@firebase/component": "0.5.7", + "@firebase/logger": "0.3.0", + "@firebase/util": "1.4.0", + "node-fetch": "2.6.5", + "selenium-webdriver": "4.0.0-rc-1", + "tslib": "^2.1.0" + } + }, + "@firebase/auth-compat": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@firebase/auth-compat/-/auth-compat-0.2.0.tgz", + "integrity": "sha512-5Dh2tsxLQs7PgfV4Qs5h9kgWNTBqElfclXmTkGvYyOOGjQ1MGUuze4Zd6NNeN+SgmPsRB6U/qEBJLDkTP1Lz+g==", "peer": true, "requires": { - "@firebase/auth-types": "0.10.2" + "@firebase/auth": "0.19.0", + "@firebase/auth-types": "0.11.0", + "@firebase/component": "0.5.7", + "@firebase/util": "1.4.0", + "node-fetch": "2.6.5", + "selenium-webdriver": "^4.0.0-beta.2", + "tslib": "^2.1.0" } }, "@firebase/auth-interop-types": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.1.5.tgz", - "integrity": "sha512-88h74TMQ6wXChPA6h9Q3E1Jg6TkTHep2+k63OWg3s0ozyGVMeY+TTOti7PFPzq5RhszQPQOoCi59es4MaRvgCw==", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.1.6.tgz", + "integrity": "sha512-etIi92fW3CctsmR9e3sYM3Uqnoq861M0Id9mdOPF6PWIg38BXL5k4upCNBggGUpLIS0H1grMOvy/wn1xymwe2g==", "peer": true, "requires": {} }, "@firebase/auth-types": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/@firebase/auth-types/-/auth-types-0.10.2.tgz", - "integrity": "sha512-0GMWVWh5TBCYIQfVerxzDsuvhoFpK0++O9LtP3FWkwYo7EAxp6w0cftAg/8ntU1E5Wg56Ry0b6ti/YGP6g0jlg==", + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@firebase/auth-types/-/auth-types-0.11.0.tgz", + "integrity": "sha512-q7Bt6cx+ySj9elQHTsKulwk3+qDezhzRBFC9zlQ1BjgMueUOnGMcvqmU0zuKlQ4RhLSH7MNAdBV2znVaoN3Vxw==", "peer": true, "requires": {} }, "@firebase/component": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.2.1.tgz", - "integrity": "sha512-WfBFABfKYcRFjgMA7ydPLokSa+GkuZd+FD00KrZLAfslpHxs6cCFXdklvP8NEb1oDLqYakRXBqWdelH9/Whacg==", + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.5.7.tgz", + "integrity": "sha512-CiAHUPXh2hn/lpzMShNmfAxHNQhKQwmQUJSYMPCjf2bCCt4Z2vLGpS+UWEuNFm9Zf8LNmkS+Z+U/s4Obi5carg==", "peer": true, "requires": { - "@firebase/util": "0.4.0", - "tslib": "^2.0.0" + "@firebase/util": "1.4.0", + "tslib": "^2.1.0" } }, "@firebase/database": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@firebase/database/-/database-0.9.5.tgz", - "integrity": "sha512-sfS5ZvU7UqztMAP9y3t/AQRNhqDrHJT6/W1JBmEivjSxf1MLLbCafZMFbksuvl2iog73wOGDuoDzSHvhtSQvvg==", + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/@firebase/database/-/database-0.12.2.tgz", + "integrity": "sha512-Y1LZR1LIQM8YKMkeUPpAq3/e53hcfcXO+JEZ6vCzBeD6xRawqmpw6B5/DzePdCNNvjcqheXzSaR7T39eRZo/wA==", + "peer": true, + "requires": { + "@firebase/auth-interop-types": "0.1.6", + "@firebase/component": "0.5.7", + "@firebase/logger": "0.3.0", + "@firebase/util": "1.4.0", + "faye-websocket": "0.11.4", + "tslib": "^2.1.0" + } + }, + "@firebase/database-compat": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@firebase/database-compat/-/database-compat-0.1.2.tgz", + "integrity": "sha512-sV32QIRSNIBj/6OYtpmPzA/SfQz1/NBZbhxg9dIhGaSt9e5HaMxXRuz2lImudX0Sd/v8DKdExrxa++K6rKrRtA==", "peer": true, "requires": { - "@firebase/auth-interop-types": "0.1.5", - "@firebase/component": "0.2.1", - "@firebase/database-types": "0.7.0", - "@firebase/logger": "0.2.6", - "@firebase/util": "0.4.0", - "faye-websocket": "0.11.3", - "tslib": "^2.0.0" + "@firebase/component": "0.5.7", + "@firebase/database": "0.12.2", + "@firebase/database-types": "0.9.1", + "@firebase/logger": "0.3.0", + "@firebase/util": "1.4.0", + "tslib": "^2.1.0" } }, "@firebase/database-types": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-0.7.0.tgz", - "integrity": "sha512-FduQmPpUUOHgbOt7/vWlC1ntSLMEqqYessdQ/ODd7RFWm53iVa0T1mpIDtNwqd8gW3k7cajjSjcLjfQGtvLGDg==", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-0.9.1.tgz", + "integrity": "sha512-RUixK/YrbpxbfdE+nYP0wMcEsz1xPTnafP0q3UlSS/+fW744OITKtR1J0cMRaXbvY7EH0wUVTNVkrtgxYY8IgQ==", "peer": true, "requires": { - "@firebase/app-types": "0.6.1" + "@firebase/app-types": "0.7.0", + "@firebase/util": "1.4.0" } }, "@firebase/firestore": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-2.2.0.tgz", - "integrity": "sha512-/p0oR73zgAlEHgqCIt5v2m8ADOign6APkZ0QG5bJQVSDqPXjB89ktI3v8x0qtRtzKm/pd3lmyoD/raOh/ItsZA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-3.2.0.tgz", + "integrity": "sha512-LuL5oUlEsHmB4AzxGi+HqQ9dZvuBo+p2sRAribm8dUFbGdWEillPqX4UEHZHzkDQWmAUD3P92YiV2d34PnL/Tw==", + "peer": true, + "requires": { + "@firebase/component": "0.5.7", + "@firebase/logger": "0.3.0", + "@firebase/util": "1.4.0", + "@firebase/webchannel-wrapper": "0.6.0", + "@grpc/grpc-js": "^1.3.2", + "@grpc/proto-loader": "^0.6.0", + "node-fetch": "2.6.5", + "tslib": "^2.1.0" + } + }, + "@firebase/firestore-compat": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@firebase/firestore-compat/-/firestore-compat-0.1.5.tgz", + "integrity": "sha512-V2lsD64tnz4xwqKPKzWXw3KjykYzF87k8wcYDNKLjAgqrVlv8klBYHLbbU7tondN01Se6HvvwlADHVZvX9Zn7A==", "peer": true, "requires": { - "@firebase/component": "0.2.1", - "@firebase/firestore-types": "2.2.0", - "@firebase/logger": "0.2.6", - "@firebase/util": "0.4.0", - "@firebase/webchannel-wrapper": "0.4.1", - "@grpc/grpc-js": "^1.0.0", - "@grpc/proto-loader": "^0.5.0", - "node-fetch": "2.6.1", - "tslib": "^2.0.0" + "@firebase/component": "0.5.7", + "@firebase/firestore": "3.2.0", + "@firebase/firestore-types": "2.5.0", + "@firebase/util": "1.4.0", + "tslib": "^2.1.0" } }, "@firebase/firestore-types": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@firebase/firestore-types/-/firestore-types-2.2.0.tgz", - "integrity": "sha512-5kZZtQ32FIRJP1029dw+ZVNRCclKOErHv1+Xn0pw/5Fq3dxroA/ZyFHqDu+uV52AyWHhNLjCqX43ibm4YqOzRw==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@firebase/firestore-types/-/firestore-types-2.5.0.tgz", + "integrity": "sha512-I6c2m1zUhZ5SH0cWPmINabDyH5w0PPFHk2UHsjBpKdZllzJZ2TwTkXbDtpHUZNmnc/zAa0WNMNMvcvbb/xJLKA==", "peer": true, "requires": {} }, "@firebase/functions": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/@firebase/functions/-/functions-0.6.3.tgz", - "integrity": "sha512-02dqjin4V9PvuZLU6d14azyRZZ5cUSPT5CvE2SbGjAcXYdlFIg5Cy6T50dl48UsbmmNO40kXNB1dGESp2A4cWw==", + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/@firebase/functions/-/functions-0.7.3.tgz", + "integrity": "sha512-LxLbR9UtULLKMWSs6vtlte2Ka5tBDPGeGwX8Mto2uAtaNdrkoWKdhiJ4OTQx1YTCRIbTQnTg3t50NO8afzTEcQ==", + "peer": true, + "requires": { + "@firebase/app-check-interop-types": "0.1.0", + "@firebase/auth-interop-types": "0.1.6", + "@firebase/component": "0.5.7", + "@firebase/messaging-interop-types": "0.1.0", + "@firebase/util": "1.4.0", + "node-fetch": "2.6.5", + "tslib": "^2.1.0" + } + }, + "@firebase/functions-compat": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@firebase/functions-compat/-/functions-compat-0.1.4.tgz", + "integrity": "sha512-mC/z0uJbGk/RRskabvvDylpMHMsNNwNIxrjBJy3J8ADZUqpJTMuT4gq+pHlPemYqLBZuN8TffIZNVPajXxqc+Q==", "peer": true, "requires": { - "@firebase/component": "0.2.1", - "@firebase/functions-types": "0.4.0", - "@firebase/messaging-types": "0.5.0", - "node-fetch": "2.6.1", - "tslib": "^2.0.0" + "@firebase/component": "0.5.7", + "@firebase/functions": "0.7.3", + "@firebase/functions-types": "0.5.0", + "@firebase/util": "1.4.0", + "tslib": "^2.1.0" } }, "@firebase/functions-types": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@firebase/functions-types/-/functions-types-0.4.0.tgz", - "integrity": "sha512-3KElyO3887HNxtxNF1ytGFrNmqD+hheqjwmT3sI09FaDCuaxGbOnsXAXH2eQ049XRXw9YQpHMgYws/aUNgXVyQ==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@firebase/functions-types/-/functions-types-0.5.0.tgz", + "integrity": "sha512-qza0M5EwX+Ocrl1cYI14zoipUX4gI/Shwqv0C1nB864INAD42Dgv4v94BCyxGHBg2kzlWy8PNafdP7zPO8aJQA==", "peer": true }, "@firebase/installations": { - "version": "0.4.21", - "resolved": "https://registry.npmjs.org/@firebase/installations/-/installations-0.4.21.tgz", - "integrity": "sha512-tMoAb1lHAQefdknWbKxSp2CEWWV/f4aeq4PjhzWurJEJN4RQ620ITbtuKregnGnYHu9lDzhyZ51H4s6+BhjCxA==", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@firebase/installations/-/installations-0.5.2.tgz", + "integrity": "sha512-k43qItRUnjIhAcxFRhGrox2ZBY/CFJOizB30hej9HuWOFv4qXoMZOmLtKzyjskFhRn/HW8iBUVguNFAEf6iehw==", "peer": true, "requires": { - "@firebase/component": "0.2.1", - "@firebase/installations-types": "0.3.4", - "@firebase/util": "0.4.0", + "@firebase/component": "0.5.7", + "@firebase/util": "1.4.0", "idb": "3.0.2", - "tslib": "^2.0.0" + "tslib": "^2.1.0" } }, - "@firebase/installations-types": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@firebase/installations-types/-/installations-types-0.3.4.tgz", - "integrity": "sha512-RfePJFovmdIXb6rYwtngyxuEcWnOrzdZd9m7xAW0gRxDIjBT20n3BOhjpmgRWXo/DAxRmS7bRjWAyTHY9cqN7Q==", - "peer": true, - "requires": {} - }, "@firebase/logger": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.2.6.tgz", - "integrity": "sha512-KIxcUvW/cRGWlzK9Vd2KB864HlUnCfdTH0taHE0sXW5Xl7+W68suaeau1oKNEqmc3l45azkd4NzXTCWZRZdXrw==", - "peer": true + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.3.0.tgz", + "integrity": "sha512-7oQ+TctqekfgZImWkKuda50JZfkmAKMgh5qY4aR4pwRyqZXuJXN1H/BKkHvN1y0S4XWtF0f/wiCLKHhyi1ppPA==", + "peer": true, + "requires": { + "tslib": "^2.1.0" + } }, "@firebase/messaging": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/@firebase/messaging/-/messaging-0.7.5.tgz", - "integrity": "sha512-jA1pdV/DrfvzSVKLuff2hYo2AvU0CdZ901TngxscJqKYViZEoqAGw2v/kC70uRwEG0Tc2M/SRHstHpeFADlP0Q==", + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@firebase/messaging/-/messaging-0.9.2.tgz", + "integrity": "sha512-v95cny/HsupEvFiewsobjEtQ8ItMCPsg+29VLP51SIS3Ix7Kg2TJLZ2tfHkESRFazIhf2+GNwR8hdXoajqz2og==", "peer": true, "requires": { - "@firebase/component": "0.2.1", - "@firebase/installations": "0.4.21", - "@firebase/messaging-types": "0.5.0", - "@firebase/util": "0.4.0", + "@firebase/component": "0.5.7", + "@firebase/installations": "0.5.2", + "@firebase/messaging-interop-types": "0.1.0", + "@firebase/util": "1.4.0", "idb": "3.0.2", - "tslib": "^2.0.0" + "tslib": "^2.1.0" } }, - "@firebase/messaging-types": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@firebase/messaging-types/-/messaging-types-0.5.0.tgz", - "integrity": "sha512-QaaBswrU6umJYb/ZYvjR5JDSslCGOH6D9P136PhabFAHLTR4TWjsaACvbBXuvwrfCXu10DtcjMxqfhdNIB1Xfg==", + "@firebase/messaging-compat": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@firebase/messaging-compat/-/messaging-compat-0.1.2.tgz", + "integrity": "sha512-ORxqIlnstjRhTpQsX7A0K9ifBTrqI7MNdWwCRbhvTh7GkzmhMe7ht+YAALrdvHD3Qty49UFrHznaIbF7Gr+nwA==", "peer": true, - "requires": {} + "requires": { + "@firebase/component": "0.5.7", + "@firebase/messaging": "0.9.2", + "@firebase/util": "1.4.0", + "tslib": "^2.1.0" + } + }, + "@firebase/messaging-interop-types": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@firebase/messaging-interop-types/-/messaging-interop-types-0.1.0.tgz", + "integrity": "sha512-DbvUl/rXAZpQeKBnwz0NYY5OCqr2nFA0Bj28Fmr3NXGqR4PAkfTOHuQlVtLO1Nudo3q0HxAYLa68ZDAcuv2uKQ==", + "peer": true }, "@firebase/performance": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/@firebase/performance/-/performance-0.4.7.tgz", - "integrity": "sha512-wxau4qrAy5W+kIoXPUm5hJVX4+vY3wVC9QqWNzoqb+L5tMHxIoeEqxvJo8abjv4pa0/YaVl1XKAZdvvoe7c/dA==", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@firebase/performance/-/performance-0.5.2.tgz", + "integrity": "sha512-xHrt/BNiln3OIW9hyqKwck0x4C7Km+XKYQsP8cPDBh8AWFh//DB0ta7DuMXw7JGIuyKpK2D3iq5aQNS0MzMvSw==", + "peer": true, + "requires": { + "@firebase/component": "0.5.7", + "@firebase/installations": "0.5.2", + "@firebase/logger": "0.3.0", + "@firebase/util": "1.4.0", + "tslib": "^2.1.0" + } + }, + "@firebase/performance-compat": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@firebase/performance-compat/-/performance-compat-0.1.2.tgz", + "integrity": "sha512-L9rt89eIPaucGsO/bwF199mS5+BV3kHTfK1Fr1vCmGL87kLpV8DKVccKc7Z0ZwQelfMvXOGy5jVqH/sHhiQAYg==", "peer": true, "requires": { - "@firebase/component": "0.2.1", - "@firebase/installations": "0.4.21", - "@firebase/logger": "0.2.6", - "@firebase/performance-types": "0.0.13", - "@firebase/util": "0.4.0", - "tslib": "^2.0.0" + "@firebase/component": "0.5.7", + "@firebase/logger": "0.3.0", + "@firebase/performance": "0.5.2", + "@firebase/performance-types": "0.1.0", + "@firebase/util": "1.4.0", + "tslib": "^2.1.0" } }, "@firebase/performance-types": { - "version": "0.0.13", - "resolved": "https://registry.npmjs.org/@firebase/performance-types/-/performance-types-0.0.13.tgz", - "integrity": "sha512-6fZfIGjQpwo9S5OzMpPyqgYAUZcFzZxHFqOyNtorDIgNXq33nlldTL/vtaUZA8iT9TT5cJlCrF/jthKU7X21EA==", + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@firebase/performance-types/-/performance-types-0.1.0.tgz", + "integrity": "sha512-6p1HxrH0mpx+622Ql6fcxFxfkYSBpE3LSuwM7iTtYU2nw91Hj6THC8Bc8z4nboIq7WvgsT/kOTYVVZzCSlXl8w==", "peer": true }, "@firebase/polyfill": { @@ -1338,78 +1667,106 @@ } }, "@firebase/remote-config": { - "version": "0.1.32", - "resolved": "https://registry.npmjs.org/@firebase/remote-config/-/remote-config-0.1.32.tgz", - "integrity": "sha512-nPPhKSUHgwlv2hazke6keBkkadW+/VCpNbq3P9L8oWxq7hKQz7MYAC5LU6PqexNmWQqGFiYyX5J8XDUU3gH/NQ==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@firebase/remote-config/-/remote-config-0.3.1.tgz", + "integrity": "sha512-31nZ0NEcARw1wYKIpoAx63rA0ao28e9zYNrlSC08mBiouSOxu69lthiO0V1ZrFqR/iW9+7M2MqnOUhJ6/LYEwQ==", + "peer": true, + "requires": { + "@firebase/component": "0.5.7", + "@firebase/installations": "0.5.2", + "@firebase/logger": "0.3.0", + "@firebase/util": "1.4.0", + "tslib": "^2.1.0" + } + }, + "@firebase/remote-config-compat": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@firebase/remote-config-compat/-/remote-config-compat-0.1.2.tgz", + "integrity": "sha512-j+joqwZAOO1L3pTlK8aQ3M+781ZbbOtV/TNpU4Tulqq+Psfjlx5SOYVfuF8njbbWGPLhLReFwmEjyE3jnm9hrQ==", "peer": true, "requires": { - "@firebase/component": "0.2.1", - "@firebase/installations": "0.4.21", - "@firebase/logger": "0.2.6", - "@firebase/remote-config-types": "0.1.9", - "@firebase/util": "0.4.0", - "tslib": "^2.0.0" + "@firebase/component": "0.5.7", + "@firebase/logger": "0.3.0", + "@firebase/remote-config": "0.3.1", + "@firebase/remote-config-types": "0.2.0", + "@firebase/util": "1.4.0", + "tslib": "^2.1.0" } }, "@firebase/remote-config-types": { - "version": "0.1.9", - "resolved": "https://registry.npmjs.org/@firebase/remote-config-types/-/remote-config-types-0.1.9.tgz", - "integrity": "sha512-G96qnF3RYGbZsTRut7NBX0sxyczxt1uyCgXQuH/eAfUCngxjEGcZQnBdy6mvSdqdJh5mC31rWPO4v9/s7HwtzA==", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@firebase/remote-config-types/-/remote-config-types-0.2.0.tgz", + "integrity": "sha512-hqK5sCPeZvcHQ1D6VjJZdW6EexLTXNMJfPdTwbD8NrXUw6UjWC4KWhLK/TSlL0QPsQtcKRkaaoP+9QCgKfMFPw==", "peer": true }, "@firebase/storage": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/@firebase/storage/-/storage-0.4.4.tgz", - "integrity": "sha512-3mH6IR04Lvk16kQQ7CMumpppNcqN6RVcqSD3jzaB8P6vbzDVRyk7Dnhd00Eigd++q5FdNRpW3h8xGvHPWDYfKQ==", + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/@firebase/storage/-/storage-0.8.4.tgz", + "integrity": "sha512-Flv25G8J4hp9wa9qTy9UoaBRl2Vcsr+FGaK6RaRUAzoMw2PA46ZPt/DChJZWxKgpmOq/7HyRc8qNTwqqDJt7dA==", + "peer": true, + "requires": { + "@firebase/component": "0.5.7", + "@firebase/util": "1.4.0", + "node-fetch": "2.6.5", + "tslib": "^2.1.0" + } + }, + "@firebase/storage-compat": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@firebase/storage-compat/-/storage-compat-0.1.4.tgz", + "integrity": "sha512-EV14tdnjm5yewGBgsUarGPzRUgqQX26+NVHIW1AoT+bMoODlL5ypYGv2/QA9Phi7JBvo5cAcTe4stEsu3CTF0g==", "peer": true, "requires": { - "@firebase/component": "0.2.1", - "@firebase/storage-types": "0.3.13", - "@firebase/util": "0.4.0", - "tslib": "^2.0.0" + "@firebase/component": "0.5.7", + "@firebase/storage": "0.8.4", + "@firebase/storage-types": "0.6.0", + "@firebase/util": "1.4.0", + "tslib": "^2.1.0" } }, "@firebase/storage-types": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@firebase/storage-types/-/storage-types-0.3.13.tgz", - "integrity": "sha512-pL7b8d5kMNCCL0w9hF7pr16POyKkb3imOW7w0qYrhBnbyJTdVxMWZhb0HxCFyQWC0w3EiIFFmxoz8NTFZDEFog==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@firebase/storage-types/-/storage-types-0.6.0.tgz", + "integrity": "sha512-1LpWhcCb1ftpkP/akhzjzeFxgVefs6eMD2QeKiJJUGH1qOiows2w5o0sKCUSQrvrRQS1lz3SFGvNR1Ck/gqxeA==", "peer": true, "requires": {} }, "@firebase/util": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@firebase/util/-/util-0.4.0.tgz", - "integrity": "sha512-z8A+9YGM61ZXQ2KBSVwxXaELOJjG+EQ374YolqNVMvWBJzTNGZGaVP81Ggl8XD10Xinyt1Dgdo86JDV0OAnvqA==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.4.0.tgz", + "integrity": "sha512-Qn58d+DVi1nGn0bA9RV89zkz0zcbt6aUcRdyiuub/SuEvjKYstWmHcHwh1C0qmE1wPf9a3a+AuaRtduaGaRT7A==", "peer": true, "requires": { - "tslib": "^2.0.0" + "tslib": "^2.1.0" } }, "@firebase/webchannel-wrapper": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-0.4.1.tgz", - "integrity": "sha512-0yPjzuzGMkW1GkrC8yWsiN7vt1OzkMIi9HgxRmKREZl2wnNPOKo/yScTjXf/O57HM8dltqxPF6jlNLFVtc2qdw==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-0.6.0.tgz", + "integrity": "sha512-Pz4+7HPzKvOFI1ICQ6pyUv/VgStEWq9IGiVaaV1cQLi66NIA1mD5INnY4CDNoVAxlkuZvDEUZ+cVHLQ8iwA2hQ==", "peer": true }, "@grpc/grpc-js": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.2.11.tgz", - "integrity": "sha512-DZqx3nHBm2OGY7NKq4sppDEfx4nBAsQH/d/H/yxo/+BwpVLWLGs+OorpwQ+Fqd6EgpDEoi4MhqndjGUeLl/5GA==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.4.2.tgz", + "integrity": "sha512-aUN6oGk9un8rfYWz73nQgFxPCYJQYd8LpIGguZHBsNduBMyqG6EWANrsVBuTG+nl/l4dKb3x+qi1l9+oxDxqGg==", "peer": true, "requires": { - "@types/node": ">=12.12.47", - "google-auth-library": "^6.1.1", - "semver": "^6.2.0" + "@grpc/proto-loader": "^0.6.4", + "@types/node": ">=12.12.47" } }, "@grpc/proto-loader": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.5.6.tgz", - "integrity": "sha512-DT14xgw3PSzPxwS13auTEwxhMMOoz33DPUKNtmYK/QYbBSpLXJy78FGGs5yVoxVobEqPm4iW9MOIoz0A3bLTRQ==", + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.6.tgz", + "integrity": "sha512-cdMaPZ8AiFz6ua6PUbP+LKbhwJbFXnrQ/mlnKGUyzDUZ3wp7vPLksnmLCBX6SHgSmjX7CbNVNLFYD5GmmjO4GQ==", "peer": true, "requires": { + "@types/long": "^4.0.1", "lodash.camelcase": "^4.3.0", - "protobufjs": "^6.8.6" + "long": "^4.0.0", + "protobufjs": "^6.10.0", + "yargs": "^16.1.1" } }, "@protobufjs/aspromise": { @@ -1483,74 +1840,70 @@ "peer": true }, "@types/node": { - "version": "14.14.34", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.34.tgz", - "integrity": "sha512-dBPaxocOK6UVyvhbnpFIj2W+S+1cBTkHQbFQfeeJhoKFbzYcVUGHvddeWPSucKATb3F0+pgDq0i6ghEaZjsugA==", + "version": "16.11.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.6.tgz", + "integrity": "sha512-ua7PgUoeQFjmWPcoo9khiPum3Pd60k4/2ZGXt18sm2Slk0W0xZTqt5Y0Ny1NyBiN1EVQ/+FaF9NcY4Qe6rwk5w==", "peer": true }, - "abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "peer": true, - "requires": { - "event-target-shim": "^5.0.0" - } + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "peer": true }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "peer": true, "requires": { - "debug": "4" + "color-convert": "^2.0.1" } }, - "arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", - "peer": true - }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "peer": true - }, - "bignumber.js": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.1.tgz", - "integrity": "sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==", - "peer": true + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, - "buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=", + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "peer": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "peer": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "peer": true }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "core-js": { "version": "3.6.5", @@ -1558,113 +1911,82 @@ "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==", "peer": true }, - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "peer": true, - "requires": { - "ms": "2.1.2" - } - }, - "dom-storage": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/dom-storage/-/dom-storage-2.1.0.tgz", - "integrity": "sha512-g6RpyWXzl0RR6OTElHKBl7nwnK87GUyZMYC7JWsB/IA73vpqK2K6LT39x4VepLxlSsWBFrPVLnsSR5Jyty0+2Q==", - "peer": true - }, - "ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "peer": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "peer": true }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "peer": true }, - "fast-text-encoding": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.3.tgz", - "integrity": "sha512-dtm4QZH9nZtcDt8qJiOH9fcQd1NAgi+K1O2DbE6GG1PPCK/BWfOH3idCTRQ4ImXRUOyopDEgDEnVEE7Y/2Wrig==", + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "peer": true }, "faye-websocket": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", - "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", "peer": true, "requires": { "websocket-driver": ">=0.5.1" } }, "firebase": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/firebase/-/firebase-8.3.0.tgz", - "integrity": "sha512-Dyc16NwXth4TIJ12doQkUnwSrTqlJ1sCmTIOqFdCPT+EBMgD7jAj3cy/fnbRM9YdQ0CJYXVSz4aC/fJbDKSn8A==", + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/firebase/-/firebase-9.2.0.tgz", + "integrity": "sha512-48/pyuzBHbhmgJLdHbEVnNkisYI5/8NkvzVfnVbjZMqVW2fIHDs6A0WVBFBRVqmzX0kDqqhGmWN9LkkYCo6mnQ==", "peer": true, "requires": { - "@firebase/analytics": "0.6.5", - "@firebase/app": "0.6.16", - "@firebase/app-types": "0.6.1", - "@firebase/auth": "0.16.4", - "@firebase/database": "0.9.5", - "@firebase/firestore": "2.2.0", - "@firebase/functions": "0.6.3", - "@firebase/installations": "0.4.21", - "@firebase/messaging": "0.7.5", - "@firebase/performance": "0.4.7", + "@firebase/analytics": "0.7.2", + "@firebase/analytics-compat": "0.1.3", + "@firebase/app": "0.7.5", + "@firebase/app-check": "0.4.2", + "@firebase/app-check-compat": "0.1.3", + "@firebase/app-compat": "0.1.6", + "@firebase/app-types": "0.7.0", + "@firebase/auth": "0.19.0", + "@firebase/auth-compat": "0.2.0", + "@firebase/database": "0.12.2", + "@firebase/database-compat": "0.1.2", + "@firebase/firestore": "3.2.0", + "@firebase/firestore-compat": "0.1.5", + "@firebase/functions": "0.7.3", + "@firebase/functions-compat": "0.1.4", + "@firebase/installations": "0.5.2", + "@firebase/messaging": "0.9.2", + "@firebase/messaging-compat": "0.1.2", + "@firebase/performance": "0.5.2", + "@firebase/performance-compat": "0.1.2", "@firebase/polyfill": "0.3.36", - "@firebase/remote-config": "0.1.32", - "@firebase/storage": "0.4.4", - "@firebase/util": "0.4.0" + "@firebase/remote-config": "0.3.1", + "@firebase/remote-config-compat": "0.1.2", + "@firebase/storage": "0.8.4", + "@firebase/storage-compat": "0.1.4", + "@firebase/util": "1.4.0" } }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, - "gaxios": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.2.0.tgz", - "integrity": "sha512-Ms7fNifGv0XVU+6eIyL9LB7RVESeML9+cMvkwGS70xyD6w2Z80wl6RiqiJ9k1KFlJCUTQqFFc8tXmPQfSKUe8g==", - "peer": true, - "requires": { - "abort-controller": "^3.0.0", - "extend": "^3.0.2", - "https-proxy-agent": "^5.0.0", - "is-stream": "^2.0.0", - "node-fetch": "^2.3.0" - } - }, - "gcp-metadata": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.2.1.tgz", - "integrity": "sha512-tSk+REe5iq/N+K+SK1XjZJUrFPuDqGZVzCy2vocIHIGmPlTGsa8owXMJwGkrXr73NO0AzhPW4MF2DEHz7P2AVw==", - "peer": true, - "requires": { - "gaxios": "^4.0.0", - "json-bigint": "^1.0.0" - } + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "peer": true }, "glob": { "version": "7.1.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -1674,70 +1996,28 @@ "path-is-absolute": "^1.0.0" } }, - "google-auth-library": { - "version": "6.1.6", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-6.1.6.tgz", - "integrity": "sha512-Q+ZjUEvLQj/lrVHF/IQwRo6p3s8Nc44Zk/DALsN+ac3T4HY/g/3rrufkgtl+nZ1TW7DNAw5cTChdVp4apUXVgQ==", - "peer": true, - "requires": { - "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": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.0.3.tgz", - "integrity": "sha512-wS0ek4ZtFx/ACKYF3JhyGe5kzH7pgiQ7J5otlumqR9psmWMYc+U9cErKlCYVYHoUaidXHdZ2xbo34kB+S+24hA==", - "peer": true, - "requires": { - "node-forge": "^0.10.0" - } - }, - "gtoken": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.2.1.tgz", - "integrity": "sha512-OY0BfPKe3QnMsY9MzTHTSKn+Vl2l1CcLe6BwDEQj00mbbkl5nyQ/7EUREstg4fQNZ8iYE7br4JJ7TdKeDOPWmw==", - "peer": true, - "requires": { - "gaxios": "^4.0.0", - "google-p12-pem": "^3.0.3", - "jws": "^4.0.0" - } - }, "http-parser-js": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==", "peer": true }, - "https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", - "peer": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, "idb": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/idb/-/idb-3.0.2.tgz", "integrity": "sha512-+FLa/0sTXqyux0o6C+i2lOR0VoS60LU/jzUo5xjfY6+7sEEgy4Gz1O7yFBXvjd7N0NyIGWIRg8DcQSLEG+VSPw==", "peer": true }, + "immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=", + "peer": true + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -1746,43 +2026,39 @@ "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "peer": true }, - "json-bigint": { + "isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", - "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", - "peer": true, - "requires": { - "bignumber.js": "^9.0.0" - } + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "peer": true }, - "jwa": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", - "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", + "jszip": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.7.1.tgz", + "integrity": "sha512-ghL0tz1XG9ZEmRMcEN2vt7xabrDdqHHeykgARpmZ0BiIctWxM47Vt63ZO2dnp4QYt/xJVLLy5Zv1l/xRdh2byg==", "peer": true, "requires": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "set-immediate-shim": "~1.0.1" } }, - "jws": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", - "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", + "lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", "peer": true, "requires": { - "jwa": "^2.0.0", - "safe-buffer": "^5.0.1" + "immediate": "~3.0.5" } }, "lodash.camelcase": { @@ -1797,56 +2073,47 @@ "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==", "peer": true }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "peer": true, - "requires": { - "yallist": "^4.0.0" - } - }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, "requires": { "brace-expansion": "^1.1.7" } }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "peer": true - }, "node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", - "peer": true - }, - "node-forge": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", - "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", - "peer": true + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.5.tgz", + "integrity": "sha512-mmlIVHJEu5rnIxgEgez6b9GgWXbkZj5YZ7fx+2r94a2E+Uirsp6HsPTPlomfdHtpt/B0cdKviwkoaM6pyvUOpQ==", + "peer": true, + "requires": { + "whatwg-url": "^5.0.0" + } }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, "requires": { "wrappy": "1" } }, + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "peer": true + }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "peer": true }, "promise-polyfill": { "version": "8.1.3", @@ -1855,9 +2122,9 @@ "peer": true }, "protobufjs": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.10.2.tgz", - "integrity": "sha512-27yj+04uF6ya9l+qfpH187aqEzfCF4+Uit0I9ZBQVqK09hk/SQzKa2MUqUpXaVa7LOFRg1TSSr3lVxGOk6c0SQ==", + "version": "6.11.2", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.2.tgz", + "integrity": "sha512-4BQJoPooKJl2G9j3XftkIXjoC9C0Av2NOrWmbLWT1vH32GcSUHjM0Arra6UfTsVyfMAuFzaLucXn1sadxJydAw==", "peer": true, "requires": { "@protobufjs/aspromise": "^1.1.2", @@ -1871,23 +2138,35 @@ "@protobufjs/pool": "^1.1.0", "@protobufjs/utf8": "^1.1.0", "@types/long": "^4.0.1", - "@types/node": "^13.7.0", + "@types/node": ">=13.7.0", "long": "^4.0.0" - }, - "dependencies": { - "@types/node": { - "version": "13.13.46", - "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.46.tgz", - "integrity": "sha512-dqpbzK/KDsOlEt+oyB3rv+u1IxlLFziZu/Z0adfRKoelkr+sTd6QcgiQC+HWq/vkYkHwG5ot2LxgV05aAjnhcg==", - "peer": true - } } }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "peer": 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" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "peer": true + }, "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, "requires": { "glob": "^7.1.3" } @@ -1910,15 +2189,71 @@ } }, "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==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "peer": true + }, + "selenium-webdriver": { + "version": "4.0.0-rc-1", + "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.0.0-rc-1.tgz", + "integrity": "sha512-bcrwFPRax8fifRP60p7xkWDGSJJoMkPAzufMlk5K2NyLPht/YZzR2WcIk1+3gR8VOCLlst1P2PI+MXACaFzpIw==", + "peer": true, + "requires": { + "jszip": "^3.6.0", + "rimraf": "^3.0.2", + "tmp": "^0.2.1", + "ws": ">=7.4.6" + } + }, + "set-immediate-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", "peer": true }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "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==", + "peer": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "peer": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "peer": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "peer": true, + "requires": { + "rimraf": "^3.0.0" + } + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", "peer": true }, "tslib": { @@ -1932,6 +2267,18 @@ "integrity": "sha512-thGloWsGH3SOxv1SoY7QojKi0tc+8FnOmiarEGMbd/lar7QOEd3hvlx3Fp5y6FlDUGl9L+pd4n2e+oToGMmhRQ==", "dev": true }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "peer": true + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", + "peer": true + }, "websocket-driver": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", @@ -1955,22 +2302,64 @@ "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==", "peer": true }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "peer": true, + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "peer": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "ws": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", + "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", + "peer": true, + "requires": {} }, - "xmlhttprequest": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", - "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=", + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "peer": true }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "peer": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "peer": true } } diff --git a/package.json b/package.json index b2c593bfc..94f648834 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ "typescript": "^3.9.5 || ^4.0.0" }, "peerDependencies": { - "firebase": "^8.3.0", + "firebase": "^9.2.0", "rxjs": "~6.6.6" }, "files": [ diff --git a/src/alternative/alternative.ts b/src/alternative/alternative.ts index 735d61c2d..b739be61a 100644 --- a/src/alternative/alternative.ts +++ b/src/alternative/alternative.ts @@ -1,12 +1,24 @@ -import 'firebase/auth'; - -import firebase from 'firebase/app'; import { Observable, throwError } from 'rxjs'; import { CapacitorFirebaseAuth } from '../'; import { - AppleSignInResult, FacebookSignInResult, GoogleSignInResult, PhoneSignInResult, SignInOptions, - SignInResult, TwitterSignInResult + FacebookAuthProvider, + GoogleAuthProvider, + PhoneAuthProvider, + TwitterAuthProvider, + Auth, + UserCredential, + signInWithCredential, + OAuthProvider, +} from 'firebase/auth'; +import { + AppleSignInResult, + FacebookSignInResult, + GoogleSignInResult, + PhoneSignInResult, + SignInOptions, + SignInResult, + TwitterSignInResult, } from '../definitions'; /** @@ -14,25 +26,38 @@ import { * @param providerId The provider identification. * @param data The provider additional information (optional). */ -export const cfaSignIn = (providerId: string, data?: SignInOptions): Observable<{ userCredential: firebase.auth.UserCredential, result: SignInResult }> => { - const googleProvider = new firebase.auth.GoogleAuthProvider().providerId; - const facebookProvider = new firebase.auth.FacebookAuthProvider().providerId; - const twitterProvider = new firebase.auth.TwitterAuthProvider().providerId; - const phoneProvider = new firebase.auth.PhoneAuthProvider().providerId; - switch (providerId) { - case googleProvider: - return cfaSignInGoogle(); - case twitterProvider: - return cfaSignInTwitter(); - case facebookProvider: - return cfaSignInFacebook(); - case cfaSignInAppleProvider: - return cfaSignInApple(); - case phoneProvider: - return cfaSignInPhone(data?.phone as string, data?.verificationCode as string); - default: - return throwError(new Error(`The '${providerId}' provider was not supported`)); - } +export const cfaSignIn = ( + providerId: string, + data?: SignInOptions, + auth?: Auth +): Observable<{ + userCredential: UserCredential; + result: SignInResult; +}> => { + const googleProvider = GoogleAuthProvider.PROVIDER_ID; + const facebookProvider = FacebookAuthProvider.PROVIDER_ID; + const twitterProvider = TwitterAuthProvider.PROVIDER_ID; + const phoneProvider = PhoneAuthProvider.PROVIDER_ID; + switch (providerId) { + case googleProvider: + return cfaSignInGoogle(auth); + case twitterProvider: + return cfaSignInTwitter(auth); + case facebookProvider: + return cfaSignInFacebook(auth); + case cfaSignInAppleProvider: + return cfaSignInApple(auth); + case phoneProvider: + return cfaSignInPhone( + data?.phone as string, + data?.verificationCode as string, + auth + ); + default: + return throwError( + new Error(`The '${providerId}' provider was not supported`) + ); + } }; /** @@ -41,29 +66,38 @@ export const cfaSignIn = (providerId: string, data?: SignInOptions): Observable< * @return Observable<{user: firebase.User, result: GoogleSignInResult}}> * @See Issue #23. */ -export const cfaSignInGoogle = (): Observable<{ userCredential: firebase.auth.UserCredential, result: GoogleSignInResult }> => { - return new Observable(observer => { - // get the provider id - const providerId = firebase.auth.GoogleAuthProvider.PROVIDER_ID; - - // native sign in - CapacitorFirebaseAuth.signIn({ providerId }).then((result: GoogleSignInResult) => { - // create the credentials - const credential = firebase.auth.GoogleAuthProvider.credential(result.idToken); - - // web sign in - firebase.app().auth().signInWithCredential(credential) - .then((userCredential: firebase.auth.UserCredential) => { - observer.next({ userCredential, result }); - observer.complete(); - }) - .catch((reject: any) => { - observer.error(reject); - }); - }).catch(reject => { - observer.error(reject); - }); - }); +export const cfaSignInGoogle = ( + auth: Auth +): Observable<{ + userCredential: UserCredential; + result: GoogleSignInResult; +}> => { + return new Observable((observer) => { + // get the provider id + const providerId = GoogleAuthProvider.PROVIDER_ID; + + // native sign in + CapacitorFirebaseAuth.signIn({ providerId }, auth) + .then((result: GoogleSignInResult) => { + // create the credentials + const credential = GoogleAuthProvider.credential( + result.idToken + ); + + // web sign in + signInWithCredential(auth,credential) + .then((userCredential: UserCredential) => { + observer.next({ userCredential, result }); + observer.complete(); + }) + .catch((reject: any) => { + observer.error(reject); + }); + }) + .catch((reject) => { + observer.error(reject); + }); + }); }; /** @@ -72,26 +106,32 @@ export const cfaSignInGoogle = (): Observable<{ userCredential: firebase.auth.Us * @return Observable<{user: firebase.User, result: FacebookSignInResult}}> * @See Issue #23. */ -export const cfaSignInFacebook = (): Observable<{ userCredential: firebase.auth.UserCredential, result: FacebookSignInResult }> => { - return new Observable(observer => { - // get the provider id - const providerId = firebase.auth.FacebookAuthProvider.PROVIDER_ID; - - // native sign in - CapacitorFirebaseAuth.signIn({ providerId }).then((result: FacebookSignInResult) => { - // create the credentials - const credential = firebase.auth.FacebookAuthProvider.credential(result.idToken); - - // web sign in - firebase.app().auth().signInWithCredential(credential) - .then((userCredential: firebase.auth.UserCredential) => { - observer.next({ userCredential, result }); - observer.complete(); - }) - .catch((reject: any) => observer.error(reject)); - - }).catch(reject => observer.error(reject)); - }); +export const cfaSignInFacebook = ( + auth: Auth +): Observable<{ + userCredential: UserCredential; + result: FacebookSignInResult; +}> => { + return new Observable((observer) => { + // get the provider id + const providerId = FacebookAuthProvider.PROVIDER_ID; + + // native sign in + CapacitorFirebaseAuth.signIn({ providerId }, auth) + .then((result: FacebookSignInResult) => { + // create the credentials + const credential = FacebookAuthProvider.credential(result.idToken); + + // web sign in + signInWithCredential(auth, credential) + .then((userCredential: UserCredential) => { + observer.next({ userCredential, result }); + observer.complete(); + }) + .catch((reject: any) => observer.error(reject)); + }) + .catch((reject) => observer.error(reject)); + }); }; /** @@ -100,26 +140,35 @@ export const cfaSignInFacebook = (): Observable<{ userCredential: firebase.auth. * @return Observable<{user: firebase.User, result: TwitterSignInResult}}> * @See Issue #23. */ -export const cfaSignInTwitter = (): Observable<{ userCredential: firebase.auth.UserCredential, result: TwitterSignInResult }> => { - return new Observable(observer => { - // get the provider id - const providerId = firebase.auth.TwitterAuthProvider.PROVIDER_ID; - - // native sign in - CapacitorFirebaseAuth.signIn({ providerId }).then((result: TwitterSignInResult) => { - // create the credentials - const credential = firebase.auth.TwitterAuthProvider.credential(result.idToken, result.secret); - - // web sign in - firebase.app().auth().signInWithCredential(credential) - .then((userCredential: firebase.auth.UserCredential) => { - observer.next({ userCredential, result }); - observer.complete(); - }) - .catch((reject: any) => observer.error(reject)); - - }).catch(reject => observer.error(reject)); - }); +export const cfaSignInTwitter = ( + auth: Auth +): Observable<{ + userCredential: UserCredential; + result: TwitterSignInResult; +}> => { + return new Observable((observer) => { + // get the provider id + const providerId = TwitterAuthProvider.PROVIDER_ID; + + // native sign in + CapacitorFirebaseAuth.signIn({ providerId }, auth) + .then((result: TwitterSignInResult) => { + // create the credentials + const credential = TwitterAuthProvider.credential( + result.idToken, + result.secret + ); + + // web sign in + signInWithCredential(auth, credential) + .then((userCredential: UserCredential) => { + observer.next({ userCredential, result }); + observer.complete(); + }) + .catch((reject: any) => observer.error(reject)); + }) + .catch((reject) => observer.error(reject)); + }); }; export const cfaSignInAppleProvider = 'apple.com'; @@ -127,27 +176,38 @@ export const cfaSignInAppleProvider = 'apple.com'; /** * Call the Apple sign in method on native and sign in on web layer with retrieved credentials. */ -export const cfaSignInApple = (): Observable<{ userCredential: firebase.auth.UserCredential, result: AppleSignInResult }> => { - return new Observable(observer => { - // native sign in - CapacitorFirebaseAuth.signIn({ providerId: cfaSignInAppleProvider }).then((result: AppleSignInResult) => { - - const provider = new firebase.auth.OAuthProvider('apple.com'); - provider.addScope('email'); - provider.addScope('name'); - - const credential = provider.credential(result) - - // web sign in - firebase.app().auth().signInWithCredential(credential) - .then((userCredential: firebase.auth.UserCredential) => { - observer.next({ userCredential, result }); - observer.complete(); - }) - .catch((reject: any) => observer.error(reject)); - }).catch(reject => observer.error(reject)); - }); -} +export const cfaSignInApple = ( + auth: Auth +): Observable<{ + userCredential: UserCredential; + result: AppleSignInResult; +}> => { + return new Observable((observer) => { + // native sign in + CapacitorFirebaseAuth.signIn( + { + providerId: cfaSignInAppleProvider, + }, + auth + ) + .then((result: AppleSignInResult) => { + const provider = new OAuthProvider('apple.com'); + provider.addScope('email'); + provider.addScope('name'); + + const credential = provider.credential(result); + + // web sign in + signInWithCredential(auth, credential) + .then((userCredential: UserCredential) => { + observer.next({ userCredential, result }); + observer.complete(); + }) + .catch((reject: any) => observer.error(reject)); + }) + .catch((reject) => observer.error(reject)); + }); +}; /** * Call the Phone verification sign in, handling send and retrieve to code on native, but only sign in on web with retrieved credentials. @@ -155,32 +215,52 @@ export const cfaSignInApple = (): Observable<{ userCredential: firebase.auth.Use * @param phone The user phone number. * @param verificationCode The verification code sent by SMS (optional). */ -export const cfaSignInPhone = (phone: string, verificationCode?: string): Observable<{ userCredential: firebase.auth.UserCredential, result: PhoneSignInResult }> => { - return new Observable(observer => { - // get the provider id - const providerId = firebase.auth.PhoneAuthProvider.PROVIDER_ID; - - CapacitorFirebaseAuth.signIn({ providerId, data: { phone, verificationCode } }).then((result: PhoneSignInResult) => { - // if there is no verification code - if (!result.verificationCode) { - return observer.complete(); - } - - // create the credentials - const credential = firebase.auth.PhoneAuthProvider.credential(result.verificationId, result.verificationCode); - - // web sign in - firebase.app().auth().signInWithCredential(credential) - .then((userCredential: firebase.auth.UserCredential) => { - observer.next({ userCredential, result }); - observer.complete(); - }) - .catch((reject: any) => observer.error(reject)); - - }).catch(reject => observer.error(reject)); - - }); +export const cfaSignInPhone = ( + phone: string, + verificationCode?: string, + auth?: Auth +): Observable<{ + userCredential: UserCredential; + result: PhoneSignInResult; +}> => { + return new Observable((observer) => { + // get the provider id + const providerId = PhoneAuthProvider.PROVIDER_ID; + + CapacitorFirebaseAuth.signIn( + { + providerId, + data: { phone, verificationCode }, + }, + auth + ) + .then((result: PhoneSignInResult) => { + // if there is no verification code + if (!result.verificationCode) { + return observer.complete(); + } + + // create the credentials + const credential = PhoneAuthProvider.credential( + result.verificationId, + result.verificationCode + ); + + // web sign in + signInWithCredential(auth, credential) + .then((userCredential: UserCredential) => { + observer.next({ userCredential, result }); + observer.complete(); + }) + .catch((reject: any) => observer.error(reject)); + }) + .catch((reject) => observer.error(reject)); + }); }; // re-exporting the unchanged functions from facades for simple imports. -export { cfaSignInPhoneOnCodeReceived, cfaSignInPhoneOnCodeSent, cfaSignOut } from '../facades' +export { + cfaSignInPhoneOnCodeReceived, + cfaSignInPhoneOnCodeSent, + cfaSignOut, +} from '../facades'; diff --git a/src/definitions.ts b/src/definitions.ts index 83c0da4c1..0839cdff3 100644 --- a/src/definitions.ts +++ b/src/definitions.ts @@ -1,49 +1,49 @@ -import 'firebase/auth'; +import { Auth, FacebookAuthProvider, GoogleAuthProvider, PhoneAuthProvider, TwitterAuthProvider } from 'firebase/auth'; -import firebase from 'firebase/app'; - -export interface SignInResult { -} +export interface SignInResult {} export interface CapacitorFirebaseAuthPlugin { - signIn(options: { providerId: string, data?: SignInOptions }): Promise; - signOut(options: {}): Promise; + signIn( + options: { providerId: string; data?: SignInOptions }, + auth: Auth + ): Promise; + signOut(options: {}, auth: Auth): Promise; } export class GoogleSignInResult implements SignInResult { - providerId = firebase.auth.GoogleAuthProvider.PROVIDER_ID; - constructor(public idToken: string) { - } + providerId = GoogleAuthProvider.PROVIDER_ID; + constructor(public idToken: string) {} } export class TwitterSignInResult implements SignInResult { - providerId = firebase.auth.TwitterAuthProvider.PROVIDER_ID; - constructor(public idToken: string, public secret: string) { - } + providerId = TwitterAuthProvider.PROVIDER_ID; + constructor(public idToken: string, public secret: string) {} } export class FacebookSignInResult implements SignInResult { - providerId = firebase.auth.FacebookAuthProvider.PROVIDER_ID; - constructor(public idToken: string) { - } + providerId = FacebookAuthProvider.PROVIDER_ID; + constructor(public idToken: string) {} } export class AppleSignInResult implements SignInResult { - providerId = firebase.auth.FacebookAuthProvider.PROVIDER_ID; - constructor(public idToken: string, public rawNonce: string, public accessToken: string, public secret: string) { - } + providerId = FacebookAuthProvider.PROVIDER_ID; + constructor( + public idToken: string, + public rawNonce: string, + public accessToken: string, + public secret: string + ) {} } export class PhoneSignInResult implements SignInResult { - providerId = firebase.auth.PhoneAuthProvider.PROVIDER_ID; - constructor(public verificationId: string, public verificationCode: string) { - } + providerId = PhoneAuthProvider.PROVIDER_ID; + constructor(public verificationId: string, public verificationCode: string) {} } export interface PhoneSignInOptions { - container?: HTMLElement - phone: string, - verificationCode?: string + container?: HTMLElement; + phone: string; + verificationCode?: string; } export type SignInOptions = PhoneSignInOptions; diff --git a/src/facades.ts b/src/facades.ts index b397ff202..d5968df9c 100644 --- a/src/facades.ts +++ b/src/facades.ts @@ -1,17 +1,32 @@ -import 'firebase/auth'; -import {registerPlugin} from '@capacitor/core'; - -import firebase from 'firebase/app'; +import { registerPlugin } from '@capacitor/core'; import { Observable, throwError } from 'rxjs'; import { - AppleSignInResult, CapacitorFirebaseAuthPlugin, FacebookSignInResult, GoogleSignInResult, - PhoneSignInResult, SignInOptions, TwitterSignInResult + AppleSignInResult, + CapacitorFirebaseAuthPlugin, + FacebookSignInResult, + GoogleSignInResult, + PhoneSignInResult, + SignInOptions, + TwitterSignInResult, } from './definitions'; +import { + Auth, + FacebookAuthProvider, + GoogleAuthProvider, + OAuthProvider, + PhoneAuthProvider, + signInWithCredential, + signOut, + TwitterAuthProvider, + User, + UserCredential, +} from 'firebase/auth'; -export const CapacitorFirebaseAuth = registerPlugin('CapacitorFirebaseAuth', { - web: () => import('./web').then(m => new m.CapacitorFirebaseAuthWeb()), -}); +export const CapacitorFirebaseAuth = + registerPlugin('CapacitorFirebaseAuth', { + web: () => import('./web').then((m) => new m.CapacitorFirebaseAuthWeb()), + }); const plugin: CapacitorFirebaseAuthPlugin = CapacitorFirebaseAuth; /** @@ -19,115 +34,131 @@ const plugin: CapacitorFirebaseAuthPlugin = CapacitorFirebaseAuth; * @param providerId The provider identification. * @param data The provider additional information (optional). */ -export const cfaSignIn = (providerId: string, data?: SignInOptions): Observable => { - const googleProvider = new firebase.auth.GoogleAuthProvider().providerId; - const facebookProvider = new firebase.auth.FacebookAuthProvider().providerId; - const twitterProvider = new firebase.auth.TwitterAuthProvider().providerId; - const phoneProvider = new firebase.auth.PhoneAuthProvider().providerId; - switch (providerId) { - case googleProvider: - return cfaSignInGoogle(); - case twitterProvider: - return cfaSignInTwitter(); - case facebookProvider: - return cfaSignInFacebook(); - case cfaSignInAppleProvider: - return cfaSignInApple(); - case phoneProvider: - if (!data) { - throw new Error('Phone and Verification data must be provided.') - } - return cfaSignInPhone(data.phone, data.verificationCode); - default: - return throwError(new Error(`The '${providerId}' provider was not supported`)); - } +export const cfaSignIn = ( + providerId: string, + data?: SignInOptions, + auth?: Auth +): Observable => { + const googleProvider = GoogleAuthProvider.PROVIDER_ID; + const facebookProvider = FacebookAuthProvider.PROVIDER_ID; + const twitterProvider = TwitterAuthProvider.PROVIDER_ID; + const phoneProvider = PhoneAuthProvider.PROVIDER_ID; + switch (providerId) { + case googleProvider: + return cfaSignInGoogle(auth); + case twitterProvider: + return cfaSignInTwitter(auth); + case facebookProvider: + return cfaSignInFacebook(auth); + case cfaSignInAppleProvider: + return cfaSignInApple(auth); + case phoneProvider: + if (!data) { + throw new Error('Phone and Verification data must be provided.'); + } + return cfaSignInPhone(data.phone, data.verificationCode); + default: + return throwError( + new Error(`The '${providerId}' provider was not supported`) + ); + } }; /** * Call the Google sign in method on native layer and sign in on web layer with retrieved credentials. */ -export const cfaSignInGoogle = (): Observable => { - return new Observable(observer => { - // get the provider id - const providerId = firebase.auth.GoogleAuthProvider.PROVIDER_ID; - - // native sign in - plugin.signIn({ providerId }).then((result: GoogleSignInResult) => { - // create the credentials - const credential = firebase.auth.GoogleAuthProvider.credential(result.idToken); - - // web sign in - firebase.app().auth().signInWithCredential(credential) - .then((userCredential: firebase.auth.UserCredential) => { - if(!userCredential.user) { - throw new Error('Firebase User was not received.') - } - observer.next(userCredential.user); - observer.complete(); - }) - .catch((reject: any) => { - observer.error(reject); - }); - }).catch((reject: any) => { - observer.error(reject); - }); - }); +export const cfaSignInGoogle = (auth: Auth): Observable => { + return new Observable((observer) => { + // get the provider id + const providerId = GoogleAuthProvider.PROVIDER_ID; + + // native sign in + plugin + .signIn({ providerId }, auth) + .then((result: GoogleSignInResult) => { + // create the credentials + const credential = GoogleAuthProvider.credential(result.idToken); + + // web sign in + signInWithCredential(auth, credential) + .then((userCredential: UserCredential) => { + if (!userCredential.user) { + throw new Error('Firebase User was not received.'); + } + observer.next(userCredential.user); + observer.complete(); + }) + .catch((reject: any) => { + observer.error(reject); + }); + }) + .catch((reject: any) => { + observer.error(reject); + }); + }); }; /** * Call the Twitter sign in method on native and sign in on web layer with retrieved credentials. */ -export const cfaSignInTwitter = (): Observable => { - return new Observable(observer => { - // get the provider id - const providerId = firebase.auth.TwitterAuthProvider.PROVIDER_ID; - - // native sign in - plugin.signIn({ providerId }).then((result: TwitterSignInResult) => { - // create the credentials - const credential = firebase.auth.TwitterAuthProvider.credential(result.idToken, result.secret); - - // web sign in - firebase.app().auth().signInWithCredential(credential) - .then((userCredential: firebase.auth.UserCredential) => { - if(!userCredential.user) { - throw new Error('Firebase User was not received.') - } - observer.next(userCredential.user); - observer.complete(); - }) - .catch((reject: any) => observer.error(reject)); - - }).catch((reject: any) => observer.error(reject)); - }); +export const cfaSignInTwitter = (auth: Auth): Observable => { + return new Observable((observer) => { + // get the provider id + const providerId = TwitterAuthProvider.PROVIDER_ID; + + // native sign in + plugin + .signIn({ providerId }, auth) + .then((result: TwitterSignInResult) => { + // create the credentials + const credential = TwitterAuthProvider.credential( + result.idToken, + result.secret + ); + + // web sign in + signInWithCredential(auth, credential) + .then((userCredential: UserCredential) => { + if (!userCredential.user) { + throw new Error('Firebase User was not received.'); + } + observer.next(userCredential.user); + observer.complete(); + }) + .catch((reject: any) => observer.error(reject)); + }) + .catch((reject: any) => observer.error(reject)); + }); }; /** * Call the Facebook sign in method on native and sign in on web layer with retrieved credentials. */ -export const cfaSignInFacebook = (): Observable => { - return new Observable(observer => { - // get the provider id - const providerId = firebase.auth.FacebookAuthProvider.PROVIDER_ID; - - // native sign in - plugin.signIn({ providerId }).then((result: FacebookSignInResult) => { - // create the credentials - const credential = firebase.auth.FacebookAuthProvider.credential(result.idToken); - - // web sign in - firebase.app().auth().signInWithCredential(credential) - .then((userCredential: firebase.auth.UserCredential) => { - if(!userCredential.user) { - throw new Error('Firebase User was not received.') - } - observer.next(userCredential.user); - observer.complete(); - }) - .catch((reject: any) => observer.error(reject)); - - }).catch((reject: any) => observer.error(reject)); - }); +export const cfaSignInFacebook = (auth: Auth): Observable => { + return new Observable((observer) => { + // get the provider id + const providerId = FacebookAuthProvider.PROVIDER_ID; + + // native sign in + plugin + .signIn({ providerId }, auth) + .then((result: FacebookSignInResult) => { + // create the credentials + const credential = FacebookAuthProvider.credential(result.idToken); + + // web sign in + signInWithCredential(auth, credential) + .then((userCredential: UserCredential) => { + if (!userCredential.user) { + throw new Error('Firebase User was not received.'); + } + observer.next(userCredential.user); + observer.complete(); + }) + .catch((reject: any) => observer.error(reject)); + }) + .catch((reject: any) => observer.error(reject)); + }); }; export const cfaSignInAppleProvider = 'apple.com'; @@ -135,106 +166,134 @@ export const cfaSignInAppleProvider = 'apple.com'; /** * Call the Apple sign in method on native and sign in on web layer with retrieved credentials. */ -export const cfaSignInApple = (): Observable => { - return new Observable(observer => { - // native sign in - plugin.signIn({ providerId: cfaSignInAppleProvider }).then((result: AppleSignInResult) => { - const { idToken, rawNonce } = result; - - const provider = new firebase.auth.OAuthProvider('apple.com'); - provider.addScope('email'); - provider.addScope('name'); - - const credential = provider.credential({ idToken, rawNonce }) - - // web sign in - firebase.app().auth().signInWithCredential(credential) - .then((userCredential: firebase.auth.UserCredential) => { - if(!userCredential.user) { - throw new Error('Firebase User was not received.') - } - observer.next(userCredential.user); - observer.complete(); - }) - .catch((reject: any) => observer.error(reject)); - }).catch((reject: any) => observer.error(reject)); - }); -} +export const cfaSignInApple = (auth: Auth): Observable => { + return new Observable((observer) => { + // native sign in + plugin + .signIn({ providerId: cfaSignInAppleProvider }, auth) + .then((result: AppleSignInResult) => { + const { idToken, rawNonce } = result; + + const provider = new OAuthProvider('apple.com'); + provider.addScope('email'); + provider.addScope('name'); + + const credential = provider.credential({ idToken, rawNonce }); + + // web sign in + signInWithCredential(auth, credential) + .then((userCredential: UserCredential) => { + if (!userCredential.user) { + throw new Error('Firebase User was not received.'); + } + observer.next(userCredential.user); + observer.complete(); + }) + .catch((reject: any) => observer.error(reject)); + }) + .catch((reject: any) => observer.error(reject)); + }); +}; /** * Call the Phone verification sign in, handling send and retrieve to code on native, but only sign in on web with retrieved credentials. * @param phone The user phone number. * @param verificationCode The verification code sent by SMS (optional). */ -export const cfaSignInPhone = (phone: string, verificationCode?: string): Observable => { - return new Observable(observer => { - // get the provider id - const providerId = firebase.auth.PhoneAuthProvider.PROVIDER_ID; - - plugin.signIn({ providerId, data: { phone, verificationCode } }).then((result: PhoneSignInResult) => { - // if there is no verification code - if (!result.verificationCode) { - return observer.complete(); - } - - // create the credentials - const credential = firebase.auth.PhoneAuthProvider.credential(result.verificationId, result.verificationCode); - - // web sign in - firebase.app().auth().signInWithCredential(credential) - .then((userCredential: firebase.auth.UserCredential) => { - if(!userCredential.user) { - throw new Error('Firebase User was not received.') - } - observer.next(userCredential.user); - observer.complete(); - }) - .catch((reject: any) => observer.error(reject)); - - }).catch((reject: any) => observer.error(reject)); - - }); +export const cfaSignInPhone = ( + phone: string, + verificationCode?: string, + auth?: Auth +): Observable => { + return new Observable((observer) => { + // get the provider id + const providerId = PhoneAuthProvider.PROVIDER_ID; + + plugin + .signIn( + { + providerId, + data: { phone, verificationCode }, + }, + auth + ) + .then((result: PhoneSignInResult) => { + // if there is no verification code + if (!result.verificationCode) { + return observer.complete(); + } + + // create the credentials + const credential = PhoneAuthProvider.credential( + result.verificationId, + result.verificationCode + ); + + // web sign in + signInWithCredential(auth, credential) + .then((userCredential: UserCredential) => { + if (!userCredential.user) { + throw new Error('Firebase User was not received.'); + } + observer.next(userCredential.user); + observer.complete(); + }) + .catch((reject: any) => observer.error(reject)); + }) + .catch((reject: any) => observer.error(reject)); + }); }; /** * Observable of one notification of On Code Sentevent from Phone Verification process. */ export const cfaSignInPhoneOnCodeSent = (): Observable => { - return new Observable(observer => { - // @ts-ignore - return plugin.addListener('cfaSignInPhoneOnCodeSent', (event: { verificationId: string }) => { - observer.next(event.verificationId); - observer.complete(); - }); - }); + return new Observable((observer) => { + // @ts-ignore + return plugin.addListener( + 'cfaSignInPhoneOnCodeSent', + (event: { verificationId: string }) => { + observer.next(event.verificationId); + observer.complete(); + } + ); + }); }; /** * Observable of one notification of On Code Received event from Phone Verification process. */ -export const cfaSignInPhoneOnCodeReceived = (): Observable<{ verificationId: string, verificationCode: string }> => { - return new Observable<{ verificationId: string, verificationCode: string }>(observer => { - // @ts-ignore - return plugin.addListener('cfaSignInPhoneOnCodeReceived', (event: { verificationId: string, verificationCode: string }) => { - observer.next(event); - observer.complete(); - }); - }); +export const cfaSignInPhoneOnCodeReceived = (): Observable<{ + verificationId: string; + verificationCode: string; +}> => { + return new Observable<{ verificationId: string; verificationCode: string }>( + (observer) => { + // @ts-ignore + return plugin.addListener( + 'cfaSignInPhoneOnCodeReceived', + (event: { verificationId: string; verificationCode: string }) => { + observer.next(event); + observer.complete(); + } + ); + } + ); }; /** * Call Google sign out method on native and web layers. */ -export const cfaSignOut = (): Observable => { - return new Observable(observer => { - plugin.signOut({}).then(() => { - // web sign out - firebase.app().auth().signOut() - .then(() => { - observer.next(); - observer.complete(); - }) - .catch((reject: any) => observer.error(reject)); - }); - }); +export const cfaSignOut = (auth: Auth): Observable => { + return new Observable((observer) => { + plugin.signOut({}, auth).then(() => { + // web sign out + signOut(auth) + .then(() => { + observer.next(); + observer.complete(); + }) + .catch((reject: any) => observer.error(reject)); + }); + }); }; diff --git a/src/operators.ts b/src/operators.ts index 9fe836741..0cde6e792 100644 --- a/src/operators.ts +++ b/src/operators.ts @@ -1,6 +1,10 @@ -import firebase from 'firebase/app'; import { Observable, pipe, UnaryFunction } from 'rxjs'; import { map } from 'rxjs/operators'; +import { + User, + UserCredential, + UserInfo, +} from 'firebase/auth'; /** * Operator to map firebase.User to firebase.UserInfo. @@ -18,14 +22,20 @@ import { map } from 'rxjs/operators'; * ) * ``` */ -export const mapUserToUserInfo = (): UnaryFunction, Observable> => - pipe(map((user: firebase.User) => { - if (user) { - const { uid, providerId, displayName, photoURL, phoneNumber, email } = user; - return { uid, providerId, displayName, photoURL, phoneNumber, email }; - } - return user; - })); +export const mapUserToUserInfo = (): UnaryFunction< + Observable, + Observable +> => + pipe( + map((user: User) => { + if (user) { + const { uid, providerId, displayName, photoURL, phoneNumber, email } = + user; + return { uid, providerId, displayName, photoURL, phoneNumber, email }; + } + return user; + }) + ); /** * Operator to map firebase.auth.UserCredential to firebase.UserInfo. @@ -45,11 +55,17 @@ export const mapUserToUserInfo = (): UnaryFunction, Ob * ) * ``` */ -export const mapUserCredentialToUserInfo = (): UnaryFunction, Observable> => - pipe(map(({ userCredential }: { userCredential: firebase.auth.UserCredential }) => { - if (userCredential?.user) { - const { uid, providerId, displayName, photoURL, phoneNumber, email } = userCredential.user; - return { uid, providerId, displayName, photoURL, phoneNumber, email }; - } - return null; - })); +export const mapUserCredentialToUserInfo = (): UnaryFunction< + Observable<{ userCredential: UserCredential }>, + Observable +> => + pipe( + map(({ userCredential }: { userCredential: UserCredential }) => { + if (userCredential?.user) { + const { uid, providerId, displayName, photoURL, phoneNumber, email } = + userCredential.user; + return { uid, providerId, displayName, photoURL, phoneNumber, email }; + } + return null; + }) + ); diff --git a/src/providers/apple.provider.ts b/src/providers/apple.provider.ts index f8d13c2ec..cbe8ae7fc 100644 --- a/src/providers/apple.provider.ts +++ b/src/providers/apple.provider.ts @@ -1,16 +1,11 @@ -import 'firebase/auth'; - -import firebase from 'firebase/app'; - +import { Auth, OAuthProvider, signInWithPopup, useDeviceLanguage } from 'firebase/auth'; import { AppleSignInResult, SignInOptions } from '../definitions'; -import OAuthCredential = firebase.auth.OAuthCredential; - -export const appleSignInWeb: (options: { providerId: string, data?: SignInOptions }) => Promise - = async () => { - const provider = new firebase.auth.OAuthProvider('apple.com'); - firebase.auth().useDeviceLanguage(); - const userCredential = await firebase.auth().signInWithPopup(provider); - const credential = userCredential?.credential as OAuthCredential; - return new AppleSignInResult(credential.idToken as string, '', credential.accessToken as string, credential.secret ?? ""); +export const appleSignInWeb: (options: { providerId: string, data?: SignInOptions },auth:Auth) => Promise + = async (options: { providerId: string, data?: SignInOptions },auth:Auth) => { + const provider = new OAuthProvider('apple.com'); + useDeviceLanguage(auth); + const userCredential = await signInWithPopup(auth,provider); + const credential = OAuthProvider.credentialFromResult(userCredential); + return new AppleSignInResult(await userCredential.user.getIdToken(), '', credential.accessToken as string, credential.secret ?? ""); } diff --git a/src/providers/facebook.provider.ts b/src/providers/facebook.provider.ts index aa2566fa0..47405d8ea 100644 --- a/src/providers/facebook.provider.ts +++ b/src/providers/facebook.provider.ts @@ -1,16 +1,12 @@ -import 'firebase/auth'; - -import firebase from 'firebase/app'; - +import { Auth, FacebookAuthProvider, OAuthProvider, signInWithPopup, useDeviceLanguage } from 'firebase/auth'; import { FacebookSignInResult, SignInOptions } from '../definitions'; -import OAuthCredential = firebase.auth.OAuthCredential; -export const facebookSignInWeb: (options: { providerId: string, data?: SignInOptions }) => Promise - = async () => { - const provider = new firebase.auth.FacebookAuthProvider(); - firebase.auth().useDeviceLanguage(); - const userCredential = await firebase.auth().signInWithPopup(provider); - const credential = userCredential?.credential as OAuthCredential; +export const facebookSignInWeb: (options: { providerId: string, data?: SignInOptions },auth:Auth) => Promise + = async (options: { providerId: string, data?: SignInOptions },auth:Auth) => { + const provider = new FacebookAuthProvider(); + useDeviceLanguage(auth); + const userCredential = await signInWithPopup(auth,provider); + const credential = OAuthProvider.credentialFromResult(userCredential); return new FacebookSignInResult(credential?.accessToken as string); } diff --git a/src/providers/google.provider.ts b/src/providers/google.provider.ts index b68e98b14..d7b9545c5 100644 --- a/src/providers/google.provider.ts +++ b/src/providers/google.provider.ts @@ -1,16 +1,23 @@ -import 'firebase/auth'; - -import firebase from 'firebase/app'; - import { GoogleSignInResult, SignInOptions } from '../definitions'; +import { + Auth, + GoogleAuthProvider, + OAuthProvider, + signInWithPopup, + useDeviceLanguage, +} from 'firebase/auth'; -import OAuthCredential = firebase.auth.OAuthCredential; +export const googleSignInWeb: ( + options: { providerId: string; data?: SignInOptions }, + auth: Auth +) => Promise = async ( + options: { providerId: string; data?: SignInOptions }, + auth: Auth +) => { + const provider = new GoogleAuthProvider(); + useDeviceLanguage(auth); + const userCredential = await signInWithPopup(auth, provider); + const credential = OAuthProvider.credentialFromResult(userCredential); -export const googleSignInWeb: (options: { providerId: string, data?: SignInOptions }) => Promise - = async () => { - const provider = new firebase.auth.GoogleAuthProvider(); - firebase.auth().useDeviceLanguage(); - const userCredential = await firebase.auth().signInWithPopup(provider); - const credential = userCredential?.credential as OAuthCredential; - return new GoogleSignInResult(credential.idToken as string); - } + return new GoogleSignInResult(credential.idToken as string); +}; diff --git a/src/providers/phone.provider.ts b/src/providers/phone.provider.ts index e61f66c6c..3dd7897de 100644 --- a/src/providers/phone.provider.ts +++ b/src/providers/phone.provider.ts @@ -1,14 +1,28 @@ -import firebase from 'firebase/app'; +import { + Auth, + GoogleAuthProvider, + OAuthProvider, + RecaptchaVerifier, + signInWithPhoneNumber, + signInWithPopup, + useDeviceLanguage, +} from 'firebase/auth'; import { PhoneSignInResult, SignInOptions } from '../definitions'; -export const phoneSignInWeb: (options: { providerId: string, data?: SignInOptions }) => Promise - = async (options) => { - firebase.auth().useDeviceLanguage(); - const code = options.data?.verificationCode as string; - const verifier = new firebase.auth.RecaptchaVerifier(options.data?.container); - const userCredential = await firebase.auth().signInWithPhoneNumber(options.data?.phone as string, verifier); - const confirmation = await userCredential.confirm(code); - const idToken = await confirmation.user?.getIdToken() - return new PhoneSignInResult(idToken as string, code); - } +export const phoneSignInWeb: ( + options: { providerId: string; data?: SignInOptions }, + auth: Auth +) => Promise = async (options, auth) => { + useDeviceLanguage(auth); + const code = options.data?.verificationCode as string; + const verifier = new RecaptchaVerifier(options.data?.container, {}, auth); + const userCredential = await signInWithPhoneNumber( + auth, + options.data?.phone as string, + verifier + ); + const confirmation = await userCredential.confirm(code); + const idToken = await confirmation.user?.getIdToken(); + return new PhoneSignInResult(idToken as string, code); +}; diff --git a/src/providers/twitter.provider.ts b/src/providers/twitter.provider.ts index 5badefa30..122a688ed 100644 --- a/src/providers/twitter.provider.ts +++ b/src/providers/twitter.provider.ts @@ -1,16 +1,22 @@ -import 'firebase/auth'; - -import firebase from 'firebase/app'; - +import { + TwitterAuthProvider, + useDeviceLanguage, + Auth, + signInWithPopup, + OAuthProvider, +} from 'firebase/auth'; import { SignInOptions, TwitterSignInResult } from '../definitions'; -import OAuthCredential = firebase.auth.OAuthCredential; - -export const twitterSignInWeb: (options: { providerId: string, data?: SignInOptions }) => Promise - = async () => { - const provider = new firebase.auth.TwitterAuthProvider(); - firebase.auth().useDeviceLanguage(); - const userCredential = await firebase.auth().signInWithPopup(provider); - const credential = userCredential?.credential as OAuthCredential; - return new TwitterSignInResult(credential.accessToken as string, credential.secret as string); - } +export const twitterSignInWeb: ( + options: { providerId: string; data?: SignInOptions }, + auth: Auth +) => Promise = async (op,auth:Auth) => { + const provider = new TwitterAuthProvider(); + useDeviceLanguage(auth); + const userCredential = await signInWithPopup(auth,provider); + const credential = OAuthProvider.credentialFromResult(userCredential); + return new TwitterSignInResult( + credential.accessToken as string, + credential.secret as string + ); +}; diff --git a/src/web.ts b/src/web.ts index bbd5875fb..3a8803229 100644 --- a/src/web.ts +++ b/src/web.ts @@ -1,46 +1,65 @@ -import 'firebase/auth'; - -import firebase from 'firebase/app'; - +import { + GoogleAuthProvider, + FacebookAuthProvider, + TwitterAuthProvider, + PhoneAuthProvider, + Auth, + signOut, +} from 'firebase/auth'; import { WebPlugin } from '@capacitor/core'; -import { CapacitorFirebaseAuthPlugin, SignInOptions, SignInResult } from './definitions'; +import { + CapacitorFirebaseAuthPlugin, + SignInOptions, + SignInResult, +} from './definitions'; import { appleSignInWeb } from './providers/apple.provider'; import { facebookSignInWeb } from './providers/facebook.provider'; import { googleSignInWeb } from './providers/google.provider'; import { phoneSignInWeb } from './providers/phone.provider'; import { twitterSignInWeb } from './providers/twitter.provider'; -export class CapacitorFirebaseAuthWeb extends WebPlugin implements CapacitorFirebaseAuthPlugin { +export class CapacitorFirebaseAuthWeb + extends WebPlugin + implements CapacitorFirebaseAuthPlugin +{ constructor() { super(); } - async signIn(options: { providerId: string, data?: SignInOptions }): Promise { - const appleProvider = 'apple.com'; - const googleProvider = new firebase.auth.GoogleAuthProvider().providerId; - const facebookProvider = new firebase.auth.FacebookAuthProvider().providerId; - const twitterProvider = new firebase.auth.TwitterAuthProvider().providerId; - const phoneProvider = new firebase.auth.PhoneAuthProvider().providerId; - - switch (options.providerId) { - case appleProvider: - return appleSignInWeb(options) as any; - case googleProvider: - return googleSignInWeb(options) as any; - case twitterProvider: - return twitterSignInWeb(options) as any; - case facebookProvider: - return facebookSignInWeb(options) as any; - case phoneProvider: - return phoneSignInWeb(options) as any; - } + async signIn( + options: { + providerId: string; + data?: SignInOptions; + }, + auth: Auth + ): Promise { + const appleProvider = 'apple.com'; + const googleProvider = new GoogleAuthProvider().providerId; + const facebookProvider = new FacebookAuthProvider().providerId; + const twitterProvider = new TwitterAuthProvider().providerId; + const phoneProvider = new PhoneAuthProvider(auth).providerId; + + switch (options.providerId) { + case appleProvider: + return appleSignInWeb(options, auth) as any; + case googleProvider: + return googleSignInWeb(options, auth) as any; + case twitterProvider: + return twitterSignInWeb(options, auth) as any; + case facebookProvider: + return facebookSignInWeb(options, auth) as any; + case phoneProvider: + return phoneSignInWeb(options, auth) as any; + } - return Promise.reject(`The '${options.providerId}' provider was not supported`); + return Promise.reject( + `The '${options.providerId}' provider was not supported` + ); } - async signOut(options: {}): Promise { - console.log(options); - return firebase.auth().signOut() + async signOut(options: {}, auth: Auth): Promise { + console.log(options); + return signOut(auth); } }