From ffcf9a29649a87c1528ea4d5104ad149defb86c2 Mon Sep 17 00:00:00 2001 From: Sarthik Gupta Date: Thu, 23 Jan 2025 13:19:00 +0530 Subject: [PATCH] chore: upgraded build process of mock-server --- .gitlab-ci.yml | 4 +- mock/package-lock.json | 544 ++++++++++++++---- mock/package.json | 10 +- mock/{ => src}/api/network/country/data.json | 0 mock/{ => src}/api/network/country/index.ts | 4 +- mock/{ => src}/api/network/flag/data.json | 0 mock/{ => src}/api/network/flag/index.ts | 4 +- mock/{ => src}/api/network/index.ts | 10 +- .../network/server/bandwidth-auth/data.json | 0 .../network/server/bandwidth-auth/index.ts | 4 +- .../api/network/server/bridge-ip/data.json | 0 .../api/network/server/bridge-ip/index.ts | 4 +- mock/{ => src}/api/network/server/index.ts | 14 +- .../api/network/server/relay-flag/data.json | 0 .../api/network/server/relay-flag/index.ts | 4 +- .../api/network/server/relay-ip/data.json | 0 .../api/network/server/relay-ip/index.ts | 4 +- .../network/server/relay-platform/data.json | 0 .../network/server/relay-platform/index.ts | 4 +- .../network/server/relay-version/data.json | 0 .../api/network/server/relay-version/index.ts | 4 +- .../api/network/server/router-count/data.json | 0 .../api/network/server/router-count/index.ts | 4 +- .../api/network/traffic/bandwidth/data.json | 0 .../api/network/traffic/bandwidth/index.ts | 4 +- mock/{ => src}/api/network/traffic/index.ts | 2 +- .../api/network/user/bridge-ip/data.json | 0 .../api/network/user/bridge-ip/index.ts | 4 +- .../network/user/bridge-transport/data.json | 0 .../network/user/bridge-transport/index.ts | 4 +- mock/{ => src}/api/network/user/index.ts | 10 +- .../network/user/relay-bridge-users/data.json | 0 .../network/user/relay-bridge-users/index.ts | 4 +- .../user/top-bridge-countries/data.json | 0 .../user/top-bridge-countries/index.ts | 4 +- .../user/top-relay-countries/data.json | 0 .../network/user/top-relay-countries/index.ts | 4 +- mock/{ => src}/api/router/bandwidth/data.json | 0 mock/{ => src}/api/router/bandwidth/index.ts | 4 +- mock/{ => src}/api/router/clients/data.json | 0 mock/{ => src}/api/router/clients/index.ts | 4 +- mock/{ => src}/api/router/details/bridge.json | 0 mock/{ => src}/api/router/details/index.ts | 6 +- mock/{ => src}/api/router/details/relay.json | 0 mock/{ => src}/api/router/index.ts | 8 +- mock/{ => src}/api/router/weights/data.json | 0 mock/{ => src}/api/router/weights/index.ts | 4 +- mock/{ => src}/api/routers/index.ts | 6 +- mock/{ => src}/api/routers/search/data.json | 0 mock/{ => src}/api/routers/search/index.ts | 4 +- .../api/routers/top-bridges/data.json | 0 .../api/routers/top-bridges/index.ts | 4 +- .../api/routers/top-relays/data.json | 0 .../{ => src}/api/routers/top-relays/index.ts | 4 +- mock/{ => src}/index.ts | 2 +- mock/{ => src}/routes.ts | 6 +- mock/tsconfig.json | 21 +- model/routers/search.ts | 4 +- 58 files changed, 526 insertions(+), 205 deletions(-) rename mock/{ => src}/api/network/country/data.json (100%) rename mock/{ => src}/api/network/country/index.ts (82%) rename mock/{ => src}/api/network/flag/data.json (100%) rename mock/{ => src}/api/network/flag/index.ts (81%) rename mock/{ => src}/api/network/index.ts (58%) rename mock/{ => src}/api/network/server/bandwidth-auth/data.json (100%) rename mock/{ => src}/api/network/server/bandwidth-auth/index.ts (82%) rename mock/{ => src}/api/network/server/bridge-ip/data.json (100%) rename mock/{ => src}/api/network/server/bridge-ip/index.ts (81%) rename mock/{ => src}/api/network/server/index.ts (63%) rename mock/{ => src}/api/network/server/relay-flag/data.json (100%) rename mock/{ => src}/api/network/server/relay-flag/index.ts (79%) rename mock/{ => src}/api/network/server/relay-ip/data.json (100%) rename mock/{ => src}/api/network/server/relay-ip/index.ts (81%) rename mock/{ => src}/api/network/server/relay-platform/data.json (100%) rename mock/{ => src}/api/network/server/relay-platform/index.ts (80%) rename mock/{ => src}/api/network/server/relay-version/data.json (100%) rename mock/{ => src}/api/network/server/relay-version/index.ts (80%) rename mock/{ => src}/api/network/server/router-count/data.json (100%) rename mock/{ => src}/api/network/server/router-count/index.ts (80%) rename mock/{ => src}/api/network/traffic/bandwidth/data.json (100%) rename mock/{ => src}/api/network/traffic/bandwidth/index.ts (81%) rename mock/{ => src}/api/network/traffic/index.ts (74%) rename mock/{ => src}/api/network/user/bridge-ip/data.json (100%) rename mock/{ => src}/api/network/user/bridge-ip/index.ts (82%) rename mock/{ => src}/api/network/user/bridge-transport/data.json (100%) rename mock/{ => src}/api/network/user/bridge-transport/index.ts (83%) rename mock/{ => src}/api/network/user/index.ts (57%) rename mock/{ => src}/api/network/user/relay-bridge-users/data.json (100%) rename mock/{ => src}/api/network/user/relay-bridge-users/index.ts (80%) rename mock/{ => src}/api/network/user/top-bridge-countries/data.json (100%) rename mock/{ => src}/api/network/user/top-bridge-countries/index.ts (80%) rename mock/{ => src}/api/network/user/top-relay-countries/data.json (100%) rename mock/{ => src}/api/network/user/top-relay-countries/index.ts (80%) rename mock/{ => src}/api/router/bandwidth/data.json (100%) rename mock/{ => src}/api/router/bandwidth/index.ts (80%) rename mock/{ => src}/api/router/clients/data.json (100%) rename mock/{ => src}/api/router/clients/index.ts (82%) rename mock/{ => src}/api/router/details/bridge.json (100%) rename mock/{ => src}/api/router/details/index.ts (79%) rename mock/{ => src}/api/router/details/relay.json (100%) rename mock/{ => src}/api/router/index.ts (58%) rename mock/{ => src}/api/router/weights/data.json (100%) rename mock/{ => src}/api/router/weights/index.ts (81%) rename mock/{ => src}/api/routers/index.ts (61%) rename mock/{ => src}/api/routers/search/data.json (100%) rename mock/{ => src}/api/routers/search/index.ts (82%) rename mock/{ => src}/api/routers/top-bridges/data.json (100%) rename mock/{ => src}/api/routers/top-bridges/index.ts (81%) rename mock/{ => src}/api/routers/top-relays/data.json (100%) rename mock/{ => src}/api/routers/top-relays/index.ts (81%) rename mock/{ => src}/index.ts (89%) rename mock/{ => src}/routes.ts (57%) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 3a0408c..f986070 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -83,7 +83,7 @@ build: - job_id.txt - package.json - package-lock.json - - "dist/*" + - dist/* build-mock: extends: .install_dependencies_mock @@ -103,7 +103,7 @@ build-mock: - job_id_mock.txt - ./mock/package.json - ./mock/package-lock.json - - "mock-dist/*" + - ./mock/dist/* # Section for Deploy Stage deploy: diff --git a/mock/package-lock.json b/mock/package-lock.json index 99897bc..a961a81 100644 --- a/mock/package-lock.json +++ b/mock/package-lock.json @@ -14,11 +14,23 @@ "devDependencies": { "@types/express": "^5.0.0", "@types/node": "^22.10.5", - "nodemon": "^3.1.9", + "ts-node-dev": "^2.0.0", "tsx": "^4.19.2", "typescript": "^5.7.3" } }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/@esbuild/aix-ppc64": { "version": "0.23.1", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz", @@ -403,6 +415,55 @@ "node": ">=18" } }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "dev": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true + }, "node_modules/@types/body-parser": { "version": "1.19.5", "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", @@ -500,6 +561,18 @@ "@types/send": "*" } }, + "node_modules/@types/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-xevGOReSYGM7g/kUBZzPqCrR/KYAo+F0yiPc85WFTJa0MSLtyFTVTU6cJu/aV4mid7IffDIWqo69THF2o4JiEQ==", + "dev": true + }, + "node_modules/@types/strip-json-comments": { + "version": "0.0.30", + "resolved": "https://registry.npmjs.org/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz", + "integrity": "sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ==", + "dev": true + }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -512,6 +585,30 @@ "node": ">= 0.6" } }, + "node_modules/acorn": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dev": true, + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", @@ -525,6 +622,12 @@ "node": ">= 8" } }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, "node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", @@ -593,6 +696,12 @@ "node": ">=8" } }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, "node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", @@ -690,6 +799,12 @@ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, "node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -715,6 +830,15 @@ "npm": "1.2.8000 || >= 1.4.16" } }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, "node_modules/dunder-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", @@ -728,6 +852,15 @@ "node": ">= 0.4" } }, + "node_modules/dynamic-dedupe": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/dynamic-dedupe/-/dynamic-dedupe-0.3.0.tgz", + "integrity": "sha512-ssuANeD+z97meYOqd50e04Ze5qp4bPqo8cCkI4TRjZkzAUgIDTrXV1R8QCdINpiI+hw14+rYazvTRdQrz0/rFQ==", + "dev": true, + "dependencies": { + "xtend": "^4.0.0" + } + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -910,6 +1043,12 @@ "node": ">= 0.6" } }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -979,6 +1118,27 @@ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", @@ -1002,15 +1162,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/has-symbols": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", @@ -1059,11 +1210,16 @@ "node": ">=0.10.0" } }, - "node_modules/ignore-by-default": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", - "dev": true + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } }, "node_modules/inherits": { "version": "2.0.4", @@ -1090,6 +1246,21 @@ "node": ">=8" } }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -1120,6 +1291,12 @@ "node": ">=0.12.0" } }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, "node_modules/math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", @@ -1194,6 +1371,27 @@ "node": "*" } }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -1207,57 +1405,6 @@ "node": ">= 0.6" } }, - "node_modules/nodemon": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.9.tgz", - "integrity": "sha512-hdr1oIb2p6ZSxu3PB2JWWYS7ZQ0qvaZsc3hK8DR8f02kRzc8rjYmxAIvdz+aYC+8F2IjNaB7HMcSDg8nQpJxyg==", - "dev": true, - "dependencies": { - "chokidar": "^3.5.2", - "debug": "^4", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.1.2", - "pstree.remy": "^1.1.8", - "semver": "^7.5.3", - "simple-update-notifier": "^2.0.0", - "supports-color": "^5.5.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.5" - }, - "bin": { - "nodemon": "bin/nodemon.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nodemon" - } - }, - "node_modules/nodemon/node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "dev": true, - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/nodemon/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -1289,6 +1436,15 @@ "node": ">= 0.8" } }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -1297,6 +1453,21 @@ "node": ">= 0.8" } }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, "node_modules/path-to-regexp": { "version": "0.1.12", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", @@ -1326,12 +1497,6 @@ "node": ">= 0.10" } }, - "node_modules/pstree.remy": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", - "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", - "dev": true - }, "node_modules/qs": { "version": "6.13.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", @@ -1380,6 +1545,26 @@ "node": ">=8.10.0" } }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "dev": true, + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/resolve-pkg-maps": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", @@ -1389,6 +1574,19 @@ "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" } }, + "node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -1413,18 +1611,6 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, - "node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/send": { "version": "0.19.0", "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", @@ -1548,16 +1734,23 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/simple-update-notifier": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", - "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "dependencies": { - "semver": "^7.5.3" - }, "engines": { - "node": ">=10" + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, "node_modules/statuses": { @@ -1568,18 +1761,36 @@ "node": ">= 0.8" } }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, "engines": { "node": ">=4" } }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -1600,13 +1811,102 @@ "node": ">=0.6" } }, - "node_modules/touch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.1.tgz", - "integrity": "sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==", + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/ts-node-dev": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ts-node-dev/-/ts-node-dev-2.0.0.tgz", + "integrity": "sha512-ywMrhCfH6M75yftYvrvNarLEY+SUXtUvU8/0Z6llrHQVBx12GiFk5sStF8UdfE/yfzk9IAq7O5EEbTQsxlBI8w==", "dev": true, + "dependencies": { + "chokidar": "^3.5.1", + "dynamic-dedupe": "^0.3.0", + "minimist": "^1.2.6", + "mkdirp": "^1.0.4", + "resolve": "^1.0.0", + "rimraf": "^2.6.1", + "source-map-support": "^0.5.12", + "tree-kill": "^1.2.2", + "ts-node": "^10.4.0", + "tsconfig": "^7.0.0" + }, "bin": { - "nodetouch": "bin/nodetouch.js" + "ts-node-dev": "lib/bin.js", + "tsnd": "lib/bin.js" + }, + "engines": { + "node": ">=0.8.0" + }, + "peerDependencies": { + "node-notifier": "*", + "typescript": "*" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/tsconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/tsconfig/-/tsconfig-7.0.0.tgz", + "integrity": "sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw==", + "dev": true, + "dependencies": { + "@types/strip-bom": "^3.0.0", + "@types/strip-json-comments": "0.0.30", + "strip-bom": "^3.0.0", + "strip-json-comments": "^2.0.0" } }, "node_modules/tsx": { @@ -1653,12 +1953,6 @@ "node": ">=14.17" } }, - "node_modules/undefsafe": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", - "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", - "dev": true - }, "node_modules/undici-types": { "version": "6.20.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", @@ -1681,6 +1975,12 @@ "node": ">= 0.4.0" } }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true + }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -1688,6 +1988,30 @@ "engines": { "node": ">= 0.8" } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "engines": { + "node": ">=6" + } } } } diff --git a/mock/package.json b/mock/package.json index 4394f7c..88c7b8c 100644 --- a/mock/package.json +++ b/mock/package.json @@ -1,22 +1,20 @@ { "name": "mock", - "type": "module", "version": "1.0.0", - "main": "dist/index.js", + "main": "src/index.ts", + "type": "module", "scripts": { - "start": "tsx watch index.ts", + "start": "tsx watch src/index.ts", "build": "tsc" }, - "author": "", "license": "ISC", - "description": "", "dependencies": { "express": "^4.21.2" }, "devDependencies": { "@types/express": "^5.0.0", "@types/node": "^22.10.5", - "nodemon": "^3.1.9", + "ts-node-dev": "^2.0.0", "tsx": "^4.19.2", "typescript": "^5.7.3" } diff --git a/mock/api/network/country/data.json b/mock/src/api/network/country/data.json similarity index 100% rename from mock/api/network/country/data.json rename to mock/src/api/network/country/data.json diff --git a/mock/api/network/country/index.ts b/mock/src/api/network/country/index.ts similarity index 82% rename from mock/api/network/country/index.ts rename to mock/src/api/network/country/index.ts index 4f169e3..e154ad9 100644 --- a/mock/api/network/country/index.ts +++ b/mock/src/api/network/country/index.ts @@ -1,9 +1,9 @@ import express from "express"; -import allCountries from "./data.json"; +import allCountries from "./data.json" assert { type: "json" }; import type { GetAllCountriesResponse, GetAllCountriesSearchParams, -} from "@model/network/country"; +} from "@model/network/country.js"; import type { Request } from "express"; const networkCountryHandler = express.Router(); diff --git a/mock/api/network/flag/data.json b/mock/src/api/network/flag/data.json similarity index 100% rename from mock/api/network/flag/data.json rename to mock/src/api/network/flag/data.json diff --git a/mock/api/network/flag/index.ts b/mock/src/api/network/flag/index.ts similarity index 81% rename from mock/api/network/flag/index.ts rename to mock/src/api/network/flag/index.ts index 71e573d..78509e2 100644 --- a/mock/api/network/flag/index.ts +++ b/mock/src/api/network/flag/index.ts @@ -1,9 +1,9 @@ import express from "express"; -import allFlags from "./data.json"; +import allFlags from "./data.json" assert { type: "json" }; import { GetAllFlagSearchParams, GetAllFlagResponse, -} from "@model/network/flag"; +} from "@model/network/flag.js"; import type { Request } from "express"; const networkFlagHandler = express.Router(); diff --git a/mock/api/network/index.ts b/mock/src/api/network/index.ts similarity index 58% rename from mock/api/network/index.ts rename to mock/src/api/network/index.ts index c7de338..f11eb78 100644 --- a/mock/api/network/index.ts +++ b/mock/src/api/network/index.ts @@ -1,9 +1,9 @@ import express from "express"; -import networkTrafficRouter from "./traffic"; -import networkServerRouter from "./server"; -import networkFlagHandler from "./flag"; -import networkCountryHandler from "./country"; -import networkUserHandler from "./user"; +import networkTrafficRouter from "./traffic/index.js"; +import networkServerRouter from "./server/index.js"; +import networkFlagHandler from "./flag/index.js"; +import networkCountryHandler from "./country/index.js"; +import networkUserHandler from "./user/index.js"; const networkHandler = express.Router(); diff --git a/mock/api/network/server/bandwidth-auth/data.json b/mock/src/api/network/server/bandwidth-auth/data.json similarity index 100% rename from mock/api/network/server/bandwidth-auth/data.json rename to mock/src/api/network/server/bandwidth-auth/data.json diff --git a/mock/api/network/server/bandwidth-auth/index.ts b/mock/src/api/network/server/bandwidth-auth/index.ts similarity index 82% rename from mock/api/network/server/bandwidth-auth/index.ts rename to mock/src/api/network/server/bandwidth-auth/index.ts index 5cc3327..e4b7375 100644 --- a/mock/api/network/server/bandwidth-auth/index.ts +++ b/mock/src/api/network/server/bandwidth-auth/index.ts @@ -1,10 +1,10 @@ -import bandwidthAuthConsensusWeight from "./data.json"; +import bandwidthAuthConsensusWeight from "./data.json" assert { type: "json" }; import express from "express"; import type { Request } from "express"; import type { GetBandwidthAuthConsensusWeightSearchParams, GetBandwidthAuthConsensusWeightResponse, -} from "@model/network/server/bandwidth-auth"; +} from "@model/network/server/bandwidth-auth.js"; const bandwidthAuthConsensusWeightHandler = express.Router(); diff --git a/mock/api/network/server/bridge-ip/data.json b/mock/src/api/network/server/bridge-ip/data.json similarity index 100% rename from mock/api/network/server/bridge-ip/data.json rename to mock/src/api/network/server/bridge-ip/data.json diff --git a/mock/api/network/server/bridge-ip/index.ts b/mock/src/api/network/server/bridge-ip/index.ts similarity index 81% rename from mock/api/network/server/bridge-ip/index.ts rename to mock/src/api/network/server/bridge-ip/index.ts index a095bb3..21e56a7 100644 --- a/mock/api/network/server/bridge-ip/index.ts +++ b/mock/src/api/network/server/bridge-ip/index.ts @@ -1,10 +1,10 @@ -import bridgeIPCount from "./data.json"; +import bridgeIPCount from "./data.json" assert { type: "json" }; import express from "express"; import type { Request } from "express"; import type { GetBridgeIPCountSearchParams, GetBridgeIPCountResponse, -} from "@model/network/server/bridge-ip"; +} from "@model/network/server/bridge-ip.js"; const bridgeIPCountHandler = express.Router(); diff --git a/mock/api/network/server/index.ts b/mock/src/api/network/server/index.ts similarity index 63% rename from mock/api/network/server/index.ts rename to mock/src/api/network/server/index.ts index f27ab00..25cac01 100644 --- a/mock/api/network/server/index.ts +++ b/mock/src/api/network/server/index.ts @@ -1,11 +1,11 @@ import express from "express"; -import relayFlagCountHandler from "./relay-flag"; -import routerCountHandler from "./router-count"; -import relayPlatformCountHandler from "./relay-platform"; -import relayIPCountHandler from "./relay-ip"; -import bridgeIPCountHandler from "./bridge-ip"; -import relayVersionCountHandler from "./relay-version"; -import bandwidthAuthConsensusWeightHandler from "./bandwidth-auth"; +import relayFlagCountHandler from "./relay-flag/index.js"; +import routerCountHandler from "./router-count/index.js"; +import relayPlatformCountHandler from "./relay-platform/index.js"; +import relayIPCountHandler from "./relay-ip/index.js"; +import bridgeIPCountHandler from "./bridge-ip/index.js"; +import relayVersionCountHandler from "./relay-version/index.js"; +import bandwidthAuthConsensusWeightHandler from "./bandwidth-auth/index.js"; const networkServerRouter = express.Router(); diff --git a/mock/api/network/server/relay-flag/data.json b/mock/src/api/network/server/relay-flag/data.json similarity index 100% rename from mock/api/network/server/relay-flag/data.json rename to mock/src/api/network/server/relay-flag/data.json diff --git a/mock/api/network/server/relay-flag/index.ts b/mock/src/api/network/server/relay-flag/index.ts similarity index 79% rename from mock/api/network/server/relay-flag/index.ts rename to mock/src/api/network/server/relay-flag/index.ts index 2513fff..3b08b03 100644 --- a/mock/api/network/server/relay-flag/index.ts +++ b/mock/src/api/network/server/relay-flag/index.ts @@ -1,10 +1,10 @@ -import relayFlagCount from "./data.json"; +import relayFlagCount from "./data.json" assert { type: "json" }; import express from "express"; import type { Request } from "express"; import type { GetRelayFlagSearchParams, GetRelayFlagResponse, -} from "@model/network/server/relay-flag"; +} from "@model/network/server/relay-flag.js"; const relayFlagCountHandler = express.Router(); diff --git a/mock/api/network/server/relay-ip/data.json b/mock/src/api/network/server/relay-ip/data.json similarity index 100% rename from mock/api/network/server/relay-ip/data.json rename to mock/src/api/network/server/relay-ip/data.json diff --git a/mock/api/network/server/relay-ip/index.ts b/mock/src/api/network/server/relay-ip/index.ts similarity index 81% rename from mock/api/network/server/relay-ip/index.ts rename to mock/src/api/network/server/relay-ip/index.ts index bf2e00a..48cc0d5 100644 --- a/mock/api/network/server/relay-ip/index.ts +++ b/mock/src/api/network/server/relay-ip/index.ts @@ -1,10 +1,10 @@ -import relayIPCount from "./data.json"; +import relayIPCount from "./data.json" assert { type: "json" }; import express from "express"; import type { Request } from "express"; import type { GetRelayIPCountSearchParams, GetRelayIPCountResponse, -} from "@model/network/server/relay-ip"; +} from "@model/network/server/relay-ip.js"; const relayIPCountHandler = express.Router(); diff --git a/mock/api/network/server/relay-platform/data.json b/mock/src/api/network/server/relay-platform/data.json similarity index 100% rename from mock/api/network/server/relay-platform/data.json rename to mock/src/api/network/server/relay-platform/data.json diff --git a/mock/api/network/server/relay-platform/index.ts b/mock/src/api/network/server/relay-platform/index.ts similarity index 80% rename from mock/api/network/server/relay-platform/index.ts rename to mock/src/api/network/server/relay-platform/index.ts index 6de74b2..7734834 100644 --- a/mock/api/network/server/relay-platform/index.ts +++ b/mock/src/api/network/server/relay-platform/index.ts @@ -1,10 +1,10 @@ -import relayPlatformCount from "./data.json"; +import relayPlatformCount from "./data.json" assert { type: "json" }; import express from "express"; import type { Request } from "express"; import type { GetRelayPlatformCountSearchParams, GetRelayPlatformCountResponse, -} from "@model/network/server/relay-platform"; +} from "@model/network/server/relay-platform.js"; const relayPlatformCountHandler = express.Router(); diff --git a/mock/api/network/server/relay-version/data.json b/mock/src/api/network/server/relay-version/data.json similarity index 100% rename from mock/api/network/server/relay-version/data.json rename to mock/src/api/network/server/relay-version/data.json diff --git a/mock/api/network/server/relay-version/index.ts b/mock/src/api/network/server/relay-version/index.ts similarity index 80% rename from mock/api/network/server/relay-version/index.ts rename to mock/src/api/network/server/relay-version/index.ts index d7494d9..24c2787 100644 --- a/mock/api/network/server/relay-version/index.ts +++ b/mock/src/api/network/server/relay-version/index.ts @@ -1,10 +1,10 @@ -import relayVersionCount from "./data.json"; +import relayVersionCount from "./data.json" assert { type: "json" }; import express from "express"; import type { Request } from "express"; import type { GetRelayVersionCountSearchParams, GetRelayVersionCountResponse, -} from "@model/network/server/relay-version"; +} from "@model/network/server/relay-version.js"; const relayVersionCountHandler = express.Router(); diff --git a/mock/api/network/server/router-count/data.json b/mock/src/api/network/server/router-count/data.json similarity index 100% rename from mock/api/network/server/router-count/data.json rename to mock/src/api/network/server/router-count/data.json diff --git a/mock/api/network/server/router-count/index.ts b/mock/src/api/network/server/router-count/index.ts similarity index 80% rename from mock/api/network/server/router-count/index.ts rename to mock/src/api/network/server/router-count/index.ts index 5d02740..0f3d88e 100644 --- a/mock/api/network/server/router-count/index.ts +++ b/mock/src/api/network/server/router-count/index.ts @@ -1,10 +1,10 @@ -import routerCount from "./data.json"; +import routerCount from "./data.json" assert { type: "json" }; import express from "express"; import type { Request } from "express"; import type { GetRouterCountSearchParams, GetRouterCountResponse, -} from "@model/network/server/router-count"; +} from "@model/network/server/router-count.js"; const routerCountHandler = express.Router(); diff --git a/mock/api/network/traffic/bandwidth/data.json b/mock/src/api/network/traffic/bandwidth/data.json similarity index 100% rename from mock/api/network/traffic/bandwidth/data.json rename to mock/src/api/network/traffic/bandwidth/data.json diff --git a/mock/api/network/traffic/bandwidth/index.ts b/mock/src/api/network/traffic/bandwidth/index.ts similarity index 81% rename from mock/api/network/traffic/bandwidth/index.ts rename to mock/src/api/network/traffic/bandwidth/index.ts index 74f46bd..d426bef 100644 --- a/mock/api/network/traffic/bandwidth/index.ts +++ b/mock/src/api/network/traffic/bandwidth/index.ts @@ -1,10 +1,10 @@ -import relayBandwidthCount from "./data.json"; +import relayBandwidthCount from "./data.json" assert { type: "json" }; import express from "express"; import type { Request } from "express"; import type { GetRelayBandwidthCountSearchParams, GetRelayBandwidthCountResponse, -} from "@model/network/traffic/bandwidth"; +} from "@model/network/traffic/bandwidth.js"; const relayBandwidthCountHandler = express.Router(); diff --git a/mock/api/network/traffic/index.ts b/mock/src/api/network/traffic/index.ts similarity index 74% rename from mock/api/network/traffic/index.ts rename to mock/src/api/network/traffic/index.ts index 4d423a9..e8b5401 100644 --- a/mock/api/network/traffic/index.ts +++ b/mock/src/api/network/traffic/index.ts @@ -1,5 +1,5 @@ import express from "express"; -import relayBandwidthCountHandler from "./bandwidth"; +import relayBandwidthCountHandler from "./bandwidth/index.js"; const networkTrafficRouter = express.Router(); diff --git a/mock/api/network/user/bridge-ip/data.json b/mock/src/api/network/user/bridge-ip/data.json similarity index 100% rename from mock/api/network/user/bridge-ip/data.json rename to mock/src/api/network/user/bridge-ip/data.json diff --git a/mock/api/network/user/bridge-ip/index.ts b/mock/src/api/network/user/bridge-ip/index.ts similarity index 82% rename from mock/api/network/user/bridge-ip/index.ts rename to mock/src/api/network/user/bridge-ip/index.ts index 2785775..b98a95f 100644 --- a/mock/api/network/user/bridge-ip/index.ts +++ b/mock/src/api/network/user/bridge-ip/index.ts @@ -1,9 +1,9 @@ -import bridgeIPUsers from "./data.json"; +import bridgeIPUsers from "./data.json" assert { type: "json" }; import express from "express"; import type { GetBridgeIPUserCountResponse, GetBridgeIPUserCountSearchParams, -} from "@model/network/user/bridge-ip"; +} from "@model/network/user/bridge-ip.js"; import type { Request } from "express"; const bridgeIPUserCountHandler = express.Router(); diff --git a/mock/api/network/user/bridge-transport/data.json b/mock/src/api/network/user/bridge-transport/data.json similarity index 100% rename from mock/api/network/user/bridge-transport/data.json rename to mock/src/api/network/user/bridge-transport/data.json diff --git a/mock/api/network/user/bridge-transport/index.ts b/mock/src/api/network/user/bridge-transport/index.ts similarity index 83% rename from mock/api/network/user/bridge-transport/index.ts rename to mock/src/api/network/user/bridge-transport/index.ts index 6ed4a50..bfe7305 100644 --- a/mock/api/network/user/bridge-transport/index.ts +++ b/mock/src/api/network/user/bridge-transport/index.ts @@ -1,9 +1,9 @@ -import networkRelayUsers from "./data.json"; +import networkRelayUsers from "./data.json" assert { type: "json" }; import express from "express"; import type { GetBridgeTransportUserCountResponse, GetBridgeTransportUserCountSearchParams, -} from "@model/network/user/bridge-transport"; +} from "@model/network/user/bridge-transport.js"; import type { Request } from "express"; const bridgeTransportUserCountHandler = express.Router(); diff --git a/mock/api/network/user/index.ts b/mock/src/api/network/user/index.ts similarity index 57% rename from mock/api/network/user/index.ts rename to mock/src/api/network/user/index.ts index 19b95ad..6f115c5 100644 --- a/mock/api/network/user/index.ts +++ b/mock/src/api/network/user/index.ts @@ -1,9 +1,9 @@ import express from "express"; -import networkUserCountHandler from "./relay-bridge-users"; -import topBridgeCountriesHandler from "./top-bridge-countries"; -import topRelayCountriesHandler from "./top-relay-countries"; -import bridgeTransportUserCountHandler from "./bridge-transport"; -import bridgeIPUserCountHandler from "./bridge-ip"; +import networkUserCountHandler from "./relay-bridge-users/index.js"; +import topBridgeCountriesHandler from "./top-bridge-countries/index.js"; +import topRelayCountriesHandler from "./top-relay-countries/index.js"; +import bridgeTransportUserCountHandler from "./bridge-transport/index.js"; +import bridgeIPUserCountHandler from "./bridge-ip/index.js"; const networkUserHandler = express.Router(); diff --git a/mock/api/network/user/relay-bridge-users/data.json b/mock/src/api/network/user/relay-bridge-users/data.json similarity index 100% rename from mock/api/network/user/relay-bridge-users/data.json rename to mock/src/api/network/user/relay-bridge-users/data.json diff --git a/mock/api/network/user/relay-bridge-users/index.ts b/mock/src/api/network/user/relay-bridge-users/index.ts similarity index 80% rename from mock/api/network/user/relay-bridge-users/index.ts rename to mock/src/api/network/user/relay-bridge-users/index.ts index 4bbfab2..403cc2b 100644 --- a/mock/api/network/user/relay-bridge-users/index.ts +++ b/mock/src/api/network/user/relay-bridge-users/index.ts @@ -1,9 +1,9 @@ -import networkRelayUsers from "./data.json"; +import networkRelayUsers from "./data.json" assert { type: "json" }; import express from "express"; import type { GetNetworkUserCountResponse, GetNetworkUserCountSearchParams, -} from "@model/network/user/relay-bridge-users"; +} from "@model/network/user/relay-bridge-users.js"; import type { Request } from "express"; const networkUserCountHandler = express.Router(); diff --git a/mock/api/network/user/top-bridge-countries/data.json b/mock/src/api/network/user/top-bridge-countries/data.json similarity index 100% rename from mock/api/network/user/top-bridge-countries/data.json rename to mock/src/api/network/user/top-bridge-countries/data.json diff --git a/mock/api/network/user/top-bridge-countries/index.ts b/mock/src/api/network/user/top-bridge-countries/index.ts similarity index 80% rename from mock/api/network/user/top-bridge-countries/index.ts rename to mock/src/api/network/user/top-bridge-countries/index.ts index 07a6142..1a800ba 100644 --- a/mock/api/network/user/top-bridge-countries/index.ts +++ b/mock/src/api/network/user/top-bridge-countries/index.ts @@ -1,10 +1,10 @@ -import networkBridgeUsers from "./data.json"; +import networkBridgeUsers from "./data.json" assert { type: "json" }; import express from "express"; import type { Request } from "express"; import type { GetTopBridgeCountriesResponse, GetTopBridgeCountriesSearchParams, -} from "@model/network/user/top-bridge-countries"; +} from "@model/network/user/top-bridge-countries.js"; const topBridgeCountriesHandler = express.Router(); diff --git a/mock/api/network/user/top-relay-countries/data.json b/mock/src/api/network/user/top-relay-countries/data.json similarity index 100% rename from mock/api/network/user/top-relay-countries/data.json rename to mock/src/api/network/user/top-relay-countries/data.json diff --git a/mock/api/network/user/top-relay-countries/index.ts b/mock/src/api/network/user/top-relay-countries/index.ts similarity index 80% rename from mock/api/network/user/top-relay-countries/index.ts rename to mock/src/api/network/user/top-relay-countries/index.ts index 47e9ddb..18b5ba3 100644 --- a/mock/api/network/user/top-relay-countries/index.ts +++ b/mock/src/api/network/user/top-relay-countries/index.ts @@ -1,10 +1,10 @@ -import networkRelayUsers from "./data.json"; +import networkRelayUsers from "./data.json" assert { type: "json" }; import express from "express"; import type { Request } from "express"; import type { GetTopRelayCountriesResponse, GetTopRelayCountriesSearchParams, -} from "@model/network/user/top-relay-countries"; +} from "@model/network/user/top-relay-countries.js"; const topRelayCountriesHandler = express.Router(); diff --git a/mock/api/router/bandwidth/data.json b/mock/src/api/router/bandwidth/data.json similarity index 100% rename from mock/api/router/bandwidth/data.json rename to mock/src/api/router/bandwidth/data.json diff --git a/mock/api/router/bandwidth/index.ts b/mock/src/api/router/bandwidth/index.ts similarity index 80% rename from mock/api/router/bandwidth/index.ts rename to mock/src/api/router/bandwidth/index.ts index 4eed6a3..5a533f8 100644 --- a/mock/api/router/bandwidth/index.ts +++ b/mock/src/api/router/bandwidth/index.ts @@ -1,6 +1,6 @@ import express from "express"; -import routerBandwidths from "./data.json"; -import type { GetRouterBandwidthResponse } from "@model/router/bandwidth"; +import routerBandwidths from "./data.json" assert { type: "json" }; +import type { GetRouterBandwidthResponse } from "@model/router/bandwidth.js"; const routerBandwidthHandler = express.Router(); diff --git a/mock/api/router/clients/data.json b/mock/src/api/router/clients/data.json similarity index 100% rename from mock/api/router/clients/data.json rename to mock/src/api/router/clients/data.json diff --git a/mock/api/router/clients/index.ts b/mock/src/api/router/clients/index.ts similarity index 82% rename from mock/api/router/clients/index.ts rename to mock/src/api/router/clients/index.ts index 08a6d3c..405878f 100644 --- a/mock/api/router/clients/index.ts +++ b/mock/src/api/router/clients/index.ts @@ -1,10 +1,10 @@ -import bridgeClientCount from "./data.json"; +import bridgeClientCount from "./data.json" assert { type: "json" }; import express from "express"; import type { Request } from "express"; import type { GetBridgeClientCountResponse, GetBridgeClientCountSearchParams, -} from "@model/router/clients"; +} from "@model/router/clients.js"; const bridgeClientCountHandler = express.Router(); diff --git a/mock/api/router/details/bridge.json b/mock/src/api/router/details/bridge.json similarity index 100% rename from mock/api/router/details/bridge.json rename to mock/src/api/router/details/bridge.json diff --git a/mock/api/router/details/index.ts b/mock/src/api/router/details/index.ts similarity index 79% rename from mock/api/router/details/index.ts rename to mock/src/api/router/details/index.ts index ec9d22b..2bb4b8f 100644 --- a/mock/api/router/details/index.ts +++ b/mock/src/api/router/details/index.ts @@ -1,12 +1,12 @@ -import bridgeDetails from "./bridge.json"; -import relayDetails from "./relay.json"; +import bridgeDetails from "./bridge.json" assert { type: "json" }; +import relayDetails from "./relay.json" assert { type: "json" }; import express from "express"; import type { Request } from "express"; import type { GetRouterDetailsSearchParams, GetRelayDetailsResponse, GetBridgeDetailsResponse, -} from "@model/router/details"; +} from "@model/router/details.js"; const detailsHandler = express.Router(); diff --git a/mock/api/router/details/relay.json b/mock/src/api/router/details/relay.json similarity index 100% rename from mock/api/router/details/relay.json rename to mock/src/api/router/details/relay.json diff --git a/mock/api/router/index.ts b/mock/src/api/router/index.ts similarity index 58% rename from mock/api/router/index.ts rename to mock/src/api/router/index.ts index 0c011d3..d6edd9b 100644 --- a/mock/api/router/index.ts +++ b/mock/src/api/router/index.ts @@ -1,9 +1,9 @@ import express from "express"; -import detailsHandler from "./details"; -import routerWeightsHandler from "./weights"; -import routerBandwidthHandler from "./bandwidth"; -import bridgeClientCountHandler from "./clients"; +import detailsHandler from "./details/index.js"; +import routerWeightsHandler from "./weights/index.js"; +import routerBandwidthHandler from "./bandwidth/index.js"; +import bridgeClientCountHandler from "./clients/index.js"; const routerHandler = express.Router(); diff --git a/mock/api/router/weights/data.json b/mock/src/api/router/weights/data.json similarity index 100% rename from mock/api/router/weights/data.json rename to mock/src/api/router/weights/data.json diff --git a/mock/api/router/weights/index.ts b/mock/src/api/router/weights/index.ts similarity index 81% rename from mock/api/router/weights/index.ts rename to mock/src/api/router/weights/index.ts index 2961a73..4e791a3 100644 --- a/mock/api/router/weights/index.ts +++ b/mock/src/api/router/weights/index.ts @@ -1,6 +1,6 @@ import express from "express"; -import routerWeights from "./data.json"; -import type { GetRelayWeightsResponse } from "@model/router/weights"; +import routerWeights from "./data.json" assert { type: "json" }; +import type { GetRelayWeightsResponse } from "@model/router/weights.js"; const routerWeightsHandler = express.Router(); diff --git a/mock/api/routers/index.ts b/mock/src/api/routers/index.ts similarity index 61% rename from mock/api/routers/index.ts rename to mock/src/api/routers/index.ts index 857df7c..891fd08 100644 --- a/mock/api/routers/index.ts +++ b/mock/src/api/routers/index.ts @@ -1,8 +1,8 @@ import express from "express"; -import routersTopRelaysHandler from "./top-relays"; -import routersTopBridgesHandler from "./top-bridges"; -import routersSearchHandler from "./search"; +import routersTopRelaysHandler from "./top-relays/index.js"; +import routersTopBridgesHandler from "./top-bridges/index.js"; +import routersSearchHandler from "./search/index.js"; const routersHandler = express.Router(); diff --git a/mock/api/routers/search/data.json b/mock/src/api/routers/search/data.json similarity index 100% rename from mock/api/routers/search/data.json rename to mock/src/api/routers/search/data.json diff --git a/mock/api/routers/search/index.ts b/mock/src/api/routers/search/index.ts similarity index 82% rename from mock/api/routers/search/index.ts rename to mock/src/api/routers/search/index.ts index 39c5358..ae4d1e1 100644 --- a/mock/api/routers/search/index.ts +++ b/mock/src/api/routers/search/index.ts @@ -1,9 +1,9 @@ -import searchResults from "./data.json"; +import searchResults from "./data.json" assert { type: "json" }; import express from "express"; import type { GetRouterSearchResponse, GetRouterSearchSearchParams, -} from "@model/routers/search"; +} from "@model/routers/search.js"; import type { Request } from "express"; const routersSearchHandler = express.Router(); diff --git a/mock/api/routers/top-bridges/data.json b/mock/src/api/routers/top-bridges/data.json similarity index 100% rename from mock/api/routers/top-bridges/data.json rename to mock/src/api/routers/top-bridges/data.json diff --git a/mock/api/routers/top-bridges/index.ts b/mock/src/api/routers/top-bridges/index.ts similarity index 81% rename from mock/api/routers/top-bridges/index.ts rename to mock/src/api/routers/top-bridges/index.ts index cf84f63..951a5bd 100644 --- a/mock/api/routers/top-bridges/index.ts +++ b/mock/src/api/routers/top-bridges/index.ts @@ -1,8 +1,8 @@ import { GetTopBridgesResponse, GetTopBridgesSearchParams, -} from "@model/routers/top-bridges"; -import topBridges from "./data.json"; +} from "@model/routers/top-bridges.js"; +import topBridges from "./data.json" assert { type: "json" }; import express from "express"; import type { Request } from "express"; diff --git a/mock/api/routers/top-relays/data.json b/mock/src/api/routers/top-relays/data.json similarity index 100% rename from mock/api/routers/top-relays/data.json rename to mock/src/api/routers/top-relays/data.json diff --git a/mock/api/routers/top-relays/index.ts b/mock/src/api/routers/top-relays/index.ts similarity index 81% rename from mock/api/routers/top-relays/index.ts rename to mock/src/api/routers/top-relays/index.ts index 3ed6503..f2018fc 100644 --- a/mock/api/routers/top-relays/index.ts +++ b/mock/src/api/routers/top-relays/index.ts @@ -1,8 +1,8 @@ import { GetTopRelaysResponse, GetTopRelaysSearchParams, -} from "@model/routers/top-relays"; -import topRelays from "./data.json"; +} from "@model/routers/top-relays.js"; +import topRelays from "./data.json" assert { type: "json" }; import express from "express"; import type { Request } from "express"; diff --git a/mock/index.ts b/mock/src/index.ts similarity index 89% rename from mock/index.ts rename to mock/src/index.ts index 665b9a7..274859f 100644 --- a/mock/index.ts +++ b/mock/src/index.ts @@ -1,6 +1,6 @@ import express from "express"; import type { Express } from "express"; -import handler from "./routes"; +import handler from "./routes.js"; const app: Express = express(); diff --git a/mock/routes.ts b/mock/src/routes.ts similarity index 57% rename from mock/routes.ts rename to mock/src/routes.ts index 1afb540..e7cb282 100644 --- a/mock/routes.ts +++ b/mock/src/routes.ts @@ -1,7 +1,7 @@ import express from "express"; -import routerHandler from "./api/router"; -import networkHandler from "./api/network"; -import routersHandler from "./api/routers"; +import routerHandler from "./api/router/index.js"; +import networkHandler from "./api/network/index.js"; +import routersHandler from "./api/routers/index.js"; const handler = express.Router(); diff --git a/mock/tsconfig.json b/mock/tsconfig.json index 23528ec..b6e4ab6 100644 --- a/mock/tsconfig.json +++ b/mock/tsconfig.json @@ -1,19 +1,18 @@ { "compilerOptions": { - "target": "ES2020" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, - "module": "ESNext" /* Specify what module code is generated. */, - "outDir": "../mock-dist" /* Specify an output folder for all emitted files. */, - "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */, - "moduleResolution": "node", - "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, - "strict": true /* Enable all strict type-checking options. */, - "skipLibCheck": true /* Skip type checking all .d.ts files. */, + "target": "ES2020", + "module": "NodeNext", + "moduleResolution": "nodenext", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + // "moduleResolution": "node", "resolveJsonModule": true, + "outDir": "dist" /* Specify an output folder for all emitted files. */, "paths": { "@model/*": ["../model/*"] } }, - "ts-node": { - "esm": true - } + "include": ["src/**/*"] } diff --git a/model/routers/search.ts b/model/routers/search.ts index 723a412..b1a0b5a 100644 --- a/model/routers/search.ts +++ b/model/routers/search.ts @@ -1,5 +1,5 @@ -import type { BridgeSummary } from "./top-bridges"; -import type { RelaySummary } from "./top-relays"; +import type { BridgeSummary } from "./top-bridges.js"; +import type { RelaySummary } from "./top-relays.js"; interface RouterRelaySummary extends RelaySummary { isRelay: true; -- GitLab