From b0123afee801eca480ef51d3e7235263e3ed2990 Mon Sep 17 00:00:00 2001 From: garrettmills Date: Fri, 9 Apr 2021 21:26:57 -0500 Subject: [PATCH] Add initial firebase connection logic --- .idea/.gitignore | 8 + .idea/loc-chain-backend.iml | 8 + .idea/modules.xml | 8 + .idea/vcs.xml | 6 + package.json | 2 +- pnpm-lock.yaml | 984 +++++++++++++++++- src/Units.extollo.ts | 4 +- src/app/configs/app.config.ts | 10 + .../http/controllers/main/Home.controller.ts | 5 - src/app/units/FirebaseUnit.ts | 37 + 10 files changed, 1039 insertions(+), 33 deletions(-) create mode 100644 .idea/.gitignore create mode 100644 .idea/loc-chain-backend.iml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml create mode 100644 src/app/units/FirebaseUnit.ts diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..73f69e0 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml +# Editor-based HTTP Client requests +/httpRequests/ diff --git a/.idea/loc-chain-backend.iml b/.idea/loc-chain-backend.iml new file mode 100644 index 0000000..c956989 --- /dev/null +++ b/.idea/loc-chain-backend.iml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..27d7c32 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/package.json b/package.json index de88e50..aa23cff 100644 --- a/package.json +++ b/package.json @@ -10,11 +10,11 @@ "dependencies": { "@extollo/cli": "^0.4.1", "@extollo/di": "^0.4.2", - "@extollo/i18n": "^0.1.1", "@extollo/lib": "^0.1.2", "@extollo/orm": "^0.1.1", "@extollo/util": "^0.3.1", "copyfiles": "^2.4.1", + "firebase-admin": "^9.6.0", "typescript": "^4.1.3" }, "scripts": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index dff8b81..c0fd6aa 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,11 +1,11 @@ dependencies: '@extollo/cli': 0.4.3 '@extollo/di': 0.4.4 - '@extollo/i18n': 0.1.3 '@extollo/lib': 0.1.3 '@extollo/orm': 0.1.3 '@extollo/util': 0.3.2 copyfiles: 2.4.1 + firebase-admin: 9.6.0 typescript: 4.2.4 lockfileVersion: 5.2 packages: @@ -48,19 +48,6 @@ packages: dev: false resolution: integrity: sha512-kdljHQPxunw3KmDPxuXM7u6MwwnPvOvKGGoL0ItnMxCMHUQyBJSc+NkkRhgFnqr3WHEzTNfaYVg6hRVTvs3SOA== - /@extollo/i18n/0.1.3: - dependencies: - '@extollo/cli': 0.4.3 - '@extollo/di': 0.4.4 - '@extollo/lib': 0.1.3 - '@extollo/util': 0.3.2 - '@types/node': 14.14.37 - '@types/pluralize': 0.0.29 - pluralize: 8.0.0 - typescript: 4.2.4 - dev: false - resolution: - integrity: sha512-F0s3mRZbfwdT2tfCM62/WpskR8xfXVIyJG8y2+cA4t94n21H8vxKiOzUgOmQmHcTryI3NeJOEHNqh0CDemzzug== /@extollo/lib/0.1.3: dependencies: '@extollo/di': 0.4.4 @@ -106,6 +93,217 @@ packages: dev: false resolution: integrity: sha512-cL50wHrIiRHn6W3niQZftYDgFB8K8x0dxbJPZtnt4/iy32m1aWxEx9UL8Ttldas6zDt4Ws1zBp0fInSKOKcQnQ== + /@firebase/app-types/0.6.1: + dev: false + resolution: + integrity: sha512-L/ZnJRAq7F++utfuoTKX4CLBG5YR7tFO3PLzG1/oXXKEezJ0kRL3CMRoueBEmTCzVb/6SIs2Qlaw++uDgi5Xyg== + /@firebase/auth-interop-types/0.1.5_@firebase+util@0.3.4: + dependencies: + '@firebase/util': 0.3.4 + dev: false + peerDependencies: + '@firebase/app-types': 0.x + '@firebase/util': 0.x + resolution: + integrity: sha512-88h74TMQ6wXChPA6h9Q3E1Jg6TkTHep2+k63OWg3s0ozyGVMeY+TTOti7PFPzq5RhszQPQOoCi59es4MaRvgCw== + /@firebase/component/0.1.21: + dependencies: + '@firebase/util': 0.3.4 + tslib: 1.14.1 + dev: false + resolution: + integrity: sha512-kd5sVmCLB95EK81Pj+yDTea8pzN2qo/1yr0ua9yVi6UgMzm6zAeih73iVUkaat96MAHy26yosMufkvd3zC4IKg== + /@firebase/database-types/0.6.1: + dependencies: + '@firebase/app-types': 0.6.1 + dev: false + resolution: + integrity: sha512-JtL3FUbWG+bM59iYuphfx9WOu2Mzf0OZNaqWiQ7lJR8wBe7bS9rIm9jlBFtksB7xcya1lZSQPA/GAy2jIlMIkA== + /@firebase/database/0.8.3: + dependencies: + '@firebase/auth-interop-types': 0.1.5_@firebase+util@0.3.4 + '@firebase/component': 0.1.21 + '@firebase/database-types': 0.6.1 + '@firebase/logger': 0.2.6 + '@firebase/util': 0.3.4 + faye-websocket: 0.11.3 + tslib: 1.14.1 + dev: false + resolution: + integrity: sha512-i29rr3kcPltIkA8La9M1lgsSxx9bfu5lCQ0T+tbJptZ3UpqpcL1NzCcZa24cJjiLgq3HQNPyLvUvCtcPSFDlRg== + /@firebase/logger/0.2.6: + dev: false + resolution: + integrity: sha512-KIxcUvW/cRGWlzK9Vd2KB864HlUnCfdTH0taHE0sXW5Xl7+W68suaeau1oKNEqmc3l45azkd4NzXTCWZRZdXrw== + /@firebase/util/0.3.4: + dependencies: + tslib: 1.14.1 + dev: false + resolution: + integrity: sha512-VwjJUE2Vgr2UMfH63ZtIX9Hd7x+6gayi6RUXaTqEYxSbf/JmehLmAEYSuxS/NckfzAXWeGnKclvnXVibDgpjQQ== + /@google-cloud/common/3.6.0: + dependencies: + '@google-cloud/projectify': 2.0.1 + '@google-cloud/promisify': 2.0.3 + arrify: 2.0.1 + duplexify: 4.1.1 + ent: 2.2.0 + extend: 3.0.2 + google-auth-library: 7.0.4 + retry-request: 4.1.3 + teeny-request: 7.0.1 + dev: false + engines: + node: '>=10' + optional: true + resolution: + integrity: sha512-aHIFTqJZmeTNO9md8XxV+ywuvXF3xBm5WNmgWeeCK+XN5X+kGW0WEX94wGwj+/MdOnrVf4dL2RvSIt9J5yJG6Q== + /@google-cloud/firestore/4.9.9: + dependencies: + fast-deep-equal: 3.1.3 + functional-red-black-tree: 1.0.1 + google-gax: 2.11.2 + protobufjs: 6.10.2 + dev: false + engines: + node: '>=10.10.0' + optional: true + resolution: + integrity: sha512-M/Ts8oyJP1Ig8uMrUr/pNGGwBDPkB9ALqmH182T5aY5HW00yzLcHiDcKlfk9PoBINakAMk15GJZ1ov+I17HcnQ== + /@google-cloud/paginator/3.0.5: + dependencies: + arrify: 2.0.1 + extend: 3.0.2 + dev: false + engines: + node: '>=10' + optional: true + resolution: + integrity: sha512-N4Uk4BT1YuskfRhKXBs0n9Lg2YTROZc6IMpkO/8DIHODtm5s3xY8K5vVBo23v/2XulY3azwITQlYWgT4GdLsUw== + /@google-cloud/projectify/2.0.1: + dev: false + engines: + node: '>=10' + optional: true + resolution: + integrity: sha512-ZDG38U/Yy6Zr21LaR3BTiiLtpJl6RkPS/JwoRT453G+6Q1DhlV0waNf8Lfu+YVYGIIxgKnLayJRfYlFJfiI8iQ== + /@google-cloud/promisify/2.0.3: + dev: false + engines: + node: '>=10' + optional: true + resolution: + integrity: sha512-d4VSA86eL/AFTe5xtyZX+ePUjE8dIFu2T8zmdeNBSa5/kNgXPCx/o/wbFNHAGLJdGnk1vddRuMESD9HbOC8irw== + /@google-cloud/storage/5.8.3: + dependencies: + '@google-cloud/common': 3.6.0 + '@google-cloud/paginator': 3.0.5 + '@google-cloud/promisify': 2.0.3 + arrify: 2.0.1 + async-retry: 1.3.1 + compressible: 2.0.18 + date-and-time: 0.14.2 + duplexify: 4.1.1 + extend: 3.0.2 + gaxios: 4.2.0 + gcs-resumable-upload: 3.1.3 + get-stream: 6.0.0 + hash-stream-validation: 0.2.4 + mime: 2.5.2 + mime-types: 2.1.30 + onetime: 5.1.2 + p-limit: 3.1.0 + pumpify: 2.0.1 + snakeize: 0.1.0 + stream-events: 1.0.5 + xdg-basedir: 4.0.0 + dev: false + engines: + node: '>=10' + optional: true + resolution: + integrity: sha512-g++NTmpmwbZZEnBhJi3y1D3YyZ2Y+1xL5blp96eeJhffginMym5tRw/AGNZblDI35U2K1FTJEYqIZ31tbEzs8w== + /@grpc/grpc-js/1.2.12: + dependencies: + '@types/node': 13.13.48 + google-auth-library: 6.1.6 + semver: 6.3.0 + dev: false + engines: + node: ^8.13.0 || >=10.10.0 + optional: true + resolution: + integrity: sha512-+gPCklP1eqIgrNPyzddYQdt9+GvZqPlLpIjIo+TveE+gbtp74VV1A2ju8ExeO8ma8f7MbpaGZx/KJPYVWL9eDw== + /@grpc/proto-loader/0.5.6: + dependencies: + lodash.camelcase: 4.3.0 + protobufjs: 6.10.2 + dev: false + engines: + node: '>=6' + optional: true + resolution: + integrity: sha512-DT14xgw3PSzPxwS13auTEwxhMMOoz33DPUKNtmYK/QYbBSpLXJy78FGGs5yVoxVobEqPm4iW9MOIoz0A3bLTRQ== + /@protobufjs/aspromise/1.1.2: + dev: false + optional: true + resolution: + integrity: sha1-m4sMxmPWaafY9vXQiToU00jzD78= + /@protobufjs/base64/1.1.2: + dev: false + optional: true + resolution: + integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg== + /@protobufjs/codegen/2.0.4: + dev: false + optional: true + resolution: + integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg== + /@protobufjs/eventemitter/1.1.0: + dev: false + optional: true + resolution: + integrity: sha1-NVy8mLr61ZePntCV85diHx0Ga3A= + /@protobufjs/fetch/1.1.0: + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/inquire': 1.1.0 + dev: false + optional: true + resolution: + integrity: sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU= + /@protobufjs/float/1.0.2: + dev: false + optional: true + resolution: + integrity: sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E= + /@protobufjs/inquire/1.1.0: + dev: false + optional: true + resolution: + integrity: sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik= + /@protobufjs/path/1.1.2: + dev: false + optional: true + resolution: + integrity: sha1-bMKyDFya1q0NzP0hynZz2Nf79o0= + /@protobufjs/pool/1.1.0: + dev: false + optional: true + resolution: + integrity: sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q= + /@protobufjs/utf8/1.1.0: + dev: false + optional: true + resolution: + integrity: sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA= + /@tootallnate/once/1.1.2: + dev: false + engines: + node: '>= 6' + optional: true + resolution: + integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== /@types/glob/7.1.3: dependencies: '@types/minimatch': 3.0.4 @@ -113,6 +311,11 @@ packages: dev: false resolution: integrity: sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w== + /@types/long/4.0.1: + dev: false + optional: true + resolution: + integrity: sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w== /@types/minimatch/3.0.4: dev: false resolution: @@ -127,6 +330,15 @@ packages: dev: false resolution: integrity: sha512-c4mvXFByghezQ/eVGN5HvH/jI63vm3B7FiE81BUzDAWmuiohRecCO6ddU60dfq29oKUMiQujsoB2h0JQC7JHKA== + /@types/node/10.17.56: + dev: false + resolution: + integrity: sha512-LuAa6t1t0Bfw4CuSR0UITsm1hP17YL+u82kfHGrHUWdhlBtH7sa7jGY5z7glGaIj/WDYDkRtgGd+KCjCzxBW1w== + /@types/node/13.13.48: + dev: false + optional: true + resolution: + integrity: sha512-z8wvSsgWQzkr4sVuMEEOvwMdOQjiRY2Y/ZW4fDfjfe3+TfQrZqFKOthBgk2RnVEmtOKrkwdZ7uTvsxTBLjKGDQ== /@types/node/14.14.37: dev: false resolution: @@ -139,10 +351,6 @@ packages: dev: false resolution: integrity: sha512-EnZkZ1OMw9DvNfQkn2MTJrwKmhJYDEs5ujWrPfvseWNoI95N8B4HzU/Ltrq5ZfYxDX/Zg8mTzwr6UAyTjjFvXA== - /@types/pluralize/0.0.29: - dev: false - resolution: - integrity: sha512-BYOID+l2Aco2nBik+iYS4SZX0Lf20KPILP5RGmM1IgzdwNdTs0eebiFriOPcej1sX9mLnSoiNte5zcFxssgpGA== /@types/pug/2.0.4: dev: false resolution: @@ -171,6 +379,15 @@ packages: dev: false resolution: integrity: sha512-eQ9qFW/fhfGJF8WKHGEHZEyVWfZxrT+6CLIJGBcZPfxUh/+BnEj+UCGYMlr9qZuX/2AltsvwrGqp0LhEW8D0zQ== + /abort-controller/3.0.0: + dependencies: + event-target-shim: 5.0.1 + dev: false + engines: + node: '>=6.5' + optional: true + resolution: + integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== /acorn/7.4.1: dev: false engines: @@ -178,6 +395,15 @@ packages: hasBin: true resolution: integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== + /agent-base/6.0.2: + dependencies: + debug: 4.3.1 + dev: false + engines: + node: '>= 6.0.0' + optional: true + resolution: + integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== /ansi-regex/5.0.0: dev: false engines: @@ -196,6 +422,13 @@ packages: dev: false resolution: integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + /arrify/2.0.1: + dev: false + engines: + node: '>=8' + optional: true + resolution: + integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== /asap/2.0.6: dev: false resolution: @@ -210,6 +443,13 @@ packages: dev: false resolution: integrity: sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw== + /async-retry/1.3.1: + dependencies: + retry: 0.12.0 + dev: false + optional: true + resolution: + integrity: sha512-aiieFW/7h3hY0Bq5d+ktDBejxuwR78vRu9hDUdR8rNhSaQ29VzPL4AoIRG7D/c7tdenwOcKvgPM6tIxB3cB6HA== /babel-walk/3.0.0-canary-5: dependencies: '@babel/types': 7.13.14 @@ -222,12 +462,22 @@ packages: dev: false resolution: integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + /base64-js/1.5.1: + dev: false + optional: true + resolution: + integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== /bcrypt-pbkdf/1.0.2: dependencies: tweetnacl: 0.14.5 dev: false resolution: integrity: sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + /bignumber.js/9.0.1: + dev: false + optional: true + resolution: + integrity: sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA== /brace-expansion/1.1.11: dependencies: balanced-match: 1.0.2 @@ -235,6 +485,10 @@ packages: dev: false resolution: integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + /buffer-equal-constant-time/1.0.1: + dev: false + resolution: + integrity: sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk= /buffer-from/1.1.1: dev: false resolution: @@ -284,10 +538,33 @@ packages: node: '>=0.1.90' resolution: integrity: sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== + /compressible/2.0.18: + dependencies: + mime-db: 1.47.0 + dev: false + engines: + node: '>= 0.6' + optional: true + resolution: + integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== /concat-map/0.0.1: dev: false resolution: integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + /configstore/5.0.1: + dependencies: + dot-prop: 5.3.0 + graceful-fs: 4.2.6 + make-dir: 3.1.0 + unique-string: 2.0.0 + write-file-atomic: 3.0.3 + xdg-basedir: 4.0.0 + dev: false + engines: + node: '>=8' + optional: true + resolution: + integrity: sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA== /constantinople/4.0.1: dependencies: '@babel/parser': 7.13.15 @@ -316,6 +593,40 @@ packages: dev: false resolution: integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + /crypto-random-string/2.0.0: + dev: false + engines: + node: '>=8' + optional: true + resolution: + integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== + /date-and-time/0.14.2: + dev: false + optional: true + resolution: + integrity: sha512-EFTCh9zRSEpGPmJaexg7HTuzZHh6cnJj1ui7IGCFNXzd2QdpsNh05Db5TF3xzJm30YN+A8/6xHSuRcQqoc3kFA== + /debug/4.3.1: + dependencies: + ms: 2.1.2 + dev: false + engines: + node: '>=6.0' + optional: true + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + resolution: + integrity: sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== + /dicer/0.3.0: + dependencies: + streamsearch: 0.1.2 + dev: false + engines: + node: '>=4.5.0' + resolution: + integrity: sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA== /diff/4.0.2: dev: false engines: @@ -326,22 +637,105 @@ packages: dev: false resolution: integrity: sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk= + /dot-prop/5.3.0: + dependencies: + is-obj: 2.0.0 + dev: false + engines: + node: '>=8' + optional: true + resolution: + integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== /dotenv/8.2.0: dev: false engines: node: '>=8' resolution: integrity: sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw== + /duplexify/4.1.1: + dependencies: + end-of-stream: 1.4.4 + inherits: 2.0.4 + readable-stream: 3.6.0 + stream-shift: 1.0.1 + dev: false + optional: true + resolution: + integrity: sha512-DY3xVEmVHTv1wSzKNbwoU6nVjzI369Y6sPoqfYr0/xlx3IdX2n94xIszTcjPO8W8ZIv0Wb0PXNcjuZyT4wiICA== + /ecdsa-sig-formatter/1.0.11: + dependencies: + safe-buffer: 5.2.1 + dev: false + resolution: + integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== /emoji-regex/8.0.0: dev: false resolution: integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + /end-of-stream/1.4.4: + dependencies: + once: 1.4.0 + dev: false + optional: true + resolution: + integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + /ent/2.2.0: + dev: false + optional: true + resolution: + integrity: sha1-6WQhkyWiHQX0RGai9obtbOX13R0= /escalade/3.1.1: dev: false engines: node: '>=6' resolution: integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + /event-target-shim/5.0.1: + dev: false + engines: + node: '>=6' + optional: true + resolution: + integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== + /extend/3.0.2: + dev: false + optional: true + resolution: + integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + /fast-deep-equal/3.1.3: + dev: false + optional: true + resolution: + integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + /fast-text-encoding/1.0.3: + dev: false + optional: true + resolution: + integrity: sha512-dtm4QZH9nZtcDt8qJiOH9fcQd1NAgi+K1O2DbE6GG1PPCK/BWfOH3idCTRQ4ImXRUOyopDEgDEnVEE7Y/2Wrig== + /faye-websocket/0.11.3: + dependencies: + websocket-driver: 0.7.4 + dev: false + engines: + node: '>=0.8.0' + resolution: + integrity: sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA== + /firebase-admin/9.6.0: + dependencies: + '@firebase/database': 0.8.3 + '@firebase/database-types': 0.6.1 + '@types/node': 10.17.56 + dicer: 0.3.0 + jsonwebtoken: 8.5.1 + node-forge: 0.10.0 + dev: false + engines: + node: '>=10.10.0' + optionalDependencies: + '@google-cloud/firestore': 4.9.9 + '@google-cloud/storage': 5.8.3 + resolution: + integrity: sha512-GNrxsQsZ6alz9u+uYmX84qcixxYQnfOrByxVgEHWiCI9JSCbMOQ/1Px2A6+Coz5zzFokTgXsHnIg+Qz7hMlNZg== /fs.realpath/1.0.0: dev: false resolution: @@ -350,6 +744,50 @@ packages: dev: false resolution: integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + /functional-red-black-tree/1.0.1: + dev: false + optional: true + resolution: + integrity: sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + /gaxios/4.2.0: + dependencies: + abort-controller: 3.0.0 + extend: 3.0.2 + https-proxy-agent: 5.0.0 + is-stream: 2.0.0 + node-fetch: 2.6.1 + dev: false + engines: + node: '>=10' + optional: true + resolution: + integrity: sha512-Ms7fNifGv0XVU+6eIyL9LB7RVESeML9+cMvkwGS70xyD6w2Z80wl6RiqiJ9k1KFlJCUTQqFFc8tXmPQfSKUe8g== + /gcp-metadata/4.2.1: + dependencies: + gaxios: 4.2.0 + json-bigint: 1.0.0 + dev: false + engines: + node: '>=10' + optional: true + resolution: + integrity: sha512-tSk+REe5iq/N+K+SK1XjZJUrFPuDqGZVzCy2vocIHIGmPlTGsa8owXMJwGkrXr73NO0AzhPW4MF2DEHz7P2AVw== + /gcs-resumable-upload/3.1.3: + dependencies: + abort-controller: 3.0.0 + configstore: 5.0.1 + extend: 3.0.2 + gaxios: 4.2.0 + google-auth-library: 7.0.4 + pumpify: 2.0.1 + stream-events: 1.0.5 + dev: false + engines: + node: '>=10' + hasBin: true + optional: true + resolution: + integrity: sha512-LjVrv6YVH0XqBr/iBW0JgRA1ndxhK6zfEFFJR4im51QVTj/4sInOXimY2evDZuSZ75D3bHxTaQAdXRukMc1y+w== /get-caller-file/2.0.5: dev: false engines: @@ -364,6 +802,13 @@ packages: dev: false resolution: integrity: sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== + /get-stream/6.0.0: + dev: false + engines: + node: '>=10' + optional: true + resolution: + integrity: sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg== /glob/7.1.6: dependencies: fs.realpath: 1.0.0 @@ -375,6 +820,86 @@ packages: dev: false resolution: integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + /google-auth-library/6.1.6: + dependencies: + arrify: 2.0.1 + base64-js: 1.5.1 + ecdsa-sig-formatter: 1.0.11 + fast-text-encoding: 1.0.3 + gaxios: 4.2.0 + gcp-metadata: 4.2.1 + gtoken: 5.2.1 + jws: 4.0.0 + lru-cache: 6.0.0 + dev: false + engines: + node: '>=10' + optional: true + resolution: + integrity: sha512-Q+ZjUEvLQj/lrVHF/IQwRo6p3s8Nc44Zk/DALsN+ac3T4HY/g/3rrufkgtl+nZ1TW7DNAw5cTChdVp4apUXVgQ== + /google-auth-library/7.0.4: + dependencies: + arrify: 2.0.1 + base64-js: 1.5.1 + ecdsa-sig-formatter: 1.0.11 + fast-text-encoding: 1.0.3 + gaxios: 4.2.0 + gcp-metadata: 4.2.1 + gtoken: 5.2.1 + jws: 4.0.0 + lru-cache: 6.0.0 + dev: false + engines: + node: '>=10' + optional: true + resolution: + integrity: sha512-o8irYyeijEiecTXeoEe8UKNEzV1X+uhR4b2oNdapDMZixypp0J+eHimGOyx5Joa3UAeokGngdtDLXtq9vDqG2Q== + /google-gax/2.11.2: + dependencies: + '@grpc/grpc-js': 1.2.12 + '@grpc/proto-loader': 0.5.6 + '@types/long': 4.0.1 + abort-controller: 3.0.0 + duplexify: 4.1.1 + fast-text-encoding: 1.0.3 + google-auth-library: 7.0.4 + is-stream-ended: 0.1.4 + node-fetch: 2.6.1 + protobufjs: 6.10.2 + retry-request: 4.1.3 + dev: false + engines: + node: '>=10' + hasBin: true + optional: true + resolution: + integrity: sha512-PNqXv7Oi5XBMgoMWVxLZHUidfMv7cPHrDSDXqLyEd6kY6pqFnVKC8jt2T1df4JPSc2+VLPdeo6L7X9mbdQG8Xw== + /google-p12-pem/3.0.3: + dependencies: + node-forge: 0.10.0 + dev: false + engines: + node: '>=10' + hasBin: true + optional: true + resolution: + integrity: sha512-wS0ek4ZtFx/ACKYF3JhyGe5kzH7pgiQ7J5otlumqR9psmWMYc+U9cErKlCYVYHoUaidXHdZ2xbo34kB+S+24hA== + /graceful-fs/4.2.6: + dev: false + optional: true + resolution: + integrity: sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== + /gtoken/5.2.1: + dependencies: + gaxios: 4.2.0 + google-p12-pem: 3.0.3 + jws: 4.0.0 + dev: false + engines: + node: '>=10' + optional: true + resolution: + integrity: sha512-OY0BfPKe3QnMsY9MzTHTSKn+Vl2l1CcLe6BwDEQj00mbbkl5nyQ/7EUREstg4fQNZ8iYE7br4JJ7TdKeDOPWmw== /has-symbols/1.0.2: dev: false engines: @@ -389,6 +914,43 @@ packages: node: '>= 0.4.0' resolution: integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + /hash-stream-validation/0.2.4: + dev: false + optional: true + resolution: + integrity: sha512-Gjzu0Xn7IagXVkSu9cSFuK1fqzwtLwFhNhVL8IFJijRNMgUttFbBSIAzKuSIrsFMO1+g1RlsoN49zPIbwPDMGQ== + /http-parser-js/0.5.3: + dev: false + resolution: + integrity: sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg== + /http-proxy-agent/4.0.1: + dependencies: + '@tootallnate/once': 1.1.2 + agent-base: 6.0.2 + debug: 4.3.1 + dev: false + engines: + node: '>= 6' + optional: true + resolution: + integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== + /https-proxy-agent/5.0.0: + dependencies: + agent-base: 6.0.2 + debug: 4.3.1 + dev: false + engines: + node: '>= 6' + optional: true + resolution: + integrity: sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== + /imurmurhash/0.1.4: + dev: false + engines: + node: '>=0.8.19' + optional: true + resolution: + integrity: sha1-khi5srkoojixPcT7a21XbyMUU+o= /inflight/1.0.6: dependencies: once: 1.4.0 @@ -419,6 +981,13 @@ packages: node: '>=8' resolution: integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + /is-obj/2.0.0: + dev: false + engines: + node: '>=8' + optional: true + resolution: + integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== /is-promise/2.2.2: dev: false resolution: @@ -432,6 +1001,23 @@ packages: node: '>= 0.4' resolution: integrity: sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg== + /is-stream-ended/0.1.4: + dev: false + optional: true + resolution: + integrity: sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw== + /is-stream/2.0.0: + dev: false + engines: + node: '>=8' + optional: true + resolution: + integrity: sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== + /is-typedarray/1.0.0: + dev: false + optional: true + resolution: + integrity: sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= /isarray/0.0.1: dev: false resolution: @@ -444,6 +1030,31 @@ packages: dev: false resolution: integrity: sha1-Fzb939lyTyijaCrcYjCufk6Weds= + /json-bigint/1.0.0: + dependencies: + bignumber.js: 9.0.1 + dev: false + optional: true + resolution: + integrity: sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ== + /jsonwebtoken/8.5.1: + dependencies: + jws: 3.2.2 + lodash.includes: 4.3.0 + lodash.isboolean: 3.0.3 + lodash.isinteger: 4.0.4 + lodash.isnumber: 3.0.3 + lodash.isplainobject: 4.0.6 + lodash.isstring: 4.0.1 + lodash.once: 4.1.1 + ms: 2.1.3 + semver: 5.7.1 + dev: false + engines: + node: '>=4' + npm: '>=1.4.28' + resolution: + integrity: sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w== /jstransformer/1.0.0: dependencies: is-promise: 2.2.2 @@ -451,14 +1062,133 @@ packages: dev: false resolution: integrity: sha1-7Yvwkh4vPx7U1cGkT2hwntJHIsM= + /jwa/1.4.1: + dependencies: + buffer-equal-constant-time: 1.0.1 + ecdsa-sig-formatter: 1.0.11 + safe-buffer: 5.2.1 + dev: false + resolution: + integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA== + /jwa/2.0.0: + dependencies: + buffer-equal-constant-time: 1.0.1 + ecdsa-sig-formatter: 1.0.11 + safe-buffer: 5.2.1 + dev: false + optional: true + resolution: + integrity: sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA== + /jws/3.2.2: + dependencies: + jwa: 1.4.1 + safe-buffer: 5.2.1 + dev: false + resolution: + integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA== + /jws/4.0.0: + dependencies: + jwa: 2.0.0 + safe-buffer: 5.2.1 + dev: false + optional: true + resolution: + integrity: sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg== + /lodash.camelcase/4.3.0: + dev: false + optional: true + resolution: + integrity: sha1-soqmKIorn8ZRA1x3EfZathkDMaY= + /lodash.includes/4.3.0: + dev: false + resolution: + integrity: sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8= + /lodash.isboolean/3.0.3: + dev: false + resolution: + integrity: sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY= + /lodash.isinteger/4.0.4: + dev: false + resolution: + integrity: sha1-YZwK89A/iwTDH1iChAt3sRzWg0M= + /lodash.isnumber/3.0.3: + dev: false + resolution: + integrity: sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w= + /lodash.isplainobject/4.0.6: + dev: false + resolution: + integrity: sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= + /lodash.isstring/4.0.1: + dev: false + resolution: + integrity: sha1-1SfftUVuynzJu5XV2ur4i6VKVFE= + /lodash.once/4.1.1: + dev: false + resolution: + integrity: sha1-DdOXEhPHxW34gJd9UEyI+0cal6w= /lodash/4.17.21: dev: false resolution: integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + /long/4.0.0: + dev: false + optional: true + resolution: + integrity: sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== + /lru-cache/6.0.0: + dependencies: + yallist: 4.0.0 + dev: false + engines: + node: '>=10' + optional: true + resolution: + integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + /make-dir/3.1.0: + dependencies: + semver: 6.3.0 + dev: false + engines: + node: '>=8' + optional: true + resolution: + integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== /make-error/1.3.6: dev: false resolution: integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + /mime-db/1.47.0: + dev: false + engines: + node: '>= 0.6' + optional: true + resolution: + integrity: sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw== + /mime-types/2.1.30: + dependencies: + mime-db: 1.47.0 + dev: false + engines: + node: '>= 0.6' + optional: true + resolution: + integrity: sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg== + /mime/2.5.2: + dev: false + engines: + node: '>=4.0.0' + hasBin: true + optional: true + resolution: + integrity: sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg== + /mimic-fn/2.1.0: + dev: false + engines: + node: '>=6' + optional: true + resolution: + integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== /minimatch/3.0.4: dependencies: brace-expansion: 1.1.11 @@ -472,12 +1202,34 @@ packages: hasBin: true resolution: integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + /ms/2.1.2: + dev: false + optional: true + resolution: + integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + /ms/2.1.3: + dev: false + resolution: + integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== /negotiator/0.6.2: dev: false engines: node: '>= 0.6' resolution: integrity: sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== + /node-fetch/2.6.1: + dev: false + engines: + node: 4.x || >=6.0.0 + optional: true + resolution: + integrity: sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== + /node-forge/0.10.0: + dev: false + engines: + node: '>= 6.0.0' + resolution: + integrity: sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== /noms/0.0.0: dependencies: inherits: 2.0.4 @@ -497,6 +1249,24 @@ packages: dev: false resolution: integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + /onetime/5.1.2: + dependencies: + mimic-fn: 2.1.0 + dev: false + engines: + node: '>=6' + optional: true + resolution: + integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + /p-limit/3.1.0: + dependencies: + yocto-queue: 0.1.0 + dev: false + engines: + node: '>=10' + optional: true + resolution: + integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== /packet-reader/1.0.0: dev: false resolution: @@ -570,12 +1340,6 @@ packages: dev: false resolution: integrity: sha512-YmuA56alyBq7M59vxVBfPJrGSozru8QAdoNlWuW3cz8l+UX3cWge0vTvjKhsSHSJpo3Bom8/Mm6hf0TR5GY0+w== - /pluralize/8.0.0: - dev: false - engines: - node: '>=4' - resolution: - integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== /postgres-array/2.0.0: dev: false engines: @@ -612,6 +1376,27 @@ packages: dev: false resolution: integrity: sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== + /protobufjs/6.10.2: + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/base64': 1.1.2 + '@protobufjs/codegen': 2.0.4 + '@protobufjs/eventemitter': 1.1.0 + '@protobufjs/fetch': 1.1.0 + '@protobufjs/float': 1.0.2 + '@protobufjs/inquire': 1.1.0 + '@protobufjs/path': 1.1.2 + '@protobufjs/pool': 1.1.0 + '@protobufjs/utf8': 1.1.0 + '@types/long': 4.0.1 + '@types/node': 13.13.48 + long: 4.0.0 + dev: false + hasBin: true + optional: true + requiresBuild: true + resolution: + integrity: sha512-27yj+04uF6ya9l+qfpH187aqEzfCF4+Uit0I9ZBQVqK09hk/SQzKa2MUqUpXaVa7LOFRg1TSSr3lVxGOk6c0SQ== /pug-attrs/3.0.0: dependencies: constantinople: 4.0.1 @@ -703,6 +1488,23 @@ packages: dev: false resolution: integrity: sha512-bp0I/hiK1D1vChHh6EfDxtndHji55XP/ZJKwsRqrz6lRia6ZC2OZbdAymlxdVFwd1L70ebrVJw4/eZ79skrIaw== + /pump/3.0.0: + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + dev: false + optional: true + resolution: + integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + /pumpify/2.0.1: + dependencies: + duplexify: 4.1.1 + inherits: 2.0.4 + pump: 3.0.0 + dev: false + optional: true + resolution: + integrity: sha512-m7KOje7jZxrmutanlkS1daj1dS6z6BgslzOXmcSEpIlCxM3VJH7lG5QLeck/6hgF6F4crFf01UtQmNsJfweTAw== /readable-stream/1.0.34: dependencies: core-util-is: 1.0.2 @@ -751,6 +1553,22 @@ packages: dev: false resolution: integrity: sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== + /retry-request/4.1.3: + dependencies: + debug: 4.3.1 + dev: false + engines: + node: '>=8.10.0' + optional: true + resolution: + integrity: sha512-QnRZUpuPNgX0+D1xVxul6DbJ9slvo4Rm6iV/dn63e048MvGbUZiKySVt6Tenp04JqmchxjiLltGerOJys7kJYQ== + /retry/0.12.0: + dev: false + engines: + node: '>= 4' + optional: true + resolution: + integrity: sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= /rimraf/3.0.2: dependencies: glob: 7.1.6 @@ -770,6 +1588,27 @@ packages: dev: false resolution: integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + /semver/5.7.1: + dev: false + hasBin: true + resolution: + integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + /semver/6.3.0: + dev: false + hasBin: true + optional: true + resolution: + integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + /signal-exit/3.0.3: + dev: false + optional: true + resolution: + integrity: sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== + /snakeize/0.1.0: + dev: false + optional: true + resolution: + integrity: sha1-EMCI2LWOsHazIpu1oE4jLOEmQi0= /source-map-support/0.5.19: dependencies: buffer-from: 1.1.1 @@ -807,6 +1646,18 @@ packages: node: '>=5.2.0' resolution: integrity: sha512-GmoNPxWDMkVpMFa9LVVzQZHF6EW3WKmBwL+4/GeILf2hFmix5Isxm7Amamo8o7bHiU0tC+wXsGcUXOxp8ChPaw== + /stream-events/1.0.5: + dependencies: + stubs: 3.0.0 + dev: false + optional: true + resolution: + integrity: sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg== + /stream-shift/1.0.1: + dev: false + optional: true + resolution: + integrity: sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== /streamsearch/0.1.2: dev: false engines: @@ -847,6 +1698,24 @@ packages: node: '>=8' resolution: integrity: sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + /stubs/3.0.0: + dev: false + optional: true + resolution: + integrity: sha1-6NK6H6nJBXAwPAMLaQD31fiavls= + /teeny-request/7.0.1: + dependencies: + http-proxy-agent: 4.0.1 + https-proxy-agent: 5.0.0 + node-fetch: 2.6.1 + stream-events: 1.0.5 + uuid: 8.3.2 + dev: false + engines: + node: '>=10' + optional: true + resolution: + integrity: sha512-sasJmQ37klOlplL4Ia/786M5YlOcoLGQyq2TE4WHSRupbAuDaQW0PfVxV4MtdBtRJ4ngzS+1qim8zP6Zp35qCw== /through2/2.0.5: dependencies: readable-stream: 2.3.7 @@ -881,10 +1750,21 @@ packages: typescript: '>=2.7' resolution: integrity: sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg== + /tslib/1.14.1: + dev: false + resolution: + integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== /tweetnacl/0.14.5: dev: false resolution: integrity: sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + /typedarray-to-buffer/3.1.5: + dependencies: + is-typedarray: 1.0.0 + dev: false + optional: true + resolution: + integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== /typescript/4.2.4: dev: false engines: @@ -892,6 +1772,15 @@ packages: hasBin: true resolution: integrity: sha512-V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg== + /unique-string/2.0.0: + dependencies: + crypto-random-string: 2.0.0 + dev: false + engines: + node: '>=8' + optional: true + resolution: + integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== /untildify/4.0.0: dev: false engines: @@ -913,6 +1802,22 @@ packages: node: '>=0.10.0' resolution: integrity: sha1-YU9/v42AHwu18GYfWy9XhXUOTwk= + /websocket-driver/0.7.4: + dependencies: + http-parser-js: 0.5.3 + safe-buffer: 5.2.1 + websocket-extensions: 0.1.4 + dev: false + engines: + node: '>=0.8.0' + resolution: + integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== + /websocket-extensions/0.1.4: + dev: false + engines: + node: '>=0.8.0' + resolution: + integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== /with/7.0.2: dependencies: '@babel/parser': 7.13.15 @@ -938,6 +1843,23 @@ packages: dev: false resolution: integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + /write-file-atomic/3.0.3: + dependencies: + imurmurhash: 0.1.4 + is-typedarray: 1.0.0 + signal-exit: 3.0.3 + typedarray-to-buffer: 3.1.5 + dev: false + optional: true + resolution: + integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== + /xdg-basedir/4.0.0: + dev: false + engines: + node: '>=8' + optional: true + resolution: + integrity: sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== /xtend/4.0.2: dev: false engines: @@ -950,6 +1872,11 @@ packages: node: '>=10' resolution: integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + /yallist/4.0.0: + dev: false + optional: true + resolution: + integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== /yargs-parser/20.2.7: dev: false engines: @@ -976,12 +1903,19 @@ packages: node: '>=6' resolution: integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + /yocto-queue/0.1.0: + dev: false + engines: + node: '>=10' + optional: true + resolution: + integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== specifiers: '@extollo/cli': ^0.4.1 '@extollo/di': ^0.4.2 - '@extollo/i18n': ^0.1.1 '@extollo/lib': ^0.1.2 '@extollo/orm': ^0.1.1 '@extollo/util': ^0.3.1 copyfiles: ^2.4.1 + firebase-admin: ^9.6.0 typescript: ^4.1.3 diff --git a/src/Units.extollo.ts b/src/Units.extollo.ts index 2bcf2b0..2692b66 100644 --- a/src/Units.extollo.ts +++ b/src/Units.extollo.ts @@ -1,17 +1,17 @@ import {Config, Controllers, HTTPServer, Files, Middlewares, Routing, Unit} from '@extollo/lib' import {Database, Models} from "@extollo/orm"; import {CommandLine} from "@extollo/cli"; -import {Internationalization} from "@extollo/i18n"; +import {FirebaseUnit} from "./app/units/FirebaseUnit"; export const Units = [ Config, + FirebaseUnit, Files, CommandLine, Controllers, Middlewares, Database, Models, - Internationalization, Routing, HTTPServer, diff --git a/src/app/configs/app.config.ts b/src/app/configs/app.config.ts index 57042be..d068279 100644 --- a/src/app/configs/app.config.ts +++ b/src/app/configs/app.config.ts @@ -1,5 +1,15 @@ import { env } from '@extollo/lib' +import * as fs from "fs" export default { name: env('APP_NAME', 'Extollo'), + + firebase: { + credentials: JSON.parse( + fs.readFileSync(env('FIREBASE_CREDENTIALS')) + .toString('utf-8') + ), + + defaultRTDB: env('FIREBASE_DEFAULT_RTDB', 'https://loc-chain-default-rtdb.firebaseio.com'), + } } diff --git a/src/app/http/controllers/main/Home.controller.ts b/src/app/http/controllers/main/Home.controller.ts index af5a47f..9f562a9 100644 --- a/src/app/http/controllers/main/Home.controller.ts +++ b/src/app/http/controllers/main/Home.controller.ts @@ -1,21 +1,16 @@ import {Controller, view, Session} from '@extollo/lib'; import {Inject, Injectable} from "@extollo/di"; -import {Locale} from "@extollo/i18n" @Injectable() export class Home extends Controller { @Inject() protected readonly session!: Session; - @Inject() - protected readonly locale!: Locale; - public welcome() { this.session.set('app_visits', this.session.get('app_visits', 0) + 1) return view('welcome', { app_visits: this.session.get('app_visits'), - locale: this.locale.helper(), }) } } diff --git a/src/app/units/FirebaseUnit.ts b/src/app/units/FirebaseUnit.ts new file mode 100644 index 0000000..f7efbf4 --- /dev/null +++ b/src/app/units/FirebaseUnit.ts @@ -0,0 +1,37 @@ +import {Singleton, Inject} from "@extollo/di" +import {Unit, Logging, Config} from "@extollo/lib" +import * as firebase from "firebase-admin" + +/** + * FirebaseUnit Unit + * --------------------------------------- + * Fetch credentials from config and setup the firebase-admin connection. + */ +@Singleton() +export class FirebaseUnit extends Unit { + protected _firebase = firebase; + + @Inject() + protected readonly logging!: Logging + + @Inject() + protected readonly config!: Config + + get() { + return this._firebase + } + + /** Called on app start. */ + public async up() { + this.logging.info('Initializing Firebase application credentials...') + this._firebase.initializeApp({ + credential: firebase.credential.cert(this.config.get('app.firebase.credentials')), + databaseURL: this.config.get('app.firebase.defaultRTDB'), + }) + } + + /** Called on app shutdown. */ + public async down() { + + } +}