Skip to content

Commit fbbe939

Browse files
committed
feat: add askForAccessibilityAccess
1 parent eb344a1 commit fbbe939

File tree

3 files changed

+29
-1
lines changed

3 files changed

+29
-1
lines changed

README.md

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,7 @@ for (const type of ['microphone', 'camera']) {
147147
})
148148
}
149149
```
150+
150151
## `permissions.askForScreenCaptureAccess()`
151152

152153
There is no API for programmatically requesting Screen Capture on macOS at this time, and so calling this method will trigger opening of System Preferences at the Screen Capture pane of Security and Privacy.
@@ -156,4 +157,15 @@ Example:
156157
const { askForScreenCaptureAccess } = require('node-mac-permissions')
157158

158159
askForScreenCaptureAccess()
159-
```
160+
```
161+
162+
## `permissions.askForAccessibilityAccess()`
163+
164+
There is no API for programmatically requesting Accessibility access on macOS at this time, and so calling this method will trigger opening of System Preferences at the Accessibility pane of Security and Privacy.
165+
166+
Example:
167+
```js
168+
const { askForAccessibilityAccess } = require('node-mac-permissions')
169+
170+
askForAccessibilityAccess()
171+
```

index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ module.exports = {
3434
askForFullDiskAccess: permissions.askForFullDiskAccess,
3535
askForRemindersAccess: permissions.askForRemindersAccess,
3636
askForScreenCaptureAccess: permissions.askForScreenCaptureAccess,
37+
askForAccessibilityAccess: permissions.askForAccessibilityAccess,
3738
askForMediaAccess,
3839
getAuthStatus
3940
}

permissions.mm

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -320,6 +320,19 @@ void AskForScreenCaptureAccess(const Napi::CallbackInfo &info) {
320320
}
321321
}
322322

323+
// Request Accessibility Access.
324+
void AskForAccessibilityAccess(const Napi::CallbackInfo &info) {
325+
NSDictionary* options = @{(id)kAXTrustedCheckOptionPrompt : @(YES)};
326+
bool trusted = AXIsProcessTrustedWithOptions((CFDictionaryRef)options);
327+
328+
if (!trusted) {
329+
NSWorkspace *workspace = [[NSWorkspace alloc] init];
330+
NSString *pref_string = @"x-apple.systempreferences:com.apple.preference."
331+
@"security?Privacy_Accessibility";
332+
[workspace openURL:[NSURL URLWithString:pref_string]];
333+
}
334+
}
335+
323336
// Initializes all functions exposed to JS
324337
Napi::Object Init(Napi::Env env, Napi::Object exports) {
325338
exports.Set(Napi::String::New(env, "getAuthStatus"),
@@ -336,6 +349,8 @@ void AskForScreenCaptureAccess(const Napi::CallbackInfo &info) {
336349
Napi::Function::New(env, AskForMediaAccess));
337350
exports.Set(Napi::String::New(env, "askForScreenCaptureAccess"),
338351
Napi::Function::New(env, AskForScreenCaptureAccess));
352+
exports.Set(Napi::String::New(env, "askForAccessibilityAccess"),
353+
Napi::Function::New(env, AskForAccessibilityAccess));
339354

340355
return exports;
341356
}

0 commit comments

Comments
 (0)