@takodotid/circuit 0.34.3 → 0.36.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +14 -15
- package/dist/chunks/index-20kcjxjg.js +174 -0
- package/dist/chunks/index-2r4bbhac.js +977 -0
- package/dist/chunks/index-n7w3tg5y.js +149 -0
- package/dist/chunks/new-w3zys5y4.js +172 -0
- package/dist/chunks/server-gzsf5me5.js +259 -0
- package/dist/cli/index.js +11345 -9024
- package/dist/helpers/index.js +594 -0
- package/dist/index.js +9 -28
- package/dist/types/core/{addresses.d.ts → address-space.d.ts} +23 -7
- package/dist/types/core/address.d.ts +44 -0
- package/dist/types/core/cabling.d.ts +41 -0
- package/dist/types/core/cross-checks.d.ts +28 -0
- package/dist/types/core/define.d.ts +25 -3
- package/dist/types/core/project-files.d.ts +12 -0
- package/dist/types/core/schema-docs.d.ts +13 -4
- package/dist/types/core/secrets.d.ts +62 -21
- package/dist/types/core/{graph.d.ts → topology.d.ts} +32 -12
- package/dist/types/core/utils.d.ts +8 -0
- package/dist/types/core/validator.d.ts +19 -0
- package/dist/types/helpers/bgp.d.ts +97 -0
- package/dist/types/helpers/checks.d.ts +32 -0
- package/dist/types/helpers/exchange.d.ts +49 -0
- package/dist/types/helpers/filters.d.ts +51 -0
- package/dist/types/helpers/index.d.ts +10 -0
- package/dist/types/helpers/route-server.d.ts +52 -0
- package/dist/types/index.d.ts +5 -3
- package/dist/types/integrations/librenms.d.ts +60 -0
- package/dist/types/integrations/netbox.d.ts +89 -0
- package/dist/types/integrations/peeringdb.d.ts +24 -0
- package/dist/types/integrations/prometheus.d.ts +24 -0
- package/dist/types/integrations/registries.d.ts +8 -0
- package/dist/types/platforms/bgp-wait.d.ts +18 -0
- package/dist/types/platforms/catalog.d.ts +109 -0
- package/dist/types/platforms/derive.d.ts +17 -0
- package/dist/types/platforms/fortios/firewall.d.ts +45 -0
- package/dist/types/platforms/fortios/index.d.ts +134 -0
- package/dist/types/platforms/fortios/names.d.ts +52 -0
- package/dist/types/platforms/fortios/plan.d.ts +104 -0
- package/dist/types/platforms/fortios/render.d.ts +75 -0
- package/dist/types/platforms/fortios/routing.d.ts +56 -0
- package/dist/types/platforms/fortios/tree.d.ts +37 -0
- package/dist/types/platforms/index.d.ts +13 -0
- package/dist/types/platforms/junos/bgp.d.ts +44 -0
- package/dist/types/platforms/junos/index.d.ts +114 -0
- package/dist/types/platforms/junos/render.d.ts +154 -0
- package/dist/types/platforms/line-diff.d.ts +67 -0
- package/dist/types/platforms/platform.d.ts +120 -0
- package/dist/types/platforms/raisecom-ros/index.d.ts +71 -0
- package/dist/types/platforms/raisecom-ros/render.d.ts +41 -0
- package/dist/types/platforms/routeros/export.d.ts +59 -0
- package/dist/types/platforms/routeros/index.d.ts +96 -0
- package/dist/types/{adapters/devices → platforms}/routeros/models.d.ts +4 -0
- package/dist/types/platforms/routeros/plan.d.ts +54 -0
- package/dist/types/platforms/routeros/render.d.ts +240 -0
- package/dist/types/platforms/vrp/index.d.ts +83 -0
- package/dist/types/platforms/vrp/render.d.ts +96 -0
- package/dist/types/schema/common.d.ts +12 -6
- package/dist/types/schema/index.d.ts +1 -0
- package/dist/types/schema/interfaces.d.ts +14 -6
- package/dist/types/schema/policy.d.ts +18 -10
- package/dist/types/schema/routing.d.ts +14 -1
- package/dist/types/schema/system.d.ts +16 -6
- package/dist/types/schema/time-zones.d.ts +2 -0
- package/dist/types/transport/console.d.ts +79 -23
- package/dist/types/transport/path-check.d.ts +32 -0
- package/dist/types/transport/ssh.d.ts +17 -15
- package/package.json +18 -12
- package/src/cli/graph-format.ts +91 -0
- package/src/cli/index.ts +1074 -484
- package/src/cli/new.ts +208 -175
- package/src/cli/rename.ts +97 -91
- package/src/core/address-space.ts +320 -0
- package/src/core/address.ts +202 -0
- package/src/core/cabling.ts +154 -0
- package/src/core/cross-checks.ts +364 -0
- package/src/core/define.ts +26 -3
- package/src/core/project-files.ts +35 -0
- package/src/core/schema-docs.ts +138 -130
- package/src/core/secrets.ts +170 -76
- package/src/core/topology.ts +656 -0
- package/src/core/utils.ts +37 -0
- package/src/core/validator.ts +407 -0
- package/src/helpers/bgp.ts +301 -0
- package/src/helpers/checks.ts +178 -0
- package/src/helpers/exchange.ts +117 -0
- package/src/helpers/filters.ts +107 -0
- package/src/helpers/index.ts +12 -0
- package/src/helpers/route-server.ts +212 -0
- package/src/index.ts +6 -3
- package/src/integrations/librenms.ts +291 -0
- package/src/integrations/netbox.ts +620 -0
- package/src/integrations/peeringdb.ts +173 -0
- package/src/integrations/prometheus.ts +90 -0
- package/src/integrations/registries.ts +25 -0
- package/src/platforms/bgp-wait.ts +41 -0
- package/src/platforms/catalog.ts +69 -0
- package/src/platforms/derive.ts +117 -0
- package/src/{adapters/devices → platforms}/fortios/TRAPS.md +6 -0
- package/src/platforms/fortios/firewall.ts +377 -0
- package/src/platforms/fortios/index.ts +1060 -0
- package/src/platforms/fortios/names.ts +130 -0
- package/src/platforms/fortios/plan.ts +929 -0
- package/src/platforms/fortios/render.ts +779 -0
- package/src/platforms/fortios/routing.ts +476 -0
- package/src/platforms/fortios/tree.ts +129 -0
- package/src/platforms/index.ts +36 -0
- package/src/{adapters/devices → platforms}/junos/TRAPS.md +8 -0
- package/src/platforms/junos/bgp.ts +293 -0
- package/src/platforms/junos/index.ts +1006 -0
- package/src/platforms/junos/render.ts +967 -0
- package/src/platforms/line-diff.ts +244 -0
- package/src/platforms/platform.ts +122 -0
- package/src/platforms/raisecom-ros/TRAPS.md +40 -0
- package/src/platforms/raisecom-ros/index.ts +731 -0
- package/src/platforms/raisecom-ros/render.ts +328 -0
- package/src/{adapters/devices → platforms}/routeros/TRAPS.md +16 -2
- package/src/platforms/routeros/export.ts +342 -0
- package/src/platforms/routeros/index.ts +636 -0
- package/src/{adapters/devices → platforms}/routeros/models.ts +2 -0
- package/src/platforms/routeros/plan.ts +444 -0
- package/src/platforms/routeros/render.ts +1483 -0
- package/src/platforms/vrp/TRAPS.md +45 -0
- package/src/platforms/vrp/index.ts +652 -0
- package/src/platforms/vrp/render.ts +615 -0
- package/src/schema/common.ts +15 -6
- package/src/schema/index.ts +1 -0
- package/src/schema/interfaces.ts +15 -5
- package/src/schema/policy.ts +22 -10
- package/src/schema/routing.ts +16 -1
- package/src/schema/system.ts +16 -6
- package/src/schema/time-zones.ts +482 -0
- package/src/studio/data.ts +172 -168
- package/src/studio/git.ts +95 -90
- package/src/studio/public/app.js +161 -150
- package/src/studio/public/compare.js +219 -212
- package/src/studio/public/diff.js +77 -75
- package/src/studio/public/dom.js +118 -108
- package/src/studio/public/evaluate.js +584 -545
- package/src/studio/public/export.js +120 -118
- package/src/studio/public/graph.js +1343 -1266
- package/src/studio/public/net.js +115 -109
- package/src/studio/public/tables.js +1135 -1083
- package/src/studio/public/tools.js +561 -529
- package/src/studio/server.ts +202 -196
- package/src/transport/console.ts +363 -271
- package/src/transport/path-check.ts +91 -0
- package/src/transport/ssh.ts +98 -94
- package/templates/colocation/checks.ts +11 -6
- package/templates/colocation/edge-01.ts +9 -9
- package/templates/colocation/routing.ts +2 -2
- package/templates/colocation/tenancy.ts +3 -3
- package/templates/colocation/tor-01.ts +3 -3
- package/templates/edge-router/checks.ts +4 -4
- package/templates/edge-router/edge-01.ts +5 -5
- package/templates/edge-router/routing.ts +2 -2
- package/templates/project/AGENTS.md +5 -1
- package/templates/single-site/checks.ts +2 -2
- package/dist/chunks/index-47debt16.js +0 -956
- package/dist/chunks/index-v8zgr7wm.js +0 -128
- package/dist/chunks/new-ny89s7y7.js +0 -166
- package/dist/chunks/server-tjbb3rqc.js +0 -251
- package/dist/presets/index.js +0 -394
- package/dist/types/adapters/devices/catalog.d.ts +0 -86
- package/dist/types/adapters/devices/derive.d.ts +0 -7
- package/dist/types/adapters/devices/fortios/firewall.d.ts +0 -23
- package/dist/types/adapters/devices/fortios/index.d.ts +0 -58
- package/dist/types/adapters/devices/fortios/names.d.ts +0 -48
- package/dist/types/adapters/devices/fortios/plan.d.ts +0 -28
- package/dist/types/adapters/devices/fortios/render.d.ts +0 -38
- package/dist/types/adapters/devices/fortios/routing.d.ts +0 -32
- package/dist/types/adapters/devices/fortios/tree.d.ts +0 -33
- package/dist/types/adapters/devices/index.d.ts +0 -3
- package/dist/types/adapters/devices/junos/bgp.d.ts +0 -11
- package/dist/types/adapters/devices/junos/index.d.ts +0 -42
- package/dist/types/adapters/devices/junos/render.d.ts +0 -52
- package/dist/types/adapters/devices/lines.d.ts +0 -56
- package/dist/types/adapters/devices/raisecom-ros/index.d.ts +0 -28
- package/dist/types/adapters/devices/routeros/export.d.ts +0 -39
- package/dist/types/adapters/devices/routeros/index.d.ts +0 -30
- package/dist/types/adapters/devices/routeros/plan.d.ts +0 -4
- package/dist/types/adapters/devices/routeros/render.d.ts +0 -100
- package/dist/types/adapters/devices/types.d.ts +0 -40
- package/dist/types/adapters/devices/vrp/index.d.ts +0 -27
- package/dist/types/adapters/registries/index.d.ts +0 -3
- package/dist/types/adapters/registries/librenms.d.ts +0 -15
- package/dist/types/adapters/registries/peeringdb.d.ts +0 -16
- package/dist/types/adapters/registries/prometheus.d.ts +0 -16
- package/dist/types/core/across.d.ts +0 -4
- package/dist/types/core/addr.d.ts +0 -34
- package/dist/types/core/files.d.ts +0 -6
- package/dist/types/core/merge.d.ts +0 -4
- package/dist/types/core/time.d.ts +0 -2
- package/dist/types/core/validate.d.ts +0 -2
- package/dist/types/presets/index.d.ts +0 -183
- package/src/adapters/devices/catalog.ts +0 -41
- package/src/adapters/devices/derive.ts +0 -59
- package/src/adapters/devices/fortios/firewall.ts +0 -362
- package/src/adapters/devices/fortios/index.ts +0 -923
- package/src/adapters/devices/fortios/names.ts +0 -115
- package/src/adapters/devices/fortios/plan.ts +0 -888
- package/src/adapters/devices/fortios/render.ts +0 -768
- package/src/adapters/devices/fortios/routing.ts +0 -444
- package/src/adapters/devices/fortios/tree.ts +0 -121
- package/src/adapters/devices/index.ts +0 -9
- package/src/adapters/devices/junos/bgp.ts +0 -269
- package/src/adapters/devices/junos/index.ts +0 -862
- package/src/adapters/devices/junos/render.ts +0 -872
- package/src/adapters/devices/lines.ts +0 -212
- package/src/adapters/devices/raisecom-ros/TRAPS.md +0 -26
- package/src/adapters/devices/raisecom-ros/index.ts +0 -700
- package/src/adapters/devices/routeros/export.ts +0 -321
- package/src/adapters/devices/routeros/index.ts +0 -346
- package/src/adapters/devices/routeros/plan.ts +0 -398
- package/src/adapters/devices/routeros/render.ts +0 -1490
- package/src/adapters/devices/types.ts +0 -38
- package/src/adapters/devices/vrp/TRAPS.md +0 -26
- package/src/adapters/devices/vrp/index.ts +0 -865
- package/src/adapters/registries/index.ts +0 -19
- package/src/adapters/registries/librenms.ts +0 -92
- package/src/adapters/registries/peeringdb.ts +0 -169
- package/src/adapters/registries/prometheus.ts +0 -71
- package/src/cli/graph.ts +0 -89
- package/src/core/across.ts +0 -350
- package/src/core/addr.ts +0 -174
- package/src/core/addresses.ts +0 -316
- package/src/core/files.ts +0 -32
- package/src/core/graph.ts +0 -640
- package/src/core/merge.ts +0 -19
- package/src/core/time.ts +0 -15
- package/src/core/validate.ts +0 -348
- package/src/presets/index.ts +0 -579
- /package/dist/types/{adapters/devices → platforms}/fortios/models.d.ts +0 -0
- /package/dist/types/{adapters/devices → platforms}/junos/models.d.ts +0 -0
- /package/dist/types/{adapters/devices → platforms}/raisecom-ros/models.d.ts +0 -0
- /package/dist/types/{adapters/devices → platforms}/vrp/models.d.ts +0 -0
- /package/src/{adapters/devices → platforms}/fortios/models.ts +0 -0
- /package/src/{adapters/devices → platforms}/junos/models.ts +0 -0
- /package/src/{adapters/devices → platforms}/raisecom-ros/models.ts +0 -0
- /package/src/{adapters/devices → platforms}/vrp/models.ts +0 -0
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
// How the platform names what the config names: ports and interfaces, prefixes, and the routing table an interface sits in.
|
|
2
|
+
|
|
3
|
+
import { Address } from "../../core/address";
|
|
4
|
+
import type { Device, Family } from "../../schema";
|
|
5
|
+
import { Catalog } from "../catalog";
|
|
6
|
+
|
|
7
|
+
type Addressed = { addresses?: readonly (string | { address: string; peer?: string })[]; vrf?: string; lag?: string };
|
|
8
|
+
|
|
9
|
+
export class FortiOsNames {
|
|
10
|
+
/** The bridges a device has, in the config's order. A device with any runs in transparent mode, each bridge a forward domain numbered by its place. */
|
|
11
|
+
static bridgesOf(device: Device): { name: string; members: readonly string[] }[] {
|
|
12
|
+
return Object.entries(device.interfaces ?? {}).flatMap(([name, iface]) =>
|
|
13
|
+
iface.type === "bridge" ? [{ name, members: iface.members }] : []
|
|
14
|
+
);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/** Whether the device runs in transparent mode: it has a bridge. */
|
|
18
|
+
static isTransparent(device: Device): boolean {
|
|
19
|
+
return FortiOsNames.bridgesOf(device).length > 0;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* The management address of a device in transparent mode: the one IPv4 address on a port or an interface outside every bridge. The device answers on it, the platform's `manageip`, through that interface alone. Undefined when there is none, and the device is reached only through its console.
|
|
24
|
+
*/
|
|
25
|
+
static transparentManagement(device: Device): { name: string; address: string } | undefined {
|
|
26
|
+
if (!FortiOsNames.isTransparent(device)) return undefined;
|
|
27
|
+
|
|
28
|
+
const members = new Set(FortiOsNames.bridgesOf(device).flatMap((bridge) => bridge.members));
|
|
29
|
+
const holders = [...Object.entries(device.ports ?? {}), ...Object.entries(device.interfaces ?? {})] as [
|
|
30
|
+
string,
|
|
31
|
+
Addressed | undefined,
|
|
32
|
+
][];
|
|
33
|
+
|
|
34
|
+
for (const [name, settings] of holders) {
|
|
35
|
+
if (members.has(name)) continue;
|
|
36
|
+
const address = FortiOsNames.addressesOf(settings).find((each) => Address.family(Address.host(each)) === "ipv4");
|
|
37
|
+
if (address) return { name, address };
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/** The forward domain of a VLAN interface in a bridge, or undefined. */
|
|
44
|
+
static forwardDomainOf(device: Device, name: string): number | undefined {
|
|
45
|
+
const index = FortiOsNames.bridgesOf(device).findIndex((bridge) => bridge.members.includes(name));
|
|
46
|
+
return index < 0 ? undefined : index + 1;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/** The name the platform gives a port or an interface: a port by its spelling, any other interface by its key. */
|
|
50
|
+
static nameOf(device: Device, name: string): string {
|
|
51
|
+
if (device.interfaces && name in device.interfaces) return name;
|
|
52
|
+
return Catalog.spell(device.platform, device.model, name);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/** A port's or an interface's settings, by its key. */
|
|
56
|
+
static settingsOf(device: Device, name: string): Addressed | undefined {
|
|
57
|
+
return (device.interfaces?.[name] ?? device.ports?.[name as keyof typeof device.ports]) as Addressed | undefined;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/** Every address of a port or an interface. */
|
|
61
|
+
static addressesOf(settings: Addressed | undefined): string[] {
|
|
62
|
+
return (settings?.addresses ?? []).map((entry) => (typeof entry === "string" ? entry : entry.address));
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/** An address or prefix with its length, a bare address taken as a host. */
|
|
66
|
+
static withLength(value: string): string {
|
|
67
|
+
return value.includes("/") ? value : `${value}/${Address.family(value) === "ipv4" ? 32 : 128}`;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/** The family of an address or prefix. */
|
|
71
|
+
static familyOfPrefix(value: string): Family {
|
|
72
|
+
return Address.family(Address.split(FortiOsNames.withLength(value)).addr);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/** `192.0.2.0 255.255.255.0`, how the platform writes an IPv4 prefix. */
|
|
76
|
+
static subnet(prefix: string): string {
|
|
77
|
+
return `${Address.host(prefix)} ${Address.netmask(Address.split(prefix).len)}`;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/** The canonical form of a prefix: its network address and length, a bare address taken as a host. */
|
|
81
|
+
static network(prefix: string): string {
|
|
82
|
+
return Address.prefixOf(FortiOsNames.withLength(prefix));
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/** The number of a VRF on the platform: its place among the device's VRFs, the default table being 0. */
|
|
86
|
+
static vrfNumber(device: Device, vrf: string | undefined): number {
|
|
87
|
+
return vrf ? Object.keys(device.vrfs ?? {}).indexOf(vrf) + 1 : 0;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/** Every port and interface that routes, by key, with its settings. A LAG member routes through its LAG. */
|
|
91
|
+
private static routedHolders(device: Device): [string, Addressed][] {
|
|
92
|
+
const holders = [...Object.entries(device.ports ?? {}), ...Object.entries(device.interfaces ?? {})] as [
|
|
93
|
+
string,
|
|
94
|
+
Addressed | undefined,
|
|
95
|
+
][];
|
|
96
|
+
return holders.filter((holder): holder is [string, Addressed] => holder[1] !== undefined && !holder[1].lag);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/** The interface whose own network holds an address, the most specific when several do, in one routing table. */
|
|
100
|
+
static interfaceFor(device: Device, address: string, vrf?: string): string | undefined {
|
|
101
|
+
let best: { name: string; length: number } | undefined;
|
|
102
|
+
|
|
103
|
+
for (const [name, settings] of FortiOsNames.routedHolders(device)) {
|
|
104
|
+
if ((settings.vrf ?? undefined) !== vrf) continue;
|
|
105
|
+
|
|
106
|
+
for (const own of FortiOsNames.addressesOf(settings)) {
|
|
107
|
+
const length = Address.split(own).len;
|
|
108
|
+
const holds =
|
|
109
|
+
Address.family(Address.host(own)) === Address.family(address) && Address.contains(FortiOsNames.network(own), address);
|
|
110
|
+
if (holds && length > (best?.length ?? -1)) best = { name, length };
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
return best?.name;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/** The interface that holds an address as its own. */
|
|
118
|
+
static holderOf(device: Device, address: string): string | undefined {
|
|
119
|
+
return FortiOsNames.routedHolders(device).find(([, settings]) =>
|
|
120
|
+
FortiOsNames.addressesOf(settings).some((own) => Address.host(own) === address)
|
|
121
|
+
)?.[0];
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/** Every port and interface with an address, by key, where the device's services answer. */
|
|
125
|
+
static addressed(device: Device): string[] {
|
|
126
|
+
return FortiOsNames.routedHolders(device)
|
|
127
|
+
.filter(([, settings]) => FortiOsNames.addressesOf(settings).length > 0)
|
|
128
|
+
.map(([name]) => name);
|
|
129
|
+
}
|
|
130
|
+
}
|