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


Api interface

$Address (type alias)

Signature

type $Address = Schema.Union<[$IPv4, $IPv6]>

Source

Since v1.0.0

$AddressBigint (type alias)

Signature

type $AddressBigint = Schema.Union<[$IPv4Bigint, $IPv6Bigint]>

Source

Since v1.0.0

$CidrBlock (type alias)

Signature

type $CidrBlock = Schema.Union<[$IPv4CidrBlock, $IPv6CidrBlock]>

Source

Since v1.0.0

$CidrBlockFromString (type alias)

Signature

type $CidrBlockFromString = Schema.Annotable<
  $CidrBlockFromString,
  CidrBlockBase<"ipv4"> | CidrBlockBase<"ipv6">,
  `${string}/${number}`,
  never
>

Source

Since v1.0.0

$Endpoint (type alias)

Signature

type $Endpoint = Schema.Union<[$IPv4Endpoint, $IPv6Endpoint, $HostnameEndpoint]>

Source

Since v1.0.0

$Family (type alias)

Signature

type $Family = Schema.Union<[$IPv4Family, $IPv6Family]>

Source

Since v1.0.0

$HostnameEndpoint (type alias)

Signature

type $HostnameEndpoint = Schema.Annotable<
  $HostnameEndpoint,
  { readonly host: string; readonly natPort: PortBrand; readonly listenPort: PortBrand },
  | `${string}:${number}`
  | `${string}:${number}:${number}`
  | { readonly host: string; readonly port: number }
  | { readonly host: string; readonly natPort: number; readonly listenPort: number },
  never
>

Source

Since v1.0.0

$HostnameIPv4SetupData (type alias)

Signature

type $HostnameIPv4SetupData = Schema.Tuple<[$HostnameEndpoint, $IPv4]>

Source

Since v1.0.0

$HostnameIPv6SetupData (type alias)

Signature

type $HostnameIPv6SetupData = Schema.Tuple<[$HostnameEndpoint, $IPv6]>

Source

Since v1.0.0

$IPv4 (type alias)

Signature

type $IPv4 = Schema.transform<
  Schema.filter<typeof Schema.String>,
  Schema.Struct<{
    family: $IPv4Family
    ip: Schema.BrandSchema<IPv4Brand, Brand.Brand.Unbranded<IPv4Brand>, never>
  }>
>

Source

Since v1.0.0

$IPv4Bigint (type alias)

Signature

type $IPv4Bigint = Schema.transformOrFail<
  $IPv4,
  Schema.Struct<{
    family: $IPv4Family
    value: Schema.BrandSchema<IPv4BigintBrand, Brand.Brand.Unbranded<IPv4BigintBrand>, never>
  }>,
  never
>

Source

Since v1.0.0

$IPv4CidrBlock (type alias)

Signature

type $IPv4CidrBlock = Schema.Annotable<
  $IPv4CidrBlock,
  CidrBlockBase<"ipv4">,
  {
    readonly address: string
    readonly mask: number
  },
  never
>

Source

Since v1.0.0

$IPv4CidrBlockFromString (type alias)

Signature

type $IPv4CidrBlockFromString = Schema.Annotable<
  $IPv4CidrBlockFromString,
  CidrBlockBase<"ipv4">,
  `${string}/${number}`,
  never
>

Source

Since v1.0.0

$IPv4CidrMask (type alias)

Signature

type $IPv4CidrMask = Schema.Annotable<$IPv4CidrMask, IPv4CidrMaskBrand, Brand.Brand.Unbranded<IPv4CidrMaskBrand>, never>

Source

Since v1.0.0

$IPv4Endpoint (type alias)

Signature

type $IPv4Endpoint = Schema.Annotable<
  $IPv4Endpoint,
  { readonly address: IPv4; readonly natPort: PortBrand; readonly listenPort: PortBrand },
  | `${string}:${number}`
  | `${string}:${number}:${number}`
  | { readonly ip: string; readonly port: number; readonly family: IPv4Family }
  | { readonly ip: string; readonly natPort: number; readonly listenPort: number; readonly family: IPv4Family },
  never
