Git Product home page Git Product logo

sourcefuse / loopback4-microservice-catalog Goto Github PK

View Code? Open in Web Editor NEW
291.0 21.0 70.0 126.79 MB

A Catalog of Microservices Created by SourceFuse for the Community

Home Page: https://sourcefuse.github.io/arc-docs/arc-api-docs/

License: MIT License

JavaScript 6.34% TypeScript 86.08% PLpgSQL 3.21% Dockerfile 0.62% HTML 1.44% Shell 0.24% Handlebars 0.05% SCSS 0.10% CSS 0.03% EJS 1.28% Smarty 0.61%
loopback4 microservices nodejs opensource arcbysf

loopback4-microservice-catalog's Introduction

ARC Logo

ARC by SourceFuse is an open-source Rapid Application Development framework for developing cloud-native enterprise applications, utilizing prebuilt microservices and standardized architectures for deployment on private and public clouds.

Sonar Quality Gate Synk Status License GitHub contributors sourceloop core downloads Pb Loopback Pb Loopback

IMPORTANT NOTE

From v5 onwards our cli now supports workspaces, transfering the responsibility of managing dependencies from lerna to npm. We will be providing support for our older version v4 till 30th June 2024. For more details on how to migrate from older versions of lerna to latest lerna v7 click here.

ARC API

ARC API (aka Sourceloop), is a collection of pre-built microservices designed to accelerate the development timeline for enterprise projects. These services address common challenges encountered by large enterprises during the development of cloud-native platforms for digital transformation initiatives or new product creation. Implemented as LoopBack Extensions, ARC API services can be seamlessly integrated into existing LoopBack or NestJS applications or generated as standalone services using the LoopBack Command-line interface.

Watch our introduction video to know more about ARC API.

Getting Started

The easiest way to get started with ARC API is to use its command line interface which can be installed using npm install -g @sourceloop/cli. The cli provides quick ways to scaffold a monorepo project, add microservices provided by sourceloop to your projects and many other useful stuff.

Checkout this step by step tutorial here.

Pre-built Micro-services

There are currently 14 Microservices provided and actively maintained:

  1. Authentication Service
  2. Audit Service
  3. OIDC Service
  4. In-Mail Service
  5. Notification Service
  6. Scheduler Service
  7. Video Conferencing Service
  8. BPMN Service
  9. Chat Service
  10. Feature Toggle Service
  11. User Service
  12. Payment Service
  13. Survey Service
  14. Search Service

Other Extensions

ARC API utilizes many LoopBack extensions in the micro-services provided, which are actively maintained by the ARC team.

Package Name Repo NPM
loopback4-authentication GitHub NPM
loopback4-authorization GitHub NPM
loopback4-ratelimiter GitHub NPM
loopback4-s3 GitHub NPM
loopback4-soft-delete GitHub NPM
loopback4-kafka-client GitHub NPM
loopback4-helmet GitHub NPM
loopback4-notifications GitHub NPM
@sourceloop/audit-log GitHub NPM
@sourceloop/vault GitHub NPM
@loopback/sequelize GitHub NPM

Example Implementations

The sandbox folder contains example applications and docker files that can be run independently to see the services in action. You can use Docker Compose to run the sandbox applications.

Issues

If you've noticed a bug or have a question or have a feature request, search the issue tracker to see if someone else in the community has already created a ticket. If not, go ahead and make one! All feature requests are welcome. Implementation time may vary. Feel free to contribute the same, if you can. If you think this project is useful, please star it. Appreciation really helps in keeping this open source project alive.

Consulting

Let's talk about accelerating your next project with ARC API:

https://www.sourcefuse.com/lets-talk/

People

Contributors

See all contributors.

Reference Links

License

Distributed under the MIT License. See LICENSE for more information.

loopback4-microservice-catalog's People

Contributors

akshatdubeysf avatar anitsingh-sf avatar ankurbansalsf avatar arpit1503khanna avatar ashutosh-bansal-2136 avatar barleendhaliwal avatar bhavyasf avatar dependabot[bot] avatar dev-hitesh-gupta avatar ishusf avatar jamescrowley321 avatar jyoti-13 avatar karuneshsf avatar mayank-sfin571 avatar mlakdawala-sf avatar raghavarorasf avatar rashisf avatar rohitvishwakarma-sf avatar samarpan-b avatar sf-kansara avatar sf-sahil-jassal avatar sfdevops avatar shivamsf avatar shubhamp-sf avatar sumiter92 avatar surbhi-sharma1 avatar tyagi-sunny avatar vaibhavmauryasf avatar vineet-suri avatar yeshamavani avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

