debitisimpedit
Version:
adapte eos and eth, and adapte pluin - MateMask and Scatter
116 lines (98 loc) • 2.47 kB
text/typescript
namespace eos {
export type IAccount = {
name: string
authority: string
blockchain: string
}
export const EosEvent = {
MISS_IDENTITY: 'miss identity callback'
}
export type Identity = {
hash: string
publicKey: string
name: string
kyc: boolean
accounts: IAccount[]
}
export type Scatter = {
identity: Identity
requireVersion: Function
getIdentity: (param: any) => Promise<Identity>
eos: Function
eth: Function
forgetIdentity: Function
}
export type EosSetting = {
privateKey?: string
defaultContract?: string
nets: string | string[]
chainId: string
}
class MultiNet extends base.Net {
private _urls: {
url: string
dt: number
}[]
public constructor(...urls: string[]) {
super(urls[0])
this._urls = []
for (let i = 0; i < urls.length; i++) {
this._urls[i] = { url: urls[i], dt: 0 }
}
}
private sort() {
this._urls.sort((a, b) => {
return a.dt - b.dt
})
this._urls.length > 0 && (this._url = this._urls[0].url)
}
public recorde(dt: number = Number.POSITIVE_INFINITY) {
const a = this._urls[0]
a && (a.dt = dt) && this.sort()
}
}
export class EOSConfig {
private _setting: EosSetting
private _nets: MultiNet
public get setting(): EosSetting {
return this._setting
}
public constructor(setting: EosSetting) {
this._setting = setting
this._nets = new MultiNet(...(typeof this._setting.nets === 'string' ? [this._setting.nets] : this._setting.nets))
}
public get url(): string {
return this._nets.url
}
public get httpEndpoint(): string {
return this._nets.url
}
public get host(): string {
return this._nets.host
}
public get port(): number {
return this._nets.port
}
public get protocal(): string {
return this._nets.protocal
}
public get privateKey(): string | undefined {
return this._setting.privateKey
}
public get defaultContract(): string | undefined {
return this._setting.defaultContract
}
public get chainId(): string {
return this._setting.chainId
}
public get eosNetwork() {
return {
blockchain: 'eos',
host: this._nets.host,
port: this._nets.port,
protocol: this._nets.protocal,
chainId: this._setting.chainId
}
}
}
}