Skip to main content Link Search Menu Expand Document (external link)

InternetSchemas.ts overview

Internet schemas for wireguard configuration.

Since v1.0.0


Exports Grouped by Category


Schemas

DurationFromSeconds

Transforms a number of seconds into a Duration.

Signature

declare const DurationFromSeconds: Schema.decodeTo<Schema.Duration, Schema.Int, never, never>

Source

Since v1.0.0

Endpoint

A wireguard endpoint, which is either an IPv4 or IPv6 endpoint.

Example

import * as Schema from "effect/Schema";

    import { Endpoint } from "the-wireguard-effect/InternetSchemas";

    const decodeEndpoint = Schema.decodeSync(Endpoint);
    const endpoint1 = decodeEndpoint("1.2.3.4:51820");
    const endpoint2 = decodeEndpoint("1.2.3.4:51820:41820");

    const endpoint3 = decodeEndpoint({
        ip: "1.2.3.4",
        port: 51820,
        family: "ipv4",
    });

    const endpoint4: Endpoint = decodeEndpoint({
        ip: "1.2.3.4",
        natPort: 51820,
        listenPort: 41820,
        family: "ipv4",
    });

    const endpoint5 = decodeEndpoint(
        "[2001:0db8:85a3:0000:0000:8a2e:0370:7334]:51820"
    );
    const endpoint6 = decodeEndpoint(
        "[2001:0db8:85a3:0000:0000:8a2e:0370:7334]:51820:41820"
    );

    const endpoint7 = decodeEndpoint({
        ip: "2001:0db8:85a3:0000:0000:8a2e:0370:7334",
        port: 51820,
        family: "ipv6",
    });

    const endpoint8: Endpoint = decodeEndpoint({
        ip: "2001:0db8:85a3:0000:0000:8a2e:0370:7334",
        natPort: 51820,
        listenPort: 41820,
        family: "ipv6",
    });
    ```;

Signature

declare const Endpoint: Schema.Union<
  readonly [
    Schema.decodeTo<
      Schema.Struct<{
        readonly address: Schema.decodeTo<
          Schema.Struct<{ readonly family: Schema.Literal<"ipv4">; readonly ip: Schema.brand<Schema.String, "IPv4"> }>,
          Schema.String,
          never,
          never
        >
        readonly natPort: Schema.brand<Schema.Int, "Port">
        readonly listenPort: Schema.brand<Schema.Int, "Port">
      }>,
      Schema.Union<
        readonly [
          Schema.Struct<{
            readonly ip: Schema.String
            readonly port: Schema.Number
            readonly family: Schema.Literal<"ipv4">
          }>,
          Schema.Struct<{
            readonly ip: Schema.String
            readonly natPort: Schema.Number
            readonly listenPort: Schema.Number
            readonly family: Schema.Literal<"ipv4">
          }>,
          Schema.TemplateLiteral<readonly [Schema.String, Schema.Literal<":">, Schema.Number]>,
          Schema.TemplateLiteral<
            readonly [Schema.String, Schema.Literal<":">, Schema.Number, Schema.Literal<":">, Schema.Number]
          >
        ]
      >,
      never,
      never
    >,
    Schema.decodeTo<
      Schema.Struct<{
        readonly address: Schema.decodeTo<
          Schema.Struct<{ readonly family: Schema.Literal<"ipv6">; readonly ip: Schema.brand<Schema.String, "IPv6"> }>,
          Schema.String,
          never,
          never
        >
        readonly natPort: Schema.brand<Schema.Int, "Port">
        readonly listenPort: Schema.brand<Schema.Int, "Port">
      }>,
      Schema.Union<
        readonly [
          Schema.Struct<{
            readonly ip: Schema.String
            readonly port: Schema.Number
            readonly family: Schema.Literal<"ipv6">
          }>,
          Schema.Struct<{
            readonly ip: Schema.String
            readonly natPort: Schema.Number
            readonly listenPort: Schema.Number
            readonly family: Schema.Literal<"ipv6">
          }>,
          Schema.TemplateLiteral<
            readonly [Schema.Literal<"[">, Schema.String, Schema.Literal<"]">, Schema.Literal<":">, Schema.Number]
          >,
          Schema.TemplateLiteral<
            readonly [
              Schema.Literal<"[">,
              Schema.String,
              Schema.Literal<"]">,
              Schema.Literal<":">,
              Schema.Number,
              Schema.Literal<":">,
              Schema.Number
            ]
          >
        ]
      >,
      never,
      never
    >,
    Schema.decodeTo<
      Schema.Struct<{
        readonly host: Schema.String
        readonly natPort: Schema.brand<Schema.Int, "Port">
        readonly listenPort: Schema.brand<Schema.Int, "Port">
      }>,
      Schema.Union<
        readonly [
          Schema.Struct<{ readonly host: Schema.String; readonly port: Schema.Number }>,
          Schema.Struct<{
            readonly host: Schema.String
            readonly natPort: Schema.Number
            readonly listenPort: Schema.Number
          }>,
          Schema.TemplateLiteral<readonly [Schema.String, Schema.Literal<":">, Schema.Number]>,
          Schema.TemplateLiteral<
            readonly [Schema.String, Schema.Literal<":">, Schema.Number, Schema.Literal<":">, Schema.Number]
          >
        ]
      >,
      never,
      never
    >
  ]
>

Source

Since v1.0.0

HostnameEndpoint

A hostname wireguard endpoint, which consists of a hostname followed by a
Nat port then an optional local port. If only one port is provided, it is assumed that the nat port and listen port are the same.

Signature

declare const HostnameEndpoint: Schema.decodeTo<
  Schema.Struct<{
    readonly host: Schema.String
    readonly natPort: Schema.brand<Schema.Int, "Port">
    readonly listenPort: Schema.brand<Schema.Int, "Port">
  }>,
  Schema.Union<
    readonly [
      Schema.Struct<{ readonly host: Schema.String; readonly port: Schema.Number }>,
      Schema.Struct<{
        readonly host: Schema.String
        readonly natPort: Schema.Number
        readonly listenPort: Schema.Number
      }>,
      Schema.TemplateLiteral<readonly [Schema.String, Schema.Literal<":">, Schema.Number]>,
      Schema.TemplateLiteral<
        readonly [Schema.String, Schema.Literal<":">, Schema.Number, Schema.Literal<":">, Schema.Number]
      >
    ]
  >,
  never,
  never
>

Source

Since v1.0.0

HostnameIPv4SetupData

A wireguard setup data, which consists of an endpoint followed by an address.

See

  • IPv4
  • HostnameEndpoint

Signature

declare const HostnameIPv4SetupData: Schema.Tuple<
  readonly [
    Schema.decodeTo<
      Schema.Struct<{
        readonly host: Schema.String
        readonly natPort: Schema.brand<Schema.Int, "Port">
        readonly listenPort: Schema.brand<Schema.Int, "Port">
      }>,
      Schema.Union<
        readonly [
          Schema.Struct<{ readonly host: Schema.String; readonly port: Schema.Number }>,
          Schema.Struct<{
            readonly host: Schema.String
            readonly natPort: Schema.Number
            readonly listenPort: Schema.Number
          }>,
          Schema.TemplateLiteral<readonly [Schema.String, Schema.Literal<":">, Schema.Number]>,
          Schema.TemplateLiteral<
            readonly [Schema.String, Schema.Literal<":">, Schema.Number, Schema.Literal<":">, Schema.Number]
          >
        ]
      >,
      never,
      never
    >,
    Schema.decodeTo<
      Schema.Struct<{ readonly family: Schema.Literal<"ipv4">; readonly ip: Schema.brand<Schema.String, "IPv4"> }>,
      Schema.String,
      never,
      never
    >
  ]
>

Source

Since v1.0.0

HostnameIPv6SetupData

A wireguard setup data, which consists of an endpoint followed by an address.

See

  • IPv6
  • HostnameEndpoint

Signature

declare const HostnameIPv6SetupData: Schema.Tuple<
  readonly [
    Schema.decodeTo<
      Schema.Struct<{
        readonly host: Schema.String
        readonly natPort: Schema.brand<Schema.Int, "Port">
        readonly listenPort: Schema.brand<Schema.Int, "Port">
      }>,
      Schema.Union<
        readonly [
          Schema.Struct<{ readonly host: Schema.String; readonly port: Schema.Number }>,
          Schema.Struct<{
            readonly host: Schema.String
            readonly natPort: Schema.Number
            readonly listenPort: Schema.Number
          }>,
          Schema.TemplateLiteral<readonly [Schema.String, Schema.Literal<":">, Schema.Number]>,
          Schema.TemplateLiteral<
            readonly [Schema.String, Schema.Literal<":">, Schema.Number, Schema.Literal<":">, Schema.Number]
          >
        ]
      >,
      never,
      never
    >,
    Schema.decodeTo<
      Schema.Struct<{ readonly family: Schema.Literal<"ipv6">; readonly ip: Schema.brand<Schema.String, "IPv6"> }>,
      Schema.String,
      never,
      never
    >
  ]
>

Source

Since v1.0.0

IPv4Endpoint

An IPv4 wireguard endpoint, which consists of an IPv4 address followed by a nat port then an optional local port. If only one port is provided, it is assumed that the nat port and listen port are the same.

Example


    import * as assert from "node:assert";

    import * as Schema from "effect/Schema";
    import { IPv4Endpoint } from "the-wireguard-effect/InternetSchemas";

    const decodeEndpoint = Schema.decodeSync(IPv4Endpoint);
    const endpoint1 = decodeEndpoint("1.2.3.4:51820");
    const endpoint2 = decodeEndpoint("1.2.3.4:51820:41820");

    const endpoint3 = decodeEndpoint({
        ip: "1.2.3.4",
        port: 51820,
        family: "ipv4",
    });

    const endpoint4 = decodeEndpoint({
        ip: "1.2.3.4",
        natPort: 51820,
        listenPort: 41820,
        family: "ipv4",
    });
    ```;

