import NetworkManager from "./core/network/network-manager";

/**
 * Singleton instance of {@link NetworkManager}
 */
export const Networks = NetworkManager.getInstance();

export type * from "./common/types";
export type * from "./common/interfaces";
export type * from "./core/transaction/interfaces";
export type { ITxSignature } from "./core/transaction/txsignature";
export type { ScriptElement } from "./core/script/script";
export type { PrivateKeyVariants } from "./keys/privatekey";
export type { PublicKeyVariants } from "./keys/publickey";

export { default as BNExtended } from "./crypto/bn.extension";
export { default as Point } from "./crypto/point";
export { default as Hash } from "./crypto/hash";
export { default as Signature } from "./crypto/signature";
export { default as DigitalSignature} from "./crypto/digital-signature"
export { default as ECDSA } from "./crypto/ecdsa";
export { default as Schnorr } from "./crypto/schnorr";

export { default as BufferReader } from "./encoding/bufferreader";
export { default as BufferWriter } from "./encoding/bufferwriter";

export { Network } from "./core/network/network";
export { default as NetworkManager } from "./core/network/network-manager";

export { UnitType, default as UnitUtils } from "./utils/unit.utils";
export { default as BufferUtils } from "./utils/buffer.utils";
export { default as CommonUtils } from "./utils/common.utils";

export { default as PrivateKey } from "./keys/privatekey";
export { default as PublicKey } from "./keys/publickey";
export { default as HDPrivateKey } from "./keys/hdprivatekey";
export { default as HDPublicKey } from "./keys/hdpublickey";

export { Opcode, default as ScriptOpcode } from "./core/script/opcode";
export { default as Script } from "./core/script/script";
export { default as ScriptFactory } from "./core/script/script.factory";

export { default as Address } from "./core/address/address";
export { AddressType } from "./core/address/address-formatter";

export { default as Block } from "./core/block/block";
export { default as BlockHeader } from "./core/block/blockheader";

export { default as SighashType, InputSighashType, OutputSighashType } from "./core/transaction/sighashtype";
export { default as Transaction } from "./core/transaction/transaction";
export { default as UnspentOutput } from "./core/transaction/unspentoutput";
export { default as Output, OutputType } from "./core/transaction/output";
export { default as Input, InputType } from "./core/transaction/input/input";
export { default as PublicKeyTemplateInput } from "./core/transaction/input/publickeytemplate";
export { default as ScriptTemplateInput } from "./core/transaction/input/scripttemplate";
export { default as PublicKeyHashInput } from "./core/transaction/input/publickeyhash";
export { default as TxSigner } from "./core/transaction/txsigner";
export { default as TxSignature } from "./core/transaction/txsignature";
export { default as TransactionBuilder } from "./core/transaction/txbuilder";

export { default as Message } from "./core/message";
export { default as GroupToken, GroupIdFlag, GroupIdType } from "./core/grouptoken";
