From fe4d699dd2f7549cab89b0b64fa4aa709a276ef9 Mon Sep 17 00:00:00 2001 From: Jamie Howard Date: Thu, 30 Oct 2025 15:17:08 +0000 Subject: [PATCH 1/2] feat(users-permissions): add UsersPermissionsUsersManager for specialized user handling --- src/client.ts | 16 +++++++++++++- src/content-types/collection/index.ts | 2 ++ .../users-permissions-users-manager.ts | 22 +++++++++++++++++++ 3 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 src/content-types/collection/users-permissions-users-manager.ts diff --git a/src/client.ts b/src/client.ts index 874cb76..efde6a1 100644 --- a/src/client.ts +++ b/src/client.ts @@ -1,7 +1,11 @@ import createDebug from 'debug'; import { AuthManager } from './auth'; -import { CollectionTypeManager, SingleTypeManager } from './content-types'; +import { + CollectionTypeManager, + SingleTypeManager, + UsersPermissionsUsersManager, +} from './content-types'; import { getWellKnownCollection, getWellKnownSingle } from './content-types/constants'; import { StrapiError, StrapiInitializationError } from './errors'; import { FilesManager } from './files'; @@ -9,6 +13,7 @@ import { HttpClient } from './http'; import { AuthInterceptors, HttpInterceptors } from './interceptors'; import { StrapiConfigValidator } from './validators'; +import type { UsersPermissionsUsersIdOverloads } from './content-types'; import type { ContentTypeManagerOptions } from './content-types/abstract'; import type { HttpClientConfig } from './http'; @@ -368,6 +373,15 @@ export class StrapiClient { const wellKnownConfig = getWellKnownCollection(resource); const effectivePlugin = plugin ?? wellKnownConfig?.plugin ?? undefined; + if (resource === 'users' && effectivePlugin?.name === 'users-permissions') { + const manager = new UsersPermissionsUsersManager( + { resource, path, plugin: effectivePlugin }, + this._httpClient + ); + + return manager as UsersPermissionsUsersManager & UsersPermissionsUsersIdOverloads; + } + return new CollectionTypeManager({ resource, path, plugin: effectivePlugin }, this._httpClient); } diff --git a/src/content-types/collection/index.ts b/src/content-types/collection/index.ts index fbb9315..5542525 100644 --- a/src/content-types/collection/index.ts +++ b/src/content-types/collection/index.ts @@ -1 +1,3 @@ export { CollectionTypeManager } from './manager'; +export { UsersPermissionsUsersManager } from './users-permissions-users-manager'; +export type { UsersPermissionsUsersIdOverloads } from './users-permissions-users-manager'; diff --git a/src/content-types/collection/users-permissions-users-manager.ts b/src/content-types/collection/users-permissions-users-manager.ts new file mode 100644 index 0000000..11ed219 --- /dev/null +++ b/src/content-types/collection/users-permissions-users-manager.ts @@ -0,0 +1,22 @@ +import { CollectionTypeManager } from './manager'; + +import type * as API from '../../types/content-api'; + +/** + * Specialized manager for users-permissions `users` collection. + * Runtime behavior is inherited from CollectionTypeManager. + */ +export class UsersPermissionsUsersManager extends CollectionTypeManager {} + +/** + * Augmented method signatures for users-permissions `users` to accept numeric IDs + */ +export type UsersPermissionsUsersIdOverloads = { + findOne(id: number, queryParams?: API.BaseQueryParams): Promise; + update( + id: number, + data: Record, + queryParams?: API.BaseQueryParams + ): Promise; + delete(id: number, queryParams?: API.BaseQueryParams): Promise; +}; From ef7a4e2e1d9a17faf3b7a862999779d0588bdd37 Mon Sep 17 00:00:00 2001 From: nclsndr Date: Thu, 20 Nov 2025 16:54:25 +0100 Subject: [PATCH 2/2] fix(client): collection returns types --- src/client.ts | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/client.ts b/src/client.ts index efde6a1..3dfabc0 100644 --- a/src/client.ts +++ b/src/client.ts @@ -365,7 +365,12 @@ export class StrapiClient { * @see CollectionTypeManager * @see StrapiClient */ - collection(resource: string, options: ClientCollectionOptions = {}) { + collection( + resource: T, + options: ClientCollectionOptions = {} + ): T extends 'users' + ? UsersPermissionsUsersManager & UsersPermissionsUsersIdOverloads + : CollectionTypeManager { const { path, plugin } = options; // Auto-detect well-known collection resources and apply their plugin configuration @@ -379,10 +384,13 @@ export class StrapiClient { this._httpClient ); - return manager as UsersPermissionsUsersManager & UsersPermissionsUsersIdOverloads; + return manager as any; } - return new CollectionTypeManager({ resource, path, plugin: effectivePlugin }, this._httpClient); + return new CollectionTypeManager( + { resource, path, plugin: effectivePlugin }, + this._httpClient + ) as any; } /**