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

Extends

createZodDto(FederationConfigSchema)

Relationships

Used by

No results matching.

Index

Properties

Properties

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

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

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

const FederationTrustAnchorConfigSchema = z
    .object({
        entityId: z.string(),
        entityConfigurationUri: z.string(),
    })
    .strict();

const FederationConfigSchema = z
    .object({
        role: z.enum(FederationEntityRole).optional(),
        mode: z.enum(FederationTrustMode).optional(),
        entityId: z.string().optional(),
        enforceSigningPolicy: z.boolean().optional(),
        cacheTtlSeconds: z.number().optional(),
        trustAnchors: z.array(FederationTrustAnchorConfigSchema),
    })
    .strict();

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

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

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

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

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

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

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

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

results matching ""

    No results matching ""