nestjs-infisical-sdk v1.2.51
This library uses the official Infisical SDK. What we’ve done is make the integration with NestJS easier, making your life a lot simpler, It’s written in pure TypeScript, and we’ve fully utilized type safety. you can easily inject the Infisical SDK as a service.
NOTE: This is not a official library!
Installation
To install the package, run:
With npm
npm install nestjs-infisical-sdk
With yarn
yarn add nestjs-infisical-sdk
With pnpm
pnpm install nestjs-infisical-sdk
With bun (Not tested yet!)
bun add nestjs-infisical-sdk
Example .env
INFISICAL_SITE_URL=https://app.infisical.com #default url
INFISICAL_CLIENT_ID=your-client-id
INFISICAL_CLIENT_SECRET=your-client-secret
INFISICAL_ACCESS_TOKEN=your-access-token
INFISICAL_AWS_IAM_LOGIN=your-aws-iam-identity-id
Property | Type | Description |
---|---|---|
clientId | string | The client ID of your Machine Identity. |
clientSecret | string | The client secret of your Machine Identity. |
projectId | string | The project ID of your Infisical project. . (Optional) |
environment | string | The environment in which to operate (e.g., "dev", "stg", "prod"). (Optional) |
siteUrl | string | The site URL for your Infisical instance. Defaults to "https://app.infisical.com" . (Optional) |
renewToken | boolean | Whether to renew the authentication token that is currently set. (Optional) |
setManuallyAccessToken | string | Manually set the access token for authentication. (Optional) |
awsIamLogin | string | The ID of your AWS IAM identity for authentication. (Optional) |
renewAwsIamToken | boolean | Whether to renew the AWS IAM authentication token that is currently set. (Optional) |
injectIntoProcessEnv | boolean | Determines fetched secrets should be injected into process.env . Defaults to false . (Optional) |
watchEnvFile | boolean | Automatically watches your .env . file, Default is: false . (Optional) |
Options
interface InfisicalOptions {
/**
* The client ID of your Machine Identity.
*/
clientId: string;
/**
* The client secret of your Machine Identity.
*/
clientSecret: string;
/**
* The project ID of your Infisical project.
* Used to fetch secrets from the correct project and inject them into `process.env`.
*/
projectId?: string;
/**
* The environment in which to operate (e.g., "dev", "stg", "prod").
*/
environment?: string;
/**
* The site URL for your Infisical instance. Defaults to "https://app.infisical.com".
*/
siteUrl?: string;
/**
* Whether to renew the authentication token that is currently set.
*/
renewToken?: boolean;
/**
* Manually set the access token for authentication.
*/
setManuallyAccessToken?: string;
/**
* The ID of your AWS IAM identity for authentication.
*/
awsIamLogin?: string;
/**
* Whether to renew the AWS IAM authentication token that is currently set.
*/
renewAwsIamToken?: boolean;
/**
* Determines whether fetched secrets should be injected into `process.env`.
* If `true`, secrets will be automatically set in `process.env`.
* If `false`, secrets will only be returned and not modified.
* Defaults to `false`.
*/
injectIntoProcessEnv?: boolean;
/**
* The path to the environment file to watch for changes.
* Default is ".env".
*/
watchEnvFile?: boolean;
}
Register
import { Module } from '@nestjs/common';
import { InfisicalModule } from 'nestjs-infisical-sdk';
@Module({
imports: [
InfisicalModule.register({
clientId: 'your-client-id',
clientSecret: 'your-client-secret',
siteUrl: 'https://app.infisical.com', // Optional
environment: 'dev', // Optional
renewToken: true, // Optional
setManuallyAccessToken: 'your-access-token', // Optional
awsIamLogin: 'your-aws-iam-identity-id', // Optional
renewAwsIamToken: true, // Optional,
injectIntoProcessEnv: true, // Optional
watchEnvFile: true //Optional
})
]
})
export class AppModule {}
Async Register
import { Module } from '@nestjs/common';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { InfisicalModule } from 'nestjs-infisical-sdk';
@Module({
imports: [
ConfigModule.forRoot(),
InfisicalModule.registerAsync({
useFactory: async (configService: ConfigService) => ({
clientId: configService.get<string>('INFISICAL_CLIENT_ID'),
clientSecret: configService.get<string>('INFISICAL_CLIENT_SECRET'),
siteUrl: configService.get<string>('INFISICAL_SITE_URL'), // Optional
environment: configService.get<string>('INFISICAL_ENVIRONMENT'), // Optional
renewToken: false, // Optional
setManuallyAccessToken: configService.get<string>('INFISICAL_ACCESS_TOKEN'), // Optional
awsIamLogin: configService.get<string>('INFISICAL_AWS_IAM_LOGIN'), // Optional
renewAwsIamToken: false, // Optional
injectIntoProcessEnv: true, // Optional
watchEnvFile: true //Optional
}),
inject: [ConfigService]
})
]
})
export class AppModule {}
Inject The Service
import { Injectable, Logger } from '@nestjs/common';
import {
CreateDynamicSecretResult,
CreateSecretResult,
DeleteDynamicSecretResult,
DeleteSecretResult,
DynamicSecretProviders,
GetSecretResult,
InfisicalService,
InjectInfisical,
ListSecretsResult,
UpdateSecretResult
} from 'nestjs-infisical-sdk';
@Injectable()
export class AppService {
private readonly logger = new Logger(AppService.name);
constructor(@InjectInfisical() private readonly infiscalService: InfisicalService) {}
public async getSecret(secretName: string): Promise<GetSecretResult> {
this.logger.log(`Getting secret: ${secretName}`);
const secretResponse = await this.infiscalService.secrets().getSecret({
environment: 'dev',
secretName,
projectId: process.env.INFISICAL_PROJECT_ID
});
this.logger.log(`Secret retrieved: ${JSON.stringify(secretResponse)}`);
return secretResponse;
}
public async createSecret(secretName: string, secretValue: string): Promise<CreateSecretResult> {
this.logger.log(`Creating secret: ${secretName}`);
const secret = await this.infiscalService.secrets().createSecret(secretName, {
environment: 'dev',
secretValue,
projectId: process.env.INFISICAL_PROJECT_ID
});
this.logger.log(`Secret created: ${JSON.stringify(secret)}`);
return secret;
}
public async updateSecret(secretName: string, secretValue: string): Promise<UpdateSecretResult> {
this.logger.log(`Updating secret: ${secretName}`);
const secret = await this.infiscalService.secrets().updateSecret(secretName, {
environment: 'dev',
secretValue,
projectId: process.env.INFISICAL_PROJECT_ID
});
this.logger.log(`Secret updated: ${JSON.stringify(secret)}`);
return secret;
}
public async deleteSecret(secretName: string): Promise<DeleteSecretResult> {
this.logger.log(`Deleting secret: ${secretName}`);
const secret = await this.infiscalService.secrets().deleteSecret(secretName, {
environment: 'dev',
projectId: process.env.INFISICAL_PROJECT_ID
});
this.logger.log(`Secret deleted: ${JSON.stringify(secret)}`);
return secret;
}
public async listSecrets(): Promise<ListSecretsResult> {
this.logger.log('Listing secrets');
const secrets = await this.infiscalService.secrets().listSecrets({
environment: 'dev',
projectId: process.env.INFISICAL_PROJECT_ID
});
this.logger.log(`Secrets listed: ${JSON.stringify(secrets)}`);
return secrets;
}
public async createDynamicSecret(): Promise<CreateDynamicSecretResult> {
const createDynamicSecret = await this.infiscalService.dynamicSecrets().create({
provider: {
type: DynamicSecretProviders.Redis,
inputs: {
host: 'localhost',
port: 6379,
username: 'user1',
password: '12345612356',
creationStatement: `ACL SETUSER {{user1}} on >{{123456123456}} ~* &* +@all`,
revocationStatement: `ACL DELUSER {{user1}}`
}
},
defaultTTL: '1h',
environmentSlug: 'dev',
name: 'dynamic-secret-name',
projectSlug: 'project-slug'
});
this.logger.log(`Dynamic secret created: ${JSON.stringify(createDynamicSecret)}`);
return createDynamicSecret;
}
public async deleteDynamicSecret(dynamicSecretName: string): Promise<DeleteDynamicSecretResult> {
const deleteDynamicSecret = await this.infiscalService
.dynamicSecrets()
.delete(dynamicSecretName, {
environmentSlug: 'dev',
projectSlug: 'project-slug'
});
return deleteDynamicSecret;
}
}
Example Nest.js Project
Looking for a working example? NestJS Infisical Example
Contribute
We welcome contributions! Feel free to open an issue or submit a pull request.
For more details, visit the GitHub repository.
3 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago