Skip to content
Effect Days 2026 Get your ticket

EventLogSessionAuth

Signs and verifies event-log session authentication payloads.

Remote peers use this challenge-response flow to prove that they control a session signing key before sending session traffic. The signed payload includes the remote id, a short-lived challenge, the event-log public key, and the signing public key in a stable byte format.

15 exports Added in v4.0.0 Source

Constants

Defines the domain-separation string embedded in canonical session authentication payloads.

When to use

Use when you need the domain-separation string used to build canonical event-log session authentication payloads.

Signature

declare const AuthPayloadContext: "eventlog-auth-v1"

Defines the required byte length for raw Ed25519 public keys used in session authentication.

When to use

Use when implementing session-auth serialization or validation that must reject public keys with a non-canonical raw byte length.

Signature

declare const Ed25519PublicKeyLength: 32

Defines the required byte length for Ed25519 signatures used in session authentication.

When to use

Use when implementing session-auth verification that must reject signatures with a non-canonical byte length before cryptographic checking.

Signature

declare const Ed25519SignatureLength: 64

Defines the number of random bytes generated for a session authentication challenge.

When to use

Use when you need the challenge size for event-log session authentication.

Signature

declare const SessionAuthChallengeLength: 32

Defines the time-to-live, in milliseconds, for a pending session authentication challenge.

When to use

Use when you need the timeout for pending event-log session authentication challenges.

Signature

declare const SessionAuthChallengeTimeToLiveMillis: 30000

Constructors

Generates a random session authentication challenge using globalThis.crypto.

Signature

declare const makeSessionAuthChallenge: Effect.Effect<Uint8Array<ArrayBuffer>, EventLogSessionAuthError>

Encoding

Decodes a canonical session authentication payload.

Details

The decoder validates the context field, UTF-8 fields, signing public key length, and rejects truncated or trailing bytes.

Signature

declare const decodeSessionAuthPayload: (...args: [payload: Uint8Array<ArrayBufferLike>]) => Effect<SessionAuthPayload, EventLogSessionAuthError, never>

Encodes a session authentication payload into the canonical byte format.

Details

The canonical payload format uses ordered big-endian length-prefixed fields:

  1. context (fixed: eventlog-auth-v1)
  2. remoteId
  3. challenge bytes
  4. publicKey
  5. signingPublicKey bytes

Signature

declare const encodeSessionAuthPayload: (...args: [payload: SessionAuthPayload]) => Effect<Uint8Array<ArrayBuffer>, EventLogSessionAuthError, never>

Errors

Error raised while encoding, decoding, signing, verifying, or generating session authentication challenges.

Signature

declare class EventLogSessionAuthError extends YieldableError<this> & {
readonly _tag: "EventLogSessionAuthError";
} & Readonly<{
readonly cause?: unknown;
readonly message: string;
readonly reason: "InvalidPayload" | "InvalidContext" | "InvalidAlgorithm" | "InvalidSigningPublicKeyLength" | "InvalidSignatureLength" | "InvalidSigningPrivateKey" | "CryptoUnavailable" | "CryptoFailure";
}> {
constructor(args: {
readonly cause?: unknown;
readonly message: string;
readonly reason: "InvalidPayload" | "InvalidContext" | "InvalidAlgorithm" | "InvalidSigningPublicKeyLength" | "InvalidSignatureLength" | "InvalidSigningPrivateKey" | "CryptoUnavailable" | "CryptoFailure";
});
}

Models

SessionAuthPayload interface

Added in v4.0.0 Source

Payload fields that are canonicalized and signed during session authentication.

Signature

interface SessionAuthPayload {
readonly challenge: Uint8Array;
readonly publicKey: string;
readonly remoteId: string | Uint8Array<ArrayBufferLike>;
readonly signingPublicKey: Uint8Array;
}

Signing

Encodes a session authentication payload in canonical form and signs it with an Ed25519 private key.

Signature

declare function signSessionAuthPayload(options: SessionAuthPayload & {
readonly signingPrivateKey: Uint8Array;
}): Effect<Uint8Array<ArrayBuffer>, EventLogSessionAuthError, never>

Creates a canonical session authentication signature with an Ed25519 private key.

Details

The private key must be PKCS#8-encoded bytes importable by SubtleCrypto.

Signature

declare const signSessionAuthPayloadBytes: (...args: [options: {
readonly payload: Uint8Array;
readonly signingPrivateKey: Uint8Array;
}]) => Effect<Uint8Array<ArrayBuffer>, EventLogSessionAuthError, never>

Verification

Verifies an authentication request by requiring the Ed25519 algorithm and checking the signature over the canonical session authentication payload.

Signature

declare const verifySessionAuthenticateRequest: (...args: [options: {
readonly algorithm: string;
readonly challenge: Uint8Array;
readonly publicKey: string;
readonly remoteId: string | Uint8Array<ArrayBufferLike>;
readonly signature: Uint8Array;
readonly signingPublicKey: Uint8Array;
}]) => Effect<boolean, EventLogSessionAuthError, never>

Encodes a session authentication payload in canonical form and verifies its Ed25519 signature.

Signature

declare function verifySessionAuthPayload(options: SessionAuthPayload & {
readonly signature: Uint8Array;
}): Effect<boolean, EventLogSessionAuthError, never>

Verifies an Ed25519 signature for canonical session authentication payload bytes.

Details

The payload, signing public key, and signature lengths are validated before calling SubtleCrypto.verify.

Signature

declare const verifySessionAuthPayloadBytes: (...args: [options: {
readonly payload: Uint8Array;
readonly signature: Uint8Array;
readonly signingPublicKey: Uint8Array;
}]) => Effect<boolean, EventLogSessionAuthError, never>