1.1.0 • Published 4 months ago

smithy-node-native-fetch v1.1.0

Weekly downloads
-
License
Apache-2.0
Repository
github
Last release
4 months ago

smithy-node-native-fetch codecov

Node.js 18+ optimized native fetch support for Smithy clients like AWS SDK v3

Why

Smithy (and so AWS SDK) provides fetch request handler only for browsers with a lot of compatibility workarounds and yet it doesn't work in modern Node.js runtimes with native global fetch and web streams support.

Node 18+ fetch is based on undici which benchmarks as top performing HTTP/1.1 client for Node. In additional, using native fetch with AWS SDK allows to prepare to the moment when in Node.js response.Body may be a standard web stream also.

This handler also allows you to use modern request mocking tooling such as msw 2.x or undici global dispatcher (see tests for this module).

Usage

Simplest way with default settings (keepAlive is enabled and no timeout set) is as below:

import { S3Client } from "@aws-sdk/client-s3";
import * as nodeNativeFetch from "smithy-node-native-fetch";

const s3 = new S3Client({
  retryMode: "adaptive", // or whatever else settings
  ...nodeNativeFetch,
});

If you want to customize settings then use specific imports:

import { S3Client } from "@aws-sdk/client-s3";
import {
  sdkStreamMixin,
  streamCollector,
  NodeNativeFetchHttpHandler,
} from "./fetch-http-handler";

const s3 = new S3Client({
  retryMode: "adaptive", // or whatever else settings
  requestHandler: new NodeNativeFetchHttpHandler({
    requestTimeout: 5000, // default is no timeout
    keepAlive: true, // default is false
  }),
  sdkStreamMixin,
  streamCollector,
});

Usage with CDK / Lambda

This modules also provides two small AWS CDK construct to simplify it's usage on AWS Lambda:

  • SmithyNodeNativeFetchLayer - deploys lambda layer with this module
  • SmithyNodeNativeAspect - an Aspect that deploys a singleton lambda layer and automatically add it to all supported lambda in a scope.

Use is as below:

import * as cdk from "aws-cdk-lib";
import { SmithyNodeNativeAspect } from "smithy-node-native-fetch/cdk";

const app = new cdk.App();
cdk.Aspects.of(app).add(new SmithyNodeNativeAspect());
1.1.0

4 months ago

1.0.6

4 months ago

1.0.5

5 months ago

1.0.4

5 months ago

1.0.2

5 months ago

1.0.1

5 months ago

1.0.0

5 months ago