# @sullux/aws-sdk

> A wrapper for the woefully inadequate aws-sdk library from Amazon.

Latest version **1.0.5** (published 2020-11-25) · MIT license · 0 weekly downloads

## Install

```sh
npm install @sullux/aws-sdk
pnpm add @sullux/aws-sdk
yarn add @sullux/aws-sdk
bun add @sullux/aws-sdk
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.0.5 |
| Published | 2020-11-25 |
| First published | 2019-03-15 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Node | >=8.* |
| Dependencies | 0 |
| Unpacked size | 24.9 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | Charles Sullivan |
| Maintainers | sullux |
| Keywords | aws, sdk, amazon |

## Links

- npm: https://www.npmjs.com/package/@sullux/aws-sdk
- Repository: https://github.com/sullux/aws-sdk
- Homepage: https://github.com/Sullux/aws-sdk/blob/master/README.md
- Issues: https://github.com/sullux/aws-sdk/issues
- npm.io page: https://npm.io/package/@sullux/aws-sdk

## Alternatives

- [@opentelemetry/exporter-zipkin](https://npm.io/package/@opentelemetry/exporter-zipkin.md) — 14.8M weekly downloads
- [pusher-js](https://npm.io/package/pusher-js.md) — 2.0M weekly downloads
- [browserify](https://npm.io/package/browserify.md) — 1.7M weekly downloads
- [sqs-consumer](https://npm.io/package/sqs-consumer.md) — 1.7M weekly downloads
- [@sanity/eventsource](https://npm.io/package/@sanity/eventsource.md) — 930.8K weekly downloads

## Recent versions

- 1.0.5 (latest) — 2020-11-25
- 1.0.4 — 2019-10-08
- 1.0.3 — 2019-07-28
- 1.0.2 — 2019-07-28
- 1.0.1 — 2019-07-28
- 1.0.0 — 2019-07-04
- 0.0.4 — 2019-04-09
- 0.0.3 — 2019-03-16
- 0.0.2 — 2019-03-15
- 0.0.1 — 2019-03-15

## README

# @sullux/aws-sdk

This library is a wrapper for the woefully inadequate aws-sdk library from Amazon. This wrapper does the following:

* Adds a major performance enhancement as detailed in [this post on Medium](https://medium.com/theburningmonk-com/lambda-optimization-tip-enable-http-keep-alive-5c55810f70fe)
* Turns all classes into enumerable properties of the top-level instance,
* Eliminates the need for instantiation of classes,
* Turns all functions into enumerable properties that are properly bound,
* Automatically returns promises from all functions without the need to call the `.promise()` function
* Improves error feedback by including a meaningful stack trace and the name of the sdk function that was called, and
* Wraps the official AWS SDK so that new SDK features will be immediately available without waiting for updates to this wrapper library.

## Installation

To install:

```bash
npm i --save @sullux/aws-sdk
# or
yarn add @sullux/aws-sdk
```

NOTE: this library assumes you have the full AWS SDK already installed. If not, you will need to install it separately with `npm i --save aws-sdk`. If you are planning to deploy to Lambda, you can make the official SDK a _dev_ dependency instead of a primary dependency with `npm i --save-dev aws-sdk`. Either way, your app must be able to `require('aws-sdk')` in order for `require('@sullux/aws-sdk')` to work.

## Usage

Here are some quick usage examples.

```javascript
const aws = require('@sullux/aws-sdk')()

const logBuckets = async () => {
  const buckets = await aws.s3.listBuckets()
  console.log('Buckets:', buckets)
}

const logAllRecords = async (tableName) => {
  const scan = aws.dynamoDB.documentClient.scan
  const records = await scan({ TableName: tableName })
  console.log(tableName, 'Records:', records)
}
```

## How It Works

This library uses a combination of prototype iteration, just-in-time instantiation, and function wrapping to create a thin wrapper around the existing AWS SDK. Following is a before and after code example to help illustrate some of the benefits of this library.

```javascript
// The old way
const AWS = require('aws-sdk')

const documentClient = new AWS.DynamoDB.DocumentClient()

const fixedError = error =>
  Promise.reject(new Error(`put: ${error.message}`))

const saveRecords = async (tableName, records) =>
  await Promise.all(
    records
      .map(record => ({ TableName: tableName, Item: record }))
      .map(params => documentClient.put(params).promise().catch(fixedError))
  )

// The new way
const aws = require('@sullux/aws-sdk')()

const saveRecords = async (tableName, records) =>
  await Promise.all(
    records
      .map(record => ({ TableName: tableName, Item: record }))
      .map(aws.dynamoDB.documentClient.put)
  )
```

The next example shows how configuration is passed down through child properties in the wrapper. In both of the following snippets, the instances are initialized to the `us-west-2` region. Note how much cleaner the wrapper implementation is.

```javascript
// The old way
const AWS = require('aws-sdk')
const dynamoDB = new AWS.DynamoDB({ region: 'us-west-2' })
const s3 = new AWS.S3({ region: 'us-west-2' })

// The new way
const aws = require('@sullux/aws-sdk')({ region: 'us-west-2' })
const { dynamoDB, s3 } = aws
```

---
_Source: https://npm.io/package/@sullux/aws-sdk · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