**Signature**

```ts
declare const IPv4Endpoint: Schema.decodeTo<Schema.Struct<{ readonly address: Schema.decodeTo<Schema.Struct<{ readonly family: Schema.Literal<"ipv4">; readonly ip: Schema.brand<Schema.String, "IPv4">; }>, Schema.String, never, never>; readonly natPort: Schema.brand<Schema.Int, "Port">; readonly listenPort: Schema.brand<Schema.Int, "Port">; }>, Schema.Union<readonly [Schema.Struct<{ readonly ip: Schema.String; readonly port: Schema.Number; readonly family: Schema.Literal<"ipv4">; }>, Schema.Struct<{ readonly ip: Schema.String; readonly natPort: Schema.Number; readonly listenPort: Schema.Number; readonly family: Schema.Literal<"ipv4">; }>, Schema.TemplateLiteral<readonly [Schema.String, Schema.Literal<":">, Schema.Number]>, Schema.TemplateLiteral<readonly [Schema.String, Schema.Literal<":">, Schema.Number, Schema.Literal<":">, Schema.Number]>]>, never, never>

Source

Since v1.0.0

IPv4SetupData

A wireguard setup data, which consists of an endpoint followed by an address.

Example

import * as Schema from "effect/Schema";
    import { SetupData } from "the-wireguard-effect/InternetSchemas";

    const decodeSetupData = Schema.decodeSync(SetupData);
    const setupData = decodeSetupData(["1.1.1.1:51280", "10.0.0.1"]);
    ```;

