{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "#/components/schemas/HMACAuthenticationPlan",
  "title": "HMACAuthenticationPlan",
  "type": "object",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "hmac"
      ]
    },
    "secretKey": {
      "type": "string",
      "description": "This is the HMAC secret key used to sign requests."
    },
    "algorithm": {
      "type": "string",
      "enum": [
        "sha256",
        "sha512",
        "sha1"
      ],
      "description": "This is the HMAC algorithm to use for signing."
    },
    "signatureHeader": {
      "type": "string",
      "description": "This is the header name where the signature will be sent. Defaults to 'x-signature'."
    },
    "timestampHeader": {
      "type": "string",
      "description": "This is the header name where the timestamp will be sent. Defaults to 'x-timestamp'."
    },
    "signaturePrefix": {
      "type": "string",
      "description": "This is the prefix for the signature. For example, 'sha256=' for GitHub-style signatures."
    },
    "includeTimestamp": {
      "type": "boolean",
      "description": "Whether to include a timestamp in the signature payload. Defaults to true."
    },
    "payloadFormat": {
      "type": "string",
      "description": "Custom payload format. Use {body} for request body, {timestamp} for timestamp, {method} for HTTP method, {url} for URL, {svix-id} for unique message ID. Defaults to '{timestamp}.{body}'."
    },
    "messageIdHeader": {
      "type": "string",
      "description": "This is the header name where the unique message ID will be sent. Used for Svix-style webhooks."
    },
    "signatureEncoding": {
      "type": "string",
      "enum": [
        "hex",
        "base64"
      ],
      "description": "The encoding format for the signature. Defaults to 'hex'."
    },
    "secretIsBase64": {
      "type": "boolean",
      "description": "Whether the secret key is base64-encoded and should be decoded before use. Defaults to false."
    }
  },
  "required": [
    "type",
    "secretKey",
    "algorithm"
  ]
}