's'
This commit is contained in:
54
lib/types.ts
Normal file
54
lib/types.ts
Normal file
@@ -0,0 +1,54 @@
|
||||
export type EasyTierConfig = {
|
||||
networkName: string
|
||||
networkSecret: string
|
||||
peerUrls: string[]
|
||||
}
|
||||
|
||||
export const DEFAULT_EASYTIER_PEER_URLS = ['tcp://public.easytier.top:11010']
|
||||
|
||||
function normalizePeerUrls(value: unknown): string[] {
|
||||
const seen = new Set<string>()
|
||||
const next = Array.isArray(value) ? value.map(String) : []
|
||||
const normalized = next
|
||||
.map((item) => item.trim())
|
||||
.filter((item) => {
|
||||
if (!item || seen.has(item)) return false
|
||||
seen.add(item)
|
||||
return true
|
||||
})
|
||||
return normalized.length > 0 ? normalized : [...DEFAULT_EASYTIER_PEER_URLS]
|
||||
}
|
||||
|
||||
/** 与 Electron `remote:get-bind-payload` 输出一致,供扫码导入 */
|
||||
export type BindPayload = {
|
||||
v: 1
|
||||
baseUrl: string
|
||||
port: number
|
||||
token: string
|
||||
easytier: EasyTierConfig
|
||||
}
|
||||
|
||||
export function parseBindPayload(raw: string): BindPayload | null {
|
||||
try {
|
||||
const j = JSON.parse(raw) as Record<string, unknown>
|
||||
if (j.v !== 1) return null
|
||||
const et = j.easytier as Record<string, unknown> | undefined
|
||||
if (!et || typeof j.baseUrl !== 'string' || typeof j.token !== 'string') return null
|
||||
const networkName = String(et.networkName ?? '').trim()
|
||||
const networkSecret = String(et.networkSecret ?? '').trim()
|
||||
if (!networkName || !networkSecret) return null
|
||||
return {
|
||||
v: 1,
|
||||
baseUrl: String(j.baseUrl).replace(/\/$/, ''),
|
||||
port: typeof j.port === 'number' ? j.port : Number(j.port) || 8001,
|
||||
token: String(j.token),
|
||||
easytier: {
|
||||
networkName,
|
||||
networkSecret,
|
||||
peerUrls: normalizePeerUrls(et.peerUrls),
|
||||
},
|
||||
}
|
||||
} catch {
|
||||
return null
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user