import {z} from 'zod' export type GetApiEnforcementActionRegistrationIdArgs = {id: string}; export type GetApiEnforcementActionRegistrationIdOptions = {baseUrl?: string | undefined, fetch?: typeof fetch | undefined}; export const metadata = z.object({publisher: z.string(), licence: z.string(), documentation: z.string(), version: z.string().optional(), comment: z.string().optional(), hasFormat: z.array(z.string()), limit: z.number().int().optional(), offset: z.number().int().optional()}); export const iD = z.string(); export const enforcementActionType = z.enum(["http://environment.data.gov.uk/public-register/enforcement-action/def/action-type/notice", "http://environment.data.gov.uk/public-register/enforcement-action/def/action-type/court-case", "http://environment.data.gov.uk/public-register/enforcement-action/def/action-type/enforcement-notice"]); export const enforcementAgencyFunction = z.enum(["http://environment.data.gov.uk/public-register/enforcement-action/def/agency-function/em", "http://environment.data.gov.uk/public-register/enforcement-action/def/agency-function/em-waste", "http://environment.data.gov.uk/public-register/enforcement-action/def/agency-function/em-waste-wq-wr", "http://environment.data.gov.uk/public-register/enforcement-action/def/agency-function/em-wq", "http://environment.data.gov.uk/public-register/enforcement-action/def/agency-function/fisheries", "http://environment.data.gov.uk/public-register/enforcement-action/def/agency-function/flood", "http://environment.data.gov.uk/public-register/enforcement-action/def/agency-function/flood-defence", "http://environment.data.gov.uk/public-register/enforcement-action/def/agency-function/flood-waste", "http://environment.data.gov.uk/public-register/enforcement-action/def/agency-function/hife-wq", "http://environment.data.gov.uk/public-register/enforcement-action/def/agency-function/ippc", "http://environment.data.gov.uk/public-register/enforcement-action/def/agency-function/process-industry-regulation", "http://environment.data.gov.uk/public-register/enforcement-action/def/agency-function/radio-active-substances-regulation", "http://environment.data.gov.uk/public-register/enforcement-action/def/agency-function/rsr", "http://environment.data.gov.uk/public-register/enforcement-action/def/agency-function/waste", "http://environment.data.gov.uk/public-register/enforcement-action/def/agency-function/waste-wq", "http://environment.data.gov.uk/public-register/enforcement-action/def/agency-function/water-quality", "http://environment.data.gov.uk/public-register/enforcement-action/def/agency-function/water-resources", "http://environment.data.gov.uk/public-register/enforcement-action/def/agency-function/wq", "http://environment.data.gov.uk/public-register/enforcement-action/def/agency-function/wq-wr", "http://environment.data.gov.uk/public-register/enforcement-action/def/agency-function/wr"]); export const offenceLegislation = z.enum(["6.8 Waste Electrical and Electronic Equipment Regulations 2013 (WEEE)", "COMAH", "CONTROL OF MAJOR ACCIDENT HAZARD REGULATIONS 1999", "CONTROL OF POLLUTION (AMENDMENT) ACT 1989", "CONTROL OF POLLUTION (OIL STORAGE) (ENG) REG 2001", "CONTROL OF POLLUTION (SILAGE, SLURRY AFO) REG 1991", "CONTROL OF POLLUTION ACT 1974", "CONTROLLED WASTE (REG. OF CARRIERS...) 1991", "DPA", "EA", "ELR", "ENVIRONMENT ACT 1995", "ENVIRONMENTAL PERMITTING (E & W) REGULATIONS 2007", "ENVIRONMENTAL PERMITTING (E & W) REGULATIONS 2010", "ENVIRONMENTAL PROTECTION (DUTY OF CARE) REGS 1991", "ENVIRONMENTAL PROTECTION ACT 1990", "EPA", "EPR", "EPR 2010", "EPR 2016", "EPR07", "EPR2010", "FGGR", "GGR", "GREENHOUSE GAS EMISSIONS TRADING SCHEME REGS 2005", "GROUNDWATER REGULATIONS 1998", "HAZARDOUS WASTE (ENGLAND AND WALES) REGS 2005", "HEALTH AND SAFETY AT WORK ACT 1974", "HWR", "LAND DRAINAGE ACT 1991", "LANDFILL (ENGLAND AND WALES) REGULATIONS 2002", "LDB", "NITRATE VULNERABLE ZONES REGULATIONS 1998", "NORTH WEST LAND DRAINAGE BYELAWS", "Nitrate Pollution Prevention Regulations 2015", "PERSISTENT ORGANIC POLLUTANTS REGULATIONS 2007", "POLLUTION PREVENTION AND CONTROL REGULATIONS 2000", "POWERS OF CRIMINAL COURT (SENTENCING) ACT 2000", "PRO(PW)", "PRODUCER RESP. OBLIG. (PACKAGING WASTE) REGS 1997", "PRODUCER RESP. OBLIG. (PACKAGING WASTE) REGS 2005", "PRODUCER RESP. OBLIG. (PACKAGING WASTE) REGS 2007", "PRODUCER RESP. OBLIG. (PACKAGING WASTE) REGS. 1997", "ProRes", "RADIOACTIVE SUBSTANCES ACT 1993", "RESERVOIRS ACT 1975", "SALMON & FRESHWATER FISHERIES ACT 1975", "SOUTH WEST WATER LAND DRAINAGE BYELAWS 1987", "SPECIAL WASTE REGULATIONS 1996", "SSAFO", "SWA LAND DRAINAGE & SEA DEFENCE BYELAWS", "TEPR 2011 (Controls on Ozone-Depleting Substances)", "TFS", "THAMES WATER AUTHORITY LAND DRAINAGE BYELAWS 1981", "THAMES WATER AUTHORITY LAND DRAINAGE BYELAWS 1981", "TRANSFRONTIER SHIPMENT OF WASTE REGULATIONS 1994", "TRANSFRONTIER SHIPMENT OF WASTE REGULATIONS 2007", "The Contempt of Court Act 1981", "WASTE (ENGLAND AND WALES) REGULATIONS 2011", "WASTE ELECTRICAL & ELECTRONIC EQUIPMENT REGS 2006", "WASTE MANAGEMENT LICENSING REGULATIONS 1994", "WATER INDUSTRY ACT 1991", "WATER RESOURCES (CONT. OF POLLUTION) ETC REGS 2010", "WATER RESOURCES ACT 1991", "WBAR", "WEEE", "WESSEX WATER AUTHORITY LAND DRAINAGE BYELAWS 1981", "WEWR", "WR", "WRA", "Waste"]); export const offender = z.object({"@id": iD, name: z.string(), hasAddress: z.object({"@id": iD.optional(), address: z.string().optional()}).optional()}); export const enforcementActionDetail = z.object({"@id": iD, notation: z.union([z.string(), z.number().int()]), offence: z.union([z.array(z.object({"@id": iD, actionType: z.object({"@id": enforcementActionType, prefLabel: z.string().optional()}), agencyFunction: z.object({"@id": enforcementAgencyFunction, prefLabel: z.string()}).optional(), legislationTitle: offenceLegislation.optional(), description: z.string().optional(), legislationSection: z.string().optional(), impactAir: z.object({label: z.string().optional()}).optional(), impactLand: z.object({label: z.string().optional()}).optional(), impactWater: z.object({label: z.string().optional()}).optional()})), z.object({"@id": iD, actionType: z.object({"@id": enforcementActionType, prefLabel: z.string().optional()}), agencyFunction: z.object({"@id": enforcementAgencyFunction, prefLabel: z.string()}).optional(), legislationTitle: offenceLegislation.optional(), description: z.string().optional(), legislationSection: z.string().optional(), impactAir: z.object({label: z.string().optional()}).optional(), impactLand: z.object({label: z.string().optional()}).optional(), impactWater: z.object({label: z.string().optional()}).optional()})]), offender: offender, actionDate: z.string().optional(), register: z.object({"@id": z.literal("http://environment.data.gov.uk/public-register/enforcement-action/register").optional()}).optional(), registrationNumber: z.union([z.string(), z.number()]), incident: z.object({}).optional()}); export const getApiEnforcementActionRegistrationIdResponse = z.object({meta: metadata.optional(), items: z.array(enforcementActionDetail).optional()}); 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 }; /** * Fetch all details about a single enforcement action * * GET /enforcement-action/registration/{id} */ export const getApiEnforcementActionRegistrationId = async (args: GetApiEnforcementActionRegistrationIdArgs, options?: GetApiEnforcementActionRegistrationIdOptions) => { const {baseUrl = "https://environment.data.gov.uk/public-register", fetch: fetchFn = fetch} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") const url = `${baseUrl.replace(/\/+$/, '')}/enforcement-action/registration/${encodeURIComponent(String(args.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(getApiEnforcementActionRegistrationIdResponse, await res.json()) };