wulf-pulse/app
lorentz a4242b81be feat: Duo Security integration — full data sync from Accounts + Admin API
Duo API Client (lib/services/duo-client.ts):
- HMAC-SHA1 request signing, GET/POST, automatic pagination
- Rate-limit handling (429 + Retry-After), configurable timeout
- Accounts API: listAccounts() via POST /accounts/v1/account/list
- Admin API: getUsers, getPhones, getGroups, getIntegrations, getAuthLogs
- Child account access: parent creds signed against child api_hostname + account_id
- Factory helpers: getDuoAccountsClient(), getDuoAdminClient()

Database (migration 058):
- 6 tables: duo_accounts, duo_users, duo_phones, duo_auth_logs, duo_groups, duo_integrations
- All with proper FKs, indexes, JSONB fields for capabilities/location/groups

Sync Service (lib/services/duo-sync-service.ts):
- syncAll(): accounts → per-child data + auth logs → parent account → company matching
- Sequential child processing to respect rate limits
- Incremental auth logs (mintime = last synced timestamp, default 30 days)
- Company matching: exact → case-insensitive containment (30/32 = 94% matched)
- Non-blocking with sync ID tracking

API Routes:
- POST/GET /api/duo/sync — trigger sync / check status
- GET /api/duo/accounts — list all accounts with stats + matched company
- GET /api/duo/accounts/[id]/users — users for a specific account
- POST /api/openclaw/sync/duo — OpenClaw trigger with API key auth

Results: 33 accounts, 832 users, 925 phones, 5927 auth logs, 46 groups, 78 integrations
2026-03-27 09:18:04 -04:00
..
addigy-devices Restructure: rename to Pulse and move app to root 2025-10-28 23:08:54 -04:00
addigy-mappings Add comprehensive admin features and multi-system integration 2025-11-19 14:18:16 -05:00
admin feat: Mimecast email integration — message logs, threat events, 120d retention, admin UI 2026-03-17 16:23:47 -04:00
api feat: Duo Security integration — full data sync from Accounts + Admin API 2026-03-27 09:18:04 -04:00
auth feat: add authentication, user management, and admin features 2026-01-31 12:43:14 -05:00
auvik-mappings fix: use loose equality for company ID comparison in mapping dropdowns 2026-02-02 22:52:59 -05:00
backup-status feat: Morning NOC Summary adaptive card for Teams 2026-03-11 09:34:51 -04:00
config-enrichment-test Restructure: rename to Pulse and move app to root 2025-10-28 23:08:54 -04:00
configuration-items Add comprehensive admin features and multi-system integration 2025-11-19 14:18:16 -05:00
dashboard feat: add kiosk settings UI and co-managed client filtering 2026-02-03 08:32:42 -05:00
engagement feat: Morning NOC Summary adaptive card for Teams 2026-03-11 09:34:51 -04:00
kiosk feat: kiosk UI updates - new cards, gauge chart, performance improvements 2026-02-19 15:31:23 -05:00
legal feat: QuickBooks Online integration 2026-03-17 07:39:55 -04:00
mobile feat: add description block to mobile ticket detail with View original toggle 2026-03-23 16:15:05 -04:00
quotes feat: add authentication, user management, and admin features 2026-01-31 12:43:14 -05:00
rmm-mappings feat: IT Glue integration, workflow engine, pipelines, Zabbix WAN, notification channels, backup status UI improvements, nav alignment fixes 2026-02-27 14:52:14 -05:00
sentinelone feat: Add SentinelOne integration 2026-02-27 05:31:31 -05:00
settings feat: add authentication, user management, and admin features 2026-01-31 12:43:14 -05:00
setup Restructure: rename to Pulse and move app to root 2025-10-28 23:08:54 -04:00
favicon.ico Restructure: rename to Pulse and move app to root 2025-10-28 23:08:54 -04:00
globals.css feat: Morning NOC Summary adaptive card for Teams 2026-03-11 09:34:51 -04:00
layout.tsx feat: enable Entra ID authentication 2026-03-17 08:49:20 -04:00
page.tsx Add comprehensive admin features and multi-system integration 2025-11-19 14:18:16 -05:00