>

Source

Since v1.0.0

$IPv4Family (type alias)

Signature

type $IPv4Family = Schema.Literal<["ipv4"]>

Source

Since v1.0.0

$IPv4SetupData (type alias)

Signature

type $IPv4SetupData = Schema.Tuple<[$IPv4Endpoint, $IPv4]>

Source

Since v1.0.0

$IPv6 (type alias)

Signature

type $IPv6 = Schema.transform<
  Schema.filter<typeof Schema.String>,
  Schema.Struct<{
    family: $IPv6Family
    ip: Schema.BrandSchema<IPv6Brand, Brand.Brand.Unbranded<IPv6Brand>, never>
  }>
>

Source

Since v1.0.0

$IPv6Bigint (type alias)

Signature

type $IPv6Bigint = Schema.transformOrFail<
  $IPv6,
  Schema.Struct<{
    family: $IPv6Family
    value: Schema.BrandSchema<IPv6BigintBrand, Brand.Brand.Unbranded<IPv6BigintBrand>, never>
  }>,
  never
>

Source

Since v1.0.0

$IPv6CidrBlock (type alias)

Signature

type $IPv6CidrBlock = Schema.transformOrFail<
  Schema.Struct<{
    address: $IPv6
    mask: $IPv6CidrMask
  }>,
  typeof CidrBlockBase<"ipv6">,
  never
>

Source

Since v1.0.0

$IPv6CidrBlockFromString (type alias)

Signature

type $IPv6CidrBlockFromString = Schema.Annotable<
  $IPv6CidrBlockFromString,
  CidrBlockBase<"ipv6">,
  `${string}/${number}`,
  never
>

Source

Since v1.0.0

$IPv6CidrMask (type alias)

Signature

type $IPv6CidrMask = Schema.Annotable<$IPv6CidrMask, IPv6CidrMaskBrand, Brand.Brand.Unbranded<IPv6CidrMaskBrand>, never>

Source

Since v1.0.0

$IPv6Endpoint (type alias)

Signature

type $IPv6Endpoint = Schema.Annotable<
  $IPv6Endpoint,
  { readonly address: IPv6; readonly natPort: PortBrand; readonly listenPort: PortBrand },
  | `[${string}]:${number}`
  | `[${string}]:${number}:${number}`
  | { readonly ip: string; readonly port: number; family: IPv6Family }
  | { readonly ip: string; readonly natPort: number; readonly listenPort: number; family: IPv6Family },
  never
>

Source

Since v1.0.0

$IPv6Family (type alias)

Signature

type $IPv6Family = Schema.Literal<["ipv6"]>

Source

Since v1.0.0

$IPv6SetupData (type alias)

Signature

type $IPv6SetupData = Schema.Tuple<[$IPv6Endpoint, $IPv6]>

Source

Since v1.0.0

$Port (type alias)

Signature

type $Port = Schema.Annotable<$Port, PortBrand, Brand.Brand.Unbranded<PortBrand>, never>

Source

Since v1.0.0

$SetupData (type alias)

Signature

type $SetupData = Schema.Union<[$IPv4SetupData, $IPv6SetupData, $HostnameIPv4SetupData, $HostnameIPv6SetupData]>

Source

Since v1.0.0

CidrBlockBase (class)

Signature

declare class CidrBlockBase<_Family>

Source

Since v1.0.0

networkAddress (method)

The first address in the range given by this address’ subnet, often referred to as the Network Address.

Signature

declare const networkAddress: () => _Family extends IPv4Family
  ? Effect.Effect<IPv4, ParseResult.ParseError, never>
  : _Family extends IPv6Family
    ? Effect.Effect<IPv6, ParseResult.ParseError, never>
    : never

Source

Since v1.0.0

broadcastAddress (method)

The last address in the range given by this address’ subnet, often referred to as the Broadcast Address.

Signature

declare const broadcastAddress: () => _Family extends IPv4Family
  ? Effect.Effect<IPv4, ParseResult.ParseError, never>
  : _Family extends IPv6Family
    ? Effect.Effect<IPv6, ParseResult.ParseError, never>
    : never

