import {z} from 'zod' export type GetApiV1CompanyCompanyIdArgs = {company_id: string, realtime?: boolean | undefined, export?: boolean | undefined}; export type GetApiV1CompanyCompanyIdOptions = {baseUrl?: string | undefined, BearerAuth?: string | undefined, fetch?: typeof fetch | undefined}; export const companyRegisterType = z.enum(["HRB", "HRA", "PR", "GnR", "VR"]); export const companyRegister = z.object({company_id: z.string().optional(), register_number: z.string(), register_type: companyRegisterType, register_court: z.string(), start_date: z.string().optional()}); export const companyLegalForm = z.enum(["ag", "eg", "ek", "ev", "ewiv", "foreign", "gbr", "ggmbh", "gmbh", "kg", "kgaa", "unknown", "llp", "municipal", "ohg", "se", "ug"]); export const companyName = z.object({name: z.string(), legal_form: companyLegalForm, start_date: z.string()}); export const companyAddress = z.object({street: z.string().optional(), city: z.string(), postal_code: z.string().optional(), country: z.string(), extra: z.string().optional(), start_date: z.string(), formatted_value: z.string()}); export const companyPurpose = z.object({purpose: z.string(), start_date: z.string()}); export const companyCapital = z.object({amount: z.number(), currency: z.enum(["EUR", "DEM", "USD"]), start_date: z.string()}); export const entityType = z.enum(["natural_person", "legal_person"]); export const representationRole = z.enum(["DIRECTOR", "PROKURA", "SHAREHOLDER", "OWNER", "PARTNER", "PERSONAL_LIABLE_DIRECTOR", "LIQUIDATOR", "OTHER"]); export const companyRepresentativeV1LegalPerson = z.object({name: z.string(), city: z.string().nullable(), country: z.string()}).nullable(); export const companyRepresentativeV1NaturalPerson = z.object({city: z.string().nullable(), first_name: z.string().nullable(), last_name: z.string().nullable(), date_of_birth: z.string().nullable()}).nullable(); export const companyRepresentativeV1 = z.object({id: z.string().nullable(), name: z.string(), type: entityType, role: representationRole, start_date: z.string(), end_date: z.string().nullable(), authority: z.string().nullable(), legal_person: companyRepresentativeV1LegalPerson.optional(), natural_person: companyRepresentativeV1NaturalPerson.optional()}); export const companyIndicatorSummary = z.object({date: z.string(), report_id: z.string(), balance_sheet_total: z.number().int().nullable(), net_income: z.number().int().nullable(), revenue: z.number().int().nullable(), cash: z.number().int().nullable(), employees: z.number().int().nullable(), equity: z.number().int().nullable(), real_estate: z.number().int().nullable(), materials: z.number().int().nullable(), pension_provisions: z.number().int().nullable(), salaries: z.number().int().nullable(), taxes: z.number().int().nullable(), liabilities: z.number().int().nullable(), capital_reserves: z.number().int().nullable()}); export const companyDocument = z.object({id: z.string(), type: z.enum(["articles_of_association", "sample_protocol", "shareholder_list"]), date: z.string(), latest: z.boolean()}); export const companyMergedInto = z.object({company_id: z.string(), name: z.string(), registration_date: z.string(), agreement_date: z.string().nullable()}); export const companyAcquisition = z.object({company_id: z.string(), name: z.string(), registration_date: z.string(), agreement_date: z.string().nullable()}); export const companyAssetSpinOff = z.object({company_id: z.string(), name: z.string(), registration_date: z.string(), agreement_date: z.string().nullable()}); export const companyProfitTransferAgreement = z.object({company_id: z.string(), name: z.string(), registration_date: z.string(), agreement_date: z.string().nullable()}); export const industryCode = z.object({code: z.string()}); export const socialMediaLinks = z.object({linkedin: z.string().optional(), instagram: z.string().optional(), github: z.string().optional(), twitter: z.string().optional(), facebook: z.string().optional(), youtube: z.string().optional(), xing: z.string().optional(), tiktok: z.string().optional()}); export const website = z.object({email: z.string().optional(), phone: z.string().optional(), vat_id: z.string().optional(), website_url: z.string(), social_media: socialMediaLinks}); export const insolvencyStatus = z.enum(["preliminary", "opened", "rejected_no_assets", "mass_insufficient", "plan_supervised", "lifted", "discontinued", "discharge_pending", "discharge_granted", "discharge_denied", "discharge_revoked", "unknown"]); export const insolvencyProceedingKind = z.enum(["regular_insolvency", "consumer_insolvency"]); export const insolvencyAdministrationKind = z.enum(["external_administration", "self_administration", "protective_shield"]); export const companyInsolvencySummary = z.object({id: z.string(), current_status: insolvencyStatus, court: z.string(), case_number: z.string(), proceeding_kind: insolvencyProceedingKind.nullable().optional(), administration_kind: insolvencyAdministrationKind.nullable().optional(), opened_at: z.string().nullable().optional(), closed_at: z.string().nullable().optional()}); export const source = z.object({document_url: z.string()}); export const companyV1 = z.object({id: z.string(), register: companyRegister, registers: z.array(companyRegister), status: z.enum(["active", "inactive", "liquidation"]), name: companyName, names: z.array(companyName), address: companyAddress, addresses: z.array(companyAddress), purpose: companyPurpose.nullable(), purposes: z.array(companyPurpose), capital: companyCapital.nullable(), capitals: z.array(companyCapital), representation: z.array(companyRepresentativeV1), representation_rule: z.string().nullable(), indicators: z.array(companyIndicatorSummary), legal_form: companyLegalForm, lei: z.string().optional(), documents: z.array(companyDocument), incorporated_at: z.string(), notarized_at: z.string().nullable(), terminated_at: z.string().nullable(), merged_into: companyMergedInto.nullable(), acquisitions: z.array(companyAcquisition), asset_spin_offs: z.array(companyAssetSpinOff), profit_transfer_agreement: companyProfitTransferAgreement.nullable(), industry_codes: z.object({WZ2025: z.array(industryCode)}), contact: website.nullable(), insolvencies: z.array(companyInsolvencySummary).optional(), sources: z.array(source)}); export const validateResponse = async ( schema: { readonly '~standard': { readonly validate: (value: unknown) => ({ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }) | Promise<{ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }> } }, value: unknown ): Promise => { const result = await schema['~standard'].validate(value) if (result.issues !== undefined) { const detail = result.issues .map(({ message, path }) => path?.length ? `${path.map((segment) => String(typeof segment === 'object' ? segment.key : segment)).join('.')}: ${message}` : message ) .join('; ') throw new Error(`Response does not match the schema: ${detail}`, { cause: { issues: result.issues } }) } return result.value }; /** * Get detailed company information * * GET /v1/company/{company_id} */ export const getApiV1CompanyCompanyId = async (args: GetApiV1CompanyCompanyIdArgs, options?: GetApiV1CompanyCompanyIdOptions) => { const {baseUrl = "https://api.openregister.de", fetch: fetchFn = fetch, BearerAuth} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (args.realtime != null) query.append("realtime", String(args.realtime)) if (args.export != null) query.append("export", String(args.export)) if (BearerAuth !== undefined) headers.set('authorization', `Bearer ${BearerAuth}`) const url = `${baseUrl.replace(/\/+$/, '')}/v1/company/${encodeURIComponent(String(args.company_id))}${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "GET", headers}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(companyV1, await res.json()) };