├── .github ├── dependabot.yml ├── pull_request_template.md └── workflows │ └── nodejs.yml ├── .gitignore ├── .vscode └── settings.json ├── CODE_OF_CONDUCT.md ├── README.md ├── SECURITY.md ├── contribution.md ├── eslint.config.mjs ├── example.env ├── nodemon.json ├── package.json ├── src ├── app.ts ├── controllers │ ├── counties.ts │ ├── country.ts │ ├── health_check.ts │ ├── hospitals.ts │ ├── postal_codes.ts │ ├── towns.ts │ ├── tribes.ts │ ├── universities.ts │ └── wards.ts ├── countyflags │ ├── 150px-Flag_of_Nairobi.svg.png │ ├── 158px-Old_Flag_of_Kiambu_County.svg.png │ ├── Elgeyo_Marakwet_Flag.png │ ├── Flag_of_Baringo_County.png │ ├── Flag_of_Bomet_County.png │ ├── Flag_of_Busia_County.png │ ├── Flag_of_Homa_Bay_County.png │ ├── Flag_of_Kilifi_County.png │ ├── Flag_of_Laikipia_County.png │ ├── Flag_of_Machakos_County.png │ ├── Flag_of_Marsabit_County.png │ ├── Flag_of_Meru_County.png │ └── Flag_of_Mombasa.png ├── env.ts ├── middlewares │ └── loggingMiddleware.ts ├── public │ ├── counties.ts │ ├── country.json │ ├── hospitals.ts │ ├── postal_codes.ts │ ├── towns.ts │ ├── tribes.ts │ ├── universities.ts │ └── wards.ts ├── server.ts └── utilities │ └── debug.ts ├── tests └── api_tests │ ├── county.test.ts │ ├── postal_codes.test.ts │ └── wards.test.ts ├── tsconfig.json └── yarn.lock /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | # To get started with Dependabot version updates, you'll need to specify which 2 | # package ecosystems to update and where the package manifests are located. 3 | # Please see the documentation for all configuration options: 4 | # https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates 5 | 6 | version: 2 7 | updates: 8 | - package-ecosystem: "npm" # See documentation for possible values 9 | directory: "/" # Location of package manifests 10 | schedule: 11 | interval: "daily" 12 | -------------------------------------------------------------------------------- /.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 | ### Description 2 | 3 | _Add a short description of the changes._ 4 | 5 | ### Merge Checklist 6 | 7 | - [ ] Is the title of the PR in this format: `[fix|docs|feat|refactor|chore|tests] short description` ? 8 | - [ ] Added new tests - if necessary (if you changed an API interface or added a new route, you most probably need to add new tests) 9 | - [ ] Added appropriate documentation (if you changed an API interface or added a new route, you most probably need to update/add the appropriate documentation) 10 | - [ ] Do you need to update the README? 11 | - [ ] Do you need to update example.env? 12 | -------------------------------------------------------------------------------- /.github/workflows/nodejs.yml: -------------------------------------------------------------------------------- 1 | name: Kenya API CI 2 | 3 | on: [push] 4 | 5 | jobs: 6 | build: 7 | runs-on: ubuntu-latest 8 | 9 | strategy: 10 | matrix: 11 | node-version: [20.x] 12 | 13 | steps: 14 | - uses: actions/checkout@v2 15 | - name: Use Node.js ${{ matrix.node-version }} 16 | uses: actions/setup-node@v2 17 | with: 18 | node-version: ${{ matrix.node-version }} 19 | - name: Install Dependencies, Lint and run Tests 20 | run: | 21 | yarn install 22 | yarn run lint 23 | yarn run test 24 | env: 25 | CI: true 26 | - name: Build 27 | run: yarn run build 28 | env: 29 | CI: true 30 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | dist 3 | .tsbuildinfo 4 | .env 5 | yarn-error.log -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "typescript.tsdk": "node_modules/typescript/lib" 3 | } 4 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Contributor Covenant Code of Conduct 2 | 3 | ## Our Pledge 4 | 5 | We as members, contributors, and leaders pledge to make participation in our 6 | community a harassment-free experience for everyone, regardless of age, body 7 | size, visible or invisible disability, ethnicity, sex characteristics, gender 8 | identity and expression, level of experience, education, socio-economic status, 9 | nationality, personal appearance, race, religion, or sexual identity 10 | and orientation. 11 | 12 | We pledge to act and interact in ways that contribute to an open, welcoming, 13 | diverse, inclusive, and healthy community. 14 | 15 | ## Our Standards 16 | 17 | Examples of behavior that contributes to a positive environment for our 18 | community include: 19 | 20 | * Demonstrating empathy and kindness toward other people 21 | * Being respectful of differing opinions, viewpoints, and experiences 22 | * Giving and gracefully accepting constructive feedback 23 | * Accepting responsibility and apologizing to those affected by our mistakes, 24 | and learning from the experience 25 | * Focusing on what is best not just for us as individuals, but for the 26 | overall community 27 | 28 | Examples of unacceptable behavior include: 29 | 30 | * The use of sexualized language or imagery, and sexual attention or 31 | advances of any kind 32 | * Trolling, insulting or derogatory comments, and personal or political attacks 33 | * Public or private harassment 34 | * Publishing others' private information, such as a physical or email 35 | address, without their explicit permission 36 | * Other conduct which could reasonably be considered inappropriate in a 37 | professional setting 38 | 39 | ## Enforcement Responsibilities 40 | 41 | Community leaders are responsible for clarifying and enforcing our standards of 42 | acceptable behavior and will take appropriate and fair corrective action in 43 | response to any behavior that they deem inappropriate, threatening, offensive, 44 | or harmful. 45 | 46 | Community leaders have the right and responsibility to remove, edit, or reject 47 | comments, commits, code, wiki edits, issues, and other contributions that are 48 | not aligned to this Code of Conduct, and will communicate reasons for moderation 49 | decisions when appropriate. 50 | 51 | ## Scope 52 | 53 | This Code of Conduct applies within all community spaces, and also applies when 54 | an individual is officially representing the community in public spaces. 55 | Examples of representing our community include using an official e-mail address, 56 | posting via an official social media account, or acting as an appointed 57 | representative at an online or offline event. 58 | 59 | ## Enforcement 60 | 61 | Instances of abusive, harassing, or otherwise unacceptable behavior may be 62 | reported to the community leaders responsible for enforcement at 63 | developerphilo@gmail.com. 64 | All complaints will be reviewed and investigated promptly and fairly. 65 | 66 | All community leaders are obligated to respect the privacy and security of the 67 | reporter of any incident. 68 | 69 | ## Enforcement Guidelines 70 | 71 | Community leaders will follow these Community Impact Guidelines in determining 72 | the consequences for any action they deem in violation of this Code of Conduct: 73 | 74 | ### 1. Correction 75 | 76 | **Community Impact**: Use of inappropriate language or other behavior deemed 77 | unprofessional or unwelcome in the community. 78 | 79 | **Consequence**: A private, written warning from community leaders, providing 80 | clarity around the nature of the violation and an explanation of why the 81 | behavior was inappropriate. A public apology may be requested. 82 | 83 | ### 2. Warning 84 | 85 | **Community Impact**: A violation through a single incident or series 86 | of actions. 87 | 88 | **Consequence**: A warning with consequences for continued behavior. No 89 | interaction with the people involved, including unsolicited interaction with 90 | those enforcing the Code of Conduct, for a specified period of time. This 91 | includes avoiding interactions in community spaces as well as external channels 92 | like social media. Violating these terms may lead to a temporary or 93 | permanent ban. 94 | 95 | ### 3. Temporary Ban 96 | 97 | **Community Impact**: A serious violation of community standards, including 98 | sustained inappropriate behavior. 99 | 100 | **Consequence**: A temporary ban from any sort of interaction or public 101 | communication with the community for a specified period of time. No public or 102 | private interaction with the people involved, including unsolicited interaction 103 | with those enforcing the Code of Conduct, is allowed during this period. 104 | Violating these terms may lead to a permanent ban. 105 | 106 | ### 4. Permanent Ban 107 | 108 | **Community Impact**: Demonstrating a pattern of violation of community 109 | standards, including sustained inappropriate behavior, harassment of an 110 | individual, or aggression toward or disparagement of classes of individuals. 111 | 112 | **Consequence**: A permanent ban from any sort of public interaction within 113 | the community. 114 | 115 | ## Attribution 116 | 117 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], 118 | version 2.0, available at 119 | https://www.contributor-covenant.org/version/2/0/code_of_conduct.html. 120 | 121 | Community Impact Guidelines were inspired by [Mozilla's code of conduct 122 | enforcement ladder](https://github.com/mozilla/diversity). 123 | 124 | [homepage]: https://www.contributor-covenant.org 125 | 126 | For answers to common questions about this code of conduct, see the FAQ at 127 | https://www.contributor-covenant.org/faq. Translations are available at 128 | https://www.contributor-covenant.org/translations. 129 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
2 | 3 |

Kenya API

