UNPKG

pmcf

Version:

Poor mans configuration management

242 lines (228 loc) 5.93 kB
export const ServiceTypes = { "pacman-repo": { extends: ["https"] }, syslog: { endpoints: [ { protocol: "udp", family: "IPv4", port: 514, tls: false }, { protocol: "udp", family: "IPv6", port: 514, tls: false } ] }, mqtt: { endpoints: [ { family: "IPv4", protocol: "tcp", port: 1883, tls: false }, { family: "IPv6", protocol: "tcp", port: 1883, tls: false } ] }, "secure-mqtt": { endpoints: [ { family: "IPv4", protocol: "tcp", port: 8883, tls: true }, { family: "IPv6", protocol: "tcp", port: 8883, tls: true } ] }, ntp: { endpoints: [ { family: "IPv4", protocol: "udp", port: 123, tls: false }, { family: "IPv6", protocol: "udp", port: 123, tls: false } ] }, dns: { endpoints: [ { family: "IPv4", protocol: "udp", port: 53, tls: false }, { family: "IPv6", protocol: "udp", port: 53, tls: false } ] }, mdns: { endpoints: [ { family: "IPv4", protocol: "udp", port: 5353, tls: false }, { family: "IPv6", protocol: "udp", port: 5353, tls: false } ] }, llmnr: { endpoints: [ { family: "IPv4", protocol: "udp", port: 5355, tls: false }, { family: "IPv4", protocol: "tcp", port: 5355, tls: false }, { family: "IPv6", protocol: "udp", port: 5355, tls: false }, { family: "IPv6", protocol: "tcp", port: 5355, tls: false } ] }, ldap: { endpoints: [ { family: "IPv4", protocol: "tcp", port: 389, tls: false }, { family: "IPv6", protocol: "tcp", port: 389, tls: false } ] }, ldaps: { endpoints: [ { family: "IPv4", protocol: "tcp", port: 636, tls: true }, { family: "IPv6", protocol: "tcp", port: 636, tls: true } ] }, http: { endpoints: [ { family: "IPv4", protocol: "tcp", port: 80, tls: false }, { family: "IPv6", protocol: "tcp", port: 80, tls: false } ] }, https: { endpoints: [ { family: "IPv4", protocol: "tcp", port: 443, tls: true }, { family: "IPv6", protocol: "tcp", port: 443, tls: true } ], dnsRecord: { type: "HTTPS", parameters: { alpn: "h2" } } }, http3: { endpoints: [ { family: "IPv4", protocol: "udp", port: 443, tls: true }, { family: "IPv6", protocol: "udp", port: 443, tls: true } ], dnsRecord: { type: "HTTPS", parameters: { "no-default-alpn": undefined, alpn: "h3" } } }, rtsp: { endpoints: [ { family: "IPv4", protocol: "tcp", port: 554, tls: false }, { family: "IPv6", protocol: "tcp", port: 554, tls: false } ] }, smtp: { endpoints: [ { family: "IPv4", protocol: "tcp", port: 25, tls: false }, { family: "IPv6", protocol: "tcp", port: 25, tls: false } ], dnsRecord: { type: "MX" } }, ssh: { endpoints: [ { family: "IPv4", protocol: "tcp", port: 22, tls: false }, { family: "IPv6", protocol: "tcp", port: 22, tls: false } ] }, imap: { endpoints: [ { family: "IPv4", protocol: "tcp", port: 143, tls: false }, { family: "IPv6", protocol: "tcp", port: 143, tls: false } ] }, imaps: { endpoints: [ { family: "IPv4", protocol: "tcp", port: 993, tls: true }, { family: "IPv6", protocol: "tcp", port: 993, tls: true } ] }, dhcp: { endpoints: [ { family: "IPv4", protocol: "udp", port: 547, tls: false }, { family: "IPv6", protocol: "udp", port: 547, tls: false } ] }, "dhcpv6-client": { endpoints: [ { family: "IPv6", protocol: "tcp", port: 546, tls: false }, { family: "IPv6", protocol: "udp", port: 546, tls: false } ] }, "dhcpv6-server": { endpoints: [{ family: "IPv6", port: 547, tls: false }] }, smb: { endpoints: [ { family: "IPv4", protocol: "tcp", port: 445, tls: false }, { family: "IPv6", protocol: "tcp", port: 445, tls: false } ] }, timemachine: { extends: ["smb"], dnsRecord: { type: "TXT", parameters: { sys: "waMa=0", adVF: "0x100", dk0: "adVN=MF-TM-999" // adVF: "0x82" } } }, pcp: { // rfc6887 endpoints: [ { family: "IPv4", protocol: "udp", port: 5351, tls: false }, { family: "IPv6", protocol: "udp", port: 5351, tls: false } ] }, "pcp-multicast": { // rfc6887 endpoints: [ { family: "IPv4", protocol: "udp", port: 5350, tls: false }, { family: "IPv6", protocol: "udp", port: 5350, tls: false } ] } }; Object.entries(ServiceTypes).forEach(([name, type]) => addServiceType(type, name) ); export function addServiceType(type, name) { if (type) { if (name) { type.name = name; } ServiceTypes[type.name] = type; if (type.endpoints) { type.endpoints.forEach(e => (e.type = type)); } else { type.endpoints = []; } if (type.services) { Object.entries(type.services).forEach(([name, type]) => addServiceType(type, name) ); } else { type.services = {}; } if (type.extends) { type.extends = type.extends.map(t => typeof t === "string" ? ServiceTypes[t] : t ); } else { type.extends = []; } } return type; } export function serviceTypes(type) { if (type) { let types = new Set([type.name]); for (const t of type.extends) { types = types.union(serviceTypes(t)); } return types; } return new Set(); } export function serviceTypeEndpoints(type) { if (type) { const all = type.services ? Object.values(type.services) .map(type => serviceTypeEndpoints(type)) .flat() : []; if (type.extends) { all.push(type.extends.reduce((a, c) => [...a, ...c?.endpoints], [])); } if (type.endpoints) { all.push(type.endpoints); } return all.flat(); } return []; }