This repository has been archived on 2023-04-09. You can view files and clone it, but cannot push or open issues or pull requests.
chainsafe-bls/src/index.ts

33 lines
927 B
TypeScript
Raw Normal View History

2020-11-25 15:03:11 +00:00
import {IBls} from "./interface";
2020-11-25 16:23:53 +00:00
import {bls as blsHerumi} from "./herumi";
2020-11-25 15:03:11 +00:00
export type Implementation = "herumi" | "blst-native";
2020-11-25 16:09:44 +00:00
// TODO: Use a Proxy for example to throw an error if it's not initialized yet
export let bls: IBls;
2020-11-25 15:03:11 +00:00
2020-11-25 16:23:53 +00:00
async function getImplementation(impl: Implementation): Promise<IBls> {
2020-11-25 15:03:11 +00:00
switch (impl) {
case "herumi":
2020-11-25 16:23:53 +00:00
// eslint-disable-next-line @typescript-eslint/no-require-imports
2020-11-25 16:09:44 +00:00
await blsHerumi.init();
2020-11-25 15:03:11 +00:00
return blsHerumi;
case "blst-native":
if (typeof require !== "function") {
throw Error("blst-native is only supported in NodeJS");
}
2020-11-25 16:23:53 +00:00
// eslint-disable-next-line @typescript-eslint/no-require-imports
2020-11-25 15:03:11 +00:00
return require("./blst");
default:
throw new Error(`Unsupported implementation - ${impl}`);
}
}
2020-11-25 16:23:53 +00:00
export async function init(impl: Implementation): Promise<void> {
2020-11-25 15:03:11 +00:00
bls = await getImplementation(impl);
}
export default bls;