4 | 5 | RESTFul API documenting all the information about country Kenya 6 | 7 |
8 | 9 | ![Blogsite website](https://cdn.britannica.com/15/15-050-B075588A/Flag-Kenya.jpg) 10 | 11 | ## Features 12 | 13 | - To be added: Get general information about Kenya,its people, government, institutions, health, culture, energy, finance, infrastructure, geographical sites, etc. 14 | 15 | - Get information about the 47 counties, including population, industries, area, tribes, postal codes, etc. 16 | 17 | #### Built with 18 | 19 | - Node.js 20 | - Express.js 21 | 22 | ### Home 23 | 24 | To access the base URL, [https://kenya-api.onrender.com/api/v1/](https://kenya-api.onrender.com/api/v1/) 25 | 26 | To access health endpoint, [https://kenya-api.onrender.com/api/v1/health](https://kenya-api.onrender.com/api/v1/health) 27 | 28 | 29 | 30 | ### API Routes 31 | 32 | List of all the available kenya-api base routes. 33 | 34 | - `/health` 35 | - `/info` # info about country kenya! 36 | - `/county` 37 | - `/wards` 38 | - `/postal_stations` 39 | - `/universities` 40 | - `/tribes` 41 | - `/hospitals` 42 | 43 | 44 | ## Getting Started 45 | 46 | Installation 47 | 48 | ```bash 49 | 50 | # install dependencies 51 | 52 | $ yarn install 53 | 54 | # serve with hot reload at localhost:3000 55 | 56 | $ yarn run dev 57 | 58 | ``` 59 | 60 | 61 | Your application will be served on port [3000](http://localhost:3000/) by default, you can change that by modifying the .env file. 62 | 63 | For a detailed explanation of how things work, check out [Express.js](https://expressjs.com/en/starter/hello-world.html). 64 | 65 | 66 | ### REST API Documentation - County Data Endpoint 67 | 68 | This REST API endpoint allows you to retrieve information about counties based on their county code. 69 | 70 | ### Get County Data 71 | 72 | #### Request 73 | 74 | - Method: GET 75 | - Endpoint: `/county` 76 | - Parameters: 77 | - `county_code`: The unique numerical code of the county (required) 78 | 79 | ### Response 80 | 81 | - Status Code: 200 (OK) - Successful request 82 | - Status Code: 400 (Bad Request) - County not found or invalid `county_code` 83 | 84 | #### Successful Response 85 | 86 | ```json 87 | { 88 | "county": { 89 | "code": 1, 90 | "name": "Mombasa", 91 | "capital": "Mombasa (City)", 92 | "contact": "esupport@mombasa.go.ke", 93 | "website": "https://eservices.mombasa.go.ke/site/", 94 | "location": "Coastal Kenya", 95 | "border": ["Kilifi", "Kwale", "Indian Ocean"], 96 | "area": "219 km2", 97 | "Population": "939,370", 98 | "Mining": ["Chrome ore", "Cement", "Salt", "Sand"] 99 | }, 100 | "status": 200 101 | } 102 | ``` 103 | #### Not found error response 104 | 105 | 106 | ```json 107 | { 108 | "error": "County with the code {county_code} not found", 109 | "status": 400 110 | } 111 | 112 | ``` 113 | 114 | #### Request 115 | 116 | ```bash 117 | GET /county?county_code=1 118 | 119 | ``` 120 | #### Response 121 | 122 | ```json 123 | { 124 | "county": { 125 | "code": 1, 126 | "name": "Mombasa", 127 | "capital": "Mombasa (City)", 128 | "contact": "esupport@mombasa.go.ke", 129 | "website": "https://eservices.mombasa.go.ke/site/", 130 | "location": "Coastal Kenya", 131 | "border": ["Kilifi", "Kwale", "Indian Ocean"], 132 | "area": "219 km2", 133 | "Population": "939,370", 134 | "Mining": ["Chrome ore", "Cement", "Salt", "Sand"] 135 | }, 136 | "status": 200 137 | } 138 | 139 | ``` 140 | #### Request 141 | 142 | ```bash 143 | GET /county?county_code=99 144 | 145 | ``` 146 | #### Respoonse 147 | 148 | ```json 149 | { 150 | "error": "County with the code 99 not found", 151 | "status": 400 152 | } 153 | ``` 154 | 155 | #### Request 156 | 157 | ```bash 158 | GET /county 159 | ``` 160 | 161 | #### Response 162 | 163 | ```json 164 | { 165 | "counties": [ 166 | { 167 | "code": 1, 168 | "name": "Mombasa", 169 | "capital": "Mombasa (City)", 170 | "contact": "esupport@mombasa.go.ke", 171 | "website": "https://eservices.mombasa.go.ke/site/", 172 | "location": "Coastal Kenya", 173 | "border": ["Kilifi", "Kwale", "Indian Ocean"], 174 | "area": "219 km2", 175 | "Population": "939,370", 176 | "Mining": ["Chrome ore", "Cement", "Salt", "Sand"] 177 | }, 178 | // Additional counties... 179 | ], 180 | "status": 200 181 | } 182 | 183 | ``` 184 | 185 | ### REST API Documentation - Wards Data Endpoint 186 | 187 | This REST API endpoint allows you to retrieve information about wards based on their ward code. 188 | 189 | ### Get Wards Data 190 | 191 | #### Request 192 | 193 | - Method: GET 194 | - Endpoint: `/wards` 195 | - Parameters: 196 | - `ward_code`: The unique alphanumeric code of the ward (required) 197 | 198 | #### Response 199 | 200 | - Status Code: 200 (OK) - Successful request 201 | - Status Code: 400 (Bad Request) - Ward not found or invalid `ward_code` 202 | 203 | 204 | ### Examples 205 | 206 | #### Request 207 | 208 | ```bash 209 | GET /wards?ward_code=40101 210 | ``` 211 | #### Successful Response 212 | 213 | ```json 214 | { 215 | "ward": { 216 | "code": "40101", 217 | "office": "Ahero" 218 | }, 219 | "status": 200 220 | } 221 | ``` 222 | 223 | #### Error Response 224 | 225 | ```json 226 | { 227 | "error": "Ward with the code 40101 not found", 228 | "status": 400 229 | } 230 | 231 | ``` 232 | 233 | #### Request 234 | 235 | ```bash 236 | GET /wards?ward_code=99999 237 | 238 | ``` 239 | 240 | #### Error Response 241 | 242 | ```json 243 | { 244 | "error": "Ward with the code 99999 not found", 245 | "status": 400 246 | } 247 | ``` 248 | #### Request 249 | 250 | ```bash 251 | GET /wards 252 | 253 | ``` 254 | 255 | #### Response 256 | 257 | 258 | ```json 259 | { 260 | "wards": [ 261 | { 262 | "code": "40101", 263 | "office": "Ahero" 264 | }, 265 | { 266 | "code": "30101", 267 | "office": "Ainabkoi" 268 | }, 269 | { 270 | "code": "40139", 271 | "office": "Akala" 272 | }, 273 | // Additional wards... 274 | ], 275 | "status": 200 276 | } 277 | ``` 278 | 279 | # Postal Stations API Documentation 280 | 281 | This API endpoint allows you to retrieve information about postal stations based on their postal code. 282 | 283 | ## Get Postal Station Data 284 | 285 | ### Request 286 | 287 | - Method: GET 288 | - Endpoint: `/postal_stations` 289 | - Parameters: 290 | - `post_code`: The unique numerical postal code of the station (required) 291 | 292 | ### Response 293 | 294 | - Status Code: 200 (OK) - Successful request 295 | - Status Code: 400 (Bad Request) - Postal station not found or invalid `post_code` 296 | - Status Code: 200 (OK) - Request without `post_code`, returns all postal stations 297 | 298 | #### Successful Response 299 | 300 | ```json 301 | { 302 | "post": { 303 | "code": 12345, 304 | "name": "Sample Postal Station", 305 | "location": "Sample Location", 306 | "district": "Sample District" 307 | }, 308 | "status": 200 309 | } 310 | ``` 311 | 312 | #### Error Response 313 | 314 | 315 | ```json 316 | { 317 | "error": "Post station with the code {postal_code} not found", 318 | "status": 400 319 | } 320 | 321 | ``` 322 | ### Examples 323 | #### Request 324 | 325 | ```bash 326 | 327 | GET /postal_stations?post_code=12345 328 | ``` 329 | ### Response 330 | 331 | ```json 332 | 333 | { 334 | "post": { 335 | "code": 12345, 336 | "name": "Sample Postal Station", 337 | "location": "Sample Location", 338 | "district": "Sample District" 339 | }, 340 | "status": 200 341 | } 342 | ``` 343 | #### Request 344 | 345 | ```bash 346 | GET /postal_stations?post_code=99999 347 | ``` 348 | #### Response 349 | 350 | ```json 351 | 352 | { 353 | "error": "Post station with the code 99999 not found", 354 | "status": 400 355 | } 356 | 357 | ``` 358 | #### Request 359 | 360 | ```bash 361 | GET /postal_stations 362 | ``` 363 | #### Response 364 | 365 | ```json 366 | 367 | { 368 | "postal_stations": [ 369 | { 370 | "code": 12345, 371 | "name": "Sample Postal Station 1", 372 | "location": "Sample Location 1", 373 | "district": "Sample District 1" 374 | }, 375 | { 376 | "code": 67890, 377 | "name": "Sample Postal Station 2", 378 | "location": "Sample Location 2", 379 | "district": "Sample District 2" 380 | }, 381 | // Additional postal stations... 382 | ], 383 | "status": 200 384 | } 385 | 386 | ``` 387 | 388 | ## Contributing 389 | 390 | 391 | Contributions are always welcome! You can contribute to this project in various ways, including but not limited to: 392 | 393 | - Updating to correct information 394 | - Adding missing information 395 | - Writing and adding tests 396 | - Fixing bugs and issues 397 | - Improving documentation 398 | - Implementing new features 399 | 400 | See `contributing.md` for more details on how to get started with contributing. 401 | 402 | Please adhere to this project's `code of conduct`. 403 | 404 | 405 | #### Authors 406 | 407 | - [John Philip](https://www.github.com/dxphilo) 408 | 409 | 410 | ## License 411 | 412 | [MIT](https://choosealicense.com/licenses/mit/) 413 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | # Security Policy 2 | 3 | ## Reporting a Vulnerability 4 | 5 | If you discover a security vulnerability in the Walrus project, we encourage you to report it responsibly. Your cooperation in disclosing vulnerabilities helps us maintain the security and integrity of the project. 6 | 7 | To report a vulnerability, please follow these steps: 8 | 9 | 1. Go to the [Issues](https://github.com/dxphilo/kenya-api/issues) section of the project repository. 10 | 11 | 2. Click on the "New Issue" button. 12 | 13 | 3. Select the "Security Vulnerability" issue template, if available. 14 | 15 | 4. Provide a clear and concise description of the vulnerability in the issue body. Include any supporting materials, like proof-of-concept code or screenshots, to help us understand the impact and severity. 16 | 17 | 5. Submit the issue. 18 | 19 | We will acknowledge your report as soon as possible and work closely with you to validate and understand the vulnerability. Once the vulnerability is confirmed and mitigated, we will release a security update to the supported versions of the project. 20 | 21 | ## Responsible Disclosure 22 | 23 | We request that you follow responsible disclosure practices and refrain from publicly disclosing the vulnerability until we have had sufficient time to address it. This ensures that our users are protected from potential exploits. 24 | 25 | Thank you for your support in making this project more secure. Your efforts help us improve the safety and reliability of our software for everyone. 26 | -------------------------------------------------------------------------------- /contribution.md: -------------------------------------------------------------------------------- 1 | ## Contribution Guide 2 | 3 | This project welcomes any kind of contribution! Here are a few suggestions: 4 | 5 | - Any information you would like to be added 6 | 7 | - Writing: contribute your expertise in an area by helping expand the included content. 8 | 9 | - Copy editing: fix typos, clarify language, and generally improve the quality of the content. 10 | 11 | - Formatting: help keep content easy to read with consistent formatting. 12 | 13 | Have a favorite piece you're not seeing here? Want to contribute? Make a [pull request (PR)](https://github.com/developerphilo/kenya-api/pulls)! 😄 14 | 15 | - Before creating a PR, you should ensure that: 16 | 17 | 1. Your suggestion is relevant information. This information is meant for the curation of general information and therefore relevant info. 18 | 19 | 2. Your suggestion is not already in the API. 20 | 21 | 3. There are no spelling or grammatical errors. 22 | 23 | - New to [Markdown](https://www.markdownguide.org/cheat-sheet/)? Here's how it would look like: 24 | 25 | ``` 26 | - [Title of Paper, Article, Blog](url) `Small description/Author(s)` 27 | 28 | ``` 29 | Thank you for contributing to this repository! 🙇‍♂️ -------------------------------------------------------------------------------- /eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import eslint from '@eslint/js'; 2 | import tseslint from 'typescript-eslint'; 3 | 4 | export default tseslint.config( 5 | 6 | // If ignores is used without any other keys in the configuration object, 7 | // then the patterns act as global ignores. 8 | { 9 | // An array of glob patterns indicating the files that the configuration 10 | // object should not apply to. If not specified, the configuration 11 | // object applies to all files matched by files. 12 | ignores: [ 13 | 'build/**/*.*', 14 | '/node_modules', 15 | '/dist', 16 | '.gitignore', 17 | ], 18 | }, 19 | 20 | eslint.configs.recommended, 21 | ...tseslint.configs.recommended, 22 | 23 | { 24 | // An array of glob patterns indicating the files that the configuration 25 | // object should apply to. If not specified, the configuration object 26 | // applies to all files matched by any other configuration object. 27 | files: [ 28 | './src/**/*.ts', 29 | './src/**/*.tsx', 30 | "./src/**/*.js", 31 | ], 32 | rules: { 33 | '@typescript-eslint/no-unused-vars': [ 34 | "warn", 35 | { 36 | "argsIgnorePattern": "^_" 37 | } 38 | ] 39 | } 40 | } 41 | 42 | ); -------------------------------------------------------------------------------- /example.env: -------------------------------------------------------------------------------- 1 | PORT=3000 -------------------------------------------------------------------------------- /nodemon.json: -------------------------------------------------------------------------------- 1 | { 2 | "watch": ["dist"], 3 | "ext": "js", 4 | "exec": "yarn start", 5 | "delay": 1 6 | } 7 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "kenya-api", 3 | "version": "1.0.0", 4 | "description": "API documenting information about country Kenya", 5 | "repository": "https://github.com/developerphilo/kenya-api.git", 6 | "main": "src/server.ts", 7 | "scripts": { 8 | "build": "yarn tsc", 9 | "start": "yarn tsc && yarn node ./dist/server.js", 10 | "dev": "yarn run build && yarn run concurrently \"yarn run build -w\" \"yarn nodemon\"", 11 | "lint": "yarn eslint '*/**/*.ts' -c eslint.config.mjs --fix", 12 | "test": "TEST_MODE=true mocha -r ts-node/register -r tsconfig-paths/register 'tests/api_tests/*.test.ts' --files --timeout 60000" 13 | }, 14 | "keywords": [ 15 | "kenya-api" 16 | ], 17 | "author": "John Philip ", 18 | "license": "MIT", 19 | "devDependencies": { 20 | "@eslint/js": "^9.28.0", 21 | "@types/body-parser": "^1.19.5", 22 | "@types/compression": "^1.8.0", 23 | "@types/cors": "^2.8.18", 24 | "@types/express": "^5.0.3", 25 | "@types/supertest": "^6.0.3", 26 | "concurrently": "^9.1.2", 27 | "eslint": "^9.28.0", 28 | "supertest": "^7.1.1", 29 | "ts-node": "^10.9.1", 30 | "tsconfig-paths": "^4.2.0", 31 | "typescript": "^5.8.3", 32 | "typescript-eslint": "^8.33.1" 33 | }, 34 | "dependencies": { 35 | "@types/mocha": "^10.0.10", 36 | "body-parser": "^2.2.0", 37 | "compression": "^1.7.4", 38 | "cors": "^2.8.5", 39 | "dotenv": "^16.5.0", 40 | "express": "^5.1.0", 41 | "mocha": "^11.5.0", 42 | "nodemon": "^3.1.10" 43 | }, 44 | "engines": { 45 | "node": ">=20.0.0" 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /src/app.ts: -------------------------------------------------------------------------------- 1 | import express from 'express'; 2 | import cors from 'cors'; 3 | import { json as bodyParser } from 'body-parser'; 4 | import compression from 'compression'; // compresses requests 5 | 6 | import env from './env'; 7 | import countryController from './controllers/country'; 8 | import countyController from './controllers/counties'; 9 | import postcodeController from './controllers/postal_codes'; 10 | import wardsController from './controllers/wards'; 11 | import health_check from './controllers/health_check'; 12 | import townsController from './controllers/towns'; 13 | import universityController from './controllers/universities'; 14 | import tribesController from './controllers/tribes'; 15 | import hospitalsController from './controllers/hospitals'; 16 | import { loggingMiddleware } from './middlewares/loggingMiddleware'; 17 | 18 | const app = express(); 19 | const router = express.Router(); 20 | 21 | // Middlewares 22 | app.set('port', env.port); 23 | app.use(loggingMiddleware); 24 | app.use(cors()); 25 | app.use(compression()); 26 | app.use(bodyParser()); 27 | 28 | // Controllers 29 | router.use('/health', health_check); 30 | router.use('/county', countyController); 31 | router.use('/info', countryController); 32 | router.use('/wards', wardsController); 33 | router.use('/postal_stations', postcodeController); 34 | router.use('/towns', townsController); 35 | router.use('universities', universityController); 36 | router.use('/tribes', tribesController); 37 | router.use('/hospitals', hospitalsController); 38 | 39 | // Mount the router under /api/v1/ 40 | app.use('/api/v1', router); 41 | 42 | export default app; 43 | -------------------------------------------------------------------------------- /src/controllers/counties.ts: -------------------------------------------------------------------------------- 1 | import { Request, Response, Router } from "express"; 2 | import { counties, County } from "../public/counties"; 3 | 4 | const router = Router(); 5 | 6 | const county_data = (req: Request, res: Response): void => { 7 | const county_code: number = parseInt(req.query.county_code as string, 10); 8 | 9 | if (isNaN(county_code)) { 10 | res.status(400).json({ 11 | error: "County code Invalid or missing county code", 12 | status: 400, 13 | }); 14 | return; 15 | } 16 | 17 | const found_county: County | undefined = counties.find( 18 | (county) => county.code === county_code 19 | ); 20 | 21 | if (found_county) { 22 | res.status(200).json({ county: found_county, status: 200 }); 23 | return; 24 | } 25 | res.status(400).json({ 26 | error: `County with the code ${county_code} not found`, 27 | status: 400, 28 | }); 29 | return; 30 | }; 31 | 32 | // Routes 33 | router.get("/", county_data); 34 | 35 | export default router; 36 | -------------------------------------------------------------------------------- /src/controllers/country.ts: -------------------------------------------------------------------------------- 1 | import { Request, Response, Router } from 'express'; 2 | import * as countryInfo from '../public/country.json'; 3 | 4 | const router = Router(); 5 | 6 | const country_data = (req: Request, res: Response): void => { 7 | res.status(200).json({ countryInfo, status: 200 }); 8 | } 9 | 10 | // Routes 11 | router.get('/', country_data); 12 | 13 | export default router; 14 | -------------------------------------------------------------------------------- /src/controllers/health_check.ts: -------------------------------------------------------------------------------- 1 | import { Request, Response, Router } from "express"; 2 | 3 | const router = Router(); 4 | 5 | const health_check = (req: Request, res: Response): void => { 6 | res.json({ 7 | Status: "OK 👍", 8 | Name: "Kenya API", 9 | Message: "Kasongo Must Go!", 10 | Version: "/api/v1/", 11 | }); 12 | return; 13 | }; 14 | 15 | // Routes 16 | router.get("/", health_check); 17 | 18 | export default router; 19 | -------------------------------------------------------------------------------- /src/controllers/hospitals.ts: -------------------------------------------------------------------------------- 1 | import { Request, Response, Router } from "express"; 2 | import { publicHospitals, PublicHospital } from "../public/hospitals"; 3 | 4 | const router = Router(); 5 | 6 | const hospitals_data = (req: Request, res: Response): void => { 7 | const hospital: string = req.query.name as string; 8 | 9 | if (hospital) { 10 | const found_hospital: PublicHospital | undefined = publicHospitals.find( 11 | (u) => u.name.toLowerCase() === hospital.toLowerCase() 12 | ); 13 | 14 | if (found_hospital) { 15 | res.status(200).json({ data: found_hospital, status: 200 }); 16 | return; 17 | } 18 | res.status(400).json({ 19 | error: `Hospital with the name ${hospital} not found!`, 20 | status: 400, 21 | }); 22 | return; 23 | } 24 | 25 | res.status(200).json({ 26 | data: publicHospitals, 27 | count: publicHospitals.length, 28 | status: 200, 29 | }); 30 | return; 31 | }; 32 | 33 | // Routes 34 | router.get("/", hospitals_data); 35 | 36 | export default router; 37 | -------------------------------------------------------------------------------- /src/controllers/postal_codes.ts: -------------------------------------------------------------------------------- 1 | import { Request, Response, Router } from "express"; 2 | import { postal_stations, PostalCode } from "../public/postal_codes"; 3 | 4 | const router = Router(); 5 | 6 | const postal_data = (req: Request, res: Response): void => { 7 | const postal_code: number = parseInt(req.query.post_code as string, 10); 8 | 9 | if (!isNaN(postal_code)) { 10 | const found_post: PostalCode | undefined = postal_stations.find( 11 | (post) => post.code === postal_code 12 | ); 13 | 14 | if (found_post) { 15 | res.status(200).json({ post: found_post, status: 200 }); 16 | return; 17 | } 18 | 19 | res.status(400).json({ 20 | error: `Post station with the code ${postal_code} not found`, 21 | status: 400, 22 | }); 23 | return; 24 | } 25 | 26 | res.status(200).json({ postal_stations: postal_stations, status: 200 }); 27 | return; 28 | }; 29 | 30 | // Routes 31 | router.get("/", postal_data); 32 | 33 | export default router; 34 | -------------------------------------------------------------------------------- /src/controllers/towns.ts: -------------------------------------------------------------------------------- 1 | import { Request, Response, Router } from "express"; 2 | import { towns } from "../public/towns"; 3 | 4 | const router = Router(); 5 | 6 | const towns_data = (req: Request, res: Response): void => { 7 | res.status(200).json({ towns: towns, count: towns.length, status: 200 }); 8 | return; 9 | }; 10 | 11 | // Routes 12 | router.get("/", towns_data); 13 | 14 | export default router; 15 | -------------------------------------------------------------------------------- /src/controllers/tribes.ts: -------------------------------------------------------------------------------- 1 | import { Request, Response, Router } from "express"; 2 | import { tribes, Tribe } from "../public/tribes"; 3 | 4 | const router = Router(); 5 | 6 | const tribes_data = (req: Request, res: Response): void => { 7 | const tribe: string = req.query.name as string; 8 | 9 | if (tribe) { 10 | const found_tribe: Tribe | undefined = tribes.find( 11 | (u) => u.name.toLowerCase() === tribe.toLowerCase() 12 | ); 13 | 14 | if (found_tribe) { 15 | res.status(200).json({ data: found_tribe, status: 200 }); 16 | return; 17 | } 18 | res.status(400).json({ 19 | error: `Tribe with the name ${tribe} not found!`, 20 | status: 400, 21 | }); 22 | return; 23 | } 24 | 25 | res.status(200).json({ data: tribes, count: tribes.length, status: 200 }); 26 | return; 27 | }; 28 | 29 | // Routes 30 | router.get("/", tribes_data); 31 | 32 | export default router; 33 | -------------------------------------------------------------------------------- /src/controllers/universities.ts: -------------------------------------------------------------------------------- 1 | import { Request, Response, Router } from "express"; 2 | import { publicUniversities, University } from "../public/universities"; 3 | 4 | const router = Router(); 5 | 6 | const universities_data = (req: Request, res: Response): void => { 7 | const name: string = req.query.name as string; 8 | 9 | if (name) { 10 | const found_university: University | undefined = publicUniversities.find( 11 | (u) => u.name.toLowerCase() === name.toLowerCase() 12 | ); 13 | 14 | if (found_university) { 15 | res.status(200).json({ data: found_university, status: 200 }); 16 | return; 17 | } 18 | res.status(400).json({ 19 | error: `University with the name ${name} not found!`, 20 | status: 400, 21 | }); 22 | return; 23 | } 24 | 25 | res.status(200).json({ 26 | data: publicUniversities, 27 | count: publicUniversities.length, 28 | status: 200, 29 | }); 30 | return; 31 | }; 32 | 33 | // Routes 34 | router.get("/", universities_data); 35 | 36 | export default router; 37 | -------------------------------------------------------------------------------- /src/controllers/wards.ts: -------------------------------------------------------------------------------- 1 | import { Request, Response, Router } from "express"; 2 | import { wards, Ward } from "../public/wards"; 3 | 4 | const router = Router(); 5 | 6 | const wards_data = (req: Request, res: Response): void => { 7 | const ward_code: string = req.query.ward_code as string; 8 | if (ward_code) { 9 | const found_ward: Ward | undefined = wards.find( 10 | (ward) => ward.code === ward_code 11 | ); 12 | 13 | if (found_ward) { 14 | res.status(200).json({ ward: found_ward, status: 200 }); 15 | return; 16 | } 17 | res.status(400).json({ 18 | error: `Ward with the code ${ward_code} not found`, 19 | status: 400, 20 | }); 21 | return; 22 | } 23 | 24 | res.status(201).json({ wards, status: 200 }); 25 | return; 26 | }; 27 | 28 | // Routes 29 | router.get("/", wards_data); 30 | 31 | export default router; 32 | -------------------------------------------------------------------------------- /src/countyflags/150px-Flag_of_Nairobi.svg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxphilo/kenya-api/5bad38c4363e0aa3b5ca6d763d28ddae5b08368b/src/countyflags/150px-Flag_of_Nairobi.svg.png -------------------------------------------------------------------------------- /src/countyflags/158px-Old_Flag_of_Kiambu_County.svg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxphilo/kenya-api/5bad38c4363e0aa3b5ca6d763d28ddae5b08368b/src/countyflags/158px-Old_Flag_of_Kiambu_County.svg.png -------------------------------------------------------------------------------- /src/countyflags/Elgeyo_Marakwet_Flag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxphilo/kenya-api/5bad38c4363e0aa3b5ca6d763d28ddae5b08368b/src/countyflags/Elgeyo_Marakwet_Flag.png -------------------------------------------------------------------------------- /src/countyflags/Flag_of_Baringo_County.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxphilo/kenya-api/5bad38c4363e0aa3b5ca6d763d28ddae5b08368b/src/countyflags/Flag_of_Baringo_County.png -------------------------------------------------------------------------------- /src/countyflags/Flag_of_Bomet_County.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxphilo/kenya-api/5bad38c4363e0aa3b5ca6d763d28ddae5b08368b/src/countyflags/Flag_of_Bomet_County.png -------------------------------------------------------------------------------- /src/countyflags/Flag_of_Busia_County.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxphilo/kenya-api/5bad38c4363e0aa3b5ca6d763d28ddae5b08368b/src/countyflags/Flag_of_Busia_County.png -------------------------------------------------------------------------------- /src/countyflags/Flag_of_Homa_Bay_County.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxphilo/kenya-api/5bad38c4363e0aa3b5ca6d763d28ddae5b08368b/src/countyflags/Flag_of_Homa_Bay_County.png -------------------------------------------------------------------------------- /src/countyflags/Flag_of_Kilifi_County.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxphilo/kenya-api/5bad38c4363e0aa3b5ca6d763d28ddae5b08368b/src/countyflags/Flag_of_Kilifi_County.png -------------------------------------------------------------------------------- /src/countyflags/Flag_of_Laikipia_County.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxphilo/kenya-api/5bad38c4363e0aa3b5ca6d763d28ddae5b08368b/src/countyflags/Flag_of_Laikipia_County.png -------------------------------------------------------------------------------- /src/countyflags/Flag_of_Machakos_County.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxphilo/kenya-api/5bad38c4363e0aa3b5ca6d763d28ddae5b08368b/src/countyflags/Flag_of_Machakos_County.png -------------------------------------------------------------------------------- /src/countyflags/Flag_of_Marsabit_County.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxphilo/kenya-api/5bad38c4363e0aa3b5ca6d763d28ddae5b08368b/src/countyflags/Flag_of_Marsabit_County.png -------------------------------------------------------------------------------- /src/countyflags/Flag_of_Meru_County.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxphilo/kenya-api/5bad38c4363e0aa3b5ca6d763d28ddae5b08368b/src/countyflags/Flag_of_Meru_County.png -------------------------------------------------------------------------------- /src/countyflags/Flag_of_Mombasa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dxphilo/kenya-api/5bad38c4363e0aa3b5ca6d763d28ddae5b08368b/src/countyflags/Flag_of_Mombasa.png -------------------------------------------------------------------------------- /src/env.ts: -------------------------------------------------------------------------------- 1 | /** HERE YOU CAN ADD ALL YOUR ENVIRONMENT VARIABLES */ 2 | const DEBUG = process.env.DEBUG || false; 3 | if (DEBUG) { 4 | console.log('DEBUG ENABLED'); 5 | } 6 | 7 | const PORT = process.env.PORT || 3000; 8 | 9 | // Make sure to add your env variables to this object so that they are exported to the rest of the application 10 | const env = { 11 | port: PORT, 12 | debug: DEBUG 13 | }; 14 | 15 | export default env; 16 | -------------------------------------------------------------------------------- /src/middlewares/loggingMiddleware.ts: -------------------------------------------------------------------------------- 1 | import { NextFunction, Request, Response } from 'express'; 2 | import { debug } from '../utilities/debug'; 3 | 4 | export function loggingMiddleware( 5 | req: Request, 6 | res: Response, 7 | next: NextFunction 8 | ) { 9 | debug(`${req.method}: ${req.originalUrl}`); 10 | next(); 11 | } 12 | -------------------------------------------------------------------------------- /src/public/counties.ts: -------------------------------------------------------------------------------- 1 | export type County = { 2 | code: number; 3 | name: string; 4 | capital: string; 5 | contact: string; 6 | website: string; 7 | location: string; 8 | border: string[]; 9 | area: string; 10 | Population: string; 11 | Agriculture?: string[]; 12 | Mining?: string[]; 13 | Tourism?: string[]; 14 | Beaches?: string[]; 15 | Farming?: string[]; 16 | Livestock?: string[]; 17 | Fishing?: string[]; 18 | Trade?: string[]; 19 | Education?: string[]; 20 | Economy?: string[]; 21 | }; 22 | 23 | export const counties: County[] = [ 24 | { 25 | code: 1, 26 | name: 'Mombasa', 27 | capital: 'Mombasa (City)', 28 | contact: 'esupport@mombasa.go.ke', 29 | website: 'https://eservices.mombasa.go.ke/site/', 30 | location: 'Coastal Kenya', 31 | border: ['Kilifi', 'Kwale', 'Indian Ocean'], 32 | area: '219 km2', 33 | Population: '939,370', 34 | Mining: ['Chrome ore', 'Cement', 'Salt', 'Sand'] 35 | }, 36 | { 37 | code: 2, 38 | name: 'Kwale', 39 | capital: 'Kwale', 40 | contact: '', 41 | website: '', 42 | location: 'Coastal Kenya', 43 | border: ['Mombasa', 'Kilifi', 'Taita Taveta'], 44 | area: '', 45 | Population: '', 46 | Mining: ['Titanium'] 47 | }, 48 | { 49 | code: 3, 50 | name: 'Kilifi', 51 | capital: 'Kilifi', 52 | contact: '', 53 | website: '', 54 | location: 'Coastal Kenya', 55 | border: ['Mombasa', 'Kwale', 'Tana River', 'Taita Taveta'], 56 | area: '', 57 | Population: '', 58 | Agriculture: ['Cashew nuts', 'Coconuts', 'Mangoes'], 59 | Tourism: ['Watamu', 'Malindi'], 60 | Beaches: ['Diani Beach'] 61 | }, 62 | { 63 | code: 4, 64 | name: 'Tana River', 65 | capital: 'Hola', 66 | contact: '', 67 | website: '', 68 | location: 'Coastal Kenya', 69 | border: ['Kilifi', 'Lamu', 'Garissa', 'Taita Taveta'], 70 | area: '', 71 | Population: '', 72 | Farming: ['Maize', 'Millet', 'Sorghum', 'Cowpeas', 'Green grams'], 73 | Livestock: ['Camels', 'Cattle', 'Goats', 'Sheep'] 74 | }, 75 | { 76 | code: 5, 77 | name: 'Lamu', 78 | capital: 'Lamu', 79 | contact: '', 80 | website: '', 81 | location: 'Coastal Kenya', 82 | border: ['Tana River', 'Indian Ocean'], 83 | area: '', 84 | Population: '', 85 | Fishing: ['Tuna', 'Marlin', 'Swordfish'], 86 | Tourism: ['Lamu Old Town', 'Lamu Fort', 'Takwa Ruins'] 87 | }, 88 | { 89 | code: 6, 90 | name: 'Taita Taveta', 91 | capital: 'Voi', 92 | contact: '', 93 | website: '', 94 | location: 'Coastal Kenya', 95 | border: ['Kwale', 'Kilifi', 'Tanzania'], 96 | area: '', 97 | Population: '', 98 | Agriculture: ['Fruits', 'Vegetables', 'Tea'], 99 | Mining: ['Gemstones'], 100 | Tourism: ['Taita Hills', 'Tsavo National Park'] 101 | }, 102 | { 103 | code: 7, 104 | name: 'Garissa', 105 | capital: 'Garissa', 106 | contact: '', 107 | website: '', 108 | location: 'North Eastern Kenya', 109 | border: ['Tana River', 'Isiolo', 'Wajir', 'Tanzania'], 110 | area: '', 111 | Population: '', 112 | Farming: ['Camels', 'Goats', 'Sheep'], 113 | Trade: ['Livestock markets'], 114 | Education: ['Garissa University College'] 115 | }, 116 | { 117 | code: 8, 118 | name: 'Wajir', 119 | capital: 'Wajir', 120 | contact: '', 121 | website: '', 122 | location: 'North Eastern Kenya', 123 | border: [ 124 | 'Mandera', 125 | 'Garissa', 126 | 'Isiolo', 127 | 'Marsabit', 128 | 'Somalia', 129 | 'Ethiopia' 130 | ], 131 | area: '', 132 | Population: '', 133 | Farming: ['Camels', 'Goats', 'Sheep'], 134 | Trade: ['Livestock markets'], 135 | Education: ['Wajir University'] 136 | }, 137 | { 138 | code: 9, 139 | name: 'Mandera', 140 | capital: 'Mandera', 141 | contact: '', 142 | website: '', 143 | location: 'North Eastern Kenya', 144 | border: ['Wajir', 'Marsabit', 'Ethiopia', 'Somalia'], 145 | area: '', 146 | Population: '', 147 | Farming: ['Camels', 'Goats', 'Sheep'], 148 | Trade: ['Livestock markets'] 149 | }, 150 | { 151 | code: 10, 152 | name: 'Marsabit', 153 | capital: 'Marsabit', 154 | contact: '', 155 | website: '', 156 | location: 'Eastern Kenya', 157 | border: ['Wajir', 'Isiolo', 'Samburu', 'Turkana', 'Ethiopia'], 158 | area: '', 159 | Population: '', 160 | Farming: ['Camels', 'Goats', 'Sheep'], 161 | Mining: ['Gypsum', 'Manganese', 'Copper', 'Limestone'] 162 | }, 163 | { 164 | code: 11, 165 | name: 'Isiolo', 166 | capital: 'Isiolo', 167 | contact: '', 168 | website: '', 169 | location: 'Eastern Kenya', 170 | border: [ 171 | 'Meru', 172 | 'Samburu', 173 | 'Marsabit', 174 | 'Laikipia', 175 | 'Garissa', 176 | 'Tana River' 177 | ], 178 | area: '', 179 | Population: '', 180 | Farming: ['Camels', 'Goats', 'Sheep'], 181 | Tourism: ['Buffalo Springs Reserve', 'Shaba National Reserve'] 182 | }, 183 | { 184 | code: 12, 185 | name: 'Meru', 186 | capital: 'Meru', 187 | contact: '', 188 | website: '', 189 | location: 'Eastern Kenya', 190 | border: [ 191 | 'Tharaka Nithi', 192 | 'Laikipia', 193 | 'Isiolo', 194 | 'Kirinyaga', 195 | 'Embu', 196 | 'Kitui', 197 | 'Tana River' 198 | ], 199 | area: '', 200 | Population: '', 201 | Agriculture: [ 202 | 'Coffee', 203 | 'Tea', 204 | 'Miraa (Khat)', 205 | 'Maize', 206 | 'Beans', 207 | 'Horticulture' 208 | ] 209 | }, 210 | { 211 | code: 13, 212 | name: 'Tharaka Nithi', 213 | capital: 'Chuka', 214 | contact: '', 215 | website: '', 216 | location: 'Eastern Kenya', 217 | border: ['Meru', 'Embu', 'Kitui'], 218 | area: '', 219 | Population: '', 220 | Agriculture: ['Tea', 'Coffee', 'Horticulture', 'Maize', 'Beans'] 221 | }, 222 | { 223 | code: 14, 224 | name: 'Embu', 225 | capital: 'Embu', 226 | contact: '', 227 | website: '', 228 | location: 'Eastern Kenya', 229 | border: ['Tharaka Nithi', 'Meru', 'Kitui', 'Kirinyaga'], 230 | area: '', 231 | Population: '', 232 | Agriculture: ['Coffee', 'Tea', 'Horticulture', 'Maize', 'Beans'] 233 | }, 234 | { 235 | code: 15, 236 | name: 'Kitui', 237 | capital: 'Kitui', 238 | contact: '', 239 | website: '', 240 | location: 'Eastern Kenya', 241 | border: ['Makueni', 'Machakos', 'Tana River', 'Tharaka Nithi', 'Embu'], 242 | area: '', 243 | Population: '', 244 | Agriculture: [ 245 | 'Maize', 246 | 'Beans', 247 | 'Cowpeas', 248 | 'Sorghum', 249 | 'Green grams', 250 | 'Poultry farming' 251 | ] 252 | }, 253 | { 254 | code: 16, 255 | name: 'Machakos', 256 | capital: 'Machakos', 257 | contact: '', 258 | website: '', 259 | location: 'Eastern Kenya', 260 | border: ['Makueni', 'Kitui', 'Kajiado', 'Kiambu', 'Embu'], 261 | area: '', 262 | Population: '', 263 | Agriculture: [ 264 | 'Mangoes', 265 | 'Oranges', 266 | 'Maize', 267 | 'Beans', 268 | 'Cowpeas', 269 | 'Green grams' 270 | ], 271 | Tourism: ["Machakos People's Park"] 272 | }, 273 | { 274 | code: 17, 275 | name: 'Makueni', 276 | capital: 'Wote', 277 | contact: '', 278 | website: '', 279 | location: 'Eastern Kenya', 280 | border: ['Machakos', 'Kitui', 'Kajiado', 'Marsabit'], 281 | area: '', 282 | Population: '', 283 | Agriculture: [ 284 | 'Mangoes', 285 | 'Oranges', 286 | 'Maize', 287 | 'Beans', 288 | 'Cowpeas', 289 | 'Green grams', 290 | 'Livestock farming' 291 | ], 292 | Tourism: ['Makindu Sikh Temple', 'Thwane Hills'] 293 | }, 294 | { 295 | code: 18, 296 | name: 'Nyandarua', 297 | capital: 'Ol Kalou', 298 | contact: '', 299 | website: '', 300 | location: 'Central Kenya', 301 | border: ['Nakuru', 'Nyeri', "Murang'a", 'Laikipia'], 302 | area: '', 303 | Population: '', 304 | Agriculture: ['Potatoes', 'Vegetables', 'Dairy farming'], 305 | Tourism: ['Aberdare National Park', "Thomson's Falls"] 306 | }, 307 | { 308 | code: 19, 309 | name: 'Nyeri', 310 | capital: 'Nyeri', 311 | contact: '', 312 | website: '', 313 | location: 'Central Kenya', 314 | border: ['Nyandarua', 'Laikipia', 'Kirinyaga', "Murang'a", 'Meru'], 315 | area: '', 316 | Population: '', 317 | Agriculture: [ 318 | 'Coffee', 319 | 'Tea', 320 | 'Dairy farming', 321 | 'Potatoes', 322 | 'Horticulture' 323 | ], 324 | Tourism: [ 325 | 'Aberdare National Park', 326 | 'Mount Kenya National Park', 327 | 'Baden-Powell Museum' 328 | ] 329 | }, 330 | { 331 | code: 20, 332 | name: 'Kirinyaga', 333 | capital: 'Kerugoya/Kutus', 334 | contact: '', 335 | website: '', 336 | location: 'Central Kenya', 337 | border: ['Nyeri', "Murang'a", 'Embu'], 338 | area: '', 339 | Population: '', 340 | Agriculture: ['Rice', 'Coffee', 'Tea', 'Maize', 'Horticulture'], 341 | Tourism: ['Mount Kenya', 'Gathuthi Tea Factory'] 342 | }, 343 | { 344 | code: 21, 345 | name: "Murang'a", 346 | capital: "Murang'a", 347 | contact: '', 348 | website: '', 349 | location: 'Central Kenya', 350 | border: ['Kirinyaga', 'Nyeri', 'Nyandarua', 'Kiambu', 'Maragua'], 351 | area: '', 352 | Population: '', 353 | Agriculture: ['Coffee', 'Tea', 'Dairy farming', 'Fruit farming'], 354 | Tourism: ['Aberdare Ranges', 'Chinga Dam'] 355 | }, 356 | { 357 | code: 22, 358 | name: 'Kiambu', 359 | capital: 'Kiambu', 360 | contact: '', 361 | website: '', 362 | location: 'Central Kenya', 363 | border: ['Nairobi', "Murang'a", 'Nyandarua', 'Kajiado'], 364 | area: '', 365 | Population: '', 366 | Agriculture: [ 367 | 'Coffee', 368 | 'Tea', 369 | 'Horticulture', 370 | 'Dairy farming', 371 | 'Fruit farming' 372 | ], 373 | Tourism: ['Kiambu Forest', 'Karura Forest'] 374 | }, 375 | { 376 | code: 23, 377 | name: 'Turkana', 378 | capital: 'Lodwar', 379 | contact: '', 380 | website: '', 381 | location: 'Rift Valley Kenya', 382 | border: ['Samburu', 'West Pokot', 'Baringo', 'Uganda', 'South Sudan'], 383 | area: '', 384 | Population: '', 385 | Farming: ['Camels', 'Goats', 'Sheep'], 386 | Mining: ['Oil', 'Salt', 'Gold', 'Limestone'] 387 | }, 388 | { 389 | code: 24, 390 | name: 'West Pokot', 391 | capital: 'Kapenguria', 392 | contact: '', 393 | website: '', 394 | location: 'Rift Valley Kenya', 395 | border: ['Turkana', 'Baringo', 'Uganda'], 396 | area: '', 397 | Population: '', 398 | Farming: ['Camels', 'Goats', 'Sheep'], 399 | Mining: ['Gold'] 400 | }, 401 | { 402 | code: 25, 403 | name: 'Samburu', 404 | capital: 'Maralal', 405 | contact: '', 406 | website: '', 407 | location: 'Rift Valley Kenya', 408 | border: ['Isiolo', 'Laikipia', 'Baringo', 'Turkana', 'Uganda'], 409 | area: '', 410 | Population: '', 411 | Farming: ['Camels', 'Goats', 'Sheep'], 412 | Tourism: ['Samburu National Reserve', 'Buffalo Springs Reserve'] 413 | }, 414 | { 415 | code: 26, 416 | name: 'Trans Nzoia', 417 | capital: 'Kitale', 418 | contact: '', 419 | website: '', 420 | location: 'Rift Valley Kenya', 421 | border: [ 422 | 'Elgeyo Marakwet', 423 | 'West Pokot', 424 | 'Bungoma', 425 | 'Uasin Gishu', 426 | 'Kakamega' 427 | ], 428 | area: '', 429 | Population: '', 430 | Agriculture: ['Maize', 'Sugarcane', 'Dairy farming', 'Floriculture'], 431 | Tourism: ['Mt. Elgon National Park', 'Saiwa Swamp National Park'] 432 | }, 433 | { 434 | code: 27, 435 | name: 'Uasin Gishu', 436 | capital: 'Eldoret', 437 | contact: '', 438 | website: '', 439 | location: 'Rift Valley Kenya', 440 | border: [ 441 | 'Trans Nzoia', 442 | 'Elgeyo Marakwet', 443 | 'Nandi', 444 | 'Kakamega', 445 | 'Bungoma' 446 | ], 447 | area: '', 448 | Population: '', 449 | Agriculture: ['Maize', 'Wheat', 'Dairy farming'], 450 | Tourism: ['Eldoret Sports Club', 'Kesses Dam'] 451 | }, 452 | { 453 | code: 28, 454 | name: 'Elgeyo Marakwet', 455 | capital: 'Iten', 456 | contact: '', 457 | website: '', 458 | location: 'Rift Valley Kenya', 459 | border: ['West Pokot', 'Trans Nzoia', 'Baringo', 'Uasin Gishu'], 460 | area: '', 461 | Population: '', 462 | Agriculture: ['Maize', 'Beans', 'Dairy farming'], 463 | Tourism: ['Kerio Valley National Park', 'Rimoi National Reserve'] 464 | }, 465 | { 466 | code: 29, 467 | name: 'Nandi', 468 | capital: 'Kapsabet', 469 | contact: '', 470 | website: '', 471 | location: 'Rift Valley Kenya', 472 | border: ['Uasin Gishu', 'Kakamega', 'Vihiga', 'Kericho'], 473 | area: '', 474 | Population: '', 475 | Agriculture: ['Tea', 'Coffee', 'Maize', 'Sugarcane', 'Dairy farming'], 476 | Tourism: ['Nandi Hills', 'Kerio Valley'] 477 | }, 478 | { 479 | code: 30, 480 | name: 'Baringo', 481 | capital: 'Kabarnet', 482 | contact: '', 483 | website: '', 484 | location: 'Rift Valley Kenya', 485 | border: [ 486 | 'Elgeyo Marakwet', 487 | 'West Pokot', 488 | 'Turkana', 489 | 'Samburu', 490 | 'Laikipia', 491 | 'Nakuru', 492 | 'Uasin Gishu' 493 | ], 494 | area: '', 495 | Population: '', 496 | Farming: ['Camels', 'Goats', 'Sheep'], 497 | Tourism: ['Lake Baringo', 'Koibatek Springs'] 498 | }, 499 | { 500 | code: 31, 501 | name: 'Laikipia', 502 | capital: 'Rumuruti', 503 | contact: '', 504 | website: '', 505 | location: 'Rift Valley Kenya', 506 | border: ['Baringo', 'Samburu', 'Isiolo', 'Meru', 'Nyeri', 'Nyandarua'], 507 | area: '', 508 | Population: '', 509 | Farming: ['Dairy farming', 'Sugarcane', 'Wheat', 'Maize'], 510 | Tourism: ['Ol Pejeta Conservancy', 'Aberdare Ranges'] 511 | }, 512 | { 513 | code: 32, 514 | name: 'Nakuru', 515 | capital: 'Nakuru', 516 | contact: '', 517 | website: '', 518 | location: 'Rift Valley Kenya', 519 | border: [ 520 | 'Baringo', 521 | 'Kajiado', 522 | 'Kericho', 523 | 'Bomet', 524 | 'Kisumu', 525 | 'Nyandarua' 526 | ], 527 | area: '', 528 | Population: '', 529 | Farming: ['Maize', 'Vegetables', 'Dairy farming', 'Floriculture'], 530 | Tourism: ['Lake Nakuru', 'Hyrax Hill Museum'] 531 | }, 532 | { 533 | code: 33, 534 | name: 'Narok', 535 | capital: 'Narok', 536 | contact: '', 537 | website: '', 538 | location: 'Rift Valley Kenya', 539 | border: ['Bomet', 'Kajiado', 'Nakuru', 'Kericho'], 540 | area: '', 541 | Population: '', 542 | Farming: ['Maize', 'Wheat', 'Sugarcane'], 543 | Tourism: ['Masai Mara National Reserve', 'Maasai Cultural Village'] 544 | }, 545 | { 546 | code: 34, 547 | name: 'Kajiado', 548 | capital: 'Kajiado', 549 | contact: '', 550 | website: '', 551 | location: 'Rift Valley Kenya', 552 | border: ['Narok', 'Nakuru', 'Kiambu', 'Tanzania'], 553 | area: '', 554 | Population: '', 555 | Farming: ['Maize', 'Beans', 'Peas', 'Livestock farming'], 556 | Tourism: ['Amboseli National Park', 'Ol Donyo Orok'] 557 | }, 558 | { 559 | code: 35, 560 | name: 'Kericho', 561 | capital: 'Kericho', 562 | contact: '', 563 | website: '', 564 | location: 'Rift Valley Kenya', 565 | border: ['Nakuru', 'Bomet', 'Nandi', 'Bungoma'], 566 | area: '', 567 | Population: '', 568 | Agriculture: ['Tea', 'Coffee', 'Maize', 'Vegetables', 'Dairy farming'], 569 | Tourism: ['Kericho Tea Plantations', 'Ainamoi Tea Factory'] 570 | }, 571 | { 572 | code: 36, 573 | name: 'Bomet', 574 | capital: 'Bomet', 575 | contact: '', 576 | website: '', 577 | location: 'Rift Valley Kenya', 578 | border: ['Kericho', 'Nakuru', 'Kisumu', 'Nyamira'], 579 | area: '', 580 | Population: '', 581 | Farming: ['Tea', 'Coffee', 'Maize', 'Vegetables', 'Dairy farming'], 582 | Tourism: ['Kipchoge Keino Stadium', 'Konoin Tea Factory'] 583 | }, 584 | { 585 | code: 37, 586 | name: 'Kakamega', 587 | capital: 'Kakamega', 588 | contact: '', 589 | website: '', 590 | location: 'Western Kenya', 591 | border: ['Bungoma', 'Vihiga', 'Nandi', 'Uganda'], 592 | area: '', 593 | Population: '', 594 | Farming: ['Sugarcane', 'Maize', 'Beans', 'Cassava', 'Dairy farming'], 595 | Tourism: ['Kakamega Forest', 'Crying Stone of Ilesi'] 596 | }, 597 | { 598 | code: 38, 599 | name: 'Vihiga', 600 | capital: 'Vihiga', 601 | contact: '', 602 | website: '', 603 | location: 'Western Kenya', 604 | border: ['Kakamega', 'Nandi', 'Siaya'], 605 | area: '', 606 | Population: '', 607 | Farming: ['Sugarcane', 'Maize', 'Dairy farming'], 608 | Tourism: ['Mumboha Village', 'Luanda Magere Stone'] 609 | }, 610 | { 611 | code: 39, 612 | name: 'Bungoma', 613 | capital: 'Bungoma', 614 | contact: '', 615 | website: '', 616 | location: 'Western Kenya', 617 | border: ['Kakamega', 'Trans Nzoia', 'Uganda'], 618 | area: '', 619 | Population: '', 620 | Agriculture: ['Maize', 'Sugarcane', 'Dairy farming'], 621 | Tourism: ['Chetambe Fort', 'Nabuyole Falls'] 622 | }, 623 | { 624 | code: 40, 625 | name: 'Busia', 626 | capital: 'Busia', 627 | contact: '', 628 | website: '', 629 | location: 'Western Kenya', 630 | border: ['Bungoma', 'Uganda'], 631 | area: '', 632 | Population: '', 633 | Farming: ['Maize', 'Beans', 'Sugarcane', 'Fish farming'], 634 | Tourism: ['Sio Port', 'Budalangi Wetland'] 635 | }, 636 | { 637 | code: 41, 638 | name: 'Siaya', 639 | capital: 'Siaya', 640 | contact: '', 641 | website: '', 642 | location: 'Nyanza Kenya', 643 | border: ['Vihiga', 'Kakamega', 'Kisumu'], 644 | area: '', 645 | Population: '', 646 | Agriculture: ['Maize', 'Sugarcane', 'Fishing'], 647 | Tourism: ['Ndanu Falls', 'Kit Mikayi'] 648 | }, 649 | { 650 | code: 42, 651 | name: 'Kisumu', 652 | capital: 'Kisumu', 653 | contact: '', 654 | website: '', 655 | location: 'Nyanza Kenya', 656 | border: ['Siaya', 'Vihiga', 'Kericho', 'Homa Bay', 'Nandi'], 657 | area: '', 658 | Population: '', 659 | Agriculture: ['Maize', 'Sugarcane', 'Fishing'], 660 | Tourism: ['Kisumu Impala Sanctuary', 'Dunga Hill Camp'] 661 | }, 662 | { 663 | code: 43, 664 | name: 'Homa Bay', 665 | capital: 'Homa Bay', 666 | contact: '', 667 | website: '', 668 | location: 'Nyanza Kenya', 669 | border: ['Kisumu', 'Migori'], 670 | area: '', 671 | Population: '', 672 | Farming: ['Maize', 'Sugarcane', 'Fishing'], 673 | Tourism: ['Ndere Island National Park', 'Ruma National Park'] 674 | }, 675 | { 676 | code: 44, 677 | name: 'Migori', 678 | capital: 'Migori', 679 | contact: '', 680 | website: '', 681 | location: 'Nyanza Kenya', 682 | border: ['Homa Bay', 'Kisii', 'Tanzania'], 683 | area: '', 684 | Population: '', 685 | Farming: ['Maize', 'Sugarcane', 'Fishing'], 686 | Tourism: ['Migori Hill', 'Maasai Mara'] 687 | }, 688 | { 689 | code: 45, 690 | name: 'Kisii', 691 | capital: 'Kisii', 692 | contact: '', 693 | website: '', 694 | location: 'Nyanza Kenya', 695 | border: ['Migori', 'Nyamira', 'Kericho', 'Bomet'], 696 | area: '', 697 | Population: '', 698 | Agriculture: ['Tea', 'Coffee', 'Bananas', 'Maize', 'Eucalyptus'], 699 | Tourism: ['Gusii Stadium', 'Tabaka Soapstone Carvings'] 700 | }, 701 | { 702 | code: 46, 703 | name: 'Nyamira', 704 | capital: 'Nyamira', 705 | contact: '', 706 | website: '', 707 | location: 'Nyanza Kenya', 708 | border: ['Kisii', 'Kericho', 'Bomet'], 709 | area: '', 710 | Population: '', 711 | Agriculture: ['Tea', 'Coffee', 'Bananas', 'Maize'], 712 | Tourism: ['Nyamira Hill', 'Kericho Tea Estate'] 713 | }, 714 | { 715 | code: 47, 716 | name: 'Nairobi', 717 | capital: 'Nairobi (City)', 718 | contact: '', 719 | website: '', 720 | location: 'Nairobi Kenya', 721 | border: ['Kajiado', 'Kiambu', 'Machakos'], 722 | area: '', 723 | Population: '', 724 | Economy: ['Finance', 'Manufacturing', 'Services', 'Technology'], 725 | Tourism: ['Nairobi National Park', 'David Sheldrick Wildlife Trust'] 726 | }, 727 | { 728 | code: 48, 729 | name: 'Diaspora', 730 | capital: 'Diaspora', 731 | contact: '', 732 | website: '', 733 | location: 'International', 734 | border: [], 735 | area: '', 736 | Population: '' 737 | }, 738 | { 739 | code: 49, 740 | name: 'Prisons', 741 | capital: 'Prisons', 742 | contact: '', 743 | website: '', 744 | location: 'Prisons', 745 | border: [], 746 | area: '', 747 | Population: '' 748 | } 749 | ]; 750 | -------------------------------------------------------------------------------- /src/public/hospitals.ts: -------------------------------------------------------------------------------- 1 | export interface PublicHospital { 2 | name: string; 3 | location: string; 4 | region: string; 5 | level: number; 6 | bedCapacity: number | string; // Number where known, string for "Unknown" 7 | specialties: string; 8 | } 9 | 10 | export const publicHospitals: PublicHospital[] = [ 11 | // Level 6: National Referral Hospitals 12 | { 13 | name: 'Kenyatta National Hospital', 14 | location: 'Nairobi County', 15 | region: 'Nairobi', 16 | level: 6, 17 | bedCapacity: 1800, 18 | specialties: 19 | 'Cancer treatment, kidney dialysis, general surgery, teaching hospital' 20 | }, 21 | { 22 | name: 'Moi Teaching and Referral Hospital', 23 | location: 'Uasin Gishu County', 24 | region: 'Rift Valley', 25 | level: 6, 26 | bedCapacity: 'Unknown', 27 | specialties: 28 | 'General surgery, teaching hospital, serves Western Kenya and neighboring countries' 29 | }, 30 | { 31 | name: 'Kenyatta University Teaching, Referral, and Research Hospital', 32 | location: 'Nairobi County', 33 | region: 'Nairobi', 34 | level: 6, 35 | bedCapacity: 650, 36 | specialties: 37 | 'Surgery, pediatrics, obstetrics, gynecology, psychiatry, cancer treatment' 38 | }, 39 | { 40 | name: 'Mathari National Teaching and Referral Hospital', 41 | location: 'Nairobi County', 42 | region: 'Nairobi', 43 | level: 6, 44 | bedCapacity: 1500, 45 | specialties: 'Psychiatry, mental health, research' 46 | }, 47 | { 48 | name: 'National Spinal Injury Referral Hospital', 49 | location: 'Nairobi County', 50 | region: 'Nairobi', 51 | level: 6, 52 | bedCapacity: 'Unknown', 53 | specialties: 54 | 'Spinal cord injuries, nerve system treatment, head injuries' 55 | }, 56 | { 57 | name: 'Nakuru Level 6 Hospital', 58 | location: 'Nakuru County', 59 | region: 'Rift Valley', 60 | level: 6, 61 | bedCapacity: 'Unknown', 62 | specialties: 'General medical services, serves surrounding counties' 63 | }, 64 | { 65 | name: 'Kisii Teaching and Referral Hospital', 66 | location: 'Kisii County', 67 | region: 'Nyanza', 68 | level: 6, 69 | bedCapacity: 650, 70 | specialties: 71 | 'General medical services, referral for Nyanza and South Rift Valley' 72 | }, 73 | 74 | // Level 5: County Referral Hospitals 75 | { 76 | name: 'Mbagathi County Referral Hospital', 77 | location: 'Nairobi County', 78 | region: 'Nairobi', 79 | level: 5, 80 | bedCapacity: 'Unknown', 81 | specialties: 82 | 'Maternal healthcare, dental care, VCT services, pediatrics, family planning' 83 | }, 84 | { 85 | name: 'Mama Lucy Kibaki Hospital', 86 | location: 'Nairobi County', 87 | region: 'Nairobi', 88 | level: 5, 89 | bedCapacity: 700, 90 | specialties: 91 | 'Maternal healthcare, pediatrics, laboratory services, dental care, renal healthcare' 92 | }, 93 | { 94 | name: 'Pumwani Maternity Hospital', 95 | location: 'Nairobi County', 96 | region: 'Nairobi', 97 | level: 5, 98 | bedCapacity: 'Unknown', 99 | specialties: 'Maternity services, family planning, pediatrics' 100 | }, 101 | { 102 | name: 'Mutuini Sub-District Hospital', 103 | location: 'Nairobi County', 104 | region: 'Nairobi', 105 | level: 5, 106 | bedCapacity: 'Unknown', 107 | specialties: 'General medical services' 108 | }, 109 | { 110 | name: 'Vihiga County Referral Hospital', 111 | location: 'Vihiga County', 112 | region: 'Western Kenya', 113 | level: 5, 114 | bedCapacity: 'Unknown', 115 | specialties: 'General medical services' 116 | }, 117 | { 118 | name: 'Kisumu District Hospital', 119 | location: 'Kisumu County', 120 | region: 'Nyanza', 121 | level: 5, 122 | bedCapacity: 'Unknown', 123 | specialties: 'General medical services' 124 | }, 125 | { 126 | name: 'Jaramogi Oginga Odinga Referral Hospital', 127 | location: 'Kisumu County', 128 | region: 'Nyanza', 129 | level: 5, 130 | bedCapacity: 'Unknown', 131 | specialties: 'General medical services, largest referral in Nyanza' 132 | }, 133 | { 134 | name: 'Migori County Referral Hospital', 135 | location: 'Migori County', 136 | region: 'Nyanza', 137 | level: 5, 138 | bedCapacity: 'Unknown', 139 | specialties: 'General medical services' 140 | }, 141 | { 142 | name: 'Homa Bay County Referral Hospital', 143 | location: 'Homa Bay County', 144 | region: 'Nyanza', 145 | level: 5, 146 | bedCapacity: 'Unknown', 147 | specialties: 'General medical services' 148 | }, 149 | { 150 | name: 'Siaya County Referral Hospital', 151 | location: 'Siaya County', 152 | region: 'Nyanza', 153 | level: 5, 154 | bedCapacity: 'Unknown', 155 | specialties: 'General medical services' 156 | }, 157 | 158 | // Level 4: Sub-County Hospitals 159 | { 160 | name: 'Githunguri Level 4 Hospital', 161 | location: 'Kiambu County', 162 | region: 'Central Kenya', 163 | level: 4, 164 | bedCapacity: 'Unknown', 165 | specialties: 'General medical services' 166 | }, 167 | { 168 | name: 'Lari Level 4 Hospital', 169 | location: 'Kiambu County', 170 | region: 'Central Kenya', 171 | level: 4, 172 | bedCapacity: 'Unknown', 173 | specialties: 'General medical services' 174 | }, 175 | { 176 | name: 'Limuru Level 4 Hospital', 177 | location: 'Kiambu County', 178 | region: 'Central Kenya', 179 | level: 4, 180 | bedCapacity: 'Unknown', 181 | specialties: 'General medical services' 182 | }, 183 | { 184 | name: 'Kiambu Level 4 Hospital', 185 | location: 'Kiambu County', 186 | region: 'Central Kenya', 187 | level: 4, 188 | bedCapacity: 'Unknown', 189 | specialties: 'General medical services' 190 | }, 191 | { 192 | name: 'Kyuso Level 4 Hospital', 193 | location: 'Kitui County', 194 | region: 'Eastern Kenya', 195 | level: 4, 196 | bedCapacity: 'Unknown', 197 | specialties: 'General medical services' 198 | }, 199 | { 200 | name: 'Ikutha Level 4 Hospital', 201 | location: 'Kitui County', 202 | region: 'Eastern Kenya', 203 | level: 4, 204 | bedCapacity: 'Unknown', 205 | specialties: 'General medical services' 206 | }, 207 | { 208 | name: 'Katulani Level 4 Hospital', 209 | location: 'Kitui County', 210 | region: 'Eastern Kenya', 211 | level: 4, 212 | bedCapacity: 'Unknown', 213 | specialties: 'General medical services' 214 | }, 215 | { 216 | name: 'Migwani Level 4 Hospital', 217 | location: 'Kitui County', 218 | region: 'Eastern Kenya', 219 | level: 4, 220 | bedCapacity: 'Unknown', 221 | specialties: 'General medical services' 222 | }, 223 | { 224 | name: 'Tseikuru Level 4 Hospital', 225 | location: 'Kitui County', 226 | region: 'Eastern Kenya', 227 | level: 4, 228 | bedCapacity: 'Unknown', 229 | specialties: 'General medical services' 230 | }, 231 | { 232 | name: 'Pala Level 4 Hospital', 233 | location: 'Homa Bay County', 234 | region: 'Nyanza', 235 | level: 4, 236 | bedCapacity: 'Unknown', 237 | specialties: 'General medical services' 238 | }, 239 | { 240 | name: 'Ogonogo Sub-District Level 4 Hospital', 241 | location: 'Homa Bay County', 242 | region: 'Nyanza', 243 | level: 4, 244 | bedCapacity: 'Unknown', 245 | specialties: 'General medical services' 246 | }, 247 | { 248 | name: 'Nyabondo Mission Level 4 Hospital', 249 | location: 'Siaya County', 250 | region: 'Nyanza', 251 | level: 4, 252 | bedCapacity: 'Unknown', 253 | specialties: 'General medical services' 254 | }, 255 | { 256 | name: 'Lumumba Sub-County Hospital', 257 | location: 'Kisumu County', 258 | region: 'Nyanza', 259 | level: 4, 260 | bedCapacity: 'Unknown', 261 | specialties: 'General medical services' 262 | }, 263 | { 264 | name: 'Chulaimbo Hospital', 265 | location: 'Kisumu County', 266 | region: 'Nyanza', 267 | level: 4, 268 | bedCapacity: 'Unknown', 269 | specialties: 'General medical services' 270 | }, 271 | { 272 | name: 'Fort Ternan Level 4 Hospital', 273 | location: 'Kericho County', 274 | region: 'Rift Valley', 275 | level: 4, 276 | bedCapacity: 'Unknown', 277 | specialties: 'General medical services' 278 | } 279 | ]; 280 | -------------------------------------------------------------------------------- /src/public/postal_codes.ts: -------------------------------------------------------------------------------- 1 | export type PostalCode = { 2 | code: number; 3 | name: string; 4 | capital: string; 5 | }; 6 | 7 | export const postal_stations: PostalCode[] = [ 8 | { 9 | code: 1, 10 | name: 'Mombasa', 11 | capital: 'Mombasa (City)' 12 | }, 13 | { 14 | code: 2, 15 | name: 'Kwale', 16 | capital: 'Kwale' 17 | }, 18 | { 19 | code: 3, 20 | name: 'Kilifi', 21 | capital: 'Kilifi' 22 | }, 23 | { 24 | code: 4, 25 | name: 'Tana River', 26 | capital: 'Hola' 27 | }, 28 | { 29 | code: 5, 30 | name: 'Lamu', 31 | capital: 'Lamu' 32 | }, 33 | { 34 | code: 6, 35 | name: 'Taita Taveta', 36 | capital: 'Voi' 37 | }, 38 | { 39 | code: 7, 40 | name: 'Garissa', 41 | capital: 'Garissa' 42 | }, 43 | { 44 | code: 8, 45 | name: 'wajir', 46 | capital: 'Wajir' 47 | }, 48 | { 49 | code: 9, 50 | name: 'Mandera', 51 | capital: 'Mandera' 52 | }, 53 | { 54 | code: 10, 55 | name: 'Marsabit', 56 | capital: 'Marsabit' 57 | }, 58 | { 59 | code: 11, 60 | name: 'Isiolo', 61 | capital: 'Isiolo' 62 | }, 63 | { 64 | code: 12, 65 | name: 'Meru', 66 | capital: 'Meru' 67 | }, 68 | { 69 | code: 13, 70 | name: 'Tharaka Nithi', 71 | capital: 'Chuka' 72 | }, 73 | { 74 | code: 14, 75 | name: 'Embu', 76 | capital: 'Embu' 77 | }, 78 | { 79 | code: 15, 80 | name: 'Kitui', 81 | capital: 'Kitui' 82 | }, 83 | { 84 | code: 16, 85 | name: 'Machakos', 86 | capital: 'Machakos' 87 | }, 88 | { 89 | code: 17, 90 | name: 'Makueni', 91 | capital: 'Wote' 92 | }, 93 | { 94 | code: 18, 95 | name: 'Nyandarua', 96 | capital: 'Ol Kalou' 97 | }, 98 | { 99 | code: 19, 100 | name: 'Nyeri', 101 | capital: 'Nyeri' 102 | }, 103 | { 104 | code: 20, 105 | name: 'Kirinyaga', 106 | capital: 'Kerugoya/Kutus' 107 | }, 108 | { 109 | code: 21, 110 | name: "Murang'a", 111 | capital: "Murang'a" 112 | }, 113 | { 114 | code: 22, 115 | name: 'Kiambu', 116 | capital: 'Kiambu' 117 | }, 118 | { 119 | code: 23, 120 | name: 'Turkana', 121 | capital: 'Lodwar' 122 | }, 123 | { 124 | code: 24, 125 | name: 'West Pokot', 126 | capital: 'Kapenguria' 127 | }, 128 | { 129 | code: 25, 130 | name: 'Samburu', 131 | capital: 'Maralal' 132 | }, 133 | { 134 | code: 26, 135 | name: 'Trans Nzoia', 136 | capital: 'Kitale' 137 | }, 138 | { 139 | code: 27, 140 | name: 'Uasin Gishu', 141 | capital: 'Eldoret' 142 | }, 143 | { 144 | code: 28, 145 | name: 'Elgeyo Marakwet', 146 | capital: 'Iten' 147 | }, 148 | { 149 | code: 29, 150 | name: 'Nandi', 151 | capital: 'Kapsabet' 152 | }, 153 | { 154 | code: 30, 155 | name: 'Baringo', 156 | capital: 'Kabarnet' 157 | }, 158 | { 159 | code: 31, 160 | name: 'Laikipia', 161 | capital: 'Rumuruti' 162 | }, 163 | { 164 | code: 32, 165 | name: 'Nakuru', 166 | capital: 'Nakuru' 167 | }, 168 | { 169 | code: 33, 170 | name: 'Narok', 171 | capital: 'Narok' 172 | }, 173 | { 174 | code: 34, 175 | name: 'Kajiado', 176 | capital: 'Kajiado' 177 | }, 178 | { 179 | code: 35, 180 | name: 'Kericho', 181 | capital: 'Kericho' 182 | }, 183 | { 184 | code: 36, 185 | name: 'Bomet', 186 | capital: 'Bomet' 187 | }, 188 | { 189 | code: 37, 190 | name: 'Kakamega', 191 | capital: 'Kakamega' 192 | }, 193 | { 194 | code: 38, 195 | name: 'Vihiga', 196 | capital: 'Vihiga' 197 | }, 198 | { 199 | code: 39, 200 | name: 'Bungoma', 201 | capital: 'Bungoma' 202 | }, 203 | { 204 | code: 40, 205 | name: 'Busia', 206 | capital: 'Busia' 207 | }, 208 | { 209 | code: 41, 210 | name: 'Siaya', 211 | capital: 'Siaya' 212 | }, 213 | { 214 | code: 42, 215 | name: 'Kisumu', 216 | capital: 'Kisumu' 217 | }, 218 | { 219 | code: 43, 220 | name: 'Homa Bay', 221 | capital: 'Homa Bay' 222 | }, 223 | { 224 | code: 44, 225 | name: 'Migori', 226 | capital: 'Migori' 227 | }, 228 | { 229 | code: 45, 230 | name: 'Kisii', 231 | capital: 'Kisii' 232 | }, 233 | { 234 | code: 46, 235 | name: 'Nyamira', 236 | capital: 'Nyamira' 237 | }, 238 | { 239 | code: 47, 240 | name: 'Nairobi', 241 | capital: 'Nairobi (City)' 242 | }, 243 | { 244 | code: 48, 245 | name: 'Diaspora', 246 | capital: 'Diaspora' 247 | }, 248 | { 249 | code: 49, 250 | name: 'Prisons', 251 | capital: 'Prisons' 252 | } 253 | ]; 254 | -------------------------------------------------------------------------------- /src/public/towns.ts: -------------------------------------------------------------------------------- 1 | export const towns: string[] = [ 2 | 'Nairobi City', 3 | 'Baringo', 4 | 'Bomet', 5 | 'Bungoma', 6 | 'Busia', 7 | 'Elgeyo/Marakwet', 8 | 'Embu', 9 | 'Garissa', 10 | 'Homa Bay', 11 | 'Isiolo', 12 | 'Kajiado', 13 | 'Kakamega', 14 | 'Kericho', 15 | 'Kiambu', 16 | 'Kilifi', 17 | 'Kirinyaga', 18 | 'Kisii', 19 | 'Kisumu', 20 | 'Kitui', 21 | 'Kwale', 22 | 'Laikipia', 23 | 'Lamu', 24 | 'Machakos', 25 | 'Makueni', 26 | 'Mandera', 27 | 'Marsabit', 28 | 'Meru', 29 | 'Migori', 30 | 'Mombasa', 31 | "Murang'a", 32 | 'Nakuru', 33 | 'Nandi', 34 | 'Narok', 35 | 'Nyamira', 36 | 'Nyandarua', 37 | 'Nyeri', 38 | 'Samburu', 39 | 'Siaya', 40 | 'Taita/Taveta', 41 | 'Tana River', 42 | 'Tharaka-Nithi', 43 | 'Trans Nzoia', 44 | 'Turkana', 45 | 'Uasin Gishu', 46 | 'Vihiga', 47 | 'Wajir', 48 | 'West Pokot' 49 | ]; 50 | -------------------------------------------------------------------------------- /src/public/tribes.ts: -------------------------------------------------------------------------------- 1 | export interface Tribe { 2 | name: string; 3 | location: string; 4 | language: string; 5 | traditions: string; 6 | region: string; 7 | population: number | string; // Number for estimates, string for "Unknown" 8 | culturalHighlights: string; 9 | } 10 | 11 | export const tribes: Tribe[] = [ 12 | { 13 | name: 'Kikuyu', 14 | location: 'Kiambu, Murang’a, Nyeri', 15 | language: 'Kikuyu (Gikuyu)', 16 | traditions: 17 | 'Ancestor reverence, circumcision ceremonies, traditional marriage with dowry (ruracio), and communal farming.', 18 | region: 'Central Kenya', 19 | population: 9405000, 20 | culturalHighlights: 21 | 'Largest tribe, known for entrepreneurship and farming (coffee, tea). Believed to descend from Gikuyu and Mumbi, with nine clans.' 22 | }, 23 | { 24 | name: 'Luhya', 25 | location: 'Kakamega, Vihiga, Bungoma', 26 | language: 'Luhya (varies by dialect, e.g., Luyia, Maragoli)', 27 | traditions: 28 | 'Bullfighting as a cultural sport, Sikuti dance with drums, and elaborate funeral ceremonies.', 29 | region: 'Western Kenya', 30 | population: 7865000, 31 | culturalHighlights: 32 | 'Consists of 18 clans, known for hospitality and music (Sikuti dance).' 33 | }, 34 | { 35 | name: 'Kalenjin', 36 | location: 'Uasin Gishu, Kericho, Nandi', 37 | language: 'Kalenjin (includes dialects like Kipsigis, Nandi)', 38 | traditions: 39 | 'Circumcision and initiation (tumdo) for boys, mursik (fermented milk) on special occasions, and communal herding.', 40 | region: 'Rift Valley', 41 | population: 7370000, 42 | culturalHighlights: 43 | "Known as the 'running tribe' for athletic prowess, herbal medicine knowledge, and Kalenjin media growth." 44 | }, 45 | { 46 | name: 'Luo', 47 | location: 'Kisumu, Siaya, Homa Bay', 48 | language: 'Dholuo', 49 | traditions: 50 | 'Elaborate funeral wailing and mourning rituals (now reduced by Christianity), fishing culture, and music (e.g., Ohangla).', 51 | region: 'Nyanza (Lake Victoria Basin)', 52 | population: 5885000, 53 | culturalHighlights: 54 | 'Proud of their language and culture, historically fishermen, with a strong oral storytelling tradition.' 55 | }, 56 | { 57 | name: 'Kamba', 58 | location: 'Machakos, Kitui, Makueni', 59 | language: 'Kikamba', 60 | traditions: 61 | 'Woodcarving and basketry, traditional healing practices, and communal farming.', 62 | region: 'Eastern Kenya', 63 | population: 5390000, 64 | culturalHighlights: 65 | 'Skilled artisans (carvings, baskets), known for military service and trade.' 66 | }, 67 | { 68 | name: 'Somali', 69 | location: 'Garissa, Wajir, Mandera', 70 | language: 'Somali', 71 | traditions: 'Nomadic pastoralism, Islamic rituals, and camel herding.', 72 | region: 'North Eastern Kenya', 73 | population: 3190000, 74 | culturalHighlights: 75 | 'Predominantly Muslim, engaged in trade, with historical ties to Somalia.' 76 | }, 77 | { 78 | name: 'Kisii', 79 | location: 'Kisii, Nyamira', 80 | language: 'Ekegusii', 81 | traditions: 82 | 'Soapstone carving, communal farming, and traditional circumcision ceremonies.', 83 | region: 'Nyanza', 84 | population: 3135000, 85 | culturalHighlights: 86 | 'Known for craftsmanship (soapstone carvings) and banana farming.' 87 | }, 88 | { 89 | name: 'Mijikenda', 90 | location: 'Kilifi, Kwale, Mombasa', 91 | language: 'Mijikenda (includes Giriama, Digo)', 92 | traditions: 93 | 'Sacred Kaya forests for rituals, traditional healing, and Swahili-influenced coastal culture.', 94 | region: 'Coastal Kenya', 95 | population: 2860000, 96 | culturalHighlights: 97 | 'Guardians of the Sacred Mijikenda Kaya Forests (UNESCO site), known for pilau cuisine.' 98 | }, 99 | { 100 | name: 'Meru', 101 | location: 'Meru, Tharaka-Nithi', 102 | language: 'Kimeru', 103 | traditions: 104 | 'Njuri Ncheke council of elders for governance, miraa (khat) cultivation, and traditional dances.', 105 | region: 'Eastern Kenya', 106 | population: 2310000, 107 | culturalHighlights: 108 | 'Closely related to Kikuyu, known for miraa trade and governance systems.' 109 | }, 110 | { 111 | name: 'Maasai', 112 | location: 'Kajiado, Narok', 113 | language: 'Maa', 114 | traditions: 115 | 'Cattle herding, moran (warrior) initiation, and Engilakinoto dance after lion hunts.', 116 | region: 'Rift Valley (extends to Tanzania)', 117 | population: 935000, 118 | culturalHighlights: 119 | 'Nomadic pastoralists, globally recognized for red shukas and beadwork, resist modernization.' 120 | }, 121 | { 122 | name: 'Turkana', 123 | location: 'Turkana', 124 | language: 'Turkana', 125 | traditions: 126 | 'Nomadic pastoralism, adornment with beads and metalwork, and diet of cow’s blood and milk.', 127 | region: 'Northern Kenya', 128 | population: 200000, 129 | culturalHighlights: 130 | 'Known for resilience in arid regions, skilled in metalwork and carving.' 131 | }, 132 | { 133 | name: 'Samburu', 134 | location: 'Samburu', 135 | language: 'Samburu (Maa dialect)', 136 | traditions: 137 | 'Nomadic herding, moran warrior culture, and colorful beadwork.', 138 | region: 'Rift Valley', 139 | population: 'Unknown', 140 | culturalHighlights: 141 | 'Closely related to Maasai, known for cultural preservation and tourism.' 142 | }, 143 | { 144 | name: 'Embu', 145 | location: 'Embu', 146 | language: 'Kiembu', 147 | traditions: 148 | 'Agricultural rituals, traditional dances, and council of elders for governance.', 149 | region: 'Eastern Kenya', 150 | population: 'Unknown', 151 | culturalHighlights: 152 | 'Bantu tribe related to Kikuyu, known for farming near Mount Kenya.' 153 | }, 154 | { 155 | name: 'Taita', 156 | location: 'Taita/Taveta', 157 | language: 'Taita (Dawida, Saghala)', 158 | traditions: 159 | 'Mining gemstones, ancestor worship, and traditional healing.', 160 | region: 'Coastal Kenya', 161 | population: 'Unknown', 162 | culturalHighlights: 163 | 'Known for mining (e.g., green malachite, tiger’s eye) and cultural resilience.' 164 | }, 165 | { 166 | name: 'Swahili', 167 | location: 'Mombasa, Lamu, Malindi', 168 | language: 'Swahili (Kiswahili)', 169 | traditions: 170 | 'Islamic rituals, Swahili art (jewelry, carpets), and coastal festivals.', 171 | region: 'Coastal Kenya', 172 | population: 'Unknown', 173 | culturalHighlights: 174 | 'Descended from Bantu-Arab intermarriages, creators of Swahili culture and language.' 175 | }, 176 | { 177 | name: 'Pokot', 178 | location: 'West Pokot, Baringo', 179 | language: 'Pokot', 180 | traditions: 181 | 'Nomadic herding, traditional beadwork, and initiation ceremonies.', 182 | region: 'Rift Valley', 183 | population: 778000, 184 | culturalHighlights: 185 | 'Part of Kalenjin group, known for pastoralism and cultural adornments.' 186 | }, 187 | { 188 | name: 'Rendille', 189 | location: 'Marsabit', 190 | language: 'Rendille', 191 | traditions: 192 | 'Camel herding, nomadic lifestyle, and traditional beadwork.', 193 | region: 'Northern Kenya', 194 | population: 'Unknown', 195 | culturalHighlights: 196 | 'Cushitic tribe, known for resilience in arid regions and unique camel-based culture.' 197 | }, 198 | { 199 | name: 'Ogiek', 200 | location: 'Nakuru, Narok', 201 | language: 'Ogiek', 202 | traditions: 203 | 'Honey harvesting, forest conservation, and traditional healing.', 204 | region: 'Rift Valley', 205 | population: 52000, 206 | culturalHighlights: 207 | 'Indigenous forest dwellers, advocates for Mau Forest conservation.' 208 | }, 209 | { 210 | name: 'El Molo', 211 | location: 'Marsabit (Lake Turkana)', 212 | language: 'El Molo', 213 | traditions: 'Fishing, traditional boat-making, and oral storytelling.', 214 | region: 'Northern Kenya', 215 | population: 'Unknown', 216 | culturalHighlights: 217 | 'Smallest tribe, facing cultural erosion, known for fishing on Lake Turkana.' 218 | }, 219 | // Remaining 25 tribes 220 | { 221 | name: 'Kuria', 222 | location: 'Migori, Nyamira', 223 | language: 'Kuria', 224 | traditions: 225 | 'Cattle herding, beer brewing (e.g., marwa), and initiation rites.', 226 | region: 'Nyanza', 227 | population: 'Unknown', 228 | culturalHighlights: 229 | 'Known for cattle keeping and cross-border trade with Tanzania.' 230 | }, 231 | { 232 | name: 'Teso', 233 | location: 'Busia, Teso', 234 | language: 'Ateso', 235 | traditions: 236 | 'Agricultural rituals, traditional dances, and communal farming.', 237 | region: 'Western Kenya', 238 | population: 400000, // Estimated from Web ID 12 239 | culturalHighlights: 240 | 'Nilotic group with ties to Uganda, known for millet farming.' 241 | }, 242 | { 243 | name: 'Oromo', 244 | location: 'Marsabit, Isiolo', 245 | language: 'Oromo (Boran dialect)', 246 | traditions: 247 | 'Nomadic pastoralism, gada system of governance, and cattle herding.', 248 | region: 'Northern Kenya', 249 | population: 'Unknown', 250 | culturalHighlights: 251 | 'Cushitic group with cultural ties to Ethiopia, known for the gada age-set system.' 252 | }, 253 | { 254 | name: 'Borana', 255 | location: 'Marsabit', 256 | language: 'Borana (Oromo dialect)', 257 | traditions: 258 | 'Camel and cattle herding, traditional dances, and Islamic rituals.', 259 | region: 'Northern Kenya', 260 | population: 'Unknown', 261 | culturalHighlights: 262 | 'Sub-group of Oromo, known for pastoralism and resilience in arid areas.' 263 | }, 264 | { 265 | name: 'Gabbra', 266 | location: 'Marsabit, Moyale', 267 | language: 'Gabbra', 268 | traditions: 'Camel herding, seasonal migrations, and oral poetry.', 269 | region: 'Northern Kenya', 270 | population: 'Unknown', 271 | culturalHighlights: 272 | 'Cushitic pastoralists, known for their camel-based economy.' 273 | }, 274 | { 275 | name: 'Bajuni', 276 | location: 'Lamu', 277 | language: 'Kibajuni (Swahili dialect)', 278 | traditions: 'Fishing, Islamic festivals, and coastal trade practices.', 279 | region: 'Coastal Kenya', 280 | population: 'Unknown', 281 | culturalHighlights: 282 | 'Swahili-related group, known for maritime skills and trade.' 283 | }, 284 | { 285 | name: 'Tharaka', 286 | location: 'Tharaka-Nithi', 287 | language: 'Kitharaka', 288 | traditions: 289 | 'Agricultural ceremonies, traditional dances, and elder councils.', 290 | region: 'Eastern Kenya', 291 | population: 'Unknown', 292 | culturalHighlights: 293 | 'Related to Meru, known for farming and cultural preservation.' 294 | }, 295 | { 296 | name: 'Chonyi', 297 | location: 'Kilifi', 298 | language: 'Kichonyi', 299 | traditions: 'Sacred forest rituals, traditional healing, and dance.', 300 | region: 'Coastal Kenya', 301 | population: 'Unknown', 302 | culturalHighlights: 303 | 'Sub-group of Mijikenda, known for cultural heritage.' 304 | }, 305 | { 306 | name: 'Digo', 307 | location: 'Kwale', 308 | language: 'Kidigo', 309 | traditions: 'Farming, Islamic rituals, and traditional music.', 310 | region: 'Coastal Kenya', 311 | population: 'Unknown', 312 | culturalHighlights: 313 | 'Mijikenda sub-group, known for coastal farming and Islam.' 314 | }, 315 | { 316 | name: 'Duruma', 317 | location: 'Kwale', 318 | language: 'Kiduruma', 319 | traditions: 'Agricultural rituals, circumcision ceremonies, and dance.', 320 | region: 'Coastal Kenya', 321 | population: 'Unknown', 322 | culturalHighlights: 323 | 'Mijikenda sub-group, known for farming and cultural dances.' 324 | }, 325 | { 326 | name: 'Giriama', 327 | location: 'Kilifi', 328 | language: 'Kigiriama', 329 | traditions: 'Sacred Kaya forests, traditional healing, and dance.', 330 | region: 'Coastal Kenya', 331 | population: 'Unknown', 332 | culturalHighlights: 333 | 'Largest Mijikenda group, known for Kaya forest conservation.' 334 | }, 335 | { 336 | name: 'Jibana', 337 | location: 'Kilifi', 338 | language: 'Kijibana', 339 | traditions: 'Farming, traditional dances, and elder councils.', 340 | region: 'Coastal Kenya', 341 | population: 'Unknown', 342 | culturalHighlights: 343 | 'Mijikenda sub-group, known for agricultural practices.' 344 | }, 345 | { 346 | name: 'Kauma', 347 | location: 'Kilifi', 348 | language: 'Kikauma', 349 | traditions: 'Farming, traditional rituals, and music.', 350 | region: 'Coastal Kenya', 351 | population: 'Unknown', 352 | culturalHighlights: 'Mijikenda sub-group, known for cultural music.' 353 | }, 354 | { 355 | name: 'Kamba', 356 | location: 'Kilifi', 357 | language: 'Kikamba', 358 | traditions: 'Farming, traditional dances, and healing.', 359 | region: 'Coastal Kenya', 360 | population: 'Unknown', 361 | culturalHighlights: 'Mijikenda sub-group, known for coastal farming.' 362 | }, 363 | { 364 | name: 'Rabai', 365 | location: 'Kilifi', 366 | language: 'Kirabai', 367 | traditions: 368 | 'Agricultural rituals, Christian-influenced ceremonies, and dance.', 369 | region: 'Coastal Kenya', 370 | population: 'Unknown', 371 | culturalHighlights: 372 | 'Mijikenda sub-group, early adopters of Christianity.' 373 | }, 374 | { 375 | name: 'Ribe', 376 | location: 'Kilifi', 377 | language: 'Kiribe', 378 | traditions: 'Farming, traditional healing, and music.', 379 | region: 'Coastal Kenya', 380 | population: 'Unknown', 381 | culturalHighlights: 382 | 'Mijikenda sub-group, known for cultural resilience.' 383 | }, 384 | { 385 | name: 'Njemps', 386 | location: 'Baringo', 387 | language: 'Njemps (Samburu dialect)', 388 | traditions: 'Fishing, cattle herding, and traditional dances.', 389 | region: 'Rift Valley', 390 | population: 'Unknown', 391 | culturalHighlights: 392 | 'Related to Samburu, known for Lake Baringo fishing.' 393 | }, 394 | { 395 | name: 'Sabaot', 396 | location: 'Bungoma, Trans Nzoia', 397 | language: 'Sabaot', 398 | traditions: 'Cattle herding, initiation rites, and traditional music.', 399 | region: 'Western Kenya', 400 | population: 'Unknown', 401 | culturalHighlights: 'Kalenjin sub-group, known for pastoralism.' 402 | }, 403 | { 404 | name: 'Tachoni', 405 | location: 'Kakamega', 406 | language: 'Tachoni', 407 | traditions: 408 | 'Agricultural rituals, traditional dances, and communal living.', 409 | region: 'Western Kenya', 410 | population: 'Unknown', 411 | culturalHighlights: 'Luhya sub-group, known for farming and music.' 412 | }, 413 | { 414 | name: 'Kabras', 415 | location: 'Kakamega', 416 | language: 'Lukabras', 417 | traditions: 'Bullfighting, traditional dances, and farming.', 418 | region: 'Western Kenya', 419 | population: 'Unknown', 420 | culturalHighlights: 'Luhya sub-group, known for cultural sports.' 421 | }, 422 | { 423 | name: 'Maragoli', 424 | location: 'Vihiga', 425 | language: 'Lumaragoli', 426 | traditions: 'Agricultural ceremonies, dances, and funeral rites.', 427 | region: 'Western Kenya', 428 | population: 'Unknown', 429 | culturalHighlights: 430 | 'Luhya sub-group, known for farming and community life.' 431 | }, 432 | { 433 | name: 'Nyala', 434 | location: 'Kakamega', 435 | language: 'Lunyala', 436 | traditions: 'Farming, traditional dances, and communal rituals.', 437 | region: 'Western Kenya', 438 | population: 'Unknown', 439 | culturalHighlights: 440 | 'Luhya sub-group, known for agricultural traditions.' 441 | }, 442 | { 443 | name: 'Samia', 444 | location: 'Busia', 445 | language: 'Lusamia', 446 | traditions: 'Fishing, farming, and traditional dances.', 447 | region: 'Western Kenya', 448 | population: 'Unknown', 449 | culturalHighlights: 'Luhya sub-group, known for Lake Victoria fishing.' 450 | }, 451 | { 452 | name: 'Tugen', 453 | location: 'Baringo', 454 | language: 'Tugen', 455 | traditions: 'Cattle herding, initiation rites, and mursik preparation.', 456 | region: 'Rift Valley', 457 | population: 'Unknown', 458 | culturalHighlights: 'Kalenjin sub-group, known for pastoralism.' 459 | }, 460 | { 461 | name: 'Keiyo', 462 | location: 'Elgeyo/Marakwet', 463 | language: 'Keiyo', 464 | traditions: 465 | 'Cattle herding, initiation ceremonies, and traditional dances.', 466 | region: 'Rift Valley', 467 | population: 'Unknown', 468 | culturalHighlights: 'Kalenjin sub-group, known for athletic talent.' 469 | }, 470 | { 471 | name: 'Kipsigis', 472 | location: 'Kericho', 473 | language: 'Kipsigis', 474 | traditions: 475 | 'Cattle herding, circumcision rites, and communal gatherings.', 476 | region: 'Rift Valley', 477 | population: 'Unknown', 478 | culturalHighlights: 479 | 'Kalenjin sub-group, known for tea farming and athletics.' 480 | } 481 | ]; 482 | 483 | export const tribeData = { 484 | data: tribes, 485 | count: tribes.length, 486 | status: 200 487 | }; 488 | -------------------------------------------------------------------------------- /src/public/universities.ts: -------------------------------------------------------------------------------- 1 | export interface University { 2 | name: string; 3 | location: string; 4 | established: number; 5 | website: string; 6 | focus: string; 7 | } 8 | 9 | export const publicUniversities: University[] = [ 10 | { 11 | name: 'University of Nairobi', 12 | location: 'Nairobi', 13 | established: 1970, 14 | website: 'https://www.uonbi.ac.ke', 15 | focus: 'Oldest university in Kenya, renowned for research, medicine, and social sciences.' 16 | }, 17 | { 18 | name: 'Kenyatta University', 19 | location: 'Kiambu', 20 | established: 1985, 21 | website: 'https://www.ku.ac.ke', 22 | focus: 'Leading in education programs, with a large library and international partnerships.' 23 | }, 24 | { 25 | name: 'Moi University', 26 | location: 'Uasin Gishu', 27 | established: 1984, 28 | website: 'https://www.mu.ac.ke', 29 | focus: 'Known for forestry and technology programs, located in Eldoret.' 30 | }, 31 | { 32 | name: 'Egerton University', 33 | location: 'Nakuru', 34 | established: 1987, 35 | website: 'https://www.egerton.ac.ke', 36 | focus: 'Specializes in agriculture and environmental studies, founded as a farm school in 1939.' 37 | }, 38 | { 39 | name: 'Maseno University', 40 | location: 'Kisumu', 41 | established: 1991, 42 | website: 'https://www.maseno.ac.ke', 43 | focus: 'Strong in arts, sciences, and distance learning programs.' 44 | }, 45 | { 46 | name: 'Jomo Kenyatta University of Agriculture and Technology', 47 | location: 'Kiambu', 48 | established: 1994, 49 | website: 'https://www.jkuat.ac.ke', 50 | focus: 'Focuses on agriculture, engineering, and technology innovation.' 51 | }, 52 | { 53 | name: 'Dedan Kimathi University of Technology', 54 | location: 'Nyeri', 55 | established: 2012, 56 | website: 'https://www.dkut.ac.ke', 57 | focus: 'Technology and engineering hub, with a science and technology park.' 58 | }, 59 | { 60 | name: 'Technical University of Kenya', 61 | location: 'Nairobi', 62 | established: 2013, 63 | website: 'https://www.tukenya.ac.ke', 64 | focus: 'Technical education, evolved from Kenya Polytechnic.' 65 | }, 66 | { 67 | name: 'Technical University of Mombasa', 68 | location: 'Mombasa', 69 | established: 2013, 70 | website: 'https://www.tum.ac.ke', 71 | focus: 'Technical and vocational training, coastal region focus.' 72 | }, 73 | { 74 | name: 'Pwani University', 75 | location: 'Kilifi', 76 | established: 2013, 77 | website: 'https://www.pu.ac.ke', 78 | focus: 'Marine and environmental sciences, located on the Kenyan coast.' 79 | }, 80 | { 81 | name: 'Kisii University', 82 | location: 'Kisii', 83 | established: 2013, 84 | website: 'https://www.kisiiuniversity.ac.ke', 85 | focus: 'Education and social sciences, serving the Gusii community.' 86 | }, 87 | { 88 | name: 'Masinde Muliro University of Science and Technology', 89 | location: 'Kakamega', 90 | established: 2007, 91 | website: 'https://www.mmust.ac.ke', 92 | focus: 'Science and technology, with a focus on Western Kenya development.' 93 | }, 94 | { 95 | name: 'South Eastern Kenya University', 96 | location: 'Kitui', 97 | established: 2013, 98 | website: 'https://www.seku.ac.ke', 99 | focus: 'Dryland agriculture and environmental studies.' 100 | }, 101 | { 102 | name: 'University of Eldoret', 103 | location: 'Uasin Gishu', 104 | established: 2013, 105 | website: 'https://www.uoeld.ac.ke', 106 | focus: 'Agricultural sciences and education, formerly a Moi University campus.' 107 | }, 108 | { 109 | name: 'Chuka University', 110 | location: 'Tharaka-Nithi', 111 | established: 2013, 112 | website: 'https://www.chuka.ac.ke', 113 | focus: 'Education and business programs, located near Mount Kenya.' 114 | }, 115 | { 116 | name: 'Laikipia University', 117 | location: 'Laikipia', 118 | established: 2013, 119 | website: 'https://www.laikipia.ac.ke', 120 | focus: 'Education and community development, serving pastoralist regions.' 121 | }, 122 | { 123 | name: 'Meru University of Science and Technology', 124 | location: 'Meru', 125 | established: 2013, 126 | website: 'https://www.must.ac.ke', 127 | focus: 'Science, technology, and agriculture in the Meru region.' 128 | }, 129 | { 130 | name: 'Multimedia University of Kenya', 131 | location: 'Nairobi', 132 | established: 2013, 133 | website: 'https://www.mmu.ac.ke', 134 | focus: 'Media, communication, and IT programs.' 135 | }, 136 | { 137 | name: 'University of Kabianga', 138 | location: 'Kericho', 139 | established: 2013, 140 | website: 'https://www.kabianga.ac.ke', 141 | focus: 'Education and environmental sciences, located in tea country.' 142 | }, 143 | { 144 | name: 'Karatina University', 145 | location: 'Nyeri', 146 | established: 2013, 147 | website: 'https://www.karu.ac.ke', 148 | focus: 'Agricultural and education programs, near Mount Kenya.' 149 | }, 150 | { 151 | name: 'Kirinyaga University', 152 | location: 'Kirinyaga', 153 | established: 2016, 154 | website: 'https://www.kyu.ac.ke', 155 | focus: 'Technology and business, supporting Kirinyaga’s economic growth.' 156 | }, 157 | { 158 | name: 'Machakos University', 159 | location: 'Machakos', 160 | established: 2013, 161 | website: 'https://www.mksu.ac.ke', 162 | focus: 'Education and engineering, serving the Machakos region.' 163 | }, 164 | { 165 | name: 'University of Embu', 166 | location: 'Embu', 167 | established: 2013, 168 | website: 'https://www.embuni.ac.ke', 169 | focus: 'Agricultural sciences and education, located in Embu County.' 170 | }, 171 | { 172 | name: 'Rongo University', 173 | location: 'Migori', 174 | established: 2016, 175 | website: 'https://www.rongovarsity.ac.ke', 176 | focus: 'Education and social sciences, serving the Lake Victoria region.' 177 | }, 178 | { 179 | name: 'Taita Taveta University', 180 | location: 'Taita/Taveta', 181 | established: 2016, 182 | website: 'https://www.ttu.ac.ke', 183 | focus: 'Mining and environmental technology, located in a mineral-rich area.' 184 | }, 185 | { 186 | name: 'Alupe University', 187 | location: 'Busia', 188 | established: 2017, 189 | website: 'https://www.auc.ac.ke', 190 | focus: 'Science and education, one of the newest public universities.' 191 | }, 192 | { 193 | name: 'Garissa University', 194 | location: 'Garissa', 195 | established: 2016, 196 | website: 'https://www.garissauniversity.ac.ke', 197 | focus: 'Education and peace studies, serving the North Eastern region.' 198 | }, 199 | { 200 | name: 'Tharaka University', 201 | location: 'Tharaka-Nithi', 202 | established: 2017, 203 | website: 'https://www.tharaka.ac.ke', 204 | focus: 'Agricultural technology and education, near Chuka University.' 205 | }, 206 | { 207 | name: 'Murang’a University of Technology', 208 | location: 'Murang’a', 209 | established: 2016, 210 | website: 'https://www.mut.ac.ke', 211 | focus: 'Technology and innovation, supporting Murang’a’s development.' 212 | }, 213 | { 214 | name: 'University of Turkana', 215 | location: 'Turkana', 216 | established: 2017, 217 | website: 'https://www.turkanauniversity.ac.ke', 218 | focus: 'Arid land studies and education, addressing Turkana’s unique needs.' 219 | }, 220 | { 221 | name: 'Bomet University College', 222 | location: 'Bomet', 223 | established: 2017, 224 | website: 'https://www.buc.ac.ke', 225 | focus: 'Environmental sciences, affiliated with Moi University.' 226 | }, 227 | { 228 | name: 'Kaimosi Friends University College', 229 | location: 'Vihiga', 230 | established: 2015, 231 | website: 'https://www.kafuco.ac.ke', 232 | focus: 'Education and technology, affiliated with Masinde Muliro University.' 233 | }, 234 | { 235 | name: 'Tom Mboya University College', 236 | location: 'Homa Bay', 237 | established: 2016, 238 | website: 'https://www.tmuc.ac.ke', 239 | focus: 'Education and social sciences, affiliated with Maseno University.' 240 | }, 241 | { 242 | name: 'Co-operative University of Kenya', 243 | location: 'Nairobi', 244 | established: 2016, 245 | website: 'https://www.cuk.ac.ke', 246 | focus: 'Co-operative management and business studies.' 247 | }, 248 | { 249 | name: 'Lukenya University', 250 | location: 'Machakos', 251 | established: 2015, 252 | website: 'https://www.lukenyauniversity.ac.ke', 253 | focus: 'Agricultural and environmental studies, affiliated with University of Nairobi.' 254 | }, 255 | { 256 | name: 'University of Nairobi School of Physical Sciences', 257 | location: 'Nairobi', 258 | established: 1970, 259 | website: 'https://physicalsciences.uonbi.ac.ke', 260 | focus: 'Part of UoN, specializing in physics, chemistry, and related sciences.' 261 | }, 262 | { 263 | name: 'Kenya Medical Training College University', 264 | location: 'Nairobi', 265 | established: 2023, 266 | website: 'https://www.kmtc.ac.ke', 267 | focus: 'Medical training and health sciences, recently upgraded to university status.' 268 | }, 269 | { 270 | name: 'Maasai Mara University', 271 | location: 'Narok', 272 | established: 2013, 273 | website: 'https://www.mmarau.ac.ke', 274 | focus: 'Environmental studies and tourism, near the Maasai Mara reserve.' 275 | }, 276 | { 277 | name: 'Catholic University of Eastern Africa', 278 | location: 'Nairobi', 279 | established: 1992, 280 | website: 'https://www.cuea.edu', 281 | focus: 'Theology and social sciences, public status debated (often listed as private).' 282 | } 283 | ]; 284 | -------------------------------------------------------------------------------- /src/public/wards.ts: -------------------------------------------------------------------------------- 1 | export type Ward = { 2 | code: string; 3 | office: string; 4 | }; 5 | 6 | export const wards: Ward[] = [ 7 | { 8 | code: '40101', 9 | office: 'Ahero' 10 | }, 11 | { 12 | code: '30101', 13 | office: 'Ainabkoi' 14 | }, 15 | { 16 | code: '40139', 17 | office: 'Akala' 18 | }, 19 | { 20 | code: '50244', 21 | office: 'Amagoro' 22 | }, 23 | { 24 | code: '20424', 25 | office: 'Amalo (Formerly Oloomirani)' 26 | }, 27 | { 28 | code: '50403', 29 | office: 'Amukura' 30 | }, 31 | { 32 | code: '40309', 33 | office: 'Asumbi' 34 | }, 35 | { 36 | code: '00204', 37 | office: 'Athi River' 38 | }, 39 | { 40 | code: '40122', 41 | office: 'Awasi' 42 | }, 43 | { 44 | code: '20113', 45 | office: 'Bahati' 46 | }, 47 | { 48 | code: '80101', 49 | office: 'Bamburi' 50 | }, 51 | { 52 | code: '50316', 53 | office: 'Banja' 54 | }, 55 | { 56 | code: '20601', 57 | office: 'Baragoi' 58 | }, 59 | { 60 | code: '30306', 61 | office: 'Baraton' 62 | }, 63 | { 64 | code: '10302', 65 | office: 'Baricho ' 66 | }, 67 | { 68 | code: '01101', 69 | office: 'Bissel' 70 | }, 71 | { 72 | code: '50206', 73 | office: 'Bokoli' 74 | }, 75 | { 76 | code: '20400', 77 | office: 'Bomet' 78 | }, 79 | { 80 | code: '20101', 81 | office: 'Bondeni' 82 | }, 83 | { 84 | code: '40601', 85 | office: 'Bondo' 86 | }, 87 | { 88 | code: '50137', 89 | office: 'Booker' 90 | }, 91 | { 92 | code: '40620', 93 | office: 'Boro' 94 | }, 95 | { 96 | code: '50245', 97 | office: 'Brigadier' 98 | }, 99 | { 100 | code: '50105', 101 | office: 'Bukura' 102 | }, 103 | { 104 | code: '50109', 105 | office: 'Bulimbo' 106 | }, 107 | { 108 | code: '50404', 109 | office: 'Bumala' 110 | }, 111 | { 112 | code: '50200', 113 | office: 'Bungoma' 114 | }, 115 | { 116 | code: '70104', 117 | office: 'Bura Tana' 118 | }, 119 | { 120 | code: '30102', 121 | office: 'Burnt Forest' 122 | }, 123 | { 124 | code: '00515', 125 | office: 'Buruburu' 126 | }, 127 | { 128 | code: '50400', 129 | office: 'Busia' 130 | }, 131 | { 132 | code: '50101', 133 | office: 'Butere' 134 | }, 135 | { 136 | code: '50405', 137 | office: 'Butula' 138 | }, 139 | { 140 | code: '50210', 141 | office: 'Buyofu' 142 | }, 143 | { 144 | code: '50302', 145 | office: 'Chamakanga' 146 | }, 147 | { 148 | code: '80102', 149 | office: 'Changamwe' 150 | }, 151 | { 152 | code: '50317', 153 | office: 'Chavakali' 154 | }, 155 | { 156 | code: '30706', 157 | office: 'Chebiemit' 158 | }, 159 | { 160 | code: '20215', 161 | office: 'Cheborge' 162 | }, 163 | { 164 | code: '20401', 165 | office: 'Chebunyo' 166 | }, 167 | { 168 | code: '20222', 169 | office: 'Chemamul' 170 | }, 171 | { 172 | code: '20407', 173 | office: 'Chemaner' 174 | }, 175 | { 176 | code: '40116', 177 | office: 'Chemelil' 178 | }, 179 | { 180 | code: '30605', 181 | office: 'Chepareria' 182 | }, 183 | { 184 | code: '30133', 185 | office: 'Chepkoilel' 186 | }, 187 | { 188 | code: '30129', 189 | office: 'Chepkorio' 190 | }, 191 | { 192 | code: '50201', 193 | office: 'Cheptais' 194 | }, 195 | { 196 | code: '20217', 197 | office: 'Chesinendet' 198 | }, 199 | { 200 | code: '60410', 201 | office: 'Chiakanyinga' 202 | }, 203 | { 204 | code: '60409', 205 | office: 'Chiakariga' 206 | }, 207 | { 208 | code: '60401', 209 | office: 'Chogoria' 210 | }, 211 | { 212 | code: '60400', 213 | office: 'Chuka' 214 | }, 215 | { 216 | code: '90147', 217 | office: 'Chumvi' 218 | }, 219 | { 220 | code: '80314', 221 | office: 'Chumvini' 222 | }, 223 | { 224 | code: '50202', 225 | office: 'Chwele' 226 | }, 227 | { 228 | code: '00200', 229 | office: 'City Square' 230 | }, 231 | { 232 | code: '80103', 233 | office: 'Coast Gen. Hospital' 234 | }, 235 | { 236 | code: '70103', 237 | office: 'Dadaab' 238 | }, 239 | { 240 | code: '40112', 241 | office: 'Dago' 242 | }, 243 | { 244 | code: '00516', 245 | office: 'Dandora' 246 | }, 247 | { 248 | code: '40117', 249 | office: 'Daraja Mbili' 250 | }, 251 | { 252 | code: '90145', 253 | office: 'Daystar' 254 | }, 255 | { 256 | code: '80401', 257 | office: 'Diani Beach' 258 | }, 259 | { 260 | code: '80104', 261 | office: 'Docks' 262 | }, 263 | { 264 | code: '10401', 265 | office: 'Doldol' 266 | }, 267 | { 268 | code: '01027', 269 | office: 'Donyosabuk' 270 | }, 271 | { 272 | code: '00610', 273 | office: 'Eastleigh' 274 | }, 275 | { 276 | code: '20115', 277 | office: 'Egerton' 278 | }, 279 | { 280 | code: '90139', 281 | office: 'Ekalakala' 282 | }, 283 | { 284 | code: '20102', 285 | office: 'Elburgon' 286 | }, 287 | { 288 | code: '20103', 289 | office: 'Eldama Ravine' 290 | }, 291 | { 292 | code: '30100', 293 | office: 'Eldoret' 294 | }, 295 | { 296 | code: '70301', 297 | office: 'Elwak' 298 | }, 299 | { 300 | code: '90121', 301 | office: 'Emali' 302 | }, 303 | { 304 | code: '00521', 305 | office: 'Embakasi' 306 | }, 307 | { 308 | code: '60100', 309 | office: 'Embu' 310 | }, 311 | { 312 | code: '50314', 313 | office: 'Emuhaya' 314 | }, 315 | { 316 | code: '10107', 317 | office: 'Endarasha' 318 | }, 319 | { 320 | code: '30201', 321 | office: 'Endebess' 322 | }, 323 | { 324 | code: '00500', 325 | office: 'Enterprise Road' 326 | }, 327 | { 328 | code: '40208', 329 | office: 'Etago' 330 | }, 331 | { 332 | code: '80501', 333 | office: 'Faza' 334 | }, 335 | { 336 | code: '20209', 337 | office: 'Fort Ternan' 338 | }, 339 | { 340 | code: '50406', 341 | office: 'Funyula' 342 | }, 343 | { 344 | code: '00100', 345 | office: 'G.P.O Nairobi' 346 | }, 347 | { 348 | code: '10210', 349 | office: 'Gacharage-Ini' 350 | }, 351 | { 352 | code: '60209', 353 | office: 'Gaitu' 354 | }, 355 | { 356 | code: '10109', 357 | office: 'Gakere Road' 358 | }, 359 | { 360 | code: '10111', 361 | office: 'Gakindu' 362 | }, 363 | { 364 | code: '10239', 365 | office: 'Gakungu' 366 | }, 367 | { 368 | code: '50318', 369 | office: 'Gambogi' 370 | }, 371 | { 372 | code: '80205', 373 | office: 'Ganze' 374 | }, 375 | { 376 | code: '60301', 377 | office: 'Garba Tulla' 378 | }, 379 | { 380 | code: '70100', 381 | office: 'Garissa' 382 | }, 383 | { 384 | code: '80201', 385 | office: 'Garsen' 386 | }, 387 | { 388 | code: '00240', 389 | office: 'Gathugu' 390 | }, 391 | { 392 | code: '10114', 393 | office: 'Gatitu' 394 | }, 395 | { 396 | code: '01028', 397 | office: 'Gatukuyu' 398 | }, 399 | { 400 | code: '01030', 401 | office: 'Gatundu' 402 | }, 403 | { 404 | code: '60404', 405 | office: 'Gatunga' 406 | }, 407 | { 408 | code: '01013', 409 | office: 'Gatura' 410 | }, 411 | { 412 | code: '80208', 413 | office: 'Gede' 414 | }, 415 | { 416 | code: '40503', 417 | office: 'Gesima' 418 | }, 419 | { 420 | code: '40201', 421 | office: 'Gesusu' 422 | }, 423 | { 424 | code: '10108', 425 | office: 'Giakanja' 426 | }, 427 | { 428 | code: '00601', 429 | office: 'Gigiri' 430 | }, 431 | { 432 | code: '10213', 433 | office: 'Gikoe' 434 | }, 435 | { 436 | code: '20116', 437 | office: 'Gilgil' 438 | }, 439 | { 440 | code: '50304', 441 | office: 'Gisambai' 442 | }, 443 | { 444 | code: '60212', 445 | office: 'Gitemene' 446 | }, 447 | { 448 | code: '60205', 449 | office: 'Githongo' 450 | }, 451 | { 452 | code: '00216', 453 | office: 'Githunguri' 454 | }, 455 | { 456 | code: '01003', 457 | office: 'Gituamba' 458 | }, 459 | { 460 | code: '10209', 461 | office: 'Gitugi' 462 | }, 463 | { 464 | code: '80206', 465 | office: 'Gongoni' 466 | }, 467 | { 468 | code: '70202', 469 | office: 'Griftu' 470 | }, 471 | { 472 | code: '70201', 473 | office: 'Habaswein' 474 | }, 475 | { 476 | code: '50312', 477 | office: 'Hamisi' 478 | }, 479 | { 480 | code: '40640', 481 | office: 'Hawinga' 482 | }, 483 | { 484 | code: '70101', 485 | office: 'Hola' 486 | }, 487 | { 488 | code: '40300', 489 | office: 'Homa Bay' 490 | }, 491 | { 492 | code: '30109', 493 | office: 'Huruma' 494 | }, 495 | { 496 | code: '40209', 497 | office: 'Igare' 498 | }, 499 | { 500 | code: '60402', 501 | office: 'Igoji' 502 | }, 503 | { 504 | code: '20307', 505 | office: 'Igwamiti' 506 | }, 507 | { 508 | code: '90120', 509 | office: 'Iiani' 510 | }, 511 | { 512 | code: '90135', 513 | office: 'Ikalaasa' 514 | }, 515 | { 516 | code: '40501', 517 | office: 'Ikonge' 518 | }, 519 | { 520 | code: '90207', 521 | office: 'Ikutha' 522 | }, 523 | { 524 | code: '60405', 525 | office: 'Ikuu' 526 | }, 527 | { 528 | code: '60102', 529 | office: 'Ishiara' 530 | }, 531 | { 532 | code: '40414', 533 | office: 'Isibania' 534 | }, 535 | { 536 | code: '60300', 537 | office: 'Isiolo' 538 | }, 539 | { 540 | code: '30700', 541 | office: 'Iten' 542 | }, 543 | { 544 | code: '01015', 545 | office: 'Ithanga' 546 | }, 547 | { 548 | code: '00501', 549 | office: 'J.K.I. Airport' 550 | }, 551 | { 552 | code: '00101', 553 | office: 'Jamia' 554 | }, 555 | { 556 | code: '20157', 557 | office: 'Kabarak' 558 | }, 559 | { 560 | code: '30400', 561 | office: 'Kabarnet' 562 | }, 563 | { 564 | code: '30401', 565 | office: 'Kabartonjo' 566 | }, 567 | { 568 | code: '90205', 569 | office: 'Kabati' 570 | }, 571 | { 572 | code: '20114', 573 | office: 'Kabazi' 574 | }, 575 | { 576 | code: '02201', 577 | office: 'Kabianga' 578 | }, 579 | { 580 | code: '30303', 581 | office: 'Kabiyet' 582 | }, 583 | { 584 | code: '30601', 585 | office: 'Kacheliba' 586 | }, 587 | { 588 | code: '40223', 589 | office: 'Kadongo' 590 | }, 591 | { 592 | code: '10306', 593 | office: 'Kagio' 594 | }, 595 | { 596 | code: '10307', 597 | office: 'Kagumo' 598 | }, 599 | { 600 | code: '01033', 601 | office: 'Kagundu-Ini' 602 | }, 603 | { 604 | code: '00223', 605 | office: 'Kagwe' 606 | }, 607 | { 608 | code: '20304', 609 | office: 'Kaheho' 610 | }, 611 | { 612 | code: '10206', 613 | office: 'Kahuhia' 614 | }, 615 | { 616 | code: '10201', 617 | office: 'Kahuro' 618 | }, 619 | { 620 | code: '01214', 621 | office: 'Kahuti ' 622 | }, 623 | { 624 | code: '50305', 625 | office: 'Kaimosi' 626 | }, 627 | { 628 | code: '01100', 629 | office: 'Kajiado' 630 | }, 631 | { 632 | code: '50100', 633 | office: 'Kakamega' 634 | }, 635 | { 636 | code: '30501', 637 | office: 'Kakuma' 638 | }, 639 | { 640 | code: '50115', 641 | office: 'Kakunga' 642 | }, 643 | { 644 | code: '90122', 645 | office: 'Kalamba' 646 | }, 647 | { 648 | code: '01001', 649 | office: 'Kalimoni' 650 | }, 651 | { 652 | code: '30502', 653 | office: 'Kalokol' 654 | }, 655 | { 656 | code: '80105', 657 | office: 'Kaloleni' 658 | }, 659 | { 660 | code: '20134', 661 | office: 'Kamara' 662 | }, 663 | { 664 | code: '50116', 665 | office: 'Kambiri' 666 | }, 667 | { 668 | code: '10226', 669 | office: 'Kambiti' 670 | }, 671 | { 672 | code: '00607', 673 | office: 'Kamiti' 674 | }, 675 | { 676 | code: '30406', 677 | office: 'Kampi-Ya-Samaki' 678 | }, 679 | { 680 | code: '50216', 681 | office: 'Kamukuywa' 682 | }, 683 | { 684 | code: '50408', 685 | office: 'Kamuriai' 686 | }, 687 | { 688 | code: '90403', 689 | office: 'Kamuwongo' 690 | }, 691 | { 692 | code: '01034', 693 | office: 'Kandara' 694 | }, 695 | { 696 | code: '40304', 697 | office: 'Kandiege' 698 | }, 699 | { 700 | code: '10218', 701 | office: 'Kangari' 702 | }, 703 | { 704 | code: '10202', 705 | office: 'Kangema' 706 | }, 707 | { 708 | code: '00625', 709 | office: 'Kangemi' 710 | }, 711 | { 712 | code: '90115', 713 | office: 'Kangundo' 714 | }, 715 | { 716 | code: '60118', 717 | office: 'Kanja' 718 | }, 719 | { 720 | code: '01004', 721 | office: 'Kanjuku' 722 | }, 723 | { 724 | code: '60206', 725 | office: 'Kanyakine' 726 | }, 727 | { 728 | code: '30304', 729 | office: 'Kapcheno' 730 | }, 731 | { 732 | code: '30204', 733 | office: 'Kapcherop' 734 | }, 735 | { 736 | code: '30600', 737 | office: 'Kapenguria' 738 | }, 739 | { 740 | code: '20214', 741 | office: 'Kapkatet' 742 | }, 743 | { 744 | code: '30300', 745 | office: 'Kapsabet' 746 | }, 747 | { 748 | code: '30208', 749 | office: 'Kapsara' 750 | }, 751 | { 752 | code: '20211', 753 | office: 'Kapsoit' 754 | }, 755 | { 756 | code: '50203', 757 | office: 'Kapsokwony' 758 | }, 759 | { 760 | code: '30705', 761 | office: 'Kapsowar' 762 | }, 763 | { 764 | code: '30114', 765 | office: 'Kaptagat' 766 | }, 767 | { 768 | code: '30701', 769 | office: 'Kaptarakwa' 770 | }, 771 | { 772 | code: '60105', 773 | office: 'Karaba' 774 | }, 775 | { 776 | code: '20328', 777 | office: 'Karandi' 778 | }, 779 | { 780 | code: '10101', 781 | office: 'Karatina' 782 | }, 783 | { 784 | code: '00502', 785 | office: 'Karen' 786 | }, 787 | { 788 | code: '00401', 789 | office: 'Karungu' 790 | }, 791 | { 792 | code: '00219', 793 | office: 'Karuri' 794 | }, 795 | { 796 | code: '60117', 797 | office: 'Karurumo' 798 | }, 799 | { 800 | code: '90123', 801 | office: 'Kasikeu' 802 | }, 803 | { 804 | code: '90106', 805 | office: 'Katangi' 806 | }, 807 | { 808 | code: '90105', 809 | office: 'Kathiani' 810 | }, 811 | { 812 | code: '90302', 813 | office: 'Kathonzweni' 814 | }, 815 | { 816 | code: '60406', 817 | office: 'Kathwana' 818 | }, 819 | { 820 | code: '40118', 821 | office: 'Katito' 822 | }, 823 | { 824 | code: '90107', 825 | office: 'Kaviani' 826 | }, 827 | { 828 | code: '00518', 829 | office: 'Kayole' 830 | }, 831 | { 832 | code: '40506', 833 | office: 'Kebirigo' 834 | }, 835 | { 836 | code: '20220', 837 | office: 'Kedowa' 838 | }, 839 | { 840 | code: '20501', 841 | office: 'Keekorok' 842 | }, 843 | { 844 | code: '40413', 845 | office: 'Kehancha' 846 | }, 847 | { 848 | code: '40301', 849 | office: 'Kendu Bay' 850 | }, 851 | { 852 | code: '80122', 853 | office: 'Kengeleni' 854 | }, 855 | { 856 | code: '01020', 857 | office: 'Kenol' 858 | }, 859 | { 860 | code: '00202', 861 | office: 'Kenyatta N.Hospital' 862 | }, 863 | { 864 | code: '00609', 865 | office: 'Kenyatta University' 866 | }, 867 | { 868 | code: '40211', 869 | office: 'Kenyenya' 870 | }, 871 | { 872 | code: '20200', 873 | office: 'Kericho' 874 | }, 875 | { 876 | code: '20131', 877 | office: 'Keringet' 878 | }, 879 | { 880 | code: '40202', 881 | office: 'Keroka' 882 | }, 883 | { 884 | code: '10300', 885 | office: 'Kerugoya' 886 | }, 887 | { 888 | code: '30215', 889 | office: 'Kesogon' 890 | }, 891 | { 892 | code: '40212', 893 | office: 'Keumbu' 894 | }, 895 | { 896 | code: '50104', 897 | office: 'Khayega' 898 | }, 899 | { 900 | code: '50135', 901 | office: 'Khwisero' 902 | }, 903 | { 904 | code: '10122', 905 | office: 'Kiamariga' 906 | }, 907 | { 908 | code: '00900', 909 | office: 'Kiambu' 910 | }, 911 | { 912 | code: '10309', 913 | office: 'Kiamutugu' 914 | }, 915 | { 916 | code: '60602', 917 | office: 'Kianjai' 918 | }, 919 | { 920 | code: '60122', 921 | office: 'Kianjokoma' 922 | }, 923 | { 924 | code: '10301', 925 | office: 'Kianyaga' 926 | }, 927 | { 928 | code: '60201', 929 | office: 'Kibirichia' 930 | }, 931 | { 932 | code: '90137', 933 | office: 'Kibwezi' 934 | }, 935 | { 936 | code: '10102', 937 | office: 'Kiganjo' 938 | }, 939 | { 940 | code: '10203', 941 | office: 'Kigumo' 942 | }, 943 | { 944 | code: '10207', 945 | office: 'Kihoya' 946 | }, 947 | { 948 | code: '60207', 949 | office: 'Kiirua' 950 | }, 951 | { 952 | code: '00220', 953 | office: 'Kijabe' 954 | }, 955 | { 956 | code: '90125', 957 | office: 'Kikima' 958 | }, 959 | { 960 | code: '80410', 961 | office: 'Kikoneni' 962 | }, 963 | { 964 | code: '00902', 965 | office: 'Kikuyu' 966 | }, 967 | { 968 | code: '90305', 969 | office: 'Kilala' 970 | }, 971 | { 972 | code: '40700', 973 | office: 'Kilgoris' 974 | }, 975 | { 976 | code: '80108', 977 | office: 'Kilifi' 978 | }, 979 | { 980 | code: '80107', 981 | office: 'Kilindini' 982 | }, 983 | { 984 | code: '50315', 985 | office: 'Kilingili' 986 | }, 987 | { 988 | code: '10140', 989 | office: 'Kimathi Way' 990 | }, 991 | { 992 | code: '10310', 993 | office: 'Kimbimbi' 994 | }, 995 | { 996 | code: '50204', 997 | office: 'Kimilili' 998 | }, 999 | { 1000 | code: '30209', 1001 | office: 'Kiminini' 1002 | }, 1003 | { 1004 | code: '20225', 1005 | office: 'Kimulot' 1006 | }, 1007 | { 1008 | code: '30128', 1009 | office: 'Kimwarer' 1010 | }, 1011 | { 1012 | code: '20320', 1013 | office: 'Kinamba' 1014 | }, 1015 | { 1016 | code: '80405', 1017 | office: 'Kinango' 1018 | }, 1019 | { 1020 | code: '00227', 1021 | office: 'Kinari' 1022 | }, 1023 | { 1024 | code: '01031', 1025 | office: 'Kindaruma' 1026 | }, 1027 | { 1028 | code: '60216', 1029 | office: 'Kinoru' 1030 | }, 1031 | { 1032 | code: '60211', 1033 | office: 'Kionyo' 1034 | }, 1035 | { 1036 | code: '30103', 1037 | office: 'Kipkabus' 1038 | }, 1039 | { 1040 | code: '50241', 1041 | office: 'Kipkarren River' 1042 | }, 1043 | { 1044 | code: '20202', 1045 | office: 'Kipkelion' 1046 | }, 1047 | { 1048 | code: '20133', 1049 | office: 'Kiptangwanyi' 1050 | }, 1051 | { 1052 | code: '20213', 1053 | office: 'Kiptere' 1054 | }, 1055 | { 1056 | code: '20208', 1057 | office: 'Kiptugumo' 1058 | }, 1059 | { 1060 | code: '10204', 1061 | office: 'Kiriaini' 1062 | }, 1063 | { 1064 | code: '60113', 1065 | office: 'Kiritiri' 1066 | }, 1067 | { 1068 | code: '50313', 1069 | office: 'Kiritu' 1070 | }, 1071 | { 1072 | code: '01018', 1073 | office: 'Kirwara' 1074 | }, 1075 | { 1076 | code: '90204', 1077 | office: 'Kisasi' 1078 | }, 1079 | { 1080 | code: '00206', 1081 | office: 'Kiserian' 1082 | }, 1083 | { 1084 | code: '40200', 1085 | office: 'Kisii' 1086 | }, 1087 | { 1088 | code: '40100', 1089 | office: 'Kisumu' 1090 | }, 1091 | { 1092 | code: '30200', 1093 | office: 'Kitale' 1094 | }, 1095 | { 1096 | code: '00241', 1097 | office: 'Kitengela' 1098 | }, 1099 | { 1100 | code: '90124', 1101 | office: 'Kithimani' 1102 | }, 1103 | { 1104 | code: '60114', 1105 | office: 'Kithimu' 1106 | }, 1107 | { 1108 | code: '90144', 1109 | office: 'Kithyoko' 1110 | }, 1111 | { 1112 | code: '90303', 1113 | office: 'Kitise' 1114 | }, 1115 | { 1116 | code: '90200', 1117 | office: 'Kitui' 1118 | }, 1119 | { 1120 | code: '90111', 1121 | office: 'Kivunga' 1122 | }, 1123 | { 1124 | code: '30305', 1125 | office: 'Kobujoi' 1126 | }, 1127 | { 1128 | code: '90108', 1129 | office: 'Kola' 1130 | }, 1131 | { 1132 | code: '40102', 1133 | office: 'Kombewa' 1134 | }, 1135 | { 1136 | code: '40103', 1137 | office: 'Kondele' 1138 | }, 1139 | { 1140 | code: '10234', 1141 | office: 'Kora' 1142 | }, 1143 | { 1144 | code: '40104', 1145 | office: 'Koru' 1146 | }, 1147 | { 1148 | code: '04332', 1149 | office: 'Kosele' 1150 | }, 1151 | { 1152 | code: '50117', 1153 | office: 'Koyonzo' 1154 | }, 1155 | { 1156 | code: '60125', 1157 | office: 'Kubu Kubu' 1158 | }, 1159 | { 1160 | code: '10304', 1161 | office: 'Kutus' 1162 | }, 1163 | { 1164 | code: '80403', 1165 | office: 'Kwale' 1166 | }, 1167 | { 1168 | code: '90220', 1169 | office: 'Kyatune' 1170 | }, 1171 | { 1172 | code: '90209', 1173 | office: 'Kyeni' 1174 | }, 1175 | { 1176 | code: '90401', 1177 | office: 'Kyuso' 1178 | }, 1179 | { 1180 | code: '60601', 1181 | office: 'Laare' 1182 | }, 1183 | { 1184 | code: '20330', 1185 | office: 'Laikipia Campus' 1186 | }, 1187 | { 1188 | code: '60502', 1189 | office: 'Laisamis' 1190 | }, 1191 | { 1192 | code: '80500', 1193 | office: 'Lamu' 1194 | }, 1195 | { 1196 | code: '20112', 1197 | office: 'Lanet' 1198 | }, 1199 | { 1200 | code: '30112', 1201 | office: 'Langas' 1202 | }, 1203 | { 1204 | code: '00509', 1205 | office: 'Langata' 1206 | }, 1207 | { 1208 | code: '00603', 1209 | office: 'Lavington' 1210 | }, 1211 | { 1212 | code: '30302', 1213 | office: 'Lessos' 1214 | }, 1215 | { 1216 | code: '80110', 1217 | office: 'Likoni' 1218 | }, 1219 | { 1220 | code: '00217', 1221 | office: 'Limuru' 1222 | }, 1223 | { 1224 | code: '20210', 1225 | office: 'Litein' 1226 | }, 1227 | { 1228 | code: '30500', 1229 | office: 'Lodwar' 1230 | }, 1231 | { 1232 | code: '00209', 1233 | office: 'Loitokitok' 1234 | }, 1235 | { 1236 | code: '60501', 1237 | office: 'Loiyangalani' 1238 | }, 1239 | { 1240 | code: '30503', 1241 | office: 'Lokichoggio' 1242 | }, 1243 | { 1244 | code: '30504', 1245 | office: 'Lokitaung' 1246 | }, 1247 | { 1248 | code: '40701', 1249 | office: 'Lolgorian' 1250 | }, 1251 | { 1252 | code: '20203', 1253 | office: 'Londiani' 1254 | }, 1255 | { 1256 | code: '20402', 1257 | office: 'Longisa' 1258 | }, 1259 | { 1260 | code: '00604', 1261 | office: 'Lower Kabete' 1262 | }, 1263 | { 1264 | code: '50307', 1265 | office: 'Luanda' 1266 | }, 1267 | { 1268 | code: '50240', 1269 | office: 'Luandeti' 1270 | }, 1271 | { 1272 | code: '50118', 1273 | office: 'Lubao' 1274 | }, 1275 | { 1276 | code: '50108', 1277 | office: 'Lugari' 1278 | }, 1279 | { 1280 | code: '50218', 1281 | office: 'Lugulu' 1282 | }, 1283 | { 1284 | code: '40623', 1285 | office: 'Luhano' 1286 | }, 1287 | { 1288 | code: '50230', 1289 | office: 'Lukusi' 1290 | }, 1291 | { 1292 | code: '50242', 1293 | office: 'Lumakanda' 1294 | }, 1295 | { 1296 | code: '80402', 1297 | office: 'Lunga Lunga' 1298 | }, 1299 | { 1300 | code: '50119', 1301 | office: 'Lunza' 1302 | }, 1303 | { 1304 | code: '50220', 1305 | office: 'Lwakhakha' 1306 | }, 1307 | { 1308 | code: '20147', 1309 | office: 'Maai Mahiu' 1310 | }, 1311 | { 1312 | code: '50235', 1313 | office: 'Mabusi' 1314 | }, 1315 | { 1316 | code: '90100', 1317 | office: 'Machakos' 1318 | }, 1319 | { 1320 | code: '01002', 1321 | office: 'Madaraka' 1322 | }, 1323 | { 1324 | code: '40613', 1325 | office: 'Madiany' 1326 | }, 1327 | { 1328 | code: '80207', 1329 | office: 'Madina' 1330 | }, 1331 | { 1332 | code: '00205', 1333 | office: 'Magadi' 1334 | }, 1335 | { 1336 | code: '40516', 1337 | office: 'Magena' 1338 | }, 1339 | { 1340 | code: '50325', 1341 | office: 'Mago' 1342 | }, 1343 | { 1344 | code: '40507', 1345 | office: 'Magombo' 1346 | }, 1347 | { 1348 | code: '60403', 1349 | office: 'Magumoni' 1350 | }, 1351 | { 1352 | code: '40307', 1353 | office: 'Magunga' 1354 | }, 1355 | { 1356 | code: '60407', 1357 | office: 'Magutuni' 1358 | }, 1359 | { 1360 | code: '40508', 1361 | office: 'Magwagwa' 1362 | }, 1363 | { 1364 | code: '90138', 1365 | office: 'Makindu' 1366 | }, 1367 | { 1368 | code: '00510', 1369 | office: 'Makongeni' 1370 | }, 1371 | { 1372 | code: '90300', 1373 | office: 'Makueni' 1374 | }, 1375 | { 1376 | code: '80112', 1377 | office: 'Makupa' 1378 | }, 1379 | { 1380 | code: '50209', 1381 | office: 'Malakisi' 1382 | }, 1383 | { 1384 | code: '50103', 1385 | office: 'Malava' 1386 | }, 1387 | { 1388 | code: '80200', 1389 | office: 'Malindi' 1390 | }, 1391 | { 1392 | code: '70300', 1393 | office: 'Mandera' 1394 | }, 1395 | { 1396 | code: '60101', 1397 | office: 'Manyatta' 1398 | }, 1399 | { 1400 | code: '50300', 1401 | office: 'Maragoli' 1402 | }, 1403 | { 1404 | code: '10205', 1405 | office: 'Maragua' 1406 | }, 1407 | { 1408 | code: '20600', 1409 | office: 'Maralal' 1410 | }, 1411 | { 1412 | code: '80113', 1413 | office: 'Mariakani' 1414 | }, 1415 | { 1416 | code: '30403', 1417 | office: 'Marigat' 1418 | }, 1419 | { 1420 | code: '60408', 1421 | office: 'Marima' 1422 | }, 1423 | { 1424 | code: '60215', 1425 | office: 'Marimanti' 1426 | }, 1427 | { 1428 | code: '20322', 1429 | office: 'Marmanet' 1430 | }, 1431 | { 1432 | code: '60500', 1433 | office: 'Marsabit' 1434 | }, 1435 | { 1436 | code: '70105', 1437 | office: 'Masalani' 1438 | }, 1439 | { 1440 | code: '40105', 1441 | office: 'Maseno' 1442 | }, 1443 | { 1444 | code: '01103', 1445 | office: 'Mashuru' 1446 | }, 1447 | { 1448 | code: '90101', 1449 | office: 'Masii' 1450 | }, 1451 | { 1452 | code: '90141', 1453 | office: 'Masinga' 1454 | }, 1455 | { 1456 | code: '00221', 1457 | office: 'Matathia' 1458 | }, 1459 | { 1460 | code: '00611', 1461 | office: 'Mathare Valley' 1462 | }, 1463 | { 1464 | code: '90140', 1465 | office: 'Matiliku' 1466 | }, 1467 | { 1468 | code: '80406', 1469 | office: 'Matuga' 1470 | }, 1471 | { 1472 | code: '30205', 1473 | office: 'Matunda' 1474 | }, 1475 | { 1476 | code: '90119', 1477 | office: 'Matuu' 1478 | }, 1479 | { 1480 | code: '60600', 1481 | office: 'Maua' 1482 | }, 1483 | { 1484 | code: '80317', 1485 | office: 'Maungu' 1486 | }, 1487 | { 1488 | code: '90304', 1489 | office: 'Mavindini' 1490 | }, 1491 | { 1492 | code: '40310', 1493 | office: 'Mawego' 1494 | }, 1495 | { 1496 | code: '80114', 1497 | office: 'Mazeras' 1498 | }, 1499 | { 1500 | code: '00503', 1501 | office: 'Mbagathi' 1502 | }, 1503 | { 1504 | code: '10233', 1505 | office: 'Mbiri' 1506 | }, 1507 | { 1508 | code: '40305', 1509 | office: 'Mbita' 1510 | }, 1511 | { 1512 | code: '90214', 1513 | office: 'Mbitini' 1514 | }, 1515 | { 1516 | code: '90110', 1517 | office: 'Mbiuni' 1518 | }, 1519 | { 1520 | code: '90127', 1521 | office: 'Mbumbuni' 1522 | }, 1523 | { 1524 | code: '00504', 1525 | office: 'Mchumbi Rd' 1526 | }, 1527 | { 1528 | code: '40123', 1529 | office: 'Mega City' 1530 | }, 1531 | { 1532 | code: '20104', 1533 | office: 'Menengai' 1534 | }, 1535 | { 1536 | code: '60303', 1537 | office: 'Merti' 1538 | }, 1539 | { 1540 | code: '60200', 1541 | office: 'Meru' 1542 | }, 1543 | { 1544 | code: '40319', 1545 | office: 'Mfangano' 1546 | }, 1547 | { 1548 | code: '80313', 1549 | office: 'Mgambonyi' 1550 | }, 1551 | { 1552 | code: '80306', 1553 | office: 'Mgange' 1554 | }, 1555 | { 1556 | code: '60604', 1557 | office: 'Miathene' 1558 | }, 1559 | { 1560 | code: '90402', 1561 | office: 'Migwani' 1562 | }, 1563 | { 1564 | code: '20301', 1565 | office: 'Miharati' 1566 | }, 1567 | { 1568 | code: '60607', 1569 | office: 'Mikinduri' 1570 | }, 1571 | { 1572 | code: '50138', 1573 | office: 'Milimani' 1574 | }, 1575 | { 1576 | code: '20123', 1577 | office: 'Milton Siding' 1578 | }, 1579 | { 1580 | code: '20124', 1581 | office: 'Mirangine' 1582 | }, 1583 | { 1584 | code: '40320', 1585 | office: 'Mirogi' 1586 | }, 1587 | { 1588 | code: '50207', 1589 | office: 'Misikhu' 1590 | }, 1591 | { 1592 | code: '90104', 1593 | office: 'Mitaboni' 1594 | }, 1595 | { 1596 | code: '60204', 1597 | office: 'Mitunguu' 1598 | }, 1599 | { 1600 | code: '90112', 1601 | office: 'Miu' 1602 | }, 1603 | { 1604 | code: '80106', 1605 | office: 'Mkomani' 1606 | }, 1607 | { 1608 | code: '00519', 1609 | office: 'Mlolongo' 1610 | }, 1611 | { 1612 | code: '00620', 1613 | office: 'Mobil Plaza' 1614 | }, 1615 | { 1616 | code: '70102', 1617 | office: 'Modo Gashe' 1618 | }, 1619 | { 1620 | code: '20403', 1621 | office: 'Mogogosiek' 1622 | }, 1623 | { 1624 | code: '20105', 1625 | office: 'Mogotio' 1626 | }, 1627 | { 1628 | code: '80115', 1629 | office: 'Moi Airport' 1630 | }, 1631 | { 1632 | code: '30107', 1633 | office: 'Moi University' 1634 | }, 1635 | { 1636 | code: '30202', 1637 | office: 'Mois Bridge' 1638 | }, 1639 | { 1640 | code: '30104', 1641 | office: 'Moiben' 1642 | }, 1643 | { 1644 | code: '40510', 1645 | office: 'Mokomoni' 1646 | }, 1647 | { 1648 | code: '80502', 1649 | office: 'Mokowe' 1650 | }, 1651 | { 1652 | code: '20106', 1653 | office: 'Molo' 1654 | }, 1655 | { 1656 | code: '80100', 1657 | office: 'Mombasa G.P.O' 1658 | }, 1659 | { 1660 | code: '30307', 1661 | office: 'Mosoriot' 1662 | }, 1663 | { 1664 | code: '60700', 1665 | office: 'Moyale' 1666 | }, 1667 | { 1668 | code: '80503', 1669 | office: 'Mpeketoni' 1670 | }, 1671 | { 1672 | code: '80404', 1673 | office: 'Msambweni' 1674 | }, 1675 | { 1676 | code: '90128', 1677 | office: 'Mtitu Andei' 1678 | }, 1679 | { 1680 | code: '80111', 1681 | office: 'Mtongwe' 1682 | }, 1683 | { 1684 | code: '80117', 1685 | office: 'Mtopanga' 1686 | }, 1687 | { 1688 | code: '80109', 1689 | office: 'Mtwapa' 1690 | }, 1691 | { 1692 | code: '50423', 1693 | office: 'Mubwayo' 1694 | }, 1695 | { 1696 | code: '10129', 1697 | office: 'Mugunda' 1698 | }, 1699 | { 1700 | code: '40107', 1701 | office: 'Muhoroni' 1702 | }, 1703 | { 1704 | code: '40409', 1705 | office: 'Muhuru Bay' 1706 | }, 1707 | { 1708 | code: '50225', 1709 | office: 'Mukhe' 1710 | }, 1711 | { 1712 | code: '10103', 1713 | office: 'Mukurweini' 1714 | }, 1715 | { 1716 | code: '50102', 1717 | office: 'Mumias' 1718 | }, 1719 | { 1720 | code: '10200', 1721 | office: 'Muranga' 1722 | }, 1723 | { 1724 | code: '50125', 1725 | office: 'Musanda' 1726 | }, 1727 | { 1728 | code: '90211', 1729 | office: 'Mutha' 1730 | }, 1731 | { 1732 | code: '00619', 1733 | office: 'Muthaiga' 1734 | }, 1735 | { 1736 | code: '60605', 1737 | office: 'Muthara' 1738 | }, 1739 | { 1740 | code: '90113', 1741 | office: 'Muthetheni' 1742 | }, 1743 | { 1744 | code: '90117', 1745 | office: 'Mutituni' 1746 | }, 1747 | { 1748 | code: '90201', 1749 | office: 'Mutomo' 1750 | }, 1751 | { 1752 | code: '40628', 1753 | office: 'Mutumbu' 1754 | }, 1755 | { 1756 | code: '90102', 1757 | office: 'Mwala' 1758 | }, 1759 | { 1760 | code: '80305', 1761 | office: 'Mwatate' 1762 | }, 1763 | { 1764 | code: '10104', 1765 | office: 'Mweiga' 1766 | }, 1767 | { 1768 | code: '90400', 1769 | office: 'Mwingi' 1770 | }, 1771 | { 1772 | code: '50226', 1773 | office: 'Myanga' 1774 | }, 1775 | { 1776 | code: '20504', 1777 | office: 'Nairage Enkare' 1778 | }, 1779 | { 1780 | code: '20142', 1781 | office: 'Naishi' 1782 | }, 1783 | { 1784 | code: '50211', 1785 | office: 'Naitiri' 1786 | }, 1787 | { 1788 | code: '20117', 1789 | office: 'Naivasha' 1790 | }, 1791 | { 1792 | code: '20100', 1793 | office: 'Nakuru' 1794 | }, 1795 | { 1796 | code: '00207', 1797 | office: 'Namanga' 1798 | }, 1799 | { 1800 | code: '50127', 1801 | office: 'Nambacha' 1802 | }, 1803 | { 1804 | code: '50409', 1805 | office: 'Nambale' 1806 | }, 1807 | { 1808 | code: '30301', 1809 | office: 'Nandi Hills' 1810 | }, 1811 | { 1812 | code: '40615', 1813 | office: 'Nango' 1814 | }, 1815 | { 1816 | code: '10400', 1817 | office: 'Nanyuki' 1818 | }, 1819 | { 1820 | code: '10105', 1821 | office: 'Naro Moru' 1822 | }, 1823 | { 1824 | code: '20500', 1825 | office: 'Narok' 1826 | }, 1827 | { 1828 | code: '90118', 1829 | office: 'Ndalani' 1830 | }, 1831 | { 1832 | code: '50212', 1833 | office: 'Ndalu' 1834 | }, 1835 | { 1836 | code: '20404', 1837 | office: 'Ndanai' 1838 | }, 1839 | { 1840 | code: '20306', 1841 | office: 'Ndaragwa' 1842 | }, 1843 | { 1844 | code: '00229', 1845 | office: 'Nderu' 1846 | }, 1847 | { 1848 | code: '40302', 1849 | office: 'Ndhiwa' 1850 | }, 1851 | { 1852 | code: '01016', 1853 | office: 'Ndithini' 1854 | }, 1855 | { 1856 | code: '90202', 1857 | office: 'Ndooa' 1858 | }, 1859 | { 1860 | code: '40602', 1861 | office: 'Ndori' 1862 | }, 1863 | { 1864 | code: '20317', 1865 | office: 'Ndunyu Njeru' 1866 | }, 1867 | { 1868 | code: '80311', 1869 | office: 'Ngambwa' 1870 | }, 1871 | { 1872 | code: '40603', 1873 | office: 'Ngiya' 1874 | }, 1875 | { 1876 | code: '00600', 1877 | office: 'Ngara Road' 1878 | }, 1879 | { 1880 | code: '00218', 1881 | office: 'Ngecha' 1882 | }, 1883 | { 1884 | code: '00901', 1885 | office: 'Ngewa' 1886 | }, 1887 | { 1888 | code: '30404', 1889 | office: 'Nginyang' 1890 | }, 1891 | { 1892 | code: '00208', 1893 | office: 'Ngong Hills' 1894 | }, 1895 | { 1896 | code: '00505', 1897 | office: 'Ngong Road' 1898 | }, 1899 | { 1900 | code: '90407', 1901 | office: 'Nguni' 1902 | }, 1903 | { 1904 | code: '90129', 1905 | office: 'Ngwata' 1906 | }, 1907 | { 1908 | code: '20107', 1909 | office: 'Njoro' 1910 | }, 1911 | { 1912 | code: '60214', 1913 | office: 'Nkondi' 1914 | }, 1915 | { 1916 | code: '60202', 1917 | office: 'Nkubu' 1918 | }, 1919 | { 1920 | code: '20318', 1921 | office: 'North-Kinangop' 1922 | }, 1923 | { 1924 | code: '90130', 1925 | office: 'Nunguni' 1926 | }, 1927 | { 1928 | code: '40124', 1929 | office: 'Nyabondo' 1930 | }, 1931 | { 1932 | code: '20300', 1933 | office: 'Nyahururu' 1934 | }, 1935 | { 1936 | code: '80118', 1937 | office: 'Nyali.' 1938 | }, 1939 | { 1940 | code: '40203', 1941 | office: 'Nyamache' 1942 | }, 1943 | { 1944 | code: '40206', 1945 | office: 'Nyamarambe' 1946 | }, 1947 | { 1948 | code: '40205', 1949 | office: 'Nyambunwa' 1950 | }, 1951 | { 1952 | code: '40500', 1953 | office: 'Nyamira' 1954 | }, 1955 | { 1956 | code: '40632', 1957 | office: 'Nyamonye' 1958 | }, 1959 | { 1960 | code: '40333', 1961 | office: 'Nyandhiwa' 1962 | }, 1963 | { 1964 | code: '40126', 1965 | office: 'Nyangande' 1966 | }, 1967 | { 1968 | code: '40127', 1969 | office: 'Nyangori' 1970 | }, 1971 | { 1972 | code: '40218', 1973 | office: 'Nyangusu' 1974 | }, 1975 | { 1976 | code: '40311', 1977 | office: 'Nyangweso' 1978 | }, 1979 | { 1980 | code: '40502', 1981 | office: 'Nyansiongo' 1982 | }, 1983 | { 1984 | code: '40514', 1985 | office: 'Nyaramba' 1986 | }, 1987 | { 1988 | code: '40402', 1989 | office: 'Nyatike' 1990 | }, 1991 | { 1992 | code: '00506', 1993 | office: 'Nyayo Stadium' 1994 | }, 1995 | { 1996 | code: '10100', 1997 | office: 'Nyeri' 1998 | }, 1999 | { 2000 | code: '40611', 2001 | office: 'Nyilima' 2002 | }, 2003 | { 2004 | code: '90136', 2005 | office: 'Nzeeka' 2006 | }, 2007 | { 2008 | code: '90143', 2009 | office: 'Nziu' 2010 | }, 2011 | { 2012 | code: '40204', 2013 | office: 'Ogembo' 2014 | }, 2015 | { 2016 | code: '40323', 2017 | office: 'Ogongo' 2018 | }, 2019 | { 2020 | code: '90301', 2021 | office: 'Okia' 2022 | }, 2023 | { 2024 | code: '20303', 2025 | office: 'Ol-Kalou' 2026 | }, 2027 | { 2028 | code: '20302', 2029 | office: 'Oljoro-Orok' 2030 | }, 2031 | { 2032 | code: '20503', 2033 | office: 'Ololulunga' 2034 | }, 2035 | { 2036 | code: '20152', 2037 | office: 'Olenguruone' 2038 | }, 2039 | { 2040 | code: '40221', 2041 | office: 'Omogonchoro' 2042 | }, 2043 | { 2044 | code: '00511', 2045 | office: 'Ongata Rongai' 2046 | }, 2047 | { 2048 | code: '30602', 2049 | office: 'Ortum' 2050 | }, 2051 | { 2052 | code: '10106', 2053 | office: 'Othaya' 2054 | }, 2055 | { 2056 | code: '40222', 2057 | office: 'Oyugis' 2058 | }, 2059 | { 2060 | code: '40111', 2061 | office: 'Pap-Onditi' 2062 | }, 2063 | { 2064 | code: '00623', 2065 | office: 'Parklands' 2066 | }, 2067 | { 2068 | code: '40131', 2069 | office: 'Paw Akuche' 2070 | }, 2071 | { 2072 | code: '50410', 2073 | office: 'Port Victoria' 2074 | }, 2075 | { 2076 | code: '40132', 2077 | office: 'Rabuor' 2078 | }, 2079 | { 2080 | code: '40604', 2081 | office: 'Ragengni' 2082 | }, 2083 | { 2084 | code: '40412', 2085 | office: 'Ranen' 2086 | }, 2087 | { 2088 | code: '40303', 2089 | office: 'Rangwe' 2090 | }, 2091 | { 2092 | code: '40403', 2093 | office: 'Rapogi' 2094 | }, 2095 | { 2096 | code: '40137', 2097 | office: 'Ratta' 2098 | }, 2099 | { 2100 | code: '40133', 2101 | office: 'Reru' 2102 | }, 2103 | { 2104 | code: '70302', 2105 | office: 'Rhamu' 2106 | }, 2107 | { 2108 | code: '40511', 2109 | office: 'Rigoma' 2110 | }, 2111 | { 2112 | code: '40512', 2113 | office: 'Riochanda' 2114 | }, 2115 | { 2116 | code: '40220', 2117 | office: 'Riosiri' 2118 | }, 2119 | { 2120 | code: '40326', 2121 | office: 'Rodi Kopany' 2122 | }, 2123 | { 2124 | code: '00300', 2125 | office: 'Ronald Ngala St' 2126 | }, 2127 | { 2128 | code: '20108', 2129 | office: 'Rongai' 2130 | }, 2131 | { 2132 | code: '40404', 2133 | office: 'Rongo' 2134 | }, 2135 | { 2136 | code: '20204', 2137 | office: 'Roret' 2138 | }, 2139 | { 2140 | code: '00520', 2141 | office: 'Ruai' 2142 | }, 2143 | { 2144 | code: '00618', 2145 | office: 'Ruaraka' 2146 | }, 2147 | { 2148 | code: '00232', 2149 | office: 'Ruiru' 2150 | }, 2151 | { 2152 | code: '20321', 2153 | office: 'Rumuruti' 2154 | }, 2155 | { 2156 | code: '60103', 2157 | office: 'Runyenjes' 2158 | }, 2159 | { 2160 | code: '20313', 2161 | office: 'Rurii' 2162 | }, 2163 | { 2164 | code: '10133', 2165 | office: 'Ruringu' 2166 | }, 2167 | { 2168 | code: '10208', 2169 | office: 'Saba-Saba' 2170 | }, 2171 | { 2172 | code: '80308', 2173 | office: 'Sagalla' 2174 | }, 2175 | { 2176 | code: '10230', 2177 | office: 'Sagana' 2178 | }, 2179 | { 2180 | code: '80120', 2181 | office: 'Samburu' 2182 | }, 2183 | { 2184 | code: '40405', 2185 | office: 'Sare' 2186 | }, 2187 | { 2188 | code: '00606', 2189 | office: 'Sarit Centre' 2190 | }, 2191 | { 2192 | code: '40612', 2193 | office: 'Sawagongo' 2194 | }, 2195 | { 2196 | code: '40614', 2197 | office: 'Sega' 2198 | }, 2199 | { 2200 | code: '50308', 2201 | office: 'Serem' 2202 | }, 2203 | { 2204 | code: '30407', 2205 | office: 'Seretunin' 2206 | }, 2207 | { 2208 | code: '50106', 2209 | office: 'Shianda' 2210 | }, 2211 | { 2212 | code: '80407', 2213 | office: 'Shimba Hills' 2214 | }, 2215 | { 2216 | code: '80409', 2217 | office: 'Shimoni' 2218 | }, 2219 | { 2220 | code: '50107', 2221 | office: 'Shinyalu' 2222 | }, 2223 | { 2224 | code: '60104', 2225 | office: 'Siakago' 2226 | }, 2227 | { 2228 | code: '40600', 2229 | office: 'Siaya' 2230 | }, 2231 | { 2232 | code: '40605', 2233 | office: 'Sidindi' 2234 | }, 2235 | { 2236 | code: '40635', 2237 | office: 'Sigomre' 2238 | }, 2239 | { 2240 | code: '20405', 2241 | office: 'Sigor' 2242 | }, 2243 | { 2244 | code: '20422', 2245 | office: 'Silibwet' 2246 | }, 2247 | { 2248 | code: '40308', 2249 | office: 'Sindo' 2250 | }, 2251 | { 2252 | code: '20423', 2253 | office: 'Siongiroi' 2254 | }, 2255 | { 2256 | code: '50208', 2257 | office: 'Sirisia' 2258 | }, 2259 | { 2260 | code: '20128', 2261 | office: 'Solai' 2262 | }, 2263 | { 2264 | code: '40109', 2265 | office: 'Sondu' 2266 | }, 2267 | { 2268 | code: '40110', 2269 | office: 'Songhor' 2270 | }, 2271 | { 2272 | code: '20205', 2273 | office: 'Sosiot' 2274 | }, 2275 | { 2276 | code: '20406', 2277 | office: 'Sotik' 2278 | }, 2279 | { 2280 | code: '20319', 2281 | office: 'South-Kinangop' 2282 | }, 2283 | { 2284 | code: '30105', 2285 | office: 'Soy' 2286 | }, 2287 | { 2288 | code: '40418', 2289 | office: 'Suba-Kuria' 2290 | }, 2291 | { 2292 | code: '20109', 2293 | office: 'Subukia' 2294 | }, 2295 | { 2296 | code: '20602', 2297 | office: 'Suguta Mar Mar' 2298 | }, 2299 | { 2300 | code: '20151', 2301 | office: 'Sulmac' 2302 | }, 2303 | { 2304 | code: '90132', 2305 | office: 'Sultan Hamud' 2306 | }, 2307 | { 2308 | code: '40400', 2309 | office: 'Suna' 2310 | }, 2311 | { 2312 | code: '40229', 2313 | office: 'Tabaka' 2314 | }, 2315 | { 2316 | code: '70303', 2317 | office: 'Takaba' 2318 | }, 2319 | { 2320 | code: '09013', 2321 | office: 'Tala' 2322 | }, 2323 | { 2324 | code: '30704', 2325 | office: 'Tambach' 2326 | }, 2327 | { 2328 | code: '80309', 2329 | office: 'Tausa' 2330 | }, 2331 | { 2332 | code: '80302', 2333 | office: 'Taveta' 2334 | }, 2335 | { 2336 | code: '90133', 2337 | office: 'Tawa' 2338 | }, 2339 | { 2340 | code: '30405', 2341 | office: 'Tenges' 2342 | }, 2343 | { 2344 | code: '01000', 2345 | office: 'Thika' 2346 | }, 2347 | { 2348 | code: '10406', 2349 | office: 'Timau' 2350 | }, 2351 | { 2352 | code: '20110', 2353 | office: 'Timber Mills' 2354 | }, 2355 | { 2356 | code: '30108', 2357 | office: 'Timboroa' 2358 | }, 2359 | { 2360 | code: '50309', 2361 | office: 'Tiriki' 2362 | }, 2363 | { 2364 | code: '00400', 2365 | office: 'Tom Mboya St' 2366 | }, 2367 | { 2368 | code: '30707', 2369 | office: 'Tot' 2370 | }, 2371 | { 2372 | code: '90203', 2373 | office: 'Tulia' 2374 | }, 2375 | { 2376 | code: '60213', 2377 | office: 'Tunyai' 2378 | }, 2379 | { 2380 | code: '30106', 2381 | office: 'Turbo' 2382 | }, 2383 | { 2384 | code: '40606', 2385 | office: 'Ugunja' 2386 | }, 2387 | { 2388 | code: '00517', 2389 | office: 'Uhuru Gardens' 2390 | }, 2391 | { 2392 | code: '80400', 2393 | office: 'Ukunda' 2394 | }, 2395 | { 2396 | code: '40607', 2397 | office: 'Ukwala' 2398 | }, 2399 | { 2400 | code: '00222', 2401 | office: 'Uplands' 2402 | }, 2403 | { 2404 | code: '40608', 2405 | office: 'Uranga' 2406 | }, 2407 | { 2408 | code: '40228', 2409 | office: 'Uriri' 2410 | }, 2411 | { 2412 | code: '40609', 2413 | office: 'Usenge' 2414 | }, 2415 | { 2416 | code: '00605', 2417 | office: 'Uthiru' 2418 | }, 2419 | { 2420 | code: '50310', 2421 | office: 'Vihiga' 2422 | }, 2423 | { 2424 | code: '00621', 2425 | office: 'Village Market' 2426 | }, 2427 | { 2428 | code: '80119', 2429 | office: 'Vipingo' 2430 | }, 2431 | { 2432 | code: '80211', 2433 | office: 'Vitengeni' 2434 | }, 2435 | { 2436 | code: '00507', 2437 | office: 'Viwandani' 2438 | }, 2439 | { 2440 | code: '80300', 2441 | office: 'Voi' 2442 | }, 2443 | { 2444 | code: '60121', 2445 | office: 'Wachoro' 2446 | }, 2447 | { 2448 | code: '70200', 2449 | office: 'Wajir' 2450 | }, 2451 | { 2452 | code: '20603', 2453 | office: 'Wamba' 2454 | }, 2455 | { 2456 | code: '90103', 2457 | office: 'Wamunyu' 2458 | }, 2459 | { 2460 | code: '00614', 2461 | office: 'Wangige' 2462 | }, 2463 | { 2464 | code: '10303', 2465 | office: 'Wanguru' 2466 | }, 2467 | { 2468 | code: '20305', 2469 | office: 'Wanjohi' 2470 | }, 2471 | { 2472 | code: '80202', 2473 | office: 'Watamu' 2474 | }, 2475 | { 2476 | code: '50205', 2477 | office: 'Webuye' 2478 | }, 2479 | { 2480 | code: '30603', 2481 | office: 'Wei-Wei' 2482 | }, 2483 | { 2484 | code: '80303', 2485 | office: 'Werugha' 2486 | }, 2487 | { 2488 | code: '00800', 2489 | office: 'Westlands' 2490 | }, 2491 | { 2492 | code: '40141', 2493 | office: 'Winam (Kisumu Gpo Extn.)' 2494 | }, 2495 | { 2496 | code: '80504', 2497 | office: 'Witu' 2498 | }, 2499 | { 2500 | code: '50311', 2501 | office: 'Wodanga' 2502 | }, 2503 | { 2504 | code: '80304', 2505 | office: 'Wundanyi' 2506 | }, 2507 | { 2508 | code: '40610', 2509 | office: 'Yala' 2510 | }, 2511 | { 2512 | code: '00508', 2513 | office: 'Yaya Towers' 2514 | }, 2515 | { 2516 | code: '90134', 2517 | office: 'Yoani' 2518 | }, 2519 | { 2520 | code: '30214', 2521 | office: 'Ziwa' 2522 | }, 2523 | { 2524 | code: '90213', 2525 | office: 'Zombe' 2526 | } 2527 | ]; 2528 | -------------------------------------------------------------------------------- /src/server.ts: -------------------------------------------------------------------------------- 1 | import dotenv from 'dotenv'; 2 | 3 | dotenv.config(); 4 | 5 | import app from './app'; 6 | 7 | (async () => { 8 | app.listen(app.get('port')); 9 | console.log(`[Info] Server is listening on port ${app.get('port')}`); 10 | })(); 11 | -------------------------------------------------------------------------------- /src/utilities/debug.ts: -------------------------------------------------------------------------------- 1 | import env from '../env'; 2 | 3 | export function debug(message: string, ...args: unknown[]): void { 4 | if (env.debug) { 5 | console.log(message, ...args); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /tests/api_tests/county.test.ts: -------------------------------------------------------------------------------- 1 | import supertest from 'supertest'; 2 | import app from '../../src/app'; 3 | 4 | describe('GET => /api/v1/county', () => { 5 | const available_county_code = 40; // Update to a code present in counties 6 | const none_county = 99; 7 | 8 | before(() => { 9 | console.log('Server setup complete for county tests'); 10 | }); 11 | 12 | it('Should return 200', async function () { 13 | await supertest(app) 14 | .get(`/api/v1/county?county_code=${available_county_code}`) 15 | .expect(200); 16 | }); 17 | 18 | it('Should return 400', async function () { 19 | await supertest(app) 20 | .get(`/api/v1/county?county_code=${none_county}`) 21 | .expect(400); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /tests/api_tests/postal_codes.test.ts: -------------------------------------------------------------------------------- 1 | import supertest from 'supertest'; 2 | import app from '../../src/app'; 3 | 4 | describe('GET => /api/v1/postal_stations', () => { 5 | const correct_code = 1; 6 | const none_post_station = 99; 7 | 8 | it('Should return 200 ', async function () { 9 | await supertest(app) 10 | .get(`/api/v1/postal_stations?post_code=${correct_code}`) 11 | .expect(200, { 12 | post: { 13 | code: 1, 14 | name: 'Mombasa', 15 | capital: 'Mombasa (City)' 16 | }, 17 | status: 200 18 | }); 19 | }); 20 | 21 | // test for wrong post station 22 | it('Should return 400', async function () { 23 | await supertest(app) 24 | .get(`/api/v1/postal_stations?post_code=${none_post_station}`) 25 | .expect(400, { 26 | error: `Post station with the code ${none_post_station} not found`, 27 | status: 400 28 | }); 29 | }); 30 | }); 31 | -------------------------------------------------------------------------------- /tests/api_tests/wards.test.ts: -------------------------------------------------------------------------------- 1 | import supertest from 'supertest'; 2 | import app from '../../src/app'; 3 | 4 | describe('GET => /api/v1/wards', () => { 5 | const correct_ward = 40101; 6 | const none_ward = 99; 7 | 8 | it('Should return 200 ', async function () { 9 | await supertest(app) 10 | .get(`/api/v1/wards?ward_code=${correct_ward}`) 11 | .expect(200, { 12 | ward: { 13 | code: '40101', 14 | office: 'Ahero' 15 | }, 16 | status: 200 17 | }); 18 | }); 19 | 20 | // test for wrong county 21 | it('Should return 400', async function () { 22 | await supertest(app) 23 | .get(`/api/v1/wards?ward_code=${none_ward}`) 24 | .expect(400, { 25 | error: `Ward with the code ${none_ward} not found`, 26 | status: 400 27 | }); 28 | }); 29 | }); 30 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | /* Basic Options */ 4 | "incremental": true /* Enable incremental compilation */, 5 | "target": "ES2019" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */, 6 | "module": "commonjs" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */, 7 | // "lib": [], /* Specify library files to be included in the compilation. */ 8 | // "allowJs": true, /* Allow javascript files to be compiled. */ 9 | // "checkJs": true, /* Report errors in .js files. */ 10 | // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ 11 | // "declaration": true /* Generates corresponding '.d.ts' file. */, 12 | // "declarationMap": true /* Generates a sourcemap for each corresponding '.d.ts' file. */, 13 | "sourceMap": true /* Generates corresponding '.map' file. */, 14 | // "outFile": "./", /* Concatenate and emit output to single file. */ 15 | "outDir": "./dist" /* Redirect output structure to the directory. */, 16 | "rootDir": "src" /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */, 17 | "resolveJsonModule": true, 18 | // "composite": true, /* Enable project compilation */ 19 | "tsBuildInfoFile": "./.tsbuildinfo" /* Specify file to store incremental compilation information */, 20 | // "removeComments": true, /* Do not emit comments to output. */ 21 | // "noEmit": true, /* Do not emit outputs. */ 22 | // "importHelpers": true, /* Import emit helpers from 'tslib'. */ 23 | // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ 24 | // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ 25 | 26 | /* Strict Type-Checking Options */ 27 | "strict": true /* Enable all strict type-checking options. */, 28 | "noImplicitAny": true /* Raise error on expressions and declarations with an implied 'any' type. */, 29 | "strictNullChecks": true /* Enable strict null checks. */, 30 | "strictFunctionTypes": true /* Enable strict checking of function types. */, 31 | "strictBindCallApply": true /* Enable strict 'bind', 'call', and 'apply' methods on functions. */, 32 | "strictPropertyInitialization": true /* Enable strict checking of property initialization in classes. */, 33 | "noImplicitThis": true /* Raise error on 'this' expressions with an implied 'any' type. */, 34 | "alwaysStrict": true /* Parse in strict mode and emit "use strict" for each source file. */, 35 | 36 | /* Additional Checks */ 37 | // "noUnusedLocals": true, /* Report errors on unused locals. */ 38 | // "noUnusedParameters": true, /* Report errors on unused parameters. */ 39 | "noImplicitReturns": true /* Report error when not all code paths in function return a value. */, 40 | "noFallthroughCasesInSwitch": true /* Report errors for fallthrough cases in switch statement. */, 41 | 42 | /* Module Resolution Options */ 43 | "moduleResolution": "node" /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */, 44 | "baseUrl": "./dist" /* Base directory to resolve non-absolute module names. */, 45 | // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ 46 | // "typeRoots": [], /* List of folders to include type definitions from. */ 47 | // "types": [], /* Type declaration files to be included in compilation. */ 48 | // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ 49 | "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */, 50 | // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ 51 | // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ 52 | 53 | /* Source Map Options */ 54 | // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ 55 | // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ 56 | // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ 57 | // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ 58 | 59 | /* Experimental Options */ 60 | // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ 61 | // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ 62 | 63 | /* Advanced Options */ 64 | "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */ 65 | }, 66 | "include": ["./src/**/*"] 67 | } 68 | --------------------------------------------------------------------------------