the-wireguard-effect
Version:
Cross platform wireguard api client for nodejs built on wireguard-go with effect-ts
435 lines • 25.6 kB
TypeScript
/**
* Wireguard peer schema definitions
*
* @since 1.0.0
*/
import * as Effect from "effect/Effect";
import * as Schema from "effect/Schema";
import * as InternetSchemas from "effect-schemas/Internet";
declare const WireguardPeer_base: import("effect/unstable/schema/VariantSchema").Class<WireguardPeer, {
/**
* The persistent keepalive interval in seconds, 0 disables it. The
* difference between Option.none and Option.some(0) is important when
* performing something like a config update operation on an interface
* because Option.none will not include the keep alive setting in the update
* request, so it will remain the same as it was before the update, whereas
* Option.some(0) will disable the keep alive setting.
*/
readonly PersistentKeepalive: Schema.OptionFromOptionalNullOr<Schema.decodeTo<Schema.Duration, Schema.Int, never, never>>;
/**
* The collection of IPs/masks that will be accepted from this peer. If an
* identical value already exists as part of a prior peer, the allowed IP
* entry will be removed from that peer and added to this peer.
*/
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>;
/**
* The value for this key is either IP:port for IPv4 or [IP]:port for IPv6
* or some.hostname.com:port for a hostname endpoint. The endpoint is
* optional and, if not supplied, the remote peer must connect first (so
* they should have the endpoint set to know where to connect to) and this
* client will just send requests back to the remote peer's source IP and
* port.
*/
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>]>>>;
/** Lowercase hex-encoded public key of the new peer entry. */
readonly PublicKey: Schema.brand<Schema.String, "WireguardKey">;
/**
* The preshared key is optional and is a lowercase hex-encoded key. The
* value may be an all zero string in the case of a set operation, in which
* case it indicates that the preshared-key should be removed.
*/
readonly PresharedKey: Schema.OptionFromOptionalNullOr<Schema.brand<Schema.String, "WireguardKey">>;
/** The number of received bytes. */
readonly rxBytes: import("effect/unstable/schema/VariantSchema").Field<{
readonly uapi: Schema.NumberFromString;
}>;
/** The number of transmitted bytes. */
readonly txBytes: import("effect/unstable/schema/VariantSchema").Field<{
readonly uapi: Schema.NumberFromString;
}>;
/**
* The number of seconds since the most recent handshake, expressed relative
* to the Unix epoch.
*/
readonly lastHandshake: import("effect/unstable/schema/VariantSchema").Field<{
readonly uapi: Schema.compose<Schema.DateTimeUtcFromMillis, Schema.decodeTo<Schema.toType<Schema.NumberFromString>, Schema.NumberFromString, never, never>>;
}>;
}, Schema.Struct<import("effect/unstable/schema/VariantSchema").ExtractFields<"json", {
/**
* The persistent keepalive interval in seconds, 0 disables it. The
* difference between Option.none and Option.some(0) is important when
* performing something like a config update operation on an interface
* because Option.none will not include the keep alive setting in the update
* request, so it will remain the same as it was before the update, whereas
* Option.some(0) will disable the keep alive setting.
*/
readonly PersistentKeepalive: Schema.OptionFromOptionalNullOr<Schema.decodeTo<Schema.Duration, Schema.Int, never, never>>;
/**
* The collection of IPs/masks that will be accepted from this peer. If an
* identical value already exists as part of a prior peer, the allowed IP
* entry will be removed from that peer and added to this peer.
*/
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>;
/**
* The value for this key is either IP:port for IPv4 or [IP]:port for IPv6
* or some.hostname.com:port for a hostname endpoint. The endpoint is
* optional and, if not supplied, the remote peer must connect first (so
* they should have the endpoint set to know where to connect to) and this
* client will just send requests back to the remote peer's source IP and
* port.
*/
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>]>>>;
/** Lowercase hex-encoded public key of the new peer entry. */
readonly PublicKey: Schema.brand<Schema.String, "WireguardKey">;
/**
* The preshared key is optional and is a lowercase hex-encoded key. The
* value may be an all zero string in the case of a set operation, in which
* case it indicates that the preshared-key should be removed.
*/
readonly PresharedKey: Schema.OptionFromOptionalNullOr<Schema.brand<Schema.String, "WireguardKey">>;
/** The number of received bytes. */
readonly rxBytes: import("effect/unstable/schema/VariantSchema").Field<{
readonly uapi: Schema.NumberFromString;
}>;
/** The number of transmitted bytes. */
readonly txBytes: import("effect/unstable/schema/VariantSchema").Field<{
readonly uapi: Schema.NumberFromString;
}>;
/**
* The number of seconds since the most recent handshake, expressed relative
* to the Unix epoch.
*/
readonly lastHandshake: import("effect/unstable/schema/VariantSchema").Field<{
readonly uapi: Schema.compose<Schema.DateTimeUtcFromMillis, Schema.decodeTo<Schema.toType<Schema.NumberFromString>, Schema.NumberFromString, never, never>>;
}>;
}, true>>> & {
readonly json: 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 uapi: 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>>;
}>;
};
/**
* A wireguard peer configuration.
*
* @since 1.0.0
* @category Datatypes
* @example
* ```ts
*
* 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,
* });
* ```;
*/
export declare class WireguardPeer extends WireguardPeer_base {
}
/**
* A wireguard peer configuration encoded in INI format.
*
* @since 1.0.0
* @category Transformations
* @example
* ```ts
*
* 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 {@link WireguardPeer}
*/
export declare const WireguardIniPeer: Schema.decodeTo<Schema.String, typeof WireguardPeer, never, never>;
/**
* @since 1.0.0
* @category Schemas
* @see https://www.wireguard.com/xplatform/
*/
export declare const WireguardUapiSetPeer: Schema.decodeTo<Schema.String, typeof WireguardPeer, never, never>;
/**
* @since 1.0.0
* @category Schemas
* @see https://www.wireguard.com/xplatform/
*/
export 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>;
/**
* @since 1.0.0
* @category Refinements
*/
export declare const hasBidirectionalTraffic: (wireguardPeer: Schema.Schema.Type<(typeof WireguardPeer)["uapi"]>) => Effect.Effect<boolean, never, never>;
/**
* @since 1.0.0
* @category Refinements
*/
export declare const hasHandshakedRecently: (wireguardPeer: Schema.Schema.Type<(typeof WireguardPeer)["uapi"]>) => Effect.Effect<boolean, never, never>;
export {};
//# sourceMappingURL=WireguardPeer.d.ts.map