wangzhibo
2026-05-09 53418655c061ac26f66058253f39200aced1ab1d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
/*
 * Copyright (c) Microsoft Corporation. All rights reserved.
 * Licensed under the MIT License.
 */
 
import {
    createClientAuthError,
    ClientAuthErrorCodes,
} from "../error/ClientAuthError.js";
import * as Constants from "../utils/Constants.js";
 
/**
 * Client info object which consists of:
 * uid: user id
 * utid: tenant id
 * xms_tdbr: optional, only for non-US tenants
 */
export type ClientInfo = {
    uid: string;
    utid: string;
    xms_tdbr?: string;
};
 
/**
 * Function to build a client info object from server clientInfo string
 * @param rawClientInfo
 * @param crypto
 */
export function buildClientInfo(
    rawClientInfo: string,
    base64Decode: (input: string) => string
): ClientInfo {
    if (!rawClientInfo) {
        throw createClientAuthError(ClientAuthErrorCodes.clientInfoEmptyError);
    }
 
    try {
        const decodedClientInfo: string = base64Decode(rawClientInfo);
        return JSON.parse(decodedClientInfo) as ClientInfo;
    } catch (e) {
        throw createClientAuthError(
            ClientAuthErrorCodes.clientInfoDecodingError
        );
    }
}
 
/**
 * Function to build a client info object from cached homeAccountId string
 * @param homeAccountId
 */
export function buildClientInfoFromHomeAccountId(
    homeAccountId: string
): ClientInfo {
    if (!homeAccountId) {
        throw createClientAuthError(
            ClientAuthErrorCodes.clientInfoDecodingError
        );
    }
    const clientInfoParts: string[] = homeAccountId.split(
        Constants.CLIENT_INFO_SEPARATOR,
        2
    );
    return {
        uid: clientInfoParts[0],
        utid: clientInfoParts.length < 2 ? "" : clientInfoParts[1],
    };
}