From df98320103a7a987a239bd12f11641c6983e534a Mon Sep 17 00:00:00 2001 From: Dmitry Nechay Date: Fri, 16 May 2025 18:51:17 +0300 Subject: [PATCH 01/29] refactor: reputation oracle local setup --- .../reputation-oracle/server/.env.example | 126 ++++++++++-------- .../server/docker-compose.yml | 85 ------------ scripts/cvat/docker-compose.local.yml | 2 +- scripts/cvat/env-files/.env.compose | 3 + scripts/cvat/env-files/.env.reputation-oracle | 56 ++++---- 5 files changed, 101 insertions(+), 171 deletions(-) delete mode 100644 packages/apps/reputation-oracle/server/docker-compose.yml diff --git a/packages/apps/reputation-oracle/server/.env.example b/packages/apps/reputation-oracle/server/.env.example index 952da47ff0..32494ba354 100644 --- a/packages/apps/reputation-oracle/server/.env.example +++ b/packages/apps/reputation-oracle/server/.env.example @@ -1,89 +1,101 @@ # General -HOST=localhost -PORT=3008 -FE_URL=http://localhost:3009 -MAX_RETRY_COUNT=5 -QUALIFICATION_MIN_VALIDITY=1 +HOST=0.0.0.0 +PORT=5001 +FE_URL=http://localhost:3001 # Database POSTGRES_HOST=0.0.0.0 -POSTGRES_USER=operator +POSTGRES_PORT=5433 +POSTGRES_USER=default POSTGRES_PASSWORD=qwerty POSTGRES_DATABASE=reputation-oracle -POSTGRES_SYNC=false -POSTGRES_PORT=5432 POSTGRES_SSL=false -POSTGRES_LOGGING='all' + +# S3 +S3_ENDPOINT=0.0.0.0 +S3_PORT=9000 +S3_ACCESS_KEY=human-oracle +S3_SECRET_KEY=human-oracle-s3-secret +S3_BUCKET=reputation-oracle +S3_USE_SSL=false # Auth -JWT_PRIVATE_KEY="-----BEGIN EC PRIVATE KEY----- -MHcCAQEEIEwNR7Y1W3ftWIpgwqCvto5idqDIz9Sfw4enT8rxj5RRoAoGCCqGSM49 -AwEHoUQDQgAEaanJgehbzgHuQ9fbhv0K0pMZ5JwrBU5wq02mlVzAFyqf50VD36z/ -s0qK3aXoFe/jlDvdLRwcHyJSfhULefS42g== ------END EC PRIVATE KEY-----" +JWT_PRIVATE_KEY="-----BEGIN PRIVATE KEY----- +MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg9T4TcNz4sFIvOZTE +wBHX986G90H20Cryp4++7APQfu6hRANCAASQ96QPer3ose3gh+9jVRjVi6RN4R8r +5evI9eFTnucq6FlcE9GtD6UwN4WlikdakaoD8rnvqf6sO+NsGAd9CIcq +-----END PRIVATE KEY-----" JWT_PUBLIC_KEY="-----BEGIN PUBLIC KEY----- -MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEaanJgehbzgHuQ9fbhv0K0pMZ5Jwr -BU5wq02mlVzAFyqf50VD36z/s0qK3aXoFe/jlDvdLRwcHyJSfhULefS42g== +MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEkPekD3q96LHt4IfvY1UY1YukTeEf +K+XryPXhU57nKuhZXBPRrQ+lMDeFpYpHWpGqA/K576n+rDvjbBgHfQiHKg== -----END PUBLIC KEY-----" -JWT_ACCESS_TOKEN_EXPIRES_IN=1000000000 -JWT_REFRESH_TOKEN_EXPIRES_IN=1000000000 - # HCaptcha HCAPTCHA_SITE_KEY=10000000-ffff-ffff-ffff-000000000001 -HCAPTCHA_API_KEY=test HCAPTCHA_SECRET=0x0000000000000000000000000000000000000000 +HCAPTCHA_API_KEY=replace_me_if_needed - -# S3 -S3_ENDPOINT=localhost -S3_PORT=9000 -S3_ACCESS_KEY=dev -S3_SECRET_KEY=devdevdev -S3_BUCKET=reputation -S3_USE_SSL=false +# KYC +KYC_API_KEY=disabled +KYC_API_PRIVATE_KEY=none # Email -SENDGRID_API_KEY= -EMAIL_FROM=test@example.com -EMAIL_FROM_NAME="Reputation oracle" +SENDGRID_API_KEY=disabled +EMAIL_FROM=reputation-oracle@local.app +EMAIL_FROM_NAME="Reputation Oracle Local" # Web3 WEB3_ENV=testnet -WEB3_PRIVATE_KEY= -GAS_PRICE_MULTIPLIER= -RPC_URL_SEPOLIA= -RPC_URL_POLYGON= -RPC_URL_POLYGON_AMOY= -RPC_URL_BSC_MAINNET= -RPC_URL_BSC_TESTNET= -RPC_URL_MOONBEAM= -RPC_URL_XLAYER= -RPC_URL_LOCALHOST= -RPC_URL_XLAYER_TESTNET= +WEB3_PRIVATE_KEY=replace_me +RPC_URL_POLYGON_AMOY=https://rpc-amoy.polygon.technology -# Reputation Level -REPUTATION_LEVEL_LOW=300 -REPUTATION_LEVEL_HIGH=700 +# Subgraph +SUBGRAPH_API_KEY=replace_me_if_needed # Encryption -PGP_PRIVATE_KEY= -PGP_PASSPHRASE= -PGP_ENCRYPT= +PGP_ENCRYPT=true +PGP_PRIVATE_KEY="-----BEGIN PGP PRIVATE KEY BLOCK----- + +lIYEZ4lbOhYJKwYBBAHaRw8BAQdAgyoVs1EoBCW7THMZLKJ8wVIXqINDDp0dQMoh +DXV0iTH+BwMCb6qyWpKmegj/IpdlppS+qycJNtMQ6RDaSZlMsq+UTRBEM64jxs3y +EKOI8P9sCP1qBJl1wIWCifBSmTAKcTeOIuLB4P6cljz8DSo3D4lxM7RXUmVwdXRh +dGlvbiBPcmFjbGUgKEV4YW1wbGUgcGdwIGtleSBmb3IgcmVwdXRhdGlvbiBvcmFj +bGUpIDxyZXB1dGF0aW9uLW9yYWNsZUBobXQubG9jYWw+iJMEExYKADsWIQTYqYVR +HpEWi8IdtKTm/YtkpDwV7QUCZ4lbOgIbAwULCQgHAgIiAgYVCgkICwIEFgIDAQIe +BwIXgAAKCRDm/YtkpDwV7b4pAQCmCmKS7PyC3DKwt65bo7iFEc4ZPrVC3SElktaM +sONZ5gEAzl292RHsJFlN3fhm7w5PM6eCqwkuBq7GchWFfz0oYAWciwRniVs6Egor +BgEEAZdVAQUBAQdAvuHJsFMJQJKNud0PBglT26Tq+fx2yM1+fYvrzTuqwhYDAQgH +/gcDAqscEWOQgpOz//4EYtR175elc/o1/0XqW74aSScCylvAMWa3QQ/TU7m39TiD +P45fKGJAYPXJEYCz36g+NSeLP1iZyWQAkweEZoQERWLgbpaIeAQYFgoAIBYhBNip +hVEekRaLwh20pOb9i2SkPBXtBQJniVs6AhsMAAoJEOb9i2SkPBXtDBUA/31dsyJ7 +AxylargNkQx/Q/5Ws/WaIT1zRJauE9kpO71iAP98o89Exq+rc268uXSN+2/edJ/D +Sq+xksFikJ/P/WeXBg== +=kI8h +-----END PGP PRIVATE KEY BLOCK-----" +PGP_PASSPHRASE=avg3GJT-asd5kgk_kgx +# Put it here just to easily set up KV later; not needed to run +PGP_PUBLIC_KEY="-----BEGIN PGP PUBLIC KEY BLOCK----- -# Synaps Kyc -SYNAPS_API_KEY= -SYNAPS_WEBHOOK_SECRET= -SYNAPS_BASE_URL= -SYNAPS_STEP_DOCUMENT_ID= +mDMEZ4lbOhYJKwYBBAHaRw8BAQdAgyoVs1EoBCW7THMZLKJ8wVIXqINDDp0dQMoh +DXV0iTG0V1JlcHV0YXRpb24gT3JhY2xlIChFeGFtcGxlIHBncCBrZXkgZm9yIHJl +cHV0YXRpb24gb3JhY2xlKSA8cmVwdXRhdGlvbi1vcmFjbGVAaG10LmxvY2FsPoiT +BBMWCgA7FiEE2KmFUR6RFovCHbSk5v2LZKQ8Fe0FAmeJWzoCGwMFCwkIBwICIgIG +FQoJCAsCBBYCAwECHgcCF4AACgkQ5v2LZKQ8Fe2+KQEApgpikuz8gtwysLeuW6O4 +hRHOGT61Qt0hJZLWjLDjWeYBAM5dvdkR7CRZTd34Zu8OTzOngqsJLgauxnIVhX89 +KGAFuDgEZ4lbOhIKKwYBBAGXVQEFAQEHQL7hybBTCUCSjbndDwYJU9uk6vn8dsjN +fn2L6807qsIWAwEIB4h4BBgWCgAgFiEE2KmFUR6RFovCHbSk5v2LZKQ8Fe0FAmeJ +WzoCGwwACgkQ5v2LZKQ8Fe0MFQD/fV2zInsDHKVquA2RDH9D/laz9ZohPXNElq4T +2Sk7vWIA/3yjz0TGr6tzbry5dI37b950n8NKr7GSwWKQn8/9Z5cG +=SrHM +-----END PGP PUBLIC KEY BLOCK-----" # Slack notifications -ABUSE_SLACK_WEBHOOK_URL= -ABUSE_SLACK_OAUTH_TOKEN= -ABUSE_SLACK_SIGNING_SECRET= +ABUSE_SLACK_WEBHOOK_URL=http://disabled-for-local.app +ABUSE_SLACK_SIGNING_SECRET=disabled +ABUSE_SLACK_OAUTH_TOKEN=disabled # NDA -NDA_URL= +NDA_URL=https://humanprotocol.org # HUMAN App secret key for auth in RepO HUMAN_APP_SECRET_KEY=sk_example_1VwUpBMO8H0v4Pmu4TPiWFEwuMguW4PkozSban4Rfbc diff --git a/packages/apps/reputation-oracle/server/docker-compose.yml b/packages/apps/reputation-oracle/server/docker-compose.yml deleted file mode 100644 index f3b01e2911..0000000000 --- a/packages/apps/reputation-oracle/server/docker-compose.yml +++ /dev/null @@ -1,85 +0,0 @@ -version: '3.8' - -services: - postgres: - container_name: postgres - image: postgres:latest - restart: always - environment: - - POSTGRES_HOST=${POSTGRES_HOST} - - POSTGRES_USER=${POSTGRES_USER} - - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} - - POSTGRES_DB=${POSTGRES_DATABASE} - - POSTGRES_PORT=${POSTGRES_PORT} - - POSTGRES_SYNC=${POSTGRES_SYNC} - logging: - options: - max-size: 10m - max-file: "3" - ports: - - '${POSTGRES_PORT}:${POSTGRES_PORT}' - # volumes: - # - ./db:/var/lib/postgresql/data - - minio: - container_name: minio - image: minio/minio:RELEASE.2022-05-26T05-48-41Z - ports: - - 9001:9001 - - 9000:9000 - entrypoint: 'sh' - command: - -c "minio server /data --console-address ':9001'" - healthcheck: - test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"] - interval: 5s - timeout: 5s - retries: 3 - minio-mc: - container_name: minio-mc - image: minio/mc - depends_on: - minio: - condition: service_healthy - entrypoint: > - /bin/sh -c " - /usr/bin/mc config host add myminio http://minio:9000 minioadmin minioadmin; - /usr/bin/mc mb myminio/reputation; - /usr/bin/mc anonymous set public myminio/reputation; - " - reputation-oracle: - container_name: reputation-oracle - restart: unless-stopped - build: - context: ../../../../ - dockerfile: packages/apps/reputation-oracle/server/Dockerfile - expose: - - '${PORT}' - ports: - - '${LOCAL_PORT}:${PORT}' - environment: - NODE_ENV: ${NODE_ENV} - HOST: ${HOST} - PORT: ${PORT} - FE_URL: ${FE_URL} - SESSION_SECRET: ${SESSION_SECRET} - POSTGRES_HOST: ${POSTGRES_HOST} - POSTGRES_USER: ${POSTGRES_USER} - POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} - POSTGRES_DATABASE: ${POSTGRES_DATABASE} - POSTGRES_SSL: ${POSTGRES_SSL} - POSTGRES_SYNC: ${POSTGRES_SYNC} - POSTGRES_PORT: ${POSTGRES_PORT} - WEB3_PRIVATE_KEY: ${WEB3_PRIVATE_KEY} - JWT_SECRET: ${JWT_SECRET} - JWT_ACCESS_TOKEN_EXPIRES_IN: ${JWT_ACCESS_TOKEN_EXPIRES_IN} - JWT_REFRESH_TOKEN_EXPIRES_IN: ${JWT_REFRESH_TOKEN_EXPIRES_IN} - S3_ENDPOINT: ${S3_ENDPOINT} - S3_PORT: ${S3_PORT} - S3_ACCESS_KEY: ${S3_ACCESS_KEY} - S3_SECRET_KEY: ${S3_SECRET_KEY} - S3_BUCKET: ${S3_BUCKET} - S3_USE_SSL: ${S3_USE_SSL} - SENDGRID_API_KEY: ${SENDGRID_API_KEY} - REPUTATION_LEVEL_LOW: ${REPUTATION_LEVEL_LOW} - REPUTATION_LEVEL_HIGH: ${REPUTATION_LEVEL_HIGH} \ No newline at end of file diff --git a/scripts/cvat/docker-compose.local.yml b/scripts/cvat/docker-compose.local.yml index 59db252e5b..81b8d00709 100644 --- a/scripts/cvat/docker-compose.local.yml +++ b/scripts/cvat/docker-compose.local.yml @@ -280,7 +280,7 @@ services: REDIS_DB: 1 RPC_URL: *rpc_url_polygon_amoy HUMAN_APP_SECRET_KEY: *human_app_secret_key - REPUTATION_ORACLE_URL: "http://reputation-oracle:${BACKEND_APPS_INTERNAL_PORT:?}" + REPUTATION_ORACLE_URL: "${REPUTATION_ORACLE_URL:-http://reputation-oracle:${BACKEND_APPS_INTERNAL_PORT:?}}" REPUTATION_ORACLE_ADDRESS: *reputation_oracle_address human-app-client: diff --git a/scripts/cvat/env-files/.env.compose b/scripts/cvat/env-files/.env.compose index 01ac15ef8b..809a1245bd 100644 --- a/scripts/cvat/env-files/.env.compose +++ b/scripts/cvat/env-files/.env.compose @@ -19,3 +19,6 @@ RECORDING_ORACLE_ADDRESS=replace_me # Might be empty SUBGRAPH_API_KEY= + +# Overrides when some service runs outside of docker +# REPUTATION_ORACLE_URL=http://host.docker.internal:5001 diff --git a/scripts/cvat/env-files/.env.reputation-oracle b/scripts/cvat/env-files/.env.reputation-oracle index e597c5c08e..da9674c259 100644 --- a/scripts/cvat/env-files/.env.reputation-oracle +++ b/scripts/cvat/env-files/.env.reputation-oracle @@ -12,37 +12,37 @@ WEB3_PRIVATE_KEY=replace_me PGP_ENCRYPT=true PGP_PRIVATE_KEY="-----BEGIN PGP PRIVATE KEY BLOCK----- -xYYEZ4+FFhYJKwYBBAHaRw8BAQdA/BEzpkXk107UOpQrUro20UxYryOW4g8x -yAXIh2cH5ff+CQMI0h7UaI9LgBXgKHJF0y9LMaRyjZwkKYQa/yn5T1pfkgTn -T2piULy9a+2w8EWyve2cv8zMBtZAcno75sV0X3BbMpkf9ru8hOoWQvkv8arN -Wc01UmVwdXRhdGlvbiBPcmFjbGUgTG9jYWwgPHJlcHV0YXRpb24tb3JhY2xl -QGxvY2FsLmFwcD7CjAQQFgoAPgWCZ4+FFgQLCQcICZCe6Z27JtHYsAMVCAoE -FgACAQIZAQKbAwIeARYhBMXQP7WbhM4roaDkzZ7pnbsm0diwAACDdAEAkLuS -rUp2eLBD2MEBP96wU8FqIUGsyju5Esd+yS7VGzIBAO8hmR8QEwk/+P2lKqLg -6lgQnT0xubb7PqcNmJNoSX8Hx4sEZ4+FFhIKKwYBBAGXVQEFAQEHQJHtNaFR -30ahNwXuUoYRyIA22K3B686H+mZCF5Nfy6JDAwEIB/4JAwj2Ltq6kZ0KfuC6 -78oX1t2wh/ZYJA9hZRa+8qyizfHZ9WKe7IWEXBW8yRc4IHNL0nYFCF5w5zoc -NMHddSoQdIWhja8s5odZqA0uV1YaDHuOwngEGBYKACoFgmePhRYJkJ7pnbsm -0diwApsMFiEExdA/tZuEziuhoOTNnumduybR2LAAAFNTAQDL0L2pHyi6CPPV -fw6LtGasCu9iLT59kNj+gUabWgYVtQEApNxRcbFcYRyqmFjDDNXtyZhZB8Jj -F8tN26blow3txgI= -=68Rz +lIYEZ4lbOhYJKwYBBAHaRw8BAQdAgyoVs1EoBCW7THMZLKJ8wVIXqINDDp0dQMoh +DXV0iTH+BwMCb6qyWpKmegj/IpdlppS+qycJNtMQ6RDaSZlMsq+UTRBEM64jxs3y +EKOI8P9sCP1qBJl1wIWCifBSmTAKcTeOIuLB4P6cljz8DSo3D4lxM7RXUmVwdXRh +dGlvbiBPcmFjbGUgKEV4YW1wbGUgcGdwIGtleSBmb3IgcmVwdXRhdGlvbiBvcmFj +bGUpIDxyZXB1dGF0aW9uLW9yYWNsZUBobXQubG9jYWw+iJMEExYKADsWIQTYqYVR +HpEWi8IdtKTm/YtkpDwV7QUCZ4lbOgIbAwULCQgHAgIiAgYVCgkICwIEFgIDAQIe +BwIXgAAKCRDm/YtkpDwV7b4pAQCmCmKS7PyC3DKwt65bo7iFEc4ZPrVC3SElktaM +sONZ5gEAzl292RHsJFlN3fhm7w5PM6eCqwkuBq7GchWFfz0oYAWciwRniVs6Egor +BgEEAZdVAQUBAQdAvuHJsFMJQJKNud0PBglT26Tq+fx2yM1+fYvrzTuqwhYDAQgH +/gcDAqscEWOQgpOz//4EYtR175elc/o1/0XqW74aSScCylvAMWa3QQ/TU7m39TiD +P45fKGJAYPXJEYCz36g+NSeLP1iZyWQAkweEZoQERWLgbpaIeAQYFgoAIBYhBNip +hVEekRaLwh20pOb9i2SkPBXtBQJniVs6AhsMAAoJEOb9i2SkPBXtDBUA/31dsyJ7 +AxylargNkQx/Q/5Ws/WaIT1zRJauE9kpO71iAP98o89Exq+rc268uXSN+2/edJ/D +Sq+xksFikJ/P/WeXBg== +=kI8h -----END PGP PRIVATE KEY BLOCK-----" -PGP_PASSPHRASE=rep-o-pgp-password -# Put it here just to easily set up KV later +PGP_PASSPHRASE=avg3GJT-asd5kgk_kgx +# Put it here just to easily set up KV later; not needed to run PGP_PUBLIC_KEY="-----BEGIN PGP PUBLIC KEY BLOCK----- -xjMEZ4+FFhYJKwYBBAHaRw8BAQdA/BEzpkXk107UOpQrUro20UxYryOW4g8x -yAXIh2cH5ffNNVJlcHV0YXRpb24gT3JhY2xlIExvY2FsIDxyZXB1dGF0aW9u -LW9yYWNsZUBsb2NhbC5hcHA+wowEEBYKAD4FgmePhRYECwkHCAmQnumduybR -2LADFQgKBBYAAgECGQECmwMCHgEWIQTF0D+1m4TOK6Gg5M2e6Z27JtHYsAAA -g3QBAJC7kq1KdniwQ9jBAT/esFPBaiFBrMo7uRLHfsku1RsyAQDvIZkfEBMJ -P/j9pSqi4OpYEJ09Mbm2+z6nDZiTaEl/B844BGePhRYSCisGAQQBl1UBBQEB -B0CR7TWhUd9GoTcF7lKGEciANtitwevOh/pmQheTX8uiQwMBCAfCeAQYFgoA -KgWCZ4+FFgmQnumduybR2LACmwwWIQTF0D+1m4TOK6Gg5M2e6Z27JtHYsAAA -U1MBAMvQvakfKLoI89V/Dou0ZqwK72ItPn2Q2P6BRptaBhW1AQCk3FFxsVxh -HKqYWMMM1e3JmFkHwmMXy03bpuWjDe3GAg== -=pqBc +mDMEZ4lbOhYJKwYBBAHaRw8BAQdAgyoVs1EoBCW7THMZLKJ8wVIXqINDDp0dQMoh +DXV0iTG0V1JlcHV0YXRpb24gT3JhY2xlIChFeGFtcGxlIHBncCBrZXkgZm9yIHJl +cHV0YXRpb24gb3JhY2xlKSA8cmVwdXRhdGlvbi1vcmFjbGVAaG10LmxvY2FsPoiT +BBMWCgA7FiEE2KmFUR6RFovCHbSk5v2LZKQ8Fe0FAmeJWzoCGwMFCwkIBwICIgIG +FQoJCAsCBBYCAwECHgcCF4AACgkQ5v2LZKQ8Fe2+KQEApgpikuz8gtwysLeuW6O4 +hRHOGT61Qt0hJZLWjLDjWeYBAM5dvdkR7CRZTd34Zu8OTzOngqsJLgauxnIVhX89 +KGAFuDgEZ4lbOhIKKwYBBAGXVQEFAQEHQL7hybBTCUCSjbndDwYJU9uk6vn8dsjN +fn2L6807qsIWAwEIB4h4BBgWCgAgFiEE2KmFUR6RFovCHbSk5v2LZKQ8Fe0FAmeJ +WzoCGwwACgkQ5v2LZKQ8Fe0MFQD/fV2zInsDHKVquA2RDH9D/laz9ZohPXNElq4T +2Sk7vWIA/3yjz0TGr6tzbry5dI37b950n8NKr7GSwWKQn8/9Z5cG +=SrHM -----END PGP PUBLIC KEY BLOCK-----" KYC_API_KEY=disabled From 2a893a3c2ed13fba468b0303ed6c9cd146dfd9fa Mon Sep 17 00:00:00 2001 From: Dmitry Nechay Date: Fri, 16 May 2025 19:32:47 +0300 Subject: [PATCH 02/29] refactor: human server local setup --- packages/apps/human-app/server/.env.example | 68 +++++------ packages/apps/human-app/server/ENV.md | 107 ------------------ .../apps/human-app/server/docker-compose.yml | 32 ------ .../apps/human-app/server/src/app.module.ts | 1 - 4 files changed, 35 insertions(+), 173 deletions(-) delete mode 100644 packages/apps/human-app/server/ENV.md delete mode 100644 packages/apps/human-app/server/docker-compose.yml diff --git a/packages/apps/human-app/server/.env.example b/packages/apps/human-app/server/.env.example index 3e2e15827b..86af25dbfe 100644 --- a/packages/apps/human-app/server/.env.example +++ b/packages/apps/human-app/server/.env.example @@ -1,34 +1,36 @@ -HOST= # string, example: localhost -PORT= # number, example: 5010 -REPUTATION_ORACLE_URL= # string -REPUTATION_ORACLE_ADDRESS= # string -REDIS_HOST= # string, example: localhost -REDIS_PORT= # number, example: 6379 -RPC_URL= # string -CHAIN_IDS_ENABLED= # number array, example: 80002,80001 -HCAPTCHA_LABELING_STATS_API_URL= # string -HCAPTCHA_LABELING_VERIFY_API_URL= # string -HCAPTCHA_LABELING_API_KEY= # string -IS_AXIOS_REQUEST_LOGGING_ENABLED= #string, true if enabled, disabled otherwise -ALLOWED_HOST= #string, example 'localhost:3000' -HUMAN_APP_SECRET_KEY= # string -# CACHE TTL VALUES - in seconds -CACHE_TTL_ORACLE_DISCOVERY= # number, example: 43200 -CACHE_TTL_ORACLE_STATS= # number, example: 900 -CACHE_TTL_USER_STATS= # number, example: 86400 -CACHE_TTL_EXCHANGE_ORACLE_URL= # number: example 86400 -CACHE_TTL_HCAPTCHA_USER_STATS= # number: example 86400 -CACHE_TTL_DAILY_HMT_SPENT= # number: example 86400 -CACHE_TTL_JOB_TYPES= # number: example 86400 -# E2E TESTING -E2E_TESTING_EMAIL_ADDRESS= # string -E2E_TESTING_PASSWORD= # string -E2E_TESTING_EXCHANGE_ORACLE_URL= # string -E2E_TESTING_ESCROW_ADDRESS= # string -E2E_TESTING_ESCROW_CHAIN_ID= # number +# General +HOST=0.0.0.0 +PORT=5002 +ALLOWED_HOST=localhost:5002 + # CORS -CORS_ALLOWED_ORIGIN= # string example: http://localhost:5173 -CORS_ALLOWED_HEADERS= # string, example: 'Content-Type,Authorization,X-Requested-With,Accept,Origin' -CORS_ENABLED= # boolean, example: true -IS_CACHE_TO_RESTART= # boolean, example: false -FEATURE_FLAG_JOBS_DISCOVERY= # boolean, example: false +CORS_ALLOWED_ORIGIN=* +CORS_ALLOWED_HEADERS='Content-Type,Authorization,X-Requested-With,Accept,Origin' +CORS_ENABLED=true + +# Reputation Oracle +REPUTATION_ORACLE_URL=http://0.0.0.0:5001 +# Web3 address +REPUTATION_ORACLE_ADDRESS=replace_me +# Auth key +HUMAN_APP_SECRET_KEY=sk_example_1VwUpBMO8H0v4Pmu4TPiWFEwuMguW4PkozSban4Rfbc + +# Redis +REDIS_HOST=0.0.0.0 +REDIS_PORT=6380 +REIDS_DB=1 +# Flush DB on startup +IS_CACHE_TO_RESTART=false + +# Web3 +RPC_URL=https://rpc-amoy.polygon.technology +# Comma-separated array +CHAIN_IDS_ENABLED=80002 + +# hCaptcha +HCAPTCHA_LABELING_STATS_API_URL=disabled +HCAPTCHA_LABELING_VERIFY_API_URL=disabled +HCAPTCHA_LABELING_API_KEY=disabled + +# Feature flags +FEATURE_FLAG_JOBS_DISCOVERY=true diff --git a/packages/apps/human-app/server/ENV.md b/packages/apps/human-app/server/ENV.md deleted file mode 100644 index ae4a763e38..0000000000 --- a/packages/apps/human-app/server/ENV.md +++ /dev/null @@ -1,107 +0,0 @@ -# Environment Variables - -### The hostname or IP address on which the server will run. Default: 'localhost' -HOST="localhost" - -### The port number on which the server will listen for incoming connections. Default: 5000 -PORT="5000" - -### The URL of the reputation oracle service. Required -GIT_HASH= - -### The address of the reputation oracle service. Required -REPUTATION_ORACLE_URL= - -### Flag indicating if Axios request logging is enabled. Default: false -REPUTATION_ORACLE_ADDRESS="false" - -### The allowed host for the application. Required -IS_AXIOS_REQUEST_LOGGING_ENABLED= - -### The port number for the Redis cache server. Required -ALLOWED_HOST= - -### The hostname or IP address of the Redis cache server. Required -REDIS_PORT= - -### The DB number of the Redis cache server -REDIS_HOST= - -### The cache time-to-live (TTL) for oracle statistics. Default: 12 hours -REDIS_DB="12 hours" - -### The cache time-to-live (TTL) for user statistics. Default: 15 minutes -CACHE_TTL_ORACLE_STATS="15 minutes" - -### The cache time-to-live (TTL) for daily HMT spent data. Default: 24 hours -CACHE_TTL_USER_STATS="24 hours" - -### The cache time-to-live (TTL) for hCaptcha user statistics. Default: 12 hours -CACHE_TTL_DAILY_HMT_SPENT="12 hours" - -### The cache time-to-live (TTL) for oracle discovery. Default: 24 hours -CACHE_TTL_HCAPTCHA_USER_STATS="24 hours" - -### Number of days without updates assignments data is retained. Default: 45 days -CACHE_TTL_ORACLE_DISCOVERY="45 days" - -### The RPC URL used for communication. Required -JOB_ASSIGNMENTS_DATA_RETENTION_DAYS= - -### Flag indicating if CORS is enabled. Default: false -RPC_URL="false" - -### The allowed origin for CORS requests. Default: 'http://localhost:5173' -CORS_ENABLED="http://localhost:5173" - -### The allowed headers for CORS requests. Default: 'Content-Type,Authorization,X-Requested-With,Accept,Origin' -CORS_ALLOWED_ORIGIN="Content-Type,Authorization,X-Requested-With,Accept,Origin" - -### The cache time-to-live (TTL) for exchange oracle URLs. Default: 24 hours -CORS_ALLOWED_HEADERS="24 hours" - -### The cache time-to-live (TTL) for job types. Default: 24 hours -CACHE_TTL_EXCHANGE_ORACLE_URL="24 hours" - -### The cache time-to-live (TTL) for exchange oracle registration needed. Default: 24 hours -CACHE_TTL_JOB_TYPES="24 hours" - -### The API URL for hCaptcha labeling statistics. Required -CACHE_TTL_EXCHANGE_ORACLE_REGISTRATION_NEEDED= - -### The API URL for hCaptcha labeling verification. Required -HCAPTCHA_LABELING_STATS_API_URL= - -### The API key for hCaptcha labeling. Required -HCAPTCHA_LABELING_VERIFY_API_URL= - -### The list of enabled chain IDs. Required -HCAPTCHA_LABELING_API_KEY= - -### Flag indicating if the cache should be restarted. Default: false -CHAIN_IDS_ENABLED="false" - -### The email address for the human app. Required -IS_CACHE_TO_RESTART= - -### The secret key for Reputation Oracle. Required -HUMAN_APP_SECRET_KEY= - -### Feature flag for job discovery -MAX_EXECUTIONS_TO_SKIP= - -### The email address used for end-to-end (E2E) testing. Default: empty string -E2E_TESTING_EMAIL_ADDRESS="empty string" - -### The password used for end-to-end (E2E) testing. Default: empty string -E2E_TESTING_PASSWORD="empty string" - -### The URL of the exchange oracle service used for end-to-end (E2E) testing. Default: empty string -E2E_TESTING_EXCHANGE_ORACLE_URL="empty string" - -### The escrow address used for end-to-end (E2E) testing. Default: empty string -E2E_TESTING_ESCROW_ADDRESS="empty string" - -### The chain ID for the escrow service used for end-to-end (E2E) testing. Default: empty string -E2E_TESTING_ESCROW_CHAIN_ID="empty string" - diff --git a/packages/apps/human-app/server/docker-compose.yml b/packages/apps/human-app/server/docker-compose.yml deleted file mode 100644 index 70b3f4db38..0000000000 --- a/packages/apps/human-app/server/docker-compose.yml +++ /dev/null @@ -1,32 +0,0 @@ -name: 'human-app-server' - -services: - human-app: - container_name: human-app - restart: unless-stopped - build: - context: ../../../../ - dockerfile: packages/apps/human-app/server/Dockerfile - expose: - - '${PORT}' - ports: - - '${LOCAL_PORT}:${PORT}' - environment: - NODE_ENV: ${NODE_ENV} - HOST: ${HOST} - PORT: ${PORT} - REPUTATION_ORACLE_URL: ${REPUTATION_ORACLE_URL} - REPUTATION_ORACLE_ADDRESS: ${REPUTATION_ORACLE_ADDRESS} - REDIS_PORT: ${REDIS_PORT} - REDIS_HOST: redis - CACHE_TTL_ORACLE_DISCOVERY: ${CACHE_TTL_ORACLE_DISCOVERY} - RPC_URL: ${RPC_URL} - depends_on: - - redis - redis: - image: redis:latest - container_name: human_app_cache - ports: - - '${REDIS_PORT}:6379' - volumes: - - ./redis_data:/data \ No newline at end of file diff --git a/packages/apps/human-app/server/src/app.module.ts b/packages/apps/human-app/server/src/app.module.ts index f6f3414bc2..205407942e 100644 --- a/packages/apps/human-app/server/src/app.module.ts +++ b/packages/apps/human-app/server/src/app.module.ts @@ -81,7 +81,6 @@ const JOI_BOOLEAN_STRING_SCHEMA = Joi.string().valid('true', 'false'); .required(), HUMAN_APP_SECRET_KEY: Joi.string().required(), IS_AXIOS_REQUEST_LOGGING_ENABLED: JOI_BOOLEAN_STRING_SCHEMA, - ALLOWED_HOST: Joi.string().required(), CORS_ENABLED: JOI_BOOLEAN_STRING_SCHEMA, CORS_ALLOWED_ORIGIN: Joi.string(), CORS_ALLOWED_HEADERS: Joi.string(), From f1a1695c7eb6a2700d411844c85f49f8ae4f27a0 Mon Sep 17 00:00:00 2001 From: Dmitry Nechay Date: Fri, 16 May 2025 21:44:49 +0300 Subject: [PATCH 03/29] refactor: human app client local setup --- packages/apps/human-app/frontend/.env.example | 92 +++++++------------ scripts/cvat/env-files/.env.human-app-client | 31 ++++--- 2 files changed, 52 insertions(+), 71 deletions(-) diff --git a/packages/apps/human-app/frontend/.env.example b/packages/apps/human-app/frontend/.env.example index a18d929d1d..66bd2c755b 100644 --- a/packages/apps/human-app/frontend/.env.example +++ b/packages/apps/human-app/frontend/.env.example @@ -1,64 +1,38 @@ -# api url -VITE_API_URL= #string -# link to privacy policy page -VITE_PRIVACY_POLICY_URL= #string -# link to terms of service -VITE_TERMS_OF_SERVICE_URL= #string -# link to help page -VITE_HUMAN_PROTOCOL_HELP_URL= #string -# email for "Contact Support" links -VITE_HUMAN_SUPPORT_EMAIL= #string -# link to human web page -VITE_HUMAN_PROTOCOL_URL= #string -# link to human web page in main page navbar -VITE_NAVBAR__LINK__PROTOCOL_URL= #string -# link to human web page section in main page navbar -VITE_NAVBAR__LINK__HOW_IT_WORK_URL= #string -# capthca site key for captcha other than labeling -VITE_H_CAPTCHA_SITE_KEY= #string -# HMT daily spent limit -VITE_HMT_DAILY_SPENT_LIMIT= #number -# daily solved captcha limit -VITE_DAILY_SOLVED_CAPTCHA_LIMIT= #number -# capthca url for captcha other than labeling -VITE_H_CAPTCHA_EXCHANGE_URL= #string -# capthca url for labeling -VITE_H_CAPTCHA_LABELING_BASE_URL= #string -# ID of project created with https://cloud.walletconnect.com/sign-in -VITE_WALLET_CONNECT_PROJECT_ID= #string -# Dapp name for wallet connect -VITE_DAPP_META_NAME= #string -# Dapp description for wallet connect -VITE_DAPP_META_DESCRIPTION= #string -# Dapp url for wallet connect -VITE_DAPP_META_URL= #string -# Dapp icons for wallet connect -VITE_DAPP_ICONS= #string => lists of icons eg.: icon1,icon2... +# General +VITE_API_URL=http://localhost:5002 +VITE_NETWORK=testnet -# This data will be use to add first oracle in the oracles table -# string -VITE_H_CAPTCHA_ORACLE_ANNOTATION_TOOL= -# string -VITE_H_CAPTCHA_ORACLE_ROLE= -# string -VITE_H_CAPTCHA_ORACLE_ADDRESS= -# job types list string -VITE_H_CAPTCHA_ORACLE_TASK_TYPES= #string => lists of job types eg.: Image labeling, BBoxes... +# Reown project id +VITE_WALLET_CONNECT_PROJECT_ID=replace_me +VITE_DAPP_ICONS=icon1,icon2 +VITE_DAPP_META_DESCRIPTION=Complete jobs, earn HMT +VITE_DAPP_META_NAME=Human App Local +VITE_DAPP_META_URL=http://localhost:3001 -# if network is equal to 'testnet' app will use first testnet chain from .src/smart-contracts/chains.ts -# and first mainnet chain for 'mainnet' -VITE_NETWORK= # mainnet|testnet -VITE_GOVERNOR_ADDRESS= -VITE_GOVERNANCE_URL= +# hCapthca +VITE_H_CAPTCHA_EXCHANGE_URL=https://foundation-yellow-exchange.hmt.ai +VITE_H_CAPTCHA_LABELING_BASE_URL=https://foundation-yellow-accounts.hmt.ai +VITE_H_CAPTCHA_SITE_KEY=10000000-ffff-ffff-ffff-000000000001 +VITE_DAILY_SOLVED_CAPTCHA_LIMIT=0 +VITE_HMT_DAILY_SPENT_LIMIT=0 + +# hCaptcha annotation tool +VITE_H_CAPTCHA_ORACLE_ADDRESS=replace_me +VITE_H_CAPTCHA_ORACLE_ANNOTATION_TOOL=hcaptcha +VITE_H_CAPTCHA_ORACLE_ROLE=hcaptcha +VITE_H_CAPTCHA_ORACLE_TASK_TYPES=image_points,image_boxes -## Web3 setup -# set SC addresses according to https://human-protocol.gitbook.io/hub/human-tech-docs/architecture/components/smart-contracts/contract-addresses +# Other +VITE_HUMAN_PROTOCOL_HELP_URL=https://docs.humanprotocol.org/ +VITE_HUMAN_PROTOCOL_URL=https://humanprotocol.org/ +VITE_HUMAN_SUPPORT_EMAIL=support@local.app +VITE_NAVBAR__LINK__HOW_IT_WORK_URL=https://humanprotocol.org/ +VITE_NAVBAR__LINK__PROTOCOL_URL=https://humanprotocol.org/ +VITE_PRIVACY_POLICY_URL=http://local.app/privacy-policy/ +VITE_TERMS_OF_SERVICE_URL=http://local.app/terms-and-conditions/ -## other networks -# if you wish to add new network follow this instruction: -# - add your env-s set to .env file -# - add new env-s to validation schema in: ./src/shared/env.ts -# - include new valid env-s in: ./src/smart-contracts/contracts.ts -# - add chain data in: .src/smart-contracts/chains.ts +VITE_GOVERNOR_ADDRESS= +VITE_GOVERNANCE_URL= -# all new chains will be available in wallet-connect modal \ No newline at end of file +# Feature flags +VITE_FEATURE_FLAG_JOBS_DISCOVERY=true diff --git a/scripts/cvat/env-files/.env.human-app-client b/scripts/cvat/env-files/.env.human-app-client index c70c0f5f49..4dce091e52 100644 --- a/scripts/cvat/env-files/.env.human-app-client +++ b/scripts/cvat/env-files/.env.human-app-client @@ -1,18 +1,28 @@ +# General VITE_API_URL=http://localhost:5002 VITE_NETWORK=testnet + # Reown project id VITE_WALLET_CONNECT_PROJECT_ID=replace_me VITE_DAPP_ICONS=icon1,icon2 VITE_DAPP_META_DESCRIPTION=Complete jobs, earn HMT VITE_DAPP_META_NAME=Human App Local VITE_DAPP_META_URL=http://localhost:3001 -# Keep it empty -VITE_H_CAPTCHA_EXCHANGE_URL= -# Keep it empty -VITE_H_CAPTCHA_LABELING_BASE_URL= + +# hCapthca +VITE_H_CAPTCHA_EXCHANGE_URL=https://foundation-yellow-exchange.hmt.ai +VITE_H_CAPTCHA_LABELING_BASE_URL=https://foundation-yellow-accounts.hmt.ai VITE_H_CAPTCHA_SITE_KEY=10000000-ffff-ffff-ffff-000000000001 VITE_DAILY_SOLVED_CAPTCHA_LIMIT=0 VITE_HMT_DAILY_SPENT_LIMIT=0 + +# hCaptcha annotation tool +VITE_H_CAPTCHA_ORACLE_ADDRESS=replace_me +VITE_H_CAPTCHA_ORACLE_ANNOTATION_TOOL=hcaptcha +VITE_H_CAPTCHA_ORACLE_ROLE=hcaptcha +VITE_H_CAPTCHA_ORACLE_TASK_TYPES=image_points,image_boxes + +# Other VITE_HUMAN_PROTOCOL_HELP_URL=https://docs.humanprotocol.org/ VITE_HUMAN_PROTOCOL_URL=https://humanprotocol.org/ VITE_HUMAN_SUPPORT_EMAIL=support@local.app @@ -20,12 +30,9 @@ VITE_NAVBAR__LINK__HOW_IT_WORK_URL=https://humanprotocol.org/ VITE_NAVBAR__LINK__PROTOCOL_URL=https://humanprotocol.org/ VITE_PRIVACY_POLICY_URL=http://local.app/privacy-policy/ VITE_TERMS_OF_SERVICE_URL=http://local.app/terms-and-conditions/ -VITE_H_CAPTCHA_ORACLE_ANNOTATION_TOOL=hcaptcha -VITE_H_CAPTCHA_ORACLE_ROLE=hcaptcha -# Keep it empty -VITE_H_CAPTCHA_ORACLE_ADDRESS= -VITE_H_CAPTCHA_ORACLE_TASK_TYPES=image_points,image_boxes -VITE_FEATURE_FLAG_JOBS_DISCOVERY=true -# Keep it empty + VITE_GOVERNOR_ADDRESS= -VITE_GOVERNANCE_URL= \ No newline at end of file +VITE_GOVERNANCE_URL= + +# Feature flags +VITE_FEATURE_FLAG_JOBS_DISCOVERY=true \ No newline at end of file From c1175175d1f62066179d8d6e334eb6b8359d2131 Mon Sep 17 00:00:00 2001 From: Dmitry Nechay Date: Fri, 16 May 2025 22:16:39 +0300 Subject: [PATCH 04/29] refactor: launcher local setup --- .../apps/job-launcher/server/.env.example | 137 +++++++----- packages/apps/job-launcher/server/ENV.md | 203 ------------------ scripts/cvat/docker-compose.local.yml | 16 +- scripts/cvat/env-files/.env.compose | 10 +- scripts/cvat/env-files/.env.job-launcher | 53 +++-- 5 files changed, 120 insertions(+), 299 deletions(-) delete mode 100644 packages/apps/job-launcher/server/ENV.md diff --git a/packages/apps/job-launcher/server/.env.example b/packages/apps/job-launcher/server/.env.example index 84b6fa86f8..f7ca57ff7a 100644 --- a/packages/apps/job-launcher/server/.env.example +++ b/packages/apps/job-launcher/server/.env.example @@ -1,80 +1,101 @@ # General -NODE_ENV=development -HOST=localhost -PORT=3000 +HOST=0.0.0.0 +PORT=5003 FE_URL=http://localhost:3001 # Database POSTGRES_HOST=0.0.0.0 -POSTGRES_USER=operator +POSTGRES_PORT=5433 +POSTGRES_USER=default POSTGRES_PASSWORD=qwerty POSTGRES_DATABASE=job-launcher -POSTGRES_PORT=5432 POSTGRES_SSL=false -POSTGRES_LOGGING='all' + +# S3 +S3_ENDPOINT=0.0.0.0 +S3_PORT=9000 +S3_ACCESS_KEY=human-oracle +S3_SECRET_KEY=human-oracle-s3-secret +S3_BUCKET=manifests +S3_USE_SSL=false # Web3 WEB3_ENV=testnet -WEB3_PRIVATE_KEY= -GAS_PRICE_MULTIPLIER=1 -PGP_PRIVATE_KEY= -PGP_ENCRYPT= -PGP_PASSPHRASE= -REPUTATION_ORACLE_ADDRESS= -CVAT_EXCHANGE_ORACLE_ADDRESS= -CVAT_RECORDING_ORACLE_ADDRESS= -AUDINO_EXCHANGE_ORACLE_ADDRESS= -AUDINO_RECORDING_ORACLE_ADDRESS= -HCAPTCHA_ORACLE_ADDRESS= -HCAPTCHA_RECORDING_ORACLE_URI= -HCAPTCHA_REPUTATION_ORACLE_URI= -HCAPTCHA_SITE_KEY= -RPC_URL_SEPOLIA= -RPC_URL_POLYGON= -RPC_URL_POLYGON_AMOY= -RPC_URL_BSC_MAINNET= -RPC_URL_BSC_TESTNET= -RPC_URL_MOONBEAM= -RPC_URL_XLAYER_TESTNET= -RPC_URL_XLAYER= -RPC_URL_LOCALHOST= +WEB3_PRIVATE_KEY=replace_me +RPC_URL_POLYGON_AMOY=https://rpc-amoy.polygon.technology +REPUTATION_ORACLES=replace_me +REPUTATION_ORACLE_ADDRESS=replace_me +CVAT_EXCHANGE_ORACLE_ADDRESS=replace_me_if_needed +CVAT_RECORDING_ORACLE_ADDRESS=replace_me_if_needed +HCAPTCHA_ORACLE_ADDRESS=replace_me_if_needed +HCAPTCHA_RECORDING_ORACLE_URI=replace_me_if_needed +HCAPTCHA_REPUTATION_ORACLE_URI=replace_me_if_needed -# Auth -JWT_PRIVATE_KEY= -JWT_PUBLIC_KEY= -JWT_ACCESS_TOKEN_EXPIRES_IN=86400 -REFRESH_TOKEN_EXPIRES_IN=86400 -VERIFY_EMAIL_TOKEN_EXPIRES_IN=86400 -FORGOT_PASSWORD_TOKEN_EXPIRES_IN=86400 +# Encryption +PGP_ENCRYPT=true +PGP_PRIVATE_KEY="-----BEGIN PGP PRIVATE KEY BLOCK----- -# APIKEY -APIKEY_ITERATIONS= -APIKEY_KEY_LENGTH= +lIYEZ4+zchYJKwYBBAHaRw8BAQdA1ql3NCl4pZANEvM3jaxoHLeh5t0PM237WLkG +hCoxjK7+BwMCBJL1H5pd3HT/JxeY7rqJs8sfBOfMbbAxRds/uLdMgGcVzjpj7htU +yzg7PHhWESAgycZmk9QpjgEQYlHl7KbZNNidG1zdCKX9GDce6W5PB7QlSm9iIExh +dW5jaGVyIDxqb2ItbGF1bmNoZXJAbG9jYWwuYXBwPoiTBBMWCgA7FiEEUlUidK34 +MNfYCc0xkWfqgp0A/m4FAmePs3ICGwMFCwkIBwICIgIGFQoJCAsCBBYCAwECHgcC +F4AACgkQkWfqgp0A/m7q3wD/V7G/uxy7LZOX9aW2uPcYfRInVDcyElwJza0Pcken +9qEBAJF0XBJJHkOVOyfmPv5nqAJ3DI6kRiHml+Ri3VjQp24OnIsEZ4+zchIKKwYB +BAGXVQEFAQEHQAGE7HHBGkVnFFPHpXdC/2uY+DC1vMkqTy8fzY0k2jQhAwEIB/4H +AwKFPSSA1sF9iP+Aepg/tiJFDyGqJsSKFlvj07zHjSKxeIOGcuC1llJCju70AcR5 +cQ3itvWUrDIpwI3GnHTy5k183GIIt2cRhLRnLUqIWXLliHgEGBYKACAWIQRSVSJ0 +rfgw19gJzTGRZ+qCnQD+bgUCZ4+zcgIbDAAKCRCRZ+qCnQD+bsXqAP0duGYm6z58 +mBdnv9k5Ed2wEw5hFnjcKXEQBFcMORVgdgD/RssEZjY0Vli5ofBezTOvURLAZRY2 +FryLSAroIMtuIAk= +=of7b +-----END PGP PRIVATE KEY BLOCK-----" +PGP_PASSPHRASE=ixS5G0GE8Eh!fn +# Put it here just to easily set up KV later; not needed to run +PGP_PUBLIC_KEY="-----BEGIN PGP PUBLIC KEY BLOCK----- -# S3 -S3_ENDPOINT=localhost -S3_PORT=9000 -S3_ACCESS_KEY=access-key -S3_SECRET_KEY=secret-key -S3_BUCKET=manifests -S3_USE_SSL=false +mDMEZ4+zchYJKwYBBAHaRw8BAQdA1ql3NCl4pZANEvM3jaxoHLeh5t0PM237WLkG +hCoxjK60JUpvYiBMYXVuY2hlciA8am9iLWxhdW5jaGVyQGxvY2FsLmFwcD6IkwQT +FgoAOxYhBFJVInSt+DDX2AnNMZFn6oKdAP5uBQJnj7NyAhsDBQsJCAcCAiICBhUK +CQgLAgQWAgMBAh4HAheAAAoJEJFn6oKdAP5u6t8A/1exv7scuy2Tl/Wltrj3GH0S +J1Q3MhJcCc2tD3JHp/ahAQCRdFwSSR5DlTsn5j7+Z6gCdwyOpEYh5pfkYt1Y0Kdu +Drg4BGePs3ISCisGAQQBl1UBBQEBB0ABhOxxwRpFZxRTx6V3Qv9rmPgwtbzJKk8v +H82NJNo0IQMBCAeIeAQYFgoAIBYhBFJVInSt+DDX2AnNMZFn6oKdAP5uBQJnj7Ny +AhsMAAoJEJFn6oKdAP5uxeoA/R24ZibrPnyYF2e/2TkR3bATDmEWeNwpcRAEVww5 +FWB2AP9GywRmNjRWWLmh8F7NM69REsBlFjYWvItICuggy24gCQ== +=d9DF +-----END PGP PUBLIC KEY BLOCK-----" + +# Auth +JWT_PRIVATE_KEY="-----BEGIN PRIVATE KEY----- +MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgjwW8ZeWIKizY9pSl +phyKfwYFp3aRHeMuV+jOKp49hX6hRANCAATeitytad5Rh0tx6AP/VHptsRvsZ+Xp +/24PICdk4nsMxZEAe76InmWdqhud13JV76Jl02DVenFEJVM5IjRk+mLG +-----END PRIVATE KEY-----" +JWT_PUBLIC_KEY="-----BEGIN PUBLIC KEY----- +MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE3orcrWneUYdLcegD/1R6bbEb7Gfl +6f9uDyAnZOJ7DMWRAHu+iJ5lnaobnddyVe+iZdNg1XpxRCVTOSI0ZPpixg== +-----END PUBLIC KEY-----" + +# hCaptcha +HCAPTCHA_SITE_KEY=10000000-ffff-ffff-ffff-000000000001 +HCAPTCHA_SECRET=0x0000000000000000000000000000000000000000 # Stripe -STRIPE_SECRET_KEY= -STRIPE_API_VERSION= -STRIPE_APP_NAME= -STRIPE_APP_VERSION= -STRIPE_APP_INFO_URL= +STRIPE_SECRET_KEY=disabled +STRIPE_APP_NAME=Launcher Server Local +STRIPE_APP_VERSION=1.0.0 +STRIPE_APP_INFO_URL=http://local.app # Sendgrid -SENDGRID_API_KEY= +SENDGRID_API_KEY=sendgrid-disabled # Vision -GOOGLE_PROJECT_ID= -GOOGLE_PRIVATE_KEY= -GOOGLE_CLIENT_EMAIL= -GCV_MODERATION_RESULTS_FILES_PATH= -GCV_MODERATION_RESULTS_BUCKET= +GOOGLE_PROJECT_ID=disabled +GOOGLE_PRIVATE_KEY=disabled +GOOGLE_CLIENT_EMAIL=disabled +GCV_MODERATION_RESULTS_FILES_PATH=disabled +GCV_MODERATION_RESULTS_BUCKET=disabled # Slack -SLACK_ABUSE_NOTIFICATION_WEBHOOK_URL= \ No newline at end of file +SLACK_ABUSE_NOTIFICATION_WEBHOOK_URL=disabled diff --git a/packages/apps/job-launcher/server/ENV.md b/packages/apps/job-launcher/server/ENV.md deleted file mode 100644 index 398fc7302b..0000000000 --- a/packages/apps/job-launcher/server/ENV.md +++ /dev/null @@ -1,203 +0,0 @@ -# Environment Variables - -### The private key used for signing JSON Web Tokens (JWT). Required -JWT_PRIVATE_KEY= - -### The public key used for verifying JSON Web Tokens (JWT). Required -JWT_PUBLIC_KEY= - -### The expiration time (in seconds) for access tokens. Default: 600 -JWT_ACCESS_TOKEN_EXPIRES_IN="600" - -### The expiration time (in seconds) for refresh tokens. Default: 3600 -REFRESH_TOKEN_EXPIRES_IN="3600" - -### The expiration time (in seconds) for email verification tokens. Default: 86400 -VERIFY_EMAIL_TOKEN_EXPIRES_IN="86400" - -### The expiration time (in seconds) for forgot password tokens. Default: 86400 -FORGOT_PASSWORD_TOKEN_EXPIRES_IN="86400" - -### The number of iterations used for generating API keys. Default: 1000 -APIKEY_ITERATIONS="1000" - -### The length of the API key in characters. Default: 64 -APIKEY_KEY_LENGTH="64" - -### The site key for hCaptcha, used for CAPTCHA protection. Required -HCAPTCHA_SITE_KEY= - -### The secret key for hCaptcha, used for verifying CAPTCHA responses. Required -HCAPTCHA_SECRET= - -### The URL for the hCaptcha protection service. Default: 'https://api.hcaptcha.com' -HCAPTCHA_PROTECTION_URL="https://api.hcaptcha.com" - -### The size of the job in CVAT, typically representing the number of items or tasks. Default: 10 -CVAT_JOB_SIZE="10" - -### The maximum allowed time (in seconds) for a CVAT job to be completed. Default: 300 -CVAT_MAX_TIME="300" - -### The size of validation jobs in CVAT, usually representing the number of validation items. Default: 2 -CVAT_VAL_SIZE="2" - -### The multiplier for the size of skeleton jobs in CVAT, used to scale the job size for skeleton tasks. Default: 6 -CVAT_SKELETONS_JOB_SIZE_MULTIPLIER="6" - -### The URL for connecting to the PostgreSQL database. -POSTGRES_URL= - -### The hostname or IP address of the PostgreSQL database server. Default: '127.0.0.1' -POSTGRES_HOST="127.0.0.1" - -### The port number on which the PostgreSQL database server is listening. Default: 5432 -POSTGRES_PORT="5432" - -### The username for authenticating with the PostgreSQL database. Default: 'operator' -POSTGRES_USER="operator" - -### The password for authenticating with the PostgreSQL database. Default: 'qwerty' -POSTGRES_PASSWORD="qwerty" - -### The name of the PostgreSQL database to connect to. Default: 'job-launcher' -POSTGRES_DATABASE="job-launcher" - -### Indicates whether to use SSL for connections to the PostgreSQL database. Default: false -POSTGRES_SSL="false" - -### The logging level for PostgreSQL operations (e.g., 'debug', 'info'). Default: 'log,info,warn,error' -POSTGRES_LOGGING="log,info,warn,error" - -### The RPC URL for the Sepolia network. -RPC_URL_SEPOLIA= - -### The RPC URL for the Polygon network. -RPC_URL_POLYGON= - -### The RPC URL for the Polygon Amoy network. -RPC_URL_POLYGON_AMOY= - -### The RPC URL for the BSC Mainnet network. -RPC_URL_BSC_MAINNET= - -### The RPC URL for the BSC Testnet network. -RPC_URL_BSC_TESTNET= - -### The RPC URL for the Localhost network. -RPC_URL_LOCALHOST= - -### Indicates whether PGP encryption should be used. Default: false -PGP_ENCRYPT="false" - -### The private key used for PGP encryption or decryption. -PGP_PRIVATE_KEY= - -### The passphrase associated with the PGP private key. -PGP_PASSPHRASE= - -### The endpoint URL for connecting to the S3 service. Default: '127.0.0.1' -S3_ENDPOINT="127.0.0.1" - -### The port number for connecting to the S3 service. Default: 9000 -S3_PORT="9000" - -### The access key ID used to authenticate requests to the S3 service. Required -S3_ACCESS_KEY= - -### The secret access key used to authenticate requests to the S3 service. Required -S3_SECRET_KEY= - -### The name of the S3 bucket where files will be stored. Default: 'launcher' -S3_BUCKET="launcher" - -### Indicates whether to use SSL (HTTPS) for connections to the S3 service. Default: false -S3_USE_SSL="false" - -### The API key used for authenticating requests to the SendGrid API. Required -SENDGRID_API_KEY= - -### The email address that will be used as the sender's address in emails sent via SendGrid. Default: 'job-launcher@hmt.ai' -SENDGRID_FROM_EMAIL="job-launcher@hmt.ai" - -### The name that will be used as the sender's name in emails sent via SendGrid. Default: 'Human Protocol Job Launcher' -SENDGRID_FROM_NAME="Human Protocol Job Launcher" - -### The environment in which the server is running (e.g., 'development', 'production'). Default: 'development' -NODE_ENV="development" - -### The hostname or IP address on which the server will run. Default: 'localhost' -HOST="localhost" - -### The port number on which the server will listen for incoming connections. Default: 5000 -PORT="5000" - -### The URL of the frontend application that the server will communicate with. Default: 'http://localhost:3005' -FE_URL="http://localhost:3005" - -### The maximum number of retry attempts for certain operations. Default: 5 -MAX_RETRY_COUNT="5" - -### The minimum transaction fee in USD. Default: 0.01 -MINIMUM_FEE_USD="0.01" - -### The time (in seconds) for which rate information will be cached. Default: 30 -RATE_CACHE_TIME="30" - -### The API key for accessing CoinGecko data. -COINGECKO_API_KEY= - -### The amount to charge abusive users. -ABUSE_AMOUNT= - -### The secret key used for authenticating requests to the Stripe API. Required -STRIPE_SECRET_KEY= - -### The version of the Stripe API to use for requests. Default: '2022-11-15' -STRIPE_API_VERSION="2022-11-15" - -### The name of the application interacting with the Stripe API. Default: 'Fortune' -STRIPE_APP_NAME="Fortune" - -### The version of the application interacting with the Stripe API. Default: '0.0.1' -STRIPE_APP_VERSION="0.0.1" - -### The URL of the application's information page. Default: 'https://hmt.ai' -STRIPE_APP_INFO_URL="https://hmt.ai" - -### The environment in which the Web3 application is running. Default: 'testnet' -WEB3_ENV="testnet" - -### The private key used for signing transactions. Required -WEB3_PRIVATE_KEY= - -### Multiplier for gas price adjustments. Default: 1 -GAS_PRICE_MULTIPLIER="1" - -### Address of the reputation oracle contract. Required -REPUTATION_ORACLE_ADDRESS= - -### List of reputation oracle addresses, typically comma-separated. Required -REPUTATION_ORACLES= - -### Address of the CVAT exchange oracle contract. Required -CVAT_EXCHANGE_ORACLE_ADDRESS= - -### Address of the CVAT recording oracle contract. Required -CVAT_RECORDING_ORACLE_ADDRESS= - -### Address of the Audino exchange oracle contract. Required -AUDINO_EXCHANGE_ORACLE_ADDRESS= - -### Address of the Audino recording oracle contract. Required -AUDINO_RECORDING_ORACLE_ADDRESS= - -### Address of the hCaptcha oracle contract. Required -HCAPTCHA_ORACLE_ADDRESS= - -### URI for the hCaptcha recording oracle service. Required -HCAPTCHA_RECORDING_ORACLE_URI= - -### URI for the hCaptcha reputation oracle service. Required -HCAPTCHA_REPUTATION_ORACLE_URI= - diff --git a/scripts/cvat/docker-compose.local.yml b/scripts/cvat/docker-compose.local.yml index 81b8d00709..d3f33bf4dc 100644 --- a/scripts/cvat/docker-compose.local.yml +++ b/scripts/cvat/docker-compose.local.yml @@ -237,7 +237,7 @@ services: ports: - name: server_port target: *backend_apps_internal_port - published: ${REPUTATION_ORACLE_PORT:-5001} + published: ${REPUTATION_ORACLE_EXPOSED_PORT:?} env_file: ./.env.reputation-oracle.local environment: <<: [*nodejs_app_vars, *nodejs_app_postgres_vars, *nodejs_app_s3_vars] @@ -248,7 +248,7 @@ services: HUMAN_APP_SECRET_KEY: *human_app_secret_key # It is accessed by user, not from container # so put here exposed port, not internal - FE_URL: http://localhost:${HUMAN_APP_CLIENT_PORT:?} + FE_URL: http://localhost:${HUMAN_APP_CLIENT_EXPOSED_PORT:?} JWT_PUBLIC_KEY: *reputation_oracle_jwt_public_key human-app-server: @@ -271,7 +271,7 @@ services: ports: - name: server_port target: *backend_apps_internal_port - published: ${HUMAN_APP_SERVER_PORT:-5002} + published: ${HUMAN_APP_SERVER_EXPOSED_PORT:?} env_file: ./.env.human-app-server.local environment: <<: [*nodejs_app_vars, *redis_app_vars] @@ -336,7 +336,7 @@ services: ports: - name: server_port target: *backend_apps_internal_port - published: ${EXCHANGE_ORACLE_PORT:-5003} + published: ${EXCHANGE_ORACLE_EXPOSED_PORT:?} env_file: ./.env.exchange-oracle.local environment: HOST: *all_interfaces_ip @@ -383,7 +383,7 @@ services: ports: - name: server_port target: *backend_apps_internal_port - published: ${RECORDING_ORACLE_PORT:-5004} + published: ${RECORDING_ORACLE_EXPOSED_PORT:?} env_file: ./.env.recording-oracle.local environment: HOST: *all_interfaces_ip @@ -432,7 +432,7 @@ services: ports: - name: server_port target: *backend_apps_internal_port - published: ${JOB_LAUNCHER_PORT:-5005} + published: ${JOB_LAUNCHER_EXPOSED_PORT:?} env_file: ./.env.job-launcher.local environment: <<: [*nodejs_app_vars, *nodejs_app_postgres_vars, *nodejs_app_s3_vars] @@ -444,7 +444,7 @@ services: REPUTATION_ORACLE_ADDRESS: *reputation_oracle_address CVAT_EXCHANGE_ORACLE_ADDRESS: *exchange_oracle_address CVAT_RECORDING_ORACLE_ADDRESS: *recording_oracle_address - FE_URL: http://localhost:${JOB_LAUNCHER_CLIENT_PORT:?} + FE_URL: http://localhost:${JOB_LAUNCHER_CLIENT_EXPOSED_PORT:?} job-launcher-client: container_name: job-launcher-client @@ -466,7 +466,7 @@ services: ports: - name: server_port target: *frontend_default_port - published: ${JOB_LAUNCHER_CLIENT_PORT:?} + published: ${JOB_LAUNCHER_CLIENT_EXPOSED_PORT:?} environment: PORT: *frontend_default_port diff --git a/scripts/cvat/env-files/.env.compose b/scripts/cvat/env-files/.env.compose index 809a1245bd..2e41bb225a 100644 --- a/scripts/cvat/env-files/.env.compose +++ b/scripts/cvat/env-files/.env.compose @@ -1,9 +1,15 @@ MINIO_PORT=9000 BACKEND_APPS_INTERNAL_PORT=5000 + REPUTATION_ORACLE_EXPOSED_PORT=5001 -HUMAN_APP_CLIENT_PORT=3001 -JOB_LAUNCHER_CLIENT_PORT=3002 +HUMAN_APP_SERVER_EXPOSED_PORT=5002 +JOB_LAUNCHER_EXPOSED_PORT=5003 +EXCHANGE_ORACLE_EXPOSED_PORT=5004 +RECORDING_ORACLE_EXPOSED_PORT=5005 + +HUMAN_APP_CLIENT_EXPOSED_PORT=3001 +JOB_LAUNCHER_CLIENT_EXPOSED_PORT=3002 HUMAN_APP_SECRET_KEY=sk_local_3Hc0kWL9Y8iwyHucW636Cl7tfFZI0rAUljPEbbfDrok REPUTATION_ORACLE_JWT_PUBLIC_KEY="-----BEGIN PUBLIC KEY----- diff --git a/scripts/cvat/env-files/.env.job-launcher b/scripts/cvat/env-files/.env.job-launcher index 9ec113276b..2e620b8d5a 100644 --- a/scripts/cvat/env-files/.env.job-launcher +++ b/scripts/cvat/env-files/.env.job-launcher @@ -4,42 +4,39 @@ POSTGRES_DATABASE=job-launcher # Web3 WEB3_PRIVATE_KEY=replace_me -GAS_PRICE_MULTIPLIER=1 - # Encryption PGP_ENCRYPT=true PGP_PRIVATE_KEY="-----BEGIN PGP PRIVATE KEY BLOCK----- -xYYEZ4+y/xYJKwYBBAHaRw8BAQdAlIkUUttKB25Zf/g3lf26lU15V4PcS6eM -YiqfFUeyZGn+CQMIW8oNkxnBpSfgI4VBMN4ZamblXNYjg3u6HdSvuPrSjryR -zEVPcE/QPTE+sljRLve2E4MEcGcs9c/JWxmD0Dlq7gpbctghQKkEbViwsj36 -L80lSm9iIExhdW5jaGVyIDxqb2ItbGF1bmNoZXJAbG9jYWwuYXBwPsKMBBAW -CgA+BYJnj7L/BAsJBwgJkFvOlfsfiS2NAxUICgQWAAIBAhkBApsDAh4BFiEE -nhDZweAQiTFNFnMEW86V+x+JLY0AAFrrAQDUTb30NvyMX1rvIAUdX7OnEQFu -u+IkL52ZcvH0lJBHsAEA+iDL/03LCLIDK1g1l2mBZNUudEqncB0i0rAifeli -hwLHiwRnj7L/EgorBgEEAZdVAQUBAQdASe/9TcJE/EnMLYE2K0o/ROxsRDi8 -cRtPEKSNVNLeCB4DAQgH/gkDCHtTPVsCMa9X4H1NkDo5Ijnyp74a2ZklE5l6 -coHvKRndTyT/UwxRPUo38pq3mI5U/bRCvrwFD6ehWWhlsfjm/D0Xsjj7J6jF -uKxZgW+CGwfCeAQYFgoAKgWCZ4+y/wmQW86V+x+JLY0CmwwWIQSeENnB4BCJ -MU0WcwRbzpX7H4ktjQAAZqoBAJ5Llw1V+5i9w9bOTS2NlQDSqtQAClCECEhD -z9cFhU1RAQCBG62i7Cjsy+4RXxubBqVhNWCk02JhSn+vDAYT/TeqBA== -=B2Ed +lIYEZ4+zchYJKwYBBAHaRw8BAQdA1ql3NCl4pZANEvM3jaxoHLeh5t0PM237WLkG +hCoxjK7+BwMCBJL1H5pd3HT/JxeY7rqJs8sfBOfMbbAxRds/uLdMgGcVzjpj7htU +yzg7PHhWESAgycZmk9QpjgEQYlHl7KbZNNidG1zdCKX9GDce6W5PB7QlSm9iIExh +dW5jaGVyIDxqb2ItbGF1bmNoZXJAbG9jYWwuYXBwPoiTBBMWCgA7FiEEUlUidK34 +MNfYCc0xkWfqgp0A/m4FAmePs3ICGwMFCwkIBwICIgIGFQoJCAsCBBYCAwECHgcC +F4AACgkQkWfqgp0A/m7q3wD/V7G/uxy7LZOX9aW2uPcYfRInVDcyElwJza0Pcken +9qEBAJF0XBJJHkOVOyfmPv5nqAJ3DI6kRiHml+Ri3VjQp24OnIsEZ4+zchIKKwYB +BAGXVQEFAQEHQAGE7HHBGkVnFFPHpXdC/2uY+DC1vMkqTy8fzY0k2jQhAwEIB/4H +AwKFPSSA1sF9iP+Aepg/tiJFDyGqJsSKFlvj07zHjSKxeIOGcuC1llJCju70AcR5 +cQ3itvWUrDIpwI3GnHTy5k183GIIt2cRhLRnLUqIWXLliHgEGBYKACAWIQRSVSJ0 +rfgw19gJzTGRZ+qCnQD+bgUCZ4+zcgIbDAAKCRCRZ+qCnQD+bsXqAP0duGYm6z58 +mBdnv9k5Ed2wEw5hFnjcKXEQBFcMORVgdgD/RssEZjY0Vli5ofBezTOvURLAZRY2 +FryLSAroIMtuIAk= +=of7b -----END PGP PRIVATE KEY BLOCK-----" -PGP_PASSPHRASE=job-launcher-pgp-password +PGP_PASSPHRASE=ixS5G0GE8Eh!fn # Put it here just to easily set up KV later PGP_PUBLIC_KEY="-----BEGIN PGP PUBLIC KEY BLOCK----- -xjMEZ4+y/xYJKwYBBAHaRw8BAQdAlIkUUttKB25Zf/g3lf26lU15V4PcS6eM -YiqfFUeyZGnNJUpvYiBMYXVuY2hlciA8am9iLWxhdW5jaGVyQGxvY2FsLmFw -cD7CjAQQFgoAPgWCZ4+y/wQLCQcICZBbzpX7H4ktjQMVCAoEFgACAQIZAQKb -AwIeARYhBJ4Q2cHgEIkxTRZzBFvOlfsfiS2NAABa6wEA1E299Db8jF9a7yAF -HV+zpxEBbrviJC+dmXLx9JSQR7ABAPogy/9NywiyAytYNZdpgWTVLnRKp3Ad -ItKwIn3pYocCzjgEZ4+y/xIKKwYBBAGXVQEFAQEHQEnv/U3CRPxJzC2BNitK -P0TsbEQ4vHEbTxCkjVTS3ggeAwEIB8J4BBgWCgAqBYJnj7L/CZBbzpX7H4kt -jQKbDBYhBJ4Q2cHgEIkxTRZzBFvOlfsfiS2NAABmqgEAnkuXDVX7mL3D1s5N -LY2VANKq1AAKUIQISEPP1wWFTVEBAIEbraLsKOzL7hFfG5sGpWE1YKTTYmFK -f68MBhP9N6oE -=dNxu +mDMEZ4+zchYJKwYBBAHaRw8BAQdA1ql3NCl4pZANEvM3jaxoHLeh5t0PM237WLkG +hCoxjK60JUpvYiBMYXVuY2hlciA8am9iLWxhdW5jaGVyQGxvY2FsLmFwcD6IkwQT +FgoAOxYhBFJVInSt+DDX2AnNMZFn6oKdAP5uBQJnj7NyAhsDBQsJCAcCAiICBhUK +CQgLAgQWAgMBAh4HAheAAAoJEJFn6oKdAP5u6t8A/1exv7scuy2Tl/Wltrj3GH0S +J1Q3MhJcCc2tD3JHp/ahAQCRdFwSSR5DlTsn5j7+Z6gCdwyOpEYh5pfkYt1Y0Kdu +Drg4BGePs3ISCisGAQQBl1UBBQEBB0ABhOxxwRpFZxRTx6V3Qv9rmPgwtbzJKk8v +H82NJNo0IQMBCAeIeAQYFgoAIBYhBFJVInSt+DDX2AnNMZFn6oKdAP5uBQJnj7Ny +AhsMAAoJEJFn6oKdAP5uxeoA/R24ZibrPnyYF2e/2TkR3bATDmEWeNwpcRAEVww5 +FWB2AP9GywRmNjRWWLmh8F7NM69REsBlFjYWvItICuggy24gCQ== +=d9DF -----END PGP PUBLIC KEY BLOCK-----" HCAPTCHA_RECORDING_ORACLE_URI=disabled From 93aeb1b5af6f9d37a889056931cfbc32acc8ef42 Mon Sep 17 00:00:00 2001 From: Dmitry Nechay Date: Fri, 16 May 2025 22:19:32 +0300 Subject: [PATCH 05/29] refactor: rename docker cvat vars --- .gitignore | 3 ++- scripts/cvat/docker-compose.local.yml | 18 +++++++++--------- scripts/cvat/env-files/.env.compose | 4 ++-- 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/.gitignore b/.gitignore index 2428824dcc..ff75977ec2 100644 --- a/.gitignore +++ b/.gitignore @@ -51,4 +51,5 @@ hardhat-dependency-compiler cache #docker databases -docker-db \ No newline at end of file +docker-db +graph-node-db \ No newline at end of file diff --git a/scripts/cvat/docker-compose.local.yml b/scripts/cvat/docker-compose.local.yml index d3f33bf4dc..31f3d75a5b 100644 --- a/scripts/cvat/docker-compose.local.yml +++ b/scripts/cvat/docker-compose.local.yml @@ -43,8 +43,8 @@ x-general-env-variables: bucket_name_rec_o: &bucket_name_rec_o ${BUCKET_NAME_RECORDING_ORACLE:-recording-oracle} # WEB3 ADDRESSES reputation_oracle_address: &reputation_oracle_address ${REPUTATION_ORACLE_ADDRESS:?} - exchange_oracle_address: &exchange_oracle_address ${EXCHANGE_ORACLE_ADDRESS:?} - recording_oracle_address: &recording_oracle_address ${RECORDING_ORACLE_ADDRESS:?} + cvat_exchange_oracle_address: &cvat_exchange_oracle_address ${CVAT_EXCHANGE_ORACLE_ADDRESS:?} + cvat_recording_oracle_address: &cvat_recording_oracle_address ${CVAT_RECORDING_ORACLE_ADDRESS:?} # OTHER backend_apps_internal_port: &backend_apps_internal_port ${BACKEND_APPS_INTERNAL_PORT:?} human_app_secret_key: &human_app_secret_key ${HUMAN_APP_SECRET_KEY:?} @@ -303,7 +303,7 @@ services: ports: - name: server_port target: *frontend_default_port - published: ${HUMAN_APP_CLIENT_PORT:?} + published: ${HUMAN_APP_CLIENT_EXPOSED_PORT:?} environment: PORT: *frontend_default_port @@ -350,13 +350,13 @@ services: REDIS_DB: 2 PG_DB: exchange-oracle POLYGON_AMOY_RPC_API_URL: *rpc_url_polygon_amoy - POLYGON_AMOY_ADDR: *exchange_oracle_address + POLYGON_AMOY_ADDR: *cvat_exchange_oracle_address STORAGE_BUCKET_NAME: *bucket_name_exc_o HUMAN_APP_JWT_KEY: *reputation_oracle_jwt_public_key CVAT_INCOMING_WEBHOOKS_URL: "http://exchange-oracle.app:${BACKEND_APPS_INTERNAL_PORT:?}/cvat-webhook" LOCALHOST_RECORDING_ORACLE_URL: "http://recording-oracle:${BACKEND_APPS_INTERNAL_PORT:?}/webhook" LOCALHOST_JOB_LAUNCHER_URL: "http://job-launcher:${BACKEND_APPS_INTERNAL_PORT:?}/webhook" - LOCALHOST_RECORDING_ORACLE_ADDRESS: *recording_oracle_address + LOCALHOST_RECORDING_ORACLE_ADDRESS: *cvat_recording_oracle_address recording-oracle: container_name: recording-oracle-cvat @@ -395,7 +395,7 @@ services: ] PG_DB: recording-oracle POLYGON_AMOY_RPC_API_URL: *rpc_url_polygon_amoy - POLYGON_AMOY_ADDR: *recording_oracle_address + POLYGON_AMOY_ADDR: *cvat_recording_oracle_address STORAGE_RESULTS_BUCKET_NAME: *bucket_name_rec_o STORAGE_USE_PATH_STYLE: "true" EXCHANGE_ORACLE_STORAGE_PROVIDER: *cvat_oracle_storage_provider @@ -406,7 +406,7 @@ services: EXCHANGE_ORACLE_STORAGE_USE_SSL: 'false' LOCALHOST_EXCHANGE_ORACLE_URL: "http://exchange-oracle:${BACKEND_APPS_INTERNAL_PORT:?}/webhook" LOCALHOST_REPUTATION_ORACLE_URL: "http://reputation-oracle:${BACKEND_APPS_INTERNAL_PORT:?}/webhook" - LOCALHOST_EXCHANGE_ORACLE_ADDRESS: *exchange_oracle_address + LOCALHOST_EXCHANGE_ORACLE_ADDRESS: *cvat_exchange_oracle_address job-launcher: container_name: job-launcher @@ -442,8 +442,8 @@ services: S3_BUCKET: *bucket_name_manifests REPUTATION_ORACLES: *reputation_oracle_address REPUTATION_ORACLE_ADDRESS: *reputation_oracle_address - CVAT_EXCHANGE_ORACLE_ADDRESS: *exchange_oracle_address - CVAT_RECORDING_ORACLE_ADDRESS: *recording_oracle_address + CVAT_EXCHANGE_ORACLE_ADDRESS: *cvat_exchange_oracle_address + CVAT_RECORDING_ORACLE_ADDRESS: *cvat_recording_oracle_address FE_URL: http://localhost:${JOB_LAUNCHER_CLIENT_EXPOSED_PORT:?} job-launcher-client: diff --git a/scripts/cvat/env-files/.env.compose b/scripts/cvat/env-files/.env.compose index 2e41bb225a..9d6bcb2891 100644 --- a/scripts/cvat/env-files/.env.compose +++ b/scripts/cvat/env-files/.env.compose @@ -20,8 +20,8 @@ K+XryPXhU57nKuhZXBPRrQ+lMDeFpYpHWpGqA/K576n+rDvjbBgHfQiHKg== RPC_URL_POLYGON_AMOY=https://rpc-amoy.polygon.technology # Oracle addresses REPUTATION_ORACLE_ADDRESS=replace_me -EXCHANGE_ORACLE_ADDRESS=replace_me -RECORDING_ORACLE_ADDRESS=replace_me +CVAT_EXCHANGE_ORACLE_ADDRESS=replace_me +CVAT_RECORDING_ORACLE_ADDRESS=replace_me # Might be empty SUBGRAPH_API_KEY= From 1eb5f43297324836557fb0c708346520f57b6ede Mon Sep 17 00:00:00 2001 From: Dmitry Nechay Date: Fri, 16 May 2025 22:31:35 +0300 Subject: [PATCH 06/29] refactor: jl client local setup --- .../apps/job-launcher/client/.env.example | 32 ++++++++----------- .../apps/job-launcher/client/package.json | 2 +- .../apps/job-launcher/client/vite.config.ts | 2 +- .../cvat/env-files/.env.job-launcher-client | 14 +++++--- 4 files changed, 24 insertions(+), 26 deletions(-) diff --git a/packages/apps/job-launcher/client/.env.example b/packages/apps/job-launcher/client/.env.example index 7e3f7a2bb5..575d6bc774 100644 --- a/packages/apps/job-launcher/client/.env.example +++ b/packages/apps/job-launcher/client/.env.example @@ -1,20 +1,14 @@ -VITE_APP_JOB_LAUNCHER_SERVER_URL= -VITE_APP_WALLETCONNECT_PROJECT_ID= -VITE_APP_STRIPE_PUBLISHABLE_KEY= -VITE_APP_HCAPTCHA_SITE_KEY= -VITE_APP_ENVIRONMENT= -VITE_APP_SUPPORTED_CHAINS= +# General +VITE_APP_JOB_LAUNCHER_SERVER_URL=http://0.0.0.0:5003 +VITE_APP_WALLETCONNECT_PROJECT_ID=replace_me -# RPC URLS -VITE_APP_RPC_URL_MAINNET="" -VITE_APP_RPC_URL_SEPOLIA="" -VITE_APP_RPC_URL_BSC_MAINNET="" -VITE_APP_RPC_URL_BSC_TESTNET="" -VITE_APP_RPC_URL_POLYGON="" -VITE_APP_RPC_URL_POLYGON_AMOY="" -VITE_APP_RPC_URL_MOONBEAM="" -VITE_APP_RPC_URL_MOONBASE_ALPHA="" -VITE_APP_RPC_URL_AVALANCHE="" -VITE_APP_RPC_URL_AVALANCHE_TESTNET="" -VITE_APP_RPC_URL_CELO="" -VITE_APP_RPC_URL_CELO_ALFAJORES="" +# Stripe +VITE_APP_STRIPE_PUBLISHABLE_KEY=disabled + +# hCaptcha +VITE_APP_HCAPTCHA_SITE_KEY=10000000-ffff-ffff-ffff-000000000001 + +# Web3 +VITE_APP_ENVIRONMENT=testnet +VITE_APP_SUPPORTED_CHAINS=80002 +VITE_APP_RPC_URL_POLYGON_AMOY=https://rpc-amoy.polygon.technology diff --git a/packages/apps/job-launcher/client/package.json b/packages/apps/job-launcher/client/package.json index 8b1b7aac3a..36bbddc8c3 100644 --- a/packages/apps/job-launcher/client/package.json +++ b/packages/apps/job-launcher/client/package.json @@ -44,7 +44,7 @@ "scripts": { "clean": "rm -rf dist", "lint": "eslint \"**/*.{ts,tsx}\"", - "start": "vite --port 3005", + "start": "vite", "build": "vite build", "preview": "vite preview", "start:prod": "serve -s dist", diff --git a/packages/apps/job-launcher/client/vite.config.ts b/packages/apps/job-launcher/client/vite.config.ts index a84bcaaa6b..07ac3961c7 100644 --- a/packages/apps/job-launcher/client/vite.config.ts +++ b/packages/apps/job-launcher/client/vite.config.ts @@ -38,6 +38,6 @@ export default defineConfig({ }, }, server: { - port: 3005, + port: 3002, }, }); diff --git a/scripts/cvat/env-files/.env.job-launcher-client b/scripts/cvat/env-files/.env.job-launcher-client index aaa46b98bf..575d6bc774 100644 --- a/scripts/cvat/env-files/.env.job-launcher-client +++ b/scripts/cvat/env-files/.env.job-launcher-client @@ -1,10 +1,14 @@ -VITE_APP_JOB_LAUNCHER_SERVER_URL=http://localhost:5005 -# Reown project id +# General +VITE_APP_JOB_LAUNCHER_SERVER_URL=http://0.0.0.0:5003 VITE_APP_WALLETCONNECT_PROJECT_ID=replace_me + +# Stripe VITE_APP_STRIPE_PUBLISHABLE_KEY=disabled + +# hCaptcha VITE_APP_HCAPTCHA_SITE_KEY=10000000-ffff-ffff-ffff-000000000001 -VITE_APP_HCAPTCHA_EXCHANGE_URL=disabled -VITE_APP_HCAPTCHA_LABELING_BASE_URL=disabled + +# Web3 VITE_APP_ENVIRONMENT=testnet -VITE_APP_RPC_URL_POLYGON_AMOY=https://rpc-amoy.polygon.technology VITE_APP_SUPPORTED_CHAINS=80002 +VITE_APP_RPC_URL_POLYGON_AMOY=https://rpc-amoy.polygon.technology From 874e911bcb81c62dcfa180b9f8a6c3acc64aedda Mon Sep 17 00:00:00 2001 From: Dmitry Nechay Date: Fri, 16 May 2025 22:52:04 +0300 Subject: [PATCH 07/29] refactor: improve dashboard setup --- packages/apps/dashboard/client/.env.example | 46 ++++++++-------- packages/apps/dashboard/server/.env.example | 52 ++++++++----------- .../apps/dashboard/server/docker-compose.yml | 10 ---- packages/apps/human-app/frontend/package.json | 2 +- 4 files changed, 49 insertions(+), 61 deletions(-) delete mode 100644 packages/apps/dashboard/server/docker-compose.yml diff --git a/packages/apps/dashboard/client/.env.example b/packages/apps/dashboard/client/.env.example index 62ebf481d3..7308b99ba5 100644 --- a/packages/apps/dashboard/client/.env.example +++ b/packages/apps/dashboard/client/.env.example @@ -1,22 +1,26 @@ -# link to api -VITE_API_URL= -# links to navbar items -VITE_NAVBAR_LINK_GITBOOK= -VITE_NAVBAR_LINK_FAUCETS= -VITE_NAVBAR_LINK_HUMAN_WEBSITE= -VITE_NAVBAR_LINK_LAUNCH_JOBS= -VITE_NAVBAR_LINK_WORK_AND_EARN= -# link to button on 'Role details' page -VITE_HUMANPROTOCOL_CORE_ARCHITECTURE= -# links to footer socials -VITE_FOOTER_LINK_GITHUB= -VITE_FOOTER_LINK_DISCORD= -VITE_FOOTER_LINK_X= -VITE_FOOTER_LINK_TELEGRAM= -VITE_FOOTER_LINK_LINKEDIN= -# other footer links -VITE_FOOTER_LINK_TERMS_OF_SERVICE= -VITE_FOOTER_LINK_PRIVACY_POLICY= -VITE_FOOTER_LINK_HUMAN_PROTOCOL= +# General +VITE_API_URL=http://0.0.0.0:5006 +VITE_ENABLED_CHAIN_IDS=97,80002,11155111 + +# Links to navbar items +VITE_NAVBAR_LINK_GITBOOK=https://docs.humanprotocol.org/ +VITE_NAVBAR_LINK_FAUCETS=https://faucet.humanprotocol.org +VITE_NAVBAR_LINK_HUMAN_WEBSITE=https://humanprotocol.org/ +VITE_NAVBAR_LINK_LAUNCH_JOBS=https://job-launcher.humanprotocol.org/ +VITE_NAVBAR_LINK_WORK_AND_EARN=https://app.humanprotocol.org/ + +# Link to button on 'Role details' page +VITE_HUMANPROTOCOL_CORE_ARCHITECTURE=https://docs.humanprotocol.org/hub/human-tech-docs/architecture + +# Links to footer socials +VITE_FOOTER_LINK_GITHUB=https://github.com/humanprotocol/human-protocol +VITE_FOOTER_LINK_DISCORD=https://discord.com/invite/5sHfvE8y8p +VITE_FOOTER_LINK_X=https://x.com/intent/follow?screen_name=human_protocol +VITE_FOOTER_LINK_TELEGRAM=https://t.me/human_protocol_community +VITE_FOOTER_LINK_LINKEDIN=https://www.linkedin.com/company/human-protocol + +# Other footer links +VITE_FOOTER_LINK_TERMS_OF_SERVICE=https://humanprotocol.org/privacy-policy +VITE_FOOTER_LINK_PRIVACY_POLICY=https://humanprotocol.org/privacy-policy +VITE_FOOTER_LINK_HUMAN_PROTOCOL=https://humanprotocol.org/ -VITE_ENABLED_CHAIN_IDS= diff --git a/packages/apps/dashboard/server/.env.example b/packages/apps/dashboard/server/.env.example index f3ac7f4f39..4d02bcd63d 100644 --- a/packages/apps/dashboard/server/.env.example +++ b/packages/apps/dashboard/server/.env.example @@ -1,36 +1,30 @@ # App -NODE_ENV=development -HOST=localhost -PORT=3000 -CORS_ENABLED= -CORS_ALLOWED_ORIGIN= -CORS_ALLOWED_HEADERS= -SUBGRAPH_API_KEY= -HMT_PRICE_SOURCE= -HMT_PRICE_SOURCE_API_KEY= -HMT_PRICE_FROM= -HMT_PRICE_TO= -HCAPTCHA_API_KEY= -HCAPTCHA_STATS_ENABLED= -NETWORK_USAGE_FILTER_MONTHS= -NETWORKS_OPERATING_CACHE_TTL= +HOST=0.0.0.0 +PORT=5006 +CORS_ENABLED=true +CORS_ALLOWED_ORIGIN=* + +# API keys +HMT_PRICE_SOURCE_API_KEY=replace_me +HCAPTCHA_API_KEY=replace_me # Redis -REDIS_HOST=localhost -REDIS_PORT=6379 -CACHE_HMT_PRICE_TTL=60 -CACHE_HMT_GENERAL_STATS_TTL=120 -HMT_PRICE_CACHE_KEY= -REPUTATION_SOURCE_URL= +REDIS_HOST=0.0.0.0 +REDIS_PORT=6380 # S3 -S3_ENDPOINT= -S3_PORT= -S3_ACCESS_KEY= -S3_SECRET_KEY= -S3_USE_SSL= -S3_BUCKET= +S3_ENDPOINT=0.0.0.0 +S3_PORT=9000 +S3_ACCESS_KEY=human-oracle +S3_SECRET_KEY=human-oracle-s3-secret +S3_BUCKET=dashboard-hcaptcha-historical-stats +S3_USE_SSL=false #Web3 -WEB3_ENV= -RPC_URL_POLYGON= +WEB3_ENV=testnet +RPC_URL_POLYGON=https://rpc-amoy.polygon.technology +RPC_URL_BSC_TESTNET=https://bsc-testnet.drpc.org +RPC_URL_SEPOLIA=https://rpc.sepolia.org + +# Reputation Oracle URL +REPUTATION_SOURCE_URL=http://0.0.0.0:5001 diff --git a/packages/apps/dashboard/server/docker-compose.yml b/packages/apps/dashboard/server/docker-compose.yml deleted file mode 100644 index 6258fe800c..0000000000 --- a/packages/apps/dashboard/server/docker-compose.yml +++ /dev/null @@ -1,10 +0,0 @@ -name: 'dashboard-server' - -services: - redis: - image: redis:latest - container_name: dashboard-cache - ports: - - '6379:6379' - volumes: - - ./redis_data:/data \ No newline at end of file diff --git a/packages/apps/human-app/frontend/package.json b/packages/apps/human-app/frontend/package.json index 108b24b0e6..42c9c07bd5 100644 --- a/packages/apps/human-app/frontend/package.json +++ b/packages/apps/human-app/frontend/package.json @@ -4,7 +4,7 @@ "version": "1.0.0", "scripts": { "clean": "tsc --build --clean && rm -rf dist", - "dev": "vite", + "start": "vite", "build": "tsc --build && vite build", "start:prod": "serve -s dist", "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", From a0b8469415a8a1f270a4784bd8f003ee0f69d7a6 Mon Sep 17 00:00:00 2001 From: Dmitry Nechay Date: Fri, 16 May 2025 22:57:27 +0300 Subject: [PATCH 08/29] refactor: improve staking --- packages/apps/dashboard/client/vite.config.ts | 2 +- packages/apps/staking/.env.example | 30 +++++++++++-------- packages/apps/staking/package.json | 2 +- packages/apps/staking/vite.config.ts | 2 +- 4 files changed, 20 insertions(+), 16 deletions(-) diff --git a/packages/apps/dashboard/client/vite.config.ts b/packages/apps/dashboard/client/vite.config.ts index accd21e3a9..1b09be19f5 100644 --- a/packages/apps/dashboard/client/vite.config.ts +++ b/packages/apps/dashboard/client/vite.config.ts @@ -36,6 +36,6 @@ export default defineConfig({ }, }, server: { - port: 3001, + port: 3003, }, }); diff --git a/packages/apps/staking/.env.example b/packages/apps/staking/.env.example index 611f637438..133e06660d 100644 --- a/packages/apps/staking/.env.example +++ b/packages/apps/staking/.env.example @@ -1,15 +1,19 @@ -VITE_APP_DASHBOARD_API_URL= +# General +VITE_APP_DASHBOARD_API_URL=http://0.0.0.0:5006 VITE_APP_ENVIRONMENT=testnet VITE_APP_SUPPORTED_CHAINS=80002 -# links to header -VITE_HEADER_LINK_DASHBOARD= -# links to footer socials -VITE_FOOTER_LINK_GITHUB= -VITE_FOOTER_LINK_DISCORD= -VITE_FOOTER_LINK_X= -VITE_FOOTER_LINK_TELEGRAM= -VITE_FOOTER_LINK_LINKEDIN= -# other footer links -VITE_FOOTER_LINK_TERMS_OF_SERVICE= -VITE_FOOTER_LINK_PRIVACY_POLICY= -VITE_FOOTER_LINK_HUMAN_PROTOCOL= \ No newline at end of file + +# Links to header +VITE_HEADER_LINK_DASHBOARD=http://localhost:3003 + +# Links to footer socials +VITE_FOOTER_LINK_GITHUB=https://github.com/humanprotocol/human-protocol +VITE_FOOTER_LINK_DISCORD=https://discord.com/invite/5sHfvE8y8p +VITE_FOOTER_LINK_X=https://x.com/intent/follow?screen_name=human_protocol +VITE_FOOTER_LINK_TELEGRAM=https://t.me/human_protocol_community +VITE_FOOTER_LINK_LINKEDIN=https://www.linkedin.com/company/human-protocol + +# Other footer links +VITE_FOOTER_LINK_TERMS_OF_SERVICE=https://humanprotocol.org/privacy-policy +VITE_FOOTER_LINK_PRIVACY_POLICY=https://humanprotocol.org/privacy-policy +VITE_FOOTER_LINK_HUMAN_PROTOCOL=https://humanprotocol.org/ \ No newline at end of file diff --git a/packages/apps/staking/package.json b/packages/apps/staking/package.json index 71a7588241..f5336e073d 100644 --- a/packages/apps/staking/package.json +++ b/packages/apps/staking/package.json @@ -6,7 +6,7 @@ "scripts": { "clean": "rm -rf dist", "lint": "eslint \"**/*.{ts,tsx}\"", - "start": "vite --port 3006", + "start": "vite", "build": "vite build", "preview": "vite preview", "start:prod": "serve -s dist", diff --git a/packages/apps/staking/vite.config.ts b/packages/apps/staking/vite.config.ts index 546d38f7fe..4b39891a43 100644 --- a/packages/apps/staking/vite.config.ts +++ b/packages/apps/staking/vite.config.ts @@ -33,6 +33,6 @@ export default defineConfig({ }, }, server: { - port: 3006, + port: 3004, }, }); From 42ad4434d7a48071b016ad5a49efa2c1d3060baa Mon Sep 17 00:00:00 2001 From: Dmitry Nechay Date: Mon, 19 May 2025 13:04:49 +0300 Subject: [PATCH 09/29] refactor: rename cvat services in docker --- scripts/cvat/docker-compose.local.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/cvat/docker-compose.local.yml b/scripts/cvat/docker-compose.local.yml index 31f3d75a5b..53b00c2926 100644 --- a/scripts/cvat/docker-compose.local.yml +++ b/scripts/cvat/docker-compose.local.yml @@ -307,7 +307,7 @@ services: environment: PORT: *frontend_default_port - exchange-oracle: + exchange-oracle-cvat: container_name: exchange-oracle-cvat image: human-protocol/exchange-oracle-cvat pull_policy: build @@ -358,7 +358,7 @@ services: LOCALHOST_JOB_LAUNCHER_URL: "http://job-launcher:${BACKEND_APPS_INTERNAL_PORT:?}/webhook" LOCALHOST_RECORDING_ORACLE_ADDRESS: *cvat_recording_oracle_address - recording-oracle: + recording-oracle-cvat: container_name: recording-oracle-cvat image: human-protocol/recording-oracle-cvat pull_policy: build @@ -404,7 +404,7 @@ services: EXCHANGE_ORACLE_STORAGE_SECRET_KEY: *minio_services_secret_key EXCHANGE_ORACLE_STORAGE_RESULTS_BUCKET_NAME: *bucket_name_exc_o EXCHANGE_ORACLE_STORAGE_USE_SSL: 'false' - LOCALHOST_EXCHANGE_ORACLE_URL: "http://exchange-oracle:${BACKEND_APPS_INTERNAL_PORT:?}/webhook" + LOCALHOST_EXCHANGE_ORACLE_URL: "http://exchange-oracle-cvat:${BACKEND_APPS_INTERNAL_PORT:?}/webhook" LOCALHOST_REPUTATION_ORACLE_URL: "http://reputation-oracle:${BACKEND_APPS_INTERNAL_PORT:?}/webhook" LOCALHOST_EXCHANGE_ORACLE_ADDRESS: *cvat_exchange_oracle_address From a961d6a19257326148c8192862bc0bcbe201c968 Mon Sep 17 00:00:00 2001 From: Dmitry Nechay Date: Mon, 19 May 2025 13:24:55 +0300 Subject: [PATCH 10/29] refactor: rename cvat docker db --- scripts/cvat/docker-compose.local.yml | 4 ++-- scripts/cvat/initdb/create-dbs.sql | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/cvat/docker-compose.local.yml b/scripts/cvat/docker-compose.local.yml index 53b00c2926..c238ba2050 100644 --- a/scripts/cvat/docker-compose.local.yml +++ b/scripts/cvat/docker-compose.local.yml @@ -348,7 +348,7 @@ services: *cvat_connection_vars ] REDIS_DB: 2 - PG_DB: exchange-oracle + PG_DB: exchange-oracle-cvat POLYGON_AMOY_RPC_API_URL: *rpc_url_polygon_amoy POLYGON_AMOY_ADDR: *cvat_exchange_oracle_address STORAGE_BUCKET_NAME: *bucket_name_exc_o @@ -393,7 +393,7 @@ services: *cvat_oracle_storage_connection_vars, *cvat_connection_vars ] - PG_DB: recording-oracle + PG_DB: recording-oracle-cvat POLYGON_AMOY_RPC_API_URL: *rpc_url_polygon_amoy POLYGON_AMOY_ADDR: *cvat_recording_oracle_address STORAGE_RESULTS_BUCKET_NAME: *bucket_name_rec_o diff --git a/scripts/cvat/initdb/create-dbs.sql b/scripts/cvat/initdb/create-dbs.sql index 3b5f93e98e..7f81cc3386 100644 --- a/scripts/cvat/initdb/create-dbs.sql +++ b/scripts/cvat/initdb/create-dbs.sql @@ -1,4 +1,4 @@ CREATE DATABASE "reputation-oracle"; -CREATE DATABASE "exchange-oracle"; -CREATE DATABASE "recording-oracle"; +CREATE DATABASE "exchange-oracle-cvat"; +CREATE DATABASE "recording-oracle-cvat"; CREATE DATABASE "job-launcher"; From 0b911f4424cc86f88889a8703f24bcee2eeb66db Mon Sep 17 00:00:00 2001 From: Dmitry Nechay Date: Mon, 19 May 2025 13:42:34 +0300 Subject: [PATCH 11/29] refactor: cvat to docker setup --- scripts/{cvat => docker-setup}/Makefile | 0 scripts/{cvat => docker-setup}/docker-compose.local.yml | 0 scripts/{cvat => docker-setup}/env-files/.env.compose | 0 scripts/{cvat => docker-setup}/env-files/.env.exchange-oracle | 0 scripts/{cvat => docker-setup}/env-files/.env.human-app-client | 0 scripts/{cvat => docker-setup}/env-files/.env.human-app-server | 0 scripts/{cvat => docker-setup}/env-files/.env.job-launcher | 0 scripts/{cvat => docker-setup}/env-files/.env.job-launcher-client | 0 scripts/{cvat => docker-setup}/env-files/.env.recording-oracle | 0 scripts/{cvat => docker-setup}/env-files/.env.reputation-oracle | 0 scripts/{cvat => docker-setup}/initdb/create-dbs.sql | 0 11 files changed, 0 insertions(+), 0 deletions(-) rename scripts/{cvat => docker-setup}/Makefile (100%) rename scripts/{cvat => docker-setup}/docker-compose.local.yml (100%) rename scripts/{cvat => docker-setup}/env-files/.env.compose (100%) rename scripts/{cvat => docker-setup}/env-files/.env.exchange-oracle (100%) rename scripts/{cvat => docker-setup}/env-files/.env.human-app-client (100%) rename scripts/{cvat => docker-setup}/env-files/.env.human-app-server (100%) rename scripts/{cvat => docker-setup}/env-files/.env.job-launcher (100%) rename scripts/{cvat => docker-setup}/env-files/.env.job-launcher-client (100%) rename scripts/{cvat => docker-setup}/env-files/.env.recording-oracle (100%) rename scripts/{cvat => docker-setup}/env-files/.env.reputation-oracle (100%) rename scripts/{cvat => docker-setup}/initdb/create-dbs.sql (100%) diff --git a/scripts/cvat/Makefile b/scripts/docker-setup/Makefile similarity index 100% rename from scripts/cvat/Makefile rename to scripts/docker-setup/Makefile diff --git a/scripts/cvat/docker-compose.local.yml b/scripts/docker-setup/docker-compose.local.yml similarity index 100% rename from scripts/cvat/docker-compose.local.yml rename to scripts/docker-setup/docker-compose.local.yml diff --git a/scripts/cvat/env-files/.env.compose b/scripts/docker-setup/env-files/.env.compose similarity index 100% rename from scripts/cvat/env-files/.env.compose rename to scripts/docker-setup/env-files/.env.compose diff --git a/scripts/cvat/env-files/.env.exchange-oracle b/scripts/docker-setup/env-files/.env.exchange-oracle similarity index 100% rename from scripts/cvat/env-files/.env.exchange-oracle rename to scripts/docker-setup/env-files/.env.exchange-oracle diff --git a/scripts/cvat/env-files/.env.human-app-client b/scripts/docker-setup/env-files/.env.human-app-client similarity index 100% rename from scripts/cvat/env-files/.env.human-app-client rename to scripts/docker-setup/env-files/.env.human-app-client diff --git a/scripts/cvat/env-files/.env.human-app-server b/scripts/docker-setup/env-files/.env.human-app-server similarity index 100% rename from scripts/cvat/env-files/.env.human-app-server rename to scripts/docker-setup/env-files/.env.human-app-server diff --git a/scripts/cvat/env-files/.env.job-launcher b/scripts/docker-setup/env-files/.env.job-launcher similarity index 100% rename from scripts/cvat/env-files/.env.job-launcher rename to scripts/docker-setup/env-files/.env.job-launcher diff --git a/scripts/cvat/env-files/.env.job-launcher-client b/scripts/docker-setup/env-files/.env.job-launcher-client similarity index 100% rename from scripts/cvat/env-files/.env.job-launcher-client rename to scripts/docker-setup/env-files/.env.job-launcher-client diff --git a/scripts/cvat/env-files/.env.recording-oracle b/scripts/docker-setup/env-files/.env.recording-oracle similarity index 100% rename from scripts/cvat/env-files/.env.recording-oracle rename to scripts/docker-setup/env-files/.env.recording-oracle diff --git a/scripts/cvat/env-files/.env.reputation-oracle b/scripts/docker-setup/env-files/.env.reputation-oracle similarity index 100% rename from scripts/cvat/env-files/.env.reputation-oracle rename to scripts/docker-setup/env-files/.env.reputation-oracle diff --git a/scripts/cvat/initdb/create-dbs.sql b/scripts/docker-setup/initdb/create-dbs.sql similarity index 100% rename from scripts/cvat/initdb/create-dbs.sql rename to scripts/docker-setup/initdb/create-dbs.sql From 66d4b72eb05067a347336292a45dee13c87298c7 Mon Sep 17 00:00:00 2001 From: Dmitry Nechay Date: Mon, 19 May 2025 13:44:26 +0300 Subject: [PATCH 12/29] refactor: cvat oracle files names --- scripts/docker-setup/Makefile | 4 ++-- .../{docker-compose.local.yml => docker-compose.yml} | 4 ++-- .../{.env.exchange-oracle => .env.exchange-oracle-cvat} | 0 .../{.env.recording-oracle => .env.recording-oracle-cvat} | 0 4 files changed, 4 insertions(+), 4 deletions(-) rename scripts/docker-setup/{docker-compose.local.yml => docker-compose.yml} (99%) rename scripts/docker-setup/env-files/{.env.exchange-oracle => .env.exchange-oracle-cvat} (100%) rename scripts/docker-setup/env-files/{.env.recording-oracle => .env.recording-oracle-cvat} (100%) diff --git a/scripts/docker-setup/Makefile b/scripts/docker-setup/Makefile index 03ca3c11fe..3decce1e1e 100644 --- a/scripts/docker-setup/Makefile +++ b/scripts/docker-setup/Makefile @@ -7,8 +7,8 @@ copy-env-files: @cp ./env-files/.env.reputation-oracle ./.env.reputation-oracle.local @cp ./env-files/.env.human-app-server .env.human-app-server.local @cp ./env-files/.env.job-launcher ./.env.job-launcher.local - @cp ./env-files/.env.exchange-oracle ./.env.exchange-oracle.local - @cp ./env-files/.env.recording-oracle ./.env.recording-oracle.local + @cp ./env-files/.env.exchange-oracle-cvat ./.env.exchange-oracle-cvat.local + @cp ./env-files/.env.recording-oracle-cvat ./.env.recording-oracle-cvat.local # Copying .env files for client apps. # It should be placed in corresponding app folder # because used during Docker image build process diff --git a/scripts/docker-setup/docker-compose.local.yml b/scripts/docker-setup/docker-compose.yml similarity index 99% rename from scripts/docker-setup/docker-compose.local.yml rename to scripts/docker-setup/docker-compose.yml index c238ba2050..07d7c65c65 100644 --- a/scripts/docker-setup/docker-compose.local.yml +++ b/scripts/docker-setup/docker-compose.yml @@ -337,7 +337,7 @@ services: - name: server_port target: *backend_apps_internal_port published: ${EXCHANGE_ORACLE_EXPOSED_PORT:?} - env_file: ./.env.exchange-oracle.local + env_file: ./.env.exchange-oracle-cvat.local environment: HOST: *all_interfaces_ip PORT: *backend_apps_internal_port @@ -384,7 +384,7 @@ services: - name: server_port target: *backend_apps_internal_port published: ${RECORDING_ORACLE_EXPOSED_PORT:?} - env_file: ./.env.recording-oracle.local + env_file: ./.env.recording-oracle-cvat.local environment: HOST: *all_interfaces_ip PORT: *backend_apps_internal_port diff --git a/scripts/docker-setup/env-files/.env.exchange-oracle b/scripts/docker-setup/env-files/.env.exchange-oracle-cvat similarity index 100% rename from scripts/docker-setup/env-files/.env.exchange-oracle rename to scripts/docker-setup/env-files/.env.exchange-oracle-cvat diff --git a/scripts/docker-setup/env-files/.env.recording-oracle b/scripts/docker-setup/env-files/.env.recording-oracle-cvat similarity index 100% rename from scripts/docker-setup/env-files/.env.recording-oracle rename to scripts/docker-setup/env-files/.env.recording-oracle-cvat From 8056312872499f4528f27a2b2c1211883f3747c2 Mon Sep 17 00:00:00 2001 From: Dmitry Nechay Date: Mon, 19 May 2025 14:55:25 +0300 Subject: [PATCH 13/29] refactor: fortune env refactor: fortune reco --- packages/apps/faucet/client/vite.config.ts | 2 +- .../exchange-oracle/client/.env.example | 17 ++-- .../exchange-oracle/client/package.json | 2 +- .../exchange-oracle/server/.env.example | 76 +++++++++------ .../fortune/exchange-oracle/server/ENV.md | 92 ------------------- .../exchange-oracle/server/docker-compose.yml | 50 ---------- .../fortune/recording-oracle/.env.example | 71 +++++++++----- packages/apps/fortune/recording-oracle/ENV.md | 62 ------------- .../recording-oracle/docker-compose.yml | 34 ------- .../src/common/config/env-schema.ts | 1 - .../common/config/server-config.service.ts | 8 -- scripts/docker-setup/docker-compose.yml | 5 + scripts/docker-setup/initdb/create-dbs.sql | 3 +- 13 files changed, 108 insertions(+), 315 deletions(-) delete mode 100644 packages/apps/fortune/exchange-oracle/server/ENV.md delete mode 100644 packages/apps/fortune/exchange-oracle/server/docker-compose.yml delete mode 100644 packages/apps/fortune/recording-oracle/ENV.md delete mode 100644 packages/apps/fortune/recording-oracle/docker-compose.yml diff --git a/packages/apps/faucet/client/vite.config.ts b/packages/apps/faucet/client/vite.config.ts index 82dc93a9c0..af6774fe6c 100644 --- a/packages/apps/faucet/client/vite.config.ts +++ b/packages/apps/faucet/client/vite.config.ts @@ -33,7 +33,7 @@ export default defineConfig(({ mode }) => { }, }, server: { - port: 3002, + port: 3005, }, }; }); diff --git a/packages/apps/fortune/exchange-oracle/client/.env.example b/packages/apps/fortune/exchange-oracle/client/.env.example index da2c159e02..edcb923458 100644 --- a/packages/apps/fortune/exchange-oracle/client/.env.example +++ b/packages/apps/fortune/exchange-oracle/client/.env.example @@ -1,11 +1,8 @@ -VITE_APP_EXCHANGE_ORACLE_SERVER_URL= +# General +VITE_APP_EXCHANGE_ORACLE_SERVER_URL=http://0.0.0.0:5006 +VITE_APP_WALLETCONNECT_PROJECT_ID=replace_me + +# Web3 VITE_APP_ENVIRONMENT=testnet -VITE_APP_RPC_URL_POLYGON= -VITE_APP_RPC_URL_BSC= -VITE_APP_RPC_URL_POLYGON_AMOY= -VITE_APP_RPC_URL_GOERLI= -VITE_APP_RPC_URL_SEPOLIA= -VITE_APP_RPC_URL_MOONBEAM= -VITE_APP_RPC_URL_BSC_TESTNET= -VITE_APP_RPC_URL_LOCALHOST=http://0.0.0.0:8545/ -VITE_APP_WALLETCONNECT_PROJECT_ID= \ No newline at end of file +VITE_APP_SUPPORTED_CHAINS=80002 +VITE_APP_RPC_URL_POLYGON_AMOY=https://rpc-amoy.polygon.technology \ No newline at end of file diff --git a/packages/apps/fortune/exchange-oracle/client/package.json b/packages/apps/fortune/exchange-oracle/client/package.json index 747202275c..99f47b94f3 100644 --- a/packages/apps/fortune/exchange-oracle/client/package.json +++ b/packages/apps/fortune/exchange-oracle/client/package.json @@ -6,7 +6,7 @@ "scripts": { "clean": "rm -rf dist", "lint": "eslint \"**/*.{ts,tsx}\"", - "start": "vite --port 3006", + "start": "vite", "build": "vite build", "preview": "vite preview", "start:prod": "serve -s dist", diff --git a/packages/apps/fortune/exchange-oracle/server/.env.example b/packages/apps/fortune/exchange-oracle/server/.env.example index 4e8005d39f..6c0f17db8b 100644 --- a/packages/apps/fortune/exchange-oracle/server/.env.example +++ b/packages/apps/fortune/exchange-oracle/server/.env.example @@ -1,43 +1,59 @@ # General -NODE_ENV=development -PORT= -CRON_SECRET= +HOST=0.0.0.0 +PORT=5006 # Database POSTGRES_HOST=0.0.0.0 -POSTGRES_USER=operator +POSTGRES_PORT=5433 +POSTGRES_USER=default POSTGRES_PASSWORD=qwerty -POSTGRES_DATABASE=exchange-oracle -POSTGRES_SYNC=false -POSTGRES_PORT=5432 +POSTGRES_DATABASE=exchange-oracle-fortune POSTGRES_SSL=false -POSTGRES_LOGGING='all' - # S3 -S3_ENDPOINT= -S3_PORT= -S3_ACCESS_KEY= -S3_SECRET_KEY= -S3_USE_SSL= -S3_BUCKET= +S3_ENDPOINT=0.0.0.0 +S3_PORT=9000 +S3_ACCESS_KEY=human-oracle +S3_SECRET_KEY=human-oracle-s3-secret +S3_BUCKET=fortune +S3_USE_SSL=false # Web3 -WEB3_ENV=localhost -WEB3_PRIVATE_KEY= -RPC_URL_POLYGON= -RPC_URL_BSC= -RPC_URL_POLYGON_AMOY= -RPC_URL_SEPOLIA= -RPC_URL_MOONBEAM= -RPC_URL_BSC_TESTNET= -RPC_URL_XLAYER= -RPC_URL_LOCALHOST= +WEB3_ENV=testnet +WEB3_PRIVATE_KEY=replace_me +RPC_URL_POLYGON_AMOY=https://rpc-amoy.polygon.technology # PGP -PGP_ENCRYPT= -PGP_PRIVATE_KEY= -PGP_PASSPHRASE= +PGP_ENCRYPT=true +PGP_PRIVATE_KEY="-----BEGIN PGP PRIVATE KEY BLOCK----- + +xYYEaCsZkBYJKwYBBAHaRw8BAQdA57OtWky46JfMXjUuc0Lb7DhlfLuLYIfI +j/k/vJiuL+D+CQMI2p74jVMUUM3g8z+mhvW3+G5ajp6G3kwqlwMA5GXvbPsI +AwMt8q3dT51U0FpaeFR0vzbokC/3J2yn44MrHT5W1ZaKbWLlx5QGiAqkl9D3 +ec0AwowEEBYKAD4FgmgrGZAECwkHCAmQsDLkiO/wmn8DFQgKBBYAAgECGQEC +mwMCHgEWIQStAYPfywhyBWsDk4WwMuSI7/CafwAAjXYA/AxG1Y6vL3JJnm/0 +8BpA2X1I2mAf36tfpWh79EI1YzcSAQD2Nx6hzzl+zTk9usms4iyl0ZkA5GqR +EQQggrHIZEvKCseLBGgrGZASCisGAQQBl1UBBQEBB0Cf3IqFfpNHTpIM6QQK +z9MtsKJsoaIdoBq5o65jX+v4CQMBCAf+CQMIYLeP6Ua7BsHgqKKEO4VYdHu8 +tIoEcZkDffm5NQ3BmS1c4tYp63d4jxZmkbyw3xHj6QS3D9a7IF+/R2+rrYf1 +Y0HFz1H9TSsJnuvOCf2wiMJ4BBgWCgAqBYJoKxmQCZCwMuSI7/CafwKbDBYh +BK0Bg9/LCHIFawOThbAy5Ijv8Jp/AACRFgEA0cwrCjODyF7GleZK/SHff9xn +oRSkBzq+CCaA/eqQ/ikBALfxC5M+OM7od4w9xKBThNG2M2lC4D9enGU5+cGE +BRoN +=gvnq +-----END PGP PRIVATE KEY BLOCK-----" +PGP_PASSPHRASE=6fD8WuRhT85mxP11PfX +# Put it here just to easily set up KV later; not needed to run +PGP_PUBLIC_KEY="-----BEGIN PGP PUBLIC KEY BLOCK----- -# Cron Job Secret -CRON_SECRET="cron-secret" \ No newline at end of file +xjMEaCsZkBYJKwYBBAHaRw8BAQdA57OtWky46JfMXjUuc0Lb7DhlfLuLYIfI +j/k/vJiuL+DNAMKMBBAWCgA+BYJoKxmQBAsJBwgJkLAy5Ijv8Jp/AxUICgQW +AAIBAhkBApsDAh4BFiEErQGD38sIcgVrA5OFsDLkiO/wmn8AAI12APwMRtWO +ry9ySZ5v9PAaQNl9SNpgH9+rX6Voe/RCNWM3EgEA9jceoc85fs05PbrJrOIs +pdGZAORqkREEIIKxyGRLygrOOARoKxmQEgorBgEEAZdVAQUBAQdAn9yKhX6T +R06SDOkECs/TLbCibKGiHaAauaOuY1/r+AkDAQgHwngEGBYKACoFgmgrGZAJ +kLAy5Ijv8Jp/ApsMFiEErQGD38sIcgVrA5OFsDLkiO/wmn8AAJEWAQDRzCsK +M4PIXsaV5kr9Id9/3GehFKQHOr4IJoD96pD+KQEAt/ELkz44zuh3jD3EoFOE +0bYzaULgP16cZTn5wYQFGg0= +=ppFH +-----END PGP PUBLIC KEY BLOCK-----" diff --git a/packages/apps/fortune/exchange-oracle/server/ENV.md b/packages/apps/fortune/exchange-oracle/server/ENV.md deleted file mode 100644 index 3a718a5cfc..0000000000 --- a/packages/apps/fortune/exchange-oracle/server/ENV.md +++ /dev/null @@ -1,92 +0,0 @@ -# Environment Variables - -### The URL for connecting to the PostgreSQL database. -POSTGRES_URL= - -### The hostname or IP address of the PostgreSQL database server. Default: '127.0.0.1' -POSTGRES_HOST="127.0.0.1" - -### The port number on which the PostgreSQL database server is listening. Default: 5432 -POSTGRES_PORT="5432" - -### The username for authenticating with the PostgreSQL database. Default: 'operator' -POSTGRES_USER="operator" - -### The password for authenticating with the PostgreSQL database. Default: 'qwerty' -POSTGRES_PASSWORD="qwerty" - -### The name of the PostgreSQL database to connect to. Default: 'exchange-oracle' -POSTGRES_DATABASE="exchange-oracle" - -### Indicates whether to use SSL for connections to the PostgreSQL database. Default: false -POSTGRES_SSL="false" - -### The logging level for PostgreSQL operations (e.g., 'debug', 'info'). Default: 'log,info,warn,error' -POSTGRES_LOGGING="log,info,warn,error" - -### The RPC URL for the Sepolia network. -RPC_URL_SEPOLIA= - -### The RPC URL for the Polygon network. -RPC_URL_POLYGON= - -### The RPC URL for the Polygon Amoy network. -RPC_URL_POLYGON_AMOY= - -### The RPC URL for the BSC Mainnet network. -RPC_URL_BSC_MAINNET= - -### The RPC URL for the BSC Testnet network. -RPC_URL_BSC_TESTNET= - -### The RPC URL for the Localhost network. -RPC_URL_LOCALHOST= - -### Indicates whether PGP encryption should be used. Default: false -PGP_ENCRYPT="false" - -### The private key used for PGP encryption or decryption. -PGP_PRIVATE_KEY= - -### The passphrase associated with the PGP private key. -PGP_PASSPHRASE= - -### The endpoint URL for connecting to the S3 service. Default: '127.0.0.1' -S3_ENDPOINT="127.0.0.1" - -### The port number for connecting to the S3 service. Default: 9000 -S3_PORT="9000" - -### The access key ID used to authenticate requests to the S3 service. Required -S3_ACCESS_KEY= - -### The secret access key used to authenticate requests to the S3 service. Required -S3_SECRET_KEY= - -### The name of the S3 bucket where files will be stored. Default: 'exchange' -S3_BUCKET="exchange" - -### Indicates whether to use SSL (HTTPS) for connections to the S3 service. Default: false -S3_USE_SSL="false" - -### The environment in which the server is running (e.g., 'development', 'production'). Default: 'development' -NODE_ENV="development" - -### The hostname or IP address on which the server will run. Default: 'localhost' -HOST="localhost" - -### The port number on which the server will listen for incoming connections. Default: 5000 -PORT="5000" - -### The URL of the frontend application that the server will communicate with. Default: 'http://localhost:3005' -FE_URL="http://localhost:3005" - -### The maximum number of retry attempts for certain operations. Default: 5 -MAX_RETRY_COUNT="5" - -### The environment in which the Web3 application is running. Default: 'testnet' -WEB3_ENV="testnet" - -### The private key used for signing transactions. Required -WEB3_PRIVATE_KEY= - diff --git a/packages/apps/fortune/exchange-oracle/server/docker-compose.yml b/packages/apps/fortune/exchange-oracle/server/docker-compose.yml deleted file mode 100644 index d1eeb26cae..0000000000 --- a/packages/apps/fortune/exchange-oracle/server/docker-compose.yml +++ /dev/null @@ -1,50 +0,0 @@ -version: '3.7' - -services: - postgres: - image: postgres:latest - restart: always - environment: - - POSTGRES_HOST=${POSTGRES_HOST} - - POSTGRES_USER=${POSTGRES_USER} - - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} - - POSTGRES_DB=${POSTGRES_DATABASE} - - POSTGRES_PORT=${POSTGRES_PORT} - - POSTGRES_SYNC=${POSTGRES_SYNC} - logging: - options: - max-size: 10m - max-file: "3" - ports: - - '${POSTGRES_PORT}:${POSTGRES_PORT}' - # volumes: - # - ./db:/var/lib/postgresql/data - minio: - container_name: minio - image: minio/minio:RELEASE.2022-05-26T05-48-41Z - ports: - - 9001:9001 - - 9000:9000 - environment: - MINIO_ROOT_USER: dev - MINIO_ROOT_PASSWORD: devdevdev - entrypoint: 'sh' - command: - -c "minio server /data --console-address ':9001'" - healthcheck: - test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"] - interval: 5s - timeout: 5s - retries: 3 - minio-mc: - container_name: minio-mc - image: minio/mc - depends_on: - minio: - condition: service_healthy - entrypoint: > - /bin/sh -c " - /usr/bin/mc config host add myminio http://minio:9000 dev devdevdev; - /usr/bin/mc mb myminio/solution; - /usr/bin/mc anonymous set public myminio/solution; - " diff --git a/packages/apps/fortune/recording-oracle/.env.example b/packages/apps/fortune/recording-oracle/.env.example index ac59dac283..c2a7c1bc38 100644 --- a/packages/apps/fortune/recording-oracle/.env.example +++ b/packages/apps/fortune/recording-oracle/.env.example @@ -1,29 +1,50 @@ -#General -NODE_ENV=development -HOST=localhost -PORT=5002 -SESSION_SECRET= +# General +HOST=0.0.0.0 +PORT=5007 +# S3 +S3_ENDPOINT=0.0.0.0 +S3_PORT=9000 +S3_ACCESS_KEY=human-oracle +S3_SECRET_KEY=human-oracle-s3-secret +S3_BUCKET=fortune +S3_USE_SSL=false -#Web3 -WEB3_PRIVATE_KEY= -RPC_URL_POLYGON= -RPC_URL_BSC= -RPC_URL_POLYGON_AMOY= -RPC_URL_SEPOLIA= -RPC_URL_MOONBEAM= -RPC_URL_BSC_TESTNET= -RPC_URL_LOCALHOST= +# Web3 +WEB3_PRIVATE_KEY=replace_me +RPC_URL_POLYGON_AMOY=https://rpc-amoy.polygon.technology -# S3 -S3_ENDPOINT= -S3_PORT= -S3_ACCESS_KEY= -S3_SECRET_KEY= -S3_BUCKET= -S3_USE_SSL= +# Encryption +PGP_ENCRYPT=true +PGP_PRIVATE_KEY="-----BEGIN PGP PRIVATE KEY BLOCK----- + +xYYEaCsnrRYJKwYBBAHaRw8BAQdADWMKa+9YvRJV474d+BDsLv7a+aSkMMkR +FZOWJG1ePjT+CQMIZhNMm+tnPeTgihnx8ru0E3sqYcofEvRM9VrSIyrs/U+H +LsK5rsa+NV8Ui+9cKcmtCW4EJ12LNmTg1xYJsxQnn4eZQzSmlMkK5N61KyJ+ +zM0AwowEEBYKAD4FgmgrJ60ECwkHCAmQuTtXvy2rDmoDFQgKBBYAAgECGQEC +mwMCHgEWIQRhezz+qPdIIiGIyyS5O1e/LasOagAASiUBAL2ngIhlne91+Z7h +RHU0F4ENomy/e1S6w/gn/dVLfE1OAP9ZG9x1gksN1R1O9Fgq1WfGkHNJi/8U +DF7yO8H8sDw2D8eLBGgrJ60SCisGAQQBl1UBBQEBB0A9v5ubU6UB6C9yoUPc +Zqu8ZyQHa55VFR3figyExeVtRwMBCAf+CQMIU0kTC9Fq7ozgh/iv/ybvydCJ +pdU7fNuD2Ipb4ZfRVMrogkQLolOKgRd8468OSoNFuk4RnYkBsyafZmI4KGkG ++oroKa+1mThKi6ePu7GO/cJ4BBgWCgAqBYJoKyetCZC5O1e/LasOagKbDBYh +BGF7PP6o90giIYjLJLk7V78tqw5qAACsjwD+O/d9B6wJDDd2FRp3JmZPt/sJ +vyg2sQLiIXbjACHXCI4BALbO+tfsyeSxYiK0j67etKnFzoG+1ek1vukDdIf7 +tMcN +=qkIF +-----END PGP PRIVATE KEY BLOCK-----" +PGP_PASSPHRASE=tt8Bn946gusiJm4r5wX +# Put it here just to easily set up KV later; not needed to run +PGP_PUBLIC_KEY="-----BEGIN PGP PUBLIC KEY BLOCK----- -#Encryption -PGP_ENCRYPT= -PGP_PRIVATE_KEY= -PGP_PASSPHRASE= \ No newline at end of file +xjMEaCsnrRYJKwYBBAHaRw8BAQdADWMKa+9YvRJV474d+BDsLv7a+aSkMMkR +FZOWJG1ePjTNAMKMBBAWCgA+BYJoKyetBAsJBwgJkLk7V78tqw5qAxUICgQW +AAIBAhkBApsDAh4BFiEEYXs8/qj3SCIhiMskuTtXvy2rDmoAAEolAQC9p4CI +ZZ3vdfme4UR1NBeBDaJsv3tUusP4J/3VS3xNTgD/WRvcdYJLDdUdTvRYKtVn +xpBzSYv/FAxe8jvB/LA8Ng/OOARoKyetEgorBgEEAZdVAQUBAQdAPb+bm1Ol +AegvcqFD3GarvGckB2ueVRUd34oMhMXlbUcDAQgHwngEGBYKACoFgmgrJ60J +kLk7V78tqw5qApsMFiEEYXs8/qj3SCIhiMskuTtXvy2rDmoAAKyPAP47930H +rAkMN3YVGncmZk+3+wm/KDaxAuIhduMAIdcIjgEAts761+zJ5LFiIrSPrt60 +qcXOgb7V6TW+6QN0h/u0xw0= +=Hpds +-----END PGP PUBLIC KEY BLOCK-----" diff --git a/packages/apps/fortune/recording-oracle/ENV.md b/packages/apps/fortune/recording-oracle/ENV.md deleted file mode 100644 index 705df340a2..0000000000 --- a/packages/apps/fortune/recording-oracle/ENV.md +++ /dev/null @@ -1,62 +0,0 @@ -# Environment Variables - -### The RPC URL for the Polygon network. -RPC_URL_POLYGON= - -### The RPC URL for the Polygon Amoy network. -RPC_URL_POLYGON_AMOY= - -### The RPC URL for the Sepolia network. -RPC_URL_SEPOLIA= - -### The RPC URL for the BSC Mainnet network. -RPC_URL_BSC_MAINNET= - -### The RPC URL for the BSC Testnet network. -RPC_URL_BSC_TESTNET= - -### The RPC URL for the Localhost network. -RPC_URL_LOCALHOST= - -### Indicates whether PGP encryption should be used. Default: false -PGP_ENCRYPT="false" - -### The private key used for PGP encryption or decryption. -PGP_PRIVATE_KEY= - -### The passphrase associated with the PGP private key. -PGP_PASSPHRASE= - -### The endpoint URL for connecting to the S3 service. Default: '127.0.0.1' -S3_ENDPOINT="127.0.0.1" - -### The port number for connecting to the S3 service. Default: 9000 -S3_PORT="9000" - -### The access key ID used to authenticate requests to the S3 service. Required -S3_ACCESS_KEY= - -### The secret access key used to authenticate requests to the S3 service. Required -S3_SECRET_KEY= - -### The name of the S3 bucket where files will be stored. Default: 'recording' -S3_BUCKET="recording" - -### Indicates whether to use SSL (HTTPS) for connections to the S3 service. Default: false -S3_USE_SSL="false" - -### The environment in which the server is running (e.g., 'development', 'production'). Default: 'development' -NODE_ENV="development" - -### The hostname or IP address on which the server will run. Default: 'localhost' -HOST="localhost" - -### The port number on which the server will listen for incoming connections. Default: 5000 -PORT="5000" - -### The secret key used for session encryption and validation. Default: 'session_key' -SESSION_SECRET="session_key" - -### The private key used for signing transactions. Required -WEB3_PRIVATE_KEY= - diff --git a/packages/apps/fortune/recording-oracle/docker-compose.yml b/packages/apps/fortune/recording-oracle/docker-compose.yml deleted file mode 100644 index 329fcd6ca6..0000000000 --- a/packages/apps/fortune/recording-oracle/docker-compose.yml +++ /dev/null @@ -1,34 +0,0 @@ -version: '3.7' - -services: - minio: - container_name: minio - image: minio/minio:RELEASE.2022-05-26T05-48-41Z - ports: - - 9001:9001 - - 9000:9000 - environment: - MINIO_ROOT_USER: dev - MINIO_ROOT_PASSWORD: devdevdev - entrypoint: 'sh' - command: - -c "minio server /data --console-address ':9001'" - healthcheck: - test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"] - interval: 5s - timeout: 5s - retries: 3 - minio-mc: - container_name: minio-mc - image: minio/mc - depends_on: - minio: - condition: service_healthy - entrypoint: > - /bin/sh -c " - /usr/bin/mc config host add myminio http://minio:9000 dev devdevdev; - /usr/bin/mc mb myminio/launcher; - /usr/bin/mc anonymous set public myminio/launcher; - /usr/bin/mc mb myminio/solution; - /usr/bin/mc anonymous set public myminio/solution; - " diff --git a/packages/apps/fortune/recording-oracle/src/common/config/env-schema.ts b/packages/apps/fortune/recording-oracle/src/common/config/env-schema.ts index 5d73ebeeea..a2605048c3 100644 --- a/packages/apps/fortune/recording-oracle/src/common/config/env-schema.ts +++ b/packages/apps/fortune/recording-oracle/src/common/config/env-schema.ts @@ -5,7 +5,6 @@ export const envValidator = Joi.object({ NODE_ENV: Joi.string(), HOST: Joi.string(), PORT: Joi.string(), - SESSION_SECRET: Joi.string(), // Web3 WEB3_PRIVATE_KEY: Joi.string().required(), RPC_URL_POLYGON: Joi.string(), diff --git a/packages/apps/fortune/recording-oracle/src/common/config/server-config.service.ts b/packages/apps/fortune/recording-oracle/src/common/config/server-config.service.ts index 9de873ef72..037d70e5ac 100644 --- a/packages/apps/fortune/recording-oracle/src/common/config/server-config.service.ts +++ b/packages/apps/fortune/recording-oracle/src/common/config/server-config.service.ts @@ -28,12 +28,4 @@ export class ServerConfigService { get port(): number { return +this.configService.get('PORT', 5002); } - - /** - * The secret key used for session encryption and validation. - * Default: 'session_key' - */ - get sessionSecret(): string { - return this.configService.get('SESSION_SECRET', 'session_key'); - } } diff --git a/scripts/docker-setup/docker-compose.yml b/scripts/docker-setup/docker-compose.yml index 07d7c65c65..ed128c9f90 100644 --- a/scripts/docker-setup/docker-compose.yml +++ b/scripts/docker-setup/docker-compose.yml @@ -41,6 +41,7 @@ x-general-env-variables: bucket_name_rep_o: &bucket_name_rep_o ${BUCKET_NAME_REPUTATION_ORACLE:-reputation-oracle} bucket_name_exc_o: &bucket_name_exc_o ${BUCKET_NAME_EXCHANGE_ORACLE:-exchange-oracle} bucket_name_rec_o: &bucket_name_rec_o ${BUCKET_NAME_RECORDING_ORACLE:-recording-oracle} + bucket_name_fortune: &bucket_name_fortune ${BUCKEN_NAME_FORTUNE:-fortune} # WEB3 ADDRESSES reputation_oracle_address: &reputation_oracle_address ${REPUTATION_ORACLE_ADDRESS:?} cvat_exchange_oracle_address: &cvat_exchange_oracle_address ${CVAT_EXCHANGE_ORACLE_ADDRESS:?} @@ -190,6 +191,7 @@ services: BUCKET_REPUTATION_ORACLE: *bucket_name_rep_o BUCKET_EXCHANGE_ORACLE: *bucket_name_exc_o BUCKET_RECORDING_ORACLE: *bucket_name_rec_o + BUCKET_FORTUNE: *bucket_name_fortune entrypoint: > /bin/sh -c " mc alias set myminio http://minio:9000 $$MINIO_ROOT_USER $$MINIO_ROOT_PASSWORD @@ -211,6 +213,9 @@ services: mc mb myminio/$$BUCKET_RECORDING_ORACLE; mc anonymous set public myminio/$$BUCKET_RECORDING_ORACLE; + + mc mb myminio/$$BUCKET_FORTUNE; + mc anonymous set public myminio/$$BUCKET_FORTUNE; " reputation-oracle: diff --git a/scripts/docker-setup/initdb/create-dbs.sql b/scripts/docker-setup/initdb/create-dbs.sql index 7f81cc3386..da24368f29 100644 --- a/scripts/docker-setup/initdb/create-dbs.sql +++ b/scripts/docker-setup/initdb/create-dbs.sql @@ -1,4 +1,5 @@ CREATE DATABASE "reputation-oracle"; +CREATE DATABASE "job-launcher"; CREATE DATABASE "exchange-oracle-cvat"; CREATE DATABASE "recording-oracle-cvat"; -CREATE DATABASE "job-launcher"; +CREATE DATABASE "exchange-oracle-fortune"; From 3d5091b175f484a55cd9aa41d4ebe043401e95f6 Mon Sep 17 00:00:00 2001 From: Dmitry Nechay Date: Mon, 19 May 2025 17:26:53 +0300 Subject: [PATCH 14/29] refactor: rename cvat buckets --- scripts/docker-setup/docker-compose.yml | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/scripts/docker-setup/docker-compose.yml b/scripts/docker-setup/docker-compose.yml index ed128c9f90..273ef29fc8 100644 --- a/scripts/docker-setup/docker-compose.yml +++ b/scripts/docker-setup/docker-compose.yml @@ -39,8 +39,8 @@ x-general-env-variables: bucket_name_manifests: &bucket_name_manifests ${BUCKET_NAME_MANIFESTS:-manifests} bucket_name_datasets: &bucket_name_datasets ${BUCKET_NAME_DATASETS:-datasets} bucket_name_rep_o: &bucket_name_rep_o ${BUCKET_NAME_REPUTATION_ORACLE:-reputation-oracle} - bucket_name_exc_o: &bucket_name_exc_o ${BUCKET_NAME_EXCHANGE_ORACLE:-exchange-oracle} - bucket_name_rec_o: &bucket_name_rec_o ${BUCKET_NAME_RECORDING_ORACLE:-recording-oracle} + bucket_name_cvat_exc_o: &bucket_name_cvat_exc_o ${BUCKET_NAME_CVAT_EXCHANGE_ORACLE:-cvat-exchange-oracle} + bucket_name_cvat_rec_o: &bucket_name_cvat_rec_o ${BUCKET_NAME_CVAT_RECORDING_ORACLE:-cvat-recording-oracle} bucket_name_fortune: &bucket_name_fortune ${BUCKEN_NAME_FORTUNE:-fortune} # WEB3 ADDRESSES reputation_oracle_address: &reputation_oracle_address ${REPUTATION_ORACLE_ADDRESS:?} @@ -189,8 +189,8 @@ services: BUCKET_MANIFESTS: *bucket_name_manifests BUCKET_DATASETS: *bucket_name_datasets BUCKET_REPUTATION_ORACLE: *bucket_name_rep_o - BUCKET_EXCHANGE_ORACLE: *bucket_name_exc_o - BUCKET_RECORDING_ORACLE: *bucket_name_rec_o + BUCKET_CVAT_EXCHANGE_ORACLE: *bucket_name_cvat_exc_o + BUCKET_CVAT_RECORDING_ORACLE: *bucket_name_cvat_rec_o BUCKET_FORTUNE: *bucket_name_fortune entrypoint: > /bin/sh -c " @@ -208,11 +208,11 @@ services: mc mb myminio/$$BUCKET_REPUTATION_ORACLE; mc anonymous set public myminio/$$BUCKET_REPUTATION_ORACLE; - mc mb myminio/$$BUCKET_EXCHANGE_ORACLE; - mc anonymous set public myminio/$$BUCKET_EXCHANGE_ORACLE; + mc mb myminio/$$BUCKET_CVAT_EXCHANGE_ORACLE; + mc anonymous set public myminio/$$BUCKET_CVAT_EXCHANGE_ORACLE; - mc mb myminio/$$BUCKET_RECORDING_ORACLE; - mc anonymous set public myminio/$$BUCKET_RECORDING_ORACLE; + mc mb myminio/$$BUCKET_CVAT_RECORDING_ORACLE; + mc anonymous set public myminio/$$BUCKET_CVAT_RECORDING_ORACLE; mc mb myminio/$$BUCKET_FORTUNE; mc anonymous set public myminio/$$BUCKET_FORTUNE; @@ -356,7 +356,7 @@ services: PG_DB: exchange-oracle-cvat POLYGON_AMOY_RPC_API_URL: *rpc_url_polygon_amoy POLYGON_AMOY_ADDR: *cvat_exchange_oracle_address - STORAGE_BUCKET_NAME: *bucket_name_exc_o + STORAGE_BUCKET_NAME: *bucket_name_cvat_exc_o HUMAN_APP_JWT_KEY: *reputation_oracle_jwt_public_key CVAT_INCOMING_WEBHOOKS_URL: "http://exchange-oracle.app:${BACKEND_APPS_INTERNAL_PORT:?}/cvat-webhook" LOCALHOST_RECORDING_ORACLE_URL: "http://recording-oracle:${BACKEND_APPS_INTERNAL_PORT:?}/webhook" @@ -401,13 +401,13 @@ services: PG_DB: recording-oracle-cvat POLYGON_AMOY_RPC_API_URL: *rpc_url_polygon_amoy POLYGON_AMOY_ADDR: *cvat_recording_oracle_address - STORAGE_RESULTS_BUCKET_NAME: *bucket_name_rec_o + STORAGE_RESULTS_BUCKET_NAME: *bucket_name_cvat_rec_o STORAGE_USE_PATH_STYLE: "true" EXCHANGE_ORACLE_STORAGE_PROVIDER: *cvat_oracle_storage_provider EXCHANGE_ORACLE_STORAGE_ENDPOINT_URL: *cvat_oracle_storage_endpoint EXCHANGE_ORACLE_STORAGE_ACCESS_KEY: *minio_services_access_key EXCHANGE_ORACLE_STORAGE_SECRET_KEY: *minio_services_secret_key - EXCHANGE_ORACLE_STORAGE_RESULTS_BUCKET_NAME: *bucket_name_exc_o + EXCHANGE_ORACLE_STORAGE_RESULTS_BUCKET_NAME: *bucket_name_cvat_exc_o EXCHANGE_ORACLE_STORAGE_USE_SSL: 'false' LOCALHOST_EXCHANGE_ORACLE_URL: "http://exchange-oracle-cvat:${BACKEND_APPS_INTERNAL_PORT:?}/webhook" LOCALHOST_REPUTATION_ORACLE_URL: "http://reputation-oracle:${BACKEND_APPS_INTERNAL_PORT:?}/webhook" From 1b025e5af58412aa5a927ee6bcb60ca31cef0da3 Mon Sep 17 00:00:00 2001 From: Dmitry Nechay Date: Mon, 19 May 2025 19:34:01 +0300 Subject: [PATCH 15/29] fix: recording oracle url in docker --- scripts/docker-setup/docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/docker-setup/docker-compose.yml b/scripts/docker-setup/docker-compose.yml index 273ef29fc8..3cc16c454d 100644 --- a/scripts/docker-setup/docker-compose.yml +++ b/scripts/docker-setup/docker-compose.yml @@ -359,7 +359,7 @@ services: STORAGE_BUCKET_NAME: *bucket_name_cvat_exc_o HUMAN_APP_JWT_KEY: *reputation_oracle_jwt_public_key CVAT_INCOMING_WEBHOOKS_URL: "http://exchange-oracle.app:${BACKEND_APPS_INTERNAL_PORT:?}/cvat-webhook" - LOCALHOST_RECORDING_ORACLE_URL: "http://recording-oracle:${BACKEND_APPS_INTERNAL_PORT:?}/webhook" + LOCALHOST_RECORDING_ORACLE_URL: "http://recording-oracle-cvat:${BACKEND_APPS_INTERNAL_PORT:?}/webhook" LOCALHOST_JOB_LAUNCHER_URL: "http://job-launcher:${BACKEND_APPS_INTERNAL_PORT:?}/webhook" LOCALHOST_RECORDING_ORACLE_ADDRESS: *cvat_recording_oracle_address From fc3b71f3372f4b4a026cdbed906fae6e439ed8a6 Mon Sep 17 00:00:00 2001 From: Dmitry Nechay Date: Tue, 20 May 2025 16:23:03 +0300 Subject: [PATCH 16/29] feat: fortune exco in docker --- .../fortune/exchange-oracle/client/Dockerfile | 35 ++++++++++++ .../fortune/exchange-oracle/server/Dockerfile | 33 ++++++++--- .../exchange-oracle/server/package.json | 13 +++++ .../apps/fortune/recording-oracle/Dockerfile | 35 ++++++++++++ .../job-launcher/server/docker-compose.yml | 57 ------------------- scripts/docker-setup/Makefile | 3 + scripts/docker-setup/docker-compose.yml | 37 +++++++++++- scripts/docker-setup/env-files/.env.compose | 5 +- .../env-files/.env.exchange-oracle-fortune | 36 ++++++++++++ yarn.lock | 24 +++++++- 10 files changed, 208 insertions(+), 70 deletions(-) create mode 100644 packages/apps/fortune/exchange-oracle/client/Dockerfile create mode 100644 packages/apps/fortune/recording-oracle/Dockerfile delete mode 100644 packages/apps/job-launcher/server/docker-compose.yml create mode 100644 scripts/docker-setup/env-files/.env.exchange-oracle-fortune diff --git a/packages/apps/fortune/exchange-oracle/client/Dockerfile b/packages/apps/fortune/exchange-oracle/client/Dockerfile new file mode 100644 index 0000000000..b47c3f4c23 --- /dev/null +++ b/packages/apps/fortune/exchange-oracle/client/Dockerfile @@ -0,0 +1,35 @@ +# Using bullseye instead of slim because it needs Python and build tools for node-gyp +FROM node:22.14-bullseye +ARG APP_PATH=packages/apps/fortune/exchange-oracle/client + +# Create app directory +WORKDIR /usr/src/app + +# Copy expected yarn dist +COPY .yarn ./.yarn +COPY .yarnrc.yml ./ + +# Copy files for deps installation +COPY package.json yarn.lock ./ +COPY ${APP_PATH}/package.json ./${APP_PATH}/ + +# Some deps are referenced as "workspace:*", +# so we need to copy and build them +COPY packages/core ./packages/core +COPY packages/sdk ./packages/sdk + +RUN yarn install + +# Copy base TS config that is required to build pacakges +COPY tsconfig.base.json ./ +# Build libs +RUN yarn build:libs + +# Copy everything else +COPY ${APP_PATH} ./${APP_PATH} + +WORKDIR ./${APP_PATH} +RUN yarn build + +# Start the server using the build +CMD [ "yarn", "start:prod" ] \ No newline at end of file diff --git a/packages/apps/fortune/exchange-oracle/server/Dockerfile b/packages/apps/fortune/exchange-oracle/server/Dockerfile index 53a10f4234..29c97e32f6 100644 --- a/packages/apps/fortune/exchange-oracle/server/Dockerfile +++ b/packages/apps/fortune/exchange-oracle/server/Dockerfile @@ -1,18 +1,35 @@ -# Base image -FROM node:18 +FROM node:22.14-slim +ARG APP_PATH=packages/apps/fortune/exchange-oracle/server # Create app directory WORKDIR /usr/src/app -# Bundle app source -COPY . . +# Copy expected yarn dist +COPY .yarn ./.yarn +COPY .yarnrc.yml ./ + +# Copy files for deps installation +COPY package.json yarn.lock ./ +COPY ${APP_PATH}/package.json ./${APP_PATH}/ + +# Some deps are referenced as "workspace:*", +# so we need to copy and build them +COPY packages/core ./packages/core +COPY packages/sdk ./packages/sdk -# Install app dependencies RUN yarn install + +# Copy base TS config that is required to build pacakges +COPY tsconfig.base.json ./ +# Build libs RUN yarn build:libs +# Copy everything else +COPY ${APP_PATH} ./${APP_PATH} + +WORKDIR ./${APP_PATH} # Creates a "dist" folder with the production build -RUN yarn workspace @human-protocol/fortune-exchange-oracle-server build +RUN yarn build -# Start the server using the production build -CMD [ "node", "packages/apps/fortune/exchange-oracle/server/dist/src/main.js" ] +# Start the server using the build +CMD [ "yarn", "start:prod" ] diff --git a/packages/apps/fortune/exchange-oracle/server/package.json b/packages/apps/fortune/exchange-oracle/server/package.json index 2f71d2c961..4cd313d4c0 100644 --- a/packages/apps/fortune/exchange-oracle/server/package.json +++ b/packages/apps/fortune/exchange-oracle/server/package.json @@ -32,14 +32,24 @@ "@human-protocol/sdk": "workspace:*", "@nestjs/axios": "^3.1.2", "@nestjs/common": "^10.2.7", + "@nestjs/config": "^3.1.1", "@nestjs/core": "^10.3.10", + "@nestjs/passport": "^10.0.0", + "@nestjs/platform-express": "^10.3.10", + "@nestjs/schedule": "^4.0.1", + "@nestjs/swagger": "^7.4.2", "@nestjs/terminus": "^11.0.0", "@nestjs/typeorm": "^10.0.1", + "@types/passport-jwt": "^4.0.1", "axios": "^1.3.1", + "body-parser": "^1.20.3", "class-transformer": "^0.5.1", "class-validator": "0.14.1", "ethers": "~6.13.5", "joi": "^17.13.3", + "jsonwebtoken": "^9.0.2", + "passport": "^0.7.0", + "passport-jwt": "^4.0.1", "pg": "8.13.1", "reflect-metadata": "^0.2.2", "rxjs": "^7.2.0", @@ -51,9 +61,12 @@ "@nestjs/cli": "^10.3.2", "@nestjs/schematics": "^11.0.2", "@nestjs/testing": "^10.4.6", + "@types/body-parser": "^1", "@types/express": "^4.17.13", "@types/jest": "29.5.12", + "@types/jsonwebtoken": "^9.0.7", "@types/node": "22.10.5", + "@types/passport": "^0", "@types/pg": "8.11.10", "@types/supertest": "^6.0.2", "@typescript-eslint/eslint-plugin": "^5.0.0", diff --git a/packages/apps/fortune/recording-oracle/Dockerfile b/packages/apps/fortune/recording-oracle/Dockerfile new file mode 100644 index 0000000000..bfe85f163b --- /dev/null +++ b/packages/apps/fortune/recording-oracle/Dockerfile @@ -0,0 +1,35 @@ +FROM node:22.14-slim +ARG APP_PATH=packages/apps/fortune/recording-oracle + +# Create app directory +WORKDIR /usr/src/app + +# Copy expected yarn dist +COPY .yarn ./.yarn +COPY .yarnrc.yml ./ + +# Copy files for deps installation +COPY package.json yarn.lock ./ +COPY ${APP_PATH}/package.json ./${APP_PATH}/ + +# Some deps are referenced as "workspace:*", +# so we need to copy and build them +COPY packages/core ./packages/core +COPY packages/sdk ./packages/sdk + +RUN yarn install + +# Copy base TS config that is required to build pacakges +COPY tsconfig.base.json ./ +# Build libs +RUN yarn build:libs + +# Copy everything else +COPY ${APP_PATH} ./${APP_PATH} + +WORKDIR ./${APP_PATH} +# Creates a "dist" folder with the production build +RUN yarn build + +# Start the server using the build +CMD [ "yarn", "start:prod" ] diff --git a/packages/apps/job-launcher/server/docker-compose.yml b/packages/apps/job-launcher/server/docker-compose.yml deleted file mode 100644 index a8c9a7b86b..0000000000 --- a/packages/apps/job-launcher/server/docker-compose.yml +++ /dev/null @@ -1,57 +0,0 @@ -version: '3.8' -services: - postgres: - container_name: postgres - image: postgres:latest - restart: always - logging: - options: - max-size: 10m - max-file: "3" - ports: - - 5432:5432 - # volumes: - # - ./db:/var/lib/postgresql/data - environment: - POSTGRES_DB: ${POSTGRES_DATABASE} - POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} - POSTGRES_USER: ${POSTGRES_USER} - minio: - container_name: minio - image: minio/minio:RELEASE.2022-05-26T05-48-41Z - ports: - - 9001:9001 - - 9000:9000 - entrypoint: 'sh' - command: - -c "minio server /data --console-address ':9001'" - healthcheck: - test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"] - interval: 5s - timeout: 5s - retries: 3 - minio-mc: - container_name: minio-mc - image: minio/mc - depends_on: - minio: - condition: service_healthy - entrypoint: > - /bin/sh -c " - /usr/bin/mc config host add myminio http://minio:9000 minioadmin minioadmin; - /usr/bin/mc mb myminio/manifests; - /usr/bin/mc anonymous set public myminio/manifests; - " - # job-launcher: - # container_name: job-launcher - # restart: unless-stopped - # build: - # context: ../../../../ - # dockerfile: packages/apps/job-launcher/server/Dockerfile - # expose: - # - '${PORT}' - # ports: - # - '${LOCAL_PORT}:${PORT}' - # env_file: - # - path: ./.env.development - # required: true # default diff --git a/scripts/docker-setup/Makefile b/scripts/docker-setup/Makefile index 3decce1e1e..e052903566 100644 --- a/scripts/docker-setup/Makefile +++ b/scripts/docker-setup/Makefile @@ -7,8 +7,11 @@ copy-env-files: @cp ./env-files/.env.reputation-oracle ./.env.reputation-oracle.local @cp ./env-files/.env.human-app-server .env.human-app-server.local @cp ./env-files/.env.job-launcher ./.env.job-launcher.local +# Copying .env files for cvat services @cp ./env-files/.env.exchange-oracle-cvat ./.env.exchange-oracle-cvat.local @cp ./env-files/.env.recording-oracle-cvat ./.env.recording-oracle-cvat.local +# Copying .env files for fortune services + @cp ./env-files/.env.exchange-oracle-fortune ./.env.exchange-oracle-fortune.local # Copying .env files for client apps. # It should be placed in corresponding app folder # because used during Docker image build process diff --git a/scripts/docker-setup/docker-compose.yml b/scripts/docker-setup/docker-compose.yml index 3cc16c454d..5eaae65760 100644 --- a/scripts/docker-setup/docker-compose.yml +++ b/scripts/docker-setup/docker-compose.yml @@ -341,7 +341,7 @@ services: ports: - name: server_port target: *backend_apps_internal_port - published: ${EXCHANGE_ORACLE_EXPOSED_PORT:?} + published: ${EXCHANGE_ORACLE_CVAT_EXPOSED_PORT:?} env_file: ./.env.exchange-oracle-cvat.local environment: HOST: *all_interfaces_ip @@ -388,7 +388,7 @@ services: ports: - name: server_port target: *backend_apps_internal_port - published: ${RECORDING_ORACLE_EXPOSED_PORT:?} + published: ${RECORDING_ORACLE_CVAT_EXPOSED_PORT:?} env_file: ./.env.recording-oracle-cvat.local environment: HOST: *all_interfaces_ip @@ -475,6 +475,39 @@ services: environment: PORT: *frontend_default_port + exchange-oracle-fortune: + container_name: exchange-oracle-fortune + image: human-protocol/exchange-oracle-fortune + pull_policy: build + depends_on: + postgres: + condition: service_healthy + minio: + condition: service_healthy + minio-client: + condition: service_completed_successfully + restart: *default-restart + logging: + <<: *default-logging + build: + context: ../../ + dockerfile: packages/apps/fortune/exchange-oracle/server/Dockerfile + expose: + - *backend_apps_internal_port + networks: + - human_protocol + ports: + - name: server_port + target: *backend_apps_internal_port + published: ${EXCHANGE_ORACLE_FORTUNE_EXPOSED_PORT:?} + env_file: ./.env.exchange-oracle-fortune.local + environment: + <<: [*nodejs_app_vars, *nodejs_app_postgres_vars, *nodejs_app_s3_vars] + HOST: *all_interfaces_ip + PORT: *backend_apps_internal_port + POSTGRES_DATABASE: exchange-oracle-fortune + S3_BUCKET: *bucket_name_fortune + volumes: # When init for the first time postgres requires empty directory # that is exclusive to its user, so providing a separate volume diff --git a/scripts/docker-setup/env-files/.env.compose b/scripts/docker-setup/env-files/.env.compose index 9d6bcb2891..d0c30fc37a 100644 --- a/scripts/docker-setup/env-files/.env.compose +++ b/scripts/docker-setup/env-files/.env.compose @@ -5,8 +5,9 @@ BACKEND_APPS_INTERNAL_PORT=5000 REPUTATION_ORACLE_EXPOSED_PORT=5001 HUMAN_APP_SERVER_EXPOSED_PORT=5002 JOB_LAUNCHER_EXPOSED_PORT=5003 -EXCHANGE_ORACLE_EXPOSED_PORT=5004 -RECORDING_ORACLE_EXPOSED_PORT=5005 +EXCHANGE_ORACLE_CVAT_EXPOSED_PORT=5004 +RECORDING_ORACLE_CVAT_EXPOSED_PORT=5005 +EXCHANGE_ORACLE_FORTUNE_EXPOSED_PORT=5006 HUMAN_APP_CLIENT_EXPOSED_PORT=3001 JOB_LAUNCHER_CLIENT_EXPOSED_PORT=3002 diff --git a/scripts/docker-setup/env-files/.env.exchange-oracle-fortune b/scripts/docker-setup/env-files/.env.exchange-oracle-fortune new file mode 100644 index 0000000000..8315f86b95 --- /dev/null +++ b/scripts/docker-setup/env-files/.env.exchange-oracle-fortune @@ -0,0 +1,36 @@ +WEB3_PRIVATE_KEY=replace_me + +# PGP +PGP_ENCRYPT=true +PGP_PRIVATE_KEY="-----BEGIN PGP PRIVATE KEY BLOCK----- + +xYYEaCsZkBYJKwYBBAHaRw8BAQdA57OtWky46JfMXjUuc0Lb7DhlfLuLYIfI +j/k/vJiuL+D+CQMI2p74jVMUUM3g8z+mhvW3+G5ajp6G3kwqlwMA5GXvbPsI +AwMt8q3dT51U0FpaeFR0vzbokC/3J2yn44MrHT5W1ZaKbWLlx5QGiAqkl9D3 +ec0AwowEEBYKAD4FgmgrGZAECwkHCAmQsDLkiO/wmn8DFQgKBBYAAgECGQEC +mwMCHgEWIQStAYPfywhyBWsDk4WwMuSI7/CafwAAjXYA/AxG1Y6vL3JJnm/0 +8BpA2X1I2mAf36tfpWh79EI1YzcSAQD2Nx6hzzl+zTk9usms4iyl0ZkA5GqR +EQQggrHIZEvKCseLBGgrGZASCisGAQQBl1UBBQEBB0Cf3IqFfpNHTpIM6QQK +z9MtsKJsoaIdoBq5o65jX+v4CQMBCAf+CQMIYLeP6Ua7BsHgqKKEO4VYdHu8 +tIoEcZkDffm5NQ3BmS1c4tYp63d4jxZmkbyw3xHj6QS3D9a7IF+/R2+rrYf1 +Y0HFz1H9TSsJnuvOCf2wiMJ4BBgWCgAqBYJoKxmQCZCwMuSI7/CafwKbDBYh +BK0Bg9/LCHIFawOThbAy5Ijv8Jp/AACRFgEA0cwrCjODyF7GleZK/SHff9xn +oRSkBzq+CCaA/eqQ/ikBALfxC5M+OM7od4w9xKBThNG2M2lC4D9enGU5+cGE +BRoN +=gvnq +-----END PGP PRIVATE KEY BLOCK-----" +PGP_PASSPHRASE=6fD8WuRhT85mxP11PfX +# Put it here just to easily set up KV later; not needed to run +PGP_PUBLIC_KEY="-----BEGIN PGP PUBLIC KEY BLOCK----- + +xjMEaCsZkBYJKwYBBAHaRw8BAQdA57OtWky46JfMXjUuc0Lb7DhlfLuLYIfI +j/k/vJiuL+DNAMKMBBAWCgA+BYJoKxmQBAsJBwgJkLAy5Ijv8Jp/AxUICgQW +AAIBAhkBApsDAh4BFiEErQGD38sIcgVrA5OFsDLkiO/wmn8AAI12APwMRtWO +ry9ySZ5v9PAaQNl9SNpgH9+rX6Voe/RCNWM3EgEA9jceoc85fs05PbrJrOIs +pdGZAORqkREEIIKxyGRLygrOOARoKxmQEgorBgEEAZdVAQUBAQdAn9yKhX6T +R06SDOkECs/TLbCibKGiHaAauaOuY1/r+AkDAQgHwngEGBYKACoFgmgrGZAJ +kLAy5Ijv8Jp/ApsMFiEErQGD38sIcgVrA5OFsDLkiO/wmn8AAJEWAQDRzCsK +M4PIXsaV5kr9Id9/3GehFKQHOr4IJoD96pD+KQEAt/ELkz44zuh3jD3EoFOE +0bYzaULgP16cZTn5wYQFGg0= +=ppFH +-----END PGP PUBLIC KEY BLOCK-----" diff --git a/yarn.lock b/yarn.lock index e10b08aa6b..c575ec33a1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4011,19 +4011,29 @@ __metadata: "@nestjs/axios": "npm:^3.1.2" "@nestjs/cli": "npm:^10.3.2" "@nestjs/common": "npm:^10.2.7" + "@nestjs/config": "npm:^3.1.1" "@nestjs/core": "npm:^10.3.10" + "@nestjs/passport": "npm:^10.0.0" + "@nestjs/platform-express": "npm:^10.3.10" + "@nestjs/schedule": "npm:^4.0.1" "@nestjs/schematics": "npm:^11.0.2" + "@nestjs/swagger": "npm:^7.4.2" "@nestjs/terminus": "npm:^11.0.0" "@nestjs/testing": "npm:^10.4.6" "@nestjs/typeorm": "npm:^10.0.1" + "@types/body-parser": "npm:^1" "@types/express": "npm:^4.17.13" "@types/jest": "npm:29.5.12" + "@types/jsonwebtoken": "npm:^9.0.7" "@types/node": "npm:22.10.5" + "@types/passport": "npm:^0" + "@types/passport-jwt": "npm:^4.0.1" "@types/pg": "npm:8.11.10" "@types/supertest": "npm:^6.0.2" "@typescript-eslint/eslint-plugin": "npm:^5.0.0" "@typescript-eslint/parser": "npm:^5.0.0" axios: "npm:^1.3.1" + body-parser: "npm:^1.20.3" class-transformer: "npm:^0.5.1" class-validator: "npm:0.14.1" eslint: "npm:^8.55.0" @@ -4032,6 +4042,9 @@ __metadata: ethers: "npm:~6.13.5" jest: "npm:29.7.0" joi: "npm:^17.13.3" + jsonwebtoken: "npm:^9.0.2" + passport: "npm:^0.7.0" + passport-jwt: "npm:^4.0.1" pg: "npm:8.13.1" prettier: "npm:^3.4.2" reflect-metadata: "npm:^0.2.2" @@ -9336,7 +9349,7 @@ __metadata: languageName: node linkType: hard -"@types/body-parser@npm:*": +"@types/body-parser@npm:*, @types/body-parser@npm:^1": version: 1.19.5 resolution: "@types/body-parser@npm:1.19.5" dependencies: @@ -9882,6 +9895,15 @@ __metadata: languageName: node linkType: hard +"@types/passport@npm:^0": + version: 0.4.7 + resolution: "@types/passport@npm:0.4.7" + dependencies: + "@types/express": "npm:*" + checksum: 10c0/58ca21800b7910385961b7a3dc9071fc9db6223242b96ff88d16c9d004ce7173524e7c17c63363595565af3f85ad932ee301efc8cc3e378bea172eebc9e07703 + languageName: node + linkType: hard + "@types/pbkdf2@npm:^3.0.0": version: 3.1.2 resolution: "@types/pbkdf2@npm:3.1.2" From 7e64bb680eb892848792adce3ad884d1bd20b7b8 Mon Sep 17 00:00:00 2001 From: Dmitry Nechay Date: Tue, 20 May 2025 16:58:44 +0300 Subject: [PATCH 17/29] feat: fortune client in docker --- packages/apps/dashboard/client/vite.config.ts | 2 +- packages/apps/faucet/client/vite.config.ts | 2 +- .../exchange-oracle/client/package.json | 3 +++ .../exchange-oracle/client/vite.config.ts | 2 +- .../common/config/server-config.service.ts | 4 ++-- .../apps/job-launcher/server/.env.example | 2 +- .../common/config/server-config.service.ts | 4 ++-- packages/apps/staking/.env.example | 2 +- packages/apps/staking/vite.config.ts | 2 +- scripts/docker-setup/Makefile | 1 + scripts/docker-setup/docker-compose.yml | 24 +++++++++++++++++++ scripts/docker-setup/env-files/.env.compose | 1 + .../env-files/.env.fortune-client | 8 +++++++ scripts/fortune/.env.jl-server | 2 +- yarn.lock | 3 +++ 15 files changed, 51 insertions(+), 11 deletions(-) create mode 100644 scripts/docker-setup/env-files/.env.fortune-client diff --git a/packages/apps/dashboard/client/vite.config.ts b/packages/apps/dashboard/client/vite.config.ts index 1b09be19f5..9f7cc79504 100644 --- a/packages/apps/dashboard/client/vite.config.ts +++ b/packages/apps/dashboard/client/vite.config.ts @@ -36,6 +36,6 @@ export default defineConfig({ }, }, server: { - port: 3003, + port: 3004, }, }); diff --git a/packages/apps/faucet/client/vite.config.ts b/packages/apps/faucet/client/vite.config.ts index af6774fe6c..3c407bc5d4 100644 --- a/packages/apps/faucet/client/vite.config.ts +++ b/packages/apps/faucet/client/vite.config.ts @@ -33,7 +33,7 @@ export default defineConfig(({ mode }) => { }, }, server: { - port: 3005, + port: 3006, }, }; }); diff --git a/packages/apps/fortune/exchange-oracle/client/package.json b/packages/apps/fortune/exchange-oracle/client/package.json index 99f47b94f3..e6c3b2b24d 100644 --- a/packages/apps/fortune/exchange-oracle/client/package.json +++ b/packages/apps/fortune/exchange-oracle/client/package.json @@ -27,7 +27,10 @@ ] }, "dependencies": { + "@emotion/react": "^11.11.3", + "@emotion/styled": "^11.11.0", "@human-protocol/sdk": "workspace:^", + "@mui/icons-material": "^7.0.1", "@mui/material": "^5.16.7", "@tanstack/query-sync-storage-persister": "^5.68.0", "@tanstack/react-query": "^5.67.2", diff --git a/packages/apps/fortune/exchange-oracle/client/vite.config.ts b/packages/apps/fortune/exchange-oracle/client/vite.config.ts index 147fdcb76f..9dd2c1afd3 100644 --- a/packages/apps/fortune/exchange-oracle/client/vite.config.ts +++ b/packages/apps/fortune/exchange-oracle/client/vite.config.ts @@ -25,6 +25,6 @@ export default defineConfig({ }, }, server: { - port: 3006, + port: 3003, }, }); diff --git a/packages/apps/fortune/exchange-oracle/server/src/common/config/server-config.service.ts b/packages/apps/fortune/exchange-oracle/server/src/common/config/server-config.service.ts index 130dbabd19..7b140780c5 100644 --- a/packages/apps/fortune/exchange-oracle/server/src/common/config/server-config.service.ts +++ b/packages/apps/fortune/exchange-oracle/server/src/common/config/server-config.service.ts @@ -31,10 +31,10 @@ export class ServerConfigService { /** * The URL of the frontend application that the server will communicate with. - * Default: 'http://localhost:3005' + * Default: 'http://localhost:3003' */ get feURL(): string { - return this.configService.get('FE_URL', 'http://localhost:3006'); + return this.configService.get('FE_URL', 'http://localhost:3003'); } /** diff --git a/packages/apps/job-launcher/server/.env.example b/packages/apps/job-launcher/server/.env.example index f7ca57ff7a..00453220c9 100644 --- a/packages/apps/job-launcher/server/.env.example +++ b/packages/apps/job-launcher/server/.env.example @@ -1,7 +1,7 @@ # General HOST=0.0.0.0 PORT=5003 -FE_URL=http://localhost:3001 +FE_URL=http://localhost:3002 # Database POSTGRES_HOST=0.0.0.0 diff --git a/packages/apps/job-launcher/server/src/common/config/server-config.service.ts b/packages/apps/job-launcher/server/src/common/config/server-config.service.ts index 50ff98a9c3..6f26a2a109 100644 --- a/packages/apps/job-launcher/server/src/common/config/server-config.service.ts +++ b/packages/apps/job-launcher/server/src/common/config/server-config.service.ts @@ -31,10 +31,10 @@ export class ServerConfigService { /** * The URL of the frontend application that the server will communicate with. - * Default: 'http://localhost:3005' + * Default: 'http://localhost:3002' */ get feURL(): string { - return this.configService.get('FE_URL', 'http://localhost:3005'); + return this.configService.get('FE_URL', 'http://localhost:3002'); } /** diff --git a/packages/apps/staking/.env.example b/packages/apps/staking/.env.example index 133e06660d..6108cf5bc5 100644 --- a/packages/apps/staking/.env.example +++ b/packages/apps/staking/.env.example @@ -4,7 +4,7 @@ VITE_APP_ENVIRONMENT=testnet VITE_APP_SUPPORTED_CHAINS=80002 # Links to header -VITE_HEADER_LINK_DASHBOARD=http://localhost:3003 +VITE_HEADER_LINK_DASHBOARD=http://localhost:3004 # Links to footer socials VITE_FOOTER_LINK_GITHUB=https://github.com/humanprotocol/human-protocol diff --git a/packages/apps/staking/vite.config.ts b/packages/apps/staking/vite.config.ts index 4b39891a43..fd034b78df 100644 --- a/packages/apps/staking/vite.config.ts +++ b/packages/apps/staking/vite.config.ts @@ -33,6 +33,6 @@ export default defineConfig({ }, }, server: { - port: 3004, + port: 3005, }, }); diff --git a/scripts/docker-setup/Makefile b/scripts/docker-setup/Makefile index e052903566..74fb3d06ef 100644 --- a/scripts/docker-setup/Makefile +++ b/scripts/docker-setup/Makefile @@ -17,5 +17,6 @@ copy-env-files: # because used during Docker image build process @cp ./env-files/.env.human-app-client ../../packages/apps/human-app/frontend/.env.local @cp ./env-files/.env.job-launcher-client ../../packages/apps/job-launcher/client/.env.local + @cp ./env-files/.env.fortune-client ../../packages/apps/fortune/exchange-oracle/client/.env.local # Restore original files @git checkout . > /dev/null 2>&1 \ No newline at end of file diff --git a/scripts/docker-setup/docker-compose.yml b/scripts/docker-setup/docker-compose.yml index 5eaae65760..550f2365c2 100644 --- a/scripts/docker-setup/docker-compose.yml +++ b/scripts/docker-setup/docker-compose.yml @@ -508,6 +508,30 @@ services: POSTGRES_DATABASE: exchange-oracle-fortune S3_BUCKET: *bucket_name_fortune + fortune-client: + container_name: fortune-client + image: human-protocol/fortune-client + pull_policy: build + depends_on: + exchange-oracle-fortune: + condition: service_started + restart: *default-restart + logging: + <<: *default-logging + build: + context: ../../ + dockerfile: packages/apps/fortune/exchange-oracle/client/Dockerfile + expose: + - *frontend_default_port + networks: + - human_protocol + ports: + - name: server_port + target: *frontend_default_port + published: ${FORTUNE_CLIENT_EXPOSED_PORT:?} + environment: + PORT: *frontend_default_port + volumes: # When init for the first time postgres requires empty directory # that is exclusive to its user, so providing a separate volume diff --git a/scripts/docker-setup/env-files/.env.compose b/scripts/docker-setup/env-files/.env.compose index d0c30fc37a..4261ffe3ab 100644 --- a/scripts/docker-setup/env-files/.env.compose +++ b/scripts/docker-setup/env-files/.env.compose @@ -11,6 +11,7 @@ EXCHANGE_ORACLE_FORTUNE_EXPOSED_PORT=5006 HUMAN_APP_CLIENT_EXPOSED_PORT=3001 JOB_LAUNCHER_CLIENT_EXPOSED_PORT=3002 +FORTUNE_CLIENT_EXPOSED_PORT=3003 HUMAN_APP_SECRET_KEY=sk_local_3Hc0kWL9Y8iwyHucW636Cl7tfFZI0rAUljPEbbfDrok REPUTATION_ORACLE_JWT_PUBLIC_KEY="-----BEGIN PUBLIC KEY----- diff --git a/scripts/docker-setup/env-files/.env.fortune-client b/scripts/docker-setup/env-files/.env.fortune-client new file mode 100644 index 0000000000..edcb923458 --- /dev/null +++ b/scripts/docker-setup/env-files/.env.fortune-client @@ -0,0 +1,8 @@ +# General +VITE_APP_EXCHANGE_ORACLE_SERVER_URL=http://0.0.0.0:5006 +VITE_APP_WALLETCONNECT_PROJECT_ID=replace_me + +# Web3 +VITE_APP_ENVIRONMENT=testnet +VITE_APP_SUPPORTED_CHAINS=80002 +VITE_APP_RPC_URL_POLYGON_AMOY=https://rpc-amoy.polygon.technology \ No newline at end of file diff --git a/scripts/fortune/.env.jl-server b/scripts/fortune/.env.jl-server index f110c2637d..dbb026aa83 100644 --- a/scripts/fortune/.env.jl-server +++ b/scripts/fortune/.env.jl-server @@ -2,7 +2,7 @@ NODE_ENV=development HOST=localhost PORT=5000 -FE_URL=http://localhost:3005 +FE_URL=http://localhost:3002 SESSION_SECRET=test # Database diff --git a/yarn.lock b/yarn.lock index c575ec33a1..dd395799de 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3973,7 +3973,10 @@ __metadata: version: 0.0.0-use.local resolution: "@human-protocol/fortune-exchange-oracle-client@workspace:packages/apps/fortune/exchange-oracle/client" dependencies: + "@emotion/react": "npm:^11.11.3" + "@emotion/styled": "npm:^11.11.0" "@human-protocol/sdk": "workspace:^" + "@mui/icons-material": "npm:^7.0.1" "@mui/material": "npm:^5.16.7" "@tanstack/query-sync-storage-persister": "npm:^5.68.0" "@tanstack/react-query": "npm:^5.67.2" From a4054278dea3affe90935b154a8d373741674254 Mon Sep 17 00:00:00 2001 From: Dmitry Nechay Date: Tue, 20 May 2025 17:20:09 +0300 Subject: [PATCH 18/29] feat: fortune reco in docker --- .../fortune/recording-oracle/package.json | 3 ++ scripts/docker-setup/Makefile | 1 + scripts/docker-setup/docker-compose.yml | 30 +++++++++++++++ scripts/docker-setup/env-files/.env.compose | 1 + .../env-files/.env.recording-oracle-fortune | 37 +++++++++++++++++++ yarn.lock | 3 ++ 6 files changed, 75 insertions(+) create mode 100644 scripts/docker-setup/env-files/.env.recording-oracle-fortune diff --git a/packages/apps/fortune/recording-oracle/package.json b/packages/apps/fortune/recording-oracle/package.json index a2a45defba..b89aef5fa8 100644 --- a/packages/apps/fortune/recording-oracle/package.json +++ b/packages/apps/fortune/recording-oracle/package.json @@ -30,11 +30,14 @@ "@nestjs/common": "^10.2.7", "@nestjs/config": "^3.1.1", "@nestjs/core": "^10.3.10", + "@nestjs/platform-express": "^10.3.10", "@nestjs/swagger": "^7.4.2", "axios": "^1.3.1", "body-parser": "^1.20.2", + "class-transformer": "^0.5.1", "class-validator": "0.14.1", "helmet": "^7.1.0", + "joi": "^17.13.3", "reflect-metadata": "^0.2.2", "rxjs": "^7.2.0" }, diff --git a/scripts/docker-setup/Makefile b/scripts/docker-setup/Makefile index 74fb3d06ef..02bbb79cac 100644 --- a/scripts/docker-setup/Makefile +++ b/scripts/docker-setup/Makefile @@ -12,6 +12,7 @@ copy-env-files: @cp ./env-files/.env.recording-oracle-cvat ./.env.recording-oracle-cvat.local # Copying .env files for fortune services @cp ./env-files/.env.exchange-oracle-fortune ./.env.exchange-oracle-fortune.local + @cp ./env-files/.env.recording-oracle-fortune ./.env.recording-oracle-fortune.local # Copying .env files for client apps. # It should be placed in corresponding app folder # because used during Docker image build process diff --git a/scripts/docker-setup/docker-compose.yml b/scripts/docker-setup/docker-compose.yml index 550f2365c2..47341bf20d 100644 --- a/scripts/docker-setup/docker-compose.yml +++ b/scripts/docker-setup/docker-compose.yml @@ -532,6 +532,36 @@ services: environment: PORT: *frontend_default_port + recording-oracle-fortune: + container_name: recording-oracle-fortune + image: human-protocol/recording-oracle-fortune + pull_policy: build + depends_on: + minio: + condition: service_healthy + minio-client: + condition: service_completed_successfully + restart: *default-restart + logging: + <<: *default-logging + build: + context: ../../ + dockerfile: packages/apps/fortune/recording-oracle/Dockerfile + expose: + - *backend_apps_internal_port + networks: + - human_protocol + ports: + - name: server_port + target: *backend_apps_internal_port + published: ${RECORDING_ORACLE_FORTUNE_EXPOSED_PORT:?} + env_file: ./.env.recording-oracle-fortune.local + environment: + <<: [*nodejs_app_vars, *nodejs_app_s3_vars] + HOST: *all_interfaces_ip + PORT: *backend_apps_internal_port + S3_BUCKET: *bucket_name_fortune + volumes: # When init for the first time postgres requires empty directory # that is exclusive to its user, so providing a separate volume diff --git a/scripts/docker-setup/env-files/.env.compose b/scripts/docker-setup/env-files/.env.compose index 4261ffe3ab..494d5ce9c8 100644 --- a/scripts/docker-setup/env-files/.env.compose +++ b/scripts/docker-setup/env-files/.env.compose @@ -8,6 +8,7 @@ JOB_LAUNCHER_EXPOSED_PORT=5003 EXCHANGE_ORACLE_CVAT_EXPOSED_PORT=5004 RECORDING_ORACLE_CVAT_EXPOSED_PORT=5005 EXCHANGE_ORACLE_FORTUNE_EXPOSED_PORT=5006 +RECORDING_ORACLE_FORTUNE_EXPOSED_PORT=5007 HUMAN_APP_CLIENT_EXPOSED_PORT=3001 JOB_LAUNCHER_CLIENT_EXPOSED_PORT=3002 diff --git a/scripts/docker-setup/env-files/.env.recording-oracle-fortune b/scripts/docker-setup/env-files/.env.recording-oracle-fortune new file mode 100644 index 0000000000..29b935af83 --- /dev/null +++ b/scripts/docker-setup/env-files/.env.recording-oracle-fortune @@ -0,0 +1,37 @@ +# Web3 +WEB3_PRIVATE_KEY=replace_me + +# Encryption +PGP_ENCRYPT=true +PGP_PRIVATE_KEY="-----BEGIN PGP PRIVATE KEY BLOCK----- + +xYYEaCsnrRYJKwYBBAHaRw8BAQdADWMKa+9YvRJV474d+BDsLv7a+aSkMMkR +FZOWJG1ePjT+CQMIZhNMm+tnPeTgihnx8ru0E3sqYcofEvRM9VrSIyrs/U+H +LsK5rsa+NV8Ui+9cKcmtCW4EJ12LNmTg1xYJsxQnn4eZQzSmlMkK5N61KyJ+ +zM0AwowEEBYKAD4FgmgrJ60ECwkHCAmQuTtXvy2rDmoDFQgKBBYAAgECGQEC +mwMCHgEWIQRhezz+qPdIIiGIyyS5O1e/LasOagAASiUBAL2ngIhlne91+Z7h +RHU0F4ENomy/e1S6w/gn/dVLfE1OAP9ZG9x1gksN1R1O9Fgq1WfGkHNJi/8U +DF7yO8H8sDw2D8eLBGgrJ60SCisGAQQBl1UBBQEBB0A9v5ubU6UB6C9yoUPc +Zqu8ZyQHa55VFR3figyExeVtRwMBCAf+CQMIU0kTC9Fq7ozgh/iv/ybvydCJ +pdU7fNuD2Ipb4ZfRVMrogkQLolOKgRd8468OSoNFuk4RnYkBsyafZmI4KGkG ++oroKa+1mThKi6ePu7GO/cJ4BBgWCgAqBYJoKyetCZC5O1e/LasOagKbDBYh +BGF7PP6o90giIYjLJLk7V78tqw5qAACsjwD+O/d9B6wJDDd2FRp3JmZPt/sJ +vyg2sQLiIXbjACHXCI4BALbO+tfsyeSxYiK0j67etKnFzoG+1ek1vukDdIf7 +tMcN +=qkIF +-----END PGP PRIVATE KEY BLOCK-----" +PGP_PASSPHRASE=tt8Bn946gusiJm4r5wX +# Put it here just to easily set up KV later; not needed to run +PGP_PUBLIC_KEY="-----BEGIN PGP PUBLIC KEY BLOCK----- + +xjMEaCsnrRYJKwYBBAHaRw8BAQdADWMKa+9YvRJV474d+BDsLv7a+aSkMMkR +FZOWJG1ePjTNAMKMBBAWCgA+BYJoKyetBAsJBwgJkLk7V78tqw5qAxUICgQW +AAIBAhkBApsDAh4BFiEEYXs8/qj3SCIhiMskuTtXvy2rDmoAAEolAQC9p4CI +ZZ3vdfme4UR1NBeBDaJsv3tUusP4J/3VS3xNTgD/WRvcdYJLDdUdTvRYKtVn +xpBzSYv/FAxe8jvB/LA8Ng/OOARoKyetEgorBgEEAZdVAQUBAQdAPb+bm1Ol +AegvcqFD3GarvGckB2ueVRUd34oMhMXlbUcDAQgHwngEGBYKACoFgmgrJ60J +kLk7V78tqw5qApsMFiEEYXs8/qj3SCIhiMskuTtXvy2rDmoAAKyPAP47930H +rAkMN3YVGncmZk+3+wm/KDaxAuIhduMAIdcIjgEAts761+zJ5LFiIrSPrt60 +qcXOgb7V6TW+6QN0h/u0xw0= +=Hpds +-----END PGP PUBLIC KEY BLOCK-----" diff --git a/yarn.lock b/yarn.lock index dd395799de..4cdf52157f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4073,6 +4073,7 @@ __metadata: "@nestjs/common": "npm:^10.2.7" "@nestjs/config": "npm:^3.1.1" "@nestjs/core": "npm:^10.3.10" + "@nestjs/platform-express": "npm:^10.3.10" "@nestjs/schematics": "npm:^11.0.2" "@nestjs/swagger": "npm:^7.4.2" "@nestjs/testing": "npm:^10.4.6" @@ -4080,10 +4081,12 @@ __metadata: "@types/node": "npm:^22.15.16" axios: "npm:^1.3.1" body-parser: "npm:^1.20.2" + class-transformer: "npm:^0.5.1" class-validator: "npm:0.14.1" eslint: "npm:^8.55.0" helmet: "npm:^7.1.0" jest: "npm:^29.7.0" + joi: "npm:^17.13.3" prettier: "npm:^3.4.2" reflect-metadata: "npm:^0.2.2" rxjs: "npm:^7.2.0" From 0aba51ce3c808df2f255d4a71beb696531cac2d7 Mon Sep 17 00:00:00 2001 From: Dmitry Nechay Date: Wed, 21 May 2025 11:04:18 +0300 Subject: [PATCH 19/29] fix: remove unused rpc from client apps --- .../fortune/exchange-oracle/client/.env.example | 3 +-- packages/apps/job-launcher/client/.env.example | 1 - .../apps/job-launcher/client/src/vite-env.d.ts | 15 --------------- 3 files changed, 1 insertion(+), 18 deletions(-) diff --git a/packages/apps/fortune/exchange-oracle/client/.env.example b/packages/apps/fortune/exchange-oracle/client/.env.example index edcb923458..1956902a37 100644 --- a/packages/apps/fortune/exchange-oracle/client/.env.example +++ b/packages/apps/fortune/exchange-oracle/client/.env.example @@ -4,5 +4,4 @@ VITE_APP_WALLETCONNECT_PROJECT_ID=replace_me # Web3 VITE_APP_ENVIRONMENT=testnet -VITE_APP_SUPPORTED_CHAINS=80002 -VITE_APP_RPC_URL_POLYGON_AMOY=https://rpc-amoy.polygon.technology \ No newline at end of file +VITE_APP_SUPPORTED_CHAINS=80002 \ No newline at end of file diff --git a/packages/apps/job-launcher/client/.env.example b/packages/apps/job-launcher/client/.env.example index 575d6bc774..6c6209f0dc 100644 --- a/packages/apps/job-launcher/client/.env.example +++ b/packages/apps/job-launcher/client/.env.example @@ -11,4 +11,3 @@ VITE_APP_HCAPTCHA_SITE_KEY=10000000-ffff-ffff-ffff-000000000001 # Web3 VITE_APP_ENVIRONMENT=testnet VITE_APP_SUPPORTED_CHAINS=80002 -VITE_APP_RPC_URL_POLYGON_AMOY=https://rpc-amoy.polygon.technology diff --git a/packages/apps/job-launcher/client/src/vite-env.d.ts b/packages/apps/job-launcher/client/src/vite-env.d.ts index 36339cae4f..a4d7339cd6 100644 --- a/packages/apps/job-launcher/client/src/vite-env.d.ts +++ b/packages/apps/job-launcher/client/src/vite-env.d.ts @@ -6,21 +6,6 @@ interface ImportMetaEnv { readonly VITE_APP_STRIPE_PUBLISHABLE_KEY: string; readonly VITE_APP_HCAPTCHA_SITE_KEY: string; readonly VITE_APP_ENVIRONMENT: string; - - readonly VITE_APP_RPC_URL_MAINNET: string; - readonly VITE_APP_RPC_URL_SEPOLIA: string; - readonly VITE_APP_RPC_URL_BSC_MAINNET: string; - readonly VITE_APP_RPC_URL_BSC_TESTNET: string; - readonly VITE_APP_RPC_URL_POLYGON: string; - readonly VITE_APP_RPC_URL_POLYGON_AMOY: string; - readonly VITE_APP_RPC_URL_MOONBEAM: string; - readonly VITE_APP_RPC_URL_MOONBASE_ALPHA: string; - readonly VITE_APP_RPC_URL_AVALANCHE: string; - readonly VITE_APP_RPC_URL_AVALANCHE_TESTNET: string; - readonly VITE_APP_RPC_URL_CELO: string; - readonly VITE_APP_RPC_URL_CELO_ALFAJORES: string; - readonly VITE_APP_RPC_URL_XLAYER: string; - readonly VITE_APP_RPC_URL_XLAYER_TESTNET: string; } interface ImportMeta { From cf3a2effdbce1361ff12c3f4384b287f37b4aa14 Mon Sep 17 00:00:00 2001 From: Dmitry Nechay Date: Wed, 21 May 2025 11:55:32 +0300 Subject: [PATCH 20/29] chore: fortune deps and unused script --- .../exchange-oracle/server/package.json | 2 + .../server/scripts/set-manifest-url.ts | 67 ------------------- yarn.lock | 2 + 3 files changed, 4 insertions(+), 67 deletions(-) delete mode 100644 packages/apps/fortune/exchange-oracle/server/scripts/set-manifest-url.ts diff --git a/packages/apps/fortune/exchange-oracle/server/package.json b/packages/apps/fortune/exchange-oracle/server/package.json index 4cd313d4c0..017f103e9b 100644 --- a/packages/apps/fortune/exchange-oracle/server/package.json +++ b/packages/apps/fortune/exchange-oracle/server/package.json @@ -45,9 +45,11 @@ "body-parser": "^1.20.3", "class-transformer": "^0.5.1", "class-validator": "0.14.1", + "dotenv": "^16.3.2", "ethers": "~6.13.5", "joi": "^17.13.3", "jsonwebtoken": "^9.0.2", + "minio": "7.1.3", "passport": "^0.7.0", "passport-jwt": "^4.0.1", "pg": "8.13.1", diff --git a/packages/apps/fortune/exchange-oracle/server/scripts/set-manifest-url.ts b/packages/apps/fortune/exchange-oracle/server/scripts/set-manifest-url.ts deleted file mode 100644 index 3dc3946559..0000000000 --- a/packages/apps/fortune/exchange-oracle/server/scripts/set-manifest-url.ts +++ /dev/null @@ -1,67 +0,0 @@ -//This script reads manifest urls from the blockchain and set them in the database in the new column manifest_url - -import { EscrowClient } from '@human-protocol/sdk'; -import * as dotenv from 'dotenv'; -import { Client } from 'pg'; -import { ethers } from 'ethers'; - -dotenv.config({ - path: '.env', -}); - -const dbConfig = { - user: process.env.POSTGRES_USER, - host: process.env.POSTGRES_HOST, - database: process.env.POSTGRES_DATABASE, - password: process.env.POSTGRES_PASSWORD, - port: +process.env.POSTGRES_PORT!, - ssl: process.env.POSTGRES_SSL == 'true', -}; - -async function createProvider() { - const provider = new ethers.JsonRpcProvider(process.env.RPC_URL); - return provider; -} - -async function updateJobsWithManifestUrls() { - const client = new Client(dbConfig); - - try { - await client.connect(); - - const provider = await createProvider(); - const escrowClient = await EscrowClient.build(provider); - - console.log('Connected to the database.'); - - const res = await client.query( - 'SELECT * FROM "hmt"."jobs" WHERE manifest_url IS NULL', - ); - const jobsWithoutManifest = res.rows; - - for (const job of jobsWithoutManifest) { - const { escrow_address: escrowAddress, id } = job; - - try { - const manifestUrl = await escrowClient.getManifestUrl(escrowAddress); - - if (manifestUrl) { - await client.query( - 'UPDATE "hmt"."jobs" SET manifest_url = $1 WHERE id = $2', - [manifestUrl, id], - ); - console.log(`Updated job ${id} with manifestUrl: ${manifestUrl}`); - } - } catch (error) { - console.error(`Failed to update job ${id}:`, error); - } - } - } catch (error) { - console.error('Failed to update manifest URLs:', error); - } finally { - await client.end(); - console.log('Disconnected from the database.'); - } -} - -updateJobsWithManifestUrls(); diff --git a/yarn.lock b/yarn.lock index 4cdf52157f..8e91d05851 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4039,6 +4039,7 @@ __metadata: body-parser: "npm:^1.20.3" class-transformer: "npm:^0.5.1" class-validator: "npm:0.14.1" + dotenv: "npm:^16.3.2" eslint: "npm:^8.55.0" eslint-config-prettier: "npm:^9.1.0" eslint-plugin-prettier: "npm:^5.2.1" @@ -4046,6 +4047,7 @@ __metadata: jest: "npm:29.7.0" joi: "npm:^17.13.3" jsonwebtoken: "npm:^9.0.2" + minio: "npm:7.1.3" passport: "npm:^0.7.0" passport-jwt: "npm:^4.0.1" pg: "npm:8.13.1" From 7c749f8fde9cf9123262f7cbc5ae3b86a1bc0386 Mon Sep 17 00:00:00 2001 From: Dmitry Nechay Date: Wed, 21 May 2025 13:41:35 +0300 Subject: [PATCH 21/29] feat: add setup kv store scripts --- .../exchange-oracle/server/package.json | 3 +- .../server/scripts/setup-kv-store.ts | 152 +++++++++++++++++ .../fortune/recording-oracle/package.json | 6 +- .../scripts/setup-kv-store.ts | 152 +++++++++++++++++ .../apps/job-launcher/server/package.json | 5 +- .../server/scripts/setup-kv-store.ts | 157 ++++++++++++++++++ .../reputation-oracle/server/package.json | 3 +- .../server/scripts/setup-kv-store.ts | 52 +++--- scripts/docker-setup/docker-compose.yml | 14 +- scripts/docker-setup/env-files/.env.compose | 4 +- yarn.lock | 4 + 11 files changed, 515 insertions(+), 37 deletions(-) create mode 100644 packages/apps/fortune/exchange-oracle/server/scripts/setup-kv-store.ts create mode 100644 packages/apps/fortune/recording-oracle/scripts/setup-kv-store.ts create mode 100644 packages/apps/job-launcher/server/scripts/setup-kv-store.ts diff --git a/packages/apps/fortune/exchange-oracle/server/package.json b/packages/apps/fortune/exchange-oracle/server/package.json index 017f103e9b..f808bbe57a 100644 --- a/packages/apps/fortune/exchange-oracle/server/package.json +++ b/packages/apps/fortune/exchange-oracle/server/package.json @@ -20,12 +20,11 @@ "migration:revert": "yarn build && typeorm-ts-node-commonjs migration:revert -d typeorm.config.ts", "migration:run": "yarn build && typeorm-ts-node-commonjs migration:run -d typeorm.config.ts", "migration:show": "yarn build && typeorm-ts-node-commonjs migration:show -d typeorm.config.ts", - "docker:db:up": "docker compose up -d && yarn migration:run", - "docker:db:down": "docker compose down", "test:watch": "jest --watch", "test:cov": "jest --coverage", "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand", "setup:local": "ts-node ./test/setup.ts", + "setup:kvstore": "ts-node ./scripts/setup-kv-store.ts", "generate-env-doc": "ts-node scripts/generate-env-doc.ts" }, "dependencies": { diff --git a/packages/apps/fortune/exchange-oracle/server/scripts/setup-kv-store.ts b/packages/apps/fortune/exchange-oracle/server/scripts/setup-kv-store.ts new file mode 100644 index 0000000000..d7344a3d54 --- /dev/null +++ b/packages/apps/fortune/exchange-oracle/server/scripts/setup-kv-store.ts @@ -0,0 +1,152 @@ +import 'dotenv/config'; +import { KVStoreClient, KVStoreKeys, Role } from '@human-protocol/sdk'; +import { Wallet, ethers } from 'ethers'; +import * as Minio from 'minio'; + +const SUPPORTED_JOB_TYPES = 'fortune'; +const ROLE = Role.ExchangeOracle; + +async function setupCommonValues(kvStoreClient: KVStoreClient): Promise { + const { SERVER_URL = 'http://localhost:5006', FEE = '1' } = process.env; + + if (SUPPORTED_JOB_TYPES.split(',').length === 0) { + throw new Error('SUPPORTED_JOB_TYPES should be comma-separated list'); + } + try { + new URL(SERVER_URL || ''); + } catch (noop) { + throw new Error('Invalid SERVER_URL'); + } + let url = SERVER_URL.endsWith('/') ? SERVER_URL.slice(0, -1) : SERVER_URL; + if (!url.startsWith('http')) { + url = `http://${url}`; + } + + const fee = Number(FEE); + if (!Number.isInteger(fee) || fee < 1) { + throw new Error('Fee must be positive integer'); + } + + await kvStoreClient.setBulk( + [ + KVStoreKeys.role, + KVStoreKeys.fee, + KVStoreKeys.url, + KVStoreKeys.webhookUrl, + KVStoreKeys.jobTypes, + ], + [ROLE, fee.toString(), url, `${url}/webhook`, SUPPORTED_JOB_TYPES], + ); +} + +type SetupPublicKeyFileMeta = { + keyName: string; + publicKey: string; + s3Bucket: string; + s3Endpoint: string; + s3Port: string; + kvKey: string; +}; + +async function setupPublicKeyFile( + kvStoreClient: KVStoreClient, + minioClient: Minio.Client, + meta: SetupPublicKeyFileMeta, +): Promise { + const { keyName, kvKey, publicKey, s3Bucket, s3Endpoint, s3Port } = meta; + const exists = await minioClient.bucketExists(s3Bucket); + if (!exists) { + throw new Error('Bucket does not exists'); + } + + await minioClient.putObject(s3Bucket, keyName, publicKey, { + 'Content-Type': 'text/plain', + 'Cache-Control': 'no-store', + }); + /** + * Protocol is required for 'setFileUrlAndHash' + */ + const _s3Endpoint = s3Endpoint.startsWith('http') + ? s3Endpoint + : `http://${s3Endpoint}`; + const fileUrl = `${_s3Endpoint}:${s3Port}/${s3Bucket}/${keyName}`; + await kvStoreClient.setFileUrlAndHash(fileUrl, kvKey); +} + +async function setup(): Promise { + const { WEB3_PRIVATE_KEY, RPC_URL_POLYGON_AMOY: RPC_URL } = process.env; + if (!WEB3_PRIVATE_KEY) { + throw new Error('Private key is empty'); + } + if (!RPC_URL) { + throw new Error('RPC url is empty'); + } + + const provider = new ethers.JsonRpcProvider(RPC_URL); + const wallet = new Wallet(WEB3_PRIVATE_KEY, provider); + + const kvStoreClient = await KVStoreClient.build(wallet); + + await setupCommonValues(kvStoreClient); + + const { + S3_ENDPOINT, + S3_PORT, + S3_USE_SSL, + S3_ACCESS_KEY, + S3_SECRET_KEY, + S3_BUCKET, + } = process.env; + + if ( + [S3_ENDPOINT, S3_PORT, S3_ACCESS_KEY, S3_SECRET_KEY, S3_BUCKET].some( + (value) => !value, + ) + ) { + throw new Error('Missing S3 config value'); + } + + const s3Endpoint = S3_ENDPOINT as string; + const s3Port = S3_PORT as string; + const s3AccessKey = S3_ACCESS_KEY as string; + const s3SecretKey = S3_SECRET_KEY as string; + const s3Bucket = S3_BUCKET as string; + + const minioClient = new Minio.Client({ + endPoint: s3Endpoint, + port: parseInt(s3Port, 10), + useSSL: S3_USE_SSL === 'true', + accessKey: s3AccessKey, + secretKey: s3SecretKey, + }); + + const { + PGP_ENCRYPT, + PGP_PUBLIC_KEY, + PGP_PUBLIC_KEY_FILE = 'pgp-public-key-exco', + } = process.env; + if (PGP_ENCRYPT && PGP_ENCRYPT === 'true') { + if (!PGP_PUBLIC_KEY) { + throw new Error('PGP public key is empty'); + } + + await setupPublicKeyFile(kvStoreClient, minioClient, { + s3Endpoint, + s3Port, + s3Bucket, + publicKey: PGP_PUBLIC_KEY, + keyName: PGP_PUBLIC_KEY_FILE, + kvKey: KVStoreKeys.publicKey, + }); + } +} + +(async () => { + try { + await setup(); + process.exit(0); + } catch (error) { + console.error('Failed to setup KV', error); + process.exit(1); + } +})(); diff --git a/packages/apps/fortune/recording-oracle/package.json b/packages/apps/fortune/recording-oracle/package.json index b89aef5fa8..0ffebff104 100644 --- a/packages/apps/fortune/recording-oracle/package.json +++ b/packages/apps/fortune/recording-oracle/package.json @@ -18,10 +18,8 @@ "test": "jest", "test:watch": "jest --watch", "test:cov": "jest --coverage", - "postgres": "docker compose up -d postgres", - "docker": "docker compose up -d", - "local": "docker compose down && (concurrently --hide 0 \"yarn docker\" \"yarn recording-oracle:dev\" )", "setup:local": "ts-node ./test/setup.ts", + "setup:kvstore": "ts-node ./scripts/setup-kv-store.ts", "generate-env-doc": "ts-node scripts/generate-env-doc.ts" }, "dependencies": { @@ -36,8 +34,10 @@ "body-parser": "^1.20.2", "class-transformer": "^0.5.1", "class-validator": "0.14.1", + "dotenv": "^16.3.2", "helmet": "^7.1.0", "joi": "^17.13.3", + "minio": "7.1.3", "reflect-metadata": "^0.2.2", "rxjs": "^7.2.0" }, diff --git a/packages/apps/fortune/recording-oracle/scripts/setup-kv-store.ts b/packages/apps/fortune/recording-oracle/scripts/setup-kv-store.ts new file mode 100644 index 0000000000..c1ad796570 --- /dev/null +++ b/packages/apps/fortune/recording-oracle/scripts/setup-kv-store.ts @@ -0,0 +1,152 @@ +import 'dotenv/config'; +import { KVStoreClient, KVStoreKeys, Role } from '@human-protocol/sdk'; +import { Wallet, ethers } from 'ethers'; +import * as Minio from 'minio'; + +const SUPPORTED_JOB_TYPES = 'fortune'; +const ROLE = Role.RecordingOracle; + +async function setupCommonValues(kvStoreClient: KVStoreClient): Promise { + const { SERVER_URL = 'http://localhost:5007', FEE = '1' } = process.env; + + if (SUPPORTED_JOB_TYPES.split(',').length === 0) { + throw new Error('SUPPORTED_JOB_TYPES should be comma-separated list'); + } + try { + new URL(SERVER_URL || ''); + } catch (noop) { + throw new Error('Invalid SERVER_URL'); + } + let url = SERVER_URL.endsWith('/') ? SERVER_URL.slice(0, -1) : SERVER_URL; + if (!url.startsWith('http')) { + url = `http://${url}`; + } + + const fee = Number(FEE); + if (!Number.isInteger(fee) || fee < 1) { + throw new Error('Fee must be positive integer'); + } + + await kvStoreClient.setBulk( + [ + KVStoreKeys.role, + KVStoreKeys.fee, + KVStoreKeys.url, + KVStoreKeys.webhookUrl, + KVStoreKeys.jobTypes, + ], + [ROLE, fee.toString(), url, `${url}/webhook`, SUPPORTED_JOB_TYPES], + ); +} + +type SetupPublicKeyFileMeta = { + keyName: string; + publicKey: string; + s3Bucket: string; + s3Endpoint: string; + s3Port: string; + kvKey: string; +}; + +async function setupPublicKeyFile( + kvStoreClient: KVStoreClient, + minioClient: Minio.Client, + meta: SetupPublicKeyFileMeta, +): Promise { + const { keyName, kvKey, publicKey, s3Bucket, s3Endpoint, s3Port } = meta; + const exists = await minioClient.bucketExists(s3Bucket); + if (!exists) { + throw new Error('Bucket does not exists'); + } + + await minioClient.putObject(s3Bucket, keyName, publicKey, { + 'Content-Type': 'text/plain', + 'Cache-Control': 'no-store', + }); + /** + * Protocol is required for 'setFileUrlAndHash' + */ + const _s3Endpoint = s3Endpoint.startsWith('http') + ? s3Endpoint + : `http://${s3Endpoint}`; + const fileUrl = `${_s3Endpoint}:${s3Port}/${s3Bucket}/${keyName}`; + await kvStoreClient.setFileUrlAndHash(fileUrl, kvKey); +} + +async function setup(): Promise { + const { WEB3_PRIVATE_KEY, RPC_URL_POLYGON_AMOY: RPC_URL } = process.env; + if (!WEB3_PRIVATE_KEY) { + throw new Error('Private key is empty'); + } + if (!RPC_URL) { + throw new Error('RPC url is empty'); + } + + const provider = new ethers.JsonRpcProvider(RPC_URL); + const wallet = new Wallet(WEB3_PRIVATE_KEY, provider); + + const kvStoreClient = await KVStoreClient.build(wallet); + + await setupCommonValues(kvStoreClient); + + const { + S3_ENDPOINT, + S3_PORT, + S3_USE_SSL, + S3_ACCESS_KEY, + S3_SECRET_KEY, + S3_BUCKET, + } = process.env; + + if ( + [S3_ENDPOINT, S3_PORT, S3_ACCESS_KEY, S3_SECRET_KEY, S3_BUCKET].some( + (value) => !value, + ) + ) { + throw new Error('Missing S3 config value'); + } + + const s3Endpoint = S3_ENDPOINT as string; + const s3Port = S3_PORT as string; + const s3AccessKey = S3_ACCESS_KEY as string; + const s3SecretKey = S3_SECRET_KEY as string; + const s3Bucket = S3_BUCKET as string; + + const minioClient = new Minio.Client({ + endPoint: s3Endpoint, + port: parseInt(s3Port, 10), + useSSL: S3_USE_SSL === 'true', + accessKey: s3AccessKey, + secretKey: s3SecretKey, + }); + + const { + PGP_ENCRYPT, + PGP_PUBLIC_KEY, + PGP_PUBLIC_KEY_FILE = 'pgp-public-key-reco', + } = process.env; + if (PGP_ENCRYPT && PGP_ENCRYPT === 'true') { + if (!PGP_PUBLIC_KEY) { + throw new Error('PGP public key is empty'); + } + + await setupPublicKeyFile(kvStoreClient, minioClient, { + s3Endpoint, + s3Port, + s3Bucket, + publicKey: PGP_PUBLIC_KEY, + keyName: PGP_PUBLIC_KEY_FILE, + kvKey: KVStoreKeys.publicKey, + }); + } +} + +(async () => { + try { + await setup(); + process.exit(0); + } catch (error) { + console.error('Failed to setup KV', error); + process.exit(1); + } +})(); diff --git a/packages/apps/job-launcher/server/package.json b/packages/apps/job-launcher/server/package.json index 11f11e9a82..76da90322b 100644 --- a/packages/apps/job-launcher/server/package.json +++ b/packages/apps/job-launcher/server/package.json @@ -18,9 +18,8 @@ "migration:revert": "yarn build && typeorm-ts-node-commonjs migration:revert -d typeorm.config.ts", "migration:run": "yarn build && typeorm-ts-node-commonjs migration:run -d typeorm.config.ts", "migration:show": "yarn build && typeorm-ts-node-commonjs migration:show -d typeorm.config.ts", - "docker:db:up": "docker compose up -d postgres && yarn migration:run", - "docker:db:down": "docker compose down", "setup:local": "ts-node ./test/setup.ts", + "setup:kvstore": "ts-node ./scripts/setup-kv-store.ts", "lint": "eslint \"{src,test}/**/*.ts\" --fix", "test": "jest", "test:watch": "jest --watch", @@ -54,9 +53,11 @@ "class-transformer": "^0.5.1", "class-validator": "0.14.1", "decimal.js": "^10.4.3", + "dotenv": "^16.3.2", "helmet": "^7.1.0", "joi": "^17.13.3", "json-stable-stringify": "^1.2.1", + "minio": "7.1.3", "nestjs-minio-client": "^2.2.0", "node-cache": "^5.1.2", "passport": "^0.7.0", diff --git a/packages/apps/job-launcher/server/scripts/setup-kv-store.ts b/packages/apps/job-launcher/server/scripts/setup-kv-store.ts new file mode 100644 index 0000000000..2312158bfa --- /dev/null +++ b/packages/apps/job-launcher/server/scripts/setup-kv-store.ts @@ -0,0 +1,157 @@ +import 'dotenv/config'; +import { KVStoreClient, KVStoreKeys, Role } from '@human-protocol/sdk'; +import { Wallet, ethers } from 'ethers'; +import * as Minio from 'minio'; + +const DEFAULT_SUPPORTED_JOB_TYPES = + 'fortune,image_boxes,image_boxes_from_points,image_points,image_polygons,image_skeletons_from_boxes'; +const ROLE = Role.JobLauncher; + +async function setupCommonValues(kvStoreClient: KVStoreClient): Promise { + const { + SUPPORTED_JOB_TYPES = DEFAULT_SUPPORTED_JOB_TYPES, + SERVER_URL = 'http://localhost:5003', + FEE = '1', + } = process.env; + + if (SUPPORTED_JOB_TYPES.split(',').length === 0) { + throw new Error('SUPPORTED_JOB_TYPES should be comma-separated list'); + } + try { + new URL(SERVER_URL || ''); + } catch (_noop) { + throw new Error('Invalid SERVER_URL'); + } + let url = SERVER_URL.endsWith('/') ? SERVER_URL.slice(0, -1) : SERVER_URL; + if (!url.startsWith('http')) { + url = `http://${url}`; + } + + const fee = Number(FEE); + if (!Number.isInteger(fee) || fee < 1) { + throw new Error('Fee must be positive integer'); + } + + await kvStoreClient.setBulk( + [ + KVStoreKeys.role, + KVStoreKeys.fee, + KVStoreKeys.url, + KVStoreKeys.webhookUrl, + KVStoreKeys.jobTypes, + ], + [ROLE, fee.toString(), url, `${url}/webhook`, SUPPORTED_JOB_TYPES], + ); +} + +type SetupPublicKeyFileMeta = { + keyName: string; + publicKey: string; + s3Bucket: string; + s3Endpoint: string; + s3Port: string; + kvKey: string; +}; + +async function setupPublicKeyFile( + kvStoreClient: KVStoreClient, + minioClient: Minio.Client, + meta: SetupPublicKeyFileMeta, +): Promise { + const { keyName, kvKey, publicKey, s3Bucket, s3Endpoint, s3Port } = meta; + const exists = await minioClient.bucketExists(s3Bucket); + if (!exists) { + throw new Error('Bucket does not exists'); + } + + await minioClient.putObject(s3Bucket, keyName, publicKey, { + 'Content-Type': 'text/plain', + 'Cache-Control': 'no-store', + }); + /** + * Protocol is required for 'setFileUrlAndHash' + */ + const _s3Endpoint = s3Endpoint.startsWith('http') + ? s3Endpoint + : `http://${s3Endpoint}`; + const fileUrl = `${_s3Endpoint}:${s3Port}/${s3Bucket}/${keyName}`; + await kvStoreClient.setFileUrlAndHash(fileUrl, kvKey); +} + +async function setup(): Promise { + const { WEB3_PRIVATE_KEY, RPC_URL_POLYGON_AMOY: RPC_URL } = process.env; + if (!WEB3_PRIVATE_KEY) { + throw new Error('Private key is empty'); + } + if (!RPC_URL) { + throw new Error('RPC url is empty'); + } + + const provider = new ethers.JsonRpcProvider(RPC_URL); + const wallet = new Wallet(WEB3_PRIVATE_KEY, provider); + + const kvStoreClient = await KVStoreClient.build(wallet); + + await setupCommonValues(kvStoreClient); + + const { + S3_ENDPOINT, + S3_PORT, + S3_USE_SSL, + S3_ACCESS_KEY, + S3_SECRET_KEY, + S3_BUCKET, + } = process.env; + + if ( + [S3_ENDPOINT, S3_PORT, S3_ACCESS_KEY, S3_SECRET_KEY, S3_BUCKET].some( + (value) => !value, + ) + ) { + throw new Error('Missing S3 config value'); + } + + const s3Endpoint = S3_ENDPOINT as string; + const s3Port = S3_PORT as string; + const s3AccessKey = S3_ACCESS_KEY as string; + const s3SecretKey = S3_SECRET_KEY as string; + const s3Bucket = S3_BUCKET as string; + + const minioClient = new Minio.Client({ + endPoint: s3Endpoint, + port: parseInt(s3Port, 10), + useSSL: S3_USE_SSL === 'true', + accessKey: s3AccessKey, + secretKey: s3SecretKey, + }); + + const { + PGP_ENCRYPT, + PGP_PUBLIC_KEY, + PGP_PUBLIC_KEY_FILE = 'pgp-public-key', + } = process.env; + if (PGP_ENCRYPT && PGP_ENCRYPT === 'true') { + if (!PGP_PUBLIC_KEY) { + throw new Error('PGP public key is empty'); + } + + await setupPublicKeyFile(kvStoreClient, minioClient, { + s3Endpoint, + s3Port, + s3Bucket, + publicKey: PGP_PUBLIC_KEY, + keyName: PGP_PUBLIC_KEY_FILE, + kvKey: KVStoreKeys.publicKey, + }); + } +} + +(async () => { + try { + await setup(); + process.exit(0); + } catch (error) { + console.error('Failed to setup KV', error); + process.exit(1); + } +})(); diff --git a/packages/apps/reputation-oracle/server/package.json b/packages/apps/reputation-oracle/server/package.json index 2ebd5736bb..f4d91c2a12 100644 --- a/packages/apps/reputation-oracle/server/package.json +++ b/packages/apps/reputation-oracle/server/package.json @@ -18,9 +18,8 @@ "migration:revert": "yarn build && typeorm-ts-node-commonjs migration:revert -d typeorm-migrations-datasource.ts", "migration:run": "yarn build && typeorm-ts-node-commonjs migration:run -d typeorm-migrations-datasource.ts", "migration:show": "yarn build && typeorm-ts-node-commonjs migration:show -d typeorm-migrations-datasource.ts", - "docker:db:up": "docker compose up -d postgres && yarn migration:run", - "docker:db:down": "docker compose down postgres", "setup:local": "ts-node ./scripts/setup-kv-store.ts", + "setup:kvstore": "ts-node ./scripts/setup-kv-store.ts", "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix", "test": "jest", "test:watch": "jest --watch", diff --git a/packages/apps/reputation-oracle/server/scripts/setup-kv-store.ts b/packages/apps/reputation-oracle/server/scripts/setup-kv-store.ts index cd51e5822d..38e117cc00 100644 --- a/packages/apps/reputation-oracle/server/scripts/setup-kv-store.ts +++ b/packages/apps/reputation-oracle/server/scripts/setup-kv-store.ts @@ -3,10 +3,18 @@ import { KVStoreClient, KVStoreKeys, Role } from '@human-protocol/sdk'; import { Wallet, ethers } from 'ethers'; import * as Minio from 'minio'; +const DEFAULT_SUPPORTED_JOB_TYPES = + 'fortune,image_boxes,image_boxes_from_points,image_points,image_polygons,image_skeletons_from_boxes'; +const ROLE = Role.ReputationOracle; + async function setupCommonValues(kvStoreClient: KVStoreClient): Promise { - const { SUPPORTED_JOB_TYPES = '', SERVER_URL = '', FEE = '' } = process.env; + const { + SUPPORTED_JOB_TYPES = DEFAULT_SUPPORTED_JOB_TYPES, + SERVER_URL = 'http://localhost:5001', + FEE = '1', + } = process.env; - if (!SUPPORTED_JOB_TYPES || SUPPORTED_JOB_TYPES.split(',').length === 0) { + if (SUPPORTED_JOB_TYPES.split(',').length === 0) { throw new Error('SUPPORTED_JOB_TYPES should be comma-separated list'); } try { @@ -32,13 +40,7 @@ async function setupCommonValues(kvStoreClient: KVStoreClient): Promise { KVStoreKeys.webhookUrl, KVStoreKeys.jobTypes, ], - [ - Role.ReputationOracle, - `${fee}`, - url, - `${url}/webhook`, - SUPPORTED_JOB_TYPES, - ], + [ROLE, fee.toString(), url, `${url}/webhook`, SUPPORTED_JOB_TYPES], ); } @@ -77,7 +79,7 @@ async function setupPublicKeyFile( } async function setup(): Promise { - const { WEB3_PRIVATE_KEY, RPC_URL } = process.env; + const { WEB3_PRIVATE_KEY, RPC_URL_POLYGON_AMOY: RPC_URL } = process.env; if (!WEB3_PRIVATE_KEY) { throw new Error('Private key is empty'); } @@ -108,24 +110,26 @@ async function setup(): Promise { ) { throw new Error('Missing S3 config value'); } - if (!S3_ACCESS_KEY || !S3_SECRET_KEY) { - throw new Error('S3 key is missing'); - } - if (!S3_BUCKET) { - throw new Error('S3 bucket is missing'); - } - const s3Endpoint = S3_ENDPOINT || 'localhost'; - const s3Port = S3_PORT || '9000'; + const s3Endpoint = S3_ENDPOINT as string; + const s3Port = S3_PORT as string; + const s3AccessKey = S3_ACCESS_KEY as string; + const s3SecretKey = S3_SECRET_KEY as string; + const s3Bucket = S3_BUCKET as string; + const minioClient = new Minio.Client({ endPoint: s3Endpoint, port: parseInt(s3Port, 10), useSSL: S3_USE_SSL === 'true', - accessKey: S3_ACCESS_KEY, - secretKey: S3_SECRET_KEY, + accessKey: s3AccessKey, + secretKey: s3SecretKey, }); - const { PGP_ENCRYPT, PGP_PUBLIC_KEY } = process.env; + const { + PGP_ENCRYPT, + PGP_PUBLIC_KEY, + PGP_PUBLIC_KEY_FILE = 'pgp-public-key', + } = process.env; if (PGP_ENCRYPT && PGP_ENCRYPT === 'true') { if (!PGP_PUBLIC_KEY) { throw new Error('PGP public key is empty'); @@ -133,9 +137,9 @@ async function setup(): Promise { await setupPublicKeyFile(kvStoreClient, minioClient, { s3Endpoint, s3Port, - s3Bucket: S3_BUCKET, + s3Bucket, publicKey: PGP_PUBLIC_KEY, - keyName: 'pgp-public-key', + keyName: PGP_PUBLIC_KEY_FILE, kvKey: KVStoreKeys.publicKey, }); } @@ -147,7 +151,7 @@ async function setup(): Promise { await setupPublicKeyFile(kvStoreClient, minioClient, { s3Endpoint, s3Port, - s3Bucket: S3_BUCKET, + s3Bucket, publicKey: JWT_PUBLIC_KEY, keyName: 'jwt-public-key', kvKey: 'jwt_public_key', diff --git a/scripts/docker-setup/docker-compose.yml b/scripts/docker-setup/docker-compose.yml index 47341bf20d..e2797e4d6b 100644 --- a/scripts/docker-setup/docker-compose.yml +++ b/scripts/docker-setup/docker-compose.yml @@ -255,6 +255,8 @@ services: # so put here exposed port, not internal FE_URL: http://localhost:${HUMAN_APP_CLIENT_EXPOSED_PORT:?} JWT_PUBLIC_KEY: *reputation_oracle_jwt_public_key + # User for KV store setup + SERVER_URL: http://reputation-oracle:${BACKEND_APPS_INTERNAL_PORT:?} human-app-server: container_name: human-app-server @@ -285,7 +287,7 @@ services: REDIS_DB: 1 RPC_URL: *rpc_url_polygon_amoy HUMAN_APP_SECRET_KEY: *human_app_secret_key - REPUTATION_ORACLE_URL: "${REPUTATION_ORACLE_URL:-http://reputation-oracle:${BACKEND_APPS_INTERNAL_PORT:?}}" + REPUTATION_ORACLE_URL: http://reputation-oracle:${BACKEND_APPS_INTERNAL_PORT:?} REPUTATION_ORACLE_ADDRESS: *reputation_oracle_address human-app-client: @@ -362,6 +364,8 @@ services: LOCALHOST_RECORDING_ORACLE_URL: "http://recording-oracle-cvat:${BACKEND_APPS_INTERNAL_PORT:?}/webhook" LOCALHOST_JOB_LAUNCHER_URL: "http://job-launcher:${BACKEND_APPS_INTERNAL_PORT:?}/webhook" LOCALHOST_RECORDING_ORACLE_ADDRESS: *cvat_recording_oracle_address + # User for KV store setup + SERVER_URL: http://exchange-oracle-cvat:${BACKEND_APPS_INTERNAL_PORT:?} recording-oracle-cvat: container_name: recording-oracle-cvat @@ -412,6 +416,8 @@ services: LOCALHOST_EXCHANGE_ORACLE_URL: "http://exchange-oracle-cvat:${BACKEND_APPS_INTERNAL_PORT:?}/webhook" LOCALHOST_REPUTATION_ORACLE_URL: "http://reputation-oracle:${BACKEND_APPS_INTERNAL_PORT:?}/webhook" LOCALHOST_EXCHANGE_ORACLE_ADDRESS: *cvat_exchange_oracle_address + # User for KV store setup + SERVER_URL: http://recording-oracle-cvat:${BACKEND_APPS_INTERNAL_PORT:?} job-launcher: container_name: job-launcher @@ -450,6 +456,8 @@ services: CVAT_EXCHANGE_ORACLE_ADDRESS: *cvat_exchange_oracle_address CVAT_RECORDING_ORACLE_ADDRESS: *cvat_recording_oracle_address FE_URL: http://localhost:${JOB_LAUNCHER_CLIENT_EXPOSED_PORT:?} + # User for KV store setup + SERVER_URL: http://job-launcher:${BACKEND_APPS_INTERNAL_PORT:?} job-launcher-client: container_name: job-launcher-client @@ -507,6 +515,8 @@ services: PORT: *backend_apps_internal_port POSTGRES_DATABASE: exchange-oracle-fortune S3_BUCKET: *bucket_name_fortune + # User for KV store setup + SERVER_URL: http://exchange-oracle-fortune:${BACKEND_APPS_INTERNAL_PORT:?} fortune-client: container_name: fortune-client @@ -561,6 +571,8 @@ services: HOST: *all_interfaces_ip PORT: *backend_apps_internal_port S3_BUCKET: *bucket_name_fortune + # User for KV store setup + SERVER_URL: http://recording-oracle-fortune:${BACKEND_APPS_INTERNAL_PORT:?} volumes: # When init for the first time postgres requires empty directory diff --git a/scripts/docker-setup/env-files/.env.compose b/scripts/docker-setup/env-files/.env.compose index 494d5ce9c8..a1b4c908f3 100644 --- a/scripts/docker-setup/env-files/.env.compose +++ b/scripts/docker-setup/env-files/.env.compose @@ -1,5 +1,6 @@ MINIO_PORT=9000 +# NOTE: Avoid changing this since it impact KV store urls BACKEND_APPS_INTERNAL_PORT=5000 REPUTATION_ORACLE_EXPOSED_PORT=5001 @@ -28,6 +29,3 @@ CVAT_RECORDING_ORACLE_ADDRESS=replace_me # Might be empty SUBGRAPH_API_KEY= - -# Overrides when some service runs outside of docker -# REPUTATION_ORACLE_URL=http://host.docker.internal:5001 diff --git a/yarn.lock b/yarn.lock index 8e91d05851..387e52425f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4085,10 +4085,12 @@ __metadata: body-parser: "npm:^1.20.2" class-transformer: "npm:^0.5.1" class-validator: "npm:0.14.1" + dotenv: "npm:^16.3.2" eslint: "npm:^8.55.0" helmet: "npm:^7.1.0" jest: "npm:^29.7.0" joi: "npm:^17.13.3" + minio: "npm:7.1.3" prettier: "npm:^3.4.2" reflect-metadata: "npm:^0.2.2" rxjs: "npm:^7.2.0" @@ -4322,6 +4324,7 @@ __metadata: class-transformer: "npm:^0.5.1" class-validator: "npm:0.14.1" decimal.js: "npm:^10.4.3" + dotenv: "npm:^16.3.2" eslint: "npm:^8.55.0" eslint-config-prettier: "npm:^9.1.0" eslint-plugin-prettier: "npm:^5.2.1" @@ -4329,6 +4332,7 @@ __metadata: jest: "npm:29.7.0" joi: "npm:^17.13.3" json-stable-stringify: "npm:^1.2.1" + minio: "npm:7.1.3" nestjs-minio-client: "npm:^2.2.0" node-cache: "npm:^5.1.2" passport: "npm:^0.7.0" From 66c331a5bada4900b8b4bd2f94774fffc78bdc24 Mon Sep 17 00:00:00 2001 From: Dmitry Nechay Date: Wed, 21 May 2025 15:09:20 +0300 Subject: [PATCH 22/29] feat: docker convenience scripts --- .dockerignore | 1 + docker-setup/Makefile | 48 +++++++++++++++++++ .../docker-compose.yml | 20 ++++---- .../env-files/.env.compose | 0 .../env-files/.env.exchange-oracle-cvat | 0 .../env-files/.env.exchange-oracle-fortune | 0 .../env-files/.env.fortune-client | 0 .../env-files/.env.human-app-client | 0 .../env-files/.env.human-app-server | 0 .../env-files/.env.job-launcher | 0 .../env-files/.env.job-launcher-client | 0 .../env-files/.env.recording-oracle-cvat | 0 .../env-files/.env.recording-oracle-fortune | 0 .../env-files/.env.reputation-oracle | 0 .../initdb/create-dbs.sql | 0 package.json | 4 +- .../fortune/exchange-oracle/server/README.md | 16 +++---- packages/apps/job-launcher/server/README.md | 16 ++----- .../apps/reputation-oracle/server/README.md | 6 +-- scripts/docker-setup/Makefile | 23 --------- 20 files changed, 76 insertions(+), 58 deletions(-) create mode 100644 docker-setup/Makefile rename {scripts/docker-setup => docker-setup}/docker-compose.yml (98%) rename {scripts/docker-setup => docker-setup}/env-files/.env.compose (100%) rename {scripts/docker-setup => docker-setup}/env-files/.env.exchange-oracle-cvat (100%) rename {scripts/docker-setup => docker-setup}/env-files/.env.exchange-oracle-fortune (100%) rename {scripts/docker-setup => docker-setup}/env-files/.env.fortune-client (100%) rename {scripts/docker-setup => docker-setup}/env-files/.env.human-app-client (100%) rename {scripts/docker-setup => docker-setup}/env-files/.env.human-app-server (100%) rename {scripts/docker-setup => docker-setup}/env-files/.env.job-launcher (100%) rename {scripts/docker-setup => docker-setup}/env-files/.env.job-launcher-client (100%) rename {scripts/docker-setup => docker-setup}/env-files/.env.recording-oracle-cvat (100%) rename {scripts/docker-setup => docker-setup}/env-files/.env.recording-oracle-fortune (100%) rename {scripts/docker-setup => docker-setup}/env-files/.env.reputation-oracle (100%) rename {scripts/docker-setup => docker-setup}/initdb/create-dbs.sql (100%) delete mode 100644 scripts/docker-setup/Makefile diff --git a/.dockerignore b/.dockerignore index d3337c5373..ada5c3325a 100644 --- a/.dockerignore +++ b/.dockerignore @@ -4,6 +4,7 @@ .husky audits docs +docker-setup scripts **/node_modules **/build diff --git a/docker-setup/Makefile b/docker-setup/Makefile new file mode 100644 index 0000000000..a5befb8887 --- /dev/null +++ b/docker-setup/Makefile @@ -0,0 +1,48 @@ +.PHONY: copy-env-files \ + infra-up infra-stop build-services \ + services-up services-stop + +DOCKER_PARALLEL ?= 4 + +copy-env-files: +# Copying .env file for compose itself + @cp ./env-files/.env.compose .env.compose.local +# Copying .env files for backend services + @cp ./env-files/.env.reputation-oracle ./.env.reputation-oracle.local + @cp ./env-files/.env.human-app-server .env.human-app-server.local + @cp ./env-files/.env.job-launcher ./.env.job-launcher.local +# Copying .env files for cvat services + @cp ./env-files/.env.exchange-oracle-cvat ./.env.exchange-oracle-cvat.local + @cp ./env-files/.env.recording-oracle-cvat ./.env.recording-oracle-cvat.local +# Copying .env files for fortune services + @cp ./env-files/.env.exchange-oracle-fortune ./.env.exchange-oracle-fortune.local + @cp ./env-files/.env.recording-oracle-fortune ./.env.recording-oracle-fortune.local +# Copying .env files for client apps. +# It should be placed in corresponding app folder +# because used during Docker image build process + @cp ./env-files/.env.human-app-client ../packages/apps/human-app/frontend/.env.local + @cp ./env-files/.env.job-launcher-client ../packages/apps/job-launcher/client/.env.local + @cp ./env-files/.env.fortune-client ../packages/apps/fortune/exchange-oracle/client/.env.local +# Restore original files + @git checkout . > /dev/null 2>&1 + +infra-up: + docker-compose --env-file .env.compose.local up -d postgres redis minio minio-client + +infra-stop: + docker-compose --env-file .env.compose.local stop postgres redis minio minio-client + +build-services: + docker-compose --env-file .env.compose.local --parallel $(DOCKER_PARALLEL) up --no-start + +services-up: + @service_names="$(wordlist 2, $(words $(MAKECMDGOALS)), $(MAKECMDGOALS))"; \ + docker-compose --env-file .env.compose.local --parallel $(DOCKER_PARALLEL) up -d $$service_names + +services-stop: + @service_names="$(wordlist 2, $(words $(MAKECMDGOALS)), $(MAKECMDGOALS))"; \ + docker-compose --env-file .env.compose.local stop $$service_names + +# catch-all and noop; to avoid warnings when using MAKECMDGOALS +%: + @: diff --git a/scripts/docker-setup/docker-compose.yml b/docker-setup/docker-compose.yml similarity index 98% rename from scripts/docker-setup/docker-compose.yml rename to docker-setup/docker-compose.yml index e2797e4d6b..4c48c5611b 100644 --- a/scripts/docker-setup/docker-compose.yml +++ b/docker-setup/docker-compose.yml @@ -233,7 +233,7 @@ services: logging: <<: *default-logging build: - context: ../../ + context: ../ dockerfile: packages/apps/reputation-oracle/server/Dockerfile expose: - *backend_apps_internal_port @@ -269,7 +269,7 @@ services: logging: <<: *default-logging build: - context: ../../ + context: ../ dockerfile: packages/apps/human-app/server/Dockerfile expose: - *backend_apps_internal_port @@ -301,7 +301,7 @@ services: logging: <<: *default-logging build: - context: ../../ + context: ../ dockerfile: packages/apps/human-app/frontend/Dockerfile expose: - *frontend_default_port @@ -331,7 +331,7 @@ services: logging: <<: *default-logging build: - context: ../../packages/examples/cvat/exchange-oracle + context: ../packages/examples/cvat/exchange-oracle dockerfile: ./Dockerfile expose: - *backend_apps_internal_port @@ -382,7 +382,7 @@ services: logging: <<: *default-logging build: - context: ../../packages/examples/cvat/recording-oracle + context: ../packages/examples/cvat/recording-oracle dockerfile: ./Dockerfile expose: - *backend_apps_internal_port @@ -434,7 +434,7 @@ services: logging: <<: *default-logging build: - context: ../../ + context: ../ dockerfile: packages/apps/job-launcher/server/Dockerfile expose: - *backend_apps_internal_port @@ -470,7 +470,7 @@ services: logging: <<: *default-logging build: - context: ../../ + context: ../ dockerfile: packages/apps/job-launcher/client/Dockerfile expose: - *frontend_default_port @@ -498,7 +498,7 @@ services: logging: <<: *default-logging build: - context: ../../ + context: ../ dockerfile: packages/apps/fortune/exchange-oracle/server/Dockerfile expose: - *backend_apps_internal_port @@ -529,7 +529,7 @@ services: logging: <<: *default-logging build: - context: ../../ + context: ../ dockerfile: packages/apps/fortune/exchange-oracle/client/Dockerfile expose: - *frontend_default_port @@ -555,7 +555,7 @@ services: logging: <<: *default-logging build: - context: ../../ + context: ../ dockerfile: packages/apps/fortune/recording-oracle/Dockerfile expose: - *backend_apps_internal_port diff --git a/scripts/docker-setup/env-files/.env.compose b/docker-setup/env-files/.env.compose similarity index 100% rename from scripts/docker-setup/env-files/.env.compose rename to docker-setup/env-files/.env.compose diff --git a/scripts/docker-setup/env-files/.env.exchange-oracle-cvat b/docker-setup/env-files/.env.exchange-oracle-cvat similarity index 100% rename from scripts/docker-setup/env-files/.env.exchange-oracle-cvat rename to docker-setup/env-files/.env.exchange-oracle-cvat diff --git a/scripts/docker-setup/env-files/.env.exchange-oracle-fortune b/docker-setup/env-files/.env.exchange-oracle-fortune similarity index 100% rename from scripts/docker-setup/env-files/.env.exchange-oracle-fortune rename to docker-setup/env-files/.env.exchange-oracle-fortune diff --git a/scripts/docker-setup/env-files/.env.fortune-client b/docker-setup/env-files/.env.fortune-client similarity index 100% rename from scripts/docker-setup/env-files/.env.fortune-client rename to docker-setup/env-files/.env.fortune-client diff --git a/scripts/docker-setup/env-files/.env.human-app-client b/docker-setup/env-files/.env.human-app-client similarity index 100% rename from scripts/docker-setup/env-files/.env.human-app-client rename to docker-setup/env-files/.env.human-app-client diff --git a/scripts/docker-setup/env-files/.env.human-app-server b/docker-setup/env-files/.env.human-app-server similarity index 100% rename from scripts/docker-setup/env-files/.env.human-app-server rename to docker-setup/env-files/.env.human-app-server diff --git a/scripts/docker-setup/env-files/.env.job-launcher b/docker-setup/env-files/.env.job-launcher similarity index 100% rename from scripts/docker-setup/env-files/.env.job-launcher rename to docker-setup/env-files/.env.job-launcher diff --git a/scripts/docker-setup/env-files/.env.job-launcher-client b/docker-setup/env-files/.env.job-launcher-client similarity index 100% rename from scripts/docker-setup/env-files/.env.job-launcher-client rename to docker-setup/env-files/.env.job-launcher-client diff --git a/scripts/docker-setup/env-files/.env.recording-oracle-cvat b/docker-setup/env-files/.env.recording-oracle-cvat similarity index 100% rename from scripts/docker-setup/env-files/.env.recording-oracle-cvat rename to docker-setup/env-files/.env.recording-oracle-cvat diff --git a/scripts/docker-setup/env-files/.env.recording-oracle-fortune b/docker-setup/env-files/.env.recording-oracle-fortune similarity index 100% rename from scripts/docker-setup/env-files/.env.recording-oracle-fortune rename to docker-setup/env-files/.env.recording-oracle-fortune diff --git a/scripts/docker-setup/env-files/.env.reputation-oracle b/docker-setup/env-files/.env.reputation-oracle similarity index 100% rename from scripts/docker-setup/env-files/.env.reputation-oracle rename to docker-setup/env-files/.env.reputation-oracle diff --git a/scripts/docker-setup/initdb/create-dbs.sql b/docker-setup/initdb/create-dbs.sql similarity index 100% rename from scripts/docker-setup/initdb/create-dbs.sql rename to docker-setup/initdb/create-dbs.sql diff --git a/package.json b/package.json index 4bb0c41bee..12080f224a 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,9 @@ "lint": "yarn workspaces foreach --all -p run lint", "build:core": "yarn workspace @human-protocol/core build", "build:sdk": "yarn workspace @human-protocol/sdk build", - "build:libs": "yarn build:core && yarn build:sdk" + "build:libs": "yarn build:core && yarn build:sdk", + "docker:infra-up": "make -C ./docker-setup infra-up", + "docker:stop": "make -C ./docker-setup services-stop" }, "workspaces": [ "packages/**" diff --git a/packages/apps/fortune/exchange-oracle/server/README.md b/packages/apps/fortune/exchange-oracle/server/README.md index 3a4ce72618..10e135d71a 100644 --- a/packages/apps/fortune/exchange-oracle/server/README.md +++ b/packages/apps/fortune/exchange-oracle/server/README.md @@ -45,11 +45,11 @@ First of all, postgres needs to be installed, please see here /dev/null 2>&1 \ No newline at end of file From 6fc2e536f94bc9a69a3aadb6612955c21b8fda32 Mon Sep 17 00:00:00 2001 From: Dmitry Nechay Date: Thu, 22 May 2025 14:40:01 +0300 Subject: [PATCH 23/29] refactor: remove docker env files --- docker-setup/Makefile | 13 ---- docker-setup/docker-compose.yml | 27 +------ docker-setup/env-files/.env.compose | 7 -- .../env-files/.env.exchange-oracle-cvat | 6 +- .../env-files/.env.exchange-oracle-fortune | 36 ---------- docker-setup/env-files/.env.fortune-client | 8 --- docker-setup/env-files/.env.human-app-client | 38 ---------- docker-setup/env-files/.env.human-app-server | 13 ---- docker-setup/env-files/.env.job-launcher | 70 ------------------- .../env-files/.env.job-launcher-client | 14 ---- .../env-files/.env.recording-oracle-fortune | 37 ---------- docker-setup/env-files/.env.reputation-oracle | 55 --------------- 12 files changed, 6 insertions(+), 318 deletions(-) delete mode 100644 docker-setup/env-files/.env.exchange-oracle-fortune delete mode 100644 docker-setup/env-files/.env.fortune-client delete mode 100644 docker-setup/env-files/.env.human-app-client delete mode 100644 docker-setup/env-files/.env.human-app-server delete mode 100644 docker-setup/env-files/.env.job-launcher delete mode 100644 docker-setup/env-files/.env.job-launcher-client delete mode 100644 docker-setup/env-files/.env.recording-oracle-fortune delete mode 100644 docker-setup/env-files/.env.reputation-oracle diff --git a/docker-setup/Makefile b/docker-setup/Makefile index a5befb8887..1bbea9537d 100644 --- a/docker-setup/Makefile +++ b/docker-setup/Makefile @@ -7,22 +7,9 @@ DOCKER_PARALLEL ?= 4 copy-env-files: # Copying .env file for compose itself @cp ./env-files/.env.compose .env.compose.local -# Copying .env files for backend services - @cp ./env-files/.env.reputation-oracle ./.env.reputation-oracle.local - @cp ./env-files/.env.human-app-server .env.human-app-server.local - @cp ./env-files/.env.job-launcher ./.env.job-launcher.local # Copying .env files for cvat services @cp ./env-files/.env.exchange-oracle-cvat ./.env.exchange-oracle-cvat.local @cp ./env-files/.env.recording-oracle-cvat ./.env.recording-oracle-cvat.local -# Copying .env files for fortune services - @cp ./env-files/.env.exchange-oracle-fortune ./.env.exchange-oracle-fortune.local - @cp ./env-files/.env.recording-oracle-fortune ./.env.recording-oracle-fortune.local -# Copying .env files for client apps. -# It should be placed in corresponding app folder -# because used during Docker image build process - @cp ./env-files/.env.human-app-client ../packages/apps/human-app/frontend/.env.local - @cp ./env-files/.env.job-launcher-client ../packages/apps/job-launcher/client/.env.local - @cp ./env-files/.env.fortune-client ../packages/apps/fortune/exchange-oracle/client/.env.local # Restore original files @git checkout . > /dev/null 2>&1 diff --git a/docker-setup/docker-compose.yml b/docker-setup/docker-compose.yml index 4c48c5611b..6e7e05602a 100644 --- a/docker-setup/docker-compose.yml +++ b/docker-setup/docker-compose.yml @@ -23,7 +23,6 @@ x-hardcoded-vars: x-general-env-variables: # GENERAL VARS subgraph_api_key: &subgraph_api_key ${SUBGRAPH_API_KEY} - sendgrid_api_key: &sendgrid_api_key ${SENDGRID_API_KEY:-sendgrid-disabled} rpc_url_polygon_amoy: &rpc_url_polygon_amoy ${RPC_URL_POLYGON_AMOY:-} # POSTGRES VARS postgres_user: &postgres_user ${POSTGRES_USER:-default} @@ -43,13 +42,10 @@ x-general-env-variables: bucket_name_cvat_rec_o: &bucket_name_cvat_rec_o ${BUCKET_NAME_CVAT_RECORDING_ORACLE:-cvat-recording-oracle} bucket_name_fortune: &bucket_name_fortune ${BUCKEN_NAME_FORTUNE:-fortune} # WEB3 ADDRESSES - reputation_oracle_address: &reputation_oracle_address ${REPUTATION_ORACLE_ADDRESS:?} cvat_exchange_oracle_address: &cvat_exchange_oracle_address ${CVAT_EXCHANGE_ORACLE_ADDRESS:?} cvat_recording_oracle_address: &cvat_recording_oracle_address ${CVAT_RECORDING_ORACLE_ADDRESS:?} # OTHER backend_apps_internal_port: &backend_apps_internal_port ${BACKEND_APPS_INTERNAL_PORT:?} - human_app_secret_key: &human_app_secret_key ${HUMAN_APP_SECRET_KEY:?} - reputation_oracle_jwt_public_key: &reputation_oracle_jwt_public_key ${REPUTATION_ORACLE_JWT_PUBLIC_KEY:?} cvat_oracle_storage_endpoint: &cvat_oracle_storage_endpoint minio:${MINIO_PORT:?} x-service-env-vars-groups: @@ -61,13 +57,6 @@ x-service-env-vars-groups: REDIS_PORT: *redis_port nodejs_app_vars: &nodejs_app_vars NODE_ENV: *node_env - WEB3_ENV: *web3_env - RPC_URL_POLYGON_AMOY: *rpc_url_polygon_amoy - SENDGRID_API_KEY: *sendgrid_api_key - SUBGRAPH_API_KEY: *subgraph_api_key - HCAPTCHA_SITE_KEY: ${HCAPTCHA_SITE_KEY:-10000000-ffff-ffff-ffff-000000000001} - HCAPTCHA_SECRET: ${HCAPTCHA_SECRET:-0x0000000000000000000000000000000000000000} - HCAPTCHA_API_KEY: ${HCAPTCHA_API_KEY:-test} nodejs_app_postgres_vars: &nodejs_app_postgres_vars <<: *postgres_auth_vars POSTGRES_HOST: *postgres_host @@ -243,18 +232,15 @@ services: - name: server_port target: *backend_apps_internal_port published: ${REPUTATION_ORACLE_EXPOSED_PORT:?} - env_file: ./.env.reputation-oracle.local environment: <<: [*nodejs_app_vars, *nodejs_app_postgres_vars, *nodejs_app_s3_vars] HOST: *all_interfaces_ip PORT: *backend_apps_internal_port POSTGRES_DATABASE: reputation-oracle S3_BUCKET: *bucket_name_rep_o - HUMAN_APP_SECRET_KEY: *human_app_secret_key # It is accessed by user, not from container # so put here exposed port, not internal FE_URL: http://localhost:${HUMAN_APP_CLIENT_EXPOSED_PORT:?} - JWT_PUBLIC_KEY: *reputation_oracle_jwt_public_key # User for KV store setup SERVER_URL: http://reputation-oracle:${BACKEND_APPS_INTERNAL_PORT:?} @@ -279,16 +265,12 @@ services: - name: server_port target: *backend_apps_internal_port published: ${HUMAN_APP_SERVER_EXPOSED_PORT:?} - env_file: ./.env.human-app-server.local environment: <<: [*nodejs_app_vars, *redis_app_vars] HOST: *all_interfaces_ip PORT: *backend_apps_internal_port REDIS_DB: 1 - RPC_URL: *rpc_url_polygon_amoy - HUMAN_APP_SECRET_KEY: *human_app_secret_key REPUTATION_ORACLE_URL: http://reputation-oracle:${BACKEND_APPS_INTERNAL_PORT:?} - REPUTATION_ORACLE_ADDRESS: *reputation_oracle_address human-app-client: container_name: human-app-client @@ -359,11 +341,11 @@ services: POLYGON_AMOY_RPC_API_URL: *rpc_url_polygon_amoy POLYGON_AMOY_ADDR: *cvat_exchange_oracle_address STORAGE_BUCKET_NAME: *bucket_name_cvat_exc_o - HUMAN_APP_JWT_KEY: *reputation_oracle_jwt_public_key CVAT_INCOMING_WEBHOOKS_URL: "http://exchange-oracle.app:${BACKEND_APPS_INTERNAL_PORT:?}/cvat-webhook" LOCALHOST_RECORDING_ORACLE_URL: "http://recording-oracle-cvat:${BACKEND_APPS_INTERNAL_PORT:?}/webhook" LOCALHOST_JOB_LAUNCHER_URL: "http://job-launcher:${BACKEND_APPS_INTERNAL_PORT:?}/webhook" LOCALHOST_RECORDING_ORACLE_ADDRESS: *cvat_recording_oracle_address + ENABLE_CUSTOM_CLOUD_HOST: yes # User for KV store setup SERVER_URL: http://exchange-oracle-cvat:${BACKEND_APPS_INTERNAL_PORT:?} @@ -444,17 +426,12 @@ services: - name: server_port target: *backend_apps_internal_port published: ${JOB_LAUNCHER_EXPOSED_PORT:?} - env_file: ./.env.job-launcher.local environment: <<: [*nodejs_app_vars, *nodejs_app_postgres_vars, *nodejs_app_s3_vars] HOST: *all_interfaces_ip PORT: *backend_apps_internal_port POSTGRES_DATABASE: job-launcher S3_BUCKET: *bucket_name_manifests - REPUTATION_ORACLES: *reputation_oracle_address - REPUTATION_ORACLE_ADDRESS: *reputation_oracle_address - CVAT_EXCHANGE_ORACLE_ADDRESS: *cvat_exchange_oracle_address - CVAT_RECORDING_ORACLE_ADDRESS: *cvat_recording_oracle_address FE_URL: http://localhost:${JOB_LAUNCHER_CLIENT_EXPOSED_PORT:?} # User for KV store setup SERVER_URL: http://job-launcher:${BACKEND_APPS_INTERNAL_PORT:?} @@ -508,7 +485,6 @@ services: - name: server_port target: *backend_apps_internal_port published: ${EXCHANGE_ORACLE_FORTUNE_EXPOSED_PORT:?} - env_file: ./.env.exchange-oracle-fortune.local environment: <<: [*nodejs_app_vars, *nodejs_app_postgres_vars, *nodejs_app_s3_vars] HOST: *all_interfaces_ip @@ -565,7 +541,6 @@ services: - name: server_port target: *backend_apps_internal_port published: ${RECORDING_ORACLE_FORTUNE_EXPOSED_PORT:?} - env_file: ./.env.recording-oracle-fortune.local environment: <<: [*nodejs_app_vars, *nodejs_app_s3_vars] HOST: *all_interfaces_ip diff --git a/docker-setup/env-files/.env.compose b/docker-setup/env-files/.env.compose index a1b4c908f3..94ce831098 100644 --- a/docker-setup/env-files/.env.compose +++ b/docker-setup/env-files/.env.compose @@ -15,15 +15,8 @@ HUMAN_APP_CLIENT_EXPOSED_PORT=3001 JOB_LAUNCHER_CLIENT_EXPOSED_PORT=3002 FORTUNE_CLIENT_EXPOSED_PORT=3003 -HUMAN_APP_SECRET_KEY=sk_local_3Hc0kWL9Y8iwyHucW636Cl7tfFZI0rAUljPEbbfDrok -REPUTATION_ORACLE_JWT_PUBLIC_KEY="-----BEGIN PUBLIC KEY----- -MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEkPekD3q96LHt4IfvY1UY1YukTeEf -K+XryPXhU57nKuhZXBPRrQ+lMDeFpYpHWpGqA/K576n+rDvjbBgHfQiHKg== ------END PUBLIC KEY-----" - RPC_URL_POLYGON_AMOY=https://rpc-amoy.polygon.technology # Oracle addresses -REPUTATION_ORACLE_ADDRESS=replace_me CVAT_EXCHANGE_ORACLE_ADDRESS=replace_me CVAT_RECORDING_ORACLE_ADDRESS=replace_me diff --git a/docker-setup/env-files/.env.exchange-oracle-cvat b/docker-setup/env-files/.env.exchange-oracle-cvat index 6ee37a5497..dcac6d0440 100644 --- a/docker-setup/env-files/.env.exchange-oracle-cvat +++ b/docker-setup/env-files/.env.exchange-oracle-cvat @@ -13,7 +13,6 @@ TRACK_ASSIGNMENTS_INT=10 TRACK_ESCROW_CREATION_INT=100 ## Features -ENABLE_CUSTOM_CLOUD_HOST="yes" REQUEST_LOGGING_ENABLED="yes" PROFILING_ENABLED="yes" @@ -55,3 +54,8 @@ yldD+g8d1DuAQnz6rocH =AVB0 -----END PGP PUBLIC KEY BLOCK-----" PGP_PUBLIC_KEY_URL=http://minio:9000/exchange-oracle/pgp-public-key + +HUMAN_APP_JWT_KEY="-----BEGIN PUBLIC KEY----- +MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEkPekD3q96LHt4IfvY1UY1YukTeEf +K+XryPXhU57nKuhZXBPRrQ+lMDeFpYpHWpGqA/K576n+rDvjbBgHfQiHKg== +-----END PUBLIC KEY-----" \ No newline at end of file diff --git a/docker-setup/env-files/.env.exchange-oracle-fortune b/docker-setup/env-files/.env.exchange-oracle-fortune deleted file mode 100644 index 8315f86b95..0000000000 --- a/docker-setup/env-files/.env.exchange-oracle-fortune +++ /dev/null @@ -1,36 +0,0 @@ -WEB3_PRIVATE_KEY=replace_me - -# PGP -PGP_ENCRYPT=true -PGP_PRIVATE_KEY="-----BEGIN PGP PRIVATE KEY BLOCK----- - -xYYEaCsZkBYJKwYBBAHaRw8BAQdA57OtWky46JfMXjUuc0Lb7DhlfLuLYIfI -j/k/vJiuL+D+CQMI2p74jVMUUM3g8z+mhvW3+G5ajp6G3kwqlwMA5GXvbPsI -AwMt8q3dT51U0FpaeFR0vzbokC/3J2yn44MrHT5W1ZaKbWLlx5QGiAqkl9D3 -ec0AwowEEBYKAD4FgmgrGZAECwkHCAmQsDLkiO/wmn8DFQgKBBYAAgECGQEC -mwMCHgEWIQStAYPfywhyBWsDk4WwMuSI7/CafwAAjXYA/AxG1Y6vL3JJnm/0 -8BpA2X1I2mAf36tfpWh79EI1YzcSAQD2Nx6hzzl+zTk9usms4iyl0ZkA5GqR -EQQggrHIZEvKCseLBGgrGZASCisGAQQBl1UBBQEBB0Cf3IqFfpNHTpIM6QQK -z9MtsKJsoaIdoBq5o65jX+v4CQMBCAf+CQMIYLeP6Ua7BsHgqKKEO4VYdHu8 -tIoEcZkDffm5NQ3BmS1c4tYp63d4jxZmkbyw3xHj6QS3D9a7IF+/R2+rrYf1 -Y0HFz1H9TSsJnuvOCf2wiMJ4BBgWCgAqBYJoKxmQCZCwMuSI7/CafwKbDBYh -BK0Bg9/LCHIFawOThbAy5Ijv8Jp/AACRFgEA0cwrCjODyF7GleZK/SHff9xn -oRSkBzq+CCaA/eqQ/ikBALfxC5M+OM7od4w9xKBThNG2M2lC4D9enGU5+cGE -BRoN -=gvnq ------END PGP PRIVATE KEY BLOCK-----" -PGP_PASSPHRASE=6fD8WuRhT85mxP11PfX -# Put it here just to easily set up KV later; not needed to run -PGP_PUBLIC_KEY="-----BEGIN PGP PUBLIC KEY BLOCK----- - -xjMEaCsZkBYJKwYBBAHaRw8BAQdA57OtWky46JfMXjUuc0Lb7DhlfLuLYIfI -j/k/vJiuL+DNAMKMBBAWCgA+BYJoKxmQBAsJBwgJkLAy5Ijv8Jp/AxUICgQW -AAIBAhkBApsDAh4BFiEErQGD38sIcgVrA5OFsDLkiO/wmn8AAI12APwMRtWO -ry9ySZ5v9PAaQNl9SNpgH9+rX6Voe/RCNWM3EgEA9jceoc85fs05PbrJrOIs -pdGZAORqkREEIIKxyGRLygrOOARoKxmQEgorBgEEAZdVAQUBAQdAn9yKhX6T -R06SDOkECs/TLbCibKGiHaAauaOuY1/r+AkDAQgHwngEGBYKACoFgmgrGZAJ -kLAy5Ijv8Jp/ApsMFiEErQGD38sIcgVrA5OFsDLkiO/wmn8AAJEWAQDRzCsK -M4PIXsaV5kr9Id9/3GehFKQHOr4IJoD96pD+KQEAt/ELkz44zuh3jD3EoFOE -0bYzaULgP16cZTn5wYQFGg0= -=ppFH ------END PGP PUBLIC KEY BLOCK-----" diff --git a/docker-setup/env-files/.env.fortune-client b/docker-setup/env-files/.env.fortune-client deleted file mode 100644 index edcb923458..0000000000 --- a/docker-setup/env-files/.env.fortune-client +++ /dev/null @@ -1,8 +0,0 @@ -# General -VITE_APP_EXCHANGE_ORACLE_SERVER_URL=http://0.0.0.0:5006 -VITE_APP_WALLETCONNECT_PROJECT_ID=replace_me - -# Web3 -VITE_APP_ENVIRONMENT=testnet -VITE_APP_SUPPORTED_CHAINS=80002 -VITE_APP_RPC_URL_POLYGON_AMOY=https://rpc-amoy.polygon.technology \ No newline at end of file diff --git a/docker-setup/env-files/.env.human-app-client b/docker-setup/env-files/.env.human-app-client deleted file mode 100644 index 4dce091e52..0000000000 --- a/docker-setup/env-files/.env.human-app-client +++ /dev/null @@ -1,38 +0,0 @@ -# General -VITE_API_URL=http://localhost:5002 -VITE_NETWORK=testnet - -# Reown project id -VITE_WALLET_CONNECT_PROJECT_ID=replace_me -VITE_DAPP_ICONS=icon1,icon2 -VITE_DAPP_META_DESCRIPTION=Complete jobs, earn HMT -VITE_DAPP_META_NAME=Human App Local -VITE_DAPP_META_URL=http://localhost:3001 - -# hCapthca -VITE_H_CAPTCHA_EXCHANGE_URL=https://foundation-yellow-exchange.hmt.ai -VITE_H_CAPTCHA_LABELING_BASE_URL=https://foundation-yellow-accounts.hmt.ai -VITE_H_CAPTCHA_SITE_KEY=10000000-ffff-ffff-ffff-000000000001 -VITE_DAILY_SOLVED_CAPTCHA_LIMIT=0 -VITE_HMT_DAILY_SPENT_LIMIT=0 - -# hCaptcha annotation tool -VITE_H_CAPTCHA_ORACLE_ADDRESS=replace_me -VITE_H_CAPTCHA_ORACLE_ANNOTATION_TOOL=hcaptcha -VITE_H_CAPTCHA_ORACLE_ROLE=hcaptcha -VITE_H_CAPTCHA_ORACLE_TASK_TYPES=image_points,image_boxes - -# Other -VITE_HUMAN_PROTOCOL_HELP_URL=https://docs.humanprotocol.org/ -VITE_HUMAN_PROTOCOL_URL=https://humanprotocol.org/ -VITE_HUMAN_SUPPORT_EMAIL=support@local.app -VITE_NAVBAR__LINK__HOW_IT_WORK_URL=https://humanprotocol.org/ -VITE_NAVBAR__LINK__PROTOCOL_URL=https://humanprotocol.org/ -VITE_PRIVACY_POLICY_URL=http://local.app/privacy-policy/ -VITE_TERMS_OF_SERVICE_URL=http://local.app/terms-and-conditions/ - -VITE_GOVERNOR_ADDRESS= -VITE_GOVERNANCE_URL= - -# Feature flags -VITE_FEATURE_FLAG_JOBS_DISCOVERY=true \ No newline at end of file diff --git a/docker-setup/env-files/.env.human-app-server b/docker-setup/env-files/.env.human-app-server deleted file mode 100644 index f87f8c2440..0000000000 --- a/docker-setup/env-files/.env.human-app-server +++ /dev/null @@ -1,13 +0,0 @@ -CHAIN_IDS_ENABLED=80002 -HCAPTCHA_LABELING_STATS_API_URL=disabled -HCAPTCHA_LABELING_VERIFY_API_URL=disabled -HCAPTCHA_LABELING_API_KEY=disabled -# Should be the one you will use to access human-app-server API -ALLOWED_HOST=localhost:5002 -# CORS -CORS_ALLOWED_ORIGIN=* -CORS_ALLOWED_HEADERS='Content-Type,Authorization,X-Requested-With,Accept,Origin' -CORS_ENABLED=true -IS_CACHE_TO_RESTART=false -# FEATURE FLAGS -FEATURE_FLAG_JOBS_DISCOVERY=true diff --git a/docker-setup/env-files/.env.job-launcher b/docker-setup/env-files/.env.job-launcher deleted file mode 100644 index 2e620b8d5a..0000000000 --- a/docker-setup/env-files/.env.job-launcher +++ /dev/null @@ -1,70 +0,0 @@ -# Database -POSTGRES_DATABASE=job-launcher - -# Web3 -WEB3_PRIVATE_KEY=replace_me - -# Encryption -PGP_ENCRYPT=true -PGP_PRIVATE_KEY="-----BEGIN PGP PRIVATE KEY BLOCK----- - -lIYEZ4+zchYJKwYBBAHaRw8BAQdA1ql3NCl4pZANEvM3jaxoHLeh5t0PM237WLkG -hCoxjK7+BwMCBJL1H5pd3HT/JxeY7rqJs8sfBOfMbbAxRds/uLdMgGcVzjpj7htU -yzg7PHhWESAgycZmk9QpjgEQYlHl7KbZNNidG1zdCKX9GDce6W5PB7QlSm9iIExh -dW5jaGVyIDxqb2ItbGF1bmNoZXJAbG9jYWwuYXBwPoiTBBMWCgA7FiEEUlUidK34 -MNfYCc0xkWfqgp0A/m4FAmePs3ICGwMFCwkIBwICIgIGFQoJCAsCBBYCAwECHgcC -F4AACgkQkWfqgp0A/m7q3wD/V7G/uxy7LZOX9aW2uPcYfRInVDcyElwJza0Pcken -9qEBAJF0XBJJHkOVOyfmPv5nqAJ3DI6kRiHml+Ri3VjQp24OnIsEZ4+zchIKKwYB -BAGXVQEFAQEHQAGE7HHBGkVnFFPHpXdC/2uY+DC1vMkqTy8fzY0k2jQhAwEIB/4H -AwKFPSSA1sF9iP+Aepg/tiJFDyGqJsSKFlvj07zHjSKxeIOGcuC1llJCju70AcR5 -cQ3itvWUrDIpwI3GnHTy5k183GIIt2cRhLRnLUqIWXLliHgEGBYKACAWIQRSVSJ0 -rfgw19gJzTGRZ+qCnQD+bgUCZ4+zcgIbDAAKCRCRZ+qCnQD+bsXqAP0duGYm6z58 -mBdnv9k5Ed2wEw5hFnjcKXEQBFcMORVgdgD/RssEZjY0Vli5ofBezTOvURLAZRY2 -FryLSAroIMtuIAk= -=of7b ------END PGP PRIVATE KEY BLOCK-----" -PGP_PASSPHRASE=ixS5G0GE8Eh!fn -# Put it here just to easily set up KV later -PGP_PUBLIC_KEY="-----BEGIN PGP PUBLIC KEY BLOCK----- - -mDMEZ4+zchYJKwYBBAHaRw8BAQdA1ql3NCl4pZANEvM3jaxoHLeh5t0PM237WLkG -hCoxjK60JUpvYiBMYXVuY2hlciA8am9iLWxhdW5jaGVyQGxvY2FsLmFwcD6IkwQT -FgoAOxYhBFJVInSt+DDX2AnNMZFn6oKdAP5uBQJnj7NyAhsDBQsJCAcCAiICBhUK -CQgLAgQWAgMBAh4HAheAAAoJEJFn6oKdAP5u6t8A/1exv7scuy2Tl/Wltrj3GH0S -J1Q3MhJcCc2tD3JHp/ahAQCRdFwSSR5DlTsn5j7+Z6gCdwyOpEYh5pfkYt1Y0Kdu -Drg4BGePs3ISCisGAQQBl1UBBQEBB0ABhOxxwRpFZxRTx6V3Qv9rmPgwtbzJKk8v -H82NJNo0IQMBCAeIeAQYFgoAIBYhBFJVInSt+DDX2AnNMZFn6oKdAP5uBQJnj7Ny -AhsMAAoJEJFn6oKdAP5uxeoA/R24ZibrPnyYF2e/2TkR3bATDmEWeNwpcRAEVww5 -FWB2AP9GywRmNjRWWLmh8F7NM69REsBlFjYWvItICuggy24gCQ== -=d9DF ------END PGP PUBLIC KEY BLOCK-----" - -HCAPTCHA_RECORDING_ORACLE_URI=disabled -HCAPTCHA_REPUTATION_ORACLE_URI=disabled - -# Auth -JWT_PRIVATE_KEY="-----BEGIN PRIVATE KEY----- -MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgjwW8ZeWIKizY9pSl -phyKfwYFp3aRHeMuV+jOKp49hX6hRANCAATeitytad5Rh0tx6AP/VHptsRvsZ+Xp -/24PICdk4nsMxZEAe76InmWdqhud13JV76Jl02DVenFEJVM5IjRk+mLG ------END PRIVATE KEY-----" -JWT_PUBLIC_KEY="-----BEGIN PUBLIC KEY----- -MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE3orcrWneUYdLcegD/1R6bbEb7Gfl -6f9uDyAnZOJ7DMWRAHu+iJ5lnaobnddyVe+iZdNg1XpxRCVTOSI0ZPpixg== ------END PUBLIC KEY-----" - -# Stripe -STRIPE_SECRET_KEY=disabled -STRIPE_APP_NAME=Launcher Server Local -STRIPE_APP_VERSION=1.0.0 -STRIPE_APP_INFO_URL=http://local.app - -# Vision -GOOGLE_PROJECT_ID=disabled -GOOGLE_PRIVATE_KEY=disabled -GOOGLE_CLIENT_EMAIL=disabled -GCV_MODERATION_RESULTS_FILES_PATH=disabled -GCV_MODERATION_RESULTS_BUCKET=disabled - -# Slack -SLACK_ABUSE_NOTIFICATION_WEBHOOK_URL=disabled diff --git a/docker-setup/env-files/.env.job-launcher-client b/docker-setup/env-files/.env.job-launcher-client deleted file mode 100644 index 575d6bc774..0000000000 --- a/docker-setup/env-files/.env.job-launcher-client +++ /dev/null @@ -1,14 +0,0 @@ -# General -VITE_APP_JOB_LAUNCHER_SERVER_URL=http://0.0.0.0:5003 -VITE_APP_WALLETCONNECT_PROJECT_ID=replace_me - -# Stripe -VITE_APP_STRIPE_PUBLISHABLE_KEY=disabled - -# hCaptcha -VITE_APP_HCAPTCHA_SITE_KEY=10000000-ffff-ffff-ffff-000000000001 - -# Web3 -VITE_APP_ENVIRONMENT=testnet -VITE_APP_SUPPORTED_CHAINS=80002 -VITE_APP_RPC_URL_POLYGON_AMOY=https://rpc-amoy.polygon.technology diff --git a/docker-setup/env-files/.env.recording-oracle-fortune b/docker-setup/env-files/.env.recording-oracle-fortune deleted file mode 100644 index 29b935af83..0000000000 --- a/docker-setup/env-files/.env.recording-oracle-fortune +++ /dev/null @@ -1,37 +0,0 @@ -# Web3 -WEB3_PRIVATE_KEY=replace_me - -# Encryption -PGP_ENCRYPT=true -PGP_PRIVATE_KEY="-----BEGIN PGP PRIVATE KEY BLOCK----- - -xYYEaCsnrRYJKwYBBAHaRw8BAQdADWMKa+9YvRJV474d+BDsLv7a+aSkMMkR -FZOWJG1ePjT+CQMIZhNMm+tnPeTgihnx8ru0E3sqYcofEvRM9VrSIyrs/U+H -LsK5rsa+NV8Ui+9cKcmtCW4EJ12LNmTg1xYJsxQnn4eZQzSmlMkK5N61KyJ+ -zM0AwowEEBYKAD4FgmgrJ60ECwkHCAmQuTtXvy2rDmoDFQgKBBYAAgECGQEC -mwMCHgEWIQRhezz+qPdIIiGIyyS5O1e/LasOagAASiUBAL2ngIhlne91+Z7h -RHU0F4ENomy/e1S6w/gn/dVLfE1OAP9ZG9x1gksN1R1O9Fgq1WfGkHNJi/8U -DF7yO8H8sDw2D8eLBGgrJ60SCisGAQQBl1UBBQEBB0A9v5ubU6UB6C9yoUPc -Zqu8ZyQHa55VFR3figyExeVtRwMBCAf+CQMIU0kTC9Fq7ozgh/iv/ybvydCJ -pdU7fNuD2Ipb4ZfRVMrogkQLolOKgRd8468OSoNFuk4RnYkBsyafZmI4KGkG -+oroKa+1mThKi6ePu7GO/cJ4BBgWCgAqBYJoKyetCZC5O1e/LasOagKbDBYh -BGF7PP6o90giIYjLJLk7V78tqw5qAACsjwD+O/d9B6wJDDd2FRp3JmZPt/sJ -vyg2sQLiIXbjACHXCI4BALbO+tfsyeSxYiK0j67etKnFzoG+1ek1vukDdIf7 -tMcN -=qkIF ------END PGP PRIVATE KEY BLOCK-----" -PGP_PASSPHRASE=tt8Bn946gusiJm4r5wX -# Put it here just to easily set up KV later; not needed to run -PGP_PUBLIC_KEY="-----BEGIN PGP PUBLIC KEY BLOCK----- - -xjMEaCsnrRYJKwYBBAHaRw8BAQdADWMKa+9YvRJV474d+BDsLv7a+aSkMMkR -FZOWJG1ePjTNAMKMBBAWCgA+BYJoKyetBAsJBwgJkLk7V78tqw5qAxUICgQW -AAIBAhkBApsDAh4BFiEEYXs8/qj3SCIhiMskuTtXvy2rDmoAAEolAQC9p4CI -ZZ3vdfme4UR1NBeBDaJsv3tUusP4J/3VS3xNTgD/WRvcdYJLDdUdTvRYKtVn -xpBzSYv/FAxe8jvB/LA8Ng/OOARoKyetEgorBgEEAZdVAQUBAQdAPb+bm1Ol -AegvcqFD3GarvGckB2ueVRUd34oMhMXlbUcDAQgHwngEGBYKACoFgmgrJ60J -kLk7V78tqw5qApsMFiEEYXs8/qj3SCIhiMskuTtXvy2rDmoAAKyPAP47930H -rAkMN3YVGncmZk+3+wm/KDaxAuIhduMAIdcIjgEAts761+zJ5LFiIrSPrt60 -qcXOgb7V6TW+6QN0h/u0xw0= -=Hpds ------END PGP PUBLIC KEY BLOCK-----" diff --git a/docker-setup/env-files/.env.reputation-oracle b/docker-setup/env-files/.env.reputation-oracle deleted file mode 100644 index da9674c259..0000000000 --- a/docker-setup/env-files/.env.reputation-oracle +++ /dev/null @@ -1,55 +0,0 @@ -# Auth -JWT_PRIVATE_KEY="-----BEGIN PRIVATE KEY----- -MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg9T4TcNz4sFIvOZTE -wBHX986G90H20Cryp4++7APQfu6hRANCAASQ96QPer3ose3gh+9jVRjVi6RN4R8r -5evI9eFTnucq6FlcE9GtD6UwN4WlikdakaoD8rnvqf6sO+NsGAd9CIcq ------END PRIVATE KEY-----" - -# web3 -WEB3_PRIVATE_KEY=replace_me - -# Encryption -PGP_ENCRYPT=true -PGP_PRIVATE_KEY="-----BEGIN PGP PRIVATE KEY BLOCK----- - -lIYEZ4lbOhYJKwYBBAHaRw8BAQdAgyoVs1EoBCW7THMZLKJ8wVIXqINDDp0dQMoh -DXV0iTH+BwMCb6qyWpKmegj/IpdlppS+qycJNtMQ6RDaSZlMsq+UTRBEM64jxs3y -EKOI8P9sCP1qBJl1wIWCifBSmTAKcTeOIuLB4P6cljz8DSo3D4lxM7RXUmVwdXRh -dGlvbiBPcmFjbGUgKEV4YW1wbGUgcGdwIGtleSBmb3IgcmVwdXRhdGlvbiBvcmFj -bGUpIDxyZXB1dGF0aW9uLW9yYWNsZUBobXQubG9jYWw+iJMEExYKADsWIQTYqYVR -HpEWi8IdtKTm/YtkpDwV7QUCZ4lbOgIbAwULCQgHAgIiAgYVCgkICwIEFgIDAQIe -BwIXgAAKCRDm/YtkpDwV7b4pAQCmCmKS7PyC3DKwt65bo7iFEc4ZPrVC3SElktaM -sONZ5gEAzl292RHsJFlN3fhm7w5PM6eCqwkuBq7GchWFfz0oYAWciwRniVs6Egor -BgEEAZdVAQUBAQdAvuHJsFMJQJKNud0PBglT26Tq+fx2yM1+fYvrzTuqwhYDAQgH -/gcDAqscEWOQgpOz//4EYtR175elc/o1/0XqW74aSScCylvAMWa3QQ/TU7m39TiD -P45fKGJAYPXJEYCz36g+NSeLP1iZyWQAkweEZoQERWLgbpaIeAQYFgoAIBYhBNip -hVEekRaLwh20pOb9i2SkPBXtBQJniVs6AhsMAAoJEOb9i2SkPBXtDBUA/31dsyJ7 -AxylargNkQx/Q/5Ws/WaIT1zRJauE9kpO71iAP98o89Exq+rc268uXSN+2/edJ/D -Sq+xksFikJ/P/WeXBg== -=kI8h ------END PGP PRIVATE KEY BLOCK-----" -PGP_PASSPHRASE=avg3GJT-asd5kgk_kgx -# Put it here just to easily set up KV later; not needed to run -PGP_PUBLIC_KEY="-----BEGIN PGP PUBLIC KEY BLOCK----- - -mDMEZ4lbOhYJKwYBBAHaRw8BAQdAgyoVs1EoBCW7THMZLKJ8wVIXqINDDp0dQMoh -DXV0iTG0V1JlcHV0YXRpb24gT3JhY2xlIChFeGFtcGxlIHBncCBrZXkgZm9yIHJl -cHV0YXRpb24gb3JhY2xlKSA8cmVwdXRhdGlvbi1vcmFjbGVAaG10LmxvY2FsPoiT -BBMWCgA7FiEE2KmFUR6RFovCHbSk5v2LZKQ8Fe0FAmeJWzoCGwMFCwkIBwICIgIG -FQoJCAsCBBYCAwECHgcCF4AACgkQ5v2LZKQ8Fe2+KQEApgpikuz8gtwysLeuW6O4 -hRHOGT61Qt0hJZLWjLDjWeYBAM5dvdkR7CRZTd34Zu8OTzOngqsJLgauxnIVhX89 -KGAFuDgEZ4lbOhIKKwYBBAGXVQEFAQEHQL7hybBTCUCSjbndDwYJU9uk6vn8dsjN -fn2L6807qsIWAwEIB4h4BBgWCgAgFiEE2KmFUR6RFovCHbSk5v2LZKQ8Fe0FAmeJ -WzoCGwwACgkQ5v2LZKQ8Fe0MFQD/fV2zInsDHKVquA2RDH9D/laz9ZohPXNElq4T -2Sk7vWIA/3yjz0TGr6tzbry5dI37b950n8NKr7GSwWKQn8/9Z5cG -=SrHM ------END PGP PUBLIC KEY BLOCK-----" - -KYC_API_KEY=disabled -KYC_API_PRIVATE_KEY=none - -NDA_URL=https://humanprotocol.org - -ABUSE_SLACK_WEBHOOK_URL=http://disabled-for-local.app -ABUSE_SLACK_SIGNING_SECRET=disabled -ABUSE_SLACK_OAUTH_TOKEN=disabled \ No newline at end of file From 50435719ba38624a8008e3ac1fb9a9f5ce9e9008 Mon Sep 17 00:00:00 2001 From: Dmitry Nechay Date: Thu, 22 May 2025 16:22:27 +0300 Subject: [PATCH 24/29] refactor: cvat env files --- docker-setup/{env-files => }/.env.compose | 3 - docker-setup/Makefile | 14 +-- docker-setup/docker-compose.yml | 25 +---- .../env-files/.env.exchange-oracle-cvat | 61 ------------ .../env-files/.env.recording-oracle-cvat | 44 --------- .../cvat/exchange-oracle/src/.env.example | 93 +++++++++++++++++++ .../cvat/recording-oracle/src/.env.example | 82 ++++++++++++++++ 7 files changed, 182 insertions(+), 140 deletions(-) rename docker-setup/{env-files => }/.env.compose (85%) delete mode 100644 docker-setup/env-files/.env.exchange-oracle-cvat delete mode 100644 docker-setup/env-files/.env.recording-oracle-cvat create mode 100644 packages/examples/cvat/exchange-oracle/src/.env.example create mode 100644 packages/examples/cvat/recording-oracle/src/.env.example diff --git a/docker-setup/env-files/.env.compose b/docker-setup/.env.compose similarity index 85% rename from docker-setup/env-files/.env.compose rename to docker-setup/.env.compose index 94ce831098..7252e86817 100644 --- a/docker-setup/env-files/.env.compose +++ b/docker-setup/.env.compose @@ -16,9 +16,6 @@ JOB_LAUNCHER_CLIENT_EXPOSED_PORT=3002 FORTUNE_CLIENT_EXPOSED_PORT=3003 RPC_URL_POLYGON_AMOY=https://rpc-amoy.polygon.technology -# Oracle addresses -CVAT_EXCHANGE_ORACLE_ADDRESS=replace_me -CVAT_RECORDING_ORACLE_ADDRESS=replace_me # Might be empty SUBGRAPH_API_KEY= diff --git a/docker-setup/Makefile b/docker-setup/Makefile index 1bbea9537d..2d7d141429 100644 --- a/docker-setup/Makefile +++ b/docker-setup/Makefile @@ -1,18 +1,8 @@ -.PHONY: copy-env-files \ - infra-up infra-stop build-services \ - services-up services-stop +.PHONY: infra-up infra-stop \ + build-services services-up services-stop DOCKER_PARALLEL ?= 4 -copy-env-files: -# Copying .env file for compose itself - @cp ./env-files/.env.compose .env.compose.local -# Copying .env files for cvat services - @cp ./env-files/.env.exchange-oracle-cvat ./.env.exchange-oracle-cvat.local - @cp ./env-files/.env.recording-oracle-cvat ./.env.recording-oracle-cvat.local -# Restore original files - @git checkout . > /dev/null 2>&1 - infra-up: docker-compose --env-file .env.compose.local up -d postgres redis minio minio-client diff --git a/docker-setup/docker-compose.yml b/docker-setup/docker-compose.yml index 6e7e05602a..7d1ee32780 100644 --- a/docker-setup/docker-compose.yml +++ b/docker-setup/docker-compose.yml @@ -23,7 +23,7 @@ x-hardcoded-vars: x-general-env-variables: # GENERAL VARS subgraph_api_key: &subgraph_api_key ${SUBGRAPH_API_KEY} - rpc_url_polygon_amoy: &rpc_url_polygon_amoy ${RPC_URL_POLYGON_AMOY:-} + rpc_url_polygon_amoy: &rpc_url_polygon_amoy ${RPC_URL_POLYGON_AMOY:?} # POSTGRES VARS postgres_user: &postgres_user ${POSTGRES_USER:-default} postgres_password: &postgres_password ${POSTGRES_PASSWORD:-qwerty} @@ -41,9 +41,6 @@ x-general-env-variables: bucket_name_cvat_exc_o: &bucket_name_cvat_exc_o ${BUCKET_NAME_CVAT_EXCHANGE_ORACLE:-cvat-exchange-oracle} bucket_name_cvat_rec_o: &bucket_name_cvat_rec_o ${BUCKET_NAME_CVAT_RECORDING_ORACLE:-cvat-recording-oracle} bucket_name_fortune: &bucket_name_fortune ${BUCKEN_NAME_FORTUNE:-fortune} - # WEB3 ADDRESSES - cvat_exchange_oracle_address: &cvat_exchange_oracle_address ${CVAT_EXCHANGE_ORACLE_ADDRESS:?} - cvat_recording_oracle_address: &cvat_recording_oracle_address ${CVAT_RECORDING_ORACLE_ADDRESS:?} # OTHER backend_apps_internal_port: &backend_apps_internal_port ${BACKEND_APPS_INTERNAL_PORT:?} cvat_oracle_storage_endpoint: &cvat_oracle_storage_endpoint minio:${MINIO_PORT:?} @@ -57,6 +54,8 @@ x-service-env-vars-groups: REDIS_PORT: *redis_port nodejs_app_vars: &nodejs_app_vars NODE_ENV: *node_env + SUBGRAPH_API_KEY: *subgraph_api_key + RPC_URL_POLYGON_AMOY: *rpc_url_polygon_amoy nodejs_app_postgres_vars: &nodejs_app_postgres_vars <<: *postgres_auth_vars POSTGRES_HOST: *postgres_host @@ -271,6 +270,7 @@ services: PORT: *backend_apps_internal_port REDIS_DB: 1 REPUTATION_ORACLE_URL: http://reputation-oracle:${BACKEND_APPS_INTERNAL_PORT:?} + RPC_URL: *rpc_url_polygon_amoy human-app-client: container_name: human-app-client @@ -326,7 +326,6 @@ services: - name: server_port target: *backend_apps_internal_port published: ${EXCHANGE_ORACLE_CVAT_EXPOSED_PORT:?} - env_file: ./.env.exchange-oracle-cvat.local environment: HOST: *all_interfaces_ip PORT: *backend_apps_internal_port @@ -339,12 +338,8 @@ services: REDIS_DB: 2 PG_DB: exchange-oracle-cvat POLYGON_AMOY_RPC_API_URL: *rpc_url_polygon_amoy - POLYGON_AMOY_ADDR: *cvat_exchange_oracle_address STORAGE_BUCKET_NAME: *bucket_name_cvat_exc_o CVAT_INCOMING_WEBHOOKS_URL: "http://exchange-oracle.app:${BACKEND_APPS_INTERNAL_PORT:?}/cvat-webhook" - LOCALHOST_RECORDING_ORACLE_URL: "http://recording-oracle-cvat:${BACKEND_APPS_INTERNAL_PORT:?}/webhook" - LOCALHOST_JOB_LAUNCHER_URL: "http://job-launcher:${BACKEND_APPS_INTERNAL_PORT:?}/webhook" - LOCALHOST_RECORDING_ORACLE_ADDRESS: *cvat_recording_oracle_address ENABLE_CUSTOM_CLOUD_HOST: yes # User for KV store setup SERVER_URL: http://exchange-oracle-cvat:${BACKEND_APPS_INTERNAL_PORT:?} @@ -375,7 +370,6 @@ services: - name: server_port target: *backend_apps_internal_port published: ${RECORDING_ORACLE_CVAT_EXPOSED_PORT:?} - env_file: ./.env.recording-oracle-cvat.local environment: HOST: *all_interfaces_ip PORT: *backend_apps_internal_port @@ -386,18 +380,9 @@ services: ] PG_DB: recording-oracle-cvat POLYGON_AMOY_RPC_API_URL: *rpc_url_polygon_amoy - POLYGON_AMOY_ADDR: *cvat_recording_oracle_address STORAGE_RESULTS_BUCKET_NAME: *bucket_name_cvat_rec_o STORAGE_USE_PATH_STYLE: "true" - EXCHANGE_ORACLE_STORAGE_PROVIDER: *cvat_oracle_storage_provider - EXCHANGE_ORACLE_STORAGE_ENDPOINT_URL: *cvat_oracle_storage_endpoint - EXCHANGE_ORACLE_STORAGE_ACCESS_KEY: *minio_services_access_key - EXCHANGE_ORACLE_STORAGE_SECRET_KEY: *minio_services_secret_key - EXCHANGE_ORACLE_STORAGE_RESULTS_BUCKET_NAME: *bucket_name_cvat_exc_o - EXCHANGE_ORACLE_STORAGE_USE_SSL: 'false' - LOCALHOST_EXCHANGE_ORACLE_URL: "http://exchange-oracle-cvat:${BACKEND_APPS_INTERNAL_PORT:?}/webhook" - LOCALHOST_REPUTATION_ORACLE_URL: "http://reputation-oracle:${BACKEND_APPS_INTERNAL_PORT:?}/webhook" - LOCALHOST_EXCHANGE_ORACLE_ADDRESS: *cvat_exchange_oracle_address + ENABLE_CUSTOM_CLOUD_HOST: "yes" # User for KV store setup SERVER_URL: http://recording-oracle-cvat:${BACKEND_APPS_INTERNAL_PORT:?} diff --git a/docker-setup/env-files/.env.exchange-oracle-cvat b/docker-setup/env-files/.env.exchange-oracle-cvat deleted file mode 100644 index dcac6d0440..0000000000 --- a/docker-setup/env-files/.env.exchange-oracle-cvat +++ /dev/null @@ -1,61 +0,0 @@ -## Polygon Amoy Config -POLYGON_AMOY_PRIVATE_KEY=replace_me - -## Cron Config -## To make environment more convenient with faster updates -PROCESS_JOB_LAUNCHER_WEBHOOKS_INT=10 -PROCESS_RECORDING_ORACLE_WEBHOOKS_INT=10 -TRACK_COMPLETED_PROJECTS_INT=10 -TRACK_COMPLETED_TASKS_INT=10 -TRACK_COMPLETED_ESCROWS_INT=10 -TRACK_CREATING_TASKS_INT=10 -TRACK_ASSIGNMENTS_INT=10 -TRACK_ESCROW_CREATION_INT=100 - -## Features -REQUEST_LOGGING_ENABLED="yes" -PROFILING_ENABLED="yes" - -## Core -DEFAULT_ASSIGNMENT_TIME=600 - -## PGP Keys data -PGP_PRIVATE_KEY="-----BEGIN PGP PRIVATE KEY BLOCK----- - -xYYEZ4+2FxYJKwYBBAHaRw8BAQdAodfgvZwd1/s2tStzumk9T+WhuirhI8AD -eEOG4jdMhdD+CQMI9hA7Uf00eCXgAmMXD7ffmZaIpOjJXd3I4GM8mvKqP2DV -Ts6iDtfTy0f/jqEdTgNoh9Q5Q6uXW3/zAXivDtc7hGaMMA6/ITQsk7tg7LtL -HM0rRXhjaGFuZ2UgT3JhY2xlIDxleGNoYW5nZS1vcmFjbGVAbG9jYWwuYXBw -PsKMBBAWCgA+BYJnj7YXBAsJBwgJkNHy48FpPLsnAxUICgQWAAIBAhkBApsD -Ah4BFiEEydMT95OC9OCzQFjL0fLjwWk8uycAALavAP9RKP8wUxhuFKxFQ7IB -SQTTAZgamwezk0KqEuy6U70UtwEAiWyjFo3Y5oTzaOABs3YTogumq3v+Kmnn -yYNl/UHyZwXHiwRnj7YXEgorBgEEAZdVAQUBAQdA0THKoGl7/bviCOOm0MZ2 -6CSyN/PbPL5j9C6m5T/90GcDAQgH/gkDCBJs91BQdiVL4PZj8WlKnyu+7sBD -p1pKRAqCxx/DDnYWGTFyW8JMgM6bcEfCIl+q5WeO35k1SXFJKUu2Wd1Cl5r1 -kp/DonyJmiRM+Lo/evbCeAQYFgoAKgWCZ4+2FwmQ0fLjwWk8uycCmwwWIQTJ -0xP3k4L04LNAWMvR8uPBaTy7JwAAVCEBAKBllZtzefLZsoE0behnwu5SCnSS -ORb+9kItQJMdBcnWAP9HcsCq3Ve6pOUXBuMWlmQ8IspXQ/oPHdQ7gEJ8+q6H -Bw== -=w1I+ ------END PGP PRIVATE KEY BLOCK-----" -PGP_PASSPHRASE=exc-o-pgp-password -PGP_PUBLIC_KEY="-----BEGIN PGP PUBLIC KEY BLOCK----- - -xjMEZ4+2FxYJKwYBBAHaRw8BAQdAodfgvZwd1/s2tStzumk9T+WhuirhI8AD -eEOG4jdMhdDNK0V4Y2hhbmdlIE9yYWNsZSA8ZXhjaGFuZ2Utb3JhY2xlQGxv -Y2FsLmFwcD7CjAQQFgoAPgWCZ4+2FwQLCQcICZDR8uPBaTy7JwMVCAoEFgAC -AQIZAQKbAwIeARYhBMnTE/eTgvTgs0BYy9Hy48FpPLsnAAC2rwD/USj/MFMY -bhSsRUOyAUkE0wGYGpsHs5NCqhLsulO9FLcBAIlsoxaN2OaE82jgAbN2E6IL -pqt7/ipp58mDZf1B8mcFzjgEZ4+2FxIKKwYBBAGXVQEFAQEHQNExyqBpe/27 -4gjjptDGdugksjfz2zy+Y/QupuU//dBnAwEIB8J4BBgWCgAqBYJnj7YXCZDR -8uPBaTy7JwKbDBYhBMnTE/eTgvTgs0BYy9Hy48FpPLsnAABUIQEAoGWVm3N5 -8tmygTRt6GfC7lIKdJI5Fv72Qi1Akx0FydYA/0dywKrdV7qk5RcG4xaWZDwi -yldD+g8d1DuAQnz6rocH -=AVB0 ------END PGP PUBLIC KEY BLOCK-----" -PGP_PUBLIC_KEY_URL=http://minio:9000/exchange-oracle/pgp-public-key - -HUMAN_APP_JWT_KEY="-----BEGIN PUBLIC KEY----- -MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEkPekD3q96LHt4IfvY1UY1YukTeEf -K+XryPXhU57nKuhZXBPRrQ+lMDeFpYpHWpGqA/K576n+rDvjbBgHfQiHKg== ------END PUBLIC KEY-----" \ No newline at end of file diff --git a/docker-setup/env-files/.env.recording-oracle-cvat b/docker-setup/env-files/.env.recording-oracle-cvat deleted file mode 100644 index bf0805d59d..0000000000 --- a/docker-setup/env-files/.env.recording-oracle-cvat +++ /dev/null @@ -1,44 +0,0 @@ -# Polygon Amoy -POLYGON_AMOY_PRIVATE_KEY=replace_me - -# Cron jobs -PROCESS_EXCHANGE_ORACLE_WEBHOOKS_INT=10 -PROCESS_REPUTATION_ORACLE_WEBHOOKS_INT=10 - -# Features -ENABLE_CUSTOM_CLOUD_HOST="yes" - - -# Encryption -PGP_PRIVATE_KEY="-----BEGIN PGP PRIVATE KEY BLOCK----- - -xYYEZ+KclxYJKwYBBAHaRw8BAQdAQmPWFqgCHKBl5orZ14BjdEge9LL3VbyJ -kXqRRe7xJkv+CQMIk7BjanLIRJrgAkRNCk3U5RwAyZax53wbK8NfV+2i7cjY -NFkbiOK8yuq+QG0T/PoKyXFOa126gwsBTlKmyPT5/am8rTFf6k39NzCn8f7D -y80AwowEEBYKAD4FgmfinJcECwkHCAmQ0JGHkZYk1mYDFQgKBBYAAgECGQEC -mwMCHgEWIQQcpeN3tBh8ex2F8HjQkYeRliTWZgAADaMA/0wSvCfUTDYN3gzn -HDDdmqEqg+ji5NTUNjj3jVtLm+XeAP4v2KpGFWXQnCcexTf1USll9ddZC/6H -ZlcFmCuvWX/1B8eLBGfinJcSCisGAQQBl1UBBQEBB0DSGXpmTLBqiPz59qLa -Cuarsa6Q09QJKB6GSEa3Me4zSAMBCAf+CQMI+V7xRESw/5Hg2tbHs6q0oWuF -/jMu2bLAu4n+C5tw+7eZK5imqu9iocp/ZRMBAQgTp/VIUbFopHk18THVGZKE -Vh5zLxinmAP4zkMPm8SsCcJ4BBgWCgAqBYJn4pyXCZDQkYeRliTWZgKbDBYh -BByl43e0GHx7HYXweNCRh5GWJNZmAAAz0wEAgXxWZUkSDk1HfVGb77/jR562 -Kt8i8+ZdOuY7CehB7JIBAPip5C1mea5bxHrOHt/BzUC0oWcvP+U4W6K6Ccdy -/8UO -=IMpo ------END PGP PRIVATE KEY BLOCK-----" -PGP_PASSPHRASE=rec-o-pgp-password -PGP_PUBLIC_KEY="-----BEGIN PGP PUBLIC KEY BLOCK----- - -xjMEZ+KclxYJKwYBBAHaRw8BAQdAQmPWFqgCHKBl5orZ14BjdEge9LL3VbyJ -kXqRRe7xJkvNAMKMBBAWCgA+BYJn4pyXBAsJBwgJkNCRh5GWJNZmAxUICgQW -AAIBAhkBApsDAh4BFiEEHKXjd7QYfHsdhfB40JGHkZYk1mYAAA2jAP9MErwn -1Ew2Dd4M5xww3ZqhKoPo4uTU1DY4941bS5vl3gD+L9iqRhVl0JwnHsU39VEp -ZfXXWQv+h2ZXBZgrr1l/9QfOOARn4pyXEgorBgEEAZdVAQUBAQdA0hl6Zkyw -aoj8+fai2grmq7GukNPUCSgehkhGtzHuM0gDAQgHwngEGBYKACoFgmfinJcJ -kNCRh5GWJNZmApsMFiEEHKXjd7QYfHsdhfB40JGHkZYk1mYAADPTAQCBfFZl -SRIOTUd9UZvvv+NHnrYq3yLz5l065jsJ6EHskgEA+KnkLWZ5rlvEes4e38HN -QLShZy8/5ThboroJx3L/xQ4= -=eS/4 ------END PGP PUBLIC KEY BLOCK-----" -PGP_PUBLIC_KEY_URL=http://minio:9000/recording-oracle/pgp-public-key diff --git a/packages/examples/cvat/exchange-oracle/src/.env.example b/packages/examples/cvat/exchange-oracle/src/.env.example new file mode 100644 index 0000000000..e3fa11e377 --- /dev/null +++ b/packages/examples/cvat/exchange-oracle/src/.env.example @@ -0,0 +1,93 @@ +# General +HOST=0.0.0.0 +PORT=5004 + +# Postgres config +PG_HOST=0.0.0.0 +PG_PORT=5433 +PG_USER=default +PG_PASSWORD=qwerty +PG_DB=exchange-oracle-cvat + +# Redis config +REDIS_HOST=0.0.0.0 +REDIS_PORT=6380 +REDIS_DB=2 + +# Storage Config (S3/GCS/Minio) +STORAGE_PROVIDER=aws +STORAGE_ENDPOINT_URL=minio:9000 +STORAGE_ACCESS_KEY=human-oracle +STORAGE_SECRET_KEY=human-oracle-s3-secret +STORAGE_BUCKET_NAME=cvat-exchange-oracle +STORAGE_USE_SSL=false + +# Polygon Amoy Config +POLYGON_AMOY_RPC_API_URL=https://rpc-amoy.polygon.technology +POLYGON_AMOY_PRIVATE_KEY=replace_me +POLYGON_AMOY_ADDR=replace_me + +# Cron Config +PROCESS_JOB_LAUNCHER_WEBHOOKS_INT=10 +PROCESS_RECORDING_ORACLE_WEBHOOKS_INT=10 +TRACK_COMPLETED_PROJECTS_INT=10 +TRACK_COMPLETED_TASKS_INT=10 +TRACK_COMPLETED_ESCROWS_INT=10 +TRACK_CREATING_TASKS_INT=10 +TRACK_ASSIGNMENTS_INT=10 +TRACK_ESCROW_CREATION_INT=10 +TRACK_ESCROW_VALIDATIONS_INT=10 + +# CVAT Config +CVAT_URL=http://cvat-lb:8080 +CVAT_ADMIN=human-protocol +CVAT_ADMIN_PASS=qwe123qwe123Q! +CVAT_ORG_SLUG=HumanAppLocal + +# Features +ENABLE_CUSTOM_CLOUD_HOST="yes" + +# Core +DEFAULT_ASSIGNMENT_TIME=600 + +# HUMAN App config +HUMAN_APP_JWT_KEY="-----BEGIN PUBLIC KEY----- +MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEkPekD3q96LHt4IfvY1UY1YukTeEf +K+XryPXhU57nKuhZXBPRrQ+lMDeFpYpHWpGqA/K576n+rDvjbBgHfQiHKg== +-----END PUBLIC KEY-----" + +# Encryption +PGP_PRIVATE_KEY="-----BEGIN PGP PRIVATE KEY BLOCK----- + +lIYEZ4+21RYJKwYBBAHaRw8BAQdAgnSCXFMaftE221PbAvaliZTq+G5rTsAGjIpd +e8YOMBH+BwMCFUpbjvBTcm3/4iq8P/neJEdtL2uJ/OL8jNIOJ88yC7iokBzUZ+e6 +lhbmxybD+dxjuZf16iXzDjYYI2R/VnmKt4chtNqrt0X+DBx2a2DjfLQ/Y3ZhdC1l +eGNoYW5nZS1vcmFjbGVAbG9jYWwuYXBwIDxjdmF0LWV4Y2hhbmdlLW9yYWNsZUBs +b2NhbC5hcHA+iJMEExYKADsWIQSOUPmSUTqBxtsdHRxJkcIKPK7cJAUCZ4+21QIb +AwULCQgHAgIiAgYVCgkICwIEFgIDAQIeBwIXgAAKCRBJkcIKPK7cJPhsAQCzUx0u +Sv+TkPWyn2zauMcMnffwzkTdC6v0nh3lsm6oewD/SnZVrFqIOoeBlUM57val6JwG +YyKKHt/mjISs2Dqo8wCciwRnj7bVEgorBgEEAZdVAQUBAQdAJjhRu8SX7Ryn+rYY +AkVxrBPI3GXQoWFSO/B4HopIJi0DAQgH/gcDAhXjA3yGYNM5/+uG9U29B/vFW2So +v7A4eMI+J+8/K8RObR2tTM3KEC7dXJKR9YTYqIVR10AwI4iR6XplSqjP2Un6jMlI +pSMN2l0vuJpxdzSIeAQYFgoAIBYhBI5Q+ZJROoHG2x0dHEmRwgo8rtwkBQJnj7bV +AhsMAAoJEEmRwgo8rtwkoLYBAJMZnNZqp+7uXomSguiPujFwgMobR1jXFsOASZF8 +HPLwAQD6uUWeuPdHXen+STls/0g4MI2jn2PwtAT/cpQ7tsoTDA== +=Uhu5 +-----END PGP PRIVATE KEY BLOCK-----" +PGP_PASSPHRASE=SfR1I92e66G2OJoA +# Put it here just to easily set up KV later; not needed to run +PGP_PUBLIC_KEY="-----BEGIN PGP PUBLIC KEY BLOCK----- + +mDMEZ4+21RYJKwYBBAHaRw8BAQdAgnSCXFMaftE221PbAvaliZTq+G5rTsAGjIpd +e8YOMBG0P2N2YXQtZXhjaGFuZ2Utb3JhY2xlQGxvY2FsLmFwcCA8Y3ZhdC1leGNo +YW5nZS1vcmFjbGVAbG9jYWwuYXBwPoiTBBMWCgA7FiEEjlD5klE6gcbbHR0cSZHC +Cjyu3CQFAmePttUCGwMFCwkIBwICIgIGFQoJCAsCBBYCAwECHgcCF4AACgkQSZHC +Cjyu3CT4bAEAs1MdLkr/k5D1sp9s2rjHDJ338M5E3Qur9J4d5bJuqHsA/0p2Vaxa +iDqHgZVDOe72peicBmMiih7f5oyErNg6qPMAuDgEZ4+21RIKKwYBBAGXVQEFAQEH +QCY4UbvEl+0cp/q2GAJFcawTyNxl0KFhUjvweB6KSCYtAwEIB4h4BBgWCgAgFiEE +jlD5klE6gcbbHR0cSZHCCjyu3CQFAmePttUCGwwACgkQSZHCCjyu3CSgtgEAkxmc +1mqn7u5eiZKC6I+6MXCAyhtHWNcWw4BJkXwc8vABAPq5RZ6490dd6f5JOWz/SDgw +jaOfY/C0BP9ylDu2yhMM +=YMyq +-----END PGP PUBLIC KEY BLOCK-----" +PGP_PUBLIC_KEY_URL=http://minio:9000/cvat-exchange-oracle/pgp-public-key diff --git a/packages/examples/cvat/recording-oracle/src/.env.example b/packages/examples/cvat/recording-oracle/src/.env.example new file mode 100644 index 0000000000..5ad1b49ccd --- /dev/null +++ b/packages/examples/cvat/recording-oracle/src/.env.example @@ -0,0 +1,82 @@ +# General +HOST=0.0.0.0 +PORT=5005 + +# Postgres config +PG_HOST=0.0.0.0 +PG_PORT=5433 +PG_USER=default +PG_PASSWORD=qwerty +PG_DB=recording + +# Polygon Amoy +POLYGON_AMOY_RPC_API_URL=https://rpc-amoy.polygon.technology +POLYGON_AMOY_PRIVATE_KEY=replace_me +POLYGON_AMOY_ADDR=replace_me + +# Cron jobs +PROCESS_EXCHANGE_ORACLE_WEBHOOKS_INT=10 +PROCESS_REPUTATION_ORACLE_WEBHOOKS_INT=10 + +# Storage Config (S3/GCS/Minio) +STORAGE_PROVIDER=aws +STORAGE_ENDPOINT_URL=minio:9000 +STORAGE_ACCESS_KEY=human-oracle +STORAGE_SECRET_KEY=human-oracle-s3-secret +STORAGE_BUCKET_NAME=cvat-exchange-oracle +STORAGE_USE_SSL=false +STORAGE_RESULTS_BUCKET_NAME=cvat-recording-oracle +STORAGE_USE_PATH_STYLE=true + +# Exchange Oracle Storage +STORAGE_BUCKET_NAME=cvat-exchange-oracle +EXCHANGE_ORACLE_STORAGE_PROVIDER=aws +EXCHANGE_ORACLE_STORAGE_ENDPOINT_URL=minio:9000 +EXCHANGE_ORACLE_STORAGE_ACCESS_KEY=human-oracle +EXCHANGE_ORACLE_STORAGE_SECRET_KEY=human-oracle-s3-secret +EXCHANGE_ORACLE_STORAGE_RESULTS_BUCKET_NAME=cvat-exchange-oracle +EXCHANGE_ORACLE_STORAGE_USE_SSL=false + +# CVAT Config +CVAT_URL=http://cvat-lb:8080 +CVAT_ADMIN=human-protocol +CVAT_ADMIN_PASS=qwe123qwe123Q! +CVAT_ORG_SLUG=HumanAppLocal + +# Features +ENABLE_CUSTOM_CLOUD_HOST=true + +# Encryption +PGP_PRIVATE_KEY="-----BEGIN PGP PRIVATE KEY BLOCK----- + +lIYEZ4+5ghYJKwYBBAHaRw8BAQdAT3FAHszcuVoku0YlOyJrgqJf8NmnKc6qKU5N +eHznpx/+BwMCO3NOItWdTgX/JDQWQQIm+JyvWIZQjFsvXJKClXXM21hA0z1bux9a +Qx9+YAIbiwnu0YFUJMvI8cfBv3hGkiA325NmqLZ5kUzqvjxp9w92JbQtUmVjb3Jk +aW5nIE9yYWNsZSA8cmVjb3JkaW5nLW9yYWNsZUBsb2NhbC5hcHA+iJMEExYKADsW +IQSSY2XwNs+1ey1IByhZ3rDnTiC9mQUCZ4+5ggIbAwULCQgHAgIiAgYVCgkICwIE +FgIDAQIeBwIXgAAKCRBZ3rDnTiC9mZztAP46luOhfAnAaf/fNav6SPL9FdVftx4K +xvojSjYyPQmyRQEA/V5+F1boR+rQOycthh0o05TTarnNfY6Yaz3lw2+qeAuciwRn +j7mCEgorBgEEAZdVAQUBAQdATYTo/hz3TJRzFy6dYlTPi/EwL5fMZ5XAVIA4WIj+ +HmwDAQgH/gcDAi05Ryta4lXG/9+5H6+kj44u2Nxs9/84+Yaq5dxIBxl8d5cj/iub +0QvB8xUiEr3+AxofKy4U0I1hgep+1ucS0Px+fJQotwbS0t7RaUZOQa+IeAQYFgoA +IBYhBJJjZfA2z7V7LUgHKFnesOdOIL2ZBQJnj7mCAhsMAAoJEFnesOdOIL2ZnL8A +/Rf4dbJuIr4HhUCmpETEAfbrgb1VHVD+RcuJCFVUyK+ZAP96fCqI6ZBT8SsTz0gR +K08s/F2A8VTKYHyxzIftNMAHBg== +=1L/X +-----END PGP PRIVATE KEY BLOCK-----" +PGP_PASSPHRASE=kGcW5BcuQ7H4eVsfvP1 +# Put it here just to easily set up KV later; not needed to run +PGP_PUBLIC_KEY="-----BEGIN PGP PUBLIC KEY BLOCK----- + +mDMEZ4+5ghYJKwYBBAHaRw8BAQdAT3FAHszcuVoku0YlOyJrgqJf8NmnKc6qKU5N +eHznpx+0LVJlY29yZGluZyBPcmFjbGUgPHJlY29yZGluZy1vcmFjbGVAbG9jYWwu +YXBwPoiTBBMWCgA7FiEEkmNl8DbPtXstSAcoWd6w504gvZkFAmePuYICGwMFCwkI +BwICIgIGFQoJCAsCBBYCAwECHgcCF4AACgkQWd6w504gvZmc7QD+OpbjoXwJwGn/ +3zWr+kjy/RXVX7ceCsb6I0o2Mj0JskUBAP1efhdW6Efq0DsnLYYdKNOU02q5zX2O +mGs95cNvqngLuDgEZ4+5ghIKKwYBBAGXVQEFAQEHQE2E6P4c90yUcxcunWJUz4vx +MC+XzGeVwFSAOFiI/h5sAwEIB4h4BBgWCgAgFiEEkmNl8DbPtXstSAcoWd6w504g +vZkFAmePuYICGwwACgkQWd6w504gvZmcvwD9F/h1sm4ivgeFQKakRMQB9uuBvVUd +UP5Fy4kIVVTIr5kA/3p8KojpkFPxKxPPSBErTyz8XYDxVMpgfLHMh+00wAcG +=CYWX +-----END PGP PUBLIC KEY BLOCK-----" +PGP_PUBLIC_KEY_URL=http://minio:9000/cvat-recording-oracle/pgp-public-key From 727a3afaa74a576417658e63ba20f410649fbcda Mon Sep 17 00:00:00 2001 From: Dmitry Nechay Date: Thu, 22 May 2025 16:28:16 +0300 Subject: [PATCH 25/29] fix: env files resolution for node apps --- .../apps/fortune/exchange-oracle/server/src/app.module.ts | 7 ++++--- packages/apps/fortune/recording-oracle/src/app.module.ts | 7 ++++--- packages/apps/human-app/server/src/app.module.ts | 2 +- packages/apps/job-launcher/server/src/app.module.ts | 7 ++++--- 4 files changed, 13 insertions(+), 10 deletions(-) diff --git a/packages/apps/fortune/exchange-oracle/server/src/app.module.ts b/packages/apps/fortune/exchange-oracle/server/src/app.module.ts index b2bc81423f..03f66a01ae 100644 --- a/packages/apps/fortune/exchange-oracle/server/src/app.module.ts +++ b/packages/apps/fortune/exchange-oracle/server/src/app.module.ts @@ -51,9 +51,10 @@ import { HttpValidationPipe } from './common/pipes'; CronJobModule, UserModule, ConfigModule.forRoot({ - envFilePath: process.env.NODE_ENV - ? `.env.${process.env.NODE_ENV as string}` - : '.env', + /** + * First value found takes precendece + */ + envFilePath: [`.env.${process.env.NODE_ENV}`, '.env'], validationSchema: envValidator, }), DatabaseModule, diff --git a/packages/apps/fortune/recording-oracle/src/app.module.ts b/packages/apps/fortune/recording-oracle/src/app.module.ts index 9a352672b2..8646dcfc09 100644 --- a/packages/apps/fortune/recording-oracle/src/app.module.ts +++ b/packages/apps/fortune/recording-oracle/src/app.module.ts @@ -33,9 +33,10 @@ import { ExceptionFilter } from './common/exceptions/exception.filter'; ], imports: [ ConfigModule.forRoot({ - envFilePath: process.env.NODE_ENV - ? `.env.${process.env.NODE_ENV as string}` - : '.env', + /** + * First value found takes precendece + */ + envFilePath: [`.env.${process.env.NODE_ENV}`, '.env'], validationSchema: envValidator, }), JobModule, diff --git a/packages/apps/human-app/server/src/app.module.ts b/packages/apps/human-app/server/src/app.module.ts index 205407942e..245654afe5 100644 --- a/packages/apps/human-app/server/src/app.module.ts +++ b/packages/apps/human-app/server/src/app.module.ts @@ -52,7 +52,7 @@ const JOI_BOOLEAN_STRING_SCHEMA = Joi.string().valid('true', 'false'); @Module({ imports: [ ConfigModule.forRoot({ - envFilePath: '.env', + envFilePath: [`.env.${process.env.NODE_ENV}`, '.env'], isGlobal: true, validationSchema: Joi.object({ HOST: Joi.string().required(), diff --git a/packages/apps/job-launcher/server/src/app.module.ts b/packages/apps/job-launcher/server/src/app.module.ts index 322ef389d1..32fcb810cc 100644 --- a/packages/apps/job-launcher/server/src/app.module.ts +++ b/packages/apps/job-launcher/server/src/app.module.ts @@ -51,9 +51,10 @@ import { TransformEnumInterceptor } from './common/interceptors/transform-enum.i imports: [ ScheduleModule.forRoot(), ConfigModule.forRoot({ - envFilePath: process.env.NODE_ENV - ? `.env.${process.env.NODE_ENV as string}` - : '.env', + /** + * First value found takes precendece + */ + envFilePath: [`.env.${process.env.NODE_ENV}`, '.env'], validationSchema: envValidator, }), DatabaseModule, From cc380e1a0d401ff072cd7027005a84db4873e32c Mon Sep 17 00:00:00 2001 From: Dmitry Nechay Date: Thu, 22 May 2025 16:50:50 +0300 Subject: [PATCH 26/29] fix: remove excessive dockerignore --- packages/examples/cvat/exchange-oracle/.dockerignore | 4 ---- 1 file changed, 4 deletions(-) delete mode 100644 packages/examples/cvat/exchange-oracle/.dockerignore diff --git a/packages/examples/cvat/exchange-oracle/.dockerignore b/packages/examples/cvat/exchange-oracle/.dockerignore deleted file mode 100644 index ae6030127f..0000000000 --- a/packages/examples/cvat/exchange-oracle/.dockerignore +++ /dev/null @@ -1,4 +0,0 @@ -# dockerfiles/.dockerignore - -# Exclude the .env file in the src directory -src/.env \ No newline at end of file From bdf544cb82e59e5070767e451ef4d5311f90e57a Mon Sep 17 00:00:00 2001 From: Dmitry Nechay Date: Thu, 22 May 2025 16:58:44 +0300 Subject: [PATCH 27/29] refactor: subraph to cvat docker --- docker-setup/docker-compose.yml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/docker-setup/docker-compose.yml b/docker-setup/docker-compose.yml index 7d1ee32780..5ecff8c246 100644 --- a/docker-setup/docker-compose.yml +++ b/docker-setup/docker-compose.yml @@ -56,6 +56,9 @@ x-service-env-vars-groups: NODE_ENV: *node_env SUBGRAPH_API_KEY: *subgraph_api_key RPC_URL_POLYGON_AMOY: *rpc_url_polygon_amoy + cvat_oracle_vars: &cvat_oracle_vars + SUBGRAPH_API_KEY: *subgraph_api_key + POLYGON_AMOY_RPC_API_URL: *rpc_url_polygon_amoy nodejs_app_postgres_vars: &nodejs_app_postgres_vars <<: *postgres_auth_vars POSTGRES_HOST: *postgres_host @@ -330,6 +333,7 @@ services: HOST: *all_interfaces_ip PORT: *backend_apps_internal_port <<: [ + *cvat_oracle_vars, *cvat_oracle_postgres_vars, *redis_app_vars, *cvat_oracle_storage_connection_vars, @@ -337,7 +341,6 @@ services: ] REDIS_DB: 2 PG_DB: exchange-oracle-cvat - POLYGON_AMOY_RPC_API_URL: *rpc_url_polygon_amoy STORAGE_BUCKET_NAME: *bucket_name_cvat_exc_o CVAT_INCOMING_WEBHOOKS_URL: "http://exchange-oracle.app:${BACKEND_APPS_INTERNAL_PORT:?}/cvat-webhook" ENABLE_CUSTOM_CLOUD_HOST: yes @@ -374,12 +377,12 @@ services: HOST: *all_interfaces_ip PORT: *backend_apps_internal_port <<: [ + *cvat_oracle_vars, *cvat_oracle_postgres_vars, *cvat_oracle_storage_connection_vars, *cvat_connection_vars ] PG_DB: recording-oracle-cvat - POLYGON_AMOY_RPC_API_URL: *rpc_url_polygon_amoy STORAGE_RESULTS_BUCKET_NAME: *bucket_name_cvat_rec_o STORAGE_USE_PATH_STYLE: "true" ENABLE_CUSTOM_CLOUD_HOST: "yes" From d542450fa1a15a00b066b98adb6a33b48964753c Mon Sep 17 00:00:00 2001 From: Dmitry Nechay Date: Thu, 22 May 2025 17:24:02 +0300 Subject: [PATCH 28/29] fix: invalid subgraph api key value --- packages/apps/reputation-oracle/server/.env.example | 3 --- 1 file changed, 3 deletions(-) diff --git a/packages/apps/reputation-oracle/server/.env.example b/packages/apps/reputation-oracle/server/.env.example index 32494ba354..e08449b539 100644 --- a/packages/apps/reputation-oracle/server/.env.example +++ b/packages/apps/reputation-oracle/server/.env.example @@ -49,9 +49,6 @@ WEB3_ENV=testnet WEB3_PRIVATE_KEY=replace_me RPC_URL_POLYGON_AMOY=https://rpc-amoy.polygon.technology -# Subgraph -SUBGRAPH_API_KEY=replace_me_if_needed - # Encryption PGP_ENCRYPT=true PGP_PRIVATE_KEY="-----BEGIN PGP PRIVATE KEY BLOCK----- From ad8981dc40e6cb0bb861727b6c9508b72a645fe4 Mon Sep 17 00:00:00 2001 From: Dmitry Nechay Date: Mon, 26 May 2025 18:58:44 +0300 Subject: [PATCH 29/29] feat: add check-env script for docker --- docker-setup/Makefile | 8 +++++++- package.json | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/docker-setup/Makefile b/docker-setup/Makefile index 2d7d141429..28786f2966 100644 --- a/docker-setup/Makefile +++ b/docker-setup/Makefile @@ -1,8 +1,14 @@ -.PHONY: infra-up infra-stop \ +.PHONY: check-env-file \ + infra-up infra-stop \ build-services services-up services-stop DOCKER_PARALLEL ?= 4 +check-env-file: + @if [ ! -f "./.env.compose.local" ]; then \ + cp ./.env.compose ./.env.compose.local ; \ + fi + infra-up: docker-compose --env-file .env.compose.local up -d postgres redis minio minio-client diff --git a/package.json b/package.json index 12080f224a..d92d51468a 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "build:core": "yarn workspace @human-protocol/core build", "build:sdk": "yarn workspace @human-protocol/sdk build", "build:libs": "yarn build:core && yarn build:sdk", - "docker:infra-up": "make -C ./docker-setup infra-up", + "docker:infra-up": "make -C ./docker-setup check-env-file infra-up", "docker:stop": "make -C ./docker-setup services-stop" }, "workspaces": [