diff --git a/src/jsonrpc.ts b/src/jsonrpc.ts index dad5f657..e9876944 100644 --- a/src/jsonrpc.ts +++ b/src/jsonrpc.ts @@ -27,6 +27,9 @@ export interface Error { data?: E; } +/** + * Sends the jsonrpc 'params' as an array. + */ export async function post( url: string, method: string, @@ -45,3 +48,25 @@ export async function post( return response.data?.result; } } + +/** + * Sends the jsonrpc 'params' as the single 'param' obj, no array wrapper is applied. + */ +export async function postObject( + url: string, + method: string, + param: any, +): Promise { + const response = await axios.post>(url, { + jsonrpc: "2.0", + // TODO: Generate a unique request id + id: 1, + method, + params: param, + }); + if (hasOwnProperty(response.data, "error")) { + throw response.data.error; + } else { + return response.data?.result; + } +} diff --git a/src/server.ts b/src/server.ts index c5741d5d..141a6f70 100644 --- a/src/server.ts +++ b/src/server.ts @@ -202,8 +202,8 @@ export class Server { * * @example * server.getEvents( - * 1000, - * 1010, + * "1000", + * "1010", * [ * { * type: "contract", @@ -243,9 +243,9 @@ export class Server { // The difficulty comes in matching up the correct integer primitives. // // It also means this library will rely on the XDR definitions. - return await jsonrpc.post(this.serverURL.toString(), "getEvents", { - startLedger, - endLedger, + return await jsonrpc.postObject(this.serverURL.toString(), "getEvents", { + startLedger: String(startLedger), + endLedger: String(endLedger), filters: filters ?? [], pagination: { ...(cursor && { cursor }), // add fields only if defined diff --git a/test/unit/server/get_events_test.js b/test/unit/server/get_events_test.js index 29264448..f0b613cc 100644 --- a/test/unit/server/get_events_test.js +++ b/test/unit/server/get_events_test.js @@ -16,10 +16,10 @@ describe("Server#getEvents", function() { setupMock( this.axiosMock, { - endLedger: 2, + endLedger: "2", filters: [], pagination: {}, - startLedger: 1, + startLedger: "1", }, result, ); @@ -41,8 +41,8 @@ describe("Server#getEvents", function() { setupMock( this.axiosMock, { - startLedger: 1, - endLedger: 10, + startLedger: "1", + endLedger: "10", filters: [ { topics: [["*", "*"]], @@ -76,8 +76,8 @@ describe("Server#getEvents", function() { setupMock( this.axiosMock, { - startLedger: 1, - endLedger: 10, + startLedger: "1", + endLedger: "10", filters: [ { topics: [["AAAABQAAAAh0cmFuc2Zlcg==", "AAAAAQB6Mcc="]], @@ -109,8 +109,8 @@ describe("Server#getEvents", function() { setupMock( this.axiosMock, { - startLedger: 1, - endLedger: 2, + startLedger: "1", + endLedger: "2", filters: [ { topics: [["AAAABQAAAAh0cmFuc2Zlcg==", "*"]], @@ -142,8 +142,8 @@ describe("Server#getEvents", function() { setupMock( this.axiosMock, { - startLedger: 1, - endLedger: 2, + startLedger: "1", + endLedger: "2", filters: [ { topics: [["*", "*"]], @@ -196,7 +196,7 @@ function setupMock(axiosMock, params, result) { jsonrpc: "2.0", id: 1, method: "getEvents", - params: [params], + params: params, }) .returns(Promise.resolve({ data: { result } })); }