Source

Since v1.0.0

family (property)

Signature

readonly family: "ipv4" | "ipv6"

Source

Since v1.0.0

Branded constructors

IPv4BigintBrand

Signature

declare const IPv4BigintBrand: Brand.Brand.Constructor<IPv4BigintBrand>

Source

Since v1.0.0

IPv4Brand

Signature

declare const IPv4Brand: Brand.Brand.Constructor<IPv4Brand>

Source

Since v1.0.0

IPv4CidrMaskBrand

Signature

declare const IPv4CidrMaskBrand: Brand.Brand.Constructor<IPv4CidrMaskBrand>

Source

Since v1.0.0

IPv6BigintBrand

Signature

declare const IPv6BigintBrand: Brand.Brand.Constructor<IPv6BigintBrand>

Source

Since v1.0.0

IPv6Brand

Signature

declare const IPv6Brand: Brand.Brand.Constructor<IPv6Brand>

Source

Since v1.0.0

IPv6CidrMaskBrand

Signature

declare const IPv6CidrMaskBrand: Brand.Brand.Constructor<IPv6CidrMaskBrand>

Source

Since v1.0.0

PortBrand

Signature

declare const PortBrand: Brand.Brand.Constructor<PortBrand>

Source

Since v1.0.0

Branded types

IPv4BigintBrand (type alias)

Signature

type IPv4BigintBrand = bigint & Brand.Brand<"IPv4Bigint">

Source

Since v1.0.0

IPv4Brand (type alias)

Signature

type IPv4Brand = string & Brand.Brand<"IPv4">

Source

Since v1.0.0

IPv4CidrMaskBrand (type alias)

Signature

type IPv4CidrMaskBrand = number & Brand.Brand<"IPv4CidrMask">

Source

Since v1.0.0

IPv6BigintBrand (type alias)

Signature

type IPv6BigintBrand = bigint & Brand.Brand<"IPv6Bigint">

Source

Since v1.0.0

IPv6Brand (type alias)

Signature

type IPv6Brand = string & Brand.Brand<"IPv6">

Source

Since v1.0.0

IPv6CidrMaskBrand (type alias)

Signature

type IPv6CidrMaskBrand = number & Brand.Brand<"IPv6CidrMask">

Source

Since v1.0.0

PortBrand (type alias)

Signature

type PortBrand = number & Brand.Brand<"Port">

Source

Since v1.0.0

Decoded types

Address (type alias)

Signature

type Address = Schema.Schema.Type<$Address>

Source

Since v1.0.0

AddressBigint (type alias)

Signature

type AddressBigint = Schema.Schema.Type<$AddressBigint>

Source

Since v1.0.0

CidrBlockFromString (type alias)

Signature

type CidrBlockFromString = Schema.Schema.Type<$CidrBlockFromString>

Source

Since v1.0.0

Endpoint (type alias)

Signature

type Endpoint = Schema.Schema.Type<$Endpoint>

Source

Since v1.0.0

Family (type alias)

Signature

type Family = Schema.Schema.Type<$Family>

Source

Since v1.0.0

HostnameEndpoint (type alias)

Signature

type HostnameEndpoint = Schema.Schema.Type<$HostnameEndpoint>

Source

Since v1.0.0

HostnameIPv4SetupData (type alias)

Signature

type HostnameIPv4SetupData = Schema.Schema.Type<$HostnameIPv4SetupData>

Source

Since v1.0.0

HostnameIPv6SetupData (type alias)

Signature

type HostnameIPv6SetupData = Schema.Schema.Type<$HostnameIPv6SetupData>

Source

Since v1.0.0

IPv4 (type alias)

Signature

type IPv4 = Schema.Schema.Type<$IPv4>

Source

Since v1.0.0

IPv4Bigint (type alias)

Signature

type IPv4Bigint = Schema.Schema.Type<$IPv4Bigint>

Source

Since v1.0.0

IPv4CidrBlock (type alias)

Signature

type IPv4CidrBlock = CidrBlockBase<"ipv4">

