# Class LegislativeClient

Sub-client for legislative procedures and adopted-texts EP API endpoints.

#### Hierarchy (View Summary)

- BaseEPClient
  - LegislativeClient

- Defined in clients/ep/legislativeClient.ts:35

##### Index

### Constructors

constructor

### Properties

baseURL
cache
enableRetry
maxResponseBytes
maxRetries
rateLimiter
timeoutMs

### Methods

clearCache
evictFromCache
get
getAdoptedTextById
getAdoptedTexts
getAdoptedTextsFeed
getCacheStats
getProcedureById
getProcedureEventById
getProcedureEvents
getProcedures
getProceduresFeed
transformAdoptedText
transformEvent
transformProcedure

## Constructors

### constructor

- new LegislativeClient(
  config?: EPClientConfig,
  shared?: EPSharedResources,
  ): LegislativeClient

  #### Parameters

  - config: EPClientConfig = {}
  - `Optional` shared: EPSharedResources

  #### Returns LegislativeClient

  Overrides BaseEPClient.constructor

  - Defined in clients/ep/legislativeClient.ts:36

## Properties

### `Protected` `Readonly` baseURL

baseURL: string

European Parliament API base URL.

Inherited from BaseEPClient.baseURL

- Defined in clients/ep/baseClient.ts:217

### `Protected` `Readonly` cache

cache: LRUCache<string, Record<string, unknown>>

LRU cache for API responses.

Inherited from BaseEPClient.cache

- Defined in clients/ep/baseClient.ts:215

### `Protected` `Readonly` enableRetry

enableRetry: boolean

Enable automatic retry on transient failures.

Inherited from BaseEPClient.enableRetry

- Defined in clients/ep/baseClient.ts:223

### `Protected` `Readonly` maxResponseBytes

maxResponseBytes: number

Maximum allowed response body size in bytes.

Inherited from BaseEPClient.maxResponseBytes

- Defined in clients/ep/baseClient.ts:227

### `Protected` `Readonly` maxRetries

maxRetries: number

Maximum number of retry attempts.

Inherited from BaseEPClient.maxRetries

- Defined in clients/ep/baseClient.ts:225

### `Protected` `Readonly` rateLimiter

rateLimiter: RateLimiter

Token bucket rate limiter.

Inherited from BaseEPClient.rateLimiter

- Defined in clients/ep/baseClient.ts:219

### `Protected` `Readonly` timeoutMs

timeoutMs: number

Request timeout in milliseconds.

Inherited from BaseEPClient.timeoutMs

- Defined in clients/ep/baseClient.ts:221

## Methods

### clearCache

- clearCache(): void

  Clears all entries from the LRU cache.

  #### Returns void

  Inherited from BaseEPClient.clearCache

  - Defined in clients/ep/baseClient.ts:666

### `Protected` evictFromCache

- evictFromCache(endpoint: string, params?: Record<string, unknown>): void

  Evicts a single cache entry matching the given endpoint and params. Sub-clients use this when they detect that a successfully-fetched payload is a content-pending sentinel that must not be served from cache for the remainder of the TTL — eviction lets availability recover as soon as the upstream document is enriched.

  #### Parameters

  - endpoint: string

    API endpoint path (same value passed to get)

  - `Optional` params: Record<string, unknown>

    Optional query parameters (same value passed to get)

  #### Returns void

  #### Protected

  Inherited from BaseEPClient.evictFromCache

  - Defined in clients/ep/baseClient.ts:681

### `Protected` get

- get<T extends Record<string, unknown>>(
  endpoint: string,
  params?: Record<string, unknown>,
  minimumTimeoutMs?: number,
  ): Promise<T>

  Executes a cached, rate-limited GET request to the EP API.

  #### Type Parameters

  - T extends Record<string, unknown>

    Expected response type (extends `Record<string, unknown>`)

  #### Parameters

  - endpoint: string

    API endpoint path (relative to `baseURL`)

  - `Optional` params: Record<string, unknown>

    Optional query parameters

  - `Optional` minimumTimeoutMs: number

    Optional per-request minimum timeout in milliseconds. When provided, the effective timeout is `Math.max(minimumTimeoutMs, this.timeoutMs)`, so the global timeout (set via `--timeout` or `EP_REQUEST_TIMEOUT_MS`) can still extend it beyond the per-endpoint minimum. Use for known slow EP API endpoints such as `procedures/feed`.

  #### Returns Promise<T>

  Promise resolving to the typed API response

  #### Throws

  On HTTP errors, network failures, or parse failures

  #### Protected

  Inherited from BaseEPClient.get

  - Defined in clients/ep/baseClient.ts:606

### getAdoptedTextById

- getAdoptedTextById(docId: string): Promise<AdoptedText>

  Returns a single adopted text by document ID. EP API Endpoint: `GET /adopted-texts/{doc-id}`

  Content-pending detection: The EP Open Data Portal will sometimes respond with HTTP 200 for a document that is indexed in the feed but whose detail enrichment has not yet completed — every transformable field comes back empty. Returning that shape to callers would emit a response that passes JSON-schema validation but carries no data, leading to blank titles/dates/references being rendered downstream. We treat this sentinel as a 404 so callers get the same error semantics they would for a truly missing document, and we also evict the cached empty payload so availability recovers as soon as the upstream document is enriched (instead of blocking for the full cache TTL).

  #### Parameters

  - docId: string

  #### Returns Promise<AdoptedText>

  #### Throws

  400 when `docId` is empty or whitespace.

  #### Throws

  404 in two cases:

  - the upstream returns HTTP 404 because no document exists for `docId` (re-thrown by BaseEPClient.get); or
  - the upstream returns HTTP 200 but every transformable field is empty (the indexed-but-content-pending sentinel detected here).
  - Defined in clients/ep/legislativeClient.ts:262

