constants.ts
utils/settings/mdm/constants.ts
No strong subsystem tag
82
Lines
2617
Bytes
8
Exports
2
Imports
10
Keywords
What this is
This page documents one file from the repository and includes its full source so you can read it without leaving the docs site.
Beginner explanation
This file is one piece of the larger system. Its name, directory, imports, and exports show where it fits. Start by reading the exports and related files first.
How it is used
Start from the exports list and related files. Those are the easiest clues for where this file fits into the system.
Expert explanation
Architecturally, this file intersects with general runtime concerns. It contains 82 lines, 2 detected imports, and 8 detected exports.
Important relationships
- utils/settings/mdm/rawRead.ts
- utils/settings/mdm/settings.ts
- ink/constants.ts
- tools/AgentTool/constants.ts
- tools/ConfigTool/constants.ts
- tools/EnterPlanModeTool/constants.ts
- tools/EnterWorktreeTool/constants.ts
- tools/ExitPlanModeTool/constants.ts
- tools/ExitWorktreeTool/constants.ts
- tools/FileEditTool/constants.ts
- tools/NotebookEditTool/constants.ts
- tools/REPLTool/constants.ts
Detected exports
MACOS_PREFERENCE_DOMAINWINDOWS_REGISTRY_KEY_PATH_HKLMWINDOWS_REGISTRY_KEY_PATH_HKCUWINDOWS_REGISTRY_VALUE_NAMEPLUTIL_PATHPLUTIL_ARGS_PREFIXMDM_SUBPROCESS_TIMEOUT_MSgetMacOSPlistPaths
Keywords
pathpathspreferencesplistsoftwarelabelusernamemacos_preference_domainclaudecodepolicies
Detected imports
ospath
Source notes
This page embeds the full file contents. Small or leaf files are still indexed honestly instead of being over-explained.
Full source
/**
* 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
}