# core/adapters/remote.adapter.ts

> 12 lines of code and 5 definitions.

Tree: GovLab Quality
Language: typescript
Layer: infrastructure
Canonical: https://banes-lab.com/anatomy/quality#file-quality-core-adapters-remote-adapter-ts
Source text: https://banes-lab.com/source/quality/core/adapters/remote.adapter.ts.txt

Listed in [core/adapters](https://banes-lab.com/api/source/quality/core/adapters.md), after [core/adapters/invocation.adapter.ts](https://banes-lab.com/source/quality/core/adapters/invocation.adapter.ts.md) and before [core/adapters/stylelint.adapter.ts](https://banes-lab.com/source/quality/core/adapters/stylelint.adapter.ts.md).

## Definitions

- `remoteText` (lexical_declaration, line 3, exported)
- `firstRemoteText` (lexical_declaration, line 8, exported)
- `HTTP_OK` (lexical_declaration, line 1)
- `response` (lexical_declaration, line 4, exported)
- `rest]` (lexical_declaration, line 9, exported)

## Contained in

- [core/adapters](https://banes-lab.com/anatomy/quality/folder-quality-core-adapters.md)

## Used by

- [core/producers/tool.scalastyle.producer.ts](https://banes-lab.com/source/quality/core/producers/tool.scalastyle.producer.ts.md)
- [core/producers/tool.sqlfluff.producer.ts](https://banes-lab.com/source/quality/core/producers/tool.sqlfluff.producer.ts.md)

## Linked from

- [core/adapters](https://banes-lab.com/anatomy/quality/folder-quality-core-adapters.md)
- [core/producers](https://banes-lab.com/anatomy/quality/folder-quality-core-producers.md)

## Source

```typescript
const HTTP_OK = 200;

export const remoteText = async function remoteText(url: string): Promise<string | null> {
    const response = await fetch(url);
    return response.status === HTTP_OK ? response.text() : null;
};

export const firstRemoteText = async function firstRemoteText(urls: readonly string[]): Promise<string | null> {
    const [url, ...rest] = urls;
    if (url === undefined) {
        return null;
    }
    return (await remoteText(url)) ?? firstRemoteText(rest);
};
```
