hooklatch 0.0.0-stage → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +438 -2
- package/dist/adapters/cloudflare.d.ts +11 -0
- package/dist/adapters/cloudflare.d.ts.map +1 -0
- package/dist/adapters/cloudflare.js +27 -0
- package/dist/adapters/cloudflare.js.map +1 -0
- package/dist/adapters/express.d.ts +9 -0
- package/dist/adapters/express.d.ts.map +1 -0
- package/dist/adapters/express.js +63 -0
- package/dist/adapters/express.js.map +1 -0
- package/dist/adapters/hono.d.ts +12 -0
- package/dist/adapters/hono.d.ts.map +1 -0
- package/dist/adapters/hono.js +28 -0
- package/dist/adapters/hono.js.map +1 -0
- package/dist/adapters/nextjs.d.ts +6 -0
- package/dist/adapters/nextjs.d.ts.map +1 -0
- package/dist/adapters/nextjs.js +56 -0
- package/dist/adapters/nextjs.js.map +1 -0
- package/dist/adapters/shared.d.ts +8 -0
- package/dist/adapters/shared.d.ts.map +1 -0
- package/dist/adapters/shared.js +53 -0
- package/dist/adapters/shared.js.map +1 -0
- package/dist/cjs/adapters/cloudflare.cjs +29 -0
- package/dist/cjs/adapters/cloudflare.d.cts +10 -0
- package/dist/cjs/adapters/express.cjs +65 -0
- package/dist/cjs/adapters/express.d.cts +8 -0
- package/dist/cjs/adapters/hono.cjs +30 -0
- package/dist/cjs/adapters/hono.d.cts +11 -0
- package/dist/cjs/adapters/nextjs.cjs +58 -0
- package/dist/cjs/adapters/nextjs.d.cts +5 -0
- package/dist/cjs/adapters/shared.cjs +58 -0
- package/dist/cjs/adapters/shared.d.cts +7 -0
- package/dist/cjs/core.cjs +30 -0
- package/dist/cjs/core.d.cts +5 -0
- package/dist/cjs/diagnostics/catalog.cjs +341 -0
- package/dist/cjs/diagnostics/catalog.d.cts +19 -0
- package/dist/cjs/diagnostics/index.cjs +90 -0
- package/dist/cjs/diagnostics/index.d.cts +5 -0
- package/dist/cjs/diagnostics/types.cjs +2 -0
- package/dist/cjs/diagnostics/types.d.cts +20 -0
- package/dist/cjs/errors.cjs +13 -0
- package/dist/cjs/errors.d.cts +6 -0
- package/dist/cjs/index.cjs +9 -0
- package/dist/cjs/index.d.cts +3 -0
- package/dist/cjs/internal/body.cjs +50 -0
- package/dist/cjs/internal/body.d.cts +2 -0
- package/dist/cjs/internal/bytes.cjs +43 -0
- package/dist/cjs/internal/bytes.d.cts +4 -0
- package/dist/cjs/internal/crypto.cjs +52 -0
- package/dist/cjs/internal/crypto.d.cts +3 -0
- package/dist/cjs/internal/headers.cjs +72 -0
- package/dist/cjs/internal/headers.d.cts +2 -0
- package/dist/cjs/internal/options.cjs +130 -0
- package/dist/cjs/internal/options.d.cts +7 -0
- package/dist/cjs/internal/prepare.cjs +11 -0
- package/dist/cjs/internal/prepare.d.cts +4 -0
- package/dist/cjs/internal/provider-options.cjs +72 -0
- package/dist/cjs/internal/provider-options.d.cts +6 -0
- package/dist/cjs/internal/provider.cjs +2 -0
- package/dist/cjs/internal/provider.d.cts +39 -0
- package/dist/cjs/internal/verification.cjs +71 -0
- package/dist/cjs/internal/verification.d.cts +12 -0
- package/dist/cjs/providers/clerk.cjs +15 -0
- package/dist/cjs/providers/clerk.d.cts +9 -0
- package/dist/cjs/providers/dodo-payments.cjs +26 -0
- package/dist/cjs/providers/dodo-payments.d.cts +20 -0
- package/dist/cjs/providers/doppler.cjs +71 -0
- package/dist/cjs/providers/doppler.d.cts +37 -0
- package/dist/cjs/providers/fal.cjs +80 -0
- package/dist/cjs/providers/fal.d.cts +13 -0
- package/dist/cjs/providers/github.cjs +52 -0
- package/dist/cjs/providers/github.d.cts +7 -0
- package/dist/cjs/providers/gitlab.cjs +26 -0
- package/dist/cjs/providers/gitlab.d.cts +20 -0
- package/dist/cjs/providers/grafana.cjs +180 -0
- package/dist/cjs/providers/grafana.d.cts +35 -0
- package/dist/cjs/providers/index.cjs +110 -0
- package/dist/cjs/providers/index.d.cts +26 -0
- package/dist/cjs/providers/lemon-squeezy.cjs +36 -0
- package/dist/cjs/providers/lemon-squeezy.d.cts +15 -0
- package/dist/cjs/providers/linear.cjs +58 -0
- package/dist/cjs/providers/linear.d.cts +36 -0
- package/dist/cjs/providers/paddle.cjs +105 -0
- package/dist/cjs/providers/paddle.d.cts +14 -0
- package/dist/cjs/providers/polar.cjs +80 -0
- package/dist/cjs/providers/polar.d.cts +25 -0
- package/dist/cjs/providers/razorpay.cjs +43 -0
- package/dist/cjs/providers/razorpay.d.cts +19 -0
- package/dist/cjs/providers/replicate.cjs +25 -0
- package/dist/cjs/providers/replicate.d.cts +19 -0
- package/dist/cjs/providers/sanity.cjs +161 -0
- package/dist/cjs/providers/sanity.d.cts +38 -0
- package/dist/cjs/providers/sentry.cjs +47 -0
- package/dist/cjs/providers/sentry.d.cts +25 -0
- package/dist/cjs/providers/shared.cjs +49 -0
- package/dist/cjs/providers/shared.d.cts +14 -0
- package/dist/cjs/providers/shopify.cjs +40 -0
- package/dist/cjs/providers/shopify.d.cts +8 -0
- package/dist/cjs/providers/standard-webhooks-protocol.cjs +97 -0
- package/dist/cjs/providers/standard-webhooks-protocol.d.cts +14 -0
- package/dist/cjs/providers/standard-webhooks.cjs +15 -0
- package/dist/cjs/providers/standard-webhooks.d.cts +9 -0
- package/dist/cjs/providers/stripe.cjs +81 -0
- package/dist/cjs/providers/stripe.d.cts +7 -0
- package/dist/cjs/providers/svix.cjs +63 -0
- package/dist/cjs/providers/svix.d.cts +9 -0
- package/dist/cjs/providers/vercel.cjs +39 -0
- package/dist/cjs/providers/vercel.d.cts +15 -0
- package/dist/cjs/providers/workos.cjs +120 -0
- package/dist/cjs/providers/workos.d.cts +32 -0
- package/dist/cjs/types.cjs +2 -0
- package/dist/cjs/types.d.cts +68 -0
- package/dist/cli/args.d.ts +86 -0
- package/dist/cli/args.d.ts.map +1 -0
- package/dist/cli/args.js +358 -0
- package/dist/cli/args.js.map +1 -0
- package/dist/cli/filesystem.d.ts +15 -0
- package/dist/cli/filesystem.d.ts.map +1 -0
- package/dist/cli/filesystem.js +170 -0
- package/dist/cli/filesystem.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +64 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/templates.d.ts +13 -0
- package/dist/cli/templates.d.ts.map +1 -0
- package/dist/cli/templates.js +297 -0
- package/dist/cli/templates.js.map +1 -0
- package/dist/core.d.ts +6 -0
- package/dist/core.d.ts.map +1 -0
- package/dist/core.js +26 -0
- package/dist/core.js.map +1 -0
- package/dist/diagnostics/catalog.d.ts +20 -0
- package/dist/diagnostics/catalog.d.ts.map +1 -0
- package/dist/diagnostics/catalog.js +335 -0
- package/dist/diagnostics/catalog.js.map +1 -0
- package/dist/diagnostics/index.d.ts +6 -0
- package/dist/diagnostics/index.d.ts.map +1 -0
- package/dist/diagnostics/index.js +88 -0
- package/dist/diagnostics/index.js.map +1 -0
- package/dist/diagnostics/types.d.ts +21 -0
- package/dist/diagnostics/types.d.ts.map +1 -0
- package/dist/diagnostics/types.js +2 -0
- package/dist/diagnostics/types.js.map +1 -0
- package/dist/errors.d.ts +7 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +10 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/internal/body.d.ts +3 -0
- package/dist/internal/body.d.ts.map +1 -0
- package/dist/internal/body.js +48 -0
- package/dist/internal/body.js.map +1 -0
- package/dist/internal/bytes.d.ts +5 -0
- package/dist/internal/bytes.d.ts.map +1 -0
- package/dist/internal/bytes.js +38 -0
- package/dist/internal/bytes.js.map +1 -0
- package/dist/internal/crypto.d.ts +4 -0
- package/dist/internal/crypto.d.ts.map +1 -0
- package/dist/internal/crypto.js +49 -0
- package/dist/internal/crypto.js.map +1 -0
- package/dist/internal/headers.d.ts +3 -0
- package/dist/internal/headers.d.ts.map +1 -0
- package/dist/internal/headers.js +70 -0
- package/dist/internal/headers.js.map +1 -0
- package/dist/internal/options.d.ts +8 -0
- package/dist/internal/options.d.ts.map +1 -0
- package/dist/internal/options.js +128 -0
- package/dist/internal/options.js.map +1 -0
- package/dist/internal/prepare.d.ts +5 -0
- package/dist/internal/prepare.d.ts.map +1 -0
- package/dist/internal/prepare.js +9 -0
- package/dist/internal/prepare.js.map +1 -0
- package/dist/internal/provider-options.d.ts +7 -0
- package/dist/internal/provider-options.d.ts.map +1 -0
- package/dist/internal/provider-options.js +69 -0
- package/dist/internal/provider-options.js.map +1 -0
- package/dist/internal/provider.d.ts +40 -0
- package/dist/internal/provider.d.ts.map +1 -0
- package/dist/internal/provider.js +2 -0
- package/dist/internal/provider.js.map +1 -0
- package/dist/internal/verification.d.ts +13 -0
- package/dist/internal/verification.d.ts.map +1 -0
- package/dist/internal/verification.js +66 -0
- package/dist/internal/verification.js.map +1 -0
- package/dist/node/adapters/cloudflare.d.ts +1 -0
- package/dist/node/adapters/cloudflare.js +3 -0
- package/dist/node/adapters/express.d.ts +1 -0
- package/dist/node/adapters/express.js +3 -0
- package/dist/node/adapters/hono.d.ts +1 -0
- package/dist/node/adapters/hono.js +3 -0
- package/dist/node/adapters/nextjs.d.ts +1 -0
- package/dist/node/adapters/nextjs.js +3 -0
- package/dist/node/diagnostics/index.d.ts +1 -0
- package/dist/node/diagnostics/index.js +3 -0
- package/dist/node/index.d.ts +1 -0
- package/dist/node/index.js +6 -0
- package/dist/providers/clerk.d.ts +10 -0
- package/dist/providers/clerk.d.ts.map +1 -0
- package/dist/providers/clerk.js +13 -0
- package/dist/providers/clerk.js.map +1 -0
- package/dist/providers/dodo-payments.d.ts +21 -0
- package/dist/providers/dodo-payments.d.ts.map +1 -0
- package/dist/providers/dodo-payments.js +24 -0
- package/dist/providers/dodo-payments.js.map +1 -0
- package/dist/providers/doppler.d.ts +38 -0
- package/dist/providers/doppler.d.ts.map +1 -0
- package/dist/providers/doppler.js +69 -0
- package/dist/providers/doppler.js.map +1 -0
- package/dist/providers/fal.d.ts +14 -0
- package/dist/providers/fal.d.ts.map +1 -0
- package/dist/providers/fal.js +78 -0
- package/dist/providers/fal.js.map +1 -0
- package/dist/providers/github.d.ts +8 -0
- package/dist/providers/github.d.ts.map +1 -0
- package/dist/providers/github.js +50 -0
- package/dist/providers/github.js.map +1 -0
- package/dist/providers/gitlab.d.ts +21 -0
- package/dist/providers/gitlab.d.ts.map +1 -0
- package/dist/providers/gitlab.js +24 -0
- package/dist/providers/gitlab.js.map +1 -0
- package/dist/providers/grafana.d.ts +36 -0
- package/dist/providers/grafana.d.ts.map +1 -0
- package/dist/providers/grafana.js +178 -0
- package/dist/providers/grafana.js.map +1 -0
- package/dist/providers/index.d.ts +27 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +89 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/lemon-squeezy.d.ts +16 -0
- package/dist/providers/lemon-squeezy.d.ts.map +1 -0
- package/dist/providers/lemon-squeezy.js +34 -0
- package/dist/providers/lemon-squeezy.js.map +1 -0
- package/dist/providers/linear.d.ts +37 -0
- package/dist/providers/linear.d.ts.map +1 -0
- package/dist/providers/linear.js +56 -0
- package/dist/providers/linear.js.map +1 -0
- package/dist/providers/paddle.d.ts +15 -0
- package/dist/providers/paddle.d.ts.map +1 -0
- package/dist/providers/paddle.js +103 -0
- package/dist/providers/paddle.js.map +1 -0
- package/dist/providers/polar.d.ts +26 -0
- package/dist/providers/polar.d.ts.map +1 -0
- package/dist/providers/polar.js +78 -0
- package/dist/providers/polar.js.map +1 -0
- package/dist/providers/razorpay.d.ts +20 -0
- package/dist/providers/razorpay.d.ts.map +1 -0
- package/dist/providers/razorpay.js +41 -0
- package/dist/providers/razorpay.js.map +1 -0
- package/dist/providers/replicate.d.ts +20 -0
- package/dist/providers/replicate.d.ts.map +1 -0
- package/dist/providers/replicate.js +23 -0
- package/dist/providers/replicate.js.map +1 -0
- package/dist/providers/sanity.d.ts +39 -0
- package/dist/providers/sanity.d.ts.map +1 -0
- package/dist/providers/sanity.js +159 -0
- package/dist/providers/sanity.js.map +1 -0
- package/dist/providers/sentry.d.ts +26 -0
- package/dist/providers/sentry.d.ts.map +1 -0
- package/dist/providers/sentry.js +45 -0
- package/dist/providers/sentry.js.map +1 -0
- package/dist/providers/shared.d.ts +15 -0
- package/dist/providers/shared.d.ts.map +1 -0
- package/dist/providers/shared.js +40 -0
- package/dist/providers/shared.js.map +1 -0
- package/dist/providers/shopify.d.ts +9 -0
- package/dist/providers/shopify.d.ts.map +1 -0
- package/dist/providers/shopify.js +38 -0
- package/dist/providers/shopify.js.map +1 -0
- package/dist/providers/standard-webhooks-protocol.d.ts +15 -0
- package/dist/providers/standard-webhooks-protocol.d.ts.map +1 -0
- package/dist/providers/standard-webhooks-protocol.js +95 -0
- package/dist/providers/standard-webhooks-protocol.js.map +1 -0
- package/dist/providers/standard-webhooks.d.ts +10 -0
- package/dist/providers/standard-webhooks.d.ts.map +1 -0
- package/dist/providers/standard-webhooks.js +13 -0
- package/dist/providers/standard-webhooks.js.map +1 -0
- package/dist/providers/stripe.d.ts +8 -0
- package/dist/providers/stripe.d.ts.map +1 -0
- package/dist/providers/stripe.js +79 -0
- package/dist/providers/stripe.js.map +1 -0
- package/dist/providers/svix.d.ts +10 -0
- package/dist/providers/svix.d.ts.map +1 -0
- package/dist/providers/svix.js +61 -0
- package/dist/providers/svix.js.map +1 -0
- package/dist/providers/vercel.d.ts +16 -0
- package/dist/providers/vercel.d.ts.map +1 -0
- package/dist/providers/vercel.js +37 -0
- package/dist/providers/vercel.js.map +1 -0
- package/dist/providers/workos.d.ts +33 -0
- package/dist/providers/workos.d.ts.map +1 -0
- package/dist/providers/workos.js +118 -0
- package/dist/providers/workos.js.map +1 -0
- package/dist/types.d.ts +69 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +200 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ProviderCliOptions } from './args.js';
|
|
2
|
+
export type TemplateOptions = {
|
|
3
|
+
readonly secretEnv: string;
|
|
4
|
+
readonly bodyLimit: number;
|
|
5
|
+
readonly providerOptions?: ProviderCliOptions;
|
|
6
|
+
} | {
|
|
7
|
+
readonly publicKeyEnv: string;
|
|
8
|
+
readonly expectedUserEnv: string;
|
|
9
|
+
readonly bodyLimit: number;
|
|
10
|
+
readonly providerOptions?: ProviderCliOptions;
|
|
11
|
+
};
|
|
12
|
+
export declare function renderTemplate(provider: string, framework: string, options: TemplateOptions): string;
|
|
13
|
+
//# sourceMappingURL=templates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/cli/templates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAEpD,MAAM,MAAM,eAAe,GACvB;IAAE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,kBAAkB,CAAA;CAAE,GACzG;IAAE,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,kBAAkB,CAAA;CAAE,CAAC;AAEnJ,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,MAAM,CA4BpG"}
|
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
export function renderTemplate(provider, framework, options) {
|
|
2
|
+
const hasPublicKey = 'publicKeyEnv' in options;
|
|
3
|
+
const hasSecret = 'secretEnv' in options;
|
|
4
|
+
// Enforce credential correlation: fal must use public-key options, non-fal must use HMAC options.
|
|
5
|
+
if (provider === 'fal') {
|
|
6
|
+
if (!hasPublicKey || hasSecret) {
|
|
7
|
+
throw new Error('Fal templates require publicKeyEnv and expectedUserEnv, not secretEnv.');
|
|
8
|
+
}
|
|
9
|
+
return falTemplate(provider, framework, options.publicKeyEnv, options.expectedUserEnv, options.bodyLimit);
|
|
10
|
+
}
|
|
11
|
+
if (hasPublicKey) {
|
|
12
|
+
throw new Error('Non-fal providers must use secretEnv, not publicKeyEnv/expectedUserEnv.');
|
|
13
|
+
}
|
|
14
|
+
const { secretEnv, bodyLimit, providerOptions } = options;
|
|
15
|
+
if (framework === 'express')
|
|
16
|
+
return expressTemplate(provider, secretEnv, bodyLimit, providerOptions);
|
|
17
|
+
if (framework === 'nextjs')
|
|
18
|
+
return nextjsTemplate(provider, secretEnv, bodyLimit, providerOptions);
|
|
19
|
+
if (framework === 'hono')
|
|
20
|
+
return honoTemplate(provider, secretEnv, bodyLimit, providerOptions);
|
|
21
|
+
if (framework === 'cloudflare')
|
|
22
|
+
return cloudflareTemplate(provider, secretEnv, bodyLimit, providerOptions);
|
|
23
|
+
throw new Error('Unsupported framework.');
|
|
24
|
+
}
|
|
25
|
+
function expressTemplate(provider, secretEnv, bodyLimit, providerOptions) {
|
|
26
|
+
const identifier = provider.replaceAll('-', '_');
|
|
27
|
+
const providerOptionsLine = renderProviderOptionsLine(providerOptions, ' ');
|
|
28
|
+
return `import { createWebhookMiddleware } from 'hooklatch/express';
|
|
29
|
+
import type { VerifyOptions } from 'hooklatch';
|
|
30
|
+
|
|
31
|
+
// Synthetic placeholder: set ${secretEnv} in your environment before deployment.
|
|
32
|
+
const options: VerifyOptions = {
|
|
33
|
+
provider: '${provider}',
|
|
34
|
+
secrets: [process.env.${secretEnv}!],
|
|
35
|
+
maxBodyBytes: ${bodyLimit},
|
|
36
|
+
${providerOptionsLine}};
|
|
37
|
+
|
|
38
|
+
// Mount this middleware before any body parser (express.json, urlencoded, etc.).
|
|
39
|
+
export const ${identifier}ExpressWebhook = createWebhookMiddleware(options);
|
|
40
|
+
|
|
41
|
+
// Example mounting:
|
|
42
|
+
// app.post('/webhooks/${provider}', ${identifier}ExpressWebhook, (req, res) => {
|
|
43
|
+
// const verified = req.webhook;
|
|
44
|
+
// res.status(200).json({ received: true, bytes: verified?.rawBody.byteLength ?? 0 });
|
|
45
|
+
// });
|
|
46
|
+
`;
|
|
47
|
+
}
|
|
48
|
+
function nextjsTemplate(provider, secretEnv, bodyLimit, providerOptions) {
|
|
49
|
+
const providerOptionsLine = renderProviderOptionsLine(providerOptions, ' ');
|
|
50
|
+
return `import { createWebhookHandler } from 'hooklatch/nextjs';
|
|
51
|
+
import type { VerifyOptions } from 'hooklatch';
|
|
52
|
+
|
|
53
|
+
const options: VerifyOptions = {
|
|
54
|
+
provider: '${provider}',
|
|
55
|
+
secrets: [process.env.${secretEnv}!],
|
|
56
|
+
maxBodyBytes: ${bodyLimit},
|
|
57
|
+
${providerOptionsLine}};
|
|
58
|
+
|
|
59
|
+
export const POST = createWebhookHandler({
|
|
60
|
+
...options,
|
|
61
|
+
handler: (_request, success) => {
|
|
62
|
+
// Verify first, then parse/validate success.rawBody in your own schema.
|
|
63
|
+
return Response.json({ received: true, bytes: success.rawBody.byteLength });
|
|
64
|
+
},
|
|
65
|
+
});
|
|
66
|
+
`;
|
|
67
|
+
}
|
|
68
|
+
function honoTemplate(provider, secretEnv, bodyLimit, providerOptions) {
|
|
69
|
+
const identifier = provider.replaceAll('-', '_');
|
|
70
|
+
const providerOptionsLine = renderProviderOptionsLine(providerOptions, ' ');
|
|
71
|
+
return `import { Hono } from 'hono';
|
|
72
|
+
import { createWebhookMiddleware, type WebhookVariables } from 'hooklatch/hono';
|
|
73
|
+
import type { VerifyOptions } from 'hooklatch';
|
|
74
|
+
|
|
75
|
+
const options: VerifyOptions = {
|
|
76
|
+
provider: '${provider}',
|
|
77
|
+
secrets: [process.env.${secretEnv}!],
|
|
78
|
+
maxBodyBytes: ${bodyLimit},
|
|
79
|
+
${providerOptionsLine}};
|
|
80
|
+
|
|
81
|
+
export const ${identifier}HonoWebhook = createWebhookMiddleware(options);
|
|
82
|
+
|
|
83
|
+
// Mount manually:
|
|
84
|
+
// const app = new Hono<{ Variables: WebhookVariables }>();
|
|
85
|
+
// app.post('/webhooks/${provider}', ${identifier}HonoWebhook, (c) => {
|
|
86
|
+
// const verified = c.get('webhook');
|
|
87
|
+
// return c.json({ received: true, bytes: verified.rawBody.byteLength });
|
|
88
|
+
// });
|
|
89
|
+
`;
|
|
90
|
+
}
|
|
91
|
+
function cloudflareTemplate(provider, secretEnv, bodyLimit, providerOptions) {
|
|
92
|
+
const providerOptionsLine = renderProviderOptionsLine(providerOptions, ' ');
|
|
93
|
+
return `import { createWebhookHandler } from 'hooklatch/cloudflare';
|
|
94
|
+
import type { VerifyOptions } from 'hooklatch';
|
|
95
|
+
|
|
96
|
+
interface Env {
|
|
97
|
+
${secretEnv}: string;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
export const fetch = createWebhookHandler<Env>({
|
|
101
|
+
options: (env) => ({
|
|
102
|
+
provider: '${provider}',
|
|
103
|
+
secrets: [env.${secretEnv}],
|
|
104
|
+
maxBodyBytes: ${bodyLimit},
|
|
105
|
+
${providerOptionsLine} }),
|
|
106
|
+
handler: (_request, _env, _ctx, success) => {
|
|
107
|
+
// Verify first, then parse/validate success.rawBody in your own schema.
|
|
108
|
+
return Response.json({ received: true, bytes: success.rawBody.byteLength });
|
|
109
|
+
},
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
export default { fetch };
|
|
113
|
+
`;
|
|
114
|
+
}
|
|
115
|
+
function falDecoder() {
|
|
116
|
+
return `function decodePublicKeys(value: string | undefined): Uint8Array[] {
|
|
117
|
+
if (value === undefined || value.length === 0) throw new Error('Invalid public-key configuration.');
|
|
118
|
+
|
|
119
|
+
const entries = value.split(',');
|
|
120
|
+
|
|
121
|
+
if (entries.length > 16) throw new Error('Invalid public-key configuration.');
|
|
122
|
+
|
|
123
|
+
return entries.map((entry) => {
|
|
124
|
+
if (!/^[A-Za-z0-9_-]{43}$/.test(entry)) throw new Error('Invalid public-key configuration.');
|
|
125
|
+
|
|
126
|
+
const base64 = entry.replace(/-/g, '+').replace(/_/g, '/') + '=';
|
|
127
|
+
let binary: string;
|
|
128
|
+
|
|
129
|
+
try {
|
|
130
|
+
binary = atob(base64);
|
|
131
|
+
} catch {
|
|
132
|
+
throw new Error('Invalid public-key configuration.');
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
if (binary.length !== 32 || btoa(binary) !== base64) throw new Error('Invalid public-key configuration.');
|
|
136
|
+
|
|
137
|
+
const bytes = new Uint8Array(32);
|
|
138
|
+
|
|
139
|
+
for (let i = 0; i < bytes.length; i++) bytes[i] = binary.charCodeAt(i);
|
|
140
|
+
|
|
141
|
+
return bytes;
|
|
142
|
+
});
|
|
143
|
+
}`;
|
|
144
|
+
}
|
|
145
|
+
function falTemplate(provider, framework, publicKeyEnv, expectedUserEnv, bodyLimit) {
|
|
146
|
+
const identifier = provider.replaceAll('-', '_');
|
|
147
|
+
if (framework === 'express') {
|
|
148
|
+
return `import { createWebhookMiddleware } from 'hooklatch/express';
|
|
149
|
+
import type { VerifyOptions } from 'hooklatch';
|
|
150
|
+
|
|
151
|
+
// Synthetic placeholder: set ${publicKeyEnv} and ${expectedUserEnv} in your
|
|
152
|
+
// environment before deployment. Keys are comma-separated canonical Base64url
|
|
153
|
+
// (no padding), each decoding to exactly 32 bytes, 1 to 16 entries.
|
|
154
|
+
|
|
155
|
+
${falDecoder()}
|
|
156
|
+
|
|
157
|
+
const options: VerifyOptions = {
|
|
158
|
+
provider: '${provider}',
|
|
159
|
+
publicKeys: decodePublicKeys(process.env.${publicKeyEnv}!),
|
|
160
|
+
expectedUserId: process.env.${expectedUserEnv}!,
|
|
161
|
+
maxBodyBytes: ${bodyLimit},
|
|
162
|
+
};
|
|
163
|
+
|
|
164
|
+
// Mount this middleware before any body parser (express.json, urlencoded, etc.).
|
|
165
|
+
export const ${identifier}ExpressWebhook = createWebhookMiddleware(options);
|
|
166
|
+
|
|
167
|
+
// Example mounting:
|
|
168
|
+
// app.post('/webhooks/${provider}', ${identifier}ExpressWebhook, (req, res) => {
|
|
169
|
+
// const verified = req.webhook;
|
|
170
|
+
// res.status(200).json({ received: true, bytes: verified?.rawBody.byteLength ?? 0 });
|
|
171
|
+
// });
|
|
172
|
+
`;
|
|
173
|
+
}
|
|
174
|
+
if (framework === 'nextjs') {
|
|
175
|
+
return `import { createWebhookHandler } from 'hooklatch/nextjs';
|
|
176
|
+
import type { VerifyOptions } from 'hooklatch';
|
|
177
|
+
|
|
178
|
+
${falDecoder()}
|
|
179
|
+
|
|
180
|
+
const options: VerifyOptions = {
|
|
181
|
+
provider: '${provider}',
|
|
182
|
+
publicKeys: decodePublicKeys(process.env.${publicKeyEnv}!),
|
|
183
|
+
expectedUserId: process.env.${expectedUserEnv}!,
|
|
184
|
+
maxBodyBytes: ${bodyLimit},
|
|
185
|
+
};
|
|
186
|
+
|
|
187
|
+
export const POST = createWebhookHandler({
|
|
188
|
+
...options,
|
|
189
|
+
handler: (_request, success) => {
|
|
190
|
+
// Verify first, then parse/validate success.rawBody in your own schema.
|
|
191
|
+
return Response.json({ received: true, bytes: success.rawBody.byteLength });
|
|
192
|
+
},
|
|
193
|
+
});
|
|
194
|
+
`;
|
|
195
|
+
}
|
|
196
|
+
if (framework === 'hono') {
|
|
197
|
+
return `import { Hono } from 'hono';
|
|
198
|
+
import { createWebhookMiddleware, type WebhookVariables } from 'hooklatch/hono';
|
|
199
|
+
import type { VerifyOptions } from 'hooklatch';
|
|
200
|
+
|
|
201
|
+
${falDecoder()}
|
|
202
|
+
|
|
203
|
+
const options: VerifyOptions = {
|
|
204
|
+
provider: '${provider}',
|
|
205
|
+
publicKeys: decodePublicKeys(process.env.${publicKeyEnv}!),
|
|
206
|
+
expectedUserId: process.env.${expectedUserEnv}!,
|
|
207
|
+
maxBodyBytes: ${bodyLimit},
|
|
208
|
+
};
|
|
209
|
+
|
|
210
|
+
export const ${identifier}HonoWebhook = createWebhookMiddleware(options);
|
|
211
|
+
|
|
212
|
+
// Mount manually:
|
|
213
|
+
// const app = new Hono<{ Variables: WebhookVariables }>();
|
|
214
|
+
// app.post('/webhooks/${provider}', ${identifier}HonoWebhook, (c) => {
|
|
215
|
+
// const verified = c.get('webhook');
|
|
216
|
+
// return c.json({ received: true, bytes: verified.rawBody.byteLength });
|
|
217
|
+
// });
|
|
218
|
+
`;
|
|
219
|
+
}
|
|
220
|
+
if (framework === 'cloudflare') {
|
|
221
|
+
return `import { createWebhookHandler } from 'hooklatch/cloudflare';
|
|
222
|
+
import type { VerifyOptions } from 'hooklatch';
|
|
223
|
+
|
|
224
|
+
interface Env {
|
|
225
|
+
${publicKeyEnv}: string;
|
|
226
|
+
${expectedUserEnv}: string;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
${falDecoder()}
|
|
230
|
+
|
|
231
|
+
export const fetch = createWebhookHandler<Env>({
|
|
232
|
+
options: (env) => ({
|
|
233
|
+
provider: '${provider}',
|
|
234
|
+
publicKeys: decodePublicKeys(env.${publicKeyEnv}),
|
|
235
|
+
expectedUserId: env.${expectedUserEnv},
|
|
236
|
+
maxBodyBytes: ${bodyLimit},
|
|
237
|
+
}),
|
|
238
|
+
handler: (_request, _env, _ctx, success) => {
|
|
239
|
+
// Verify first, then parse/validate success.rawBody in your own schema.
|
|
240
|
+
return Response.json({ received: true, bytes: success.rawBody.byteLength });
|
|
241
|
+
},
|
|
242
|
+
});
|
|
243
|
+
|
|
244
|
+
export default { fetch };
|
|
245
|
+
`;
|
|
246
|
+
}
|
|
247
|
+
throw new Error('Unsupported framework.');
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Render one `providerOptions` property line, or nothing for providers without
|
|
251
|
+
* typed configuration. Existing provider output stays byte-identical.
|
|
252
|
+
*/
|
|
253
|
+
function renderProviderOptionsLine(providerOptions, indent) {
|
|
254
|
+
if (providerOptions === undefined)
|
|
255
|
+
return '';
|
|
256
|
+
if (providerOptions.provider === 'grafana') {
|
|
257
|
+
const { mode, signatureHeader, timestampHeader } = providerOptions.options;
|
|
258
|
+
const entries = [`mode: ${quoteStringLiteral(mode)}`];
|
|
259
|
+
if (signatureHeader !== undefined)
|
|
260
|
+
entries.push(`signatureHeader: ${quoteStringLiteral(signatureHeader)}`);
|
|
261
|
+
if (timestampHeader !== undefined)
|
|
262
|
+
entries.push(`timestampHeader: ${quoteStringLiteral(timestampHeader)}`);
|
|
263
|
+
return `${indent}providerOptions: { ${entries.join(', ')} },\n`;
|
|
264
|
+
}
|
|
265
|
+
if (providerOptions.provider === 'polar') {
|
|
266
|
+
return `${indent}providerOptions: { secretMode: ${quoteStringLiteral(providerOptions.options.secretMode)} },\n`;
|
|
267
|
+
}
|
|
268
|
+
return '';
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Serialize a configuration value as a double-quoted TypeScript string. Header
|
|
272
|
+
* names are RFC 9110 tokens, but escaping is still explicit so accepted values
|
|
273
|
+
* such as apostrophes and backticks cannot change generated syntax.
|
|
274
|
+
*/
|
|
275
|
+
function quoteStringLiteral(value) {
|
|
276
|
+
let literal = '"';
|
|
277
|
+
for (const character of value) {
|
|
278
|
+
const code = character.charCodeAt(0);
|
|
279
|
+
if (character === '\\')
|
|
280
|
+
literal += '\\\\';
|
|
281
|
+
else if (character === '"')
|
|
282
|
+
literal += '\\"';
|
|
283
|
+
else if (character === '\n')
|
|
284
|
+
literal += '\\n';
|
|
285
|
+
else if (character === '\r')
|
|
286
|
+
literal += '\\r';
|
|
287
|
+
else if (character === '\t')
|
|
288
|
+
literal += '\\t';
|
|
289
|
+
else if (code < 0x20 || code === 0x7f || character === '\u2028' || character === '\u2029') {
|
|
290
|
+
literal += `\\u${code.toString(16).padStart(4, '0')}`;
|
|
291
|
+
}
|
|
292
|
+
else
|
|
293
|
+
literal += character;
|
|
294
|
+
}
|
|
295
|
+
return `${literal}"`;
|
|
296
|
+
}
|
|
297
|
+
//# sourceMappingURL=templates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/cli/templates.ts"],"names":[],"mappings":"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"}
|
package/dist/core.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { VerificationResult, VerifyOptions, WebhookRequest } from './types.js';
|
|
2
|
+
export declare function verify(request: WebhookRequest, options: VerifyOptions): Promise<VerificationResult>;
|
|
3
|
+
export declare function createVerifier(options: VerifyOptions): (request: WebhookRequest) => Promise<VerificationResult>;
|
|
4
|
+
/** Consumes the original Request once. Successful callers use result.rawBody. */
|
|
5
|
+
export declare function verifyRequest(request: Request, options: VerifyOptions): Promise<VerificationResult>;
|
|
6
|
+
//# sourceMappingURL=core.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAMpF,wBAAsB,MAAM,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAEzG;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,aAAa,GAAG,CAAC,OAAO,EAAE,cAAc,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAI/G;AAED,iFAAiF;AACjF,wBAAsB,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAYzG"}
|
package/dist/core.js
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { HooklatchError } from './errors.js';
|
|
2
|
+
import { prepareVerification } from './internal/prepare.js';
|
|
3
|
+
import { normalizeHeaders } from './internal/headers.js';
|
|
4
|
+
import { readBody } from './internal/body.js';
|
|
5
|
+
import { failure, readClock, verifyPrepared } from './internal/verification.js';
|
|
6
|
+
export async function verify(request, options) {
|
|
7
|
+
return verifyPrepared(request, prepareVerification(options));
|
|
8
|
+
}
|
|
9
|
+
export function createVerifier(options) {
|
|
10
|
+
const prepared = prepareVerification(options);
|
|
11
|
+
return (request) => verifyPrepared(request, prepared);
|
|
12
|
+
}
|
|
13
|
+
/** Consumes the original Request once. Successful callers use result.rawBody. */
|
|
14
|
+
export async function verifyRequest(request, options) {
|
|
15
|
+
const prepared = prepareVerification(options);
|
|
16
|
+
const receivedAt = readClock(prepared);
|
|
17
|
+
if (!(request instanceof Request))
|
|
18
|
+
throw new HooklatchError('invalid-input', 'A Web Request is required.');
|
|
19
|
+
const headers = normalizeHeaders(request.headers);
|
|
20
|
+
const rawBody = await readBody(request, prepared.options.maxBodyBytes);
|
|
21
|
+
if (rawBody === null)
|
|
22
|
+
return failure(prepared, 'body-too-large', 'Request body exceeds the configured limit.');
|
|
23
|
+
// Normalize to tuples so byte and header snapshots share the raw-input path.
|
|
24
|
+
return verifyPrepared({ rawBody, headers: [...headers] }, prepared, receivedAt);
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=core.js.map
|
package/dist/core.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAEhF,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,OAAuB,EAAE,OAAsB;IAC1E,OAAO,cAAc,CAAC,OAAO,EAAE,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAsB;IACnD,MAAM,QAAQ,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAE9C,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,cAAc,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AACxD,CAAC;AAED,iFAAiF;AACjF,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAgB,EAAE,OAAsB;IAC1E,MAAM,QAAQ,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC9C,MAAM,UAAU,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;IAEvC,IAAI,CAAC,CAAC,OAAO,YAAY,OAAO,CAAC;QAAE,MAAM,IAAI,cAAc,CAAC,eAAe,EAAE,4BAA4B,CAAC,CAAC;IAC3G,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAEvE,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,OAAO,CAAC,QAAQ,EAAE,gBAAgB,EAAE,4CAA4C,CAAC,CAAC;IAE/G,6EAA6E;IAC7E,OAAO,cAAc,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,EAAE,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;AAClF,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { HooklatchErrorCode, Provider, VerificationFailureReason } from '../types.js';
|
|
2
|
+
import type { DiagnosticCode } from './types.js';
|
|
3
|
+
/** Static guidance for verification failure reasons. */
|
|
4
|
+
interface Guidance {
|
|
5
|
+
readonly summary: string;
|
|
6
|
+
readonly possibleCauses: readonly string[];
|
|
7
|
+
readonly suggestions: readonly string[];
|
|
8
|
+
}
|
|
9
|
+
/** Provider-specific verbose detail: expected headers and grammar. */
|
|
10
|
+
interface ProviderDetail {
|
|
11
|
+
readonly expectedHeaders: readonly string[];
|
|
12
|
+
readonly grammar: string;
|
|
13
|
+
}
|
|
14
|
+
export declare function getVerificationGuidance(reason: VerificationFailureReason): Guidance;
|
|
15
|
+
export declare function getSetupGuidance(code: HooklatchErrorCode): Guidance;
|
|
16
|
+
export declare function getProviderDetail(provider: Provider): ProviderDetail | undefined;
|
|
17
|
+
export declare function isVerificationCode(code: DiagnosticCode): code is VerificationFailureReason;
|
|
18
|
+
export declare function isSetupCode(code: DiagnosticCode): code is HooklatchErrorCode;
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=catalog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/diagnostics/catalog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,QAAQ,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAC3F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,wDAAwD;AACxD,UAAU,QAAQ;IAChB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;CACzC;AA6OD,sEAAsE;AACtE,UAAU,cAAc;IACtB,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAyFD,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,yBAAyB,GAAG,QAAQ,CAEnF;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,kBAAkB,GAAG,QAAQ,CAEnE;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG,cAAc,GAAG,SAAS,CAEhF;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI,IAAI,yBAAyB,CAE1F;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI,IAAI,kBAAkB,CAE5E"}
|