diff --git a/codegen/layouts/partials/route-class-methods.hbs b/codegen/layouts/partials/route-class-methods.hbs index 86ae6920..2b74b618 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: SeamPaginatedRequest, ): 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 2bf13f18..593bcb7b 100644 --- a/src/lib/routes/access-codes/access-codes.ts +++ b/src/lib/routes/access-codes/access-codes.ts @@ -143,7 +143,7 @@ export class SeamHttpAccessCodes { createPaginator( request: SeamPaginatedRequest, ): 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 fc2562a6..33e8906b 100644 --- a/src/lib/routes/access-codes/simulate/simulate.ts +++ b/src/lib/routes/access-codes/simulate/simulate.ts @@ -139,7 +139,7 @@ export class SeamHttpAccessCodesSimulate { createPaginator( request: SeamPaginatedRequest, ): 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 5d94b0be..16921a9a 100644 --- a/src/lib/routes/access-codes/unmanaged/unmanaged.ts +++ b/src/lib/routes/access-codes/unmanaged/unmanaged.ts @@ -140,7 +140,7 @@ export class SeamHttpAccessCodesUnmanaged { createPaginator( request: SeamPaginatedRequest, ): 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 d0c6fc3f..fd07387c 100644 --- a/src/lib/routes/access-grants/access-grants.ts +++ b/src/lib/routes/access-grants/access-grants.ts @@ -143,7 +143,7 @@ export class SeamHttpAccessGrants { createPaginator( request: SeamPaginatedRequest, ): 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 36ae3c06..6c8d5d31 100644 --- a/src/lib/routes/access-grants/unmanaged/unmanaged.ts +++ b/src/lib/routes/access-grants/unmanaged/unmanaged.ts @@ -139,7 +139,7 @@ export class SeamHttpAccessGrantsUnmanaged { createPaginator( request: SeamPaginatedRequest, ): 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 899dda25..f7f6f437 100644 --- a/src/lib/routes/access-methods/access-methods.ts +++ b/src/lib/routes/access-methods/access-methods.ts @@ -145,7 +145,7 @@ export class SeamHttpAccessMethods { createPaginator( request: SeamPaginatedRequest, ): 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 7c2712dc..eaa12493 100644 --- a/src/lib/routes/access-methods/unmanaged/unmanaged.ts +++ b/src/lib/routes/access-methods/unmanaged/unmanaged.ts @@ -139,7 +139,7 @@ export class SeamHttpAccessMethodsUnmanaged { createPaginator( request: SeamPaginatedRequest, ): 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 1fc9e2d2..49be6654 100644 --- a/src/lib/routes/acs/access-groups/access-groups.ts +++ b/src/lib/routes/acs/access-groups/access-groups.ts @@ -141,7 +141,7 @@ export class SeamHttpAcsAccessGroups { createPaginator( request: SeamPaginatedRequest, ): 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 8100fb68..aabd7451 100644 --- a/src/lib/routes/acs/acs.ts +++ b/src/lib/routes/acs/acs.ts @@ -142,7 +142,7 @@ export class SeamHttpAcs { createPaginator( request: SeamPaginatedRequest, ): 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 60bf5d85..59fe48c3 100644 --- a/src/lib/routes/acs/credentials/credentials.ts +++ b/src/lib/routes/acs/credentials/credentials.ts @@ -140,7 +140,7 @@ export class SeamHttpAcsCredentials { createPaginator( request: SeamPaginatedRequest, ): 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 7e6156c0..765fd0f7 100644 --- a/src/lib/routes/acs/encoders/encoders.ts +++ b/src/lib/routes/acs/encoders/encoders.ts @@ -143,7 +143,7 @@ export class SeamHttpAcsEncoders { createPaginator( request: SeamPaginatedRequest, ): 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 4e9bc9a0..36c93e7f 100644 --- a/src/lib/routes/acs/encoders/simulate/simulate.ts +++ b/src/lib/routes/acs/encoders/simulate/simulate.ts @@ -138,7 +138,7 @@ export class SeamHttpAcsEncodersSimulate { createPaginator( request: SeamPaginatedRequest, ): 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 2b338982..6ddce67f 100644 --- a/src/lib/routes/acs/entrances/entrances.ts +++ b/src/lib/routes/acs/entrances/entrances.ts @@ -142,7 +142,7 @@ export class SeamHttpAcsEntrances { createPaginator( request: SeamPaginatedRequest, ): 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 b7041055..5c91826f 100644 --- a/src/lib/routes/acs/systems/systems.ts +++ b/src/lib/routes/acs/systems/systems.ts @@ -139,7 +139,7 @@ export class SeamHttpAcsSystems { createPaginator( request: SeamPaginatedRequest, ): 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 9b6f9534..c67ded7d 100644 --- a/src/lib/routes/acs/users/users.ts +++ b/src/lib/routes/acs/users/users.ts @@ -141,7 +141,7 @@ export class SeamHttpAcsUsers { createPaginator( request: SeamPaginatedRequest, ): 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 e579ccc7..696bdb38 100644 --- a/src/lib/routes/action-attempts/action-attempts.ts +++ b/src/lib/routes/action-attempts/action-attempts.ts @@ -139,7 +139,7 @@ export class SeamHttpActionAttempts { createPaginator( request: SeamPaginatedRequest, ): 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 80e33321..40902c93 100644 --- a/src/lib/routes/client-sessions/client-sessions.ts +++ b/src/lib/routes/client-sessions/client-sessions.ts @@ -139,7 +139,7 @@ export class SeamHttpClientSessions { createPaginator( request: SeamPaginatedRequest, ): 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 65224da0..2c79756a 100644 --- a/src/lib/routes/connect-webviews/connect-webviews.ts +++ b/src/lib/routes/connect-webviews/connect-webviews.ts @@ -139,7 +139,7 @@ export class SeamHttpConnectWebviews { createPaginator( request: SeamPaginatedRequest, ): 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 06e1d803..7276353b 100644 --- a/src/lib/routes/connected-accounts/connected-accounts.ts +++ b/src/lib/routes/connected-accounts/connected-accounts.ts @@ -142,7 +142,7 @@ export class SeamHttpConnectedAccounts { createPaginator( request: SeamPaginatedRequest, ): 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 ab88a85d..2e2e2099 100644 --- a/src/lib/routes/connected-accounts/simulate/simulate.ts +++ b/src/lib/routes/connected-accounts/simulate/simulate.ts @@ -141,7 +141,7 @@ export class SeamHttpConnectedAccountsSimulate { createPaginator( request: SeamPaginatedRequest, ): 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 d23fcb46..7237e5d5 100644 --- a/src/lib/routes/customers/customers.ts +++ b/src/lib/routes/customers/customers.ts @@ -139,7 +139,7 @@ export class SeamHttpCustomers { createPaginator( request: SeamPaginatedRequest, ): 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 5914250e..d5f698cd 100644 --- a/src/lib/routes/devices/devices.ts +++ b/src/lib/routes/devices/devices.ts @@ -144,7 +144,7 @@ export class SeamHttpDevices { createPaginator( request: SeamPaginatedRequest, ): 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 b88e6c11..5e0adb94 100644 --- a/src/lib/routes/devices/simulate/simulate.ts +++ b/src/lib/routes/devices/simulate/simulate.ts @@ -138,7 +138,7 @@ export class SeamHttpDevicesSimulate { createPaginator( request: SeamPaginatedRequest, ): 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 3cdc85e4..d27b7074 100644 --- a/src/lib/routes/devices/unmanaged/unmanaged.ts +++ b/src/lib/routes/devices/unmanaged/unmanaged.ts @@ -140,7 +140,7 @@ export class SeamHttpDevicesUnmanaged { createPaginator( request: SeamPaginatedRequest, ): 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 3244123b..18c2a908 100644 --- a/src/lib/routes/events/events.ts +++ b/src/lib/routes/events/events.ts @@ -140,7 +140,7 @@ export class SeamHttpEvents { createPaginator( request: SeamPaginatedRequest, ): 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 7a87abc0..3a700e9d 100644 --- a/src/lib/routes/instant-keys/instant-keys.ts +++ b/src/lib/routes/instant-keys/instant-keys.ts @@ -140,7 +140,7 @@ export class SeamHttpInstantKeys { createPaginator( request: SeamPaginatedRequest, ): 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 411030f0..946ee476 100644 --- a/src/lib/routes/locks/locks.ts +++ b/src/lib/routes/locks/locks.ts @@ -144,7 +144,7 @@ export class SeamHttpLocks { createPaginator( request: SeamPaginatedRequest, ): 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 7daff30c..98bc16e6 100644 --- a/src/lib/routes/locks/simulate/simulate.ts +++ b/src/lib/routes/locks/simulate/simulate.ts @@ -140,7 +140,7 @@ export class SeamHttpLocksSimulate { createPaginator( request: SeamPaginatedRequest, ): 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 9e37d6bf..a6ba774c 100644 --- a/src/lib/routes/noise-sensors/noise-sensors.ts +++ b/src/lib/routes/noise-sensors/noise-sensors.ts @@ -142,7 +142,7 @@ export class SeamHttpNoiseSensors { createPaginator( request: SeamPaginatedRequest, ): 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 2021281f..67f41e80 100644 --- a/src/lib/routes/noise-sensors/noise-thresholds/noise-thresholds.ts +++ b/src/lib/routes/noise-sensors/noise-thresholds/noise-thresholds.ts @@ -142,7 +142,7 @@ export class SeamHttpNoiseSensorsNoiseThresholds { createPaginator( request: SeamPaginatedRequest, ): 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 a3446676..e0e125bf 100644 --- a/src/lib/routes/noise-sensors/simulate/simulate.ts +++ b/src/lib/routes/noise-sensors/simulate/simulate.ts @@ -138,7 +138,7 @@ export class SeamHttpNoiseSensorsSimulate { createPaginator( request: SeamPaginatedRequest, ): 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 1a836d93..ea527821 100644 --- a/src/lib/routes/phones/phones.ts +++ b/src/lib/routes/phones/phones.ts @@ -141,7 +141,7 @@ export class SeamHttpPhones { createPaginator( request: SeamPaginatedRequest, ): 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 62d6ef23..1639dfa6 100644 --- a/src/lib/routes/phones/simulate/simulate.ts +++ b/src/lib/routes/phones/simulate/simulate.ts @@ -139,7 +139,7 @@ export class SeamHttpPhonesSimulate { createPaginator( request: SeamPaginatedRequest, ): 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 3d5b2f08..4c814326 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: SeamPaginatedRequest, ): 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 16d2311e..d1ef72d6 100644 --- a/src/lib/routes/seam-http.ts +++ b/src/lib/routes/seam-http.ts @@ -155,7 +155,7 @@ export class SeamHttp { createPaginator( request: SeamPaginatedRequest, ): 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 d6249695..ea27f416 100644 --- a/src/lib/routes/spaces/spaces.ts +++ b/src/lib/routes/spaces/spaces.ts @@ -141,7 +141,7 @@ export class SeamHttpSpaces { createPaginator( request: SeamPaginatedRequest, ): 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 c4155e7a..bd12e731 100644 --- a/src/lib/routes/thermostats/daily-programs/daily-programs.ts +++ b/src/lib/routes/thermostats/daily-programs/daily-programs.ts @@ -144,7 +144,7 @@ export class SeamHttpThermostatsDailyPrograms { createPaginator( request: SeamPaginatedRequest, ): 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 c480bb6f..e05fc4bd 100644 --- a/src/lib/routes/thermostats/schedules/schedules.ts +++ b/src/lib/routes/thermostats/schedules/schedules.ts @@ -139,7 +139,7 @@ export class SeamHttpThermostatsSchedules { createPaginator( request: SeamPaginatedRequest, ): 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 b849bd99..6ae6dda0 100644 --- a/src/lib/routes/thermostats/simulate/simulate.ts +++ b/src/lib/routes/thermostats/simulate/simulate.ts @@ -138,7 +138,7 @@ export class SeamHttpThermostatsSimulate { createPaginator( request: SeamPaginatedRequest, ): 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 b62889e8..97f42e47 100644 --- a/src/lib/routes/thermostats/thermostats.ts +++ b/src/lib/routes/thermostats/thermostats.ts @@ -145,7 +145,7 @@ export class SeamHttpThermostats { createPaginator( request: SeamPaginatedRequest, ): 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 f53dca21..1f814840 100644 --- a/src/lib/routes/user-identities/unmanaged/unmanaged.ts +++ b/src/lib/routes/user-identities/unmanaged/unmanaged.ts @@ -142,7 +142,7 @@ export class SeamHttpUserIdentitiesUnmanaged { createPaginator( request: SeamPaginatedRequest, ): 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 b1e8c258..5c5fa28b 100644 --- a/src/lib/routes/user-identities/user-identities.ts +++ b/src/lib/routes/user-identities/user-identities.ts @@ -147,7 +147,7 @@ export class SeamHttpUserIdentities { createPaginator( request: SeamPaginatedRequest, ): 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 29c58618..c19f3bf4 100644 --- a/src/lib/routes/webhooks/webhooks.ts +++ b/src/lib/routes/webhooks/webhooks.ts @@ -139,7 +139,7 @@ export class SeamHttpWebhooks { createPaginator( request: SeamPaginatedRequest, ): 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 9ed00459..9d7f37b7 100644 --- a/src/lib/routes/workspaces/workspaces.ts +++ b/src/lib/routes/workspaces/workspaces.ts @@ -141,7 +141,7 @@ export class SeamHttpWorkspaces { createPaginator( request: SeamPaginatedRequest, ): 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 1ac1595d..f7a43604 100644 --- a/src/lib/seam-http-request.ts +++ b/src/lib/seam-http-request.ts @@ -124,6 +124,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 116365ab..734bb3b8 100644 --- a/src/lib/seam-paginator.ts +++ b/src/lib/seam-paginator.ts @@ -1,17 +1,9 @@ -import type { Client } from './client.js' -import type { SeamHttpRequestOptions } from './options.js' import { SeamHttpInvalidResponseError } from './seam-http-error.js' import { readResponseData, - SeamHttpRequest, type SeamPaginatedRequest, } from './seam-http-request.js' -interface SeamPaginatorParent { - readonly client: Client - readonly defaults: Required -} - declare const $brand: unique symbol /** @@ -39,18 +31,13 @@ export class SeamPaginator< const TResponseKey extends keyof TResponse, > implements AsyncIterable> { readonly #request: SeamPaginatedRequest - readonly #parent: SeamPaginatorParent - constructor( - parent: SeamPaginatorParent, - request: SeamPaginatedRequest, - ) { + constructor(request: SeamPaginatedRequest) { if (!request.hasPagination) { throw new Error( `The ${request.pathname} endpoint does not support pagination`, ) } - this.#parent = parent this.#request = request } @@ -86,22 +73,7 @@ export class SeamPaginator< throw new Error('Cannot paginate a response without a responseKey') } - const method = this.#request.method - - const requestData = { - ...(usesParams(method) - ? (this.#request.params ?? {}) - : ((this.#request.body as Record | null) ?? {})), - page_cursor: nextPageCursor, - } - - const request = new SeamHttpRequest(this.#parent, { - pathname: this.#request.pathname, - method, - responseKey, - params: usesParams(method) ? requestData : undefined, - body: usesParams(method) ? undefined : requestData, - }) + const request = this.#request.withPageCursor(nextPageCursor ?? undefined) const response = await request.fetchResponse() const data = readResponseData(response, responseKey, request.pathname) @@ -193,9 +165,6 @@ export class SeamPaginator< } } -const usesParams = (method: string): boolean => - ['GET', 'DELETE'].includes(method.toUpperCase()) - type EnsureReadonlyArray = T extends readonly any[] ? T : never type EnsureMutableArray = T extends any[] ? T : never type ElementOfArray = diff --git a/test/seam/connect/seam-paginator.test.ts b/test/seam/connect/seam-paginator.test.ts index 0f05e9ed..c17d4209 100644 --- a/test/seam/connect/seam-paginator.test.ts +++ b/test/seam/connect/seam-paginator.test.ts @@ -215,6 +215,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 })