From 657c1773297ba6075aef88eab72fd5de0c21fb3a Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 24 Aug 2026 19:50:45 +0000 Subject: [PATCH 1/3] feat: Only accept paginated requests in createPaginator createPaginator accepted any SeamHttpRequest, so paginating a non-paginated route typechecked and failed only at runtime, or after the hasPagination guard was added, with a runtime error instead of a compile error. Track pagination support in a SeamHttpRequest type parameter set by the generated route types, and constrain createPaginator to requests from paginated endpoints, so paginating a non-paginated route is a compile error. Runtime behavior is unchanged. Co-Authored-By: Claude Claude-Session: https://claude.ai/code/session_01B8xeJm2Hd923k8uo6eoFd2 --- .../partials/route-class-endpoint-export.hbs | 2 +- .../layouts/partials/route-class-methods.hbs | 2 +- src/lib/routes/access-codes/access-codes.ts | 5 ++-- .../routes/access-codes/simulate/simulate.ts | 2 +- .../access-codes/unmanaged/unmanaged.ts | 5 ++-- src/lib/routes/access-grants/access-grants.ts | 5 ++-- .../access-grants/unmanaged/unmanaged.ts | 5 ++-- .../routes/access-methods/access-methods.ts | 5 ++-- .../access-methods/unmanaged/unmanaged.ts | 2 +- .../routes/acs/access-groups/access-groups.ts | 2 +- src/lib/routes/acs/acs.ts | 2 +- src/lib/routes/acs/credentials/credentials.ts | 5 ++-- src/lib/routes/acs/encoders/encoders.ts | 5 ++-- .../routes/acs/encoders/simulate/simulate.ts | 2 +- src/lib/routes/acs/entrances/entrances.ts | 5 ++-- src/lib/routes/acs/systems/systems.ts | 2 +- src/lib/routes/acs/users/users.ts | 5 ++-- .../routes/action-attempts/action-attempts.ts | 5 ++-- .../routes/client-sessions/client-sessions.ts | 2 +- .../connect-webviews/connect-webviews.ts | 5 ++-- .../connected-accounts/connected-accounts.ts | 5 ++-- .../connected-accounts/simulate/simulate.ts | 2 +- src/lib/routes/customers/customers.ts | 2 +- src/lib/routes/devices/devices.ts | 8 +++-- src/lib/routes/devices/simulate/simulate.ts | 2 +- src/lib/routes/devices/unmanaged/unmanaged.ts | 5 ++-- src/lib/routes/events/events.ts | 2 +- src/lib/routes/instant-keys/instant-keys.ts | 2 +- src/lib/routes/locks/locks.ts | 2 +- src/lib/routes/locks/simulate/simulate.ts | 2 +- src/lib/routes/noise-sensors/noise-sensors.ts | 2 +- .../noise-thresholds/noise-thresholds.ts | 2 +- .../routes/noise-sensors/simulate/simulate.ts | 2 +- src/lib/routes/phones/phones.ts | 2 +- src/lib/routes/phones/simulate/simulate.ts | 2 +- src/lib/routes/seam-http-endpoints.ts | 2 +- src/lib/routes/seam-http.ts | 2 +- src/lib/routes/spaces/spaces.ts | 8 +++-- .../daily-programs/daily-programs.ts | 2 +- .../routes/thermostats/schedules/schedules.ts | 2 +- .../routes/thermostats/simulate/simulate.ts | 2 +- src/lib/routes/thermostats/thermostats.ts | 2 +- .../user-identities/unmanaged/unmanaged.ts | 5 ++-- .../routes/user-identities/user-identities.ts | 5 ++-- src/lib/routes/webhooks/webhooks.ts | 2 +- src/lib/routes/workspaces/workspaces.ts | 2 +- src/lib/seam-http-request.ts | 5 ++-- src/lib/seam-paginator.ts | 4 +-- test/seam/connect/seam-paginator.test.ts | 29 +++++++++++++++++-- 49 files changed, 117 insertions(+), 70 deletions(-) diff --git a/codegen/layouts/partials/route-class-endpoint-export.hbs b/codegen/layouts/partials/route-class-endpoint-export.hbs index 3ecd1069..c965957a 100644 --- a/codegen/layouts/partials/route-class-endpoint-export.hbs +++ b/codegen/layouts/partials/route-class-endpoint-export.hbs @@ -5,7 +5,7 @@ export type {{parametersTypeName}} = {{#if requiresAtLeastOneParameter}}RequireA */ export type {{responseTypeName}} = {{#if returnsVoid}}void{{else}}{ {{json responseKey}}: {{#if responseIsList}}Array<{{responseResourceTypeName}}>{{else}}{{responseResourceTypeName}}{{/if}} }{{/if}} -export type {{requestTypeName}} = SeamHttpRequest<{{#if returnsVoid}}void, undefined{{else}}{{responseTypeName}}, '{{responseKey}}'{{/if}}> +export type {{requestTypeName}} = SeamHttpRequest<{{#if returnsVoid}}void, undefined{{else}}{{responseTypeName}}, '{{responseKey}}'{{/if}}{{#if hasPagination}}, true{{/if}}> {{#if returnsActionAttempt}} diff --git a/codegen/layouts/partials/route-class-methods.hbs b/codegen/layouts/partials/route-class-methods.hbs index 135b92bc..87c27f51 100644 --- a/codegen/layouts/partials/route-class-methods.hbs +++ b/codegen/layouts/partials/route-class-methods.hbs @@ -98,7 +98,7 @@ static fromPersonalAccessToken( } createPaginator( - request: SeamHttpRequest, + request: SeamHttpRequest, ): SeamPaginator { return new SeamPaginator(this, request) } diff --git a/src/lib/routes/access-codes/access-codes.ts b/src/lib/routes/access-codes/access-codes.ts index f619c116..65e57f89 100644 --- a/src/lib/routes/access-codes/access-codes.ts +++ b/src/lib/routes/access-codes/access-codes.ts @@ -138,7 +138,7 @@ export class SeamHttpAccessCodes { } createPaginator( - request: SeamHttpRequest, + request: SeamHttpRequest, ): SeamPaginator { return new SeamPaginator(this, request) } @@ -664,7 +664,8 @@ export type AccessCodesListResponse = { access_codes: Array } export type AccessCodesListRequest = SeamHttpRequest< AccessCodesListResponse, - 'access_codes' + 'access_codes', + true > export interface AccessCodesListOptions {} diff --git a/src/lib/routes/access-codes/simulate/simulate.ts b/src/lib/routes/access-codes/simulate/simulate.ts index 57e4dc34..af79499f 100644 --- a/src/lib/routes/access-codes/simulate/simulate.ts +++ b/src/lib/routes/access-codes/simulate/simulate.ts @@ -134,7 +134,7 @@ export class SeamHttpAccessCodesSimulate { } createPaginator( - request: SeamHttpRequest, + request: SeamHttpRequest, ): SeamPaginator { return new SeamPaginator(this, request) } diff --git a/src/lib/routes/access-codes/unmanaged/unmanaged.ts b/src/lib/routes/access-codes/unmanaged/unmanaged.ts index 5c5d9070..ed8bb443 100644 --- a/src/lib/routes/access-codes/unmanaged/unmanaged.ts +++ b/src/lib/routes/access-codes/unmanaged/unmanaged.ts @@ -135,7 +135,7 @@ export class SeamHttpAccessCodesUnmanaged { } createPaginator( - request: SeamHttpRequest, + request: SeamHttpRequest, ): SeamPaginator { return new SeamPaginator(this, request) } @@ -372,7 +372,8 @@ export type AccessCodesUnmanagedListResponse = { export type AccessCodesUnmanagedListRequest = SeamHttpRequest< AccessCodesUnmanagedListResponse, - 'access_codes' + 'access_codes', + true > export interface AccessCodesUnmanagedListOptions {} diff --git a/src/lib/routes/access-grants/access-grants.ts b/src/lib/routes/access-grants/access-grants.ts index 9e65b024..209f79ea 100644 --- a/src/lib/routes/access-grants/access-grants.ts +++ b/src/lib/routes/access-grants/access-grants.ts @@ -138,7 +138,7 @@ export class SeamHttpAccessGrants { } createPaginator( - request: SeamHttpRequest, + request: SeamHttpRequest, ): SeamPaginator { return new SeamPaginator(this, request) } @@ -583,7 +583,8 @@ export type AccessGrantsListResponse = { access_grants: Array } export type AccessGrantsListRequest = SeamHttpRequest< AccessGrantsListResponse, - 'access_grants' + 'access_grants', + true > export interface AccessGrantsListOptions {} diff --git a/src/lib/routes/access-grants/unmanaged/unmanaged.ts b/src/lib/routes/access-grants/unmanaged/unmanaged.ts index b3353dfd..8b757d68 100644 --- a/src/lib/routes/access-grants/unmanaged/unmanaged.ts +++ b/src/lib/routes/access-grants/unmanaged/unmanaged.ts @@ -134,7 +134,7 @@ export class SeamHttpAccessGrantsUnmanaged { } createPaginator( - request: SeamHttpRequest, + request: SeamHttpRequest, ): SeamPaginator { return new SeamPaginator(this, request) } @@ -278,7 +278,8 @@ export type AccessGrantsUnmanagedListResponse = { export type AccessGrantsUnmanagedListRequest = SeamHttpRequest< AccessGrantsUnmanagedListResponse, - 'access_grants' + 'access_grants', + true > export interface AccessGrantsUnmanagedListOptions {} diff --git a/src/lib/routes/access-methods/access-methods.ts b/src/lib/routes/access-methods/access-methods.ts index cdc051d4..e2b78586 100644 --- a/src/lib/routes/access-methods/access-methods.ts +++ b/src/lib/routes/access-methods/access-methods.ts @@ -140,7 +140,7 @@ export class SeamHttpAccessMethods { } createPaginator( - request: SeamHttpRequest, + request: SeamHttpRequest, ): SeamPaginator { return new SeamPaginator(this, request) } @@ -510,7 +510,8 @@ export type AccessMethodsListResponse = { access_methods: Array } export type AccessMethodsListRequest = SeamHttpRequest< AccessMethodsListResponse, - 'access_methods' + 'access_methods', + true > export interface AccessMethodsListOptions {} diff --git a/src/lib/routes/access-methods/unmanaged/unmanaged.ts b/src/lib/routes/access-methods/unmanaged/unmanaged.ts index b3b521a8..fa6d246a 100644 --- a/src/lib/routes/access-methods/unmanaged/unmanaged.ts +++ b/src/lib/routes/access-methods/unmanaged/unmanaged.ts @@ -134,7 +134,7 @@ export class SeamHttpAccessMethodsUnmanaged { } createPaginator( - request: SeamHttpRequest, + request: SeamHttpRequest, ): SeamPaginator { return new SeamPaginator(this, request) } diff --git a/src/lib/routes/acs/access-groups/access-groups.ts b/src/lib/routes/acs/access-groups/access-groups.ts index e05b5349..8d3b0071 100644 --- a/src/lib/routes/acs/access-groups/access-groups.ts +++ b/src/lib/routes/acs/access-groups/access-groups.ts @@ -136,7 +136,7 @@ export class SeamHttpAcsAccessGroups { } createPaginator( - request: SeamHttpRequest, + request: SeamHttpRequest, ): SeamPaginator { return new SeamPaginator(this, request) } diff --git a/src/lib/routes/acs/acs.ts b/src/lib/routes/acs/acs.ts index b431297f..e3368cd0 100644 --- a/src/lib/routes/acs/acs.ts +++ b/src/lib/routes/acs/acs.ts @@ -140,7 +140,7 @@ export class SeamHttpAcs { } createPaginator( - request: SeamHttpRequest, + request: SeamHttpRequest, ): SeamPaginator { return new SeamPaginator(this, request) } diff --git a/src/lib/routes/acs/credentials/credentials.ts b/src/lib/routes/acs/credentials/credentials.ts index 46eca4e8..dfaa46b7 100644 --- a/src/lib/routes/acs/credentials/credentials.ts +++ b/src/lib/routes/acs/credentials/credentials.ts @@ -135,7 +135,7 @@ export class SeamHttpAcsCredentials { } createPaginator( - request: SeamHttpRequest, + request: SeamHttpRequest, ): SeamPaginator { return new SeamPaginator(this, request) } @@ -514,7 +514,8 @@ export type AcsCredentialsListResponse = { export type AcsCredentialsListRequest = SeamHttpRequest< AcsCredentialsListResponse, - 'acs_credentials' + 'acs_credentials', + true > export interface AcsCredentialsListOptions {} diff --git a/src/lib/routes/acs/encoders/encoders.ts b/src/lib/routes/acs/encoders/encoders.ts index 97f33585..c28c08cf 100644 --- a/src/lib/routes/acs/encoders/encoders.ts +++ b/src/lib/routes/acs/encoders/encoders.ts @@ -138,7 +138,7 @@ export class SeamHttpAcsEncoders { } createPaginator( - request: SeamHttpRequest, + request: SeamHttpRequest, ): SeamPaginator { return new SeamPaginator(this, request) } @@ -356,7 +356,8 @@ export type AcsEncodersListResponse = { acs_encoders: Array } export type AcsEncodersListRequest = SeamHttpRequest< AcsEncodersListResponse, - 'acs_encoders' + 'acs_encoders', + true > export interface AcsEncodersListOptions {} diff --git a/src/lib/routes/acs/encoders/simulate/simulate.ts b/src/lib/routes/acs/encoders/simulate/simulate.ts index 2671dd2a..ff58517f 100644 --- a/src/lib/routes/acs/encoders/simulate/simulate.ts +++ b/src/lib/routes/acs/encoders/simulate/simulate.ts @@ -133,7 +133,7 @@ export class SeamHttpAcsEncodersSimulate { } createPaginator( - request: SeamHttpRequest, + request: SeamHttpRequest, ): SeamPaginator { return new SeamPaginator(this, request) } diff --git a/src/lib/routes/acs/entrances/entrances.ts b/src/lib/routes/acs/entrances/entrances.ts index 5e288720..934fa158 100644 --- a/src/lib/routes/acs/entrances/entrances.ts +++ b/src/lib/routes/acs/entrances/entrances.ts @@ -137,7 +137,7 @@ export class SeamHttpAcsEntrances { } createPaginator( - request: SeamHttpRequest, + request: SeamHttpRequest, ): SeamPaginator { return new SeamPaginator(this, request) } @@ -360,7 +360,8 @@ export type AcsEntrancesListResponse = { acs_entrances: Array } export type AcsEntrancesListRequest = SeamHttpRequest< AcsEntrancesListResponse, - 'acs_entrances' + 'acs_entrances', + true > export interface AcsEntrancesListOptions {} diff --git a/src/lib/routes/acs/systems/systems.ts b/src/lib/routes/acs/systems/systems.ts index 8201bda4..e00e01d4 100644 --- a/src/lib/routes/acs/systems/systems.ts +++ b/src/lib/routes/acs/systems/systems.ts @@ -134,7 +134,7 @@ export class SeamHttpAcsSystems { } createPaginator( - request: SeamHttpRequest, + request: SeamHttpRequest, ): SeamPaginator { return new SeamPaginator(this, request) } diff --git a/src/lib/routes/acs/users/users.ts b/src/lib/routes/acs/users/users.ts index 368b37b3..73accb8c 100644 --- a/src/lib/routes/acs/users/users.ts +++ b/src/lib/routes/acs/users/users.ts @@ -136,7 +136,7 @@ export class SeamHttpAcsUsers { } createPaginator( - request: SeamHttpRequest, + request: SeamHttpRequest, ): SeamPaginator { return new SeamPaginator(this, request) } @@ -545,7 +545,8 @@ export type AcsUsersListResponse = { acs_users: Array } export type AcsUsersListRequest = SeamHttpRequest< AcsUsersListResponse, - 'acs_users' + 'acs_users', + true > export interface AcsUsersListOptions {} diff --git a/src/lib/routes/action-attempts/action-attempts.ts b/src/lib/routes/action-attempts/action-attempts.ts index d7042d46..c58a6a56 100644 --- a/src/lib/routes/action-attempts/action-attempts.ts +++ b/src/lib/routes/action-attempts/action-attempts.ts @@ -134,7 +134,7 @@ export class SeamHttpActionAttempts { } createPaginator( - request: SeamHttpRequest, + request: SeamHttpRequest, ): SeamPaginator { return new SeamPaginator(this, request) } @@ -252,7 +252,8 @@ export type ActionAttemptsListResponse = { export type ActionAttemptsListRequest = SeamHttpRequest< ActionAttemptsListResponse, - 'action_attempts' + 'action_attempts', + true > export interface ActionAttemptsListOptions {} diff --git a/src/lib/routes/client-sessions/client-sessions.ts b/src/lib/routes/client-sessions/client-sessions.ts index dc6ad406..acf2fb35 100644 --- a/src/lib/routes/client-sessions/client-sessions.ts +++ b/src/lib/routes/client-sessions/client-sessions.ts @@ -134,7 +134,7 @@ export class SeamHttpClientSessions { } createPaginator( - request: SeamHttpRequest, + request: SeamHttpRequest, ): SeamPaginator { return new SeamPaginator(this, request) } diff --git a/src/lib/routes/connect-webviews/connect-webviews.ts b/src/lib/routes/connect-webviews/connect-webviews.ts index c05d77a8..16aea6a8 100644 --- a/src/lib/routes/connect-webviews/connect-webviews.ts +++ b/src/lib/routes/connect-webviews/connect-webviews.ts @@ -134,7 +134,7 @@ export class SeamHttpConnectWebviews { } createPaginator( - request: SeamHttpRequest, + request: SeamHttpRequest, ): SeamPaginator { return new SeamPaginator(this, request) } @@ -457,7 +457,8 @@ export type ConnectWebviewsListResponse = { export type ConnectWebviewsListRequest = SeamHttpRequest< ConnectWebviewsListResponse, - 'connect_webviews' + 'connect_webviews', + true > export interface ConnectWebviewsListOptions {} diff --git a/src/lib/routes/connected-accounts/connected-accounts.ts b/src/lib/routes/connected-accounts/connected-accounts.ts index 3149660f..37c59df7 100644 --- a/src/lib/routes/connected-accounts/connected-accounts.ts +++ b/src/lib/routes/connected-accounts/connected-accounts.ts @@ -137,7 +137,7 @@ export class SeamHttpConnectedAccounts { } createPaginator( - request: SeamHttpRequest, + request: SeamHttpRequest, ): SeamPaginator { return new SeamPaginator(this, request) } @@ -350,7 +350,8 @@ export type ConnectedAccountsListResponse = { export type ConnectedAccountsListRequest = SeamHttpRequest< ConnectedAccountsListResponse, - 'connected_accounts' + 'connected_accounts', + true > export interface ConnectedAccountsListOptions {} diff --git a/src/lib/routes/connected-accounts/simulate/simulate.ts b/src/lib/routes/connected-accounts/simulate/simulate.ts index 6aa5e929..313e2913 100644 --- a/src/lib/routes/connected-accounts/simulate/simulate.ts +++ b/src/lib/routes/connected-accounts/simulate/simulate.ts @@ -136,7 +136,7 @@ export class SeamHttpConnectedAccountsSimulate { } createPaginator( - request: SeamHttpRequest, + request: SeamHttpRequest, ): SeamPaginator { return new SeamPaginator(this, request) } diff --git a/src/lib/routes/customers/customers.ts b/src/lib/routes/customers/customers.ts index d640b8e5..6198dd2c 100644 --- a/src/lib/routes/customers/customers.ts +++ b/src/lib/routes/customers/customers.ts @@ -134,7 +134,7 @@ export class SeamHttpCustomers { } createPaginator( - request: SeamHttpRequest, + request: SeamHttpRequest, ): SeamPaginator { return new SeamPaginator(this, request) } diff --git a/src/lib/routes/devices/devices.ts b/src/lib/routes/devices/devices.ts index 8fc3b6d0..71aa5e08 100644 --- a/src/lib/routes/devices/devices.ts +++ b/src/lib/routes/devices/devices.ts @@ -139,7 +139,7 @@ export class SeamHttpDevices { } createPaginator( - request: SeamHttpRequest, + request: SeamHttpRequest, ): SeamPaginator { return new SeamPaginator(this, request) } @@ -511,7 +511,11 @@ export type DevicesListParameters = { */ export type DevicesListResponse = { devices: Array } -export type DevicesListRequest = SeamHttpRequest +export type DevicesListRequest = SeamHttpRequest< + DevicesListResponse, + 'devices', + true +> export interface DevicesListOptions {} diff --git a/src/lib/routes/devices/simulate/simulate.ts b/src/lib/routes/devices/simulate/simulate.ts index a803418c..aa88999a 100644 --- a/src/lib/routes/devices/simulate/simulate.ts +++ b/src/lib/routes/devices/simulate/simulate.ts @@ -133,7 +133,7 @@ export class SeamHttpDevicesSimulate { } createPaginator( - request: SeamHttpRequest, + request: SeamHttpRequest, ): SeamPaginator { return new SeamPaginator(this, request) } diff --git a/src/lib/routes/devices/unmanaged/unmanaged.ts b/src/lib/routes/devices/unmanaged/unmanaged.ts index 6e4dc33d..81afbb68 100644 --- a/src/lib/routes/devices/unmanaged/unmanaged.ts +++ b/src/lib/routes/devices/unmanaged/unmanaged.ts @@ -135,7 +135,7 @@ export class SeamHttpDevicesUnmanaged { } createPaginator( - request: SeamHttpRequest, + request: SeamHttpRequest, ): SeamPaginator { return new SeamPaginator(this, request) } @@ -450,7 +450,8 @@ export type DevicesUnmanagedListResponse = { devices: Array } export type DevicesUnmanagedListRequest = SeamHttpRequest< DevicesUnmanagedListResponse, - 'devices' + 'devices', + true > export interface DevicesUnmanagedListOptions {} diff --git a/src/lib/routes/events/events.ts b/src/lib/routes/events/events.ts index 1823cd96..f39f008c 100644 --- a/src/lib/routes/events/events.ts +++ b/src/lib/routes/events/events.ts @@ -135,7 +135,7 @@ export class SeamHttpEvents { } createPaginator( - request: SeamHttpRequest, + request: SeamHttpRequest, ): SeamPaginator { return new SeamPaginator(this, request) } diff --git a/src/lib/routes/instant-keys/instant-keys.ts b/src/lib/routes/instant-keys/instant-keys.ts index e1d3d779..a1c5a709 100644 --- a/src/lib/routes/instant-keys/instant-keys.ts +++ b/src/lib/routes/instant-keys/instant-keys.ts @@ -135,7 +135,7 @@ export class SeamHttpInstantKeys { } createPaginator( - request: SeamHttpRequest, + request: SeamHttpRequest, ): SeamPaginator { return new SeamPaginator(this, request) } diff --git a/src/lib/routes/locks/locks.ts b/src/lib/routes/locks/locks.ts index ceb03dbb..635d1774 100644 --- a/src/lib/routes/locks/locks.ts +++ b/src/lib/routes/locks/locks.ts @@ -139,7 +139,7 @@ export class SeamHttpLocks { } createPaginator( - request: SeamHttpRequest, + request: SeamHttpRequest, ): SeamPaginator { return new SeamPaginator(this, request) } diff --git a/src/lib/routes/locks/simulate/simulate.ts b/src/lib/routes/locks/simulate/simulate.ts index b4042216..8dfa9d9a 100644 --- a/src/lib/routes/locks/simulate/simulate.ts +++ b/src/lib/routes/locks/simulate/simulate.ts @@ -135,7 +135,7 @@ export class SeamHttpLocksSimulate { } createPaginator( - request: SeamHttpRequest, + request: SeamHttpRequest, ): SeamPaginator { return new SeamPaginator(this, request) } diff --git a/src/lib/routes/noise-sensors/noise-sensors.ts b/src/lib/routes/noise-sensors/noise-sensors.ts index f73db2da..033e9923 100644 --- a/src/lib/routes/noise-sensors/noise-sensors.ts +++ b/src/lib/routes/noise-sensors/noise-sensors.ts @@ -137,7 +137,7 @@ export class SeamHttpNoiseSensors { } createPaginator( - request: SeamHttpRequest, + request: SeamHttpRequest, ): SeamPaginator { return new SeamPaginator(this, request) } 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..a0536d8b 100644 --- a/src/lib/routes/noise-sensors/noise-thresholds/noise-thresholds.ts +++ b/src/lib/routes/noise-sensors/noise-thresholds/noise-thresholds.ts @@ -137,7 +137,7 @@ export class SeamHttpNoiseSensorsNoiseThresholds { } createPaginator( - request: SeamHttpRequest, + request: SeamHttpRequest, ): SeamPaginator { return new SeamPaginator(this, request) } diff --git a/src/lib/routes/noise-sensors/simulate/simulate.ts b/src/lib/routes/noise-sensors/simulate/simulate.ts index eb44fb30..7f937bf5 100644 --- a/src/lib/routes/noise-sensors/simulate/simulate.ts +++ b/src/lib/routes/noise-sensors/simulate/simulate.ts @@ -133,7 +133,7 @@ export class SeamHttpNoiseSensorsSimulate { } createPaginator( - request: SeamHttpRequest, + request: SeamHttpRequest, ): SeamPaginator { return new SeamPaginator(this, request) } diff --git a/src/lib/routes/phones/phones.ts b/src/lib/routes/phones/phones.ts index 956149ea..163fad1e 100644 --- a/src/lib/routes/phones/phones.ts +++ b/src/lib/routes/phones/phones.ts @@ -136,7 +136,7 @@ export class SeamHttpPhones { } createPaginator( - request: SeamHttpRequest, + request: SeamHttpRequest, ): SeamPaginator { return new SeamPaginator(this, request) } diff --git a/src/lib/routes/phones/simulate/simulate.ts b/src/lib/routes/phones/simulate/simulate.ts index 0f70c79b..0bf1833f 100644 --- a/src/lib/routes/phones/simulate/simulate.ts +++ b/src/lib/routes/phones/simulate/simulate.ts @@ -134,7 +134,7 @@ export class SeamHttpPhonesSimulate { } createPaginator( - request: SeamHttpRequest, + request: SeamHttpRequest, ): SeamPaginator { return new SeamPaginator(this, request) } diff --git a/src/lib/routes/seam-http-endpoints.ts b/src/lib/routes/seam-http-endpoints.ts index 960cf178..83761274 100644 --- a/src/lib/routes/seam-http-endpoints.ts +++ b/src/lib/routes/seam-http-endpoints.ts @@ -862,7 +862,7 @@ export class SeamHttpEndpoints { } createPaginator( - request: SeamHttpRequest, + request: SeamHttpRequest, ): SeamPaginator { return new SeamPaginator(this, request) } diff --git a/src/lib/routes/seam-http.ts b/src/lib/routes/seam-http.ts index 8aeda6cf..862382c5 100644 --- a/src/lib/routes/seam-http.ts +++ b/src/lib/routes/seam-http.ts @@ -153,7 +153,7 @@ export class SeamHttp { } createPaginator( - request: SeamHttpRequest, + request: SeamHttpRequest, ): SeamPaginator { return new SeamPaginator(this, request) } diff --git a/src/lib/routes/spaces/spaces.ts b/src/lib/routes/spaces/spaces.ts index 59d91f02..dcdcf280 100644 --- a/src/lib/routes/spaces/spaces.ts +++ b/src/lib/routes/spaces/spaces.ts @@ -136,7 +136,7 @@ export class SeamHttpSpaces { } createPaginator( - request: SeamHttpRequest, + request: SeamHttpRequest, ): SeamPaginator { return new SeamPaginator(this, request) } @@ -630,7 +630,11 @@ export type SpacesListParameters = { */ export type SpacesListResponse = { spaces: Array } -export type SpacesListRequest = SeamHttpRequest +export type SpacesListRequest = SeamHttpRequest< + SpacesListResponse, + 'spaces', + true +> export interface SpacesListOptions {} diff --git a/src/lib/routes/thermostats/daily-programs/daily-programs.ts b/src/lib/routes/thermostats/daily-programs/daily-programs.ts index 357bfcd1..af9b77e7 100644 --- a/src/lib/routes/thermostats/daily-programs/daily-programs.ts +++ b/src/lib/routes/thermostats/daily-programs/daily-programs.ts @@ -139,7 +139,7 @@ export class SeamHttpThermostatsDailyPrograms { } createPaginator( - request: SeamHttpRequest, + request: SeamHttpRequest, ): SeamPaginator { return new SeamPaginator(this, request) } diff --git a/src/lib/routes/thermostats/schedules/schedules.ts b/src/lib/routes/thermostats/schedules/schedules.ts index a31c6c7c..732c1fe8 100644 --- a/src/lib/routes/thermostats/schedules/schedules.ts +++ b/src/lib/routes/thermostats/schedules/schedules.ts @@ -134,7 +134,7 @@ export class SeamHttpThermostatsSchedules { } createPaginator( - request: SeamHttpRequest, + request: SeamHttpRequest, ): SeamPaginator { return new SeamPaginator(this, request) } diff --git a/src/lib/routes/thermostats/simulate/simulate.ts b/src/lib/routes/thermostats/simulate/simulate.ts index 487a9819..9b085c61 100644 --- a/src/lib/routes/thermostats/simulate/simulate.ts +++ b/src/lib/routes/thermostats/simulate/simulate.ts @@ -133,7 +133,7 @@ export class SeamHttpThermostatsSimulate { } createPaginator( - request: SeamHttpRequest, + request: SeamHttpRequest, ): SeamPaginator { return new SeamPaginator(this, request) } diff --git a/src/lib/routes/thermostats/thermostats.ts b/src/lib/routes/thermostats/thermostats.ts index c68f67d0..142a040c 100644 --- a/src/lib/routes/thermostats/thermostats.ts +++ b/src/lib/routes/thermostats/thermostats.ts @@ -140,7 +140,7 @@ export class SeamHttpThermostats { } createPaginator( - request: SeamHttpRequest, + request: SeamHttpRequest, ): SeamPaginator { return new SeamPaginator(this, request) } diff --git a/src/lib/routes/user-identities/unmanaged/unmanaged.ts b/src/lib/routes/user-identities/unmanaged/unmanaged.ts index 133b5ac7..49d57ece 100644 --- a/src/lib/routes/user-identities/unmanaged/unmanaged.ts +++ b/src/lib/routes/user-identities/unmanaged/unmanaged.ts @@ -137,7 +137,7 @@ export class SeamHttpUserIdentitiesUnmanaged { } createPaginator( - request: SeamHttpRequest, + request: SeamHttpRequest, ): SeamPaginator { return new SeamPaginator(this, request) } @@ -271,7 +271,8 @@ export type UserIdentitiesUnmanagedListResponse = { export type UserIdentitiesUnmanagedListRequest = SeamHttpRequest< UserIdentitiesUnmanagedListResponse, - 'user_identities' + 'user_identities', + true > export interface UserIdentitiesUnmanagedListOptions {} diff --git a/src/lib/routes/user-identities/user-identities.ts b/src/lib/routes/user-identities/user-identities.ts index ec6e8cba..d9ef5fec 100644 --- a/src/lib/routes/user-identities/user-identities.ts +++ b/src/lib/routes/user-identities/user-identities.ts @@ -142,7 +142,7 @@ export class SeamHttpUserIdentities { } createPaginator( - request: SeamHttpRequest, + request: SeamHttpRequest, ): SeamPaginator { return new SeamPaginator(this, request) } @@ -653,7 +653,8 @@ export type UserIdentitiesListResponse = { export type UserIdentitiesListRequest = SeamHttpRequest< UserIdentitiesListResponse, - 'user_identities' + 'user_identities', + true > export interface UserIdentitiesListOptions {} diff --git a/src/lib/routes/webhooks/webhooks.ts b/src/lib/routes/webhooks/webhooks.ts index 8201638e..d34cdb51 100644 --- a/src/lib/routes/webhooks/webhooks.ts +++ b/src/lib/routes/webhooks/webhooks.ts @@ -134,7 +134,7 @@ export class SeamHttpWebhooks { } createPaginator( - request: SeamHttpRequest, + request: SeamHttpRequest, ): SeamPaginator { return new SeamPaginator(this, request) } diff --git a/src/lib/routes/workspaces/workspaces.ts b/src/lib/routes/workspaces/workspaces.ts index 0fa4b559..5f4d1291 100644 --- a/src/lib/routes/workspaces/workspaces.ts +++ b/src/lib/routes/workspaces/workspaces.ts @@ -136,7 +136,7 @@ export class SeamHttpWorkspaces { } createPaginator( - request: SeamHttpRequest, + request: SeamHttpRequest, ): SeamPaginator { return new SeamPaginator(this, request) } diff --git a/src/lib/seam-http-request.ts b/src/lib/seam-http-request.ts index 719de08d..d3b3f5e5 100644 --- a/src/lib/seam-http-request.ts +++ b/src/lib/seam-http-request.ts @@ -46,6 +46,7 @@ interface SeamHttpRequestConfig { export class SeamHttpRequest< const TResponse, const TResponseKey extends keyof TResponse | undefined, + const THasPagination extends boolean = boolean, > implements Promise< TResponseKey extends keyof TResponse ? TResponse[TResponseKey] : undefined > { @@ -70,8 +71,8 @@ export class SeamHttpRequest< return this.#config.responseKey } - public get hasPagination(): boolean { - return this.#config.hasPagination ?? false + public get hasPagination(): THasPagination { + return (this.#config.hasPagination ?? false) as THasPagination } /** diff --git a/src/lib/seam-paginator.ts b/src/lib/seam-paginator.ts index 0741f46f..5b320ff7 100644 --- a/src/lib/seam-paginator.ts +++ b/src/lib/seam-paginator.ts @@ -33,12 +33,12 @@ export class SeamPaginator< const TResponse, const TResponseKey extends keyof TResponse, > implements AsyncIterable> { - readonly #request: SeamHttpRequest + readonly #request: SeamHttpRequest readonly #parent: SeamPaginatorParent constructor( parent: SeamPaginatorParent, - request: SeamHttpRequest, + request: SeamHttpRequest, ) { if (!request.hasPagination) { throw new Error( diff --git a/test/seam/connect/seam-paginator.test.ts b/test/seam/connect/seam-paginator.test.ts index 2fca098c..099f95c6 100644 --- a/test/seam/connect/seam-paginator.test.ts +++ b/test/seam/connect/seam-paginator.test.ts @@ -28,9 +28,32 @@ test('SeamPaginator: cannot paginate a request that does not return pagination d const { seed, endpoint } = await getTestServer(t) const seam = SeamHttp.fromApiKey(seed.seam_apikey1_token, { endpoint }) - t.throws(() => seam.createPaginator(seam.workspaces.list()), { - message: /does not support pagination/, - }) + t.throws( + () => + seam.createPaginator( + // @ts-expect-error Verify only paginated requests are accepted. + seam.workspaces.list(), + ), + { + message: /does not support pagination/, + }, + ) +}) + +test('SeamPaginator: only accepts paginated requests at the type level', async (t) => { + const { seed, endpoint } = await getTestServer(t) + const seam = SeamHttp.fromApiKey(seed.seam_apikey1_token, { endpoint }) + + const assertOnlyPaginatedRequestsAccepted = (): void => { + seam.createPaginator(seam.devices.list()) + + seam.createPaginator( + // @ts-expect-error A non-paginated request is rejected at compile time. + seam.devices.get({ device_id: 'device-id' }), + ) + } + + t.is(typeof assertOnlyPaginatedRequestsAccepted, 'function') }) test('SeamPaginator: firstPage returns the first page', async (t) => { From eac5b8bed893fd17ad6462ae4ef05bb8a2ce2da3 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 24 Aug 2026 23:14:22 +0000 Subject: [PATCH 2/3] refactor: Name the paginated request type SeamPaginatedRequest A bare boolean type argument in createPaginator's signature was opaque. Express the pagination gate through an exported SeamPaginatedRequest alias, used by createPaginator, SeamPaginator, and the generated request types of paginated endpoints, so signatures read as intent while non-paginated requests remain a compile error. Also merges main. Co-Authored-By: Claude Claude-Session: https://claude.ai/code/session_01B8xeJm2Hd923k8uo6eoFd2 --- .../layouts/partials/route-class-endpoint-export.hbs | 2 +- codegen/layouts/partials/route-class-methods.hbs | 2 +- codegen/layouts/partials/route-imports.hbs | 5 ++++- src/lib/routes/access-codes/access-codes.ts | 12 +++++++----- src/lib/routes/access-codes/simulate/simulate.ts | 7 +++++-- src/lib/routes/access-codes/unmanaged/unmanaged.ts | 12 +++++++----- src/lib/routes/access-grants/access-grants.ts | 12 +++++++----- src/lib/routes/access-grants/unmanaged/unmanaged.ts | 12 +++++++----- src/lib/routes/access-methods/access-methods.ts | 12 +++++++----- src/lib/routes/access-methods/unmanaged/unmanaged.ts | 7 +++++-- src/lib/routes/acs/access-groups/access-groups.ts | 7 +++++-- src/lib/routes/acs/acs.ts | 4 ++-- src/lib/routes/acs/credentials/credentials.ts | 12 +++++++----- src/lib/routes/acs/encoders/encoders.ts | 12 +++++++----- src/lib/routes/acs/encoders/simulate/simulate.ts | 7 +++++-- src/lib/routes/acs/entrances/entrances.ts | 12 +++++++----- src/lib/routes/acs/systems/systems.ts | 7 +++++-- src/lib/routes/acs/users/users.ts | 12 +++++++----- src/lib/routes/action-attempts/action-attempts.ts | 12 +++++++----- src/lib/routes/client-sessions/client-sessions.ts | 7 +++++-- src/lib/routes/connect-webviews/connect-webviews.ts | 12 +++++++----- .../routes/connected-accounts/connected-accounts.ts | 12 +++++++----- .../routes/connected-accounts/simulate/simulate.ts | 7 +++++-- src/lib/routes/customers/customers.ts | 7 +++++-- src/lib/routes/devices/devices.ts | 12 +++++++----- src/lib/routes/devices/simulate/simulate.ts | 7 +++++-- src/lib/routes/devices/unmanaged/unmanaged.ts | 12 +++++++----- src/lib/routes/events/events.ts | 7 +++++-- src/lib/routes/instant-keys/instant-keys.ts | 7 +++++-- src/lib/routes/locks/locks.ts | 7 +++++-- src/lib/routes/locks/simulate/simulate.ts | 7 +++++-- src/lib/routes/noise-sensors/noise-sensors.ts | 7 +++++-- .../noise-thresholds/noise-thresholds.ts | 7 +++++-- src/lib/routes/noise-sensors/simulate/simulate.ts | 7 +++++-- src/lib/routes/phones/phones.ts | 7 +++++-- src/lib/routes/phones/simulate/simulate.ts | 7 +++++-- src/lib/routes/seam-http-endpoints.ts | 4 ++-- src/lib/routes/seam-http.ts | 4 ++-- src/lib/routes/spaces/spaces.ts | 12 +++++++----- .../thermostats/daily-programs/daily-programs.ts | 7 +++++-- src/lib/routes/thermostats/schedules/schedules.ts | 7 +++++-- src/lib/routes/thermostats/simulate/simulate.ts | 7 +++++-- src/lib/routes/thermostats/thermostats.ts | 7 +++++-- .../routes/user-identities/unmanaged/unmanaged.ts | 12 +++++++----- src/lib/routes/user-identities/user-identities.ts | 12 +++++++----- src/lib/routes/webhooks/webhooks.ts | 7 +++++-- src/lib/routes/workspaces/workspaces.ts | 7 +++++-- src/lib/seam-http-request.ts | 9 +++++++++ src/lib/seam-paginator.ts | 10 +++++++--- 49 files changed, 267 insertions(+), 145 deletions(-) diff --git a/codegen/layouts/partials/route-class-endpoint-export.hbs b/codegen/layouts/partials/route-class-endpoint-export.hbs index c965957a..83a55437 100644 --- a/codegen/layouts/partials/route-class-endpoint-export.hbs +++ b/codegen/layouts/partials/route-class-endpoint-export.hbs @@ -5,7 +5,7 @@ export type {{parametersTypeName}} = {{#if requiresAtLeastOneParameter}}RequireA */ export type {{responseTypeName}} = {{#if returnsVoid}}void{{else}}{ {{json responseKey}}: {{#if responseIsList}}Array<{{responseResourceTypeName}}>{{else}}{{responseResourceTypeName}}{{/if}} }{{/if}} -export type {{requestTypeName}} = SeamHttpRequest<{{#if returnsVoid}}void, undefined{{else}}{{responseTypeName}}, '{{responseKey}}'{{/if}}{{#if hasPagination}}, true{{/if}}> +export type {{requestTypeName}} = {{#if hasPagination}}SeamPaginatedRequest<{{responseTypeName}}, '{{responseKey}}'>{{else}}SeamHttpRequest<{{#if returnsVoid}}void, undefined{{else}}{{responseTypeName}}, '{{responseKey}}'{{/if}}>{{/if}} {{#if returnsActionAttempt}} diff --git a/codegen/layouts/partials/route-class-methods.hbs b/codegen/layouts/partials/route-class-methods.hbs index 87c27f51..86ae6920 100644 --- a/codegen/layouts/partials/route-class-methods.hbs +++ b/codegen/layouts/partials/route-class-methods.hbs @@ -98,7 +98,7 @@ static fromPersonalAccessToken( } createPaginator( - request: SeamHttpRequest, + request: SeamPaginatedRequest, ): SeamPaginator { return new SeamPaginator(this, request) } diff --git a/codegen/layouts/partials/route-imports.hbs b/codegen/layouts/partials/route-imports.hbs index f1b24bf1..88002012 100644 --- a/codegen/layouts/partials/route-imports.hbs +++ b/codegen/layouts/partials/route-imports.hbs @@ -31,7 +31,10 @@ import { limitToSeamHttpRequestOptions, parseOptions } from 'lib/parse-options.js' -import { SeamHttpRequest } from 'lib/seam-http-request.js' +import { + type SeamPaginatedRequest, + SeamHttpRequest +} from 'lib/seam-http-request.js' import { SeamPaginator } from 'lib/seam-paginator.js' {{#if needsActionAttemptsImport}} diff --git a/src/lib/routes/access-codes/access-codes.ts b/src/lib/routes/access-codes/access-codes.ts index 65e57f89..fc7627a1 100644 --- a/src/lib/routes/access-codes/access-codes.ts +++ b/src/lib/routes/access-codes/access-codes.ts @@ -31,7 +31,10 @@ import { import type { RequireAtLeastOne } from 'lib/request-parameters.js' import type { AccessCode } from 'lib/resources/access-code.js' import { SeamHttpClientSessions } from 'lib/routes/client-sessions/index.js' -import { SeamHttpRequest } from 'lib/seam-http-request.js' +import { + SeamHttpRequest, + type SeamPaginatedRequest, +} from 'lib/seam-http-request.js' import { SeamPaginator } from 'lib/seam-paginator.js' import { SeamHttpAccessCodesSimulate } from './simulate/index.js' @@ -138,7 +141,7 @@ export class SeamHttpAccessCodes { } createPaginator( - request: SeamHttpRequest, + request: SeamPaginatedRequest, ): SeamPaginator { return new SeamPaginator(this, request) } @@ -662,10 +665,9 @@ export type AccessCodesListParameters = RequireAtLeastOne<{ */ export type AccessCodesListResponse = { access_codes: Array } -export type AccessCodesListRequest = SeamHttpRequest< +export type AccessCodesListRequest = SeamPaginatedRequest< AccessCodesListResponse, - 'access_codes', - true + 'access_codes' > export interface AccessCodesListOptions {} diff --git a/src/lib/routes/access-codes/simulate/simulate.ts b/src/lib/routes/access-codes/simulate/simulate.ts index af79499f..6fb9335a 100644 --- a/src/lib/routes/access-codes/simulate/simulate.ts +++ b/src/lib/routes/access-codes/simulate/simulate.ts @@ -30,7 +30,10 @@ import { } from 'lib/parse-options.js' import type { UnmanagedAccessCode } from 'lib/resources/unmanaged-access-code.js' import { SeamHttpClientSessions } from 'lib/routes/client-sessions/index.js' -import { SeamHttpRequest } from 'lib/seam-http-request.js' +import { + SeamHttpRequest, + type SeamPaginatedRequest, +} from 'lib/seam-http-request.js' import { SeamPaginator } from 'lib/seam-paginator.js' export class SeamHttpAccessCodesSimulate { @@ -134,7 +137,7 @@ export class SeamHttpAccessCodesSimulate { } createPaginator( - request: SeamHttpRequest, + request: SeamPaginatedRequest, ): SeamPaginator { return new SeamPaginator(this, request) } diff --git a/src/lib/routes/access-codes/unmanaged/unmanaged.ts b/src/lib/routes/access-codes/unmanaged/unmanaged.ts index ed8bb443..8a685851 100644 --- a/src/lib/routes/access-codes/unmanaged/unmanaged.ts +++ b/src/lib/routes/access-codes/unmanaged/unmanaged.ts @@ -31,7 +31,10 @@ import { import type { RequireAtLeastOne } from 'lib/request-parameters.js' import type { UnmanagedAccessCode } from 'lib/resources/unmanaged-access-code.js' import { SeamHttpClientSessions } from 'lib/routes/client-sessions/index.js' -import { SeamHttpRequest } from 'lib/seam-http-request.js' +import { + SeamHttpRequest, + type SeamPaginatedRequest, +} from 'lib/seam-http-request.js' import { SeamPaginator } from 'lib/seam-paginator.js' export class SeamHttpAccessCodesUnmanaged { @@ -135,7 +138,7 @@ export class SeamHttpAccessCodesUnmanaged { } createPaginator( - request: SeamHttpRequest, + request: SeamPaginatedRequest, ): SeamPaginator { return new SeamPaginator(this, request) } @@ -370,10 +373,9 @@ export type AccessCodesUnmanagedListResponse = { access_codes: Array } -export type AccessCodesUnmanagedListRequest = SeamHttpRequest< +export type AccessCodesUnmanagedListRequest = SeamPaginatedRequest< AccessCodesUnmanagedListResponse, - 'access_codes', - true + 'access_codes' > export interface AccessCodesUnmanagedListOptions {} diff --git a/src/lib/routes/access-grants/access-grants.ts b/src/lib/routes/access-grants/access-grants.ts index 209f79ea..be3600b0 100644 --- a/src/lib/routes/access-grants/access-grants.ts +++ b/src/lib/routes/access-grants/access-grants.ts @@ -32,7 +32,10 @@ import type { RequireAtLeastOne } from 'lib/request-parameters.js' import type { AccessGrant } from 'lib/resources/access-grant.js' import type { Batch } from 'lib/resources/batch.js' import { SeamHttpClientSessions } from 'lib/routes/client-sessions/index.js' -import { SeamHttpRequest } from 'lib/seam-http-request.js' +import { + SeamHttpRequest, + type SeamPaginatedRequest, +} from 'lib/seam-http-request.js' import { SeamPaginator } from 'lib/seam-paginator.js' import { SeamHttpAccessGrantsUnmanaged } from './unmanaged/index.js' @@ -138,7 +141,7 @@ export class SeamHttpAccessGrants { } createPaginator( - request: SeamHttpRequest, + request: SeamPaginatedRequest, ): SeamPaginator { return new SeamPaginator(this, request) } @@ -581,10 +584,9 @@ export type AccessGrantsListParameters = { */ export type AccessGrantsListResponse = { access_grants: Array } -export type AccessGrantsListRequest = SeamHttpRequest< +export type AccessGrantsListRequest = SeamPaginatedRequest< AccessGrantsListResponse, - 'access_grants', - true + 'access_grants' > export interface AccessGrantsListOptions {} diff --git a/src/lib/routes/access-grants/unmanaged/unmanaged.ts b/src/lib/routes/access-grants/unmanaged/unmanaged.ts index 8b757d68..50e2d5dd 100644 --- a/src/lib/routes/access-grants/unmanaged/unmanaged.ts +++ b/src/lib/routes/access-grants/unmanaged/unmanaged.ts @@ -30,7 +30,10 @@ import { } from 'lib/parse-options.js' import type { UnmanagedAccessGrant } from 'lib/resources/unmanaged-access-grant.js' import { SeamHttpClientSessions } from 'lib/routes/client-sessions/index.js' -import { SeamHttpRequest } from 'lib/seam-http-request.js' +import { + SeamHttpRequest, + type SeamPaginatedRequest, +} from 'lib/seam-http-request.js' import { SeamPaginator } from 'lib/seam-paginator.js' export class SeamHttpAccessGrantsUnmanaged { @@ -134,7 +137,7 @@ export class SeamHttpAccessGrantsUnmanaged { } createPaginator( - request: SeamHttpRequest, + request: SeamPaginatedRequest, ): SeamPaginator { return new SeamPaginator(this, request) } @@ -276,10 +279,9 @@ export type AccessGrantsUnmanagedListResponse = { access_grants: Array } -export type AccessGrantsUnmanagedListRequest = SeamHttpRequest< +export type AccessGrantsUnmanagedListRequest = SeamPaginatedRequest< AccessGrantsUnmanagedListResponse, - 'access_grants', - true + 'access_grants' > export interface AccessGrantsUnmanagedListOptions {} diff --git a/src/lib/routes/access-methods/access-methods.ts b/src/lib/routes/access-methods/access-methods.ts index e2b78586..5e3c5b26 100644 --- a/src/lib/routes/access-methods/access-methods.ts +++ b/src/lib/routes/access-methods/access-methods.ts @@ -34,7 +34,10 @@ import type { ActionAttempt } from 'lib/resources/action-attempt.js' import type { Batch } from 'lib/resources/batch.js' import { SeamHttpActionAttempts } from 'lib/routes/action-attempts/index.js' import { SeamHttpClientSessions } from 'lib/routes/client-sessions/index.js' -import { SeamHttpRequest } from 'lib/seam-http-request.js' +import { + SeamHttpRequest, + type SeamPaginatedRequest, +} from 'lib/seam-http-request.js' import { SeamPaginator } from 'lib/seam-paginator.js' import { SeamHttpAccessMethodsUnmanaged } from './unmanaged/index.js' @@ -140,7 +143,7 @@ export class SeamHttpAccessMethods { } createPaginator( - request: SeamHttpRequest, + request: SeamPaginatedRequest, ): SeamPaginator { return new SeamPaginator(this, request) } @@ -508,10 +511,9 @@ export type AccessMethodsListParameters = RequireAtLeastOne<{ */ export type AccessMethodsListResponse = { access_methods: Array } -export type AccessMethodsListRequest = SeamHttpRequest< +export type AccessMethodsListRequest = SeamPaginatedRequest< AccessMethodsListResponse, - 'access_methods', - true + 'access_methods' > export interface AccessMethodsListOptions {} diff --git a/src/lib/routes/access-methods/unmanaged/unmanaged.ts b/src/lib/routes/access-methods/unmanaged/unmanaged.ts index fa6d246a..1c9ee9ff 100644 --- a/src/lib/routes/access-methods/unmanaged/unmanaged.ts +++ b/src/lib/routes/access-methods/unmanaged/unmanaged.ts @@ -30,7 +30,10 @@ import { } from 'lib/parse-options.js' import type { UnmanagedAccessMethod } from 'lib/resources/unmanaged-access-method.js' import { SeamHttpClientSessions } from 'lib/routes/client-sessions/index.js' -import { SeamHttpRequest } from 'lib/seam-http-request.js' +import { + SeamHttpRequest, + type SeamPaginatedRequest, +} from 'lib/seam-http-request.js' import { SeamPaginator } from 'lib/seam-paginator.js' export class SeamHttpAccessMethodsUnmanaged { @@ -134,7 +137,7 @@ export class SeamHttpAccessMethodsUnmanaged { } createPaginator( - request: SeamHttpRequest, + request: SeamPaginatedRequest, ): SeamPaginator { return new SeamPaginator(this, request) } diff --git a/src/lib/routes/acs/access-groups/access-groups.ts b/src/lib/routes/acs/access-groups/access-groups.ts index 8d3b0071..bffc647b 100644 --- a/src/lib/routes/acs/access-groups/access-groups.ts +++ b/src/lib/routes/acs/access-groups/access-groups.ts @@ -32,7 +32,10 @@ import type { AcsAccessGroup } from 'lib/resources/acs-access-group.js' import type { AcsEntrance } from 'lib/resources/acs-entrance.js' import type { AcsUser } from 'lib/resources/acs-user.js' import { SeamHttpClientSessions } from 'lib/routes/client-sessions/index.js' -import { SeamHttpRequest } from 'lib/seam-http-request.js' +import { + SeamHttpRequest, + type SeamPaginatedRequest, +} from 'lib/seam-http-request.js' import { SeamPaginator } from 'lib/seam-paginator.js' export class SeamHttpAcsAccessGroups { @@ -136,7 +139,7 @@ export class SeamHttpAcsAccessGroups { } createPaginator( - request: SeamHttpRequest, + request: SeamPaginatedRequest, ): SeamPaginator { return new SeamPaginator(this, request) } diff --git a/src/lib/routes/acs/acs.ts b/src/lib/routes/acs/acs.ts index e3368cd0..8100fb68 100644 --- a/src/lib/routes/acs/acs.ts +++ b/src/lib/routes/acs/acs.ts @@ -29,7 +29,7 @@ import { parseOptions, } from 'lib/parse-options.js' import { SeamHttpClientSessions } from 'lib/routes/client-sessions/index.js' -import type { SeamHttpRequest } from 'lib/seam-http-request.js' +import type { SeamPaginatedRequest } from 'lib/seam-http-request.js' import { SeamPaginator } from 'lib/seam-paginator.js' import { SeamHttpAcsAccessGroups } from './access-groups/index.js' @@ -140,7 +140,7 @@ export class SeamHttpAcs { } createPaginator( - request: SeamHttpRequest, + request: SeamPaginatedRequest, ): SeamPaginator { return new SeamPaginator(this, request) } diff --git a/src/lib/routes/acs/credentials/credentials.ts b/src/lib/routes/acs/credentials/credentials.ts index dfaa46b7..4746c517 100644 --- a/src/lib/routes/acs/credentials/credentials.ts +++ b/src/lib/routes/acs/credentials/credentials.ts @@ -31,7 +31,10 @@ import { import type { AcsCredential } from 'lib/resources/acs-credential.js' import type { AcsEntrance } from 'lib/resources/acs-entrance.js' import { SeamHttpClientSessions } from 'lib/routes/client-sessions/index.js' -import { SeamHttpRequest } from 'lib/seam-http-request.js' +import { + SeamHttpRequest, + type SeamPaginatedRequest, +} from 'lib/seam-http-request.js' import { SeamPaginator } from 'lib/seam-paginator.js' export class SeamHttpAcsCredentials { @@ -135,7 +138,7 @@ export class SeamHttpAcsCredentials { } createPaginator( - request: SeamHttpRequest, + request: SeamPaginatedRequest, ): SeamPaginator { return new SeamPaginator(this, request) } @@ -512,10 +515,9 @@ export type AcsCredentialsListResponse = { acs_credentials: Array } -export type AcsCredentialsListRequest = SeamHttpRequest< +export type AcsCredentialsListRequest = SeamPaginatedRequest< AcsCredentialsListResponse, - 'acs_credentials', - true + 'acs_credentials' > export interface AcsCredentialsListOptions {} diff --git a/src/lib/routes/acs/encoders/encoders.ts b/src/lib/routes/acs/encoders/encoders.ts index c28c08cf..82aa8f96 100644 --- a/src/lib/routes/acs/encoders/encoders.ts +++ b/src/lib/routes/acs/encoders/encoders.ts @@ -32,7 +32,10 @@ import type { AcsEncoder } from 'lib/resources/acs-encoder.js' import type { ActionAttempt } from 'lib/resources/action-attempt.js' import { SeamHttpActionAttempts } from 'lib/routes/action-attempts/index.js' import { SeamHttpClientSessions } from 'lib/routes/client-sessions/index.js' -import { SeamHttpRequest } from 'lib/seam-http-request.js' +import { + SeamHttpRequest, + type SeamPaginatedRequest, +} from 'lib/seam-http-request.js' import { SeamPaginator } from 'lib/seam-paginator.js' import { SeamHttpAcsEncodersSimulate } from './simulate/index.js' @@ -138,7 +141,7 @@ export class SeamHttpAcsEncoders { } createPaginator( - request: SeamHttpRequest, + request: SeamPaginatedRequest, ): SeamPaginator { return new SeamPaginator(this, request) } @@ -354,10 +357,9 @@ export type AcsEncodersListParameters = { */ export type AcsEncodersListResponse = { acs_encoders: Array } -export type AcsEncodersListRequest = SeamHttpRequest< +export type AcsEncodersListRequest = SeamPaginatedRequest< AcsEncodersListResponse, - 'acs_encoders', - true + 'acs_encoders' > export interface AcsEncodersListOptions {} diff --git a/src/lib/routes/acs/encoders/simulate/simulate.ts b/src/lib/routes/acs/encoders/simulate/simulate.ts index ff58517f..2df2425c 100644 --- a/src/lib/routes/acs/encoders/simulate/simulate.ts +++ b/src/lib/routes/acs/encoders/simulate/simulate.ts @@ -29,7 +29,10 @@ import { parseOptions, } from 'lib/parse-options.js' import { SeamHttpClientSessions } from 'lib/routes/client-sessions/index.js' -import { SeamHttpRequest } from 'lib/seam-http-request.js' +import { + SeamHttpRequest, + type SeamPaginatedRequest, +} from 'lib/seam-http-request.js' import { SeamPaginator } from 'lib/seam-paginator.js' export class SeamHttpAcsEncodersSimulate { @@ -133,7 +136,7 @@ export class SeamHttpAcsEncodersSimulate { } createPaginator( - request: SeamHttpRequest, + request: SeamPaginatedRequest, ): SeamPaginator { return new SeamPaginator(this, request) } diff --git a/src/lib/routes/acs/entrances/entrances.ts b/src/lib/routes/acs/entrances/entrances.ts index 934fa158..c41eaf36 100644 --- a/src/lib/routes/acs/entrances/entrances.ts +++ b/src/lib/routes/acs/entrances/entrances.ts @@ -33,7 +33,10 @@ import type { AcsEntrance } from 'lib/resources/acs-entrance.js' import type { ActionAttempt } from 'lib/resources/action-attempt.js' import { SeamHttpActionAttempts } from 'lib/routes/action-attempts/index.js' import { SeamHttpClientSessions } from 'lib/routes/client-sessions/index.js' -import { SeamHttpRequest } from 'lib/seam-http-request.js' +import { + SeamHttpRequest, + type SeamPaginatedRequest, +} from 'lib/seam-http-request.js' import { SeamPaginator } from 'lib/seam-paginator.js' export class SeamHttpAcsEntrances { @@ -137,7 +140,7 @@ export class SeamHttpAcsEntrances { } createPaginator( - request: SeamHttpRequest, + request: SeamPaginatedRequest, ): SeamPaginator { return new SeamPaginator(this, request) } @@ -358,10 +361,9 @@ export type AcsEntrancesListParameters = { */ export type AcsEntrancesListResponse = { acs_entrances: Array } -export type AcsEntrancesListRequest = SeamHttpRequest< +export type AcsEntrancesListRequest = SeamPaginatedRequest< AcsEntrancesListResponse, - 'acs_entrances', - true + 'acs_entrances' > export interface AcsEntrancesListOptions {} diff --git a/src/lib/routes/acs/systems/systems.ts b/src/lib/routes/acs/systems/systems.ts index e00e01d4..5132a746 100644 --- a/src/lib/routes/acs/systems/systems.ts +++ b/src/lib/routes/acs/systems/systems.ts @@ -30,7 +30,10 @@ import { } from 'lib/parse-options.js' import type { AcsSystem } from 'lib/resources/acs-system.js' import { SeamHttpClientSessions } from 'lib/routes/client-sessions/index.js' -import { SeamHttpRequest } from 'lib/seam-http-request.js' +import { + SeamHttpRequest, + type SeamPaginatedRequest, +} from 'lib/seam-http-request.js' import { SeamPaginator } from 'lib/seam-paginator.js' export class SeamHttpAcsSystems { @@ -134,7 +137,7 @@ export class SeamHttpAcsSystems { } createPaginator( - request: SeamHttpRequest, + request: SeamPaginatedRequest, ): SeamPaginator { return new SeamPaginator(this, request) } diff --git a/src/lib/routes/acs/users/users.ts b/src/lib/routes/acs/users/users.ts index 73accb8c..e8040362 100644 --- a/src/lib/routes/acs/users/users.ts +++ b/src/lib/routes/acs/users/users.ts @@ -32,7 +32,10 @@ import type { RequireAtLeastOne } from 'lib/request-parameters.js' import type { AcsEntrance } from 'lib/resources/acs-entrance.js' import type { AcsUser } from 'lib/resources/acs-user.js' import { SeamHttpClientSessions } from 'lib/routes/client-sessions/index.js' -import { SeamHttpRequest } from 'lib/seam-http-request.js' +import { + SeamHttpRequest, + type SeamPaginatedRequest, +} from 'lib/seam-http-request.js' import { SeamPaginator } from 'lib/seam-paginator.js' export class SeamHttpAcsUsers { @@ -136,7 +139,7 @@ export class SeamHttpAcsUsers { } createPaginator( - request: SeamHttpRequest, + request: SeamPaginatedRequest, ): SeamPaginator { return new SeamPaginator(this, request) } @@ -543,10 +546,9 @@ export type AcsUsersListParameters = { */ export type AcsUsersListResponse = { acs_users: Array } -export type AcsUsersListRequest = SeamHttpRequest< +export type AcsUsersListRequest = SeamPaginatedRequest< AcsUsersListResponse, - 'acs_users', - true + 'acs_users' > export interface AcsUsersListOptions {} diff --git a/src/lib/routes/action-attempts/action-attempts.ts b/src/lib/routes/action-attempts/action-attempts.ts index c58a6a56..93dbe9d2 100644 --- a/src/lib/routes/action-attempts/action-attempts.ts +++ b/src/lib/routes/action-attempts/action-attempts.ts @@ -30,7 +30,10 @@ import { } from 'lib/parse-options.js' import type { ActionAttempt } from 'lib/resources/action-attempt.js' import { SeamHttpClientSessions } from 'lib/routes/client-sessions/index.js' -import { SeamHttpRequest } from 'lib/seam-http-request.js' +import { + SeamHttpRequest, + type SeamPaginatedRequest, +} from 'lib/seam-http-request.js' import { SeamPaginator } from 'lib/seam-paginator.js' export class SeamHttpActionAttempts { @@ -134,7 +137,7 @@ export class SeamHttpActionAttempts { } createPaginator( - request: SeamHttpRequest, + request: SeamPaginatedRequest, ): SeamPaginator { return new SeamPaginator(this, request) } @@ -250,10 +253,9 @@ export type ActionAttemptsListResponse = { action_attempts: Array } -export type ActionAttemptsListRequest = SeamHttpRequest< +export type ActionAttemptsListRequest = SeamPaginatedRequest< ActionAttemptsListResponse, - 'action_attempts', - true + 'action_attempts' > export interface ActionAttemptsListOptions {} diff --git a/src/lib/routes/client-sessions/client-sessions.ts b/src/lib/routes/client-sessions/client-sessions.ts index acf2fb35..98fe5669 100644 --- a/src/lib/routes/client-sessions/client-sessions.ts +++ b/src/lib/routes/client-sessions/client-sessions.ts @@ -30,7 +30,10 @@ import { } from 'lib/parse-options.js' import type { RequireAtLeastOne } from 'lib/request-parameters.js' import type { ClientSession } from 'lib/resources/client-session.js' -import { SeamHttpRequest } from 'lib/seam-http-request.js' +import { + SeamHttpRequest, + type SeamPaginatedRequest, +} from 'lib/seam-http-request.js' import { SeamPaginator } from 'lib/seam-paginator.js' export class SeamHttpClientSessions { @@ -134,7 +137,7 @@ export class SeamHttpClientSessions { } createPaginator( - request: SeamHttpRequest, + request: SeamPaginatedRequest, ): SeamPaginator { return new SeamPaginator(this, request) } diff --git a/src/lib/routes/connect-webviews/connect-webviews.ts b/src/lib/routes/connect-webviews/connect-webviews.ts index 16aea6a8..10e67704 100644 --- a/src/lib/routes/connect-webviews/connect-webviews.ts +++ b/src/lib/routes/connect-webviews/connect-webviews.ts @@ -30,7 +30,10 @@ import { } from 'lib/parse-options.js' import type { ConnectWebview } from 'lib/resources/connect-webview.js' import { SeamHttpClientSessions } from 'lib/routes/client-sessions/index.js' -import { SeamHttpRequest } from 'lib/seam-http-request.js' +import { + SeamHttpRequest, + type SeamPaginatedRequest, +} from 'lib/seam-http-request.js' import { SeamPaginator } from 'lib/seam-paginator.js' export class SeamHttpConnectWebviews { @@ -134,7 +137,7 @@ export class SeamHttpConnectWebviews { } createPaginator( - request: SeamHttpRequest, + request: SeamPaginatedRequest, ): SeamPaginator { return new SeamPaginator(this, request) } @@ -455,10 +458,9 @@ export type ConnectWebviewsListResponse = { connect_webviews: Array } -export type ConnectWebviewsListRequest = SeamHttpRequest< +export type ConnectWebviewsListRequest = SeamPaginatedRequest< ConnectWebviewsListResponse, - 'connect_webviews', - true + 'connect_webviews' > export interface ConnectWebviewsListOptions {} diff --git a/src/lib/routes/connected-accounts/connected-accounts.ts b/src/lib/routes/connected-accounts/connected-accounts.ts index 37c59df7..aef895d8 100644 --- a/src/lib/routes/connected-accounts/connected-accounts.ts +++ b/src/lib/routes/connected-accounts/connected-accounts.ts @@ -31,7 +31,10 @@ import { import type { RequireAtLeastOne } from 'lib/request-parameters.js' import type { ConnectedAccount } from 'lib/resources/connected-account.js' import { SeamHttpClientSessions } from 'lib/routes/client-sessions/index.js' -import { SeamHttpRequest } from 'lib/seam-http-request.js' +import { + SeamHttpRequest, + type SeamPaginatedRequest, +} from 'lib/seam-http-request.js' import { SeamPaginator } from 'lib/seam-paginator.js' import { SeamHttpConnectedAccountsSimulate } from './simulate/index.js' @@ -137,7 +140,7 @@ export class SeamHttpConnectedAccounts { } createPaginator( - request: SeamHttpRequest, + request: SeamPaginatedRequest, ): SeamPaginator { return new SeamPaginator(this, request) } @@ -348,10 +351,9 @@ export type ConnectedAccountsListResponse = { connected_accounts: Array } -export type ConnectedAccountsListRequest = SeamHttpRequest< +export type ConnectedAccountsListRequest = SeamPaginatedRequest< ConnectedAccountsListResponse, - 'connected_accounts', - true + 'connected_accounts' > export interface ConnectedAccountsListOptions {} diff --git a/src/lib/routes/connected-accounts/simulate/simulate.ts b/src/lib/routes/connected-accounts/simulate/simulate.ts index 313e2913..a1aea11c 100644 --- a/src/lib/routes/connected-accounts/simulate/simulate.ts +++ b/src/lib/routes/connected-accounts/simulate/simulate.ts @@ -29,7 +29,10 @@ import { parseOptions, } from 'lib/parse-options.js' import { SeamHttpClientSessions } from 'lib/routes/client-sessions/index.js' -import { SeamHttpRequest } from 'lib/seam-http-request.js' +import { + SeamHttpRequest, + type SeamPaginatedRequest, +} from 'lib/seam-http-request.js' import { SeamPaginator } from 'lib/seam-paginator.js' export class SeamHttpConnectedAccountsSimulate { @@ -136,7 +139,7 @@ export class SeamHttpConnectedAccountsSimulate { } createPaginator( - request: SeamHttpRequest, + request: SeamPaginatedRequest, ): SeamPaginator { return new SeamPaginator(this, request) } diff --git a/src/lib/routes/customers/customers.ts b/src/lib/routes/customers/customers.ts index 6198dd2c..47e862fc 100644 --- a/src/lib/routes/customers/customers.ts +++ b/src/lib/routes/customers/customers.ts @@ -30,7 +30,10 @@ import { } from 'lib/parse-options.js' import type { CustomerPortal } from 'lib/resources/customer-portal.js' import { SeamHttpClientSessions } from 'lib/routes/client-sessions/index.js' -import { SeamHttpRequest } from 'lib/seam-http-request.js' +import { + SeamHttpRequest, + type SeamPaginatedRequest, +} from 'lib/seam-http-request.js' import { SeamPaginator } from 'lib/seam-paginator.js' export class SeamHttpCustomers { @@ -134,7 +137,7 @@ export class SeamHttpCustomers { } createPaginator( - request: SeamHttpRequest, + request: SeamPaginatedRequest, ): SeamPaginator { return new SeamPaginator(this, request) } diff --git a/src/lib/routes/devices/devices.ts b/src/lib/routes/devices/devices.ts index 71aa5e08..38f6b4fc 100644 --- a/src/lib/routes/devices/devices.ts +++ b/src/lib/routes/devices/devices.ts @@ -32,7 +32,10 @@ import type { RequireAtLeastOne } from 'lib/request-parameters.js' import type { Device } from 'lib/resources/device.js' import type { DeviceProvider } from 'lib/resources/device-provider.js' import { SeamHttpClientSessions } from 'lib/routes/client-sessions/index.js' -import { SeamHttpRequest } from 'lib/seam-http-request.js' +import { + SeamHttpRequest, + type SeamPaginatedRequest, +} from 'lib/seam-http-request.js' import { SeamPaginator } from 'lib/seam-paginator.js' import { SeamHttpDevicesSimulate } from './simulate/index.js' @@ -139,7 +142,7 @@ export class SeamHttpDevices { } createPaginator( - request: SeamHttpRequest, + request: SeamPaginatedRequest, ): SeamPaginator { return new SeamPaginator(this, request) } @@ -511,10 +514,9 @@ export type DevicesListParameters = { */ export type DevicesListResponse = { devices: Array } -export type DevicesListRequest = SeamHttpRequest< +export type DevicesListRequest = SeamPaginatedRequest< DevicesListResponse, - 'devices', - true + 'devices' > export interface DevicesListOptions {} diff --git a/src/lib/routes/devices/simulate/simulate.ts b/src/lib/routes/devices/simulate/simulate.ts index aa88999a..0db900e8 100644 --- a/src/lib/routes/devices/simulate/simulate.ts +++ b/src/lib/routes/devices/simulate/simulate.ts @@ -29,7 +29,10 @@ import { parseOptions, } from 'lib/parse-options.js' import { SeamHttpClientSessions } from 'lib/routes/client-sessions/index.js' -import { SeamHttpRequest } from 'lib/seam-http-request.js' +import { + SeamHttpRequest, + type SeamPaginatedRequest, +} from 'lib/seam-http-request.js' import { SeamPaginator } from 'lib/seam-paginator.js' export class SeamHttpDevicesSimulate { @@ -133,7 +136,7 @@ export class SeamHttpDevicesSimulate { } createPaginator( - request: SeamHttpRequest, + request: SeamPaginatedRequest, ): SeamPaginator { return new SeamPaginator(this, request) } diff --git a/src/lib/routes/devices/unmanaged/unmanaged.ts b/src/lib/routes/devices/unmanaged/unmanaged.ts index 81afbb68..a6e4647b 100644 --- a/src/lib/routes/devices/unmanaged/unmanaged.ts +++ b/src/lib/routes/devices/unmanaged/unmanaged.ts @@ -31,7 +31,10 @@ import { import type { RequireAtLeastOne } from 'lib/request-parameters.js' import type { UnmanagedDevice } from 'lib/resources/unmanaged-device.js' import { SeamHttpClientSessions } from 'lib/routes/client-sessions/index.js' -import { SeamHttpRequest } from 'lib/seam-http-request.js' +import { + SeamHttpRequest, + type SeamPaginatedRequest, +} from 'lib/seam-http-request.js' import { SeamPaginator } from 'lib/seam-paginator.js' export class SeamHttpDevicesUnmanaged { @@ -135,7 +138,7 @@ export class SeamHttpDevicesUnmanaged { } createPaginator( - request: SeamHttpRequest, + request: SeamPaginatedRequest, ): SeamPaginator { return new SeamPaginator(this, request) } @@ -448,10 +451,9 @@ export type DevicesUnmanagedListParameters = { */ export type DevicesUnmanagedListResponse = { devices: Array } -export type DevicesUnmanagedListRequest = SeamHttpRequest< +export type DevicesUnmanagedListRequest = SeamPaginatedRequest< DevicesUnmanagedListResponse, - 'devices', - true + 'devices' > export interface DevicesUnmanagedListOptions {} diff --git a/src/lib/routes/events/events.ts b/src/lib/routes/events/events.ts index f39f008c..def01ec6 100644 --- a/src/lib/routes/events/events.ts +++ b/src/lib/routes/events/events.ts @@ -31,7 +31,10 @@ import { import type { RequireAtLeastOne } from 'lib/request-parameters.js' import type { SeamEvent } from 'lib/resources/event.js' import { SeamHttpClientSessions } from 'lib/routes/client-sessions/index.js' -import { SeamHttpRequest } from 'lib/seam-http-request.js' +import { + SeamHttpRequest, + type SeamPaginatedRequest, +} from 'lib/seam-http-request.js' import { SeamPaginator } from 'lib/seam-paginator.js' export class SeamHttpEvents { @@ -135,7 +138,7 @@ export class SeamHttpEvents { } createPaginator( - request: SeamHttpRequest, + request: SeamPaginatedRequest, ): SeamPaginator { return new SeamPaginator(this, request) } diff --git a/src/lib/routes/instant-keys/instant-keys.ts b/src/lib/routes/instant-keys/instant-keys.ts index a1c5a709..fa7d85b9 100644 --- a/src/lib/routes/instant-keys/instant-keys.ts +++ b/src/lib/routes/instant-keys/instant-keys.ts @@ -31,7 +31,10 @@ import { import type { RequireAtLeastOne } from 'lib/request-parameters.js' import type { InstantKey } from 'lib/resources/instant-key.js' import { SeamHttpClientSessions } from 'lib/routes/client-sessions/index.js' -import { SeamHttpRequest } from 'lib/seam-http-request.js' +import { + SeamHttpRequest, + type SeamPaginatedRequest, +} from 'lib/seam-http-request.js' import { SeamPaginator } from 'lib/seam-paginator.js' export class SeamHttpInstantKeys { @@ -135,7 +138,7 @@ export class SeamHttpInstantKeys { } createPaginator( - request: SeamHttpRequest, + request: SeamPaginatedRequest, ): SeamPaginator { return new SeamPaginator(this, request) } diff --git a/src/lib/routes/locks/locks.ts b/src/lib/routes/locks/locks.ts index 635d1774..74270b34 100644 --- a/src/lib/routes/locks/locks.ts +++ b/src/lib/routes/locks/locks.ts @@ -33,7 +33,10 @@ import type { ActionAttempt } from 'lib/resources/action-attempt.js' import type { Device } from 'lib/resources/device.js' import { SeamHttpActionAttempts } from 'lib/routes/action-attempts/index.js' import { SeamHttpClientSessions } from 'lib/routes/client-sessions/index.js' -import { SeamHttpRequest } from 'lib/seam-http-request.js' +import { + SeamHttpRequest, + type SeamPaginatedRequest, +} from 'lib/seam-http-request.js' import { SeamPaginator } from 'lib/seam-paginator.js' import { SeamHttpLocksSimulate } from './simulate/index.js' @@ -139,7 +142,7 @@ export class SeamHttpLocks { } createPaginator( - request: SeamHttpRequest, + request: SeamPaginatedRequest, ): SeamPaginator { return new SeamPaginator(this, request) } diff --git a/src/lib/routes/locks/simulate/simulate.ts b/src/lib/routes/locks/simulate/simulate.ts index 8dfa9d9a..d77fb40a 100644 --- a/src/lib/routes/locks/simulate/simulate.ts +++ b/src/lib/routes/locks/simulate/simulate.ts @@ -31,7 +31,10 @@ import { import type { ActionAttempt } from 'lib/resources/action-attempt.js' import { SeamHttpActionAttempts } from 'lib/routes/action-attempts/index.js' import { SeamHttpClientSessions } from 'lib/routes/client-sessions/index.js' -import { SeamHttpRequest } from 'lib/seam-http-request.js' +import { + SeamHttpRequest, + type SeamPaginatedRequest, +} from 'lib/seam-http-request.js' import { SeamPaginator } from 'lib/seam-paginator.js' export class SeamHttpLocksSimulate { @@ -135,7 +138,7 @@ export class SeamHttpLocksSimulate { } createPaginator( - request: SeamHttpRequest, + request: SeamPaginatedRequest, ): SeamPaginator { return new SeamPaginator(this, request) } diff --git a/src/lib/routes/noise-sensors/noise-sensors.ts b/src/lib/routes/noise-sensors/noise-sensors.ts index 033e9923..bdd8486c 100644 --- a/src/lib/routes/noise-sensors/noise-sensors.ts +++ b/src/lib/routes/noise-sensors/noise-sensors.ts @@ -30,7 +30,10 @@ import { } from 'lib/parse-options.js' import type { Device } from 'lib/resources/device.js' import { SeamHttpClientSessions } from 'lib/routes/client-sessions/index.js' -import { SeamHttpRequest } from 'lib/seam-http-request.js' +import { + SeamHttpRequest, + type SeamPaginatedRequest, +} from 'lib/seam-http-request.js' import { SeamPaginator } from 'lib/seam-paginator.js' import { SeamHttpNoiseSensorsNoiseThresholds } from './noise-thresholds/index.js' @@ -137,7 +140,7 @@ export class SeamHttpNoiseSensors { } createPaginator( - request: SeamHttpRequest, + request: SeamPaginatedRequest, ): SeamPaginator { return new SeamPaginator(this, request) } 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 a0536d8b..27841382 100644 --- a/src/lib/routes/noise-sensors/noise-thresholds/noise-thresholds.ts +++ b/src/lib/routes/noise-sensors/noise-thresholds/noise-thresholds.ts @@ -30,7 +30,10 @@ import { } from 'lib/parse-options.js' import type { NoiseThreshold } from 'lib/resources/noise-threshold.js' import { SeamHttpClientSessions } from 'lib/routes/client-sessions/index.js' -import { SeamHttpRequest } from 'lib/seam-http-request.js' +import { + SeamHttpRequest, + type SeamPaginatedRequest, +} from 'lib/seam-http-request.js' import { SeamPaginator } from 'lib/seam-paginator.js' export class SeamHttpNoiseSensorsNoiseThresholds { @@ -137,7 +140,7 @@ export class SeamHttpNoiseSensorsNoiseThresholds { } createPaginator( - request: SeamHttpRequest, + request: SeamPaginatedRequest, ): SeamPaginator { return new SeamPaginator(this, request) } diff --git a/src/lib/routes/noise-sensors/simulate/simulate.ts b/src/lib/routes/noise-sensors/simulate/simulate.ts index 7f937bf5..6c3cc527 100644 --- a/src/lib/routes/noise-sensors/simulate/simulate.ts +++ b/src/lib/routes/noise-sensors/simulate/simulate.ts @@ -29,7 +29,10 @@ import { parseOptions, } from 'lib/parse-options.js' import { SeamHttpClientSessions } from 'lib/routes/client-sessions/index.js' -import { SeamHttpRequest } from 'lib/seam-http-request.js' +import { + SeamHttpRequest, + type SeamPaginatedRequest, +} from 'lib/seam-http-request.js' import { SeamPaginator } from 'lib/seam-paginator.js' export class SeamHttpNoiseSensorsSimulate { @@ -133,7 +136,7 @@ export class SeamHttpNoiseSensorsSimulate { } createPaginator( - request: SeamHttpRequest, + request: SeamPaginatedRequest, ): SeamPaginator { return new SeamPaginator(this, request) } diff --git a/src/lib/routes/phones/phones.ts b/src/lib/routes/phones/phones.ts index 163fad1e..2aa4aa51 100644 --- a/src/lib/routes/phones/phones.ts +++ b/src/lib/routes/phones/phones.ts @@ -30,7 +30,10 @@ import { } from 'lib/parse-options.js' import type { Phone } from 'lib/resources/phone.js' import { SeamHttpClientSessions } from 'lib/routes/client-sessions/index.js' -import { SeamHttpRequest } from 'lib/seam-http-request.js' +import { + SeamHttpRequest, + type SeamPaginatedRequest, +} from 'lib/seam-http-request.js' import { SeamPaginator } from 'lib/seam-paginator.js' import { SeamHttpPhonesSimulate } from './simulate/index.js' @@ -136,7 +139,7 @@ export class SeamHttpPhones { } createPaginator( - request: SeamHttpRequest, + request: SeamPaginatedRequest, ): SeamPaginator { return new SeamPaginator(this, request) } diff --git a/src/lib/routes/phones/simulate/simulate.ts b/src/lib/routes/phones/simulate/simulate.ts index 0bf1833f..5c9a716e 100644 --- a/src/lib/routes/phones/simulate/simulate.ts +++ b/src/lib/routes/phones/simulate/simulate.ts @@ -30,7 +30,10 @@ import { } from 'lib/parse-options.js' import type { Phone } from 'lib/resources/phone.js' import { SeamHttpClientSessions } from 'lib/routes/client-sessions/index.js' -import { SeamHttpRequest } from 'lib/seam-http-request.js' +import { + SeamHttpRequest, + type SeamPaginatedRequest, +} from 'lib/seam-http-request.js' import { SeamPaginator } from 'lib/seam-paginator.js' export class SeamHttpPhonesSimulate { @@ -134,7 +137,7 @@ export class SeamHttpPhonesSimulate { } createPaginator( - request: SeamHttpRequest, + request: SeamPaginatedRequest, ): SeamPaginator { return new SeamPaginator(this, request) } diff --git a/src/lib/routes/seam-http-endpoints.ts b/src/lib/routes/seam-http-endpoints.ts index 83761274..3d5b2f08 100644 --- a/src/lib/routes/seam-http-endpoints.ts +++ b/src/lib/routes/seam-http-endpoints.ts @@ -28,7 +28,7 @@ import { limitToSeamHttpRequestOptions, parseOptions, } from 'lib/parse-options.js' -import type { SeamHttpRequest } from 'lib/seam-http-request.js' +import type { SeamPaginatedRequest } from 'lib/seam-http-request.js' import { SeamPaginator } from 'lib/seam-paginator.js' import { @@ -862,7 +862,7 @@ export class SeamHttpEndpoints { } createPaginator( - request: SeamHttpRequest, + request: SeamPaginatedRequest, ): SeamPaginator { return new SeamPaginator(this, request) } diff --git a/src/lib/routes/seam-http.ts b/src/lib/routes/seam-http.ts index 862382c5..16d2311e 100644 --- a/src/lib/routes/seam-http.ts +++ b/src/lib/routes/seam-http.ts @@ -28,7 +28,7 @@ import { limitToSeamHttpRequestOptions, parseOptions, } from 'lib/parse-options.js' -import type { SeamHttpRequest } from 'lib/seam-http-request.js' +import type { SeamPaginatedRequest } from 'lib/seam-http-request.js' import { SeamPaginator } from 'lib/seam-paginator.js' import { SeamHttpAccessCodes } from './access-codes/index.js' @@ -153,7 +153,7 @@ export class SeamHttp { } createPaginator( - request: SeamHttpRequest, + request: SeamPaginatedRequest, ): SeamPaginator { return new SeamPaginator(this, request) } diff --git a/src/lib/routes/spaces/spaces.ts b/src/lib/routes/spaces/spaces.ts index dcdcf280..de0c7472 100644 --- a/src/lib/routes/spaces/spaces.ts +++ b/src/lib/routes/spaces/spaces.ts @@ -32,7 +32,10 @@ import type { RequireAtLeastOne } from 'lib/request-parameters.js' import type { Batch } from 'lib/resources/batch.js' import type { Space } from 'lib/resources/space.js' import { SeamHttpClientSessions } from 'lib/routes/client-sessions/index.js' -import { SeamHttpRequest } from 'lib/seam-http-request.js' +import { + SeamHttpRequest, + type SeamPaginatedRequest, +} from 'lib/seam-http-request.js' import { SeamPaginator } from 'lib/seam-paginator.js' export class SeamHttpSpaces { @@ -136,7 +139,7 @@ export class SeamHttpSpaces { } createPaginator( - request: SeamHttpRequest, + request: SeamPaginatedRequest, ): SeamPaginator { return new SeamPaginator(this, request) } @@ -630,10 +633,9 @@ export type SpacesListParameters = { */ export type SpacesListResponse = { spaces: Array } -export type SpacesListRequest = SeamHttpRequest< +export type SpacesListRequest = SeamPaginatedRequest< SpacesListResponse, - 'spaces', - true + 'spaces' > export interface SpacesListOptions {} diff --git a/src/lib/routes/thermostats/daily-programs/daily-programs.ts b/src/lib/routes/thermostats/daily-programs/daily-programs.ts index af9b77e7..419a1e24 100644 --- a/src/lib/routes/thermostats/daily-programs/daily-programs.ts +++ b/src/lib/routes/thermostats/daily-programs/daily-programs.ts @@ -32,7 +32,10 @@ import type { ActionAttempt } from 'lib/resources/action-attempt.js' import type { ThermostatDailyProgram } from 'lib/resources/thermostat-daily-program.js' import { SeamHttpActionAttempts } from 'lib/routes/action-attempts/index.js' import { SeamHttpClientSessions } from 'lib/routes/client-sessions/index.js' -import { SeamHttpRequest } from 'lib/seam-http-request.js' +import { + SeamHttpRequest, + type SeamPaginatedRequest, +} from 'lib/seam-http-request.js' import { SeamPaginator } from 'lib/seam-paginator.js' export class SeamHttpThermostatsDailyPrograms { @@ -139,7 +142,7 @@ export class SeamHttpThermostatsDailyPrograms { } createPaginator( - request: SeamHttpRequest, + request: SeamPaginatedRequest, ): SeamPaginator { return new SeamPaginator(this, request) } diff --git a/src/lib/routes/thermostats/schedules/schedules.ts b/src/lib/routes/thermostats/schedules/schedules.ts index 732c1fe8..e974ef40 100644 --- a/src/lib/routes/thermostats/schedules/schedules.ts +++ b/src/lib/routes/thermostats/schedules/schedules.ts @@ -30,7 +30,10 @@ import { } from 'lib/parse-options.js' import type { ThermostatSchedule } from 'lib/resources/thermostat-schedule.js' import { SeamHttpClientSessions } from 'lib/routes/client-sessions/index.js' -import { SeamHttpRequest } from 'lib/seam-http-request.js' +import { + SeamHttpRequest, + type SeamPaginatedRequest, +} from 'lib/seam-http-request.js' import { SeamPaginator } from 'lib/seam-paginator.js' export class SeamHttpThermostatsSchedules { @@ -134,7 +137,7 @@ export class SeamHttpThermostatsSchedules { } createPaginator( - request: SeamHttpRequest, + request: SeamPaginatedRequest, ): SeamPaginator { return new SeamPaginator(this, request) } diff --git a/src/lib/routes/thermostats/simulate/simulate.ts b/src/lib/routes/thermostats/simulate/simulate.ts index 9b085c61..8d937156 100644 --- a/src/lib/routes/thermostats/simulate/simulate.ts +++ b/src/lib/routes/thermostats/simulate/simulate.ts @@ -29,7 +29,10 @@ import { parseOptions, } from 'lib/parse-options.js' import { SeamHttpClientSessions } from 'lib/routes/client-sessions/index.js' -import { SeamHttpRequest } from 'lib/seam-http-request.js' +import { + SeamHttpRequest, + type SeamPaginatedRequest, +} from 'lib/seam-http-request.js' import { SeamPaginator } from 'lib/seam-paginator.js' export class SeamHttpThermostatsSimulate { @@ -133,7 +136,7 @@ export class SeamHttpThermostatsSimulate { } createPaginator( - request: SeamHttpRequest, + request: SeamPaginatedRequest, ): SeamPaginator { return new SeamPaginator(this, request) } diff --git a/src/lib/routes/thermostats/thermostats.ts b/src/lib/routes/thermostats/thermostats.ts index 142a040c..2bee9ad2 100644 --- a/src/lib/routes/thermostats/thermostats.ts +++ b/src/lib/routes/thermostats/thermostats.ts @@ -32,7 +32,10 @@ import type { ActionAttempt } from 'lib/resources/action-attempt.js' import type { Device } from 'lib/resources/device.js' import { SeamHttpActionAttempts } from 'lib/routes/action-attempts/index.js' import { SeamHttpClientSessions } from 'lib/routes/client-sessions/index.js' -import { SeamHttpRequest } from 'lib/seam-http-request.js' +import { + SeamHttpRequest, + type SeamPaginatedRequest, +} from 'lib/seam-http-request.js' import { SeamPaginator } from 'lib/seam-paginator.js' import { SeamHttpThermostatsDailyPrograms } from './daily-programs/index.js' @@ -140,7 +143,7 @@ export class SeamHttpThermostats { } createPaginator( - request: SeamHttpRequest, + request: SeamPaginatedRequest, ): SeamPaginator { return new SeamPaginator(this, request) } diff --git a/src/lib/routes/user-identities/unmanaged/unmanaged.ts b/src/lib/routes/user-identities/unmanaged/unmanaged.ts index 49d57ece..da8df4f2 100644 --- a/src/lib/routes/user-identities/unmanaged/unmanaged.ts +++ b/src/lib/routes/user-identities/unmanaged/unmanaged.ts @@ -30,7 +30,10 @@ import { } from 'lib/parse-options.js' import type { UnmanagedUserIdentity } from 'lib/resources/unmanaged-user-identity.js' import { SeamHttpClientSessions } from 'lib/routes/client-sessions/index.js' -import { SeamHttpRequest } from 'lib/seam-http-request.js' +import { + SeamHttpRequest, + type SeamPaginatedRequest, +} from 'lib/seam-http-request.js' import { SeamPaginator } from 'lib/seam-paginator.js' export class SeamHttpUserIdentitiesUnmanaged { @@ -137,7 +140,7 @@ export class SeamHttpUserIdentitiesUnmanaged { } createPaginator( - request: SeamHttpRequest, + request: SeamPaginatedRequest, ): SeamPaginator { return new SeamPaginator(this, request) } @@ -269,10 +272,9 @@ export type UserIdentitiesUnmanagedListResponse = { user_identities: Array } -export type UserIdentitiesUnmanagedListRequest = SeamHttpRequest< +export type UserIdentitiesUnmanagedListRequest = SeamPaginatedRequest< UserIdentitiesUnmanagedListResponse, - 'user_identities', - true + 'user_identities' > export interface UserIdentitiesUnmanagedListOptions {} diff --git a/src/lib/routes/user-identities/user-identities.ts b/src/lib/routes/user-identities/user-identities.ts index d9ef5fec..8ce9a999 100644 --- a/src/lib/routes/user-identities/user-identities.ts +++ b/src/lib/routes/user-identities/user-identities.ts @@ -36,7 +36,10 @@ import type { Device } from 'lib/resources/device.js' import type { InstantKey } from 'lib/resources/instant-key.js' import type { UserIdentity } from 'lib/resources/user-identity.js' import { SeamHttpClientSessions } from 'lib/routes/client-sessions/index.js' -import { SeamHttpRequest } from 'lib/seam-http-request.js' +import { + SeamHttpRequest, + type SeamPaginatedRequest, +} from 'lib/seam-http-request.js' import { SeamPaginator } from 'lib/seam-paginator.js' import { SeamHttpUserIdentitiesUnmanaged } from './unmanaged/index.js' @@ -142,7 +145,7 @@ export class SeamHttpUserIdentities { } createPaginator( - request: SeamHttpRequest, + request: SeamPaginatedRequest, ): SeamPaginator { return new SeamPaginator(this, request) } @@ -651,10 +654,9 @@ export type UserIdentitiesListResponse = { user_identities: Array } -export type UserIdentitiesListRequest = SeamHttpRequest< +export type UserIdentitiesListRequest = SeamPaginatedRequest< UserIdentitiesListResponse, - 'user_identities', - true + 'user_identities' > export interface UserIdentitiesListOptions {} diff --git a/src/lib/routes/webhooks/webhooks.ts b/src/lib/routes/webhooks/webhooks.ts index d34cdb51..8695a64d 100644 --- a/src/lib/routes/webhooks/webhooks.ts +++ b/src/lib/routes/webhooks/webhooks.ts @@ -30,7 +30,10 @@ import { } from 'lib/parse-options.js' import type { Webhook } from 'lib/resources/webhook.js' import { SeamHttpClientSessions } from 'lib/routes/client-sessions/index.js' -import { SeamHttpRequest } from 'lib/seam-http-request.js' +import { + SeamHttpRequest, + type SeamPaginatedRequest, +} from 'lib/seam-http-request.js' import { SeamPaginator } from 'lib/seam-paginator.js' export class SeamHttpWebhooks { @@ -134,7 +137,7 @@ export class SeamHttpWebhooks { } createPaginator( - request: SeamHttpRequest, + request: SeamPaginatedRequest, ): SeamPaginator { return new SeamPaginator(this, request) } diff --git a/src/lib/routes/workspaces/workspaces.ts b/src/lib/routes/workspaces/workspaces.ts index 5f4d1291..b47cf225 100644 --- a/src/lib/routes/workspaces/workspaces.ts +++ b/src/lib/routes/workspaces/workspaces.ts @@ -32,7 +32,10 @@ import type { ActionAttempt } from 'lib/resources/action-attempt.js' import type { Workspace } from 'lib/resources/workspace.js' import { SeamHttpActionAttempts } from 'lib/routes/action-attempts/index.js' import { SeamHttpClientSessions } from 'lib/routes/client-sessions/index.js' -import { SeamHttpRequest } from 'lib/seam-http-request.js' +import { + SeamHttpRequest, + type SeamPaginatedRequest, +} from 'lib/seam-http-request.js' import { SeamPaginator } from 'lib/seam-paginator.js' export class SeamHttpWorkspaces { @@ -136,7 +139,7 @@ export class SeamHttpWorkspaces { } createPaginator( - request: SeamHttpRequest, + request: SeamPaginatedRequest, ): SeamPaginator { return new SeamPaginator(this, request) } diff --git a/src/lib/seam-http-request.ts b/src/lib/seam-http-request.ts index 76a5707e..4cd4960d 100644 --- a/src/lib/seam-http-request.ts +++ b/src/lib/seam-http-request.ts @@ -257,6 +257,15 @@ export class SeamHttpRequest< } } +/** + * A SeamHttpRequest for an endpoint that supports pagination. + * Only these requests are accepted by `createPaginator`. + */ +export type SeamPaginatedRequest< + TResponse, + TResponseKey extends keyof TResponse | undefined, +> = SeamHttpRequest + /** * Reads the response data at the response key, * throwing a {@link SeamHttpInvalidResponseError} for a success response diff --git a/src/lib/seam-paginator.ts b/src/lib/seam-paginator.ts index 5052ac27..bb9f78df 100644 --- a/src/lib/seam-paginator.ts +++ b/src/lib/seam-paginator.ts @@ -1,7 +1,11 @@ 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' +import { + readResponseData, + SeamHttpRequest, + type SeamPaginatedRequest, +} from './seam-http-request.js' interface SeamPaginatorParent { readonly client: Client @@ -34,12 +38,12 @@ export class SeamPaginator< const TResponse, const TResponseKey extends keyof TResponse, > implements AsyncIterable> { - readonly #request: SeamHttpRequest + readonly #request: SeamPaginatedRequest readonly #parent: SeamPaginatorParent constructor( parent: SeamPaginatorParent, - request: SeamHttpRequest, + request: SeamPaginatedRequest, ) { if (!request.hasPagination) { throw new Error( From 6eaf6ee815d0cfe9e2c6545906f605bb49f64bc7 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 24 Aug 2026 23:29:58 +0000 Subject: [PATCH 3/3] docs: Trim the SeamPaginatedRequest doc Co-Authored-By: Claude Claude-Session: https://claude.ai/code/session_01B8xeJm2Hd923k8uo6eoFd2 --- src/lib/seam-http-request.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/lib/seam-http-request.ts b/src/lib/seam-http-request.ts index 4cd4960d..e0b0ea4e 100644 --- a/src/lib/seam-http-request.ts +++ b/src/lib/seam-http-request.ts @@ -259,7 +259,6 @@ export class SeamHttpRequest< /** * A SeamHttpRequest for an endpoint that supports pagination. - * Only these requests are accepted by `createPaginator`. */ export type SeamPaginatedRequest< TResponse,