UNPKG

@openzeppelin/hardhat-upgrades

Version:

[![Docs](https://img.shields.io/badge/docs-%F0%9F%93%84-blue)](https://docs.openzeppelin.com/upgrades-plugins/hardhat-upgrades) [![NPM Package](https://img.shields.io/npm/v/@openzeppelin/hardhat-upgrades.svg)](https://www.npmjs.org/package/@openzeppelin/h

67 lines (57 loc) • 2.03 kB
import { HardhatRuntimeEnvironment } from 'hardhat/types/hre'; import type { NetworkConnection } from 'hardhat/types/network'; import { getNetwork } from './utils.js'; import { getDeployClient } from './client.js'; import { ApprovalProcessResponse } from '@openzeppelin/defender-sdk-deploy-client'; export interface ApprovalProcess { approvalProcessId: string; address?: string; viaType?: ApprovalProcessResponse['viaType']; } export type GetDeployApprovalProcessFunction = () => Promise<ApprovalProcess>; export type GetUpgradeApprovalProcessFunction = () => Promise<ApprovalProcess>; export function makeGetDeployApprovalProcess( hre: HardhatRuntimeEnvironment, connection: NetworkConnection, ): GetDeployApprovalProcessFunction { return async function getDeployApprovalProcess() { return await getApprovalProcess(hre, 'deploy', connection); }; } export function makeGetUpgradeApprovalProcess( hre: HardhatRuntimeEnvironment, connection: NetworkConnection, ): GetUpgradeApprovalProcessFunction { return async function getUpgradeApprovalProcess() { return await getApprovalProcess(hre, 'upgrade', connection); }; } async function getApprovalProcess( hre: HardhatRuntimeEnvironment, kind: 'deploy' | 'upgrade', connection: NetworkConnection, ) { const client = getDeployClient(hre); const network = await getNetwork(hre, connection); let response: ApprovalProcessResponse; switch (kind) { case 'deploy': response = await client.getDeployApprovalProcess(network); break; case 'upgrade': response = await client.getUpgradeApprovalProcess(network); break; // default case should be unreachable } if (response.network !== network) { // This should not happen throw new Error( `Returned an approval process for network ${response.network} which does not match current network ${network}`, ); } return { approvalProcessId: response.approvalProcessId, address: response.via, viaType: response.viaType, }; }