From 9a5a99248c9fd88e958bbc7ca89caf45dc78ac14 Mon Sep 17 00:00:00 2001 From: An Date: Wed, 30 Jun 2021 23:52:04 -0700 Subject: [PATCH 1/6] updates URL parse to works with relative path --- packages/sdk-rtl/src/paging.spec.ts | 13 +++++++++++++ packages/sdk-rtl/src/paging.ts | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/packages/sdk-rtl/src/paging.spec.ts b/packages/sdk-rtl/src/paging.spec.ts index 36e054bec..3539c0f78 100644 --- a/packages/sdk-rtl/src/paging.spec.ts +++ b/packages/sdk-rtl/src/paging.spec.ts @@ -197,6 +197,19 @@ describe('paging', () => { expect(actual.options?.timeout).toEqual(99) }) + it('works on relative url', async () => { + const actual = await pager(sdk, () => + mockRawResponseSuccess( + transport, + mockedRows, + mockRawResponse('/api/4.0/alerts/search?fields=id&limit=3&offset=0') + ) + ) + expect(actual).toBeDefined() + expect(actual.limit).toEqual(3) + expect(actual.offset).toEqual(0) + }) + it('supports paging', async () => { const paged = await pager(sdk, () => mockRawResponseSuccess(transport, mockedRows, mockRawResponse()) diff --git a/packages/sdk-rtl/src/paging.ts b/packages/sdk-rtl/src/paging.ts index 7247251c6..8de3aa89b 100644 --- a/packages/sdk-rtl/src/paging.ts +++ b/packages/sdk-rtl/src/paging.ts @@ -363,7 +363,7 @@ export class Paging } parse(raw: IRawResponse): IPager { - const req = new URL(raw.url) + const req = new URL(raw.url, 'https://localhost') const params = req.searchParams this.limit = Paging.paramDefault(params.get('limit'), -1) this.offset = Paging.paramDefault( From 43793077b0605ce6a201089c919bc66455acec00 Mon Sep 17 00:00:00 2001 From: An Date: Wed, 30 Jun 2021 23:52:24 -0700 Subject: [PATCH 2/6] update total count header to be lower case --- packages/sdk-rtl/src/paging.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/sdk-rtl/src/paging.ts b/packages/sdk-rtl/src/paging.ts index 8de3aa89b..26970fd36 100644 --- a/packages/sdk-rtl/src/paging.ts +++ b/packages/sdk-rtl/src/paging.ts @@ -34,7 +34,7 @@ import { IAPIMethods } from './apiMethods' import { BaseTransport } from './baseTransport' export const LinkHeader = 'link' -export const TotalCountHeader = 'X-Total-Count' +export const TotalCountHeader = 'x-total-count' /** * Types of paging link relative URLs From 0798b5cfbeaee8ec03b53e035587c5b30787002a Mon Sep 17 00:00:00 2001 From: An Date: Thu, 1 Jul 2021 09:06:47 -0700 Subject: [PATCH 3/6] empty commit to retest From fa7641b48553626ef0ed4c815fcd984cc9143aa8 Mon Sep 17 00:00:00 2001 From: John Kaster Date: Thu, 1 Jul 2021 19:21:49 +0000 Subject: [PATCH 4/6] fix: detect any casing of header --- packages/sdk-rtl/src/paging.ts | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/packages/sdk-rtl/src/paging.ts b/packages/sdk-rtl/src/paging.ts index 26970fd36..2ea4fb7dc 100644 --- a/packages/sdk-rtl/src/paging.ts +++ b/packages/sdk-rtl/src/paging.ts @@ -33,8 +33,8 @@ import { import { IAPIMethods } from './apiMethods' import { BaseTransport } from './baseTransport' -export const LinkHeader = 'link' -export const TotalCountHeader = 'x-total-count' +export const LinkHeader = 'Link' +export const TotalCountHeader = 'X-Total-Count' /** * Types of paging link relative URLs @@ -257,7 +257,7 @@ export class Paging this.transport.observer = saved } if (Object.keys(raw).length === 0 || Object.keys(raw.headers).length === 0) - throw new Error('No paging headers were found') + return Promise.reject(new Error('No paging headers were found')) this.parse(raw) return this } @@ -362,6 +362,14 @@ export class Paging return result } + static findHeader(raw: IRawResponse, name: string) { + return ( + raw.headers[name] || + raw.headers[name.toLowerCase()] || + raw.headers[name.toUpperCase()] + ) + } + parse(raw: IRawResponse): IPager { const req = new URL(raw.url, 'https://localhost') const params = req.searchParams @@ -370,13 +378,13 @@ export class Paging params.get('offset'), this.limit > 0 ? 0 : -1 ) - const linkHeader = raw.headers.link || raw.headers.Link || raw.headers.LINK + const linkHeader = Paging.findHeader(raw, LinkHeader) if (linkHeader) { this.links = linkHeaderParser(linkHeader) } else { this.links = {} } - const totalHeader = raw.headers[TotalCountHeader] + const totalHeader = Paging.findHeader(raw, TotalCountHeader) if (totalHeader) { this.total = parseInt(totalHeader.trim(), 10) } else { From 7b791b60f3fb5d490a0efd41428eccdf16415ff0 Mon Sep 17 00:00:00 2001 From: John Kaster Date: Thu, 1 Jul 2021 19:27:14 +0000 Subject: [PATCH 5/6] added a comment for `new URL()`` base path --- packages/sdk-rtl/src/paging.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/sdk-rtl/src/paging.ts b/packages/sdk-rtl/src/paging.ts index 2ea4fb7dc..afa91c7bf 100644 --- a/packages/sdk-rtl/src/paging.ts +++ b/packages/sdk-rtl/src/paging.ts @@ -371,6 +371,7 @@ export class Paging } parse(raw: IRawResponse): IPager { + // Default the base so relative paths are initialized correctly const req = new URL(raw.url, 'https://localhost') const params = req.searchParams this.limit = Paging.paramDefault(params.get('limit'), -1) From 4286ec722e813b46961098c104efa4aeaaf6754e Mon Sep 17 00:00:00 2001 From: John Kaster Date: Thu, 1 Jul 2021 19:32:52 +0000 Subject: [PATCH 6/6] Simplify `offset` and `limit` value extraction --- packages/sdk-rtl/src/paging.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/sdk-rtl/src/paging.ts b/packages/sdk-rtl/src/paging.ts index afa91c7bf..b0bbdcad9 100644 --- a/packages/sdk-rtl/src/paging.ts +++ b/packages/sdk-rtl/src/paging.ts @@ -371,9 +371,7 @@ export class Paging } parse(raw: IRawResponse): IPager { - // Default the base so relative paths are initialized correctly - const req = new URL(raw.url, 'https://localhost') - const params = req.searchParams + const params = new URLSearchParams(raw.url) this.limit = Paging.paramDefault(params.get('limit'), -1) this.offset = Paging.paramDefault( params.get('offset'),