api

package
v1.10.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 2, 2026 License: MIT Imports: 18 Imported by: 0

Documentation

Overview

Package api provides the Forge-integrated HTTP API for Herald.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type CreateProviderRequest

type CreateProviderRequest struct {
	AppID       string            `description:"Application ID"     json:"app_id"`
	Name        string            `description:"Provider name"      json:"name"`
	Channel     string            `description:"Channel type"       json:"channel"`
	Driver      string            `description:"Driver name"        json:"driver"`
	Credentials map[string]string `description:"Driver credentials" json:"credentials"`
	Settings    map[string]string `description:"Driver settings"    json:"settings"`
	Priority    int               `description:"Priority order"     json:"priority"`
	Enabled     bool              `description:"Is enabled"         json:"enabled"`
}

Provider requests

type CreateTemplateRequest

type CreateTemplateRequest struct {
	AppID     string              `description:"Application ID"      json:"app_id"`
	Slug      string              `description:"Template slug"       json:"slug"`
	Name      string              `description:"Template name"       json:"name"`
	Channel   string              `description:"Channel type"        json:"channel"`
	Category  string              `description:"Template category"   json:"category,omitempty"`
	Variables []template.Variable `description:"Template variables"  json:"variables"`
	Enabled   bool                `description:"Is enabled"          json:"enabled"`
}

Template requests

type CreateVersionRequest

type CreateVersionRequest struct {
	AppID      string `description:"Application ID" optional:"true" query:"app_id"`
	TemplateID string `description:"Template ID" path:"id"`
	Locale     string `description:"Locale code" json:"locale"`
	Subject    string `description:"Subject"     json:"subject,omitempty"`
	HTML       string `description:"HTML body"   json:"html,omitempty"`
	Text       string `description:"Text body"   json:"text,omitempty"`
	Title      string `description:"Title"       json:"title,omitempty"`
}

type DeleteInboxRequest

type DeleteInboxRequest struct {
	AppID string `description:"Application ID" optional:"true" query:"app_id"`
	ID    string `description:"Notification ID" path:"id"`
}

type DeleteOrgConfigRequest

type DeleteOrgConfigRequest struct {
	OrgID string `description:"Organization ID"   path:"orgId"`
	AppID string `description:"Application ID"    query:"app_id"`
}

type DeleteProviderRequest

type DeleteProviderRequest struct {
	AppID string `description:"Application ID" optional:"true" query:"app_id"`
	ID    string `description:"Provider ID" path:"id"`
}

type DeleteTemplateRequest

type DeleteTemplateRequest struct {
	AppID string `description:"Application ID" optional:"true" query:"app_id"`
	ID    string `description:"Template ID" path:"id"`
}

type DeleteUserConfigRequest

type DeleteUserConfigRequest struct {
	UserID string `description:"User ID"           path:"userId"`
	AppID  string `description:"Application ID"    query:"app_id"`
}

type DeleteVersionRequest

type DeleteVersionRequest struct {
	AppID      string `description:"Application ID" optional:"true" query:"app_id"`
	TemplateID string `description:"Template ID" path:"id"`
	VersionID  string `description:"Version ID"  path:"versionId"`
}

type EncryptProvidersRequest

type EncryptProvidersRequest struct {
	AppID string `description:"Application ID" query:"app_id"`
}

EncryptProvidersRequest names the app whose credentials to encrypt.

type ForgeAPI

type ForgeAPI struct {
	// contains filtered or unexported fields
}

ForgeAPI is the Forge-integrated HTTP API handler for Herald.

func NewForgeAPI

func NewForgeAPI(s store.Store, h *herald.Herald, logger forge.Logger) *ForgeAPI

NewForgeAPI creates a new Forge API handler.

func (*ForgeAPI) RegisterRoutes

func (a *ForgeAPI) RegisterRoutes(router forge.Router)

RegisterRoutes registers all Herald API routes with a Forge router.

type GetConfigRequest

type GetConfigRequest struct {
	AppID string `description:"Application ID" query:"app_id"`
}

Config requests

type GetMessageRequest

type GetMessageRequest struct {
	AppID string `description:"Application ID" optional:"true" query:"app_id"`
	ID    string `description:"Message ID" path:"id"`
}

type GetPreferencesRequest

type GetPreferencesRequest struct {
	AppID  string `description:"Application ID" query:"app_id"`
	UserID string `description:"User ID"        query:"user_id"`
}

Preference requests

type GetProviderRequest

