From e304eae6196e5653c824b019bca6dd11f2fd95e2 Mon Sep 17 00:00:00 2001 From: Mcat12 Date: Thu, 24 Jan 2019 21:08:59 -0800 Subject: [PATCH] Move API type definitions to new api.d.ts file Signed-off-by: Mcat12 --- src/components/common/EnableDisable.tsx | 2 +- src/components/common/LayoutApplier.tsx | 1 - src/components/common/context.tsx | 2 +- src/components/dashboard/ClientsGraph.tsx | 2 +- src/components/dashboard/QueriesGraph.tsx | 2 +- src/components/dashboard/SummaryStats.tsx | 2 +- src/components/dashboard/TopBlocked.tsx | 2 +- src/components/dashboard/TopClients.tsx | 2 +- src/components/dashboard/TopDomains.tsx | 2 +- .../dashboard/__tests__/ClientsGraph.test.tsx | 1 - .../dashboard/__tests__/SummaryStats.test.tsx | 1 - .../dashboard/__tests__/TopBlocked.test.tsx | 1 - .../dashboard/__tests__/TopClients.test.tsx | 1 - .../dashboard/__tests__/TopDomains.test.tsx | 1 - src/components/log/QueryLog.tsx | 2 +- src/components/settings/DHCPInfo.tsx | 2 +- src/components/settings/DNSInfo.tsx | 2 +- src/components/settings/FTLInfo.tsx | 2 +- src/components/settings/NetworkInfo.tsx | 2 +- .../settings/PreferenceSettings.tsx | 2 +- src/components/settings/VersionInfo.tsx | 2 +- src/types/api.d.ts | 198 ++++++++++++++++++ src/types/global.d.ts | 10 + src/util/api.tsx | 189 ----------------- 24 files changed, 223 insertions(+), 210 deletions(-) create mode 100644 src/types/api.d.ts diff --git a/src/components/common/EnableDisable.tsx b/src/components/common/EnableDisable.tsx index 2c2b9c9..90754fa 100644 --- a/src/components/common/EnableDisable.tsx +++ b/src/components/common/EnableDisable.tsx @@ -16,7 +16,7 @@ import NavButton from "./NavButton"; import NavDropdown from "./NavDropdown"; import { StatusContext } from "./context"; import { CancelablePromise, makeCancelable } from "../../util"; -import api, { ApiStatus, Status, StatusAction } from "../../util/api"; +import api from "../../util/api"; import { Button, Form, diff --git a/src/components/common/LayoutApplier.tsx b/src/components/common/LayoutApplier.tsx index 5887421..9d5d0d6 100644 --- a/src/components/common/LayoutApplier.tsx +++ b/src/components/common/LayoutApplier.tsx @@ -10,7 +10,6 @@ import React from "react"; import { PreferencesContext } from "./context"; -import { WebLayout } from "../../util/api"; /** * Update the web interface layout diff --git a/src/components/common/context.tsx b/src/components/common/context.tsx index 6c28cfc..4e17afb 100644 --- a/src/components/common/context.tsx +++ b/src/components/common/context.tsx @@ -10,7 +10,7 @@ import React, { ReactNode } from "react"; import { WithAPIData } from "./WithAPIData"; -import api, { ApiPreferences, ApiStatus, Status } from "../../util/api"; +import api from "../../util/api"; export interface StatusContextType { status: Status; diff --git a/src/components/dashboard/ClientsGraph.tsx b/src/components/dashboard/ClientsGraph.tsx index 2231bb2..ccbc786 100644 --- a/src/components/dashboard/ClientsGraph.tsx +++ b/src/components/dashboard/ClientsGraph.tsx @@ -13,7 +13,7 @@ import ReactDOM from "react-dom"; import { Line } from "react-chartjs-2"; import { WithNamespaces, withNamespaces } from "react-i18next"; import { padNumber } from "../../util"; -import api, { ApiClientsGraph } from "../../util/api"; +import api from "../../util/api"; import ChartTooltip from "./ChartTooltip"; import { WithAPIData } from "../common/WithAPIData"; import { ChartDataSets, ChartOptions } from "chart.js"; diff --git a/src/components/dashboard/QueriesGraph.tsx b/src/components/dashboard/QueriesGraph.tsx index 9d6d174..1640c24 100644 --- a/src/components/dashboard/QueriesGraph.tsx +++ b/src/components/dashboard/QueriesGraph.tsx @@ -11,7 +11,7 @@ import React, { Component } from "react"; import { WithNamespaces, withNamespaces } from "react-i18next"; import { padNumber } from "../../util"; -import api, { ApiHistoryGraphItem } from "../../util/api"; +import api from "../../util/api"; import { WithAPIData } from "../common/WithAPIData"; import { ChartData, ChartOptions } from "chart.js"; import { Line } from "react-chartjs-2"; diff --git a/src/components/dashboard/SummaryStats.tsx b/src/components/dashboard/SummaryStats.tsx index 550c674..3bbfe86 100644 --- a/src/components/dashboard/SummaryStats.tsx +++ b/src/components/dashboard/SummaryStats.tsx @@ -11,7 +11,7 @@ import React, { Component, Fragment } from "react"; import { WithNamespaces, withNamespaces } from "react-i18next"; import { WithAPIData } from "../common/WithAPIData"; -import api, { ApiSummary } from "../../util/api"; +import api from "../../util/api"; export interface SummaryStatsProps { totalQueries: string; diff --git a/src/components/dashboard/TopBlocked.tsx b/src/components/dashboard/TopBlocked.tsx index 38d46cf..b0acfd0 100644 --- a/src/components/dashboard/TopBlocked.tsx +++ b/src/components/dashboard/TopBlocked.tsx @@ -10,7 +10,7 @@ import React from "react"; import { WithNamespaces, withNamespaces } from "react-i18next"; -import api, { ApiTopBlocked, ApiTopDomainItem } from "../../util/api"; +import api from "../../util/api"; import TopTable from "./TopTable"; import i18next from "i18next"; diff --git a/src/components/dashboard/TopClients.tsx b/src/components/dashboard/TopClients.tsx index 61587d8..8fa551e 100644 --- a/src/components/dashboard/TopClients.tsx +++ b/src/components/dashboard/TopClients.tsx @@ -10,7 +10,7 @@ import React from "react"; import { WithNamespaces, withNamespaces } from "react-i18next"; -import api, { ApiClient, ApiTopClients } from "../../util/api"; +import api from "../../util/api"; import TopTable from "./TopTable"; import i18next from "i18next"; diff --git a/src/components/dashboard/TopDomains.tsx b/src/components/dashboard/TopDomains.tsx index c271273..e2813a4 100644 --- a/src/components/dashboard/TopDomains.tsx +++ b/src/components/dashboard/TopDomains.tsx @@ -10,7 +10,7 @@ import React from "react"; import { WithNamespaces, withNamespaces } from "react-i18next"; -import api, { ApiTopDomainItem, ApiTopDomains } from "../../util/api"; +import api from "../../util/api"; import TopTable from "./TopTable"; import i18next from "i18next"; diff --git a/src/components/dashboard/__tests__/ClientsGraph.test.tsx b/src/components/dashboard/__tests__/ClientsGraph.test.tsx index 8fe5078..ee07882 100644 --- a/src/components/dashboard/__tests__/ClientsGraph.test.tsx +++ b/src/components/dashboard/__tests__/ClientsGraph.test.tsx @@ -15,7 +15,6 @@ import { transformData, TranslatedClientsGraph } from "../ClientsGraph"; -import { ApiClientsGraph } from "../../../util/api"; const fakeData: ApiClientsGraph = { over_time: [ diff --git a/src/components/dashboard/__tests__/SummaryStats.test.tsx b/src/components/dashboard/__tests__/SummaryStats.test.tsx index a226482..f2d7aef 100644 --- a/src/components/dashboard/__tests__/SummaryStats.test.tsx +++ b/src/components/dashboard/__tests__/SummaryStats.test.tsx @@ -15,7 +15,6 @@ import { transformData, TranslatedSummaryStats } from "../SummaryStats"; -import { ApiSummary } from "../../../util/api"; const tick = global.tick; diff --git a/src/components/dashboard/__tests__/TopBlocked.test.tsx b/src/components/dashboard/__tests__/TopBlocked.test.tsx index 07dba0b..107cd72 100644 --- a/src/components/dashboard/__tests__/TopBlocked.test.tsx +++ b/src/components/dashboard/__tests__/TopBlocked.test.tsx @@ -10,7 +10,6 @@ import React from "react"; import { generateRows, transformData } from "../TopBlocked"; -import { ApiTopBlocked } from "../../../util/api"; const fakeData: ApiTopBlocked = { top_domains: [ diff --git a/src/components/dashboard/__tests__/TopClients.test.tsx b/src/components/dashboard/__tests__/TopClients.test.tsx index 36a68a9..47cfc65 100644 --- a/src/components/dashboard/__tests__/TopClients.test.tsx +++ b/src/components/dashboard/__tests__/TopClients.test.tsx @@ -10,7 +10,6 @@ import React from "react"; import { generateRows, transformData } from "../TopClients"; -import { ApiTopClients } from "../../../util/api"; const fakeData: ApiTopClients = { top_clients: [ diff --git a/src/components/dashboard/__tests__/TopDomains.test.tsx b/src/components/dashboard/__tests__/TopDomains.test.tsx index b26a187..6be5720 100644 --- a/src/components/dashboard/__tests__/TopDomains.test.tsx +++ b/src/components/dashboard/__tests__/TopDomains.test.tsx @@ -10,7 +10,6 @@ import React from "react"; import { generateRows, transformData } from "../TopDomains"; -import { ApiTopDomains } from "../../../util/api"; const fakeData: ApiTopDomains = { top_domains: [ diff --git a/src/components/log/QueryLog.tsx b/src/components/log/QueryLog.tsx index 75a1fcc..138ec28 100644 --- a/src/components/log/QueryLog.tsx +++ b/src/components/log/QueryLog.tsx @@ -28,7 +28,7 @@ import { makeCancelable, padNumber } from "../../util"; -import api, { ApiHistoryResponse, ApiQuery } from "../../util/api"; +import api from "../../util/api"; import "react-table/react-table.css"; import "bootstrap-daterangepicker/daterangepicker.css"; diff --git a/src/components/settings/DHCPInfo.tsx b/src/components/settings/DHCPInfo.tsx index 310c516..85aeece 100644 --- a/src/components/settings/DHCPInfo.tsx +++ b/src/components/settings/DHCPInfo.tsx @@ -11,7 +11,7 @@ import React, { ChangeEvent, Component, FormEvent } from "react"; import { WithNamespaces, withNamespaces } from "react-i18next"; import { CancelablePromise, ignoreCancel, makeCancelable } from "../../util"; -import api, { ApiDhcpSettings, ApiResultResponse } from "../../util/api"; +import api from "../../util/api"; import { Button, Col, diff --git a/src/components/settings/DNSInfo.tsx b/src/components/settings/DNSInfo.tsx index 4db503b..f2a4d15 100644 --- a/src/components/settings/DNSInfo.tsx +++ b/src/components/settings/DNSInfo.tsx @@ -11,7 +11,7 @@ import React, { Component, FormEvent } from "react"; import { WithNamespaces, withNamespaces } from "react-i18next"; import { CancelablePromise, ignoreCancel, makeCancelable } from "../../util"; -import api, { ApiDnsSettings, ApiResultResponse } from "../../util/api"; +import api from "../../util/api"; import DnsList from "./DnsList"; import { Button, Col, Form, FormGroup } from "reactstrap"; import ConditionalForwardingSettings, { diff --git a/src/components/settings/FTLInfo.tsx b/src/components/settings/FTLInfo.tsx index d80db4d..65726b6 100644 --- a/src/components/settings/FTLInfo.tsx +++ b/src/components/settings/FTLInfo.tsx @@ -10,7 +10,7 @@ import React, { Component } from "react"; import { WithNamespaces, withNamespaces } from "react-i18next"; -import api, { ApiFtlDbResponse } from "../../util/api"; +import api from "../../util/api"; import { WithAPIData } from "../common/WithAPIData"; export interface FTLInfoProps { diff --git a/src/components/settings/NetworkInfo.tsx b/src/components/settings/NetworkInfo.tsx index 0f4cc8f..d25bc8c 100644 --- a/src/components/settings/NetworkInfo.tsx +++ b/src/components/settings/NetworkInfo.tsx @@ -10,7 +10,7 @@ import React, { Component } from "react"; import { Subtract, WithNamespaces, withNamespaces } from "react-i18next"; -import api, { ApiNetworkSettings } from "../../util/api"; +import api from "../../util/api"; import { Col, Form, FormGroup, Input, Label } from "reactstrap"; import { WithAPIData } from "../common/WithAPIData"; diff --git a/src/components/settings/PreferenceSettings.tsx b/src/components/settings/PreferenceSettings.tsx index aae6826..9ed7102 100644 --- a/src/components/settings/PreferenceSettings.tsx +++ b/src/components/settings/PreferenceSettings.tsx @@ -11,7 +11,7 @@ import React, { ChangeEvent, Component, FormEvent } from "react"; import { WithNamespaces, withNamespaces } from "react-i18next"; import { CancelablePromise, ignoreCancel, makeCancelable } from "../../util"; -import api, { ApiPreferences, ApiResultResponse } from "../../util/api"; +import api from "../../util/api"; import Alert, { AlertType } from "../common/Alert"; import { Button, Col, Form, FormGroup, Input, Label } from "reactstrap"; import { PreferencesContext } from "../common/context"; diff --git a/src/components/settings/VersionInfo.tsx b/src/components/settings/VersionInfo.tsx index 6adf7de..b57c767 100644 --- a/src/components/settings/VersionInfo.tsx +++ b/src/components/settings/VersionInfo.tsx @@ -10,7 +10,7 @@ import React, { Component } from "react"; import { WithNamespaces, withNamespaces } from "react-i18next"; -import api, { ApiVersions } from "../../util/api"; +import api from "../../util/api"; import VersionCard from "./VersionCard"; import { WithAPIData } from "../common/WithAPIData"; diff --git a/src/types/api.d.ts b/src/types/api.d.ts new file mode 100644 index 0000000..e6d1a2d --- /dev/null +++ b/src/types/api.d.ts @@ -0,0 +1,198 @@ +/* Pi-hole: A black hole for Internet advertisements + * (c) 2019 Pi-hole, LLC (https://pi-hole.net) + * Network-wide ad blocking via your own hardware. + * + * Web Interface + * Type definitions for API objects + * + * This file is copyright under the latest version of the EUPL. + * Please see LICENSE file for your rights under this license. */ + +interface ApiQuery { + timestamp: number; + type: number; + status: number; + domain: string; + client: string; + dnssec: number; + reply: number; + response_time: number; +} + +interface ApiHistoryResponse { + cursor: null | string; + history: Array; +} + +interface ApiNetworkSettings { + interface: string; + ipv4_address: string; + ipv6_address: string; + hostname: string; +} + +interface ApiVersion { + branch: string; + hash: string; + tag: string; +} + +interface ApiVersions { + api: ApiVersion; + core: ApiVersion; + ftl: ApiVersion; + web: ApiVersion; +} + +interface ApiDnsSettings { + upstream_dns: Array; + options: { + fqdn_required: boolean; + bogus_priv: boolean; + dnssec: boolean; + listening_type: string; + }; + conditional_forwarding: { + enabled: boolean; + router_ip: string; + domain: string; + }; +} + +interface ApiDhcpSettings { + active: boolean; + ip_start: string; + ip_end: string; + router_ip: string; + lease_time: number; + domain: string; + ipv6_support: boolean; +} + +interface ApiFtlDbResponse { + filesize: number; + queries: number; + sqlite_version: string; +} + +interface ApiSuccessResponse { + status: "success"; +} + +interface ApiError { + key: string; + message: string; + data: any; +} + +interface ApiErrorResponse { + error: ApiError; +} + +type ApiResultResponse = ApiSuccessResponse | ApiErrorResponse; + +type WebLayout = "boxed" | "traditional"; + +interface ApiPreferences { + layout: WebLayout; + language: string; +} + +type Status = "enabled" | "disabled" | "unknown"; +type StatusAction = "enable" | "disable"; + +interface ApiStatus { + status: Status; +} + +interface ApiClientsGraph { + over_time: Array; + clients: Array; +} + +interface ApiClientOverTime { + timestamp: number; + data: Array; +} + +interface ApiClientGraphInfo { + name: string; + ip: string; +} + +interface ApiHistoryGraphItem { + timestamp: number; + total_queries: number; + blocked_queries: number; +} + +interface ApiQueryType { + name: string; + count: number; +} + +interface ApiSummary { + gravity_size: number; + total_queries: { + A: number; + AAAA: number; + ANY: number; + SRV: number; + SOA: number; + PTR: number; + TXT: number; + [key: string]: number; + }; + blocked_queries: number; + percent_blocked: number; + unique_domains: number; + forwarded_queries: number; + cached_queries: number; + reply_types: { + IP: number; + CNAME: number; + DOMAIN: number; + NODATA: number; + NXDOMAIN: number; + [key: string]: number; + }; + total_clients: number; + active_clients: number; + status: string; +} + +interface ApiUpstreams { + upstreams: Array<{ + name: string; + ip: string; + count: number; + }>; + forwarded_queries: number; + total_queries: number; +} + +interface ApiTopDomainItem { + domain: string; + count: number; +} + +interface ApiTopBlocked { + top_domains: Array; + blocked_queries: number; +} + +interface ApiTopDomains { + top_domains: Array; + total_queries: number; +} + +interface ApiTopClients { + top_clients: Array; + total_queries: number; +} + +interface ApiClient { + name: string; + ip: string; + count: number; +} diff --git a/src/types/global.d.ts b/src/types/global.d.ts index 3b525c4..b1dfb0c 100644 --- a/src/types/global.d.ts +++ b/src/types/global.d.ts @@ -1,3 +1,13 @@ +/* Pi-hole: A black hole for Internet advertisements + * (c) 2019 Pi-hole, LLC (https://pi-hole.net) + * Network-wide ad blocking via your own hardware. + * + * Web Interface + * Type definitions for the `global` variable + * + * This file is copyright under the latest version of the EUPL. + * Please see LICENSE file for your rights under this license. */ + namespace NodeJS { interface Global { tick(): Promise diff --git a/src/util/api.tsx b/src/util/api.tsx index 8759a53..dcc3add 100644 --- a/src/util/api.tsx +++ b/src/util/api.tsx @@ -11,195 +11,6 @@ import http, { paramsToString } from "./http"; import config from "../config"; -export interface ApiQuery { - timestamp: number; - type: number; - status: number; - domain: string; - client: string; - dnssec: number; - reply: number; - response_time: number; -} - -export interface ApiHistoryResponse { - cursor: null | string; - history: Array; -} - -export interface ApiNetworkSettings { - interface: string; - ipv4_address: string; - ipv6_address: string; - hostname: string; -} - -export interface ApiVersion { - branch: string; - hash: string; - tag: string; -} - -export interface ApiVersions { - api: ApiVersion; - core: ApiVersion; - ftl: ApiVersion; - web: ApiVersion; -} - -export interface ApiDnsSettings { - upstream_dns: Array; - options: { - fqdn_required: boolean; - bogus_priv: boolean; - dnssec: boolean; - listening_type: string; - }; - conditional_forwarding: { - enabled: boolean; - router_ip: string; - domain: string; - }; -} - -export interface ApiDhcpSettings { - active: boolean; - ip_start: string; - ip_end: string; - router_ip: string; - lease_time: number; - domain: string; - ipv6_support: boolean; -} - -export interface ApiFtlDbResponse { - filesize: number; - queries: number; - sqlite_version: string; -} - -export interface ApiSuccessResponse { - status: "success"; -} - -export interface ApiError { - key: string; - message: string; - data: any; -} - -export interface ApiErrorResponse { - error: ApiError; -} - -export type ApiResultResponse = ApiSuccessResponse | ApiErrorResponse; - -export type WebLayout = "boxed" | "traditional"; - -export interface ApiPreferences { - layout: WebLayout; - language: string; -} - -export type Status = "enabled" | "disabled" | "unknown"; -export type StatusAction = "enable" | "disable"; - -export interface ApiStatus { - status: Status; -} - -export interface ApiClientsGraph { - over_time: Array; - clients: Array; -} - -export interface ApiClientOverTime { - timestamp: number; - data: Array; -} - -export interface ApiClientGraphInfo { - name: string; - ip: string; -} - -export interface ApiHistoryGraphItem { - timestamp: number; - total_queries: number; - blocked_queries: number; -} - -export interface ApiQueryType { - name: string; - count: number; -} - -export interface ApiSummary { - gravity_size: number; - total_queries: { - A: number; - AAAA: number; - ANY: number; - SRV: number; - SOA: number; - PTR: number; - TXT: number; - [key: string]: number; - }; - blocked_queries: number; - percent_blocked: number; - unique_domains: number; - forwarded_queries: number; - cached_queries: number; - reply_types: { - IP: number; - CNAME: number; - DOMAIN: number; - NODATA: number; - NXDOMAIN: number; - [key: string]: number; - }; - total_clients: number; - active_clients: number; - status: string; -} - -export interface ApiUpstreams { - upstreams: Array<{ - name: string; - ip: string; - count: number; - }>; - forwarded_queries: number; - total_queries: number; -} - -export interface ApiTopDomainItem { - domain: string; - count: number; -} - -export interface ApiTopBlocked { - top_domains: Array; - blocked_queries: number; -} - -export interface ApiTopDomains { - top_domains: Array; - total_queries: number; -} - -export interface ApiTopClients { - top_clients: Array; - total_queries: number; -} - -export interface ApiClient { - name: string; - ip: string; - count: number; -} - export default { loggedIn: false, authenticate(key: string) {