<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
- **New Features**
- Bulk SSO account management is now supported, allowing users to update
multiple SSO account IDs at once.
- Connect settings now include SSO account identifiers for streamlined
configuration.
- Expanded array management functionality introduces advanced operations
for managing disk arrays.
- New fields for SSO user IDs have been added to various settings and
queries.
- **Style & Documentation**
- Improved formatting and support for rich HTML in form descriptions
enhance clarity and presentation.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
---------
Co-authored-by: Eli Bosley <ekbosley@gmail.com>
- enhances `pnpm sync-webgui-repo` to include Unraid UI build + sync
options
- changed the dev intended ThemeSwitcher to use local / session storage
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
- **New Features**
- The theme switcher now respects your saved preferences, ensuring a
more personalized interface.
- The component build and synchronization process has been enhanced with
new options for UI components and clearer feedback during operations.
- New computed properties added for better state management in account
and purchase functionalities.
- **Bug Fixes**
- Improved error handling and logging during the component build
process.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
For now just used in Dev Mode to help assist in testing webgui CSS
changes.
- Introduced a new `UnraidThemeSwitcher` component to allow users to
change themes dynamically.
- Updated `nuxt.config.ts` to register the new component.
- Created `ThemeSwitcher.ce.vue` with functionality to handle theme
changes and update the UI accordingly.
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
- **New Features**
- Introduced a theme switcher, allowing users to easily swap between
available application themes.
- Expanded the configuration to register the new theme switcher as a
custom element for seamless integration.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
Sets license for all node.js packages to `GPL-2.0-or-later`
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
- **Chores**
- Simplified license compliance verification by removing legacy script
logic.
- Updated licensing terms across components to GPL-2.0-or-later for
broader compatibility.
- **Documentation**
- Revised setup instructions to indicate that the use of the Just build
tool is now optional.
- **New Features**
- Added fallback support in the build automation tool to ensure smoother
operations when targets are missing.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
Previously the historical script only use to copy built web components
into the webgui repo.
The new script provides additional commands to find files in the API
repo's plugin dir and attempts to find "new" files. Then a command to
act upon each of these new file to sync in either direction, skip it, or
ignore it.
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
- **New Features**
- Introduced an interactive synchronization tool that streamlines file
transfers between projects.
- Added a new command to easily trigger the synchronization process,
leveraging enhanced file management and notification capabilities.
- **Chores**
- Updated version control settings to ignore temporary synchronization
files.
- Removed an outdated file copying script for improved maintenance.
- Added new dependencies to support enhanced functionality.
- Modified a script to exclude specific files from deletion during the
activation code setup process.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
- **Chores**
- Updated environment configuration to enhance secure handling.
- Integrated a shared dependency for consistent callback management.
- **Refactor**
- Streamlined callback actions management for improved performance.
- Upgraded the operating system version from a beta release to stable
(7.0.0), delivering enhanced reliability.
- Centralized callback actions store usage across components for better
state management.
- Removed deprecated callback management code to improve clarity and
maintainability.
- **New Features**
- Introduced a new redirect component to enhance user navigation
experience.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
---------
Co-authored-by: Eli Bosley <ekbosley@gmail.com>
Co-authored-by: Zack Spear <hi@zackspear.com>
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
- **Refactor**
- Improved type safety and consistency across UI components by
leveraging centralized type definitions.
- **Chores**
- Updated and consolidated UI component dependencies by migrating from a
previous library to a new one and refining package configurations.
- **Style**
- Standardized code formatting for uniform syntax and improved
readability.
- **Tests**
- Expanded testing configuration to include additional file types for
enhanced test coverage.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
---------
Co-authored-by: mdatelle <mike@datelle.net>
`VITE_ALLOW_CONSOLE_LOGS` should not be present in `.env.production`. We
don't want basic debugs logs in prod.
Found this because the latest OS release `7.1.0-beta.1.6` which included
the latest web components had debug logs included.
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
- **Chores**
- Disabled non-essential console logging in the production environment
for a cleaner runtime experience.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
- **New Features**
- Introduced a new `DropdownMenu` component in user profiles with
dynamic content rendering.
- Added a new `Popover` component with interactive Storybook demos,
improving component discoverability.
- Added a new `DropdownMenuArrow` component to enhance dropdown visuals.
- Implemented new CSS custom properties for charts, enhancing styling
capabilities in light and dark themes.
- Enhanced dropdown functionality by encapsulating dropdown logic in a
new `UpcDropdownMenu` component.
- Added a new `Select` component for improved user interaction within
the `Sheet` component.
- Introduced a new `SheetWithSelect` story to showcase selection
functionality within the `Sheet` component.
- Updated the `Sidebar` component to improve modal behavior and content
positioning.
- Enhanced `UserProfile` components with a new feedback function for
better status indication.
- **Style**
- Refined layouts by replacing fixed widths with flexible, responsive
designs.
- Updated global styling with a refreshed chart color palette and
expanded dark mode support.
- **Refactor**
- Migrated components to use a unified UI library, streamlining
interactions and boosting consistency.
- Improved type safety in `BrandLoading` component by utilizing a new
type for variants and sizes.
- Updated component imports and organization to enhance maintainability.
- **Bug Fixes**
- Removed unused promotional code and components, simplifying the
codebase and improving performance.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
---------
Co-authored-by: mdatelle <mike@datelle.net>
Co-authored-by: Zack Spear <hi@zackspear.com>
Co-authored-by: Eli Bosley <ekbosley@gmail.com>
…ated tests
- Changed `configValid` value from "yes" to "ineligible" in `var.ini`.
- Updated tests in `emhttp.test.ts` and `var.test.ts` to reflect the new
state.
- Refactored `var.ts` to handle the new `configErrorState` logic based
on `configValid`.
- Adjusted `config.resolver.ts` to return the correct error state.
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
- **New Features**
- Enhanced configuration status reporting to indicate when settings are
ineligible, improving clarity on configuration validity.
- **Chores**
- Updated recorded download times to maintain accurate logging.
- Refined the installation process with streamlined dependency linkage
and improved script readability.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
---------
Co-authored-by: Zack Spear <hi@zackspear.com>
- Added `UnraidCheckExec.php` to separate concerns between UnraidCheck
and ReplaceKey, allowing for JSON responses.
- Updated `unraidcheck` script to parse query strings for compatibility
with the new class.
- Modified `webgui.ts` to call `UnraidCheckExec.php` instead of
`UnraidCheck.php` for update checks.
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
- **New Features**
- Updated the plugin installation process to ensure critical files
remain protected during updates.
- Introduced a dedicated update check component that now returns results
in a JSON format.
- Enhanced the web interface’s update check functionality with
streamlined request parameters.
- **Refactor**
- Separated update checking responsibilities for improved logic clarity
and overall reliability.
- Updated the interface for the update check payload to enhance
parameter handling.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
This change enhances the plugin's capability to manage license keys
effectively.
- Introduced `ReplaceKey.php` from the webgui repo for handling
auto-extended key check & installation
- Updated dynamix.unraid.net.plg to include the new ReplaceKey.php in
restore and preserve files.
- Changed the `check()` method call in `Registration.page` to use the
`force` parameter per
https://app.asana.com/0/1204220153625175/1209573221367693/f
- Moved the `require_once` for `reboot-details.php` in Downgrade.page
and Update.page to ensure it's included after the `ReplaceKey` check.
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
- **New Features**
- Enhanced license key management now validates and updates credentials
more reliably.
- Essential configuration files are preserved throughout updates and
uninstalls to maintain system integrity.
- **Chores**
- Optimized the update and registration workflows for a smoother, more
stable user experience.
- Adjusted internal processing steps to prepare for upcoming
improvements in update checks.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [graphql-ws](https://the-guild.dev/graphql/ws)
([source](https://redirect.github.com/enisdenjo/graphql-ws)) |
[`^5.16.0` ->
`^6.0.0`](https://renovatebot.com/diffs/npm/graphql-ws/5.16.2/6.0.4) |
[](https://docs.renovatebot.com/merge-confidence/)
|
[](https://docs.renovatebot.com/merge-confidence/)
|
[](https://docs.renovatebot.com/merge-confidence/)
|
[](https://docs.renovatebot.com/merge-confidence/)
|
---
### Release Notes
<details>
<summary>enisdenjo/graphql-ws (graphql-ws)</summary>
###
[`v6.0.4`](https://redirect.github.com/enisdenjo/graphql-ws/blob/HEAD/CHANGELOG.md#604)
[Compare
Source](https://redirect.github.com/enisdenjo/graphql-ws/compare/v6.0.3...v6.0.4)
##### Patch Changes
-
[#​625](https://redirect.github.com/enisdenjo/graphql-ws/pull/625)
[`b4a656d`](b4a656d585)
Thanks [@​HermanBilous](https://redirect.github.com/HermanBilous)!
- Use Math.pow for retry delay calculation
###
[`v6.0.3`](https://redirect.github.com/enisdenjo/graphql-ws/blob/HEAD/CHANGELOG.md#603)
[Compare
Source](https://redirect.github.com/enisdenjo/graphql-ws/compare/v6.0.2...v6.0.3)
##### Patch Changes
-
[`747c01c`](747c01c73e)
Thanks [@​enisdenjo](https://redirect.github.com/enisdenjo)! -
Drop `ExecutionPatchResult` and `FormattedExecutionPatchResult` types
Neither of the types are officially supported (yet) and the future
versions of graphql-js adding support for stream/defer will a different
signature for the incremental execution result.
###
[`v6.0.2`](https://redirect.github.com/enisdenjo/graphql-ws/blob/HEAD/CHANGELOG.md#602)
[Compare
Source](https://redirect.github.com/enisdenjo/graphql-ws/compare/v6.0.1...v6.0.2)
##### Patch Changes
-
[#​621](https://redirect.github.com/enisdenjo/graphql-ws/pull/621)
[`6b180e8`](6b180e8fc2)
Thanks [@​pleunv](https://redirect.github.com/pleunv)! -
FormattedExecutionResult errors field returns GraphQLFormattedError
###
[`v6.0.1`](https://redirect.github.com/enisdenjo/graphql-ws/blob/HEAD/CHANGELOG.md#601)
[Compare
Source](https://redirect.github.com/enisdenjo/graphql-ws/compare/v6.0.0...v6.0.1)
##### Patch Changes
-
[#​618](https://redirect.github.com/enisdenjo/graphql-ws/pull/618)
[`6be34c7`](6be34c7969)
Thanks [@​enisdenjo](https://redirect.github.com/enisdenjo)! -
Remove exports for CommonJS for Deno exports in package.json
[Deno supports ECMAScript modules
exclusively.](https://docs.deno.com/runtime/fundamentals/modules/)
-
[#​618](https://redirect.github.com/enisdenjo/graphql-ws/pull/618)
[`6be34c7`](6be34c7969)
Thanks [@​enisdenjo](https://redirect.github.com/enisdenjo)! -
Define exports for CommonJS TypeScript definitions in package.json
###
[`v6.0.0`](https://redirect.github.com/enisdenjo/graphql-ws/blob/HEAD/CHANGELOG.md#600)
[Compare
Source](https://redirect.github.com/enisdenjo/graphql-ws/compare/v5.16.2...v6.0.0)
##### Major Changes
-
[`b668b30`](b668b304a8)
Thanks [@​enisdenjo](https://redirect.github.com/enisdenjo)! -
[@​fastify/websocket](https://redirect.github.com/fastify/websocket)
WebSocket in the context extra has been renamed from `connection` to
`socket`
##### Migrating from v5 to v6
```diff
import { makeHandler } from 'graphql-ws/use/@​fastify/websocket';
makeHandler({
schema(ctx) {
- const websocket = ctx.connection;
+ const websocket = ctx.socket;
},
context(ctx) {
- const websocket = ctx.connection;
+ const websocket = ctx.socket;
},
onConnect(ctx) {
- const websocket = ctx.connection;
+ const websocket = ctx.socket;
},
onDisconnect(ctx) {
- const websocket = ctx.connection;
+ const websocket = ctx.socket;
},
onClose(ctx) {
- const websocket = ctx.connection;
+ const websocket = ctx.socket;
},
onSubscribe(ctx) {
- const websocket = ctx.connection;
+ const websocket = ctx.socket;
},
onOperation(ctx) {
- const websocket = ctx.connection;
+ const websocket = ctx.socket;
},
onError(ctx) {
- const websocket = ctx.connection;
+ const websocket = ctx.socket;
},
onNext(ctx) {
- const websocket = ctx.connection;
+ const websocket = ctx.socket;
},
onComplete(ctx) {
- const websocket = ctx.connection;
+ const websocket = ctx.socket;
},
});
```
-
[#​613](https://redirect.github.com/enisdenjo/graphql-ws/pull/613)
[`3f11aba`](3f11aba495)
Thanks [@​enisdenjo](https://redirect.github.com/enisdenjo)! -
Drop support for `ws` v7
`ws` v7 has been deprecated. Please upgrade and use v8.
-
[#​613](https://redirect.github.com/enisdenjo/graphql-ws/pull/613)
[`3f11aba`](3f11aba495)
Thanks [@​enisdenjo](https://redirect.github.com/enisdenjo)! -
Drop support for deprecated `fastify-websocket`
[`fastify-websocket` has been deprecated since
v4.3.0.](https://www.npmjs.com/package/fastify-websocket). Please
upgrade and use
[`@fastify/websocket`](https://redirect.github.com/fastify/fastify-websocket).
-
[#​613](https://redirect.github.com/enisdenjo/graphql-ws/pull/613)
[`3f11aba`](3f11aba495)
Thanks [@​enisdenjo](https://redirect.github.com/enisdenjo)! - The
`/lib/` part from imports has been removed, for example
`graphql-ws/lib/use/ws` becomes `graphql-ws/use/ws`
##### Migrating from v5 to v6
Simply remove the `/lib/` part from your graphql-ws imports that use a
handler.
##### ws
```diff
- import { useServer } from 'graphql-ws/lib/use/ws';
+ import { useServer } from 'graphql-ws/use/ws';
```
##### uWebSockets.js
```diff
- import { makeBehavior } from 'graphql-ws/lib/use/uWebSockets';
+ import { makeBehavior } from 'graphql-ws/use/uWebSockets';
```
#####
[@​fastify/websocket](https://redirect.github.com/fastify/websocket)
```diff
- import { makeHandler } from 'graphql-ws/lib/use/@​fastify/websocket';
+ import { makeHandler } from 'graphql-ws/use/@​fastify/websocket';
```
##### Bun
```diff
- import { handleProtocols, makeHandler } from 'graphql-ws/lib/use/bun';
+ import { handleProtocols, makeHandler } from 'graphql-ws/use/bun';
```
##### Deno
```diff
- import { makeHandler } from 'https://esm.sh/graphql-ws/lib/use/deno';
+ import { makeHandler } from 'https://esm.sh/graphql-ws/use/deno';
```
-
[#​613](https://redirect.github.com/enisdenjo/graphql-ws/pull/613)
[`3f11aba`](3f11aba495)
Thanks [@​enisdenjo](https://redirect.github.com/enisdenjo)! -
`ErrorMessage` uses and `onError` returns `GraphQLFormattedError`
(instead of `GraphQLError`)
Thanks [@​benjie](https://redirect.github.com/benjie) for working
on this in
[#​599](https://redirect.github.com/enisdenjo/graphql-ws/issues/599)
-
[#​613](https://redirect.github.com/enisdenjo/graphql-ws/pull/613)
[`3f11aba`](3f11aba495)
Thanks [@​enisdenjo](https://redirect.github.com/enisdenjo)! -
Least supported Node version is v20
Node v10 has been deprecated for years now. There is no reason to
support it. Bumping the engine to the current LTS (v20) also allows the
code to be leaner and use less polyfills.
-
[#​613](https://redirect.github.com/enisdenjo/graphql-ws/pull/613)
[`3f11aba`](3f11aba495)
Thanks [@​enisdenjo](https://redirect.github.com/enisdenjo)! -
Least supported `graphql` peer dependency is ^15.10.1 and ^16
Users are advised to use the latest of `graphql` because of various
improvements in performance and security.
-
[#​613](https://redirect.github.com/enisdenjo/graphql-ws/pull/613)
[`3f11aba`](3f11aba495)
Thanks [@​enisdenjo](https://redirect.github.com/enisdenjo)! -
`NextMessage` uses and `onNext` returns `FormattedExecutionResult`
(instead of `ExecutionResult`)
-
[#​613](https://redirect.github.com/enisdenjo/graphql-ws/pull/613)
[`3f11aba`](3f11aba495)
Thanks [@​enisdenjo](https://redirect.github.com/enisdenjo)! -
`schema`, `context`, `onSubscribe`, `onOperation`, `onError`, `onNext`
and `onComplete` hooks don't have the full accompanying message anymore,
only the ID and the relevant part from the message
There is really no need to pass the full `SubscribeMessage` to the
`onSubscribe` hook. The only relevant parts from the message are the
`id` and the `payload`, the `type` is useless since the hook inherently
has it (`onNext` is `next` type, `onError` is `error` type, etc).
The actual techincal reason for not having the full message is to avoid
serialising results and errors twice. Both `onNext` and `onError` allow
the user to augment the result and return it to be used instead.
`onNext` originally had the `NextMessage` argument which already has the
`FormattedExecutionResult`, and `onError` originally had the
`ErrorMessage` argument which already has the `GraphQLFormattedError`,
and they both also returned `FormattedExecutionResult` and
`GraphQLFormattedError` respectivelly - meaning, if the user serialised
the results - the serialisation would happen **twice**.
Additionally, the `onOperation`, `onError`, `onNext` and `onComplete`
now have the `payload` which is the `SubscribeMessage.payload`
(`SubscribePayload`) for easier access to the original query as well as
execution params extensions.
##### Migrating from v5 to v6
##### `schema`
```diff
import { ExecutionArgs } from 'graphql';
import { ServerOptions, SubscribePayload } from 'graphql-ws';
const opts: ServerOptions = {
- schema(ctx, message, argsWithoutSchema: Omit<ExecutionArgs, 'schema'>) {
- const messageId = message.id;
- const messagePayload: SubscribePayload = message.payload;
- },
+ schema(ctx, id, payload) {
+ const messageId = id;
+ const messagePayload: SubscribePayload = payload;
+ },
};
```
##### `context`
```diff
import { ExecutionArgs } from 'graphql';
import { ServerOptions, SubscribePayload } from 'graphql-ws';
const opts: ServerOptions = {
- context(ctx, message, args: ExecutionArgs) {
- const messageId = message.id;
- const messagePayload: SubscribePayload = message.payload;
- },
+ context(ctx, id, payload, args: ExecutionArgs) {
+ const messageId = id;
+ const messagePayload: SubscribePayload = payload;
+ },
};
```
##### `onSubscribe`
```diff
import { ServerOptions, SubscribePayload } from 'graphql-ws';
const opts: ServerOptions = {
- onSubscribe(ctx, message) {
- const messageId = message.id;
- const messagePayload: SubscribePayload = message.payload;
- },
+ onSubscribe(ctx, id, payload) {
+ const messageId = id;
+ const messagePayload: SubscribePayload = payload;
+ },
};
```
##### `onOperation`
The `SubscribeMessage.payload` is not useful here at all, the `payload`
has been parsed to ready-to-use graphql execution args and should be
used instead.
```diff
import { ExecutionArgs } from 'graphql';
import { ServerOptions, SubscribePayload, OperationResult } from 'graphql-ws';
const opts: ServerOptions = {
- onOperation(ctx, message, args: ExecutionArgs, result: OperationResult) {
- const messageId = message.id;
- const messagePayload: SubscribePayload = message.payload;
- },
+ onOperation(ctx, id, payload, args: ExecutionArgs, result: OperationResult) {
+ const messageId = id;
+ const messagePayload: SubscribePayload = payload;
+ },
};
```
##### `onError`
The `ErrorMessage.payload` (`GraphQLFormattedError[]`) is not useful
here at all, the user has access to `GraphQLError[]` that are true
instances of the error containing object references to `originalError`s
and other properties. The user can always convert and return
`GraphQLFormattedError[]` by using the `.toJSON()` method.
```diff
import { GraphQLError, GraphQLFormattedError } from 'graphql';
import { ServerOptions, SubscribePayload } from 'graphql-ws';
const opts: ServerOptions = {
- onError(ctx, message, errors) {
- const messageId = message.id;
- const graphqlErrors: readonly GraphQLError[] = errors;
- const errorMessagePayload: readonly GraphQLFormattedError[] = message.payload;
- },
+ onError(ctx, id, payload, errors) {
+ const messageId = id;
+ const graphqlErrors: readonly GraphQLError[] = errors;
+ const subscribeMessagePayload: SubscribePayload = payload;
+ const errorMessagePayload: readonly GraphQLFormattedError[] = errors.map((e) => e.toJSON());
+ },
};
```
##### `onNext`
The `NextMessage.payload` (`FormattedExecutionResult`) is not useful
here at all, the user has access to `ExecutionResult` that contains
actual object references to error instances. The user can always convert
and return `FormattedExecutionResult` by serialising the errors with
`GraphQLError.toJSON()` method.
```diff
import { ExecutionArgs, ExecutionResult, FormattedExecutionResult } from 'graphql';
import { ServerOptions, SubscribePayload } from 'graphql-ws';
const opts: ServerOptions = {
- onNext(ctx, message, args: ExecutionArgs, result: ExecutionResult) {
- const messageId = message.id;
- const nextMessagePayload: FormattedExecutionResult = message.payload;
- },
+ onNext(ctx, id, payload, args: ExecutionArgs, result: ExecutionResult) {
+ const messageId = id;
+ const subscribeMessagePayload: SubscribePayload = payload;
+ const nextMessagePayload: FormattedExecutionResult = { ...result, errors: result.errors?.map((e) => e.toJSON()) };
+ },
};
```
##### `onComplete`
```diff
import { ServerOptions, SubscribePayload } from 'graphql-ws';
const opts: ServerOptions = {
- onComplete(ctx, message) {
- const messageId = message.id;
- },
+ onComplete(ctx, id, payload) {
+ const messageId = id;
+ const subscribeMessagePayload: SubscribePayload = payload;
+ },
};
```
-
[#​613](https://redirect.github.com/enisdenjo/graphql-ws/pull/613)
[`3f11aba`](3f11aba495)
Thanks [@​enisdenjo](https://redirect.github.com/enisdenjo)! -
Errors thrown from subscription iterables will be caught and reported
through the `ErrorMessage`
Compared to the behaviour before, which terminated the whole WebSocket
connection - those errors are now gracefully reported and terminate only
the specific subscription that threw the error.
There's been [an editorial change in the GraphQL Spec suggesting this
being the correct
approach](https://redirect.github.com/graphql/graphql-spec/pull/1099).
Also, if you'd like to get involved and ideally drop your opinion about
whether iterable errors should be reported as errors or
`ExecutionResult`s with `errors` field set, [please read more
here](https://redirect.github.com/graphql/graphql-spec/pull/1127).
##### Migrating from v5 to v6
If you had used the suggested "ws server usage with custom subscribe
method that gracefully handles thrown errors" recipe, you can simply
remove it since this behaviour is now baked in.
```diff
import { subscribe } from 'graphql';
import { useServer } from 'graphql-ws/use/ws';
import { WebSocketServer } from 'ws'; // yarn add ws
const wsServer = new WebSocketServer({
port: 4000,
path: '/graphql',
});
useServer(
{
schema,
- async subscribe(...args) {
- const result = await subscribe(...args);
- if ('next' in result) {
- // is an async iterable, augment the next method to handle thrown errors
- const originalNext = result.next;
- result.next = async () => {
- try {
- return await originalNext();
- } catch (err) {
- // gracefully handle the error thrown from the next method
- return { value: { errors: [err] } };
- }
- };
- }
- return result;
- },
},
wsServer,
);
```
-
[#​613](https://redirect.github.com/enisdenjo/graphql-ws/pull/613)
[`3f11aba`](3f11aba495)
Thanks [@​enisdenjo](https://redirect.github.com/enisdenjo)! -
Remove deprecated `isMessage`, use `validateMessage` instead
##### Migrating from v5 to v6
Replace all ocurrances of `isMessage` with `validateMessage`. Note that
`validateMessage` throws if the message is not valid, compared with
`isMessage` that simply returned true/false.
```diff
- import { isMessage } from 'graphql-ws';
+ import { validateMessage } from 'graphql-ws';
function isGraphQLWSMessage(val) {
- return isMessage(val);
+ try {
+ validateMessage(val);
+ return true;
+ } catch {
+ return false;
+ }
}
```
-
[#​613](https://redirect.github.com/enisdenjo/graphql-ws/pull/613)
[`3f11aba`](3f11aba495)
Thanks [@​enisdenjo](https://redirect.github.com/enisdenjo)! -
Removed deprecated `isFatalConnectionProblem`, use `shouldRetry` instead
##### Migrating from v5 to v6
Replace all ocurrances of `isFatalConnectionProblem` with `shouldRetry`.
Note that the result is inverted, where you returned `false` in
`isFatalConnectionProblem` you should return `true` in `shouldRetry`.
```diff
import { createClient } from 'graphql-ws';
const client = createClient({
url: 'ws://localhost:4000/graphql',
- isFatalConnectionProblem: () => false,
+ shouldRetry: () => true,
});
```
##### Minor Changes
-
[#​613](https://redirect.github.com/enisdenjo/graphql-ws/pull/613)
[`3f11aba`](3f11aba495)
Thanks [@​enisdenjo](https://redirect.github.com/enisdenjo)! -
Client is truly zero-dependency, not even a peer dependency on `graphql`
In non-browser environments, you can use only the client and not even
depend on `graphql` by importing from `graphql-ws/client`.
```ts
import { createClient } from 'graphql-ws/client';
const client = createClient({
url: 'ws://localhost:4000/graphql',
});
```
Note that, in browser envirments (and of course having your bundler use
the [`browser` package.json
field](https://docs.npmjs.com/cli/v11/configuring-npm/package-json#browser)),
you don't have to import from `graphql-ws/client` - simply importing
from `graphql-ws` will only have the `createClient` available.
-
[#​615](https://redirect.github.com/enisdenjo/graphql-ws/pull/615)
[`29dd26a`](29dd26a509)
Thanks [@​enisdenjo](https://redirect.github.com/enisdenjo)! -
Define optional peer dependencies and least supported versions
Using the
[`peerDependencies`](https://docs.npmjs.com/cli/v11/configuring-npm/package-json#peerdependencies)
in combination with
[`peerDependenciesMeta`](https://docs.npmjs.com/cli/v11/configuring-npm/package-json#peerdependenciesmeta)
configuration in `package.json`.
</details>
---
### Configuration
📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box
---
This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/unraid/api).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xNzYuMiIsInVwZGF0ZWRJblZlciI6IjM5LjE3Ni4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
- **Refactor**
- Streamlined the activation steps display with improved conditional
rendering and enhanced interactive button styling.
- **New Features**
- Introduced a new welcome page featuring a dummy server switcher and
refreshed welcome modal.
- Expanded the activation interface with a new activation code section
for clearer navigation.
- **Chores**
- Removed the welcome modal from the home page to simplify the layout.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
---------
Co-authored-by: Zack Spear <hi@zackspear.com>
When the sandbox is toggled via api, the api now restarts after a 3 second delay. The Connect settings UI also informs users, when applicable, that the api will restart before and after they apply their settings.
## Summary by CodeRabbit
- **New Features**
- Improved deployment commands now allow specifying a target server,
streamlining the deployment process.
- Enhanced settings synchronization provides clear feedback on when a
system restart is required after updates.
- Automatic service restart is now triggered after applying connection
settings changes.
- User interface enhancements include added contextual descriptions for
toggle controls.
- New functionality to refetch connection settings after updates,
providing users with the latest information.
- **Bug Fixes**
- Improved user feedback regarding API restart status after settings
updates.
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
- **Style**
- Updated CSS file paths across multiple components to reference assets
absolutely, ensuring consistent and reliable styling across the user
interface.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
- **New Features**
- The log viewer now starts at a fixed size and supports vertical
resizing, giving users more control over the viewing area.
- The single log display has been updated to remove height restrictions,
allowing for a more flexible and extended view of log content.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
- **New Features**
- Introduced a comprehensive Log Viewer accessible from the web
interface and Unraid management, allowing users to easily view, refresh,
and download log files.
- Enabled real-time log updates with auto-scroll functionality for
seamless monitoring.
- Enhanced log display with syntax highlighting and detailed file
metadata for improved readability.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
Replaces the Connect Settings form at Settings > Management Access with a webcomponent containing a generated form.
CodeRabbit:
- **New Features**
- Enhanced connection settings with an updated UI, including a new
custom element `<unraid-connect-settings>`.
- Introduced several new form components (e.g., `NumberField`,
`StringArrayField`, `Select`, `Switch`, `PreconditionsLabel`,
`ControlLayout`, and `VerticalLayout`) for a more dynamic experience.
- Added a notification system with the `Toaster` component for user
feedback.
- New GraphQL operations for managing connection settings and API
updates.
- **Chores**
- Upgraded multiple backend and frontend dependencies and refined
configuration files.
- **Tests**
- Expanded test coverage for CSV conversion, form settings merging, and
the new `csvStringToArray` function.
- **Documentation**
- Added introductory documentation for form components and a readme for
the forms directory.
- also add better watcher support
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
- **New Features**
- Added a helper that displays a local installation URL to simplify
setting up the plugin.
- **Chores**
- Updated service and container port configurations to ensure consistent
network connectivity (changed from 8080 to 5858).
- Refined container management to gracefully handle running instances
during startup.
- Improved build and installation routines for streamlined deployment
and enhanced reliability.
- Enhanced documentation to clarify installation and usage instructions
for better user experience.
- Introduced a new document outlining development workflows for better
guidance.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
---
- To see the specific tasks where the Asana app for GitHub is being
used, see below:
- https://app.asana.com/0/0/1209561202532053
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
- **New Features**
- Introduced containerized plugin deployment support with updated Docker
Compose configurations.
- Added continuous build watch modes for API, web, and UI components for
smoother development iterations.
- Added a new job for API testing in the CI/CD workflow.
- Added a new shell script to determine the local host's IP address for
Docker configurations.
- Introduced a new entry point and HTTP server setup in the plugin's
Docker environment.
- Added new scripts for building and watching plugin changes in
real-time.
- Added a new script for building the project in watch mode for the API
and UI components.
- **Improvements**
- Streamlined the plugin installation process and refined release
workflows for a more reliable user experience.
- Enhanced overall CI/CD pipelines to ensure efficient, production-ready
deployments.
- Updated artifact upload paths and job definitions for clarity and
efficiency.
- Implemented new utility functions for better URL management and
changelog generation.
- Modified the `.dockerignore` file to ignore all contents within the
`node_modules` directory.
- Added new constants and functions for managing plugin paths and
configurations.
- Updated the build process in the Dockerfile to focus on release
operations.
- **Tests**
- Expanded automated testing to validate environment setups and build
stability, ensuring higher reliability during updates.
- Introduced new test suites for validating plugin environment setups
and configurations.
- Added tests for validating environment variables and handling of
manifest files.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Michael Datelle <mdatelle@icloud.com>
Co-authored-by: mdatelle <mike@datelle.net>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: Pujit Mehrotra <pujit@lime-technology.com>
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
- **Chores**
- Updated configuration versions and connection status settings for
improved consistency.
- Restructured build and tooling processes with refined script
organization, including new commands for type checking and cleanup.
- Updated dependency management to support enhanced styling and state
management.
- Removed legacy scripts related to environment handling and CSS
utilities.
- **Refactor**
- Streamlined module imports to align with an updated theme management
structure.
- **Bug Fixes**
- Enhanced error handling in various components to provide more
informative error messages during operations.
- Improved error reporting in the update cancellation process.
- Improved error reporting in date difference calculations.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
- **Documentation**
- Streamlined the release notes presentation for improved clarity.
- Consolidated historical release records and now highlights the latest
enhancements and fixes in version 4.1.3.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->