@arnaudjnn/billing-tools 0.36.1 → 0.36.2
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhook.d.ts","sourceRoot":"","sources":["../../src/routes/webhook.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AAQjC,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4EAA4E;IAC5E,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAC9D;AAOD,wBAAgB,0BAA0B,CAAC,IAAI,GAAE,cAAmB,
|
|
1
|
+
{"version":3,"file":"webhook.d.ts","sourceRoot":"","sources":["../../src/routes/webhook.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AAQjC,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4EAA4E;IAC5E,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAC9D;AAOD,wBAAgB,0BAA0B,CAAC,IAAI,GAAE,cAAmB,IAGpD,SAAS,OAAO,KAAG,OAAO,CAAC,QAAQ,CAAC,CA6DnD"}
|
package/dist/routes/webhook.js
CHANGED
|
@@ -6,14 +6,35 @@ function customerIdOf(v) {
|
|
|
6
6
|
}
|
|
7
7
|
export function createStripeWebhookHandler(opts = {}) {
|
|
8
8
|
const currency = opts.currency ?? "usd";
|
|
9
|
+
let warnedUnconfigured = false;
|
|
9
10
|
return async (request) => {
|
|
11
|
+
// The webhook is OPTIONAL — createBillingSync polls the same events — so an
|
|
12
|
+
// unset secret is a legitimate state (every local dev), not a bug. Say so
|
|
13
|
+
// instead of feeding `undefined` to constructEvent, which fails as
|
|
14
|
+
// "signature verification failed" and sends the reader hunting for a
|
|
15
|
+
// signature mismatch that doesn't exist.
|
|
16
|
+
//
|
|
17
|
+
// 503, not 200: without the secret this delivery genuinely wasn't processed,
|
|
18
|
+
// and an endpoint registered against an environment that has no secret is a
|
|
19
|
+
// misconfiguration worth seeing in Stripe's dashboard. Nothing is lost while
|
|
20
|
+
// it retries — the poller credits the same event under the same idempotency
|
|
21
|
+
// key regardless.
|
|
22
|
+
const secret = process.env.STRIPE_WEBHOOK_SECRET;
|
|
23
|
+
if (!secret) {
|
|
24
|
+
if (!warnedUnconfigured) {
|
|
25
|
+
warnedUnconfigured = true;
|
|
26
|
+
console.warn("[billing] STRIPE_WEBHOOK_SECRET is not set — webhook deliveries are " +
|
|
27
|
+
"rejected; the event poller handles these events instead.");
|
|
28
|
+
}
|
|
29
|
+
return Response.json({ error: "Webhook not configured (STRIPE_WEBHOOK_SECRET unset); events are polled instead" }, { status: 503 });
|
|
30
|
+
}
|
|
10
31
|
const body = await request.text();
|
|
11
32
|
const signature = request.headers.get("stripe-signature");
|
|
12
33
|
if (!signature)
|
|
13
34
|
return Response.json({ error: "Missing signature" }, { status: 400 });
|
|
14
35
|
let event;
|
|
15
36
|
try {
|
|
16
|
-
event = getStripe().webhooks.constructEvent(body, signature,
|
|
37
|
+
event = getStripe().webhooks.constructEvent(body, signature, secret);
|
|
17
38
|
}
|
|
18
39
|
catch (err) {
|
|
19
40
|
const message = err instanceof Error ? err.message : "Unknown error";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhook.js","sourceRoot":"","sources":["../../src/routes/webhook.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAaxD,SAAS,YAAY,CAAC,CAA6C;IACjE,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACpB,OAAO,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,OAAuB,EAAE;IAClE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC;IACxC,OAAO,KAAK,EAAE,OAAgB,EAAqB,EAAE;QACnD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;QAClC,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAC1D,IAAI,CAAC,SAAS;YAAE,OAAO,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QAEtF,IAAI,KAAmB,CAAC;QACxB,IAAI,CAAC;YACH,KAAK,GAAG,SAAS,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"webhook.js","sourceRoot":"","sources":["../../src/routes/webhook.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@arnaudjnn/billing-tools",
|
|
3
|
-
"version": "0.36.
|
|
3
|
+
"version": "0.36.2",
|
|
4
4
|
"description": "The get-paid engine for Stripe + WorkOS apps, for humans and AI agents. Drop-in API-key auth, token/credit + subscription billing, auth.md agent registration, and MPP machine payments, as MCP tools, a REST API, and a CLI. Framework-agnostic, storage-pluggable.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Arnaud Jeannin",
|