Signature

declare const IPv4SetupData: Schema.Tuple<
  readonly [
    Schema.decodeTo<
      Schema.Struct<{
        readonly address: Schema.decodeTo<
          Schema.Struct<{ readonly family: Schema.Literal<"ipv4">; readonly ip: Schema.brand<Schema.String, "IPv4"> }>,
          Schema.String,
          never,
          never
        >
        readonly natPort: Schema.brand<Schema.Int, "Port">
        readonly listenPort: Schema.brand<Schema.Int, "Port">
      }>,
      Schema.Union<
        readonly [
          Schema.Struct<{
            readonly ip: Schema.String
            readonly port: Schema.Number
            readonly family: Schema.Literal<"ipv4">
          }>,
          Schema.Struct<{
            readonly ip: Schema.String
            readonly natPort: Schema.Number
            readonly listenPort: Schema.Number
            readonly family: Schema.Literal<"ipv4">
          }>,
          Schema.TemplateLiteral<readonly [Schema.String, Schema.Literal<":">, Schema.Number]>,
          Schema.TemplateLiteral<
            readonly [Schema.String, Schema.Literal<":">, Schema.Number, Schema.Literal<":">, Schema.Number]
          >
        ]
      >,
      never,
      never
    >,
    Schema.decodeTo<
      Schema.Struct<{ readonly family: Schema.Literal<"ipv4">; readonly ip: Schema.brand<Schema.String, "IPv4"> }>,
      Schema.String,
      never,
      never
    >
  ]
>

Source

Since v1.0.0

IPv6Endpoint

An IPv6 wireguard endpoint, which consists of an IPv6 address in square brackets followed by a nat port then an optional local port. If only one port is provided, it is assumed that the nat port and listen port are the same.

