PHPackages                             nawasara/api - 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. [HTTP &amp; Networking](/categories/http)
4. /
5. nawasara/api

ActiveLibrary[HTTP &amp; Networking](/categories/http)

nawasara/api
============

Public REST API plumbing for the Nawasara superapp framework — API token management with hashed storage, scope registry, HMAC-signed stream URLs, and audit log infrastructure. Domain packages (cctv, wifi, ...) provide their own routes/controllers/transformers; this package owns auth + scope + token lifecycle.

v0.1.2(2w ago)032MITPHPPHP ^8.1

Since May 16Pushed 2w agoCompare

[ Source](https://github.com/nawasara/api)[ Packagist](https://packagist.org/packages/nawasara/api)[ RSS](/packages/nawasara-api/feed)WikiDiscussions main Synced 1w ago

READMEChangelogDependencies (5)Versions (4)Used By (0)

nawasara/api
============

[](#nawasaraapi)

Public REST API plumbing untuk framework Nawasara.

Package ini menyediakan **infrastruktur**: token + scope + signed URL + audit log. Domain package (cctv, wifi, …) menyediakan **endpoint mereka sendiri** (route, controller, transformer) — package ini tidak tahu apa itu Camera atau WifiPoint.

Yang ada di sini
----------------

[](#yang-ada-di-sini)

- `ApiToken` + `ApiTokenScope` + `ApiAccessLog` (model + migration)
- `TokenManager` — generate, verify (by plaintext → hash lookup), revoke
- `StreamUrlSigner` — HMAC-signed URL untuk endpoint stream proxy (Nginx `auth_request`)
- `ScopeRegistry` — registry in-code untuk scope yang available
- Middleware: `api.auth`, `scope:`, `api.log`
- Endpoint meta: `/api/v1/me`, `/api/v1/scopes`
- Command `nawasara-api:prune-logs` (scheduled harian)

Pemakaian — domain package
--------------------------

[](#pemakaian--domain-package)

Di service provider package domain (mis. `CctvServiceProvider`):

```
use Nawasara\Api\Facades\Api;

public function boot(): void
{
    // Register scope kalau package nawasara/api terpasang. Kalau tidak,
    // skip — domain package tetap jalan tanpa API public.
    if (class_exists(Api::class)) {
        Api::registerScope('cctv.camera.read', 'List + detail kamera publik.');
        Api::registerScope('cctv.camera.stream', 'Generate signed stream URL.');
    }

    // Load route api.php domain (mount di prefix /api/v1/cctv).
    Route::prefix('api/v1/cctv')
        ->middleware(['api', 'api.auth', 'api.log'])
        ->group(__DIR__.'/../routes/api.php');
}
```

Di `routes/api.php` domain package:

```
Route::get('/cameras', [CameraController::class, 'index'])
    ->middleware('scope:cctv.camera.read');

Route::get('/cameras/{slug}/stream', [CameraController::class, 'stream'])
    ->middleware('scope:cctv.camera.stream');
```

Token format
------------

[](#token-format)

Plaintext: `nws_` (44 char total, mirip GitHub PAT). Prefix `nws_` membantu secret scanner GitHub detect kalau bocor ke commit.

Disimpan di DB: **hash SHA-256** dari plaintext (kolom `token_hash`), plus 8 char pertama plaintext (kolom `token_prefix`) untuk identifikasi visual di list UI. Plaintext **TIDAK** pernah disimpan — ditampilkan sekali saat generate, hilang setelahnya.

Stream URL signing
------------------

[](#stream-url-signing)

Workflow proxy mode CCTV:

```
Client → GET /api/v1/cctv/cameras/cam-01/stream
         Authorization: Bearer nws_xxx

Laravel verify token + scope cctv.camera.stream
        → generate signed URL via StreamUrlSigner:
          sig = HMAC-SHA256(slug + exp, APP_KEY)
          exp = unix timestamp + TTL (5 min default)

Response:
{
  "stream_url": ".../api/v1/cctv/stream/cam-01?sig=abc&exp=1234567890",
  "mode": "mse",
  "expires_at": "2026-05-16T10:30:00Z"
}

Client → connect ke stream_url

Nginx auth_request → /api/v1/cctv/stream/verify?sig=&exp=
                     (verify-only endpoint, return 200/403)

Nginx proxy_pass → http://go2rtc:1984/api/ws?src=cam-01
                   (kalau auth_request 200)

```

Implementation detail di package domain (`nawasara/cctv` M3).

###  Health Score

39

—

LowBetter than 84% of packages

Maintenance97

Actively maintained with recent releases

Popularity10

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity34

Early-stage or recently created project

 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 ~4 days

Total

3

Last Release

15d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/16914951?v=4)[Pringgo J. Saputro](/maintainers/pringgojs)[@pringgojs](https://github.com/pringgojs)

![](https://www.gravatar.com/avatar/edcf770bde3babcc9fa554e305e361b8614c1e505470e75842de75ea3e502548?d=identicon)[nawasara](/maintainers/nawasara)

---

Top Contributors

[![pringgojs](https://avatars.githubusercontent.com/u/16914951?v=4)](https://github.com/pringgojs "pringgojs (3 commits)")

---

Tags

apilaravelresttokenscopepublic-apiNawasara

### Embed Badge

![Health badge](/badges/nawasara-api/health.svg)

```
[![Health](https://phpackages.com/badges/nawasara-api/health.svg)](https://phpackages.com/packages/nawasara-api)
```

###  Alternatives

[nasirkhan/laravel-starter

A CMS like modular Laravel starter project.

1.4k2.7k](/packages/nasirkhan-laravel-starter)[venturedrake/laravel-crm

A free open source CRM built as a package for laravel projects

39910.0k](/packages/venturedrake-laravel-crm)[api-platform/laravel

API Platform support for Laravel

59156.3k10](/packages/api-platform-laravel)[fleetbase/core-api

Core Framework and Resources for Fleetbase API

1232.2k16](/packages/fleetbase-core-api)[illuminatech/data-provider

Allows easy build for DB queries from API requests

4413.9k](/packages/illuminatech-data-provider)

PHPackages © 2026

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