Source

Since v1.0.0

IPv4CidrBlockFromString (type alias)

Signature

type IPv4CidrBlockFromString = Schema.Schema.Type<$IPv4CidrBlockFromString>

Source

Since v1.0.0

IPv4CidrMask (type alias)

Signature

type IPv4CidrMask = Schema.Schema.Type<$IPv4CidrMask>

Source

Since v1.0.0

IPv4Endpoint (type alias)

Signature

type IPv4Endpoint = Schema.Schema.Type<$IPv4Endpoint>

Source

Since v1.0.0

IPv4Family (type alias)

Signature

type IPv4Family = Schema.Schema.Type<$IPv4Family>

Source

Since v1.0.0

IPv4SetupData (type alias)

Signature

type IPv4SetupData = Schema.Schema.Type<$IPv4SetupData>

Source

Since v1.0.0

IPv6 (type alias)

Signature

type IPv6 = Schema.Schema.Type<$IPv6>

Source

Since v1.0.0

IPv6Bigint (type alias)

Signature

type IPv6Bigint = Schema.Schema.Type<$IPv6Bigint>

Source

Since v1.0.0

IPv6CidrBlock (type alias)

Signature

type IPv6CidrBlock = CidrBlockBase<"ipv6">

Source

Since v1.0.0

IPv6CidrBlockFromString (type alias)

Signature

type IPv6CidrBlockFromString = Schema.Schema.Type<$IPv6CidrBlockFromString>

Source

Since v1.0.0

IPv6CidrMask (type alias)

Signature

type IPv6CidrMask = Schema.Schema.Type<$IPv6CidrMask>

Source

Since v1.0.0

IPv6Endpoint (type alias)

Signature

type IPv6Endpoint = Schema.Schema.Type<$IPv6Endpoint>

Source

Since v1.0.0

IPv6Family (type alias)

Signature

type IPv6Family = Schema.Schema.Type<$IPv6Family>

Source

Since v1.0.0

IPv6SetupData (type alias)

Signature

type IPv6SetupData = Schema.Schema.Type<$IPv6SetupData>

Source

Since v1.0.0

SetupData (type alias)

Signature

type SetupData = Schema.Schema.Type<$SetupData>

Source

Since v1.0.0

Encoded types

AddressBigintEncoded (type alias)

Signature

type AddressBigintEncoded = Schema.Schema.Encoded<$AddressBigint>

Source

Since v1.0.0

AddressEncoded (type alias)

Signature

type AddressEncoded = Schema.Schema.Encoded<$Address>

Source

Since v1.0.0

CidrBlockFromStringEncoded (type alias)

Signature

type CidrBlockFromStringEncoded = Schema.Schema.Encoded<$CidrBlockFromString>

Source

Since v1.0.0

EndpointEncoded (type alias)

Signature

type EndpointEncoded = Schema.Schema.Encoded<$Endpoint>

Source

Since v1.0.0

HostnameEndpointEncoded (type alias)

Signature

type HostnameEndpointEncoded = Schema.Schema.Encoded<$HostnameEndpoint>

Source

Since v1.0.0

HostnameIPv4SetupDataEncoded (type alias)

Signature

type HostnameIPv4SetupDataEncoded = Schema.Schema.Encoded<$HostnameIPv4SetupData>

Source

Since v1.0.0

HostnameIPv6SetupDataEncoded (type alias)

Signature

type HostnameIPv6SetupDataEncoded = Schema.Schema.Encoded<$HostnameIPv6SetupData>

Source

Since v1.0.0

IPv4BigintEncoded (type alias)

Signature

type IPv4BigintEncoded = Schema.Schema.Encoded<$IPv4Bigint>

Source

Since v1.0.0

IPv4CidrBlockEncoded (type alias)

Signature

type IPv4CidrBlockEncoded = Schema.Schema.Encoded<$IPv4CidrBlock>

Source

Since v1.0.0

IPv4CidrBlockFromStringEncoded (type alias)

Signature

type IPv4CidrBlockFromStringEncoded = Schema.Schema.Encoded<$IPv4CidrBlockFromString>

