├── .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 | 
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 |
--------------------------------------------------------------------------------