### getAdoptedTexts

- getAdoptedTexts(
  params?: { limit?: number; offset?: number; year?: number },
  ): Promise<PaginatedResponse<AdoptedText>>

  Returns adopted texts. EP API Endpoint: `GET /adopted-texts`

  #### Parameters

  - params: { limit?: number; offset?: number; year?: number } = {}

    year, limit, offset

  #### Returns Promise<PaginatedResponse<AdoptedText>>

  - Defined in clients/ep/legislativeClient.ts:145

### getAdoptedTextsFeed

- getAdoptedTextsFeed(
  params?: { startDate?: string; timeframe?: string; workType?: string },
  ): Promise<JSONLDResponse<Record<string, unknown>>>

  Retrieves recently updated adopted texts via the feed endpoint. EP API Endpoint: `GET /adopted-texts/feed`

  Configurable-window feed. Extended timeout applied for `one-month`.

  #### Parameters

  - params: { startDate?: string; timeframe?: string; workType?: string } = {}

  #### Returns Promise<JSONLDResponse<Record<string, unknown>>>

  - Defined in clients/ep/legislativeClient.ts:194

### getCacheStats

- getCacheStats(): {
  hitRate: number;
  hits: number;
  maxSize: number;
  misses: number;
  size: number;
  }

  Returns cache statistics for monitoring and debugging.

  #### Returns { hitRate: number; hits: number; maxSize: number; misses: number; size: number }

  `{ size, maxSize, hitRate, hits, misses }`

  Inherited from BaseEPClient.getCacheStats

  - Defined in clients/ep/baseClient.ts:690

### getProcedureById

- getProcedureById(processId: string): Promise<Procedure>

  Returns a single procedure by ID.

  The EP API wraps single-item responses in a JSON-LD `data` array, so this method extracts `data[0]` before transforming.

  EP API Endpoint: `GET /procedures/{process-id}`

  #### Parameters

  - processId: string

    Procedure process-id in `"YYYY-NNNN"` format (e.g. `"2024-0006"`). This is different from the human-readable `Procedure.id` (`"COD/YYYY/NNNN"`) or `Procedure.reference` (`"YYYY/NNNN(COD)"`) fields.

  #### Returns Promise<Procedure>

  #### Throws

  When the procedure is not found (404)

  - Defined in clients/ep/legislativeClient.ts:96

### getProcedureEventById

- getProcedureEventById(processId: string, eventId: string): Promise<EPEvent>

  Returns a single event within a procedure by event ID. EP API Endpoint: `GET /procedures/{process-id}/events/{event-id}`

  #### Parameters

  - processId: string

    Procedure process ID

  - eventId: string

    Event identifier within the procedure

  #### Returns Promise<EPEvent>

  - Defined in clients/ep/legislativeClient.ts:217

### getProcedureEvents

- getProcedureEvents(
  processId: string,
  params?: { limit?: number; offset?: number },
  ): Promise<PaginatedResponse<EPEvent>>

  Returns events linked to a procedure. EP API Endpoint: `GET /procedures/{process-id}/events`

  #### Parameters

  - processId: string

    Procedure process ID

  - params: { limit?: number; offset?: number } = {}

    limit, offset

  #### Returns Promise<PaginatedResponse<EPEvent>>

  - Defined in clients/ep/legislativeClient.ts:118

### getProcedures

- getProcedures(
  params?: { limit?: number; offset?: number },
  ): Promise<PaginatedResponse<Procedure>>

  Returns legislative procedures. EP API Endpoint: `GET /procedures`

  Note: The EP API `/procedures` endpoint does not support a `year` query parameter per the OpenAPI spec — it only has `process-type`. Callers needing year-specific counts must filter client-side.

  #### Parameters

  - params: { limit?: number; offset?: number } = {}

    limit, offset

  #### Returns Promise<PaginatedResponse<Procedure>>

  Paginated list of procedures

  - Defined in clients/ep/legislativeClient.ts:64

### getProceduresFeed

- getProceduresFeed(
  params?: {
  processType?: string;
  startDate?: string;
  timeframe?: string;
  },
  ): Promise<JSONLDResponse<Record<string, unknown>>>

  Retrieves recently updated procedures via the feed endpoint. EP API Endpoint: `GET /procedures/feed`

  Note: The EP API `procedures/feed` endpoint is significantly slower than other feed endpoints — it typically takes 25–40 s even for `one-week` and 120+ seconds for `one-month`. An extended minimum timeout of 120 s is always applied.

  #### Parameters

  - params: { processType?: string; startDate?: string; timeframe?: string } = {}

  #### Returns Promise<JSONLDResponse<Record<string, unknown>>>

  - Defined in clients/ep/legislativeClient.ts:175

### `Private` transformAdoptedText

- transformAdoptedText(apiData: Record<string, unknown>): AdoptedText

  #### Parameters

  - apiData: Record<string, unknown>

  #### Returns AdoptedText

  - Defined in clients/ep/legislativeClient.ts:44

### `Private` transformEvent

- transformEvent(apiData: Record<string, unknown>): EPEvent

  #### Parameters

  - apiData: Record<string, unknown>

  #### Returns EPEvent

  - Defined in clients/ep/legislativeClient.ts:48

### `Private` transformProcedure

- transformProcedure(apiData: Record<string, unknown>): Procedure

  #### Parameters

  - apiData: Record<string, unknown>

  #### Returns Procedure

  - Defined in clients/ep/legislativeClient.ts:40