a6939453f8
CI / test (push) Has been cancelled
Move the app payload under swift/ while keeping git, package.json, and .smartconfig.json at the repo root. This standardizes the Swift app setup so build, test, run, and watch workflows match the other repos.
39 lines
1.4 KiB
Swift
39 lines
1.4 KiB
Swift
import Foundation
|
|
|
|
struct PairingPayloadContext: Equatable {
|
|
let deviceName: String
|
|
let originHost: String
|
|
let tokenPreview: String
|
|
}
|
|
|
|
enum PairingPayloadParser {
|
|
static func parse(_ payload: String) throws -> PairingPayloadContext {
|
|
let trimmedPayload = payload.trimmingCharacters(in: .whitespacesAndNewlines)
|
|
|
|
if let components = URLComponents(string: trimmedPayload),
|
|
components.scheme == "idp.global",
|
|
components.host == "pair" {
|
|
let queryItems = components.queryItems ?? []
|
|
let token = queryItems.first(where: { $0.name == "token" })?.value ?? "demo-token"
|
|
let origin = queryItems.first(where: { $0.name == "origin" })?.value ?? "code.foss.global"
|
|
let device = queryItems.first(where: { $0.name == "device" })?.value ?? "Web Session"
|
|
|
|
return PairingPayloadContext(
|
|
deviceName: device,
|
|
originHost: origin,
|
|
tokenPreview: String(token.suffix(6))
|
|
)
|
|
}
|
|
|
|
if trimmedPayload.contains("token") || trimmedPayload.contains("pair") {
|
|
return PairingPayloadContext(
|
|
deviceName: "Manual Session",
|
|
originHost: "code.foss.global",
|
|
tokenPreview: String(trimmedPayload.suffix(6))
|
|
)
|
|
}
|
|
|
|
throw AppError.invalidPairingPayload
|
|
}
|
|
}
|