/** * Minimal SCIM 2.0 wire types (RFC 7643/7644 subset) shared between the * app's SCIM server implementation and its tests. Field shapes follow what * Okta and Microsoft Entra ID actually send. */ export declare const SCIM_URN_USER = "urn:ietf:params:scim:schemas:core:2.0:User"; export declare const SCIM_URN_GROUP = "urn:ietf:params:scim:schemas:core:2.0:Group"; export declare const SCIM_URN_LIST_RESPONSE = "urn:ietf:params:scim:api:messages:2.0:ListResponse"; export declare const SCIM_URN_PATCH_OP = "urn:ietf:params:scim:api:messages:2.0:PatchOp"; export declare const SCIM_URN_ERROR = "urn:ietf:params:scim:api:messages:2.0:Error"; export interface IScimMeta { resourceType: 'User' | 'Group' | 'ServiceProviderConfig' | 'ResourceType' | 'Schema'; /** ISO 8601 */ created?: string; /** ISO 8601 */ lastModified?: string; /** HTTP entity tag, including the weak-validator prefix and quotes */ version?: string; location?: string; } export interface IScimName { givenName?: string; familyName?: string; formatted?: string; } export interface IScimEmail { value: string; type?: string; primary?: boolean; } export interface IScimUserResource { schemas: string[]; /** Server-assigned, immutable */ id: string; /** Assigned by the provisioning IdP; echoed back verbatim */ externalId?: string; /** Unique server-wide, matched case-insensitively */ userName: string; name?: IScimName; displayName?: string; emails?: IScimEmail[]; active: boolean; meta: IScimMeta; } export interface IScimGroupMember { /** SCIM id of the member user */ value: string; display?: string; /** Entra sends null here; tolerated and ignored */ $ref?: string | null; } export interface IScimGroupResource { schemas: string[]; id: string; externalId?: string; displayName: string; members?: IScimGroupMember[]; meta: IScimMeta; } export interface IScimListResponse { schemas: string[]; /** Numbers, never strings */ totalResults: number; startIndex: number; itemsPerPage: number; Resources: T[]; } /** * A single PATCH operation. `op` must be matched case-insensitively * (Entra sends "Add"/"Replace"/"Remove"). `value` may be a primitive, a * boolean-as-string ("False"), an object with dotted keys, or an array of * member refs, depending on the operation. */ export interface IScimPatchOperation { op: string; path?: string; value?: unknown; } export interface IScimPatchRequest { schemas: string[]; Operations: IScimPatchOperation[]; } export interface IScimError { schemas: string[]; /** HTTP status as a JSON string per RFC 7644 */ status: string; scimType?: 'invalidFilter' | 'invalidPath' | 'invalidValue' | 'invalidSyntax' | 'noTarget' | 'mutability' | 'uniqueness' | 'tooMany' | 'sensitive'; detail?: string; }