From 7ef675c663f8b300b610f384b7a6227a80ce87b6 Mon Sep 17 00:00:00 2001 From: Usman Ghani Date: Wed, 8 Jul 2026 12:51:18 +0500 Subject: [PATCH 1/4] refractor(authsvc/express): replace express with hono . --- auth-svc/.env.development | 10 +- auth-svc/.env.production | 10 +- auth-svc/bun.lock | 199 ++++++++++---------------------- auth-svc/package.json | 19 ++-- auth-svc/src/app.mjs | 193 +++++++++++++++++++++++++++++++ auth-svc/src/user-server.mjs | 208 ---------------------------------- auth-svc/src/users-prisma.mjs | 28 ++--- auth-svc/tests/api.test.mjs | 18 +++ auth-svc/tsconfig.json | 10 +- 9 files changed, 313 insertions(+), 382 deletions(-) create mode 100644 auth-svc/src/app.mjs delete mode 100644 auth-svc/src/user-server.mjs create mode 100644 auth-svc/tests/api.test.mjs diff --git a/auth-svc/.env.development b/auth-svc/.env.development index 19d841b..0c6b6b6 100644 --- a/auth-svc/.env.development +++ b/auth-svc/.env.development @@ -1,8 +1,8 @@ DOTENV_PUBLIC_KEY_DEVELOPMENT="02d0abba1b8b164c0beaad518cab55a5239161ee8d9b7af1b01ee02a1436f9bd96" -BEARER_TOKEN_PRIVATEKEY=encrypted:BEFXK8SJvNLnYjSvLA9zZ5TVeOu3aFgIjtOmXBhGm3XwhS/qSmD7Vv4pevVNj6cvykYu3i5R/kqJpyiJmzAmCOdaf9jsZZ+theLhyOKcD6tJbE7QsBM+k6B7nV2RibIDk+26XegHBFlmHJSAHvXILkML9kVls5by4GIrOmcgbAloUH35IA== -PORT=encrypted:BPJ69tLi5QARmpcuwN6K6L4mmaZ43YWQQkSsf4aKI7SjCJbA6+HrZBi38ULvL2WpHXi5tQZg6a21vpB9lJWIiw0b8Upc6BXDS2I9S7wHPU79tzZBvo0edA5vxtMSTKCBNdzKWyk= -APIKEY_USER=encrypted:BNLEAvadqpCkgZ/WDLsDeDLM2q+H6BhL1FfvBwwM0S44rZO7A29FZscfBF7IB+7/XMuUoJ+jDncYxhSwdoPmuUoPC3qH7nMYWINN6jIKdfuE3mmO8/r2oLpXQVF/ji9pODvNVm2xIMb0cvetNgpmYWwygLVU45YNf0lEDTr3puU7FhJiuw== -APIKEY_PASSWORD=encrypted:BErq+IRMBtPA48XSsOiF3r7APynERJDpyDW9ujPTFaLnNcAmb53+shXZf60N5WYcy0zK0+DRsNTK2dCqSAXlZe0TxlhtxrUW8c9iSeOlOgxUPdCxH+M+zqhzyLCvJ2jyZKXQ0JlLAENAdfwsumSBTTToAmRsaB52ghbq/giHffCXvRqGSQ== +BEARER_TOKEN_PRIVATEKEY=encrypted:BFqripFDhCC+dGPBV9JmrKiwfI8zO/MLiwXUyK4LEPVseH0zHn9DB2CRKOdW5FY6ZQweQJyyQAYyo401YbvEAJNy7QecAxpZZJfnSmbIXbkRDHAIY7MBDQgptLgIMiQjbNWIZ/vESBEml4ffNuL+7dl8Oh7MbQJplfAwLH7dmYWKzuQWGQ== +PORT=encrypted:BNxsRvYTvF9reOJugFzdxAnk3QnCo+8RBeaTDeml7+XoeOEBA0ZoQ6xoyAAnGxFmiaZVNMxhxSxuviyRk2nl7k+Ai1fABUsFB+8om3leELFc8PEMwWezzQ80tj9vfN/2y8QjHQ4= +APIKEY_USER=encrypted:BGLIFbCgN4frxYsroHTuAPYJpXkQCWfWA9iiMQvoX9ef3cbamj+xqrhG7ckrH1Ez6fj8yeyHSB2Ee8nmi8tNmHXjT3YFMscB5AhrlqEC0a9A9XqfUlRg8Xfpeguom2r6VQ8NMf/jT5/h1kUtfB3aoSuWI/WMgE8yNdX9q4kOUTYB14Hmdw== +APIKEY_PASSWORD=encrypted:BLIdndmTFdjHnAHTFxDxWl1QkAJSQU7ktNpSDd4vjFUNdUUjteLEhDlQhfJVeVC3Aaaxb0TATozdUjNmvTdQ2u0nXrjAvlihvaTD29ISpaxo4b8lJWR6ET3EKYbvzFf1PzEDb7dWpQ7N9opPvYrtz5GX4KhjIE0KbI0FcGlfiggL8/ISiw== -DATABASE_URL="encrypted:BBCNKOVxqoWCKoh/gDMmf6lx+oxvHEFI5NU2k2VaRr10SM80mOMrRmZnrwfj7J3UvZoYX/GyxxzgqcuGUmjkvskzaTn2NSjjsFWdRBSORYgiCnF3CUc4j3YYsWghjOPZRf3N22O2BaSurByKJJzIp8Sm+pKlC1XCx7/pFh+weMFLevnd00Xd9nlMsk2qWrULHpimQAcE/NaXzFugWFeLCpU=" \ No newline at end of file +DATABASE_URL="encrypted:BAV2ioNNJAreTHymMvARvM33bnUJ8P/A7gBfvAXaxF0mnMVZKIds+WJ+aMectqsklwvvtWiCB0qUYReIeUbndLpLHOCMgHyKNZK5q9FrPKrsyMxUaLATmT0+AZRnBeGoErozhTkf76BqHfv4IPbpXEZHaW6SBFpqe8SZ3UCxq5w9Ik6fag9PcQC2wi/adYc0WNKMgrWS+/9JOBh0Y9yq" \ No newline at end of file diff --git a/auth-svc/.env.production b/auth-svc/.env.production index 8bfc557..e151793 100644 --- a/auth-svc/.env.production +++ b/auth-svc/.env.production @@ -1,8 +1,8 @@ DOTENV_PUBLIC_KEY_PRODUCTION="03a00202ae7b3ad87b4f856c7281db20733d192d5e426a619225782b49b7aeb34c" -BEARER_TOKEN_PRIVATEKEY=encrypted:BGVsEIFvsi3DTDR3YtwnrsKHroe7uxnMIW0klCCXf3RQ01AFEH94n3asI+E+4tQ+l8blqhuAJS8bUU8HDZKjpPRSoRn6/LONcEZ3pvBNv1tVQHIdKBPfPAc4ivETUNkxg9qaL1imcovXnbfo19a/b3Mu3lCYYGgDdwI5u2Izo9wmRMQ2tw== -PORT=encrypted:BLVotORyFHv5lpyRtSkFQKSVERt2C9IwKLUM4w7baRBTyjSKVJ06b6TPzRneINXY7L2wxJWSLafMrEF7owMlZOpj7i8Y1gAJXhoh4CRptWDk/DWDEZNS59wW0yVY4YbonohRmDQ= -APIKEY_USER=encrypted:BBTt6bsM18bRbejLVddic0NuHzT36R0+aohseXG5N00KZ2kAnkuntw8iAsOe5GooMUn05QxNMqSQ4oN9ixCjWpIhSK2lytUtz/up1YLi+jEN6K/qgJ7iVGeiMBY7gvfNWF/RdjtttSlwmkTTNn+Dn4D+mX2DP2DR3Mr9nxMmmgDq/IeFMA== -APIKEY_PASSWORD=encrypted:BI6zHAlelhHqi/gAN7qw5aJAhBf7ofCQ+V6ggxyToZWcYV/TZ5xluy/fJ/ktte4OxrDSG9C+bCdBrlp7c5uRrI4tSU/zoZF04dr3A9hMBB8PqOmHZFwqBYULRWJJC1jNBNs/4eYNlIzybb2NMfThAdXBS/Y8Yda0sN9e1abwmAPsEHNrlw== +BEARER_TOKEN_PRIVATEKEY=encrypted:BDubX/DKx0CBKuHa0LCvClaLM2bzk5MOU4TB49rkS9WBdMWUXPcNwC6G9mTkf2J9Vv+ALXF6O8gOOPWzktagCyAS8e1Bf2bnl0d5ChggG+Tn6IKo3wFYvpIgWlyJYTSgWznujxqMVb9pYazjQLkEgJSyYb/TtHX+Vl6pFLitwNd34wS5uA== +PORT=encrypted:BN2Tywizb9JVjOPO7dDlWPYoPaDDu5MUuijV1VcGkt89h9zZtb8R0pjsvyXUE7AwtMr5RpGqGyN6DLayKsLW3/w9YUyLRLsql0dLPXvlDb64hL0wTXhQFoEebXaUoQ4BPwHe2S8= +APIKEY_USER=encrypted:BBPh/BO/FrhLCzGdnlLXUVioaXfmj26jy2El7w9rwr+nhqbWMkViPwAm1PWgjvH4rCMiuXlOSGQJxCe3qWOQ9q5hAEC7j+eOYd9gR9o0sUpmtnXFIZDGZivQ2LTfiTclCERrLho1UkU4J8B6PRIjomkq2uBQUvITeb3FQk1ExlwY5pBbeg== +APIKEY_PASSWORD=encrypted:BMTHTMZX87T8KcHLbC82fcLzCvsKNmWbR35yZyZasR/QkqPEzo0dCsmEjLkjSs4HhSAG4Xp6PH2fvf6GSek/8u76FhhvHb2DfUhHy/W+XJuBzQuES++FX/Fp5j4ZktlmSU/HYDtBOqBjvW4XpNWNw43h6EEHpiYilzfFg3hn373Lv7RLLA== -DATABASE_URL="encrypted:BOoAQUb7ubNZ+ools+cEv8iSh4XMJlagp2pHbSiIa1t1djYaFISmyA5529R420PuRLLv+3UQfmf5g5jUNtH4zUO4zZmUn5ivavzRPthh5fkqHmvAtz1yMEcXdqBtjIADVnxsBbPiwvVELhIBJ6MFifZVnvYwXFoQ1aKUbRmMdyESiQRAZSRgCih9hH5VGGV62XFYo8B37xfioQRIFSqG36upOMLkIpY29fa6zeP4GGmJB+ZQJpAXfzVr7CZ447O6CyyCJRMLkBM7Tx5Y28dmEkBuU1laYfhQ5pRCEGwvYA8m/cZSooFFqFaSeYPqstBCnIbYlQqM0hpN" \ No newline at end of file +DATABASE_URL="encrypted:BJxyvcdrdaJM6Cz1L0a/eUArmSsuTeyWEbsfYPpvLSsasgajPKEDfunXO/Mbi4HReVo7ndS6d6xmjdUwAw6nBZ8bkoqgWv9kIS71LpKYpcOVSebiyGGOPLJOyXs2gG/h9HtOasGItB2IjnAUyDw32TlIgK4SNCNKi3nNNTdIcwIVOhVJgPtg2bdqp7YMfxS8/OxBjMI3poM8+/VBIGn03t113tE3JZgDnDKnspjlsamFgXQ7et1jAFY4YaSJmupyKPZqyn7VqVkpOjm2ibgz9SYuVenVojJ+RpI0ggMGfkZzCibtNd9Th6tObK/+AYShWVqonpaR3pWJ" \ No newline at end of file diff --git a/auth-svc/bun.lock b/auth-svc/bun.lock index 9863782..c7a0702 100644 --- a/auth-svc/bun.lock +++ b/auth-svc/bun.lock @@ -5,18 +5,15 @@ "": { "name": "postbase-users-api", "dependencies": { - "@dotenvx/dotenvx": "^1.64.0", + "@dotenvx/dotenvx": "^1.75.1", "@prisma/adapter-pg": "^7.8.0", "@prisma/client": "^7.8.0", "bcryptjs": "^3.0.3", - "cross-env": "^10.1.0", - "debug": "^4.4.3", - "express": "^5.2.1", + "hono": "^4.12.28", "jsonwebtoken": "^9.0.3", }, "devDependencies": { - "@types/node": "^24.12.2", - "@types/pg": "^8.20.0", + "@types/bun": "^1.3.14", "prisma": "^7.8.0", "typescript": "^5.9.3", }, @@ -27,9 +24,9 @@ "@clack/prompts": ["@clack/prompts@0.11.0", "", { "dependencies": { "@clack/core": "0.5.0", "picocolors": "^1.0.0", "sisteransi": "^1.0.5" } }, "sha512-pMN5FcrEw9hUkZA4f+zLlzivQSeQf5dRGJjSUbvVYDLvpKCdQx5OaknvKzgbtXOizhP+SJJJjqEbOe55uKKfAw=="], - "@dotenvx/dotenvx": ["@dotenvx/dotenvx@1.64.0", "", { "dependencies": { "commander": "^11.1.0", "dotenv": "^17.2.1", "eciesjs": "^0.4.10", "execa": "^5.1.1", "fdir": "^6.2.0", "ignore": "^5.3.0", "object-treeify": "1.1.33", "picomatch": "^4.0.4", "which": "^4.0.0", "yocto-spinner": "^1.1.0" }, "bin": { "dotenvx": "src/cli/dotenvx.js" } }, "sha512-6+xRpZaWuHXEqnhBjae+VmQI9Uaqw5Uzu/ScpO+W7ww9Zp3lHSNBoNjFcUxhrCyc7pRGQzyDjhKzloqrPHERiQ=="], + "@dotenvx/dotenvx": ["@dotenvx/dotenvx@1.75.1", "", { "dependencies": { "@dotenvx/primitives": "^0.8.0", "commander": "^11.1.0", "conf": "^10.2.0", "dotenv": "^17.2.1", "enquirer": "^2.4.1", "env-paths": "^2.2.1", "execa": "^5.1.1", "fdir": "^6.2.0", "ignore": "^5.3.0", "object-treeify": "1.1.33", "open": "^8.4.2", "picomatch": "^4.0.4", "systeminformation": "^5.22.11", "undici": "^7.11.0", "which": "^4.0.0", "yocto-spinner": "^1.1.0" }, "bin": { "dotenvx": "src/cli/dotenvx.js" } }, "sha512-/BITOC9dmS/edY2zQwZNicQ059O6RKabtQfyEafV0nGtfYRNHYy1DIPiYVcov40+tob9hfmBnbR963dS+EQ1DQ=="], - "@ecies/ciphers": ["@ecies/ciphers@0.2.5", "", { "peerDependencies": { "@noble/ciphers": "^1.0.0" } }, "sha512-GalEZH4JgOMHYYcYmVqnFirFsjZHeoGMDt9IxEnM9F7GRUUyUksJ7Ou53L83WHJq3RWKD3AcBpo0iQh0oMpf8A=="], + "@dotenvx/primitives": ["@dotenvx/primitives@0.8.0", "", {}, "sha512-VYJy0uhFm9zTJ1TxBaW/pA8bjbOM/OttaNMwZ1RHG4JKyRG7DhSdiqD1ipQoAyoD22olUtxbP78W9xY3Wd11bg=="], "@electric-sql/pglite": ["@electric-sql/pglite@0.4.1", "", {}, "sha512-mZ9NzzUSYPOCnxHH1oAHPRzoMFJHY472raDKwXl/+6oPbpdJ7g8LsCN4FSaIIfkiCKHhb3iF/Zqo3NYxaIhU7Q=="], @@ -37,18 +34,10 @@ "@electric-sql/pglite-tools": ["@electric-sql/pglite-tools@0.3.1", "", { "peerDependencies": { "@electric-sql/pglite": "0.4.1" } }, "sha512-C+T3oivmy9bpQvSxVqXA1UDY8cB9Eb9vZHL9zxWwEUfDixbXv4G3r2LjoTdR33LD8aomR3O9ZXEO3XEwr/cUCA=="], - "@epic-web/invariant": ["@epic-web/invariant@1.0.0", "", {}, "sha512-lrTPqgvfFQtR/eY/qkIzp98OGdNJu0m5ji3q/nJI8v3SXkRKEnWiOxMmbvcSoAIzv/cGiuvRy57k4suKQSAdwA=="], - "@hono/node-server": ["@hono/node-server@1.19.11", "", { "peerDependencies": { "hono": "^4" } }, "sha512-dr8/3zEaB+p0D2n/IUrlPF1HZm586qgJNXK1a9fhg/PzdtkK7Ksd5l312tJX2yBuALqDYBlG20QEbayqPyxn+g=="], "@kurkle/color": ["@kurkle/color@0.3.4", "", {}, "sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w=="], - "@noble/ciphers": ["@noble/ciphers@1.3.0", "", {}, "sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw=="], - - "@noble/curves": ["@noble/curves@1.9.7", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw=="], - - "@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="], - "@prisma/adapter-pg": ["@prisma/adapter-pg@7.8.0", "", { "dependencies": { "@prisma/driver-adapter-utils": "7.8.0", "@types/pg": "^8.16.0", "pg": "^8.16.3", "postgres-array": "3.0.4" } }, "sha512-ygb3UkerK3v8MDpXVgCISdRNDozpxh6+JVJgiIGbSr5KBgz10LLf5ejUskPGoXlsIjxsOu6nuy1JVQr2EKGSlg=="], "@prisma/client": ["@prisma/client@7.8.0", "", { "dependencies": { "@prisma/client-runtime-utils": "7.8.0" }, "peerDependencies": { "prisma": "*", "typescript": ">=5.4.0" }, "optionalPeers": ["prisma", "typescript"] }, "sha512-HFp3Dawv/3sU3JtlPha90IB+48lS7zHiH4LKZPjmcE8YH5P9DOXGPvo8dqOtO7MqLDd1p2hOWMcFlRT1DMblHw=="], @@ -95,100 +84,78 @@ "@standard-schema/spec": ["@standard-schema/spec@1.1.0", "", {}, "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w=="], - "@types/node": ["@types/node@24.12.2", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-A1sre26ke7HDIuY/M23nd9gfB+nrmhtYyMINbjI1zHJxYteKR6qSMX56FsmjMcDb3SMcjJg5BiRRgOCC/yBD0g=="], + "@types/bun": ["@types/bun@1.3.14", "", { "dependencies": { "bun-types": "1.3.14" } }, "sha512-h1hFqFVcvAvD9j9K7ZW7vd82aSA+rTdznZa+5bwvCwqSB1jmmfLcbIWhOLx1/+boy/xmjgCs/OMUL8hRJSmnPw=="], + + "@types/node": ["@types/node@24.13.2", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-fRa09kZTgu8o71KFcDjUFuc7F+dEbZYZmkI0mg5YBTRs0yMKjYHsq/c0urDKeDb+D5qVgXOdFcuu+DZPKOITwA=="], "@types/pg": ["@types/pg@8.20.0", "", { "dependencies": { "@types/node": "*", "pg-protocol": "*", "pg-types": "^2.2.0" } }, "sha512-bEPFOaMAHTEP1EzpvHTbmwR8UsFyHSKsRisLIHVMXnpNefSbGA1bD6CVy+qKjGSqmZqNqBDV2azOBo8TgkcVow=="], "@types/react": ["@types/react@19.2.14", "", { "dependencies": { "csstype": "^3.2.2" } }, "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w=="], - "accepts": ["accepts@2.0.0", "", { "dependencies": { "mime-types": "^3.0.0", "negotiator": "^1.0.0" } }, "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng=="], - "ajv": ["ajv@8.18.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A=="], + "ajv-formats": ["ajv-formats@2.1.1", "", { "dependencies": { "ajv": "^8.0.0" } }, "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA=="], + + "ansi-colors": ["ansi-colors@4.1.3", "", {}, "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw=="], + + "ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + + "atomically": ["atomically@1.7.0", "", {}, "sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w=="], + "aws-ssl-profiles": ["aws-ssl-profiles@1.1.2", "", {}, "sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g=="], "bcryptjs": ["bcryptjs@3.0.3", "", { "bin": { "bcrypt": "bin/bcrypt" } }, "sha512-GlF5wPWnSa/X5LKM1o0wz0suXIINz1iHRLvTS+sLyi7XPbe5ycmYI3DlZqVGZZtDgl4DmasFg7gOB3JYbphV5g=="], "better-result": ["better-result@2.7.0", "", { "dependencies": { "@clack/prompts": "^0.11.0" }, "bin": { "better-result": "bin/cli.mjs" } }, "sha512-7zrmXjAK8u8Z6SOe4R65XObOR5X+Y2I/VVku3t5cPOGQ8/WsBcfFmfnIPiEl5EBMDOzPHRwbiPbMtQBKYdw7RA=="], - "body-parser": ["body-parser@2.2.2", "", { "dependencies": { "bytes": "^3.1.2", "content-type": "^1.0.5", "debug": "^4.4.3", "http-errors": "^2.0.0", "iconv-lite": "^0.7.0", "on-finished": "^2.4.1", "qs": "^6.14.1", "raw-body": "^3.0.1", "type-is": "^2.0.1" } }, "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA=="], - "buffer-equal-constant-time": ["buffer-equal-constant-time@1.0.1", "", {}, "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA=="], - "bytes": ["bytes@3.1.2", "", {}, "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="], + "bun-types": ["bun-types@1.3.14", "", { "dependencies": { "@types/node": "*" } }, "sha512-4N0ig0fEomHt5R0KCFWjovxow98rIoRwKolrYdCcknNwMekCXRnWEUvgu5soYV8QXtVsrUD8B95MBOZGPvr6KQ=="], "c12": ["c12@3.3.4", "", { "dependencies": { "chokidar": "^5.0.0", "confbox": "^0.2.4", "defu": "^6.1.6", "dotenv": "^17.3.1", "exsolve": "^1.0.8", "giget": "^3.2.0", "jiti": "^2.6.1", "ohash": "^2.0.11", "pathe": "^2.0.3", "perfect-debounce": "^2.1.0", "pkg-types": "^2.3.0", "rc9": "^3.0.1" }, "peerDependencies": { "magicast": "*" }, "optionalPeers": ["magicast"] }, "sha512-cM0ApFQSBXuourJejzwv/AuPRvAxordTyParRVcHjjtXirtkzM0uK2L9TTn9s0cXZbG7E55jCivRQzoxYmRAlA=="], - "call-bind-apply-helpers": ["call-bind-apply-helpers@1.0.2", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ=="], - - "call-bound": ["call-bound@1.0.4", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "get-intrinsic": "^1.3.0" } }, "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg=="], - "chart.js": ["chart.js@4.5.1", "", { "dependencies": { "@kurkle/color": "^0.3.0" } }, "sha512-GIjfiT9dbmHRiYi6Nl2yFCq7kkwdkp1W/lp2J99rX0yo9tgJGn3lKQATztIjb5tVtevcBtIdICNWqlq5+E8/Pw=="], "chokidar": ["chokidar@5.0.0", "", { "dependencies": { "readdirp": "^5.0.0" } }, "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw=="], "commander": ["commander@11.1.0", "", {}, "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ=="], - "confbox": ["confbox@0.2.4", "", {}, "sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ=="], - - "content-disposition": ["content-disposition@1.0.1", "", {}, "sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q=="], + "conf": ["conf@10.2.0", "", { "dependencies": { "ajv": "^8.6.3", "ajv-formats": "^2.1.1", "atomically": "^1.7.0", "debounce-fn": "^4.0.0", "dot-prop": "^6.0.1", "env-paths": "^2.2.1", "json-schema-typed": "^7.0.3", "onetime": "^5.1.2", "pkg-up": "^3.1.0", "semver": "^7.3.5" } }, "sha512-8fLl9F04EJqjSqH+QjITQfJF8BrOVaYr1jewVgSRAEWePfxT0sku4w2hrGQ60BC/TNLGQ2pgxNlTbWQmMPFvXg=="], - "content-type": ["content-type@1.0.5", "", {}, "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA=="], - - "cookie": ["cookie@0.7.2", "", {}, "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w=="], - - "cookie-signature": ["cookie-signature@1.2.2", "", {}, "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg=="], - - "cross-env": ["cross-env@10.1.0", "", { "dependencies": { "@epic-web/invariant": "^1.0.0", "cross-spawn": "^7.0.6" }, "bin": { "cross-env": "dist/bin/cross-env.js", "cross-env-shell": "dist/bin/cross-env-shell.js" } }, "sha512-GsYosgnACZTADcmEyJctkJIoqAhHjttw7RsFrVoJNXbsWWqaq6Ym+7kZjq6mS45O0jij6vtiReppKQEtqWy6Dw=="], + "confbox": ["confbox@0.2.4", "", {}, "sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ=="], "cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="], "csstype": ["csstype@3.2.3", "", {}, "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ=="], - "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + "debounce-fn": ["debounce-fn@4.0.0", "", { "dependencies": { "mimic-fn": "^3.0.0" } }, "sha512-8pYCQiL9Xdcg0UPSD3d+0KMlOjp+KGU5EPwYddgzQ7DATsg4fuUDjQtsYLmWjnk2obnNHgV3vE2Y4jejSOJVBQ=="], "deepmerge-ts": ["deepmerge-ts@7.1.5", "", {}, "sha512-HOJkrhaYsweh+W+e74Yn7YStZOilkoPb6fycpwNLKzSPtruFs48nYis0zy5yJz1+ktUhHxoRDJ27RQAWLIJVJw=="], + "define-lazy-prop": ["define-lazy-prop@2.0.0", "", {}, "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og=="], + "defu": ["defu@6.1.7", "", {}, "sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ=="], "denque": ["denque@2.1.0", "", {}, "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw=="], - "depd": ["depd@2.0.0", "", {}, "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="], - "destr": ["destr@2.0.5", "", {}, "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA=="], - "dotenv": ["dotenv@17.3.1", "", {}, "sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA=="], + "dot-prop": ["dot-prop@6.0.1", "", { "dependencies": { "is-obj": "^2.0.0" } }, "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA=="], - "dunder-proto": ["dunder-proto@1.0.1", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="], + "dotenv": ["dotenv@17.3.1", "", {}, "sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA=="], "ecdsa-sig-formatter": ["ecdsa-sig-formatter@1.0.11", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ=="], - "eciesjs": ["eciesjs@0.4.18", "", { "dependencies": { "@ecies/ciphers": "^0.2.5", "@noble/ciphers": "^1.3.0", "@noble/curves": "^1.9.7", "@noble/hashes": "^1.8.0" } }, "sha512-wG99Zcfcys9fZux7Cft8BAX/YrOJLJSZ3jyYPfhZHqN2E+Ffx+QXBDsv3gubEgPtV6dTzJMSQUwk1H98/t/0wQ=="], - - "ee-first": ["ee-first@1.1.1", "", {}, "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="], - "effect": ["effect@3.20.0", "", { "dependencies": { "@standard-schema/spec": "^1.0.0", "fast-check": "^3.23.1" } }, "sha512-qMLfDJscrNG8p/aw+IkT9W7fgj50Z4wG5bLBy0Txsxz8iUHjDIkOgO3SV0WZfnQbNG2VJYb0b+rDLMrhM4+Krw=="], "empathic": ["empathic@2.0.0", "", {}, "sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA=="], - "encodeurl": ["encodeurl@2.0.0", "", {}, "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg=="], - - "env-paths": ["env-paths@3.0.0", "", {}, "sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A=="], - - "es-define-property": ["es-define-property@1.0.1", "", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="], - - "es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="], - - "es-object-atoms": ["es-object-atoms@1.1.1", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA=="], - - "escape-html": ["escape-html@1.0.3", "", {}, "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="], + "enquirer": ["enquirer@2.4.1", "", { "dependencies": { "ansi-colors": "^4.1.1", "strip-ansi": "^6.0.1" } }, "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ=="], - "etag": ["etag@1.8.1", "", {}, "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="], + "env-paths": ["env-paths@2.2.1", "", {}, "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A=="], "execa": ["execa@5.1.1", "", { "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", "human-signals": "^2.1.0", "is-stream": "^2.0.0", "merge-stream": "^2.0.0", "npm-run-path": "^4.0.1", "onetime": "^5.1.2", "signal-exit": "^3.0.3", "strip-final-newline": "^2.0.0" } }, "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg=="], - "express": ["express@5.2.1", "", { "dependencies": { "accepts": "^2.0.0", "body-parser": "^2.2.1", "content-disposition": "^1.0.0", "content-type": "^1.0.5", "cookie": "^0.7.1", "cookie-signature": "^1.2.1", "debug": "^4.4.0", "depd": "^2.0.0", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", "finalhandler": "^2.1.0", "fresh": "^2.0.0", "http-errors": "^2.0.0", "merge-descriptors": "^2.0.0", "mime-types": "^3.0.0", "on-finished": "^2.4.1", "once": "^1.4.0", "parseurl": "^1.3.3", "proxy-addr": "^2.0.7", "qs": "^6.14.0", "range-parser": "^1.2.1", "router": "^2.2.0", "send": "^1.1.0", "serve-static": "^2.2.0", "statuses": "^2.0.1", "type-is": "^2.0.1", "vary": "^1.1.2" } }, "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw=="], - "exsolve": ["exsolve@1.0.8", "", {}, "sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA=="], "fast-check": ["fast-check@3.23.2", "", { "dependencies": { "pure-rand": "^6.1.0" } }, "sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A=="], @@ -199,43 +166,25 @@ "fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="], - "finalhandler": ["finalhandler@2.1.1", "", { "dependencies": { "debug": "^4.4.0", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "on-finished": "^2.4.1", "parseurl": "^1.3.3", "statuses": "^2.0.1" } }, "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA=="], + "find-up": ["find-up@3.0.0", "", { "dependencies": { "locate-path": "^3.0.0" } }, "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg=="], "foreground-child": ["foreground-child@3.3.1", "", { "dependencies": { "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" } }, "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw=="], - "forwarded": ["forwarded@0.2.0", "", {}, "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="], - - "fresh": ["fresh@2.0.0", "", {}, "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A=="], - - "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], - "generate-function": ["generate-function@2.3.1", "", { "dependencies": { "is-property": "^1.0.2" } }, "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ=="], - "get-intrinsic": ["get-intrinsic@1.3.0", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "math-intrinsics": "^1.1.0" } }, "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ=="], - "get-port-please": ["get-port-please@3.2.0", "", {}, "sha512-I9QVvBw5U/hw3RmWpYKRumUeaDgxTPd401x364rLmWBJcOQ753eov1eTgzDqRG9bqFIfDc7gfzcQEWrUri3o1A=="], - "get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="], - "get-stream": ["get-stream@6.0.1", "", {}, "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg=="], "giget": ["giget@3.2.0", "", { "bin": { "giget": "dist/cli.mjs" } }, "sha512-GvHTWcykIR/fP8cj8dMpuMMkvaeJfPvYnhq0oW+chSeIr+ldX21ifU2Ms6KBoyKZQZmVaUAAhQ2EZ68KJF8a7A=="], - "gopd": ["gopd@1.2.0", "", {}, "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="], - "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="], "grammex": ["grammex@3.1.12", "", {}, "sha512-6ufJOsSA7LcQehIJNCO7HIBykfM7DXQual0Ny780/DEcJIpBlHRvcqEBWGPYd7hrXL2GJ3oJI1MIhaXjWmLQOQ=="], "graphmatch": ["graphmatch@1.1.1", "", {}, "sha512-5ykVn/EXM1hF0XCaWh05VbYvEiOL2lY1kBxZtaYsyvjp7cmWOU1XsAdfQBwClraEofXDT197lFbXOEVMHpvQOg=="], - "has-symbols": ["has-symbols@1.1.0", "", {}, "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="], - - "hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="], - - "hono": ["hono@4.12.10", "", {}, "sha512-mx/p18PLy5og9ufies2GOSUqep98Td9q4i/EF6X7yJgAiIopxqdfIO3jbqsi3jRgTgw88jMDEzVKi+V2EF+27w=="], - - "http-errors": ["http-errors@2.0.1", "", { "dependencies": { "depd": "~2.0.0", "inherits": "~2.0.4", "setprototypeof": "~1.2.0", "statuses": "~2.0.2", "toidentifier": "~1.0.1" } }, "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ=="], + "hono": ["hono@4.12.28", "", {}, "sha512-YwUvVpSF7m1yOblFPrU3Hbo8XhPheBoiyfGuII6z19LnOr6JpDnyyp7LFNrfV56wS8tpvtBFGRISHN02pDdLOA=="], "http-status-codes": ["http-status-codes@2.3.0", "", {}, "sha512-RJ8XvFvpPM/Dmc5SV+dC4y5PCeOhT3x1Hq0NU3rjGeg5a/CqlhZ7uudknPwZFz4aeAXDcbAyaeP7GAo9lvngtA=="], @@ -245,28 +194,32 @@ "ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], - "inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], - - "ipaddr.js": ["ipaddr.js@1.9.1", "", {}, "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="], + "is-docker": ["is-docker@2.2.1", "", { "bin": { "is-docker": "cli.js" } }, "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ=="], - "is-promise": ["is-promise@4.0.0", "", {}, "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ=="], + "is-obj": ["is-obj@2.0.0", "", {}, "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w=="], "is-property": ["is-property@1.0.2", "", {}, "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g=="], "is-stream": ["is-stream@2.0.1", "", {}, "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="], + "is-wsl": ["is-wsl@2.2.0", "", { "dependencies": { "is-docker": "^2.0.0" } }, "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww=="], + "isexe": ["isexe@3.1.5", "", {}, "sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w=="], "jiti": ["jiti@2.6.1", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ=="], "json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], + "json-schema-typed": ["json-schema-typed@7.0.3", "", {}, "sha512-7DE8mpG+/fVw+dTpjbxnx47TaMnDfOI1jwft9g1VybltZCduyRQPJPvc+zzKY9WPHxhPWczyFuYa6I8Mw4iU5A=="], + "jsonwebtoken": ["jsonwebtoken@9.0.3", "", { "dependencies": { "jws": "^4.0.1", "lodash.includes": "^4.3.0", "lodash.isboolean": "^3.0.3", "lodash.isinteger": "^4.0.4", "lodash.isnumber": "^3.0.3", "lodash.isplainobject": "^4.0.6", "lodash.isstring": "^4.0.1", "lodash.once": "^4.0.0", "ms": "^2.1.1", "semver": "^7.5.4" } }, "sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g=="], "jwa": ["jwa@2.0.1", "", { "dependencies": { "buffer-equal-constant-time": "^1.0.1", "ecdsa-sig-formatter": "1.0.11", "safe-buffer": "^5.0.1" } }, "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg=="], "jws": ["jws@4.0.1", "", { "dependencies": { "jwa": "^2.0.1", "safe-buffer": "^5.0.1" } }, "sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA=="], + "locate-path": ["locate-path@3.0.0", "", { "dependencies": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" } }, "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A=="], + "lodash.includes": ["lodash.includes@4.3.0", "", {}, "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w=="], "lodash.isboolean": ["lodash.isboolean@3.0.3", "", {}, "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg=="], @@ -285,19 +238,9 @@ "lru.min": ["lru.min@1.1.4", "", {}, "sha512-DqC6n3QQ77zdFpCMASA1a3Jlb64Hv2N2DciFGkO/4L9+q/IpIAuRlKOvCXabtRW6cQf8usbmM6BE/TOPysCdIA=="], - "math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="], - - "media-typer": ["media-typer@1.1.0", "", {}, "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw=="], - - "merge-descriptors": ["merge-descriptors@2.0.0", "", {}, "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g=="], - "merge-stream": ["merge-stream@2.0.0", "", {}, "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="], - "mime-db": ["mime-db@1.54.0", "", {}, "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ=="], - - "mime-types": ["mime-types@3.0.2", "", { "dependencies": { "mime-db": "^1.54.0" } }, "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A=="], - - "mimic-fn": ["mimic-fn@2.1.0", "", {}, "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="], + "mimic-fn": ["mimic-fn@3.1.0", "", {}, "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ=="], "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], @@ -305,27 +248,25 @@ "named-placeholders": ["named-placeholders@1.1.6", "", { "dependencies": { "lru.min": "^1.1.0" } }, "sha512-Tz09sEL2EEuv5fFowm419c1+a/jSMiBjI9gHxVLrVdbUkkNUUfjsVYs9pVZu5oCon/kmRh9TfLEObFtkVxmY0w=="], - "negotiator": ["negotiator@1.0.0", "", {}, "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg=="], - "npm-run-path": ["npm-run-path@4.0.1", "", { "dependencies": { "path-key": "^3.0.0" } }, "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw=="], - "object-inspect": ["object-inspect@1.13.4", "", {}, "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew=="], - "object-treeify": ["object-treeify@1.1.33", "", {}, "sha512-EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A=="], "ohash": ["ohash@2.0.11", "", {}, "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ=="], - "on-finished": ["on-finished@2.4.1", "", { "dependencies": { "ee-first": "1.1.1" } }, "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg=="], + "onetime": ["onetime@5.1.2", "", { "dependencies": { "mimic-fn": "^2.1.0" } }, "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg=="], - "once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="], + "open": ["open@8.4.2", "", { "dependencies": { "define-lazy-prop": "^2.0.0", "is-docker": "^2.1.1", "is-wsl": "^2.2.0" } }, "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ=="], - "onetime": ["onetime@5.1.2", "", { "dependencies": { "mimic-fn": "^2.1.0" } }, "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg=="], + "p-limit": ["p-limit@2.3.0", "", { "dependencies": { "p-try": "^2.0.0" } }, "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="], - "parseurl": ["parseurl@1.3.3", "", {}, "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="], + "p-locate": ["p-locate@3.0.0", "", { "dependencies": { "p-limit": "^2.0.0" } }, "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ=="], - "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="], + "p-try": ["p-try@2.2.0", "", {}, "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="], - "path-to-regexp": ["path-to-regexp@8.3.0", "", {}, "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA=="], + "path-exists": ["path-exists@3.0.0", "", {}, "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ=="], + + "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="], "pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="], @@ -353,6 +294,8 @@ "pkg-types": ["pkg-types@2.3.0", "", { "dependencies": { "confbox": "^0.2.2", "exsolve": "^1.0.7", "pathe": "^2.0.3" } }, "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig=="], + "pkg-up": ["pkg-up@3.1.0", "", { "dependencies": { "find-up": "^3.0.0" } }, "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA=="], + "postgres": ["postgres@3.4.7", "", {}, "sha512-Jtc2612XINuBjIl/QTWsV5UvE8UHuNblcO3vVADSrKsrc6RqGX6lOW1cEo3CM2v0XG4Nat8nI+YM7/f26VxXLw=="], "postgres-array": ["postgres-array@3.0.4", "", {}, "sha512-nAUSGfSDGOaOAEGwqsRY27GPOea7CNipJPOA7lPbdEpx5Kg3qzdP0AaWC5MlhTWV9s4hFX39nomVZ+C4tnGOJQ=="], @@ -367,16 +310,8 @@ "proper-lockfile": ["proper-lockfile@4.1.2", "", { "dependencies": { "graceful-fs": "^4.2.4", "retry": "^0.12.0", "signal-exit": "^3.0.2" } }, "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA=="], - "proxy-addr": ["proxy-addr@2.0.7", "", { "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" } }, "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg=="], - "pure-rand": ["pure-rand@6.1.0", "", {}, "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA=="], - "qs": ["qs@6.15.0", "", { "dependencies": { "side-channel": "^1.1.0" } }, "sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ=="], - - "range-parser": ["range-parser@1.2.1", "", {}, "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="], - - "raw-body": ["raw-body@3.0.2", "", { "dependencies": { "bytes": "~3.1.2", "http-errors": "~2.0.1", "iconv-lite": "~0.7.0", "unpipe": "~1.0.0" } }, "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA=="], - "rc9": ["rc9@3.0.1", "", { "dependencies": { "defu": "^6.1.6", "destr": "^2.0.5" } }, "sha512-gMDyleLWVE+i6Sgtc0QbbY6pEKqYs97NGi6isHQPqYlLemPoO8dxQ3uGi0f4NiP98c+jMW6cG1Kx9dDwfvqARQ=="], "react": ["react@19.2.4", "", {}, "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ=="], @@ -391,8 +326,6 @@ "retry": ["retry@0.12.0", "", {}, "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow=="], - "router": ["router@2.2.0", "", { "dependencies": { "debug": "^4.4.0", "depd": "^2.0.0", "is-promise": "^4.0.0", "parseurl": "^1.3.3", "path-to-regexp": "^8.0.0" } }, "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ=="], - "safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], "safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="], @@ -401,26 +334,12 @@ "semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="], - "send": ["send@1.2.1", "", { "dependencies": { "debug": "^4.4.3", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", "fresh": "^2.0.0", "http-errors": "^2.0.1", "mime-types": "^3.0.2", "ms": "^2.1.3", "on-finished": "^2.4.1", "range-parser": "^1.2.1", "statuses": "^2.0.2" } }, "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ=="], - "seq-queue": ["seq-queue@0.0.5", "", {}, "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q=="], - "serve-static": ["serve-static@2.2.1", "", { "dependencies": { "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "parseurl": "^1.3.3", "send": "^1.2.0" } }, "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw=="], - - "setprototypeof": ["setprototypeof@1.2.0", "", {}, "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="], - "shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="], "shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="], - "side-channel": ["side-channel@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3", "side-channel-list": "^1.0.0", "side-channel-map": "^1.0.1", "side-channel-weakmap": "^1.0.2" } }, "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw=="], - - "side-channel-list": ["side-channel-list@1.0.0", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3" } }, "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA=="], - - "side-channel-map": ["side-channel-map@1.0.1", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3" } }, "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA=="], - - "side-channel-weakmap": ["side-channel-weakmap@1.0.2", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3", "side-channel-map": "^1.0.1" } }, "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A=="], - "signal-exit": ["signal-exit@3.0.7", "", {}, "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="], "sisteransi": ["sisteransi@1.0.5", "", {}, "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg=="], @@ -429,30 +348,24 @@ "sqlstring": ["sqlstring@2.3.3", "", {}, "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg=="], - "statuses": ["statuses@2.0.2", "", {}, "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw=="], - "std-env": ["std-env@3.10.0", "", {}, "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg=="], - "strip-final-newline": ["strip-final-newline@2.0.0", "", {}, "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA=="], + "strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], - "toidentifier": ["toidentifier@1.0.1", "", {}, "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="], + "strip-final-newline": ["strip-final-newline@2.0.0", "", {}, "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA=="], - "type-is": ["type-is@2.0.1", "", { "dependencies": { "content-type": "^1.0.5", "media-typer": "^1.1.0", "mime-types": "^3.0.0" } }, "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw=="], + "systeminformation": ["systeminformation@5.31.13", "", { "os": "!aix", "bin": { "systeminformation": "lib/cli.js" } }, "sha512-iUJXJoKzm4vtLSeT3nwe2s9QjoJAxHg7wYJ0KaQ54Xy2u9jsTq0ULWQQ0+T72FXjX2XnGqubazNx9lUfng7ELw=="], "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="], + "undici": ["undici@7.28.0", "", {}, "sha512-cRZYrTDwWznlnRiPjggAGxZXanty6M8RV1ff8Wm4LWXBp7/IG8v5DnOm74DtUBp9OONpK75YlPnIjQqX0dBDtA=="], - "unpipe": ["unpipe@1.0.0", "", {}, "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ=="], + "undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], "valibot": ["valibot@1.2.0", "", { "peerDependencies": { "typescript": ">=5" }, "optionalPeers": ["typescript"] }, "sha512-mm1rxUsmOxzrwnX5arGS+U4T25RdvpPjPN4yR0u9pUBov9+zGVtO84tif1eY4r6zWxVxu3KzIyknJy3rxfRZZg=="], - "vary": ["vary@1.1.2", "", {}, "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="], - "which": ["which@4.0.0", "", { "dependencies": { "isexe": "^3.1.1" }, "bin": { "node-which": "bin/which.js" } }, "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg=="], - "wrappy": ["wrappy@1.0.2", "", {}, "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="], - "xtend": ["xtend@4.0.2", "", {}, "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="], "yocto-spinner": ["yocto-spinner@1.1.0", "", { "dependencies": { "yoctocolors": "^2.1.1" } }, "sha512-/BY0AUXnS7IKO354uLLA2eRcWiqDifEbd6unXCsOxkFDAkhgUL3PH9X2bFoaU0YchnDXsF+iKleeTLJGckbXfA=="], @@ -461,20 +374,28 @@ "zeptomatch": ["zeptomatch@2.1.0", "", { "dependencies": { "grammex": "^3.1.11", "graphmatch": "^1.1.0" } }, "sha512-KiGErG2J0G82LSpniV0CtIzjlJ10E04j02VOudJsPyPwNZgGnRKQy7I1R7GMyg/QswnE4l7ohSGrQbQbjXPPDA=="], + "@prisma/dev/hono": ["hono@4.12.10", "", {}, "sha512-mx/p18PLy5og9ufies2GOSUqep98Td9q4i/EF6X7yJgAiIopxqdfIO3jbqsi3jRgTgw88jMDEzVKi+V2EF+27w=="], + "@prisma/engines/@prisma/get-platform": ["@prisma/get-platform@7.8.0", "", { "dependencies": { "@prisma/debug": "7.8.0" } }, "sha512-WlxgRGnolL8VH2EmkH1R/DkKNr/mVdS3G2h42IZFFZ3eUrH9OT6t73kIOSlkkrv50wG123Iq8d96ufv5LlZktw=="], "@prisma/fetch-engine/@prisma/get-platform": ["@prisma/get-platform@7.8.0", "", { "dependencies": { "@prisma/debug": "7.8.0" } }, "sha512-WlxgRGnolL8VH2EmkH1R/DkKNr/mVdS3G2h42IZFFZ3eUrH9OT6t73kIOSlkkrv50wG123Iq8d96ufv5LlZktw=="], "@prisma/get-platform/@prisma/debug": ["@prisma/debug@7.2.0", "", {}, "sha512-YSGTiSlBAVJPzX4ONZmMotL+ozJwQjRmZweQNIq/ER0tQJKJynNkRB3kyvt37eOfsbMCXk3gnLF6J9OJ4QWftw=="], + "@prisma/streams-local/env-paths": ["env-paths@3.0.0", "", {}, "sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A=="], + "@types/pg/@types/node": ["@types/node@24.12.0", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-GYDxsZi3ChgmckRT9HPU0WEhKLP08ev/Yfcq2AstjrDASOYCSXeyjDsHg4v5t4jOj7cyDX3vmprafKlWIG9MXQ=="], "cross-spawn/which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], "foreground-child/signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], + "onetime/mimic-fn": ["mimic-fn@2.1.0", "", {}, "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="], + "pg-types/postgres-array": ["postgres-array@2.0.0", "", {}, "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA=="], + "@types/pg/@types/node/undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="], + "cross-spawn/which/isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], } } diff --git a/auth-svc/package.json b/auth-svc/package.json index ab6ffa2..b5f7267 100644 --- a/auth-svc/package.json +++ b/auth-svc/package.json @@ -6,28 +6,27 @@ "description": "", "main": "user-server.mjs", "scripts": { - "test": "echo \"Error: no test specified\" && exit 1", - "start": "NODE_ENV=production dotenvx run -f .env.production --overload -- bun ./dist/user-server.mjs", - "dev": "NODE_ENV=development dotenvx run -f .env.development -- cross-env DEBUG=users:* bun ./src/user-server.mjs", + + "start": "NODE_ENV=production dotenvx run -f .env.production -- bun ./dist/app.mjs", + "dev": "NODE_ENV=development dotenvx run -f .env.development -- cross-env DEBUG=users:* bun ./src/app.mjs", "prisma-pro": "NODE_ENV=production dotenvx run -f .env.production -- bunx --bun prisma --config=./src/prisma.config.ts", "prisma-dev": "dotenvx run -f .env.development -- bunx --bun prisma --config=./src/prisma.config.ts", - "build": "bunx --bun prisma --config=./src/prisma.config.ts generate && tsc" + "app": "dotenvx run -f .env.development -- bun ./src/app.mjs", + "build": "bunx --bun prisma --config=./src/prisma.config.ts generate && tsc", + "test": "dotenvx run -f .env.development -- bun test" }, "author": "Usman Ghani", "license": "", "dependencies": { - "@dotenvx/dotenvx": "^1.64.0", + "@dotenvx/dotenvx": "^1.75.1", "@prisma/adapter-pg": "^7.8.0", "@prisma/client": "^7.8.0", "bcryptjs": "^3.0.3", - "cross-env": "^10.1.0", - "debug": "^4.4.3", - "express": "^5.2.1", + "hono": "^4.12.28", "jsonwebtoken": "^9.0.3" }, "devDependencies": { - "@types/node": "^24.12.2", - "@types/pg": "^8.20.0", + "@types/bun": "^1.3.14", "prisma": "^7.8.0", "typescript": "^5.9.3" } diff --git a/auth-svc/src/app.mjs b/auth-svc/src/app.mjs new file mode 100644 index 0000000..7cd6b13 --- /dev/null +++ b/auth-svc/src/app.mjs @@ -0,0 +1,193 @@ +import { Hono } from "hono"; +import { logger } from "hono/logger"; +import { + DBUsers, + connectDB, + findOneUser, + createUser, + sanitizedUser, + userParams, +} from "./users-prisma.mjs"; +import bcrypt from "bcryptjs"; +import { jwt } from "hono/jwt"; + +export const app = new Hono(); + +app.use(logger()) + +app.use( + jwt({ + secret: process.env.BEARER_TOKEN_PRIVATEKEY, + alg: "HS256", + }), +); + +app.use(async (c, next) => { + const auth = c.get("jwtPayload"); + if (auth === `${process.env.APIKEY_USER}:${process.env.APIKEY_PASSWORD}`) { + return await next(); + } + return c.text("Not Authurized", 404); +}); + +app.use(async (c, next) => { + try { + c.req.body = await c.req.json(); + await next(); + } catch (error) { + await next(); + } +}); + +app.get("/list", async (c) => { + let users = await DBUsers.findMany(); + users = users.map((user) => sanitizedUser(user)); + return c.json(users); +}); + +app.post("/create-user", async (c) => { + let isAlreadyUser = await DBUsers.findUnique({ + where: { username: c.req.body.username }, + }); + if (isAlreadyUser) { + return c.text("Already a User has username: " + c.req.body.username, 500); + } + let result = await createUser(c.req.body); + return c.json(result); +}); + +app.post('/find-or-create', async (c) => { + let user = await DBUsers.findUnique({ + where: { email: c.req.body.email } + }); + if (!user) { + user = await createUser(c.req); + if (!user) { + console.error("Error Creating User") + return c.text("Error creating User", 500) + } + return c.json(user) + } + return c.json(user) +}); + +app.get('/find/:userId', async (c) => { + let user = await findOneUser(c.req.param().userId) + if (user) { + return c.json(user) + } else { + return c.text('Did not find: ' + c.req.param().userId, 404) + } + +}) + +app.get('/find/email/:email', async (c) => { + let user = await DBUsers.findUnique({ + where: { + email: c.req.param().email + }, + omit: { password_hash: true } + }) + + if (user) { + return c.json(user) + } else { + return c.json({ email: false }) + } +}) + +app.get('/find/username/:username', async (c) => { + const user = await DBUsers.findUnique({ + where: { username: c.req.param().username }, + omit: { password_hash: true } + }) + + if (user) { + return c.json(user) + } else { + return c.json({ username: false }) + } +}) + +app.post('/update-user/photo/:id', async (c) => { + const user = await DBUsers.findUnique({ where: { id: c.req.param().id }}) + if (user) { + const newUser = await DBUsers.update({ + where: { id: user.id }, + data: { photoURL: c.req.body.photoURL, photoType: c.req.body.photoType }, + }) + return c.json(user) + } + return c.text("No such user", 404) +}) + +app.post('/update-user/:username', async (c) => { + let isUser = await findOneUser(c.req.param().username) + if (!isUser) { + return c.text("No Such User: " + c.req.param().username) + } + let update = c.req.body + await DBUsers.update({ + data: update, where: { + username: c.req.param().username + } + }) + const updated = await findOneUser(c.req.param().username); + return c.json(updated) +}) + +app.delete("/destroy/:username", async (c) => { + let user = await DBUsers.findUnique({ where: { username: c.req.param().username } }) + if (!user) { + return c.text("No Such User: " + c.req.param().username, 404) + } + await DBUsers.delete({ where: { id: user.id } }); + return c.json({success: true}) +}) + +app.post('/password-check', async (c) => { + + + const user = await DBUsers.findUnique({ + where: { username: c.req.body.username } + }); + let checked; + if (!user) { + checked = { + check: false, username: c.req.body.username, + message: "Could not find user" + }; + } else if (user.provider != "Local") { + checked = { + check: false, username: c.req.body.username, + message: "Could not find user" + }; + } else if (user.username === c.req.body.username + && await bcrypt.compare(c.req.body.password, user.password_hash)) { + checked = { check: true, username: user.username, id: user.id }; + } else { + checked = { + check: false, username: c.req.body.username, + message: "Incorrect password" + }; + } + + return c.json(checked) +}); + + +export default { + port: process.env.PORT, + fetch: app.fetch, +}; + +process.on("uncaughtException", function (err) { + console.error("UNCAUGHT EXCEPTION - " + (err.stack || err)); + process.exit(1); +}); + +process.on("unhandledRejection", (reason, p) => { + console.error(`UNHANDLED PROMISE REJECTION: ${util.inspect(p)} +reason: ${reason}`); + process.exit(1); +}); diff --git a/auth-svc/src/user-server.mjs b/auth-svc/src/user-server.mjs deleted file mode 100644 index e458869..0000000 --- a/auth-svc/src/user-server.mjs +++ /dev/null @@ -1,208 +0,0 @@ -import '@dotenvx/dotenvx/config.js'; -import express from "express"; -import { default as DBG } from "debug"; -import { default as bcrypt } from 'bcryptjs' -import { DBUsers, connectDB, findOneUser, createUser, sanitizedUser, userParams } from "./users-prisma.mjs"; -import authorizationParser from "./middleware/authparser.mjs" - -const log = DBG('users:service'); -const error = DBG('users:error'); - -const server = express(); - -server.use(authorizationParser) -server.use(check) -server.use(express.json({ limit: "3000kb" })) -server.use(express.urlencoded({ limit: "3000kb" })) - -var apiKeys = [ - { user: process.env.APIKEY_USER, key: process.env.APIKEY_PASSWORD }]; -function check(req, res, next) { - if (req.authorization && req.authorization.bearer) { - var found = false; - for (let auth of apiKeys) { - if (auth.key === req.authorization.bearer.password - && auth.user === req.authorization.bearer.username) { - found = true; - break; - } - } - if (found) next(); - else { - res.status(401).send("Not authenticated"); - } - - } - else { - res.status(500).send('No Authorization Key'); - } -} - -server.post('/create-user', async (req, res, next) => { - - let isAlreadyUser = await DBUsers.findUnique({ - where: { username: req.body.username }, - }) - if (isAlreadyUser) { - res.status(500).send("Already a User has username: " + req.body.username) - return - } - let result = await createUser(req); - res.contentType('json'); - res.send(result); -}); - -server.post('/update-user/photo/:id', async (req, res, next) => { - - const user = await DBUsers.findUnique({ where: { id: req.params.id }}) - if (user) { - const newUser = await DBUsers.update({ - where: { id: user.id }, - data: { photoURL: req.body.photoURL, photoType: req.body.photoType }, - }) - res.status(200) - res.contentType('json'); - res.send(newUser) - } - res.status(404).end() -}) - -server.post('/find-or-create', async (req, res, next) => { - let user = await DBUsers.findUnique({ - where: { email: req.body.email } - }); - if (!user) { - user = await createUser(req); - if (!user) throw new Error('No user created'); - res.contentType('json'); - res.send(user); - return - } - res.contentType('json'); - res.send(user); -}); - -server.get('/find/:userId', async (req, res, next) => { - - log(req.params.userId) - let user = await findOneUser(req.params.userId) - if (user) { - res.contentType('json'); - res.send(user) - } else { - res.status(404).send('Did not find: ' + req.params.userId) - } - -}) -server.get('/find/email/:email', async (req, res, next) => { - - log(req.params.email) - let user = await DBUsers.findUnique({ - where: { - email: req.params.email - }, - omit: { password_hash: true } - }) - res.contentType('json') - if (user) { - res.send(user) - } else { - res.send({ email: false }) - } -}) -server.get('/find/username/:username', async (req, res, next) => { - - log(req.params.username) - const user = await DBUsers.findUnique({ - where: { username: req.params.username }, - omit: { password_hash: true } - }) - res.contentType('json'); - if (user) { - res.send(user) - } else { - res.send({ username: false }) - } -}) -server.get('/list', async (req, res, next) => { - - let users = await DBUsers.findMany(); - users = users.map(user => sanitizedUser(user)) - res.contentType('json'); - res.send(users); -}) - -server.post('/update-user/:username', async (req, res, next) => { - - let isUser = await findOneUser(req.params.username) - if (!isUser) { - res.status(404).send("No Such User: " + req.params.username) - return - } - let update = req.body - await DBUsers.update({ - data: update, where: { - username: req.params.username - } - }) - const updated = await findOneUser(req.params.username); - res.contentType('json'); - res.send(updated); -}) - -server.delete("/destroy/:username", async (req, res, next) => { - - let user = await DBUsers.findUnique({ where: { username: req.params.username } }) - if (!user) { - res.status(404).send("No Such User: " + req.params.username) - return - } - await DBUsers.delete({ where: { id: user.id } }); - res.contentType('json') - res.send({}) -}) - -server.post('/password-check', async (req, res, next) => { - - - const user = await DBUsers.findUnique({ - where: { username: req.body.username } - }); - let checked; - if (!user) { - checked = { - check: false, username: req.body.username, - message: "Could not find user" - }; - } else if (user.provider != "Local") { - checked = { - check: false, username: req.body.username, - message: "Could not find user" - }; - } else if (user.username === req.body.username - && await bcrypt.compare(req.body.password, user.password_hash)) { - checked = { check: true, username: user.username, id: user.id }; - } else { - checked = { - check: false, username: req.body.username, - message: "Incorrect password" - }; - } - res.contentType('json'); - res.send(checked); -}); -server.listen(process.env.PORT, "0.0.0.0", function (err) { - if (err) console.log(err); - - log(' listening at ' + process.env.PORT); -}); -process.on('uncaughtException', function (err) { - console.error("UNCAUGHT EXCEPTION - " + (err.stack || err)); - process.exit(1); -}); - -process.on('unhandledRejection', (reason, p) => { - console.error(`UNHANDLED PROMISE REJECTION: ${util.inspect(p)} -reason: ${reason}`); - process.exit(1); -}); \ No newline at end of file diff --git a/auth-svc/src/users-prisma.mjs b/auth-svc/src/users-prisma.mjs index fa5bbe0..72abe97 100644 --- a/auth-svc/src/users-prisma.mjs +++ b/auth-svc/src/users-prisma.mjs @@ -16,19 +16,19 @@ export async function disconnetDB() { console.error(error) } } -export function userParams(req) { +export function userParams(reqBody) { const params = { - username: req.body.username, - password_hash: req.body.password_hash, - provider: req.body.provider, - pid: req.body.pid, - displayName: req.body.displayName, - fullName: req.body.fullName, - firstName: req.body.firstName, - lastName: req.body.lastName, - email: req.body.email, - photoURL: req.body.photoURL, - photoType: req.body.photoType + username: reqBody.username, + password_hash: reqBody.password_hash, + provider: reqBody.provider, + pid: reqBody.pid, + displayName: reqBody.displayName, + fullName: reqBody.fullName, + firstName: reqBody.firstName, + lastName: reqBody.lastName, + email: reqBody.email, + photoURL: reqBody.photoURL, + photoType: reqBody.photoType } return params; } @@ -69,10 +69,10 @@ export async function findOneUser(userId) { } } -export async function createUser(req) { +export async function createUser(body) { try { const user = await DBUsers.create({ - data: userParams(req) + data: userParams(body) }) const sanitized = sanitizedUser(user); return sanitized; diff --git a/auth-svc/tests/api.test.mjs b/auth-svc/tests/api.test.mjs new file mode 100644 index 0000000..e2122cc --- /dev/null +++ b/auth-svc/tests/api.test.mjs @@ -0,0 +1,18 @@ + + +import { sign } from "hono/jwt"; +import { describe, test, expect } from "bun:test"; +import { app } from "../src/app.mjs"; + +const token = await sign(`${process.env.APIKEY_USER}:${process.env.APIKEY_PASSWORD}`, process.env.BEARER_TOKEN_PRIVATEKEY, "HS256"); +console.log(token) +test("/list", async () => { + const res = await app.request("/list", { + method: "GET", + headers: { + "Authorization": `Bearer ${token}` + } + }) + console.log(await res.text()) + expect(res.status).toBe(200) +}) diff --git a/auth-svc/tsconfig.json b/auth-svc/tsconfig.json index a6a2c2c..9c89988 100644 --- a/auth-svc/tsconfig.json +++ b/auth-svc/tsconfig.json @@ -15,5 +15,13 @@ "forceConsistentCasingInFileNames": true, "skipLibCheck": true - } + }, + "include": [ + "src/**/*" + ], + "exclude": [ + "node_modules", + "tests/**/*", + "src/public/**/*" + ] } \ No newline at end of file From e83ec2246ac07ace66467c35539c8bb7f4540e99 Mon Sep 17 00:00:00 2001 From: Usman Ghani Date: Wed, 8 Jul 2026 12:54:04 +0500 Subject: [PATCH 2/4] chore(postsvc): authsvc token add, token taken from authsvc now no need to sign a token every time sever start. --- post-svc/.env.development | 20 +++++++--------- post-svc/.env.production | 4 +--- post-svc/src/models/user-superagent.mjs | 31 +++++++++++-------------- 3 files changed, 23 insertions(+), 32 deletions(-) diff --git a/post-svc/.env.development b/post-svc/.env.development index c190e65..4274931 100644 --- a/post-svc/.env.development +++ b/post-svc/.env.development @@ -6,17 +6,15 @@ DOTENV_PUBLIC_KEY_DEVELOPMENT="02d0abba1b8b164c0beaad518cab55a5239161ee8d9b7af1b #Google -GOOGLE_CLIENT_ID=encrypted:BOQyo8qCjx2WyBwzHDiJbVHRzIrEQsymJuiyowg4K9qS9KQSraxVHYD+bc1Oi21b2aAfJGYTrUR0jZAjYy5IWqi9JGbtGtzM0vJNXGgf7Nugx+5QEaDcrin9hVFqy+PYKqf2JIIc8dcccUCmDwf3IsmUEcMRv0lgWjIxsuinWk1pHl3UlJxSwwbptqxYlumEHpFMbN4mtINBOt2TZzGyjO3e7FOJ9yDG/A== -GOOGLE_CLIENT_SECRET=encrypted:BF7cbQh4nVUzghyny5XtEGmF5l4bXDSSLeTcrRzBp7nvqe4NaEerCNC0JJwzh1ggqyNw8kY3qvn3MIRzBSOoFkwqWAaMCKDBgRG8uRmeHJDR/aMLYKrI7Qt9kQDHmNE0iQeIW351zQIpw0pvMCAxh/mpUp74wXB+/8ptMW7Ncogp7cpG -GOOGLE_AUTH_CALLBACKURL=encrypted:BO6FPv48GMxzPWhkd6MYVayrjbKmTbAUQHb5feQ8QW1Qy4xu8uxZDTdPhuQqlJz4MRU8APp1L15Pk9hRNRKNeXaTMo3a9Aw2f2GVxWVfGRAqmYFFj9LLsc5/n8acVLfxXZZyNEpoHyWBgu4RZQcsiXJ7izntgkX2GAr7NfoXt+xEv7XdmHNuoP70/a+uavkss6w= +GOOGLE_CLIENT_ID=encrypted:BJQK5qwZQa2RFWuFUoXZ08oaPJklwxFhqMKzoK9yuQgkJesCc9/2kbacDZPKg+aqtq/zQI4RzLKKsozlUvkEHG0umaDKsg3MwnGz71HJQmQFbkSjyMROtw/QwFoybcq5IbxYNKWy8gNIUplfNEHPlMok9BTwyL2RMXpMQ+5i6L2KrIUgDxvvWhnApUQ4+yG+1/uRwHuukF7K1ilX2g0hoy0Si60e7DAJeg== +GOOGLE_CLIENT_SECRET=encrypted:BBNj4NamZqUP6o6TFQquaYvn3uJHMHc5mmsnj1/9Kc0IxNTw7eajOeRCmX5NGjyUU4DOW9tvGtE4ZSsLkm2wuqLrTxQqsP9UKhl8nF3wmau3O9JJCrk6E74BbE3ArwXwIEXTnEC1QkJRK/DG7pOQ6KpxGhgTl1ArQZ1lNO2GE6yuWnvb +GOOGLE_AUTH_CALLBACKURL=encrypted:BMgtwyYEDymFv9t7Asjtac2HRZEng3fbTIR/YEB3zVd2t0e769xg5aQ6C22GLtdbDZEp+QgB/1XOLVzMR0NVt8eMtrTbPUq7ZOjntGVofXpec38uvkTmPSyxgHGtMu9H8Ly9euIcVHnDcCJ6icqvreke3BL5sCZwmvgoQrzDJ9/YiFmavzh1Tv9odFzrdHTdUMQ= #users-api -USER_SERVICE_URL=encrypted:BNXdsTmrTTcMu+59q3toi8njhhXQ8Rk/BMfVag9dQ2ZmDZ4NJNTr8nf4X/bdr7K+MQC0F5CP8cLf/itfuWEgydAYcIiXg13/M6PSrYms7mEd4ZqH7ZQRxfoiEuw96K7Ncd/Hhho60dDQXyccm8LM+E1DcXlbdQ== -USERS_AUTHID=encrypted:BI6PGKytMjk6X3hgZv4+aZLAWxXuWlVRyoNgojr1FiO6mBTSgZJ3dDFQcdk4kKDchL1S/DeTvhzXwzK2UPeXyPeGGD9DxJLls5o/Ntc4JnrUN4c4gjRS9Q0gTOI4jN7r7DFdVN0U8qcQkqDI88uNTD3zHGwpwBRjQEGX8rCOv3cxKDtq2w== -USERS_AUTHCODE=encrypted:BMn7KDmUWZSbV9bd23GF6EUpM4EvdnjyQ/3dReB/au5FHFptQJoSi/af41s6qpr4tVMQTmevNCQJPVH5o09RrrqGIGXi2LCFDPfeEHuHIEY4N3k2qdtMcR+1r8O64OdIt+tTOVeBxSi+K2edInAmzxTYf0ZMtUKWJ1s9iAWJabZko90HdA== -USERS_TOKEN_PRIVATEKEY=encrypted:BDY8sjWs38xzAOPv6UFViDnLgUoQLhxUrlBtQp7jX57RiN4/K/vXxGHI4lFd4GqXC/QE9Gp2iVmNAwKQGtfXxX8WVVCQzitabKU80YDr9CIoXMEUTqqCz7/s5uYtY8kGO8L3JuLdelFXSpVISKmaYVtk9gkDyOeMpor0g96fv/jzJyOBOg== +USER_SERVICE_URL=encrypted:BDqQxvq8UOpltohwARovSXLgz9/xEMxv1Sot2LIT+4XEEXN/tjgyYcz9KAa/g0sLNDhSh6UwpCVJ1d/LfaMiwn6YBe438wSYUy5kAo8TKm0Aixm+GbOSIM7vxGKLlKI/HmTmL5c8rNLfHkKmDzzi0eCImlO48w== +USER_AUTHTOKEN="encrypted:BGpdBaxKQmEIVzGS7eHifXMz4rbcnslV/NQ+dGqyWdZYkTOfh++GOkzOtcM0uvoIcz/GbWFXnUoafkUdcmdYTNYInIms8MmG4RX/1agl9xGlGnPqdHLATUEWLo04m47JuPOvOqJlWz6w4yqPKIL3S7Fp/rnqkonedY5YR9hrvUbjRnPCaqnhZmH3mM9IMKVQ626ExFx1ZhdXlVooS5BiaUa2fhC8bOuIlMYZFMPlmyKZ4wG8YJx8dATDaRuFkb6+eM8EGok12Uoc9RR6WpKC7aIfbqij1bJLYb3uhWva/AmBiv2Lxw5I9vEY88fw7u3z/nTEctpl24ZithVHIho8KY9Pqky9Ow3rgY2pz3VlKp+qSJXGr8g=" #db -POSTS_MODEL=encrypted:BIbKACY+ceQ7j+4WJ1yCD4TPylntbmyocfGFmx1rwWTJPUHCzorJpKBjlIoGQbGu33uwseHILy3W0hdZIQLJqStvpnnAjIDyToelFdR9TIkwKKBtIOmCT2DlHi5DiHyamS1LYMw/kA== -DATABASE_URL="encrypted:BOGCnBUXKDv3oGj//y2AHvBIQGCJsU2G6XqNeyzM7beUQUG03yIErXiITIIFQ8aOdpPjHtBBLH98T4e6qAVDs6aYAv0i/dRBaYD8BZNvHDC3iKFhHbBO/1nB/s1TwSKksgDa5WLZqmFOz8mrwB+8CtB9cnYNypj8Uc/jSzVDo85fZJ5vQ9Ch4/u0U2/CnUW3UTtl127sEH4X+fORGeUERITaYg==" -SESSION_JWT_SECRET=encrypted:BMkiy8zaVhIPgTS+sIdadqMMaxhYBhDMip4lEyy8At/I5nbtGm40Gj90NXbfCTAPzzrYLEoUoAEiqF6D0gZxOKCSm2UrEOcJvEqakOA9EFVTuNe+1z4nlytMgv2O9EHwGfcC+YMoAkJFQZSzBkekxNN0MbGsc8N9l8/ASWYOJrysHFcn3A== -SESSION_COOKIE_SECRET=encrypted:BI2yPCidSZsLe19OxTa09DMJFNiBt/0qTH5aHYs74CRb+m7iSRXwaERethwCgJJyvBrqiaE2WWmijlWVNdGLiHdN9YDFVl9bGfS60UP+LUnw/UabcE3LxGp4GQF2oBlcvGoiJIetqtEQggvRY5okviNqRa/lRnP9pdDElTjC2AYTBGkgJg== \ No newline at end of file +POSTS_MODEL=encrypted:BFM5bQlCPqe2VZYcV95xb45jz7uSbuR1kt1CJTKEYK9NW3AR1I8v9N7lKEJHZE2OQQXD5nPHPJDsQC3xFuFlqWWkhMixecZd0YEZLwnvqyhz/LBDhymL46ES/r8oDcvvV+xsFs3V8g== +DATABASE_URL="encrypted:BB6bqeUU5B+LUZ3nireGt153FkngETc4KslJ3udMZWzZcT4C8OR5Ol83G7ZBpK4iyeQhPELgMebCJylyDJkZEwdTQVJZ2jNdXmp1vci84fZsSar8hvMpH7Ea3qCkV/HXkKtDx+Z5nVjetH3HV1umPtuPi1LvoM/WNojeAd1h7yf7P2VDU5MwT67iFNVyNY6V+RPlSV7KiFe09Ug3I13f0g==" +SESSION_JWT_SECRET=encrypted:BIcnWkNlFOKiOatNbe7YwX+FeBBLoDsyD0VDNEXxiKO4+H0u6dyeDJt9Dei3d2i6tLuNLIeMywGq8tce32jWEa+tLj6PSZUHDTJos++5ria5apfaJ55oSR9CeCq3XreuSM8733O6L5aGsgHhWcmSiUvftVIR+OlB8sls8e7FD1IaSpGFFA== +SESSION_COOKIE_SECRET=encrypted:BDUoM3bh73gvdJc8hrYi4APqY+Lq90lbS9kkPxmh/NlxKjbsJZQZavGOdD3t2BznrG4posBDMEJpPDP6iIm6CfbhSJyzy95JC6oqYS9wtTiL0yPr33SkEIMeJ9z6VND6+JszqeqhUf4G8I5nRWzYUNbRszFHtMsil1coNPCq5Zvg8AVH0Q== \ No newline at end of file diff --git a/post-svc/.env.production b/post-svc/.env.production index c706bf2..926cbd2 100644 --- a/post-svc/.env.production +++ b/post-svc/.env.production @@ -6,9 +6,7 @@ GOOGLE_CLIENT_SECRET=encrypted:BM+oNM8Rlg1gL0Oh9FSgLtMKBOHUgdOTvc3Fo5KAHldiouozb GOOGLE_AUTH_CALLBACKURL=encrypted:BCfpL/CgJcXLI+zQjryCKAMoban7/WZAamjyrd0AyFwA1SEv398eyIxuh7BlNMC1TkNqIpwv57CbweJO1mplyutrwGCdSV0T7Jc3pYJhcJNlLztWE+UX2Niy/fcL+HtqFbiVd8Ovfzft0gzQRdHn0ec5NnVIq24rOFmzUURV6ZSMg21065O4A8nIY1ZnSza2+Da51y5cZmFf05AKXQ== #USER_API USER_SERVICE_URL=encrypted:BOezTokCUk5m549EylJbWVK6OhaTGxxESX3iO2+9G0GYt8BxLwX7v8304gEfI02wKiLQQVFeYyN9zSVAdfn6p0zq+fzDbOwMNePQFeDeQLtlrmo4QfJs8+ksqWTXfTZ6f4FTMC9BtHaFrb/aGcqoqjm/JqdGPpL811cNG0W/ICBUtKCktYuUPSPy/q2SY579Pjmpf/Q= -USERS_AUTHID=encrypted:BN96bIcgeYmu33KOVtxhnrtOGuhQKaCmOXHkiZRDTkQu9i+PDje4laOSJo1TqNt14dRqI5bZSgBfQ3JdmN4G+2Yv+jiXBBvWqcHjAY4rCXOnFwE2gfiwxiLhFhplsQ/G9+uNylErhVtUxLXU5QIoIZuWVHgXGdFiQg1TBP5Q+bmhZmUWgQ== -USERS_AUTHCODE=encrypted:BASToYVZVMQu6b0Gk9xpUw9lSG/h4UAsL2512jtRnWGtDFNHrWxxXtTHFCDEwJmfZmNUweDIHk3ZWu3zhZM45VV9emy9JceLXHBJCiRbVIcDp/F2QLSkxwOpq7mXj1v5Z7l7Z+AJMGugjmshQ52Vre4qXuidoK50C2TvXhAr9MjCNXxlog== -USERS_TOKEN_PRIVATEKEY=encrypted:BLPIIqVkr/WtAtrI7p0y8IXBZ2HRhyY0CXmZ4SSrwdNVTCYLVOpESNipsl6Nd3AzeajzVW6x/eNST3uf2FD4HOtH9QfpAghyMoP9EyftV0pdsWtv8tWnB5Z+a0YMUHNU6ri0i+hW7INJIO6SzAC0sCbIaCqsvYKNvc/U7HuFTEdb/zEwAQ== +USER_AUTHTOKEN="encrypted:BNXli3FgMxhO+WN1x/Qu7aT8apUs+F9j5+7kOditUN6RCrBUoTU5JXD/uxdPPh0afG3RiKTFej+mbbD4gd+MmEsCpmECW++sANSgJCb0fFdbmaevABJWTDriqlDXQRg13pEoFGAVQAyQi1r1eFbFoxSFDXeZZzHhQ8ngUd86JSGlGKdINrXh0rkaXkeDj1wEqPQEXiaYPjrzeexoSic25Nv8/gWGW/6f6jcIJifzLkDkOqGa+dUL3t59Tq0zwJVvzpiqlhj5o4Mw/8oPxS0XvCnOxqKQBRCB6v4YpcVrMr7d/hBu2330jJIBCTtyiTXNbDqD2SOpTnsov+kts/g+hf59N2hGHJVEAW/jb0wpx01H25mQ39U=" POSTS_MODEL=encrypted:BDiWiWpT8279iRwRsIxk4Wlt46/e4A02yqcCgnM4BdZYlpAGZkl+SXCHcXIh+NVwKJMxkgkdKWryJpZIUHtrKvRPCr/umUUjWJt3wEFv743FWJYFEU8lzz8r/yTtI4hWQY80yU28Fw== DATABASE_URL="encrypted:BPm0LWhBxlN7qKYHR1ZQ8CDCr7999kH03N3uj5ggxQuSrqa4VkDAKpOBXGn2PXgeDsUiX6eMh4rfSw1o/ICbyQ6ajpIatuKtcTkXwM8n1l28qrhPt8EmZS+mtXdWApPi8oB7vV3DoJvzIRY348kFvdCbUMhwevvf/4mJkjcXEHDJRiDQMmzPMNEIr6g/ItM+N0BwRUZmKxAfzPgZOFe7AYawaajUg+Zuo4yAs7fgAo2PTFJfVB+nQUhVKbqOhliuG1Ee7NNeeEEu9nZTlQJc1I1KvvWNgyZd8j0+BJP9XutKMHwd4hOR0Q+908RV/vxjN6/bTY167Q==" diff --git a/post-svc/src/models/user-superagent.mjs b/post-svc/src/models/user-superagent.mjs index aa38ce9..ca6e120 100644 --- a/post-svc/src/models/user-superagent.mjs +++ b/post-svc/src/models/user-superagent.mjs @@ -11,15 +11,10 @@ const saltRound = 10; async function genHash(password) { return await bcrypt.hash(password, saltRound) } -var authid = process.env.USERS_AUTHID ; -var authcode =process.env.USERS_AUTHCODE ; -let AUTHTOKEN; -function genJWT () { - if (AUTHTOKEN) return AUTHTOKEN; - AUTHTOKEN = sign(`${authid}:${authcode}`, process.env.USERS_TOKEN_PRIVATEKEY) - return AUTHTOKEN; -} + +const AUTHTOKEN = process.env.USER_AUTHTOKEN + function reqURL(path) { const requrl = new URL(process.env.USER_SERVICE_URL); @@ -39,7 +34,7 @@ export async function create(username, password, }) .set("Content-type", "application/json") .set("Accept", "application/json") - .auth(genJWT(), {type: "bearer"}); + .auth(AUTHTOKEN, {type: "bearer"}); return res.body } @@ -55,7 +50,7 @@ export async function update(username, password, }) .set("Content-type", "application/json") .set("Accept", "application/json") - .auth(genJWT(), {type: "bearer"}); + .auth(AUTHTOKEN, {type: "bearer"}); return res.body } @@ -73,7 +68,7 @@ export async function findOrCreate(profile) { photoType: profile.photoType }).set('Content-Type', 'application/json') .set('Acccept', 'application/json') - .auth(genJWT(), {type: "bearer"}); + .auth(AUTHTOKEN, {type: "bearer"}); return res.body; } export async function passwordCheck(username, password) { @@ -81,28 +76,28 @@ export async function passwordCheck(username, password) { .send({ username, password }) .set("Content-type", "application/json") .set("Accept", "application/json") - .auth(genJWT(), {type: "bearer"}); + .auth(AUTHTOKEN, {type: "bearer"}); return res.body; } export async function destroy(username) { const res = await request.delete(reqURL(`/destroy/${username}`)) .set('content-type', "application/json") .set("Accept", "application/json") - .auth(genJWT(), {type: "bearer"}); + .auth(AUTHTOKEN, {type: "bearer"}); return res.body; } export async function findUserName(username) { const res = await request.get(reqURL(`/find/username/${username}`)) .set("Content-type", "application/json") .set("Accept", "application/json") - .auth(genJWT(), {type: "bearer"}); + .auth(AUTHTOKEN, {type: "bearer"}); return res.body; } export async function find(userId) { const res = await request.get(reqURL(`/find/${userId}`)) .set("Content-type", "application/json") .set("Accept", "application/json") - .auth(genJWT(), {type: "bearer"}); + .auth(AUTHTOKEN, {type: "bearer"}); return res.body; } @@ -110,14 +105,14 @@ export async function findEmail(email) { const res = await request.get(reqURL(`/find/email/${email}`)) .set("Content-type", "application/json") .set("Accept", "application/json") - .auth(genJWT(), {type: "bearer"}); + .auth(AUTHTOKEN, {type: "bearer"}); return res.body; } export async function updatePhoto(id, photoURL, photoType) { const res= await request.post(reqURL(`/update-user/photo/${id}`)) .set("Content-type", "application/json") .set("Accept", "application/json") - .auth(genJWT(), {type: "bearer"}) + .auth(AUTHTOKEN, {type: "bearer"}) .send({photoURL, photoType}); return res.body; } @@ -125,7 +120,7 @@ export async function list() { const res = await request.get(reqURL(`/list`)) .set("Content-type", "application/json") .set("Accept", "application/json") - .auth(genJWT(), {type: "bearer"}); + .auth(AUTHTOKEN, {type: "bearer"}); return res.body; } From 1400edf33b78a981ccf600238241940129af0b7a Mon Sep 17 00:00:00 2001 From: Usman Ghani Date: Thu, 9 Jul 2026 09:57:08 +0500 Subject: [PATCH 3/4] fix(authsvc): debug remove applied on users-primsa, script fixed and small fix in app.mjs --- auth-svc/.env.development | 10 +++++----- auth-svc/dockerfile | 2 +- auth-svc/package.json | 2 +- auth-svc/src/app.mjs | 2 +- auth-svc/src/users-prisma.mjs | 4 +--- 5 files changed, 9 insertions(+), 11 deletions(-) diff --git a/auth-svc/.env.development b/auth-svc/.env.development index 0c6b6b6..e091611 100644 --- a/auth-svc/.env.development +++ b/auth-svc/.env.development @@ -1,8 +1,8 @@ DOTENV_PUBLIC_KEY_DEVELOPMENT="02d0abba1b8b164c0beaad518cab55a5239161ee8d9b7af1b01ee02a1436f9bd96" -BEARER_TOKEN_PRIVATEKEY=encrypted:BFqripFDhCC+dGPBV9JmrKiwfI8zO/MLiwXUyK4LEPVseH0zHn9DB2CRKOdW5FY6ZQweQJyyQAYyo401YbvEAJNy7QecAxpZZJfnSmbIXbkRDHAIY7MBDQgptLgIMiQjbNWIZ/vESBEml4ffNuL+7dl8Oh7MbQJplfAwLH7dmYWKzuQWGQ== -PORT=encrypted:BNxsRvYTvF9reOJugFzdxAnk3QnCo+8RBeaTDeml7+XoeOEBA0ZoQ6xoyAAnGxFmiaZVNMxhxSxuviyRk2nl7k+Ai1fABUsFB+8om3leELFc8PEMwWezzQ80tj9vfN/2y8QjHQ4= -APIKEY_USER=encrypted:BGLIFbCgN4frxYsroHTuAPYJpXkQCWfWA9iiMQvoX9ef3cbamj+xqrhG7ckrH1Ez6fj8yeyHSB2Ee8nmi8tNmHXjT3YFMscB5AhrlqEC0a9A9XqfUlRg8Xfpeguom2r6VQ8NMf/jT5/h1kUtfB3aoSuWI/WMgE8yNdX9q4kOUTYB14Hmdw== -APIKEY_PASSWORD=encrypted:BLIdndmTFdjHnAHTFxDxWl1QkAJSQU7ktNpSDd4vjFUNdUUjteLEhDlQhfJVeVC3Aaaxb0TATozdUjNmvTdQ2u0nXrjAvlihvaTD29ISpaxo4b8lJWR6ET3EKYbvzFf1PzEDb7dWpQ7N9opPvYrtz5GX4KhjIE0KbI0FcGlfiggL8/ISiw== +BEARER_TOKEN_PRIVATEKEY=encrypted:BANvvZlj/edRdtnRJrXrDuc5VUkJ9zJ76rY7l1sOxamWb+yiBEbWrVdKQYJlEsqslmxqRBaGTlwr2y7VCAT2SJj1xL+lp93jD3kQE7Ba2JuVPdvaanXsA0BBY2LF1mJBQSoraa7lC+a9li+w/1GIoW3uyTmYilbyK9WfJ/pSkkbgabj31A== +PORT=encrypted:BAtbqD5qoXbKj2QxbZm4wuFXb2UbKOiQWTUAjVTUBuA6zNVfnSZlHZuiYhdJuGruC6h8Pau3B2TfPjHeSMwhlPOrWzXMuw4sD/qPY/vja0NmMLMj0lPlEoKljsLifuKSV0ctZq0= +APIKEY_USER=encrypted:BOYO4mdq3owElO8X0ySzxG84ORJ36173co0SC5Fmd7A5BqNeQ5jHzGkhq3fCDAEhmwYEdSRvHbmI0XTmPbCxt16LycKQ2qrOMlkiy6velwhzFTqRm9bDL1k3ZqvxH1Fn2+i4jCg81wNkJRxBqBUbW6oMRqYAZjtSps6EsGkas3GbJIrlMA== +APIKEY_PASSWORD=encrypted:BBUd5iFFoPZHcWZvjdWPdUP3lKvZaBLtG72Dg4LV6ZWDBR/g5Zi8hO8ivlekrHq2p+B80i3mAfmyuAQ3p3WXSk1C+zTjqDYFt/D63Zla7w1C4O4BI9ehYkcGXl3U811df4Ld34YPinIjfyTXB3+QrxDpJ2q5gLcJVI4ET6K0cH/XmivM8w== -DATABASE_URL="encrypted:BAV2ioNNJAreTHymMvARvM33bnUJ8P/A7gBfvAXaxF0mnMVZKIds+WJ+aMectqsklwvvtWiCB0qUYReIeUbndLpLHOCMgHyKNZK5q9FrPKrsyMxUaLATmT0+AZRnBeGoErozhTkf76BqHfv4IPbpXEZHaW6SBFpqe8SZ3UCxq5w9Ik6fag9PcQC2wi/adYc0WNKMgrWS+/9JOBh0Y9yq" \ No newline at end of file +DATABASE_URL="encrypted:BPlFRFs6fhNDhACyAp2tbKxJWB0BdZbvRT10dMjOi4CvvyuGAI+6IgakOXLKn8mJ8Fgd6+d0a30uMQtT4mOdVjrU6hDL95x/ga0kE22kzhI6sFHp2+UOmv6jJI8VFZNzeFKzo9rKMC/VpElmnlLHxPOS/VEYfkBT7XxbgcAeDhxYb9iiqtGGs1LCu5EuZ+bR1OGcUJ0eOCo2XardJ9rJ4g==" \ No newline at end of file diff --git a/auth-svc/dockerfile b/auth-svc/dockerfile index 5c90d25..397c7f1 100644 --- a/auth-svc/dockerfile +++ b/auth-svc/dockerfile @@ -30,4 +30,4 @@ COPY . . RUN bun run build EXPOSE 5858 -CMD [ "dotenvx", "run" , "-f", ".env.production", "--", "bun", "./dist/user-server.mjs" ] +CMD [ "dotenvx", "run" , "-f", ".env.production", "--", "bun", "./dist/app.mjs" ] diff --git a/auth-svc/package.json b/auth-svc/package.json index b5f7267..ac6360e 100644 --- a/auth-svc/package.json +++ b/auth-svc/package.json @@ -8,7 +8,7 @@ "scripts": { "start": "NODE_ENV=production dotenvx run -f .env.production -- bun ./dist/app.mjs", - "dev": "NODE_ENV=development dotenvx run -f .env.development -- cross-env DEBUG=users:* bun ./src/app.mjs", + "dev": "NODE_ENV=development dotenvx run -f .env.development -- bun ./src/app.mjs", "prisma-pro": "NODE_ENV=production dotenvx run -f .env.production -- bunx --bun prisma --config=./src/prisma.config.ts", "prisma-dev": "dotenvx run -f .env.development -- bunx --bun prisma --config=./src/prisma.config.ts", "app": "dotenvx run -f .env.development -- bun ./src/app.mjs", diff --git a/auth-svc/src/app.mjs b/auth-svc/src/app.mjs index 7cd6b13..4676537 100644 --- a/auth-svc/src/app.mjs +++ b/auth-svc/src/app.mjs @@ -61,7 +61,7 @@ app.post('/find-or-create', async (c) => { where: { email: c.req.body.email } }); if (!user) { - user = await createUser(c.req); + user = await createUser(c.req.body); if (!user) { console.error("Error Creating User") return c.text("Error creating User", 500) diff --git a/auth-svc/src/users-prisma.mjs b/auth-svc/src/users-prisma.mjs index 72abe97..95ef928 100644 --- a/auth-svc/src/users-prisma.mjs +++ b/auth-svc/src/users-prisma.mjs @@ -1,7 +1,5 @@ import { prisma } from './lib/prisma.js'; -import { default as DBG } from 'debug' -const log = DBG('users:prisma') -const logErr = DBG('users:prisma_Error') + export async function connectDB() { try { await prisma.$connect() From cbceb2348dc7551c9d02b62255e37a403ea5c2de Mon Sep 17 00:00:00 2001 From: Usman Ghani Date: Thu, 9 Jul 2026 09:59:31 +0500 Subject: [PATCH 4/4] chore(postsvc/env): env development updated --- post-svc/.env.development | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/post-svc/.env.development b/post-svc/.env.development index 4274931..8aa00c1 100644 --- a/post-svc/.env.development +++ b/post-svc/.env.development @@ -6,15 +6,15 @@ DOTENV_PUBLIC_KEY_DEVELOPMENT="02d0abba1b8b164c0beaad518cab55a5239161ee8d9b7af1b #Google -GOOGLE_CLIENT_ID=encrypted:BJQK5qwZQa2RFWuFUoXZ08oaPJklwxFhqMKzoK9yuQgkJesCc9/2kbacDZPKg+aqtq/zQI4RzLKKsozlUvkEHG0umaDKsg3MwnGz71HJQmQFbkSjyMROtw/QwFoybcq5IbxYNKWy8gNIUplfNEHPlMok9BTwyL2RMXpMQ+5i6L2KrIUgDxvvWhnApUQ4+yG+1/uRwHuukF7K1ilX2g0hoy0Si60e7DAJeg== -GOOGLE_CLIENT_SECRET=encrypted:BBNj4NamZqUP6o6TFQquaYvn3uJHMHc5mmsnj1/9Kc0IxNTw7eajOeRCmX5NGjyUU4DOW9tvGtE4ZSsLkm2wuqLrTxQqsP9UKhl8nF3wmau3O9JJCrk6E74BbE3ArwXwIEXTnEC1QkJRK/DG7pOQ6KpxGhgTl1ArQZ1lNO2GE6yuWnvb -GOOGLE_AUTH_CALLBACKURL=encrypted:BMgtwyYEDymFv9t7Asjtac2HRZEng3fbTIR/YEB3zVd2t0e769xg5aQ6C22GLtdbDZEp+QgB/1XOLVzMR0NVt8eMtrTbPUq7ZOjntGVofXpec38uvkTmPSyxgHGtMu9H8Ly9euIcVHnDcCJ6icqvreke3BL5sCZwmvgoQrzDJ9/YiFmavzh1Tv9odFzrdHTdUMQ= +GOOGLE_CLIENT_ID=encrypted:BKoAZgERjRPP5Gcsy4g46QTG4R2zccfWYlRleX7Oes35H7xdeRAde0Ko03Ad8LzCBZqiMXiysVV1agZDwWglBRnkEq78TBHosnwIblASfM5749R+gx6AkMKoGFHwpB/njp45/Vm+3ISf9Xlj+Hcj01uRfBh2AXFYeBJXCjJdv0nLmYsmPFs6cWNGxqq3Vu8hLZye4OVoLVcF+Bxlh5SYTEaiPN+igxE33g== +GOOGLE_CLIENT_SECRET=encrypted:BCgU3v2UFCtQOzi7FXE+RP8Us+H0l9up6jW5CTsc6f748V9bQOIrlso4emUg+RXXxkzLmgUuPLVPASkWKvCHj66ZxRhy6bTsnnBvqzq9Swo9giskKN7KILi8Tn0qDzhZOjUgU4GYvmqJhA/QIP73AVKTvqQAKtyiDVdIsiuzymAB8vNY +GOOGLE_AUTH_CALLBACKURL=encrypted:BLf4lhNlmA4ajDnjt5gxPau0cdbohX7Dq8b8V0OuLgPbC93rMH8Pn9uVNfNT3dBTGFQ8BNhbgelvngVzPqU0ESfcR18BMWNdH2BFr0Py743tJ1CpSMirMMV7Zawe1nZEEIZIyuDpYLFGvEGBr/sQzF86yd3SINonO5PlMklBegD3wtwXR+P3EWM14+ZZJxKUhYs= #users-api -USER_SERVICE_URL=encrypted:BDqQxvq8UOpltohwARovSXLgz9/xEMxv1Sot2LIT+4XEEXN/tjgyYcz9KAa/g0sLNDhSh6UwpCVJ1d/LfaMiwn6YBe438wSYUy5kAo8TKm0Aixm+GbOSIM7vxGKLlKI/HmTmL5c8rNLfHkKmDzzi0eCImlO48w== -USER_AUTHTOKEN="encrypted:BGpdBaxKQmEIVzGS7eHifXMz4rbcnslV/NQ+dGqyWdZYkTOfh++GOkzOtcM0uvoIcz/GbWFXnUoafkUdcmdYTNYInIms8MmG4RX/1agl9xGlGnPqdHLATUEWLo04m47JuPOvOqJlWz6w4yqPKIL3S7Fp/rnqkonedY5YR9hrvUbjRnPCaqnhZmH3mM9IMKVQ626ExFx1ZhdXlVooS5BiaUa2fhC8bOuIlMYZFMPlmyKZ4wG8YJx8dATDaRuFkb6+eM8EGok12Uoc9RR6WpKC7aIfbqij1bJLYb3uhWva/AmBiv2Lxw5I9vEY88fw7u3z/nTEctpl24ZithVHIho8KY9Pqky9Ow3rgY2pz3VlKp+qSJXGr8g=" +USER_SERVICE_URL=encrypted:BHUaiXNPA+/msmrCEEsYzEexoDLDnhKExZ5Axl/jhmtLGvEXYPDT5C1njw9pb9U/MCafCMi+pltqTNgQDiUKMA08PNi0UZkwMplwARR7dXUH7BXS0lxCxq8HhGVb3rF/7H1Fu+vooC2VkX+wFhHwB4aMLOE= +USER_AUTHTOKEN="encrypted:BNGlLiyqAGbNBTkLSuMKkW4SWJ2Me10TYbkpi+isoKJJx3BNfN9iSQCn3HIFbybepc7F9kVEjhrBgvJg5CYF0uzrqAf7DUvLAJnXWC5pv6mjWeK/9C8kKZw/ZkmKDx2lmrlXAziPqdvGJzdR6UAaEwIiFZEbk5Mq4kB4cMyeHLI5e/C9KrNV/r70Xkyl1z2ngce8LOQPo1s9NnAHelZU3JDdPi5x+nq7/jW5kvn+XgGiKgU4HbjbJjFlbdzF+YFdYBfxvkbyFDf86jq2E45c4j+06KabA86LaaMtw7JMleB9143X/uq/W3gU7o9yYc7hOITI65O1EEPB/ywYg7j5dywyHBVP74VGRMwQsgvm4y6bIJdrYbo=" #db -POSTS_MODEL=encrypted:BFM5bQlCPqe2VZYcV95xb45jz7uSbuR1kt1CJTKEYK9NW3AR1I8v9N7lKEJHZE2OQQXD5nPHPJDsQC3xFuFlqWWkhMixecZd0YEZLwnvqyhz/LBDhymL46ES/r8oDcvvV+xsFs3V8g== -DATABASE_URL="encrypted:BB6bqeUU5B+LUZ3nireGt153FkngETc4KslJ3udMZWzZcT4C8OR5Ol83G7ZBpK4iyeQhPELgMebCJylyDJkZEwdTQVJZ2jNdXmp1vci84fZsSar8hvMpH7Ea3qCkV/HXkKtDx+Z5nVjetH3HV1umPtuPi1LvoM/WNojeAd1h7yf7P2VDU5MwT67iFNVyNY6V+RPlSV7KiFe09Ug3I13f0g==" -SESSION_JWT_SECRET=encrypted:BIcnWkNlFOKiOatNbe7YwX+FeBBLoDsyD0VDNEXxiKO4+H0u6dyeDJt9Dei3d2i6tLuNLIeMywGq8tce32jWEa+tLj6PSZUHDTJos++5ria5apfaJ55oSR9CeCq3XreuSM8733O6L5aGsgHhWcmSiUvftVIR+OlB8sls8e7FD1IaSpGFFA== -SESSION_COOKIE_SECRET=encrypted:BDUoM3bh73gvdJc8hrYi4APqY+Lq90lbS9kkPxmh/NlxKjbsJZQZavGOdD3t2BznrG4posBDMEJpPDP6iIm6CfbhSJyzy95JC6oqYS9wtTiL0yPr33SkEIMeJ9z6VND6+JszqeqhUf4G8I5nRWzYUNbRszFHtMsil1coNPCq5Zvg8AVH0Q== \ No newline at end of file +POSTS_MODEL=encrypted:BDtkNGblcrf+V5WmqaLNy1SR8AKYfaC4dy2/auhEysXkHw9cSAm5iwdMJRVadCjB/keAEqkq09dUOsW493/QsAH/vSum9CZqIZTTzWu+ihm7PWncaIqLupq82G8N36/9jLJ3hEm+LQ== +DATABASE_URL="encrypted:BKx5NfQJCLlQwpJ4RAdMb9EzEkaL/zZxHmtuelxdoNbWTNmr/rktp9podPtLMvpKpBlEDHyuMIaEZxzWe2QimaFgTq/ws6SgcaNfrzoyB0BP9tZ9FrSJM0bHWzMj4hSQ4tTstHljtvD0XXedEpffU9h9kebqpsNE4oRkXCGgCtK1vNinfr7IiLYpwIRn90fXVHl2gwxi5HjIJeslBSEjk9o5" +SESSION_JWT_SECRET=encrypted:BPaSDXLoshS9+1z+bVv6k347Av+Sv1FQswnMriHCW+4U9eLA5mAVRuI5lHhT5mSBKrDLjqPEZy7dfjnK4Y0Xm5Aug/3TF3ze+D6UCw4+rVYYwo3aBJLseQANafNjYo8Wx7sku4sIGS899gV//rLkwl/tauZ0+wmyxaC7lVi9bQmPnHnFow== +SESSION_COOKIE_SECRET=encrypted:BMEcJZ+3yx5iN2cPhuT7q9PPkvSYUxiMZpi/hSBd94HT/KvMhATwRFZ1Gzo453v+o1ybCNZTkZKnhZnbADviLF+Z+B3IBs4aNEms5iebCEE3Fwo0h+c606SGdXUWyPKHNZmqzc8IhZ6bNJ2Bd5JhO9wTMjMT0rZ+tBPdGqy6KYbXYGJsVQ== \ No newline at end of file