diff --git a/package-lock.json b/package-lock.json index 9560b160..2b1c64f1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -957,9 +957,9 @@ } }, "@open-rpc/examples": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@open-rpc/examples/-/examples-1.6.0.tgz", - "integrity": "sha512-Fq704vsc0w7z8PI8VEJas6DmIhEqnUnP5TBwBMG6CPgPvqXIobqW51qeP+P6PUkJQyP9u9JlZJsLFqZojKl9cQ==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@open-rpc/examples/-/examples-1.6.1.tgz", + "integrity": "sha512-R0R8IimU5yJeAFe94GspnynIj0bv2AM57Px3cTwZkVwg6fCYOw+9l4gOQc402f+kSvZC7/BjNPyGtQ83oDbDYw==", "dev": true }, "@open-rpc/meta-schema": { diff --git a/package.json b/package.json index 887c9827..b659b609 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ "ws": "^7.3.1" }, "devDependencies": { - "@open-rpc/examples": "^1.6.0", + "@open-rpc/examples": "^1.6.1", "@open-rpc/meta-schema": "^1.13.20", "@types/body-parser": "^1.19.0", "@types/connect": "^3.4.33", diff --git a/src/router.test.ts b/src/router.test.ts index aa564803..c8371e4e 100644 --- a/src/router.test.ts +++ b/src/router.test.ts @@ -63,9 +63,12 @@ describe("router", () => { if (exampleName === "petstoreByName") { it("handles params by name", async () => { const router = new Router(parsedExample, makeMethodMapping(parsedExample.methods)); - const result = await router.call("list_pets", { limit: 10 }); + const result = await router.call("list_pets", { limit: 1 }); expect(result).toBeDefined(); expect(result.result.length).toBeGreaterThan(0); + expect(result.result[0].name).toBe("fluffy"); + expect(result.result[0].id).toBe(7); + expect(result.result[0].tag).toBe("poodle"); }); } if (exampleName === "simpleMath") { @@ -108,6 +111,12 @@ describe("router", () => { expect(result).toEqual(parsedExample); }); + it("can call rpc.discover with empty object", async () => { + const router = new Router(parsedExample, makeMethodMapping(parsedExample.methods)); + const { result } = await router.call("rpc.discover", {}); + expect(result).toEqual(parsedExample); + }); + it("Simple math call validates params", async () => { const router = new Router(parsedExample, makeMethodMapping(parsedExample.methods)); const { error } = await router.call("addition", ["2", 2]); diff --git a/src/router.ts b/src/router.ts index 3e24945f..fabef1ed 100644 --- a/src/router.ts +++ b/src/router.ts @@ -20,13 +20,21 @@ export interface MockModeSettings { export type TMethodHandler = (...args: any) => Promise; -const sortParamKeys = (method: MethodObject, params: Record) => { +const sortParamKeys = (method?: MethodObject, params?: Record) => { + if (!method) { + return []; + } + if (!params) { + return []; + } const docParams = method.params as ContentDescriptorObject[]; const methodParamsOrder: { [k: string]: number } = docParams .map((p) => p.name) .reduce((m, pn, i) => ({ ...m, [pn]: i }), {}); - return Object.entries(params).sort((v1, v2) => methodParamsOrder[v1[0]] - methodParamsOrder[v2[0]]); + return Object.entries(params) + .sort((v1, v2) => methodParamsOrder[v1[0]] - methodParamsOrder[v2[0]]) + .map(([key, val]) => val); }; export class Router {