123 lines
4.6 KiB
TypeScript
123 lines
4.6 KiB
TypeScript
import { z } from 'zod'
|
||
|
||
export const DeviceInfoZod = z.object({
|
||
allspace: z.bigint(),
|
||
freespace: z.bigint(),
|
||
name: z.string().max(128, 'Device Name too long'),
|
||
size: z.string().describe('设备分辨率, 以x作为分隔符, 宽x高, 例如 360x360'),
|
||
brand: z.string().max(128, 'Brand name too long'),
|
||
powerlevel: z
|
||
.number()
|
||
.min(0, 'Power level could not be less then 0')
|
||
.max(100, 'Power level could not be more then 100'),
|
||
})
|
||
|
||
export type DeviceInfo = z.infer<typeof DeviceInfoZod>
|
||
|
||
export const ProtocolFrameZod = z.object({
|
||
head: z.number().describe('固定表示传输方向 APP -> BLE = 0xb1, BLE -> APP = 0xb0'),
|
||
type: z.number().describe('表示传输数据对应哪个Event, 与EVENT_TYPES.xxx.code对应'),
|
||
subpageTotal: z.number().describe('代表总的分包大小'),
|
||
curPage: z.number().describe('代表当前分包序号'),
|
||
dataLen: z.number().describe('代表当前数据包字节长度 bytes'),
|
||
data: z.instanceof(ArrayBuffer).describe('数据包内实际二进制字节内容'),
|
||
checksum: z.number().describe('数据包校验字节, 整个数据包中除该字节以外的所有字节数据的单字节和 = (0 - 该字节)'),
|
||
})
|
||
|
||
export type ProtocolFrame = z.infer<typeof ProtocolFrameZod>
|
||
|
||
export const BondingResponseZod = z.object({
|
||
type: z.number().describe('绑定命令类型 0x0f'),
|
||
sn: z
|
||
.string()
|
||
.length(14)
|
||
.describe(
|
||
'设备sn码, 第1位A量产,D售后,E试产,F测试环境,后六位000000-999999,234568位不变,第7位可能根据配置不同变化',
|
||
),
|
||
success: z
|
||
.number()
|
||
.describe('绑定成功/失败 0 = 失败,1 = 成功,如传入的userId与已绑定的userId一致,直接返回成功代表已绑定'),
|
||
contents: z
|
||
.array(z.string())
|
||
.describe('绑定成功时才返回设备内已存在的原始内容,绑定失败时返回空数组;数组按照id排序'),
|
||
})
|
||
|
||
export type BindingResponse = z.infer<typeof BondingResponseZod>
|
||
|
||
export const UnBindResponseZod = z.object({
|
||
success: z.number().describe('解绑成功 = 1, 失败 = 0'),
|
||
})
|
||
|
||
export type UnBindResponse = z.infer<typeof UnBindResponseZod>
|
||
|
||
export const VersionInfoZod = z.object({
|
||
version: z.string().max(128, 'Version string too long').describe('设备版本号'),
|
||
})
|
||
|
||
export type VersionInfo = z.infer<typeof VersionInfoZod>
|
||
|
||
export const FileTransferDataZod = z.object({
|
||
data: z.instanceof(ArrayBuffer),
|
||
})
|
||
|
||
export type FileTransferData = z.infer<typeof FileTransferDataZod>
|
||
|
||
export const BindingRequestZod = z.object({
|
||
type: z.number().describe('绑定命令类型 0x0f'),
|
||
userId: z.string().length(32).describe('32位长度的user Id'),
|
||
})
|
||
|
||
export type BindingRequest = z.infer<typeof BindingRequestZod>
|
||
|
||
// 删除文件协议响应状态
|
||
export const DELETE_FILE_STATUS = {
|
||
SUCCESS: 0, // 删除成功
|
||
FAILED: 1, // 删除失败
|
||
NOT_EXISTS: 2, // 文件不存在
|
||
} as const
|
||
|
||
export type DeleteFileStatus = (typeof DELETE_FILE_STATUS)[keyof typeof DELETE_FILE_STATUS]
|
||
|
||
// 删除文件请求接口
|
||
export const DeleteFileRequestZod = z.object({
|
||
type: z.number().describe('删除文件命令类型 0x13'),
|
||
key: z.string().describe('要删除内容对应的key'),
|
||
})
|
||
|
||
export type DeleteFileRequest = z.infer<typeof DeleteFileRequestZod>
|
||
|
||
// 删除文件响应接口
|
||
export const DeleteFileResponseZod = z.object({
|
||
type: z.number().describe('删除文件命令类型 0x13'),
|
||
success: z.number().min(0).max(2).describe('删除结果状态: 0=成功, 1=失败, 2=文件不存在'),
|
||
})
|
||
|
||
export type DeleteFileResponse = z.infer<typeof DeleteFileResponseZod>
|
||
|
||
// 预先发送协议状态
|
||
export const PREPARE_TRANSFER_STATUS = {
|
||
READY: 'ready', // 准备好接收
|
||
NO_SPACE: 'no_space', // 存储空间不足
|
||
DUPLICATED: 'duplicated', // 已存在相同key的资源
|
||
} as const
|
||
|
||
export type PrepareTransferStatus = (typeof PREPARE_TRANSFER_STATUS)[keyof typeof PREPARE_TRANSFER_STATUS]
|
||
|
||
// 预先发送请求接口
|
||
export const PrepareTransferRequestZod = z.object({
|
||
type: z.number().describe('预先发送命令类型 0x14'),
|
||
key: z.string().describe('要传输内容对应的key'),
|
||
size: z.number().describe('ani文件大小信息,单位为bytes'),
|
||
})
|
||
|
||
export type PrepareTransferRequest = z.infer<typeof PrepareTransferRequestZod>
|
||
|
||
// 预先发送响应接口
|
||
export const PrepareTransferResponseZod = z.object({
|
||
type: z.number().describe('预先发送命令类型 0x14'),
|
||
key: z.string().describe('要传输内容对应的key'),
|
||
status: z.enum(['ready', 'no_space', 'duplicated']).describe('告知APP是否可继续发送'),
|
||
})
|
||
|
||
export type PrepareTransferResponse = z.infer<typeof PrepareTransferResponseZod>
|