Example


    import * as assert from "node:assert";

    import * as Schema from "effect/Schema";
    import { IPv6Endpoint } from "the-wireguard-effect/InternetSchemas";

    const decodeEndpoint = Schema.decodeSync(IPv6Endpoint);
    const endpoint1 = decodeEndpoint(
        "[2001:0db8:85a3:0000:0000:8a2e:0370:7334]:51820"
    );
    const endpoint2 = decodeEndpoint(
        "[2001:0db8:85a3:0000:0000:8a2e:0370:7334]:51820:41820"
    );

    const endpoint3 = decodeEndpoint({
        ip: "2001:0db8:85a3:0000:0000:8a2e:0370:7334",
        port: 51820,
        family: "ipv6",
    });

    const endpoint4 = decodeEndpoint({
        ip: "2001:0db8:85a3:0000:0000:8a2e:0370:7334",
        natPort: 51820,
        listenPort: 41820,
        family: "ipv6",
    });
    ```;

**Signature**

```ts
declare const IPv6Endpoint: Schema.decodeTo<Schema.Struct<{ readonly address: Schema.decodeTo<Schema.Struct<{ readonly family: Schema.Literal<"ipv6">; readonly ip: Schema.brand<Schema.String, "IPv6">; }>, Schema.String, never, never>; readonly natPort: Schema.brand<Schema.Int, "Port">; readonly listenPort: Schema.brand<Schema.Int, "Port">; }>, Schema.Union<readonly [Schema.Struct<{ readonly ip: Schema.String; readonly port: Schema.Number; readonly family: Schema.Literal<"ipv6">; }>, Schema.Struct<{ readonly ip: Schema.String; readonly natPort: Schema.Number; readonly listenPort: Schema.Number; readonly family: Schema.Literal<"ipv6">; }>, Schema.TemplateLiteral<readonly [Schema.Literal<"[">, Schema.String, Schema.Literal<"]">, Schema.Literal<":">, Schema.Number]>, Schema.TemplateLiteral<readonly [Schema.Literal<"[">, Schema.String, Schema.Literal<"]">, Schema.Literal<":">, Schema.Number, Schema.Literal<":">, Schema.Number]>]>, never, never>

Source

Since v1.0.0

IPv6SetupData

A wireguard setup data, which consists of an endpoint followed by an address.

Example

import * as Schema from "effect/Schema";
    import { SetupData } from "the-wireguard-effect/InternetSchemas";

    const decodeSetupData = Schema.decodeSync(SetupData);
    const setupData = decodeSetupData(["1.1.1.1:51280", "10.0.0.1"]);
    ```;

Signature

declare const IPv6SetupData: Schema.Tuple<
  readonly [
    Schema.decodeTo<
      Schema.Struct<{
        readonly address: Schema.decodeTo<
          Schema.Struct<{ readonly family: Schema.Literal<"ipv6">; readonly ip: Schema.brand<Schema.String, "IPv6"> }>,
          Schema.String,
          never,
          never
        >
        readonly natPort: Schema.brand<Schema.Int, "Port">
        readonly listenPort: Schema.brand<Schema.Int, "Port">
      }>,
      Schema.Union<
        readonly [
          Schema.Struct<{
            readonly ip: Schema.String
            readonly port: Schema.Number
            readonly family: Schema.Literal<"ipv6">
          }>,
          Schema.Struct<{
            readonly ip: Schema.String
            readonly natPort: Schema.Number
            readonly listenPort: Schema.Number
            readonly family: Schema.Literal<"ipv6">
          }>,
          Schema.TemplateLiteral<
            readonly [Schema.Literal<"[">, Schema.String, Schema.Literal<"]">, Schema.Literal<":">, Schema.Number]
          >,
          Schema.TemplateLiteral<
            readonly [
              Schema.Literal<"[">,
              Schema.String,
              Schema.Literal<"]">,
              Schema.Literal<":">,
              Schema.Number,
              Schema.Literal<":">,
              Schema.Number
            ]
          >
        ]
      >,
      never,
      never
    >,
    Schema.decodeTo<
      Schema.Struct<{ readonly family: Schema.Literal<"ipv6">; readonly ip: Schema.brand<Schema.String, "IPv6"> }>,
      Schema.String,
      never,
      never
    >
  ]
>

Source

Since v1.0.0

SetupData

A wireguard setup data, which consists of an endpoint followed by an address.

Example


    import * as assert from "node:assert";

    import * as Schema from "effect/Schema";
    import { SetupData } from "the-wireguard-effect/InternetSchemas";

    const decodeSetupData = Schema.decodeSync(SetupData);
    const setupData = decodeSetupData(["1.1.1.1:51280", "10.0.0.1"]);
    ```;

**See**

- `Address`
- `Endpoint`

**Signature**

