From 5e39fc9959fbd65442b2ad3f07610b58e9176474 Mon Sep 17 00:00:00 2001 From: Evan Sosenko Date: Tue, 3 Oct 2023 15:52:22 -0700 Subject: [PATCH 1/6] Add fake-seam-connect --- package-lock.json | 99 +++++++++++++++++++++++++++++++++++++++++++++++ package.json | 1 + 2 files changed, 100 insertions(+) diff --git a/package-lock.json b/package-lock.json index 051e84f2..9b6abf8f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,6 +12,7 @@ "axios": "^1.5.0" }, "devDependencies": { + "@seamapi/fake-seam-connect": "^1.15.1", "@seamapi/types": "^1.14.0", "@types/eslint": "^8.44.2", "@types/node": "^18.11.18", @@ -789,6 +790,23 @@ "node": ">= 8" } }, + "node_modules/@seamapi/fake-seam-connect": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/@seamapi/fake-seam-connect/-/fake-seam-connect-1.15.1.tgz", + "integrity": "sha512-IVsetgmIB42qCl9EJwSLnz8aHzq/IkG61TwRLgudlo0g2ObZfASvw6e4FM+lkRhRZ5XpGBtaK9CG7wz1Pw8iig==", + "dev": true, + "bin": { + "fake-seam-connect": "dist/server.js" + }, + "engines": { + "node": ">=16.13.0", + "npm": ">= 8.1.0" + }, + "optionalDependencies": { + "zustand": "^4.3.7", + "zustand-hoist": "^1.0.0" + } + }, "node_modules/@seamapi/types": { "version": "1.14.0", "resolved": "https://registry.npmjs.org/@seamapi/types/-/types-1.14.0.tgz", @@ -4513,6 +4531,20 @@ "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", "dev": true }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, "node_modules/lower-case": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", @@ -5593,6 +5625,20 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/read-pkg": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-6.0.0.tgz", @@ -6883,6 +6929,16 @@ "punycode": "^2.1.0" } }, + "node_modules/use-sync-external-store": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", + "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", + "dev": true, + "optional": true, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -7244,6 +7300,49 @@ "funding": { "url": "https://github.com/sponsors/colinhacks" } + }, + "node_modules/zustand": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.4.2.tgz", + "integrity": "sha512-qF3/vZHCrjPUX5DvPE3DPDZlh+FiAWRKlP9PI7SlW1MCk8q4vUCDqyWsbF8K41ne0Yx8eeeb0m1cypn1LqUMYQ==", + "dev": true, + "optional": true, + "dependencies": { + "use-sync-external-store": "1.2.0" + }, + "engines": { + "node": ">=12.7.0" + }, + "peerDependencies": { + "@types/react": ">=16.8", + "immer": ">=9.0", + "react": ">=16.8" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "immer": { + "optional": true + }, + "react": { + "optional": true + } + } + }, + "node_modules/zustand-hoist": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/zustand-hoist/-/zustand-hoist-1.0.0.tgz", + "integrity": "sha512-Qt5nUvfSrBo0DjWdh/EAhl8ovt6XV2RSTCTcjzZFYvpR2JZG2PXnvDwOeRDmwyZVvv7ZfwZyQ0Ac9Va/67Z32g==", + "dev": true, + "optional": true, + "engines": { + "node": ">=16.13.0", + "npm": ">= 8.1.0" + }, + "peerDependencies": { + "zustand": ">=4.0.0" + } } } } diff --git a/package.json b/package.json index c1acb03d..7be1cb4b 100644 --- a/package.json +++ b/package.json @@ -87,6 +87,7 @@ "axios": "^1.5.0" }, "devDependencies": { + "@seamapi/fake-seam-connect": "^1.15.1", "@seamapi/types": "^1.14.0", "@types/eslint": "^8.44.2", "@types/node": "^18.11.18", From ed5c6aac0447345885da64645c5aa3f0f0780578 Mon Sep 17 00:00:00 2001 From: Evan Sosenko Date: Tue, 3 Oct 2023 16:27:28 -0700 Subject: [PATCH 2/6] Fix request type --- generate-routes.ts | 4 +- .../connect/routes/access-codes-unmanaged.ts | 25 +++++------- src/lib/seam/connect/routes/access-codes.ts | 35 ++++++----------- .../seam/connect/routes/acs-access-groups.ts | 39 +++++++------------ .../seam/connect/routes/acs-credentials.ts | 18 +++------ src/lib/seam/connect/routes/acs-systems.ts | 8 +--- src/lib/seam/connect/routes/acs-users.ts | 30 +++++--------- .../seam/connect/routes/action-attempts.ts | 8 +--- .../seam/connect/routes/client-sessions.ts | 23 ++++------- .../seam/connect/routes/connect-webviews.ts | 24 +++++------- .../seam/connect/routes/connected-accounts.ts | 15 +++---- .../seam/connect/routes/devices-unmanaged.ts | 14 +++---- src/lib/seam/connect/routes/devices.ts | 21 +++------- src/lib/seam/connect/routes/events.ts | 8 +--- src/lib/seam/connect/routes/locks.ts | 16 ++------ .../routes/noise-sensors-noise-thresholds.ts | 25 +++++------- .../thermostats-climate-setting-schedules.ts | 25 +++++------- src/lib/seam/connect/routes/thermostats.ts | 33 +++++----------- src/lib/seam/connect/routes/webhooks.ts | 16 ++------ src/lib/seam/connect/routes/workspaces.ts | 13 ++----- 20 files changed, 133 insertions(+), 267 deletions(-) diff --git a/generate-routes.ts b/generate-routes.ts index 223eb2db..d7ccb229 100644 --- a/generate-routes.ts +++ b/generate-routes.ts @@ -345,9 +345,7 @@ export type ${renderRequestType({ name, namespace, requestFormat, -})} = SetNonNullable< - Required> -> +})} = RouteRequest${pascalCase(requestFormat)}<'${path}'> export type ${renderResponseType({ name, namespace })}= SetNonNullable< Required> diff --git a/src/lib/seam/connect/routes/access-codes-unmanaged.ts b/src/lib/seam/connect/routes/access-codes-unmanaged.ts index 301d3666..3ee75f62 100644 --- a/src/lib/seam/connect/routes/access-codes-unmanaged.ts +++ b/src/lib/seam/connect/routes/access-codes-unmanaged.ts @@ -116,41 +116,36 @@ export class SeamHttpAccessCodesUnmanaged { } } -export type AccessCodesUnmanagedConvertToManagedBody = SetNonNullable< - Required> -> +export type AccessCodesUnmanagedConvertToManagedBody = + RouteRequestBody<'/access_codes/unmanaged/convert_to_managed'> export type AccessCodesUnmanagedConvertToManagedResponse = SetNonNullable< Required> > -export type AccessCodesUnmanagedDeleteBody = SetNonNullable< - Required> -> +export type AccessCodesUnmanagedDeleteBody = + RouteRequestBody<'/access_codes/unmanaged/delete'> export type AccessCodesUnmanagedDeleteResponse = SetNonNullable< Required> > -export type AccessCodesUnmanagedGetBody = SetNonNullable< - Required> -> +export type AccessCodesUnmanagedGetBody = + RouteRequestBody<'/access_codes/unmanaged/get'> export type AccessCodesUnmanagedGetResponse = SetNonNullable< Required> > -export type AccessCodesUnmanagedListBody = SetNonNullable< - Required> -> +export type AccessCodesUnmanagedListBody = + RouteRequestBody<'/access_codes/unmanaged/list'> export type AccessCodesUnmanagedListResponse = SetNonNullable< Required> > -export type AccessCodesUnmanagedUpdateBody = SetNonNullable< - Required> -> +export type AccessCodesUnmanagedUpdateBody = + RouteRequestBody<'/access_codes/unmanaged/update'> export type AccessCodesUnmanagedUpdateResponse = SetNonNullable< Required> diff --git a/src/lib/seam/connect/routes/access-codes.ts b/src/lib/seam/connect/routes/access-codes.ts index 1c25aeda..6d3f418d 100644 --- a/src/lib/seam/connect/routes/access-codes.ts +++ b/src/lib/seam/connect/routes/access-codes.ts @@ -161,65 +161,52 @@ export class SeamHttpAccessCodes { } } -export type AccessCodesCreateBody = SetNonNullable< - Required> -> +export type AccessCodesCreateBody = RouteRequestBody<'/access_codes/create'> export type AccessCodesCreateResponse = SetNonNullable< Required> > -export type AccessCodesCreateMultipleBody = SetNonNullable< - Required> -> +export type AccessCodesCreateMultipleBody = + RouteRequestBody<'/access_codes/create_multiple'> export type AccessCodesCreateMultipleResponse = SetNonNullable< Required> > -export type AccessCodesDeleteBody = SetNonNullable< - Required> -> +export type AccessCodesDeleteBody = RouteRequestBody<'/access_codes/delete'> export type AccessCodesDeleteResponse = SetNonNullable< Required> > -export type AccessCodesGenerateCodeParams = SetNonNullable< - Required> -> +export type AccessCodesGenerateCodeParams = + RouteRequestParams<'/access_codes/generate_code'> export type AccessCodesGenerateCodeResponse = SetNonNullable< Required> > -export type AccessCodesGetBody = SetNonNullable< - Required> -> +export type AccessCodesGetBody = RouteRequestBody<'/access_codes/get'> export type AccessCodesGetResponse = SetNonNullable< Required> > -export type AccessCodesListBody = SetNonNullable< - Required> -> +export type AccessCodesListBody = RouteRequestBody<'/access_codes/list'> export type AccessCodesListResponse = SetNonNullable< Required> > -export type AccessCodesPullBackupAccessCodeBody = SetNonNullable< - Required> -> +export type AccessCodesPullBackupAccessCodeBody = + RouteRequestBody<'/access_codes/pull_backup_access_code'> export type AccessCodesPullBackupAccessCodeResponse = SetNonNullable< Required> > -export type AccessCodesUpdateBody = SetNonNullable< - Required> -> +export type AccessCodesUpdateBody = RouteRequestBody<'/access_codes/update'> export type AccessCodesUpdateResponse = SetNonNullable< Required> diff --git a/src/lib/seam/connect/routes/acs-access-groups.ts b/src/lib/seam/connect/routes/acs-access-groups.ts index 5bb983f4..229b9fd6 100644 --- a/src/lib/seam/connect/routes/acs-access-groups.ts +++ b/src/lib/seam/connect/routes/acs-access-groups.ts @@ -142,65 +142,56 @@ export class SeamHttpAcsAccessGroups { } } -export type AcsAccessGroupsAddUserBody = SetNonNullable< - Required> -> +export type AcsAccessGroupsAddUserBody = + RouteRequestBody<'/acs/access_groups/add_user'> export type AcsAccessGroupsAddUserResponse = SetNonNullable< Required> > -export type AcsAccessGroupsCreateBody = SetNonNullable< - Required> -> +export type AcsAccessGroupsCreateBody = + RouteRequestBody<'/acs/access_groups/create'> export type AcsAccessGroupsCreateResponse = SetNonNullable< Required> > -export type AcsAccessGroupsDeleteBody = SetNonNullable< - Required> -> +export type AcsAccessGroupsDeleteBody = + RouteRequestBody<'/acs/access_groups/delete'> export type AcsAccessGroupsDeleteResponse = SetNonNullable< Required> > -export type AcsAccessGroupsGetBody = SetNonNullable< - Required> -> +export type AcsAccessGroupsGetBody = RouteRequestBody<'/acs/access_groups/get'> export type AcsAccessGroupsGetResponse = SetNonNullable< Required> > -export type AcsAccessGroupsListBody = SetNonNullable< - Required> -> +export type AcsAccessGroupsListBody = + RouteRequestBody<'/acs/access_groups/list'> export type AcsAccessGroupsListResponse = SetNonNullable< Required> > -export type AcsAccessGroupsListUsersBody = SetNonNullable< - Required> -> +export type AcsAccessGroupsListUsersBody = + RouteRequestBody<'/acs/access_groups/list_users'> export type AcsAccessGroupsListUsersResponse = SetNonNullable< Required> > -export type AcsAccessGroupsRemoveUserBody = SetNonNullable< - Required> -> +export type AcsAccessGroupsRemoveUserBody = + RouteRequestBody<'/acs/access_groups/remove_user'> export type AcsAccessGroupsRemoveUserResponse = SetNonNullable< Required> > -export type AcsAccessGroupsUpdateBody = SetNonNullable< - Required> -> +export type AcsAccessGroupsUpdateBody = + RouteRequestBody<'/acs/access_groups/update'> export type AcsAccessGroupsUpdateResponse = SetNonNullable< Required> diff --git a/src/lib/seam/connect/routes/acs-credentials.ts b/src/lib/seam/connect/routes/acs-credentials.ts index 0b11a90d..7a2d0672 100644 --- a/src/lib/seam/connect/routes/acs-credentials.ts +++ b/src/lib/seam/connect/routes/acs-credentials.ts @@ -106,33 +106,27 @@ export class SeamHttpAcsCredentials { } } -export type AcsCredentialsCreateBody = SetNonNullable< - Required> -> +export type AcsCredentialsCreateBody = + RouteRequestBody<'/acs/credentials/create'> export type AcsCredentialsCreateResponse = SetNonNullable< Required> > -export type AcsCredentialsDeleteBody = SetNonNullable< - Required> -> +export type AcsCredentialsDeleteBody = + RouteRequestBody<'/acs/credentials/delete'> export type AcsCredentialsDeleteResponse = SetNonNullable< Required> > -export type AcsCredentialsGetBody = SetNonNullable< - Required> -> +export type AcsCredentialsGetBody = RouteRequestBody<'/acs/credentials/get'> export type AcsCredentialsGetResponse = SetNonNullable< Required> > -export type AcsCredentialsListBody = SetNonNullable< - Required> -> +export type AcsCredentialsListBody = RouteRequestBody<'/acs/credentials/list'> export type AcsCredentialsListResponse = SetNonNullable< Required> diff --git a/src/lib/seam/connect/routes/acs-systems.ts b/src/lib/seam/connect/routes/acs-systems.ts index fed9ec3d..fdb971d2 100644 --- a/src/lib/seam/connect/routes/acs-systems.ts +++ b/src/lib/seam/connect/routes/acs-systems.ts @@ -91,17 +91,13 @@ export class SeamHttpAcsSystems { } } -export type AcsSystemsGetBody = SetNonNullable< - Required> -> +export type AcsSystemsGetBody = RouteRequestBody<'/acs/systems/get'> export type AcsSystemsGetResponse = SetNonNullable< Required> > -export type AcsSystemsListParams = SetNonNullable< - Required> -> +export type AcsSystemsListParams = RouteRequestParams<'/acs/systems/list'> export type AcsSystemsListResponse = SetNonNullable< Required> diff --git a/src/lib/seam/connect/routes/acs-users.ts b/src/lib/seam/connect/routes/acs-users.ts index 69c450ca..beb41a41 100644 --- a/src/lib/seam/connect/routes/acs-users.ts +++ b/src/lib/seam/connect/routes/acs-users.ts @@ -130,57 +130,45 @@ export class SeamHttpAcsUsers { } } -export type AcsUsersAddToAccessGroupBody = SetNonNullable< - Required> -> +export type AcsUsersAddToAccessGroupBody = + RouteRequestBody<'/acs/users/add_to_access_group'> export type AcsUsersAddToAccessGroupResponse = SetNonNullable< Required> > -export type AcsUsersCreateBody = SetNonNullable< - Required> -> +export type AcsUsersCreateBody = RouteRequestBody<'/acs/users/create'> export type AcsUsersCreateResponse = SetNonNullable< Required> > -export type AcsUsersDeleteBody = SetNonNullable< - Required> -> +export type AcsUsersDeleteBody = RouteRequestBody<'/acs/users/delete'> export type AcsUsersDeleteResponse = SetNonNullable< Required> > -export type AcsUsersGetBody = SetNonNullable< - Required> -> +export type AcsUsersGetBody = RouteRequestBody<'/acs/users/get'> export type AcsUsersGetResponse = SetNonNullable< Required> > -export type AcsUsersListBody = SetNonNullable< - Required> -> +export type AcsUsersListBody = RouteRequestBody<'/acs/users/list'> export type AcsUsersListResponse = SetNonNullable< Required> > -export type AcsUsersRemoveFromAccessGroupBody = SetNonNullable< - Required> -> +export type AcsUsersRemoveFromAccessGroupBody = + RouteRequestBody<'/acs/users/remove_from_access_group'> export type AcsUsersRemoveFromAccessGroupResponse = SetNonNullable< Required> > -export type AcsUsersUpdateBody = SetNonNullable< - Required> -> +export type AcsUsersUpdateBody = RouteRequestBody<'/acs/users/update'> export type AcsUsersUpdateResponse = SetNonNullable< Required> diff --git a/src/lib/seam/connect/routes/action-attempts.ts b/src/lib/seam/connect/routes/action-attempts.ts index 5bd06f8c..dd615105 100644 --- a/src/lib/seam/connect/routes/action-attempts.ts +++ b/src/lib/seam/connect/routes/action-attempts.ts @@ -87,17 +87,13 @@ export class SeamHttpActionAttempts { } } -export type ActionAttemptsGetBody = SetNonNullable< - Required> -> +export type ActionAttemptsGetBody = RouteRequestBody<'/action_attempts/get'> export type ActionAttemptsGetResponse = SetNonNullable< Required> > -export type ActionAttemptsListBody = SetNonNullable< - Required> -> +export type ActionAttemptsListBody = RouteRequestBody<'/action_attempts/list'> export type ActionAttemptsListResponse = SetNonNullable< Required> diff --git a/src/lib/seam/connect/routes/client-sessions.ts b/src/lib/seam/connect/routes/client-sessions.ts index aec8350c..94fd57c0 100644 --- a/src/lib/seam/connect/routes/client-sessions.ts +++ b/src/lib/seam/connect/routes/client-sessions.ts @@ -118,41 +118,34 @@ export class SeamHttpClientSessions { } } -export type ClientSessionsCreateBody = SetNonNullable< - Required> -> +export type ClientSessionsCreateBody = + RouteRequestBody<'/client_sessions/create'> export type ClientSessionsCreateResponse = SetNonNullable< Required> > -export type ClientSessionsDeleteBody = SetNonNullable< - Required> -> +export type ClientSessionsDeleteBody = + RouteRequestBody<'/client_sessions/delete'> export type ClientSessionsDeleteResponse = SetNonNullable< Required> > -export type ClientSessionsGetBody = SetNonNullable< - Required> -> +export type ClientSessionsGetBody = RouteRequestBody<'/client_sessions/get'> export type ClientSessionsGetResponse = SetNonNullable< Required> > -export type ClientSessionsGrantAccessBody = SetNonNullable< - Required> -> +export type ClientSessionsGrantAccessBody = + RouteRequestBody<'/client_sessions/grant_access'> export type ClientSessionsGrantAccessResponse = SetNonNullable< Required> > -export type ClientSessionsListBody = SetNonNullable< - Required> -> +export type ClientSessionsListBody = RouteRequestBody<'/client_sessions/list'> export type ClientSessionsListResponse = SetNonNullable< Required> diff --git a/src/lib/seam/connect/routes/connect-webviews.ts b/src/lib/seam/connect/routes/connect-webviews.ts index 43c5f02e..494f0eb5 100644 --- a/src/lib/seam/connect/routes/connect-webviews.ts +++ b/src/lib/seam/connect/routes/connect-webviews.ts @@ -118,41 +118,35 @@ export class SeamHttpConnectWebviews { } } -export type ConnectWebviewsCreateBody = SetNonNullable< - Required> -> +export type ConnectWebviewsCreateBody = + RouteRequestBody<'/connect_webviews/create'> export type ConnectWebviewsCreateResponse = SetNonNullable< Required> > -export type ConnectWebviewsDeleteBody = SetNonNullable< - Required> -> +export type ConnectWebviewsDeleteBody = + RouteRequestBody<'/connect_webviews/delete'> export type ConnectWebviewsDeleteResponse = SetNonNullable< Required> > -export type ConnectWebviewsGetBody = SetNonNullable< - Required> -> +export type ConnectWebviewsGetBody = RouteRequestBody<'/connect_webviews/get'> export type ConnectWebviewsGetResponse = SetNonNullable< Required> > -export type ConnectWebviewsListParams = SetNonNullable< - Required> -> +export type ConnectWebviewsListParams = + RouteRequestParams<'/connect_webviews/list'> export type ConnectWebviewsListResponse = SetNonNullable< Required> > -export type ConnectWebviewsViewParams = SetNonNullable< - Required> -> +export type ConnectWebviewsViewParams = + RouteRequestParams<'/connect_webviews/view'> export type ConnectWebviewsViewResponse = SetNonNullable< Required> diff --git a/src/lib/seam/connect/routes/connected-accounts.ts b/src/lib/seam/connect/routes/connected-accounts.ts index 1177b0c9..224dc517 100644 --- a/src/lib/seam/connect/routes/connected-accounts.ts +++ b/src/lib/seam/connect/routes/connected-accounts.ts @@ -99,25 +99,22 @@ export class SeamHttpConnectedAccounts { } } -export type ConnectedAccountsDeleteBody = SetNonNullable< - Required> -> +export type ConnectedAccountsDeleteBody = + RouteRequestBody<'/connected_accounts/delete'> export type ConnectedAccountsDeleteResponse = SetNonNullable< Required> > -export type ConnectedAccountsGetBody = SetNonNullable< - Required> -> +export type ConnectedAccountsGetBody = + RouteRequestBody<'/connected_accounts/get'> export type ConnectedAccountsGetResponse = SetNonNullable< Required> > -export type ConnectedAccountsListParams = SetNonNullable< - Required> -> +export type ConnectedAccountsListParams = + RouteRequestParams<'/connected_accounts/list'> export type ConnectedAccountsListResponse = SetNonNullable< Required> diff --git a/src/lib/seam/connect/routes/devices-unmanaged.ts b/src/lib/seam/connect/routes/devices-unmanaged.ts index 787b9f16..f1404d6c 100644 --- a/src/lib/seam/connect/routes/devices-unmanaged.ts +++ b/src/lib/seam/connect/routes/devices-unmanaged.ts @@ -95,25 +95,21 @@ export class SeamHttpDevicesUnmanaged { } } -export type DevicesUnmanagedGetBody = SetNonNullable< - Required> -> +export type DevicesUnmanagedGetBody = RouteRequestBody<'/devices/unmanaged/get'> export type DevicesUnmanagedGetResponse = SetNonNullable< Required> > -export type DevicesUnmanagedListBody = SetNonNullable< - Required> -> +export type DevicesUnmanagedListBody = + RouteRequestBody<'/devices/unmanaged/list'> export type DevicesUnmanagedListResponse = SetNonNullable< Required> > -export type DevicesUnmanagedUpdateBody = SetNonNullable< - Required> -> +export type DevicesUnmanagedUpdateBody = + RouteRequestBody<'/devices/unmanaged/update'> export type DevicesUnmanagedUpdateResponse = SetNonNullable< Required> diff --git a/src/lib/seam/connect/routes/devices.ts b/src/lib/seam/connect/routes/devices.ts index 06ef4d1c..609f1b7c 100644 --- a/src/lib/seam/connect/routes/devices.ts +++ b/src/lib/seam/connect/routes/devices.ts @@ -117,41 +117,32 @@ export class SeamHttpDevices { } } -export type DevicesDeleteBody = SetNonNullable< - Required> -> +export type DevicesDeleteBody = RouteRequestBody<'/devices/delete'> export type DevicesDeleteResponse = SetNonNullable< Required> > -export type DevicesGetBody = SetNonNullable< - Required> -> +export type DevicesGetBody = RouteRequestBody<'/devices/get'> export type DevicesGetResponse = SetNonNullable< Required> > -export type DevicesListBody = SetNonNullable< - Required> -> +export type DevicesListBody = RouteRequestBody<'/devices/list'> export type DevicesListResponse = SetNonNullable< Required> > -export type DevicesListDeviceProvidersBody = SetNonNullable< - Required> -> +export type DevicesListDeviceProvidersBody = + RouteRequestBody<'/devices/list_device_providers'> export type DevicesListDeviceProvidersResponse = SetNonNullable< Required> > -export type DevicesUpdateBody = SetNonNullable< - Required> -> +export type DevicesUpdateBody = RouteRequestBody<'/devices/update'> export type DevicesUpdateResponse = SetNonNullable< Required> diff --git a/src/lib/seam/connect/routes/events.ts b/src/lib/seam/connect/routes/events.ts index 4b9c020a..df4c132e 100644 --- a/src/lib/seam/connect/routes/events.ts +++ b/src/lib/seam/connect/routes/events.ts @@ -83,17 +83,13 @@ export class SeamHttpEvents { } } -export type EventsGetBody = SetNonNullable< - Required> -> +export type EventsGetBody = RouteRequestBody<'/events/get'> export type EventsGetResponse = SetNonNullable< Required> > -export type EventsListBody = SetNonNullable< - Required> -> +export type EventsListBody = RouteRequestBody<'/events/list'> export type EventsListResponse = SetNonNullable< Required> diff --git a/src/lib/seam/connect/routes/locks.ts b/src/lib/seam/connect/routes/locks.ts index fac5d6b3..3607ab99 100644 --- a/src/lib/seam/connect/routes/locks.ts +++ b/src/lib/seam/connect/routes/locks.ts @@ -105,33 +105,25 @@ export class SeamHttpLocks { } } -export type LocksGetBody = SetNonNullable< - Required> -> +export type LocksGetBody = RouteRequestBody<'/locks/get'> export type LocksGetResponse = SetNonNullable< Required> > -export type LocksListBody = SetNonNullable< - Required> -> +export type LocksListBody = RouteRequestBody<'/locks/list'> export type LocksListResponse = SetNonNullable< Required> > -export type LocksLockDoorBody = SetNonNullable< - Required> -> +export type LocksLockDoorBody = RouteRequestBody<'/locks/lock_door'> export type LocksLockDoorResponse = SetNonNullable< Required> > -export type LocksUnlockDoorBody = SetNonNullable< - Required> -> +export type LocksUnlockDoorBody = RouteRequestBody<'/locks/unlock_door'> export type LocksUnlockDoorResponse = SetNonNullable< Required> diff --git a/src/lib/seam/connect/routes/noise-sensors-noise-thresholds.ts b/src/lib/seam/connect/routes/noise-sensors-noise-thresholds.ts index e92e1298..5898e46a 100644 --- a/src/lib/seam/connect/routes/noise-sensors-noise-thresholds.ts +++ b/src/lib/seam/connect/routes/noise-sensors-noise-thresholds.ts @@ -113,41 +113,36 @@ export class SeamHttpNoiseSensorsNoiseThresholds { } } -export type NoiseSensorsNoiseThresholdsCreateBody = SetNonNullable< - Required> -> +export type NoiseSensorsNoiseThresholdsCreateBody = + RouteRequestBody<'/noise_sensors/noise_thresholds/create'> export type NoiseSensorsNoiseThresholdsCreateResponse = SetNonNullable< Required> > -export type NoiseSensorsNoiseThresholdsDeleteBody = SetNonNullable< - Required> -> +export type NoiseSensorsNoiseThresholdsDeleteBody = + RouteRequestBody<'/noise_sensors/noise_thresholds/delete'> export type NoiseSensorsNoiseThresholdsDeleteResponse = SetNonNullable< Required> > -export type NoiseSensorsNoiseThresholdsGetBody = SetNonNullable< - Required> -> +export type NoiseSensorsNoiseThresholdsGetBody = + RouteRequestBody<'/noise_sensors/noise_thresholds/get'> export type NoiseSensorsNoiseThresholdsGetResponse = SetNonNullable< Required> > -export type NoiseSensorsNoiseThresholdsListBody = SetNonNullable< - Required> -> +export type NoiseSensorsNoiseThresholdsListBody = + RouteRequestBody<'/noise_sensors/noise_thresholds/list'> export type NoiseSensorsNoiseThresholdsListResponse = SetNonNullable< Required> > -export type NoiseSensorsNoiseThresholdsUpdateBody = SetNonNullable< - Required> -> +export type NoiseSensorsNoiseThresholdsUpdateBody = + RouteRequestBody<'/noise_sensors/noise_thresholds/update'> export type NoiseSensorsNoiseThresholdsUpdateResponse = SetNonNullable< Required> diff --git a/src/lib/seam/connect/routes/thermostats-climate-setting-schedules.ts b/src/lib/seam/connect/routes/thermostats-climate-setting-schedules.ts index cac346b9..cf5b7e71 100644 --- a/src/lib/seam/connect/routes/thermostats-climate-setting-schedules.ts +++ b/src/lib/seam/connect/routes/thermostats-climate-setting-schedules.ts @@ -135,41 +135,36 @@ export class SeamHttpThermostatsClimateSettingSchedules { } } -export type ThermostatsClimateSettingSchedulesCreateBody = SetNonNullable< - Required> -> +export type ThermostatsClimateSettingSchedulesCreateBody = + RouteRequestBody<'/thermostats/climate_setting_schedules/create'> export type ThermostatsClimateSettingSchedulesCreateResponse = SetNonNullable< Required> > -export type ThermostatsClimateSettingSchedulesDeleteBody = SetNonNullable< - Required> -> +export type ThermostatsClimateSettingSchedulesDeleteBody = + RouteRequestBody<'/thermostats/climate_setting_schedules/delete'> export type ThermostatsClimateSettingSchedulesDeleteResponse = SetNonNullable< Required> > -export type ThermostatsClimateSettingSchedulesGetBody = SetNonNullable< - Required> -> +export type ThermostatsClimateSettingSchedulesGetBody = + RouteRequestBody<'/thermostats/climate_setting_schedules/get'> export type ThermostatsClimateSettingSchedulesGetResponse = SetNonNullable< Required> > -export type ThermostatsClimateSettingSchedulesListBody = SetNonNullable< - Required> -> +export type ThermostatsClimateSettingSchedulesListBody = + RouteRequestBody<'/thermostats/climate_setting_schedules/list'> export type ThermostatsClimateSettingSchedulesListResponse = SetNonNullable< Required> > -export type ThermostatsClimateSettingSchedulesUpdateBody = SetNonNullable< - Required> -> +export type ThermostatsClimateSettingSchedulesUpdateBody = + RouteRequestBody<'/thermostats/climate_setting_schedules/update'> export type ThermostatsClimateSettingSchedulesUpdateResponse = SetNonNullable< Required> diff --git a/src/lib/seam/connect/routes/thermostats.ts b/src/lib/seam/connect/routes/thermostats.ts index ac6e4377..854ed425 100644 --- a/src/lib/seam/connect/routes/thermostats.ts +++ b/src/lib/seam/connect/routes/thermostats.ts @@ -141,65 +141,50 @@ export class SeamHttpThermostats { } } -export type ThermostatsCoolBody = SetNonNullable< - Required> -> +export type ThermostatsCoolBody = RouteRequestBody<'/thermostats/cool'> export type ThermostatsCoolResponse = SetNonNullable< Required> > -export type ThermostatsGetBody = SetNonNullable< - Required> -> +export type ThermostatsGetBody = RouteRequestBody<'/thermostats/get'> export type ThermostatsGetResponse = SetNonNullable< Required> > -export type ThermostatsHeatBody = SetNonNullable< - Required> -> +export type ThermostatsHeatBody = RouteRequestBody<'/thermostats/heat'> export type ThermostatsHeatResponse = SetNonNullable< Required> > -export type ThermostatsHeatCoolBody = SetNonNullable< - Required> -> +export type ThermostatsHeatCoolBody = RouteRequestBody<'/thermostats/heat_cool'> export type ThermostatsHeatCoolResponse = SetNonNullable< Required> > -export type ThermostatsListBody = SetNonNullable< - Required> -> +export type ThermostatsListBody = RouteRequestBody<'/thermostats/list'> export type ThermostatsListResponse = SetNonNullable< Required> > -export type ThermostatsOffBody = SetNonNullable< - Required> -> +export type ThermostatsOffBody = RouteRequestBody<'/thermostats/off'> export type ThermostatsOffResponse = SetNonNullable< Required> > -export type ThermostatsSetFanModeBody = SetNonNullable< - Required> -> +export type ThermostatsSetFanModeBody = + RouteRequestBody<'/thermostats/set_fan_mode'> export type ThermostatsSetFanModeResponse = SetNonNullable< Required> > -export type ThermostatsUpdateBody = SetNonNullable< - Required> -> +export type ThermostatsUpdateBody = RouteRequestBody<'/thermostats/update'> export type ThermostatsUpdateResponse = SetNonNullable< Required> diff --git a/src/lib/seam/connect/routes/webhooks.ts b/src/lib/seam/connect/routes/webhooks.ts index b7ef1656..30a8b50e 100644 --- a/src/lib/seam/connect/routes/webhooks.ts +++ b/src/lib/seam/connect/routes/webhooks.ts @@ -108,33 +108,25 @@ export class SeamHttpWebhooks { } } -export type WebhooksCreateBody = SetNonNullable< - Required> -> +export type WebhooksCreateBody = RouteRequestBody<'/webhooks/create'> export type WebhooksCreateResponse = SetNonNullable< Required> > -export type WebhooksDeleteBody = SetNonNullable< - Required> -> +export type WebhooksDeleteBody = RouteRequestBody<'/webhooks/delete'> export type WebhooksDeleteResponse = SetNonNullable< Required> > -export type WebhooksGetBody = SetNonNullable< - Required> -> +export type WebhooksGetBody = RouteRequestBody<'/webhooks/get'> export type WebhooksGetResponse = SetNonNullable< Required> > -export type WebhooksListParams = SetNonNullable< - Required> -> +export type WebhooksListParams = RouteRequestParams<'/webhooks/list'> export type WebhooksListResponse = SetNonNullable< Required> diff --git a/src/lib/seam/connect/routes/workspaces.ts b/src/lib/seam/connect/routes/workspaces.ts index 8d2a0c9b..a6fd0550 100644 --- a/src/lib/seam/connect/routes/workspaces.ts +++ b/src/lib/seam/connect/routes/workspaces.ts @@ -99,25 +99,20 @@ export class SeamHttpWorkspaces { } } -export type WorkspacesGetParams = SetNonNullable< - Required> -> +export type WorkspacesGetParams = RouteRequestParams<'/workspaces/get'> export type WorkspacesGetResponse = SetNonNullable< Required> > -export type WorkspacesListParams = SetNonNullable< - Required> -> +export type WorkspacesListParams = RouteRequestParams<'/workspaces/list'> export type WorkspacesListResponse = SetNonNullable< Required> > -export type WorkspacesResetSandboxBody = SetNonNullable< - Required> -> +export type WorkspacesResetSandboxBody = + RouteRequestBody<'/workspaces/reset_sandbox'> export type WorkspacesResetSandboxResponse = SetNonNullable< Required> From 77c64083377581554d77294532ddcff95736c353 Mon Sep 17 00:00:00 2001 From: Evan Sosenko Date: Tue, 3 Oct 2023 16:27:39 -0700 Subject: [PATCH 3/6] Add test for api key --- package-lock.json | 8 ++++---- package.json | 2 +- test/fixtures/seam/connect/api.ts | 24 ++++++++++++++++++++++++ test/seam/connect/api-key.test.ts | 14 ++++++++++++++ test/seam/connect/client.test.ts | 7 ------- tsconfig.json | 1 + 6 files changed, 44 insertions(+), 12 deletions(-) create mode 100644 test/fixtures/seam/connect/api.ts create mode 100644 test/seam/connect/api-key.test.ts delete mode 100644 test/seam/connect/client.test.ts diff --git a/package-lock.json b/package-lock.json index 9b6abf8f..59cae540 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "axios": "^1.5.0" }, "devDependencies": { - "@seamapi/fake-seam-connect": "^1.15.1", + "@seamapi/fake-seam-connect": "^1.16.0", "@seamapi/types": "^1.14.0", "@types/eslint": "^8.44.2", "@types/node": "^18.11.18", @@ -791,9 +791,9 @@ } }, "node_modules/@seamapi/fake-seam-connect": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/@seamapi/fake-seam-connect/-/fake-seam-connect-1.15.1.tgz", - "integrity": "sha512-IVsetgmIB42qCl9EJwSLnz8aHzq/IkG61TwRLgudlo0g2ObZfASvw6e4FM+lkRhRZ5XpGBtaK9CG7wz1Pw8iig==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/@seamapi/fake-seam-connect/-/fake-seam-connect-1.16.0.tgz", + "integrity": "sha512-FMnYhMDMLI8BQdmKYFoctekeh+JLAmY/Kn+8MJ+YoxDm5SODgwzu0AjBwcuc8zjqmX4pG9psvkXQ2ZDynwuUGQ==", "dev": true, "bin": { "fake-seam-connect": "dist/server.js" diff --git a/package.json b/package.json index 7be1cb4b..d58f7268 100644 --- a/package.json +++ b/package.json @@ -87,7 +87,7 @@ "axios": "^1.5.0" }, "devDependencies": { - "@seamapi/fake-seam-connect": "^1.15.1", + "@seamapi/fake-seam-connect": "^1.16.0", "@seamapi/types": "^1.14.0", "@types/eslint": "^8.44.2", "@types/node": "^18.11.18", diff --git a/test/fixtures/seam/connect/api.ts b/test/fixtures/seam/connect/api.ts new file mode 100644 index 00000000..6935a524 --- /dev/null +++ b/test/fixtures/seam/connect/api.ts @@ -0,0 +1,24 @@ +import { createFake, type Seed } from '@seamapi/fake-seam-connect' +import type { ExecutionContext } from 'ava' + +export const getTestServer = async ( + t: ExecutionContext, +): Promise<{ endpoint: string; seed: Seed }> => { + const fake = await createFake() + const seed = await fake.seed() + + await fake.startServer() + t.teardown(async () => { + await fake.stopServer() + }) + + const endpoint = fake.serverUrl + if (endpoint == null) throw new Error('Fake endpoint is null') + const res = await fetch(`${endpoint}/health`) + if (!res.ok) throw new Error('Fake Seam Connect unhealthy') + + return { + endpoint, + seed, + } +} diff --git a/test/seam/connect/api-key.test.ts b/test/seam/connect/api-key.test.ts new file mode 100644 index 00000000..9bf39ff9 --- /dev/null +++ b/test/seam/connect/api-key.test.ts @@ -0,0 +1,14 @@ +import test from 'ava' +import { getTestServer } from 'fixtures/seam/connect/api.js' + +import { SeamHttp } from '@seamapi/http/connect' + +test('SeamHttp: fromApiKey', async (t) => { + const { seed, endpoint } = await getTestServer(t) + const client = SeamHttp.fromApiKey(seed.seam_apikey1_token, { endpoint }) + const device = await client.devices.get({ + device_id: seed.august_device_1, + }) + t.is(device.workspace_id, seed.seed_workspace_1) + t.is(device.device_id, seed.august_device_1) +}) diff --git a/test/seam/connect/client.test.ts b/test/seam/connect/client.test.ts deleted file mode 100644 index 5403e751..00000000 --- a/test/seam/connect/client.test.ts +++ /dev/null @@ -1,7 +0,0 @@ -import test from 'ava' - -import { SeamHttp } from '@seamapi/http/connect' - -test('SeamHttp: fromApiKey', (t) => { - t.truthy(SeamHttp.fromApiKey('seam_some-api-key')) -}) diff --git a/tsconfig.json b/tsconfig.json index e851ac74..d58978ed 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -26,6 +26,7 @@ "paths": { "@seamapi/http": ["./src/index.ts"], "@seamapi/http/connect": ["./src/connect.ts"], + "fixtures/*": ["./test/fixtures/*"], "lib/*": ["./src/lib/*"] } }, From ab9d167ad234a27c31b90c4d22db6b1f928ae4b2 Mon Sep 17 00:00:00 2001 From: Evan Sosenko Date: Tue, 3 Oct 2023 16:35:21 -0700 Subject: [PATCH 4/6] Add node-fetch to test --- package-lock.json | 91 +++++++++++++++++++++++++++++++ package.json | 1 + test/fixtures/seam/connect/api.ts | 1 + 3 files changed, 93 insertions(+) diff --git a/package-lock.json b/package-lock.json index 59cae540..133697c1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -28,6 +28,7 @@ "eslint-plugin-simple-import-sort": "^10.0.0", "eslint-plugin-unused-imports": "^3.0.0", "landlubber": "^1.0.0", + "node-fetch": "^3.3.2", "prettier": "^3.0.0", "tsc-alias": "^1.8.2", "tsup": "^7.2.0", @@ -2167,6 +2168,15 @@ "node": ">=0.10.0" } }, + "node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, "node_modules/date-fns": { "version": "2.30.0", "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", @@ -3253,6 +3263,29 @@ "reusify": "^1.0.4" } }, + "node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, "node_modules/figures": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/figures/-/figures-5.0.0.tgz", @@ -3396,6 +3429,18 @@ "node": ">= 6" } }, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "dev": true, + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -4865,6 +4910,43 @@ "tslib": "^2.0.3" } }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "dev": true, + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, "node_modules/nofilter": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", @@ -6969,6 +7051,15 @@ "spdx-expression-parse": "^3.0.0" } }, + "node_modules/web-streams-polyfill": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", + "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, "node_modules/webidl-conversions": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", diff --git a/package.json b/package.json index d58f7268..7876116d 100644 --- a/package.json +++ b/package.json @@ -103,6 +103,7 @@ "eslint-plugin-simple-import-sort": "^10.0.0", "eslint-plugin-unused-imports": "^3.0.0", "landlubber": "^1.0.0", + "node-fetch": "^3.3.2", "prettier": "^3.0.0", "tsc-alias": "^1.8.2", "tsup": "^7.2.0", diff --git a/test/fixtures/seam/connect/api.ts b/test/fixtures/seam/connect/api.ts index 6935a524..fdde2637 100644 --- a/test/fixtures/seam/connect/api.ts +++ b/test/fixtures/seam/connect/api.ts @@ -1,5 +1,6 @@ import { createFake, type Seed } from '@seamapi/fake-seam-connect' import type { ExecutionContext } from 'ava' +import fetch from 'node-fetch' // TODO: Remove node-fetch when Node v16 support is dropped. export const getTestServer = async ( t: ExecutionContext, From 4eea9232b194aa0bcae63b22bba9e53ffd703787 Mon Sep 17 00:00:00 2001 From: Evan Sosenko Date: Tue, 3 Oct 2023 18:04:30 -0700 Subject: [PATCH 5/6] Update fake-seam-connect --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 133697c1..ef8de738 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "axios": "^1.5.0" }, "devDependencies": { - "@seamapi/fake-seam-connect": "^1.16.0", + "@seamapi/fake-seam-connect": "^1.17.0", "@seamapi/types": "^1.14.0", "@types/eslint": "^8.44.2", "@types/node": "^18.11.18", @@ -792,9 +792,9 @@ } }, "node_modules/@seamapi/fake-seam-connect": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/@seamapi/fake-seam-connect/-/fake-seam-connect-1.16.0.tgz", - "integrity": "sha512-FMnYhMDMLI8BQdmKYFoctekeh+JLAmY/Kn+8MJ+YoxDm5SODgwzu0AjBwcuc8zjqmX4pG9psvkXQ2ZDynwuUGQ==", + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/@seamapi/fake-seam-connect/-/fake-seam-connect-1.17.0.tgz", + "integrity": "sha512-WKZ0HUI6y5Q025rMh1It15i8JMz8gXoC3Km81NNss0R0Jl5ubMNGKlUOO1MetXkhTc5pa3i1ARORS/AXYZ94HQ==", "dev": true, "bin": { "fake-seam-connect": "dist/server.js" diff --git a/package.json b/package.json index 7876116d..40c29b20 100644 --- a/package.json +++ b/package.json @@ -87,7 +87,7 @@ "axios": "^1.5.0" }, "devDependencies": { - "@seamapi/fake-seam-connect": "^1.16.0", + "@seamapi/fake-seam-connect": "^1.17.0", "@seamapi/types": "^1.14.0", "@types/eslint": "^8.44.2", "@types/node": "^18.11.18", From 255586d50ddda420d8ce4de5cce014f9af113924 Mon Sep 17 00:00:00 2001 From: Evan Sosenko Date: Tue, 3 Oct 2023 18:08:15 -0700 Subject: [PATCH 6/6] Add serialization test --- test/seam/connect/serialization.test.ts | 33 +++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 test/seam/connect/serialization.test.ts diff --git a/test/seam/connect/serialization.test.ts b/test/seam/connect/serialization.test.ts new file mode 100644 index 00000000..e0f08793 --- /dev/null +++ b/test/seam/connect/serialization.test.ts @@ -0,0 +1,33 @@ +import test from 'ava' +import { getTestServer } from 'fixtures/seam/connect/api.js' + +import { SeamHttp } from '@seamapi/http/connect' + +test('serializes array params when undefined', async (t) => { + const { seed, endpoint } = await getTestServer(t) + const client = SeamHttp.fromApiKey(seed.seam_apikey1_token, { endpoint }) + const devices = await client.devices.list({ + device_ids: undefined, + }) + t.is(devices.length, 4) +}) + +test('serializes array params when empty', async (t) => { + const { seed, endpoint } = await getTestServer(t) + const client = SeamHttp.fromApiKey(seed.seam_apikey1_token, { endpoint }) + const devices = await client.devices.list({ + device_ids: [], + }) + t.is(devices.length, 0) +}) + +test('serializes array params when non-empty', async (t) => { + const { seed, endpoint } = await getTestServer(t) + const client = SeamHttp.fromApiKey(seed.seam_apikey1_token, { endpoint }) + const devices = await client.devices.list({ + device_ids: [seed.august_device_1, seed.ecobee_device_1], + }) + t.is(devices.length, 2) + t.true(devices.some((d) => d.device_id === seed.august_device_1)) + t.true(devices.some((d) => d.device_id === seed.ecobee_device_1)) +})