@@ -2,7 +2,7 @@ import {EventEmitter} from 'events'
22import Typed from 'strict-event-emitter-types'
33
44import HWallet from './event-handler'
5- import { IBot , IOption } from './event-types'
5+ import { IBot , IDatabase , IOption , IPairing , IPayment } from './event-types'
66import setOption from './options'
77
88type EventType < T > = Typed < EventEmitter , T >
@@ -13,6 +13,11 @@ export class Bot extends (EventEmitter as { new(): EventType<IBot> }) {
1313 static get instance ( ) { return HWallet }
1414 static setOption = setOption
1515
16+ get database ( ) : EventType < IDatabase > { return this . _ev }
17+ get pairing ( ) : EventType < IPairing > { return this . _ev }
18+ get payment ( ) : EventType < IPayment > { return this . _ev }
19+
20+ private readonly _ev = new EventEmitter ( )
1621 private _device ?: Device
1722 private _wallet ?: Wallet
1823
@@ -21,6 +26,20 @@ export class Bot extends (EventEmitter as { new(): EventType<IBot> }) {
2126 if ( option ) Bot . setOption ( option )
2227
2328 this . init ( ) . then ( events => { // mapping events from https://developer.byteball.org/list-of-events
29+
30+ events . on ( 'ready' , ( ) => this . database . emit ( 'cordova:ready' ) )
31+ events . on ( 'started_db_upgrade' , ( ) => this . database . emit ( 'upgrade:start' ) )
32+ events . on ( 'finished_db_upgrade' , ( ) => this . database . emit ( 'upgrade:finish' ) )
33+
34+ events . on ( 'pairing_attempt' , ( ...r ) => this . pairing . emit ( 'attempt' , r [ 0 ] , r [ 1 ] ) )
35+ events . on ( 'paired' , ( ...r ) => this . pairing . emit ( 'success' , r [ 0 ] , r [ 1 ] ) )
36+ events . on ( 'removed_paired_device' , ( ...r ) => this . pairing . emit ( 'remove' , r [ 0 ] ) )
37+
38+ events . on ( 'new_private_payment' , ( ...r ) => this . payment . emit ( 'recieve' , r [ 0 ] ) )
39+ events . on ( 'my_transactions_became_stable' , ( ...r ) => this . payment . emit ( 'confirm' , r [ 0 ] ) )
40+ events . on ( 'received_payment' , ( ...r ) => this . payment . emit ( 'private:recieve' , r [ 0 ] , r [ 1 ] , r [ 2 ] , r [ 3 ] , r [ 4 ] ) )
41+ events . on ( 'unhandled_private_payments_left' , ( ...r ) => this . payment . emit ( 'private:unhandle' , r [ 0 ] ) )
42+
2443 events . on ( 'text' , ( ...r ) => this . emit ( 'message' , {
2544 from_address : r [ 0 ] ,
2645 text : r [ 1 ] ,
@@ -35,6 +54,13 @@ export class Bot extends (EventEmitter as { new(): EventType<IBot> }) {
3554 else this . _device . sendMessageToDevice ( to_address , 'text' , message )
3655 }
3756
57+ sendPayment ( recipient_address : string , amount : number ) {
58+ if ( ! this . _wallet ) throw new Error ( 'Bot not ready' )
59+ else this . _wallet . issueChangeAddressAndSendPayment ( null , amount , recipient_address , undefined ,
60+ ( err : Error , unit : number ) => this . payment . emit ( 'send' , unit , err )
61+ )
62+ }
63+
3864 private async init ( ) {
3965 /// use of `await import` is for module thaat immediately run a service 😓
4066 this . _wallet = await import ( 'headless-byteball' )
0 commit comments