2015-12-25 22:42:14 +01:00
/ *
This file is part of TALER
2016-01-26 17:21:17 +01:00
( C ) 2015 - 2016 GNUnet e . V .
2015-12-25 22:42:14 +01:00
TALER is free software ; you can redistribute it and / or modify it under the
terms of the GNU General Public License as published by the Free Software
Foundation ; either version 3 , or ( at your option ) any later version .
TALER is distributed in the hope that it will be useful , but WITHOUT ANY
WARRANTY ; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
A PARTICULAR PURPOSE . See the GNU General Public License for more details .
You should have received a copy of the GNU General Public License along with
TALER ; see the file COPYING . If not , If not , see < http : //www.gnu.org/licenses/>
* /
2016-02-15 11:29:58 +01:00
System . register ( [ "../lib/wallet/helpers" , "../lib/wallet/types" , "mithril" ] , function ( exports _1 , context _1 ) {
2016-01-26 17:21:17 +01:00
"use strict" ;
2016-02-10 02:03:31 +01:00
var _ _moduleName = context _1 && context _1 . id ;
2016-02-15 11:29:58 +01:00
var helpers _1 , types _1 , mithril _1 ;
2016-02-11 11:29:57 +01:00
var DelayTimer , Controller ;
2016-02-15 11:29:58 +01:00
function view ( ctrl ) {
var controls = [ ] ;
var mx = function ( x ) {
var args = [ ] ;
for ( var _i = 1 ; _i < arguments . length ; _i ++ ) {
args [ _i - 1 ] = arguments [ _i ] ;
}
return controls . push ( mithril _1 . default . apply ( void 0 , [ x ] . concat ( args ) ) ) ;
} ;
mx ( "p" , ( _a = [ "The bank wants to create a reserve over " , "." ] , _a . raw = [ "The bank wants to create a reserve over " , "." ] , i18n ( _a , helpers _1 . amountToPretty ( ctrl . amount ) ) ) ) ;
mx ( "input" , {
className : "url" ,
type : "text" ,
spellcheck : false ,
value : ctrl . url ( ) ,
oninput : mithril _1 . default . withAttr ( "value" , ctrl . onUrlChanged . bind ( ctrl ) ) ,
} ) ;
mx ( "button" , {
onclick : function ( ) { return ctrl . confirmReserve ( ctrl . url ( ) , ctrl . amount , ctrl . callbackUrl ) ; } ,
disabled : ! ctrl . isValidMint
} , "Confirm mint selection" ) ;
if ( ctrl . statusString ) {
mx ( "p" , ctrl . statusString ) ;
}
else {
mx ( "p" , "Checking URL, please wait ..." ) ;
}
return mithril _1 . default ( "div" , controls ) ;
var _a ;
}
function getSuggestedMint ( currency ) {
// TODO: make this request go to the wallet backend
// Right now, this is a stub.
var defaultMint = {
"KUDOS" : "http://mint.test.taler.net"
} ;
var mint = defaultMint [ currency ] ;
if ( ! mint ) {
mint = "" ;
}
return Promise . resolve ( mint ) ;
}
2016-01-26 17:21:17 +01:00
function main ( ) {
var url = URI ( document . location . href ) ;
var query = URI . parseQuery ( url . query ( ) ) ;
2016-02-11 11:29:57 +01:00
var amount = types _1 . AmountJson . checked ( JSON . parse ( query . amount ) ) ;
var callback _url = query . callback _url ;
2016-02-15 11:29:58 +01:00
var bank _url = query . bank _url ;
getSuggestedMint ( amount . currency )
. then ( function ( suggestedMintUrl ) {
var controller = function ( ) { return new Controller ( suggestedMintUrl , amount , callback _url ) ; } ;
var MintSelection = { controller : controller , view : view } ;
mithril _1 . default . mount ( document . getElementById ( "mint-selection" ) , MintSelection ) ;
} )
. catch ( function ( e ) {
// TODO: provide more context information, maybe factor it out into a
// TODO:generic error reporting function or component.
document . body . innerText = "Fatal error: \"" + e . message + "\"." ;
console . error ( "got backend error \"" + e . message + "\"" ) ;
} ) ;
2016-01-26 17:21:17 +01:00
}
exports _1 ( "main" , main ) ;
return {
2016-02-09 21:56:06 +01:00
setters : [
2016-02-11 11:29:57 +01:00
function ( helpers _1 _1 ) {
helpers _1 = helpers _1 _1 ;
2016-02-10 02:03:31 +01:00
} ,
2016-02-11 11:29:57 +01:00
function ( types _1 _1 ) {
types _1 = types _1 _1 ;
2016-02-15 11:29:58 +01:00
} ,
function ( mithril _1 _1 ) {
mithril _1 = mithril _1 _1 ;
2016-02-09 21:56:06 +01:00
} ] ,
2016-01-26 17:21:17 +01:00
execute : function ( ) {
2016-02-09 21:56:06 +01:00
"use strict" ;
2016-02-11 11:29:57 +01:00
/ * *
* Execute something after a delay , with the possibility
* to reset the delay .
* /
DelayTimer = ( function ( ) {
function DelayTimer ( ms , f ) {
this . timerId = null ;
this . f = f ;
this . ms = ms ;
}
DelayTimer . prototype . bump = function ( ) {
var _this = this ;
2016-02-15 11:29:58 +01:00
this . stop ( ) ;
2016-02-11 11:29:57 +01:00
var handler = function ( ) {
_this . f ( ) ;
} ;
this . timerId = window . setTimeout ( handler , this . ms ) ;
} ;
2016-02-15 11:29:58 +01:00
DelayTimer . prototype . stop = function ( ) {
if ( this . timerId !== null ) {
window . clearTimeout ( this . timerId ) ;
}
} ;
2016-02-11 11:29:57 +01:00
return DelayTimer ;
} ( ) ) ;
Controller = ( function ( ) {
2016-02-15 11:29:58 +01:00
function Controller ( initialMintUrl , amount , callbackUrl ) {
2016-02-11 11:29:57 +01:00
var _this = this ;
2016-02-15 11:29:58 +01:00
this . url = mithril _1 . default . prop ( ) ;
this . statusString = null ;
2016-02-11 11:29:57 +01:00
this . isValidMint = false ;
2016-02-15 11:29:58 +01:00
this . amount = amount ;
this . callbackUrl = callbackUrl ;
2016-02-11 11:29:57 +01:00
this . timer = new DelayTimer ( 800 , function ( ) { return _this . update ( ) ; } ) ;
2016-02-15 11:29:58 +01:00
this . url ( initialMintUrl ) ;
this . update ( ) ;
2016-02-11 11:29:57 +01:00
}
Controller . prototype . update = function ( ) {
var _this = this ;
2016-02-15 11:29:58 +01:00
this . timer . stop ( ) ;
2016-02-11 11:29:57 +01:00
var doUpdate = function ( ) {
2016-02-15 11:29:58 +01:00
if ( ! _this . url ( ) ) {
_this . statusString = ( _a = [ "Please enter a URL" ] , _a . raw = [ "Please enter a URL" ] , i18n ( _a ) ) ;
mithril _1 . default . endComputation ( ) ;
2016-02-11 11:29:57 +01:00
return ;
}
2016-02-15 11:29:58 +01:00
_this . statusString = null ;
var parsedUrl = URI ( _this . url ( ) ) ;
2016-02-11 11:29:57 +01:00
if ( parsedUrl . is ( "relative" ) ) {
2016-02-15 11:29:58 +01:00
_this . statusString = ( _b = [ "The URL you've entered is not valid (must be absolute)" ] , _b . raw = [ "The URL you've entered is not valid (must be absolute)" ] , i18n ( _b ) ) ;
mithril _1 . default . endComputation ( ) ;
2016-02-11 11:29:57 +01:00
return ;
}
2016-02-15 11:29:58 +01:00
var keysUrl = URI ( "/keys" ) . absoluteTo ( helpers _1 . canonicalizeBaseUrl ( _this . url ( ) ) ) ;
2016-02-11 11:29:57 +01:00
console . log ( "requesting keys from '" + keysUrl + "'" ) ;
_this . request = new XMLHttpRequest ( ) ;
_this . request . onreadystatechange = function ( ) {
if ( _this . request . readyState == XMLHttpRequest . DONE ) {
switch ( _this . request . status ) {
case 200 :
_this . isValidMint = true ;
2016-02-15 11:29:58 +01:00
_this . statusString = "The mint base URL is valid!" ;
2016-02-11 11:29:57 +01:00
break ;
case 0 :
2016-02-15 11:29:58 +01:00
_this . statusString = "unknown request error" ;
2016-02-11 11:29:57 +01:00
break ;
default :
2016-02-15 11:29:58 +01:00
_this . statusString = "request failed with status " + _this . request . status ;
2016-02-11 11:29:57 +01:00
break ;
}
}
2016-02-15 11:29:58 +01:00
mithril _1 . default . endComputation ( ) ;
2016-02-11 11:29:57 +01:00
} ;
_this . request . open ( "get" , keysUrl . href ( ) ) ;
_this . request . send ( ) ;
var _a , _b ;
} ;
2016-02-15 11:29:58 +01:00
mithril _1 . default . startComputation ( ) ;
2016-02-11 11:29:57 +01:00
doUpdate ( ) ;
console . log ( "got update" ) ;
} ;
Controller . prototype . reset = function ( ) {
this . isValidMint = false ;
2016-02-15 11:29:58 +01:00
this . statusString = null ;
2016-02-11 11:29:57 +01:00
if ( this . request ) {
this . request . abort ( ) ;
this . request = null ;
}
} ;
Controller . prototype . confirmReserve = function ( mint , amount , callback _url ) {
var _this = this ;
var d = { mint : mint , amount : amount } ;
var cb = function ( rawResp ) {
if ( ! rawResp ) {
throw Error ( "empty response" ) ;
}
if ( ! rawResp . error ) {
var resp = types _1 . CreateReserveResponse . checked ( rawResp ) ;
var q = {
mint : resp . mint ,
reserve _pub : resp . reservePub ,
amount _value : amount . value ,
amount _fraction : amount . fraction ,
amount _currency : amount . currency ,
} ;
var url = URI ( callback _url ) . addQuery ( q ) ;
if ( ! url . is ( "absolute" ) ) {
throw Error ( "callback url is not absolute" ) ;
}
console . log ( "going to" , url . href ( ) ) ;
document . location . href = url . href ( ) ;
}
else {
_this . reset ( ) ;
2016-02-15 11:29:58 +01:00
_this . statusString = ( "Oops, something went wrong." +
2016-02-11 11:29:57 +01:00
( "The wallet responded with error status (" + rawResp . error + ")." ) ) ;
}
} ;
chrome . runtime . sendMessage ( { type : 'create-reserve' , detail : d } , cb ) ;
} ;
Controller . prototype . onUrlChanged = function ( url ) {
this . reset ( ) ;
2016-02-15 11:29:58 +01:00
this . url ( url ) ;
2016-02-11 11:29:57 +01:00
this . timer . bump ( ) ;
} ;
return Controller ;
} ( ) ) ;
2016-01-26 17:21:17 +01:00
}
}
} ) ;
2016-01-10 20:07:42 +01:00
//# sourceMappingURL=confirm-create-reserve.js.map