Nodeflux Central
Extensions

API Reference — Extensions

Endpoint untuk mengelola Extension di Lenz Dashboard — daftar, katalog, install, uninstall, update konfigurasi, dan pengurutan sidebar.

Semua endpoint memerlukan otentikasi. Untuk integrasi, kirim header X-Api-Key: <key> di setiap request tanpa header Authorization. Bearer token (Authorization: Bearer <access_token>, berlaku 30 menit) hanya untuk aplikasi yang menampilkan login Lenz ke penggunanya sendiri dan wajib menyertakan X-Integration-Signature. Basis URL mengikuti variabel lingkungan VITE_API_URL yang dikonfigurasi pada instalasi Lenz. Lihat Otentikasi untuk memilih jalur yang tepat.

Lenz meneruskan semua request /api/extensions/* ke Extension Server yang dikonfigurasi lewat EXTENSION_SERVER_URL; aksi install, edit, pengurutan, dan uninstall tercatat di Audit Logs. Akses dicek terhadap izin peran pada resource Extension: GET butuh Read, POST (install) butuh Create, PATCH/PUT (edit dan urutan) butuh Update, dan DELETE (uninstall) butuh Delete.

Bila EXTENSION_SERVER_URL tidak diatur, GET /api/extensions dan GET /api/extensions/* selalu mengembalikan daftar kosong ({"ok": true, "message": "extensions disabled", "data": []}), dan endpoint lain tidak tersedia.


Daftar & Katalog

Endpoint untuk mengambil extension yang sudah terinstall dan seluruh katalog dari Extension Server.

Daftar Extension Terinstall

GET
/api/extensions

Authorization

bearerAuth
AuthorizationBearer <token>

In: header

Query Parameters

enabled_only?boolean

Jika true, hanya mengembalikan extension yang berstatus aktif (is_enabled: true)

Defaultfalse

Response Body

application/json

application/json

curl -X GET "https://lenz.example.com/api/extensions"
{  "ok": true,  "extensions": [    {      "id": 1,      "slug": "analytics-dashboard",      "name": "Analytics Dashboard",      "description": "Visualisasi data analitik kustom",      "icon": "chart-bar",      "scope": "lenz_extensions",      "module_name": "./AnalyticsDashboard",      "remote_url": "/extensions/static/remoteEntry.js",      "is_enabled": true,      "is_system": false,      "display_order": 1,      "installed_by": 5,      "created_at": "2024-06-01T08:00:00Z",      "updated_at": "2024-06-01T09:00:00Z"    }  ]}
{  "ok": false,  "message": "invalid request"}

Katalog Extension

GET
/api/extensions/catalog

Authorization

bearerAuth
AuthorizationBearer <token>

In: header

Response Body

application/json

application/json

application/json

curl -X GET "https://lenz.example.com/api/extensions/catalog"
{  "ok": true,  "extensions": [    {      "slug": "analytics-dashboard",      "name": "Analytics Dashboard",      "description": "Visualisasi data analitik kustom",      "icon": "chart-bar",      "scope": "lenz_extensions",      "module_name": "./AnalyticsDashboard",      "remote_url": "/extensions/static/remoteEntry.js",      "is_installed": true,      "is_enabled": true,      "is_system": false,      "display_order": 1    },    {      "slug": "report-generator",      "name": "Report Generator",      "description": "Generator laporan otomatis berbasis template",      "icon": "file-text",      "scope": "lenz_extensions",      "module_name": "./ReportGenerator",      "remote_url": "/extensions/static/remoteEntry.js",      "is_installed": false,      "is_enabled": false,      "is_system": false,      "display_order": 0    }  ]}
{  "ok": false,  "message": "invalid request"}
{  "ok": false,  "message": "internal server error"}

Install & Uninstall

Endpoint untuk menginstall satu atau lebih extension dari katalog, serta menguninstall extension yang sudah terpasang.

Install Extension

POST
/api/extensions/install

Authorization

bearerAuth
AuthorizationBearer <token>

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://lenz.example.com/api/extensions/install" \  -H "Content-Type: application/json" \  -d '{    "slugs": [      "analytics-dashboard",      "report-generator"    ]  }'
{  "ok": true,  "extensions": [    {      "id": 1,      "slug": "analytics-dashboard",      "name": "Analytics Dashboard",      "description": "Visualisasi data analitik kustom",      "icon": "chart-bar",      "scope": "lenz_extensions",      "module_name": "./AnalyticsDashboard",      "remote_url": "/extensions/static/remoteEntry.js",      "is_enabled": true,      "is_system": false,      "display_order": 1,      "installed_by": 5,      "created_at": "2024-06-01T08:00:00Z",      "updated_at": "2024-06-01T08:00:00Z"    }  ]}
{  "ok": false,  "message": "invalid request body"}
{  "ok": false,  "message": "invalid request"}
{  "ok": false,  "message": "extension not found"}
{  "ok": false,  "message": "operation not allowed on system extension"}

Uninstall Extension

DELETE
/api/extensions/{slug}

Authorization

bearerAuth
AuthorizationBearer <token>

In: header

Path Parameters

slug*string

Slug unik extension

Response Body

application/json

application/json

application/json

curl -X DELETE "https://lenz.example.com/api/extensions/analytics-dashboard"
Empty
{  "ok": false,  "message": "invalid request"}
{  "ok": false,  "message": "not found"}
{  "ok": false,  "message": "system extension cannot be uninstalled"}

Update & Pengurutan

Endpoint untuk memperbarui extension (nama, ikon, dan status aktif — yang terakhir hanya lewat API) serta mengatur ulang urutan tampilan di grup Extensions sidebar.

Update Konfigurasi Extension

PATCH
/api/extensions/{slug}

Authorization

bearerAuth
AuthorizationBearer <token>

In: header

Path Parameters

slug*string

Slug unik extension

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

curl -X PATCH "https://lenz.example.com/api/extensions/analytics-dashboard" \  -H "Content-Type: application/json" \  -d '{    "name": "Dashboard Analitik",    "icon": "chart-line",    "is_enabled": true  }'
{  "ok": true,  "extension": {    "id": 1,    "slug": "analytics-dashboard",    "name": "Dashboard Analitik",    "description": "Visualisasi data analitik kustom",    "icon": "chart-line",    "scope": "lenz_extensions",    "module_name": "./AnalyticsDashboard",    "remote_url": "/extensions/static/remoteEntry.js",    "is_enabled": true,    "is_system": false,    "display_order": 1,    "installed_by": 5,    "created_at": "2024-06-01T08:00:00Z",    "updated_at": "2024-06-15T10:30:00Z"  }}
{  "ok": false,  "message": "invalid request"}
{  "ok": false,  "message": "not found"}
{  "ok": false,  "message": "cannot disable system extension"}

Atur Ulang Urutan Extension

PUT
/api/extensions/reorder

Authorization

bearerAuth
AuthorizationBearer <token>

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

curl -X PUT "https://lenz.example.com/api/extensions/reorder" \  -H "Content-Type: application/json" \  -d '{    "slugs": [      "report-generator",      "analytics-dashboard"    ]  }'
{  "ok": true,  "message": "reordered"}
{  "ok": false,  "message": "invalid request"}
{  "ok": false,  "message": "invalid request"}

On this page