import {z} from 'zod' export type CreateApiLocksGetArgs = {body: {device_id?: string | undefined, name?: string | undefined}}; export type CreateApiLocksGetOptions = {baseUrl?: string | undefined, clientSession?: string | undefined, fetch?: typeof fetch | undefined}; export const device = z.object({can_configure_auto_lock: z.boolean().optional(), can_hvac_cool: z.boolean().optional(), can_hvac_heat: z.boolean().optional(), can_hvac_heat_cool: z.boolean().optional(), can_program_offline_access_codes: z.boolean().optional(), can_program_online_access_codes: z.boolean().optional(), can_program_thermostat_programs_as_different_each_day: z.boolean().optional(), can_program_thermostat_programs_as_same_each_day: z.boolean().optional(), can_program_thermostat_programs_as_weekday_weekend: z.boolean().optional(), can_remotely_lock: z.boolean().optional(), can_remotely_unlock: z.boolean().optional(), can_run_thermostat_programs: z.boolean().optional(), can_simulate_connection: z.boolean().optional(), can_simulate_disconnection: z.boolean().optional(), can_simulate_hub_connection: z.boolean().optional(), can_simulate_hub_disconnection: z.boolean().optional(), can_simulate_paid_subscription: z.boolean().optional(), can_simulate_removal: z.boolean().optional(), can_turn_off_hvac: z.boolean().optional(), can_unlock_with_code: z.boolean().optional(), capabilities_supported: z.array(z.enum(["access_code", "lock", "noise_detection", "thermostat", "battery", "phone"])), connected_account_id: z.string(), created_at: z.string(), custom_metadata: z.record(z.string(), z.union([z.string(), z.boolean()])), device_id: z.string(), device_manufacturer: z.object({display_name: z.string(), image_url: z.string().optional(), manufacturer: z.string()}).optional(), device_provider: z.object({device_provider_name: z.string(), display_name: z.string(), image_url: z.string().optional(), provider_category: z.string()}).optional(), device_type: z.union([z.enum(["akuvox_lock", "august_lock", "brivo_access_point", "butterflymx_panel", "avigilon_alta_entry", "doorking_lock", "genie_door", "igloo_lock", "linear_lock", "lockly_lock", "kwikset_lock", "nuki_lock", "salto_lock", "schlage_lock", "smartthings_lock", "wyze_lock", "yale_lock", "two_n_intercom", "controlbyweb_device", "ttlock_lock", "igloohome_lock", "four_suites_door", "dormakaba_oracode_door", "tedee_lock", "akiles_lock", "ultraloq_lock", "keyincode_lock", "omnitec_lock", "kisi_lock"]), z.literal("keynest_key"), z.enum(["noiseaware_activity_zone", "minut_sensor"]), z.enum(["ecobee_thermostat", "nest_thermostat", "honeywell_resideo_thermostat", "tado_thermostat", "sensi_thermostat", "smartthings_thermostat"]), z.enum(["ios_phone", "android_phone"]), z.literal("ring_camera")]), display_name: z.string(), errors: z.array(z.object({error_code: z.string().optional(), message: z.string().optional(), created_at: z.string().optional()})), is_managed: z.literal(true), location: z.object({location_name: z.string().optional(), time_zone: z.string().optional(), timezone: z.string().optional()}).optional(), nickname: z.string().optional(), properties: z.object({accessory_keypad: z.object({battery: z.object({level: z.number().gte(0).lte(1)}).optional(), is_connected: z.boolean()}).optional(), appearance: z.object({name: z.string()}), battery: z.object({level: z.number().gte(0).lte(1), status: z.enum(["critical", "low", "good", "full"])}).optional(), battery_level: z.number().gte(0).lte(1).optional(), currently_triggering_noise_threshold_ids: z.array(z.string()).optional(), has_direct_power: z.boolean().optional(), image_alt_text: z.string().optional(), image_url: z.string().optional(), manufacturer: z.string().optional(), model: z.object({accessory_keypad_supported: z.boolean().optional(), can_connect_accessory_keypad: z.boolean().optional(), display_name: z.string(), has_built_in_keypad: z.boolean().optional(), manufacturer_display_name: z.string(), offline_access_codes_supported: z.boolean().optional(), online_access_codes_supported: z.boolean().optional()}), name: z.string(), noise_level_decibels: z.number().optional(), offline_access_codes_enabled: z.boolean().optional(), online: z.boolean(), online_access_codes_enabled: z.boolean().optional(), serial_number: z.string().optional(), supports_accessory_keypad: z.boolean().optional(), supports_offline_access_codes: z.boolean().optional(), assa_abloy_credential_service_metadata: z.object({endpoints: z.array(z.object({endpoint_id: z.string().optional(), is_active: z.boolean().optional()})).optional(), has_active_endpoint: z.boolean().optional()}).optional(), salto_space_credential_service_metadata: z.object({has_active_phone: z.boolean().optional()}).optional(), akiles_metadata: z.object({_member_group_id: z.string().optional(), gadget_id: z.string().optional(), gadget_name: z.string().optional(), product_name: z.string().optional()}).optional(), assa_abloy_vostio_metadata: z.object({encoder_name: z.string().optional()}).optional(), august_metadata: z.object({has_keypad: z.boolean().optional(), house_id: z.string().optional(), house_name: z.string().optional(), keypad_battery_level: z.string().optional(), lock_id: z.string().optional(), lock_name: z.string().optional(), model: z.string().optional()}).optional(), avigilon_alta_metadata: z.object({entry_name: z.string().optional(), entry_relays_total_count: z.number().optional(), org_name: z.string().optional(), site_id: z.number().optional(), site_name: z.string().optional(), zone_id: z.number().optional(), zone_name: z.string().optional()}).optional(), brivo_metadata: z.object({activation_enabled: z.boolean().optional(), device_name: z.string().optional()}).optional(), controlbyweb_metadata: z.object({device_id: z.string().optional(), device_name: z.string().optional(), relay_name: z.string().nullable().optional()}).optional(), dormakaba_oracode_metadata: z.object({device_id: z.union([z.number(), z.string()]).optional(), door_id: z.number().optional(), door_is_wireless: z.boolean().optional(), door_name: z.string().optional(), iana_timezone: z.string().optional(), predefined_time_slots: z.array(z.object({check_in_time: z.string().optional(), check_out_time: z.string().optional(), dormakaba_oracode_user_level_id: z.string().optional(), dormakaba_oracode_user_level_prefix: z.number().optional(), is_24_hour: z.boolean().optional(), is_biweekly_mode: z.boolean().optional(), is_master: z.boolean().optional(), is_one_shot: z.boolean().optional(), name: z.string().optional(), prefix: z.number().optional()})).optional(), site_id: z.number().nullable().optional(), site_name: z.string().optional()}).optional(), ecobee_metadata: z.object({device_name: z.string().optional(), ecobee_device_id: z.string().optional()}).optional(), four_suites_metadata: z.object({device_id: z.number().optional(), device_name: z.string().optional(), reclose_delay_in_seconds: z.number().optional()}).optional(), genie_metadata: z.object({device_name: z.string().optional(), door_name: z.string().optional()}).optional(), honeywell_resideo_metadata: z.object({device_name: z.string().optional(), honeywell_resideo_device_id: z.string().optional()}).optional(), igloo_metadata: z.object({bridge_id: z.string().optional(), device_id: z.string().optional(), model: z.string().optional()}).optional(), igloohome_metadata: z.object({bridge_id: z.string().optional(), bridge_name: z.string().optional(), device_id: z.string().optional(), device_name: z.string().optional(), is_accessory_keypad_linked_to_bridge: z.boolean().optional(), keypad_id: z.string().optional()}).optional(), keynest_metadata: z.object({address: z.string().nullable().optional(), current_or_last_store_id: z.number().optional(), current_status: z.string().nullable().optional(), current_user_company: z.string().nullable().optional(), current_user_email: z.string().nullable().optional(), current_user_name: z.string().nullable().optional(), current_user_phone_number: z.string().nullable().optional(), default_office_id: z.number().optional(), device_name: z.string().optional(), fob_id: z.number().optional(), handover_method: z.string().nullable().optional(), has_photo: z.boolean().optional(), is_quadient_locker: z.boolean().optional(), key_id: z.string().optional(), key_notes: z.string().nullable().optional(), keynest_app_user: z.string().nullable().optional(), last_movement: z.string().optional(), property_id: z.string().nullable().optional(), property_postcode: z.string().nullable().optional(), status_type: z.string().optional(), subscription_plan: z.string().optional()}).optional(), kisi_metadata: z.object({description: z.string().nullable().optional(), lock_id: z.number().optional(), lock_name: z.string().optional(), place_name: z.string().nullable().optional()}).optional(), korelock_metadata: z.object({device_id: z.string().optional(), device_name: z.string().optional(), firmware_version: z.string().optional(), location_id: z.string().nullable().optional(), model_code: z.string().optional(), serial_number: z.string().optional(), wifi_signal_strength: z.number().optional()}).optional(), kwikset_metadata: z.object({device_id: z.string().optional(), device_name: z.string().optional(), model_number: z.string().optional()}).optional(), lockly_metadata: z.object({device_id: z.string().optional(), device_name: z.string().optional(), model: z.string().optional()}).optional(), minut_metadata: z.object({device_id: z.string().optional(), device_name: z.string().optional(), latest_sensor_values: z.object({accelerometer_z: z.object({time: z.string().optional(), value: z.number().optional()}).optional(), humidity: z.object({time: z.string().optional(), value: z.number().optional()}).optional(), pressure: z.object({time: z.string().optional(), value: z.number().optional()}).optional(), sound: z.object({time: z.string().optional(), value: z.number().optional()}).optional(), temperature: z.object({time: z.string().optional(), value: z.number().optional()}).optional()}).optional()}).optional(), nest_metadata: z.object({device_custom_name: z.string().optional(), device_name: z.string().optional(), display_name: z.string().optional(), nest_device_id: z.string().optional()}).optional(), noiseaware_metadata: z.object({device_id: z.string().optional(), device_model: z.enum(["indoor", "outdoor"]).optional(), device_name: z.string().optional(), noise_level_decibel: z.number().optional(), noise_level_nrs: z.number().optional()}).optional(), nuki_metadata: z.object({device_id: z.string().optional(), device_name: z.string().optional(), keypad_2_paired: z.boolean().optional(), keypad_battery_critical: z.boolean().optional(), keypad_paired: z.boolean().optional()}).optional(), omnitec_metadata: z.object({has_gateway: z.boolean().optional(), lock_alias: z.string().optional(), lock_id: z.number().optional(), lock_mac: z.string().optional(), lock_name: z.string().optional(), time_zone: z.string().nullable().optional(), timezone_raw_offset_ms: z.number().optional()}).optional(), ring_metadata: z.object({device_id: z.string().optional(), device_name: z.string().optional()}).optional(), salto_ks_metadata: z.object({battery_level: z.string().optional(), customer_reference: z.string().optional(), has_custom_pin_subscription: z.boolean().optional(), lock_id: z.string().optional(), lock_type: z.string().optional(), locked_state: z.string().optional(), model: z.string().optional(), site_id: z.string().optional(), site_name: z.string().optional()}).optional(), salto_metadata: z.object({battery_level: z.string().optional(), customer_reference: z.string().optional(), lock_id: z.string().optional(), lock_type: z.string().optional(), locked_state: z.string().optional(), model: z.string().optional(), site_id: z.string().optional(), site_name: z.string().optional()}).optional(), schlage_metadata: z.object({device_id: z.string().optional(), device_name: z.string().optional(), model: z.string().optional()}).optional(), seam_bridge_metadata: z.object({device_num: z.number().optional(), name: z.string().optional(), unlock_method: z.enum(["bridge", "doorking"]).optional()}).optional(), sensi_metadata: z.object({device_id: z.string().optional(), device_name: z.string().optional(), dual_setpoints_not_supported: z.boolean().optional(), enforced_setpoint_range_celsius: z.unknown(), product_type: z.string().optional()}).optional(), smartthings_metadata: z.object({device_id: z.string().optional(), device_name: z.string().optional(), location_id: z.string().optional(), model: z.string().optional()}).optional(), tado_metadata: z.object({device_type: z.string().optional(), serial_no: z.string().optional()}).optional(), tedee_metadata: z.object({bridge_id: z.number().optional(), bridge_name: z.string().optional(), device_id: z.number().optional(), device_model: z.string().optional(), device_name: z.string().optional(), keypad_id: z.number().optional(), serial_number: z.string().optional()}).optional(), ttlock_metadata: z.object({feature_value: z.string().optional(), features: z.object({auto_lock_time_config: z.boolean().optional(), incomplete_keyboard_passcode: z.boolean().optional(), lock_command: z.boolean().optional(), passcode: z.boolean().optional(), passcode_management: z.boolean().optional(), unlock_via_gateway: z.boolean().optional(), wifi: z.boolean().optional()}).optional(), has_gateway: z.boolean().optional(), lock_alias: z.string().optional(), lock_id: z.number().optional(), timezone_raw_offset_ms: z.number().nullable().optional(), wireless_keypads: z.array(z.object({wireless_keypad_id: z.number().optional(), wireless_keypad_name: z.string().optional()})).optional()}).optional(), two_n_metadata: z.object({device_id: z.number().optional(), device_name: z.string().optional()}).optional(), ultraloq_metadata: z.object({device_id: z.string().optional(), device_name: z.string().optional(), device_type: z.string().optional(), time_zone: z.string().nullable().optional()}).optional(), visionline_metadata: z.object({encoder_id: z.string().optional()}).optional(), wyze_metadata: z.object({device_id: z.string().optional(), device_info_model: z.string().optional(), device_name: z.string().optional(), keypad_uuid: z.string().optional(), locker_status_hardlock: z.number().optional(), product_model: z.string().optional(), product_name: z.string().optional(), product_type: z.string().optional()}).optional(), auto_lock_delay_seconds: z.number().optional(), auto_lock_enabled: z.boolean().optional(), backup_access_code_pool_enabled: z.boolean().optional(), code_constraints: z.array(z.union([z.object({constraint_type: z.enum(["no_zeros", "cannot_start_with_12", "no_triple_consecutive_ints", "cannot_specify_pin_code", "pin_code_matches_existing_set", "start_date_in_future", "no_ascending_or_descending_sequence", "at_least_three_unique_digits", "cannot_contain_089", "cannot_contain_0789", "unique_first_four_digits", "no_all_same_digits"])}), z.object({constraint_type: z.enum(["name_length", "name_must_be_unique"]), max_length: z.number().optional(), min_length: z.number().optional()})])).optional(), door_open: z.boolean().optional(), has_native_entry_events: z.boolean().optional(), keypad_battery: z.object({level: z.number()}).optional(), locked: z.boolean().optional(), max_active_codes_supported: z.number().optional(), offline_time_frame_options: z.array(z.object({display_name: z.string(), end_date_recurrence_rule: z.string().optional(), matching_start_end_time: z.literal(true).optional(), max_duration: z.string().optional(), min_duration: z.string().optional(), start_date_recurrence_rule: z.string().optional(), time_pairs: z.array(z.object({display_name: z.string(), end_time: z.string(), start_time: z.string()})).optional(), time_zone: z.string().optional()})).optional(), online_time_frame_options: z.array(z.object({display_name: z.string(), end_date_recurrence_rule: z.string().optional(), matching_start_end_time: z.literal(true).optional(), max_duration: z.string().optional(), min_duration: z.string().optional(), start_date_recurrence_rule: z.string().optional(), time_pairs: z.array(z.object({display_name: z.string(), end_time: z.string(), start_time: z.string()})).optional(), time_zone: z.string().optional()})).optional(), supported_code_lengths: z.array(z.number()).optional(), supports_backup_access_code_pool: z.boolean().optional(), active_thermostat_schedule: z.object({climate_preset_key: z.string(), created_at: z.string(), device_id: z.string(), ends_at: z.string(), errors: z.array(z.object({error_code: z.string(), message: z.string()})), is_override_allowed: z.boolean().optional(), max_override_period_minutes: z.number().int().gt(0).nullable().optional(), name: z.string().nullable(), starts_at: z.string(), thermostat_schedule_id: z.string(), workspace_id: z.string()}).nullable().optional(), active_thermostat_schedule_id: z.string().nullable().optional(), available_climate_preset_modes: z.array(z.enum(["home", "away", "wake", "sleep", "occupied", "unoccupied"])).optional(), available_climate_presets: z.array(z.object({can_delete: z.boolean(), can_edit: z.boolean(), can_use_with_thermostat_daily_programs: z.boolean(), climate_preset_key: z.string(), climate_preset_mode: z.enum(["home", "away", "wake", "sleep", "occupied", "unoccupied"]).optional(), cooling_set_point_celsius: z.number().optional(), cooling_set_point_fahrenheit: z.number().optional(), display_name: z.string(), ecobee_metadata: z.object({climate_ref: z.string().optional(), is_optimized: z.boolean().optional(), owner: z.enum(["user", "system"]).optional()}).optional(), fan_mode_setting: z.enum(["auto", "on", "circulate"]).optional(), heating_set_point_celsius: z.number().optional(), heating_set_point_fahrenheit: z.number().optional(), hvac_mode_setting: z.enum(["off", "heat", "cool", "heat_cool", "eco"]).optional(), manual_override_allowed: z.boolean(), name: z.string().nullable().optional()})).optional(), available_fan_mode_settings: z.array(z.enum(["auto", "on", "circulate"])).optional(), available_hvac_mode_settings: z.array(z.enum(["off", "heat", "cool", "heat_cool", "eco"])).optional(), current_climate_setting: z.object({can_delete: z.boolean().optional(), can_edit: z.boolean().optional(), can_use_with_thermostat_daily_programs: z.boolean().optional(), climate_preset_key: z.string().optional(), climate_preset_mode: z.enum(["home", "away", "wake", "sleep", "occupied", "unoccupied"]).optional(), cooling_set_point_celsius: z.number().optional(), cooling_set_point_fahrenheit: z.number().optional(), display_name: z.string().optional(), ecobee_metadata: z.object({climate_ref: z.string().optional(), is_optimized: z.boolean().optional(), owner: z.enum(["user", "system"]).optional()}).optional(), fan_mode_setting: z.enum(["auto", "on", "circulate"]).optional(), heating_set_point_celsius: z.number().optional(), heating_set_point_fahrenheit: z.number().optional(), hvac_mode_setting: z.enum(["off", "heat", "cool", "heat_cool", "eco"]).optional(), manual_override_allowed: z.boolean().optional(), name: z.string().nullable().optional()}).optional(), default_climate_setting: z.object({can_delete: z.boolean().optional(), can_edit: z.boolean().optional(), can_use_with_thermostat_daily_programs: z.boolean().optional(), climate_preset_key: z.string().optional(), climate_preset_mode: z.enum(["home", "away", "wake", "sleep", "occupied", "unoccupied"]).optional(), cooling_set_point_celsius: z.number().optional(), cooling_set_point_fahrenheit: z.number().optional(), display_name: z.string().optional(), ecobee_metadata: z.object({climate_ref: z.string().optional(), is_optimized: z.boolean().optional(), owner: z.enum(["user", "system"]).optional()}).optional(), fan_mode_setting: z.enum(["auto", "on", "circulate"]).optional(), heating_set_point_celsius: z.number().optional(), heating_set_point_fahrenheit: z.number().optional(), hvac_mode_setting: z.enum(["off", "heat", "cool", "heat_cool", "eco"]).optional(), manual_override_allowed: z.boolean().optional(), name: z.string().nullable().optional()}).optional(), fallback_climate_preset_key: z.string().min(1).nullable().optional(), fan_mode_setting: z.enum(["auto", "on", "circulate"]).optional(), is_cooling: z.boolean().optional(), is_fan_running: z.boolean().optional(), is_heating: z.boolean().optional(), is_temporary_manual_override_active: z.boolean().optional(), max_cooling_set_point_celsius: z.number().optional(), max_cooling_set_point_fahrenheit: z.number().optional(), max_heating_set_point_celsius: z.number().optional(), max_heating_set_point_fahrenheit: z.number().optional(), max_thermostat_daily_program_periods_per_day: z.number().optional(), max_unique_climate_presets_per_thermostat_weekly_program: z.number().optional(), min_cooling_set_point_celsius: z.number().optional(), min_cooling_set_point_fahrenheit: z.number().optional(), min_heating_cooling_delta_celsius: z.number().optional(), min_heating_cooling_delta_fahrenheit: z.number().optional(), min_heating_set_point_celsius: z.number().optional(), min_heating_set_point_fahrenheit: z.number().optional(), relative_humidity: z.number().gte(0).lte(1).optional(), temperature_celsius: z.number().optional(), temperature_fahrenheit: z.number().optional(), temperature_threshold: z.object({lower_limit_celsius: z.number().nullable(), lower_limit_fahrenheit: z.number().nullable(), upper_limit_celsius: z.number().nullable(), upper_limit_fahrenheit: z.number().nullable()}).optional(), thermostat_daily_program_period_precision_minutes: z.number().optional(), thermostat_daily_programs: z.array(z.object({created_at: z.string(), device_id: z.string(), name: z.string().nullable(), periods: z.array(z.object({climate_preset_key: z.string(), starts_at_time: z.string()})), thermostat_daily_program_id: z.string(), workspace_id: z.string()})).optional(), thermostat_weekly_program: z.object({created_at: z.string(), friday_program_id: z.string().nullable(), monday_program_id: z.string().nullable(), saturday_program_id: z.string().nullable(), sunday_program_id: z.string().nullable(), thursday_program_id: z.string().nullable(), tuesday_program_id: z.string().nullable(), wednesday_program_id: z.string().nullable()}).nullable().optional()}), space_ids: z.array(z.string()), warnings: z.array(z.object({error_code: z.string().optional(), message: z.string().optional(), created_at: z.string().optional()})), workspace_id: z.string()}); export const createApiLocksGetResponse = z.object({device: device}); export const validateResponse = async ( schema: { readonly '~standard': { readonly validate: (value: unknown) => ({ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }) | Promise<{ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }> } }, value: unknown ): Promise => { const result = await schema['~standard'].validate(value) if (result.issues !== undefined) { const detail = result.issues .map(({ message, path }) => path?.length ? `${path.map((segment) => String(typeof segment === 'object' ? segment.key : segment)).join('.')}: ${message}` : message ) .join('; ') throw new Error(`Response does not match the schema: ${detail}`, { cause: { issues: result.issues } }) } return result.value }; /** * Get a Lock * * POST /locks/get * * Also accepts auth: pat_with_workspace, console_session_with_workspace, api_key */ export const createApiLocksGet = async (args: CreateApiLocksGetArgs, options?: CreateApiLocksGetOptions) => { const {baseUrl = "https://connect.getseam.com", fetch: fetchFn = fetch, clientSession} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('content-type', "application/json") headers.set('accept', "application/json") if (clientSession !== undefined) headers.set('authorization', `Bearer ${clientSession}`) const url = `${baseUrl.replace(/\/+$/, '')}/locks/get${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "POST", headers, body: JSON.stringify(args.body)}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(createApiLocksGetResponse, await res.json()) };