From 52d1d7cf698576c87f1e6c98be31ec112dd553c5 Mon Sep 17 00:00:00 2001 From: Evan Sosenko Date: Wed, 18 Jun 2025 17:14:22 -0700 Subject: [PATCH 1/2] fix: Remove workaround for semantic method --- codegen/lib/layouts/route.ts | 30 +++++------------------------- package-lock.json | 16 ++++++++-------- package.json | 4 ++-- 3 files changed, 15 insertions(+), 35 deletions(-) diff --git a/codegen/lib/layouts/route.ts b/codegen/lib/layouts/route.ts index 0edc34ad..76ec54b4 100644 --- a/codegen/lib/layouts/route.ts +++ b/codegen/lib/layouts/route.ts @@ -77,7 +77,11 @@ const getEndpointLayoutContext = ( ): EndpointLayoutContext => { const prefix = pascalCase([route.path.split('/'), endpoint.name].join('_')) - const methodParamName = getMethodParamName(endpoint.name, route.name) + const methodParamName = ['GET', 'DELETE'].includes( + endpoint.request.semanticMethod, + ) + ? 'params' + : 'body' const requestFormat = ['GET', 'DELETE'].includes( endpoint.request.preferredMethod, @@ -127,27 +131,3 @@ const getResponseContext = ( const getClassName = (name: string | null): string => `SeamHttp${pascalCase(name ?? '')}` - -const getMethodParamName = ( - endpointName: string, - routeName: string, -): 'params' | 'body' => { - // UPSTREAM: This function implements a workaround, as the request format should always follow the semantic method. - // Blocked on https://github.com/seamapi/nextlove/issues/117 - // and https://github.com/seamapi/javascript-http/issues/43 - // - // The desired implementation: - // - // return ['GET', 'DELETE'].includes(endpoint.request.semanticMethod) - // ? 'params' - // : 'body' - - if (routeName.includes('simulate')) return 'body' - if (['get', 'list', 'view'].includes(endpointName)) return 'params' - if (['delete'].includes(endpointName)) return 'params' - if (endpointName.includes('revoke')) return 'params' - if (endpointName.includes('remove')) return 'params' - if (endpointName.includes('deactivate')) return 'params' - if (endpointName.startsWith('list')) return 'params' - return 'body' -} diff --git a/package-lock.json b/package-lock.json index 42d19e03..7038464c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,10 +14,10 @@ "axios-retry": "^4.4.2" }, "devDependencies": { - "@seamapi/blueprint": "^0.48.1", + "@seamapi/blueprint": "^0.50.1", "@seamapi/fake-seam-connect": "^1.77.0", "@seamapi/smith": "^0.4.4", - "@seamapi/types": "1.413.0", + "@seamapi/types": "1.420.2", "@swc/core": "^1.11.29", "@types/eslint": "^8.44.2", "@types/jsonwebtoken": "^9.0.6", @@ -1123,9 +1123,9 @@ "peer": true }, "node_modules/@seamapi/blueprint": { - "version": "0.48.1", - "resolved": "https://registry.npmjs.org/@seamapi/blueprint/-/blueprint-0.48.1.tgz", - "integrity": "sha512-daw8hxImyPHKDBVEH8SFbQMXTVhPXqrKZQRd6GNHiM/q0L6dmmhGaoQ1OrDtO6kwf3XcSZTQkYAYz1i8LEAK3w==", + "version": "0.50.1", + "resolved": "https://registry.npmjs.org/@seamapi/blueprint/-/blueprint-0.50.1.tgz", + "integrity": "sha512-EvSOSmN7+o5IYP+KJyVhkt/AyTe13iGKUjcyAzg/5kTPd1W2P88QKF02L1/zmcEpaqM18w7rLrROOYXVS3UXzw==", "dev": true, "license": "MIT", "dependencies": { @@ -1207,9 +1207,9 @@ } }, "node_modules/@seamapi/types": { - "version": "1.413.0", - "resolved": "https://registry.npmjs.org/@seamapi/types/-/types-1.413.0.tgz", - "integrity": "sha512-oNesrHvS1zuxd89YNGhqWG76W2KWl0S9jDfDiVtvWxbyB91PUK3rVpntoK3P0l0HBFMV8E9Vghhmmvo/FLV70Q==", + "version": "1.420.2", + "resolved": "https://registry.npmjs.org/@seamapi/types/-/types-1.420.2.tgz", + "integrity": "sha512-3W6YwDWIUsfwvEzzF6HuDNryqSqtywoGvi+zfLf9Js/wh88A3DKXYOmwamGWLus2L6vTp28F4aipcu5uNQndow==", "dev": true, "license": "MIT", "engines": { diff --git a/package.json b/package.json index 7ea2375a..346863c2 100644 --- a/package.json +++ b/package.json @@ -98,10 +98,10 @@ "axios-retry": "^4.4.2" }, "devDependencies": { - "@seamapi/blueprint": "^0.48.1", + "@seamapi/blueprint": "^0.50.1", "@seamapi/fake-seam-connect": "^1.77.0", "@seamapi/smith": "^0.4.4", - "@seamapi/types": "1.413.0", + "@seamapi/types": "1.420.2", "@swc/core": "^1.11.29", "@types/eslint": "^8.44.2", "@types/jsonwebtoken": "^9.0.6", From ca30b93d3425f43f4fe3939146f91d02174850d6 Mon Sep 17 00:00:00 2001 From: Seam Bot Date: Thu, 19 Jun 2025 00:16:18 +0000 Subject: [PATCH 2/2] ci: Generate code --- package-lock.json | 2 +- package.json | 2 +- .../connect/routes/access-codes/access-codes.ts | 6 +++--- .../routes/access-grants/access-grants.ts | 17 +++++++++++++++++ .../routes/acs/credentials/credentials.ts | 13 +++++++++---- .../connect/routes/acs/encoders/encoders.ts | 12 ++++++++---- src/lib/seam/connect/routes/acs/users/users.ts | 6 +++--- .../routes/client-sessions/client-sessions.ts | 8 +++----- .../connected-accounts/connected-accounts.ts | 12 ++++++++---- .../connect/routes/devices/simulate/simulate.ts | 8 +++++--- .../connect/routes/phones/simulate/simulate.ts | 6 +++--- .../connect/routes/thermostats/thermostats.ts | 6 +++--- .../routes/user-identities/user-identities.ts | 12 ++++++++---- 13 files changed, 72 insertions(+), 38 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7038464c..1c46d8cb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -50,7 +50,7 @@ "npm": ">=10.1.0" }, "peerDependencies": { - "@seamapi/types": "^1.413.0" + "@seamapi/types": "^1.420.2" }, "peerDependenciesMeta": { "@seamapi/types": { diff --git a/package.json b/package.json index 346863c2..2acd55c3 100644 --- a/package.json +++ b/package.json @@ -85,7 +85,7 @@ "npm": ">=10.1.0" }, "peerDependencies": { - "@seamapi/types": "^1.413.0" + "@seamapi/types": "^1.420.2" }, "peerDependenciesMeta": { "@seamapi/types": { diff --git a/src/lib/seam/connect/routes/access-codes/access-codes.ts b/src/lib/seam/connect/routes/access-codes/access-codes.ts index c637ab9c..1de9bec4 100644 --- a/src/lib/seam/connect/routes/access-codes/access-codes.ts +++ b/src/lib/seam/connect/routes/access-codes/access-codes.ts @@ -206,12 +206,12 @@ export class SeamHttpAccessCodes { } generateCode( - body?: AccessCodesGenerateCodeBody, + params?: AccessCodesGenerateCodeParams, ): SeamHttpRequest { return new SeamHttpRequest(this, { pathname: '/access_codes/generate_code', method: 'POST', - body, + body: params, responseKey: 'generated_code', }) } @@ -306,7 +306,7 @@ export type AccessCodesDeleteResponse = SetNonNullable< export type AccessCodesDeleteOptions = never -export type AccessCodesGenerateCodeBody = +export type AccessCodesGenerateCodeParams = RouteRequestBody<'/access_codes/generate_code'> export type AccessCodesGenerateCodeResponse = SetNonNullable< diff --git a/src/lib/seam/connect/routes/access-grants/access-grants.ts b/src/lib/seam/connect/routes/access-grants/access-grants.ts index 62f9d80b..e541b29f 100644 --- a/src/lib/seam/connect/routes/access-grants/access-grants.ts +++ b/src/lib/seam/connect/routes/access-grants/access-grants.ts @@ -204,6 +204,15 @@ export class SeamHttpAccessGrants { responseKey: 'access_grants', }) } + + update(body?: AccessGrantsUpdateBody): SeamHttpRequest { + return new SeamHttpRequest(this, { + pathname: '/access_grants/update', + method: 'PATCH', + body, + responseKey: undefined, + }) + } } export type AccessGrantsCreateBody = RouteRequestBody<'/access_grants/create'> @@ -237,3 +246,11 @@ export type AccessGrantsListResponse = SetNonNullable< > export type AccessGrantsListOptions = never + +export type AccessGrantsUpdateBody = RouteRequestBody<'/access_grants/update'> + +export type AccessGrantsUpdateResponse = SetNonNullable< + Required> +> + +export type AccessGrantsUpdateOptions = never diff --git a/src/lib/seam/connect/routes/acs/credentials/credentials.ts b/src/lib/seam/connect/routes/acs/credentials/credentials.ts index feef167d..02cc8e5c 100644 --- a/src/lib/seam/connect/routes/acs/credentials/credentials.ts +++ b/src/lib/seam/connect/routes/acs/credentials/credentials.ts @@ -3,7 +3,11 @@ * Do not edit this file or add other files to this directory. */ -import type { RouteRequestBody, RouteResponse } from '@seamapi/types/connect' +import type { + RouteRequestBody, + RouteRequestParams, + RouteResponse, +} from '@seamapi/types/connect' import { seamApiLtsVersion } from 'lib/lts-version.js' import { @@ -210,8 +214,8 @@ export class SeamHttpAcsCredentials { ): SeamHttpRequest { return new SeamHttpRequest(this, { pathname: '/acs/credentials/list', - method: 'POST', - body: params, + method: 'GET', + params, responseKey: 'acs_credentials', }) } @@ -286,7 +290,8 @@ export type AcsCredentialsGetResponse = SetNonNullable< export type AcsCredentialsGetOptions = never -export type AcsCredentialsListParams = RouteRequestBody<'/acs/credentials/list'> +export type AcsCredentialsListParams = + RouteRequestParams<'/acs/credentials/list'> export type AcsCredentialsListResponse = SetNonNullable< Required> diff --git a/src/lib/seam/connect/routes/acs/encoders/encoders.ts b/src/lib/seam/connect/routes/acs/encoders/encoders.ts index a61b79f1..2dd37d89 100644 --- a/src/lib/seam/connect/routes/acs/encoders/encoders.ts +++ b/src/lib/seam/connect/routes/acs/encoders/encoders.ts @@ -3,7 +3,11 @@ * Do not edit this file or add other files to this directory. */ -import type { RouteRequestBody, RouteResponse } from '@seamapi/types/connect' +import type { + RouteRequestBody, + RouteRequestParams, + RouteResponse, +} from '@seamapi/types/connect' import { seamApiLtsVersion } from 'lib/lts-version.js' import { @@ -211,8 +215,8 @@ export class SeamHttpAcsEncoders { ): SeamHttpRequest { return new SeamHttpRequest(this, { pathname: '/acs/encoders/list', - method: 'POST', - body: params, + method: 'GET', + params, responseKey: 'acs_encoders', }) } @@ -263,7 +267,7 @@ export type AcsEncodersGetResponse = SetNonNullable< export type AcsEncodersGetOptions = never -export type AcsEncodersListParams = RouteRequestBody<'/acs/encoders/list'> +export type AcsEncodersListParams = RouteRequestParams<'/acs/encoders/list'> export type AcsEncodersListResponse = SetNonNullable< Required> diff --git a/src/lib/seam/connect/routes/acs/users/users.ts b/src/lib/seam/connect/routes/acs/users/users.ts index e7f97e2b..a8cf7d9c 100644 --- a/src/lib/seam/connect/routes/acs/users/users.ts +++ b/src/lib/seam/connect/routes/acs/users/users.ts @@ -239,12 +239,12 @@ export class SeamHttpAcsUsers { } revokeAccessToAllEntrances( - params?: AcsUsersRevokeAccessToAllEntrancesParams, + body?: AcsUsersRevokeAccessToAllEntrancesBody, ): SeamHttpRequest { return new SeamHttpRequest(this, { pathname: '/acs/users/revoke_access_to_all_entrances', method: 'POST', - body: params, + body, responseKey: undefined, }) } @@ -336,7 +336,7 @@ export type AcsUsersRemoveFromAccessGroupResponse = SetNonNullable< export type AcsUsersRemoveFromAccessGroupOptions = never -export type AcsUsersRevokeAccessToAllEntrancesParams = +export type AcsUsersRevokeAccessToAllEntrancesBody = RouteRequestBody<'/acs/users/revoke_access_to_all_entrances'> export type AcsUsersRevokeAccessToAllEntrancesResponse = SetNonNullable< diff --git a/src/lib/seam/connect/routes/client-sessions/client-sessions.ts b/src/lib/seam/connect/routes/client-sessions/client-sessions.ts index 4bbe39ac..797012ef 100644 --- a/src/lib/seam/connect/routes/client-sessions/client-sessions.ts +++ b/src/lib/seam/connect/routes/client-sessions/client-sessions.ts @@ -228,13 +228,11 @@ export class SeamHttpClientSessions { }) } - revoke( - params?: ClientSessionsRevokeParams, - ): SeamHttpRequest { + revoke(body?: ClientSessionsRevokeBody): SeamHttpRequest { return new SeamHttpRequest(this, { pathname: '/client_sessions/revoke', method: 'POST', - body: params, + body, responseKey: undefined, }) } @@ -292,7 +290,7 @@ export type ClientSessionsListResponse = SetNonNullable< export type ClientSessionsListOptions = never -export type ClientSessionsRevokeParams = +export type ClientSessionsRevokeBody = RouteRequestBody<'/client_sessions/revoke'> export type ClientSessionsRevokeResponse = SetNonNullable< diff --git a/src/lib/seam/connect/routes/connected-accounts/connected-accounts.ts b/src/lib/seam/connect/routes/connected-accounts/connected-accounts.ts index bdf09383..f3b81d38 100644 --- a/src/lib/seam/connect/routes/connected-accounts/connected-accounts.ts +++ b/src/lib/seam/connect/routes/connected-accounts/connected-accounts.ts @@ -3,7 +3,11 @@ * Do not edit this file or add other files to this directory. */ -import type { RouteRequestBody, RouteResponse } from '@seamapi/types/connect' +import type { + RouteRequestBody, + RouteRequestParams, + RouteResponse, +} from '@seamapi/types/connect' import { seamApiLtsVersion } from 'lib/lts-version.js' import { @@ -179,8 +183,8 @@ export class SeamHttpConnectedAccounts { ): SeamHttpRequest { return new SeamHttpRequest(this, { pathname: '/connected_accounts/get', - method: 'POST', - body: params, + method: 'GET', + params, responseKey: 'connected_account', }) } @@ -225,7 +229,7 @@ export type ConnectedAccountsDeleteResponse = SetNonNullable< export type ConnectedAccountsDeleteOptions = never export type ConnectedAccountsGetParams = - RouteRequestBody<'/connected_accounts/get'> + RouteRequestParams<'/connected_accounts/get'> export type ConnectedAccountsGetResponse = SetNonNullable< Required> diff --git a/src/lib/seam/connect/routes/devices/simulate/simulate.ts b/src/lib/seam/connect/routes/devices/simulate/simulate.ts index 49a4e063..2824ac77 100644 --- a/src/lib/seam/connect/routes/devices/simulate/simulate.ts +++ b/src/lib/seam/connect/routes/devices/simulate/simulate.ts @@ -183,11 +183,13 @@ export class SeamHttpDevicesSimulate { }) } - remove(body?: DevicesSimulateRemoveBody): SeamHttpRequest { + remove( + params?: DevicesSimulateRemoveParams, + ): SeamHttpRequest { return new SeamHttpRequest(this, { pathname: '/devices/simulate/remove', method: 'POST', - body, + body: params, responseKey: undefined, }) } @@ -211,7 +213,7 @@ export type DevicesSimulateDisconnectResponse = SetNonNullable< export type DevicesSimulateDisconnectOptions = never -export type DevicesSimulateRemoveBody = +export type DevicesSimulateRemoveParams = RouteRequestBody<'/devices/simulate/remove'> export type DevicesSimulateRemoveResponse = SetNonNullable< diff --git a/src/lib/seam/connect/routes/phones/simulate/simulate.ts b/src/lib/seam/connect/routes/phones/simulate/simulate.ts index 2e6c4b3d..1b114c53 100644 --- a/src/lib/seam/connect/routes/phones/simulate/simulate.ts +++ b/src/lib/seam/connect/routes/phones/simulate/simulate.ts @@ -164,18 +164,18 @@ export class SeamHttpPhonesSimulate { } createSandboxPhone( - body?: PhonesSimulateCreateSandboxPhoneBody, + params?: PhonesSimulateCreateSandboxPhoneParams, ): SeamHttpRequest { return new SeamHttpRequest(this, { pathname: '/phones/simulate/create_sandbox_phone', method: 'POST', - body, + body: params, responseKey: 'phone', }) } } -export type PhonesSimulateCreateSandboxPhoneBody = +export type PhonesSimulateCreateSandboxPhoneParams = RouteRequestBody<'/phones/simulate/create_sandbox_phone'> export type PhonesSimulateCreateSandboxPhoneResponse = SetNonNullable< diff --git a/src/lib/seam/connect/routes/thermostats/thermostats.ts b/src/lib/seam/connect/routes/thermostats/thermostats.ts index 8188243d..06809c00 100644 --- a/src/lib/seam/connect/routes/thermostats/thermostats.ts +++ b/src/lib/seam/connect/routes/thermostats/thermostats.ts @@ -223,12 +223,12 @@ export class SeamHttpThermostats { } deleteClimatePreset( - body?: ThermostatsDeleteClimatePresetBody, + params?: ThermostatsDeleteClimatePresetParams, ): SeamHttpRequest { return new SeamHttpRequest(this, { pathname: '/thermostats/delete_climate_preset', method: 'POST', - body, + body: params, responseKey: undefined, }) } @@ -388,7 +388,7 @@ export type ThermostatsCreateClimatePresetResponse = SetNonNullable< export type ThermostatsCreateClimatePresetOptions = never -export type ThermostatsDeleteClimatePresetBody = +export type ThermostatsDeleteClimatePresetParams = RouteRequestBody<'/thermostats/delete_climate_preset'> export type ThermostatsDeleteClimatePresetResponse = SetNonNullable< diff --git a/src/lib/seam/connect/routes/user-identities/user-identities.ts b/src/lib/seam/connect/routes/user-identities/user-identities.ts index 0711d5d9..2dd39287 100644 --- a/src/lib/seam/connect/routes/user-identities/user-identities.ts +++ b/src/lib/seam/connect/routes/user-identities/user-identities.ts @@ -3,7 +3,11 @@ * Do not edit this file or add other files to this directory. */ -import type { RouteRequestBody, RouteResponse } from '@seamapi/types/connect' +import type { + RouteRequestBody, + RouteRequestParams, + RouteResponse, +} from '@seamapi/types/connect' import { seamApiLtsVersion } from 'lib/lts-version.js' import { @@ -221,8 +225,8 @@ export class SeamHttpUserIdentities { ): SeamHttpRequest { return new SeamHttpRequest(this, { pathname: '/user_identities/get', - method: 'POST', - body: params, + method: 'GET', + params, responseKey: 'user_identity', }) } @@ -350,7 +354,7 @@ export type UserIdentitiesGenerateInstantKeyResponse = SetNonNullable< export type UserIdentitiesGenerateInstantKeyOptions = never -export type UserIdentitiesGetParams = RouteRequestBody<'/user_identities/get'> +export type UserIdentitiesGetParams = RouteRequestParams<'/user_identities/get'> export type UserIdentitiesGetResponse = SetNonNullable< Required>