Skip to main content Link Search Menu Expand Document (external link)

CredentialService overview

Credential Storage Service

Provides secure credential storage across multiple platforms. Supports keychain, encrypted file fallback, and environment variables.

Added in v0.0.3


Table of contents


layers

CredentialServiceLive

Live implementation of CredentialService.

Provides secure credential storage with automatic fallback:

  1. Environment variables (read-only)
  2. System keychain (preferred for storage)
  3. Encrypted file (fallback)

Signature

export declare const CredentialServiceLive: Layer.Layer<CredentialService, never, never>

Added in v0.0.3

services

CredentialService

Context tag for CredentialService.

Signature

export declare const CredentialService: Context.Tag<CredentialService, CredentialService>

Added in v0.0.3

utils

CredentialService (interface)

Credential storage service interface.

Provides methods for storing and retrieving OAuth credentials across different storage mechanisms.

Signature

export interface CredentialService {
  /**
   * Stores OAuth credentials securely.
   *
   * Attempts storage in this order:
   * 1. System keychain (via keytar)
   * 2. Encrypted file in ~/.ping-cli/credentials.enc
   *
   * @param credentials - OAuth credentials to store
   * @returns Effect that succeeds with void or fails with CredentialStorageError
   *
   * @since 0.0.3
   */
  readonly store: (credentials: StoredCredentials) => Effect.Effect<void, CredentialStorageError>

  /**
   * Retrieves stored OAuth credentials.
   *
   * Attempts retrieval in this order:
   * 1. Environment variables (PINGONE_CLIENT_ID, PINGONE_CLIENT_SECRET, etc.)
   * 2. System keychain (via keytar)
   * 3. Encrypted file in ~/.ping-cli/credentials.enc
   *
   * @returns Effect that succeeds with StoredCredentials or fails with CredentialStorageError
   *
   * @since 0.0.3
   */
  readonly retrieve: () => Effect.Effect<StoredCredentials, CredentialStorageError>

  /**
   * Deletes stored OAuth credentials.
   *
   * Removes credentials from:
   * - System keychain
   * - Encrypted file
   *
   * @returns Effect that succeeds with void or fails with CredentialStorageError
   *
   * @since 0.0.3
   */
  readonly delete: () => Effect.Effect<void, CredentialStorageError>
}

Added in v0.0.3