File

src/issuer/configuration/issuance/dto/federation-config.dto.ts

Index

Properties

Properties

Optional cacheTtlSeconds
Type : number
Decorators :
@ApiPropertyOptional({description: 'Cache TTL in seconds for federation entity statements and trust chain results.', default: 300})
@IsOptional()
@IsNumber()
Optional enforceSigningPolicy
Type : boolean
Decorators :
@ApiPropertyOptional({description: 'Whether federation checks are enforced for upstream metadata and signer trust decisions.', default: true})
@IsOptional()
@IsBoolean()
Optional entityId
Type : string
Decorators :
@ApiPropertyOptional({description: 'Entity identifier of this issuer/verifier in the federation.', example: 'https://issuer.example.org'})
@IsOptional()
@IsString()
Optional mode
Type : FederationTrustMode
Decorators :
@ApiPropertyOptional({enum: FederationTrustMode, description: 'Trust decision strategy when both LoTE trust lists and OpenID Federation are configured.', default: undefined})
@IsOptional()
@IsEnum(FederationTrustMode)
Optional role
Type : FederationEntityRole
Decorators :
@ApiPropertyOptional({enum: FederationEntityRole, description: 'Role this tenant plays in the OpenID Federation topology.', default: undefined})
@IsOptional()
@IsEnum(FederationEntityRole)
trustAnchors
Type : FederationTrustAnchorConfig[]
Decorators :
@ApiProperty({type: () => , description: 'Configured federation trust anchors.'})
@IsArray()
@ValidateNested({each: true})
@Type(undefined)
import { ApiProperty, ApiPropertyOptional } from "@nestjs/swagger";
import { Type } from "class-transformer";
import {
    IsArray,
    IsBoolean,
    IsEnum,
    IsNumber,
    IsOptional,
    IsString,
    ValidateNested,
} from "class-validator";

export enum FederationTrustMode {
    FEDERATION_ONLY = "federation-only",
    HYBRID = "hybrid",
}

export enum FederationEntityRole {
    TRUST_ANCHOR = "trust_anchor",
    INTERMEDIATE = "intermediate",
    LEAF = "leaf",
}

export class FederationTrustAnchorConfig {
    @ApiProperty({
        description: "Entity identifier (sub) of the federation trust anchor.",
        example: "https://ta.example.org",
    })
    @IsString()
    entityId!: string;

    @ApiProperty({
        description:
            "Federation endpoint URL for the trust anchor entity configuration.",
        example: "https://ta.example.org/.well-known/openid-federation",
    })
    @IsString()
    entityConfigurationUri!: string;
}

export class FederationConfig {
    @ApiPropertyOptional({
        enum: FederationEntityRole,
        description:
            "Role this tenant plays in the OpenID Federation topology.",
        default: FederationEntityRole.LEAF,
    })
    @IsOptional()
    @IsEnum(FederationEntityRole)
    role?: FederationEntityRole;

    @ApiPropertyOptional({
        enum: FederationTrustMode,
        description:
            "Trust decision strategy when both LoTE trust lists and OpenID Federation are configured.",
        default: FederationTrustMode.HYBRID,
    })
    @IsOptional()
    @IsEnum(FederationTrustMode)
    mode?: FederationTrustMode;

    @ApiPropertyOptional({
        description:
            "Entity identifier of this issuer/verifier in the federation.",
        example: "https://issuer.example.org",
    })
    @IsOptional()
    @IsString()
    entityId?: string;

    @ApiPropertyOptional({
        description:
            "Whether federation checks are enforced for upstream metadata and signer trust decisions.",
        default: true,
    })
    @IsOptional()
    @IsBoolean()
    enforceSigningPolicy?: boolean;

    @ApiPropertyOptional({
        description:
            "Cache TTL in seconds for federation entity statements and trust chain results.",
        default: 300,
    })
    @IsOptional()
    @IsNumber()
    cacheTtlSeconds?: number;

    @ApiProperty({
        type: () => [FederationTrustAnchorConfig],
        description: "Configured federation trust anchors.",
    })
    @IsArray()
    @ValidateNested({ each: true })
    @Type(() => FederationTrustAnchorConfig)
    trustAnchors!: FederationTrustAnchorConfig[];
}

results matching ""

    No results matching ""