2026-01-19 02:31:18 +00:00
|
|
|
export type DeviceAuthPayloadParams = {
|
|
|
|
|
deviceId: string;
|
|
|
|
|
clientId: string;
|
|
|
|
|
clientMode: string;
|
|
|
|
|
role: string;
|
|
|
|
|
scopes: string[];
|
|
|
|
|
signedAtMs: number;
|
|
|
|
|
token?: string | null;
|
2026-02-22 09:26:49 +01:00
|
|
|
nonce: string;
|
2026-01-19 02:31:18 +00:00
|
|
|
};
|
|
|
|
|
|
2026-02-26 14:10:00 +01:00
|
|
|
export type DeviceAuthPayloadV3Params = DeviceAuthPayloadParams & {
|
|
|
|
|
platform?: string | null;
|
|
|
|
|
deviceFamily?: string | null;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
function normalizeMetadataField(value?: string | null): string {
|
|
|
|
|
if (typeof value !== "string") {
|
|
|
|
|
return "";
|
|
|
|
|
}
|
|
|
|
|
return value.trim().toLowerCase();
|
|
|
|
|
}
|
|
|
|
|
|
2026-01-19 02:31:18 +00:00
|
|
|
export function buildDeviceAuthPayload(params: DeviceAuthPayloadParams): string {
|
|
|
|
|
const scopes = params.scopes.join(",");
|
|
|
|
|
const token = params.token ?? "";
|
2026-02-22 09:26:49 +01:00
|
|
|
return [
|
|
|
|
|
"v2",
|
2026-01-19 02:31:18 +00:00
|
|
|
params.deviceId,
|
|
|
|
|
params.clientId,
|
|
|
|
|
params.clientMode,
|
|
|
|
|
params.role,
|
|
|
|
|
scopes,
|
|
|
|
|
String(params.signedAtMs),
|
|
|
|
|
token,
|
2026-02-22 09:26:49 +01:00
|
|
|
params.nonce,
|
|
|
|
|
].join("|");
|
2026-01-19 02:31:18 +00:00
|
|
|
}
|
2026-02-26 14:10:00 +01:00
|
|
|
|
|
|
|
|
export function buildDeviceAuthPayloadV3(params: DeviceAuthPayloadV3Params): string {
|
|
|
|
|
const scopes = params.scopes.join(",");
|
|
|
|
|
const token = params.token ?? "";
|
|
|
|
|
const platform = normalizeMetadataField(params.platform);
|
|
|
|
|
const deviceFamily = normalizeMetadataField(params.deviceFamily);
|
|
|
|
|
return [
|
|
|
|
|
"v3",
|
|
|
|
|
params.deviceId,
|
|
|
|
|
params.clientId,
|
|
|
|
|
params.clientMode,
|
|
|
|
|
params.role,
|
|
|
|
|
scopes,
|
|
|
|
|
String(params.signedAtMs),
|
|
|
|
|
token,
|
|
|
|
|
params.nonce,
|
|
|
|
|
platform,
|
|
|
|
|
deviceFamily,
|
|
|
|
|
].join("|");
|
|
|
|
|
}
|