# Owin

**Kind:** Service

**Source:** `Pams/API/Pams.API/Pams.API.csproj` (line 1)

**Part of:** [Pams](subsystem-pams)

NuGet package dependency

Owin is a NuGet package dependency in the `Pams.API` project that defines the interface between an HTTP host and middleware. It supports request processing in the API's legacy project configuration, allowing middleware and API components to exchange request data through the OWIN environment.

## Diagram

```mermaid
sequenceDiagram
    participant Client
    participant Host as OWIN Host
    participant Middleware
    participant Api as Pams.API

    Client->>Host: Send HTTP request
    Host->>Middleware: Create OWIN environment
    Middleware->>Api: Invoke API pipeline
    Api-->>Middleware: Return HTTP response
    Middleware-->>Client: Send HTTP response
```

## Usage

```ts
// OWIN runs on the server. A JavaScript client calls endpoints
// exposed by the Pams.API application through its OWIN pipeline.

async function getPamsData() {
  const response = await fetch("/api/pams", {
    headers: {
      Accept: "application/json",
    },
  });

  if (!response.ok) {
    throw new Error(`Pams.API request failed: ${response.status}`);
  }

  return response.json();
}

getPamsData().then((data) => {
  console.log(data);
});
```

## AI Coding Instructions

- Keep the `Owin` package reference aligned with the legacy `Pams.API.csproj` package format.
- Treat OWIN as a server-side dependency; do not add it to browser or TypeScript client code.
- Configure middleware in the API host startup path so it runs before API endpoint handling when required.
- Preserve the OWIN environment contract when adding middleware that reads or writes request and response data.
- Check compatibility between OWIN middleware packages and the host configuration before updating package versions.
