All files / src/Program/options stakePoolMetadata.ts

73.68% Statements 14/19
57.14% Branches 4/7
40% Functions 2/5
70.58% Lines 12/17

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50  38x 38x 38x 38x   38x 38x 38x     38x       38x   38x               38x                                       38x        
import { Command } from 'commander';
import { MissingProgramOption } from '../errors';
import { STAKE_POOL_METADATA_QUEUE } from '@cardano-sdk/projection-typeorm';
import { addOptions, newOption } from './util';
import { urlValidator } from '../../util/validators';
 
export enum StakePoolMetadataOptionDescriptions {
  Mode = 'This mode governs where the stake pool metadata is fetched from',
  Url = 'SMASH server api url'
}
 
export enum StakePoolMetadataFetchMode {
  /**
   * Use metadata available from the provided data by the projection. Projection reads its data directly from the certificate.
   */
  DIRECT = 'direct',
  /** Use configured SMASH server to fetch stake pool metadata. */
  SMASH = 'smash'
}
 
export interface StakePoolMetadataProgramOptions {
  smashUrl?: string;
  metadataFetchMode: StakePoolMetadataFetchMode;
}
 
export const withStakePoolMetadataOptions = (command: Command) => {
  addOptions(command, [
    newOption(
      '--metadata-fetch-mode <metadataFetchMode>',
      StakePoolMetadataOptionDescriptions.Mode,
      'METADATA_FETCH_MODE',
      (mode: string) => StakePoolMetadataFetchMode[mode.toUpperCase() as keyof typeof StakePoolMetadataFetchMode],
      'direct'
    ).choices(['direct', 'smash']),
    newOption(
      '--smash-url <smashUrl>',
      StakePoolMetadataOptionDescriptions.Url,
      'SMASH_URL',
      urlValidator(StakePoolMetadataOptionDescriptions.Url, true)
    )
  ]);
 
  return command;
};
 
export const checkProgramOptions = (metadataFetchMode: StakePoolMetadataFetchMode, smashUrl: string | undefined) => {
  Iif (metadataFetchMode === StakePoolMetadataFetchMode.SMASH && !smashUrl)
    throw new MissingProgramOption(STAKE_POOL_METADATA_QUEUE, 'smash-url to be set when metadata-fetch-mode is smash');
};