/
chaincodeevent.ts
73 lines (64 loc) · 1.85 KB
/
chaincodeevent.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
/*
* Copyright 2021 IBM All Rights Reserved.
*
* SPDX-License-Identifier: Apache-2.0
*/
import { gateway, peer } from '@hyperledger/fabric-protos';
import { CloseableAsyncIterable } from './client';
/**
* Chaincode event emitted by a transaction function.
*/
export interface ChaincodeEvent {
/**
* Block number that included this chaincode event.
*/
blockNumber: bigint;
/**
* Transaction that emitted this chaincode event.
*/
transactionId: string;
/**
* Chaincode that emitted this event.
*/
chaincodeName: string;
/**
* Name of the emitted event.
*/
eventName: string;
/**
* Application defined payload data associated with this event.
*/
payload: Uint8Array;
}
// @ts-expect-error Polyfill for Symbol.dispose if not present
Symbol.dispose ??= Symbol('Symbol.dispose');
export function newChaincodeEvents(
responses: CloseableAsyncIterable<gateway.ChaincodeEventsResponse>,
): CloseableAsyncIterable<ChaincodeEvent> {
return {
[Symbol.asyncIterator]: async function* () {
for await (const response of responses) {
const blockNumber = BigInt(response.getBlockNumber());
const events = response.getEventsList();
for (const event of events) {
yield newChaincodeEvent(blockNumber, event);
}
}
},
close: () => {
responses.close();
},
[Symbol.dispose]: () => {
responses.close();
},
};
}
function newChaincodeEvent(blockNumber: bigint, event: peer.ChaincodeEvent): ChaincodeEvent {
return {
blockNumber,
chaincodeName: event.getChaincodeId(),
eventName: event.getEventName(),
transactionId: event.getTxId(),
payload: event.getPayload_asU8(),
};
}