# @softchef/cdk-iot-device-management

> IoT device management is composed of things, thing types, thing groups, jobs, files API services. The constructs can be used independently, that are based on full-managed service to create an API Gateway & Lambda function.

Latest version **2.0.0** (published 2022-02-07) · Apache-2.0 license · 0 weekly downloads

## Install

```sh
npm install @softchef/cdk-iot-device-management
pnpm add @softchef/cdk-iot-device-management
yarn add @softchef/cdk-iot-device-management
bun add @softchef/cdk-iot-device-management
```

## Health

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

Positive: has types; no vulnerabilities; high quality score.

Warnings: low downloads; no esm support; large bundle.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 2.0.0 |
| Published | 2022-02-07 |
| First published | 2021-06-09 |
| Weekly downloads | 0 |
| License | Apache-2.0 |
| TypeScript types | bundled |
| Module format | CommonJS |
| Dependencies | 16 |
| Unpacked size | 32.2 MB |
| Known vulnerabilities | 0 (+1 in 1 direct dependencies) |
| Install scripts | no |
| Author | SoftChef |
| Maintainers | softchef-iot-lab |
| Keywords | AWS, CDK, Device Management, IoT, IoT Job, OTA, cdk |

## Links

- npm: https://www.npmjs.com/package/@softchef/cdk-iot-device-management
- Repository: https://github.com/SoftChef/cdk-iot-device-management
- Homepage: https://github.com/SoftChef/cdk-iot-device-management#readme
- Issues: https://github.com/SoftChef/cdk-iot-device-management/issues
- npm.io page: https://npm.io/package/@softchef/cdk-iot-device-management

## Dependencies (16)

