"use client" import { ExpandedDocument, SecuritySchemeObject } from "@/types/openapi" import { ReactNode, createContext, useContext, useState } from "react" type BaseSpecsContextType = { baseSpecs: ExpandedDocument | null setBaseSpecs: (value: ExpandedDocument) => void getSecuritySchema: (securityName: string) => SecuritySchemeObject | null } const BaseSpecsContext = createContext(null) type BaseSpecsProviderProps = { initialSpecs?: ExpandedDocument | null children?: ReactNode } const BaseSpecsProvider = ({ children, initialSpecs = null, }: BaseSpecsProviderProps) => { const [baseSpecs, setBaseSpecs] = useState( initialSpecs ) const getSecuritySchema = ( securityName: string ): SecuritySchemeObject | null => { if ( baseSpecs?.components?.securitySchemes && Object.prototype.hasOwnProperty.call( baseSpecs?.components?.securitySchemes, securityName ) ) { const schema = baseSpecs?.components?.securitySchemes[securityName] if (!("$ref" in schema)) { return schema } } return null } return ( {children} ) } export default BaseSpecsProvider export const useBaseSpecs = (): BaseSpecsContextType => { const context = useContext(BaseSpecsContext) if (!context) { throw new Error("useBaseSpecs must be used inside a BaseSpecsProvider") } return context }