PHP WebShell

Текущая директория: /opt/BitGoJS/modules/sdk-core/src/bitgo/enterprise

Просмотр файла: enterprises.ts

/**
 * @prettier
 */
import * as _ from 'lodash';
import { IBaseCoin } from '../baseCoin';
import { BitGoBase } from '../bitgoBase';
import { Enterprise } from './enterprise';
import { GetEnterpriseOptions, IEnterprises } from './iEnterprises';
import { EcdhDerivedKeypair } from '../keychain';
import { SerializedNtildeWithVerifiers } from '../utils/tss/ecdsa';

export class Enterprises implements IEnterprises {
  private readonly bitgo: BitGoBase;
  private readonly baseCoin: IBaseCoin;

  constructor(bitgo: BitGoBase, baseCoin: IBaseCoin) {
    this.bitgo = bitgo;
    this.baseCoin = baseCoin;
  }

  /**
   * List all enterprises available to the current user
   * @param params unused
   */
  public async list(params: Record<string, never> = {}): Promise<Enterprise[]> {
    const response = (await this.bitgo.get(this.bitgo.url('/enterprise')).result()) as any;
    return response.enterprises.map((e) => {
      // instantiate a new object for each enterprise
      return new Enterprise(this.bitgo, this.baseCoin, e);
    });
  }

  /**
   * Fetch an enterprise from BitGo
   * @param params
   */
  public async get(params: GetEnterpriseOptions = {}): Promise<Enterprise> {
    const enterpriseId = params.id;
    if (_.isUndefined(enterpriseId)) {
      throw new Error('id must not be empty');
    }
    if (!_.isString(enterpriseId)) {
      throw new Error('id must be hexadecimal enterprise ID');
    }

    const enterpriseData = (await this.bitgo.get(this.bitgo.url(`/enterprise/${enterpriseId}`)).result()) as any;
    return new Enterprise(this.bitgo, this.baseCoin, enterpriseData);
  }

  /**
   * Create a new enterprise
   * @param params
   */
  // TODO: (CT-686) Flesh out params object with valid enterprise creation parameters
  public async create(params: any = {}): Promise<Enterprise> {
    const enterpriseData = (await this.bitgo.post(this.bitgo.url(`/enterprise`)).send(params).result()) as any;
    return new Enterprise(this.bitgo, this.baseCoin, enterpriseData);
  }

  /**
   * Resign TSS configs of all enterprises belonging to the user with a
   * new user password / ecdh keychain
   */
  public async resignTssConfigsForEnterprises(
    oldEcdhKeypair: EcdhDerivedKeypair,
    newEcdhKeypair: EcdhDerivedKeypair
  ): Promise<void> {
    const enterpriseTssConfigsForUser = await this.bitgo
      .get(this.bitgo.url('/tssconfigs/ecdsa', 2))
      .query({
        createdBy: 'me',
      })
      .send()
      .result();

    const resigningPromises = enterpriseTssConfigsForUser.map(async (enterpriseTssConfig) => {
      const enterprise = new Enterprise(this.bitgo, this.bitgo.coin('tbtc'), {
        id: enterpriseTssConfig.enterpriseId,
        name: '',
      });
      const enterpriseChallenge = enterpriseTssConfig.ecdsa.challenge?.enterprise as SerializedNtildeWithVerifiers;
      const bitgoNitroChallenge = enterpriseTssConfig.ecdsa.challenge?.bitgoNitroHsm as SerializedNtildeWithVerifiers;
      const bitgoInstChallenge = enterpriseTssConfig.ecdsa.challenge
        ?.bitgoInstitutionalHsm as SerializedNtildeWithVerifiers;
      await enterprise.resignEnterpriseChallenges(
        oldEcdhKeypair,
        newEcdhKeypair,
        enterpriseChallenge,
        bitgoInstChallenge,
        bitgoNitroChallenge
      );
    });

    await Promise.all(resigningPromises);
  }
}

Выполнить команду


Для локальной разработки. Не используйте в интернете!