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() {
+
+ }
+}