webpush/push
Types
Represents the cryptographic keys used for authentication and encryption in a push subscription.
auth
: The authentication secret as a base64url-encoded string.p256dh
: The user’s public key as a base64url-encoded string.
pub type Keys {
Keys(auth: String, p256dh: String)
}
Constructors
-
Keys(auth: String, p256dh: String)
Options for sending a push notification.
ttl
: Time to live for the push message in seconds.subscriber
: The subscriber’s contact information (e.g., email).vapid_public_key_b64url
: VAPID public key as a base64url-encoded string.vapid_private_key_b64url
: VAPID private key as a base64url-encoded string.topic
: Optional topic for the push message.urgency
: Optional urgency level for the push message.record_size
: Optional maximum record size for the push message.vapid_expiration_unix
: Optional VAPID token expiration time as a Unix timestamp.
pub type Options {
Options(
ttl: Int,
subscriber: String,
vapid_public_key_b64url: String,
vapid_private_key_b64url: String,
topic: option.Option(String),
urgency: option.Option(urgency.Urgency),
record_size: option.Option(Int),
vapid_expiration_unix: option.Option(Int),
)
}
Constructors
-
Options( ttl: Int, subscriber: String, vapid_public_key_b64url: String, vapid_private_key_b64url: String, topic: option.Option(String), urgency: option.Option(urgency.Urgency), record_size: option.Option(Int), vapid_expiration_unix: option.Option(Int), )
Represents the possible errors that can occur during the push notification process.
DecodeKeyError
: Indicates a failure to decode a cryptographic key.InvalidPeerPublicKey
: The provided peer public key is in an invalid format.CryptoError(String)
: A cryptographic operation failed, with an associated error message.HttpError(String)
: An HTTP request or response error, with an associated error message.VapidHeaderError(vapid.VapidError)
: An error occurred while handling the VAPID header.MaxPadExceeded
: The payload size has exceeded the allowed maximum length.
pub type PushError {
DecodeKeyError
InvalidPeerPublicKey
CryptoError(String)
HttpError(String)
VapidHeaderError(vapid.VapidError)
MaxPadExceeded
}
Constructors
-
DecodeKeyError
-
InvalidPeerPublicKey
-
CryptoError(String)
-
HttpError(String)
-
VapidHeaderError(vapid.VapidError)
-
MaxPadExceeded
Represents a push subscription, including the endpoint and associated keys.
endpoint
: The URL to which push messages are sent.keys
: The cryptographic keys for the subscription.
pub type Subscription {
Subscription(endpoint: String, keys: Keys)
}
Constructors
-
Subscription(endpoint: String, keys: Keys)
Values
pub fn push_error_to_string(error: PushError) -> String
Converts a PushError
value into a human-readable string description.
This function matches on the provided PushError
and returns a descriptive
error message for each variant, including decoding errors, cryptographic errors,
HTTP errors, VAPID header errors, and payload length issues.
DecodeKeyError
: Indicates a failure to decode a key.InvalidPeerPublicKey
: Indicates an invalid peer public key format.CryptoError(msg)
: Indicates a cryptographic error with a message.HttpError(msg)
: Indicates an HTTP error with a message.VapidHeaderError(vapid_err)
: Indicates a VAPID header error, with details fromvapid_error_to_string
.MaxPadExceeded
: Indicates the payload has exceeded the maximum allowed length.
Returns: A string describing the error.
pub fn send_notification(
message: BitArray,
sub: Subscription,
opts: Options,
) -> Result(response.Response(BitArray), PushError)
Sends a web push notification to a subscriber.
This function performs the following steps:
- Decodes the authentication and peer public keys from the subscription.
- Validates the peer public key format (must be uncompressed).
- Encrypts the payload using the provided keys and record size.
- Generates a VAPID authorization header for authentication.
- Constructs an HTTP request with the appropriate headers and binary body.
- Sends the request and returns the response or an error.
Arguments
message
: The payload to send as aBitArray
.sub
: The subscription information containing endpoint and keys.opts
: Options for the push notification, such as TTL, topic, urgency, and VAPID keys.
Returns
Ok(response.Response(BitArray))
: The HTTP response on success.Error(PushError)
: An error if any step fails (e.g., invalid keys, encryption, HTTP).