diff --git a/lib/admin/config.js b/lib/admin/config.js index cbb8c348..c88cd045 100644 --- a/lib/admin/config.js +++ b/lib/admin/config.js @@ -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']}, diff --git a/lib/plugins/wallet/geth/base.js b/lib/plugins/wallet/geth/base.js new file mode 100644 index 00000000..a9879070 --- /dev/null +++ b/lib/plugins/wallet/geth/base.js @@ -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 + })) + }) +} diff --git a/lib/plugins/wallet/geth/geth.js b/lib/plugins/wallet/geth/geth.js index d3b55813..57525ad9 100644 --- a/lib/plugins/wallet/geth/geth.js +++ b/lib/plugins/wallet/geth/geth.js @@ -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 diff --git a/lib/plugins/wallet/infura/infura.js b/lib/plugins/wallet/infura/infura.js new file mode 100644 index 00000000..0389a8c1 --- /dev/null +++ b/lib/plugins/wallet/infura/infura.js @@ -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}) diff --git a/lib/wallet.js b/lib/wallet.js index 6a5e5b47..dbd04fbc 100644 --- a/lib/wallet.js +++ b/lib/wallet.js @@ -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} }) } diff --git a/package-lock.json b/package-lock.json index bc360e48..6f56cc16 100644 --- a/package-lock.json +++ b/package-lock.json @@ -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": { diff --git a/package.json b/package.json index d4b14d5a..6c282761 100644 --- a/package.json +++ b/package.json @@ -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" diff --git a/public/elm.js b/public/elm.js index 7ad9a71b..fc9e8309 100644 --- a/public/elm.js +++ b/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); - } 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); + var _p6 = result; + if (_p6.ctor === 'Err') { + return _krisajenkins$remotedata$RemoteData$Failure(_p6._0); } 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$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) { - 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); + var _p14 = wrappedFunction; + switch (_p14.ctor) { + case 'Success': + return A2(_krisajenkins$remotedata$RemoteData$map, _p14._0, wrappedValue); + case 'Failure': + return _krisajenkins$remotedata$RemoteData$Failure(_p14._0); + case 'Loading': return _krisajenkins$remotedata$RemoteData$Loading; - } while(false); - return _krisajenkins$remotedata$RemoteData$Loading; - } while(false); - return _krisajenkins$remotedata$RemoteData$NotAsked; + default: + 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( @@ -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)), _1: { ctor: '::', - _0: _elm_lang$svg$Svg_Attributes$width( - _elm_lang$core$Basics$toString(_pablohirafuji$elm_qrcode$QRCode_View$moduleSize)), + _0: _elm_lang$svg$Svg_Attributes$rx('0'), _1: { ctor: '::', - _0: _elm_lang$svg$Svg_Attributes$height( - _elm_lang$core$Basics$toString(_pablohirafuji$elm_qrcode$QRCode_View$moduleSize)), + _0: _elm_lang$svg$Svg_Attributes$ry('0'), _1: { ctor: '::', - _0: _elm_lang$svg$Svg_Attributes$fill('black'), - _1: {ctor: '[]'} + _0: _elm_lang$svg$Svg_Attributes$width( + _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: '::', _0: { ctor: '_Tuple3', - _0: 'Kraken', - _1: _user$project$CoreTypes$AccountRoute('kraken'), + _0: 'Infura', + _1: _user$project$CoreTypes$AccountRoute('infura'), _2: true }, _1: { ctor: '::', _0: { ctor: '_Tuple3', - _0: 'Mailjet', - _1: _user$project$CoreTypes$AccountRoute('mailjet'), + _0: 'Kraken', + _1: _user$project$CoreTypes$AccountRoute('kraken'), _2: true }, _1: { ctor: '::', _0: { ctor: '_Tuple3', - _0: 'Strike', - _1: _user$project$CoreTypes$AccountRoute('strike'), + _0: 'Mailjet', + _1: _user$project$CoreTypes$AccountRoute('mailjet'), _2: true }, _1: { ctor: '::', _0: { ctor: '_Tuple3', - _0: 'Twilio', - _1: _user$project$CoreTypes$AccountRoute('twilio'), + _0: 'Strike', + _1: _user$project$CoreTypes$AccountRoute('strike'), _2: true }, - _1: {ctor: '[]'} + _1: { + ctor: '::', + _0: { + ctor: '_Tuple3', + _0: 'Twilio', + _1: _user$project$CoreTypes$AccountRoute('twilio'), + _2: true + }, + _1: {ctor: '[]'} + } } } } diff --git a/schemas/infura.json b/schemas/infura.json new file mode 100644 index 00000000..dc8619fc --- /dev/null +++ b/schemas/infura.json @@ -0,0 +1,14 @@ +{ + "code": "infura", + "display": "Infura", + "fields": [ + { + "code": "apiKey", + "display": "API key", + "fieldType": "password", + "secret": true, + "required": true, + "value": "" + } + ] +}