/** Полезная нагрузка лицензии v1 (подписывается Ed25519 на сервере). */ export type LicensePayloadV1 = { v: 1; /** Стабильный id лицензии (для отзыва и учёта). */ sub: string; /** Идентификатор продукта. */ pid: string; /** Unix-время выдачи (сек). */ iat: number; /** Unix-время окончания (сек). */ exp: number; /** Не раньше этого времени (сек), опционально. */ nbf?: number; /** Привязка к устройству: null — любое устройство. */ did: string | null; }; export function isLicensePayloadV1(x: unknown): x is LicensePayloadV1 { if (!x || typeof x !== 'object') return false; const o = x as Record; return ( o.v === 1 && typeof o.sub === 'string' && o.sub.length > 0 && typeof o.pid === 'string' && o.pid.length > 0 && typeof o.iat === 'number' && Number.isFinite(o.iat) && typeof o.exp === 'number' && Number.isFinite(o.exp) && (o.did === null || typeof o.did === 'string') ); }