An HTTP storage implementation.
For further insights, read on.
To install this library use your favorite package manager. No additional steps are required to start using the library.
npm install @n7e/storage-http
This library is implemented in TypeScript but can be used with JavaScript without any additional steps.
This implementation will make HTTP requests to list, retrieve, create, update
and remove entries. Locations will be appended to a configured base URL and the
URL scheme is ignored, so given the base URL: http://example.com/storage
the
operation...
const entry = await storageClient.get(new URL("file://some/file.txt"));
...will make a GET request to the following URL:
http://example.com/storage/some/file.txt
.
The provided StorageClientBuilder
implementation allows you to provide a
specific HTTP client instance, so every aspect of the requests being made can be
configured through HTTP client middleware.
To create an HTTP storage client use the provided StorageClientBuilder
implementation. The implementation depends on a RequestFactory
,
ResponseFactory
and a StreamFactory
. Since the @n7e/http library provides
default implementations of those factories here's an example of how to create
an HTTP storage client builder:
import {
DefaultRequestFactory,
DefaultResponseFactory,
DefaultStreamFactory,
DefaultUriFactory
} from "@n7e/http";
import { HttpStorageClientBuilder } from "@n7e/storage-http";
const streamFactory = new DefaultStreamFactory();
const requestFactory = new DefaultRequestFactory(new DefaultUriFactory());
const responseFactory = new DefaultResponseFactory(streamFactory);
const storageClientBuilder = new HttpStorageClientBuilder(requestFactory, responseFactory, streamFactory);
At a minimum you need to configure the base URL and storage entry factories. The storage entry factory procedures are used to create storage entries from HTTP responses.
storageClientBuilder
.withBaseUrl(new URL("http://example.com/storage"))
.withStorageEntryListFactory(async response => {
// Produce a list of storage entries from the HTTP response.
})
.withStorageEntryFactory(async response => {
// Produce a storage entry from the HTTP response.
});
When configured, build a storage client instance:
const storageClient = storageClientBuilder.build();