UNPKG

1.71 kBPlain TextView Raw
1import Config from './config'
2import Accounts from './accounts'
3import reduct = require('reduct')
4import {
5 BackendConstructor,
6 BackendInstance,
7 SubmitPaymentParams
8} from '../types/backend'
9
10import { loadModuleOfType } from '../lib/utils'
11
12const DEFAULT_BACKEND = 'one-to-one'
13
14export default class RateBackend implements BackendInstance {
15 protected backend: BackendInstance
16 private accounts: Accounts
17
18 constructor (deps: reduct.Injector) {
19 const config = deps(Config)
20 this.accounts = deps(Accounts)
21
22 const Backend: BackendConstructor = loadModuleOfType('backend', config.backend || DEFAULT_BACKEND)
23 this.backend = new Backend(Object.assign({
24 spread: config.spread
25 }, config.backendConfig), {
26 getInfo: (account: string) => this.accounts.getInfo(account),
27 accounts: this.accounts
28 })
29 }
30
31 connect () {
32 return this.backend.connect()
33 }
34
35 getRate (sourceAccount: string, destinationAccount: string) {
36 return this.backend.getRate(sourceAccount, destinationAccount)
37 }
38
39 submitPayment (params: SubmitPaymentParams) {
40 return this.backend.submitPayment(params)
41 }
42
43 submitPacket (params: SubmitPaymentParams) {
44 if (this.backend.submitPacket) {
45 return this.backend.submitPacket(params)
46 }
47 return Promise.resolve()
48 }
49
50 async getStatus () {
51 const rates = {}
52 const accountIds = this.accounts.getAccountIds()
53 for (const srcAccount of accountIds) {
54 const accountRates = rates[srcAccount] = {}
55 for (const dstAccount of accountIds) {
56 if (srcAccount === dstAccount) continue
57 accountRates[dstAccount] = await this.backend.getRate(srcAccount, dstAccount)
58 }
59 }
60 return rates
61 }
62}