From 8982e72969002cfd5d35a65b39376e0730ef37bb Mon Sep 17 00:00:00 2001 From: adjoly Date: Thu, 24 Jul 2025 12:17:59 +0200 Subject: [PATCH 01/11] =?UTF-8?q?=E3=80=8C=F0=9F=8F=97=EF=B8=8F=E3=80=8D?= =?UTF-8?q?=20wip:=20work=20in=20progress,=20not=20done=20yet.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Justfile | 2 + flake.lock | 6 +- flake.nix | 14 +- package.json | 3 +- pnpm-lock.yaml | 648 +++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 663 insertions(+), 10 deletions(-) diff --git a/Justfile b/Justfile index b71e040..6a884a6 100644 --- a/Justfile +++ b/Justfile @@ -1,3 +1,5 @@ +set dotenv-load + @default: just -l diff --git a/flake.lock b/flake.lock index 44afde9..782aaad 100644 --- a/flake.lock +++ b/flake.lock @@ -2,11 +2,11 @@ "nodes": { "nixpkgs": { "locked": { - "lastModified": 1751271578, - "narHash": "sha256-P/SQmKDu06x8yv7i0s8bvnnuJYkxVGBWLWHaU+tt4YY=", + "lastModified": 1753250450, + "narHash": "sha256-i+CQV2rPmP8wHxj0aq4siYyohHwVlsh40kV89f3nw1s=", "owner": "nixos", "repo": "nixpkgs", - "rev": "3016b4b15d13f3089db8a41ef937b13a9e33a8df", + "rev": "fc02ee70efb805d3b2865908a13ddd4474557ecf", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index c50d37f..62eb6a2 100644 --- a/flake.nix +++ b/flake.nix @@ -33,18 +33,20 @@ nixd nixfmt-rfc-style + solc + vscode-solidity-server typescript-language-server nodejs_22 pnpm just ]; shellHook = '' - if [ ! -d node_modules/ ]; then - echo Installing node env - pnpm install - fi - export PATH+=:$(pwd)/node_modules/.bin - echo entering ft_trans env + if [ ! -d node_modules/ ]; then + echo Installing node env + pnpm install + fi + export PATH+=:$(pwd)/node_modules/.bin + echo entering ft_trans env ''; }; } diff --git a/package.json b/package.json index 671f7c1..149bcc0 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,8 @@ "fastify": "^5.4.0", "fastify-cli": "^7.4.0", "google-auth-library": "^10.1.0", - "prom-client": "^15.1.3" + "prom-client": "^15.1.3", + "solhint": "^6.0.0" }, "type": "module", "devDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 788206f..8c12749 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -41,6 +41,9 @@ importers: prom-client: specifier: ^15.1.3 version: 15.1.3 + solhint: + specifier: ^6.0.0 + version: 6.0.0(typescript@5.8.3) devDependencies: '@tailwindcss/vite': specifier: ^4.1.11 @@ -64,6 +67,14 @@ packages: resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} + '@babel/code-frame@7.27.1': + resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.27.1': + resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} + engines: {node: '>=6.9.0'} + '@esbuild/aix-ppc64@0.25.6': resolution: {integrity: sha512-ShbM/3XxwuxjFiuVBHA+d3j5dyac0aEVVq1oluIDf71hUw0aRF59dV/efUsIwFnR6m8JNM2FjZOzmaZ8yG61kw==} engines: {node: '>=18'} @@ -250,6 +261,10 @@ packages: '@fastify/proxy-addr@5.0.0': resolution: {integrity: sha512-37qVVA1qZ5sgH7KpHkkC4z9SK6StIsIcOmpjvMPXNb3vx2GQxhZocogVYbr2PbbeLCQxYIPDok307xEvRZOzGA==} + '@humanwhocodes/momoa@2.0.4': + resolution: {integrity: sha512-RE815I4arJFtt+FVeU1Tgp9/Xvecacji8w/V6XtXsWWH/wz/eNkNbhb+ny/+PlVZjV0rxQpRSQKNKE3lcktHEA==} + engines: {node: '>=10.10.0'} + '@isaacs/fs-minipass@4.0.1': resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} engines: {node: '>=18.0.0'} @@ -275,6 +290,18 @@ packages: resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} engines: {node: '>=8.0.0'} + '@pnpm/config.env-replace@1.1.0': + resolution: {integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==} + engines: {node: '>=12.22.0'} + + '@pnpm/network.ca-file@1.0.2': + resolution: {integrity: sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==} + engines: {node: '>=12.22.0'} + + '@pnpm/npm-conf@2.3.1': + resolution: {integrity: sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==} + engines: {node: '>=12'} + '@rollup/rollup-android-arm-eabi@4.44.2': resolution: {integrity: sha512-g0dF8P1e2QYPOj1gu7s/3LVP6kze9A7m6x0BZ9iTdXK8N5c2V7cpBKHV3/9A4Zd8xxavdhK0t4PnqjkqVmUc9Q==} cpu: [arm] @@ -375,6 +402,17 @@ packages: cpu: [x64] os: [win32] + '@sindresorhus/is@5.6.0': + resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==} + engines: {node: '>=14.16'} + + '@solidity-parser/parser@0.20.2': + resolution: {integrity: sha512-rbu0bzwNvMcwAjH86hiEAcOeRI2EeK8zCkHDrFykh/Al8mvJeFmjy3UrE7GYQjNwOgbGUUtCn5/k8CB8zIu7QA==} + + '@szmarczak/http-timer@5.0.1': + resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} + engines: {node: '>=14.16'} + '@tailwindcss/node@4.1.11': resolution: {integrity: sha512-yzhzuGRmv5QyU9qLNg4GTlYI6STedBWRE7NjxP45CsFYYq9taI0zJXZBMqIC/c8fViNLhmrbpSFS57EoxUmD6Q==} @@ -468,6 +506,9 @@ packages: '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + '@types/http-cache-semantics@4.0.4': + resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} + abstract-logging@2.0.1: resolution: {integrity: sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==} @@ -475,6 +516,11 @@ packages: resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} engines: {node: '>= 14'} + ajv-errors@1.0.1: + resolution: {integrity: sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==} + peerDependencies: + ajv: '>=5.0.0' + ajv-formats@3.0.1: resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} peerDependencies: @@ -483,16 +529,37 @@ packages: ajv: optional: true + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + ajv@8.17.1: resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} + antlr4@4.13.2: + resolution: {integrity: sha512-QiVbZhyy4xAZ17UPEuG3YTOt8ZaoeOR1CvEAqrEsDBsOqINslaB147i9xqljZqoyf5S+EUlGStaj+t22LT9MOg==} + engines: {node: '>=16'} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + asn1.js@5.4.1: resolution: {integrity: sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==} + ast-parents@0.0.1: + resolution: {integrity: sha512-XHusKxKz3zoYk1ic8Un640joHbFMhbqneyoZfoKnEGtf2ey9Uh/IdpcQplODdO/kENaMIWsD0nJm4+wX3UNLHA==} + + astral-regex@2.0.0: + resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} + engines: {node: '>=8'} + asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} @@ -506,6 +573,9 @@ packages: axios@1.10.0: resolution: {integrity: sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw==} + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + base32.js@0.1.0: resolution: {integrity: sha512-n3TkB02ixgBOhTvANakDb4xaMXnYUVkNoRFJjQflcqMQhyEKxEHdj3E6N8t8sUQ0mjH/3/JxzlXuz3ul/J90pQ==} engines: {node: '>=0.12.0'} @@ -517,6 +587,12 @@ packages: resolution: {integrity: sha512-cU8v/EGSrnH+HnxV2z0J7/blxH8gq7Xh2JFT6Aroax7UohdmiJJlxApMxtKfuI7z68NvvVcmR78k2LbT6efhRg==} engines: {node: '>= 18'} + better-ajv-errors@2.0.2: + resolution: {integrity: sha512-1cLrJXEq46n0hjV8dDYwg9LKYjDb3KbeW7nZTv4kvfoDD9c2DXHIE31nxM+Y/cIfXMggLUfmxbm6h/JoM/yotA==} + engines: {node: '>= 18.20.6'} + peerDependencies: + ajv: 4.11.8 - 8 + better-sqlite3@12.2.0: resolution: {integrity: sha512-eGbYq2CT+tos1fBwLQ/tkBt9J5M3JEHjku4hbvQUePCckkvVf14xWj+1m7dGoK81M/fOjFT7yM9UMeKT/+vFLQ==} engines: {node: 20.x || 22.x || 23.x || 24.x} @@ -536,16 +612,31 @@ packages: bn.js@4.12.2: resolution: {integrity: sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==} + brace-expansion@2.0.2: + resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + buffer-equal-constant-time@1.0.1: resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} buffer@5.7.1: resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + cacheable-lookup@7.0.0: + resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==} + engines: {node: '>=14.16'} + + cacheable-request@10.2.14: + resolution: {integrity: sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==} + engines: {node: '>=14.16'} + call-bind-apply-helpers@1.0.2: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} engines: {node: '>= 0.4'} + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} @@ -578,13 +669,29 @@ packages: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} + commander@10.0.1: + resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} + engines: {node: '>=14'} + commist@3.2.0: resolution: {integrity: sha512-4PIMoPniho+LqXmpS5d3NuGYncG6XWlkBSVGiWycL22dd42OYdUGil2CWuzklaJoNxyxUSpO4MKIBU94viWNAw==} + config-chain@1.1.13: + resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} + cookie@1.0.2: resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==} engines: {node: '>=18'} + cosmiconfig@8.3.6: + resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + data-uri-to-buffer@4.0.1: resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} engines: {node: '>= 12'} @@ -609,6 +716,10 @@ packages: resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} engines: {node: '>=4.0.0'} + defer-to-connect@2.0.1: + resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} + engines: {node: '>=10'} + delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} @@ -636,6 +747,9 @@ packages: ecdsa-sig-formatter@1.0.11: resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + end-of-stream@1.4.5: resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} @@ -646,6 +760,9 @@ packages: env-schema@6.0.1: resolution: {integrity: sha512-WRD40Q25pP4NUbI3g3CNU5PPzcaiX7YYcPwiCZlfR4qGsKmTlckRixgHww0/fOXiXSNKA87pwshzq0ULTK/48A==} + error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + es-define-property@1.0.1: resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} engines: {node: '>= 0.4'} @@ -683,6 +800,12 @@ packages: fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + fast-diff@1.3.0: + resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + fast-json-stringify@6.0.1: resolution: {integrity: sha512-s7SJE83QKBZwg54dIbD5rCtzOBVD43V1ReWXXYqBgwCwHLYAAT0RQc/FmrQglXqWPpz6omtryJQOau5jI4Nrvg==} @@ -758,6 +881,10 @@ packages: debug: optional: true + form-data-encoder@2.1.4: + resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==} + engines: {node: '>= 14.17'} + form-data@4.0.4: resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==} engines: {node: '>= 6'} @@ -769,6 +896,13 @@ packages: fs-constants@1.0.0: resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} + fs-extra@11.3.0: + resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==} + engines: {node: '>=14.14'} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -797,9 +931,18 @@ packages: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + github-from-package@0.0.0: resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} + glob@8.1.0: + resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} + engines: {node: '>=12'} + deprecated: Glob versions prior to v9 are no longer supported + google-auth-library@10.1.0: resolution: {integrity: sha512-GspVjZj1RbyRWpQ9FbAXMKjFGzZwDKnUHi66JJ+tcjcu5/xYAP1pdlWotCuIkMwjfVsxxDvsGZXGLzRt72D0sQ==} engines: {node: '>=18'} @@ -812,6 +955,13 @@ packages: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} + got@12.6.1: + resolution: {integrity: sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==} + engines: {node: '>=14.16'} + + graceful-fs@4.2.10: + resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} + graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} @@ -838,6 +988,13 @@ packages: help-me@5.0.0: resolution: {integrity: sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==} + http-cache-semantics@4.2.0: + resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} + + http2-wrapper@2.2.1: + resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==} + engines: {node: '>=10.19.0'} + https-proxy-agent@7.0.6: resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} engines: {node: '>= 14'} @@ -845,6 +1002,18 @@ packages: ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} @@ -855,11 +1024,18 @@ packages: resolution: {integrity: sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==} engines: {node: '>= 10'} + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + is-docker@2.2.1: resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} engines: {node: '>=8'} hasBin: true + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + isbinaryfile@4.0.10: resolution: {integrity: sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==} engines: {node: '>= 8.0.0'} @@ -872,21 +1048,55 @@ packages: resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} engines: {node: '>=10'} + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + json-bigint@1.0.0: resolution: {integrity: sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==} + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + json-schema-ref-resolver@2.0.1: resolution: {integrity: sha512-HG0SIB9X4J8bwbxCbnd5FfPEbcXAJYTi1pBJeP/QPON+w8ovSME8iRG+ElHNxZNX2Qh6eYn1GdzJFS4cDFfx0Q==} + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + + jsonpointer@5.0.1: + resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} + engines: {node: '>=0.10.0'} + jwa@2.0.1: resolution: {integrity: sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==} jws@4.0.0: resolution: {integrity: sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==} + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + latest-version@7.0.0: + resolution: {integrity: sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==} + engines: {node: '>=14.16'} + + leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + light-my-request@6.6.0: resolution: {integrity: sha512-CHYbu8RtboSIoVsHZ6Ye4cj4Aw/yg2oAFimlF7mNvfDV192LR7nDiKtSIfCuLT7KokPSTn/9kfVLm5OGN0A28A==} @@ -954,10 +1164,23 @@ packages: resolution: {integrity: sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==} engines: {node: '>= 12.0.0'} + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + locate-path@3.0.0: resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} engines: {node: '>=6'} + lodash.truncate@4.4.2: + resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + lowercase-keys@3.0.0: + resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + magic-string@0.30.17: resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} @@ -980,9 +1203,17 @@ packages: resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} engines: {node: '>=10'} + mimic-response@4.0.0: + resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + minimalistic-assert@1.0.1: resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} + minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} @@ -1037,6 +1268,10 @@ packages: resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} hasBin: true + normalize-url@8.0.2: + resolution: {integrity: sha512-Ee/R3SyN4BuynXcnTaekmaVdbDAEiNrHqjQIA37mHU8G9pf7aaAD4ZX3XjBLo6rsdcxA/gtkcNYZLt30ACgynw==} + engines: {node: '>=14.16'} + obliterator@2.0.5: resolution: {integrity: sha512-42CPE9AhahZRsMNslczq0ctAEtqk8Eka26QofnqC346BZdHDySk3LWka23LI7ULIw11NmltpiLagIq8gBozxTw==} @@ -1047,6 +1282,10 @@ packages: once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + p-cancelable@3.0.0: + resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==} + engines: {node: '>=12.20'} + p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} @@ -1059,10 +1298,26 @@ packages: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} + package-json@8.1.1: + resolution: {integrity: sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==} + engines: {node: '>=14.16'} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + path-exists@3.0.0: resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} engines: {node: '>=4'} + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -1088,6 +1343,10 @@ packages: resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==} engines: {node: '>=8'} + pluralize@8.0.0: + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} + engines: {node: '>=4'} + postcss@8.5.6: resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} @@ -1097,6 +1356,11 @@ packages: engines: {node: '>=10'} hasBin: true + prettier@2.8.8: + resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} + engines: {node: '>=10.13.0'} + hasBin: true + process-warning@4.0.1: resolution: {integrity: sha512-3c2LzQ3rY9d0hc1emcsHhfT9Jwz0cChib/QN89oME2R451w5fy3f0afAhERFZAwrbDU43wk12d0ORBpDVME50Q==} @@ -1107,15 +1371,26 @@ packages: resolution: {integrity: sha512-6ZiOBfCywsD4k1BN9IX0uZhF+tJkV8q8llP64G5Hajs4JOeVLPCwpPVcpXy3BwYiUGgyJzsJJQeOIv7+hDSq8g==} engines: {node: ^16 || ^18 || >=20} + proto-list@1.2.4: + resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} + proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} pump@3.0.3: resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==} + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + quick-format-unescaped@4.0.4: resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} + quick-lru@5.1.1: + resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} + engines: {node: '>=10'} + rc@1.2.8: resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} hasBin: true @@ -1132,14 +1407,33 @@ packages: resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} engines: {node: '>= 12.13.0'} + registry-auth-token@5.1.0: + resolution: {integrity: sha512-GdekYuwLXLxMuFTwAPg5UKGLW/UXzQrZvH/Zj791BQif5T05T0RsaLfHc9q3ZOKi7n+BoprPD9mJ0O0k4xzUlw==} + engines: {node: '>=14'} + + registry-url@6.0.1: + resolution: {integrity: sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==} + engines: {node: '>=12'} + require-from-string@2.0.2: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} + resolve-alpn@1.2.1: + resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + resolve-from@5.0.0: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} + responselike@3.0.0: + resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==} + engines: {node: '>=14.16'} + ret@0.5.0: resolution: {integrity: sha512-I1XxrZSQ+oErkRR4jYbAyEEu2I0avBvvMM5JN+6EBprOGRCs63ENqZ3vjavq8fBw2+62G5LF5XelKwuJpcvcxw==} engines: {node: '>=10'} @@ -1189,6 +1483,14 @@ packages: simple-get@4.0.1: resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} + slice-ansi@4.0.0: + resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} + engines: {node: '>=10'} + + solhint@6.0.0: + resolution: {integrity: sha512-PQGfwFqfeYdebi2tEG1fhVfMjqSzbW3Noz+LYf8UusKe5nkikCghdgEjYQPcGfFZj4snlVyJQt//AaxkubOtVQ==} + hasBin: true + sonic-boom@4.2.0: resolution: {integrity: sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==} @@ -1206,9 +1508,17 @@ packages: steed@1.1.3: resolution: {integrity: sha512-EUkci0FAUiE4IvGTSKcDJIQ/eRUP2JJb56+fvZ4sdnguLTqIdKjSxUe138poW8mkvKWXW2sFPrgTsxqoISnmoA==} + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + strip-json-comments@2.0.1: resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} engines: {node: '>=0.10.0'} @@ -1221,6 +1531,10 @@ packages: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} + table@6.9.0: + resolution: {integrity: sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==} + engines: {node: '>=10.0.0'} + tailwindcss@4.1.11: resolution: {integrity: sha512-2E9TBm6MDD/xKYe+dvJZAmg3yxIEDNRc0jwlNyDg/4Fil2QcSLjFKGVff0lAf1jjeaArlG/M75Ey/EYr/OJtBA==} @@ -1242,6 +1556,9 @@ packages: tdigest@0.1.2: resolution: {integrity: sha512-+G0LLgjjo9BZX2MfdvPfH+MKLCrxlXSYec5DaPYP1fe6Iyhf0/fSmJ0bFiZ1F8BT6cGXl2LpltQptzjXKWEkKA==} + text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + thread-stream@3.1.0: resolution: {integrity: sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==} @@ -1264,6 +1581,13 @@ packages: engines: {node: '>=14.17'} hasBin: true + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} @@ -1336,6 +1660,14 @@ snapshots: '@jridgewell/gen-mapping': 0.3.12 '@jridgewell/trace-mapping': 0.3.29 + '@babel/code-frame@7.27.1': + dependencies: + '@babel/helper-validator-identifier': 7.27.1 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/helper-validator-identifier@7.27.1': {} + '@esbuild/aix-ppc64@0.25.6': optional: true @@ -1457,6 +1789,8 @@ snapshots: '@fastify/forwarded': 3.0.0 ipaddr.js: 2.2.0 + '@humanwhocodes/momoa@2.0.4': {} + '@isaacs/fs-minipass@4.0.1': dependencies: minipass: 7.1.2 @@ -1479,6 +1813,18 @@ snapshots: '@opentelemetry/api@1.9.0': {} + '@pnpm/config.env-replace@1.1.0': {} + + '@pnpm/network.ca-file@1.0.2': + dependencies: + graceful-fs: 4.2.10 + + '@pnpm/npm-conf@2.3.1': + dependencies: + '@pnpm/config.env-replace': 1.1.0 + '@pnpm/network.ca-file': 1.0.2 + config-chain: 1.1.13 + '@rollup/rollup-android-arm-eabi@4.44.2': optional: true @@ -1539,6 +1885,14 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.44.2': optional: true + '@sindresorhus/is@5.6.0': {} + + '@solidity-parser/parser@0.20.2': {} + + '@szmarczak/http-timer@5.0.1': + dependencies: + defer-to-connect: 2.0.1 + '@tailwindcss/node@4.1.11': dependencies: '@ampproject/remapping': 2.3.0 @@ -1612,14 +1966,27 @@ snapshots: '@types/estree@1.0.8': {} + '@types/http-cache-semantics@4.0.4': {} + abstract-logging@2.0.1: {} agent-base@7.1.4: {} + ajv-errors@1.0.1(ajv@6.12.6): + dependencies: + ajv: 6.12.6 + ajv-formats@3.0.1(ajv@8.17.1): optionalDependencies: ajv: 8.17.1 + ajv@6.12.6: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + ajv@8.17.1: dependencies: fast-deep-equal: 3.1.3 @@ -1627,10 +1994,16 @@ snapshots: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 + ansi-regex@5.0.1: {} + ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 + antlr4@4.13.2: {} + + argparse@2.0.1: {} + asn1.js@5.4.1: dependencies: bn.js: 4.12.2 @@ -1638,6 +2011,10 @@ snapshots: minimalistic-assert: 1.0.1 safer-buffer: 2.1.2 + ast-parents@0.0.1: {} + + astral-regex@2.0.0: {} + asynckit@0.4.0: {} atomic-sleep@1.0.0: {} @@ -1655,6 +2032,8 @@ snapshots: transitivePeerDependencies: - debug + balanced-match@1.0.2: {} + base32.js@0.1.0: {} base64-js@1.5.1: {} @@ -1664,6 +2043,15 @@ snapshots: node-addon-api: 8.4.0 node-gyp-build: 4.8.4 + better-ajv-errors@2.0.2(ajv@6.12.6): + dependencies: + '@babel/code-frame': 7.27.1 + '@humanwhocodes/momoa': 2.0.4 + ajv: 6.12.6 + chalk: 4.1.2 + jsonpointer: 5.0.1 + leven: 3.1.0 + better-sqlite3@12.2.0: dependencies: bindings: 1.5.0 @@ -1685,6 +2073,10 @@ snapshots: bn.js@4.12.2: {} + brace-expansion@2.0.2: + dependencies: + balanced-match: 1.0.2 + buffer-equal-constant-time@1.0.1: {} buffer@5.7.1: @@ -1692,11 +2084,25 @@ snapshots: base64-js: 1.5.1 ieee754: 1.2.1 + cacheable-lookup@7.0.0: {} + + cacheable-request@10.2.14: + dependencies: + '@types/http-cache-semantics': 4.0.4 + get-stream: 6.0.1 + http-cache-semantics: 4.2.0 + keyv: 4.5.4 + mimic-response: 4.0.0 + normalize-url: 8.0.2 + responselike: 3.0.0 + call-bind-apply-helpers@1.0.2: dependencies: es-errors: 1.3.0 function-bind: 1.1.2 + callsites@3.1.0: {} + chalk@4.1.2: dependencies: ansi-styles: 4.3.0 @@ -1724,10 +2130,26 @@ snapshots: dependencies: delayed-stream: 1.0.0 + commander@10.0.1: {} + commist@3.2.0: {} + config-chain@1.1.13: + dependencies: + ini: 1.3.8 + proto-list: 1.2.4 + cookie@1.0.2: {} + cosmiconfig@8.3.6(typescript@5.8.3): + dependencies: + import-fresh: 3.3.1 + js-yaml: 4.1.0 + parse-json: 5.2.0 + path-type: 4.0.0 + optionalDependencies: + typescript: 5.8.3 + data-uri-to-buffer@4.0.1: {} dateformat@4.6.3: {} @@ -1742,6 +2164,8 @@ snapshots: deep-extend@0.6.0: {} + defer-to-connect@2.0.1: {} + delayed-stream@1.0.0: {} dequal@2.0.3: {} @@ -1762,6 +2186,8 @@ snapshots: dependencies: safe-buffer: 5.2.1 + emoji-regex@8.0.0: {} + end-of-stream@1.4.5: dependencies: once: 1.4.0 @@ -1777,6 +2203,10 @@ snapshots: dotenv: 16.6.1 dotenv-expand: 10.0.0 + error-ex@1.3.2: + dependencies: + is-arrayish: 0.2.1 + es-define-property@1.0.1: {} es-errors@1.3.0: {} @@ -1831,6 +2261,10 @@ snapshots: fast-deep-equal@3.1.3: {} + fast-diff@1.3.0: {} + + fast-json-stable-stringify@2.1.0: {} + fast-json-stringify@6.0.1: dependencies: '@fastify/merge-json-schemas': 0.2.1 @@ -1937,6 +2371,8 @@ snapshots: follow-redirects@1.15.9: {} + form-data-encoder@2.1.4: {} + form-data@4.0.4: dependencies: asynckit: 0.4.0 @@ -1951,6 +2387,14 @@ snapshots: fs-constants@1.0.0: {} + fs-extra@11.3.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + + fs.realpath@1.0.0: {} + fsevents@2.3.3: optional: true @@ -1997,8 +2441,18 @@ snapshots: dunder-proto: 1.0.1 es-object-atoms: 1.1.1 + get-stream@6.0.1: {} + github-from-package@0.0.0: {} + glob@8.1.0: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 5.1.6 + once: 1.4.0 + google-auth-library@10.1.0: dependencies: base64-js: 1.5.1 @@ -2015,6 +2469,22 @@ snapshots: gopd@1.2.0: {} + got@12.6.1: + dependencies: + '@sindresorhus/is': 5.6.0 + '@szmarczak/http-timer': 5.0.1 + cacheable-lookup: 7.0.0 + cacheable-request: 10.2.14 + decompress-response: 6.0.0 + form-data-encoder: 2.1.4 + get-stream: 6.0.1 + http2-wrapper: 2.2.1 + lowercase-keys: 3.0.0 + p-cancelable: 3.0.0 + responselike: 3.0.0 + + graceful-fs@4.2.10: {} + graceful-fs@4.2.11: {} gtoken@8.0.0: @@ -2038,6 +2508,13 @@ snapshots: help-me@5.0.0: {} + http-cache-semantics@4.2.0: {} + + http2-wrapper@2.2.1: + dependencies: + quick-lru: 5.1.1 + resolve-alpn: 1.2.1 + https-proxy-agent@7.0.6: dependencies: agent-base: 7.1.4 @@ -2047,30 +2524,66 @@ snapshots: ieee754@1.2.1: {} + ignore@5.3.2: {} + + import-fresh@3.3.1: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + inherits@2.0.4: {} ini@1.3.8: {} ipaddr.js@2.2.0: {} + is-arrayish@0.2.1: {} + is-docker@2.2.1: {} + is-fullwidth-code-point@3.0.0: {} + isbinaryfile@4.0.10: {} jiti@2.4.2: {} joycon@3.1.1: {} + js-tokens@4.0.0: {} + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + json-bigint@1.0.0: dependencies: bignumber.js: 9.3.1 + json-buffer@3.0.1: {} + + json-parse-even-better-errors@2.3.1: {} + json-schema-ref-resolver@2.0.1: dependencies: dequal: 2.0.3 + json-schema-traverse@0.4.1: {} + json-schema-traverse@1.0.0: {} + jsonfile@6.1.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + + jsonpointer@5.0.1: {} + jwa@2.0.1: dependencies: buffer-equal-constant-time: 1.0.1 @@ -2082,6 +2595,16 @@ snapshots: jwa: 2.0.1 safe-buffer: 5.2.1 + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + latest-version@7.0.0: + dependencies: + package-json: 8.1.1 + + leven@3.1.0: {} + light-my-request@6.6.0: dependencies: cookie: 1.0.2 @@ -2133,11 +2656,19 @@ snapshots: lightningcss-win32-arm64-msvc: 1.30.1 lightningcss-win32-x64-msvc: 1.30.1 + lines-and-columns@1.2.4: {} + locate-path@3.0.0: dependencies: p-locate: 3.0.0 path-exists: 3.0.0 + lodash.truncate@4.4.2: {} + + lodash@4.17.21: {} + + lowercase-keys@3.0.0: {} + magic-string@0.30.17: dependencies: '@jridgewell/sourcemap-codec': 1.5.4 @@ -2156,8 +2687,14 @@ snapshots: mimic-response@3.1.0: {} + mimic-response@4.0.0: {} + minimalistic-assert@1.0.1: {} + minimatch@5.1.6: + dependencies: + brace-expansion: 2.0.2 + minimist@1.2.8: {} minipass@7.1.2: {} @@ -2196,6 +2733,8 @@ snapshots: node-gyp-build@4.8.4: {} + normalize-url@8.0.2: {} + obliterator@2.0.5: {} on-exit-leak-free@2.1.2: {} @@ -2204,6 +2743,8 @@ snapshots: dependencies: wrappy: 1.0.2 + p-cancelable@3.0.0: {} + p-limit@2.3.0: dependencies: p-try: 2.2.0 @@ -2214,8 +2755,28 @@ snapshots: p-try@2.2.0: {} + package-json@8.1.1: + dependencies: + got: 12.6.1 + registry-auth-token: 5.1.0 + registry-url: 6.0.1 + semver: 7.7.2 + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + parse-json@5.2.0: + dependencies: + '@babel/code-frame': 7.27.1 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + path-exists@3.0.0: {} + path-type@4.0.0: {} + picocolors@1.1.1: {} picomatch@4.0.2: {} @@ -2260,6 +2821,8 @@ snapshots: dependencies: find-up: 3.0.0 + pluralize@8.0.0: {} + postcss@8.5.6: dependencies: nanoid: 3.3.11 @@ -2281,6 +2844,9 @@ snapshots: tar-fs: 2.1.3 tunnel-agent: 0.6.0 + prettier@2.8.8: + optional: true + process-warning@4.0.1: {} process-warning@5.0.0: {} @@ -2290,6 +2856,8 @@ snapshots: '@opentelemetry/api': 1.9.0 tdigest: 0.1.2 + proto-list@1.2.4: {} + proxy-from-env@1.1.0: {} pump@3.0.3: @@ -2297,8 +2865,12 @@ snapshots: end-of-stream: 1.4.5 once: 1.4.0 + punycode@2.3.1: {} + quick-format-unescaped@4.0.4: {} + quick-lru@5.1.1: {} + rc@1.2.8: dependencies: deep-extend: 0.6.0 @@ -2316,10 +2888,26 @@ snapshots: real-require@0.2.0: {} + registry-auth-token@5.1.0: + dependencies: + '@pnpm/npm-conf': 2.3.1 + + registry-url@6.0.1: + dependencies: + rc: 1.2.8 + require-from-string@2.0.2: {} + resolve-alpn@1.2.1: {} + + resolve-from@4.0.0: {} + resolve-from@5.0.0: {} + responselike@3.0.0: + dependencies: + lowercase-keys: 3.0.0 + ret@0.5.0: {} reusify@1.1.0: {} @@ -2378,6 +2966,40 @@ snapshots: once: 1.4.0 simple-concat: 1.0.1 + slice-ansi@4.0.0: + dependencies: + ansi-styles: 4.3.0 + astral-regex: 2.0.0 + is-fullwidth-code-point: 3.0.0 + + solhint@6.0.0(typescript@5.8.3): + dependencies: + '@solidity-parser/parser': 0.20.2 + ajv: 6.12.6 + ajv-errors: 1.0.1(ajv@6.12.6) + antlr4: 4.13.2 + ast-parents: 0.0.1 + better-ajv-errors: 2.0.2(ajv@6.12.6) + chalk: 4.1.2 + commander: 10.0.1 + cosmiconfig: 8.3.6(typescript@5.8.3) + fast-diff: 1.3.0 + fs-extra: 11.3.0 + glob: 8.1.0 + ignore: 5.3.2 + js-yaml: 4.1.0 + latest-version: 7.0.0 + lodash: 4.17.21 + pluralize: 8.0.0 + semver: 7.7.2 + strip-ansi: 6.0.1 + table: 6.9.0 + text-table: 0.2.0 + optionalDependencies: + prettier: 2.8.8 + transitivePeerDependencies: + - typescript + sonic-boom@4.2.0: dependencies: atomic-sleep: 1.0.0 @@ -2398,10 +3020,20 @@ snapshots: fastseries: 1.7.2 reusify: 1.1.0 + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + string_decoder@1.3.0: dependencies: safe-buffer: 5.2.1 + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + strip-json-comments@2.0.1: {} strip-json-comments@3.1.1: {} @@ -2410,6 +3042,14 @@ snapshots: dependencies: has-flag: 4.0.0 + table@6.9.0: + dependencies: + ajv: 8.17.1 + lodash.truncate: 4.4.2 + slice-ansi: 4.0.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + tailwindcss@4.1.11: {} tapable@2.2.2: {} @@ -2442,6 +3082,8 @@ snapshots: dependencies: bintrees: 1.0.2 + text-table@0.2.0: {} + thread-stream@3.1.0: dependencies: real-require: 0.2.0 @@ -2461,6 +3103,12 @@ snapshots: typescript@5.8.3: {} + universalify@2.0.1: {} + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + util-deprecate@1.0.2: {} vite@6.3.5(jiti@2.4.2)(lightningcss@1.30.1): From f1d54de6a51ca385112622b05e3f00a7c8164b70 Mon Sep 17 00:00:00 2001 From: adjoly Date: Sat, 26 Jul 2025 10:31:26 +0200 Subject: [PATCH 02/11] =?UTF-8?q?=E3=80=8C=F0=9F=8F=97=EF=B8=8F=E3=80=8D?= =?UTF-8?q?=20wip:=20logstash=20workinnnggg?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker/ELK/compose.yml | 4 ++++ docker/ELK/elasticsearch/Dockerfile | 3 +++ docker/ELK/elasticsearch/compose.yml | 10 ++++++++ docker/ELK/elasticsearch/elasticsearch.yml | 0 docker/ELK/kibana/Dockerfile | 1 + docker/ELK/kibana/compose.yml | 0 docker/ELK/logstash/Dockerfile | 6 +++++ docker/ELK/logstash/compose.yml | 14 +++++++++++ docker/ELK/logstash/config/logstash.yml | 2 ++ docker/ELK/logstash/pipeline/logstash.conf | 27 ++++++++++++++++++++++ docker/api-base/Dockerfile | 2 ++ docker/api-base/compose.yml | 2 ++ docker/docker-compose.yml | 1 + docker/front/Dockerfile | 8 +++++++ docker/front/compose.yml | 2 ++ docker/front/config/default.conf.template | 3 +++ docker/networks.yml | 2 ++ docker/volumes.yml | 6 +++++ src/start.js | 3 ++- 19 files changed, 95 insertions(+), 1 deletion(-) create mode 100644 docker/ELK/compose.yml create mode 100644 docker/ELK/elasticsearch/Dockerfile create mode 100644 docker/ELK/elasticsearch/compose.yml create mode 100644 docker/ELK/elasticsearch/elasticsearch.yml create mode 100644 docker/ELK/kibana/Dockerfile create mode 100644 docker/ELK/kibana/compose.yml create mode 100644 docker/ELK/logstash/Dockerfile create mode 100644 docker/ELK/logstash/compose.yml create mode 100644 docker/ELK/logstash/config/logstash.yml create mode 100644 docker/ELK/logstash/pipeline/logstash.conf diff --git a/docker/ELK/compose.yml b/docker/ELK/compose.yml new file mode 100644 index 0000000..16ab019 --- /dev/null +++ b/docker/ELK/compose.yml @@ -0,0 +1,4 @@ +include: + - ./logstash/compose.yml + # - ./kibana/compose.yml + # - ./elasticsearch/compose.yml diff --git a/docker/ELK/elasticsearch/Dockerfile b/docker/ELK/elasticsearch/Dockerfile new file mode 100644 index 0000000..d5cee85 --- /dev/null +++ b/docker/ELK/elasticsearch/Dockerfile @@ -0,0 +1,3 @@ +FROM docker.elastic.co/elasticsearch/elasticsearch-wolfi:9.0.3 + +COPY --chown=elasticsearch:elasticsearch elasticsearch.yml /usr/share/elasticsearch/config/ diff --git a/docker/ELK/elasticsearch/compose.yml b/docker/ELK/elasticsearch/compose.yml new file mode 100644 index 0000000..6341ac2 --- /dev/null +++ b/docker/ELK/elasticsearch/compose.yml @@ -0,0 +1,10 @@ +services: + elasticsearch: + container_name: transcendence-elasticsearch + build: + dockerfile: Dockerfile + context: . + environment: + - LOG_LEVEL=info + - ELASTIC_PASSWORD=${ELASTIC_PASSWORD} + mem_limit: 1gb diff --git a/docker/ELK/elasticsearch/elasticsearch.yml b/docker/ELK/elasticsearch/elasticsearch.yml new file mode 100644 index 0000000..e69de29 diff --git a/docker/ELK/kibana/Dockerfile b/docker/ELK/kibana/Dockerfile new file mode 100644 index 0000000..78fcc00 --- /dev/null +++ b/docker/ELK/kibana/Dockerfile @@ -0,0 +1 @@ +FROM kibana:9.0.3 diff --git a/docker/ELK/kibana/compose.yml b/docker/ELK/kibana/compose.yml new file mode 100644 index 0000000..e69de29 diff --git a/docker/ELK/logstash/Dockerfile b/docker/ELK/logstash/Dockerfile new file mode 100644 index 0000000..03cb881 --- /dev/null +++ b/docker/ELK/logstash/Dockerfile @@ -0,0 +1,6 @@ +FROM docker.elastic.co/logstash/logstash-wolfi:9.0.3 + +RUN rm -f /usr/share/logstash/pipeline/logstash.conf + +COPY --chmod=777 pipeline/ /usr/share/logstash/pipeline/ +COPY --chmod=777 config/ /usr/share/logstash/config/ diff --git a/docker/ELK/logstash/compose.yml b/docker/ELK/logstash/compose.yml new file mode 100644 index 0000000..700e695 --- /dev/null +++ b/docker/ELK/logstash/compose.yml @@ -0,0 +1,14 @@ +services: + logstash: + container_name: transcendence-logstash + build: + dockerfile: Dockerfile + context: . + volumes: + - log-user:/var/log/user-api + - log-auth:/var/log/auth-api + - log-nginx:/var/log/nginx + environment: + - LOG_LEVEL=info + networks: + - elk diff --git a/docker/ELK/logstash/config/logstash.yml b/docker/ELK/logstash/config/logstash.yml new file mode 100644 index 0000000..b9838aa --- /dev/null +++ b/docker/ELK/logstash/config/logstash.yml @@ -0,0 +1,2 @@ +api: + environment: production diff --git a/docker/ELK/logstash/pipeline/logstash.conf b/docker/ELK/logstash/pipeline/logstash.conf new file mode 100644 index 0000000..1a53ae5 --- /dev/null +++ b/docker/ELK/logstash/pipeline/logstash.conf @@ -0,0 +1,27 @@ +input { + file { + path => "/var/log/user-api/log.log" + start_position => "beginning" + tags => [ "api", "user" ] + } + file { + path => "/var/log/auth-api/log.log" + start_position => "beginning" + tags => [ "api", "auth" ] + } + file { + path => "/var/log/nginx/log.log" + start_position => "beginning" + tags => [ "nginx", "front" ] + } + file { + path => "/var/log/nginx/err.log" + start_position => "beginning" + tags => [ "nginx", "front", "error" ] + } +} + +output { + elasticsearch { hosts => ["transcendence-elasticsearch:9200"] } + stdout { codec => rubydebug } +} diff --git a/docker/api-base/Dockerfile b/docker/api-base/Dockerfile index 8513be8..142d056 100644 --- a/docker/api-base/Dockerfile +++ b/docker/api-base/Dockerfile @@ -24,5 +24,7 @@ EXPOSE 3000 RUN mkdir /db STOPSIGNAL SIGINT +ENV LOG_TARGET=/var/log/log.log +RUN touch /var/log/log.log CMD [ "node", "/app/src/start.js" ] diff --git a/docker/api-base/compose.yml b/docker/api-base/compose.yml index 3aa20a8..df8ce09 100644 --- a/docker/api-base/compose.yml +++ b/docker/api-base/compose.yml @@ -6,6 +6,7 @@ services: context: ../../ volumes: - db-user:/db + - log-user:/var/log networks: - front - back @@ -22,6 +23,7 @@ services: context: ../../ volumes: - db-auth:/db + - log-auth:/var/log networks: - front - back diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 8a890f4..9e49825 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -6,3 +6,4 @@ include: - ./monitoring/compose.yml - ./api-base/compose.yml - ./front/compose.yml + - ./ELK/compose.yml diff --git a/docker/front/Dockerfile b/docker/front/Dockerfile index f5e1207..c900cf6 100644 --- a/docker/front/Dockerfile +++ b/docker/front/Dockerfile @@ -25,5 +25,13 @@ COPY --chmod=755 docker/front/entry/ssl-cert.sh /docker-entrypoint.d/ssl-cert.s COPY --from=builder /app/dist /usr/share/nginx/html +USER root +RUN mkdir -p /var/log/front +RUN touch /var/log/front/err.log /var/log/front/log.log +RUN chmod -R 777 /var/log/front +USER nginx + + + EXPOSE 80 443 STOPSIGNAL SIGINT diff --git a/docker/front/compose.yml b/docker/front/compose.yml index c748cff..593bf8b 100644 --- a/docker/front/compose.yml +++ b/docker/front/compose.yml @@ -6,6 +6,8 @@ services: context: ../../ ports: - ${OUT_PORT}:443 + volumes: + - log-nginx:/var/log/front environment: - SERVER_NAME=localhost - TZ=Europe/Paris diff --git a/docker/front/config/default.conf.template b/docker/front/config/default.conf.template index b199b9b..8574aee 100644 --- a/docker/front/config/default.conf.template +++ b/docker/front/config/default.conf.template @@ -1,4 +1,7 @@ server { + error_log /var/log/front/err.log warn; + access_log /var/log/front/log.log; + listen 443 ssl; server_name example.com; # Replace with your domain or handle env vars externally diff --git a/docker/networks.yml b/docker/networks.yml index 9ce0fe6..7e28b60 100644 --- a/docker/networks.yml +++ b/docker/networks.yml @@ -7,3 +7,5 @@ networks: name: transcendence-prom prom-exporter: name: transcendence-prom-exporter + elk: + name: transcendence-elk diff --git a/docker/volumes.yml b/docker/volumes.yml index e67d472..f05e822 100644 --- a/docker/volumes.yml +++ b/docker/volumes.yml @@ -5,3 +5,9 @@ volumes: name: transcendence-api-auth-db db-user: name: transcendence-api-user-db + log-auth: + name: transcendence-api-auth-log + log-user: + name: transcendence-api-user-log + log-nginx: + name: transcendence-front-log diff --git a/src/start.js b/src/start.js index 6111c96..3a0e40a 100644 --- a/src/start.js +++ b/src/start.js @@ -10,7 +10,8 @@ const loggerOption = { translateTime: 'HH:MM:ss', ignore: 'pid,hostname' } - } + }, + file: process.env.LOG_TARGET || "" }; function sigHandle(signal) { From e804d8267064f306e94c2305dc52243d3bfff28b Mon Sep 17 00:00:00 2001 From: adjoly Date: Sat, 26 Jul 2025 10:46:08 +0200 Subject: [PATCH 03/11] =?UTF-8?q?=E3=80=8C=F0=9F=93=9D=E3=80=8D=20doc:=20d?= =?UTF-8?q?ocumented=20all=20done=20modules?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/README.md b/README.md index 8d3f20a..d4aecd4 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,43 @@ # knl_meowscendence Press F to pay respect + +## Modules done + +5 major + 2 minor = 6 full modules + +- **Web** + - [x] Use a framework to build the backend.(node with Fastify) - Major + - [ ] Use a framework or toolkit to build the front-end.(Tailwind CSS) - Minor + - [x] Use a database for the backend -and more.(SQLite) - Minor + - [ ] Store the score of a tournament in the Blockchain.(Soldity on Avalanche) - Major +- **User Management** + - [ ] Standard user management, authentication and users across tournaments. - Major + - [x] Implement remote authentication. - Major +- **Gameplay and user experience** + - [ ] Remote players - Major + - [ ] Multiplayer - Major + - [ ] Add another game - Major + - [ ] Game customization options - Minor + - [ ] Live chat - Major +- **AI-Algo** + - [ ] AI opponent - Major + - [ ] User and game stats dashboards - Minor +- **Cybersecurity** + - [ ] WAF/ModSecurity and Hashicorp Vault - Major + - [ ] RGPD compliance - Minor + - [x] 2FA and JWT - Major +- **DevOps** + - [x] Infrasctructure setup for log management - Major + - [x] Monitoring system - Minor + - [x] Designing the backend in micro-architecture - Major +- **Graphics** + - [ ] Use of advanced 3D techniques - Major +- **Accessibility** + - [ ] Support on all devices - Minor + - [ ] Expanding Browser compatibility - Minor + - [ ] Multiple language support - Minor + - [ ] Add accessibility for visually impaired users - Minor + - [ ] Server-Side Rendering (SSR) integration - Minor +- **Server-Side Pong** + - [ ] Replace basic pong with server-side pong and implementing an API - Major + - [ ] Enabling pong gameplay via CLI against web users with API integration - Major From 8973f67ad462a669aebed138d74a0d110f788655 Mon Sep 17 00:00:00 2001 From: adjoly Date: Sat, 26 Jul 2025 10:47:19 +0200 Subject: [PATCH 04/11] =?UTF-8?q?=E3=80=8C=F0=9F=93=9D=E3=80=8D=20doc:=20a?= =?UTF-8?q?dded=20license=20in=20README?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index d4aecd4..4bea72a 100644 --- a/README.md +++ b/README.md @@ -40,4 +40,8 @@ Press F to pay respect - [ ] Server-Side Rendering (SSR) integration - Minor - **Server-Side Pong** - [ ] Replace basic pong with server-side pong and implementing an API - Major - - [ ] Enabling pong gameplay via CLI against web users with API integration - Major + - [ ] Enabling pong gameplay via CLI against web users with API integration + + +## License +This project is under [MIT License](LICENSE) From fbd8be1ea111b2bd27c36bd507e8c79ff11e8d8f Mon Sep 17 00:00:00 2001 From: adjoly Date: Sat, 26 Jul 2025 10:50:28 +0200 Subject: [PATCH 05/11] =?UTF-8?q?=E3=80=8C=F0=9F=93=9D=E3=80=8D=20doc(READ?= =?UTF-8?q?ME):=20added=20folder=20structure?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/README.md b/README.md index 4bea72a..ce1b173 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,20 @@ # knl_meowscendence Press F to pay respect +## Folder structure +├── docker/ # Docker-related setup for services +│ ├── api-base/ # Backend API base image and compose file +│ ├── front/ # Frontend image, config, and cert automation +│ ├── monitoring/ # Monitoring stack: Prometheus, Grafana, exporters +│ ├── networks.yml # Docker network definitions +│ └── volumes.yml # Docker volume definitions +├── src/ # Application source code +│ ├── api/ # Backend logic (auth, user management) +│ ├── front/ # Frontend files +│ └── utils/ # Utility modules (auth, TOTP, etc.) +├── flake.nix & flake.lock # Nix flake configuration +└── Justfile # Task automation commands + ## Modules done 5 major + 2 minor = 6 full modules From b046116d402290e85546cebe3ac0eaa6fd1be39f Mon Sep 17 00:00:00 2001 From: Adam <45126464+KeyZox71@users.noreply.github.com> Date: Sat, 26 Jul 2025 10:54:49 +0200 Subject: [PATCH 06/11] =?UTF-8?q?=E3=80=8C=F0=9F=94=A8=E3=80=8D=20fix(READ?= =?UTF-8?q?ME):=20fixed=20folder=20tree?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index ce1b173..c0fd6d8 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,7 @@ Press F to pay respect ## Folder structure +``` ├── docker/ # Docker-related setup for services │ ├── api-base/ # Backend API base image and compose file │ ├── front/ # Frontend image, config, and cert automation @@ -14,7 +15,7 @@ Press F to pay respect │ └── utils/ # Utility modules (auth, TOTP, etc.) ├── flake.nix & flake.lock # Nix flake configuration └── Justfile # Task automation commands - +``` ## Modules done 5 major + 2 minor = 6 full modules From 18e41b55528f4b409fafceedd3648905ea2b2ff1 Mon Sep 17 00:00:00 2001 From: adjoly Date: Sat, 26 Jul 2025 15:21:34 +0200 Subject: [PATCH 07/11] =?UTF-8?q?=E3=80=8C=F0=9F=8F=97=EF=B8=8F=E3=80=8D?= =?UTF-8?q?=20wip:=20ELK=20workingggggggggggggggggggggggggggggggggggg?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Justfile | 2 +- docker/ELK/compose.yml | 4 +- docker/ELK/elasticsearch/Dockerfile | 3 +- docker/ELK/elasticsearch/compose.yml | 4 +- docker/ELK/elasticsearch/elasticsearch.yml | 9 ++ docker/ELK/elasticsearch/jvm.options | 2 + docker/ELK/kibana/Dockerfile | 4 +- docker/ELK/kibana/compose.yml | 12 +++ docker/ELK/kibana/kibana.yml | 6 ++ docker/ELK/logstash/Dockerfile | 2 +- docker/ELK/logstash/compose.yml | 1 + docker/api-base/compose.yml | 2 + docker/docker-compose.yml | 2 +- docker/front/Dockerfile | 2 - docker/front/compose.yml | 1 - .../prometheus/config/prometheus.yml | 8 +- docker/networks.yml | 2 + package.json | 2 + pnpm-lock.yaml | 11 +++ src/api/auth/default.js | 25 ------ src/api/user/default.js | 27 ------ src/start.js | 88 +++++++++++-------- 22 files changed, 116 insertions(+), 103 deletions(-) create mode 100644 docker/ELK/elasticsearch/jvm.options create mode 100644 docker/ELK/kibana/kibana.yml diff --git a/Justfile b/Justfile index 6a884a6..a5736f1 100644 --- a/Justfile +++ b/Justfile @@ -13,7 +13,7 @@ set dotenv-load # To launch all apis @apis: - node src/dev.js + node src/start.js # To launch the front end @front: diff --git a/docker/ELK/compose.yml b/docker/ELK/compose.yml index 16ab019..46182c7 100644 --- a/docker/ELK/compose.yml +++ b/docker/ELK/compose.yml @@ -1,4 +1,4 @@ include: - ./logstash/compose.yml - # - ./kibana/compose.yml - # - ./elasticsearch/compose.yml + - ./kibana/compose.yml + - ./elasticsearch/compose.yml diff --git a/docker/ELK/elasticsearch/Dockerfile b/docker/ELK/elasticsearch/Dockerfile index d5cee85..74b087a 100644 --- a/docker/ELK/elasticsearch/Dockerfile +++ b/docker/ELK/elasticsearch/Dockerfile @@ -1,3 +1,4 @@ -FROM docker.elastic.co/elasticsearch/elasticsearch-wolfi:9.0.3 +FROM docker.elastic.co/elasticsearch/elasticsearch-wolfi:9.0.4 COPY --chown=elasticsearch:elasticsearch elasticsearch.yml /usr/share/elasticsearch/config/ +COPY --chown=elasticsearch:elasticsearch jvm.options /usr/share/elasticsearch/config/jvm.options.d/custom.options diff --git a/docker/ELK/elasticsearch/compose.yml b/docker/ELK/elasticsearch/compose.yml index 6341ac2..36ab9d2 100644 --- a/docker/ELK/elasticsearch/compose.yml +++ b/docker/ELK/elasticsearch/compose.yml @@ -6,5 +6,5 @@ services: context: . environment: - LOG_LEVEL=info - - ELASTIC_PASSWORD=${ELASTIC_PASSWORD} - mem_limit: 1gb + networks: + - elk diff --git a/docker/ELK/elasticsearch/elasticsearch.yml b/docker/ELK/elasticsearch/elasticsearch.yml index e69de29..30b5f04 100644 --- a/docker/ELK/elasticsearch/elasticsearch.yml +++ b/docker/ELK/elasticsearch/elasticsearch.yml @@ -0,0 +1,9 @@ +cluster.name: docker-cluster + +node.name: transcendence-elasticsearch + +discovery.type: single-node + +xpack.security.enabled: false + +network.host: 0.0.0.0 diff --git a/docker/ELK/elasticsearch/jvm.options b/docker/ELK/elasticsearch/jvm.options new file mode 100644 index 0000000..e292d3f --- /dev/null +++ b/docker/ELK/elasticsearch/jvm.options @@ -0,0 +1,2 @@ +-Xms1g +-Xmx1g diff --git a/docker/ELK/kibana/Dockerfile b/docker/ELK/kibana/Dockerfile index 78fcc00..0ab577c 100644 --- a/docker/ELK/kibana/Dockerfile +++ b/docker/ELK/kibana/Dockerfile @@ -1 +1,3 @@ -FROM kibana:9.0.3 +FROM docker.elastic.co/kibana/kibana-wolfi:9.0.4 + +COPY --chmod=777 kibana.yml /etc/kibana/kibana.yml diff --git a/docker/ELK/kibana/compose.yml b/docker/ELK/kibana/compose.yml index e69de29..7a4cb52 100644 --- a/docker/ELK/kibana/compose.yml +++ b/docker/ELK/kibana/compose.yml @@ -0,0 +1,12 @@ +services: + kibana: + container_name: transcendence-kibana + build: + dockerfile: Dockerfile + context: . + ports: + - ${ELK_PORT}:5601 + environment: + - LOG_LEVEL=info + networks: + - elk diff --git a/docker/ELK/kibana/kibana.yml b/docker/ELK/kibana/kibana.yml new file mode 100644 index 0000000..a24e16a --- /dev/null +++ b/docker/ELK/kibana/kibana.yml @@ -0,0 +1,6 @@ +server.name: kibana +server.host: "0.0.0.0" + +elasticsearch.hosts: ["https://transcendence-elasticsearch:9200"] + +telemetry.enabled: false diff --git a/docker/ELK/logstash/Dockerfile b/docker/ELK/logstash/Dockerfile index 03cb881..58d1167 100644 --- a/docker/ELK/logstash/Dockerfile +++ b/docker/ELK/logstash/Dockerfile @@ -1,4 +1,4 @@ -FROM docker.elastic.co/logstash/logstash-wolfi:9.0.3 +FROM docker.elastic.co/logstash/logstash-wolfi:9.0.4 RUN rm -f /usr/share/logstash/pipeline/logstash.conf diff --git a/docker/ELK/logstash/compose.yml b/docker/ELK/logstash/compose.yml index 700e695..be01856 100644 --- a/docker/ELK/logstash/compose.yml +++ b/docker/ELK/logstash/compose.yml @@ -12,3 +12,4 @@ services: - LOG_LEVEL=info networks: - elk + - logstash diff --git a/docker/api-base/compose.yml b/docker/api-base/compose.yml index df8ce09..9d33dc7 100644 --- a/docker/api-base/compose.yml +++ b/docker/api-base/compose.yml @@ -14,6 +14,7 @@ services: environment: - TZ=Europe/Paris - API_TARGET=user + - LOG_FILE_PATH=/var/log/log.log - JWT_SECRET=${JWT_SECRET} restart: unless-stopped auth-api: @@ -31,5 +32,6 @@ services: environment: - TZ=Europe/Paris - API_TARGET=auth + - LOG_FILE_PATH=/var/log/log.log - JWT_SECRET=${JWT_SECRET} restart: unless-stopped diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 9e49825..77718d0 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -3,7 +3,7 @@ name: ft_transcendence include: - ./volumes.yml - ./networks.yml - - ./monitoring/compose.yml + # - ./monitoring/compose.yml - ./api-base/compose.yml - ./front/compose.yml - ./ELK/compose.yml diff --git a/docker/front/Dockerfile b/docker/front/Dockerfile index c900cf6..a60b3e9 100644 --- a/docker/front/Dockerfile +++ b/docker/front/Dockerfile @@ -31,7 +31,5 @@ RUN touch /var/log/front/err.log /var/log/front/log.log RUN chmod -R 777 /var/log/front USER nginx - - EXPOSE 80 443 STOPSIGNAL SIGINT diff --git a/docker/front/compose.yml b/docker/front/compose.yml index 593bf8b..22b500e 100644 --- a/docker/front/compose.yml +++ b/docker/front/compose.yml @@ -9,7 +9,6 @@ services: volumes: - log-nginx:/var/log/front environment: - - SERVER_NAME=localhost - TZ=Europe/Paris depends_on: user-api: diff --git a/docker/monitoring/prometheus/config/prometheus.yml b/docker/monitoring/prometheus/config/prometheus.yml index 84ec958..e3789e5 100644 --- a/docker/monitoring/prometheus/config/prometheus.yml +++ b/docker/monitoring/prometheus/config/prometheus.yml @@ -24,7 +24,7 @@ scrape_configs: static_configs: - targets: ['node-exporter:9100'] - - job_name: 'nodejs' - static_configs: - - targets: ['transcendence-api-auth:3000'] - - targets: ['transcendence-api-user:3000'] + # - job_name: 'nodejs' + # static_configs: + # - targets: ['transcendence-api-auth:3000'] + # - targets: ['transcendence-api-user:3000'] diff --git a/docker/networks.yml b/docker/networks.yml index 7e28b60..65a1c1e 100644 --- a/docker/networks.yml +++ b/docker/networks.yml @@ -9,3 +9,5 @@ networks: name: transcendence-prom-exporter elk: name: transcendence-elk + logstash: + name: transcendence-logstash diff --git a/package.json b/package.json index 149bcc0..c980981 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,8 @@ "fastify": "^5.4.0", "fastify-cli": "^7.4.0", "google-auth-library": "^10.1.0", + "pino": "^9.7.0", + "pino-logstash": "^1.0.0", "prom-client": "^15.1.3", "solhint": "^6.0.0" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8c12749..ef4dd58 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -38,6 +38,12 @@ importers: google-auth-library: specifier: ^10.1.0 version: 10.1.0 + pino: + specifier: ^9.7.0 + version: 9.7.0 + pino-logstash: + specifier: ^1.0.0 + version: 1.0.0 prom-client: specifier: ^15.1.3 version: 15.1.3 @@ -1328,6 +1334,9 @@ packages: pino-abstract-transport@2.0.0: resolution: {integrity: sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==} + pino-logstash@1.0.0: + resolution: {integrity: sha512-v8UCUxGROClKZW6mB0GumsfCi3gnmupMNDzh86TX9Oab9ijDjIW3vJdMjlcNaAyJK9GiJxUdLtI6amzLhpuARg==} + pino-pretty@13.0.0: resolution: {integrity: sha512-cQBBIVG3YajgoUjo1FdKVRX6t9XPxwB9lcNJVD5GCnNM4Y6T12YYx8c6zEejxQsU0wrg9TwmDulcE9LR7qcJqA==} hasBin: true @@ -2785,6 +2794,8 @@ snapshots: dependencies: split2: 4.2.0 + pino-logstash@1.0.0: {} + pino-pretty@13.0.0: dependencies: colorette: 2.0.20 diff --git a/src/api/auth/default.js b/src/api/auth/default.js index b8a9063..6a15651 100644 --- a/src/api/auth/default.js +++ b/src/api/auth/default.js @@ -1,6 +1,5 @@ import fastifyJWT from '@fastify/jwt'; import fastifyCookie from '@fastify/cookie'; -import client from 'prom-client'; import { register } from './register.js'; import { login } from './login.js'; @@ -14,7 +13,6 @@ import { totpVerify } from './totpVerify.js'; const saltRounds = 10; export const appName = process.env.APP_NAME || 'knl_meowscendence'; -const collectDefaultMetrics = client.collectDefaultMetrics authDB.prepareDB(); @@ -24,29 +22,6 @@ authDB.prepareDB(); */ export default async function(fastify, options) { - collectDefaultMetrics({ labels: { service: "auth-api" } }) - client.register.setDefaultLabels({ service: "auth-api" }) - - const httpRequestCounter = new client.Counter({ - name: 'http_requests_total', - help: 'Total number of HTTP requests', - labelNames: ['method', 'route', 'status_code'], - }) - - fastify.addHook('onResponse', (req, res, done) => { - httpRequestCounter.inc({ - method: req.method, - route: req.routerPath || req.url, - status_code: res.statusCode, - }) - done() - }) - fastify.get('/metrics', async (req, reply) => { - reply - .header('Content-Type', client.register.contentType) - .send(await client.register.metrics()) - }) - fastify.register(fastifyJWT, { secret: process.env.JWT_SECRET || '123456789101112131415161718192021', cookie: { diff --git a/src/api/user/default.js b/src/api/user/default.js index 34ef89d..a5efe65 100644 --- a/src/api/user/default.js +++ b/src/api/user/default.js @@ -1,10 +1,8 @@ import fastifyJWT from '@fastify/jwt'; import fastifyCookie from '@fastify/cookie'; import Database from 'better-sqlite3'; -import client from 'prom-client'; var env = process.env.NODE_ENV || 'development'; -const collectDefaultMetrics = client.collectDefaultMetrics let database; @@ -58,31 +56,6 @@ const deleteFriends = database.prepare('DELETE FROM friends WHERE username = ?;' * @param {import('fastify').FastifyPluginOptions} options */ export default async function(fastify, options) { - - collectDefaultMetrics({ labels: { service: "auth-api" } }) - client.register.setDefaultLabels({ service: "auth-api" }) - - const httpRequestCounter = new client.Counter({ - name: 'http_requests_total', - help: 'Total number of HTTP requests', - labelNames: ['method', 'route', 'status_code'], - }) - - fastify.addHook('onResponse', (req, res, done) => { - httpRequestCounter.inc({ - method: req.method, - route: req.routerPath || req.url, - status_code: res.statusCode, - }) - done() - }) - fastify.get('/metrics', async (req, reply) => { - reply - .header('Content-Type', client.register.contentType) - .send(await client.register.metrics()) - }) - - fastify.register(fastifyJWT, { secret: process.env.JWT_SECRET || '123456789101112131415161718192021', cookie: { diff --git a/src/start.js b/src/start.js index 3a0e40a..e76f7d9 100644 --- a/src/start.js +++ b/src/start.js @@ -1,53 +1,71 @@ import Fastify from 'fastify'; import authApi from './api/auth/default.js'; import userApi from './api/user/default.js'; +import fs from 'fs'; +import path from 'path'; -const loggerOption = { - transport: { - target: 'pino-pretty', - options: { - colorize: true, - translateTime: 'HH:MM:ss', - ignore: 'pid,hostname' - } - }, - file: process.env.LOG_TARGET || "" +const isProduction = process.env.NODE_ENV === 'production'; +const logFilePath = process.env.LOG_FILE_PATH || './logs/api.log'; + +const loggerOption = () => { + if (!isProduction) { + return { + transport: { + target: 'pino-pretty', + options: { + colorize: true, + translateTime: 'HH:MM:ss', + ignore: 'pid,hostname', + }, + }, + }; + } else { + // Make sure the directory exists + const logDir = path.dirname(logFilePath); + fs.mkdirSync(logDir, { recursive: true }); + + const logStream = fs.createWriteStream(logFilePath, { flags: 'a' }); // append mode + return { + level: 'info', + stream: logStream, + }; + } }; -function sigHandle(signal) { - process.exit(0); -} - -process.on('SIGINT', sigHandle); - async function start() { const target = process.env.API_TARGET || 'all'; + const servers = []; + if (target === 'auth' || target === 'all') { - const auth = Fastify({ logger: loggerOption }); + const auth = Fastify({ logger: loggerOption('auth') }); auth.register(authApi); - if (target !== 'all') { - await auth.listen({ port: 3000, host: '0.0.0.0' }); - console.log('Auth API listening on http://0.0.0.0:3000'); - } - else { - await auth.listen({ port: 3001, host: '127.0.0.1'}); - console.log('Auth API listening on http://localhost:3001'); - } + const port = target === 'all' ? 3001 : 3000; + const host = target === 'all' ? '127.0.0.1' : '0.0.0.0'; + await auth.listen({ port, host }); + console.log(`Auth API listening on http://${host}:${port}`); + servers.push(auth); } if (target === 'user' || target === 'all') { - const user = Fastify({ logger: loggerOption }); + const user = Fastify({ logger: loggerOption('user') }); user.register(userApi); - if (target !== 'all') { - await user.listen({ port: 3000, host: '0.0.0.0' }); - console.log('User API listening on http://0.0.0.0:3000'); - } - else { - await user.listen({ port: 3002, host: '127.0.0.1'}); - console.log('User API listening on http://localhost:3002'); - } + const port = target === 'all' ? 3002 : 3000; + const host = target === 'all' ? '127.0.0.1' : '0.0.0.0'; + await user.listen({ port, host }); + console.log(`User API listening on http://${host}:${port}`); + servers.push(user); } + + // Graceful shutdown on SIGINT + process.on('SIGINT', async () => { + console.log('SIGINT received, closing servers...'); + await Promise.all(servers.map((srv) => srv.close())); + process.exit(0); + }); } -start().catch(console.error); +start().catch((err) => { + console.error(err); + process.exit(1); +}); From fb77548db164e20af36022206759db01fe843003 Mon Sep 17 00:00:00 2001 From: adjoly Date: Sat, 26 Jul 2025 15:32:48 +0200 Subject: [PATCH 08/11] =?UTF-8?q?=E3=80=8C=F0=9F=8F=97=EF=B8=8F=E3=80=8D?= =?UTF-8?q?=20wip:=20work=20in=20progress,=20not=20done=20yet.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker/api-base/compose.yml | 3 + docker/docker-compose.yml | 2 +- package.json | 1 - pnpm-lock.yaml | 180 ------------------------------------ 4 files changed, 4 insertions(+), 182 deletions(-) diff --git a/docker/api-base/compose.yml b/docker/api-base/compose.yml index 9d33dc7..9ce5386 100644 --- a/docker/api-base/compose.yml +++ b/docker/api-base/compose.yml @@ -31,6 +31,9 @@ services: - prom-exporter environment: - TZ=Europe/Paris + - GOOGLE_CALLBACK_URL=${GOOGLE_CALLBACK_URL} + - GOOGLE_CLIENT_ID=${GOOGLE_CLIENT_ID} + - GOOGLE_CLIENT_SECRET=${GOOGLE_CLIENT_SECRET} - API_TARGET=auth - LOG_FILE_PATH=/var/log/log.log - JWT_SECRET=${JWT_SECRET} diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 77718d0..9e49825 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -3,7 +3,7 @@ name: ft_transcendence include: - ./volumes.yml - ./networks.yml - # - ./monitoring/compose.yml + - ./monitoring/compose.yml - ./api-base/compose.yml - ./front/compose.yml - ./ELK/compose.yml diff --git a/package.json b/package.json index c980981..0c43524 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,6 @@ "better-sqlite3": "^12.2.0", "fastify": "^5.4.0", "fastify-cli": "^7.4.0", - "google-auth-library": "^10.1.0", "pino": "^9.7.0", "pino-logstash": "^1.0.0", "prom-client": "^15.1.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ef4dd58..75dd8c8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -35,9 +35,6 @@ importers: fastify-cli: specifier: ^7.4.0 version: 7.4.0 - google-auth-library: - specifier: ^10.1.0 - version: 10.1.0 pino: specifier: ^9.7.0 version: 9.7.0 @@ -518,10 +515,6 @@ packages: abstract-logging@2.0.1: resolution: {integrity: sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==} - agent-base@7.1.4: - resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} - engines: {node: '>= 14'} - ajv-errors@1.0.1: resolution: {integrity: sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==} peerDependencies: @@ -603,9 +596,6 @@ packages: resolution: {integrity: sha512-eGbYq2CT+tos1fBwLQ/tkBt9J5M3JEHjku4hbvQUePCckkvVf14xWj+1m7dGoK81M/fOjFT7yM9UMeKT/+vFLQ==} engines: {node: 20.x || 22.x || 23.x || 24.x} - bignumber.js@9.3.1: - resolution: {integrity: sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==} - bindings@1.5.0: resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} @@ -621,9 +611,6 @@ packages: brace-expansion@2.0.2: resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} - buffer-equal-constant-time@1.0.1: - resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} - buffer@5.7.1: resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} @@ -698,22 +685,9 @@ packages: typescript: optional: true - data-uri-to-buffer@4.0.1: - resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} - engines: {node: '>= 12'} - dateformat@4.6.3: resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==} - debug@4.4.1: - resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - decompress-response@6.0.0: resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} engines: {node: '>=10'} @@ -794,9 +768,6 @@ packages: resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} engines: {node: '>=6'} - extend@3.0.2: - resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} - fast-copy@3.0.2: resolution: {integrity: sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ==} @@ -863,10 +834,6 @@ packages: picomatch: optional: true - fetch-blob@3.2.0: - resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} - engines: {node: ^12.20 || >= 14.13} - file-uri-to-path@1.0.0: resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} @@ -895,10 +862,6 @@ packages: resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==} engines: {node: '>= 6'} - formdata-polyfill@4.0.10: - resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} - engines: {node: '>=12.20.0'} - fs-constants@1.0.0: resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} @@ -917,14 +880,6 @@ packages: function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - gaxios@7.1.1: - resolution: {integrity: sha512-Odju3uBUJyVCkW64nLD4wKLhbh93bh6vIg/ZIXkWiLPBrdgtc65+tls/qml+un3pr6JqYVFDZbbmLDQT68rTOQ==} - engines: {node: '>=18'} - - gcp-metadata@7.0.1: - resolution: {integrity: sha512-UcO3kefx6dCcZkgcTGgVOTFb7b1LlQ02hY1omMjjrrBzkajRMCFgYOjs7J71WqnuG1k2b+9ppGL7FsOfhZMQKQ==} - engines: {node: '>=18'} - generify@4.2.0: resolution: {integrity: sha512-b4cVhbPfbgbCZtK0dcUc1lASitXGEAIqukV5DDAyWm25fomWnV+C+a1yXvqikcRZXHN2j0pSDyj3cTfzq8pC7Q==} hasBin: true @@ -949,14 +904,6 @@ packages: engines: {node: '>=12'} deprecated: Glob versions prior to v9 are no longer supported - google-auth-library@10.1.0: - resolution: {integrity: sha512-GspVjZj1RbyRWpQ9FbAXMKjFGzZwDKnUHi66JJ+tcjcu5/xYAP1pdlWotCuIkMwjfVsxxDvsGZXGLzRt72D0sQ==} - engines: {node: '>=18'} - - google-logging-utils@1.1.1: - resolution: {integrity: sha512-rcX58I7nqpu4mbKztFeOAObbomBbHU2oIb/d3tJfF3dizGSApqtSwYJigGCooHdnMyQBIw8BrWyK96w3YXgr6A==} - engines: {node: '>=14'} - gopd@1.2.0: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} @@ -971,10 +918,6 @@ packages: graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - gtoken@8.0.0: - resolution: {integrity: sha512-+CqsMbHPiSTdtSO14O51eMNlrp9N79gmeqmXeouJOhfucAedHw9noVe/n5uJk3tbKE6a+6ZCQg3RPhVhHByAIw==} - engines: {node: '>=18'} - has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} @@ -1001,10 +944,6 @@ packages: resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==} engines: {node: '>=10.19.0'} - https-proxy-agent@7.0.6: - resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} - engines: {node: '>= 14'} - ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} @@ -1061,9 +1000,6 @@ packages: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true - json-bigint@1.0.0: - resolution: {integrity: sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==} - json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} @@ -1086,12 +1022,6 @@ packages: resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} engines: {node: '>=0.10.0'} - jwa@2.0.1: - resolution: {integrity: sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==} - - jws@4.0.0: - resolution: {integrity: sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==} - keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} @@ -1242,9 +1172,6 @@ packages: mnemonist@0.40.3: resolution: {integrity: sha512-Vjyr90sJ23CKKH/qPAgUKicw/v6pRoamxIEDFOF8uSgFME7DqPRpHgRTejWVjkdGg5dXj0/NyxZHZ9bcjH+2uQ==} - ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - nanoid@3.3.11: resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -1261,15 +1188,6 @@ packages: resolution: {integrity: sha512-D9DI/gXHvVmjHS08SVch0Em8G5S1P+QWtU31appcKT/8wFSPRcdHadIFSAntdMMVM5zz+/DL+bL/gz3UDppqtg==} engines: {node: ^18 || ^20 || >= 21} - node-domexception@1.0.0: - resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} - engines: {node: '>=10.5.0'} - deprecated: Use your platform's native DOMException instead - - node-fetch@3.3.2: - resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - node-gyp-build@4.8.4: resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} hasBin: true @@ -1643,10 +1561,6 @@ packages: walker@1.0.8: resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} - web-streams-polyfill@3.3.3: - resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} - engines: {node: '>= 8'} - wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} @@ -1979,8 +1893,6 @@ snapshots: abstract-logging@2.0.1: {} - agent-base@7.1.4: {} - ajv-errors@1.0.1(ajv@6.12.6): dependencies: ajv: 6.12.6 @@ -2066,8 +1978,6 @@ snapshots: bindings: 1.5.0 prebuild-install: 7.1.3 - bignumber.js@9.3.1: {} - bindings@1.5.0: dependencies: file-uri-to-path: 1.0.0 @@ -2086,8 +1996,6 @@ snapshots: dependencies: balanced-match: 1.0.2 - buffer-equal-constant-time@1.0.1: {} - buffer@5.7.1: dependencies: base64-js: 1.5.1 @@ -2159,14 +2067,8 @@ snapshots: optionalDependencies: typescript: 5.8.3 - data-uri-to-buffer@4.0.1: {} - dateformat@4.6.3: {} - debug@4.4.1: - dependencies: - ms: 2.1.3 - decompress-response@6.0.0: dependencies: mimic-response: 3.1.0 @@ -2262,8 +2164,6 @@ snapshots: expand-template@2.0.3: {} - extend@3.0.2: {} - fast-copy@3.0.2: {} fast-decode-uri-component@1.0.1: {} @@ -2361,11 +2261,6 @@ snapshots: optionalDependencies: picomatch: 4.0.2 - fetch-blob@3.2.0: - dependencies: - node-domexception: 1.0.0 - web-streams-polyfill: 3.3.3 - file-uri-to-path@1.0.0: {} find-my-way@9.3.0: @@ -2390,10 +2285,6 @@ snapshots: hasown: 2.0.2 mime-types: 2.1.35 - formdata-polyfill@4.0.10: - dependencies: - fetch-blob: 3.2.0 - fs-constants@1.0.0: {} fs-extra@11.3.0: @@ -2409,22 +2300,6 @@ snapshots: function-bind@1.1.2: {} - gaxios@7.1.1: - dependencies: - extend: 3.0.2 - https-proxy-agent: 7.0.6 - node-fetch: 3.3.2 - transitivePeerDependencies: - - supports-color - - gcp-metadata@7.0.1: - dependencies: - gaxios: 7.1.1 - google-logging-utils: 1.1.1 - json-bigint: 1.0.0 - transitivePeerDependencies: - - supports-color - generify@4.2.0: dependencies: isbinaryfile: 4.0.10 @@ -2462,20 +2337,6 @@ snapshots: minimatch: 5.1.6 once: 1.4.0 - google-auth-library@10.1.0: - dependencies: - base64-js: 1.5.1 - ecdsa-sig-formatter: 1.0.11 - gaxios: 7.1.1 - gcp-metadata: 7.0.1 - google-logging-utils: 1.1.1 - gtoken: 8.0.0 - jws: 4.0.0 - transitivePeerDependencies: - - supports-color - - google-logging-utils@1.1.1: {} - gopd@1.2.0: {} got@12.6.1: @@ -2496,13 +2357,6 @@ snapshots: graceful-fs@4.2.11: {} - gtoken@8.0.0: - dependencies: - gaxios: 7.1.1 - jws: 4.0.0 - transitivePeerDependencies: - - supports-color - has-flag@4.0.0: {} has-symbols@1.1.0: {} @@ -2524,13 +2378,6 @@ snapshots: quick-lru: 5.1.1 resolve-alpn: 1.2.1 - https-proxy-agent@7.0.6: - dependencies: - agent-base: 7.1.4 - debug: 4.4.1 - transitivePeerDependencies: - - supports-color - ieee754@1.2.1: {} ignore@5.3.2: {} @@ -2569,10 +2416,6 @@ snapshots: dependencies: argparse: 2.0.1 - json-bigint@1.0.0: - dependencies: - bignumber.js: 9.3.1 - json-buffer@3.0.1: {} json-parse-even-better-errors@2.3.1: {} @@ -2593,17 +2436,6 @@ snapshots: jsonpointer@5.0.1: {} - jwa@2.0.1: - dependencies: - buffer-equal-constant-time: 1.0.1 - ecdsa-sig-formatter: 1.0.11 - safe-buffer: 5.2.1 - - jws@4.0.0: - dependencies: - jwa: 2.0.1 - safe-buffer: 5.2.1 - keyv@4.5.4: dependencies: json-buffer: 3.0.1 @@ -2720,8 +2552,6 @@ snapshots: dependencies: obliterator: 2.0.5 - ms@2.1.3: {} - nanoid@3.3.11: {} napi-build-utils@2.0.0: {} @@ -2732,14 +2562,6 @@ snapshots: node-addon-api@8.4.0: {} - node-domexception@1.0.0: {} - - node-fetch@3.3.2: - dependencies: - data-uri-to-buffer: 4.0.1 - fetch-blob: 3.2.0 - formdata-polyfill: 4.0.10 - node-gyp-build@4.8.4: {} normalize-url@8.0.2: {} @@ -3139,8 +2961,6 @@ snapshots: dependencies: makeerror: 1.0.12 - web-streams-polyfill@3.3.3: {} - wrappy@1.0.2: {} xtend@4.0.2: {} From 4770b3825d4c8acdf939781f3bdf8d12e37a3256 Mon Sep 17 00:00:00 2001 From: adjoly Date: Sat, 26 Jul 2025 15:36:25 +0200 Subject: [PATCH 09/11] =?UTF-8?q?=E3=80=8C=F0=9F=8F=97=EF=B8=8F=E3=80=8D?= =?UTF-8?q?=20wip:=20added=20env=20example?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.example | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 .env.example diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..69ec206 --- /dev/null +++ b/.env.example @@ -0,0 +1,17 @@ +OUT_PORT=8443 + +JWT_SECRET=wut + +PROM_PORT=9090 +# this hash is generated with : htpasswd -nbB admin admin +PROM_HASH=$2y$05$29xV50WIgdOcLtFwKnr9cObGlS9booo97Ny7gRxAuADkwF9rS3nD. +PROM_PASS=admin + +GRAPH_PORT=3000 + +ELK_PORT=5601 + +GOOGLE_CALLBACK_ID=https://localhost:8443/api/v1 +GOOGLE_CLIENT_SECRET=susAF +GOOGLE_CLIENT_ID=Really + From a90fe8c6c83b90aa83cadaa9ef804a37d2af632d Mon Sep 17 00:00:00 2001 From: adjoly Date: Sat, 26 Jul 2025 15:38:10 +0200 Subject: [PATCH 10/11] =?UTF-8?q?=E3=80=8C=F0=9F=94=A8=E3=80=8D=20fix:=20f?= =?UTF-8?q?ixed=20random=20skill=20issue?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.example | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.env.example b/.env.example index 69ec206..34d30e2 100644 --- a/.env.example +++ b/.env.example @@ -11,7 +11,7 @@ GRAPH_PORT=3000 ELK_PORT=5601 -GOOGLE_CALLBACK_ID=https://localhost:8443/api/v1 +GOOGLE_CALLBACK_URL=https://localhost:8443/api/v1 GOOGLE_CLIENT_SECRET=susAF GOOGLE_CLIENT_ID=Really From 2f35a4951a7fed740c90623e73059de3075dd66a Mon Sep 17 00:00:00 2001 From: adjoly Date: Sat, 26 Jul 2025 15:50:51 +0200 Subject: [PATCH 11/11] =?UTF-8?q?=E3=80=8C=E2=9C=A8=E3=80=8D=20feat(Justfi?= =?UTF-8?q?le):=20added=20status=20command?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Justfile | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Justfile b/Justfile index a5736f1..c04c12a 100644 --- a/Justfile +++ b/Justfile @@ -44,3 +44,6 @@ set dotenv-load # To clean only the container launched by the compose @clean-compose: stop-docker docker compose -f docker/docker-compose.yml rm + +@status: + docker compose -f docker/docker-compose.yml ps