add Infura wallet support
This commit is contained in:
parent
05e7889dc0
commit
ac89f0e5e9
9 changed files with 472 additions and 513 deletions
|
|
@ -181,6 +181,7 @@ function fetchData () {
|
|||
{code: 'mock-ticker', display: 'Mock ticker', class: 'ticker', cryptos: ALL_CRYPTOS},
|
||||
{code: 'bitcoind', display: 'bitcoind', class: 'wallet', cryptos: ['BTC']},
|
||||
{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: 'zcashd', display: 'zcashd', class: 'wallet', cryptos: ['ZEC']},
|
||||
{code: 'litecoind', display: 'litecoind', class: 'wallet', cryptos: ['LTC']},
|
||||
|
|
|
|||
187
lib/plugins/wallet/geth/base.js
Normal file
187
lib/plugins/wallet/geth/base.js
Normal 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
|
||||
}))
|
||||
})
|
||||
}
|
||||
|
|
@ -1,189 +1,9 @@
|
|||
'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 base = require('./base')
|
||||
|
||||
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 defaultPort = cryptoRec.defaultPort
|
||||
|
||||
module.exports = {
|
||||
NAME,
|
||||
balance,
|
||||
sendCoins,
|
||||
newAddress,
|
||||
getStatus,
|
||||
sweep,
|
||||
defaultAddress,
|
||||
supportsHd: true,
|
||||
newFunding,
|
||||
privateKey,
|
||||
isStrictAddress
|
||||
}
|
||||
base.connect(`http://localhost:${defaultPort}`)
|
||||
|
||||
if (!web3.isConnected()) {
|
||||
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
|
||||
}))
|
||||
})
|
||||
}
|
||||
module.exports = base
|
||||
|
|
|
|||
11
lib/plugins/wallet/infura/infura.js
Normal file
11
lib/plugins/wallet/infura/infura.js
Normal 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})
|
||||
|
|
@ -34,9 +34,11 @@ function fetchWallet (settings, cryptoCode) {
|
|||
const masterSeed = Buffer.from(hex.trim(), 'hex')
|
||||
const plugin = configManager.cryptoScoped(cryptoCode, settings.config).wallet
|
||||
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
14
package-lock.json
generated
|
|
@ -8665,15 +8665,21 @@
|
|||
"integrity": "sha1-eWkVhNmGB/UHC9O3CkDmuyLkAes="
|
||||
},
|
||||
"web3": {
|
||||
"version": "0.19.1",
|
||||
"resolved": "https://registry.npmjs.org/web3/-/web3-0.19.1.tgz",
|
||||
"integrity": "sha1-52PVsRB8S8JKvU+MvuG6Nlnm6zE=",
|
||||
"version": "0.20.6",
|
||||
"resolved": "https://registry.npmjs.org/web3/-/web3-0.20.6.tgz",
|
||||
"integrity": "sha1-PpcwauAk+yThCj11yIQwJWIhUSA=",
|
||||
"requires": {
|
||||
"bignumber.js": "^4.0.2",
|
||||
"bignumber.js": "git+https://github.com/frozeman/bignumber.js-nolookahead.git#57692b3ecfc98bbdd6b3a516cb2353652ea49934",
|
||||
"crypto-js": "^3.1.4",
|
||||
"utf8": "^2.1.1",
|
||||
"xhr2": "*",
|
||||
"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": {
|
||||
|
|
|
|||
|
|
@ -56,7 +56,7 @@
|
|||
"talisman": "^0.20.0",
|
||||
"twilio": "^3.6.1",
|
||||
"uuid": "^3.1.0",
|
||||
"web3": "^0.19.1",
|
||||
"web3": "^0.20.6",
|
||||
"winston": "^2.4.2",
|
||||
"ws": "^3.1.0",
|
||||
"xml-stream": "^0.4.5"
|
||||
|
|
|
|||
524
public/elm.js
524
public/elm.js
|
|
@ -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 _p0 = result;
|
||||
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);
|
||||
};
|
||||
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(
|
||||
function (decoders, jsonValues) {
|
||||
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(
|
||||
function (fieldName, decoder) {
|
||||
var finishDecoding = function (json) {
|
||||
var _p6 = A2(
|
||||
var _p4 = A2(
|
||||
_elm_lang$core$Json_Decode$decodeValue,
|
||||
A2(_elm_lang$core$Json_Decode$field, fieldName, _elm_lang$core$Json_Decode$value),
|
||||
json);
|
||||
if (_p6.ctor === 'Ok') {
|
||||
if (_p4.ctor === 'Ok') {
|
||||
return A2(
|
||||
_elm_lang$core$Json_Decode$map,
|
||||
_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(
|
||||
function (keyDecoder, tuples) {
|
||||
var _p7 = tuples;
|
||||
if (_p7.ctor === '[]') {
|
||||
var _p5 = tuples;
|
||||
if (_p5.ctor === '[]') {
|
||||
return _elm_lang$core$Json_Decode$succeed(_elm_lang$core$Dict$empty);
|
||||
} else {
|
||||
var _p8 = A2(_elm_lang$core$Json_Decode$decodeString, keyDecoder, _p7._0._0);
|
||||
if (_p8.ctor === 'Ok') {
|
||||
var _p6 = A2(_elm_lang$core$Json_Decode$decodeString, keyDecoder, _p5._0._0);
|
||||
if (_p6.ctor === 'Ok') {
|
||||
return A2(
|
||||
_elm_lang$core$Json_Decode$andThen,
|
||||
function (_p9) {
|
||||
function (_p7) {
|
||||
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 {
|
||||
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(
|
||||
_elm_lang$core$Json_Decode$andThen,
|
||||
function (_p10) {
|
||||
function (_p8) {
|
||||
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);
|
||||
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(
|
||||
function (a, b) {
|
||||
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 _p0 = A2(_justinmimbs$elm_date_extra$Date_Internal_RataDie$divideInt, rd, 146097);
|
||||
var n400 = _p0._0;
|
||||
var r400 = _p0._1;
|
||||
var _p1 = A2(_justinmimbs$elm_date_extra$Date_Internal_RataDie$divideInt, r400, 36524);
|
||||
var n100 = _p1._0;
|
||||
var r100 = _p1._1;
|
||||
var _p2 = A2(_justinmimbs$elm_date_extra$Date_Internal_RataDie$divideInt, r100, 1461);
|
||||
var n4 = _p2._0;
|
||||
var r4 = _p2._1;
|
||||
var _p3 = A2(_justinmimbs$elm_date_extra$Date_Internal_RataDie$divideInt, r4, 365);
|
||||
var n1 = _p3._0;
|
||||
var r1 = _p3._1;
|
||||
var _p1 = A2(_justinmimbs$elm_date_extra$Date_Internal_RataDie$divideInt, rd, 146097);
|
||||
var q400 = _p1._0;
|
||||
var r400 = _p1._1;
|
||||
var _p2 = A2(_justinmimbs$elm_date_extra$Date_Internal_RataDie$divideInt, r400, 36524);
|
||||
var q100 = _p2._0;
|
||||
var r100 = _p2._1;
|
||||
var _p3 = A2(_justinmimbs$elm_date_extra$Date_Internal_RataDie$divideInt, r100, 1461);
|
||||
var q4 = _p3._0;
|
||||
var r4 = _p3._1;
|
||||
var _p4 = A2(_justinmimbs$elm_date_extra$Date_Internal_RataDie$divideInt, r4, 365);
|
||||
var q1 = _p4._0;
|
||||
var r1 = _p4._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 _p4 = A2(_elm_lang$core$Basics_ops['%'], rd, 7);
|
||||
if (_p4 === 0) {
|
||||
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$ordinalDay = function (rd) {
|
||||
return rd - _justinmimbs$elm_date_extra$Date_Internal_RataDie$rataDieBeforeStartOfYear(
|
||||
_justinmimbs$elm_date_extra$Date_Internal_RataDie$year(rd));
|
||||
};
|
||||
var _justinmimbs$elm_date_extra$Date_Internal_RataDie$weekYear = function (rd) {
|
||||
return _justinmimbs$elm_date_extra$Date_Internal_RataDie$year(
|
||||
rd + (4 - _justinmimbs$elm_date_extra$Date_Internal_RataDie$weekdayNumber(rd)));
|
||||
var daysToThursday = 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 week1Day1 = _justinmimbs$elm_date_extra$Date_Internal_RataDie$daysBeforeWeekYear(
|
||||
_justinmimbs$elm_date_extra$Date_Internal_RataDie$weekYear(rd)) + 1;
|
||||
return (((rd - week1Day1) / 7) | 0) + 1;
|
||||
var week1Day1RD = _justinmimbs$elm_date_extra$Date_Internal_RataDie$week1Day1OfWeekYear(
|
||||
_justinmimbs$elm_date_extra$Date_Internal_RataDie$weekYear(rd));
|
||||
return (((rd - week1Day1RD) / 7) | 0) + 1;
|
||||
};
|
||||
var _justinmimbs$elm_date_extra$Date_Internal_RataDie$fromWeekDate = F3(
|
||||
function (wy, wn, wdn) {
|
||||
return (_justinmimbs$elm_date_extra$Date_Internal_RataDie$daysBeforeWeekYear(wy) + ((wn - 1) * 7)) + wdn;
|
||||
});
|
||||
var _justinmimbs$elm_date_extra$Date_Internal_RataDie$fromCalendarDate = F3(
|
||||
function (y, m, d) {
|
||||
return (_justinmimbs$elm_date_extra$Date_Internal_RataDie$daysBeforeYear(y) + A2(_justinmimbs$elm_date_extra$Date_Extra_Facts$daysBeforeStartOfMonth, y, m)) + d;
|
||||
});
|
||||
var _justinmimbs$elm_date_extra$Date_Internal_RataDie$fromOrdinalDate = F2(
|
||||
function (y, od) {
|
||||
return _justinmimbs$elm_date_extra$Date_Internal_RataDie$daysBeforeYear(y) + od;
|
||||
var _justinmimbs$elm_date_extra$Date_Internal_RataDie$find = F2(
|
||||
function (pred, list) {
|
||||
find:
|
||||
while (true) {
|
||||
var _p5 = list;
|
||||
if (_p5.ctor === '[]') {
|
||||
return _elm_lang$core$Maybe$Nothing;
|
||||
} else {
|
||||
var _p6 = _p5._0;
|
||||
if (pred(_p6)) {
|
||||
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(
|
||||
function (y, m, d) {
|
||||
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(
|
||||
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 utcTime = _elm_lang$core$Date$toTime(date);
|
||||
|
|
@ -13396,13 +13392,6 @@ var _justinmimbs$elm_date_extra$Date_Internal_Parse$offsetTimeFromIsoString = fu
|
|||
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) {
|
||||
return {
|
||||
ctor: '_Tuple7',
|
||||
|
|
@ -13589,25 +13578,25 @@ var _justinmimbs$elm_date_extra$Date_Extra$add = F3(
|
|||
}
|
||||
});
|
||||
var _justinmimbs$elm_date_extra$Date_Extra$rangeHelp = F5(
|
||||
function (interval, step, end, revList, date) {
|
||||
function (result, interval, step, start, date) {
|
||||
rangeHelp:
|
||||
while (true) {
|
||||
if (_elm_lang$core$Native_Utils.cmp(
|
||||
_elm_lang$core$Date$toTime(date),
|
||||
_elm_lang$core$Date$toTime(end)) < 0) {
|
||||
var _v4 = interval,
|
||||
_v5 = step,
|
||||
_v6 = end,
|
||||
_v7 = {ctor: '::', _0: date, _1: revList},
|
||||
_elm_lang$core$Date$toTime(start)) < 0) {
|
||||
return result;
|
||||
} else {
|
||||
var _v4 = {ctor: '::', _0: date, _1: result},
|
||||
_v5 = interval,
|
||||
_v6 = step,
|
||||
_v7 = start,
|
||||
_v8 = A3(_justinmimbs$elm_date_extra$Date_Extra$add, interval, step, date);
|
||||
interval = _v4;
|
||||
step = _v5;
|
||||
end = _v6;
|
||||
revList = _v7;
|
||||
result = _v4;
|
||||
interval = _v5;
|
||||
step = _v6;
|
||||
start = _v7;
|
||||
date = _v8;
|
||||
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(
|
||||
function (interval, step, start, end) {
|
||||
var first = A2(_justinmimbs$elm_date_extra$Date_Extra$ceiling, interval, start);
|
||||
return (_elm_lang$core$Native_Utils.cmp(
|
||||
_elm_lang$core$Date$toTime(first),
|
||||
_elm_lang$core$Date$toTime(end)) < 0) ? A5(
|
||||
var stepBack = _elm_lang$core$Basics$negate(
|
||||
A2(_elm_lang$core$Basics$max, 1, step));
|
||||
return A5(
|
||||
_justinmimbs$elm_date_extra$Date_Extra$rangeHelp,
|
||||
interval,
|
||||
A2(_elm_lang$core$Basics$max, 1, step),
|
||||
end,
|
||||
{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) {
|
||||
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;
|
||||
}
|
||||
});
|
||||
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$Minute = {ctor: 'Minute'};
|
||||
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) {
|
||||
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);
|
||||
var _krisajenkins$remotedata$RemoteData$fromResult = function (result) {
|
||||
var _p6 = result;
|
||||
if (_p6.ctor === 'Err') {
|
||||
return _krisajenkins$remotedata$RemoteData$Failure(_p6._0);
|
||||
} else {
|
||||
return _krisajenkins$remotedata$RemoteData$Success(_p6._0);
|
||||
}
|
||||
});
|
||||
var _krisajenkins$remotedata$RemoteData$fromResult = function (result) {
|
||||
var _p7 = result;
|
||||
if (_p7.ctor === 'Err') {
|
||||
return _krisajenkins$remotedata$RemoteData$Failure(_p7._0);
|
||||
} else {
|
||||
return _krisajenkins$remotedata$RemoteData$Success(_p7._0);
|
||||
}
|
||||
};
|
||||
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$fromTask = function (_p8) {
|
||||
var _krisajenkins$remotedata$RemoteData$fromTask = function (_p7) {
|
||||
return A2(
|
||||
_elm_lang$core$Task$onError,
|
||||
function (_p9) {
|
||||
function (_p8) {
|
||||
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$NotAsked = {ctor: 'NotAsked'};
|
||||
var _krisajenkins$remotedata$RemoteData$map = F2(
|
||||
function (f, data) {
|
||||
var _p10 = data;
|
||||
switch (_p10.ctor) {
|
||||
var _p9 = data;
|
||||
switch (_p9.ctor) {
|
||||
case 'Success':
|
||||
return _krisajenkins$remotedata$RemoteData$Success(
|
||||
f(_p10._0));
|
||||
f(_p9._0));
|
||||
case 'Loading':
|
||||
return _krisajenkins$remotedata$RemoteData$Loading;
|
||||
case 'NotAsked':
|
||||
return _krisajenkins$remotedata$RemoteData$NotAsked;
|
||||
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(
|
||||
_krisajenkins$remotedata$RemoteData$withDefault,
|
||||
_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(
|
||||
function (f, data) {
|
||||
var _p12 = data;
|
||||
switch (_p12.ctor) {
|
||||
var _p11 = data;
|
||||
switch (_p11.ctor) {
|
||||
case 'Success':
|
||||
return _krisajenkins$remotedata$RemoteData$Success(_p12._0);
|
||||
return _krisajenkins$remotedata$RemoteData$Success(_p11._0);
|
||||
case 'Failure':
|
||||
return _krisajenkins$remotedata$RemoteData$Failure(
|
||||
f(_p12._0));
|
||||
f(_p11._0));
|
||||
case 'Loading':
|
||||
return _krisajenkins$remotedata$RemoteData$Loading;
|
||||
default:
|
||||
return _krisajenkins$remotedata$RemoteData$NotAsked;
|
||||
}
|
||||
});
|
||||
var _krisajenkins$remotedata$RemoteData$mapBoth = F2(
|
||||
function (successFn, errorFn) {
|
||||
return function (_p13) {
|
||||
return A2(
|
||||
_krisajenkins$remotedata$RemoteData$mapError,
|
||||
errorFn,
|
||||
A2(_krisajenkins$remotedata$RemoteData$map, successFn, _p13));
|
||||
};
|
||||
var _krisajenkins$remotedata$RemoteData$mapBoth = F3(
|
||||
function (successFn, errorFn, data) {
|
||||
var _p12 = data;
|
||||
switch (_p12.ctor) {
|
||||
case 'Success':
|
||||
return _krisajenkins$remotedata$RemoteData$Success(
|
||||
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(
|
||||
function (f, data) {
|
||||
var _p14 = data;
|
||||
switch (_p14.ctor) {
|
||||
var _p13 = data;
|
||||
switch (_p13.ctor) {
|
||||
case 'Success':
|
||||
return f(_p14._0);
|
||||
return f(_p13._0);
|
||||
case 'Failure':
|
||||
return _krisajenkins$remotedata$RemoteData$Failure(_p14._0);
|
||||
return _krisajenkins$remotedata$RemoteData$Failure(_p13._0);
|
||||
case 'NotAsked':
|
||||
return _krisajenkins$remotedata$RemoteData$NotAsked;
|
||||
default:
|
||||
|
|
@ -14036,61 +14018,17 @@ var _krisajenkins$remotedata$RemoteData$andThen = F2(
|
|||
});
|
||||
var _krisajenkins$remotedata$RemoteData$andMap = F2(
|
||||
function (wrappedValue, wrappedFunction) {
|
||||
var _p15 = {ctor: '_Tuple2', _0: wrappedFunction, _1: wrappedValue};
|
||||
_v11_5:
|
||||
do {
|
||||
_v11_4:
|
||||
do {
|
||||
_v11_3:
|
||||
do {
|
||||
_v11_2:
|
||||
do {
|
||||
switch (_p15._0.ctor) {
|
||||
var _p14 = wrappedFunction;
|
||||
switch (_p14.ctor) {
|
||||
case 'Success':
|
||||
switch (_p15._1.ctor) {
|
||||
case 'Success':
|
||||
return _krisajenkins$remotedata$RemoteData$Success(
|
||||
_p15._0._0(_p15._1._0));
|
||||
return A2(_krisajenkins$remotedata$RemoteData$map, _p14._0, wrappedValue);
|
||||
case 'Failure':
|
||||
break _v11_2;
|
||||
return _krisajenkins$remotedata$RemoteData$Failure(_p14._0);
|
||||
case 'Loading':
|
||||
break _v11_4;
|
||||
return _krisajenkins$remotedata$RemoteData$Loading;
|
||||
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;
|
||||
} while(false);
|
||||
return _krisajenkins$remotedata$RemoteData$Loading;
|
||||
} while(false);
|
||||
return _krisajenkins$remotedata$RemoteData$NotAsked;
|
||||
});
|
||||
var _krisajenkins$remotedata$RemoteData$map2 = F3(
|
||||
function (f, a, b) {
|
||||
|
|
@ -14099,15 +14037,6 @@ var _krisajenkins$remotedata$RemoteData$map2 = F3(
|
|||
b,
|
||||
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(
|
||||
function (f, a, b, c) {
|
||||
return A2(
|
||||
|
|
@ -14133,12 +14062,12 @@ var _krisajenkins$remotedata$RemoteData$append = F2(
|
|||
});
|
||||
var _krisajenkins$remotedata$RemoteData$update = F2(
|
||||
function (f, remoteData) {
|
||||
var _p16 = remoteData;
|
||||
switch (_p16.ctor) {
|
||||
var _p15 = remoteData;
|
||||
switch (_p15.ctor) {
|
||||
case 'Success':
|
||||
var _p17 = f(_p16._0);
|
||||
var first = _p17._0;
|
||||
var second = _p17._1;
|
||||
var _p16 = f(_p15._0);
|
||||
var first = _p16._0;
|
||||
var second = _p16._1;
|
||||
return {
|
||||
ctor: '_Tuple2',
|
||||
_0: _krisajenkins$remotedata$RemoteData$Success(first),
|
||||
|
|
@ -14151,7 +14080,7 @@ var _krisajenkins$remotedata$RemoteData$update = F2(
|
|||
default:
|
||||
return {
|
||||
ctor: '_Tuple2',
|
||||
_0: _krisajenkins$remotedata$RemoteData$Failure(_p16._0),
|
||||
_0: _krisajenkins$remotedata$RemoteData$Failure(_p15._0),
|
||||
_1: _elm_lang$core$Platform_Cmd$none
|
||||
};
|
||||
}
|
||||
|
|
@ -14252,19 +14181,6 @@ var _lukewestby$elm_http_builder$HttpBuilder$send = F2(
|
|||
tagger,
|
||||
_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(
|
||||
function (expect, builder) {
|
||||
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),
|
||||
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(
|
||||
function (headerPairs, builder) {
|
||||
return _elm_lang$core$Native_Utils.update(
|
||||
|
|
@ -21692,6 +21593,12 @@ var _pablohirafuji$elm_qrcode$QRCode_View$rectView = function (_p1) {
|
|||
ctor: '::',
|
||||
_0: _elm_lang$svg$Svg_Attributes$y(
|
||||
_elm_lang$core$Basics$toString(_p2.row * _pablohirafuji$elm_qrcode$QRCode_View$moduleSize)),
|
||||
_1: {
|
||||
ctor: '::',
|
||||
_0: _elm_lang$svg$Svg_Attributes$rx('0'),
|
||||
_1: {
|
||||
ctor: '::',
|
||||
_0: _elm_lang$svg$Svg_Attributes$ry('0'),
|
||||
_1: {
|
||||
ctor: '::',
|
||||
_0: _elm_lang$svg$Svg_Attributes$width(
|
||||
|
|
@ -21708,6 +21615,8 @@ var _pablohirafuji$elm_qrcode$QRCode_View$rectView = function (_p1) {
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{ctor: '[]'});
|
||||
};
|
||||
|
|
@ -37593,6 +37502,14 @@ var _user$project$NavBar$view = F2(
|
|||
_1: _user$project$CoreTypes$AccountRoute('blockcypher'),
|
||||
_2: true
|
||||
},
|
||||
_1: {
|
||||
ctor: '::',
|
||||
_0: {
|
||||
ctor: '_Tuple3',
|
||||
_0: 'Infura',
|
||||
_1: _user$project$CoreTypes$AccountRoute('infura'),
|
||||
_2: true
|
||||
},
|
||||
_1: {
|
||||
ctor: '::',
|
||||
_0: {
|
||||
|
|
@ -37632,6 +37549,7 @@ var _user$project$NavBar$view = F2(
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}),
|
||||
_1: {
|
||||
ctor: '::',
|
||||
|
|
|
|||
14
schemas/infura.json
Normal file
14
schemas/infura.json
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
{
|
||||
"code": "infura",
|
||||
"display": "Infura",
|
||||
"fields": [
|
||||
{
|
||||
"code": "apiKey",
|
||||
"display": "API key",
|
||||
"fieldType": "password",
|
||||
"secret": true,
|
||||
"required": true,
|
||||
"value": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue