Skip to main content
Navigation

reference

TypeScript SDK Reference

Installation

npm install @ghoststack/vault-sdk

Requires Node.js 18 or later. The SDK is written in TypeScript and ships with type declarations.

Vault.connect()

Creates a new Vault client instance.

import { Vault } from "@ghoststack/vault-sdk";

const vault = await Vault.connect({
  tenant: string;     // Organization slug
  token: string;      // API token
  baseUrl?: string;   // Optional; defaults to https://vault.ghoststack.dev
  timeout?: number;   // Request timeout in ms; defaults to 30000
});

The returned vault object provides access to all subsystems: credentials, leases, team, tokens, and auditLog.

vault.credentials

credentials.create(params)

Creates a new credential.

const credential = await vault.credentials.create({
  name: string;                     // Unique name within the tenant
  type: CredentialType;             // "api-key" | "oauth-token" | "ssh-key" | "tls-certificate" | "database-url" | "generic-secret"
  value: string;                    // The secret value
  metadata?: Record<string, string>; // Optional key-value pairs
  policy?: CredentialPolicy;        // Optional lease policy
});

Returns: Credential (without the value field).

credentials.get(params)

Retrieves a credential’s metadata. Does not return the value. To get the value, create a lease.

const credential = await vault.credentials.get({
  name: string;
});

Returns: Credential.

credentials.list(params?)

Lists credentials in the tenant.

const credentials = await vault.credentials.list({
  type?: CredentialType;             // Filter by type
  state?: "active" | "rotated" | "revoked"; // Filter by state
  filter?: Record<string, string>;  // Filter by metadata fields
  limit?: number;                   // Page size; default 50
  offset?: number;                  // Pagination offset
});

Returns: Credential[].

credentials.update(params)

Updates a credential’s metadata or policy. Does not change the value (use rotate for that).

await vault.credentials.update({
  name: string;
  metadata?: Record<string, string>;
  policy?: CredentialPolicy;
});

Returns: Credential.

credentials.rotate(params)

Replaces a credential’s value. The old value transitions to the rotated state. Active leases continue using the old value until they expire.

await vault.credentials.rotate({
  name: string;
  newValue: string;
  metadata?: Record<string, string>; // Optional; merged with existing metadata
});

Returns: Credential.

credentials.revoke(params)

Permanently revokes a credential. All active leases are immediately invalidated.

await vault.credentials.revoke({
  name: string;
});

Returns: void.

vault.leases

leases.create(params)

Creates a new lease for a credential.

const lease = await vault.leases.create({
  credentialName: string;  // Name of the credential to lease
  ttl: string;             // Duration string: "5m", "1h", "8h"
  identity?: Identity;     // Optional; auto-populated from token if omitted
});

Returns: Lease (includes the decrypted value).

leases.get(params)

Retrieves a lease by ID. Does not include the credential value.

const lease = await vault.leases.get({
  leaseId: string;
});

Returns: Lease (without value).

leases.renew(params)

Extends an active lease’s TTL.

await vault.leases.renew({
  leaseId: string;
  ttl: string;       // New TTL from the current time
});

Returns: Lease.

leases.revoke(params)

Revokes an active lease immediately.

await vault.leases.revoke({
  leaseId: string;
});

Returns: void.

leases.list(params?)

Lists leases for a credential or identity.

const leases = await vault.leases.list({
  credentialName?: string;
  state?: "active" | "expired" | "revoked";
  limit?: number;
  offset?: number;
});

Returns: Lease[].

vault.team

team.invite(params)

Invites a user to the tenant.

await vault.team.invite({
  email: string;
  role: "viewer" | "user" | "manager" | "admin";
});

team.getPermissions(params)

Returns effective permissions for a user.

const permissions = await vault.team.getPermissions({
  email: string;
});

team.updateRole(params)

Changes a user’s role.

await vault.team.updateRole({
  email: string;
  role: "viewer" | "user" | "manager" | "admin";
});

team.remove(params)

Removes a user from the tenant.

await vault.team.remove({
  email: string;
});

vault.tokens

tokens.create(params)

Creates a new API token.

const token = await vault.tokens.create({
  name: string;
  role: "viewer" | "user" | "manager" | "admin";
  scope?: {
    credentials: string[];  // Credential name patterns
  };
  expiresAt?: string;       // ISO 8601 timestamp
});

Returns: { token: string; id: string; name: string; expiresAt: string }. The token field is the secret value and is only returned once.

tokens.list()

Lists API tokens (does not include token values).

tokens.revoke(params)

Revokes an API token.

await vault.tokens.revoke({ tokenId: string });

vault.auditLog

auditLog.query(params?)

Queries the audit log.

const entries = await vault.auditLog.query({
  event?: string;              // Event type filter
  credentialName?: string;
  filter?: Record<string, string>; // Filter by identity or metadata fields
  since?: string;              // ISO 8601 timestamp
  until?: string;              // ISO 8601 timestamp
  limit?: number;
  offset?: number;
});

Returns: AuditEntry[].

See Audit Log for event types and entry structure.

Error types

import {
  VaultError, // Base error class
  AuthenticationError, // Invalid or expired token
  AuthorizationError, // Insufficient permissions
  CredentialNotFoundError, // Credential name does not exist
  LeaseExpiredError, // Lease has expired or been revoked
  LeaseLimitError, // maxLeases exceeded
  ValidationError, // Invalid credential value or parameters
} from '@ghoststack/vault-sdk';

All errors extend VaultError and include a code string and message.