add Infura wallet support

This commit is contained in:
Josh Harvey 2018-07-08 21:31:26 +03:00
parent 05e7889dc0
commit ac89f0e5e9
9 changed files with 472 additions and 513 deletions

View file

@ -181,6 +181,7 @@ function fetchData () {
{code: 'mock-ticker', display: 'Mock ticker', class: 'ticker', cryptos: ALL_CRYPTOS}, {code: 'mock-ticker', display: 'Mock ticker', class: 'ticker', cryptos: ALL_CRYPTOS},
{code: 'bitcoind', display: 'bitcoind', class: 'wallet', cryptos: ['BTC']}, {code: 'bitcoind', display: 'bitcoind', class: 'wallet', cryptos: ['BTC']},
{code: 'no-layer2', display: 'No Layer 2', class: 'layer2', cryptos: ALL_CRYPTOS}, {code: 'no-layer2', display: 'No Layer 2', class: 'layer2', cryptos: ALL_CRYPTOS},
{code: 'infura', display: 'Infura', class: 'wallet', cryptos: ['ETH']},
{code: 'geth', display: 'geth', class: 'wallet', cryptos: ['ETH']}, {code: 'geth', display: 'geth', class: 'wallet', cryptos: ['ETH']},
{code: 'zcashd', display: 'zcashd', class: 'wallet', cryptos: ['ZEC']}, {code: 'zcashd', display: 'zcashd', class: 'wallet', cryptos: ['ZEC']},
{code: 'litecoind', display: 'litecoind', class: 'wallet', cryptos: ['LTC']}, {code: 'litecoind', display: 'litecoind', class: 'wallet', cryptos: ['LTC']},

View file

@ -0,0 +1,187 @@
'use strict'
const Web3 = require('web3')
const web3 = new Web3()
const hdkey = require('ethereumjs-wallet/hdkey')
const Tx = require('ethereumjs-tx')
const util = require('ethereumjs-util')
const pify = require('pify')
const NAME = 'geth'
exports.SUPPORTED_MODULES = ['wallet']
const paymentPrefixPath = "m/44'/60'/0'/0'"
const defaultPrefixPath = "m/44'/60'/1'/0'"
module.exports = {
NAME,
balance,
sendCoins,
newAddress,
getStatus,
sweep,
defaultAddress,
supportsHd: true,
newFunding,
privateKey,
isStrictAddress,
connect
}
function connect (url) {
if (!web3.isConnected()) {
web3.setProvider(new web3.providers.HttpProvider(url))
}
}
const hex = bigNum => '0x' + bigNum.truncated().toString(16)
function privateKey (account) {
return defaultWallet(account).getPrivateKey()
}
function isStrictAddress (cryptoCode, toAddress) {
return cryptoCode === 'ETH' && util.isValidChecksumAddress(toAddress)
}
function sendCoins (account, toAddress, cryptoAtoms, cryptoCode) {
return generateTx(toAddress, defaultWallet(account), cryptoAtoms, false)
.then(pify(web3.eth.sendRawTransaction))
}
function checkCryptoCode (cryptoCode) {
if (cryptoCode === 'ETH') return Promise.resolve()
return Promise.reject(new Error('cryptoCode must be ETH'))
}
function balance (account, cryptoCode) {
return checkCryptoCode(cryptoCode)
.then(() => pendingBalance(defaultAddress(account)))
}
const pendingBalance = address => _balance(true, address)
const confirmedBalance = address => _balance(false, address)
function _balance (includePending, address) {
const block = includePending ? 'pending' : undefined
return pify(web3.eth.getBalance)(address.toLowerCase(), block)
}
function generateTx (_toAddress, wallet, amount, includesFee) {
const fromAddress = '0x' + wallet.getAddress().toString('hex')
const toAddress = _toAddress.toLowerCase()
const txTemplate = {
from: fromAddress,
to: toAddress,
value: amount
}
const promises = [
pify(web3.eth.estimateGas)(txTemplate),
pify(web3.eth.getGasPrice)(),
pify(web3.eth.getTransactionCount)(fromAddress)
]
return Promise.all(promises)
.then(arr => {
const gas = arr[0]
const gasPrice = arr[1]
const txCount = arr[2]
const toSend = includesFee
? amount.minus(gasPrice.times(gas))
: amount
const rawTx = {
nonce: txCount,
gasPrice: hex(gasPrice),
gasLimit: gas,
to: toAddress,
from: fromAddress,
value: hex(toSend)
}
const tx = new Tx(rawTx)
const privateKey = wallet.getPrivateKey()
tx.sign(privateKey)
return '0x' + tx.serialize().toString('hex')
})
}
function defaultWallet (account) {
return defaultHdNode(account).deriveChild(0).getWallet()
}
function defaultAddress (account) {
return defaultWallet(account).getChecksumAddressString()
}
function sweep (account, cryptoCode, hdIndex) {
const wallet = paymentHdNode(account).deriveChild(hdIndex).getWallet()
const fromAddress = wallet.getChecksumAddressString()
return confirmedBalance(fromAddress)
.then(r => {
if (r.eq(0)) return
return generateTx(defaultAddress(account), wallet, r, true)
.then(signedTx => pify(web3.eth.sendRawTransaction)(signedTx))
})
}
function newAddress (account, info) {
const childNode = paymentHdNode(account).deriveChild(info.hdIndex)
return Promise.resolve(childNode.getWallet().getChecksumAddressString())
}
function getStatus (account, toAddress, cryptoAtoms, cryptoCode) {
return checkCryptoCode(cryptoCode)
.then(() => confirmedBalance(toAddress))
.then(confirmed => {
if (confirmed.gte(cryptoAtoms)) return {status: 'confirmed'}
return pendingBalance(toAddress)
.then(pending => {
if (pending.gte(cryptoAtoms)) return {status: 'published'}
if (pending.gt(0)) return {status: 'insufficientFunds'}
return {status: 'notSeen'}
})
})
}
function paymentHdNode (account) {
const masterSeed = account.seed
if (!masterSeed) throw new Error('No master seed!')
const key = hdkey.fromMasterSeed(masterSeed)
return key.derivePath(paymentPrefixPath)
}
function defaultHdNode (account) {
const masterSeed = account.seed
if (!masterSeed) throw new Error('No master seed!')
const key = hdkey.fromMasterSeed(masterSeed)
return key.derivePath(defaultPrefixPath)
}
function newFunding (account, cryptoCode) {
return checkCryptoCode(cryptoCode)
.then(() => {
const fundingAddress = defaultAddress(account)
const promises = [
pendingBalance(fundingAddress),
confirmedBalance(fundingAddress)
]
return Promise.all(promises)
.then(([fundingPendingBalance, fundingConfirmedBalance]) => ({
fundingPendingBalance,
fundingConfirmedBalance,
fundingAddress
}))
})
}

View file

@ -1,189 +1,9 @@
'use strict' const base = require('./base')
const Web3 = require('web3')
const web3 = new Web3()
const hdkey = require('ethereumjs-wallet/hdkey')
const Tx = require('ethereumjs-tx')
const util = require('ethereumjs-util')
const pify = require('pify')
const coinUtils = require('../../../coin-utils') const coinUtils = require('../../../coin-utils')
const NAME = 'geth'
exports.SUPPORTED_MODULES = ['wallet']
const paymentPrefixPath = "m/44'/60'/0'/0'"
const defaultPrefixPath = "m/44'/60'/1'/0'"
const cryptoRec = coinUtils.getCryptoCurrency('ETH') const cryptoRec = coinUtils.getCryptoCurrency('ETH')
const defaultPort = cryptoRec.defaultPort const defaultPort = cryptoRec.defaultPort
module.exports = { base.connect(`http://localhost:${defaultPort}`)
NAME,
balance,
sendCoins,
newAddress,
getStatus,
sweep,
defaultAddress,
supportsHd: true,
newFunding,
privateKey,
isStrictAddress
}
if (!web3.isConnected()) { module.exports = base
web3.setProvider(new web3.providers.HttpProvider(`http://localhost:${defaultPort}`))
}
const hex = bigNum => '0x' + bigNum.truncated().toString(16)
function privateKey (account) {
return defaultWallet(account).getPrivateKey()
}
function isStrictAddress (cryptoCode, toAddress) {
return cryptoCode === 'ETH' && util.isValidChecksumAddress(toAddress)
}
function sendCoins (account, toAddress, cryptoAtoms, cryptoCode) {
return generateTx(toAddress, defaultWallet(account), cryptoAtoms, false)
.then(pify(web3.eth.sendRawTransaction))
}
function checkCryptoCode (cryptoCode) {
if (cryptoCode === 'ETH') return Promise.resolve()
return Promise.reject(new Error('cryptoCode must be ETH'))
}
function balance (account, cryptoCode) {
return checkCryptoCode(cryptoCode)
.then(() => pendingBalance(defaultAddress(account)))
}
const pendingBalance = address => _balance(true, address)
const confirmedBalance = address => _balance(false, address)
function _balance (includePending, address) {
const block = includePending ? 'pending' : undefined
return pify(web3.eth.getBalance)(address.toLowerCase(), block)
}
function generateTx (_toAddress, wallet, amount, includesFee) {
const fromAddress = '0x' + wallet.getAddress().toString('hex')
const toAddress = _toAddress.toLowerCase()
const txTemplate = {
from: fromAddress,
to: toAddress,
value: amount
}
const promises = [
pify(web3.eth.estimateGas)(txTemplate),
pify(web3.eth.getGasPrice)(),
pify(web3.eth.getTransactionCount)(fromAddress)
]
return Promise.all(promises)
.then(arr => {
const gas = arr[0]
const gasPrice = arr[1]
const txCount = arr[2]
const toSend = includesFee
? amount.minus(gasPrice.times(gas))
: amount
const rawTx = {
nonce: txCount,
gasPrice: hex(gasPrice),
gasLimit: gas,
to: toAddress,
from: fromAddress,
value: hex(toSend)
}
const tx = new Tx(rawTx)
const privateKey = wallet.getPrivateKey()
tx.sign(privateKey)
return '0x' + tx.serialize().toString('hex')
})
}
function defaultWallet (account) {
return defaultHdNode(account).deriveChild(0).getWallet()
}
function defaultAddress (account) {
return defaultWallet(account).getChecksumAddressString()
}
function sweep (account, cryptoCode, hdIndex) {
const wallet = paymentHdNode(account).deriveChild(hdIndex).getWallet()
const fromAddress = wallet.getChecksumAddressString()
return confirmedBalance(fromAddress)
.then(r => {
if (r.eq(0)) return
return generateTx(defaultAddress(account), wallet, r, true)
.then(signedTx => pify(web3.eth.sendRawTransaction)(signedTx))
})
}
function newAddress (account, info) {
const childNode = paymentHdNode(account).deriveChild(info.hdIndex)
return Promise.resolve(childNode.getWallet().getChecksumAddressString())
}
function getStatus (account, toAddress, cryptoAtoms, cryptoCode) {
return checkCryptoCode(cryptoCode)
.then(() => confirmedBalance(toAddress))
.then(confirmed => {
if (confirmed.gte(cryptoAtoms)) return {status: 'confirmed'}
return pendingBalance(toAddress)
.then(pending => {
if (pending.gte(cryptoAtoms)) return {status: 'published'}
if (pending.gt(0)) return {status: 'insufficientFunds'}
return {status: 'notSeen'}
})
})
}
function paymentHdNode (account) {
const masterSeed = account.seed
if (!masterSeed) throw new Error('No master seed!')
const key = hdkey.fromMasterSeed(masterSeed)
return key.derivePath(paymentPrefixPath)
}
function defaultHdNode (account) {
const masterSeed = account.seed
if (!masterSeed) throw new Error('No master seed!')
const key = hdkey.fromMasterSeed(masterSeed)
return key.derivePath(defaultPrefixPath)
}
function newFunding (account, cryptoCode) {
return checkCryptoCode(cryptoCode)
.then(() => {
const fundingAddress = defaultAddress(account)
const promises = [
pendingBalance(fundingAddress),
confirmedBalance(fundingAddress)
]
return Promise.all(promises)
.then(([fundingPendingBalance, fundingConfirmedBalance]) => ({
fundingPendingBalance,
fundingConfirmedBalance,
fundingAddress
}))
})
}

View file

@ -0,0 +1,11 @@
const _ = require('lodash/fp')
const base = require('../geth/base')
function run (account) {
const apiKey = account.apiKey
if (!apiKey) throw new Error('Need to configure API key for Infura')
base.connect(`https://mainnet.infura.io/${apiKey}`)
}
module.exports = _.merge(base, {run})

View file

@ -34,9 +34,11 @@ function fetchWallet (settings, cryptoCode) {
const masterSeed = Buffer.from(hex.trim(), 'hex') const masterSeed = Buffer.from(hex.trim(), 'hex')
const plugin = configManager.cryptoScoped(cryptoCode, settings.config).wallet const plugin = configManager.cryptoScoped(cryptoCode, settings.config).wallet
const wallet = ph.load(ph.WALLET, plugin) const wallet = ph.load(ph.WALLET, plugin)
const account = settings.accounts[plugin] const rawAccount = settings.accounts[plugin]
const account = _.set('seed', computeSeed(masterSeed), rawAccount)
if (_.isFunction(wallet.run)) wallet.run(account)
return {wallet, account: _.set('seed', computeSeed(masterSeed), account)} return {wallet, account}
}) })
} }