loopback4-microservice-catalog's Issues

Unit test case coverage lacking

Describe the bug
Unit test case coverage missing and not up to the mark

Expected behavior
We should have at least 75% unit test case coverage in all micro services

Screenshots

Additional context
We can divide this into separate tasks for each microservice and then implement the same.

'prom-client' missing error after installing @sourceloop/core

Describe the bug
Installation of @sourceloop/core package completes successfully, but running the application after installtion says 'prom-client' is missing.

To Reproduce
Steps to reproduce the behavior:

  1. Create a Loopback4 Application
  2. Install @sourceloop/core
  3. Run the application
  4. See error - 'prom client' missing

Expected behavior
The application should not raise an error after installing the package.

Stipe payment gateway service

Is your feature request related to a problem? Please describe.
General stripe payment gateway service

Describe the solution you'd like

Should have ability to
1 - Add customer
2 - Add credit card/debit card to the customer
3 - Add bank accounts to customer
4 - Charge customer creditcard
5 - Make bank transfer to customer
6 - Validate payment methods
6 - Refunds
7 - Transaction history
8 - Support DB transactions with rollback feature in the event of error

BPMN workers do no start after process execution.

Describe the bug

To Reproduce
Steps to reproduce the behavior:

  1. Stop the camunda engine.
  2. Hit the execute endpoint, it should fail
  3. Restart the camunda engine.
  4. The API gives success response, but none of the workers start their work.

Expected behavior
After executing a process, workers should start their task.

@sourceloop/core documentation incomplete

Describe the bug
As of now, the sourceloop/core readme only provides an overall idea of the module, lacking any of the specific details.

Expected behavior
The readme should provide details of all the components, sequences, etc the module provides.

Need to have configurable path for locales folder while using components on lambda

While deploying video-service code on lambda, error comes in api execution, since i18n library is not able to write temporary files. The cause of error is that the directory is hardcoded in the config. In case of lamda, that directory structure doesn't exist.

So, the proposed solution is that we should make the configure object for i18n library configurable, via binding from application using in the core package.

Rate limiter key generator function causes false positive 429 errors for secure APIs

Describe the bug

export const rateLimitKeyGen = (req: Request) => {
  return req.headers?.authorization?.replace(/bearer /i, '') ?? req.ip;
};

This code is problematic in case of micro services architecture where same token is actually utilized by multiple microservices and redis is common for all. In that case the counter will be split up between microservices and actual rate limit per microservice becomes lesser than we configure in env vars. This function need to support a prefix.

Expected behavior
Rate limiting for secure APIs should happen per token per microservice.

Sandbox Docker Builds

Describe the solution you'd like
CI/CD build for the example images, so that use of local registry is optional.

Sandbox: Make postgres_orchestrator always return 0

Sandbox: Make postgres_orchestrator always return 0
The script is a temporary solution for local development and causes a deployment failure when deployed to k8s locally. Modify the script to exit 0 and complete all DB creation commands.

Add Tests for BPMN Service

Describe the feature
Add Unit Tests for BPMN Service

Expected behavior
We should have at least 75% unit test case coverage in all micro services

Create an experimental extensions package

How about we create an extensions folder within this monorepo, where we can keep all our experimental extensions or related POC implementation before they can be published over npm separately ?

Some conditions for extensions here

  • They all will be private here
  • They will have sample MVP implementation with complete documentation and list of pending items
  • Basic TCs and examples, wherever possible.

This is taking inspiration from LB4 experimental extensions package here -> https://github.com/strongloop/loopback-next/tree/master/extensions

On creating new workflow by bpmn service created_by and created_on is missing

Describe the bug
Create new workflow by BPMN service created by and created on, is missing

To Reproduce
Steps to reproduce the behavior:

  1. Implement BPMN service
  2. Create workflow
  3. created_by and created_on is missing

Expected behavior
created_by and created_on should present

Additional context
Need to add delete workflow call in the controller as of now able to delete workflow from camunda but at database is still there

Automate database migration when a micro service is installed or updated

Is your feature request related to a problem? Please describe.
Currently there is no way to provide the database migrations to consumers whenever a micro service is upgraded

Describe the solution you'd like
We need to have some kind of automaton here . A pre-install hook or a simple cli command which can be triggered whenever needed.

Describe alternatives you've considered
None as of now. Only way is to use loopback migrate.

Additional context
We need to do a Spike first for the approach. We can figure out the acceptance criteria after that.

User Onboarding Microservice

Is your feature request related to a problem? Please describe.
There is always a need for a reusable user onboarding or user guide feature in every application. It will be a very good addition to this catalog.

Describe the solution you'd like
@kabir-chandhoke to add.

/notification-users get api is not working for userTenantId (issue of @sourceloop/notification-service)

Is your feature request related to a problem? Please describe.
/notification-users get api is not working for userTenantId because we are using user tenant id for our socket connection which is "to" parameter in request and currently it is comparing userId column value with token userId

Describe the solution you'd like
We can check userTenantId for userId column or we should introduce a provider for checking column value

Describe alternatives you've considered
currently using a new controller for handling /notification-users get api

Need a way to hide some of the APIs of a microservice if not needed

Is your feature request related to a problem? Please describe.
There needs to be some way of configuring some APIs to be hidden or not required. If configured so, then, they should not show up in open api spec for the same.

Describe the solution you'd like
Some configuration needed. Not sure what's the best way. Is there a way to make an api hidden in open api spec ?

Describe alternatives you've considered
None as of now

Additional context
Might be related -> OAI/OpenAPI-Specification#433

Facades bearer verifier is tight coupling all facade microservices with auth service

Describe the bug
FacadesBearerTokenVerifyProvider - This is tight coupling auth service to all other facades which are using this verify bearer token. This is an anti pattern.

Expected behavior
Facades should be self sufficient enough to verify bearer token without depending on another service. This way they can also be completely independent.

Additional context
We need to ensure revoked tokens checking still works here.

Need an example for pubnub as a provider in Notification service

I went through the examples and found that we presently do not have pubnub as a provider in any of our examples.
therefore, it would be resourceful to have an example with pubnub as a provider.

While creating the implementation I would request you to consider, Access management for channel subscriptions. posting messages to channels/channel groups.
for permission flow please consider https://www.pubnub.com/docs/security/access-control#initialize-with-secretkey

it would be an added advatage if we can also have a built in capability of monitoring presence at the service end where we use the pubnub webhooks to monitor users presence,
This might be a SRP breach but putting it here would kind of wrap the pubnub implementation at one place and accelerate the development.

Property <any-property> doesn't exist on Type 'object'

The interface EventDTO was imported from @sourceloop/scheduler-service and used in request body. But when i add any property to extMetadata like meeting_info. Because of the following error shown below.

import { EventDTO } from '@sourceloop/scheduler-service';

