From 5d9612e7f3068660e3855fc22e4f3fa085f940b9 Mon Sep 17 00:00:00 2001 From: Lucas Cassin Date: Wed, 20 Oct 2021 21:37:07 -0300 Subject: [PATCH 01/11] build(deps): update package-lock.json --- package-lock.json | 412 ++++++++++++++++++++++++++++++++++++++-------- package.json | 2 + 2 files changed, 345 insertions(+), 69 deletions(-) diff --git a/package-lock.json b/package-lock.json index bc433c269..411683190 100644 --- a/package-lock.json +++ b/package-lock.json @@ -123,6 +123,8 @@ "dependencies": { "@firebase/analytics": { "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@firebase/analytics/-/analytics-0.5.0.tgz", + "integrity": "sha512-WyQ8BT6JSoXpg4q7SV9Yg5EPXbGbG8FkkXAIhV/AnslCglhpxegO1FU33qbuT4Grzc525hZJA97oqtQS8tm4Wg==", "requires": { "@firebase/analytics-types": "0.4.0", "@firebase/component": "0.1.19", @@ -133,10 +135,14 @@ } }, "@firebase/analytics-types": { - "version": "0.4.0" + "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==" }, "@firebase/app": { "version": "0.6.11", + "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.6.11.tgz", + "integrity": "sha512-FH++PaoyTzfTAVuJ0gITNYEIcjT5G+D0671La27MU8Vvr6MTko+5YUZ4xS9QItyotSeRF4rMJ1KR7G8LSyySiA==", "requires": { "@firebase/app-types": "0.6.1", "@firebase/component": "0.1.19", @@ -148,22 +154,32 @@ } }, "@firebase/app-types": { - "version": "0.6.1" + "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==" }, "@firebase/auth": { "version": "0.14.9", + "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-0.14.9.tgz", + "integrity": "sha512-PxYa2r5qUEdheXTvqROFrMstK8W4uPiP7NVfp+2Bec+AjY5PxZapCx/YFDLkU0D7YBI82H74PtZrzdJZw7TJ4w==", "requires": { "@firebase/auth-types": "0.10.1" } }, "@firebase/auth-interop-types": { - "version": "0.1.5" + "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==" }, "@firebase/auth-types": { - "version": "0.10.1" + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@firebase/auth-types/-/auth-types-0.10.1.tgz", + "integrity": "sha512-/+gBHb1O9x/YlG7inXfxff/6X3BPZt4zgBv4kql6HEmdzNQCodIRlEYnI+/da+lN+dha7PjaFH7C7ewMmfV7rw==" }, "@firebase/component": { "version": "0.1.19", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.1.19.tgz", + "integrity": "sha512-L0S3g8eqaerg8y0zox3oOHSTwn/FE8RbcRHiurnbESvDViZtP5S5WnhuAPd7FnFxa8ElWK0z1Tr3ikzWDv1xdQ==", "requires": { "@firebase/util": "0.3.2", "tslib": "^1.11.1" @@ -171,6 +187,8 @@ }, "@firebase/database": { "version": "0.6.12", + "resolved": "https://registry.npmjs.org/@firebase/database/-/database-0.6.12.tgz", + "integrity": "sha512-OLUxp8TkXiML4X5LWM5IACsSDvo3fcf4mTbTe5RF+N6TRFv0Svzlet5OgGIa3ET1dQvNiisrMX7zzRa0OTLs7Q==", "requires": { "@firebase/auth-interop-types": "0.1.5", "@firebase/component": "0.1.19", @@ -183,12 +201,16 @@ }, "@firebase/database-types": { "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-0.5.2.tgz", + "integrity": "sha512-ap2WQOS3LKmGuVFKUghFft7RxXTyZTDr0Xd8y2aqmWsbJVjgozi0huL/EUMgTjGFrATAjcf2A7aNs8AKKZ2a8g==", "requires": { "@firebase/app-types": "0.6.1" } }, "@firebase/firestore": { "version": "1.16.7", + "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-1.16.7.tgz", + "integrity": "sha512-MrX7te1eUib2pUzD3dLWdRuM7EPcCxtPwO4M9og3IFYr1U3XlxybD7kxyYswltHcUm6+kba3VKL1rvkqZ1sn2g==", "requires": { "@firebase/component": "0.1.19", "@firebase/firestore-types": "1.12.1", @@ -202,10 +224,14 @@ } }, "@firebase/firestore-types": { - "version": "1.12.1" + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@firebase/firestore-types/-/firestore-types-1.12.1.tgz", + "integrity": "sha512-CpWcDriYnGDoAl0D9DcSuwX0b/fXqi7qOwuuTI1M0SYxau48G8cqhVjzjqPDgEM3kDGYJTnPN3ALS0Z4cnwERQ==" }, "@firebase/functions": { "version": "0.4.51", + "resolved": "https://registry.npmjs.org/@firebase/functions/-/functions-0.4.51.tgz", + "integrity": "sha512-PPx8eZcr4eoU9BITOUGUVurs4WZu8Thj3uCWx766dU3mV1W/7kRgtiptmW0XJUB18FZ1PT3+Hadd6V6vjtLgYw==", "requires": { "@firebase/component": "0.1.19", "@firebase/functions-types": "0.3.17", @@ -215,10 +241,14 @@ } }, "@firebase/functions-types": { - "version": "0.3.17" + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@firebase/functions-types/-/functions-types-0.3.17.tgz", + "integrity": "sha512-DGR4i3VI55KnYk4IxrIw7+VG7Q3gA65azHnZxo98Il8IvYLr2UTBlSh72dTLlDf25NW51HqvJgYJDKvSaAeyHQ==" }, "@firebase/installations": { "version": "0.4.17", + "resolved": "https://registry.npmjs.org/@firebase/installations/-/installations-0.4.17.tgz", + "integrity": "sha512-AE/TyzIpwkC4UayRJD419xTqZkKzxwk0FLht3Dci8WI2OEKHSwoZG9xv4hOBZebe+fDzoV2EzfatQY8c/6Avig==", "requires": { "@firebase/component": "0.1.19", "@firebase/installations-types": "0.3.4", @@ -228,13 +258,19 @@ } }, "@firebase/installations-types": { - "version": "0.3.4" + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@firebase/installations-types/-/installations-types-0.3.4.tgz", + "integrity": "sha512-RfePJFovmdIXb6rYwtngyxuEcWnOrzdZd9m7xAW0gRxDIjBT20n3BOhjpmgRWXo/DAxRmS7bRjWAyTHY9cqN7Q==" }, "@firebase/logger": { - "version": "0.2.6" + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.2.6.tgz", + "integrity": "sha512-KIxcUvW/cRGWlzK9Vd2KB864HlUnCfdTH0taHE0sXW5Xl7+W68suaeau1oKNEqmc3l45azkd4NzXTCWZRZdXrw==" }, "@firebase/messaging": { "version": "0.7.1", + "resolved": "https://registry.npmjs.org/@firebase/messaging/-/messaging-0.7.1.tgz", + "integrity": "sha512-iev/ST9v0xd/8YpGYrZtDcqdD9J6ZWzSuceRn8EKy5vIgQvW/rk2eTQc8axzvDpQ36ZfphMYuhW6XuNrR3Pd2Q==", "requires": { "@firebase/component": "0.1.19", "@firebase/installations": "0.4.17", @@ -245,10 +281,14 @@ } }, "@firebase/messaging-types": { - "version": "0.5.0" + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@firebase/messaging-types/-/messaging-types-0.5.0.tgz", + "integrity": "sha512-QaaBswrU6umJYb/ZYvjR5JDSslCGOH6D9P136PhabFAHLTR4TWjsaACvbBXuvwrfCXu10DtcjMxqfhdNIB1Xfg==" }, "@firebase/performance": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@firebase/performance/-/performance-0.4.1.tgz", + "integrity": "sha512-eAqS3/456xnUwuTg4w58x2fYbvTtQpgt67lpBUX3DuhOqwiM8+JELRte52nDgum2lTaTZWiu5de9mPuAYx2WDg==", "requires": { "@firebase/component": "0.1.19", "@firebase/installations": "0.4.17", @@ -259,10 +299,14 @@ } }, "@firebase/performance-types": { - "version": "0.0.13" + "version": "0.0.13", + "resolved": "https://registry.npmjs.org/@firebase/performance-types/-/performance-types-0.0.13.tgz", + "integrity": "sha512-6fZfIGjQpwo9S5OzMpPyqgYAUZcFzZxHFqOyNtorDIgNXq33nlldTL/vtaUZA8iT9TT5cJlCrF/jthKU7X21EA==" }, "@firebase/polyfill": { "version": "0.3.36", + "resolved": "https://registry.npmjs.org/@firebase/polyfill/-/polyfill-0.3.36.tgz", + "integrity": "sha512-zMM9oSJgY6cT2jx3Ce9LYqb0eIpDE52meIzd/oe/y70F+v9u1LDqk5kUF5mf16zovGBWMNFmgzlsh6Wj0OsFtg==", "requires": { "core-js": "3.6.5", "promise-polyfill": "8.1.3", @@ -270,12 +314,16 @@ }, "dependencies": { "whatwg-fetch": { - "version": "2.0.4" + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz", + "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==" } } }, "@firebase/remote-config": { "version": "0.1.28", + "resolved": "https://registry.npmjs.org/@firebase/remote-config/-/remote-config-0.1.28.tgz", + "integrity": "sha512-4zSdyxpt94jAnFhO8toNjG8oMKBD+xTuBIcK+Nw8BdQWeJhEamgXlupdBARUk1uf3AvYICngHH32+Si/dMVTbw==", "requires": { "@firebase/component": "0.1.19", "@firebase/installations": "0.4.17", @@ -286,10 +334,14 @@ } }, "@firebase/remote-config-types": { - "version": "0.1.9" + "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==" }, "@firebase/storage": { "version": "0.3.43", + "resolved": "https://registry.npmjs.org/@firebase/storage/-/storage-0.3.43.tgz", + "integrity": "sha512-Jp54jcuyimLxPhZHFVAhNbQmgTu3Sda7vXjXrNpPEhlvvMSq4yuZBR6RrZxe/OrNVprLHh/6lTCjwjOVSo3bWA==", "requires": { "@firebase/component": "0.1.19", "@firebase/storage-types": "0.3.13", @@ -298,19 +350,27 @@ } }, "@firebase/storage-types": { - "version": "0.3.13" + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@firebase/storage-types/-/storage-types-0.3.13.tgz", + "integrity": "sha512-pL7b8d5kMNCCL0w9hF7pr16POyKkb3imOW7w0qYrhBnbyJTdVxMWZhb0HxCFyQWC0w3EiIFFmxoz8NTFZDEFog==" }, "@firebase/util": { "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-0.3.2.tgz", + "integrity": "sha512-Dqs00++c8rwKky6KCKLLY2T1qYO4Q+X5t+lF7DInXDNF4ae1Oau35bkD+OpJ9u7l1pEv7KHowP6CUKuySCOc8g==", "requires": { "tslib": "^1.11.1" } }, "@firebase/webchannel-wrapper": { - "version": "0.3.0" + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-0.3.0.tgz", + "integrity": "sha512-VniCGPIgSGNEgOkh5phb3iKmSGIzcwrccy3IomMFRWPCMiCk2y98UQNJEoDs1yIHtZMstVjYWKYxnunIGzC5UQ==" }, "@grpc/grpc-js": { "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.1.6.tgz", + "integrity": "sha512-bUeaMN/dHTkt9AqU0Tc1xdHMB3jVLyPNfg8gZ5cMyhFyMeCwoJbFcJrNBgYqRCbvYhvtaEgzQwkw91NnY4Oktg==", "requires": { "@grpc/proto-loader": "^0.6.0-pre14", "@types/node": "^12.12.47", @@ -320,6 +380,8 @@ "dependencies": { "@grpc/proto-loader": { "version": "0.6.0-pre9", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.0-pre9.tgz", + "integrity": "sha512-oM+LjpEjNzW5pNJjt4/hq1HYayNeQT+eGrOPABJnYHv7TyNPDNzkQ76rDYZF86X5swJOa4EujEMzQ9iiTdPgww==", "requires": { "@types/long": "^4.0.1", "lodash.camelcase": "^4.3.0", @@ -332,99 +394,149 @@ }, "@grpc/proto-loader": { "version": "0.5.5", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.5.5.tgz", + "integrity": "sha512-WwN9jVNdHRQoOBo9FDH7qU+mgfjPc8GygPYms3M+y3fbQLfnCe/Kv/E01t7JRgnrsOHH8euvSbed3mIalXhwqQ==", "requires": { "lodash.camelcase": "^4.3.0", "protobufjs": "^6.8.6" } }, "@protobufjs/aspromise": { - "version": "1.1.2" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=" }, "@protobufjs/base64": { - "version": "1.1.2" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" }, "@protobufjs/codegen": { - "version": "2.0.4" + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" }, "@protobufjs/eventemitter": { - "version": "1.1.0" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=" }, "@protobufjs/fetch": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", "requires": { "@protobufjs/aspromise": "^1.1.1", "@protobufjs/inquire": "^1.1.0" } }, "@protobufjs/float": { - "version": "1.0.2" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=" }, "@protobufjs/inquire": { - "version": "1.1.0" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=" }, "@protobufjs/path": { - "version": "1.1.2" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=" }, "@protobufjs/pool": { - "version": "1.1.0" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=" }, "@protobufjs/utf8": { - "version": "1.1.0" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" }, "@types/color-name": { - "version": "1.1.1" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" }, "@types/firebase": { "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@types/firebase/-/firebase-3.2.1.tgz", + "integrity": "sha512-G8XgHMu2jHlElfc2xVNaYP50F0qrqeTCjgeG1v5b4SRwWG4XKC4fCuEdVZuZaMRmVygcnbRZBAo9O7RsDvmkGQ==", "requires": { "firebase": "*" } }, "@types/long": { - "version": "4.0.1" + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", + "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==" }, "@types/node": { - "version": "12.12.58" + "version": "12.12.58", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.58.tgz", + "integrity": "sha512-Be46CNIHWAagEfINOjmriSxuv7IVcqbGe+sDSg2SYCEz/0CRBy7LRASGfRbD8KZkqoePU73Wsx3UvOSFcq/9hA==" }, "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==", "requires": { "event-target-shim": "^5.0.0" } }, "agent-base": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.1.tgz", + "integrity": "sha512-01q25QQDwLSsyfhrKbn8yuur+JNw0H+0Y4JiGIKd3z9aYk/w/2kxD/Upc+t2ZBBSUNff50VjPsSW2YxM8QYKVg==", "requires": { "debug": "4" } }, "ansi-regex": { - "version": "5.0.0" + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" }, "ansi-styles": { "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", "requires": { "@types/color-name": "^1.1.1", "color-convert": "^2.0.1" } }, "arrify": { - "version": "2.0.1" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==" }, "base64-js": { - "version": "1.3.1" + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" }, "bignumber.js": { - "version": "9.0.0" + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz", + "integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A==" }, "buffer-equal-constant-time": { - "version": "1.0.1" + "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=" }, "camelcase": { - "version": "5.3.1" + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" }, "cliui": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -433,60 +545,88 @@ }, "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==", "requires": { "color-name": "~1.1.4" } }, "color-name": { - "version": "1.1.4" + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "core-js": { - "version": "3.6.5" + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", + "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==" }, "debug": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "requires": { "ms": "^2.1.1" } }, "decamelize": { - "version": "1.2.0" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" }, "dom-storage": { - "version": "2.1.0" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/dom-storage/-/dom-storage-2.1.0.tgz", + "integrity": "sha512-g6RpyWXzl0RR6OTElHKBl7nwnK87GUyZMYC7JWsB/IA73vpqK2K6LT39x4VepLxlSsWBFrPVLnsSR5Jyty0+2Q==" }, "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==", "requires": { "safe-buffer": "^5.0.1" } }, "emoji-regex": { - "version": "8.0.0" + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "encoding": { "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", "requires": { "iconv-lite": "^0.6.2" } }, "event-target-shim": { - "version": "5.0.1" + "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==" }, "extend": { - "version": "3.0.2" + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, "fast-text-encoding": { - "version": "1.0.3" + "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==" }, "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==", "requires": { "websocket-driver": ">=0.5.1" } }, "find-up": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "requires": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -494,6 +634,8 @@ }, "firebase": { "version": "7.20.0", + "resolved": "https://registry.npmjs.org/firebase/-/firebase-7.20.0.tgz", + "integrity": "sha512-ijgiUPB93UGWw2P2kgUQgghu5WOn/WR2J8C/V6ZSeI1PQqiEwsfn0kvw4iMJeqLQpA/FVeZz/+p0ubE5kzqhBA==", "requires": { "@firebase/analytics": "0.5.0", "@firebase/app": "0.6.11", @@ -513,6 +655,8 @@ }, "gaxios": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-3.1.0.tgz", + "integrity": "sha512-DDTn3KXVJJigtz+g0J3vhcfbDbKtAroSTxauWsdnP57sM5KZ3d2c/3D9RKFJ86s43hfw6WULg6TXYw/AYiBlpA==", "requires": { "abort-controller": "^3.0.0", "extend": "^3.0.2", @@ -523,16 +667,22 @@ }, "gcp-metadata": { "version": "4.1.4", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.1.4.tgz", + "integrity": "sha512-5J/GIH0yWt/56R3dNaNWPGQ/zXsZOddYECfJaqxFWgrZ9HC2Kvc5vl9upOgUUHKzURjAVf2N+f6tEJiojqXUuA==", "requires": { "gaxios": "^3.0.0", "json-bigint": "^1.0.0" } }, "get-caller-file": { - "version": "2.0.5" + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, "google-auth-library": { "version": "6.0.6", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-6.0.6.tgz", + "integrity": "sha512-fWYdRdg55HSJoRq9k568jJA1lrhg9i2xgfhVIMJbskUmbDpJGHsbv9l41DGhCDXM21F9Kn4kUwdysgxSYBYJUw==", "requires": { "arrify": "^2.0.0", "base64-js": "^1.3.0", @@ -547,12 +697,16 @@ }, "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==", "requires": { "node-forge": "^0.10.0" } }, "gtoken": { "version": "5.0.3", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.0.3.tgz", + "integrity": "sha512-Nyd1wZCMRc2dj/mAD0LlfQLcAO06uKdpKJXvK85SGrF5+5+Bpfil9u/2aw35ltvEHjvl0h5FMKN5knEU+9JrOg==", "requires": { "gaxios": "^3.0.0", "google-p12-pem": "^3.0.0", @@ -561,10 +715,14 @@ } }, "http-parser-js": { - "version": "0.5.2" + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.2.tgz", + "integrity": "sha512-opCO9ASqg5Wy2FNo7A0sxy71yGbbkJJXLdgMK04Tcypw9jr2MgWbyubb0+WdmDmGnFflO7fRbqbaihh/ENDlRQ==" }, "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==", "requires": { "agent-base": "6", "debug": "4" @@ -572,31 +730,45 @@ }, "iconv-lite": { "version": "0.6.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", + "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", "requires": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "idb": { - "version": "3.0.2" + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/idb/-/idb-3.0.2.tgz", + "integrity": "sha512-+FLa/0sTXqyux0o6C+i2lOR0VoS60LU/jzUo5xjfY6+7sEEgy4Gz1O7yFBXvjd7N0NyIGWIRg8DcQSLEG+VSPw==" }, "is-fullwidth-code-point": { - "version": "3.0.0" + "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==" }, "is-stream": { - "version": "2.0.0" + "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==" }, "isomorphic-fetch": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", + "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", "requires": { "node-fetch": "^1.0.1", "whatwg-fetch": ">=0.10.0" }, "dependencies": { "is-stream": { - "version": "1.1.0" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" }, "node-fetch": { "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", "requires": { "encoding": "^0.1.11", "is-stream": "^1.0.1" @@ -606,12 +778,16 @@ }, "json-bigint": { "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==", "requires": { "bignumber.js": "^9.0.0" } }, "jwa": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", + "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", "requires": { "buffer-equal-constant-time": "1.0.1", "ecdsa-sig-formatter": "1.0.11", @@ -620,6 +796,8 @@ }, "jws": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", + "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", "requires": { "jwa": "^2.0.0", "safe-buffer": "^5.0.1" @@ -627,57 +805,85 @@ }, "locate-path": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "requires": { "p-locate": "^4.1.0" } }, "lodash.camelcase": { - "version": "4.3.0" + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=" }, "long": { - "version": "4.0.0" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" }, "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==", "requires": { "yallist": "^4.0.0" } }, "mime": { - "version": "2.4.6" + "version": "2.4.6", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", + "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==" }, "ms": { - "version": "2.1.2" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node-fetch": { - "version": "2.6.0" + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", + "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==" }, "node-forge": { - "version": "0.10.0" + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==" }, "p-limit": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "requires": { "p-try": "^2.0.0" } }, "p-locate": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "requires": { "p-limit": "^2.2.0" } }, "p-try": { - "version": "2.2.0" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" }, "path-exists": { - "version": "4.0.0" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" }, "promise-polyfill": { - "version": "8.1.3" + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-8.1.3.tgz", + "integrity": "sha512-MG5r82wBzh7pSKDRa9y+vllNHz3e3d4CNj1PQE4BQYxLme0gKYYBm9YENq+UkEikyZ0XbiGWxYlVw3Rl9O/U8g==" }, "protobufjs": { "version": "6.10.1", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.10.1.tgz", + "integrity": "sha512-pb8kTchL+1Ceg4lFd5XUpK8PdWacbvV5SK2ULH2ebrYtl4GjJmS24m6CKME67jzV53tbJxHlnNOSqQHbTsR9JQ==", "requires": { "@protobufjs/aspromise": "^1.1.2", "@protobufjs/base64": "^1.1.2", @@ -695,30 +901,46 @@ }, "dependencies": { "@types/node": { - "version": "13.13.19" + "version": "13.13.19", + "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.19.tgz", + "integrity": "sha512-IVsULCpTdafcHhBDLYEPnV5l15xV0q065zvOHC1ZmzFYaBCMzku078eXnazoSG8907vZjRgEN/EQjku7GwwFyQ==" } } }, "require-directory": { - "version": "2.1.1" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" }, "require-main-filename": { - "version": "2.0.0" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" }, "safe-buffer": { - "version": "5.2.1" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" }, "safer-buffer": { - "version": "2.1.2" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "semver": { - "version": "6.3.0" + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" }, "set-blocking": { - "version": "2.0.0" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, "string-width": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -727,15 +949,21 @@ }, "strip-ansi": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "requires": { "ansi-regex": "^5.0.0" } }, "tslib": { - "version": "1.13.0" + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", + "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" }, "websocket-driver": { "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", "requires": { "http-parser-js": ">=0.5.1", "safe-buffer": ">=5.1.0", @@ -743,16 +971,24 @@ } }, "websocket-extensions": { - "version": "0.1.4" + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==" }, "whatwg-fetch": { - "version": "3.4.1" + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.4.1.tgz", + "integrity": "sha512-sofZVzE1wKwO+EYPbWfiwzaKovWiZXf4coEzjGP9b2GBVgQRLQUZ2QcuPpQExGDAW5GItpEm6Tl4OU5mywnAoQ==" }, "which-module": { - "version": "2.0.0" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" }, "wrap-ansi": { "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -760,16 +996,24 @@ } }, "xmlhttprequest": { - "version": "1.8.0" + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", + "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=" }, "y18n": { - "version": "4.0.0" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" }, "yallist": { - "version": "4.0.0" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "yargs": { "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "requires": { "cliui": "^6.0.0", "decamelize": "^1.2.0", @@ -786,6 +1030,8 @@ }, "yargs-parser": { "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "requires": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" @@ -5445,6 +5691,11 @@ "object-assign": "^4.1.1" } }, + "credit-card-type": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/credit-card-type/-/credit-card-type-9.1.0.tgz", + "integrity": "sha512-CpNFuLxiPFxuZqhSKml3M+t0K/484pMAnfYWH14JoD7OZMnmC0Lmo+P7JX9SobqFpRoo7ifA18kOHdxJywYPEA==" + }, "cross-fetch": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.4.tgz", @@ -5562,6 +5813,11 @@ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" }, + "dedent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.6.0.tgz", + "integrity": "sha1-Dm2o8M5Sg471zsXI+TlrDBtko8s=" + }, "deep-assign": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/deep-assign/-/deep-assign-3.0.0.tgz", @@ -9689,6 +9945,16 @@ "js-tokens": "^3.0.0 || ^4.0.0" } }, + "lottie-react-native": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/lottie-react-native/-/lottie-react-native-4.0.2.tgz", + "integrity": "sha512-8X5SV8X+es5dJwUGYcSyRIbHIPeWIcUH6PiRaReUEy+6s1d+NLBp3rj4+9I75F1ZN0nbFGNkrgypnGsXOAXBTw==", + "requires": { + "invariant": "^2.2.2", + "prop-types": "^15.5.10", + "react-native-safe-modules": "^1.0.3" + } + }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -11852,6 +12118,14 @@ "resolved": "https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-3.2.0.tgz", "integrity": "sha512-k2Nty4PwSnrg9HwrYeeE+EYqViYJoOFwEy9LxL5RIRfoqxAq/uQXNGwpUg2/u4gnKpBbEPa9eRh15KKMe/VHkA==" }, + "react-native-safe-modules": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/react-native-safe-modules/-/react-native-safe-modules-1.0.3.tgz", + "integrity": "sha512-DUxti4Z+AgJ/ZsO5U7p3uSCUBko8JT8GvFlCeOXk9bMd+4qjpoDvMYpfbixXKgL88M+HwmU/KI1YFN6gsQZyBA==", + "requires": { + "dedent": "^0.6.0" + } + }, "react-native-screens": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/react-native-screens/-/react-native-screens-3.4.0.tgz", diff --git a/package.json b/package.json index 1948807ec..618b85eab 100644 --- a/package.json +++ b/package.json @@ -86,6 +86,7 @@ "@types/lodash": "^4.14.158", "algoliasearch": "^4.8.3", "axios": "^0.21.1", + "credit-card-type": "^9.1.0", "dayjs": "^1.8.36", "dotenv": "^8.2.0", "expo": "^42.0.0", @@ -115,6 +116,7 @@ "geokit": "^1.1.0", "i18n-js": "^3.7.1", "lodash": "^4.17.19", + "lottie-react-native": "4.0.2", "marked": "^2.0.1", "nanoid": "^3.1.10", "normalizr": "^3.6.0", From dad14cc12caacef52bdea79f8abf28bc1cab121a Mon Sep 17 00:00:00 2001 From: Lucas Cassin Date: Mon, 25 Oct 2021 21:45:24 -0300 Subject: [PATCH 02/11] Add trailing to DefaultInput Co-authored-by: Fernando Kenji --- common/components/inputs/DefaultInput.tsx | 31 +++++++++++++++-------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/common/components/inputs/DefaultInput.tsx b/common/components/inputs/DefaultInput.tsx index e2e04d97b..3446c8393 100644 --- a/common/components/inputs/DefaultInput.tsx +++ b/common/components/inputs/DefaultInput.tsx @@ -6,10 +6,14 @@ import PaddedView from '../containers/PaddedView'; export interface DefaultInputProps extends TextInputProps { title?: string; children?: ReactNode; + trailing?: ReactNode; } export default React.forwardRef( - ({ title, children, editable = true, style, ...props }: DefaultInputProps, externalRef) => { + ( + { title, children, editable = true, style, trailing, ...props }: DefaultInputProps, + externalRef + ) => { const internalRef = useRef(null); const ref = (externalRef as React.RefObject) || internalRef; const focus = useCallback(() => { @@ -46,16 +50,21 @@ export default React.forwardRef( )} - + + + + + {trailing} + {children} From 8847432c234170fbe200698e1fb1b43bbd174efb Mon Sep 17 00:00:00 2001 From: Lucas Cassin Date: Wed, 27 Oct 2021 20:34:03 -0300 Subject: [PATCH 03/11] feat: add errorMessage to DefaultInput --- common/components/inputs/DefaultInput.tsx | 100 ++++++++++-------- .../v2/main/profile/ProfilePaymentMethods.tsx | 8 +- 2 files changed, 60 insertions(+), 48 deletions(-) diff --git a/common/components/inputs/DefaultInput.tsx b/common/components/inputs/DefaultInput.tsx index 3446c8393..63bd91ce4 100644 --- a/common/components/inputs/DefaultInput.tsx +++ b/common/components/inputs/DefaultInput.tsx @@ -7,11 +7,20 @@ export interface DefaultInputProps extends TextInputProps { title?: string; children?: ReactNode; trailing?: ReactNode; + errorMessage?: string; } export default React.forwardRef( ( - { title, children, editable = true, style, trailing, ...props }: DefaultInputProps, + { + title, + children, + editable = true, + style, + trailing, + errorMessage, + ...props + }: DefaultInputProps, externalRef ) => { const internalRef = useRef(null); @@ -23,51 +32,54 @@ export default React.forwardRef( // } }, [ref]); return ( - - - {title && ( - - - {title} - - - )} - - - + <> + + + {title && ( + + + {title} + + + )} + + + + + {trailing} - {trailing} - - {children} - + {children} + + {!!errorMessage && {errorMessage}} + ); } ); diff --git a/consumer/v2/main/profile/ProfilePaymentMethods.tsx b/consumer/v2/main/profile/ProfilePaymentMethods.tsx index eb7302af6..5d9c704a0 100644 --- a/consumer/v2/main/profile/ProfilePaymentMethods.tsx +++ b/consumer/v2/main/profile/ProfilePaymentMethods.tsx @@ -25,9 +25,9 @@ export type ProfilePaymentMethodsParamList = { type ScreenNavigationProp = StackNavigationProp< ProfileParamList & - RestaurantNavigatorParamList & - P2POrderNavigatorParamList & - OngoingOrderNavigatorParamList, + RestaurantNavigatorParamList & + P2POrderNavigatorParamList & + OngoingOrderNavigatorParamList, 'ProfilePaymentMethods' >; type ScreenRouteProp = RouteProp; @@ -105,7 +105,7 @@ export default function ({ navigation, route }: Props) { ListFooterComponent={() => ( { if (returnScreen) navigation.navigate('ProfileAddCard', { returnScreen }); else navigation.navigate('ProfileAddCard'); From 6aeefc4b196ceb55381f6d81db47a432166e0282 Mon Sep 17 00:00:00 2001 From: Fernando Kenji Date: Thu, 28 Oct 2021 04:12:13 -0300 Subject: [PATCH 04/11] refact: credit card type validation --- common/components/inputs/DefaultInput.tsx | 3 +- common/utils/credit-card/CreditCard.ts | 25 ++++ .../credit-card/CreditCardImplementation.ts | 136 ++++++++++++++++++ .../credit-card/ICreditCardRepository.ts | 6 + consumer/v2/main/profile/ProfileAddCard.tsx | 43 ++++-- 5 files changed, 203 insertions(+), 10 deletions(-) create mode 100644 common/utils/credit-card/CreditCard.ts create mode 100644 common/utils/credit-card/CreditCardImplementation.ts create mode 100644 common/utils/credit-card/ICreditCardRepository.ts diff --git a/common/components/inputs/DefaultInput.tsx b/common/components/inputs/DefaultInput.tsx index 63bd91ce4..b186df75a 100644 --- a/common/components/inputs/DefaultInput.tsx +++ b/common/components/inputs/DefaultInput.tsx @@ -42,6 +42,7 @@ export default React.forwardRef( flexDirection: 'row', justifyContent: 'space-between', alignItems: 'flex-start', + borderColor: errorMessage ? colors.red : colors.grey500, }, style, ]} @@ -78,7 +79,7 @@ export default React.forwardRef( {children} - {!!errorMessage && {errorMessage}} + {!!errorMessage && {errorMessage}} ); } diff --git a/common/utils/credit-card/CreditCard.ts b/common/utils/credit-card/CreditCard.ts new file mode 100644 index 000000000..c4b1405a3 --- /dev/null +++ b/common/utils/credit-card/CreditCard.ts @@ -0,0 +1,25 @@ +export interface ICreditCard { + type: CreditCardType; + + label: string; + + icon: any; +} + +export enum CreditCardType { + american_express, + diners_club, + discover, + elo, + hiper, + hipercard, + jcb, + maestro, + mastercard, + mir, + unionpay, + visa, + undefined, +} + +export type CreditCardTypeStrings = keyof typeof CreditCardType; diff --git a/common/utils/credit-card/CreditCardImplementation.ts b/common/utils/credit-card/CreditCardImplementation.ts new file mode 100644 index 000000000..e80ac7e6a --- /dev/null +++ b/common/utils/credit-card/CreditCardImplementation.ts @@ -0,0 +1,136 @@ +import creditCardType from 'credit-card-type'; +import { CreditCardType, CreditCardTypeStrings, ICreditCard } from './CreditCard'; +import { GetCreditCard, GetType, IsAllowed, StringToCreditCardType } from './ICreditCardRepository'; + +const iconVisaFlag = require('../../../assets/icons/credit-card-flag-visa.png'); +const iconGenericFlag = require('../../../assets/icons/credit-card-flag-generic.png'); + +const ALLOWED_CREDIT_CARD_TYPES: CreditCardType[] = [ + CreditCardType.diners_club, + CreditCardType.elo, + CreditCardType.mastercard, + CreditCardType.visa, +]; + +/** + * Map credit card strings from package `credit-card-type` to `CreditCardType`. + */ +const stringToCreditCardType: StringToCreditCardType = { + 'american-express': CreditCardType.american_express, + 'diners-club': CreditCardType.diners_club, + 'discover': CreditCardType.discover, + 'elo': CreditCardType.elo, + 'hiper': CreditCardType.hiper, + 'hipercard': CreditCardType.hipercard, + 'jcb': CreditCardType.jcb, + 'maestro': CreditCardType.maestro, + 'mastercard': CreditCardType.mastercard, + 'mir': CreditCardType.mir, + 'unionpay': CreditCardType.unionpay, + 'visa': CreditCardType.visa, +}; + +/** + * Verifies credit card number and returns the corresponding `CreditCardType`. + * + * @param creditCardNumber - credit card number. + */ +const _getType: GetType = (creditCardNumber: string): CreditCardType => { + const typeCard = creditCardType(creditCardNumber); + const type = typeCard?.at(0)?.type; + + if (typeCard.length === 1 && type && Object.keys(stringToCreditCardType).includes(type)) { + return stringToCreditCardType[type]; + } + + return CreditCardType.undefined; +}; + +/** + * Returns . + * + * @param creditCardType - credit card type. + */ +export const getCreditCard: GetCreditCard = (creditCardNumber: string): ICreditCard => { + const type = CreditCardType[_getType(creditCardNumber)] as CreditCardTypeStrings; + + return _creditCards[type]; +}; + +/** + * Checks wheter the app supports the credit card type. + * + * @param creditCardType - credit card type. + */ +export const isAllowed: IsAllowed = (creditCardType: CreditCardType): boolean => { + return ALLOWED_CREDIT_CARD_TYPES.includes(creditCardType); +}; + +// TODO: Implement all credit card type icon. +const _creditCards: Record = { + american_express: { + type: CreditCardType.american_express, + label: 'American Express', + icon: iconGenericFlag, + }, + diners_club: { + type: CreditCardType.diners_club, + label: 'Diners Club', + icon: iconGenericFlag, + }, + discover: { + type: CreditCardType.discover, + label: 'Discover', + icon: iconGenericFlag, + }, + elo: { + type: CreditCardType.elo, + label: 'Elo', + icon: iconGenericFlag, + }, + hiper: { + type: CreditCardType.hiper, + label: 'Hiper', + icon: iconGenericFlag, + }, + hipercard: { + type: CreditCardType.hipercard, + label: 'Hipercard', + icon: iconGenericFlag, + }, + jcb: { + type: CreditCardType.jcb, + label: 'JCB', + icon: iconGenericFlag, + }, + maestro: { + type: CreditCardType.maestro, + label: 'Maestro', + icon: iconGenericFlag, + }, + mastercard: { + type: CreditCardType.mastercard, + label: 'Mastercard', + icon: iconGenericFlag, + }, + mir: { + type: CreditCardType.mir, + label: 'Mir', + icon: iconGenericFlag, + }, + unionpay: { + type: CreditCardType.unionpay, + label: 'Union Pay', + icon: iconGenericFlag, + }, + visa: { + type: CreditCardType.visa, + label: 'Visa', + icon: iconVisaFlag, + }, + undefined: { + type: CreditCardType.undefined, + label: '', + icon: iconGenericFlag, + }, +}; diff --git a/common/utils/credit-card/ICreditCardRepository.ts b/common/utils/credit-card/ICreditCardRepository.ts new file mode 100644 index 000000000..4acb223d5 --- /dev/null +++ b/common/utils/credit-card/ICreditCardRepository.ts @@ -0,0 +1,6 @@ +import { CreditCardType, ICreditCard } from './CreditCard'; + +export type StringToCreditCardType = Record; +export type GetCreditCard = (creditCardNumber: string) => ICreditCard; +export type GetType = (creditCardNumber: string) => CreditCardType; +export type IsAllowed = (creditCardType: CreditCardType) => boolean; diff --git a/consumer/v2/main/profile/ProfileAddCard.tsx b/consumer/v2/main/profile/ProfileAddCard.tsx index be5f5d618..36c6db166 100644 --- a/consumer/v2/main/profile/ProfileAddCard.tsx +++ b/consumer/v2/main/profile/ProfileAddCard.tsx @@ -2,8 +2,8 @@ import { Feather } from '@expo/vector-icons'; import { RouteProp } from '@react-navigation/native'; import { StackNavigationProp } from '@react-navigation/stack'; import { isEmpty, toNumber, trim } from 'lodash'; -import React from 'react'; -import { Keyboard, Text, TextInput, View } from 'react-native'; +import React, { useCallback } from 'react'; +import { Image, Keyboard, Text, TextInput, View } from 'react-native'; import { ScrollView } from 'react-native-gesture-handler'; import { useDispatch } from 'react-redux'; import { ApiContext, AppDispatch } from '../../../../common/app/context'; @@ -11,7 +11,7 @@ import DefaultButton from '../../../../common/components/buttons/DefaultButton'; import DefaultInput from '../../../../common/components/inputs/DefaultInput'; import { cardFormatter, - cardMask, + cardMask } from '../../../../common/components/inputs/pattern-input/formatters'; import { numbersOnlyParser } from '../../../../common/components/inputs/pattern-input/parsers'; import PatternInput from '../../../../common/components/inputs/PatternInput'; @@ -19,6 +19,11 @@ import useAxiosCancelToken from '../../../../common/hooks/useAxiosCancelToken'; import { useSegmentScreen } from '../../../../common/store/api/track'; import { showToast } from '../../../../common/store/ui/actions'; import { colors, halfPadding, padding, screens, texts } from '../../../../common/styles'; +import { CreditCardType } from '../../../../common/utils/credit-card/CreditCard'; +import { + getCreditCard, + isAllowed +} from '../../../../common/utils/credit-card/CreditCardImplementation'; import { t } from '../../../../strings'; import { RestaurantNavigatorParamList } from '../../food/restaurant/types'; import { OngoingOrderNavigatorParamList } from '../../ongoing/types'; @@ -33,9 +38,9 @@ export type ProfileAddCardParamList = { type ScreenNavigationProp = StackNavigationProp< ProfileParamList & - RestaurantNavigatorParamList & - P2POrderNavigatorParamList & - OngoingOrderNavigatorParamList, + RestaurantNavigatorParamList & + P2POrderNavigatorParamList & + OngoingOrderNavigatorParamList, 'ProfileAddCard' >; type ScreenRouteProp = RouteProp; @@ -53,6 +58,8 @@ export default function ({ navigation, route }: Props) { const dispatch = useDispatch(); // state const [number, setNumber] = React.useState(''); + const [numberError, setNumberError] = React.useState(''); + const [image, setImage] = React.useState(); const [month, setMonth] = React.useState(''); const [year, setYear] = React.useState(''); const [cvv, setCVV] = React.useState(''); @@ -90,6 +97,24 @@ export default function ({ navigation, route }: Props) { dispatch(showToast(error.toString(), 'error')); } }; + const onChangeNumber = useCallback( + (text: string) => { + if (isNaN(toNumber(text))) return; + + setNumber(text); + + const { label, type, icon } = getCreditCard(text); + + if (!isAllowed(type) && type !== CreditCardType.undefined) { + setNumberError(`Não aceitamos a bandeira ${label}`); + } else { + setNumberError(''); + } + + setImage(icon); + }, + [setNumber, setNumberError] + ); // refs const expirationMonthRef = React.useRef(null); const expirationYearRef = React.useRef(null); @@ -118,9 +143,9 @@ export default function ({ navigation, route }: Props) { autoCompleteType="cc-number" returnKeyType="next" blurOnSubmit={false} - onChangeText={(text) => { - if (!isNaN(toNumber(text))) setNumber(text); - }} + onChangeText={onChangeNumber} + trailing={image && } + errorMessage={numberError} onSubmitEditing={() => expirationMonthRef.current?.focus()} /> From 800b8c7fa1744c3daf76cba9efcead346746f8b0 Mon Sep 17 00:00:00 2001 From: Fernando Kenji Date: Fri, 29 Oct 2021 00:21:58 -0300 Subject: [PATCH 05/11] feat: Add month and year validation Co-authored-by: lucasYudiCassin --- consumer/v2/main/profile/ProfileAddCard.tsx | 48 ++++++++++++++++++--- 1 file changed, 41 insertions(+), 7 deletions(-) diff --git a/consumer/v2/main/profile/ProfileAddCard.tsx b/consumer/v2/main/profile/ProfileAddCard.tsx index 36c6db166..30f21732a 100644 --- a/consumer/v2/main/profile/ProfileAddCard.tsx +++ b/consumer/v2/main/profile/ProfileAddCard.tsx @@ -59,6 +59,8 @@ export default function ({ navigation, route }: Props) { // state const [number, setNumber] = React.useState(''); const [numberError, setNumberError] = React.useState(''); + const [yearError, setYearError] = React.useState(''); + const [monthError, setMonthError] = React.useState(''); const [image, setImage] = React.useState(); const [month, setMonth] = React.useState(''); const [year, setYear] = React.useState(''); @@ -115,6 +117,40 @@ export default function ({ navigation, route }: Props) { }, [setNumber, setNumberError] ); + const onChangeYear = useCallback( + (yearString: string) => { + const yearNumber = toNumber(yearString); + if (isNaN(yearNumber)) return; + + setYear(yearString); + + const currentYear = new Date().getFullYear(); + // TODO: Get upperbound limit year + + if (currentYear > yearNumber && yearString.length === 4) { + setYearError('Digite um ano válido'); + } else { + setYearError(''); + } + }, + [setYear, setYearError] + ); + const onChangeMonth = useCallback( + (monthString: string) => { + const monthNumber = toNumber(monthString); + if (isNaN(monthNumber)) return; + + setMonth(monthString); + + // TODO: Dont show error when input is empty or only one zero + if ((monthNumber < 1 || monthNumber > 12) && monthString.length === 2) { + setMonthError('Digite um mês válido'); + } else { + setMonthError(''); + } + }, + [setMonth, setMonthError] + ); // refs const expirationMonthRef = React.useRef(null); const expirationYearRef = React.useRef(null); @@ -160,9 +196,8 @@ export default function ({ navigation, route }: Props) { returnKeyType="next" autoCompleteType="cc-exp-month" blurOnSubmit={false} - onChangeText={(text) => { - if (!isNaN(toNumber(text))) setMonth(text); - }} + onChangeText={onChangeMonth} + errorMessage={monthError} onSubmitEditing={() => expirationYearRef.current?.focus()} /> { - if (!isNaN(toNumber(text))) setYear(text); - }} + onChangeText={onChangeYear} + errorMessage={yearError} onSubmitEditing={() => cvvRef.current?.focus()} /> From 6dc2dd7c23f8f149b1e121a3fb1f85ccd77a44a4 Mon Sep 17 00:00:00 2001 From: Fernando Kenji Date: Fri, 29 Oct 2021 00:23:00 -0300 Subject: [PATCH 06/11] fix: DefaultInput with error flex-direction Co-authored-by: lucasYudiCassin --- common/components/inputs/DefaultInput.tsx | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/common/components/inputs/DefaultInput.tsx b/common/components/inputs/DefaultInput.tsx index b186df75a..4bfc3c712 100644 --- a/common/components/inputs/DefaultInput.tsx +++ b/common/components/inputs/DefaultInput.tsx @@ -32,7 +32,7 @@ export default React.forwardRef( // } }, [ref]); return ( - <> + @@ -80,7 +79,7 @@ export default React.forwardRef( {children} {!!errorMessage && {errorMessage}} - + ); } ); From 95ba9ab478062ca2bb476f50b0a9c2e4eb1b1ad8 Mon Sep 17 00:00:00 2001 From: Fernando Kenji Date: Fri, 29 Oct 2021 00:24:11 -0300 Subject: [PATCH 07/11] feat: set icon to undefined when CreditCardType is undefined Co-authored-by: lucasYudiCassin --- common/utils/credit-card/CreditCardImplementation.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/utils/credit-card/CreditCardImplementation.ts b/common/utils/credit-card/CreditCardImplementation.ts index e80ac7e6a..81dc5cf2a 100644 --- a/common/utils/credit-card/CreditCardImplementation.ts +++ b/common/utils/credit-card/CreditCardImplementation.ts @@ -131,6 +131,6 @@ const _creditCards: Record = { undefined: { type: CreditCardType.undefined, label: '', - icon: iconGenericFlag, + icon: undefined, }, }; From 6dcaa01d6148939ccfbfc376b2b0cfd3ec387e19 Mon Sep 17 00:00:00 2001 From: Fernando Kenji Date: Fri, 19 Nov 2021 00:53:17 -0300 Subject: [PATCH 08/11] feat: credit-card icons --- assets/icons/credit-card/diners-icon.tsx | 25 +++++++++++++ assets/icons/credit-card/elo-icon.tsx | 26 ++++++++++++++ assets/icons/credit-card/mastercard-icon.tsx | 31 ++++++++++++++++ assets/icons/credit-card/visa-icon.tsx | 21 +++++++++++ .../credit-card/CreditCardImplementation.ts | 35 ++++++++++--------- 5 files changed, 121 insertions(+), 17 deletions(-) create mode 100644 assets/icons/credit-card/diners-icon.tsx create mode 100644 assets/icons/credit-card/elo-icon.tsx create mode 100644 assets/icons/credit-card/mastercard-icon.tsx create mode 100644 assets/icons/credit-card/visa-icon.tsx diff --git a/assets/icons/credit-card/diners-icon.tsx b/assets/icons/credit-card/diners-icon.tsx new file mode 100644 index 000000000..eb9c67635 --- /dev/null +++ b/assets/icons/credit-card/diners-icon.tsx @@ -0,0 +1,25 @@ +import * as React from 'react'; +import Svg, { Path, SvgProps } from 'react-native-svg'; + +export const DinersIcon = (props: SvgProps) => { + return ( + + + + + + + ); +}; diff --git a/assets/icons/credit-card/elo-icon.tsx b/assets/icons/credit-card/elo-icon.tsx new file mode 100644 index 000000000..ba91c8608 --- /dev/null +++ b/assets/icons/credit-card/elo-icon.tsx @@ -0,0 +1,26 @@ +import * as React from 'react'; +import Svg, { Path, SvgProps } from 'react-native-svg'; + +export const EloIcon = (props: SvgProps) => { + return ( + + + + + + + + ); +}; diff --git a/assets/icons/credit-card/mastercard-icon.tsx b/assets/icons/credit-card/mastercard-icon.tsx new file mode 100644 index 000000000..6bc7e8598 --- /dev/null +++ b/assets/icons/credit-card/mastercard-icon.tsx @@ -0,0 +1,31 @@ +import * as React from 'react'; +import Svg, { Path, SvgProps } from 'react-native-svg'; + +export const MasterCardIcon = (props: SvgProps) => { + return ( + + + + + + + + + + ); +}; diff --git a/assets/icons/credit-card/visa-icon.tsx b/assets/icons/credit-card/visa-icon.tsx new file mode 100644 index 000000000..7e18bcf01 --- /dev/null +++ b/assets/icons/credit-card/visa-icon.tsx @@ -0,0 +1,21 @@ +import * as React from 'react'; +import Svg, { Path, SvgProps } from 'react-native-svg'; + +export const VisaIcon = (props: SvgProps) => { + return ( + + + + + + ); +}; diff --git a/common/utils/credit-card/CreditCardImplementation.ts b/common/utils/credit-card/CreditCardImplementation.ts index 81dc5cf2a..44b2183fb 100644 --- a/common/utils/credit-card/CreditCardImplementation.ts +++ b/common/utils/credit-card/CreditCardImplementation.ts @@ -1,10 +1,11 @@ import creditCardType from 'credit-card-type'; +import { DinersIcon } from '../../../assets/icons/credit-card/diners-icon'; +import { EloIcon } from '../../../assets/icons/credit-card/elo-icon'; +import { MasterCardIcon } from '../../../assets/icons/credit-card/mastercard-icon'; +import { VisaIcon } from '../../../assets/icons/credit-card/visa-icon'; import { CreditCardType, CreditCardTypeStrings, ICreditCard } from './CreditCard'; import { GetCreditCard, GetType, IsAllowed, StringToCreditCardType } from './ICreditCardRepository'; -const iconVisaFlag = require('../../../assets/icons/credit-card-flag-visa.png'); -const iconGenericFlag = require('../../../assets/icons/credit-card-flag-generic.png'); - const ALLOWED_CREDIT_CARD_TYPES: CreditCardType[] = [ CreditCardType.diners_club, CreditCardType.elo, @@ -47,9 +48,9 @@ const _getType: GetType = (creditCardNumber: string): CreditCardType => { }; /** - * Returns . + * Returns credit card metadata from creditCardNumber. * - * @param creditCardType - credit card type. + * @param creditCardNumber - credit card number. */ export const getCreditCard: GetCreditCard = (creditCardNumber: string): ICreditCard => { const type = CreditCardType[_getType(creditCardNumber)] as CreditCardTypeStrings; @@ -71,62 +72,62 @@ const _creditCards: Record = { american_express: { type: CreditCardType.american_express, label: 'American Express', - icon: iconGenericFlag, + icon: undefined, }, diners_club: { type: CreditCardType.diners_club, label: 'Diners Club', - icon: iconGenericFlag, + icon: DinersIcon, }, discover: { type: CreditCardType.discover, label: 'Discover', - icon: iconGenericFlag, + icon: undefined, }, elo: { type: CreditCardType.elo, label: 'Elo', - icon: iconGenericFlag, + icon: EloIcon, }, hiper: { type: CreditCardType.hiper, label: 'Hiper', - icon: iconGenericFlag, + icon: undefined, }, hipercard: { type: CreditCardType.hipercard, label: 'Hipercard', - icon: iconGenericFlag, + icon: undefined, }, jcb: { type: CreditCardType.jcb, label: 'JCB', - icon: iconGenericFlag, + icon: undefined, }, maestro: { type: CreditCardType.maestro, label: 'Maestro', - icon: iconGenericFlag, + icon: undefined, }, mastercard: { type: CreditCardType.mastercard, label: 'Mastercard', - icon: iconGenericFlag, + icon: MasterCardIcon, }, mir: { type: CreditCardType.mir, label: 'Mir', - icon: iconGenericFlag, + icon: undefined, }, unionpay: { type: CreditCardType.unionpay, label: 'Union Pay', - icon: iconGenericFlag, + icon: undefined, }, visa: { type: CreditCardType.visa, label: 'Visa', - icon: iconVisaFlag, + icon: VisaIcon, }, undefined: { type: CreditCardType.undefined, From c4c96d6d5d3ffc5250d30ec6a83962b6d127de54 Mon Sep 17 00:00:00 2001 From: Lucas Cassin Date: Thu, 4 Nov 2021 21:32:28 -0300 Subject: [PATCH 09/11] fix: undefined problem typeCard --- common/utils/credit-card/CreditCardImplementation.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/utils/credit-card/CreditCardImplementation.ts b/common/utils/credit-card/CreditCardImplementation.ts index 44b2183fb..2a0474091 100644 --- a/common/utils/credit-card/CreditCardImplementation.ts +++ b/common/utils/credit-card/CreditCardImplementation.ts @@ -38,7 +38,7 @@ const stringToCreditCardType: StringToCreditCardType = { */ const _getType: GetType = (creditCardNumber: string): CreditCardType => { const typeCard = creditCardType(creditCardNumber); - const type = typeCard?.at(0)?.type; + const type = typeCard[0]?.type; if (typeCard.length === 1 && type && Object.keys(stringToCreditCardType).includes(type)) { return stringToCreditCardType[type]; From 1c4e25be3a61f8ebeadfcadb4137f29ec5e71f01 Mon Sep 17 00:00:00 2001 From: Fernando Kenji Date: Fri, 19 Nov 2021 00:42:21 -0300 Subject: [PATCH 10/11] fix: credit-card icons viewBox --- assets/icons/credit-card/diners-icon.tsx | 9 ++++++++- assets/icons/credit-card/elo-icon.tsx | 14 ++++++++++++-- assets/icons/credit-card/mastercard-icon.tsx | 9 ++++++++- assets/icons/credit-card/visa-icon.tsx | 9 ++++++++- 4 files changed, 36 insertions(+), 5 deletions(-) diff --git a/assets/icons/credit-card/diners-icon.tsx b/assets/icons/credit-card/diners-icon.tsx index eb9c67635..bb6b57410 100644 --- a/assets/icons/credit-card/diners-icon.tsx +++ b/assets/icons/credit-card/diners-icon.tsx @@ -3,7 +3,14 @@ import Svg, { Path, SvgProps } from 'react-native-svg'; export const DinersIcon = (props: SvgProps) => { return ( - + { return ( - - + + { return ( - + { return ( - + Date: Fri, 19 Nov 2021 00:43:35 -0300 Subject: [PATCH 11/11] fix: credit-card icon type --- common/utils/credit-card/CreditCard.ts | 4 +++- common/utils/credit-card/CreditCardImplementation.ts | 9 --------- consumer/v2/main/profile/ProfileAddCard.tsx | 10 +++++----- 3 files changed, 8 insertions(+), 15 deletions(-) diff --git a/common/utils/credit-card/CreditCard.ts b/common/utils/credit-card/CreditCard.ts index c4b1405a3..17b1cd414 100644 --- a/common/utils/credit-card/CreditCard.ts +++ b/common/utils/credit-card/CreditCard.ts @@ -1,9 +1,11 @@ +import { ReactNode } from 'react'; + export interface ICreditCard { type: CreditCardType; label: string; - icon: any; + icon?: ReactNode; } export enum CreditCardType { diff --git a/common/utils/credit-card/CreditCardImplementation.ts b/common/utils/credit-card/CreditCardImplementation.ts index 2a0474091..caee09566 100644 --- a/common/utils/credit-card/CreditCardImplementation.ts +++ b/common/utils/credit-card/CreditCardImplementation.ts @@ -72,7 +72,6 @@ const _creditCards: Record = { american_express: { type: CreditCardType.american_express, label: 'American Express', - icon: undefined, }, diners_club: { type: CreditCardType.diners_club, @@ -82,7 +81,6 @@ const _creditCards: Record = { discover: { type: CreditCardType.discover, label: 'Discover', - icon: undefined, }, elo: { type: CreditCardType.elo, @@ -92,22 +90,18 @@ const _creditCards: Record = { hiper: { type: CreditCardType.hiper, label: 'Hiper', - icon: undefined, }, hipercard: { type: CreditCardType.hipercard, label: 'Hipercard', - icon: undefined, }, jcb: { type: CreditCardType.jcb, label: 'JCB', - icon: undefined, }, maestro: { type: CreditCardType.maestro, label: 'Maestro', - icon: undefined, }, mastercard: { type: CreditCardType.mastercard, @@ -117,12 +111,10 @@ const _creditCards: Record = { mir: { type: CreditCardType.mir, label: 'Mir', - icon: undefined, }, unionpay: { type: CreditCardType.unionpay, label: 'Union Pay', - icon: undefined, }, visa: { type: CreditCardType.visa, @@ -132,6 +124,5 @@ const _creditCards: Record = { undefined: { type: CreditCardType.undefined, label: '', - icon: undefined, }, }; diff --git a/consumer/v2/main/profile/ProfileAddCard.tsx b/consumer/v2/main/profile/ProfileAddCard.tsx index 30f21732a..c575705d3 100644 --- a/consumer/v2/main/profile/ProfileAddCard.tsx +++ b/consumer/v2/main/profile/ProfileAddCard.tsx @@ -3,7 +3,7 @@ import { RouteProp } from '@react-navigation/native'; import { StackNavigationProp } from '@react-navigation/stack'; import { isEmpty, toNumber, trim } from 'lodash'; import React, { useCallback } from 'react'; -import { Image, Keyboard, Text, TextInput, View } from 'react-native'; +import { Keyboard, Text, TextInput, View } from 'react-native'; import { ScrollView } from 'react-native-gesture-handler'; import { useDispatch } from 'react-redux'; import { ApiContext, AppDispatch } from '../../../../common/app/context'; @@ -61,7 +61,7 @@ export default function ({ navigation, route }: Props) { const [numberError, setNumberError] = React.useState(''); const [yearError, setYearError] = React.useState(''); const [monthError, setMonthError] = React.useState(''); - const [image, setImage] = React.useState(); + const [CreditCardIcon, setCreditCardIcon] = React.useState(); const [month, setMonth] = React.useState(''); const [year, setYear] = React.useState(''); const [cvv, setCVV] = React.useState(''); @@ -105,7 +105,7 @@ export default function ({ navigation, route }: Props) { setNumber(text); - const { label, type, icon } = getCreditCard(text); + const { label, type, icon: creditCardIcon } = getCreditCard(text); if (!isAllowed(type) && type !== CreditCardType.undefined) { setNumberError(`Não aceitamos a bandeira ${label}`); @@ -113,7 +113,7 @@ export default function ({ navigation, route }: Props) { setNumberError(''); } - setImage(icon); + setCreditCardIcon(creditCardIcon); }, [setNumber, setNumberError] ); @@ -180,7 +180,7 @@ export default function ({ navigation, route }: Props) { returnKeyType="next" blurOnSubmit={false} onChangeText={onChangeNumber} - trailing={image && } + trailing={CreditCardIcon} errorMessage={numberError} onSubmitEditing={() => expirationMonthRef.current?.focus()} />