Skip to content

Commit cf35c6c

Browse files
committed
Added #28 Listener for cosignatories -> Listener.multisigAccountAdded()
1 parent 29193b9 commit cf35c6c

File tree

1 file changed

+41
-0
lines changed

1 file changed

+41
-0
lines changed

src/infrastructure/Listener.ts

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ import {AggregateTransactionCosignature} from '../model/transaction/AggregateTra
2626
import {CosignatureSignedTransaction} from '../model/transaction/CosignatureSignedTransaction';
2727
import {Deadline} from '../model/transaction/Deadline';
2828
import {InnerTransaction} from '../model/transaction/InnerTransaction';
29+
import {ModifyMultisigAccountTransaction} from '../model/transaction/ModifyMultisigAccountTransaction';
30+
import {MultisigCosignatoryModification} from '../model/transaction/MultisigCosignatoryModification';
31+
import {MultisigCosignatoryModificationType} from '../model/transaction/MultisigCosignatoryModificationType';
2932
import {Transaction} from '../model/transaction/Transaction';
3033
import {TransactionStatusError} from '../model/transaction/TransactionStatusError';
3134
import {TransferTransaction} from '../model/transaction/TransferTransaction';
@@ -40,6 +43,7 @@ enum ListenerChannelName {
4043
aggregateBondedAdded = 'partialAdded',
4144
aggregateBondedRemoved = 'partialRemoved',
4245
cosignature = 'cosignature',
46+
modifyMultisigAccount = 'modifyMultisigAccount',
4347
status = 'status',
4448
}
4549

@@ -288,6 +292,24 @@ export class Listener {
288292
map((_) => _.message as string));
289293
}
290294

295+
/**
296+
* Return an observable of {@link ModifyMultisigAccountTransaction} for specific address which has been added to multi signatories.
297+
* Each time an modify multi signatures transaction is announced,
298+
* it emits a new {@link ModifyMultisigAccountTransaction} in the event stream.
299+
*
300+
* @param address address we listen when a transaction with missing signatures state
301+
* @return an observable stream of ModifyMultisigAccountTransaction with missing signatures state
302+
*/
303+
public multisigAccountAdded(address: Address): Observable<ModifyMultisigAccountTransaction> {
304+
this.subscribeTo(`modifyMultisigAccount/${address.plain()}`);
305+
return this.messageSubject.asObservable().pipe(
306+
filter((_) => _.channelName === ListenerChannelName.modifyMultisigAccount),
307+
filter((_) => _.message instanceof ModifyMultisigAccountTransaction),
308+
map((_) => _.message as ModifyMultisigAccountTransaction),
309+
filter((_) => this.accountAddedToMultiSig(_, address)),
310+
);
311+
}
312+
291313
/**
292314
* Returns an observable stream of {@link TransactionStatusError} for specific address.
293315
* Each time a transaction contains an error,
@@ -388,4 +410,23 @@ export class Listener {
388410
&& (transaction.recipient as Address).equals(address)
389411
);
390412
}
413+
414+
/**
415+
* @internal
416+
* Filters if an account has been added to multi signatories
417+
* @param transaction - Transaction object
418+
* @param address - Address
419+
* @returns boolean
420+
*/
421+
// tslint:disable-next-line:adjacent-overload-signatures
422+
private accountAddedToMultiSig(transaction: Transaction, address: Address): boolean {
423+
if (transaction instanceof ModifyMultisigAccountTransaction) {
424+
transaction.modifications.map((_: MultisigCosignatoryModification) => {
425+
if (_.type === MultisigCosignatoryModificationType.Add && _.cosignatoryPublicAccount.address.equals(address)) {
426+
return true;
427+
}
428+
});
429+
}
430+
return false;
431+
}
391432
}

0 commit comments

Comments
 (0)