feat: endpoint impl.
This commit is contained in:
90
server/src/validation/ttn/ttnMessageValidation.ts
Normal file
90
server/src/validation/ttn/ttnMessageValidation.ts
Normal file
@ -0,0 +1,90 @@
|
||||
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(),
|
||||
}),
|
||||
correlation_ids: z.array(z.string()),
|
||||
received_at: z.string(),
|
||||
uplink_message: z.object({
|
||||
session_key_id: z.string(),
|
||||
f_port: z.number().optional(),
|
||||
f_cnt: z.number(),
|
||||
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(),
|
||||
timestamp: z.number(),
|
||||
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(),
|
||||
timestamp: z.number().optional(),
|
||||
rssi: z.number(),
|
||||
channel_rssi: z.number(),
|
||||
snr: z.number(),
|
||||
location: z.object({
|
||||
latitude: z.number(),
|
||||
longitude: z.number(),
|
||||
altitude: z.number(),
|
||||
source: z.string().optional(),
|
||||
}),
|
||||
uplink_token: z.string(),
|
||||
channel_index: z.number().optional(),
|
||||
received_at: z.string(),
|
||||
})
|
||||
),
|
||||
settings: z.object({
|
||||
data_rate: z.object({
|
||||
lora: z.object({
|
||||
bandwidth: z.number(),
|
||||
spreading_factor: z.number(),
|
||||
coding_rate: z.string(),
|
||||
}),
|
||||
}),
|
||||
frequency: z.string(),
|
||||
timestamp: z.number().optional(),
|
||||
time: z.string().optional(),
|
||||
}),
|
||||
received_at: z.string(),
|
||||
confirmed: z.boolean().optional(),
|
||||
consumed_airtime: z.string(),
|
||||
version_ids: z.object({
|
||||
brand_id: z.string(),
|
||||
model_id: z.string(),
|
||||
hardware_version: z.string(),
|
||||
firmware_version: z.string(),
|
||||
band_id: z.string(),
|
||||
}),
|
||||
network_ids: z.object({
|
||||
net_id: z.string(),
|
||||
ns_id: z.string(),
|
||||
tenant_id: z.string(),
|
||||
cluster_id: z.string(),
|
||||
cluster_address: z.string(),
|
||||
}),
|
||||
}),
|
||||
});
|
Reference in New Issue
Block a user