Skip to content
This repository was archived by the owner on Mar 11, 2025. It is now read-only.

Commit 2e01180

Browse files
committed
Update to match stellar-sdk implementation
1 parent 747908b commit 2e01180

File tree

3 files changed

+99
-94
lines changed

3 files changed

+99
-94
lines changed

src/parsers.ts

+6-2
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,13 @@ export function parseRawEvents(
2323
return {
2424
latestLedger: r.latestLedger,
2525
events: (r.events ?? []).map((evt) => {
26+
const clone: Omit<SorobanRpc.RawEventResponse, 'contractId'> = { ...evt };
27+
delete (clone as any).contractId; // `as any` hack because contractId field isn't optional
28+
29+
// the contractId may be empty so we omit the field in that case
2630
return {
27-
...evt,
28-
contractId: new Contract(evt.contractId),
31+
...clone,
32+
...(evt.contractId !== '' && { contractId: new Contract(evt.contractId) }),
2933
topic: evt.topic.map((topic) => xdr.ScVal.fromXDR(topic, 'base64')),
3034
value: xdr.ScVal.fromXDR(evt.value.xdr, 'base64')
3135
};

src/soroban_rpc.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ export namespace SorobanRpc {
146146
}
147147

148148
interface EventResponse extends BaseEventResponse {
149-
contractId: Contract;
149+
contractId?: Contract;
150150
topic: xdr.ScVal[];
151151
value: xdr.ScVal;
152152
}

test/unit/server/get_events_test.js

+92-91
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
const { Server, AxiosClient, nativeToScVal } = SorobanClient;
1+
const { nativeToScVal, SorobanClient, Server, AxiosClient } = SorobanClient;
22

3-
describe('Server#getEvents', function () {
3+
describe("Server#getEvents", function () {
44
beforeEach(function () {
55
this.server = new Server(serverUrl);
66
this.axiosMock = sinon.mock(AxiosClient);
@@ -11,16 +11,16 @@ describe('Server#getEvents', function () {
1111
this.axiosMock.restore();
1212
});
1313

14-
it('requests the correct endpoint', function (done) {
14+
it("requests the correct endpoint", function (done) {
1515
let result = { latestLedger: 0, events: [] };
1616
setupMock(
1717
this.axiosMock,
1818
{
1919
filters: [],
2020
pagination: {},
21-
startLedger: '1'
21+
startLedger: "1",
2222
},
23-
result
23+
result,
2424
);
2525

2626
this.server
@@ -34,75 +34,76 @@ describe('Server#getEvents', function () {
3434
});
3535
});
3636

37-
it('can build wildcard filters', function (done) {
37+
it("can build wildcard filters", function (done) {
3838
let result = {
3939
latestLedger: 1,
40-
events: filterEvents(getEventsResponseFixture, '*/*')
40+
events: filterEvents(getEventsResponseFixture, "*/*"),
4141
};
4242
expect(result.events).to.not.have.lengthOf(0, JSON.stringify(result));
4343

4444
setupMock(
4545
this.axiosMock,
4646
{
47-
startLedger: '1',
47+
startLedger: "1",
4848
filters: [
4949
{
50-
topics: [['*', '*']]
51-
}
50+
topics: [["*", "*"]],
51+
},
5252
],
53-
pagination: {}
53+
pagination: {},
5454
},
55-
result
55+
result,
5656
);
5757

5858
this.server
5959
.getEvents({
6060
startLedger: 1,
6161
filters: [
6262
{
63-
topics: [['*', '*']]
64-
}
65-
]
63+
topics: [["*", "*"]],
64+
},
65+
],
6666
})
6767
.then(function (response) {
6868
expect(response).to.be.deep.equal(parseEvents(result));
69+
expect(response.events[0].contractId).to.be.undefined;
6970
done();
7071
})
7172
.catch(done);
7273
});
7374

74-
it('can build matching filters', function (done) {
75+
it("can build matching filters", function (done) {
7576
let result = {
7677
latestLedger: 1,
7778
events: filterEvents(
7879
getEventsResponseFixture,
79-
`${topicVals[0]}/${topicVals[1]}`
80-
)
80+
`${topicVals[0]}/${topicVals[1]}`,
81+
),
8182
};
8283
expect(result.events).to.not.have.lengthOf(0, JSON.stringify(result));
8384

8485
setupMock(
8586
this.axiosMock,
8687
{
87-
startLedger: '1',
88+
startLedger: "1",
8889
filters: [
8990
{
90-
topics: [[topicVals[0], topicVals[1]]]
91-
}
91+
topics: [[topicVals[0], topicVals[1]]],
92+
},
9293
],
93-
pagination: {}
94+
pagination: {},
9495
},
95-
result
96+
result,
9697
);
9798

9899
this.server
99100
.getEvents({
100101
startLedger: 1,
101102
filters: [
102103
{
103-
topics: [[topicVals[0], topicVals[1]]]
104-
}
105-
]
104+
topics: [[topicVals[0], topicVals[1]]],
105+
},
106+
],
106107
})
107108
.then(function (response) {
108109
expect(response).to.be.deep.equal(parseEvents(result));
@@ -111,38 +112,38 @@ describe('Server#getEvents', function () {
111112
.catch(done);
112113
});
113114

114-
it('can build mixed filters', function (done) {
115+
it("can build mixed filters", function (done) {
115116
let result = {
116117
latestLedger: 3,
117118
events: filterEventsByLedger(
118119
filterEvents(getEventsResponseFixture, `${topicVals[0]}/*`),
119-
2
120-
)
120+
2,
121+
),
121122
};
122123
expect(result.events).to.not.have.lengthOf(0, JSON.stringify(result));
123124

124125
setupMock(
125126
this.axiosMock,
126127
{
127-
startLedger: '2',
128+
startLedger: "2",
128129
filters: [
129130
{
130-
topics: [[topicVals[0], '*']]
131-
}
131+
topics: [[topicVals[0], "*"]],
132+
},
132133
],
133-
pagination: {}
134+
pagination: {},
134135
},
135-
result
136+
result,
136137
);
137138

138139
this.server
139140
.getEvents({
140141
startLedger: 2,
141142
filters: [
142143
{
143-
topics: [[topicVals[0], '*']]
144-
}
145-
]
144+
topics: [[topicVals[0], "*"]],
145+
},
146+
],
146147
})
147148
.then(function (response) {
148149
expect(response).to.be.deep.equal(parseEvents(result));
@@ -151,13 +152,13 @@ describe('Server#getEvents', function () {
151152
.catch(done);
152153
});
153154

154-
it('can paginate', function (done) {
155+
it("can paginate", function (done) {
155156
let result = {
156157
latestLedger: 3,
157158
events: filterEventsByLedger(
158-
filterEvents(getEventsResponseFixture, '*/*'),
159-
2
160-
)
159+
filterEvents(getEventsResponseFixture, "*/*"),
160+
2,
161+
),
161162
};
162163
expect(result.events).to.not.have.lengthOf(0, JSON.stringify(result));
163164

@@ -166,26 +167,26 @@ describe('Server#getEvents', function () {
166167
{
167168
filters: [
168169
{
169-
topics: [['*', '*']]
170-
}
170+
topics: [["*", "*"]],
171+
},
171172
],
172173
pagination: {
173174
limit: 10,
174-
cursor: '0164090849041387521-0000000000'
175-
}
175+
cursor: "0164090849041387521-0000000000",
176+
},
176177
},
177-
result
178+
result,
178179
);
179180

180181
this.server
181182
.getEvents({
182183
filters: [
183184
{
184-
topics: [['*', '*']]
185-
}
185+
topics: [["*", "*"]],
186+
},
186187
],
187-
cursor: '0164090849041387521-0000000000',
188-
limit: 10
188+
cursor: "0164090849041387521-0000000000",
189+
limit: 10,
189190
})
190191
.then(function (response) {
191192
expect(response).to.be.deep.equal(parseEvents(result));
@@ -196,11 +197,11 @@ describe('Server#getEvents', function () {
196197
});
197198

198199
function filterEvents(events, filter) {
199-
const parts = filter.split('/');
200+
const parts = filter.split("/");
200201
return events.filter(
201202
(e, i) =>
202203
e.topic.length == parts.length &&
203-
e.topic.every((s, j) => s === parts[j] || parts[j] === '*')
204+
e.topic.every((s, j) => s === parts[j] || parts[j] === "*"),
204205
);
205206
}
206207

@@ -212,12 +213,12 @@ function filterEventsByLedger(events, start) {
212213

213214
function setupMock(axiosMock, params, result) {
214215
axiosMock
215-
.expects('post')
216+
.expects("post")
216217
.withArgs(serverUrl, {
217-
jsonrpc: '2.0',
218+
jsonrpc: "2.0",
218219
id: 1,
219-
method: 'getEvents',
220-
params: params
220+
method: "getEvents",
221+
params: params,
221222
})
222223
.returns(Promise.resolve({ data: { result } }));
223224
}
@@ -226,64 +227,64 @@ function parseEvents(result) {
226227
return SorobanClient.parseRawEvents(result);
227228
}
228229

229-
const contractId = 'CA3D5KRYM6CB7OWQ6TWYRR3Z4T7GNZLKERYNZGGA5SOAOPIFY6YQGAXE';
230+
const contractId = "CA3D5KRYM6CB7OWQ6TWYRR3Z4T7GNZLKERYNZGGA5SOAOPIFY6YQGAXE";
230231
const topicVals = [
231-
nativeToScVal('transfer', { type: 'symbol' }).toXDR('base64'),
232-
nativeToScVal(contractId, { type: 'address' }).toXDR('base64'),
233-
nativeToScVal(1234).toXDR('base64')
232+
nativeToScVal("transfer", { type: "symbol" }).toXDR("base64"),
233+
nativeToScVal(contractId, { type: "address" }).toXDR("base64"),
234+
nativeToScVal(1234).toXDR("base64"),
234235
];
235-
let eventVal = nativeToScVal('wassup').toXDR('base64');
236+
let eventVal = nativeToScVal("wassup").toXDR("base64");
236237
let getEventsResponseFixture = [
237238
{
238-
type: 'system',
239-
ledger: '1',
240-
ledgerClosedAt: '2022-11-16T16:10:41Z',
241-
contractId,
242-
id: '0164090849041387521-0000000003',
243-
pagingToken: '164090849041387521-3',
239+
type: "system",
240+
ledger: "1",
241+
ledgerClosedAt: "2022-11-16T16:10:41Z",
242+
contractId: "",
243+
id: "0164090849041387521-0000000003",
244+
pagingToken: "164090849041387521-3",
244245
inSuccessfulContractCall: true,
245246
topic: topicVals.slice(0, 2),
246247
value: {
247-
xdr: eventVal
248-
}
248+
xdr: eventVal,
249+
},
249250
},
250251
{
251-
type: 'contract',
252-
ledger: '2',
253-
ledgerClosedAt: '2022-11-16T16:10:41Z',
252+
type: "contract",
253+
ledger: "2",
254+
ledgerClosedAt: "2022-11-16T16:10:41Z",
254255
contractId,
255-
id: '0164090849041387521-0000000003',
256-
pagingToken: '164090849041387521-3',
256+
id: "0164090849041387521-0000000003",
257+
pagingToken: "164090849041387521-3",
257258
inSuccessfulContractCall: true,
258259
topic: topicVals.slice(0, 2),
259260
value: {
260-
xdr: eventVal
261-
}
261+
xdr: eventVal,
262+
},
262263
},
263264
{
264-
type: 'diagnostic',
265-
ledger: '2',
266-
ledgerClosedAt: '2022-11-16T16:10:41Z',
265+
type: "diagnostic",
266+
ledger: "2",
267+
ledgerClosedAt: "2022-11-16T16:10:41Z",
267268
contractId,
268-
id: '0164090849041387521-0000000003',
269-
pagingToken: '164090849041387521-3',
269+
id: "0164090849041387521-0000000003",
270+
pagingToken: "164090849041387521-3",
270271
inSuccessfulContractCall: true,
271272
topic: [topicVals[0]],
272273
value: {
273-
xdr: eventVal
274-
}
274+
xdr: eventVal,
275+
},
275276
},
276277
{
277-
type: 'contract',
278-
ledger: '3',
279-
ledgerClosedAt: '2022-12-14T01:01:20Z',
278+
type: "contract",
279+
ledger: "3",
280+
ledgerClosedAt: "2022-12-14T01:01:20Z",
280281
contractId,
281-
id: '0000000171798695936-0000000001',
282-
pagingToken: '0000000171798695936-0000000001',
282+
id: "0000000171798695936-0000000001",
283+
pagingToken: "0000000171798695936-0000000001",
283284
inSuccessfulContractCall: true,
284285
topic: topicVals,
285286
value: {
286-
xdr: eventVal
287-
}
288-
}
287+
xdr: eventVal,
288+
},
289+
},
289290
];

0 commit comments

Comments
 (0)