Skip to content
This repository was archived by the owner on Jun 19, 2021. It is now read-only.

Commit 2c4f947

Browse files
committed
feat(lib): group database, pairing, payment events
1 parent 0406380 commit 2c4f947

File tree

2 files changed

+52
-1
lines changed

2 files changed

+52
-1
lines changed

src/event-types.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,28 @@
1+
export interface IPairing {
2+
attempt(from_address: string, pairing_secret: string): void
3+
success(from_address: string, pairing_secret: string): void
4+
remove(from_address: string): void
5+
}
6+
7+
export interface IPayment {
8+
send(unit: number, error: Error): void
9+
recieve(arrNewUnits: number[]): void // #new_private_payment
10+
confirm(arrUnits: number[]): void // #my_transactions_became_stable
11+
'private:recieve'(// #received_payment
12+
payer_device_address: string,
13+
assocAmountsByAsset: string,
14+
asset: string,
15+
message_counter: number,
16+
bToSharedAddress: string
17+
): void
18+
'private:unhandle'(rowsLength: number): void // #unhandled_private_payments_left
19+
}
20+
21+
export interface IDatabase {
22+
'upgrade:start': void
23+
'upgrade:finish': void
24+
'cordova:ready': void
25+
}
126
export interface IMessage {
227
readonly from_address: string
328
readonly text: string

src/index.ts

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import {EventEmitter} from 'events'
22
import Typed from 'strict-event-emitter-types'
33

44
import HWallet from './event-handler'
5-
import {IBot, IOption} from './event-types'
5+
import {IBot, IDatabase, IOption, IPairing, IPayment} from './event-types'
66
import setOption from './options'
77

88
type 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

Comments
 (0)