1.1.7 • Published 4 years ago

@ibm-gpn/gpn-config v1.1.7

Weekly downloads
-
License
ISC
Repository
github
Last release
4 years ago

GPN shared configuration library

Configuration could be performed by creation of the environment specific configuration files with specific app configuration in it or/and by defining environment variables.

Getting started

Install dependencies:

npm i

To turn on debug messages display set NODE_DEBUG=gpn-config* environment variable in your project.

When developing, it's useful to use npm's link feature to link local copy of the library to your project.

In gpn-config library: npm run relink

In your project: npm link @ibm-gpn/gpn-config

Add new configs

To add new app specific configurations you need to add it to the environment specific config file in the /configs folder or to the /configs/default.ts. Your config must be placed under application name key and should consist props that later will be merged with default ones.

Ex.:

{
    ...
    APP_NAME: {
        db: {
            database: 'APP_SPECIFIC_DB'
        },
        server: {
            port: 8888 // APP specific port
        }
    }
}

Usage

Instantiate in your project with application name from EApplication enum:

import { EApplication } from '@ibm-gpn/gpn-common';

const config = new Configuration(EApplication.DP);

// Get database configuration for DP app.
console.log('DB configuration', config.db());

// Get api configuration for DP app.
console.log('API configuration', config.api());

// Get specific key from configuration.
console.log('DB SSL option', config.instance.get('db.ssl'));

Also, you can get configuration of specific app by passing app name from the EApplication enum:

import { EApplication } from '@ibm-gpn/gpn-common';

const config = new Configuration(EApplication.DP);

// Get database configuration for DP app.
console.log('DB configuration', config.db());

// Get api configuration for DP app.
console.log('API configuration', config.api());

// Get specific key from configuration.
console.log('DB SSL option', config.instance.get('db.ssl'));

Under the hood, node-config library used, so you can use its api throw instance property:

import { EApplication } from '@ibm-gpn/gpn-common';

const config = new Configuration(EApplication.DP);

// Get specific key from configuration.
console.log('DB SSL option', config.instance.get('db.ssl'));

// Get specific key existence in configuration.
console.log('Is DB SSL option exists?', config.instance.has('db.ssl'));

You can pass specific configuration and it will be used with highest priority:

import { EApplication } from '@ibm-gpn/gpn-common';

const config = new Configuration(EApplication.DP, { db: { username: 'master' } });

console.log('DB SSL option', config.instance.get('db.username'));
// master

NestJS module

This library provides you with global NestJS configuration module, so you can load it once in your NestJS app and use it everywhere within your app.

import { EApplication } from '@ibm-gpn/gpn-common';

...

@Module({
    imports: [ConfigModule.register(EApplication.SECURITY)],
})
export class AppModule { }

Then you can use app specific ConfigService in your code.

@Module({
    imports: [
        JwtModule.registerAsync(
            {
                inject: [ConfigService],
                useFactory: (config: ConfigService) => config.auth(),
            }),
    ],
})
export class AuthModule {}

Also, you can use decorator to inject ConfigService into your class.

@Injectable()
export class SomeService {
    constructor(@InjectConfig() private readonly config: ConfigService) {
    }
}

Environment variables

Also, you can define env variables listed below (higher priority) with app prefix. For example, to define database name for the SECURITY app, you need to pass SECURITY_DB_NAME env variable.

Database:

DB_NAME         -   Name.
DB_HOST         -   Host. Default: localhost.
DB_PASSWORD     -   Password. Default: 1qazse4rfv.
DB_PORT         -   Port. Default: 30933.
DB_SCHEMA       -   Schema. Default: dev.
DB_USER         -   User. Default: admin.

Host:

HOST                          -   host url.

Server:

HTTP_PORT                        -   Server port.

Microservice:

MS_PORT                          -   Microservice port.

Authentication and authorization:

AUTH_SECRET                     -   Secret key. Default: 2c54a418-3563-4af9-849b-36b6ff6a5429.
AUTH_TOKEN_EXPIRATION_TIME      -   Authentication token expiration time. Default: 1h.

API:

API_PREFIX      -   Api prefix.

Swagger:

SWAGGER_PREFIX      -   Swagger portal prefix. Default: api-doc.

Logger:

LOGGER_LEVEL        -   Level of logging.    
LOGGER_NAME         -   Logger name.    

CAPEX:

CAPEX_BASE_URL      -   Capex base url.

Primavera:

PRIMAVERA_HOST      -   Primavera host.
PRIMAVERA_PORT      -   Primavera port.

Deployment

NPM registry

To publish library you should be member of the ibm-gpn organization in NPM. If you are not - contact with organization admins.

List of the team admins:

  • Roman Samokhin (RSamokhin@ru.ibm.com)

New version deploy

Run one of the following commands: npm run release-patch - to increment and push patch version npm run release-minor - to increment and push minor version npm run release-major - to increment and push major version

After it new git tag will be pushed to the master branch.

For publishing to the NPM registry run: npm run pub

1.1.7

4 years ago

1.1.6

4 years ago

1.1.5

4 years ago

1.1.4

4 years ago

1.1.1

4 years ago

1.1.0

4 years ago

1.1.3

4 years ago

1.1.2

4 years ago

1.0.33

4 years ago

1.0.32

4 years ago

1.0.31

4 years ago

1.0.29

4 years ago

1.0.28

4 years ago

1.0.27

4 years ago

1.0.26

4 years ago

1.0.25

4 years ago

1.0.24

4 years ago

1.0.23

4 years ago

1.0.21

4 years ago

1.0.19

4 years ago

1.0.18

5 years ago

1.0.17

5 years ago

1.0.16

5 years ago

1.0.15

5 years ago

1.0.14

5 years ago

1.0.13

5 years ago

1.0.12

5 years ago

1.0.11

5 years ago

1.0.10

5 years ago

1.0.9

5 years ago

1.0.8-rc

5 years ago

1.0.8

5 years ago

1.0.7

5 years ago

1.0.6

5 years ago