Source

Since v1.0.0

IPv4CidrMaskEncoded (type alias)

Signature

type IPv4CidrMaskEncoded = Schema.Schema.Encoded<$IPv4CidrMask>

Source

Since v1.0.0

IPv4Encoded (type alias)

Signature

type IPv4Encoded = Schema.Schema.Encoded<$IPv4>

Source

Since v1.0.0

IPv4EndpointEncoded (type alias)

Signature

type IPv4EndpointEncoded = Schema.Schema.Encoded<$IPv4Endpoint>

Source

Since v1.0.0

IPv4SetupDataEncoded (type alias)

Signature

type IPv4SetupDataEncoded = Schema.Schema.Encoded<$IPv4SetupData>

Source

Since v1.0.0

IPv6BigintEncoded (type alias)

Signature

type IPv6BigintEncoded = Schema.Schema.Encoded<$IPv6Bigint>

Source

Since v1.0.0

IPv6CidrBlockEncoded (type alias)

Signature

type IPv6CidrBlockEncoded = Schema.Schema.Encoded<$IPv6CidrBlock>

Source

Since v1.0.0

IPv6CidrBlockFromStringEncoded (type alias)

Signature

type IPv6CidrBlockFromStringEncoded = Schema.Schema.Encoded<$IPv6CidrBlockFromString>

Source

Since v1.0.0

IPv6CidrMaskEncoded (type alias)

Signature

type IPv6CidrMaskEncoded = Schema.Schema.Encoded<$IPv6CidrMask>

Source

Since v1.0.0

IPv6Encoded (type alias)

Signature

type IPv6Encoded = Schema.Schema.Encoded<$IPv6>

Source

Since v1.0.0

IPv6EndpointEncoded (type alias)

Signature

type IPv6EndpointEncoded = Schema.Schema.Encoded<$IPv6Endpoint>

Source

Since v1.0.0

IPv6SetupDataEncoded (type alias)

Signature

type IPv6SetupDataEncoded = Schema.Schema.Encoded<$IPv6SetupData>

Source

Since v1.0.0

SetupDataEncoded (type alias)

Signature

type SetupDataEncoded = Schema.Schema.Encoded<$SetupData>

Source

Since v1.0.0

Schemas

Address

An IP address, which is either an IPv4 or IPv6 address.

Example

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

const decodeAddress = Schema.decodeSync(Address)

assert.throws(() => decodeAddress("1.1.b.1"))
assert.throws(() => decodeAddress("2001:0db8:85a3:0000:0000:8a2e:0370:7334:"))

assert.doesNotThrow(() => decodeAddress("1.1.1.2"))
assert.doesNotThrow(() => decodeAddress("2001:0db8:85a3:0000:0000:8a2e:0370:7334"))

See

  • IPv4
  • IPv6

Signature

declare const Address: $Address

Source

Since v1.0.0

AddressBigint

An IP address as a bigint.

Signature

declare const AddressBigint: $AddressBigint

Source

Since v1.0.0

CidrBlock

Signature

declare const CidrBlock: $CidrBlock

Source

Since v1.0.0

CidrBlockFromString

A schema that transforms a string into a CidrBlock.

Signature

declare const CidrBlockFromString: $CidrBlockFromString

Source

Since v1.0.0

DurationFromSeconds (class)

Transforms a number of seconds into a Duration.

Example

import * as Duration from "effect/Duration"
import * as Schema from "effect/Schema"
import { DurationFromSeconds } from "the-wireguard-effect/InternetSchemas"

const decodeDuration = Schema.decodeSync(DurationFromSeconds)
const duration = decodeDuration(11)
assert.strictEqual(Duration.toSeconds(duration), 11)

Signature

declare class DurationFromSeconds

Source

Since v1.0.0

DurationFromSecondsString (class)

Transforms a string of seconds into a Duration.

Example

import * as Duration from "effect/Duration"
import * as Schema from "effect/Schema"
import { DurationFromSecondsString } from "the-wireguard-effect/InternetSchemas"