type GetProviderRequest struct {
	AppID string `description:"Application ID" optional:"true" query:"app_id"`
	ID    string `description:"Provider ID" path:"id"`
}

type GetTemplateRequest

type GetTemplateRequest struct {
	AppID string `description:"Application ID" optional:"true" query:"app_id"`
	ID    string `description:"Template ID" path:"id"`
}

type ListInboxRequest

type ListInboxRequest struct {
	AppID  string `description:"Application ID" query:"app_id"`
	UserID string `description:"User ID"        query:"user_id"`
	Offset int    `description:"Offset"         optional:"true" query:"offset"`
	Limit  int    `description:"Page size"      optional:"true" query:"limit"`
}

Inbox requests

type ListMessagesRequest

type ListMessagesRequest struct {
	AppID   string `description:"Filter by app"     query:"app_id"`
	Channel string `description:"Filter by channel" optional:"true" query:"channel"`
	Status  string `description:"Filter by status"  optional:"true" query:"status"`
	Offset  int    `description:"Pagination offset" optional:"true" query:"offset"`
	Limit   int    `description:"Page size"         optional:"true" query:"limit"`
}

Message requests

type ListProvidersRequest

type ListProvidersRequest struct {
	AppID   string `description:"Filter by app"     query:"app_id"`
	Channel string `description:"Filter by channel" optional:"true" query:"channel"`
}

type ListTemplatesRequest

type ListTemplatesRequest struct {
	AppID   string `description:"Filter by app"     query:"app_id"`
	Channel string `description:"Filter by channel" optional:"true" query:"channel"`
}

type ListVersionsRequest

type ListVersionsRequest struct {
	AppID      string `description:"Application ID" optional:"true" query:"app_id"`
	TemplateID string `description:"Template ID" path:"id"`
}

type MarkAllReadRequest

type MarkAllReadRequest struct {
	AppID  string `description:"Application ID" query:"app_id"`
	UserID string `description:"User ID"        query:"user_id"`
}

type MarkReadRequest

type MarkReadRequest struct {
	AppID string `description:"Application ID" optional:"true" query:"app_id"`
	ID    string `description:"Notification ID" path:"id"`
}

type ProviderResponse

type ProviderResponse struct {
	ID          string                   `json:"id"`
	AppID       string                   `json:"app_id"`
	Name        string                   `json:"name"`
	Channel     string                   `json:"channel"`
	Driver      string                   `json:"driver"`
	Credentials []herald.CredentialState `json:"credentials"`
	Settings    map[string]string        `json:"settings,omitempty"`
	Priority    int                      `json:"priority"`
	Enabled     bool                     `json:"enabled"`
	CreatedAt   time.Time                `json:"created_at"`
	UpdatedAt   time.Time                `json:"updated_at"`
}

ProviderResponse is a provider as the API shows it. Credentials are key names and how each is stored, never values. Settings the driver marks as secret are left out too, for rows written before that rule existed.

type SetAppConfigRequest

type SetAppConfigRequest struct {
	AppID             string `description:"Application ID"    json:"app_id"`
	EmailProviderID   string `description:"Email provider ID" json:"email_provider_id,omitempty"`
	SMSProviderID     string `description:"SMS provider ID"   json:"sms_provider_id,omitempty"`
	PushProviderID    string `description:"Push provider ID"  json:"push_provider_id,omitempty"`
	FromEmail         string `description:"Sender email"      json:"from_email,omitempty"`
	FromName          string `description:"Sender name"       json:"from_name,omitempty"`
	FromPhone         string `description:"Sender phone"      json:"from_phone,omitempty"`
	DefaultLocale     string `description:"Default locale"    json:"default_locale,omitempty"`
	WebhookProviderID string `description:"Webhook provider ID" json:"webhook_provider_id,omitempty"`
	ChatProviderID    string `description:"Chat provider ID"    json:"chat_provider_id,omitempty"`
}

type SetOrgConfigRequest

type SetOrgConfigRequest struct {
	OrgID             string `description:"Organization ID"   path:"orgId"`
	AppID             string `description:"Application ID"    json:"app_id"`
	EmailProviderID   string `description:"Email provider ID" json:"email_provider_id,omitempty"`
	SMSProviderID     string `description:"SMS provider ID"   json:"sms_provider_id,omitempty"`
	PushProviderID    string `description:"Push provider ID"  json:"push_provider_id,omitempty"`
	FromEmail         string `description:"Sender email"      json:"from_email,omitempty"`
	FromName          string `description:"Sender name"       json:"from_name,omitempty"`
	FromPhone         string `description:"Sender phone"      json:"from_phone,omitempty"`
	DefaultLocale     string `description:"Default locale"    json:"default_locale,omitempty"`
	WebhookProviderID string `description:"Webhook provider ID" json:"webhook_provider_id,omitempty"`
	ChatProviderID    string `description:"Chat provider ID"    json:"chat_provider_id,omitempty"`
}

