diff --git a/src/client.ts b/src/client.ts index 874cb76..3dfabc0 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'; @@ -360,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 @@ -368,7 +378,19 @@ export class StrapiClient { const wellKnownConfig = getWellKnownCollection(resource); const effectivePlugin = plugin ?? wellKnownConfig?.plugin ?? undefined; - return new CollectionTypeManager({ resource, path, plugin: effectivePlugin }, this._httpClient); + if (resource === 'users' && effectivePlugin?.name === 'users-permissions') { + const manager = new UsersPermissionsUsersManager( + { resource, path, plugin: effectivePlugin }, + this._httpClient + ); + + return manager as any; + } + + return new CollectionTypeManager( + { resource, path, plugin: effectivePlugin }, + this._httpClient + ) as any; } /** 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; +};