PSA/ee/docs/plans/features-ninjaone-overhaul-progress.md
Hermes 284313f908
Some checks are pending
Bidi Control Character Guard / bidi-control-guard (push) Waiting to run
Circular Dependency Check / Check for new circular dependencies (push) Waiting to run
Citus Migration Smoke / Combined migrations on single-node Citus (push) Waiting to run
E2E Fresh Install Tests / fresh-install-e2e (push) Waiting to run
ext-v2 guardrails / Run ext-v2 guard and ESLint (push) Waiting to run
Integration Tests / Check for relevant changes (push) Waiting to run
Integration Tests / ${{ (github.event_name == 'schedule' || github.event.inputs.suite == 'full') && 'Full integration suite' || 'Tier-1 integration subset' }} (push) Blocked by required conditions
Mobile checks / Mobile lint + typecheck (push) Waiting to run
Mobile checks / Mobile unit tests (push) Waiting to run
Mobile checks / Mobile dependency audit (report) (push) Waiting to run
Mobile checks / Mobile reproducibility checks (push) Waiting to run
Secrets guard (env backups) / Ensure no tracked env backup files (push) Waiting to run
Temporal Readiness / fast-readiness (push) Waiting to run
Temporal Readiness / docker-parity (push) Waiting to run
TypeScript Type Check / Nx affected typecheck (push) Waiting to run
Unit Tests / Skipped-test budget (push) Waiting to run
Unit Tests / Nx affected unit tests (push) Waiting to run
Unit Tests / Server unit coverage (informational) (push) Waiting to run
Validate Tenant Management Schema / Check for relevant changes (push) Waiting to run
Validate Tenant Management Schema / Validate Tenant Management Schema (push) Blocked by required conditions
EE Workflows Build Guard / ee-workflows-build-guard (push) Waiting to run
Initial import of AlgaPSA codebase from PSA server
Excluded: .git, node_modules, secrets/, compose.env, assemblyscript tgz

Source: /opt/alga-psa on psa.joliet.tech
2026-06-22 16:12:17 -05:00

3.4 KiB

NinjaOne Per-Tenant Credentials - Progress Tracker

Overview

Switch NinjaOne integration from centralized OAuth app credentials to per-tenant configuration where each tenant provides their own NinjaOne API Client ID and Client Secret.

Branch: feat/ninjaone-custom-credentials Started: 2024-12-16


Progress Summary

Category Completed Total
Server Actions 3 3
OAuth Connect Route 3 3
OAuth Callback Route 3 3
Setup UI 11 11
Testing 0 3
Total 20 23

Detailed Progress

Server Actions (ninjaoneActions.ts)

  • Add saveNinjaOneCredentials() action
  • Add getNinjaOneCredentialsStatus() action
  • Update disconnectNinjaOneIntegration() to clear credentials

OAuth Connect Route (connect/route.ts)

  • Change credential retrieval from getAppSecret to getTenantSecret
  • Remove environment variable fallback
  • Add proper error redirect when credentials not configured

OAuth Callback Route (callback/route.ts)

  • Change credential retrieval from getAppSecret to getTenantSecret
  • Remove environment variable fallback
  • Add proper error handling when credentials not found

Setup UI (NinjaOneIntegrationSettings.tsx)

  • Add state variables for credentials management
  • Add setup instructions card
  • Add external link to NinjaOne API settings
  • Add Client ID input field
  • Add Client Secret input field with show/hide toggle
  • Add Save Credentials button
  • Display dynamic redirect URI
  • Enable Connect button when credentials saved
  • Remove "waiting for approval" message
  • Load credential status on mount
  • Show saved credentials status

Testing

  • Test end-to-end OAuth flow
  • Test credential save/load/clear
  • Test disconnect clears credentials

Work Log

2024-12-16

  • Created feature branch feat/ninjaone-custom-credentials from release/0.15.0
  • Created implementation plan
  • Created tracking files (features-ninjaone-overhaul.json, features-ninjaone-overhaul-progress.md)
  • Implemented server actions (saveNinjaOneCredentials, getNinjaOneCredentialsStatus, clearNinjaOneCredentials)
  • Updated disconnectNinjaOneIntegration to clear client credentials
  • Updated connect route to use tenant secrets instead of app secrets
  • Updated callback route to use tenant secrets instead of app secrets
  • Added complete credential input UI with setup instructions, input fields, and saved status display
  • Enabled Connect button conditionally based on credential status
  • Removed "waiting for approval" message

Files Modified

File Status Notes
ee/server/src/lib/actions/integrations/ninjaoneActions.ts Complete Added credential management actions
ee/server/src/app/api/integrations/ninjaone/connect/route.ts Complete Uses tenant secrets
ee/server/src/app/api/integrations/ninjaone/callback/route.ts Complete Uses tenant secrets
ee/server/src/components/settings/integrations/NinjaOneIntegrationSettings.tsx Complete Added credential input UI

Notes

  • Environment variable fallback has been completely removed
  • Client Secret stored encrypted via secrets provider
  • Redirect URI format: {APP_BASE_URL}/api/integrations/ninjaone/callback
  • Disconnect now clears client credentials (Client ID and Client Secret) in addition to OAuth tokens