Issue:
feat: decision manger for user flows

As we are going to split all the APIs, we need a way to get the next API that dashboard should go to using the current flow/origin.

We need a decision manager that can take the current flow and origin and give the next flow.

Resolution:
<think>
PR Context:
- Title: feat(users): Create Decision manager for User Flows
- Merged: 2024-05-02T15:12:54Z
- Files changed: 10 files
- Commits: 18 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
<!-- Describe your changes in detail -->
- This PR will enable APIs to get the next flow from the current flow.
- This PR will also add a query param which will enable to access the new flows.

### Additional Changes

- [x] This PR modifies the API contract
- [ ] This PR modifi
</think>

To implement this, you'll need to modify:


**Detailed Implementation:**


**Commit 1:** feat(users): Create Decision manager for User Flows (#4518)
Co-authored-by: hyperswitch-bot[bot] <14
Files to modify:


**crates/api_models/src/events/user.rs**
  Modify existing code

**crates/api_models/src/user.rs**
  Add:
    - struct: pub::TokenOnlyQueryParam
    - struct: pub::TokenResponse
    - enum: pub::SignInWithTokenResponse

**crates/common_enums/src/enums.rs**
  Add:
    - enum: pub::TokenPurpose

**crates/router/src/core/user.rs**
  Modify existing code

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

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

**crates/router/src/services/authentication.rs**
  Remove:
    - struct: pub::SinglePurposeJWTAuth
    - enum: pub::Purpose
  Add:
    - struct: pub::SinglePurposeJWTAuth

**crates/router/src/services/authentication/blacklist.rs**
  Modify existing code

**crates/router/src/types/domain/user.rs**
  Add:
    - function: pub::get_preferred_or_active_user_role_from_db
    - mod: pub::decision_manager

**crates/router/src/types/domain/user/decision_manager.rs**
  Add:
    - function: private::is_required
    - function: private::is_required
    - function: pub::generate_spt
    - function: private::is_required
    - function: pub::generate_jwt
    - function: private::get_flows
    - function: pub::new
    - function: pub::next
    - function: pub::from_origin
    - function: pub::get_flow
    - function: private::from
    - function: private::from
    - function: private::from
    - struct: pub::CurrentFlow
    - struct: pub::NextFlow
    - enum: pub::UserFlow
    - enum: pub::SPTFlow
    - enum: pub::JWTFlow
    - enum: pub::Origin
    - impl: impl UserFlow
    - impl: impl SPTFlow
    - impl: impl JWTFlow
    - impl: impl Origin
    - impl: impl CurrentFlow
    - impl: impl NextFlow
    - impl: impl From<UserFlow> for TokenPurpose
    - impl: impl From<SPTFlow> for TokenPurpose
    - impl: impl From<JWTFlow> for TokenPurpose