import {z} from 'zod' export type GetApiEventsTypesOptions = {baseUrl?: string | undefined, KisiLogin?: string | undefined, fetch?: typeof fetch | undefined}; export const getApiEventsTypesResponse = z.array(z.enum(["access_key.create", "access_key.destroy", "amenity.create", "amenity.destroy", "amenity.update", "apple_pass.destroy", "apple_pass_instance.destroy", "apple_pass_instance.resume", "apple_pass_instance.suspend", "beacon.update", "booking.cancel", "booking.create", "camera.create", "camera.destroy", "camera.import", "camera.rate_limited", "camera_snapshot_set.create", "camera.update", "card.activate_with_token", "card.activate", "card.assign", "card.create", "card.deactivate", "card.deassign", "card.destroy", "card.update", "communication_policy.update", "controller.assign", "controller.deassign", "controller_input.closed", "controller_input_connection.create", "controller_input_connection.destroy", "controller_input_connection.update", "controller_input.opened", "controller_input.tamper", "controller_input.triggered", "controller.reboot", "controller_relay_connection.create", "controller_relay_connection.destroy", "controller_relay_connection.update", "controller.tamper", "controller.update", "controller.wiegand_board_connect", "controller.wiegand_board_disconnect", "controller_wiegand_connection.create", "controller_wiegand_connection.destroy", "controller_wiegand_connection.excessive_pin_attempts", "controller_wiegand_connection.update", "csv_card_import.create", "csv_user_import.create", "custom_role.create", "custom_role.destroy", "custom_role.update", "elevator.create", "elevator.destroy", "elevator.permit", "elevator_stop.cancel_lockdown", "elevator_stop.create", "elevator_stop.destroy", "elevator_stop.lock_down", "elevator_stop.scheduled_permit_ended", "elevator_stop.scheduled_permit_started", "elevator_stop.update", "elevator.update", "event_retention_policy.create", "event_retention_policy.destroy", "event_retention_policy.update", "face_credential.create", "face_credential.destroy", "face_credential.enroll", "floor.create", "floor.destroy", "floor.update", "group.create", "group.destroy", "group_elevator_stop.create", "group_elevator_stop.destroy", "group_link.create", "group_link.destroy", "group_lock.create", "group_lock.destroy", "group_terminal.create", "group_terminal.destroy", "group.update", "group_zone.create", "group_zone.destroy", "guest.create", "guest.destroy", "incident.create", "incident_policy.create", "incident_policy.destroy", "incident_policy_subscription.create", "incident_policy_subscription.destroy", "incident_policy_subscription.update", "incident_policy.update", "incident.update", "integration.create", "integration.destroy", "integration.disable_due_to_error", "integration.update", "integration.warn_due_to_error", "intercom.answer_call", "intercom.assign", "intercom_assignment.create", "intercom_assignment.destroy", "intercom_completed_call.create", "intercom.deassign", "intercom.dismiss_call", "intercom.finish_call", "intercom.initiate_streaming", "intercom.miss_call", "intercom.timeout_call", "intercom.trigger_call", "intercom.update", "invite.create", "kiosk.assign", "kiosk.deassign", "kiosk_shortcut.create", "kiosk_shortcut.destroy", "kiosk.update", "lock.cancel_lockdown", "lock.closed", "lock.create", "lock.destroy", "lock.first_to_arrive", "lock.forced_open", "lock.held_open", "lock.last_to_leave", "lock.lock_down", "lock.locked", "lock.opened", "lock.scheduled_unlock_ended", "lock.scheduled_unlock_started", "lock.tailgate", "lock.unlock", "lock.update", "login.create", "login.destroy", "login.promote", "login.resolve", "marketplace_app_share.create", "marketplace_app_share.destroy", "marketplace_installation.create", "marketplace_installation.destroy", "marketplace_installation.update", "marketplace_shortcut.create", "marketplace_shortcut.destroy", "marketplace_shortcut.update", "member.create", "member.destroy", "member.update", "third_party_hf_uid_read_configuration.create", "third_party_hf_uid_read_configuration.destroy", "mifare_classic_data_block_configuration.create", "mifare_classic_data_block_configuration.destroy", "mifare_desfire_extra_application_configuration.create", "mifare_desfire_master_key_configuration.create", "mobile_cache_policy.update", "mobile_cache_policy.invalidate", "organization.accept_transfer", "organization.cancel_transfer", "organization.create", "organization.generate_next_certificate", "organization.reject_transfer", "organization.request_transfer", "organization.reset_scim_token", "organization.rotate_certificate", "organization.update", "place.cancel_lockdown", "place_card.create", "place_card.destroy", "place.create", "place.destroy", "place.lock_down", "place.occupancy_rate_limit_reach", "place.update", "reader.access", "reader.assign", "reader.deassign", "reader.reboot", "reader.reset_tamper", "reader.tamper", "reader.update", "report.create", "report.destroy", "report.download", "report.finish", "role_assignment.create", "role_assignment.destroy", "role_assignment.update", "schedule.create", "schedule.destroy", "schedule.update", "scheduled_report.create", "scheduled_report.destroy", "scheduled_report.update", "share.create", "share.destroy", "share.update", "subscription.update", "team.create", "team.destroy", "team_membership.create", "team_membership.destroy", "team.update", "terminal.create", "terminal.destroy", "terminal.trigger", "terminal.update", "user.activate_2fa", "user.create_backup_codes", "user.create_password", "user.create", "user.deactivate_2fa", "user.destroy", "user.show_confirmation", "user.update_password", "user.update", "visualization_page_reporter.create", "visualization_page_reporter.destroy", "visualization_page_share.create", "visualization_page_share.destroy", "wireless_lock.battery_warning", "wireless_lock.closed", "wireless_lock_connection.create", "wireless_lock_connection.destroy", "wireless_lock_connection.update", "wireless_lock.disenroll", "wireless_lock.locked", "wireless_lock.opened", "wireless_lock.tampered", "wireless_lock.unlocked", "wireless_lock.update", "zone.create", "zone.destroy", "zone.external_mode_override", "zone.override", "zone.policy_activate", "zone.policy_override", "zone.policy_transition", "zone.policy_violate", "zone.reset", "zone.update"])); 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 }; /** * Fetch Event Types * * GET /events/types * * Also accepts auth: OAuth2 */ export const getApiEventsTypes = async (options?: GetApiEventsTypesOptions) => { const {baseUrl = "https://api.kisi.io", fetch: fetchFn = fetch, KisiLogin} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (KisiLogin !== undefined) headers.set("Authorization", KisiLogin) const url = `${baseUrl.replace(/\/+$/, '')}/events/types${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "GET", headers}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(getApiEventsTypesResponse, await res.json()) };