Skip to content

Commit 339d05f

Browse files
authored
Chore/dependency updates 2026 03 07 (#147)
* chore: dependency updates * fixed api breaks, updated yarn * lint fixes * lint fixes * adjusted versions and changelogs * prettier fix * husky fix
1 parent 87f59d2 commit 339d05f

27 files changed

Lines changed: 1852 additions & 1631 deletions

.husky/pre-commit

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
yarn lint-staged
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
<!-- version-type: major -->
2+
# common
3+
4+
<!--
5+
FORMATTING GUIDE:
6+
7+
### Detailed Entry (appears first when merging)
8+
9+
Use h3 (###) and below for detailed entries with paragraphs, code examples, and lists.
10+
11+
### Simple List Items
12+
13+
- Simple changes can be added as list items
14+
- They are collected together at the bottom of each section
15+
16+
TIP: When multiple changelog drafts are merged, heading-based entries
17+
appear before simple list items within each section.
18+
-->
19+
20+
## 💥 Breaking Changes
21+
22+
### `User` model re-exported from `@furystack/core`
23+
24+
The `User` class is no longer defined locally. It is now re-exported from `@furystack/core`, which may have a different shape or behavior than the previous local definition.
25+
26+
**Examples:**
27+
28+
```typescript
29+
// ❌ Before
30+
import { User } from 'common'
31+
// User was a local class with `username: string` and `roles: string[]`
32+
33+
// ✅ After
34+
import { User } from 'common'
35+
// User is now the `@furystack/core` User type
36+
```
37+
38+
**Impact:** Consumers relying on the exact class definition (e.g., `instanceof` checks or decorators tied to the old class) need to verify compatibility with the `@furystack/core` User type.
39+
40+
## ✨ Features
41+
42+
### JWT API type definitions
43+
44+
Added `JwtApi` and `AuthorizedApi` interfaces for typed JWT authentication endpoints. The `BoilerplateApi` now also includes JWT endpoints (`/jwt/login`, `/jwt/refresh`, `/jwt/logout`) and a `/testAuthorized` endpoint.
45+
46+
**Usage:**
47+
48+
```typescript
49+
import type { JwtApi, AuthorizedApi } from 'common'
50+
51+
// JwtApi provides typed POST endpoints for /jwt/login, /jwt/refresh, /jwt/logout
52+
// AuthorizedApi provides typed GET endpoints requiring a valid access token
53+
```
54+
55+
- Added `jwt-api.ts` with schema generation support for the new JWT API types
56+
57+
## ⬆️ Dependencies
58+
59+
- Updated `@furystack/rest` from `^8.0.32` to `^8.1.0`
60+
- Updated `@types/node` from `^25.0.10` to `^25.3.5`
61+
- Updated `ts-json-schema-generator` from `^2.4.0` to `^2.9.0`
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
<!-- version-type: major -->
2+
# frontend
3+
4+
<!--
5+
FORMATTING GUIDE:
6+
7+
### Detailed Entry (appears first when merging)
8+
9+
Use h3 (###) and below for detailed entries with paragraphs, code examples, and lists.
10+
11+
### Simple List Items
12+
13+
- Simple changes can be added as list items
14+
- They are collected together at the bottom of each section
15+
16+
TIP: When multiple changelog drafts are merged, heading-based entries
17+
appear before simple list items within each section.
18+
-->
19+
20+
## 💥 Breaking Changes
21+
22+
### Migrated from `shadowDomName` to `customElementName`
23+
24+
All Shade components now use `customElementName` instead of `shadowDomName`, following the Shades v13 API change.
25+
26+
**Examples:**
27+
28+
```typescript
29+
// ❌ Before
30+
export const MyComponent = Shade({
31+
shadowDomName: 'my-component',
32+
render: () => { /* ... */ },
33+
})
34+
35+
// ✅ After
36+
export const MyComponent = Shade({
37+
customElementName: 'my-component',
38+
render: () => { /* ... */ },
39+
})
40+
```
41+
42+
**Impact:** All custom Shade components must be updated to use the new property name.
43+
44+
### Replaced cookie-based session auth with JWT token-based auth
45+
46+
`BoilerplateApiClient` no longer uses cookie-based session authentication. It now uses JWT tokens via `@furystack/auth-jwt/client` with automatic token refresh. The `call` method now wraps `AuthorizedApi` instead of `BoilerplateApi`, and login/logout are handled through the token store.
47+
48+
**Examples:**
49+
50+
```typescript
51+
// ❌ Before
52+
const apiClient = injector.getInstance(BoilerplateApiClient)
53+
await apiClient.call({ method: 'POST', action: '/login', body: { username, password } })
54+
await apiClient.call({ method: 'POST', action: '/logout' })
55+
56+
// ✅ After
57+
const apiClient = injector.getInstance(BoilerplateApiClient)
58+
await apiClient.login({ username, password })
59+
await apiClient.logout()
60+
// API calls automatically include JWT authorization headers
61+
await apiClient.call({ method: 'GET', action: '/currentUser' })
62+
```
63+
64+
**Impact:** All code using `BoilerplateApiClient` for authentication must switch to the new `login()`/`logout()` methods.
65+
66+
## ✨ Features
67+
68+
### Sidebar navigation with collapsible drawer
69+
70+
Added a `Sidebar` component with a vertical `Menu` for page navigation. The layout now uses `PageLayout` with a collapsible left drawer that auto-collapses on medium breakpoints, and `NestedRouter` for client-side routing.
71+
72+
### Redesigned UI pages
73+
74+
- **Login page** - Redesigned with `Card`, `CardContent`, `Alert`, and `Typography` components for a polished sign-in experience
75+
- **Offline page** - Redesigned with `Alert` components for error/info states and a reload `Button`
76+
- **Init page** - Redesigned with CSS variable theming via `cssVariableTheme`
77+
- **Buttons demo** - Redesigned with `PageContainer` and `PageHeader` for consistent page layout
78+
- **Hello world** - Added an authorized endpoint test section to verify JWT token refresh behavior
79+
80+
### `SessionService` implements `Disposable`
81+
82+
`SessionService` now properly disposes all `ObservableValue` instances via the `Disposable` interface, preventing memory leaks.
83+
84+
## ♻️ Refactoring
85+
86+
- Removed `Body` component; session-state routing logic moved into `Layout`
87+
- Simplified `Header` by removing configurable props (`title`, `links`) in favor of a fixed layout with `DrawerToggleButton`
88+
- Replaced `RouteLink` with `NestedRouteLink` and `Router` with `NestedRouter`
89+
- Used standalone `getTextColor()` function instead of `ThemeProviderService.getTextColor()` method
90+
91+
## ⬆️ Dependencies
92+
93+
- Added `@furystack/auth-jwt` `^2.1.2` - JWT authentication client for token-based auth
94+
- Updated `@furystack/shades` from `^11.0.33` to `^13.0.0` - Introduces `customElementName` API
95+
- Updated `@furystack/shades-common-components` from `^10.0.33` to `^14.0.0` - New `PageLayout`, `PageContainer`, `PageHeader`, `Card`, `Alert`, `Menu`, `Typography`, and `DrawerToggleButton` components
96+
- Updated `@furystack/core` from `^15.0.32` to `^15.2.5`
97+
- Updated `@furystack/inject` from `^12.0.26` to `^12.0.32`
98+
- Updated `@furystack/logging` from `^8.0.26` to `^8.1.1`
99+
- Updated `@furystack/rest-client-fetch` from `^8.0.32` to `^8.1.2`
100+
- Updated `@furystack/utils` from `^8.1.8` to `^8.2.1`
101+
- Updated `@types/node` from `^25.0.10` to `^25.3.5`
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
<!-- version-type: major -->
2+
# furystack-boilerplate-app
3+
4+
<!--
5+
FORMATTING GUIDE:
6+
7+
### Detailed Entry (appears first when merging)
8+
9+
Use h3 (###) and below for detailed entries with paragraphs, code examples, and lists.
10+
11+
### Simple List Items
12+
13+
- Simple changes can be added as list items
14+
- They are collected together at the bottom of each section
15+
16+
TIP: When multiple changelog drafts are merged, heading-based entries
17+
appear before simple list items within each section.
18+
-->
19+
20+
## 💥 Breaking Changes
21+
22+
### Migrated from ESLint v9 to ESLint v10
23+
24+
The ESLint configuration now uses ESLint v10 and switched from `project` array to `projectService` for TypeScript integration. The `@furystack/eslint-plugin` is now used for FuryStack-specific lint rules.
25+
26+
**Impact:** Custom ESLint configurations or overrides targeting ESLint v9 may need to be updated.
27+
28+
## ✨ Features
29+
30+
### Added `@furystack/eslint-plugin` with strict lint rules
31+
32+
Integrated `@furystack/eslint-plugin` with `recommendedStrict` config for all TypeScript files and `shadesStrict` config for frontend `.tsx`/`.ts` files, enforcing FuryStack-specific best practices (e.g., `furystack/rest-action-validate-wrapper`).
33+
34+
## ⬆️ Dependencies
35+
36+
- Added `@furystack/eslint-plugin` `^2.0.0` - FuryStack-specific ESLint rules
37+
- Updated Yarn from `4.12.0` to `4.13.0`
38+
- Updated `eslint` from `^9.39.2` to `^10.0.3`
39+
- Updated `@eslint/js` from `^9.39.2` to `^10.0.1`
40+
- Updated `typescript-eslint` from `^8.53.1` to `^8.56.1`
41+
- Updated `eslint-plugin-jsdoc` from `^62.4.0` to `^62.7.1`
42+
- Updated `eslint-plugin-playwright` from `^2.5.0` to `^2.9.0`
43+
- Updated `lint-staged` from `^16.2.7` to `^16.3.2`
44+
- Updated `rimraf` from `^6.1.2` to `^6.1.3`
45+
- Updated `@playwright/test` from `^1.58.0` to `^1.58.2`
46+
- Updated `@furystack/yarn-plugin-changelog` from `^1.0.1` to `^1.0.6`
47+
- Updated `@types/node` from `^25.0.10` to `^25.3.5`
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
<!-- version-type: major -->
2+
# service
3+
4+
<!--
5+
FORMATTING GUIDE:
6+
7+
### Detailed Entry (appears first when merging)
8+
9+
Use h3 (###) and below for detailed entries with paragraphs, code examples, and lists.
10+
11+
### Simple List Items
12+
13+
- Simple changes can be added as list items
14+
- They are collected together at the bottom of each section
15+
16+
TIP: When multiple changelog drafts are merged, heading-based entries
17+
appear before simple list items within each section.
18+
-->
19+
20+
## 💥 Breaking Changes
21+
22+
### Replaced monolithic `config.ts` with modular service setup
23+
24+
The single `config.ts` file has been split into dedicated modules:
25+
26+
- `root-injector.ts` - Creates the root injector with logging
27+
- `setup-store.ts` - Configures all physical stores, DataSets, and authentication
28+
- `setup-rest-api.ts` - Configures REST API endpoints and static file serving
29+
- `get-cors-options.ts` - CORS configuration
30+
- `get-port.ts` - Port configuration
31+
- `authorization/authorized-only.ts` - Authorization helpers
32+
33+
**Impact:** Any imports from `service/src/config.js` must be updated to the new module paths.
34+
35+
### Seeding uses DataSets instead of direct store access
36+
37+
The `seed.ts` module now uses `getDataSetFor()` with a system identity context (`useSystemIdentityContext`) instead of directly accessing `PhysicalStore` instances via `StoreManager`. This enforces repository-level authorization during seeding.
38+
39+
### Added JWT authentication alongside session-based auth
40+
41+
The service now configures JWT authentication via `useJwtAuthentication()` with configurable secret and token expiration. This adds `RefreshToken` and `PasswordResetToken` stores and DataSets.
42+
43+
## ✨ Features
44+
45+
### JWT authentication endpoints
46+
47+
Added three new POST endpoints for JWT-based authentication:
48+
49+
- `/jwt/login` - Authenticate with username/password, returns access and refresh tokens
50+
- `/jwt/refresh` - Exchange a refresh token for new token pair
51+
- `/jwt/logout` - Invalidate a refresh token
52+
53+
### Authorized endpoint example
54+
55+
Added `GET /testAuthorized` endpoint using the `Authenticate()` middleware to demonstrate token-protected routes.
56+
57+
### CORS `authorization` header support
58+
59+
The CORS configuration now includes the `authorization` header, allowing JWT tokens to be sent from the frontend.
60+
61+
## ♻️ Refactoring
62+
63+
- Extracted REST API setup into `setup-rest-api.ts` for better separation of concerns
64+
- Extracted store/repository/auth setup into `setup-store.ts`
65+
- Extracted port resolution into `get-port.ts` and CORS config into `get-cors-options.ts`
66+
- Moved `authorizedOnly` helper and `authorizedDataSet` into `authorization/authorized-only.ts` with proper typing (removed `any`)
67+
68+
## ⬆️ Dependencies
69+
70+
- Added `@furystack/auth-jwt` `^2.1.2` - JWT authentication support with token management
71+
- Updated `@furystack/rest-service` from `^10.1.3` to `^12.3.0` - New `Authenticate` middleware and API changes
72+
- Updated `@furystack/security` from `^6.0.32` to `^7.0.4` - Adds `PasswordResetToken` model
73+
- Updated `@furystack/core` from `^15.0.32` to `^15.2.5`
74+
- Updated `@furystack/filesystem-store` from `^7.0.32` to `^7.1.2`
75+
- Updated `@furystack/inject` from `^12.0.26` to `^12.0.32`
76+
- Updated `@furystack/logging` from `^8.0.26` to `^8.1.1`
77+
- Updated `@furystack/repository` from `^10.0.32` to `^10.1.6`
78+
- Updated `@types/node` from `^25.0.10` to `^25.3.5`

0 commit comments

Comments
 (0)