π File detail
utils/settings/mdm/constants.ts
π― Use case
This file lives under βutils/β, which covers cross-cutting helpers (shell, tempfiles, settings, messages, process input, β¦). On the API surface it exposes MACOS_PREFERENCE_DOMAIN, WINDOWS_REGISTRY_KEY_PATH_HKLM, WINDOWS_REGISTRY_KEY_PATH_HKCU, WINDOWS_REGISTRY_VALUE_NAME, and PLUTIL_PATH (and more) β mainly types, interfaces, or factory objects. Dependencies touch Node OS/process metadata and Node path helpers. What the file header says: Shared constants and path builders for MDM settings modules. This module has ZERO heavy imports (only `os`) β safe to use from mdmRawRead.ts. Both mdmRawRead.ts and mdmSettings.ts import from here to avoid duplication.
Generated from folder role, exports, dependency roots, and inline comments β not hand-reviewed for every path.
π§ Inline summary
Shared constants and path builders for MDM settings modules. This module has ZERO heavy imports (only `os`) β safe to use from mdmRawRead.ts. Both mdmRawRead.ts and mdmSettings.ts import from here to avoid duplication.
π€ Exports (heuristic)
MACOS_PREFERENCE_DOMAINWINDOWS_REGISTRY_KEY_PATH_HKLMWINDOWS_REGISTRY_KEY_PATH_HKCUWINDOWS_REGISTRY_VALUE_NAMEPLUTIL_PATHPLUTIL_ARGS_PREFIXMDM_SUBPROCESS_TIMEOUT_MSgetMacOSPlistPaths
π External import roots
Package roots from from "β¦" (relative paths omitted).
ospath
π₯οΈ Source preview
/**
* Shared constants and path builders for MDM settings modules.
*
* This module has ZERO heavy imports (only `os`) β safe to use from mdmRawRead.ts.
* Both mdmRawRead.ts and mdmSettings.ts import from here to avoid duplication.
*/
import { homedir, userInfo } from 'os'
import { join } from 'path'
/** macOS preference domain for Claude Code MDM profiles. */
export const MACOS_PREFERENCE_DOMAIN = 'com.anthropic.claudecode'
/**
* Windows registry key paths for Claude Code MDM policies.
*
* These keys live under SOFTWARE\Policies which is on the WOW64 shared key
* list β both 32-bit and 64-bit processes see the same values without
* redirection. Do not move these to SOFTWARE\ClaudeCode, as SOFTWARE is
* redirected and 32-bit processes would silently read from WOW6432Node.
* See: https://learn.microsoft.com/en-us/windows/win32/winprog64/shared-registry-keys
*/
export const WINDOWS_REGISTRY_KEY_PATH_HKLM =
'HKLM\\SOFTWARE\\Policies\\ClaudeCode'
export const WINDOWS_REGISTRY_KEY_PATH_HKCU =
'HKCU\\SOFTWARE\\Policies\\ClaudeCode'
/** Windows registry value name containing the JSON settings blob. */
export const WINDOWS_REGISTRY_VALUE_NAME = 'Settings'
/** Path to macOS plutil binary. */
export const PLUTIL_PATH = '/usr/bin/plutil'
/** Arguments for plutil to convert plist to JSON on stdout (append plist path). */
export const PLUTIL_ARGS_PREFIX = ['-convert', 'json', '-o', '-', '--'] as const
/** Subprocess timeout in milliseconds. */
export const MDM_SUBPROCESS_TIMEOUT_MS = 5000
/**
* Build the list of macOS plist paths in priority order (highest first).
* Evaluates `process.env.USER_TYPE` at call time so ant-only paths are
* included only when appropriate.
*/
export function getMacOSPlistPaths(): Array<{ path: string; label: string }> {
let username = ''
try {
username = userInfo().username
} catch {
// ignore
}
const paths: Array<{ path: string; label: string }> = []
if (username) {
paths.push({
path: `/Library/Managed Preferences/${username}/${MACOS_PREFERENCE_DOMAIN}.plist`,
label: 'per-user managed preferences',
})
}
paths.push({
path: `/Library/Managed Preferences/${MACOS_PREFERENCE_DOMAIN}.plist`,
label: 'device-level managed preferences',
})
// Allow user-writable preferences for local MDM testing in ant builds only.
if (process.env.USER_TYPE === 'ant') {
paths.push({
path: join(
homedir(),
'Library',
'Preferences',
`${MACOS_PREFERENCE_DOMAIN}.plist`,
),
label: 'user preferences (ant-only)',
})
}
return paths
}