homebridge-adt-pulse
Version:
Homebridge security system platform for ADT Pulse
142 lines • 4.48 kB
JavaScript
import { z } from 'zod';
export const configUiLogin = z.object({
subdomain: z.string()
.min(1, 'Please select a region.')
.refine((value) => ['portal', 'portal-ca'].includes(value), 'Please select a valid region.'),
username: z.string()
.min(1, 'Please enter your username.')
.max(100, 'Your username is too long.'),
password: z.string()
.min(1, 'Please enter your password.')
.max(300, 'Your password is too long.'),
});
export const configUiLoginResponse = z.object({
info: z.object({
methods: z.array(z.object({
id: z.string(),
type: z.union([
z.literal('SMS'),
z.literal('EMAIL'),
]),
label: z.string(),
})),
status: z.union([
z.literal('complete'),
z.literal('not-required'),
]),
}),
});
export const configUiRequestCode = z.object({
methodId: z.string()
.min(1, 'Please select a verification method.'),
});
export const configUiValidateCode = z.object({
otpCode: z.string()
.min(1, 'Please enter the verification code.')
.refine((value) => /^[0-9]{6}$/.test(value), 'Invalid verification code format.'),
});
export const configServerLogin = z.object({
subdomain: z.union([
z.literal('portal'),
z.literal('portal-ca'),
]),
username: z.string().min(1).max(100),
password: z.string().min(1).max(300),
});
export const configServerRequestCode = z.object({
methodId: z.string().min(1),
});
export const configServerValidate = z.object({
deviceName: z.string().min(1).max(100),
otpCode: z.string().length(6),
});
export const multiFactorAuth = z.object({
state: z.object({
mfaEnabled: z.boolean(),
label: z.string(),
numTrustedDevices: z.number().optional(),
mfaProperties: z.array(z.object({
id: z.string(),
type: z.union([
z.literal('SMS'),
z.literal('EMAIL'),
]),
label: z.string(),
caption: z.string(),
})),
trustedDevices: z.array(z.object({
id: z.string(),
name: z.string(),
label: z.string(),
})).optional(),
}),
commands: z.record(z.string(), z.object({
params: z.record(z.string(), z.object({
label: z.string().optional(),
options: z.array(z.object({
value: z.string(),
type: z.union([
z.literal('SMS'),
z.literal('EMAIL'),
]).optional(),
label: z.string(),
caption: z.string().optional(),
})).optional(),
type: z.union([
z.literal('boolean'),
z.literal('select'),
z.literal('textInput'),
]),
})),
method: z.literal('POST'),
action: z.string().startsWith('rest/adt/ui/client/multiFactorAuth/'),
label: z.string(),
})),
});
export const otpResponse = z.object({
code: z.number(),
detail: z.string(),
});
export const platformConfig = z.object({
platform: z.literal('ADTPulse'),
name: z.string().min(1).max(50),
subdomain: z.union([
z.literal('portal'),
z.literal('portal-ca'),
]),
username: z.string().min(1).max(100),
password: z.string().min(1).max(300),
fingerprint: z.string().min(1).max(10240),
mode: z.union([
z.literal('normal'),
z.literal('paused'),
z.literal('reset'),
]),
speed: z.union([
z.literal(1),
z.literal(0.75),
z.literal(0.5),
z.literal(0.25),
]),
options: z.array(z.union([
z.literal('disableAlarmRingingSwitch'),
z.literal('ignoreSensorProblemStatus'),
])).default([]),
sensors: z.array(z.object({
name: z.string().min(0).max(50).optional(),
adtName: z.string().min(1).max(100),
adtZone: z.number().min(1).max(99),
adtType: z.union([
z.literal('co'),
z.literal('doorWindow'),
z.literal('fire'),
z.literal('flood'),
z.literal('glass'),
z.literal('heat'),
z.literal('motion'),
z.literal('shock'),
z.literal('temperature'),
]),
})).min(0).max(148).default([]),
});
//# sourceMappingURL=schema.js.map