diff --git a/.idea/dictionaries/fuxing.xml b/.idea/dictionaries/fuxing.xml index 2f121c534..a0f0645cd 100644 --- a/.idea/dictionaries/fuxing.xml +++ b/.idea/dictionaries/fuxing.xml @@ -111,6 +111,7 @@ getcollateraltoken getfutureswapblock getgov + getgovproposal getinterest getloanscheme getloantoken @@ -171,6 +172,8 @@ listburnhistory listcollateraltokens listcommunitybalances + listgovproposals + listgovproposalvotes listgovs listloanschemes listloantokens diff --git a/apps/package.json b/apps/package.json index a7366308d..142ff3465 100644 --- a/apps/package.json +++ b/apps/package.json @@ -41,7 +41,7 @@ "cache-manager": "4.1.0", "cbor": "8.1.0", "class-transformer": "0.5.1", - "class-validator": "0.13.2", + "class-validator": "0.14.0", "cross-fetch": "3.1.5", "graphology": "0.25.1", "graphology-components": "1.5.4", diff --git a/apps/playground-api/src/controllers/RpcController.ts b/apps/playground-api/src/controllers/RpcController.ts index 1dfd4bb30..b215b204d 100644 --- a/apps/playground-api/src/controllers/RpcController.ts +++ b/apps/playground-api/src/controllers/RpcController.ts @@ -10,6 +10,8 @@ import { ArgumentMetadata } from '@nestjs/common' import { ApiClient } from '@defichain/jellyfish-api-core' +import { IsArray, IsOptional } from 'class-validator' +import { Transform } from 'class-transformer' /** * MethodWhitelist is a whitelist validation pipe to check whether a plain old rpc can be @@ -63,7 +65,10 @@ export class MethodBlacklist implements PipeTransform { } export class CallRequest { - params?: any[] + @IsOptional() + @IsArray() + @Transform(({ value }) => value !== undefined ? value : []) + params!: any[] } @Controller('/v0/playground/rpc') diff --git a/apps/whale-api/src/module.api/rpc.controller.spec.ts b/apps/whale-api/src/module.api/rpc.controller.spec.ts index 0744288c9..6046f30e3 100644 --- a/apps/whale-api/src/module.api/rpc.controller.spec.ts +++ b/apps/whale-api/src/module.api/rpc.controller.spec.ts @@ -38,7 +38,7 @@ it('should getblockchaininfo via deprecated endpoint', async () => { it('should getblockchaininfo via JSON RPC 1.0', async () => { const result = await controller.post({ method: 'getblockchaininfo' - }) + } as any) expect(result.result.chain).toStrictEqual('regtest') }) diff --git a/apps/whale-api/src/module.api/rpc.controller.ts b/apps/whale-api/src/module.api/rpc.controller.ts index f280b42cf..a5162bd1e 100644 --- a/apps/whale-api/src/module.api/rpc.controller.ts +++ b/apps/whale-api/src/module.api/rpc.controller.ts @@ -54,7 +54,10 @@ export class MethodWhitelist implements PipeTransform { } export class JSONRPCParams { - params?: any[] + @IsOptional() + @IsArray() + @Transform(({ value }) => value !== undefined ? value : []) + params!: any[] } export class JSONRPC { @@ -68,7 +71,7 @@ export class JSONRPC { @IsOptional() @IsArray() @Transform(({ value }) => value !== undefined ? value : []) - params?: any[] + params!: any[] } @Controller('/rpc') @@ -79,7 +82,7 @@ export class RpcController { @Post() async post (@Body() rpc: JSONRPC): Promise { try { - const result = await this.client.call(rpc.method, rpc.params ?? [], 'lossless') + const result = await this.client.call(rpc.method, rpc.params, 'lossless') return new ApiRpcResponse(result) } catch (err: any) { if (err instanceof RpcApiError || err.payload !== undefined) { diff --git a/package-lock.json b/package-lock.json index 0b7330b57..6ac50f77e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -64,7 +64,7 @@ "cache-manager": "4.1.0", "cbor": "8.1.0", "class-transformer": "0.5.1", - "class-validator": "0.13.2", + "class-validator": "0.14.0", "cross-fetch": "3.1.5", "graphology": "0.25.1", "graphology-components": "1.5.4", @@ -7114,8 +7114,7 @@ "node_modules/@types/validator": { "version": "13.7.11", "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.7.11.tgz", - "integrity": "sha512-WqTos+CnAKN64YwyBMhgUYhb5VsTNKwUY6AuzG5qu9/pFZJar/RJFMZBXwX7VS+uzYi+lIAr3WkvuWqEI9F2eg==", - "dev": true + "integrity": "sha512-WqTos+CnAKN64YwyBMhgUYhb5VsTNKwUY6AuzG5qu9/pFZJar/RJFMZBXwX7VS+uzYi+lIAr3WkvuWqEI9F2eg==" }, "node_modules/@types/wif": { "version": "2.0.2", @@ -9586,11 +9585,12 @@ "integrity": "sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==" }, "node_modules/class-validator": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.13.2.tgz", - "integrity": "sha512-yBUcQy07FPlGzUjoLuUfIOXzgynnQPPruyK1Ge2B74k9ROwnle1E+NxLWnUv5OLU8hA/qL5leAE9XnXq3byaBw==", + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.14.0.tgz", + "integrity": "sha512-ct3ltplN8I9fOwUd8GrP8UQixwff129BkEtuWDKL5W45cQuLd19xqmTLu5ge78YDm/fdje6FMt0hGOhl0lii3A==", "dependencies": { - "libphonenumber-js": "^1.9.43", + "@types/validator": "^13.7.10", + "libphonenumber-js": "^1.10.14", "validator": "^13.7.0" } }, @@ -16494,8 +16494,9 @@ } }, "node_modules/libphonenumber-js": { - "version": "1.9.49", - "license": "MIT" + "version": "1.10.18", + "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.10.18.tgz", + "integrity": "sha512-NS4ZEgNhwbcPz1gfSXCGFnQm0xEiyTSPRthIuWytDzOiEG9xnZ2FbLyfJC4tI2BMAAXpoWbNxHYH75pa3Dq9og==" }, "node_modules/light-my-request": { "version": "5.6.1", @@ -27500,7 +27501,7 @@ "cache-manager": "4.1.0", "cbor": "8.1.0", "class-transformer": "0.5.1", - "class-validator": "0.13.2", + "class-validator": "0.14.0", "cross-fetch": "3.1.5", "graphology": "0.25.1", "graphology-components": "1.5.4", @@ -31436,8 +31437,7 @@ "@types/validator": { "version": "13.7.11", "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.7.11.tgz", - "integrity": "sha512-WqTos+CnAKN64YwyBMhgUYhb5VsTNKwUY6AuzG5qu9/pFZJar/RJFMZBXwX7VS+uzYi+lIAr3WkvuWqEI9F2eg==", - "dev": true + "integrity": "sha512-WqTos+CnAKN64YwyBMhgUYhb5VsTNKwUY6AuzG5qu9/pFZJar/RJFMZBXwX7VS+uzYi+lIAr3WkvuWqEI9F2eg==" }, "@types/wif": { "version": "2.0.2", @@ -33119,11 +33119,12 @@ "integrity": "sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==" }, "class-validator": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.13.2.tgz", - "integrity": "sha512-yBUcQy07FPlGzUjoLuUfIOXzgynnQPPruyK1Ge2B74k9ROwnle1E+NxLWnUv5OLU8hA/qL5leAE9XnXq3byaBw==", + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.14.0.tgz", + "integrity": "sha512-ct3ltplN8I9fOwUd8GrP8UQixwff129BkEtuWDKL5W45cQuLd19xqmTLu5ge78YDm/fdje6FMt0hGOhl0lii3A==", "requires": { - "libphonenumber-js": "^1.9.43", + "@types/validator": "^13.7.10", + "libphonenumber-js": "^1.10.14", "validator": "^13.7.0" } }, @@ -35612,7 +35613,7 @@ "cache-manager": "4.1.0", "cbor": "8.1.0", "class-transformer": "0.5.1", - "class-validator": "0.13.2", + "class-validator": "0.14.0", "cross-fetch": "3.1.5", "graphology": "0.25.1", "graphology-components": "1.5.4", @@ -39548,8 +39549,7 @@ "@types/validator": { "version": "13.7.11", "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.7.11.tgz", - "integrity": "sha512-WqTos+CnAKN64YwyBMhgUYhb5VsTNKwUY6AuzG5qu9/pFZJar/RJFMZBXwX7VS+uzYi+lIAr3WkvuWqEI9F2eg==", - "dev": true + "integrity": "sha512-WqTos+CnAKN64YwyBMhgUYhb5VsTNKwUY6AuzG5qu9/pFZJar/RJFMZBXwX7VS+uzYi+lIAr3WkvuWqEI9F2eg==" }, "@types/wif": { "version": "2.0.2", @@ -41231,11 +41231,12 @@ "integrity": "sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==" }, "class-validator": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.13.2.tgz", - "integrity": "sha512-yBUcQy07FPlGzUjoLuUfIOXzgynnQPPruyK1Ge2B74k9ROwnle1E+NxLWnUv5OLU8hA/qL5leAE9XnXq3byaBw==", + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.14.0.tgz", + "integrity": "sha512-ct3ltplN8I9fOwUd8GrP8UQixwff129BkEtuWDKL5W45cQuLd19xqmTLu5ge78YDm/fdje6FMt0hGOhl0lii3A==", "requires": { - "libphonenumber-js": "^1.9.43", + "@types/validator": "^13.7.10", + "libphonenumber-js": "^1.10.14", "validator": "^13.7.0" } }, @@ -45954,7 +45955,9 @@ } }, "libphonenumber-js": { - "version": "1.9.49" + "version": "1.10.18", + "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.10.18.tgz", + "integrity": "sha512-NS4ZEgNhwbcPz1gfSXCGFnQm0xEiyTSPRthIuWytDzOiEG9xnZ2FbLyfJC4tI2BMAAXpoWbNxHYH75pa3Dq9og==" }, "light-my-request": { "version": "5.6.1", @@ -55947,7 +55950,9 @@ } }, "libphonenumber-js": { - "version": "1.9.49" + "version": "1.10.18", + "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.10.18.tgz", + "integrity": "sha512-NS4ZEgNhwbcPz1gfSXCGFnQm0xEiyTSPRthIuWytDzOiEG9xnZ2FbLyfJC4tI2BMAAXpoWbNxHYH75pa3Dq9og==" }, "light-my-request": { "version": "5.6.1",