mirror of
https://github.com/unraid/api.git
synced 2026-01-09 01:59:57 -06:00
separates Unraid Connect from the API ## Summary by CodeRabbit - **New Features** - Introduced a unified, JSON-schema-based settings system for API configuration and plugin settings, accessible via new GraphQL queries and mutations. - Added modular NestJS plugin architecture for Unraid Connect, including new modules for cloud, remote access, and system/network management. - Added granular connection and remote access state tracking, with new GraphQL types and resolvers for cloud and connection status. - Implemented event-driven and service-based management for SSO users, API keys, and dynamic remote access. - Enhanced UI components and queries to support unified settings and restart detection. - **Improvements** - Refactored configuration and state management to use service-based patterns, replacing direct store access and Redux logic. - Migrated legacy config files to new JSON formats with validation and persistence helpers. - Centralized global dependencies and shared services for plugins and CLI modules. - Improved logging, error handling, and lifecycle management for connections and background jobs. - Updated and expanded documentation for plugin development and settings management. - **Bug Fixes** - Improved handling of missing config files and ensured safe persistence. - Enhanced error reporting and validation in remote access and connection services. - **Removals** - Removed deprecated Redux slices, listeners, and legacy cloud/remote access logic. - Deleted obsolete test files, scripts, and unused code related to the old state/store approach. - **Tests** - Added new unit tests for settings merging, URL resolution, and cloud connectivity checks. - **Style** - Applied consistent formatting, import reorganization, and code style improvements across modules. - **Chores** - Updated build scripts, Dockerfiles, and development environment setup to support new dependencies and workflows. - Expanded .gitignore and configuration files for improved build artifact management.
83 lines
1.7 KiB
TypeScript
83 lines
1.7 KiB
TypeScript
import { Field, InterfaceType, registerEnumType } from '@nestjs/graphql';
|
|
|
|
import { IsNotEmpty, IsString } from 'class-validator';
|
|
|
|
import { PrefixedID } from './prefixed-id-scalar.js';
|
|
import { AuthActionVerb } from 'nest-authz';
|
|
|
|
// Register enums
|
|
export enum Resource {
|
|
ACTIVATION_CODE = 'ACTIVATION_CODE',
|
|
API_KEY = 'API_KEY',
|
|
ARRAY = 'ARRAY',
|
|
CLOUD = 'CLOUD',
|
|
CONFIG = 'CONFIG',
|
|
CONNECT = 'CONNECT',
|
|
CONNECT__REMOTE_ACCESS = 'CONNECT__REMOTE_ACCESS',
|
|
CUSTOMIZATIONS = 'CUSTOMIZATIONS',
|
|
DASHBOARD = 'DASHBOARD',
|
|
DISK = 'DISK',
|
|
DISPLAY = 'DISPLAY',
|
|
DOCKER = 'DOCKER',
|
|
FLASH = 'FLASH',
|
|
INFO = 'INFO',
|
|
LOGS = 'LOGS',
|
|
ME = 'ME',
|
|
NETWORK = 'NETWORK',
|
|
NOTIFICATIONS = 'NOTIFICATIONS',
|
|
ONLINE = 'ONLINE',
|
|
OS = 'OS',
|
|
OWNER = 'OWNER',
|
|
PERMISSION = 'PERMISSION',
|
|
REGISTRATION = 'REGISTRATION',
|
|
SERVERS = 'SERVERS',
|
|
SERVICES = 'SERVICES',
|
|
SHARE = 'SHARE',
|
|
VARS = 'VARS',
|
|
VMS = 'VMS',
|
|
WELCOME = 'WELCOME',
|
|
}
|
|
|
|
export enum Role {
|
|
ADMIN = 'ADMIN',
|
|
USER = 'USER',
|
|
CONNECT = 'CONNECT',
|
|
GUEST = 'GUEST',
|
|
}
|
|
|
|
@InterfaceType()
|
|
export class Node {
|
|
@Field(() => PrefixedID)
|
|
@IsString()
|
|
@IsNotEmpty()
|
|
id!: string;
|
|
}
|
|
|
|
registerEnumType(Resource, {
|
|
name: 'Resource',
|
|
description: 'Available resources for permissions',
|
|
});
|
|
|
|
registerEnumType(Role, {
|
|
name: 'Role',
|
|
description: 'Available roles for API keys and users',
|
|
});
|
|
|
|
export interface ApiKey {
|
|
id: string;
|
|
name: string;
|
|
description?: string;
|
|
roles?: Role[];
|
|
permissions?: Permission[];
|
|
createdAt: string;
|
|
}
|
|
|
|
export interface ApiKeyWithSecret extends ApiKey {
|
|
key: string;
|
|
}
|
|
|
|
export interface Permission {
|
|
resource: Resource;
|
|
actions: AuthActionVerb[];
|
|
}
|