///
import type { CustomAuthArgs } from "@oraichain/customauth";
import BN from "bn.js";
import type { curve } from "elliptic";
export type PubKeyType = "ecc";
export type PolynomialID = string;
export type PolyIDAndShares = [PolynomialID, string[]];
export type BNString = string | BN;
export interface EncryptedMessage {
ciphertext: string;
ephemPublicKey: string;
iv: string;
mac: string;
}
export interface ServiceProviderArgs {
enableLogging?: boolean;
postboxKey?: string;
}
export interface IBlsdkgSignable {
sign(privateKey: Uint8Array, message: Uint8Array): Uint8Array | undefined;
}
export interface OraiServiceProviderArgs extends ServiceProviderArgs {
customAuthArgs: CustomAuthArgs;
blsDkgPackage?: IBlsdkgSignable;
}
export type StringifiedType = Record;
export interface ISerializable {
toJSON(): StringifiedType;
}
export interface IPoint extends ISerializable {
x: BN;
y: BN;
encode(enc: string, params?: unknown): Buffer;
}
export interface IServiceProvider extends ISerializable {
enableLogging: boolean;
postboxKey: BN;
serviceProviderName: string;
encrypt(msg: Buffer): Promise;
decrypt(msg: EncryptedMessage): Promise;
retrievePubKey(type: PubKeyType): Buffer;
retrievePubKeyPoint(): curve.base.BasePoint;
sign(msg: BNString): string;
}
export type OraiStorageLayerAPIParams = {
pub_key_X: string;
pub_key_Y: string;
set_data: unknown;
signature: string;
namespace: string;
};
export interface IStorageLayer extends ISerializable {
storageLayerName: string;
getMetadata(params: {
serviceProvider?: IServiceProvider;
privKey?: BN;
}): Promise;
setMetadata(params: {
input: T;
serviceProvider?: IServiceProvider;
privKey?: BN;
}): Promise<{
message: string;
}>;
setMetadataStream(params: {
input: T[];
serviceProvider?: IServiceProvider;
privKey?: BN[];
}): Promise<{
message: string;
}>;
acquireWriteLock(params: {
serviceProvider?: IServiceProvider;
privKey?: BN;
}): Promise<{
status: number;
id?: string;
}>;
releaseWriteLock(params: {
id: string;
serviceProvider?: IServiceProvider;
privKey?: BN;
}): Promise<{
status: number;
}>;
}
export type OraiStorageLayerArgs = {
enableLogging?: boolean;
hostUrl?: string;
serverTimeOffset?: number;
};
export type MockStorageLayerArgs = {
dataMap: any;
lockMap: any;
};
export type ShareDescriptionMap = {
[shareIndexStr: string]: string[];
};
export type FromJSONConstructor = {
fromJSON(value: StringifiedType): any;
};
export type DeviceShareDescription = {
module: string;
userAgent: string;
dateAdded: number;
customDeviceInfo?: string;
};