const decodeDurationString = Schema.decodeSync(DurationFromSecondsString)
const duration = decodeDurationString("12")
assert.strictEqual(Duration.toSeconds(duration), 12)

Signature

declare class DurationFromSecondsString

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"
})

See

  • IPv4Endpoint
  • IPv6Endpoint
  • HostnameEndpoint

Signature

declare const Endpoint: $Endpoint

Source

Since v1.0.0

Family

See

  • IPv4Family
  • IPv6Family

Signature

declare const Family: $Family

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: $HostnameEndpoint

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: $HostnameIPv4SetupData

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: $HostnameIPv6SetupData

Source

Since v1.0.0

IPv4

An IPv4 address.

Example

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

const decodeIPv4 = Schema.decodeSync(IPv4)
assert.deepEqual(decodeIPv4("1.1.1.1"), {
  family: "ipv4",
  ip: "1.1.1.1"
})

assert.throws(() => decodeIPv4("1.1.a.1"))
assert.doesNotThrow(() => decodeIPv4("1.1.1.2"))

Signature

declare const IPv4: $IPv4

Source

Since v1.0.0

IPv4Bigint

An IPv4 as a bigint.

Example

import * as Schema from "effect/Schema"
import { IPv4Bigint, IPv4BigintBrand } from "the-wireguard-effect/InternetSchemas"

const x: IPv4BigintBrand = IPv4BigintBrand(748392749382n)
assert.strictEqual(x, 748392749382n)

const decodeIPv4Bigint = Schema.decodeSync(IPv4Bigint)
const encodeIPv4Bigint = Schema.encodeSync(IPv4Bigint)

assert.deepEqual(decodeIPv4Bigint("1.1.1.1"), {
  family: "ipv4",
  value: 16843009n
})
assert.deepEqual(decodeIPv4Bigint("254.254.254.254"), {
  family: "ipv4",
  value: 4278124286n
})

assert.strictEqual(
  encodeIPv4Bigint({
    value: IPv4BigintBrand(16843009n),
    family: "ipv4"
  }),
  "1.1.1.1"
)
assert.strictEqual(
  encodeIPv4Bigint({
    value: IPv4BigintBrand(4278124286n),
    family: "ipv4"
  }),
  "254.254.254.254"
)

Signature

declare const IPv4Bigint: $IPv4Bigint

Source

Since v1.0.0

IPv4CidrBlock

Signature

declare const IPv4CidrBlock: $IPv4CidrBlock

Source

Since v1.0.0

IPv4CidrBlockFromString

A schema that transforms a string into a CidrBlock.

Signature

declare const IPv4CidrBlockFromString: $IPv4CidrBlockFromString

Source

Since v1.0.0

IPv4CidrMask

An ipv4 cidr mask, which is a number between 0 and 32.

Example

import * as Schema from "effect/Schema"
import { IPv4CidrMask, IPv4CidrMaskBrand } from "the-wireguard-effect/InternetSchemas"

const mask: IPv4CidrMaskBrand = IPv4CidrMaskBrand(24)
assert.strictEqual(mask, 24)

const decodeMask = Schema.decodeSync(IPv4CidrMask)
assert.strictEqual(decodeMask(24), 24)

assert.throws(() => decodeMask(33))
assert.doesNotThrow(() => decodeMask(0))
assert.doesNotThrow(() => decodeMask(32))

Signature

declare const IPv4CidrMask: $IPv4CidrMask

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 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

declare const IPv4Endpoint: $IPv4Endpoint

Source

Since v1.0.0

IPv4Family

Signature

declare const IPv4Family: $IPv4Family

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"])

See

  • IPv4
  • IPv4EndpointSchema

Signature

declare const IPv4SetupData: $IPv4SetupData

Source

Since v1.0.0

IPv6

An IPv6 address.

Example

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

const decodeIPv6 = Schema.decodeSync(IPv6)
assert.deepEqual(decodeIPv6("2001:0db8:85a3:0000:0000:8a2e:0370:7334"), {
  family: "ipv6",
  ip: "2001:0db8:85a3:0000:0000:8a2e:0370:7334"
})