- [joi](https://npm.io/package/joi.md) ^17.6.0
- [uuid](https://npm.io/package/uuid.md) ^8.3.2
- [semver](https://npm.io/package/semver.md) ^7.3.5
- [@types/uuid](https://npm.io/package/@types/uuid.md) ^8.3.4
- [@types/semver](https://npm.io/package/@types/semver.md) ^7.3.9
- [@aws-sdk/client-s3](https://npm.io/package/@aws-sdk/client-s3.md) ^3.49.0
- [@aws-sdk/client-iot](https://npm.io/package/@aws-sdk/client-iot.md) ^3.49.0
- [@aws-sdk/lib-dynamodb](https://npm.io/package/@aws-sdk/lib-dynamodb.md) ^3.49.0
- [@softchef/cdk-restapi](https://npm.io/package/@softchef/cdk-restapi.md) ^2.0.0
- [@aws-sdk/util-dynamodb](https://npm.io/package/@aws-sdk/util-dynamodb.md) ^3.49.0
- [@softchef/lambda-events](https://npm.io/package/@softchef/lambda-events.md) ^1.0.112
- [@aws-sdk/client-dynamodb](https://npm.io/package/@aws-sdk/client-dynamodb.md) ^3.49.0
- [@aws-sdk/client-iot-data-plane](https://npm.io/package/@aws-sdk/client-iot-data-plane.md) ^3.49.0
- [@aws-cdk/aws-apigatewayv2-alpha](https://npm.io/package/@aws-cdk/aws-apigatewayv2-alpha.md) ^2.1.0-alpha.0
- [@softchef/cdk-schedule-function](https://npm.io/package/@softchef/cdk-schedule-function.md) ^2.0.0
- [@aws-cdk/aws-apigatewayv2-integrations-alpha](https://npm.io/package/@aws-cdk/aws-apigatewayv2-integrations-alpha.md) ^2.1.0-alpha.0

## 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

- 2.0.0 (latest) — 2022-02-07
- 0.1.41 — 2022-02-07
- 0.1.40 — 2022-01-10
- 0.1.39 — 2021-12-08
- 0.1.38 — 2021-12-07
- 0.1.37 — 2021-12-06
- 0.1.36 — 2021-12-02
- 0.1.35 — 2021-12-01
- 0.1.34 — 2021-11-30
- 0.1.33 — 2021-10-29
- 0.1.32 — 2021-10-28
- 0.1.31 — 2021-10-27
- 0.1.30 — 2021-10-26
- 0.1.29 — 2021-10-25
- 0.1.28 — 2021-10-14
- … 104 more at https://npm.io/package/@softchef/cdk-iot-device-management/versions

## README

[![npm version](https://badge.fury.io/js/%40softchef%2Fcdk-iot-device-management.svg)](https://badge.fury.io/js/%40softchef%2Fcdk-iot-device-management)
![Release](https://github.com/SoftChef/cdk-iot-device-management/workflows/Release/badge.svg)
![npm](https://img.shields.io/npm/dt/@softchef/cdk-iot-device-management?label=NPM%20Downloads&color=orange)

# CDK Construct - IoT Device Management

IoT device management is composed of things, thing types, thing groups, jobs, files API services. The constructs can be used independently, that are based on full-managed service to create an API Gateway & Lambda function.

![Architecture](docs/cdk-iot-device-management.png)

## Installation

```sh
npm install @softchef/cdk-iot-device-management

or

yarn add @softchef/cdk-iot-device-management

```

## Why

- Integrate RestAPI and AWS IoT core to implement access control.
- Manage device firmware information.
- Manage device, such as create an OTA jobs.

This construct library provides five constructs:

- **Thing Type API construct** - Create and modify thing types' information.
- **Thing API construct** - Create and modify things' information.
- **Thing Group construct** - Create and modify thing groups' information.
- **Job API construct** - Create and modify thing's jobs.
- **File API construct** - Integrate API Gateway and DynamoDB to store device firmware information.

## Constructs

### Thing Type API construct

Use thing type API to manage thing types.

```typescript
import { ThingTypeApi } from '@softchef/cdk-iot-device-management'

const thingTypeApi = new ThingTypeApi(scope, id, {
  authorizationType?: apigateway.AuthorizationType;
  authorizer?: apigateway.IAuthorizer
})
```

[Thing Type API Docs](./docs/thing-type-api.md)

### Thing API construct

Use thing API to manage things' information.

```typescript
import { ThingApi } from '@softchef/cdk-iot-device-management'

const thingApi = new ThingApi(scope, id, {
  authorizationType?: apigateway.AuthorizationType;
  authorizer?: apigateway.IAuthorizer
})
```

[Thing API Docs](./docs/thing-api.md)

### Thing Group API construct

Use thing API to manage thing groups' information.

```typescript
import { ThingGroupApi } from '@softchef/cdk-iot-device-management'

const thingGroupApi = new ThingGroupApi(scope, id, {
  authorizationType?: apigateway.AuthorizationType;
  authorizer?: apigateway.IAuthorizer
})
```

[Thing Group API Docs](./docs/thing-group-api.md)

### Job API construct

Use job API to manage jobs' information.

```typescript
import { JobApi } from '@softchef/cdk-iot-device-management'

const jobApi = new JobApi(scope, id, {
  authorizationType?: apigateway.AuthorizationType;
  authorizer?: apigateway.IAuthorizer;
  scheduleFunction: ScheduleFunction
})
```

> The [ScheduleFunction](https://www.npmjs.com/package/@softchef/cdk-schedule-function/v/0.0.15) is support to custom create job by schedule time.

[Job API Docs](./docs/job-api.md)

### File API construct

Use File API to manage IoT devices firmware. File API contains category and file.

```typescript
import { fileApi } from '@softchef/cdk-iot-device-management'

const FileApi = new FileApi(scope, id, {
  authorizationType?: apigateway.AuthorizationType;
  authorizer?: apigateway.IAuthorizer;
})
```

[File API Docs](./docs/file-api.md)

### Category Table Schema

| Name        | Schema | Primary Index | GSI(Query By ParentId) |
| ----------- | ------ | ------------- | ---------------------- |
| categoryId  | String | Partition Key |                        |
| parentId    | String |               | Partition Key          |
| name        | String |               |                        |
| description | String |               |                        |

### File Table Schema

| Name         | Schema | Primary Index | GSI(Query By CategoryId And Locale) | GSI(Get File By Checksum And Version) |
| ------------ | ------ | ------------- | ----------------------------------- | ------------------------------------- |
| fileId       | String | Partition Key |                                     |                                       |
| categoryId   | String |               | Partition Key                       |                                       |
| checksum     | String |               |                                     | Partition Key                         |
| version      | String |               |                                     | Sort Key                              |
| checksumType | String |               |                                     |                                       |
| location     | String |               |                                     |                                       |
| locale       | String |               | Sort Key                            |                                       |
| summary      | String |               |                                     |                                       |
| description  | String |               |                                     |                                       |
| updatedAt    | Number |               |                                     |                                       |
| createdAt    | Number |               |                                     |                                       |

## License

This code is licensed under the Apache License 2.0. See the [LICENSE](https://github.com/SoftChef/cdk-iot-device-management/blob/main/LICENSE) file.

---
_Source: https://npm.io/package/@softchef/cdk-iot-device-management · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
