{"version":3,"file":"system-preferences.mjs","names":[],"sources":["../../src/main/system-preferences/index.ts"],"sourcesContent":["/**\n * Main process handlers for systemPreferences module\n * Includes RPC method registration and event forwarding to renderer\n */\n\nimport { systemPreferences } from \"electron\";\nimport type { RpcServer } from \"electron-json-rpc/main\";\nimport type {\n  AnimationSettings,\n  MacOsColor,\n  MacOsSystemColor,\n  MediaAccessType,\n  UserDefaultType,\n  UserDefaultTypes,\n  WindowsColor,\n} from \"@shared/system-preferences.types.js\";\n\nconst RPC_METHOD_PREFIX = \"systemPreferences\";\n\n// Callback type for macOS notifications\ntype NotificationCallback = (\n  event: string,\n  userInfo: Record<string, unknown>,\n  object: string,\n) => void;\n\n// Subscription management for macOS notifications\n// Maps subscription ID to the Electron subscription ID\nconst notificationSubscriptions = new Map<number, number>();\nconst localNotificationSubscriptions = new Map<number, number>();\nconst workspaceNotificationSubscriptions = new Map<number, number>();\nlet nextSubscriptionId = 1;\n\n// ============================================================================\n// Swipe Tracking (macOS)\n// ============================================================================\n\nexport async function isSwipeTrackingFromScrollEventsEnabledHandler(): Promise<boolean> {\n  return systemPreferences.isSwipeTrackingFromScrollEventsEnabled();\n}\n\n// ============================================================================\n// Notification Posting (macOS)\n// ============================================================================\n\nexport async function postNotificationHandler(...params: unknown[]): Promise<void> {\n  const [event, userInfo, deliverImmediately] = params as [\n    string,\n    Record<string, unknown>?,\n    boolean?,\n  ];\n  systemPreferences.postNotification(event, userInfo as any, deliverImmediately);\n}\n\nexport async function postLocalNotificationHandler(...params: unknown[]): Promise<void> {\n  const [event, userInfo] = params as [string, Record<string, unknown>?];\n  systemPreferences.postLocalNotification(event, userInfo as any);\n}\n\nexport async function postWorkspaceNotificationHandler(...params: unknown[]): Promise<void> {\n  const [event, userInfo] = params as [string, Record<string, unknown>?];\n  systemPreferences.postWorkspaceNotification(event, userInfo as any);\n}\n\n// ============================================================================\n// Notification Subscription (macOS)\n// ============================================================================\n\nexport async function subscribeNotificationHandler(...params: unknown[]): Promise<number> {\n  const [event] = params as [string | null];\n  const id = nextSubscriptionId++;\n  const callback: NotificationCallback = (ev, userInfo) => {\n    rpcInstance?.publish(\"systemPreferences.notification\", { event: ev, userInfo });\n  };\n  const electronId = systemPreferences.subscribeNotification(event as any, callback);\n  notificationSubscriptions.set(id, electronId);\n  return id;\n}\n\nexport async function subscribeLocalNotificationHandler(...params: unknown[]): Promise<number> {\n  const [event] = params as [string | null];\n  const id = nextSubscriptionId++;\n  const callback: NotificationCallback = (ev, userInfo) => {\n    rpcInstance?.publish(\"systemPreferences.local-notification\", { event: ev, userInfo });\n  };\n  const electronId = systemPreferences.subscribeLocalNotification(event as any, callback);\n  localNotificationSubscriptions.set(id, electronId);\n  return id;\n}\n\nexport async function subscribeWorkspaceNotificationHandler(...params: unknown[]): Promise<number> {\n  const [event] = params as [string | null];\n  const id = nextSubscriptionId++;\n  const callback: NotificationCallback = (ev, userInfo) => {\n    rpcInstance?.publish(\"systemPreferences.workspace-notification\", { event: ev, userInfo });\n  };\n  const electronId = systemPreferences.subscribeWorkspaceNotification(event as any, callback);\n  workspaceNotificationSubscriptions.set(id, electronId);\n  return id;\n}\n\nexport async function unsubscribeNotificationHandler(...params: unknown[]): Promise<void> {\n  const [id] = params as [number];\n  const electronId = notificationSubscriptions.get(id);\n  if (electronId !== undefined) {\n    systemPreferences.unsubscribeNotification(electronId);\n    notificationSubscriptions.delete(id);\n  }\n}\n\nexport async function unsubscribeLocalNotificationHandler(...params: unknown[]): Promise<void> {\n  const [id] = params as [number];\n  const electronId = localNotificationSubscriptions.get(id);\n  if (electronId !== undefined) {\n    systemPreferences.unsubscribeLocalNotification(electronId);\n    localNotificationSubscriptions.delete(id);\n  }\n}\n\nexport async function unsubscribeWorkspaceNotificationHandler(...params: unknown[]): Promise<void> {\n  const [id] = params as [number];\n  const electronId = workspaceNotificationSubscriptions.get(id);\n  if (electronId !== undefined) {\n    systemPreferences.unsubscribeWorkspaceNotification(electronId);\n    workspaceNotificationSubscriptions.delete(id);\n  }\n}\n\n// ============================================================================\n// NSUserDefaults (macOS)\n// ============================================================================\n\nexport async function registerDefaultsHandler(...params: unknown[]): Promise<void> {\n  const [defaults] = params as [\n    Record<string, string | boolean | number | Record<string, unknown>>,\n  ];\n  systemPreferences.registerDefaults(defaults as any);\n}\n\nexport async function getUserDefaultHandler<T extends UserDefaultType>(\n  ...params: unknown[]\n): Promise<UserDefaultTypes[T]> {\n  const [key, type] = params as [string, T];\n  return systemPreferences.getUserDefault(key, type) as UserDefaultTypes[T];\n}\n\nexport async function setUserDefaultHandler<T extends UserDefaultType>(\n  ...params: unknown[]\n): Promise<void> {\n  const [key, type, value] = params as [string, T, UserDefaultTypes[T]];\n  systemPreferences.setUserDefault(key, type, value as any);\n}\n\nexport async function removeUserDefaultHandler(...params: unknown[]): Promise<void> {\n  const [key] = params as [string];\n  systemPreferences.removeUserDefault(key);\n}\n\n// ============================================================================\n// Color Methods\n// ============================================================================\n\nexport async function getAccentColorHandler(): Promise<string> {\n  return systemPreferences.getAccentColor();\n}\n\nexport async function getColorHandler(...params: unknown[]): Promise<string> {\n  const [color] = params as [WindowsColor | MacOsColor];\n  return systemPreferences.getColor(color as any);\n}\n\nexport async function getSystemColorHandler(...params: unknown[]): Promise<string> {\n  const [color] = params as [MacOsSystemColor];\n  return systemPreferences.getSystemColor(color as any);\n}\n\nexport async function getEffectiveAppearanceHandler(): Promise<string> {\n  return systemPreferences.getEffectiveAppearance();\n}\n\n// ============================================================================\n// Touch ID (macOS)\n// ============================================================================\n\nexport async function canPromptTouchIDHandler(): Promise<boolean> {\n  return systemPreferences.canPromptTouchID();\n}\n\nexport async function promptTouchIDHandler(...params: unknown[]): Promise<void> {\n  const [reason] = params as [string];\n  await systemPreferences.promptTouchID(reason);\n}\n\n// ============================================================================\n// Accessibility (macOS)\n// ============================================================================\n\nexport async function isTrustedAccessibilityClientHandler(...params: unknown[]): Promise<boolean> {\n  const [prompt] = params as [boolean?];\n  return systemPreferences.isTrustedAccessibilityClient(prompt ?? false);\n}\n\n// ============================================================================\n// Media Access (Windows, macOS)\n// ============================================================================\n\nexport async function getMediaAccessStatusHandler(...params: unknown[]): Promise<string> {\n  const [mediaType] = params as [MediaAccessType];\n  return systemPreferences.getMediaAccessStatus(mediaType);\n}\n\nexport async function askForMediaAccessHandler(...params: unknown[]): Promise<boolean> {\n  const [mediaType] = params as [Exclude<MediaAccessType, \"screen\">];\n  return systemPreferences.askForMediaAccess(mediaType);\n}\n\n// ============================================================================\n// Animation Settings\n// ============================================================================\n\nexport async function getAnimationSettingsHandler(): Promise<AnimationSettings> {\n  return systemPreferences.getAnimationSettings() as AnimationSettings;\n}\n\n// ============================================================================\n// RPC Instance for event publishing\n// ============================================================================\n\nlet rpcInstance: RpcServer | null = null;\n\n/**\n * Register all systemPreferences module RPC handlers and set up event forwarding\n */\nexport function registerSystemPreferencesModule(rpc: RpcServer): void {\n  rpcInstance = rpc;\n\n  // Swipe Tracking\n  rpc.register(\n    `${RPC_METHOD_PREFIX}.isSwipeTrackingFromScrollEventsEnabled`,\n    isSwipeTrackingFromScrollEventsEnabledHandler,\n  );\n\n  // Notification Posting\n  rpc.register(`${RPC_METHOD_PREFIX}.postNotification`, postNotificationHandler);\n  rpc.register(`${RPC_METHOD_PREFIX}.postLocalNotification`, postLocalNotificationHandler);\n  rpc.register(`${RPC_METHOD_PREFIX}.postWorkspaceNotification`, postWorkspaceNotificationHandler);\n\n  // Notification Subscription\n  rpc.register(`${RPC_METHOD_PREFIX}.subscribeNotification`, subscribeNotificationHandler);\n  rpc.register(\n    `${RPC_METHOD_PREFIX}.subscribeLocalNotification`,\n    subscribeLocalNotificationHandler,\n  );\n  rpc.register(\n    `${RPC_METHOD_PREFIX}.subscribeWorkspaceNotification`,\n    subscribeWorkspaceNotificationHandler,\n  );\n  rpc.register(`${RPC_METHOD_PREFIX}.unsubscribeNotification`, unsubscribeNotificationHandler);\n  rpc.register(\n    `${RPC_METHOD_PREFIX}.unsubscribeLocalNotification`,\n    unsubscribeLocalNotificationHandler,\n  );\n  rpc.register(\n    `${RPC_METHOD_PREFIX}.unsubscribeWorkspaceNotification`,\n    unsubscribeWorkspaceNotificationHandler,\n  );\n\n  // NSUserDefaults\n  rpc.register(`${RPC_METHOD_PREFIX}.registerDefaults`, registerDefaultsHandler);\n  rpc.register(`${RPC_METHOD_PREFIX}.getUserDefault`, getUserDefaultHandler);\n  rpc.register(`${RPC_METHOD_PREFIX}.setUserDefault`, setUserDefaultHandler);\n  rpc.register(`${RPC_METHOD_PREFIX}.removeUserDefault`, removeUserDefaultHandler);\n\n  // Color Methods\n  rpc.register(`${RPC_METHOD_PREFIX}.getAccentColor`, getAccentColorHandler);\n  rpc.register(`${RPC_METHOD_PREFIX}.getColor`, getColorHandler);\n  rpc.register(`${RPC_METHOD_PREFIX}.getSystemColor`, getSystemColorHandler);\n  rpc.register(`${RPC_METHOD_PREFIX}.getEffectiveAppearance`, getEffectiveAppearanceHandler);\n\n  // Touch ID\n  rpc.register(`${RPC_METHOD_PREFIX}.canPromptTouchID`, canPromptTouchIDHandler);\n  rpc.register(`${RPC_METHOD_PREFIX}.promptTouchID`, promptTouchIDHandler);\n\n  // Accessibility\n  rpc.register(\n    `${RPC_METHOD_PREFIX}.isTrustedAccessibilityClient`,\n    isTrustedAccessibilityClientHandler,\n  );\n\n  // Media Access\n  rpc.register(`${RPC_METHOD_PREFIX}.getMediaAccessStatus`, getMediaAccessStatusHandler);\n  rpc.register(`${RPC_METHOD_PREFIX}.askForMediaAccess`, askForMediaAccessHandler);\n\n  // Animation Settings\n  rpc.register(`${RPC_METHOD_PREFIX}.getAnimationSettings`, getAnimationSettingsHandler);\n\n  // Event forwarding\n  systemPreferences.on(\"accent-color-changed\", (_event, newColor) => {\n    rpc.publish(\"systemPreferences.accent-color-changed\", newColor);\n  });\n\n  systemPreferences.on(\"color-changed\", () => {\n    rpc.publish(\"systemPreferences.color-changed\");\n  });\n}\n"],"mappings":"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"}