2022-07-21 18:39:33 +02:00
|
|
|
import {
|
|
|
|
CreateOrUpdateNode,
|
|
|
|
Domain,
|
|
|
|
DomainSpecificNodeResponse,
|
|
|
|
EmailAddress,
|
2022-07-28 12:22:57 +02:00
|
|
|
isNumber,
|
2022-07-21 18:39:33 +02:00
|
|
|
JSONObject,
|
|
|
|
MonitoringResponse,
|
|
|
|
MonitoringState,
|
|
|
|
MonitoringToken,
|
|
|
|
NodeResponse,
|
|
|
|
NodeTokenResponse,
|
|
|
|
OnlineState,
|
|
|
|
Site,
|
|
|
|
StoredNode,
|
|
|
|
toIsEnum,
|
2022-07-28 12:22:57 +02:00
|
|
|
toIsNewtype,
|
2022-07-21 18:39:33 +02:00
|
|
|
} from "./shared";
|
2022-05-26 13:58:01 +02:00
|
|
|
|
2020-06-30 01:10:18 +02:00
|
|
|
export * from "./config";
|
2022-07-21 12:07:18 +02:00
|
|
|
export * from "./database";
|
2020-06-30 01:10:18 +02:00
|
|
|
export * from "./logger";
|
2022-02-22 15:39:39 +01:00
|
|
|
export * from "./shared";
|
2020-06-30 01:10:18 +02:00
|
|
|
|
2020-04-10 00:43:15 +02:00
|
|
|
export type NodeStateData = {
|
2022-05-26 13:58:01 +02:00
|
|
|
site: Site,
|
|
|
|
domain: Domain,
|
|
|
|
state: OnlineState,
|
2020-04-10 00:43:15 +02:00
|
|
|
}
|
|
|
|
|
2022-07-21 18:39:33 +02:00
|
|
|
export function toCreateOrUpdateNode(node: StoredNode): CreateOrUpdateNode {
|
|
|
|
return {
|
|
|
|
nickname: node.nickname,
|
|
|
|
email: node.email,
|
|
|
|
hostname: node.hostname,
|
|
|
|
coords: node.coords,
|
|
|
|
key: node.key,
|
|
|
|
mac: node.mac,
|
|
|
|
monitoring: node.monitoringState !== MonitoringState.DISABLED,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
export function toNodeResponse(node: StoredNode): NodeResponse {
|
|
|
|
return {
|
|
|
|
token: node.token,
|
|
|
|
nickname: node.nickname,
|
|
|
|
email: node.email,
|
|
|
|
hostname: node.hostname,
|
|
|
|
coords: node.coords,
|
|
|
|
key: node.key,
|
|
|
|
mac: node.mac,
|
|
|
|
monitoring: node.monitoringState !== MonitoringState.DISABLED,
|
|
|
|
monitoringConfirmed: node.monitoringState === MonitoringState.ACTIVE,
|
|
|
|
monitoringState: node.monitoringState,
|
|
|
|
modifiedAt: node.modifiedAt,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
export function toNodeTokenResponse(node: StoredNode): NodeTokenResponse {
|
|
|
|
return {
|
|
|
|
token: node.token,
|
|
|
|
node: toNodeResponse(node),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
export function toDomainSpecificNodeResponse(node: StoredNode, nodeStateData: NodeStateData): DomainSpecificNodeResponse {
|
|
|
|
return {
|
2022-07-22 17:11:08 +02:00
|
|
|
token: node.token,
|
|
|
|
nickname: node.nickname,
|
|
|
|
email: node.email,
|
|
|
|
hostname: node.hostname,
|
|
|
|
coords: node.coords,
|
|
|
|
key: node.key,
|
|
|
|
mac: node.mac,
|
|
|
|
monitoring: node.monitoringState !== MonitoringState.DISABLED,
|
|
|
|
monitoringConfirmed: node.monitoringState === MonitoringState.ACTIVE,
|
|
|
|
monitoringState: node.monitoringState,
|
|
|
|
modifiedAt: node.modifiedAt,
|
2022-07-21 18:39:33 +02:00
|
|
|
site: nodeStateData.site,
|
|
|
|
domain: nodeStateData.domain,
|
|
|
|
onlineState: nodeStateData.state,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
export function toMonitoringResponse(node: StoredNode): MonitoringResponse {
|
|
|
|
return {
|
|
|
|
hostname: node.hostname,
|
|
|
|
mac: node.mac,
|
|
|
|
email: node.email,
|
|
|
|
monitoring: node.monitoringState !== MonitoringState.DISABLED,
|
|
|
|
monitoringConfirmed: node.monitoringState === MonitoringState.ACTIVE,
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
2020-04-10 00:43:15 +02:00
|
|
|
export type NodeSecrets = {
|
|
|
|
monitoringToken?: MonitoringToken,
|
|
|
|
};
|
|
|
|
|
2022-07-18 17:49:42 +02:00
|
|
|
export type MailId = number & { readonly __tag: unique symbol };
|
2022-07-28 12:22:57 +02:00
|
|
|
export const isMailId = toIsNewtype(isNumber, NaN as MailId);
|
|
|
|
|
2022-07-18 17:49:42 +02:00
|
|
|
export type MailData = JSONObject;
|
|
|
|
|
|
|
|
export enum MailType {
|
|
|
|
MONITORING_OFFLINE_1 = "monitoring-offline-1",
|
|
|
|
MONITORING_OFFLINE_2 = "monitoring-offline-2",
|
|
|
|
MONITORING_OFFLINE_3 = "monitoring-offline-3",
|
|
|
|
MONITORING_ONLINE_AGAIN = "monitoring-online-again",
|
|
|
|
MONITORING_CONFIRMATION = "monitoring-confirmation",
|
|
|
|
}
|
|
|
|
|
|
|
|
export const isMailType = toIsEnum(MailType);
|
2020-04-10 00:43:15 +02:00
|
|
|
|
|
|
|
export interface Mail {
|
|
|
|
id: MailId,
|
|
|
|
email: MailType,
|
2022-07-18 17:49:42 +02:00
|
|
|
sender: EmailAddress,
|
|
|
|
recipient: EmailAddress,
|
2020-04-10 00:43:15 +02:00
|
|
|
data: MailData,
|
|
|
|
failures: number,
|
2020-04-08 21:25:33 +02:00
|
|
|
}
|
2020-04-10 00:43:15 +02:00
|
|
|
|