src/platform/config-portability/config-resource.types.ts

Index

Properties

Properties

document
document: ConfigDocument<T>
Type : ConfigDocument<T>
issues
issues: ConfigMigrationIssue[]
Type : ConfigMigrationIssue[]
migrations
migrations: string[]
Type : string[]
export const CONFIG_RESOURCE_KINDS = [
    "Tenant",
    "Client",
    "KmsConfig",
    "KeyChain",
    "RegistrarConfig",
    "IssuanceConfig",
    "CredentialConfig",
    "PresentationConfig",
    "AttributeProvider",
    "WebhookEndpoint",
    "TrustList",
    "StatusList",
] as const;

export type ConfigResourceKind = (typeof CONFIG_RESOURCE_KINDS)[number];
export type ConfigOwnership = "unmanaged" | "file-managed";
export type ConfigImportMode = "create" | "upsert" | "replace";

interface ConfigDocumentMetadata {
    id: string;
    generation?: number;
    ownership?: ConfigOwnership;
}

export interface ConfigDocument<T = Record<string, unknown>> {
    apiVersion: string;
    kind: ConfigResourceKind;
    metadata: ConfigDocumentMetadata;
    spec: T;
}

type ConfigIssueSeverity = "warning" | "required-input" | "error";

export interface ConfigMigrationIssue {
    severity: ConfigIssueSeverity;
    code: string;
    path: string;
    message: string;
    resource?: {
        kind: ConfigResourceKind;
        id: string;
    };
}

export interface ConfigMigrationResult<T = Record<string, unknown>> {
    document: ConfigDocument<T>;
    issues: ConfigMigrationIssue[];
    migrations: string[];
}

interface ConfigBundleResource {
    kind: ConfigResourceKind;
    id: string;
    apiVersion: string;
    path: string;
    sha256: string;
    ownership: ConfigOwnership;
    generation: number;
}

export interface ConfigBundleRequirement {
    code: string;
    resource: { kind: ConfigResourceKind; id: string };
    path: string;
    message: string;
    placeholder?: string;
}

export interface ConfigBundleAsset {
    path: string;
    contentType?: string;
    sha256: string;
    data: string;
}

interface ConfigBundleManifest {
    format: "eudiplo.config-bundle";
    formatVersion: 1;
    sourceVersion: string;
    exportedAt: string;
    tenant: string;
    resources: ConfigBundleResource[];
    assets: Array<{
        path: string;
        contentType?: string;
        sha256: string;
    }>;
    requirements: ConfigBundleRequirement[];
    warnings: ConfigMigrationIssue[];
}

export interface ConfigBundle {
    manifest: ConfigBundleManifest;
    documents: ConfigDocument[];
    assets: ConfigBundleAsset[];
}

export interface ConfigImportPlanItem {
    kind: ConfigResourceKind;
    id: string;
    action: "create" | "update" | "skip" | "delete" | "blocked";
    sourceVersion: string;
    targetVersion: string;
    migrations: string[];
    issues: ConfigMigrationIssue[];
}

export interface ConfigImportPlan {
    tenantId: string;
    mode: ConfigImportMode;
    applicable: boolean;
    items: ConfigImportPlanItem[];
    issues: ConfigMigrationIssue[];
    generatedSecrets?: Array<{
        kind: "Client";
        id: string;
        path: "/spec/secret";
        value: string;
    }>;
}

results matching ""

    No results matching ""