add currencies and currency defaults to DB

This commit is contained in:
Florian Dold 2017-03-24 16:59:23 +01:00
parent 76ef679688
commit df87dc0242
No known key found for this signature in database
GPG Key ID: D2E4F00F29D02A4B

View File

@ -202,6 +202,38 @@ export interface NonceRecord {
pub: string;
}
export interface AuditorRecord {
baseUrl: string;
auditorPub: string;
expirationStamp: number;
}
export interface CurrencyRecord {
name: string;
fractionalDigits: number;
auditors: AuditorRecord[];
}
export interface ConfigRecord {
key: string;
value: any;
}
const builtinCurrencies: CurrencyRecord[] = [
{
name: "KUDOS",
fractionalDigits: 2,
auditors: [
{
baseUrl: "https://auditor.demo.taler.net",
expirationStamp: (new Date(2027, 1)).getTime(),
auditorPub: "XN9KMN5G2KGPCAN0E89MM5HE8FV4WBWA9KDTMTDR817MWBCYA7H0",
},
]
},
];
function setTimeout(f: any, t: number) {
return chrome.extension.getBackgroundPage().setTimeout(f, t);
@ -354,7 +386,7 @@ export namespace Stores {
class DenominationsStore extends Store<DenominationRecord> {
constructor() {
// case needed because of bug in type annotations
// cast needed because of bug in type annotations
super("denominations",
{keyPath: ["exchangeBaseUrl", "denomPub"] as any as IDBKeyPath});
}
@ -363,6 +395,18 @@ export namespace Stores {
denomPubIndex = new Index<string, DenominationRecord>(this, "denomPub", "denomPub");
}
class CurrenciesStore extends Store<CurrencyRecord> {
constructor() {
super("currencies", {keyPath: "name"});
}
}
class ConfigStore extends Store<ConfigRecord> {
constructor() {
super("config", {keyPath: "key"});
}
}
export const exchanges: ExchangeStore = new ExchangeStore();
export const nonces: NonceStore = new NonceStore();
export const transactions: TransactionsStore = new TransactionsStore();
@ -373,6 +417,8 @@ export namespace Stores {
export const offers: OffersStore = new OffersStore();
export const precoins: Store<PreCoinRecord> = new Store<PreCoinRecord>("precoins", {keyPath: "coinPub"});
export const denominations: DenominationsStore = new DenominationsStore();
export const currencies: CurrenciesStore = new CurrenciesStore();
export const config: ConfigStore = new ConfigStore();
}
@ -405,9 +451,29 @@ export class Wallet {
this.notifier = notifier;
this.cryptoApi = new CryptoApi();
this.fillDefaults();
this.resumePendingFromDb();
}
private async fillDefaults() {
let onTrue = (r: QueryRoot) => {
console.log("defaults already applied");
};
let onFalse = (r: QueryRoot) => {
console.log("applying defaults");
r.put(Stores.config, {key: "currencyDefaultsApplied", value: true})
.putAll(Stores.currencies, builtinCurrencies)
.finish();
};
await (
this.q()
.iter(Stores.config)
.filter(x => x.key == "currencyDefaultsApplied")
.first()
.cond((x) => x && x.value, onTrue, onFalse)
);
}
private startOperation(operationId: string) {
this.runningOperations.add(operationId);