Files
api/.gitignore
Eli Bosley 15bd747776 feat(onboarding): add new onboarding flows for Unraid OS (#1746)
### PR Summary

This PR introduces a new onboarding-focused API surface, expands system
configuration capabilities, and refactors activation/customization data
into a more structured schema.

### What changed

- Added full onboarding domain support in GraphQL:
  - `Onboarding`, `OnboardingState`, `OnboardingStatus`
  - `onboarding` mutation group (complete/reset/override flows)
- Added plugin install lifecycle APIs:
  - `unraidPlugins` mutations (`installPlugin`, `installLanguage`)
  - operation tracking queries + `pluginInstallUpdates` subscription
- Added system time management APIs:
  - `systemTime`, `timeZoneOptions`, `updateSystemTime`
- Added display/network/config enhancements:
  - `display` query + `displaySubscription`
  - `Info.networkInterfaces` and `Info.primaryNetwork`
  - server/SSH update mutations and `Server.comment`
- Updated REST customization asset endpoint to return dynamic image MIME
types (not hardcoded PNG).

### Breaking schema changes

- Removed `PublicPartnerInfo` type.
- Removed query fields:
  - `isInitialSetup`
  - `publicPartnerInfo`
- Removed `Customization.partnerInfo` and `Customization.theme`.
- Restructured `ActivationCode` from flat fields to nested:
  - `partner`, `branding`, `system` objects.

### Net effect

- API becomes more modular and onboarding-driven.
- Consumers must update GraphQL queries for removed fields and adopt the
new `ActivationCode` shape.
- Frontend onboarding/plugin/system-time workflows are now first-class
in the API.

### ⚠️ Breaking GraphQL changes (15 total)

1. Removed type:
- `PublicPartnerInfo`

2. Removed `Query` fields:
- `isInitialSetup`
- `publicPartnerInfo`

3. Removed `Customization` fields:
- `partnerInfo`
- `theme`

4. Reshaped `ActivationCode` (flat fields removed):
- `partnerName`, `partnerUrl`
- `serverName`, `sysModel`, `comment`
- `header`, `headermetacolor`, `background`, `showBannerGradient`,
`theme`

#### Migration mapping (old -> new)
- `activationCode.partnerName` -> `activationCode.partner.name`
- `activationCode.partnerUrl` -> `activationCode.partner.url`
- `activationCode.serverName` -> `activationCode.system.serverName`
- `activationCode.sysModel` -> `activationCode.system.model`
- `activationCode.comment` -> `activationCode.system.comment`
- `activationCode.header` -> `activationCode.branding.header`
- `activationCode.headermetacolor` ->
`activationCode.branding.headermetacolor`
- `activationCode.background` -> `activationCode.branding.background`
- `activationCode.showBannerGradient` ->
`activationCode.branding.showBannerGradient`
- `activationCode.theme` -> `activationCode.branding.theme`
- `query isInitialSetup` -> `query isFreshInstall` (verify semantics in
consumers)
- `Customization.partnerInfo` -> `Customization.activationCode.partner`
+ `Customization.activationCode.branding`
- `Customization.theme` -> use `publicTheme` (or `display.theme`,
depending on consumer need)

---

### Major non-breaking schema additions

1. Onboarding domain:
- New types: `Onboarding`, `OnboardingState`, `OnboardingStatus`
- New mutation namespace: `onboarding` (`completeOnboarding`,
`resetOnboarding`, override helpers)
- `Customization.onboarding` added

2. Plugin install lifecycle:
- New mutations: `unraidPlugins.installPlugin`,
`unraidPlugins.installLanguage`
- New queries: `pluginInstallOperation`, `pluginInstallOperations`,
`installedUnraidPlugins`
- New subscription: `pluginInstallUpdates`
- New types: `PluginInstallOperation`, `PluginInstallEvent`, status
enum/inputs

3. System time management:
- New query fields: `systemTime`, `timeZoneOptions`
- New mutation: `updateSystemTime`
- New types/inputs: `SystemTime`, `TimeZoneOption`,
`UpdateSystemTimeInput`

4. Display/network/settings surface:
- New query field: `display` (`InfoDisplay`)
- New subscription: `displaySubscription`
- `Info` adds `networkInterfaces`, `primaryNetwork`
- `Customization.availableLanguages` added
- New mutation: `customization.setLocale`
- New mutations: `updateServerIdentity`, `updateSshSettings`
- `Server.comment` added

---

### REST contract note (non-GraphQL)
- `GET /customizations/:type` now returns detected image MIME type
dynamically (not always `image/png`).

---

### Data/schema scope note
- No DB migration/schema files were changed in this branch; major schema
impact is API contract (primarily GraphQL).

Source files reviewed:
- `/Users/ajitmehrotra/Projects/api/api/generated-schema.graphql`
-
`/Users/ajitmehrotra/Projects/api/api/src/unraid-api/rest/rest.controller.ts`
-
`/Users/ajitmehrotra/Projects/api/api/src/unraid-api/rest/rest.service.ts`

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

# Release Notes

* **New Features**
  * Multi-step onboarding flow with partner branding support
  * System time and timezone configuration from UI
  * Plugin and language pack installation capabilities
  * Server identity management (name, description, model)
  * SSH settings configuration interface
  * Onboarding admin panel for testing and debugging

* **Improvements**
  * Enhanced theme and locale switching
  * Better network interface information display
  * Improved server information visibility
  * Partner logo and branding customization support
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Ajit Mehrotra <ajitmehrotra2009@gmail.com>
Co-authored-by: Ajit Mehrotra <ajit@lime-technology.com>
2026-02-26 12:38:54 -05:00

133 lines
1.8 KiB
Plaintext

# Logs
./logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
coverage-ts
# nyc test coverage
.nyc_output
# node-waf configuration
.lock-wscript
# Compiled binary addons (https://nodejs.org/api/addons.html)
build/Release
# Dependency directories
node_modules/
jspm_packages/
unraid-ui/node_modules/
# TypeScript v1 declaration files
typings/
# Auto-generated type declarations for Nuxt UI
auto-imports.d.ts
components.d.ts
# Optional npm cache directory
.npm
# Optional eslint cache
.eslintcache
# Optional REPL history
.node_repl_history
# Output of 'npm pack'
*.tgz
# Yarn Integrity file
.yarn-integrity
# dotenv environment variables file
.env
# next.js build output
.next
# Visual Studio Code workspace
.vscode/sftp.json
.history/
# OSX
.DS_Store
# Jetbrains Settings Files
.idea
# Temp dir for tests
test/__temp__/*
# Built files
dist
unraid-ui/storybook-static
# Typescript
typescript
# Ultra runner
.ultra.cache.json
# Github actions
RELEASE_NOTES.md
# Test backups
api/dev/configs/api.json.backup
# Docker Deploy Folder
deploy/*
!deploy/.gitkeep
# pkg cache
.pkg-cache
*.log*
.nuxt
.nitro
.cache
.output
!.env.example
fb_keepalive
# pnpm store
.pnpm-store
# Nix
result
result-*
.direnv/
.envrc
# Webgui sync script helpers
web/scripts/.sync-webgui-repo-*
# Activation code data
plugin/source/dynamix.unraid.net/usr/local/emhttp/plugins/dynamix.my.servers/data/activation-data.php
# Config file that changes between versions
api/dev/Unraid.net/myservers.cfg
# Claude local settings
.claude/settings.local.json
# local Mise settings
.mise.toml
mise.toml
# Compiled test pages (generated from Nunjucks templates)
web/public/test-pages/*.html
# local scripts for testing and development
.dev-scripts/