@highstate/library 0.9.15 → 0.9.16

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/package.json CHANGED
@@ -1,7 +1,10 @@
1
1
  {
2
2
  "name": "@highstate/library",
3
- "version": "0.9.15",
3
+ "version": "0.9.16",
4
4
  "type": "module",
5
+ "highstate": {
6
+ "type": "library"
7
+ },
5
8
  "files": [
6
9
  "dist",
7
10
  "src"
@@ -16,15 +19,15 @@
16
19
  "access": "public"
17
20
  },
18
21
  "scripts": {
19
- "build": "highstate build --library"
22
+ "build": "highstate build"
20
23
  },
21
24
  "dependencies": {
22
- "@highstate/contract": "^0.9.15",
25
+ "@highstate/contract": "^0.9.16",
23
26
  "@sinclair/typebox": "^0.34.11",
24
27
  "remeda": "^2.21.0"
25
28
  },
26
29
  "devDependencies": {
27
- "@highstate/cli": "^0.9.15"
30
+ "@highstate/cli": "^0.9.16"
28
31
  },
29
- "gitHead": "f61b9905d4cd50511b03331411f42595403ebc06"
32
+ "gitHead": "458d6f1f9f6d4aec0ba75a2b2c4c01408cb9c8df"
30
33
  }
@@ -0,0 +1,35 @@
1
+ import { registerKnownAbbreviations } from "@highstate/contract"
2
+
3
+ registerKnownAbbreviations([
4
+ "ID",
5
+ "URL",
6
+ "IP",
7
+ "IPs",
8
+ "IPv4",
9
+ "IPv6",
10
+ "DNS",
11
+ "FQDN",
12
+ "SSH",
13
+ "WireGuard",
14
+ "API",
15
+ "k8s",
16
+ "TLS",
17
+ "HTTP",
18
+ "HTTPS",
19
+ "TCP",
20
+ "UDP",
21
+ "CIDR",
22
+ "CPU",
23
+ "RAM",
24
+ "GPU",
25
+ "SSD",
26
+ "HDD",
27
+ "VM",
28
+ "CNI",
29
+ "CSI",
30
+ "MariaDB",
31
+ "PostgreSQL",
32
+ "MongoDB",
33
+ ])
34
+
35
+ export const noop = () => {}
package/src/apps/dns.ts CHANGED
@@ -102,8 +102,6 @@ export const recordSet = defineUnit({
102
102
  export const sharedArgs = {
103
103
  /**
104
104
  * The FQDN to register the cluster nodes with.
105
- *
106
- * @schema
107
105
  */
108
106
  fqdn: Type.Optional(Type.String()),
109
107
  }
@@ -9,7 +9,7 @@ import {
9
9
  persistentVolumeClaimEntity,
10
10
  serviceEntity,
11
11
  } from "../k8s"
12
- import { repoEntity } from "../restic"
12
+ import { repositoryEntity } from "../restic"
13
13
  import { providerEntity } from "../dns"
14
14
  import { l4EndpointEntity } from "../network"
15
15
 
@@ -58,7 +58,7 @@ const eagerExtraInputDefinitions = {
58
58
  entity: accessPointEntity,
59
59
  },
60
60
  resticRepo: {
61
- entity: repoEntity,
61
+ entity: repositoryEntity,
62
62
  required: false,
63
63
  },
64
64
  dnsProviders: {
package/src/common.ts CHANGED
@@ -90,8 +90,6 @@ export const serverPatch = defineUnit({
90
90
  * The entry may represent real node endpoint or virtual endpoint (like a load balancer).
91
91
  *
92
92
  * The same server may also be represented by multiple entries (e.g. a node with private and public IP).
93
- *
94
- * @schema
95
93
  */
96
94
  endpoints: Type.Default(Type.Array(Type.String()), []),
97
95
 
@@ -197,57 +195,6 @@ export const script = defineUnit({
197
195
  },
198
196
  })
199
197
 
200
- export const fileMetaEntity = defineEntity({
201
- type: "common.file-meta",
202
-
203
- schema: Type.Object({
204
- name: Type.String(),
205
- size: Type.Number(),
206
- mode: Type.Number(),
207
- isBinary: Type.Optional(Type.Boolean()),
208
- }),
209
-
210
- meta: {
211
- color: "#FF5722",
212
- description: "Metadata for a file.",
213
- },
214
- })
215
-
216
- export const fileContentEntity = defineEntity({
217
- type: "common.file-content",
218
-
219
- schema: Type.Union([
220
- Type.Object({
221
- type: Type.Literal("inline"),
222
- content: Type.String(),
223
- }),
224
- Type.Object({
225
- type: Type.Literal("remote"),
226
- url: Type.String(),
227
- }),
228
- ]),
229
-
230
- meta: {
231
- color: "#FF5722",
232
- description: "The content of a file.",
233
- },
234
- })
235
-
236
- export const fileEntity = defineEntity({
237
- type: "common.file",
238
-
239
- schema: Type.Object({
240
- meta: fileMetaEntity.schema,
241
- content: fileContentEntity.schema,
242
- }),
243
-
244
- meta: {
245
- color: "#FF5722",
246
- },
247
- })
248
-
249
198
  export type Server = Static<typeof serverEntity.schema>
250
199
 
251
- export type File = Static<typeof fileEntity.schema>
252
- export type FileMeta = Static<typeof fileMetaEntity.schema>
253
- export type FileContent = Static<typeof fileContentEntity.schema>
200
+ export * from "./files"
@@ -0,0 +1 @@
1
+ export * from "./ubuntu"
@@ -0,0 +1,32 @@
1
+ import { defineUnit, Type } from "@highstate/contract"
2
+ import { fileEntity } from "../files"
3
+
4
+ export const ubuntuVersionSchema = Type.StringEnum(["22.04", "24.04", "24.10", "25.04", "25.10"])
5
+ export const ubuntuArchitectureSchema = Type.StringEnum(["amd64", "arm64"])
6
+
7
+ export const ubuntu = defineUnit({
8
+ type: "distributions.ubuntu",
9
+
10
+ args: {
11
+ version: Type.Default(ubuntuVersionSchema, "24.04"),
12
+ architecture: Type.Default(ubuntuArchitectureSchema, "amd64"),
13
+ },
14
+
15
+ outputs: {
16
+ image: fileEntity,
17
+ cloudConfig: fileEntity,
18
+ },
19
+
20
+ meta: {
21
+ displayName: "Ubuntu",
22
+ description: "Ubuntu distribution with image and cloud-config.",
23
+ primaryIcon: "mdi:ubuntu",
24
+ primaryIconColor: "#E95420",
25
+ category: "Distributions",
26
+ },
27
+
28
+ source: {
29
+ package: "@highstate/distributions",
30
+ path: "ubuntu",
31
+ },
32
+ })
package/src/dns.ts CHANGED
@@ -25,8 +25,6 @@ export function createArgs<TPrefix extends string = "">(prefix?: TPrefix) {
25
25
  * Will be inserted at the beginning of the resulting endpoint list.
26
26
  *
27
27
  * Will throw an error if no matching provider is found.
28
- *
29
- * @schema
30
28
  */
31
29
  fqdn: Type.Optional(Type.String()),
32
30
 
@@ -46,8 +44,6 @@ export function createArgs<TPrefix extends string = "">(prefix?: TPrefix) {
46
44
  * - If any public endpoints exist, all public endpoints are selected;
47
45
  * - Otherwise, if any external endpoints exist, all external endpoints are selected;
48
46
  * - If neither exist, all internal endpoints are selected.
49
- *
50
- * @schema
51
47
  */
52
48
  endpointFilter: Type.Default(endpointFilterSchema, []),
53
49
 
@@ -58,8 +54,6 @@ export function createArgs<TPrefix extends string = "">(prefix?: TPrefix) {
58
54
  * - `replace`: Replace the existing endpoints with the FQDN. It will ensure that the only the FQDN is used.
59
55
  *
60
56
  * The default is `prepend`.
61
- *
62
- * @schema
63
57
  */
64
58
  patchMode: Type.Default(arrayPatchModeSchema, "prepend"),
65
59
  })
@@ -70,8 +64,6 @@ export const inputs = {
70
64
  * The DNS providers to use to create the DNS records.
71
65
  *
72
66
  * If multiple providers match the domain, all of them will be used and multiple DNS records will be created.
73
- *
74
- * @schema
75
67
  */
76
68
  dnsProviders: {
77
69
  entity: providerEntity,
package/src/files.ts ADDED
@@ -0,0 +1,146 @@
1
+ import type { Static } from "@sinclair/typebox"
2
+ import {
3
+ defineEntity,
4
+ defineUnit,
5
+ HighstateSignature,
6
+ Type,
7
+ fileContentSchema as baseFileContentSchema,
8
+ fileMetaSchema as baseFileMetaSchema,
9
+ unitArtifactSchema,
10
+ } from "@highstate/contract"
11
+ import { l7EndpointEntity } from "./network"
12
+
13
+ export const checksumAlgorithmSchema = Type.StringEnum([
14
+ "md5",
15
+ "sha1",
16
+ "sha256",
17
+ "sha384",
18
+ "sha512",
19
+ ])
20
+
21
+ export const checksumSchema = Type.Object({
22
+ algorithm: checksumAlgorithmSchema,
23
+ value: Type.String(),
24
+ })
25
+
26
+ export const fileContentSchema = Type.Union([
27
+ baseFileContentSchema,
28
+ Type.Object({
29
+ type: Type.Literal("local"),
30
+ path: Type.String(),
31
+ }),
32
+ Type.Object({
33
+ type: Type.Literal("remote"),
34
+ endpoint: l7EndpointEntity.schema,
35
+ checksum: Type.Optional(checksumSchema),
36
+ }),
37
+ ])
38
+
39
+ export const fileEntity = defineEntity({
40
+ type: "common.file",
41
+
42
+ schema: Type.Object({
43
+ meta: baseFileMetaSchema,
44
+ content: fileContentSchema,
45
+ }),
46
+
47
+ meta: {
48
+ color: "#FF5722",
49
+ },
50
+ })
51
+
52
+ export const folderMetaSchema = Type.Object({
53
+ name: Type.String(),
54
+ mode: Type.Optional(Type.Number()),
55
+ })
56
+
57
+ export const folderContentSchema = Type.Recursive(
58
+ TSelf => {
59
+ return Type.Union([
60
+ Type.Object({
61
+ type: Type.Literal("embedded"),
62
+ files: Type.Array(fileEntity.schema),
63
+ folders: Type.Array(
64
+ Type.Object({
65
+ meta: folderMetaSchema,
66
+ content: TSelf,
67
+ }),
68
+ ),
69
+ }),
70
+ Type.Object({
71
+ type: Type.Literal("artifact"),
72
+ [HighstateSignature.Artifact]: unitArtifactSchema,
73
+ }),
74
+ Type.Object({
75
+ type: Type.Literal("local"),
76
+ path: Type.String(),
77
+ }),
78
+ Type.Object({
79
+ type: Type.Literal("remote"),
80
+ endpoint: l7EndpointEntity.schema,
81
+ }),
82
+ ])
83
+ },
84
+ { $id: "common.folder.content" },
85
+ )
86
+
87
+ export const folderEntity = defineEntity({
88
+ type: "common.folder",
89
+
90
+ schema: Type.Object({
91
+ meta: folderMetaSchema,
92
+ content: folderContentSchema,
93
+ }),
94
+
95
+ meta: {
96
+ color: "#FF9800",
97
+ },
98
+ })
99
+
100
+ export const remoteFile = defineUnit({
101
+ type: "common.remote-file",
102
+
103
+ args: {
104
+ /**
105
+ * The URL of the remote file.
106
+ */
107
+ url: Type.Optional(Type.String()),
108
+ },
109
+
110
+ inputs: {
111
+ /**
112
+ * The L7 endpoint of the remote file.
113
+ */
114
+ endpoint: {
115
+ entity: l7EndpointEntity,
116
+ required: false,
117
+ },
118
+ },
119
+
120
+ outputs: {
121
+ file: fileEntity,
122
+ },
123
+
124
+ meta: {
125
+ displayName: "Remote File",
126
+ description: "References a file from a remote URL.",
127
+ primaryIcon: "mdi:file-download",
128
+ category: "Files",
129
+ },
130
+
131
+ source: {
132
+ package: "@highstate/common",
133
+ path: "units/remote-file",
134
+ },
135
+ })
136
+
137
+ export type File = Static<typeof fileEntity.schema>
138
+ export type FileMeta = Static<typeof baseFileMetaSchema>
139
+ export type FileContent = Static<typeof fileContentSchema>
140
+
141
+ export type Folder = Static<typeof folderEntity.schema>
142
+ export type FolderMeta = Static<typeof folderMetaSchema>
143
+ export type FolderContent = Static<typeof folderContentSchema>
144
+
145
+ export type Checksum = Static<typeof checksumSchema>
146
+ export type ChecksumAlgorithm = Static<typeof checksumAlgorithmSchema>
package/src/git.ts ADDED
@@ -0,0 +1,58 @@
1
+ import { defineUnit, Type } from "@highstate/contract"
2
+ import { l7EndpointEntity } from "./network"
3
+ import { folderEntity } from "./files"
4
+
5
+ export const remoteRepository = defineUnit({
6
+ type: "git.remote-repository",
7
+
8
+ args: {
9
+ /**
10
+ * The URL of the remote repository.
11
+ */
12
+ url: Type.Optional(Type.String()),
13
+
14
+ /**
15
+ * The ref of the remote repository to checkout.
16
+ *
17
+ * If not specified, the default branch will be used.
18
+ */
19
+ ref: Type.Optional(Type.String()),
20
+
21
+ /**
22
+ * Whether to include the .git directory in the packed artifact.
23
+ *
24
+ * Do not enable this unless you need the full git history.
25
+ */
26
+ includeGit: Type.Default(Type.Boolean(), false),
27
+ },
28
+
29
+ inputs: {
30
+ /**
31
+ * The L7 endpoint of the remote repository.
32
+ */
33
+ endpoint: {
34
+ entity: l7EndpointEntity,
35
+ required: false,
36
+ },
37
+ },
38
+
39
+ outputs: {
40
+ /**
41
+ * The folder containing the repository content.
42
+ */
43
+ folder: folderEntity,
44
+ },
45
+
46
+ meta: {
47
+ displayName: "Git Remote Repository",
48
+ description: "References a remote Git repository.",
49
+ primaryIcon: "simple-icons:git",
50
+ primaryIconColor: "#f1502f",
51
+ category: "Git",
52
+ },
53
+
54
+ source: {
55
+ package: "@highstate/git",
56
+ path: "remote-repository",
57
+ },
58
+ })
package/src/index.ts CHANGED
@@ -1,3 +1,6 @@
1
+ import { noop } from "./abbreviations"
2
+ noop()
3
+
1
4
  export * as common from "./common"
2
5
  export * as proxmox from "./proxmox"
3
6
  export * as ssh from "./ssh"
@@ -14,5 +17,7 @@ export * as timeweb from "./timeweb"
14
17
  export * as nixos from "./nixos"
15
18
  export * as sops from "./sops"
16
19
  export * as obfuscators from "./obfuscators"
20
+ export * as distributions from "./distributions"
17
21
  export * as network from "./network"
22
+ export * as git from "./git"
18
23
  export * from "./utils"
package/src/k3s.ts CHANGED
@@ -28,8 +28,6 @@ export const cluster = defineUnit({
28
28
  args: {
29
29
  /**
30
30
  * The components to disable in the K3S cluster.
31
- *
32
- * @schema
33
31
  */
34
32
  disabledComponents: Type.Default(Type.Array(componentSchema), []),
35
33
 
@@ -38,8 +36,6 @@ export const cluster = defineUnit({
38
36
  *
39
37
  * Setting this to "none" will disable default Flannel CNI, but will not disable network policy controller and kube-proxy.
40
38
  * If needed, you can disable them using `disabledComponents` argument.
41
- *
42
- * @schema
43
39
  */
44
40
  cni: Type.Default(cniSchema, "flannel"),
45
41
 
@@ -47,8 +43,6 @@ export const cluster = defineUnit({
47
43
  * The K3S configuration to pass to each server or agent in the cluster.
48
44
  *
49
45
  * See: https://docs.k3s.io/installation/configuration
50
- *
51
- * @schema
52
46
  */
53
47
  config: Type.Optional(Type.Record(Type.String(), Type.Any())),
54
48
 
@@ -56,8 +50,6 @@ export const cluster = defineUnit({
56
50
  * The configuration of the registries to use for the K3S cluster.
57
51
  *
58
52
  * See: https://docs.k3s.io/installation/private-registry
59
- *
60
- * @schema
61
53
  */
62
54
  registries: Type.Optional(Type.Record(Type.String(), Type.Any())),
63
55
  },
package/src/k8s.ts CHANGED
@@ -30,8 +30,6 @@ export const clusterQuirksSchema = Type.Object({
30
30
  * The IP and port of the kube-apiserver available from the cluster.
31
31
  *
32
32
  * Will be used to create fallback network policy in CNIs which does not support allowing access to the kube-apiserver.
33
- *
34
- * @schema
35
33
  */
36
34
  fallbackKubeApiAccess: Type.Optional(fallbackKubeApiAccessSchema),
37
35
 
@@ -41,8 +39,6 @@ export const clusterQuirksSchema = Type.Object({
41
39
  * If not provided, the default policy is `host` which assumes just mounting /dev/net/tun from the host.
42
40
  *
43
41
  * For some runtimes, like Talos's one, the /dev/net/tun device is not available in the host, so the plugin policy should be used.
44
- *
45
- * @schema
46
42
  */
47
43
  tunDevicePolicy: Type.Optional(tunDevicePolicySchema),
48
44
 
@@ -50,8 +46,6 @@ export const clusterQuirksSchema = Type.Object({
50
46
  * The service type to use for external services.
51
47
  *
52
48
  * If not provided, the default service type is `NodePort` since `LoadBalancer` may not be available.
53
- *
54
- * @schema
55
49
  */
56
50
  externalServiceType: Type.Optional(externalServiceTypeSchema),
57
51
  })
@@ -61,15 +55,11 @@ export const clusterInfoProperties = {
61
55
  * The unique identifier of the cluster.
62
56
  *
63
57
  * Should be defined as a UUID of the `kube-system` namespace which is always present in the cluster.
64
- *
65
- * @schema
66
58
  */
67
59
  id: Type.String(),
68
60
 
69
61
  /**
70
62
  * The name of the cluster.
71
- *
72
- * @schema
73
63
  */
74
64
  name: Type.String(),
75
65
 
@@ -79,8 +69,6 @@ export const clusterInfoProperties = {
79
69
  * Supported values are:
80
70
  * - `cilium`
81
71
  * - `other`
82
- *
83
- * @schema
84
72
  */
85
73
  cni: cniSchema,
86
74
 
@@ -90,8 +78,6 @@ export const clusterInfoProperties = {
90
78
  * The entry may represent real node endpoint or virtual endpoint (like a load balancer).
91
79
  *
92
80
  * The same node may also be represented by multiple entries (e.g. a node with private and public IP).
93
- *
94
- * @schema
95
81
  */
96
82
  endpoints: Type.Array(l3EndpointEntity.schema),
97
83
 
@@ -106,22 +92,16 @@ export const clusterInfoProperties = {
106
92
 
107
93
  /**
108
94
  * The external IPs of the cluster nodes allowed to be used for external access.
109
- *
110
- * @schema
111
95
  */
112
96
  externalIps: Type.Array(Type.String()),
113
97
 
114
98
  /**
115
99
  * The extra quirks of the cluster to improve compatibility.
116
- *
117
- * @schema
118
100
  */
119
101
  quirks: Type.Optional(clusterQuirksSchema),
120
102
 
121
103
  /**
122
104
  * The extra metadata to attach to the cluster.
123
- *
124
- * @schema
125
105
  */
126
106
  metadata: Type.Optional(Type.Record(Type.String(), Type.Unknown())),
127
107
  } as const
@@ -176,8 +156,6 @@ export const scheduleOnMastersPolicyArgs = {
176
156
  * - `always`: always schedule workloads on master nodes regardless of the number of workers;
177
157
  * - `when-no-workers`: schedule workloads on master nodes only if there are no workers (default);
178
158
  * - `never`: never schedule workloads on master nodes.
179
- *
180
- * @schema
181
159
  */
182
160
  scheduleOnMastersPolicy: Type.Default(scheduleOnMastersPolicySchema, "when-no-workers"),
183
161
  }
@@ -214,8 +192,6 @@ export const existingCluster = defineUnit({
214
192
  * The list of external IPs of the cluster nodes allowed to be used for external access.
215
193
  *
216
194
  * If not provided, will be automatically detected by querying the cluster nodes.
217
- *
218
- * @schema
219
195
  */
220
196
  externalIps: Type.Optional(Type.Array(Type.String())),
221
197
 
@@ -225,15 +201,11 @@ export const existingCluster = defineUnit({
225
201
  * - `always`: always use internal IPs as external IPs;
226
202
  * - `public`: use internal IPs as external IPs only if they are (theoretically) routable from the public internet **(default)**;
227
203
  * - `never`: never use internal IPs as external IPs.
228
- *
229
- * @schema
230
204
  */
231
205
  internalIpsPolicy: Type.Default(internalIpsPolicySchema, "public"),
232
206
 
233
207
  /**
234
208
  * The extra quirks of the cluster to improve compatibility.
235
- *
236
- * @schema
237
209
  */
238
210
  quirks: Type.Optional(clusterQuirksSchema),
239
211
  },
@@ -243,8 +215,6 @@ export const existingCluster = defineUnit({
243
215
  * The kubeconfig of the cluster to use for connecting to the cluster.
244
216
  *
245
217
  * Will be available for all components using `cluster` output of this unit.
246
- *
247
- * @schema
248
218
  */
249
219
  kubeconfig: Type.Record(Type.String(), Type.Any()),
250
220
  },
@@ -274,8 +244,6 @@ export const clusterPatch = defineUnit({
274
244
  * The entry may represent real node endpoint or virtual endpoint (like a load balancer).
275
245
  *
276
246
  * The same node may also be represented by multiple entries (e.g. a node with private and public IP).
277
- *
278
- * @schema
279
247
  */
280
248
  apiEndpoints: Type.Default(Type.Array(Type.String()), []),
281
249
 
@@ -293,8 +261,6 @@ export const clusterPatch = defineUnit({
293
261
  * The entry may represent real node endpoint or virtual endpoint (like a load balancer).
294
262
  *
295
263
  * The same node may also be represented by multiple entries (e.g. a node with private and public IP).
296
- *
297
- * @schema
298
264
  */
299
265
  endpoints: Type.Default(Type.Array(Type.String()), []),
300
266
 
@@ -471,8 +437,6 @@ export const dns01TlsIssuer = defineUnit({
471
437
  * The top-level domains to filter the DNS01 challenge for.
472
438
  *
473
439
  * If not provided, will use all domains passed to the DNS providers.
474
- *
475
- * @schema
476
440
  */
477
441
  domains: Type.Optional(Type.Array(Type.String())),
478
442
  },
@@ -630,6 +594,24 @@ export const cilium = defineUnit({
630
594
  },
631
595
  })
632
596
 
597
+ export const monitorWorkerResourceGroupSchema = Type.Object({
598
+ type: Type.StringEnum(["deployment", "statefulset", "pod", "service"]),
599
+ namespace: Type.String(),
600
+ names: Type.Optional(Type.Array(Type.String())),
601
+ })
602
+
603
+ export const monitorWorkerParamsSchema = Type.Object({
604
+ /**
605
+ * The ID of the secret containing the kubeconfig of the cluster.
606
+ */
607
+ kubeconfigSecretId: Type.String(),
608
+
609
+ /**
610
+ * The resources to monitor in the cluster.
611
+ */
612
+ resourceGroups: Type.Array(monitorWorkerResourceGroupSchema),
613
+ })
614
+
633
615
  export type CNI = Static<typeof cniSchema>
634
616
  export type Cluster = Static<typeof clusterEntity.schema>
635
617
 
@@ -651,3 +633,6 @@ export type StatefulSet = Static<typeof statefulSetEntity.schema>
651
633
 
652
634
  export type Interface = Static<typeof interfaceEntity.schema>
653
635
  export type InternalIpsPolicy = Static<typeof internalIpsPolicySchema>
636
+
637
+ export type MonitorWorkerParams = Static<typeof monitorWorkerParamsSchema>
638
+ export type MonitorWorkerResourceGroup = Static<typeof monitorWorkerResourceGroupSchema>
package/src/mullvad.ts CHANGED
@@ -10,8 +10,6 @@ export const peer = defineUnit({
10
10
 
11
11
  /**
12
12
  * Whether to include Mullvad DNS servers in the peer configuration.
13
- *
14
- * @schema
15
13
  */
16
14
  includeDns: Type.Default(Type.Boolean(), true),
17
15
  },
@@ -21,8 +19,6 @@ export const peer = defineUnit({
21
19
  * The network to use for the WireGuard peer.
22
20
  *
23
21
  * If not provided, the peer will use default network configuration.
24
- *
25
- * @schema
26
22
  */
27
23
  network: {
28
24
  entity: networkEntity,