97 lines
2.6 KiB
TypeScript
97 lines
2.6 KiB
TypeScript
import { z } from "zod";
|
|
|
|
export const ttnMessageValidator = z.object({
|
|
end_device_ids: z.object({
|
|
device_id: z.string(),
|
|
application_ids: z.object({
|
|
application_id: z.string(),
|
|
}),
|
|
dev_eui: z.string(),
|
|
join_eui: z.string(),
|
|
dev_addr: z.string().optional(),
|
|
}),
|
|
correlation_ids: z.array(z.string()),
|
|
received_at: z.string(),
|
|
uplink_message: z.object({
|
|
session_key_id: z.string().optional(),
|
|
f_port: z.number().optional(),
|
|
f_cnt: z.number().optional(),
|
|
frm_payload: z.string().optional(),
|
|
decoded_payload: z
|
|
.object({
|
|
err: z.number(),
|
|
messages: z.array(
|
|
z.array(
|
|
z.object({
|
|
measurementId: z.string(),
|
|
measurementValue: z.union([z.array(z.any()), z.number()]),
|
|
motionId: z.number().optional(),
|
|
timestamp: z.number().optional(),
|
|
type: z.string(),
|
|
})
|
|
)
|
|
),
|
|
payload: z.string(),
|
|
valid: z.boolean(),
|
|
})
|
|
.optional(),
|
|
rx_metadata: z.array(
|
|
z.object({
|
|
gateway_ids: z.object({
|
|
gateway_id: z.string(),
|
|
eui: z.string().optional(),
|
|
}),
|
|
time: z.string().optional(),
|
|
timestamp: z.number().optional(),
|
|
rssi: z.number(),
|
|
channel_rssi: z.number(),
|
|
snr: z.number().optional(),
|
|
location: z
|
|
.object({
|
|
latitude: z.number(),
|
|
longitude: z.number(),
|
|
altitude: z.number().optional(),
|
|
source: z.string().optional(),
|
|
})
|
|
.optional(),
|
|
uplink_token: z.string().optional(),
|
|
channel_index: z.number().optional(),
|
|
received_at: z.string().optional(),
|
|
})
|
|
),
|
|
settings: z.object({
|
|
data_rate: z.object({
|
|
lora: z.object({
|
|
bandwidth: z.number(),
|
|
spreading_factor: z.number(),
|
|
coding_rate: z.string().optional(),
|
|
}),
|
|
}),
|
|
frequency: z.string(),
|
|
timestamp: z.number().optional(),
|
|
time: z.string().optional(),
|
|
}),
|
|
received_at: z.string().optional(),
|
|
confirmed: z.boolean().optional(),
|
|
consumed_airtime: z.string().optional(),
|
|
version_ids: z
|
|
.object({
|
|
brand_id: z.string(),
|
|
model_id: z.string(),
|
|
hardware_version: z.string(),
|
|
firmware_version: z.string(),
|
|
band_id: z.string(),
|
|
})
|
|
.optional(),
|
|
network_ids: z
|
|
.object({
|
|
net_id: z.string(),
|
|
ns_id: z.string(),
|
|
tenant_id: z.string(),
|
|
cluster_id: z.string(),
|
|
cluster_address: z.string(),
|
|
})
|
|
.optional(),
|
|
}),
|
|
});
|