diff --git a/package-lock.json b/package-lock.json index ef6e433a..6d3a6955 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,7 +15,7 @@ "@godaddy/terminus": "^4.12.1", "@seamapi/fake-devicedb": "^1.6.0", "@seamapi/logger": "^1.9.2", - "@seamapi/types": "^1.121.0", + "@seamapi/types": "^1.200.0", "@seamapi/url-search-params-serializer": "^1.1.0", "@tsconfig/next": "^1.0.5", "@types/lodash": "^4.14.202", @@ -1136,22 +1136,16 @@ } }, "node_modules/@seamapi/types": { - "version": "1.121.0", - "resolved": "https://registry.npmjs.org/@seamapi/types/-/types-1.121.0.tgz", - "integrity": "sha512-QOdsIMGiO90G0lMMl9paqL707KOyege4gmqVtCgi6nQXPgZrajN4EWDPHVTFXM470XFdBXU3xbIR/K/m+5l2ww==", + "version": "1.200.0", + "resolved": "https://registry.npmjs.org/@seamapi/types/-/types-1.200.0.tgz", + "integrity": "sha512-ZviqADOl09BGb4xRaZeb7ROfEEUBJReOHfUL5M9CiZxC9U7SzYj/p2mWEZP7PxM/iv4E+fOG3kORTfuzynr1XQ==", "dev": true, "engines": { "node": ">=18.12.0", "npm": ">= 9.0.0" }, "peerDependencies": { - "type-fest": "^4.3.1", "zod": "^3.21.4" - }, - "peerDependenciesMeta": { - "type-fest": { - "optional": true - } } }, "node_modules/@seamapi/url-search-params-serializer": { diff --git a/package.json b/package.json index 68ca22c1..d6e7acc5 100644 --- a/package.json +++ b/package.json @@ -69,7 +69,7 @@ "@godaddy/terminus": "^4.12.1", "@seamapi/fake-devicedb": "^1.6.0", "@seamapi/logger": "^1.9.2", - "@seamapi/types": "^1.121.0", + "@seamapi/types": "^1.200.0", "@seamapi/url-search-params-serializer": "^1.1.0", "@tsconfig/next": "^1.0.5", "@types/lodash": "^4.14.202", diff --git a/src/lib/database/schema.ts b/src/lib/database/schema.ts index 00ebc3cf..265753c3 100644 --- a/src/lib/database/schema.ts +++ b/src/lib/database/schema.ts @@ -178,6 +178,9 @@ export interface DatabaseMethods { workspace_id: string name: string properties?: Partial + can_remotely_lock?: boolean + can_remotely_unlock?: boolean + can_program_online_access_codes?: boolean errors?: Device["errors"] warnings?: Device["warnings"] created_at?: string diff --git a/src/lib/database/seed.ts b/src/lib/database/seed.ts index a27abe6f..b36ebb2d 100644 --- a/src/lib/database/seed.ts +++ b/src/lib/database/seed.ts @@ -101,6 +101,9 @@ export const seedDatabase = (db: Database): Seed => { device_type: "august_lock", name: "Front Door", workspace_id: seed.seed_workspace_1, + can_remotely_lock: true, + can_remotely_unlock: true, + can_program_online_access_codes: true, properties: { name: "Fake August Lock 1", manufacturer: "august", @@ -121,6 +124,9 @@ export const seedDatabase = (db: Database): Seed => { device_type: "august_lock", name: "Back Door", workspace_id: seed.seed_workspace_1, + can_remotely_lock: true, + can_remotely_unlock: true, + can_program_online_access_codes: true, properties: { name: "Fake August Lock 2", manufacturer: "august", @@ -185,6 +191,9 @@ export const seedDatabase = (db: Database): Seed => { device_type: "schlage_lock", name: "Bathroom Door", workspace_id: seed.seed_workspace_1, + can_remotely_lock: true, + can_remotely_unlock: true, + can_program_online_access_codes: true, properties: { locked: true, }, diff --git a/src/lib/zod/device.ts b/src/lib/zod/device.ts index c04dd5b3..54122fae 100644 --- a/src/lib/zod/device.ts +++ b/src/lib/zod/device.ts @@ -1,3 +1,4 @@ +import { schemas } from "@seamapi/types/connect" import { z } from "zod" import { climate_setting } from "lib/zod/climate_setting.ts" @@ -166,36 +167,44 @@ export const noise_sensor_device_properties = common_device_properties.extend({ .optional(), }) -export const device = z.object({ - device_id: z.string(), - display_name: z.string(), - device_type, - capabilities_supported: z.array(z.string()), - properties: z.union([ - common_device_properties, - lock_device_properties, - thermostat_device_properties, - noise_sensor_device_properties, - ]), - location: z.any(), - connected_account_id: z.string().optional(), - is_managed: z.boolean(), - workspace_id: z.string(), - errors: z.array( - z.object({ - error_code: z.string(), - message: z.string(), - }), - ), - warnings: z.array( - z.object({ - warning_code: z.string(), - message: z.string(), +export const device = z + .object({ + device_id: z.string(), + display_name: z.string(), + device_type, + capabilities_supported: z.array(z.string()), + properties: z.union([ + common_device_properties, + lock_device_properties, + thermostat_device_properties, + noise_sensor_device_properties, + ]), + location: z.any(), + connected_account_id: z.string().optional(), + is_managed: z.boolean(), + workspace_id: z.string(), + errors: z.array( + z.object({ + error_code: z.string(), + message: z.string(), + }), + ), + warnings: z.array( + z.object({ + warning_code: z.string(), + message: z.string(), + }), + ), + created_at: z.string(), + custom_metadata, + }) + .merge( + schemas.device.pick({ + can_remotely_lock: true, + can_remotely_unlock: true, + can_program_online_access_codes: true, }), - ), - created_at: z.string(), - custom_metadata, -}) + ) export const unmanaged_device = device .pick({ diff --git a/src/route-types.ts b/src/route-types.ts index 519f2d31..fea17a95 100644 --- a/src/route-types.ts +++ b/src/route-types.ts @@ -2228,6 +2228,9 @@ export type Routes = { custom_metadata: { [x: string]: string | number | null | boolean } + can_remotely_lock?: boolean | undefined + can_remotely_unlock?: boolean | undefined + can_program_online_access_codes?: boolean | undefined } ok: boolean } @@ -2519,6 +2522,9 @@ export type Routes = { custom_metadata: { [x: string]: string | number | null | boolean } + can_remotely_lock?: boolean | undefined + can_remotely_unlock?: boolean | undefined + can_program_online_access_codes?: boolean | undefined }[] ok: boolean } @@ -3454,6 +3460,9 @@ export type Routes = { custom_metadata: { [x: string]: string | number | null | boolean } + can_remotely_lock?: boolean | undefined + can_remotely_unlock?: boolean | undefined + can_program_online_access_codes?: boolean | undefined } device: { device_id: string @@ -3703,6 +3712,9 @@ export type Routes = { custom_metadata: { [x: string]: string | number | null | boolean } + can_remotely_lock?: boolean | undefined + can_remotely_unlock?: boolean | undefined + can_program_online_access_codes?: boolean | undefined } ok: boolean } @@ -3994,6 +4006,9 @@ export type Routes = { custom_metadata: { [x: string]: string | number | null | boolean } + can_remotely_lock?: boolean | undefined + can_remotely_unlock?: boolean | undefined + can_program_online_access_codes?: boolean | undefined }[] devices: { device_id: string @@ -4243,6 +4258,9 @@ export type Routes = { custom_metadata: { [x: string]: string | number | null | boolean } + can_remotely_lock?: boolean | undefined + can_remotely_unlock?: boolean | undefined + can_program_online_access_codes?: boolean | undefined }[] ok: boolean } @@ -4966,6 +4984,9 @@ export type Routes = { custom_metadata: { [x: string]: string | number | null | boolean } + can_remotely_lock?: boolean | undefined + can_remotely_unlock?: boolean | undefined + can_program_online_access_codes?: boolean | undefined } ok: boolean } @@ -5310,6 +5331,9 @@ export type Routes = { custom_metadata: { [x: string]: string | number | null | boolean } + can_remotely_lock?: boolean | undefined + can_remotely_unlock?: boolean | undefined + can_program_online_access_codes?: boolean | undefined }[] ok: boolean }