diff --git a/codegen/layouts/partials/route-class-methods.hbs b/codegen/layouts/partials/route-class-methods.hbs index 135b92bc..fe6eea86 100644 --- a/codegen/layouts/partials/route-class-methods.hbs +++ b/codegen/layouts/partials/route-class-methods.hbs @@ -100,7 +100,7 @@ static fromPersonalAccessToken( createPaginator( request: SeamHttpRequest, ): SeamPaginator { - return new SeamPaginator(this, request) + return new SeamPaginator(request) } async updateClientSessionToken( diff --git a/src/lib/routes/access-codes/access-codes.ts b/src/lib/routes/access-codes/access-codes.ts index f619c116..8b147d3a 100644 --- a/src/lib/routes/access-codes/access-codes.ts +++ b/src/lib/routes/access-codes/access-codes.ts @@ -140,7 +140,7 @@ export class SeamHttpAccessCodes { createPaginator( request: SeamHttpRequest, ): SeamPaginator { - return new SeamPaginator(this, request) + return new SeamPaginator(request) } async updateClientSessionToken( diff --git a/src/lib/routes/access-codes/simulate/simulate.ts b/src/lib/routes/access-codes/simulate/simulate.ts index 57e4dc34..ccd806df 100644 --- a/src/lib/routes/access-codes/simulate/simulate.ts +++ b/src/lib/routes/access-codes/simulate/simulate.ts @@ -136,7 +136,7 @@ export class SeamHttpAccessCodesSimulate { createPaginator( request: SeamHttpRequest, ): SeamPaginator { - return new SeamPaginator(this, request) + return new SeamPaginator(request) } async updateClientSessionToken( diff --git a/src/lib/routes/access-codes/unmanaged/unmanaged.ts b/src/lib/routes/access-codes/unmanaged/unmanaged.ts index 5c5d9070..e2d26fe7 100644 --- a/src/lib/routes/access-codes/unmanaged/unmanaged.ts +++ b/src/lib/routes/access-codes/unmanaged/unmanaged.ts @@ -137,7 +137,7 @@ export class SeamHttpAccessCodesUnmanaged { createPaginator( request: SeamHttpRequest, ): SeamPaginator { - return new SeamPaginator(this, request) + return new SeamPaginator(request) } async updateClientSessionToken( diff --git a/src/lib/routes/access-grants/access-grants.ts b/src/lib/routes/access-grants/access-grants.ts index 9e65b024..b0024a9c 100644 --- a/src/lib/routes/access-grants/access-grants.ts +++ b/src/lib/routes/access-grants/access-grants.ts @@ -140,7 +140,7 @@ export class SeamHttpAccessGrants { createPaginator( request: SeamHttpRequest, ): SeamPaginator { - return new SeamPaginator(this, request) + return new SeamPaginator(request) } async updateClientSessionToken( diff --git a/src/lib/routes/access-grants/unmanaged/unmanaged.ts b/src/lib/routes/access-grants/unmanaged/unmanaged.ts index b3353dfd..a1a90b41 100644 --- a/src/lib/routes/access-grants/unmanaged/unmanaged.ts +++ b/src/lib/routes/access-grants/unmanaged/unmanaged.ts @@ -136,7 +136,7 @@ export class SeamHttpAccessGrantsUnmanaged { createPaginator( request: SeamHttpRequest, ): SeamPaginator { - return new SeamPaginator(this, request) + return new SeamPaginator(request) } async updateClientSessionToken( diff --git a/src/lib/routes/access-methods/access-methods.ts b/src/lib/routes/access-methods/access-methods.ts index cdc051d4..2a722261 100644 --- a/src/lib/routes/access-methods/access-methods.ts +++ b/src/lib/routes/access-methods/access-methods.ts @@ -142,7 +142,7 @@ export class SeamHttpAccessMethods { createPaginator( request: SeamHttpRequest, ): SeamPaginator { - return new SeamPaginator(this, request) + return new SeamPaginator(request) } async updateClientSessionToken( diff --git a/src/lib/routes/access-methods/unmanaged/unmanaged.ts b/src/lib/routes/access-methods/unmanaged/unmanaged.ts index b3b521a8..ae26652e 100644 --- a/src/lib/routes/access-methods/unmanaged/unmanaged.ts +++ b/src/lib/routes/access-methods/unmanaged/unmanaged.ts @@ -136,7 +136,7 @@ export class SeamHttpAccessMethodsUnmanaged { createPaginator( request: SeamHttpRequest, ): SeamPaginator { - return new SeamPaginator(this, request) + return new SeamPaginator(request) } async updateClientSessionToken( diff --git a/src/lib/routes/acs/access-groups/access-groups.ts b/src/lib/routes/acs/access-groups/access-groups.ts index e05b5349..f4e0d3ba 100644 --- a/src/lib/routes/acs/access-groups/access-groups.ts +++ b/src/lib/routes/acs/access-groups/access-groups.ts @@ -138,7 +138,7 @@ export class SeamHttpAcsAccessGroups { createPaginator( request: SeamHttpRequest, ): SeamPaginator { - return new SeamPaginator(this, request) + return new SeamPaginator(request) } async updateClientSessionToken( diff --git a/src/lib/routes/acs/acs.ts b/src/lib/routes/acs/acs.ts index b431297f..b3abedfb 100644 --- a/src/lib/routes/acs/acs.ts +++ b/src/lib/routes/acs/acs.ts @@ -142,7 +142,7 @@ export class SeamHttpAcs { createPaginator( request: SeamHttpRequest, ): SeamPaginator { - return new SeamPaginator(this, request) + return new SeamPaginator(request) } async updateClientSessionToken( diff --git a/src/lib/routes/acs/credentials/credentials.ts b/src/lib/routes/acs/credentials/credentials.ts index 46eca4e8..c3675813 100644 --- a/src/lib/routes/acs/credentials/credentials.ts +++ b/src/lib/routes/acs/credentials/credentials.ts @@ -137,7 +137,7 @@ export class SeamHttpAcsCredentials { createPaginator( request: SeamHttpRequest, ): SeamPaginator { - return new SeamPaginator(this, request) + return new SeamPaginator(request) } async updateClientSessionToken( diff --git a/src/lib/routes/acs/encoders/encoders.ts b/src/lib/routes/acs/encoders/encoders.ts index 97f33585..bc2b9d0f 100644 --- a/src/lib/routes/acs/encoders/encoders.ts +++ b/src/lib/routes/acs/encoders/encoders.ts @@ -140,7 +140,7 @@ export class SeamHttpAcsEncoders { createPaginator( request: SeamHttpRequest, ): SeamPaginator { - return new SeamPaginator(this, request) + return new SeamPaginator(request) } async updateClientSessionToken( diff --git a/src/lib/routes/acs/encoders/simulate/simulate.ts b/src/lib/routes/acs/encoders/simulate/simulate.ts index 2671dd2a..cf2b47b5 100644 --- a/src/lib/routes/acs/encoders/simulate/simulate.ts +++ b/src/lib/routes/acs/encoders/simulate/simulate.ts @@ -135,7 +135,7 @@ export class SeamHttpAcsEncodersSimulate { createPaginator( request: SeamHttpRequest, ): SeamPaginator { - return new SeamPaginator(this, request) + return new SeamPaginator(request) } async updateClientSessionToken( diff --git a/src/lib/routes/acs/entrances/entrances.ts b/src/lib/routes/acs/entrances/entrances.ts index 5e288720..db462aa1 100644 --- a/src/lib/routes/acs/entrances/entrances.ts +++ b/src/lib/routes/acs/entrances/entrances.ts @@ -139,7 +139,7 @@ export class SeamHttpAcsEntrances { createPaginator( request: SeamHttpRequest, ): SeamPaginator { - return new SeamPaginator(this, request) + return new SeamPaginator(request) } async updateClientSessionToken( diff --git a/src/lib/routes/acs/systems/systems.ts b/src/lib/routes/acs/systems/systems.ts index 8201bda4..8106a8f7 100644 --- a/src/lib/routes/acs/systems/systems.ts +++ b/src/lib/routes/acs/systems/systems.ts @@ -136,7 +136,7 @@ export class SeamHttpAcsSystems { createPaginator( request: SeamHttpRequest, ): SeamPaginator { - return new SeamPaginator(this, request) + return new SeamPaginator(request) } async updateClientSessionToken( diff --git a/src/lib/routes/acs/users/users.ts b/src/lib/routes/acs/users/users.ts index 368b37b3..6c1d2eac 100644 --- a/src/lib/routes/acs/users/users.ts +++ b/src/lib/routes/acs/users/users.ts @@ -138,7 +138,7 @@ export class SeamHttpAcsUsers { createPaginator( request: SeamHttpRequest, ): SeamPaginator { - return new SeamPaginator(this, request) + return new SeamPaginator(request) } async updateClientSessionToken( diff --git a/src/lib/routes/action-attempts/action-attempts.ts b/src/lib/routes/action-attempts/action-attempts.ts index d7042d46..7be9b4f1 100644 --- a/src/lib/routes/action-attempts/action-attempts.ts +++ b/src/lib/routes/action-attempts/action-attempts.ts @@ -136,7 +136,7 @@ export class SeamHttpActionAttempts { createPaginator( request: SeamHttpRequest, ): SeamPaginator { - return new SeamPaginator(this, request) + return new SeamPaginator(request) } async updateClientSessionToken( diff --git a/src/lib/routes/client-sessions/client-sessions.ts b/src/lib/routes/client-sessions/client-sessions.ts index dc6ad406..d2b2c427 100644 --- a/src/lib/routes/client-sessions/client-sessions.ts +++ b/src/lib/routes/client-sessions/client-sessions.ts @@ -136,7 +136,7 @@ export class SeamHttpClientSessions { createPaginator( request: SeamHttpRequest, ): SeamPaginator { - return new SeamPaginator(this, request) + return new SeamPaginator(request) } async updateClientSessionToken( diff --git a/src/lib/routes/connect-webviews/connect-webviews.ts b/src/lib/routes/connect-webviews/connect-webviews.ts index c05d77a8..b4a448d2 100644 --- a/src/lib/routes/connect-webviews/connect-webviews.ts +++ b/src/lib/routes/connect-webviews/connect-webviews.ts @@ -136,7 +136,7 @@ export class SeamHttpConnectWebviews { createPaginator( request: SeamHttpRequest, ): SeamPaginator { - return new SeamPaginator(this, request) + return new SeamPaginator(request) } async updateClientSessionToken( diff --git a/src/lib/routes/connected-accounts/connected-accounts.ts b/src/lib/routes/connected-accounts/connected-accounts.ts index 3149660f..421c1bda 100644 --- a/src/lib/routes/connected-accounts/connected-accounts.ts +++ b/src/lib/routes/connected-accounts/connected-accounts.ts @@ -139,7 +139,7 @@ export class SeamHttpConnectedAccounts { createPaginator( request: SeamHttpRequest, ): SeamPaginator { - return new SeamPaginator(this, request) + return new SeamPaginator(request) } async updateClientSessionToken( diff --git a/src/lib/routes/connected-accounts/simulate/simulate.ts b/src/lib/routes/connected-accounts/simulate/simulate.ts index 6aa5e929..01df3a22 100644 --- a/src/lib/routes/connected-accounts/simulate/simulate.ts +++ b/src/lib/routes/connected-accounts/simulate/simulate.ts @@ -138,7 +138,7 @@ export class SeamHttpConnectedAccountsSimulate { createPaginator( request: SeamHttpRequest, ): SeamPaginator { - return new SeamPaginator(this, request) + return new SeamPaginator(request) } async updateClientSessionToken( diff --git a/src/lib/routes/customers/customers.ts b/src/lib/routes/customers/customers.ts index d640b8e5..3e2a4283 100644 --- a/src/lib/routes/customers/customers.ts +++ b/src/lib/routes/customers/customers.ts @@ -136,7 +136,7 @@ export class SeamHttpCustomers { createPaginator( request: SeamHttpRequest, ): SeamPaginator { - return new SeamPaginator(this, request) + return new SeamPaginator(request) } async updateClientSessionToken( diff --git a/src/lib/routes/devices/devices.ts b/src/lib/routes/devices/devices.ts index 8fc3b6d0..3a2ff9b7 100644 --- a/src/lib/routes/devices/devices.ts +++ b/src/lib/routes/devices/devices.ts @@ -141,7 +141,7 @@ export class SeamHttpDevices { createPaginator( request: SeamHttpRequest, ): SeamPaginator { - return new SeamPaginator(this, request) + return new SeamPaginator(request) } async updateClientSessionToken( diff --git a/src/lib/routes/devices/simulate/simulate.ts b/src/lib/routes/devices/simulate/simulate.ts index a803418c..2607aa10 100644 --- a/src/lib/routes/devices/simulate/simulate.ts +++ b/src/lib/routes/devices/simulate/simulate.ts @@ -135,7 +135,7 @@ export class SeamHttpDevicesSimulate { createPaginator( request: SeamHttpRequest, ): SeamPaginator { - return new SeamPaginator(this, request) + return new SeamPaginator(request) } async updateClientSessionToken( diff --git a/src/lib/routes/devices/unmanaged/unmanaged.ts b/src/lib/routes/devices/unmanaged/unmanaged.ts index 6e4dc33d..dcba475e 100644 --- a/src/lib/routes/devices/unmanaged/unmanaged.ts +++ b/src/lib/routes/devices/unmanaged/unmanaged.ts @@ -137,7 +137,7 @@ export class SeamHttpDevicesUnmanaged { createPaginator( request: SeamHttpRequest, ): SeamPaginator { - return new SeamPaginator(this, request) + return new SeamPaginator(request) } async updateClientSessionToken( diff --git a/src/lib/routes/events/events.ts b/src/lib/routes/events/events.ts index 1823cd96..aef63ccc 100644 --- a/src/lib/routes/events/events.ts +++ b/src/lib/routes/events/events.ts @@ -137,7 +137,7 @@ export class SeamHttpEvents { createPaginator( request: SeamHttpRequest, ): SeamPaginator { - return new SeamPaginator(this, request) + return new SeamPaginator(request) } async updateClientSessionToken( diff --git a/src/lib/routes/instant-keys/instant-keys.ts b/src/lib/routes/instant-keys/instant-keys.ts index e1d3d779..e474417e 100644 --- a/src/lib/routes/instant-keys/instant-keys.ts +++ b/src/lib/routes/instant-keys/instant-keys.ts @@ -137,7 +137,7 @@ export class SeamHttpInstantKeys { createPaginator( request: SeamHttpRequest, ): SeamPaginator { - return new SeamPaginator(this, request) + return new SeamPaginator(request) } async updateClientSessionToken( diff --git a/src/lib/routes/locks/locks.ts b/src/lib/routes/locks/locks.ts index ceb03dbb..c2552c06 100644 --- a/src/lib/routes/locks/locks.ts +++ b/src/lib/routes/locks/locks.ts @@ -141,7 +141,7 @@ export class SeamHttpLocks { createPaginator( request: SeamHttpRequest, ): SeamPaginator { - return new SeamPaginator(this, request) + return new SeamPaginator(request) } async updateClientSessionToken( diff --git a/src/lib/routes/locks/simulate/simulate.ts b/src/lib/routes/locks/simulate/simulate.ts index b4042216..ed4d8143 100644 --- a/src/lib/routes/locks/simulate/simulate.ts +++ b/src/lib/routes/locks/simulate/simulate.ts @@ -137,7 +137,7 @@ export class SeamHttpLocksSimulate { createPaginator( request: SeamHttpRequest, ): SeamPaginator { - return new SeamPaginator(this, request) + return new SeamPaginator(request) } async updateClientSessionToken( diff --git a/src/lib/routes/noise-sensors/noise-sensors.ts b/src/lib/routes/noise-sensors/noise-sensors.ts index f73db2da..a7420bd5 100644 --- a/src/lib/routes/noise-sensors/noise-sensors.ts +++ b/src/lib/routes/noise-sensors/noise-sensors.ts @@ -139,7 +139,7 @@ export class SeamHttpNoiseSensors { createPaginator( request: SeamHttpRequest, ): SeamPaginator { - return new SeamPaginator(this, request) + return new SeamPaginator(request) } async updateClientSessionToken( diff --git a/src/lib/routes/noise-sensors/noise-thresholds/noise-thresholds.ts b/src/lib/routes/noise-sensors/noise-thresholds/noise-thresholds.ts index b9d7358e..1841226d 100644 --- a/src/lib/routes/noise-sensors/noise-thresholds/noise-thresholds.ts +++ b/src/lib/routes/noise-sensors/noise-thresholds/noise-thresholds.ts @@ -139,7 +139,7 @@ export class SeamHttpNoiseSensorsNoiseThresholds { createPaginator( request: SeamHttpRequest, ): SeamPaginator { - return new SeamPaginator(this, request) + return new SeamPaginator(request) } async updateClientSessionToken( diff --git a/src/lib/routes/noise-sensors/simulate/simulate.ts b/src/lib/routes/noise-sensors/simulate/simulate.ts index eb44fb30..dc39afa1 100644 --- a/src/lib/routes/noise-sensors/simulate/simulate.ts +++ b/src/lib/routes/noise-sensors/simulate/simulate.ts @@ -135,7 +135,7 @@ export class SeamHttpNoiseSensorsSimulate { createPaginator( request: SeamHttpRequest, ): SeamPaginator { - return new SeamPaginator(this, request) + return new SeamPaginator(request) } async updateClientSessionToken( diff --git a/src/lib/routes/phones/phones.ts b/src/lib/routes/phones/phones.ts index 956149ea..58e5cba0 100644 --- a/src/lib/routes/phones/phones.ts +++ b/src/lib/routes/phones/phones.ts @@ -138,7 +138,7 @@ export class SeamHttpPhones { createPaginator( request: SeamHttpRequest, ): SeamPaginator { - return new SeamPaginator(this, request) + return new SeamPaginator(request) } async updateClientSessionToken( diff --git a/src/lib/routes/phones/simulate/simulate.ts b/src/lib/routes/phones/simulate/simulate.ts index 0f70c79b..59d1a82d 100644 --- a/src/lib/routes/phones/simulate/simulate.ts +++ b/src/lib/routes/phones/simulate/simulate.ts @@ -136,7 +136,7 @@ export class SeamHttpPhonesSimulate { createPaginator( request: SeamHttpRequest, ): SeamPaginator { - return new SeamPaginator(this, request) + return new SeamPaginator(request) } async updateClientSessionToken( diff --git a/src/lib/routes/seam-http-endpoints.ts b/src/lib/routes/seam-http-endpoints.ts index 960cf178..bfed90f4 100644 --- a/src/lib/routes/seam-http-endpoints.ts +++ b/src/lib/routes/seam-http-endpoints.ts @@ -864,7 +864,7 @@ export class SeamHttpEndpoints { createPaginator( request: SeamHttpRequest, ): SeamPaginator { - return new SeamPaginator(this, request) + return new SeamPaginator(request) } async updateClientSessionToken( diff --git a/src/lib/routes/seam-http.ts b/src/lib/routes/seam-http.ts index 8aeda6cf..6ae417fc 100644 --- a/src/lib/routes/seam-http.ts +++ b/src/lib/routes/seam-http.ts @@ -155,7 +155,7 @@ export class SeamHttp { createPaginator( request: SeamHttpRequest, ): SeamPaginator { - return new SeamPaginator(this, request) + return new SeamPaginator(request) } async updateClientSessionToken( diff --git a/src/lib/routes/spaces/spaces.ts b/src/lib/routes/spaces/spaces.ts index 59d91f02..8ac81477 100644 --- a/src/lib/routes/spaces/spaces.ts +++ b/src/lib/routes/spaces/spaces.ts @@ -138,7 +138,7 @@ export class SeamHttpSpaces { createPaginator( request: SeamHttpRequest, ): SeamPaginator { - return new SeamPaginator(this, request) + return new SeamPaginator(request) } async updateClientSessionToken( diff --git a/src/lib/routes/thermostats/daily-programs/daily-programs.ts b/src/lib/routes/thermostats/daily-programs/daily-programs.ts index 357bfcd1..a9b5a8f3 100644 --- a/src/lib/routes/thermostats/daily-programs/daily-programs.ts +++ b/src/lib/routes/thermostats/daily-programs/daily-programs.ts @@ -141,7 +141,7 @@ export class SeamHttpThermostatsDailyPrograms { createPaginator( request: SeamHttpRequest, ): SeamPaginator { - return new SeamPaginator(this, request) + return new SeamPaginator(request) } async updateClientSessionToken( diff --git a/src/lib/routes/thermostats/schedules/schedules.ts b/src/lib/routes/thermostats/schedules/schedules.ts index a31c6c7c..82b2ba29 100644 --- a/src/lib/routes/thermostats/schedules/schedules.ts +++ b/src/lib/routes/thermostats/schedules/schedules.ts @@ -136,7 +136,7 @@ export class SeamHttpThermostatsSchedules { createPaginator( request: SeamHttpRequest, ): SeamPaginator { - return new SeamPaginator(this, request) + return new SeamPaginator(request) } async updateClientSessionToken( diff --git a/src/lib/routes/thermostats/simulate/simulate.ts b/src/lib/routes/thermostats/simulate/simulate.ts index 487a9819..228a4704 100644 --- a/src/lib/routes/thermostats/simulate/simulate.ts +++ b/src/lib/routes/thermostats/simulate/simulate.ts @@ -135,7 +135,7 @@ export class SeamHttpThermostatsSimulate { createPaginator( request: SeamHttpRequest, ): SeamPaginator { - return new SeamPaginator(this, request) + return new SeamPaginator(request) } async updateClientSessionToken( diff --git a/src/lib/routes/thermostats/thermostats.ts b/src/lib/routes/thermostats/thermostats.ts index c68f67d0..7b306073 100644 --- a/src/lib/routes/thermostats/thermostats.ts +++ b/src/lib/routes/thermostats/thermostats.ts @@ -142,7 +142,7 @@ export class SeamHttpThermostats { createPaginator( request: SeamHttpRequest, ): SeamPaginator { - return new SeamPaginator(this, request) + return new SeamPaginator(request) } async updateClientSessionToken( diff --git a/src/lib/routes/user-identities/unmanaged/unmanaged.ts b/src/lib/routes/user-identities/unmanaged/unmanaged.ts index 133b5ac7..a7708e3b 100644 --- a/src/lib/routes/user-identities/unmanaged/unmanaged.ts +++ b/src/lib/routes/user-identities/unmanaged/unmanaged.ts @@ -139,7 +139,7 @@ export class SeamHttpUserIdentitiesUnmanaged { createPaginator( request: SeamHttpRequest, ): SeamPaginator { - return new SeamPaginator(this, request) + return new SeamPaginator(request) } async updateClientSessionToken( diff --git a/src/lib/routes/user-identities/user-identities.ts b/src/lib/routes/user-identities/user-identities.ts index ec6e8cba..178f9949 100644 --- a/src/lib/routes/user-identities/user-identities.ts +++ b/src/lib/routes/user-identities/user-identities.ts @@ -144,7 +144,7 @@ export class SeamHttpUserIdentities { createPaginator( request: SeamHttpRequest, ): SeamPaginator { - return new SeamPaginator(this, request) + return new SeamPaginator(request) } async updateClientSessionToken( diff --git a/src/lib/routes/webhooks/webhooks.ts b/src/lib/routes/webhooks/webhooks.ts index 8201638e..6e2e1a3f 100644 --- a/src/lib/routes/webhooks/webhooks.ts +++ b/src/lib/routes/webhooks/webhooks.ts @@ -136,7 +136,7 @@ export class SeamHttpWebhooks { createPaginator( request: SeamHttpRequest, ): SeamPaginator { - return new SeamPaginator(this, request) + return new SeamPaginator(request) } async updateClientSessionToken( diff --git a/src/lib/routes/workspaces/workspaces.ts b/src/lib/routes/workspaces/workspaces.ts index 0fa4b559..305470c0 100644 --- a/src/lib/routes/workspaces/workspaces.ts +++ b/src/lib/routes/workspaces/workspaces.ts @@ -138,7 +138,7 @@ export class SeamHttpWorkspaces { createPaginator( request: SeamHttpRequest, ): SeamPaginator { - return new SeamPaginator(this, request) + return new SeamPaginator(request) } async updateClientSessionToken( diff --git a/src/lib/seam-http-request.ts b/src/lib/seam-http-request.ts index 7f10e0cd..7136794f 100644 --- a/src/lib/seam-http-request.ts +++ b/src/lib/seam-http-request.ts @@ -125,6 +125,29 @@ export class SeamHttpRequest< return this.#config.body } + /** + * Returns a copy of this request with the page cursor set. + */ + withPageCursor( + pageCursor?: string, + ): SeamHttpRequest { + const usesParams = ['GET', 'DELETE'].includes(this.method.toUpperCase()) + + const requestData = { + ...(usesParams + ? (this.#config.params ?? {}) + : ((this.#config.body as Record | null) ?? {})), + page_cursor: pageCursor, + } + + return new SeamHttpRequest(this.#parent, { + ...this.#config, + parameters: requestData, + params: usesParams ? requestData : undefined, + body: usesParams ? undefined : requestData, + }) + } + /** * Sends the request and returns the response data. * If the response contains an action attempt, diff --git a/src/lib/seam-paginator.ts b/src/lib/seam-paginator.ts index cf2526ce..e3f3d07e 100644 --- a/src/lib/seam-paginator.ts +++ b/src/lib/seam-paginator.ts @@ -1,12 +1,5 @@ -import type { Client } from './client.js' -import type { SeamHttpRequestOptions } from './options.js' import { SeamHttpInvalidResponseError } from './seam-http-error.js' -import { readResponseData, SeamHttpRequest } from './seam-http-request.js' - -interface SeamPaginatorParent { - readonly client: Client - readonly defaults: Required -} +import { readResponseData, type SeamHttpRequest } from './seam-http-request.js' declare const $brand: unique symbol @@ -35,18 +28,13 @@ export class SeamPaginator< const TResponseKey extends keyof TResponse, > implements AsyncIterable> { readonly #request: SeamHttpRequest - readonly #parent: SeamPaginatorParent - constructor( - parent: SeamPaginatorParent, - request: SeamHttpRequest, - ) { + constructor(request: SeamHttpRequest) { if (!request.hasPagination) { throw new Error( `The ${request.pathname} endpoint does not support pagination`, ) } - this.#parent = parent this.#request = request } @@ -82,19 +70,7 @@ export class SeamPaginator< throw new Error('Cannot paginate a response without a responseKey') } - const request = new SeamHttpRequest(this.#parent, { - pathname: this.#request.pathname, - method: this.#request.method, - responseKey, - params: - this.#request.params != null - ? { ...this.#request.params, page_cursor: nextPageCursor } - : undefined, - body: - this.#request.body != null - ? { ...this.#request.body, page_cursor: nextPageCursor } - : undefined, - }) + const request = this.#request.withPageCursor(nextPageCursor ?? undefined) const response = await request.fetchResponse() const data = readResponseData(response, responseKey, request.pathname) diff --git a/test/seam/connect/seam-paginator.test.ts b/test/seam/connect/seam-paginator.test.ts index 60ba69a6..2853bb4e 100644 --- a/test/seam/connect/seam-paginator.test.ts +++ b/test/seam/connect/seam-paginator.test.ts @@ -158,6 +158,55 @@ test('SeamPaginator: stops iterating when there is a next page without a cursor' t.is(seenPages[0]?.[0]?.device_id, 'device-1') }) +test('SeamPaginator: validates request parameters before fetching a page', async (t) => { + const { seed, endpoint } = await getTestServer(t) + const seam = SeamHttp.fromApiKey(seed.seam_apikey1_token, { endpoint }) + + let requestCount = 0 + seam.client.interceptors.request.use((config) => { + if (config.url === '/access_codes/list') requestCount++ + return config + }) + + const pages = seam.createPaginator( + // @ts-expect-error Verify an invalid request is rejected when paginated. + seam.accessCodes.list({}), + ) + + await t.throwsAsync(async () => await pages.firstPage(), { + instanceOf: TypeError, + message: 'At least one parameter is required for /access_codes/list', + }) + + t.is(requestCount, 0) +}) + +test('SeamPaginator: fetches pages for a request with valid parameters', async (t) => { + const { seed, endpoint } = await getTestServer(t) + const seam = SeamHttp.fromApiKey(seed.seam_apikey1_token, { endpoint }) + + // UPSTREAM: The fake does not return a pagination object for this endpoint. + nock(endpoint) + .get('/access_codes/list') + .query(true) + .reply(200, { + access_codes: [{ access_code_id: 'access-code-1' }], + pagination: { + has_next_page: false, + next_page_cursor: null, + next_page_url: null, + }, + }) + + const pages = seam.createPaginator( + seam.accessCodes.list({ device_id: seed.august_device_1 }), + ) + const [accessCodes, pagination] = await pages.firstPage() + + t.is(accessCodes.length, 1) + t.false(pagination.hasNextPage) +}) + test('SeamPaginator: instance allows iteration over all pages', async (t) => { const { seed, endpoint } = await getTestServer(t) const seam = SeamHttp.fromApiKey(seed.seam_apikey1_token, { endpoint })