diff options
| author | Adam Soltys <[email protected]> | 2023-03-21 00:06:39 -0700 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2023-03-21 00:06:39 -0700 |
| commit | 469c384e0930dd2b7c0f01c03cca95f86f05277d (patch) | |
| tree | 17b24286259596987e74913d72e4733ec58c4f1d | |
| parent | c99665a0a0ac79176726169a49d5f9ebaae325bc (diff) | |
| download | coinos-server-469c384e0930dd2b7c0f01c03cca95f86f05277d.tar.gz coinos-server-469c384e0930dd2b7c0f01c03cca95f86f05277d.zip | |
ses mail
| -rw-r--r-- | package.json | 2 | ||||
| -rw-r--r-- | pnpm-lock.yaml | 803 | ||||
| -rw-r--r-- | routes/email.js | 45 | ||||
| -rw-r--r-- | routes/payments.js | 17 |
4 files changed, 787 insertions, 80 deletions
diff --git a/package.json b/package.json index ddfbb225..f5d158d1 100644 --- a/package.json +++ b/package.json @@ -7,12 +7,12 @@ "dev": "nodemon index.js" }, "dependencies": { + "@aws-sdk/client-ses": "^3.295.0", "@fastify/multipart": "^7.1.2", "@fastify/passport": "^2.2.0", "@fastify/secure-session": "^5.2.0", "@fastify/static": "^6.5.0", "@fastify/websocket": "^7.0.1", - "@sendgrid/mail": "^7.7.0", "bcrypt": "^5.0.0", "bech32": "^2.0.0", "clightning-client": "^0.1.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9d2c3fec..5b6163b7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,12 +1,12 @@ lockfileVersion: 5.4 specifiers: + '@aws-sdk/client-ses': ^3.295.0 '@fastify/multipart': ^7.1.2 '@fastify/passport': ^2.2.0 '@fastify/secure-session': ^5.2.0 '@fastify/static': ^6.5.0 '@fastify/websocket': ^7.0.1 - '@sendgrid/mail': ^7.7.0 bcrypt: ^5.0.0 bech32: ^2.0.0 clightning-client: ^0.1.2 @@ -34,12 +34,12 @@ specifiers: ws: ^7.4.6 dependencies: + '@aws-sdk/client-ses': 3.295.0 '@fastify/multipart': 7.2.0 '@fastify/passport': 2.2.0 '@fastify/secure-session': 5.2.0 '@fastify/static': 6.5.0 '@fastify/websocket': 7.1.0 - '@sendgrid/mail': 7.7.0 bcrypt: 5.1.0 bech32: 2.0.0 clightning-client: 0.1.4 @@ -70,6 +70,732 @@ devDependencies: packages: + /@aws-crypto/ie11-detection/3.0.0: + resolution: {integrity: sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==} + dependencies: + tslib: 1.14.1 + dev: false + + /@aws-crypto/sha256-browser/3.0.0: + resolution: {integrity: sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==} + dependencies: + '@aws-crypto/ie11-detection': 3.0.0 + '@aws-crypto/sha256-js': 3.0.0 + '@aws-crypto/supports-web-crypto': 3.0.0 + '@aws-crypto/util': 3.0.0 + '@aws-sdk/types': 3.295.0 + '@aws-sdk/util-locate-window': 3.295.0 + '@aws-sdk/util-utf8-browser': 3.259.0 + tslib: 1.14.1 + dev: false + + /@aws-crypto/sha256-js/3.0.0: + resolution: {integrity: sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==} + dependencies: + '@aws-crypto/util': 3.0.0 + '@aws-sdk/types': 3.295.0 + tslib: 1.14.1 + dev: false + + /@aws-crypto/supports-web-crypto/3.0.0: + resolution: {integrity: sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==} + dependencies: + tslib: 1.14.1 + dev: false + + /@aws-crypto/util/3.0.0: + resolution: {integrity: sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==} + dependencies: + '@aws-sdk/types': 3.295.0 + '@aws-sdk/util-utf8-browser': 3.259.0 + tslib: 1.14.1 + dev: false + + /@aws-sdk/abort-controller/3.295.0: + resolution: {integrity: sha512-uohsGotvQ8RTgVZ9sQt0y3L60jBEYgN8MOn3Seaku8HpIIo9c6iIfkF0bMXZeFI2sCxqbrBDbsPKYWxr7rd8LA==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.295.0 + tslib: 2.5.0 + dev: false + + /@aws-sdk/client-ses/3.295.0: + resolution: {integrity: sha512-vwD3cJmA5o8qTOuC7ihDbKmVqAYWPFyQrVZvhvCQRvjwejUsVjKcThY7+BYc69iw0suyztsqAClBkfzQ94jh/w==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-crypto/sha256-browser': 3.0.0 + '@aws-crypto/sha256-js': 3.0.0 + '@aws-sdk/client-sts': 3.295.0 + '@aws-sdk/config-resolver': 3.295.0 + '@aws-sdk/credential-provider-node': 3.295.0 + '@aws-sdk/fetch-http-handler': 3.295.0 + '@aws-sdk/hash-node': 3.295.0 + '@aws-sdk/invalid-dependency': 3.295.0 + '@aws-sdk/middleware-content-length': 3.295.0 + '@aws-sdk/middleware-endpoint': 3.295.0 + '@aws-sdk/middleware-host-header': 3.295.0 + '@aws-sdk/middleware-logger': 3.295.0 + '@aws-sdk/middleware-recursion-detection': 3.295.0 + '@aws-sdk/middleware-retry': 3.295.0 + '@aws-sdk/middleware-serde': 3.295.0 + '@aws-sdk/middleware-signing': 3.295.0 + '@aws-sdk/middleware-stack': 3.295.0 + '@aws-sdk/middleware-user-agent': 3.295.0 + '@aws-sdk/node-config-provider': 3.295.0 + '@aws-sdk/node-http-handler': 3.295.0 + '@aws-sdk/protocol-http': 3.295.0 + '@aws-sdk/smithy-client': 3.295.0 + '@aws-sdk/types': 3.295.0 + '@aws-sdk/url-parser': 3.295.0 + '@aws-sdk/util-base64': 3.295.0 + '@aws-sdk/util-body-length-browser': 3.295.0 + '@aws-sdk/util-body-length-node': 3.295.0 + '@aws-sdk/util-defaults-mode-browser': 3.295.0 + '@aws-sdk/util-defaults-mode-node': 3.295.0 + '@aws-sdk/util-endpoints': 3.295.0 + '@aws-sdk/util-retry': 3.295.0 + '@aws-sdk/util-user-agent-browser': 3.295.0 + '@aws-sdk/util-user-agent-node': 3.295.0 + '@aws-sdk/util-utf8': 3.295.0 + '@aws-sdk/util-waiter': 3.295.0 + fast-xml-parser: 4.1.2 + tslib: 2.5.0 + transitivePeerDependencies: + - aws-crt + dev: false + + /@aws-sdk/client-sso-oidc/3.295.0: + resolution: {integrity: sha512-HijuG2OAmTy0Wa3JHgIMBrBlsWC6GjWkH8KcRIGbFUH2nW8LFh3gBKuB1oubZ4wAdOIBFNECWA6FKFayFlKmew==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-crypto/sha256-browser': 3.0.0 + '@aws-crypto/sha256-js': 3.0.0 + '@aws-sdk/config-resolver': 3.295.0 + '@aws-sdk/fetch-http-handler': 3.295.0 + '@aws-sdk/hash-node': 3.295.0 + '@aws-sdk/invalid-dependency': 3.295.0 + '@aws-sdk/middleware-content-length': 3.295.0 + '@aws-sdk/middleware-endpoint': 3.295.0 + '@aws-sdk/middleware-host-header': 3.295.0 + '@aws-sdk/middleware-logger': 3.295.0 + '@aws-sdk/middleware-recursion-detection': 3.295.0 + '@aws-sdk/middleware-retry': 3.295.0 + '@aws-sdk/middleware-serde': 3.295.0 + '@aws-sdk/middleware-stack': 3.295.0 + '@aws-sdk/middleware-user-agent': 3.295.0 + '@aws-sdk/node-config-provider': 3.295.0 + '@aws-sdk/node-http-handler': 3.295.0 + '@aws-sdk/protocol-http': 3.295.0 + '@aws-sdk/smithy-client': 3.295.0 + '@aws-sdk/types': 3.295.0 + '@aws-sdk/url-parser': 3.295.0 + '@aws-sdk/util-base64': 3.295.0 + '@aws-sdk/util-body-length-browser': 3.295.0 + '@aws-sdk/util-body-length-node': 3.295.0 + '@aws-sdk/util-defaults-mode-browser': 3.295.0 + '@aws-sdk/util-defaults-mode-node': 3.295.0 + '@aws-sdk/util-endpoints': 3.295.0 + '@aws-sdk/util-retry': 3.295.0 + '@aws-sdk/util-user-agent-browser': 3.295.0 + '@aws-sdk/util-user-agent-node': 3.295.0 + '@aws-sdk/util-utf8': 3.295.0 + tslib: 2.5.0 + transitivePeerDependencies: + - aws-crt + dev: false + + /@aws-sdk/client-sso/3.295.0: + resolution: {integrity: sha512-uNEchm1LAQHP2/S21jz0NxCe8yqUe3J1jZG3N/dwx7uKVndHomTmjBsClGxT8IL9hC/Xl57G+fEpTCrFMjUR2g==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-crypto/sha256-browser': 3.0.0 + '@aws-crypto/sha256-js': 3.0.0 + '@aws-sdk/config-resolver': 3.295.0 + '@aws-sdk/fetch-http-handler': 3.295.0 + '@aws-sdk/hash-node': 3.295.0 + '@aws-sdk/invalid-dependency': 3.295.0 + '@aws-sdk/middleware-content-length': 3.295.0 + '@aws-sdk/middleware-endpoint': 3.295.0 + '@aws-sdk/middleware-host-header': 3.295.0 + '@aws-sdk/middleware-logger': 3.295.0 + '@aws-sdk/middleware-recursion-detection': 3.295.0 + '@aws-sdk/middleware-retry': 3.295.0 + '@aws-sdk/middleware-serde': 3.295.0 + '@aws-sdk/middleware-stack': 3.295.0 + '@aws-sdk/middleware-user-agent': 3.295.0 + '@aws-sdk/node-config-provider': 3.295.0 + '@aws-sdk/node-http-handler': 3.295.0 + '@aws-sdk/protocol-http': 3.295.0 + '@aws-sdk/smithy-client': 3.295.0 + '@aws-sdk/types': 3.295.0 + '@aws-sdk/url-parser': 3.295.0 + '@aws-sdk/util-base64': 3.295.0 + '@aws-sdk/util-body-length-browser': 3.295.0 + '@aws-sdk/util-body-length-node': 3.295.0 + '@aws-sdk/util-defaults-mode-browser': 3.295.0 + '@aws-sdk/util-defaults-mode-node': 3.295.0 + '@aws-sdk/util-endpoints': 3.295.0 + '@aws-sdk/util-retry': 3.295.0 + '@aws-sdk/util-user-agent-browser': 3.295.0 + '@aws-sdk/util-user-agent-node': 3.295.0 + '@aws-sdk/util-utf8': 3.295.0 + tslib: 2.5.0 + transitivePeerDependencies: + - aws-crt + dev: false + + /@aws-sdk/client-sts/3.295.0: + resolution: {integrity: sha512-KrLnG5EcXvry9tmsTAONhlj60F0+Z7P2PtT0XDsS8pLayHAtd9lKXsf14DOSQa9+LbPLMFbfLbuSwvPYvgxMzg==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-crypto/sha256-browser': 3.0.0 + '@aws-crypto/sha256-js': 3.0.0 + '@aws-sdk/config-resolver': 3.295.0 + '@aws-sdk/credential-provider-node': 3.295.0 + '@aws-sdk/fetch-http-handler': 3.295.0 + '@aws-sdk/hash-node': 3.295.0 + '@aws-sdk/invalid-dependency': 3.295.0 + '@aws-sdk/middleware-content-length': 3.295.0 + '@aws-sdk/middleware-endpoint': 3.295.0 + '@aws-sdk/middleware-host-header': 3.295.0 + '@aws-sdk/middleware-logger': 3.295.0 + '@aws-sdk/middleware-recursion-detection': 3.295.0 + '@aws-sdk/middleware-retry': 3.295.0 + '@aws-sdk/middleware-sdk-sts': 3.295.0 + '@aws-sdk/middleware-serde': 3.295.0 + '@aws-sdk/middleware-signing': 3.295.0 + '@aws-sdk/middleware-stack': 3.295.0 + '@aws-sdk/middleware-user-agent': 3.295.0 + '@aws-sdk/node-config-provider': 3.295.0 + '@aws-sdk/node-http-handler': 3.295.0 + '@aws-sdk/protocol-http': 3.295.0 + '@aws-sdk/smithy-client': 3.295.0 + '@aws-sdk/types': 3.295.0 + '@aws-sdk/url-parser': 3.295.0 + '@aws-sdk/util-base64': 3.295.0 + '@aws-sdk/util-body-length-browser': 3.295.0 + '@aws-sdk/util-body-length-node': 3.295.0 + '@aws-sdk/util-defaults-mode-browser': 3.295.0 + '@aws-sdk/util-defaults-mode-node': 3.295.0 + '@aws-sdk/util-endpoints': 3.295.0 + '@aws-sdk/util-retry': 3.295.0 + '@aws-sdk/util-user-agent-browser': 3.295.0 + '@aws-sdk/util-user-agent-node': 3.295.0 + '@aws-sdk/util-utf8': 3.295.0 + fast-xml-parser: 4.1.2 + tslib: 2.5.0 + transitivePeerDependencies: + - aws-crt + dev: false + + /@aws-sdk/config-resolver/3.295.0: + resolution: {integrity: sha512-oSGdGAjmOesxGAT/Ce8P7Gdvf4KVQjasKqmlAMTXsUBxh8Mx8BQH9V3UCiCdfJ2Vx7H4pqN4Y8WcAQkje4uvbQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/signature-v4': 3.295.0 + '@aws-sdk/types': 3.295.0 + '@aws-sdk/util-config-provider': 3.295.0 + '@aws-sdk/util-middleware': 3.295.0 + tslib: 2.5.0 + dev: false + + /@aws-sdk/credential-provider-env/3.295.0: + resolution: {integrity: sha512-YjUDJwhgwUgFYT4fJQVCMA1Abw2Jw1xC3EeNxeV2L54CvM9PlbFuRa5qJehePKoTLyva4bjLsMXsensXrEEIGQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/property-provider': 3.295.0 + '@aws-sdk/types': 3.295.0 + tslib: 2.5.0 + dev: false + + /@aws-sdk/credential-provider-imds/3.295.0: + resolution: {integrity: sha512-+tOVCZi7LUG2pvjK9P35hhXL1cZTJsbGtrMsIxrlUODjKEhht4RSiQH7zT324x6MkYby9iLjU4SUejyKBKDhYQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/node-config-provider': 3.295.0 + '@aws-sdk/property-provider': 3.295.0 + '@aws-sdk/types': 3.295.0 + '@aws-sdk/url-parser': 3.295.0 + tslib: 2.5.0 + dev: false + + /@aws-sdk/credential-provider-ini/3.295.0: + resolution: {integrity: sha512-XU3UqVVxxjyXcZ2Wkx3CM+/eLUM/EDlqJkLU6nl3FDGzPZeXC3G9Z9ZywGBo7dpRbBpDfpzSSukJisiGLTwg2w==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/credential-provider-env': 3.295.0 + '@aws-sdk/credential-provider-imds': 3.295.0 + '@aws-sdk/credential-provider-process': 3.295.0 + '@aws-sdk/credential-provider-sso': 3.295.0 + '@aws-sdk/credential-provider-web-identity': 3.295.0 + '@aws-sdk/property-provider': 3.295.0 + '@aws-sdk/shared-ini-file-loader': 3.295.0 + '@aws-sdk/types': 3.295.0 + tslib: 2.5.0 + transitivePeerDependencies: + - aws-crt + dev: false + + /@aws-sdk/credential-provider-node/3.295.0: + resolution: {integrity: sha512-dU+nDJJKCyx/YBKeGgSuFM1okdoNVGWLTzrkPohPGy5+KnPaFCscrqRe2ni0ihQscguwSFXygV5SQoYNp1FGwA==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/credential-provider-env': 3.295.0 + '@aws-sdk/credential-provider-imds': 3.295.0 + '@aws-sdk/credential-provider-ini': 3.295.0 + '@aws-sdk/credential-provider-process': 3.295.0 + '@aws-sdk/credential-provider-sso': 3.295.0 + '@aws-sdk/credential-provider-web-identity': 3.295.0 + '@aws-sdk/property-provider': 3.295.0 + '@aws-sdk/shared-ini-file-loader': 3.295.0 + '@aws-sdk/types': 3.295.0 + tslib: 2.5.0 + transitivePeerDependencies: + - aws-crt + dev: false + + /@aws-sdk/credential-provider-process/3.295.0: + resolution: {integrity: sha512-efA41QAcKlb/hbDZVXnUApMPjOnu8Zj58o0WqHAdcpu7qSDzZdsmJ6dqknAbj14cyDjzXaexuN+wubGUAL9IoQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/property-provider': 3.295.0 + '@aws-sdk/shared-ini-file-loader': 3.295.0 + '@aws-sdk/types': 3.295.0 + tslib: 2.5.0 + dev: false + + /@aws-sdk/credential-provider-sso/3.295.0: + resolution: {integrity: sha512-cJoCLbg3ud3/NK7otcBHkRaPvdsVEyX9tryLIPuj8rgagFWneexVh4Kzs9k+PtRN764TjVFzITw99LxBf0fe1w==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/client-sso': 3.295.0 + '@aws-sdk/property-provider': 3.295.0 + '@aws-sdk/shared-ini-file-loader': 3.295.0 + '@aws-sdk/token-providers': 3.295.0 + '@aws-sdk/types': 3.295.0 + tslib: 2.5.0 + transitivePeerDependencies: + - aws-crt + dev: false + + /@aws-sdk/credential-provider-web-identity/3.295.0: + resolution: {integrity: sha512-rBDhRYh4PiOnvz0M7AbYZZCiaPm5JDkM0xzGHEKKiW/A1wS2Gd2qbyEIK4APQ7vZMX+IJaSBBabfqm+vX5Y1kw==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/property-provider': 3.295.0 + '@aws-sdk/types': 3.295.0 + tslib: 2.5.0 + dev: false + + /@aws-sdk/fetch-http-handler/3.295.0: + resolution: {integrity: sha512-xs274LSLeF2313dAaq7gvm/m0e0tb0/Bt2vew4Lj2zP6YNRtuNlStfSNhYHHuIkOqjTwLeAmKdK+cWFnXKQPTA==} + dependencies: + '@aws-sdk/protocol-http': 3.295.0 + '@aws-sdk/querystring-builder': 3.295.0 + '@aws-sdk/types': 3.295.0 + '@aws-sdk/util-base64': 3.295.0 + tslib: 2.5.0 + dev: false + + /@aws-sdk/hash-node/3.295.0: + resolution: {integrity: sha512-jLq6QXUpvtYYu9+K8BECXpw7U52RBrewj/t/ALUVJsEhtwpx16K1WzMqwcVhkQ8mc/xQiki/T4eFSThODZAlcw==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.295.0 + '@aws-sdk/util-buffer-from': 3.295.0 + '@aws-sdk/util-utf8': 3.295.0 + tslib: 2.5.0 + dev: false + + /@aws-sdk/invalid-dependency/3.295.0: + resolution: {integrity: sha512-ctXFKW4qnhLqZ0+qyEK1l0TOYQYwd2+vjj6wdjAiHuKoH6yIMqJ97LOT7oq3drvMQbnXa4I2jCOSFVuNSnzJ7Q==} + dependencies: + '@aws-sdk/types': 3.295.0 + tslib: 2.5.0 + dev: false + + /@aws-sdk/is-array-buffer/3.295.0: + resolution: {integrity: sha512-SCIt10cr5dud7hvwveU4wkLjvkGssJ3GrcbHCds2NwI+JHmpcaaNYLAqi305JAuT29T36U5ssTFDSmrrEOcfag==} + engines: {node: '>=14.0.0'} + dependencies: + tslib: 2.5.0 + dev: false + + /@aws-sdk/middleware-content-length/3.295.0: + resolution: {integrity: sha512-XzrVPuO1JwxJx5PFHP9eMZLP9zyQxPZ8PM9gTWdOgoc1BMtxCkDZ3HLOnJtcfmfbz8nwSt2/H+wlBEXaRrf7Fg==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/protocol-http': 3.295.0 + '@aws-sdk/types': 3.295.0 + tslib: 2.5.0 + dev: false + + /@aws-sdk/middleware-endpoint/3.295.0: + resolution: {integrity: sha512-MFRW6XyZABAOeFPu2CC37h+ol6ADaKs8fqqJrv9gtNb13r6c0UeztQFwI6V3tLlZwX7zzH7HcwYFKyks5VO6Xw==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/middleware-serde': 3.295.0 + '@aws-sdk/protocol-http': 3.295.0 + '@aws-sdk/signature-v4': 3.295.0 + '@aws-sdk/types': 3.295.0 + '@aws-sdk/url-parser': 3.295.0 + '@aws-sdk/util-config-provider': 3.295.0 + '@aws-sdk/util-middleware': 3.295.0 + tslib: 2.5.0 + dev: false + + /@aws-sdk/middleware-host-header/3.295.0: + resolution: {integrity: sha512-CjdC8eCILSuNHTF2AZOtFta5lMvLMM3bXBTto0LKYeHQixgBHmRSgcShfBTiWEPgIgeNSFEjMbKX6bLnHSnODg==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/protocol-http': 3.295.0 + '@aws-sdk/types': 3.295.0 + tslib: 2.5.0 + dev: false + + /@aws-sdk/middleware-logger/3.295.0: + resolution: {integrity: sha512-dbv0VTA7Dh6ZCkmCs0U7/ssZiDtHDI7Bq3zab+RxEyLEE4wr73bW6occq579U/QQJHOZQ6EBdvYig8ntRNlzVg==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.295.0 + tslib: 2.5.0 + dev: false + + /@aws-sdk/middleware-recursion-detection/3.295.0: + resolution: {integrity: sha512-9Wjb8Y7H0ctL8gIKtGFwXhpHb3c2UGGi2P9I+p2PJwW08rDnMlOpUItY0v49SbZ+6uct1VNBs6iJ+jkv0h5MEQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/protocol-http': 3.295.0 + '@aws-sdk/types': 3.295.0 + tslib: 2.5.0 + dev: false + + /@aws-sdk/middleware-retry/3.295.0: + resolution: {integrity: sha512-IdVX86VaDSSPcGI1JJM8lffabOMmGC9TUpskKkKdFnLW6eKtFohye+hlf2h6Y/2wdvoqCdi6XZyQX9WPJHiHtw==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/protocol-http': 3.295.0 + '@aws-sdk/service-error-classification': 3.295.0 + '@aws-sdk/types': 3.295.0 + '@aws-sdk/util-middleware': 3.295.0 + '@aws-sdk/util-retry': 3.295.0 + tslib: 2.5.0 + uuid: 8.3.2 + dev: false + + /@aws-sdk/middleware-sdk-sts/3.295.0: + resolution: {integrity: sha512-QTHR+ZXAmii8XsbdRrqJWn6LVeGiRcFfGlniIb1YEjw1p2FU5kpayq8N1SLLtj3JWmE61Bpn0J+LAQmfjbCqFA==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/middleware-signing': 3.295.0 + '@aws-sdk/property-provider': 3.295.0 + '@aws-sdk/protocol-http': 3.295.0 + '@aws-sdk/signature-v4': 3.295.0 + '@aws-sdk/types': 3.295.0 + tslib: 2.5.0 + dev: false + + /@aws-sdk/middleware-serde/3.295.0: + resolution: {integrity: sha512-LAKtKNKdu6Si7rmLatAq87LSa27mR6HUZ7tZHD2E4SQWOoNpS4ikKfUfATkbjC2GOfbrBYmFmQgBvpghYYZ3jw==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.295.0 + tslib: 2.5.0 + dev: false + + /@aws-sdk/middleware-signing/3.295.0: + resolution: {integrity: sha512-LcNzGqtpo9sdWJ9mKtgjragncbin/Ynbz/pklH/HcIIi45w8ZVrhLBpW1iQZ0MBKyDacAAeWtXxKHy55DkHlvg==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/property-provider': 3.295.0 + '@aws-sdk/protocol-http': 3.295.0 + '@aws-sdk/signature-v4': 3.295.0 + '@aws-sdk/types': 3.295.0 + '@aws-sdk/util-middleware': 3.295.0 + tslib: 2.5.0 + dev: false + + /@aws-sdk/middleware-stack/3.295.0: + resolution: {integrity: sha512-65HahosleRbpNgu6/XkABcrBmZHudRYTNpyKRfSY18QPKVQv3PRgRqv/goHrc6DHo8cxAliBoMciN88Ali1ufQ==} + engines: {node: '>=14.0.0'} + dependencies: + tslib: 2.5.0 + dev: false + + /@aws-sdk/middleware-user-agent/3.295.0: + resolution: {integrity: sha512-11MGXHFxmXgQx6aAFshLqHm3US7awXMP1Hq3IAu6j+GXSdkpkIojh/LlzRbSUftAhh23C5oQpgOkqs6fox4xCw==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/protocol-http': 3.295.0 + '@aws-sdk/types': 3.295.0 + '@aws-sdk/util-endpoints': 3.295.0 + tslib: 2.5.0 + dev: false + + /@aws-sdk/node-config-provider/3.295.0: + resolution: {integrity: sha512-6lkCmPMmXn6CF1qQHkE/Ii88ge/Mz9MWX+Krj3ICdBRwdMqm4LGzc9qG+bJeqbVI3tPO3djmL+b4SW4a3pvKsw==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/property-provider': 3.295.0 + '@aws-sdk/shared-ini-file-loader': 3.295.0 + '@aws-sdk/types': 3.295.0 + tslib: 2.5.0 + dev: false + + /@aws-sdk/node-http-handler/3.295.0: + resolution: {integrity: sha512-Ga3vp/IY3LgzTdlSTAcxncYebE0lpQAdgxnko+z1i67OaI8DqNlTL8vdYBoHDaFOb9E6ErShLytVoHAEuJ5TpA==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/abort-controller': 3.295.0 + '@aws-sdk/protocol-http': 3.295.0 + '@aws-sdk/querystring-builder': 3.295.0 + '@aws-sdk/types': 3.295.0 + tslib: 2.5.0 + dev: false + + /@aws-sdk/property-provider/3.295.0: + resolution: {integrity: sha512-5hxI1W36JWugYaBng7hKH2IxDtNohk0KMsz6wgyHVxTcsrO9VohlYa+5rHntmt3SbQAyy7n5ft9/vb1Nb5TGCw==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.295.0 + tslib: 2.5.0 + dev: false + + /@aws-sdk/protocol-http/3.295.0: + resolution: {integrity: sha512-mDl1jfNDtOFXKQrkiTY0dbTwC9LLjmmAmE8TpxXC1v6JbOihVrARiyPdumZWP4J/71YAim1ASS6JlQHw/GuAqg==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.295.0 + tslib: 2.5.0 + dev: false + + /@aws-sdk/querystring-builder/3.295.0: + resolution: {integrity: sha512-zgFb2pSkxOCHVusZpPjQVIwmQZf59MQEYJETk42OKaigItGTHjap9DrFzKo6+SrHeyEpJLxlZKSz5up4Hulwdw==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.295.0 + '@aws-sdk/util-uri-escape': 3.295.0 + tslib: 2.5.0 + dev: false + + /@aws-sdk/querystring-parser/3.295.0: + resolution: {integrity: sha512-bcm8IBHmflH1e6EHznScJbfvAmNZqwZtC6QaynNk6no/YYKr5Swm+GHqxurKBm86qCYIOoSvdoq8tyhUjXnh4Q==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.295.0 + tslib: 2.5.0 + dev: false + + /@aws-sdk/service-error-classification/3.295.0: + resolution: {integrity: sha512-zqGxXkZUxPD7E0FJXKHZLuJwr02zg/Ux4d+elT/MUTYT9eKupmG2S5586/hZdjUxGGA7gmMMJr92mjrLVJUAkQ==} + engines: {node: '>=14.0.0'} + dev: false + + /@aws-sdk/shared-ini-file-loader/3.295.0: + resolution: {integrity: sha512-LF9+jk37/VPoIyadeb+Ls0Tqda6dauo3uG7FDfg7qdiOpdyNRuFaIZE//MTSG5mk4ExAwjkFsnslZaw31hbbUw==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.295.0 + tslib: 2.5.0 + dev: false + + /@aws-sdk/signature-v4/3.295.0: + resolution: {integrity: sha512-yS00sIwWEnPB4aHZWJZpXVL2/wbwrymxbPZw/Xq0JXbR9+RXhzENBqw7C3d7E11K1xLnoTYlVqcJhNuNXgyeZg==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/is-array-buffer': 3.295.0 + '@aws-sdk/types': 3.295.0 + '@aws-sdk/util-hex-encoding': 3.295.0 + '@aws-sdk/util-middleware': 3.295.0 + '@aws-sdk/util-uri-escape': 3.295.0 + '@aws-sdk/util-utf8': 3.295.0 + tslib: 2.5.0 + dev: false + + /@aws-sdk/smithy-client/3.295.0: + resolution: {integrity: sha512-6Ifq+szMeX6MjWkEEiXvQGm7moY5Wt6WfFi+dMLkZmPdOEWYB0Cr0EBpY605WHWGz702CpFLvM/z6rUkvtak5g==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/middleware-stack': 3.295.0 + '@aws-sdk/types': 3.295.0 + tslib: 2.5.0 + dev: false + + /@aws-sdk/token-providers/3.295.0: + resolution: {integrity: sha512-/6PsplDacgBoQxFBbKYMW9ZlEeTHHdAm+xE6V+qjEsc0YXy32LwuFllfihryXLjWftrC3kr8EiehLU6d+9JaKA==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/client-sso-oidc': 3.295.0 + '@aws-sdk/property-provider': 3.295.0 + '@aws-sdk/shared-ini-file-loader': 3.295.0 + '@aws-sdk/types': 3.295.0 + tslib: 2.5.0 + transitivePeerDependencies: + - aws-crt + dev: false + + /@aws-sdk/types/3.295.0: + resolution: {integrity: sha512-flwibucy5+PshdFLeMCClMqV3eFmjUDhcLkEUeQvVgyhGxJPIrU3ntGAfqz27bvk47ZVX5TUdCG5JdxuUaRO+A==} + engines: {node: '>=14.0.0'} + dependencies: + tslib: 2.5.0 + dev: false + + /@aws-sdk/url-parser/3.295.0: + resolution: {integrity: sha512-hev5gbi+EWHLaFNgVpoNeNTaJpqfa9ev0SvqgvCPqGlIdUnt3cP9t1Mc8jvx2kUk8ebPtrrq6cp8ZslfxoFeVA==} + dependencies: + '@aws-sdk/querystring-parser': 3.295.0 + '@aws-sdk/types': 3.295.0 + tslib: 2.5.0 + dev: false + + /@aws-sdk/util-base64/3.295.0: + resolution: {integrity: sha512-z1r40BsBiOTALnzASvLb4qutGwPpL+jH2UKTCV5WJLXZFMzRnpZaRfeZGE8lMJ/i0+jv9H9G1FmVzE8UgB4rhw==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/util-buffer-from': 3.295.0 + tslib: 2.5.0 + dev: false + + /@aws-sdk/util-body-length-browser/3.295.0: + resolution: {integrity: sha512-NbG4/RSHV1VueStPRclSo5zRjNUmcDlNAs29sniZF+YaN0+Ad7hEdu/YgJw39shBfUaurz2Wv0pufU3cxE5Tng==} + dependencies: + tslib: 2.5.0 + dev: false + + /@aws-sdk/util-body-length-node/3.295.0: + resolution: {integrity: sha512-dvGf8VBmrT66lM0n6P/h7wnlHS4Atafyivyl8f4TUCMvRdpqryvvrtnX6yYcq3T7VKQmas/2SOlgDvcrhGXaiw==} + engines: {node: '>=14.0.0'} + dependencies: + tslib: 2.5.0 + dev: false + + /@aws-sdk/util-buffer-from/3.295.0: + resolution: {integrity: sha512-5ezVEITQnrQKn+CU9qfZHgRp2nrrbX0Clmlm9aiNjAEQEPHY33tWl0t6n8h8yU+IpGiNRMWBVC4aSJaE5NA1mA==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/is-array-buffer': 3.295.0 + tslib: 2.5.0 + dev: false + + /@aws-sdk/util-config-provider/3.295.0: + resolution: {integrity: sha512-/5Dl1aV2yI8YQjqwmg4RTnl/E9NmNsx7HIwBZt+dTcOrM0LMUwczQBFFcLyqCj/qv5y+VsvLoAAA/OiBT7hb3w==} + engines: {node: '>=14.0.0'} + dependencies: + tslib: 2.5.0 + dev: false + + /@aws-sdk/util-defaults-mode-browser/3.295.0: + resolution: {integrity: sha512-QqVyl4Sxi9Umn2+TdhZR8fHQRWWs2361JCylig1GzH+ud+8jinDS6tLtWxhzrea2XdKGb4xqjTC4AhCuBqgSmA==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/property-provider': 3.295.0 + '@aws-sdk/types': 3.295.0 + bowser: 2.11.0 + tslib: 2.5.0 + dev: false + + /@aws-sdk/util-defaults-mode-node/3.295.0: + resolution: {integrity: sha512-R1e94v6HMsUec8/P2tJmab5fYsT9X3+Kh1rMzCEA27V+kAD88eKStzE26Yb1kQDAC+Fg3Fe1KS1bg4dmQKUSVg==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/config-resolver': 3.295.0 + '@aws-sdk/credential-provider-imds': 3.295.0 + '@aws-sdk/node-config-provider': 3.295.0 + '@aws-sdk/property-provider': 3.295.0 + '@aws-sdk/types': 3.295.0 + tslib: 2.5.0 + dev: false + + /@aws-sdk/util-endpoints/3.295.0: + resolution: {integrity: sha512-WZR6jAD++7Wb6ER1SM/U82xU+OVWihcc8V90AzTWyDb0JPeKuogwWokV1aHXiGaQGbWULr1wY1R3wthhvEs3Bg==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.295.0 + tslib: 2.5.0 + dev: false + + /@aws-sdk/util-hex-encoding/3.295.0: + resolution: {integrity: sha512-XJcoVo41kHzhe28PBm/rqt5mdCp8R6abwiW9ug1dA6FOoPUO8kBUxDv6xaOmA2hfRvd2ocFfBXaUCBqUowkGcQ==} + engines: {node: '>=14.0.0'} + dependencies: + tslib: 2.5.0 + dev: false + + /@aws-sdk/util-locate-window/3.295.0: + resolution: {integrity: sha512-d/s+zhUx5Kh4l/ecMP/TBjzp1GR/g89Q4nWH6+wH5WgdHsK+LG+vmsk6mVNuP/8wsCofYG4NBqp5Ulbztbm9QA==} + engines: {node: '>=14.0.0'} + dependencies: + tslib: 2.5.0 + dev: false + + /@aws-sdk/util-middleware/3.295.0: + resolution: {integrity: sha512-t6UdduLHV97IRZmd1YA0v5HCwerz+OXxDF8lLK0G7qihde0jv6tq5w8fTTjgehDFKM0UGUiaahOtjEcRK7F2Aw==} + engines: {node: '>=14.0.0'} + dependencies: + tslib: 2.5.0 + dev: false + + /@aws-sdk/util-retry/3.295.0: + resolution: {integrity: sha512-3xp3A5XtPWGsN9aLuzM3mB4hpM3nZJ5JJiGFgUXu/CTP2ahipbVbMwtRpIUjYDh1kvdjoaDJatEVJ7JhJrXFew==} + engines: {node: '>= 14.0.0'} + dependencies: + '@aws-sdk/service-error-classification': 3.295.0 + tslib: 2.5.0 + dev: false + + /@aws-sdk/util-uri-escape/3.295.0: + resolution: {integrity: sha512-1H5DcyIoXF8XcPBWf7wzHt0l+TW2EoR8Oq4gsVrPTQkHMTVclC2Yn8EF3gc4arwVBzwLulI9LMBE2L8fexGfTQ==} + engines: {node: '>=14.0.0'} + dependencies: + tslib: 2.5.0 + dev: false + + /@aws-sdk/util-user-agent-browser/3.295.0: + resolution: {integrity: sha512-lSU80r6yMwSDLkBZ0900G/kHLz/QgXewPXz56Xnq7NHWu7YliY6fzT1zWHPRGwcfCctTGMTWw+10ZSu/0Xv9nw==} + dependencies: + '@aws-sdk/types': 3.295.0 + bowser: 2.11.0 + tslib: 2.5.0 + dev: false + + /@aws-sdk/util-user-agent-node/3.295.0: + resolution: {integrity: sha512-EVt/4nWTYLbS6llhjE4sn2tn1mBlifyK6ezAse5kr6boNG3dJt6Y7gHAXXglkmblw2bflxqgOaKj5YCcZFUSyQ==} + engines: {node: '>=14.0.0'} + peerDependencies: + aws-crt: '>=1.0.0' + peerDependenciesMeta: + aws-crt: + optional: true + dependencies: + '@aws-sdk/node-config-provider': 3.295.0 + '@aws-sdk/types': 3.295.0 + tslib: 2.5.0 + dev: false + + /@aws-sdk/util-utf8-browser/3.259.0: + resolution: {integrity: sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==} + dependencies: + tslib: 2.5.0 + dev: false + + /@aws-sdk/util-utf8/3.295.0: + resolution: {integrity: sha512-ITN8v3F63ZkA4sdmCtSbS/mhav4F0MEAiXDAUXtMJLNqVtaVcyQST4i9vNmPpIVthAPAtP0QjyF2tq/Di8bxtQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/util-buffer-from': 3.295.0 + tslib: 2.5.0 + dev: false + + /@aws-sdk/util-waiter/3.295.0: + resolution: {integrity: sha512-7FHJhSqfBSGsbNUtXyJvu0cnKCtVoQ1HtVZ2OWvW9V0Vyi++ifm6UFvHecrQPocfXu4WoOEhWktZ78iUdCA/MA==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/abort-controller': 3.295.0 + '@aws-sdk/types': 3.295.0 + tslib: 2.5.0 + dev: false + /@bleskomat/form/1.2.6: resolution: {integrity: sha512-xAMj1zfYWydo2K2U30Tn1R8p2hOEdRF9o0d/QPYHjGNQkgx6rHv4lgf6/UXOptjUvPKEIRtxXJBl7fYZ8nnRzA==} dependencies: @@ -277,33 +1003,6 @@ packages: '@redis/client': 1.3.0 dev: false - /@sendgrid/client/7.7.0: - resolution: {integrity: sha512-SxH+y8jeAQSnDavrTD0uGDXYIIkFylCo+eDofVmZLQ0f862nnqbC3Vd1ej6b7Le7lboyzQF6F7Fodv02rYspuA==} - engines: {node: 6.* || 8.* || >=10.*} - dependencies: - '@sendgrid/helpers': 7.7.0 - axios: 0.26.1 - transitivePeerDependencies: - - debug - dev: false - - /@sendgrid/helpers/7.7.0: - resolution: {integrity: sha512-3AsAxfN3GDBcXoZ/y1mzAAbKzTtUZ5+ZrHOmWQ279AuaFXUNCh9bPnRpN504bgveTqoW+11IzPg3I0WVgDINpw==} - engines: {node: '>= 6.0.0'} - dependencies: - deepmerge: 4.3.0 - dev: false - - /@sendgrid/mail/7.7.0: - resolution: {integrity: sha512-5+nApPE9wINBvHSUxwOxkkQqM/IAAaBYoP9hw7WwgDNQPxraruVqHizeTitVtKGiqWCKm2mnjh4XGN3fvFLqaw==} - engines: {node: 6.* || 8.* || >=10.*} - dependencies: - '@sendgrid/client': 7.7.0 - '@sendgrid/helpers': 7.7.0 - transitivePeerDependencies: - - debug - dev: false - /@sindresorhus/is/5.3.0: resolution: {integrity: sha512-CX6t4SYQ37lzxicAqsBtxA3OseeoVrh9cSJ5PFYam0GksYlupRfy1A+Q4aYD3zvcfECLc0zO2u+ZnR2UYKvCrw==} engines: {node: '>=14.16'} @@ -466,14 +1165,6 @@ packages: - supports-color dev: false - /axios/0.26.1: - resolution: {integrity: sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==} - dependencies: - follow-redirects: 1.15.2 - transitivePeerDependencies: - - debug - dev: false - /balanced-match/1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} dev: false @@ -581,6 +1272,10 @@ packages: secp256k1: 4.0.3 dev: false + /bowser/2.11.0: + resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==} + dev: false + /brace-expansion/1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: @@ -876,11 +1571,6 @@ packages: engines: {node: '>=4.0.0'} dev: false - /deepmerge/4.3.0: - resolution: {integrity: sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==} - engines: {node: '>=0.10.0'} - dev: false - /defer-to-connect/2.0.1: resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} engines: {node: '>=10'} @@ -1072,6 +1762,13 @@ packages: resolution: {integrity: sha512-qKRta6N7BWEFVlyonVY/V+BMLgFqktCUV0QjT259ekAIlbVrMaFnFLxJ4s/JPl4tou56S1BzPufI60bLe29fHA==} dev: false + /fast-xml-parser/4.1.2: + resolution: {integrity: sha512-CDYeykkle1LiA/uqQyNwYpFbyF6Axec6YapmpUP+/RHWIoR1zKjocdvNaTsxCxZzQ6v9MLXaSYm9Qq0thv0DHg==} + hasBin: true + dependencies: + strnum: 1.0.5 + dev: false + /fastify-plugin/3.0.1: resolution: {integrity: sha512-qKcDXmuZadJqdTm6vlCqioEbyewF60b/0LOFCcYN1B6BIZGlYJumWWOYs70SFYLDAH4YqdE1cxH/RKMG7rFxgA==} dev: false @@ -1152,16 +1849,6 @@ packages: safe-regex2: 2.0.0 dev: false - /follow-redirects/1.15.2: - resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - dev: false - /form-data-encoder/2.1.4: resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==} engines: {node: '>= 14.17'} @@ -2494,6 +3181,10 @@ packages: engines: {node: '>=8'} dev: false + /strnum/1.0.5: + resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==} + dev: false + /strtok3/7.0.0: resolution: {integrity: sha512-pQ+V+nYQdC5H3Q7qBZAz/MO6lwGhoC2gOAjuouGf/VO0m7vQRh8QNMl2Uf6SwAtzZ9bOw3UIeBukEGNJl5dtXQ==} engines: {node: '>=14.16'} @@ -2592,6 +3283,14 @@ packages: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} dev: false + /tslib/1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + dev: false + + /tslib/2.5.0: + resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} + dev: false + /tunnel-agent/0.6.0: resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} dependencies: diff --git a/routes/email.js b/routes/email.js index 1b551864..1f7ce4a0 100644 --- a/routes/email.js +++ b/routes/email.js @@ -1,7 +1,8 @@ import { bail } from "$lib/utils"; import got from "got"; import config from "$config"; -import sendgrid from "@sendgrid/mail"; +import { SESClient, CloneReceiptRuleSetCommand } from "@aws-sdk/client-ses"; +import { SendEmailCommand } from "@aws-sdk/client-ses"; export default { async send({ body }, res) { @@ -11,26 +12,44 @@ export default { .post("https://www.google.com/recaptcha/api/siteverify", { form: { secret, - response, - }, + response + } }) .json(); if (success) { delete body.token; - sendgrid.setApiKey(config.sendgrid); - const msg = { - to: "[email protected]", - from: "[email protected]", - subject: body.subject || "Email Signup", - text: JSON.stringify(body), - html: JSON.stringify(body), - }; - await sendgrid.send(msg); + let client = new SESClient({ region: "us-east-2" }); + await client.send( + new SendEmailCommand({ + Destination: { + CcAddresses: [], + ToAddresses: ["[email protected]"] + }, + Message: { + Body: { + Html: { + Charset: "UTF-8", + Data: JSON.stringify(body) + }, + Text: { + Charset: "UTF-8", + Data: JSON.stringify(body) + } + }, + Subject: { + Charset: "UTF-8", + Data: body.subject || "Email Signup" + } + }, + Source: "[email protected]" + }) + ); + res.send({ ok: true }); } else { bail(res, "failed captcha"); } - }, + } }; diff --git a/routes/payments.js b/routes/payments.js index 1a5bcf76..3c318f2d 100644 --- a/routes/payments.js +++ b/routes/payments.js @@ -404,22 +404,11 @@ export default { async fix({ body: { uid, username }, user }, res) { try { if (!user.admin) fail("unauthorized"); - - if (username) uid = await g(`user:${username.toLowerCase()}`); - ({ username } = await g(`user:${uid}`)); - let balance = await g(`balance:${uid}`); - - let payments = await db.lRange(`${uid}:payments`, 0, -1); - - let total = 0; - for (let pid of payments) { - let p = await g(`payment:${pid}`); - total += p.amount; - if (p.amount < 0) total -= (p.fee || 0) + (p.ourfee || 0); + for await (let k of db.scanIterator({ MATCH: "balance:*" })) { + let bal = await g(k); + if (bal < 0) s(k, 0); } - l("corrected balance", username, uid, balance, total); - await s(`balance:${uid}`, total); res.send("ok"); } catch (e) { console.log(e); |
