///|
pub fn github_cookbook() -> String {
let builder = StringBuilder::new()
builder.write_string("# GitHub Webhook Receiver\n\n")
builder.write_string("1. Configure secret in VerificationPolicy.\n")
builder.write_string(
"2. Forward x-hub-signature-256, x-github-event, x-github-delivery.\n",
)
builder.write_string("3. Call verify_request or run_guard_pipeline.\n")
builder.write_string("4. Dispatch only when verification succeeds.\n")
builder.to_string()
}
///|
pub fn feishu_cookbook() -> String {
let builder = StringBuilder::new()
builder.write_string("# Feishu Event Receiver\n\n")
builder.write_string("1. Configure Feishu provider profile.\n")
builder.write_string(
"2. Forward x-lark-signature, timestamp, nonce, event type.\n",
)
builder.write_string("3. Keep replay store active for nonce protection.\n")
builder.write_string("4. Route im.message.receive_v1 to a message handler.\n")
builder.to_string()
}
///|
pub fn stripe_cookbook() -> String {
let builder = StringBuilder::new()
builder.write_string("# Stripe Style Receiver\n\n")
builder.write_string(
"1. Configure stripe provider profile and v1= signature prefix.\n",
)
builder.write_string("2. Validate timestamp before dispatch.\n")
builder.write_string("3. Treat event id as idempotency key.\n")
builder.write_string(
"4. Return a non-retryable response after accepted duplicate events.\n",
)
builder.to_string()
}
///|
pub fn cookbook_for(provider : String) -> String {
match provider {
"github" => github_cookbook()
"feishu" => feishu_cookbook()
"stripe" => stripe_cookbook()
_ =>
"# Generic Webhook Receiver\n\nUse ProviderProfile::generic() and configure headers explicitly.\n"
}
}
///|
pub fn combined_cookbook() -> String {
github_cookbook() + "\n" + feishu_cookbook() + "\n" + stripe_cookbook()
}