From 04994076d0916b6be9a5b108fc0bfe2781bb12e9 Mon Sep 17 00:00:00 2001 From: Arunim Shukla <54760103+arunimshukla@users.noreply.github.com> Date: Sun, 20 Sep 2026 09:15:58 +0530 Subject: [PATCH] fix(key-link): validate page size before requests --- .../key-link/get-signing-keys-list.ts | 8 +++-- .../key-link/get-validation-keys-list.ts | 8 +++-- test/e2e.test.ts | 31 +++++++++++++++++++ 3 files changed, 41 insertions(+), 6 deletions(-) diff --git a/src/commands/key-link/get-signing-keys-list.ts b/src/commands/key-link/get-signing-keys-list.ts index 2b5c548..db567b7 100644 --- a/src/commands/key-link/get-signing-keys-list.ts +++ b/src/commands/key-link/get-signing-keys-list.ts @@ -12,9 +12,11 @@ export default class GetSigningKeysList extends FireblocksBaseCommand { 'page-cursor': Flags.string({ description: 'Cursor to the next page', }), - 'page-size': Flags.string({ - description: 'Amount of results to return in the next page', - default: '10', + 'page-size': Flags.integer({ + description: 'Amount of results to return in the next page (1-50)', + default: 10, + min: 1, + max: 50, }), 'sort-by': Flags.string({ description: 'Field(s) to use for sorting', diff --git a/src/commands/key-link/get-validation-keys-list.ts b/src/commands/key-link/get-validation-keys-list.ts index 97a1d24..9099aec 100644 --- a/src/commands/key-link/get-validation-keys-list.ts +++ b/src/commands/key-link/get-validation-keys-list.ts @@ -12,9 +12,11 @@ export default class GetValidationKeysList extends FireblocksBaseCommand { 'page-cursor': Flags.string({ description: 'Cursor to the next page', }), - 'page-size': Flags.string({ - description: 'Amount of results to return in the next page', - default: '10', + 'page-size': Flags.integer({ + description: 'Amount of results to return in the next page (1-50)', + default: 10, + min: 1, + max: 50, }), 'sort-by': Flags.string({ description: 'Field(s) to use for sorting', diff --git a/test/e2e.test.ts b/test/e2e.test.ts index 791c24b..4a59910 100644 --- a/test/e2e.test.ts +++ b/test/e2e.test.ts @@ -170,6 +170,37 @@ describe('e2e: full command execution flow', () => { }) }) + describe('Key Link page-size validation', () => { + it('forwards the maximum supported page size', async () => { + mockFireblocksFetch.mockResolvedValueOnce(createMockApiResponse(200, {data: []})) + + const {default: GetValidationKeysList} = require( + '../src/commands/key-link/get-validation-keys-list.js' + ) + + try { + await GetValidationKeysList.run(['--page-size', '50', '--no-confirm']) + } catch (error: any) { + if (error?.oclif?.exit !== 0) throw error + } + + expect(mockFireblocksFetch).toHaveBeenCalledTimes(1) + const [, , , options] = mockFireblocksFetch.mock.calls[0] + expect(options?.queryParams?.pageSize).toBe('50') + }) + + it('rejects page sizes above the API limit before making a request', async () => { + const {default: GetValidationKeysList} = require( + '../src/commands/key-link/get-validation-keys-list.js' + ) + + await expect( + GetValidationKeysList.run(['--page-size', '51', '--no-confirm']), + ).rejects.toThrow(/less than or equal to 50/i) + expect(mockFireblocksFetch).not.toHaveBeenCalled() + }) + }) + describe('--output flag', () => { it('outputs JSON by default', async () => { const mockBody = {id: 'vault-1', name: 'My Vault', assets: []}