admina
Version:
Detect root/admin/sudo and execute commands as it if available
204 lines (130 loc) • 4.62 kB
Markdown
<!-- Generated via running `pnpm run docs` -->
<h1 align="center">admina</h1>
<p>
<a href="https://github.com/aminya/admina/actions/workflows/CI.yml" target="_blank">
<img alt="CI" src="https://github.com/aminya/admina/actions/workflows/CI.yml/badge.svg">
</a>
<a href="https://www.npmjs.com/package/admina" target="_blank">
<img alt="Version" src="https://img.shields.io/npm/v/admina.svg">
</a>
<a href="#" target="_blank">
<img alt="License: Apache--2.0" src="https://img.shields.io/badge/License-Apache--2.0-yellow.svg" />
</a>
</p>
> Detect root/admin/sudo and execute commands as it if available
<!-- TOC depthfrom:1 depthto:6 orderedlist:false -->
- [Install](
- [Usage](
- [API](
- [isAdmin function](
- [hasSudo function](
- [isRoot function](
- [isSudo function](
- [prependSudo function](
- [defaultExecOptions variable: execa.SyncOptions](
- [execRootSync function](
- [execRoot function](
- [isAdminWindows variable](
- [isAdminPosix variable](
- [isAdmin function](
- [grantUserWriteAccess function](
- [🤝 Contributing](
<!-- /TOC -->
```sh
npm install --save admina
```
`admina` is tiny and treeshakable.
Automatic (depends on your build system)
```js
import * as admina from "admina"
```
Node
```js
import * as admina from "admina/dist/index.node.mjs"
```
Node CJS
```js
const admina = require("admina/dist/index.node.cjs")
```
<!--
Deno
```js
import * as admina from "admina/dist/index.deno.mjs"
``` -->
`admina` supports the following functions:
<!-- INSERT GENERATED DOCS START -->
**returns:** Promise<boolean>
Detect if sudo is available
**returns:** boolean
Detect if the process has root privilege on Posix.
**returns:** boolean
```js
import { isRoot } from "admina"
console.log(isRoot())
//=> false
```
Detect if sudo is available and the user has root privileges
**returns:** boolean
Prepend `sudo` to the command if sudo is available
**Parameters:**
- command (`string`)
**returns:** string
Default exec options `{ stdio: "inherit", shell: true }`
Execute a command as root if sudo is available. Otherwise executes the command normally without sudo.
**Parameters:**
- program (`string`) - The program to spawn
- args (`string[]`) - The command arguments
- execOptions (`SyncOptions<string>`) - The options passed to `execa`. Defaults to `{ stdio: "inherit", shell: true }`
**returns:** ExecaSyncReturnValue<string>
Asynchronously execute a command as root if sudo is available. Otherwise executes the command normally without sudo.
**Parameters:**
- program (`string`) - The program to spawn
- args (`string[]`) - The command arguments
- execOptions (`Options<string>`) - The options passed to `execa`. Defaults to `{ stdio: "inherit", shell: true }`
**returns:** ExecaChildProcess<string>
Check if the process is running as administrator on Windows.
```js
import { isAdminWindows } from "admina"
console.log(await isAdminWindows())
//=> false
```
Detect if the process has root privilege on Posix.
```js
import { isAdminPosix } from "admina"
console.log(isAdminPosix())
//=> false
```
Detect if the code is running as admin/root
On Windows, it checks for admin access, and on Posix, it checks for root access
**returns:** boolean | Promise<boolean>
```js
import { isAdmin } from "admina"
console.log(isAdmin())
//=> false
```
Give the user access to the given path (and its sub-directories if a directory). It changes the owner to the
SUDO_USER. This allows the user to use the folder without sudo
**Parameters:**
- path (`string`) - The path to give the user access to
**returns:** Promise<void>
<!-- INSERT GENERATED DOCS END -->
## 🤝 Contributing
You can sponsor my work here:
https://github.com/sponsors/aminya
Pull requests, issues and feature requests are welcome.
See the [Contributing guide](https://github.com/aminya/admina/blob/master/CONTRIBUTING.md).