Enable LLMs to handle webhooks with plaintext files
README.md

@lure-hooks/fetch#

Provides a fetch-compatible request handler for processing webhook events with Lure. Suitable for use with Deno, Bun, Cloudflare Workers, or any other runtime that uses the fetch API.

Installation#

npm install @lure-hooks/fetch

Usage#

import { createLureHandler } from "@lure-hooks/fetch";

const lure = await createLureHandler({
  basePath: "/webhooks",
  luresDir: "./lures",
  callback: async (prompt, config) => {
    // Send the prompt to your LLM of choice
  },
});

Deno.serve((req) => lure(req) ?? new Response(null, { status: 404 }));

createLureHandler returns Promise<(req: Request) => Promise<Response | null>>. A null return means the request path did not match any lure, leaving the caller free to handle it as appropriate.

With config schema#

Pass a Standard Schema-compatible schema to validate the config block in your .lure files. Any schema library that implements the Standard Schema spec (Zod, Valibot, Arktype, etc.) will work.

import { createLureHandler } from "@lure-hooks/fetch";
import * as v from "valibot";

const lure = await createLureHandler({
  basePath: "/webhooks",
  luresDir: "./lures",
  configSchema: v.object({
    channel: v.string(),
  }),
  callback: async (prompt, config) => {
    await notify(config.channel, prompt);
  },
});

Options#

Option Type Default Description
basePath string URL path prefix for all lure endpoints
luresDir string Path to the directory containing .lure files
callback (prompt: string, config: TConfig) => Promise<void> Called with the rendered prompt on each verified webhook. TConfig is inferred from configSchema, or unknown if omitted
configSchema Standard Schema Schema for validating the config frontmatter block. Informs the type of config in callback
maxAttempts number 1 Number of times to attempt callback before dropping the webhook
allowUnverified boolean true Whether to allow .lure files without a verify block
watch boolean false Watch luresDir for changes and reload lures automatically