Skip to main content

@w5s/http

W5S HTTP client module (@w5s/http)

NPM Version License

Installation

npm install @w5s/http

Usage

import { requestSend, HTTPError, ResponseParser, Client } from '@w5s/http';
import { Type } from '@w5s/core';
import { Task } from '@w5s/task';
import { TimeoutError } from '@w5s/error';

const client = Client();
const getText = (id: number) => ({
url: `http://localhost/${id}`,
});
const FooObject = Type.Object({
foo: Type.boolean,
});

declare function logDebug(message: unknown): Task<void, never>;
declare function logError(message: unknown): Task<void, never>;

export function program() {
const responseTask = requestSend(client, getText(123));
const parsed = Task.andThen(responseTask, ResponseParser.json(FooObject));
const log = Task.andThen(parsed, (response) => logDebug(response.foo));
const handled = Task.orElse(log, (error) => {
switch (error.name) {
case HTTPError.InvalidURL.errorName: {
return logError(`A wrong url was passed. Got ${error.input}`);
}
case HTTPError.NetworkError.errorName: {
return logError('A network error occurred');
}
case HTTPError.ParserError.errorName: {
return logError('A parser error occurred');
}
case TimeoutError.errorName: {
return logError('Operation timed out');
}
default: {
return logError('Unknown');
}
}
});

return handled;
}

Task.run(program()); // Result<{ foo: boolean }, FetchNetworkError|FetchParseError>

License

MIT © Julien Polo julien.polo@gmail.com

Index

Other

HTTPError

Union type of http client errors

Method

Method: string

ReferrerPolicy

ReferrerPolicy: Enum.ValueOf<typeof ReferrerPolicy>

RequestCache

RequestCache: Enum.ValueOf<typeof RequestCache>

RequestCredentials

RequestCredentials: Enum.ValueOf<typeof RequestCredentials>

RequestDestination

RequestDestination: Enum.ValueOf<typeof RequestDestination>

RequestRedirect

RequestRedirect: Enum.ValueOf<typeof RequestRedirect>

ResponseType

ResponseType: Enum.ValueOf<typeof ResponseType>

constReferrerPolicy

ReferrerPolicy: Enum<{ Empty: ; NoReferrer: no-referrer; NoReferrerWhenDowngrade: no-referrer-when-downgrade; Origin: origin; OriginWhenCrossOrigin: origin-when-cross-origin; SameOrigin: same-origin; StrictOrigin: strict-origin; StrictOriginWhenCrossOrigin: strict-origin-when-cross-origin; UnsafeURL: unsafe-url; typeName: ReferrerPolicy }> = ...

constRequestCache

RequestCache: Enum<{ Default: default; ForceCache: force-cache; NoCache: no-cache; NoStore: no-store; OnlyIfCached: only-if-cached; Reload: reload; typeName: RequestCache }> = ...

constRequestCredentials

RequestCredentials: Enum<{ Include: include; Omit: omit; SameOrigin: same-origin; typeName: RequestCredentials }> = ...

constRequestDestination

RequestDestination: Enum<{ Audio: audio; AudioWorklet: audioworklet; Document: document; Embed: embed; Empty: ; Font: font; Frame: frame; Iframe: iframe; Image: image; Manifest: manifest; Object: object; PaintWorklet: paintworklet; Report: report; Script: script; SharedWorker: sharedworker; Style: style; Track: track; Video: video; Worker: worker; XSLT: xslt; typeName: RequestDestination }> = ...

constRequestRedirect

RequestRedirect: Enum<{ Error: error; Follow: follow; Manual: manual; typeName: RequestRedirect }> = ...

constResponseType

ResponseType: Enum<{ Basic: basic; CORS: cors; Default: default; Error: error; Opaque: opaque; OpaqueRedirect: opaqueredirect }> = ...