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

WireguardPeer.ts overview

Wireguard peer schema definitions

Since v1.0.0


Exports Grouped by Category


Datatypes

WireguardPeer (class)

A wireguard peer configuration.

Example


    import * as Schema from "effect/Schema";
    import * as WireguardKey from "the-wireguard-effect/WireguardKey";

    import { WireguardPeer } from "the-wireguard-effect/WireguardPeer";

    const preshareKey = WireguardKey.generatePreshareKey();
    const { publicKey, privateKey: _privateKey } =
        WireguardKey.generateKeyPair();

    const peerSchemaInstantiation = Schema.decodeEffect(WireguardPeer)({
        PublicKey: publicKey,
        PresharedKey: preshareKey,
        Endpoint: "192.168.0.1:51820",
        AllowedIPs: new Set(["192.168.0.0/24"]),
        PersistentKeepalive: 20,
    });
    ```;

**Signature**

```ts
declare class WireguardPeer

Source

Since v1.0.0

Refinements

hasBidirectionalTraffic

Signature

declare const hasBidirectionalTraffic: (
  wireguardPeer: Schema.Schema.Type<(typeof WireguardPeer)["uapi"]>
) => Effect.Effect<boolean, never, never>

Source

Since v1.0.0

hasHandshakedRecently

Signature

declare const hasHandshakedRecently: (
  wireguardPeer: Schema.Schema.Type<(typeof WireguardPeer)["uapi"]>
) => Effect.Effect<boolean, never, never>

Source

Since v1.0.0

Schemas

WireguardUapiGetPeer

See

  • https://www.wireguard.com/xplatform/

Signature

declare const WireguardUapiGetPeer: Schema.decodeTo<
  Schema.Struct<{
    readonly PersistentKeepalive: Schema.OptionFromOptionalNullOr<
      Schema.decodeTo<Schema.Duration, Schema.Int, never, never>
    >
    readonly AllowedIPs: Schema.withDecodingDefault<
      Schema.$ReadonlySet<
        Schema.decodeTo<
          Schema.Union<readonly [typeof InternetSchemas.IPv4CidrBlock, typeof InternetSchemas.IPv6CidrBlock]>,
          Schema.TemplateLiteral<readonly [Schema.String, "/", Schema.Number]>,
          never,
          never
        >
      >,
      never
    >
    readonly Endpoint: Schema.optional<
      Schema.NullOr<
        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
            >
          ]
        >
      >
    >
    readonly PublicKey: Schema.brand<Schema.String, "WireguardKey">
    readonly PresharedKey: Schema.OptionFromOptionalNullOr<Schema.brand<Schema.String, "WireguardKey">>
    readonly rxBytes: Schema.NumberFromString
    readonly txBytes: Schema.NumberFromString
    readonly lastHandshake: Schema.compose<
      Schema.DateTimeUtcFromMillis,
      Schema.decodeTo<Schema.toType<Schema.NumberFromString>, Schema.NumberFromString, never, never>
    >
  }>,
  Schema.String,
  never,
  never
>

Source

Since v1.0.0

WireguardUapiSetPeer

See

  • https://www.wireguard.com/xplatform/

Signature

declare const WireguardUapiSetPeer: Schema.decodeTo<Schema.String, typeof WireguardPeer, never, never>

Source

Since v1.0.0

Transformations

WireguardIniPeer

A wireguard peer configuration encoded in INI format.

Example


    import * as Effect from "effect/Effect";
    import * as Function from "effect/Function";
    import * as Schema from "effect/Schema";
    import * as WireguardKey from "the-wireguard-effect/WireguardKey";
    import * as WireguardPeer from "the-wireguard-effect/WireguardPeer";

    const preshareKey = WireguardKey.generatePreshareKey();
    const { publicKey, privateKey: _privateKey } =
        WireguardKey.generateKeyPair();

    const peer = Schema.decodeEffect(WireguardPeer.WireguardPeer)({
        PublicKey: publicKey,
        PresharedKey: preshareKey,
        AllowedIPs: new Set(["192.168.0.0/24"]),
        Endpoint: "192.168.0.1:51820",
        PersistentKeepalive: 20,
    });

    const iniPeer = Function.pipe(
        peer,
        Effect.flatMap(Schema.encodeEffect(WireguardPeer.WireguardPeer)),
        Effect.flatMap(Schema.decodeEffect(WireguardPeer.WireguardIniPeer))
    );
    ```;

**See**

- `WireguardPeer`

**Signature**

```ts
declare const WireguardIniPeer: Schema.decodeTo<Schema.String, typeof WireguardPeer, never, never>

Source

Since v1.0.0