Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/lemoncloud-io/lemon-core
Shared library to build easily the micro-service with AWS Lambda + DynamoDB + ElasticSearch + SNS/SQS.
https://github.com/lemoncloud-io/lemon-core
aws-lambda aws-lambda-node dynamodb elasticsearch lemoncloud micro-service micro-service-architecture microservices-architecture serverless typescript
Last synced: about 2 months ago
JSON representation
Shared library to build easily the micro-service with AWS Lambda + DynamoDB + ElasticSearch + SNS/SQS.
- Host: GitHub
- URL: https://github.com/lemoncloud-io/lemon-core
- Owner: lemoncloud-io
- License: mit
- Created: 2019-08-09T04:09:19.000Z (about 5 years ago)
- Default Branch: develop
- Last Pushed: 2023-12-20T09:59:13.000Z (9 months ago)
- Last Synced: 2023-12-20T12:14:16.730Z (9 months ago)
- Topics: aws-lambda, aws-lambda-node, dynamodb, elasticsearch, lemoncloud, micro-service, micro-service-architecture, microservices-architecture, serverless, typescript
- Language: TypeScript
- Homepage:
- Size: 8.21 MB
- Stars: 12
- Watchers: 9
- Forks: 3
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
[![codecov](https://codecov.io/gh/lemoncloud-io/lemon-core/branch/master/graph/badge.svg)](https://codecov.io/gh/lemoncloud-io/lemon-core)
[![npm version](https://badge.fury.io/js/lemon-core.svg)](https://badge.fury.io/js/lemon-core)
[![GitHub version](https://badge.fury.io/gh/lemoncloud-io%2Flemon-core.svg)](https://badge.fury.io/gh/lemoncloud-io%2Flemon-core)# lemon-core
Lemon Core Bootloader for Serverless Micro-Service
- Support `multiple` event sources with single lambda function as below figure.
- Fully support `typescript` types (80%).
- Support Data Synchronization to `Elasticsearch` from `DynomoDB` via `DynamoStream`.![](assets/2019-11-26-23-43-47.png)
## Architecture
Basic MicroService Architecutre with `API` + `SNS` + `SQS`.
- `NextHandler`: basic controller method to handle user service
- `NextDecoder`: mapper from `httpMethod + id + cmd` to `NextHandler`
- `NextContext`: initial requester's context with `identity`.![](assets/lemon-core-ms-arch.png)
### Protocol Service
- support inter-communication between micro services
- `execute()`: synchronized call via lambda execution by `API` Handler.
- `notifiy()`: async call by `SNS` handler w/ lambda callback.
- `enqueue()`: async call by `SQS` handler w/ lambda callback.
- `broadcast()`: publish message via `SNS`, and handled by `Notification` handler.![](assets/lemon-protocol-flow.png)
```ts
import $engine, { ProtocolParam, ProtocolService, CallbackParam } from 'lemon-core';
// use the internal instance from $engine.
const service: ProtocolService = $engine.cores.protocol.service;
const protocol: ProtocolParam = service.fromURL(context, 'api://lemon-hello-api/hello/echo', param, body);
const callback: CallbackParam = { type: 'hooks', id: `${id}` };
// queue protocol in 30 seconds delayed.
const queueId = await service.enqueue(protocol, callback, 30);
```## Usage
1. install `lemon-core` module (>= 2.1.0).
```sh
$ npm install lemon-core --save
```TODO - TBD in detail.
## Contribution
Plz, request PR.
See [CODE_OF_CONDUCT](CODE_OF_CONDUCT.md)
## LICENSE
[MIT](LICENSE) - (C) 2019 LemonCloud Co Ltd. - All Rights Reserved.
----------------
# VERSION INFO #| Version | Description
|-- |--
| 3.2.8 | updated `ttypescript^1.5.15`, and optimized.
| 3.2.7 | cleanup log message in `AWSS3Service`, and optimized.
| 3.2.6 | improve `listObjects()` in `AWSS3Service` w/ prefix.
| 3.2.5 | improve `doReportError` in `lambda-web-handler`.
| 3.2.4 | updated with `[email protected]`.
| 3.2.3 | support `ES7.10`, and improve sync to elastic.
| 3.2.1 | improve `getIdentityId()` w/ `env:LOCAL_ACCOUNT`.
| 3.2.0 | upgrade all packages, and clear `audit fix`.
| 3.1.2 | refactoring with `[email protected]` for shared types.
| 3.1.1 | support `ManagerProxy`, `AbstractProxy` and `$ES6`. (`x-lemon-identity` as WebToken)
| 3.1.0 | upgrade `typescript^4.6.2`, and optimized.
| 3.0.2 | support `helpers` like `$T`.
| 3.0.0 | improve search-client with `@elastic/[email protected]` to support AWS `OpenSearch 1.1` (compartible with `ES6.2`).
| 2.2.20 | improve an extra feature from `aws-s3-service` to 'lemon-images-api'
| 2.2.19 | improve search filtering feature for `ES6 autocomplete search`.
| 2.2.18 | support `$U.jwt(passcode).encode(...)` w/ `npm`.
| 2.2.16 | hot-fix `utf8 encoding of json` in `AWS.S3`.
| 2.2.15 | hot-fix `Cannot read property 'setIndex' of null` in `Dynamo`.
| 2.2.14 | support `CacheService`, and support appending entry into list in `Dynamo`.
| 2.2.13 | improve `LambdaWEBHandler` to support custom web-response including headers.
| 2.2.12 | improve `AWSS3Service` to use pure JS image library because of AWS compatibility issue.
| 2.2.11 | improve `AWSS3Service` by adding handy method and metadata+tag handling
| 2.2.10 | improve `Access-Control-Allow-Origin` w/ `Access-Control-Allow-Credentials: true`.
| 2.2.9 | support `content-type:application/x-www-form-urlencoded` form data.
| 2.2.6 | improve `search`, and support `cookie` in NextContext.
| 2.2.5 | support `Access-Control-Allow-Headers` for CORS.
| 2.2.3 | support `x-lemon-language` header in identity.
| 2.2.0 | support `AbstractManager` for the template of model managers.
| 2.1.17 | support `filter()` in DynamoStream.
| 2.1.16 | improve `lock()` w/ 404 error, and `.aggregations` in QueryResult.
| 2.1.14 | support `hash` param for `MocksAPIService`.
| 2.1.13 | support `HttpStorage`, `$U.crypto2`, and `/favicon.ico`.
| 2.1.12 | support `userAgent` in NextContext.
| 2.1.11 | improve `syncToElastic6`, and `DynamoScanService`.
| 2.1.10 | support `loadProfile()`, and lookup-id style.
| 2.1.8 | improve `express` of request-context.
| 2.1.7 | improve `TypedStorageService` w/ `save()`.
| 2.1.5 | support `GeneralAPIController` along w/ `UniqueFieldManager`.
| 2.1.3 | support `asNextIdentityAccess()` for access identity.
| 2.1.2 | support `ProxyStorageService` for shared common storage.
| 2.1.1 | support `enqueue()` with delayed-seconds.
| 2.1.0 | support `ProtocolService` for inter communication of micro-services.
| 2.0.10 | support to display the current name/version by `GET /`.
| 2.0.9 | improve `Elastic6Service` + `Elastic6QueryService`.
| 2.0.8 | improve `APIService` w/ mocks data.
| 2.0.7 | improve `StorageService` along w/ dummy-storage-service.
| 2.0.6 | support `CoreWEBController`, and `lambda.cores.web.addController(...)`
| 2.0.5 | support `APIService`, and fix `engine.initialize()`
| 2.0.3 | support `StorageService` along with `DynamoStorageService`
| 2.0.0 | improve `lemon-engine`, and support `typescript` fully.
| 1.2.15 | improve `doReportError` with error message
| 1.2.12 | support `doReportMetric()` for saving metric data.