feat: reworked ttn webhook endpoint logic

This commit is contained in:
2025-01-03 02:01:55 +01:00
parent ffdb644700
commit 62847f569d
17 changed files with 273 additions and 356 deletions

View File

@ -8,14 +8,14 @@ export const ttnMessageValidator = z.object({
}),
dev_eui: z.string(),
join_eui: z.string(),
dev_addr: 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(),
session_key_id: z.string().optional(),
f_port: z.number().optional(),
f_cnt: z.number(),
f_cnt: z.number().optional(),
frm_payload: z.string().optional(),
decoded_payload: z
.object({
@ -25,8 +25,8 @@ export const ttnMessageValidator = z.object({
z.object({
measurementId: z.string(),
measurementValue: z.union([z.array(z.any()), z.number()]),
motionId: z.number(),
timestamp: z.number(),
motionId: z.number().optional(),
timestamp: z.number().optional(),
type: z.string(),
})
)
@ -41,20 +41,22 @@ export const ttnMessageValidator = z.object({
gateway_id: z.string(),
eui: z.string().optional(),
}),
time: z.string(),
time: z.string().optional(),
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(),
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(),
received_at: z.string().optional(),
})
),
settings: z.object({
@ -62,29 +64,33 @@ export const ttnMessageValidator = z.object({
lora: z.object({
bandwidth: z.number(),
spreading_factor: z.number(),
coding_rate: z.string(),
coding_rate: z.string().optional(),
}),
}),
frequency: z.string(),
timestamp: z.number().optional(),
time: z.string().optional(),
}),
received_at: z.string(),
received_at: z.string().optional(),
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(),
}),
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(),
}),
});