@lunora/auth 1.0.0-alpha.137 → 1.0.0-alpha.139

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.
@@ -74,8 +74,15 @@ interface VerifyTurnstileMiddlewareOptions<Context> {
74
74
  *
75
75
  * On a `success: false` verdict (or a missing token) it throws a structural
76
76
  * `LunoraError` (`{ name: "LunoraError", code: "FORBIDDEN", status: 403 }`) —
77
- * the runtime maps it to the matching RPC/HTTP status without any runtime
78
- * import of `@lunora/server` (the `Middleware` import is type-only).
77
+ * the runtime maps it to the matching RPC/HTTP status without any import of
78
+ * the error machinery from `@lunora/server`.
79
+ *
80
+ * The middleware is tagged PER-DISPATCH: a Turnstile token is single-use, so
81
+ * verifying one is an effect of the request that a memoized response cannot
82
+ * stand in for. The builder hoists the mark onto the registered function and
83
+ * the generated `isCacheableQuery` keeps such a query out of the reactive
84
+ * cache — a hit answers without running this chain, so one solved token would
85
+ * otherwise admit every request the memo served.
79
86
  *
80
87
  * **Failure policy:** if the siteverify call itself throws, the middleware
81
88
  * **fails closed by default** (logs and rejects with 403). Pass
@@ -74,8 +74,15 @@ interface VerifyTurnstileMiddlewareOptions<Context> {
74
74
  *
75
75
  * On a `success: false` verdict (or a missing token) it throws a structural
76
76
  * `LunoraError` (`{ name: "LunoraError", code: "FORBIDDEN", status: 403 }`) —
77
- * the runtime maps it to the matching RPC/HTTP status without any runtime
78
- * import of `@lunora/server` (the `Middleware` import is type-only).
77
+ * the runtime maps it to the matching RPC/HTTP status without any import of
78
+ * the error machinery from `@lunora/server`.
79
+ *
80
+ * The middleware is tagged PER-DISPATCH: a Turnstile token is single-use, so
81
+ * verifying one is an effect of the request that a memoized response cannot
82
+ * stand in for. The builder hoists the mark onto the registered function and
83
+ * the generated `isCacheableQuery` keeps such a query out of the reactive
84
+ * cache — a hit answers without running this chain, so one solved token would
85
+ * otherwise admit every request the memo served.
79
86
  *
80
87
  * **Failure policy:** if the siteverify call itself throws, the middleware
81
88
  * **fails closed by default** (logs and rejects with 403). Pass
@@ -1 +1 @@
1
- import{LunoraError as i}from"@lunora/errors";import{verifyTurnstile as n}from"./turnstile.mjs";const f=e=>async({ctx:a,next:l})=>{const t=e.token(a);if(t===void 0||t==="")throw new i("FORBIDDEN",e.message??"turnstile token missing");let r;try{r=await n({expectedAction:e.expectedAction,expectedHostname:e.expectedHostname,fetch:e.fetch,remoteip:e.remoteip?.(a),secret:e.secret,token:t})}catch(c){if(console.error(`@lunora/auth: verifyTurnstileMiddleware siteverify threw; ${e.failOpen?"failing open":"failing closed"}`,c),e.failOpen)return l();throw new i("FORBIDDEN",e.message??"turnstile verification unavailable",{cause:c})}if(!r.success||e.validate!==void 0&&e.validate(r)!==!0)throw new i("FORBIDDEN",e.message??"turnstile verification failed",{data:r.errorCodes.length>0?{errorCodes:r.errorCodes}:void 0});return l()};export{f as verifyTurnstileMiddleware};
1
+ import{LunoraError as i}from"@lunora/errors";import{tagPerDispatchMiddleware as d}from"@lunora/server";import{verifyTurnstile as n}from"./turnstile.mjs";const u=e=>d(async({ctx:a,next:l})=>{const t=e.token(a);if(t===void 0||t==="")throw new i("FORBIDDEN",e.message??"turnstile token missing");let r;try{r=await n({expectedAction:e.expectedAction,expectedHostname:e.expectedHostname,fetch:e.fetch,remoteip:e.remoteip?.(a),secret:e.secret,token:t})}catch(c){if(console.error(`@lunora/auth: verifyTurnstileMiddleware siteverify threw; ${e.failOpen?"failing open":"failing closed"}`,c),e.failOpen)return l();throw new i("FORBIDDEN",e.message??"turnstile verification unavailable",{cause:c})}if(!r.success||e.validate!==void 0&&e.validate(r)!==!0)throw new i("FORBIDDEN",e.message??"turnstile verification failed",{data:r.errorCodes.length>0?{errorCodes:r.errorCodes}:void 0});return l()});export{u as verifyTurnstileMiddleware};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lunora/auth",
3
- "version": "1.0.0-alpha.137",
3
+ "version": "1.0.0-alpha.139",
4
4
  "description": "Auth for Lunora — a thin better-auth wrapper: email/password, OAuth, plugins, D1-backed",
5
5
  "keywords": [
6
6
  "auth",