type SetUserConfigRequest

type SetUserConfigRequest struct {
	UserID            string `description:"User ID"           path:"userId"`
	AppID             string `description:"Application ID"    json:"app_id"`
	EmailProviderID   string `description:"Email provider ID" json:"email_provider_id,omitempty"`
	SMSProviderID     string `description:"SMS provider ID"   json:"sms_provider_id,omitempty"`
	PushProviderID    string `description:"Push provider ID"  json:"push_provider_id,omitempty"`
	FromEmail         string `description:"Sender email"      json:"from_email,omitempty"`
	FromName          string `description:"Sender name"       json:"from_name,omitempty"`
	FromPhone         string `description:"Sender phone"      json:"from_phone,omitempty"`
	DefaultLocale     string `description:"Default locale"    json:"default_locale,omitempty"`
	WebhookProviderID string `description:"Webhook provider ID" json:"webhook_provider_id,omitempty"`
	ChatProviderID    string `description:"Chat provider ID"    json:"chat_provider_id,omitempty"`
}

type UnreadCountRequest

type UnreadCountRequest struct {
	AppID  string `description:"Application ID" query:"app_id"`
	UserID string `description:"User ID"        query:"user_id"`
}

type UnreadCountResponse

type UnreadCountResponse struct {
	Count int `json:"count"`
}

Response types

type UpdatePreferencesRequest

type UpdatePreferencesRequest struct {
	AppID     string                                  `description:"Application ID" json:"app_id"`
	UserID    string                                  `description:"User ID"        json:"user_id"`
	Overrides map[string]preference.ChannelPreference `description:"Overrides"    json:"overrides"`
}

type UpdateProviderRequest

type UpdateProviderRequest struct {
	ID                string            `description:"Provider ID"                path:"id"`
	AppID             string            `description:"Application ID"             optional:"true" query:"app_id"`
	Name              *string           `description:"Provider name"              json:"name,omitempty"`
	Priority          *int              `description:"Priority order"             json:"priority,omitempty"`
	Enabled           *bool             `description:"Is enabled"                 json:"enabled,omitempty"`
	Credentials       map[string]string `description:"Credentials to set"         json:"credentials,omitempty"`
	RemoveCredentials []string          `description:"Credential keys to remove"  json:"remove_credentials,omitempty"`
	Settings          map[string]string `description:"Settings to set"            json:"settings,omitempty"`
	RemoveSettings    []string          `description:"Setting keys to remove"     json:"remove_settings,omitempty"`
}

UpdateProviderRequest changes only what it sends. Credentials and settings merge: keys sent are set, keys in the remove lists are deleted, and everything else is kept. A provider's channel and driver can't change; create a new provider instead.

type UpdateTemplateRequest

type UpdateTemplateRequest struct {
	ID        string               `description:"Template ID"        path:"id"`
	AppID     string               `description:"Application ID"     optional:"true" query:"app_id"`
	Slug      *string              `description:"Template slug"      json:"slug,omitempty"`
	Name      *string              `description:"Template name"      json:"name,omitempty"`
	Channel   *string              `description:"Channel type"       json:"channel,omitempty"`
	Category  *string              `description:"Template category"  json:"category,omitempty"`
	Variables *[]template.Variable `description:"Template variables" json:"variables,omitempty"`
	Enabled   *bool                `description:"Is enabled"         json:"enabled,omitempty"`
}

type UpdateVersionRequest

type UpdateVersionRequest struct {
	TemplateID string  `description:"Template ID"    path:"id"`
	VersionID  string  `description:"Version ID"     path:"versionId"`
	AppID      string  `description:"Application ID" optional:"true" query:"app_id"`
	Locale     *string `description:"Locale code"    json:"locale,omitempty"`
	Subject    *string `description:"Subject"        json:"subject,omitempty"`
	HTML       *string `description:"HTML body"      json:"html,omitempty"`
	Text       *string `description:"Text body"      json:"text,omitempty"`
	Title      *string `description:"Title"          json:"title,omitempty"`
	Active     *bool   `description:"Is active"      json:"active,omitempty"`
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL