
Product
Introducing Socket Firewall: Free, Proactive Protection for Your Software Supply Chain
Socket Firewall is a free tool that blocks malicious packages at install time, giving developers proactive protection against rising supply chain attacks.
@infisical/sdk
Advanced tools
The Infisical SDK provides a convenient way to interact with the Infisical API.
The Infisical SDK provides a convenient way to interact with the Infisical API.
npm install @infisical/sdk
import { InfisicalSDK } from '@infisical/sdk'
const client = new InfisicalSDK({
siteUrl: "your-infisical-instance.com" // Optional, defaults to https://app.infisical.com
});
// Authenticate with Infisical
await client.auth().universalAuth.login({
clientId: "<machine-identity-client-id>",
clientSecret: "<machine-identity-client-secret>"
});
const allSecrets = await client.secrets().listSecrets({
environment: "dev", // stg, dev, prod, or custom environment slugs
projectId: "<your-project-id>"
});
console.log("Fetched secrets", allSecrets)
The SDK methods are organized into the following high-level categories:
auth
: Handles authentication methods.secrets
: Manages CRUD operations for secrets.auth
The Auth
component provides methods for authentication:
await client.auth().universalAuth.login({
clientId: "<machine-identity-client-id>",
clientSecret: "<machine-identity-client-secret>"
});
Parameters:
options
(object):
clientId
(string): The client ID of your Machine Identity.clientSecret
(string): The client secret of your Machine Identity.You can renew the authentication token that is currently set by using the renew()
method.
await client.auth().universalAuth.renew();
By default, when you run a successful .login()
method call, the access token returned will be auto set for the client instance. However, if you wish to set the access token manually, you may use this method.
client.auth().accessToken("<your-access-token>")
Parameters:
accessToken
(string): The access token to be used for authentication. This should not include "Bearer".[!NOTE]
AWS IAM auth only works when the SDK is being used from within an AWS service, such as Lambda, EC2, etc.
await client.auth().awsIamAuth.login({
identityId: "<your-identity-id>"
})
Parameters:
options
(object):
identityId
(string): The ID of your identityYou can renew the authentication token that is currently set by using the renew()
method.
await client.auth().awsIamAuth.renew();
secrets
This sub-class handles operations related to secrets:
const allSecrets = await client.secrets().listSecrets({
environment: "dev",
projectId: "<your-project-id>",
expandSecretReferences: true,
viewSecretValue: true,
includeImports: false,
recursive: false,
secretPath: "/foo/bar",
});
Parameters:
projectId
(string): The ID of your project.environment
(string): The environment in which to list secrets (e.g., "dev").secretPath
(str): The path to the secrets.expandSecretReferences
(bool, optional): Whether to expand secret references.viewSecretValue
(bool, optional): Whether or not to reveal the secret value of the secrets. If set to false
, the secretValue
is masked with <hidden-by-infisical>
. Defaults to true
.recursive
(bool, optional): Whether to list secrets recursively.includeImports
(bool, optional): Whether to include imported secrets.tagFilters
(string[], optional): Tags to filter secrets.Returns:
ApiV3SecretsRawGet200Response
: The response containing the list of secrets.The listSecretsWithImports
method makes it easier to get all your secrets at once. The imported secrets will automatically be added to the secrets returned. The secrets in the selected environment will take precedence over the imported secrets. This means if you have secrets with conflicting names, the secret from the environment the import was imported into, will take precedence.
const allSecrets = await client.secrets().listSecretsWithImports({
environment: "dev",
projectId: "<your-project-id>",
expandSecretReferences: true,
viewSecretValue: true,
recursive: false,
secretPath: "/foo/bar"
});
Parameters:
projectId
(string): The ID of your project.environment
(string): The environment in which to list secrets (e.g., "dev").secretPath
(str): The path to the secrets.expandSecretReferences
(bool, optional): Whether to expand secret references.viewSecretValue
(bool, optional): Whether or not to reveal the secret value of the secrets. If set to false
, the secretValue
is masked with <hidden-by-infisical>
. Defaults to true
.recursive
(bool, optional): Whether to list secrets recursively.tagFilters
(string[], optional): Tags to filter secrets.Returns:
ApiV1DashboardSecretsOverviewGet200ResponseSecretsInner
: The response containing the list of secrets, with imports. const newSecret = await client.secrets().createSecret("SECRET_NAME", {
environment: "dev",
projectId: "<your-project-id>",
secretValue: "SECRET_VALUE",
secretComment: "This is a new secret", // Optional
secretPath: "/foo/bar", // Optional
secretReminderNote: "This is a reminder note", // Optional
secretReminderRepeatDays: 7, // Optional
skipMultilineEncoding: false, // Optional
tagIds: ["tagId1", "tagId2"], // Optional
type: "personal" // Optional
});
Parameters:
secretName
(string): The name of the secret to createoptions
(object):
projectId
(string): The ID of your project.environment
(str): The environment in which to create the secret.secretValue
(str): The value of the secret.secretPath
(string, optional): The path to the secret.secretComment
(str, optional): A comment associated with the secret.skipMultilineEncoding
(bool, optional): Whether to skip encoding for multiline secrets.secretReminderNote
(string, optional): A note for the secret reminder.secretReminderRepeatDays
(number, optional): Number of days after which to repeat secret reminders.tagIds
(string[], optional): Array of tags to assign to the new secret.type
(personal | shared, optional): Which type of secret to create.Returns:
ApiV3SecretsRawSecretNamePost200Response
: The response after creating the secret.const updatedSecret = await client.secrets().updateSecret("SECRET_TO_UPDATE", {
environment: "dev",
projectId: "<your-project-id>",
secretValue: "UPDATED_SECRET_VALUE",
newSecretName: "NEW_SECRET_NAME2", // Optional
secretComment: "This is an updated secret", // Optional
secretPath: "/foo/bar", // Optional
secretReminderNote: "This is an updated reminder note", // Optional
secretReminderRepeatDays: 14, // Optional
skipMultilineEncoding: false, // Optional
tagIds: ["tagId1", "tagId2"], // Optional
type: "personal", // Optional
metadata: { // Optional
extra: "metadata"
}
});
Parameters:
secretName
(string): The name of the secret to update.`options
(object):
environment
(str): The environment in which to update the secret.projectId
(str): The ID of your project.secretValue
(str, optional): The new value of the secret.newSecretName
(str, optional): A new name for the secret.secretComment
(str, optional): An updated comment associated with the secret.secretPath
(str): The path to the secret.secretReminderNote
(str, optional): An updated note for the secret reminder.secretReminderRepeatDays
(number, optional): Updated number of days after which to repeat secret reminders.skipMultilineEncoding
(bool, optional): Whether to skip encoding for multiline secrets.tagIds
(string[], optional): Array of tags to assign to the secret.type
(personal | shared, optional): Which type of secret to create.metadata
(object, optional): Assign additional details to the secret, accessible through the API.Returns:
ApiV3SecretsRawSecretNamePost200Response
: The response after updating the secret. const singleSecret = await client.secrets().getSecret({
environment: "dev",
projectId: "<your-project-id>",
secretName: "DATABASE_URL",
expandSecretReferences: true, // Optional
viewSecretValue: true, // Optional
includeImports: true, // Optional
secretPath: "/foo/bar", // Optional
type: "shared", // Optional
version: 1 // Optional
});
Parameters:
environment
(str): The environment in which to retrieve the secret.projectId
(str): The ID of your project.secretName
(str): The name of the secret.secretPath
(str, optional): The path to the secret.expandSecretReferences
(bool, optional): Whether to expand secret references.viewSecretValue
(bool, optional): Whether or not to reveal the secret value of the secret. If set to false
, the secretValue
is masked with <hidden-by-infisical>
. Defaults to true
.includeImports
(bool): Whether to include imported secrets.version
(str, optional): The version of the secret to retrieve. Fetches the latest by default.type
(personal | shared, optional): The type of secret to fetch.Returns:
ApiV3SecretsRawSecretNameGet200Response
: The response containing the secret.const deletedSecret = await client.secrets().deleteSecret("SECRET_TO_DELETE", {
environment: "dev",
projectId: "<your-project-id>",
secretPath: "/foo/bar", // Optional
type: "personal" // Optional
});
Parameters:
secretName
(string): The name of the secret to delete.options
(object):
projectId
(str): The ID of your project.environment
(str): The environment in which to delete the secret.secret_path
(str, optional): The path to the secret.type
(personal | shared, optional): The type of secret to delete.Returns:
ApiV3SecretsRawSecretNamePost200Response
: The response after deleting the secret.dynamicSecrets
Creating a new dynamic secret can be done by using the .dynamicSecrets().create({})
function. More details below.
The input for creating new dynamic secret varies greatly between secret types. For a more in-depth description of each input type for each dynamic secret type, please refer to our API documentation
import { InfisicalSDK, DynamicSecretProviders } from "@infisical/sdk";
const client = new InfisicalSDK();
await client.auth().universalAuth.login({
// For localhost
clientId: "CLIENT_ID",
clientSecret: "CLIENT_SECRET"
});
const dynamicSecret = await client.dynamicSecrets().create({
provider: {
type: DynamicSecretProviders.Redis,
inputs: {
host: "<redis-host>",
port: 6479,
username: "<redis-username>",
password: "<redis-password>", // Only required if your Redis instance uses authentication (recommended)
creationStatement: "ACL SETUSER {{username}} on >{{password}} ~* &* +@all",
revocationStatement: "ACL DELUSER {{username}}"
}
},
defaultTTL: "1h",
maxTTL: "24h",
name: "dynamic-secret-name",
projectSlug: "project-slug",
environmentSlug: "dev"
});
console.log(dynamicSecret);
Returns:
ApiV1DynamicSecretsPost200Response['dynamicSecret']
: The response after creating the dynamic secretNote: Deleting a dynamic secret will also delete it's associated leases.
const deletedDynamicSecret = await client.dynamicSecrets().delete("dynamic-secret-name", {
environmentSlug: "dev",
projectSlug: "project-slug"
});
Parameters:
secretName
(string): The ID of the dynamic secret to deleteoptions
(object):
projectSlug
(str): The ID of your project.environment
(str): The environment in which to delete the secret.Returns:
ApiV1DynamicSecretsDelete200Response['dynamicSecret']
: The response after deleting the dynamic secretdynamicSecrets.leases
In this section you'll learn how to work with dynamic secret leases
const lease = await client.dynamicSecrets().leases.create({
dynamicSecretName: "dynamic-secret-name",
environmentSlug: "dev",
projectSlug: "your-project-slug",
path: "/foo/bar",
ttl: "5m" // Optional
});
console.log(lease);
Your dynamic secret credentials will be contained user lease.data
in this example.
Parameters:
dynamicSecretName
(string): The name of the dynamic secret you wish to create a lease for.projectSlug
(string): The slug of the project where the secret is located.environmentSlug
(string): The environment where the dynamic secret is located.path
(string, optional): The path of where the dynamic secret is located.ttl
(string, optional): A vercel/ms encoded string representation of how long the lease credentials should be valid for. This will default to the dynamic secret's default TTL if not specified.Returns:
ApiV1DynamicSecretsLeasesPost200Response
: The dynamic secret lease result.const deletedLease = await client.dynamicSecrets().leases.delete(newLease.lease.id, {
environmentSlug: "dev",
projectSlug: "test-zb-3a",
path: "/foo/bar",
isForced: false // Wether or not to forcefully delete the lease. This can't guarantee that the lease will be deleted from the external provider.
});
Parameters:
leaseId
(string): The ID of the lease you want to delete.projectSlug
(string): The slug of the project where the secret is located.environmentSlug
(string): The environment where the dynamic secret is located.path
(string, optional): The path of where the dynamic secret is located.isForced
(bool, optional): Wether or not to forcefully delete the lease. This can't guarantee that the lease will be deleted from the external provider, and is potentially unsafe for sensitive dynamic secrets.Returns:
ApiV1DynamicSecretsLeasesLeaseIdDelete200Response
: The deleted lease result.Please note that renewals must happen before the lease has fully expired. After renewing the lease, you won't be given new credentials. Instead the existing credentials will continue to live for the specified TTL
const renewedLease = await client.dynamicSecrets().leases.renew(newLease.lease.id, {
environmentSlug: "dev",
projectSlug: "project-slug",
path: "/foo/bar", // Optional
ttl: "10m" // Optional
});
Parameters:
leaseId
(string): The ID of the lease you want to delete.options
(object):
projectSlug
(string): The slug of the project where the secret is located.environmentSlug
(string): The environment where the dynamic secret is located.path
(string, optional): The path of where the dynamic secret is located.ttl
(string, optional): A vercel/ms encoded string representation of how long the lease credentials should be valid for. This will default to the dynamic secret's default TTL if not specified.Returns:
ApiV1DynamicSecretsLeasesLeaseIdDelete200Response
: The renewed lease response (doesn't contain new credentials).projects
const project = await client.projects().create({
projectName: "<name-of-project>",
type: "secret-manager", // cert-manager, secret-manager, kms, ssh
projectDescription: "<project-description>", // Optional
slug: "<slug-of-project-to-create>", // Optional
template: "<project-template-name>", // Optional
kmsKeyId: "kms-key-id" // Optional
});
Parameters:
projectName
(string): The name of the project to create.type
(string): The type of project to create. Valid options are secret-manager
, cert-manager
, kms
, ssh
projectDescription
(string): An optional description of the project to create.slug
(string): An optional slug for the project to create. If not provided, one will be generated automatically.template
(string): Optionally provide a project template name to use for creating this project.kmsKeyId
(string): The ID of the KMS key to use for the project. Will use the Infisical KMS by default.Returns:
ApiV1WorkspaceWorkspaceIdGet200ResponseWorkspace
: The project that was created.When inviting members to projects, you must either specify the emails
or usernames
. If neither are specified, the SDK will throw an error.
const memberships = await client.projects().inviteMembers({
projectId: project.id,
emails: ["test1@example.com", "test2@example.com"], // Optional
usernames: ["example-user3", "example-user4"] // Optional
roleSlugs: ["member"] // Optional
});
Parameters:
projectId
: (string): The ID of the project to invite members toemails
: (string[]): An array of emails of the users to invite to the project.usernames
: (string[]) An array of usernames of the users to invite to the project.roleSlugs
: (string[]): An array of role slugs to assign to the members. If not specified, this will default to member
.Returns:
ApiV1OrganizationAdminProjectsProjectIdGrantAdminAccessPost200ResponseMembership
: An array of the created project memberships.environments
const environment = await client.environments().create({
name: "<environment-name>",
projectId: "<your-project-id>",
slug: "<environment-slug>",
position: 1 // Optional
});
Parameters:
name
(string): The name of the environment to be created.projectId
(string): The ID of the project to create the environment within.slug
: (string): The slug of the environment to be created.position
(number): An optional position of the environment to be created. The position is used in the Infisical UI to display environments in order. Environments with the lowest position come first.Returns:
ApiV1WorkspaceWorkspaceIdEnvironmentsEnvIdGet200ResponseEnvironment
: The environment that was created.const folder = await client.folders().create({
name: "<folder-name>",
path: "<folder-path>",
projectId: "<your-project-id>",
environment: "<environment-slug>",
description: "<folder-description>" // Optional
});
Parameters:
name
(string): The name of the folder to create.path
(string): The path where of where to create the folder. Defaults to /
, which is the root folder.projectId
(string): The ID of the project to create the folder within.environment
(string): The slug of the environment to create the folder within.description
(string): An optional folder description.Returns:
ApiV1FoldersPost200ResponseFolder
: The folder that was created.FAQs
The Infisical SDK provides a convenient way to programmatically interact with the Infisical API.
The npm package @infisical/sdk receives a total of 21,322 weekly downloads. As such, @infisical/sdk popularity was classified as popular.
We found that @infisical/sdk demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 5 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Product
Socket Firewall is a free tool that blocks malicious packages at install time, giving developers proactive protection against rising supply chain attacks.
Research
Socket uncovers malicious Rust crates impersonating fast_log to steal Solana and Ethereum wallet keys from source code.
Research
A malicious package uses a QR code as steganography in an innovative technique.