Novice, Practiced, Mastered

    @sourceloop/chat-service
    TypeScript icon, indicating that this package has built-in type declarations

    1.1.5 • Public • Published

    chat-service

    LoopBack

    Overview

    Microservice for handling chat between users and user groups.

    Installation

    npm i @sourceloop/chat-service

    Implementation

    Create a new Application using Loopback CLI and add the Component for ChatService in application.ts

    import {BootMixin} from '@loopback/boot';
    import {ApplicationConfig} from '@loopback/core';
    import {RepositoryMixin} from '@loopback/repository';
    import {RestApplication} from '@loopback/rest';
    import {
      RestExplorerBindings,
      RestExplorerComponent,
    } from '@loopback/rest-explorer';
    import {ServiceMixin} from '@loopback/service-proxy';
    import {ChatServiceComponent} from '@sourceloop/chat-service';
    import path from 'path';
    import {MySequence} from './sequence';
    
    export {ApplicationConfig};
    
    export class ChatApplication extends BootMixin(
      ServiceMixin(RepositoryMixin(RestApplication)),
    ) {
      constructor(options: ApplicationConfig = {}) {
        super(options);
    
        // Set up the custom sequence
        this.sequence(MySequence);
    
        // Set up default home page
        this.static('/', path.join(__dirname, '../public'));
    
        // Customize @loopback/rest-explorer configuration here
        this.configure(RestExplorerBindings.COMPONENT).to({
          path: '/explorer',
        });
        this.component(RestExplorerComponent);
    
        // add Component for ChatService
        this.component(ChatServiceComponent);
    
        this.projectRoot = __dirname;
        // Customize @loopback/boot Booter Conventions here
        this.bootOptions = {
          controllers: {
            // Customize ControllerBooter Conventions here
            dirs: ['controllers'],
            extensions: ['.controller.js'],
            nested: true,
          },
        };
      }
    }

    Environment Variables

    Name Required Default Value Description
    NODE_ENV Y Node environment value, i.e. dev, test, prod
    LOG_LEVEL Y Log level value, i.e. error, warn, info, verbose, debug
    DB_HOST Y Hostname for the database server.
    DB_PORT Y Port for the database server.
    DB_USER Y User for the database.
    DB_PASSWORD Y Password for the database user.
    DB_DATABASE Y Database to connect to on the database server.
    DB_SCHEMA Y Database schema used for the data source. In PostgreSQL, this will be public unless a schema is made explicitly for the service.
    JWT_SECRET Y Symmetric signing key of the JWT token.
    JWT_ISSUER Y Issuer of the JWT token.

    Setting up DataSource

    Here is a sample Implementation DataSource implementation using environment variables and PostgreSQL as the data source.

    import {inject, lifeCycleObserver, LifeCycleObserver} from '@loopback/core';
    import {juggler} from '@loopback/repository';
    
    const config = {
      name: 'chatDb',
      connector: 'postgresql',
      url: '',
      host: process.env.DB_HOST,
      port: process.env.DB_PORT,
      user: process.env.DB_USER,
      password: process.env.DB_PASSWORD,
      database: process.env.DB_DATABASE,
      schema: process.env.DB_SCHEMA,
    };
    
    @lifeCycleObserver('datasource')
    export class ChatDataSource
      extends juggler.DataSource
      implements LifeCycleObserver {
      static dataSourceName = 'chatDb';
      static readonly defaultConfig = config;
    
      constructor(
        // You need to set datasource configuration name as 'datasources.config.Chat' otherwise you might get Errors
        @inject('datasources.config.Chat', {optional: true})
        dsConfig: object = config,
      ) {
        super(dsConfig);
      }
    }

    Migrations

    The migrations required for this service are processed during the installation automatically if you set the CHAT_MIGRATION or SOURCELOOP_MIGRATION env variable. The migrations use db-migrate with db-migrate-pg driver for migrations, so you will have to install these packages to use auto-migration. Please note that if you are using some pre-existing migrations or database, they may be effected. In such scenario, it is advised that you copy the migration files in your project root, using the CHAT_MIGRATION_COPY or SOURCELOOP_MIGRATION_COPY env variables. You can customize or cherry-pick the migrations in the copied files according to your specific requirements and then apply them to the DB.

    API Documentation

    Common Headers

    Authorization: Bearer where is a JWT token signed using JWT issuer and secret. Content-Type: application/json in the response and in request if the API method is NOT GET

    Common Request path Parameters

    {version}: Defines the API Version

    Common Responses

    200: Successful Response. Response body varies w.r.t API 401: Unauthorized: The JWT token is missing or invalid 403: Forbidden : Not allowed to execute the concerned API 404: Entity Not Found 400: Bad Request (Error message varies w.r.t API) 201: No content: Empty Response

    API Details

    Install

    npm i @sourceloop/chat-service

    DownloadsWeekly Downloads

    9

    Version

    1.1.5

    License

    MIT

    Unpacked Size

    167 kB

    Total Files

    98

    Last publish

    Collaborators

    • samarpan_sf
    • npm-sourcefuse
    • akshatdubeysf
    • hitesh.gupta
    • 96mickey