14
package-lock.json generated
View file

@ -8665,15 +8665,21 @@
"integrity": "sha1-eWkVhNmGB/UHC9O3CkDmuyLkAes=" "integrity": "sha1-eWkVhNmGB/UHC9O3CkDmuyLkAes="
}, },
"web3": { "web3": {
"version": "0.19.1", "version": "0.20.6",
"resolved": "https://registry.npmjs.org/web3/-/web3-0.19.1.tgz", "resolved": "https://registry.npmjs.org/web3/-/web3-0.20.6.tgz",
"integrity": "sha1-52PVsRB8S8JKvU+MvuG6Nlnm6zE=", "integrity": "sha1-PpcwauAk+yThCj11yIQwJWIhUSA=",
"requires": { "requires": {
"bignumber.js": "^4.0.2", "bignumber.js": "git+https://github.com/frozeman/bignumber.js-nolookahead.git#57692b3ecfc98bbdd6b3a516cb2353652ea49934",
"crypto-js": "^3.1.4", "crypto-js": "^3.1.4",
"utf8": "^2.1.1", "utf8": "^2.1.1",
"xhr2": "*", "xhr2": "*",
"xmlhttprequest": "*" "xmlhttprequest": "*"
},
"dependencies": {
"bignumber.js": {
"version": "git+https://github.com/frozeman/bignumber.js-nolookahead.git#57692b3ecfc98bbdd6b3a516cb2353652ea49934",
"from": "git+https://github.com/frozeman/bignumber.js-nolookahead.git"
}
} }
}, },
"which": { "which": {

View file

@ -56,7 +56,7 @@
"talisman": "^0.20.0", "talisman": "^0.20.0",
"twilio": "^3.6.1", "twilio": "^3.6.1",
"uuid": "^3.1.0", "uuid": "^3.1.0",
"web3": "^0.19.1", "web3": "^0.20.6",
"winston": "^2.4.2", "winston": "^2.4.2",
"ws": "^3.1.0", "ws": "^3.1.0",
"xml-stream": "^0.4.5" "xml-stream": "^0.4.5"

View file

@ -6446,48 +6446,6 @@ var _elm_lang$core$Set$partition = F2(
}; };
}); });
var _elm_community$json_extra$Json_Decode_Extra$when = F3(
function (checkDecoder, check, passDecoder) {
return A2(
_elm_lang$core$Json_Decode$andThen,
function (checkVal) {
return check(checkVal) ? passDecoder : _elm_lang$core$Json_Decode$fail(
A2(
_elm_lang$core$Basics_ops['++'],
'Check failed with input `',
A2(
_elm_lang$core$Basics_ops['++'],
_elm_lang$core$Basics$toString(checkVal),
'`')));
},
checkDecoder);
});
var _elm_community$json_extra$Json_Decode_Extra$combine = A2(
_elm_lang$core$List$foldr,
_elm_lang$core$Json_Decode$map2(
F2(
function (x, y) {
return {ctor: '::', _0: x, _1: y};
})),
_elm_lang$core$Json_Decode$succeed(
{ctor: '[]'}));
var _elm_community$json_extra$Json_Decode_Extra$collection = function (decoder) {
return A2(
_elm_lang$core$Json_Decode$andThen,
function (length) {
return _elm_community$json_extra$Json_Decode_Extra$combine(
A2(
_elm_lang$core$List$map,
function (index) {
return A2(
_elm_lang$core$Json_Decode$field,
_elm_lang$core$Basics$toString(index),
decoder);
},
A2(_elm_lang$core$List$range, 0, length - 1)));
},
A2(_elm_lang$core$Json_Decode$field, 'length', _elm_lang$core$Json_Decode$int));
};
var _elm_community$json_extra$Json_Decode_Extra$fromResult = function (result) { var _elm_community$json_extra$Json_Decode_Extra$fromResult = function (result) {
var _p0 = result; var _p0 = result;
if (_p0.ctor === 'Ok') { if (_p0.ctor === 'Ok') {
@ -6519,19 +6477,6 @@ var _elm_community$json_extra$Json_Decode_Extra$doubleEncoded = function (decode
}, },
_elm_lang$core$Json_Decode$string); _elm_lang$core$Json_Decode$string);
}; };
var _elm_community$json_extra$Json_Decode_Extra$keys = A2(
_elm_lang$core$Json_Decode$map,
A2(
_elm_lang$core$List$foldl,
F2(
function (_p4, acc) {
var _p5 = _p4;
return {ctor: '::', _0: _p5._0, _1: acc};
}),
{ctor: '[]'}),
_elm_lang$core$Json_Decode$keyValuePairs(
_elm_lang$core$Json_Decode$succeed(
{ctor: '_Tuple0'})));
var _elm_community$json_extra$Json_Decode_Extra$sequenceHelp = F2( var _elm_community$json_extra$Json_Decode_Extra$sequenceHelp = F2(
function (decoders, jsonValues) { function (decoders, jsonValues) {
return (!_elm_lang$core$Native_Utils.eq( return (!_elm_lang$core$Native_Utils.eq(
@ -6572,11 +6517,11 @@ var _elm_community$json_extra$Json_Decode_Extra$indexedList = function (indexedD
var _elm_community$json_extra$Json_Decode_Extra$optionalField = F2( var _elm_community$json_extra$Json_Decode_Extra$optionalField = F2(
function (fieldName, decoder) { function (fieldName, decoder) {
var finishDecoding = function (json) { var finishDecoding = function (json) {
var _p6 = A2( var _p4 = A2(
_elm_lang$core$Json_Decode$decodeValue, _elm_lang$core$Json_Decode$decodeValue,
A2(_elm_lang$core$Json_Decode$field, fieldName, _elm_lang$core$Json_Decode$value), A2(_elm_lang$core$Json_Decode$field, fieldName, _elm_lang$core$Json_Decode$value),
json); json);
if (_p6.ctor === 'Ok') { if (_p4.ctor === 'Ok') {
return A2( return A2(
_elm_lang$core$Json_Decode$map, _elm_lang$core$Json_Decode$map,
_elm_lang$core$Maybe$Just, _elm_lang$core$Maybe$Just,
@ -6596,21 +6541,21 @@ var _elm_community$json_extra$Json_Decode_Extra$withDefault = F2(
}); });
var _elm_community$json_extra$Json_Decode_Extra$decodeDictFromTuples = F2( var _elm_community$json_extra$Json_Decode_Extra$decodeDictFromTuples = F2(
function (keyDecoder, tuples) { function (keyDecoder, tuples) {
var _p7 = tuples; var _p5 = tuples;
if (_p7.ctor === '[]') { if (_p5.ctor === '[]') {
return _elm_lang$core$Json_Decode$succeed(_elm_lang$core$Dict$empty); return _elm_lang$core$Json_Decode$succeed(_elm_lang$core$Dict$empty);
} else { } else {
var _p8 = A2(_elm_lang$core$Json_Decode$decodeString, keyDecoder, _p7._0._0); var _p6 = A2(_elm_lang$core$Json_Decode$decodeString, keyDecoder, _p5._0._0);
if (_p8.ctor === 'Ok') { if (_p6.ctor === 'Ok') {
return A2( return A2(
_elm_lang$core$Json_Decode$andThen, _elm_lang$core$Json_Decode$andThen,
function (_p9) { function (_p7) {
return _elm_lang$core$Json_Decode$succeed( return _elm_lang$core$Json_Decode$succeed(
A3(_elm_lang$core$Dict$insert, _p8._0, _p7._0._1, _p9)); A3(_elm_lang$core$Dict$insert, _p6._0, _p5._0._1, _p7));
}, },
A2(_elm_community$json_extra$Json_Decode_Extra$decodeDictFromTuples, keyDecoder, _p7._1)); A2(_elm_community$json_extra$Json_Decode_Extra$decodeDictFromTuples, keyDecoder, _p5._1));
} else { } else {
return _elm_lang$core$Json_Decode$fail(_p8._0); return _elm_lang$core$Json_Decode$fail(_p6._0);
} }
} }
}); });
@ -6629,9 +6574,9 @@ var _elm_community$json_extra$Json_Decode_Extra$set = function (decoder) {
}; };
var _elm_community$json_extra$Json_Decode_Extra$date = A2( var _elm_community$json_extra$Json_Decode_Extra$date = A2(
_elm_lang$core$Json_Decode$andThen, _elm_lang$core$Json_Decode$andThen,
function (_p10) { function (_p8) {
return _elm_community$json_extra$Json_Decode_Extra$fromResult( return _elm_community$json_extra$Json_Decode_Extra$fromResult(
_elm_lang$core$Date$fromString(_p10)); _elm_lang$core$Date$fromString(_p8));
}, },
_elm_lang$core$Json_Decode$string); _elm_lang$core$Json_Decode$string);
var _elm_community$json_extra$Json_Decode_Extra$andMap = _elm_lang$core$Json_Decode$map2( var _elm_community$json_extra$Json_Decode_Extra$andMap = _elm_lang$core$Json_Decode$map2(
@ -12449,6 +12394,42 @@ var _justinmimbs$elm_date_extra$Date_Extra_Facts$daysBeforeStartOfMonth = F2(
} }
}); });
var _justinmimbs$elm_date_extra$Date_Internal_RataDie$toUnixTime = function (rd) {
return (rd - 719163) * _justinmimbs$elm_date_extra$Date_Extra_Facts$msPerDay;
};
var _justinmimbs$elm_date_extra$Date_Internal_RataDie$weekdayNumber = function (rd) {
var _p0 = A2(_elm_lang$core$Basics_ops['%'], rd, 7);
if (_p0 === 0) {
return 7;
} else {
return _p0;
}
};
var _justinmimbs$elm_date_extra$Date_Internal_RataDie$leapYearsInCommonEra = function (y) {
return (((y / 4) | 0) - ((y / 100) | 0)) + ((y / 400) | 0);
};
var _justinmimbs$elm_date_extra$Date_Internal_RataDie$rataDieBeforeStartOfYear = function (y) {
return (365 * (y - 1)) + _justinmimbs$elm_date_extra$Date_Internal_RataDie$leapYearsInCommonEra(y - 1);
};
var _justinmimbs$elm_date_extra$Date_Internal_RataDie$fromOrdinalDate = F2(
function (y, d) {
return _justinmimbs$elm_date_extra$Date_Internal_RataDie$rataDieBeforeStartOfYear(y) + d;
});
var _justinmimbs$elm_date_extra$Date_Internal_RataDie$week1Day1OfWeekYear = function (y) {
var jan4RD = A2(_justinmimbs$elm_date_extra$Date_Internal_RataDie$fromOrdinalDate, y, 4);
return (jan4RD - _justinmimbs$elm_date_extra$Date_Internal_RataDie$weekdayNumber(jan4RD)) + 1;
};
var _justinmimbs$elm_date_extra$Date_Internal_RataDie$fromWeekDate = F3(
function (y, w, d) {
var week1Day0RD = _justinmimbs$elm_date_extra$Date_Internal_RataDie$week1Day1OfWeekYear(y) - 1;
return (week1Day0RD + ((w - 1) * 7)) + d;
});
var _justinmimbs$elm_date_extra$Date_Internal_RataDie$fromCalendarDate = F3(
function (y, m, d) {
var md = A2(_justinmimbs$elm_date_extra$Date_Extra_Facts$daysBeforeStartOfMonth, y, m);
var yd = _justinmimbs$elm_date_extra$Date_Internal_RataDie$rataDieBeforeStartOfYear(y);
return (yd + md) + d;
});
var _justinmimbs$elm_date_extra$Date_Internal_RataDie$divideInt = F2( var _justinmimbs$elm_date_extra$Date_Internal_RataDie$divideInt = F2(
function (a, b) { function (a, b) {
return { return {
@ -12458,86 +12439,77 @@ var _justinmimbs$elm_date_extra$Date_Internal_RataDie$divideInt = F2(
}; };
}); });
var _justinmimbs$elm_date_extra$Date_Internal_RataDie$year = function (rd) { var _justinmimbs$elm_date_extra$Date_Internal_RataDie$year = function (rd) {
var _p0 = A2(_justinmimbs$elm_date_extra$Date_Internal_RataDie$divideInt, rd, 146097); var _p1 = A2(_justinmimbs$elm_date_extra$Date_Internal_RataDie$divideInt, rd, 146097);
var n400 = _p0._0; var q400 = _p1._0;
var r400 = _p0._1; var r400 = _p1._1;
var _p1 = A2(_justinmimbs$elm_date_extra$Date_Internal_RataDie$divideInt, r400, 36524); var _p2 = A2(_justinmimbs$elm_date_extra$Date_Internal_RataDie$divideInt, r400, 36524);
var n100 = _p1._0; var q100 = _p2._0;
var r100 = _p1._1; var r100 = _p2._1;
var _p2 = A2(_justinmimbs$elm_date_extra$Date_Internal_RataDie$divideInt, r100, 1461); var _p3 = A2(_justinmimbs$elm_date_extra$Date_Internal_RataDie$divideInt, r100, 1461);
var n4 = _p2._0; var q4 = _p3._0;
var r4 = _p2._1; var r4 = _p3._1;
var _p3 = A2(_justinmimbs$elm_date_extra$Date_Internal_RataDie$divideInt, r4, 365); var _p4 = A2(_justinmimbs$elm_date_extra$Date_Internal_RataDie$divideInt, r4, 365);
var n1 = _p3._0; var q1 = _p4._0;
var r1 = _p3._1; var r1 = _p4._1;
var n = _elm_lang$core$Native_Utils.eq(r1, 0) ? 0 : 1; var n = _elm_lang$core$Native_Utils.eq(r1, 0) ? 0 : 1;
return ((((n400 * 400) + (n100 * 100)) + (n4 * 4)) + n1) + n; return ((((q400 * 400) + (q100 * 100)) + (q4 * 4)) + q1) + n;
}; };
var _justinmimbs$elm_date_extra$Date_Internal_RataDie$weekdayNumber = function (rd) { var _justinmimbs$elm_date_extra$Date_Internal_RataDie$ordinalDay = function (rd) {
var _p4 = A2(_elm_lang$core$Basics_ops['%'], rd, 7); return rd - _justinmimbs$elm_date_extra$Date_Internal_RataDie$rataDieBeforeStartOfYear(
if (_p4 === 0) { _justinmimbs$elm_date_extra$Date_Internal_RataDie$year(rd));
return 7;
} else {
return _p4;
}
};
var _justinmimbs$elm_date_extra$Date_Internal_RataDie$daysBeforeYear = function (y1) {
var y = y1 - 1;
var leapYears = (((y / 4) | 0) - ((y / 100) | 0)) + ((y / 400) | 0);
return (365 * y) + leapYears;
};
var _justinmimbs$elm_date_extra$Date_Internal_RataDie$daysBeforeWeekYear = function (y) {
var jan4 = _justinmimbs$elm_date_extra$Date_Internal_RataDie$daysBeforeYear(y) + 4;
return jan4 - _justinmimbs$elm_date_extra$Date_Internal_RataDie$weekdayNumber(jan4);
}; };
var _justinmimbs$elm_date_extra$Date_Internal_RataDie$weekYear = function (rd) { var _justinmimbs$elm_date_extra$Date_Internal_RataDie$weekYear = function (rd) {
return _justinmimbs$elm_date_extra$Date_Internal_RataDie$year( var daysToThursday = 4 - _justinmimbs$elm_date_extra$Date_Internal_RataDie$weekdayNumber(rd);
rd + (4 - _justinmimbs$elm_date_extra$Date_Internal_RataDie$weekdayNumber(rd))); return _justinmimbs$elm_date_extra$Date_Internal_RataDie$year(rd + daysToThursday);
}; };
var _justinmimbs$elm_date_extra$Date_Internal_RataDie$weekNumber = function (rd) { var _justinmimbs$elm_date_extra$Date_Internal_RataDie$weekNumber = function (rd) {
var week1Day1 = _justinmimbs$elm_date_extra$Date_Internal_RataDie$daysBeforeWeekYear( var week1Day1RD = _justinmimbs$elm_date_extra$Date_Internal_RataDie$week1Day1OfWeekYear(
_justinmimbs$elm_date_extra$Date_Internal_RataDie$weekYear(rd)) + 1; _justinmimbs$elm_date_extra$Date_Internal_RataDie$weekYear(rd));
return (((rd - week1Day1) / 7) | 0) + 1; return (((rd - week1Day1RD) / 7) | 0) + 1;
}; };
var _justinmimbs$elm_date_extra$Date_Internal_RataDie$fromWeekDate = F3( var _justinmimbs$elm_date_extra$Date_Internal_RataDie$find = F2(
function (wy, wn, wdn) { function (pred, list) {
return (_justinmimbs$elm_date_extra$Date_Internal_RataDie$daysBeforeWeekYear(wy) + ((wn - 1) * 7)) + wdn; find:
}); while (true) {
var _justinmimbs$elm_date_extra$Date_Internal_RataDie$fromCalendarDate = F3( var _p5 = list;
function (y, m, d) { if (_p5.ctor === '[]') {
return (_justinmimbs$elm_date_extra$Date_Internal_RataDie$daysBeforeYear(y) + A2(_justinmimbs$elm_date_extra$Date_Extra_Facts$daysBeforeStartOfMonth, y, m)) + d; return _elm_lang$core$Maybe$Nothing;
}); } else {
var _justinmimbs$elm_date_extra$Date_Internal_RataDie$fromOrdinalDate = F2( var _p6 = _p5._0;
function (y, od) { if (pred(_p6)) {
return _justinmimbs$elm_date_extra$Date_Internal_RataDie$daysBeforeYear(y) + od; return _elm_lang$core$Maybe$Just(_p6);
} else {
var _v2 = pred,
_v3 = _p5._1;
pred = _v2;
list = _v3;
continue find;
}
}
}
}); });
var _justinmimbs$elm_date_extra$Date_Internal_RataDie$month = function (rd) {
var od = _justinmimbs$elm_date_extra$Date_Internal_RataDie$ordinalDay(rd);
var y = _justinmimbs$elm_date_extra$Date_Internal_RataDie$year(rd);
return A2(
_elm_lang$core$Maybe$withDefault,
_elm_lang$core$Date$Jan,
A2(
_justinmimbs$elm_date_extra$Date_Internal_RataDie$find,
function (m) {
return _elm_lang$core$Native_Utils.cmp(
A2(_justinmimbs$elm_date_extra$Date_Extra_Facts$daysBeforeStartOfMonth, y, m),
od) < 0;
},
_elm_lang$core$List$reverse(_justinmimbs$elm_date_extra$Date_Extra_Facts$months)));
};
var _justinmimbs$elm_date_extra$Date_Internal_RataDie$day = function (rd) {
var od = _justinmimbs$elm_date_extra$Date_Internal_RataDie$ordinalDay(rd);
var m = _justinmimbs$elm_date_extra$Date_Internal_RataDie$month(rd);
var y = _justinmimbs$elm_date_extra$Date_Internal_RataDie$year(rd);
return od - A2(_justinmimbs$elm_date_extra$Date_Extra_Facts$daysBeforeStartOfMonth, y, m);
};
var _justinmimbs$elm_date_extra$Date_Internal_Core$msFromTimeParts = F4(
function (hh, mm, ss, ms) {
return (((_justinmimbs$elm_date_extra$Date_Extra_Facts$msPerHour * hh) + (_justinmimbs$elm_date_extra$Date_Extra_Facts$msPerMinute * mm)) + (_justinmimbs$elm_date_extra$Date_Extra_Facts$msPerSecond * ss)) + ms;
});
var _justinmimbs$elm_date_extra$Date_Internal_Core$unixTimeFromRataDie = function (rd) {
return (rd - 719163) * _justinmimbs$elm_date_extra$Date_Extra_Facts$msPerDay;
};
var _justinmimbs$elm_date_extra$Date_Internal_Core$unixTimeFromOrdinalDate = F2(
function (y, d) {
return _justinmimbs$elm_date_extra$Date_Internal_Core$unixTimeFromRataDie(
A2(_justinmimbs$elm_date_extra$Date_Internal_RataDie$fromOrdinalDate, y, d));
});
var _justinmimbs$elm_date_extra$Date_Internal_Core$unixTimeFromCalendarDate = F3(
function (y, m, d) {
return _justinmimbs$elm_date_extra$Date_Internal_Core$unixTimeFromRataDie(
A3(_justinmimbs$elm_date_extra$Date_Internal_RataDie$fromCalendarDate, y, m, d));
});
var _justinmimbs$elm_date_extra$Date_Internal_Core$unixTimeFromParts = F7(
function (y, m, d, hh, mm, ss, ms) {
return A3(_justinmimbs$elm_date_extra$Date_Internal_Core$unixTimeFromCalendarDate, y, m, d) + A4(_justinmimbs$elm_date_extra$Date_Internal_Core$msFromTimeParts, hh, mm, ss, ms);
});
var _justinmimbs$elm_date_extra$Date_Internal_Core$unixTimeFromWeekDate = F3(
function (y, w, d) {
return _justinmimbs$elm_date_extra$Date_Internal_Core$unixTimeFromRataDie(
A3(_justinmimbs$elm_date_extra$Date_Internal_RataDie$fromWeekDate, y, w, d));
});
var _justinmimbs$elm_date_extra$Date_Internal_Core$weekNumberFromCalendarDate = F3( var _justinmimbs$elm_date_extra$Date_Internal_Core$weekNumberFromCalendarDate = F3(
function (y, m, d) { function (y, m, d) {
return _justinmimbs$elm_date_extra$Date_Internal_RataDie$weekNumber( return _justinmimbs$elm_date_extra$Date_Internal_RataDie$weekNumber(
@ -12548,6 +12520,30 @@ var _justinmimbs$elm_date_extra$Date_Internal_Core$weekYearFromCalendarDate = F3
return _justinmimbs$elm_date_extra$Date_Internal_RataDie$weekYear( return _justinmimbs$elm_date_extra$Date_Internal_RataDie$weekYear(
A3(_justinmimbs$elm_date_extra$Date_Internal_RataDie$fromCalendarDate, y, m, d)); A3(_justinmimbs$elm_date_extra$Date_Internal_RataDie$fromCalendarDate, y, m, d));
}); });
var _justinmimbs$elm_date_extra$Date_Internal_Core$unixTimeFromOrdinalDate = F2(
function (y, d) {
return _justinmimbs$elm_date_extra$Date_Internal_RataDie$toUnixTime(
A2(_justinmimbs$elm_date_extra$Date_Internal_RataDie$fromOrdinalDate, y, d));
});
var _justinmimbs$elm_date_extra$Date_Internal_Core$unixTimeFromWeekDate = F3(
function (y, w, d) {
return _justinmimbs$elm_date_extra$Date_Internal_RataDie$toUnixTime(
A3(_justinmimbs$elm_date_extra$Date_Internal_RataDie$fromWeekDate, y, w, d));
});
var _justinmimbs$elm_date_extra$Date_Internal_Core$unixTimeFromCalendarDate = F3(
function (y, m, d) {
return _justinmimbs$elm_date_extra$Date_Internal_RataDie$toUnixTime(
A3(_justinmimbs$elm_date_extra$Date_Internal_RataDie$fromCalendarDate, y, m, d));
});
var _justinmimbs$elm_date_extra$Date_Internal_Core$msFromTimeParts = F4(
function (hh, mm, ss, ms) {
return ((ms + (_justinmimbs$elm_date_extra$Date_Extra_Facts$msPerSecond * ss)) + (_justinmimbs$elm_date_extra$Date_Extra_Facts$msPerMinute * mm)) + (_justinmimbs$elm_date_extra$Date_Extra_Facts$msPerHour * hh);
});
var _justinmimbs$elm_date_extra$Date_Internal_Core$unixTimeFromParts = F7(
function (y, m, d, hh, mm, ss, ms) {
return _justinmimbs$elm_date_extra$Date_Internal_RataDie$toUnixTime(
A3(_justinmimbs$elm_date_extra$Date_Internal_RataDie$fromCalendarDate, y, m, d)) + A4(_justinmimbs$elm_date_extra$Date_Internal_Core$msFromTimeParts, hh, mm, ss, ms);
});
var _justinmimbs$elm_date_extra$Date_Internal_Extract$msOffsetFromUtc = function (date) { var _justinmimbs$elm_date_extra$Date_Internal_Extract$msOffsetFromUtc = function (date) {
var utcTime = _elm_lang$core$Date$toTime(date); var utcTime = _elm_lang$core$Date$toTime(date);
@ -13396,13 +13392,6 @@ var _justinmimbs$elm_date_extra$Date_Internal_Parse$offsetTimeFromIsoString = fu
s)))); s))));
}; };
var _justinmimbs$elm_date_extra$Date_Extra$toRataDie = function (date) {
return A3(
_justinmimbs$elm_date_extra$Date_Internal_RataDie$fromCalendarDate,
_elm_lang$core$Date$year(date),
_elm_lang$core$Date$month(date),
_elm_lang$core$Date$day(date));
};
var _justinmimbs$elm_date_extra$Date_Extra$toParts = function (date) { var _justinmimbs$elm_date_extra$Date_Extra$toParts = function (date) {
return { return {
ctor: '_Tuple7', ctor: '_Tuple7',
@ -13589,25 +13578,25 @@ var _justinmimbs$elm_date_extra$Date_Extra$add = F3(
} }
}); });
var _justinmimbs$elm_date_extra$Date_Extra$rangeHelp = F5( var _justinmimbs$elm_date_extra$Date_Extra$rangeHelp = F5(
function (interval, step, end, revList, date) { function (result, interval, step, start, date) {
rangeHelp: rangeHelp:
while (true) { while (true) {
if (_elm_lang$core$Native_Utils.cmp( if (_elm_lang$core$Native_Utils.cmp(
_elm_lang$core$Date$toTime(date), _elm_lang$core$Date$toTime(date),
_elm_lang$core$Date$toTime(end)) < 0) { _elm_lang$core$Date$toTime(start)) < 0) {
var _v4 = interval, return result;
_v5 = step, } else {
_v6 = end, var _v4 = {ctor: '::', _0: date, _1: result},
_v7 = {ctor: '::', _0: date, _1: revList}, _v5 = interval,
_v6 = step,
_v7 = start,
_v8 = A3(_justinmimbs$elm_date_extra$Date_Extra$add, interval, step, date); _v8 = A3(_justinmimbs$elm_date_extra$Date_Extra$add, interval, step, date);
interval = _v4; result = _v4;
step = _v5; interval = _v5;
end = _v6; step = _v6;
revList = _v7; start = _v7;
date = _v8; date = _v8;
continue rangeHelp; continue rangeHelp;
} else {
return _elm_lang$core$List$reverse(revList);
} }
} }
}); });
@ -13711,16 +13700,18 @@ var _justinmimbs$elm_date_extra$Date_Extra$ceiling = F2(
}); });
var _justinmimbs$elm_date_extra$Date_Extra$range = F4( var _justinmimbs$elm_date_extra$Date_Extra$range = F4(
function (interval, step, start, end) { function (interval, step, start, end) {
var first = A2(_justinmimbs$elm_date_extra$Date_Extra$ceiling, interval, start); var stepBack = _elm_lang$core$Basics$negate(
return (_elm_lang$core$Native_Utils.cmp( A2(_elm_lang$core$Basics$max, 1, step));
_elm_lang$core$Date$toTime(first), return A5(
_elm_lang$core$Date$toTime(end)) < 0) ? A5(
_justinmimbs$elm_date_extra$Date_Extra$rangeHelp, _justinmimbs$elm_date_extra$Date_Extra$rangeHelp,
interval,
A2(_elm_lang$core$Basics$max, 1, step),
end,
{ctor: '[]'}, {ctor: '[]'},
first) : {ctor: '[]'}; interval,
stepBack,
start,
A2(
_justinmimbs$elm_date_extra$Date_Extra$ceiling,
interval,
A3(_justinmimbs$elm_date_extra$Date_Extra$add, interval, stepBack, end)));
}); });
var _justinmimbs$elm_date_extra$Date_Extra$fromIsoString = function (_p11) { var _justinmimbs$elm_date_extra$Date_Extra$fromIsoString = function (_p11) {
return A2( return A2(
@ -13818,13 +13809,6 @@ var _justinmimbs$elm_date_extra$Date_Extra$diff = F3(
A2(_justinmimbs$elm_date_extra$Date_Extra$floor, _p19, date2)) / 7) | 0; A2(_justinmimbs$elm_date_extra$Date_Extra$floor, _p19, date2)) / 7) | 0;
} }
}); });
var _justinmimbs$elm_date_extra$Date_Extra$fromRataDie = function (rd) {
return A3(
_justinmimbs$elm_date_extra$Date_Extra$add,
_justinmimbs$elm_date_extra$Date_Extra$Day,
rd - 719163,
A3(_justinmimbs$elm_date_extra$Date_Extra$fromCalendarDate, 1970, _elm_lang$core$Date$Jan, 1));
};
var _justinmimbs$elm_date_extra$Date_Extra$Hour = {ctor: 'Hour'}; var _justinmimbs$elm_date_extra$Date_Extra$Hour = {ctor: 'Hour'};
var _justinmimbs$elm_date_extra$Date_Extra$Minute = {ctor: 'Minute'}; var _justinmimbs$elm_date_extra$Date_Extra$Minute = {ctor: 'Minute'};
var _justinmimbs$elm_date_extra$Date_Extra$equalBy = F3( var _justinmimbs$elm_date_extra$Date_Extra$equalBy = F3(
@ -13945,89 +13929,87 @@ var _krisajenkins$remotedata$RemoteData$prism = {
var _krisajenkins$remotedata$RemoteData$Failure = function (a) { var _krisajenkins$remotedata$RemoteData$Failure = function (a) {
return {ctor: 'Failure', _0: a}; return {ctor: 'Failure', _0: a};
}; };
var _krisajenkins$remotedata$RemoteData$fromMaybe = F2(
function (error, maybe) {
var _p6 = maybe;
if (_p6.ctor === 'Nothing') {
return _krisajenkins$remotedata$RemoteData$Failure(error);
} else {
return _krisajenkins$remotedata$RemoteData$Success(_p6._0);
}
});
var _krisajenkins$remotedata$RemoteData$fromResult = function (result) { var _krisajenkins$remotedata$RemoteData$fromResult = function (result) {
var _p7 = result; var _p6 = result;
if (_p7.ctor === 'Err') { if (_p6.ctor === 'Err') {
return _krisajenkins$remotedata$RemoteData$Failure(_p7._0); return _krisajenkins$remotedata$RemoteData$Failure(_p6._0);
} else { } else {
return _krisajenkins$remotedata$RemoteData$Success(_p7._0); return _krisajenkins$remotedata$RemoteData$Success(_p6._0);
} }
}; };
var _krisajenkins$remotedata$RemoteData$asCmd = _elm_lang$core$Task$attempt(_krisajenkins$remotedata$RemoteData$fromResult); var _krisajenkins$remotedata$RemoteData$asCmd = _elm_lang$core$Task$attempt(_krisajenkins$remotedata$RemoteData$fromResult);
var _krisajenkins$remotedata$RemoteData$sendRequest = _elm_lang$http$Http$send(_krisajenkins$remotedata$RemoteData$fromResult); var _krisajenkins$remotedata$RemoteData$sendRequest = _elm_lang$http$Http$send(_krisajenkins$remotedata$RemoteData$fromResult);
var _krisajenkins$remotedata$RemoteData$fromTask = function (_p8) { var _krisajenkins$remotedata$RemoteData$fromTask = function (_p7) {
return A2( return A2(
_elm_lang$core$Task$onError, _elm_lang$core$Task$onError,
function (_p9) { function (_p8) {
return _elm_lang$core$Task$succeed( return _elm_lang$core$Task$succeed(
_krisajenkins$remotedata$RemoteData$Failure(_p9)); _krisajenkins$remotedata$RemoteData$Failure(_p8));
}, },
A2(_elm_lang$core$Task$map, _krisajenkins$remotedata$RemoteData$Success, _p8)); A2(_elm_lang$core$Task$map, _krisajenkins$remotedata$RemoteData$Success, _p7));
}; };
var _krisajenkins$remotedata$RemoteData$Loading = {ctor: 'Loading'}; var _krisajenkins$remotedata$RemoteData$Loading = {ctor: 'Loading'};
var _krisajenkins$remotedata$RemoteData$NotAsked = {ctor: 'NotAsked'}; var _krisajenkins$remotedata$RemoteData$NotAsked = {ctor: 'NotAsked'};
var _krisajenkins$remotedata$RemoteData$map = F2( var _krisajenkins$remotedata$RemoteData$map = F2(
function (f, data) { function (f, data) {
var _p10 = data; var _p9 = data;
switch (_p10.ctor) { switch (_p9.ctor) {
case 'Success': case 'Success':
return _krisajenkins$remotedata$RemoteData$Success( return _krisajenkins$remotedata$RemoteData$Success(
f(_p10._0)); f(_p9._0));
case 'Loading': case 'Loading':
return _krisajenkins$remotedata$RemoteData$Loading; return _krisajenkins$remotedata$RemoteData$Loading;
case 'NotAsked': case 'NotAsked':
return _krisajenkins$remotedata$RemoteData$NotAsked; return _krisajenkins$remotedata$RemoteData$NotAsked;
default: default:
return _krisajenkins$remotedata$RemoteData$Failure(_p10._0); return _krisajenkins$remotedata$RemoteData$Failure(_p9._0);
} }
}); });
var _krisajenkins$remotedata$RemoteData$toMaybe = function (_p11) { var _krisajenkins$remotedata$RemoteData$toMaybe = function (_p10) {
return A2( return A2(
_krisajenkins$remotedata$RemoteData$withDefault, _krisajenkins$remotedata$RemoteData$withDefault,
_elm_lang$core$Maybe$Nothing, _elm_lang$core$Maybe$Nothing,
A2(_krisajenkins$remotedata$RemoteData$map, _elm_lang$core$Maybe$Just, _p11)); A2(_krisajenkins$remotedata$RemoteData$map, _elm_lang$core$Maybe$Just, _p10));
}; };
var _krisajenkins$remotedata$RemoteData$mapError = F2( var _krisajenkins$remotedata$RemoteData$mapError = F2(
function (f, data) { function (f, data) {
var _p12 = data; var _p11 = data;
switch (_p12.ctor) { switch (_p11.ctor) {
case 'Success': case 'Success':
return _krisajenkins$remotedata$RemoteData$Success(_p12._0); return _krisajenkins$remotedata$RemoteData$Success(_p11._0);
case 'Failure': case 'Failure':
return _krisajenkins$remotedata$RemoteData$Failure( return _krisajenkins$remotedata$RemoteData$Failure(
f(_p12._0)); f(_p11._0));
case 'Loading': case 'Loading':
return _krisajenkins$remotedata$RemoteData$Loading; return _krisajenkins$remotedata$RemoteData$Loading;
default: default:
return _krisajenkins$remotedata$RemoteData$NotAsked; return _krisajenkins$remotedata$RemoteData$NotAsked;
} }
}); });
var _krisajenkins$remotedata$RemoteData$mapBoth = F2( var _krisajenkins$remotedata$RemoteData$mapBoth = F3(
function (successFn, errorFn) { function (successFn, errorFn, data) {
return function (_p13) { var _p12 = data;
return A2( switch (_p12.ctor) {
_krisajenkins$remotedata$RemoteData$mapError, case 'Success':
errorFn, return _krisajenkins$remotedata$RemoteData$Success(
A2(_krisajenkins$remotedata$RemoteData$map, successFn, _p13)); successFn(_p12._0));
}; case 'Failure':
return _krisajenkins$remotedata$RemoteData$Failure(
errorFn(_p12._0));
case 'Loading':
return _krisajenkins$remotedata$RemoteData$Loading;
default:
return _krisajenkins$remotedata$RemoteData$NotAsked;
}
}); });
var _krisajenkins$remotedata$RemoteData$andThen = F2( var _krisajenkins$remotedata$RemoteData$andThen = F2(
function (f, data) { function (f, data) {
var _p14 = data; var _p13 = data;
switch (_p14.ctor) { switch (_p13.ctor) {
case 'Success': case 'Success':
return f(_p14._0); return f(_p13._0);
case 'Failure': case 'Failure':
return _krisajenkins$remotedata$RemoteData$Failure(_p14._0); return _krisajenkins$remotedata$RemoteData$Failure(_p13._0);
case 'NotAsked': case 'NotAsked':
return _krisajenkins$remotedata$RemoteData$NotAsked; return _krisajenkins$remotedata$RemoteData$NotAsked;
default: default:
@ -14036,61 +14018,17 @@ var _krisajenkins$remotedata$RemoteData$andThen = F2(
}); });
var _krisajenkins$remotedata$RemoteData$andMap = F2( var _krisajenkins$remotedata$RemoteData$andMap = F2(
function (wrappedValue, wrappedFunction) { function (wrappedValue, wrappedFunction) {
var _p15 = {ctor: '_Tuple2', _0: wrappedFunction, _1: wrappedValue}; var _p14 = wrappedFunction;
_v11_5: switch (_p14.ctor) {
do { case 'Success':
_v11_4: return A2(_krisajenkins$remotedata$RemoteData$map, _p14._0, wrappedValue);
do { case 'Failure':
_v11_3: return _krisajenkins$remotedata$RemoteData$Failure(_p14._0);
do { case 'Loading':
_v11_2:
do {
switch (_p15._0.ctor) {
case 'Success':
switch (_p15._1.ctor) {
case 'Success':
return _krisajenkins$remotedata$RemoteData$Success(
_p15._0._0(_p15._1._0));
case 'Failure':
break _v11_2;
case 'Loading':
break _v11_4;
default:
return _krisajenkins$remotedata$RemoteData$NotAsked;
}
case 'Failure':
return _krisajenkins$remotedata$RemoteData$Failure(_p15._0._0);
case 'Loading':
switch (_p15._1.ctor) {
case 'Failure':
break _v11_2;
case 'Loading':
break _v11_3;
case 'NotAsked':
break _v11_3;
default:
break _v11_3;
}
default:
switch (_p15._1.ctor) {
case 'Failure':
break _v11_2;
case 'Loading':
break _v11_4;
case 'NotAsked':
break _v11_5;
default:
break _v11_5;
}
}
} while(false);
return _krisajenkins$remotedata$RemoteData$Failure(_p15._1._0);
} while(false);
return _krisajenkins$remotedata$RemoteData$Loading; return _krisajenkins$remotedata$RemoteData$Loading;
} while(false); default:
return _krisajenkins$remotedata$RemoteData$Loading; return _krisajenkins$remotedata$RemoteData$NotAsked;
} while(false); }
return _krisajenkins$remotedata$RemoteData$NotAsked;
}); });
var _krisajenkins$remotedata$RemoteData$map2 = F3( var _krisajenkins$remotedata$RemoteData$map2 = F3(
function (f, a, b) { function (f, a, b) {
@ -14099,15 +14037,6 @@ var _krisajenkins$remotedata$RemoteData$map2 = F3(
b, b,
A2(_krisajenkins$remotedata$RemoteData$map, f, a)); A2(_krisajenkins$remotedata$RemoteData$map, f, a));
}); });
var _krisajenkins$remotedata$RemoteData$fromList = A2(
_elm_lang$core$List$foldr,
_krisajenkins$remotedata$RemoteData$map2(
F2(
function (x, y) {
return {ctor: '::', _0: x, _1: y};
})),
_krisajenkins$remotedata$RemoteData$Success(
{ctor: '[]'}));
var _krisajenkins$remotedata$RemoteData$map3 = F4( var _krisajenkins$remotedata$RemoteData$map3 = F4(
function (f, a, b, c) { function (f, a, b, c) {
return A2( return A2(
@ -14133,12 +14062,12 @@ var _krisajenkins$remotedata$RemoteData$append = F2(
}); });
var _krisajenkins$remotedata$RemoteData$update = F2( var _krisajenkins$remotedata$RemoteData$update = F2(
function (f, remoteData) { function (f, remoteData) {
var _p16 = remoteData; var _p15 = remoteData;
switch (_p16.ctor) { switch (_p15.ctor) {
case 'Success': case 'Success':
var _p17 = f(_p16._0); var _p16 = f(_p15._0);
var first = _p17._0; var first = _p16._0;
var second = _p17._1; var second = _p16._1;
return { return {
ctor: '_Tuple2', ctor: '_Tuple2',
_0: _krisajenkins$remotedata$RemoteData$Success(first), _0: _krisajenkins$remotedata$RemoteData$Success(first),
@ -14151,7 +14080,7 @@ var _krisajenkins$remotedata$RemoteData$update = F2(
default: default:
return { return {
ctor: '_Tuple2', ctor: '_Tuple2',
_0: _krisajenkins$remotedata$RemoteData$Failure(_p16._0), _0: _krisajenkins$remotedata$RemoteData$Failure(_p15._0),
_1: _elm_lang$core$Platform_Cmd$none _1: _elm_lang$core$Platform_Cmd$none
}; };
} }
@ -14252,19 +14181,6 @@ var _lukewestby$elm_http_builder$HttpBuilder$send = F2(
tagger, tagger,
_lukewestby$elm_http_builder$HttpBuilder$toTask(builder)); _lukewestby$elm_http_builder$HttpBuilder$toTask(builder));
}); });
var _lukewestby$elm_http_builder$HttpBuilder$withExpectString = function (builder) {
return _elm_lang$core$Native_Utils.update(
builder,
{expect: _elm_lang$http$Http$expectString});
};
var _lukewestby$elm_http_builder$HttpBuilder$withExpectJson = F2(
function (decoder, builder) {
return _elm_lang$core$Native_Utils.update(
builder,
{
expect: _elm_lang$http$Http$expectJson(decoder)
});
});
var _lukewestby$elm_http_builder$HttpBuilder$withExpect = F2( var _lukewestby$elm_http_builder$HttpBuilder$withExpect = F2(
function (expect, builder) { function (expect, builder) {
return _elm_lang$core$Native_Utils.update( return _elm_lang$core$Native_Utils.update(
@ -14313,21 +14229,6 @@ var _lukewestby$elm_http_builder$HttpBuilder$withMultipartStringBody = function
_elm_lang$core$Basics$uncurry(_elm_lang$http$Http$stringPart), _elm_lang$core$Basics$uncurry(_elm_lang$http$Http$stringPart),
partPairs))); partPairs)));
}; };
var _lukewestby$elm_http_builder$HttpBuilder$withBearerToken = F2(
function (value, builder) {
return _elm_lang$core$Native_Utils.update(
builder,
{
headers: {
ctor: '::',
_0: A2(
_elm_lang$http$Http$header,
'Authorization',
A2(_elm_lang$core$Basics_ops['++'], 'Bearer ', value)),
_1: builder.headers
}
});
});
var _lukewestby$elm_http_builder$HttpBuilder$withHeaders = F2( var _lukewestby$elm_http_builder$HttpBuilder$withHeaders = F2(
function (headerPairs, builder) { function (headerPairs, builder) {
return _elm_lang$core$Native_Utils.update( return _elm_lang$core$Native_Utils.update(
@ -21694,16 +21595,24 @@ var _pablohirafuji$elm_qrcode$QRCode_View$rectView = function (_p1) {
_elm_lang$core$Basics$toString(_p2.row * _pablohirafuji$elm_qrcode$QRCode_View$moduleSize)), _elm_lang$core$Basics$toString(_p2.row * _pablohirafuji$elm_qrcode$QRCode_View$moduleSize)),
_1: { _1: {
ctor: '::', ctor: '::',
_0: _elm_lang$svg$Svg_Attributes$width( _0: _elm_lang$svg$Svg_Attributes$rx('0'),
_elm_lang$core$Basics$toString(_pablohirafuji$elm_qrcode$QRCode_View$moduleSize)),
_1: { _1: {
ctor: '::', ctor: '::',
_0: _elm_lang$svg$Svg_Attributes$height( _0: _elm_lang$svg$Svg_Attributes$ry('0'),
_elm_lang$core$Basics$toString(_pablohirafuji$elm_qrcode$QRCode_View$moduleSize)),
_1: { _1: {
ctor: '::', ctor: '::',
_0: _elm_lang$svg$Svg_Attributes$fill('black'), _0: _elm_lang$svg$Svg_Attributes$width(
_1: {ctor: '[]'} _elm_lang$core$Basics$toString(_pablohirafuji$elm_qrcode$QRCode_View$moduleSize)),
_1: {
ctor: '::',
_0: _elm_lang$svg$Svg_Attributes$height(
_elm_lang$core$Basics$toString(_pablohirafuji$elm_qrcode$QRCode_View$moduleSize)),
_1: {
ctor: '::',
_0: _elm_lang$svg$Svg_Attributes$fill('black'),
_1: {ctor: '[]'}
}
}
} }
} }
} }
@ -37597,35 +37506,44 @@ var _user$project$NavBar$view = F2(
ctor: '::', ctor: '::',
_0: { _0: {
ctor: '_Tuple3', ctor: '_Tuple3',
_0: 'Kraken', _0: 'Infura',
_1: _user$project$CoreTypes$AccountRoute('kraken'), _1: _user$project$CoreTypes$AccountRoute('infura'),
_2: true _2: true
}, },
_1: { _1: {
ctor: '::', ctor: '::',
_0: { _0: {
ctor: '_Tuple3', ctor: '_Tuple3',
_0: 'Mailjet', _0: 'Kraken',
_1: _user$project$CoreTypes$AccountRoute('mailjet'), _1: _user$project$CoreTypes$AccountRoute('kraken'),
_2: true _2: true
}, },
_1: { _1: {
ctor: '::', ctor: '::',
_0: { _0: {
ctor: '_Tuple3', ctor: '_Tuple3',
_0: 'Strike', _0: 'Mailjet',
_1: _user$project$CoreTypes$AccountRoute('strike'), _1: _user$project$CoreTypes$AccountRoute('mailjet'),
_2: true _2: true
}, },
_1: { _1: {
ctor: '::', ctor: '::',
_0: { _0: {
ctor: '_Tuple3', ctor: '_Tuple3',
_0: 'Twilio', _0: 'Strike',
_1: _user$project$CoreTypes$AccountRoute('twilio'), _1: _user$project$CoreTypes$AccountRoute('strike'),
_2: true _2: true
}, },
_1: {ctor: '[]'} _1: {
ctor: '::',
_0: {
ctor: '_Tuple3',
_0: 'Twilio',
_1: _user$project$CoreTypes$AccountRoute('twilio'),
_2: true
},
_1: {ctor: '[]'}
}
} }
} }
} }

14
schemas/infura.json Normal file
View file

@ -0,0 +1,14 @@
{
"code": "infura",
"display": "Infura",
"fields": [
{
"code": "apiKey",
"display": "API key",
"fieldType": "password",
"secret": true,
"required": true,
"value": ""
}
]
}