assert.throws(() => decodeIPv6("2001:0db8:85a3:0000:0000:8a2e:0370:7334:"))
assert.throws(() => decodeIPv6("2001::85a3::0000::0370:7334"))
assert.doesNotThrow(() => decodeIPv6("2001:0db8:85a3:0000:0000:8a2e:0370:7334"))

Signature

declare const IPv6: $IPv6

Source

Since v1.0.0

IPv6Bigint

An IPv6 as a bigint.

Example

import * as Schema from "effect/Schema"
import { IPv6Bigint, IPv6BigintBrand } from "the-wireguard-effect/InternetSchemas"

const y: IPv6BigintBrand = IPv6BigintBrand(748392749382n)
assert.strictEqual(y, 748392749382n)

const decodeIPv6Bigint = Schema.decodeSync(IPv6Bigint)
const encodeIPv6Bigint = Schema.encodeSync(IPv6Bigint)

assert.deepEqual(decodeIPv6Bigint("4cbd:ff70:e62b:a048:686c:4e7e:a68a:c377"), {
  value: 102007852745154114519525620108359287671n,
  family: "ipv6"
})
assert.deepEqual(decodeIPv6Bigint("d8c6:3feb:46e6:b80c:5a07:6227:ac19:caf6"), {
  value: 288142618299897818094313964584331496182n,
  family: "ipv6"
})

assert.deepEqual(
  encodeIPv6Bigint({
    value: IPv6BigintBrand(102007852745154114519525620108359287671n),
    family: "ipv6"
  }),
  "4cbd:ff70:e62b:a048:686c:4e7e:a68a:c377"
)
assert.deepEqual(
  encodeIPv6Bigint({
    value: IPv6BigintBrand(288142618299897818094313964584331496182n),
    family: "ipv6"
  }),
  "d8c6:3feb:46e6:b80c:5a07:6227:ac19:caf6"
)

Signature

declare const IPv6Bigint: $IPv6Bigint

Source

Since v1.0.0

IPv6CidrBlock

Signature

declare const IPv6CidrBlock: $IPv6CidrBlock

Source

Since v1.0.0

IPv6CidrBlockFromString

A schema that transforms a string into a CidrBlock.

Signature

declare const IPv6CidrBlockFromString: $IPv6CidrBlockFromString

Source

Since v1.0.0

IPv6CidrMask

An ipv6 cidr mask, which is a number between 0 and 128.

Example

import * as Schema from "effect/Schema"
import { IPv6CidrMask, IPv6CidrMaskBrand } from "the-wireguard-effect/InternetSchemas"

const mask: IPv6CidrMaskBrand = IPv6CidrMaskBrand(64)
assert.strictEqual(mask, 64)

const decodeMask = Schema.decodeSync(IPv6CidrMask)
assert.strictEqual(decodeMask(64), 64)

assert.throws(() => decodeMask(129))
assert.doesNotThrow(() => decodeMask(0))
assert.doesNotThrow(() => decodeMask(128))

Signature

declare const IPv6CidrMask: $IPv6CidrMask

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 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

declare const IPv6Endpoint: $IPv6Endpoint

Source

Since v1.0.0

IPv6Family

Signature

declare const IPv6Family: $IPv6Family

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"])

See

  • IPv6
  • IPv6EndpointSchema

Signature

declare const IPv6SetupData: $IPv6SetupData

Source

Since v1.0.0

Port

An operating system port number.

Example

import * as Schema from "effect/Schema"
import { Port, PortBrand } from "the-wireguard-effect/InternetSchemas"

const port: PortBrand = PortBrand(8080)
assert.strictEqual(port, 8080)

const decodePort = Schema.decodeSync(Port)
assert.strictEqual(decodePort(8080), 8080)

assert.throws(() => decodePort(65536))
assert.doesNotThrow(() => decodePort(8080))

Signature

declare const Port: $Port

Source

Since v1.0.0

SetupData

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"])

See

  • Address
  • Endpoint

Signature

declare const SetupData: $SetupData

Source

Since v1.0.0