# @pubsweet/component-aws-s3

> AWS S3 upload component for PubSweet

Latest version **1.2.54** (published 2021-06-08) · MIT license · 0 weekly downloads

## Install

```sh
npm install @pubsweet/component-aws-s3
pnpm add @pubsweet/component-aws-s3
yarn add @pubsweet/component-aws-s3
bun add @pubsweet/component-aws-s3
```

## 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.2.54 |
| Published | 2021-06-08 |
| First published | 2018-02-08 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 8 |
| Unpacked size | 27.2 KB |
| Known vulnerabilities | 0 (+13 in 3 direct dependencies) |
| Install scripts | no |
| Author | Collaborative Knowledge Foundation |
| Maintainers | jure, shockandaudrey, diversemix, andrei.c9, yannisbarlas |

## Links

- npm: https://www.npmjs.com/package/@pubsweet/component-aws-s3
- Repository: https://gitlab.coko.foundation/pubsweet/pubsweet
- npm.io page: https://npm.io/package/@pubsweet/component-aws-s3

## Dependencies (8)

- [uuid](https://npm.io/package/uuid.md) ^7.0.3
- [dotenv](https://npm.io/package/dotenv.md) ^6.2.0
- [lodash](https://npm.io/package/lodash.md) ^4.17.11
- [multer](https://npm.io/package/multer.md) ^1.3.0
- [aws-sdk](https://npm.io/package/aws-sdk.md) ^2.185.0
- [archiver](https://npm.io/package/archiver.md) ^3.0.0
- [multer-s3](https://npm.io/package/multer-s3.md) ^2.7.0
- [node-mocks-http](https://npm.io/package/node-mocks-http.md) ^1.6.6

## Recent versions

- 1.2.54 (latest) — 2021-06-08
- 1.2.12 (next) — 2019-04-18
- 1.2.53 — 2021-06-08
- 1.2.52 — 2021-04-13
- 1.2.51 — 2021-04-08
- 1.2.50 — 2021-04-05
- 1.2.49 — 2021-03-30
- 1.2.48 — 2021-03-29
- 1.2.47 — 2021-03-08
- 1.2.46 — 2021-02-25
- 1.2.45 — 2021-02-23
- 1.2.44 — 2021-02-23
- 1.2.43 — 2020-12-21
- 1.2.42 — 2020-11-19
- 1.2.41 — 2020-11-18
- … 50 more at https://npm.io/package/@pubsweet/component-aws-s3/versions

## README

# AWS S3 File Upload Configuration

In order to use this component, the following configuration needs to be added to a PubSweet application inside a section named `pubsweet-component-aws-s3`:

- `secretAccessKey`: the `AWS_S3_SECRET_KEY` value from the app's `.env` file
- `accessKeyId`: the `AWS_S3_ACCESS_KEY` value from the app's `.env` file
- `region`: the `AWS_S3_REGION` value from the app's `.env` file
- `bucket`: the `AWS_S3_BUCKET` value from the app's `.env` file

For example:

```json
"pubsweet-component-aws-s3": {
    "secretAccessKey": "process.env.AWS_S3_SECRET_KEY",
    "accessKeyId": "process.env.AWS_S3_ACCESS_KEY",
    "region": "process.env.AWS_S3_REGION",
    "bucket": "process.env.AWS_S3_BUCKET",
    "validations": "path.resolve(__dirname, 'upload-validations.js')",
  },
```

The `.env` file should look like this:

```shell
AWS_S3_ACCESS_KEY = exampleKey
AWS_S3_SECRET_KEY = exampleKey/sads/21
AWS_S3_REGION = region-name
AWS_S3_BUCKET = bucket-name
```

Then, as soon as possible in your app you should add the `dotenv` package:

```js static
require('dotenv').config()
```

# `component-aws-s3` API

A list of endpoints that help you upload, download and delete S3 files.

## Upload a file [POST]

#### Request

`POST /api/file`

#### Request body

```static
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryWfPNVh4wuWBlyEyQ

------WebKitFormBoundaryWfPNVh4wuWBlyEyQ
Content-Disposition: form-data; name="fileType"

supplementary
------WebKitFormBoundaryWfPNVh4wuWBlyEyQ
Content-Disposition: form-data; name="fragmentId"

545
------WebKitFormBoundaryWfPNVh4wuWBlyEyQ
Content-Disposition: form-data; name="file"; filename="attachment.txt"
Content-Type: text/plain

[file content goes there]
------WebKitFormBoundaryWfPNVh4wuWBlyEyQ
```

#### Response

```json
{
  "id": "fragment-id/file-id",
  "name": "Document Name.doc",
  "size": 452097
}
```

## Retrieve file signed URL [GET]

This endpoint allows you to retrieve a file's signed URL that can be used to download the file.

#### Request

`GET /api/files/{fragmentId}/{fileId}`

| URI Parameter | Requiered | Requirements | Description            |
| ------------- | --------- | ------------ | ---------------------- |
| fragmentId    | Yes       | String       | The ID of the fragment |
| fileId        | Yes       | String       | The ID of the file     |

| Query Parameter | Requiered | Requirements | Description                            |
| --------------- | --------- | ------------ | -------------------------------------- |
| download        | No        | Boolean      | Get the file data blob if set to true. |

#### Response

```json
HTTP/1.1 200
{
	"signedUrl": "aws-url"
}
```

## Retrieve files as zip [GET]

This endpoint allows you to retrieve a fragment's files as a zip archive.

#### Request

`GET /api/files/{fragmentId}`

| URI Parameter | Requiered | Requirements | Description            |
| ------------- | --------- | ------------ | ---------------------- |
| fragmentId    | Yes       | String       | The ID of the fragment |

| Query Parameter | Requiered | Requirements  | Description                                                                                    |
| --------------- | --------- | ------------- | ---------------------------------------------------------------------------------------------- |
| fileTypes       | No        | Array(String) | Specify which file types to be included in the zip. All file types will be included if omitted |

#### Response

```json
HTTP/1.1 200
{
	"dataBlob"
}
```

## Delete file [DELETE]

#### Request

`DELETE /api/file/{fileId}`

| URI Parameter | Requiered | Requirements | Description        |
| ------------- | --------- | ------------ | ------------------ |
| fileId        | Yes       | String       | The ID of the file |

#### Response

```json
HTTP/1.1 204
```

---

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