Replace SpaceX external API with local graphql-yoga mock server (#7471)

* chore: switch to locally hosted graphql server

* chore: additional graphql check

* chore: error handling
This commit is contained in:
Sid
2026-03-13 16:00:08 +05:30
committed by GitHub
parent ab8a730bc3
commit a8542c7312
6 changed files with 461 additions and 4 deletions

360
package-lock.json generated
View File

@@ -3762,6 +3762,47 @@
"integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==",
"license": "MIT"
},
"node_modules/@envelop/core": {
"version": "5.5.1",
"resolved": "https://registry.npmjs.org/@envelop/core/-/core-5.5.1.tgz",
"integrity": "sha512-3DQg8sFskDo386TkL5j12jyRAdip/8yzK3x7YGbZBgobZ4aKXrvDU0GppU0SnmrpQnNaiTUsxBs9LKkwQ/eyvw==",
"license": "MIT",
"dependencies": {
"@envelop/instrumentation": "^1.0.0",
"@envelop/types": "^5.2.1",
"@whatwg-node/promise-helpers": "^1.2.4",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=18.0.0"
}
},
"node_modules/@envelop/instrumentation": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/@envelop/instrumentation/-/instrumentation-1.0.0.tgz",
"integrity": "sha512-cxgkB66RQB95H3X27jlnxCRNTmPuSTgmBAq6/4n2Dtv4hsk4yz8FadA1ggmd0uZzvKqWD6CR+WFgTjhDqg7eyw==",
"license": "MIT",
"dependencies": {
"@whatwg-node/promise-helpers": "^1.2.1",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=18.0.0"
}
},
"node_modules/@envelop/types": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/@envelop/types/-/types-5.2.1.tgz",
"integrity": "sha512-CsFmA3u3c2QoLDTfEpGr4t25fjMU31nyvse7IzWTvb0ZycuPjMjb0fjlheh+PbhBYb9YLugnT2uY6Mwcg1o+Zg==",
"license": "MIT",
"dependencies": {
"@whatwg-node/promise-helpers": "^1.0.0",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=18.0.0"
}
},
"node_modules/@epic-web/invariant": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/@epic-web/invariant/-/invariant-1.0.0.tgz",
@@ -4526,6 +4567,12 @@
"npm": ">=6.0.0"
}
},
"node_modules/@fastify/busboy": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-3.2.0.tgz",
"integrity": "sha512-m9FVDXU3GT2ITSe0UaMA5rU3QkfC/UXtCU8y0gSN/GugTqtVldOBWIB5V6V3sbmenVZUIpU6f+mPEO2+m5iTaA==",
"license": "MIT"
},
"node_modules/@floating-ui/core": {
"version": "1.6.8",
"resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.8.tgz",
@@ -4683,6 +4730,180 @@
}
}
},
"node_modules/@graphql-tools/executor": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/@graphql-tools/executor/-/executor-1.5.1.tgz",
"integrity": "sha512-n94Qcu875Mji9GQ52n5UbgOTxlgvFJicBPYD+FRks9HKIQpdNPjkkrKZUYNG51XKa+bf03rxNflm4+wXhoHHrA==",
"license": "MIT",
"dependencies": {
"@graphql-tools/utils": "^11.0.0",
"@graphql-typed-document-node/core": "^3.2.0",
"@repeaterjs/repeater": "^3.0.4",
"@whatwg-node/disposablestack": "^0.0.6",
"@whatwg-node/promise-helpers": "^1.0.0",
"tslib": "^2.4.0"
},
"engines": {
"node": ">=16.0.0"
},
"peerDependencies": {
"graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0"
}
},
"node_modules/@graphql-tools/executor/node_modules/@graphql-tools/utils": {
"version": "11.0.0",
"resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-11.0.0.tgz",
"integrity": "sha512-bM1HeZdXA2C3LSIeLOnH/bcqSgbQgKEDrjxODjqi3y58xai2TkNrtYcQSoWzGbt9VMN1dORGjR7Vem8SPnUFQA==",
"license": "MIT",
"dependencies": {
"@graphql-typed-document-node/core": "^3.1.1",
"@whatwg-node/promise-helpers": "^1.0.0",
"cross-inspect": "1.0.1",
"tslib": "^2.4.0"
},
"engines": {
"node": ">=16.0.0"
},
"peerDependencies": {
"graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0"
}
},
"node_modules/@graphql-tools/merge": {
"version": "9.1.7",
"resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-9.1.7.tgz",
"integrity": "sha512-Y5E1vTbTabvcXbkakdFUt4zUIzB1fyaEnVmIWN0l0GMed2gdD01TpZWLUm4RNAxpturvolrb24oGLQrBbPLSoQ==",
"license": "MIT",
"dependencies": {
"@graphql-tools/utils": "^11.0.0",
"tslib": "^2.4.0"
},
"engines": {
"node": ">=16.0.0"
},
"peerDependencies": {
"graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0"
}
},
"node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils": {
"version": "11.0.0",
"resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-11.0.0.tgz",
"integrity": "sha512-bM1HeZdXA2C3LSIeLOnH/bcqSgbQgKEDrjxODjqi3y58xai2TkNrtYcQSoWzGbt9VMN1dORGjR7Vem8SPnUFQA==",
"license": "MIT",
"dependencies": {
"@graphql-typed-document-node/core": "^3.1.1",
"@whatwg-node/promise-helpers": "^1.0.0",
"cross-inspect": "1.0.1",
"tslib": "^2.4.0"
},
"engines": {
"node": ">=16.0.0"
},
"peerDependencies": {
"graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0"
}
},
"node_modules/@graphql-tools/schema": {
"version": "10.0.31",
"resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-10.0.31.tgz",
"integrity": "sha512-ZewRgWhXef6weZ0WiP7/MV47HXiuFbFpiDUVLQl6mgXsWSsGELKFxQsyUCBos60Qqy1JEFAIu3Ns6GGYjGkqkQ==",
"license": "MIT",
"dependencies": {
"@graphql-tools/merge": "^9.1.7",
"@graphql-tools/utils": "^11.0.0",
"tslib": "^2.4.0"
},
"engines": {
"node": ">=16.0.0"
},
"peerDependencies": {
"graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0"
}
},
"node_modules/@graphql-tools/schema/node_modules/@graphql-tools/utils": {
"version": "11.0.0",
"resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-11.0.0.tgz",
"integrity": "sha512-bM1HeZdXA2C3LSIeLOnH/bcqSgbQgKEDrjxODjqi3y58xai2TkNrtYcQSoWzGbt9VMN1dORGjR7Vem8SPnUFQA==",
"license": "MIT",
"dependencies": {
"@graphql-typed-document-node/core": "^3.1.1",
"@whatwg-node/promise-helpers": "^1.0.0",
"cross-inspect": "1.0.1",
"tslib": "^2.4.0"
},
"engines": {
"node": ">=16.0.0"
},
"peerDependencies": {
"graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0"
}
},
"node_modules/@graphql-tools/utils": {
"version": "10.11.0",
"resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-10.11.0.tgz",
"integrity": "sha512-iBFR9GXIs0gCD+yc3hoNswViL1O5josI33dUqiNStFI/MHLCEPduasceAcazRH77YONKNiviHBV8f7OgcT4o2Q==",
"license": "MIT",
"dependencies": {
"@graphql-typed-document-node/core": "^3.1.1",
"@whatwg-node/promise-helpers": "^1.0.0",
"cross-inspect": "1.0.1",
"tslib": "^2.4.0"
},
"engines": {
"node": ">=16.0.0"
},
"peerDependencies": {
"graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0"
}
},
"node_modules/@graphql-typed-document-node/core": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.2.0.tgz",
"integrity": "sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==",
"license": "MIT",
"peerDependencies": {
"graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0"
}
},
"node_modules/@graphql-yoga/logger": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/@graphql-yoga/logger/-/logger-2.0.1.tgz",
"integrity": "sha512-Nv0BoDGLMg9QBKy9cIswQ3/6aKaKjlTh87x3GiBg2Z4RrjyrM48DvOOK0pJh1C1At+b0mUIM67cwZcFTDLN4sA==",
"license": "MIT",
"dependencies": {
"tslib": "^2.8.1"
},
"engines": {
"node": ">=18.0.0"
}
},
"node_modules/@graphql-yoga/subscription": {
"version": "5.0.5",
"resolved": "https://registry.npmjs.org/@graphql-yoga/subscription/-/subscription-5.0.5.tgz",
"integrity": "sha512-oCMWOqFs6QV96/NZRt/ZhTQvzjkGB4YohBOpKM4jH/lDT4qb7Lex/aGCxpi/JD9njw3zBBtMqxbaC22+tFHVvw==",
"license": "MIT",
"dependencies": {
"@graphql-yoga/typed-event-target": "^3.0.2",
"@repeaterjs/repeater": "^3.0.4",
"@whatwg-node/events": "^0.1.0",
"tslib": "^2.8.1"
},
"engines": {
"node": ">=18.0.0"
}
},
"node_modules/@graphql-yoga/typed-event-target": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/@graphql-yoga/typed-event-target/-/typed-event-target-3.0.2.tgz",
"integrity": "sha512-ZpJxMqB+Qfe3rp6uszCQoag4nSw42icURnBRfFYSOmTgEeOe4rD0vYlbA8spvCu2TlCesNTlEN9BLWtQqLxabA==",
"license": "MIT",
"dependencies": {
"@repeaterjs/repeater": "^3.0.4",
"tslib": "^2.8.1"
},
"engines": {
"node": ">=18.0.0"
}
},
"node_modules/@grpc/grpc-js": {
"version": "1.13.3",
"resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.13.3.tgz",
@@ -7238,6 +7459,12 @@
}
}
},
"node_modules/@repeaterjs/repeater": {
"version": "3.0.6",
"resolved": "https://registry.npmjs.org/@repeaterjs/repeater/-/repeater-3.0.6.tgz",
"integrity": "sha512-Javneu5lsuhwNCryN+pXH93VPQ8g0dBX7wItHFgYiwQmzE1sVdg5tWHiOgHywzL2W21XQopa7IwIEnNbmeUJYA==",
"license": "MIT"
},
"node_modules/@rollup/plugin-alias": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/@rollup/plugin-alias/-/plugin-alias-5.1.1.tgz",
@@ -10924,6 +11151,87 @@
}
}
},
"node_modules/@whatwg-node/disposablestack": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/@whatwg-node/disposablestack/-/disposablestack-0.0.6.tgz",
"integrity": "sha512-LOtTn+JgJvX8WfBVJtF08TGrdjuFzGJc4mkP8EdDI8ADbvO7kiexYep1o8dwnt0okb0jYclCDXF13xU7Ge4zSw==",
"license": "MIT",
"dependencies": {
"@whatwg-node/promise-helpers": "^1.0.0",
"tslib": "^2.6.3"
},
"engines": {
"node": ">=18.0.0"
}
},
"node_modules/@whatwg-node/events": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/@whatwg-node/events/-/events-0.1.2.tgz",
"integrity": "sha512-ApcWxkrs1WmEMS2CaLLFUEem/49erT3sxIVjpzU5f6zmVcnijtDSrhoK2zVobOIikZJdH63jdAXOrvjf6eOUNQ==",
"license": "MIT",
"dependencies": {
"tslib": "^2.6.3"
},
"engines": {
"node": ">=18.0.0"
}
},
"node_modules/@whatwg-node/fetch": {
"version": "0.10.13",
"resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.10.13.tgz",
"integrity": "sha512-b4PhJ+zYj4357zwk4TTuF2nEe0vVtOrwdsrNo5hL+u1ojXNhh1FgJ6pg1jzDlwlT4oBdzfSwaBwMCtFCsIWg8Q==",
"license": "MIT",
"dependencies": {
"@whatwg-node/node-fetch": "^0.8.3",
"urlpattern-polyfill": "^10.0.0"
},
"engines": {
"node": ">=18.0.0"
}
},
"node_modules/@whatwg-node/node-fetch": {
"version": "0.8.5",
"resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.8.5.tgz",
"integrity": "sha512-4xzCl/zphPqlp9tASLVeUhB5+WJHbuWGYpfoC2q1qh5dw0AqZBW7L27V5roxYWijPxj4sspRAAoOH3d2ztaHUQ==",
"license": "MIT",
"dependencies": {
"@fastify/busboy": "^3.1.1",
"@whatwg-node/disposablestack": "^0.0.6",
"@whatwg-node/promise-helpers": "^1.3.2",
"tslib": "^2.6.3"
},
"engines": {
"node": ">=18.0.0"
}
},
"node_modules/@whatwg-node/promise-helpers": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/@whatwg-node/promise-helpers/-/promise-helpers-1.3.2.tgz",
"integrity": "sha512-Nst5JdK47VIl9UcGwtv2Rcgyn5lWtZ0/mhRQ4G8NN2isxpq2TO30iqHzmwoJycjWuyUfg3GFXqP/gFHXeV57IA==",
"license": "MIT",
"dependencies": {
"tslib": "^2.6.3"
},
"engines": {
"node": ">=16.0.0"
}
},
"node_modules/@whatwg-node/server": {
"version": "0.10.18",
"resolved": "https://registry.npmjs.org/@whatwg-node/server/-/server-0.10.18.tgz",
"integrity": "sha512-kMwLlxUbduttIgaPdSkmEarFpP+mSY8FEm+QWMBRJwxOHWkri+cxd8KZHO9EMrB9vgUuz+5WEaCawaL5wGVoXg==",
"license": "MIT",
"dependencies": {
"@envelop/instrumentation": "^1.0.0",
"@whatwg-node/disposablestack": "^0.0.6",
"@whatwg-node/fetch": "^0.10.13",
"@whatwg-node/promise-helpers": "^1.3.2",
"tslib": "^2.6.3"
},
"engines": {
"node": ">=18.0.0"
}
},
"node_modules/@xmldom/xmldom": {
"version": "0.8.10",
"resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz",
@@ -13905,6 +14213,18 @@
"node-fetch": "^2.7.0"
}
},
"node_modules/cross-inspect": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/cross-inspect/-/cross-inspect-1.0.1.tgz",
"integrity": "sha512-Pcw1JTvZLSJH83iiGWt6fRcT+BjZlCDRVwYLbUcHzv/CRpB7r0MlSrGbIyQvVSNyGnbt7G4AXuyCiDR3POvZ1A==",
"license": "MIT",
"dependencies": {
"tslib": "^2.4.0"
},
"engines": {
"node": ">=16.0.0"
}
},
"node_modules/cross-spawn": {
"version": "7.0.6",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
@@ -17734,6 +18054,38 @@
"node": ">= 6"
}
},
"node_modules/graphql-yoga": {
"version": "5.18.1",
"resolved": "https://registry.npmjs.org/graphql-yoga/-/graphql-yoga-5.18.1.tgz",
"integrity": "sha512-GiDSlvibfY/vyurbkBOKMO+adF6bTCzKr80FYWta59s1Lx87oVo8T6Nu/0hrxrGv0SrAUkqUpcpr4Ee7XlYmBw==",
"license": "MIT",
"dependencies": {
"@envelop/core": "^5.5.1",
"@envelop/instrumentation": "^1.0.0",
"@graphql-tools/executor": "^1.5.0",
"@graphql-tools/schema": "^10.0.11",
"@graphql-tools/utils": "^10.11.0",
"@graphql-yoga/logger": "^2.0.1",
"@graphql-yoga/subscription": "^5.0.5",
"@whatwg-node/fetch": "^0.10.6",
"@whatwg-node/promise-helpers": "^1.3.2",
"@whatwg-node/server": "^0.10.14",
"lru-cache": "^10.0.0",
"tslib": "^2.8.1"
},
"engines": {
"node": ">=18.0.0"
},
"peerDependencies": {
"graphql": "^15.2.0 || ^16.0.0"
}
},
"node_modules/graphql-yoga/node_modules/lru-cache": {
"version": "10.4.3",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
"integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
"license": "ISC"
},
"node_modules/grpc-js-reflection-client": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/grpc-js-reflection-client/-/grpc-js-reflection-client-1.3.0.tgz",
@@ -29232,6 +29584,12 @@
"integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==",
"license": "MIT"
},
"node_modules/urlpattern-polyfill": {
"version": "10.1.0",
"resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.1.0.tgz",
"integrity": "sha512-IGjKp/o0NL3Bso1PymYURCJxMPNAf/ILOpendP9f5B6e1rTJgdgiOvgfoT8VxCAdY+Wisb9uhGaJJf3yZ2V9nw==",
"license": "MIT"
},
"node_modules/use-callback-ref": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz",
@@ -35583,6 +35941,8 @@
"express": "^4.21.2",
"express-basic-auth": "^1.2.1",
"fast-xml-parser": "^5.0.8",
"graphql": "^16.10.0",
"graphql-yoga": "^5.10.6",
"http-proxy": "^1.18.1",
"js-yaml": "^4.1.1",
"jsonwebtoken": "^9.0.3",