```ts
declare const SetupData: Schema.Union<readonly [Schema.Tuple<readonly [Schema.decodeTo<Schema.Struct<{ readonly address: Schema.decodeTo<Schema.Struct<{ readonly family: Schema.Literal<"ipv4">; readonly ip: Schema.brand<Schema.String, "IPv4">; }>, Schema.String, never, never>; readonly natPort: Schema.brand<Schema.Int, "Port">; readonly listenPort: Schema.brand<Schema.Int, "Port">; }>, Schema.Union<readonly [Schema.Struct<{ readonly ip: Schema.String; readonly port: Schema.Number; readonly family: Schema.Literal<"ipv4">; }>, Schema.Struct<{ readonly ip: Schema.String; readonly natPort: Schema.Number; readonly listenPort: Schema.Number; readonly family: Schema.Literal<"ipv4">; }>, Schema.TemplateLiteral<readonly [Schema.String, Schema.Literal<":">, Schema.Number]>, Schema.TemplateLiteral<readonly [Schema.String, Schema.Literal<":">, Schema.Number, Schema.Literal<":">, Schema.Number]>]>, never, never>, Schema.decodeTo<Schema.Struct<{ readonly family: Schema.Literal<"ipv4">; readonly ip: Schema.brand<Schema.String, "IPv4">; }>, Schema.String, never, never>]>, Schema.Tuple<readonly [Schema.decodeTo<Schema.Struct<{ readonly address: Schema.decodeTo<Schema.Struct<{ readonly family: Schema.Literal<"ipv6">; readonly ip: Schema.brand<Schema.String, "IPv6">; }>, Schema.String, never, never>; readonly natPort: Schema.brand<Schema.Int, "Port">; readonly listenPort: Schema.brand<Schema.Int, "Port">; }>, Schema.Union<readonly [Schema.Struct<{ readonly ip: Schema.String; readonly port: Schema.Number; readonly family: Schema.Literal<"ipv6">; }>, Schema.Struct<{ readonly ip: Schema.String; readonly natPort: Schema.Number; readonly listenPort: Schema.Number; readonly family: Schema.Literal<"ipv6">; }>, Schema.TemplateLiteral<readonly [Schema.Literal<"[">, Schema.String, Schema.Literal<"]">, Schema.Literal<":">, Schema.Number]>, Schema.TemplateLiteral<readonly [Schema.Literal<"[">, Schema.String, Schema.Literal<"]">, Schema.Literal<":">, Schema.Number, Schema.Literal<":">, Schema.Number]>]>, never, never>, Schema.decodeTo<Schema.Struct<{ readonly family: Schema.Literal<"ipv6">; readonly ip: Schema.brand<Schema.String, "IPv6">; }>, Schema.String, never, never>]>, Schema.Tuple<readonly [Schema.decodeTo<Schema.Struct<{ readonly host: Schema.String; readonly natPort: Schema.brand<Schema.Int, "Port">; readonly listenPort: Schema.brand<Schema.Int, "Port">; }>, Schema.Union<readonly [Schema.Struct<{ readonly host: Schema.String; readonly port: Schema.Number; }>, Schema.Struct<{ readonly host: Schema.String; readonly natPort: Schema.Number; readonly listenPort: Schema.Number; }>, Schema.TemplateLiteral<readonly [Schema.String, Schema.Literal<":">, Schema.Number]>, Schema.TemplateLiteral<readonly [Schema.String, Schema.Literal<":">, Schema.Number, Schema.Literal<":">, Schema.Number]>]>, never, never>, Schema.decodeTo<Schema.Struct<{ readonly family: Schema.Literal<"ipv4">; readonly ip: Schema.brand<Schema.String, "IPv4">; }>, Schema.String, never, never>]>, Schema.Tuple<readonly [Schema.decodeTo<Schema.Struct<{ readonly host: Schema.String; readonly natPort: Schema.brand<Schema.Int, "Port">; readonly listenPort: Schema.brand<Schema.Int, "Port">; }>, Schema.Union<readonly [Schema.Struct<{ readonly host: Schema.String; readonly port: Schema.Number; }>, Schema.Struct<{ readonly host: Schema.String; readonly natPort: Schema.Number; readonly listenPort: Schema.Number; }>, Schema.TemplateLiteral<readonly [Schema.String, Schema.Literal<":">, Schema.Number]>, Schema.TemplateLiteral<readonly [Schema.String, Schema.Literal<":">, Schema.Number, Schema.Literal<":">, Schema.Number]>]>, never, never>, Schema.decodeTo<Schema.Struct<{ readonly family: Schema.Literal<"ipv6">; readonly ip: Schema.brand<Schema.String, "IPv6">; }>, Schema.String, never, never>]>]>

Source

Since v1.0.0