const eventData: EventDTO = {....//  object key values }

eventData.extMetadata.meeting_info.id = 'xxx--xxxx';

This line was showing error Property meeting_info doesn't exist on type 'object'.

Screenshot given here
image

docker-compose up --build fails for examples

Describe the bug
docker-compose build --up fails for examples.

To Reproduce
Steps to reproduce the behavior:

  1. Clone the repo
  2. `cd examples'
  3. docker-compose up --build
  4. Error is below
Pulling video-conferencing-ms-migration (sourceloop/workflow-helloworld:latest)...
ERROR: pull access denied for sourceloop/workflow-helloworld, repository does not exist or may require 'docker login': denied: requested access to the resource is denied

Expected behavior
All services build and run via docker-compose build --up

Sandbox Terraform

Describe the solution you'd like
Terraform based solution for deploying the sandbox to k8s.

Add chat microservice

Is your feature request related to a problem? Please describe.
Need a micro service for chat messaging

Describe the solution you'd like
We should have a simplistic, reusable and scalable chat microservice which may or may not be real time. The idea is that this microservice provides us messaging feature and replies feature and read/unread feature. But real time updates and notifications can be separate as that may not be needed everywhere.

Describe alternatives you've considered
None available right now.

Additional context
We have done similar works in the past. Let's see if we can make something reusable using the same concept.

Payment Service with Multiple Gateways support

A Payment Service that supports configurable multiple gateways.

Features:-

  • Configurable Multiple Gateways
  • Enable/Disable From the list of Predefined Gateways
  • Create orders
  • Charge the Credit/Debit Card
  • Maintains Transactions History
  • Current Implementation With Stripe And Razorpay

Add tracing capability to sourceloop microservices

Is your feature request related to a problem? Please describe.
Distributed tracing not available yet, out of the box.

Describe the solution you'd like
Need an out of the box and configurable solution for this.

Describe alternatives you've considered
Custome can be done but outside sourceloop right now

Additional context
Some of our works in the past can help us here. Let's try if some of those can be followed here.

Need example of casbin

Is your feature request related to a problem? Please describe.
Right now we dont have any complete example of casbin provider of authorization

Describe the solution you'd like
Add example, documentation and blog

Describe alternatives you've considered
None.

Additional context
None

Keycloak logout not happening using logout API

Describe the bug
A user does not logout when using /logout API of Authentication Service

To Reproduce
Steps to reproduce the behavior:

  1. Hit /logout API with a valid access token and refresh token
  2. If the user logged in via keycloak, and keycloak access token was still valid, he would directly login with no prompt to enter credentials again.

Expected behavior
Although this is how SSO works, but for some applications, it might be a security issue and it may be a requirement to logout from keycloak as well.

Additional context
Authentication Service. Keycloak

GA Milestone - April 2021

GA Milestone

List of items to achieve before we can make Sourceloop GA

  • Automate database migration when a micro service is installed or updated (#124)
  • Need examples for each microservice (#146)

Above is bare minimum list before we go for GA. We need opinions on what else is needed. @sourcefuse/sourceloop

Sandbox k8s Setup

Is your feature request related to a problem? Please describe.
No

Describe the solution you'd like
Basic set of k8s manifests and documentation to run the sandbox applications in k8s.

Schedular service tables

Describe the bug
The 'deleted_on', 'deleted_by' fields are not available in tables in schedular migrations. Without these the the repository fetch is showing error.

Better Documentation

Describe the bug
The documentation is not clear and complete in the current state.

Expected behavior
The documentation should be clear and easy to understand, for all the services and examples.

Services

Examples

  • Audit Example
  • Auth Basic MS Example
  • Auth Multitenant Example
  • In-mail Example
  • Notification Socket Example
  • Scheduler Example
  • Video-conferencing Example
  • Workflow Example

Add bpmn microservice

Is your feature request related to a problem? Please describe.
Need a micro service for bpmn flows

Describe the solution you'd like
We should have a simplistic, reusable and scalable bpmn microservice that is agnostic of bpmn engine to be used. It should be able to integrate with camunda, zeebe, jbpm etc. using the same interface and without any coupling with bpmn engine.

Describe alternatives you've considered
None available right now.

Additional context
We need to first draft an implementation plan for the same.

Grpc Support for microservices

How about we extend our microservice catalog to support Grpc protocol?

gRPC can use protocol buffer for data serialization. This makes payloads faster, smaller and simpler.

Just like REST, gRPC can be used cross-language which means that if you have written a web service in Golang, a Java written application can still use that web service, which makes gRPC web services very scalable.

gRPC uses HTTP/2 to support highly performant and scalable API’s and makes use of binary data rather than just text which makes the communication more compact and more efficient. gRPC makes better use of HTTP/2 then REST. gRPC for example makes it possible to turn-off message compression. This might be useful if you want to send an image that is already compressed. Compressing it again just takes up more time.

It is also type-safe. This basically means that you can’t give an apple while a banana is expected. When the server expects an integer, gRPC won’t allow you to send a string because these are two different types.

https://grpc.io/

Explanation for authorizations missing from READMEs of all services.

Describe the bug
Almost all the services provide routes that need certain permissions to access. Description for these permissions is not provided for any of these services -

  • Audit Service
  • Authentication Service
  • BPMN Service
  • In-mail Service
  • Notificaiton Service
  • Scheduler Service
  • Video Conferencing Service

Add Open ID Connect Support to authentication-service

Is your feature request related to a problem? Please describe.
The authentication-service is missing many of the features of an OIDC provider.

Describe the solution you'd like
Find and integrate a library that will expose the features needed for the authentication-service to become a full OIDC provider.

Add Tests for Audit Service

Describe the feature
Add Unit Tests for Audit Service

Expected behavior
We should have at least 75% unit test case coverage in all micro services

Need examples for each microservice

Is your feature request related to a problem? Please describe.
We need to have separate examples for each microservice.

Describe the solution you'd like
use the sandbox folder for creating samples

Additional context
Refer to auth example

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.