PHPackages                             xternalsoft/lararmis-vipr - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [API Development](/categories/api)
4. /
5. xternalsoft/lararmis-vipr

ActiveLibrary[API Development](/categories/api)

xternalsoft/lararmis-vipr
=========================

A clean, fluent, and developer-friendly PHP wrapper for the Armis VIPR API

v1.1.0(1mo ago)00MITPHPPHP ^8.4CI passing

Since Jul 10Pushed 1mo agoCompare

[ Source](https://github.com/XternalSoft/lararmis-vipr)[ Packagist](https://packagist.org/packages/xternalsoft/lararmis-vipr)[ Docs](https://github.com/xternalsoft/lararmis-vipr)[ RSS](/packages/xternalsoft-lararmis-vipr/feed)WikiDiscussions main Synced 1w ago

READMEChangelog (2)Dependencies (34)Versions (4)Used By (0)

Laravel Armis VIPR API Wrapper
==============================

[](#laravel-armis-vipr-api-wrapper)

A clean, fluent PHP wrapper for the Armis VIPR API, built for Laravel applications using Saloon.

---

Installation
------------

[](#installation)

Install the package via Composer:

```
composer require xternalsoft/lararmis-vipr
```

Publish the configuration file:

```
php artisan vendor:publish --tag="lararmis-vipr-config"
```

### Configuration File (`config/lararmis-vipr.php`)

[](#configuration-file-configlararmis-viprphp)

```
return [
    'base_url' => env('ARMIS_VIPR_BASE_URL', 'https://silkapi.us1.app.silk.security'),
    'client_id' => env('ARMIS_VIPR_CLIENT_ID'),
    'client_secret' => env('ARMIS_VIPR_CLIENT_SECRET'),
    'token' => env('ARMIS_VIPR_TOKEN'),
];
```

---

Authentication Flow
-------------------

[](#authentication-flow)

- If a pre-obtained JWT `token` is configured (`ARMIS_VIPR_TOKEN`), all requests will use it directly.
- If no token is provided but `client_id` and `client_secret` are set, the package will automatically make a login request to `/api/v1/authenticate` to retrieve and apply the token for subsequent requests.

---

Usage
-----

[](#usage)

Use the wrapper via the `LararmisVipr` Facade or via Dependency Injection.

### 🔐 Authentication

[](#-authentication)

#### Manual Authentication

[](#manual-authentication)

```
use Xternalsoft\LararmisVipr\Facades\LararmisVipr;

$response = LararmisVipr::auth()->authenticate('your_client_id', 'your_client_secret');
$token = $response->dto()->token;
```

#### Token Info

[](#token-info)

```
$info = LararmisVipr::auth()->tokenInfo();
```

---

### 🖥️ Assets

[](#️-assets)

#### List Assets (Offset Pagination)

[](#list-assets-offset-pagination)

```
use Xternalsoft\LararmisVipr\Facades\LararmisVipr;

$response = LararmisVipr::assets()->list(page: 1, pageSize: 20);
$dto = $response->dto(); // Returns AssetListResponseData
```

#### List Assets (Cursor Pagination)

[](#list-assets-cursor-pagination)

```
$response = LararmisVipr::assets()->listByCursor(cursor: 'MTcwMDY2NTQzMjE', pageSize: 15);
$dto = $response->dto(); // Returns AssetSearchResponseData
```

#### Get Asset by ID

[](#get-asset-by-id)

```
$response = LararmisVipr::assets()->get('ast_01HBF3P2Y8K3M4J5N6P7Q8R9S0');
$asset = $response->dto(); // Returns AssetData
```

#### Search Assets with Filters

[](#search-assets-with-filters)

```
$filters = [
    [
        'field' => 'region',
        'value' => [
            ['operator' => 'equals', 'value' => 'us-east-1'],
        ]
    ]
];

$response = LararmisVipr::assets()->search(filters: $filters, pageSize: 10);
$dto = $response->dto(); // Returns AssetSearchResponseData
```

#### Get Field Attributes and Counts

[](#get-field-attributes-and-counts)

```
$response = LararmisVipr::assets()->fields(fieldName: 'source', sortBy: 'count');
```

---

### 👥 Users

[](#-users)

#### List Users

[](#list-users)

```
$response = LararmisVipr::users()->list(page: 1, pageSize: 10);
$dto = $response->dto(); // Returns UserListResponseData
```

#### Create User

[](#create-user)

```
$response = LararmisVipr::users()->create(
    emailAddress: 'john.doe@example.com',
    displayName: 'John Doe',
    permissions: 'admin'
);
$user = $response->dto(); // Returns UserData
```

#### Get User

[](#get-user)

```
$response = LararmisVipr::users()->get('john.doe@example.com');
$user = $response->dto(); // Returns UserData
```

#### Update User

[](#update-user)

```
$response = LararmisVipr::users()->update(
    emailAddress: 'john.doe@example.com',
    displayName: 'Jonathan Doe'
);
```

#### Delete User

[](#delete-user)

```
$response = LararmisVipr::users()->delete('john.doe@example.com');
```

---

### 📊 Custom Reports

[](#-custom-reports)

#### List Scheduled Reports

[](#list-scheduled-reports)

```
$reports = LararmisVipr::reports()->listScheduledCustomReports()->dto(); // Returns CustomReportData[]
```

#### List Report Executions

[](#list-report-executions)

```
$runs = LararmisVipr::reports()->listCustomReportRuns('scheduled_report_id')->dto(); // Returns CustomReportRunData[]
```

#### Trigger Report Run

[](#trigger-report-run)

```
$run = LararmisVipr::reports()->executeCustomReportRun('scheduled_report_id')->dto(); // Returns CustomReportRunData
```

#### Get Report Run Status

[](#get-report-run-status)

```
$runStatus = LararmisVipr::reports()->getCustomReportRunStatus('report_id')->dto(); // Returns CustomReportRunData with downloadUrl
```

#### Get Latest Finished Run (Helper)

[](#get-latest-finished-run-helper)

```
$latestRun = LararmisVipr::reports()->latestReadyRun('scheduled_report_id'); // Returns CustomReportRunData or null
```

---

### ⚙️ Background Jobs

[](#️-background-jobs)

#### Get Job Status

[](#get-job-status)

```
$response = LararmisVipr::jobs()->status('job_id');
$job = $response->dto(); // Returns JobStatusData
```

---

📦 File Helpers (Streaming &amp; Parsing)
----------------------------------------

[](#-file-helpers-streaming--parsing)

For large report exports (NDJSON or CSV), use these utilities to stream downloads and read compressed files line-by-line without running out of PHP memory.

### 1. Download Report File directly to disk

[](#1-download-report-file-directly-to-disk)

```
use Xternalsoft\LararmisVipr\Support\ReportDownloader;

$latestRun = LararmisVipr::reports()->latestReadyRun('scheduled_report_id');

$localPath = storage_path('app/reports/findings.json.gz');
ReportDownloader::download($latestRun, $localPath);
```

### 2. Stream Parse Gzipped NDJSON or CSV Files (LazyCollection)

[](#2-stream-parse-gzipped-ndjson-or-csv-files-lazycollection)

```
use Xternalsoft\LararmisVipr\Support\ReportReader;

// Read NDJSON (.json.gz)
$records = ReportReader::streamNdjsonGz(storage_path('app/reports/findings.json.gz'));

// Read CSV (.csv.gz)
// $records = ReportReader::streamCsvGz(storage_path('app/reports/findings.csv.gz'));

// Process records sequentially using low memory
$records
    ->chunk(500)
    ->each(function ($chunk) {
        DB::table('findings')->insert($chunk->toArray());
    });
```

---

Testing
-------

[](#testing)

Run package tests using Pest:

```
composer test
```

---

License
-------

[](#license)

The MIT License (MIT). See [License File](LICENSE.md) for details.

###  Health Score

40

—

FairBetter than 86% of packages

Maintenance91

Actively maintained with recent releases

Popularity0

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity53

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~6 days

Total

2

Last Release

41d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/1142472?v=4)[XternalSoft](/maintainers/XternalSoft)[@XternalSoft](https://github.com/XternalSoft)

---

Top Contributors

[![XternalSoft](https://avatars.githubusercontent.com/u/1142472?v=4)](https://github.com/XternalSoft "XternalSoft (9 commits)")

---

Tags

laravelsaloonviprarmis

###  Code Quality

TestsPest

Static AnalysisPHPStan

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/xternalsoft-lararmis-vipr/health.svg)

```
[![Health](https://phpackages.com/badges/xternalsoft-lararmis-vipr/health.svg)](https://phpackages.com/packages/xternalsoft-lararmis-vipr)
```

###  Alternatives

[dedoc/scramble

Automatic generation of API documentation for Laravel applications.

2.2k12.6M143](/packages/dedoc-scramble)[defstudio/telegraph

A laravel facade to interact with Telegram Bots

818355.4k3](/packages/defstudio-telegraph)[codebar-ag/laravel-docuware

DocuWare integration with Laravel

1125.1k](/packages/codebar-ag-laravel-docuware)[rawilk/profile-filament-plugin

Profile &amp; MFA starter kit for filament.

3915.5k](/packages/rawilk-profile-filament-plugin)[simplestats-io/laravel-client

Server-side analytics for Laravel that follows the full funnel from visit to registration to payment, attributed to the channel that drove it. Revenue, MRR, churn and ad-spend profit (ROAS/CAC) per channel. GDPR compliant, ad-blocker proof.

5226.7k](/packages/simplestats-io-laravel-client)[codebar-ag/laravel-zammad

Zammad integration with Laravel

107.4k](/packages/codebar-ag-laravel-zammad)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
