Issue:
[FEATURE] Recon APIs

### Feature Description

Add recon related APIs in HyperSwitch for managing recon module for the consumers. Recon dashboard is a separate application hosted at https://sandbox.hyperswitch.io/recon-dashboard/

Recon module in HyperSwitch should be able to perform below tasks
- Toggle recon module for a given merchant
- Generate tokens for Recon dashboard login
- Let admins modify the state of recon related stuff for a given merchant
- Verify the generated token

### Possible Implementation

Below endpoints are exposed for performing the required tasks

- `/recon/update_merchant` - admin API call for updating any recon related field for a given merchant.
- `/recon/token` - request a token for an user which is used for logging into Recon's dashboard.
- `/recon/request` - let's user send a mail to HS team for enabling recon for their merchant's account.
- `/recon/verify_token` - validate a generated token.


### Have you spent some time checking if this feature request has been raised before?

- [X] I checked and didn't find a similar issue

### Have you read the Contributing Guidelines?

- [X] I have read the [Contributing Guidelines](https://github.com/juspay/hyperswitch/blob/main/docs/CONTRIBUTING.md)

### Are you willing to submit a PR?

Yes, I am willing to submit a PR!

Resolution:
<think>
PR Context:
- Title: feat(recon): add recon APIs
- Merged: 2024-01-16T11:22:00Z
- Files changed: 22 files
- Commits: 7 commits

Implementation approach:
## Type of Change
<!-- Put an `x` in the boxes that apply -->

- [ ] Bugfix
- [x] New feature
- [ ] Enhancement
- [ ] Refactoring
- [ ] Dependency updates
- [ ] Documentation
- [ ] CI/CD

## Description
This PR adds recon APIs for activating recon as a feature on HyperSwitch dashboard and generating tokens for Recon dashboard.

Issue - #3359 

### Additional Changes

- [ ] This PR modifies the API contract
- [ ] This PR modifies the database schema
- [ ] This PR modifies appl
</think>

To implement this, you'll need to modify:


**Detailed Implementation:**


**Commit 1:** feat(recon): add recon APIs (#3345)
Co-authored-by: Kashif <mohammed.kashif@juspay.in>
Co-authored-b
Files to modify:


**crates/api_models/src/events.rs**
  Add:
    - mod: pub::recon

**crates/api_models/src/events/recon.rs**
  Add:
    - function: private::get_api_event_type
    - function: private::get_api_event_type
    - function: private::get_api_event_type
    - impl: impl ApiEventMetric for ReconUpdateMerchantRequest
    - impl: impl ApiEventMetric for ReconTokenResponse
    - impl: impl ApiEventMetric for ReconStatusResponse

**crates/api_models/src/events/user.rs**
  Add:
    - function: private::get_api_event_type
    - impl: impl ApiEventMetric for VerifyTokenResponse

**crates/api_models/src/lib.rs**
  Add:
    - mod: pub::recon

**crates/api_models/src/recon.rs**
  Add:
    - struct: pub::ReconUpdateMerchantRequest
    - struct: pub::ReconTokenResponse
    - struct: pub::ReconStatusResponse

**crates/api_models/src/user.rs**
  Add:
    - struct: pub::VerifyTokenResponse

**crates/common_utils/src/events.rs**
  Modify existing code

**crates/router/src/core/user.rs**
  Add:
    - function: pub::verify_token

**crates/router/src/lib.rs**
  Modify existing code

**crates/router/src/routes.rs**
  Add:
    - mod: pub::recon

**crates/router/src/routes/app.rs**
  Add:
    - function: pub::server
    - struct: pub::Recon
    - impl: impl Recon

**crates/router/src/routes/lock_utils.rs**
  Modify existing code

**crates/router/src/routes/recon.rs**
  Add:
    - function: pub::update_merchant
    - function: pub::request_for_recon
    - function: pub::get_recon_token
    - function: pub::send_recon_request
    - function: pub::recon_merchant_account_update
    - function: pub::generate_recon_token
    - function: pub::get_recon_auth_token

**crates/router/src/routes/user.rs**
  Add:
    - function: pub::verify_recon_token

**crates/router/src/services.rs**
  Add:
    - mod: pub::recon

**crates/router/src/services/authentication.rs**
  Add:
    - function: pub::get_recon_admin_api_key
    - function: private::authenticate_and_fetch
    - function: private::get_merchant_id
    - function: private::authenticate_and_fetch
    - struct: pub::ReconAdmin
    - struct: pub::ReconJWT
    - struct: pub::ReconUser
    - impl: impl AuthenticateAndFetch<(), A> for ReconAdmin
    - impl: impl AuthInfo for ReconUser
    - impl: impl AuthenticateAndFetch<ReconUser, AppState> for ReconJWT

**crates/router/src/services/email/types.rs**
  Add:
    - function: private::get_email_data
    - function: private::get_email_data
    - struct: private::ReconActivation
    - struct: pub::ProFeatureRequest
    - impl: impl EmailData for ReconActivation
    - impl: impl EmailData for ProFeatureRequest

**crates/router/src/services/recon.rs**
  Add:
    - function: pub::new_token
    - struct: pub::ReconToken
    - impl: impl ReconToken

**crates/router_env/src/logger/types.rs**
  Modify existing code