Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Config package does not expose Config class as stated in documentation #32

Open
djedlajn opened this issue Aug 16, 2020 · 4 comments
Open

Comments

@djedlajn
Copy link

Hi,

First of all thanks for all the work awesome stuff.

But I have noticed that the documentation and actual packages are out of sync. In this case @nestcloud/config.

It does not export Config class as stated in documentation so it cant be properly injected. Is this a bug because the documentation has Config class in the exports and I have checked and could not find it in exports.

@djedlajn
Copy link
Author

Example

import { Injectable } from '@nestjs/common';
import { InjectConfig, Config } from '@nestcloud/config';

import { JwtModuleOptions, JwtOptionsFactory } from '@nestjs/jwt';

@Injectable()
export class JwtConfigService implements JwtOptionsFactory {
  // Cant inject due to lack of Config
  constructor(@InjectConfig() private readonly config: Config) {}
  createJwtOptions(): Promise<JwtModuleOptions> | JwtModuleOptions {
    const opts = this.config.get<JwtModuleOptions>('app.auth.jwtSettings');
    return {
      secret: opts.secret,
      signOptions: { expiresIn: '24h' },
    };
  }
}

@djedlajn
Copy link
Author

So after digging a bit trough code I finally made it work.

For it to work you will be needing your preferred mesh in my example consul alongside with config module. With the following example.

consul.config - KV store

service:
  port: 50060
  auth:
    jwt:
      secret: "jk#oz2nBR!en#$Dg%qHh3RV!s$F$&&qN&5!m!3&^YuqVLN@tcCoMas7#%Z@kY4XJ"
      signOptions:
        expiresIn: "24h"
        algorithm: "ES256"

config.yaml - For bootstraping application

consul:
  host: localhost
  port: 8500
config:
  key: proj/config/${{ service.name }}
  name: proj/config/${{ service.name }}
service:
  discoveryHost: localhost
  healthCheck:
    timeout: 1s
    interval: 10s
    tcp: ${{ service.discoveryHost }}:${{ service.port }}
  maxRetry: 5
  retryInterval: 5000
  tags: ['v1.0.0', 'microservice']
  name: service-name
  port: 50054

Note for config module to work you need to have a name property set under the config section of BOOT file otherwise, it will complain.

After that it's pretty much done and you can proceed to use it as follows.

import { Injectable } from '@nestjs/common';
import { InjectConfig } from '@nestcloud/config';
import { JwtModuleOptions, JwtOptionsFactory } from '@nestjs/jwt';
import { IConfig } from '@nestcloud/common';

@Injectable()
export class JwtConfigService implements JwtOptionsFactory {
  constructor(@InjectConfig() private readonly config: IConfig) {}
  createJwtOptions(): Promise<JwtModuleOptions> | JwtModuleOptions {
    const opts = this.config.get<JwtModuleOptions>('service.auth.jwt');
    console.log('OPTS', opts);

    return opts;
  }
}

For those wondering nestcloud/common now holds all the required interfaces/classes needed for instantiation such as IBoot and IConfig.

And finally @miaowing I think it would be good to create a section for open docs I bet localizing and improving documentation would be greatly beneficial to the project as a whole. I can make PR and fill up the gaps with the config module as well as provide some examples for the consul module if that is okay.

P.S Also I think breaking changes since it is pre 1.x.x release should be somehow incorporated to build and deploy process so users can know what's been deprecated removed or renamed and how to go with it without digging into code until documentation catches up.

@koolamusic
Copy link

Seconding this as I had the same issues.

@koolamusic
Copy link

@miaowing happy to help with documentation, and with sample projects

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants