@lunora/advisor 1.0.0-alpha.50 → 1.0.0-alpha.52

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/dist/index.d.mts CHANGED
@@ -912,6 +912,16 @@ interface AdvisorProcedureProtection {
912
912
  fanOut: boolean;
913
913
  /** Source file relative to the lunora dir, no extension. */
914
914
  file: string;
915
+ /**
916
+ * `true` when the procedure declares an email-shaped argument. Read by the
917
+ * `signup_mutation_without_disposable_gating` lint: `emailGateMiddleware`
918
+ * gates an address selected off the args, so a procedure that never receives
919
+ * one cannot action the lint no matter what table it writes.
920
+ *
921
+ * Optional so a feeder predating this field (or a runtime caller) is treated
922
+ * as "unknown" rather than silently clearing every finding.
923
+ */
924
+ hasEmailArg?: boolean;
915
925
  /** Registration kind — `query` is read-only; `mutation`/`action` are write-shaped. */
916
926
  kind: "action" | "mutation" | "query";
917
927
  /** `true` when the handler runs an AI generation (`generateText`/`streamText`/`generateObject`/`streamObject`) with no `maxOutputTokens` bound. Read by the `ai_unbounded_generation_public` lint (paired with public visibility). */
@@ -3633,6 +3643,13 @@ declare const shapeUnknownTable: Lint;
3633
3643
  * lint (a CAPTCHA stops bots; the email gate stops throwaway domains — both are
3634
3644
  * worth having).
3635
3645
  *
3646
+ * A procedure that declares **no email-shaped argument** is skipped: the gate
3647
+ * needs a selector onto an address, so there is nothing to action. Without that
3648
+ * check the lint fired on B2B membership writes — `members.add(userId, role)`,
3649
+ * `organizations.create(name, slug)` — whose only tie to the user table is the
3650
+ * word "member", and told the developer to write `email: (ctx) => ctx.args.email`
3651
+ * for an argument that does not exist.
3652
+ *
3636
3653
  * Runs only when the codegen feeder supplies protection evidence
3637
3654
  * (`context.procedureProtections`); a runtime caller with no evidence flags
3638
3655
  * nothing.
package/dist/index.d.ts CHANGED
@@ -912,6 +912,16 @@ interface AdvisorProcedureProtection {
912
912
  fanOut: boolean;
913
913
  /** Source file relative to the lunora dir, no extension. */
914
914
  file: string;
915
+ /**
916
+ * `true` when the procedure declares an email-shaped argument. Read by the
917
+ * `signup_mutation_without_disposable_gating` lint: `emailGateMiddleware`
918
+ * gates an address selected off the args, so a procedure that never receives
919
+ * one cannot action the lint no matter what table it writes.
920
+ *
921
+ * Optional so a feeder predating this field (or a runtime caller) is treated
922
+ * as "unknown" rather than silently clearing every finding.
923
+ */
924
+ hasEmailArg?: boolean;
915
925
  /** Registration kind — `query` is read-only; `mutation`/`action` are write-shaped. */
916
926
  kind: "action" | "mutation" | "query";
917
927
  /** `true` when the handler runs an AI generation (`generateText`/`streamText`/`generateObject`/`streamObject`) with no `maxOutputTokens` bound. Read by the `ai_unbounded_generation_public` lint (paired with public visibility). */
@@ -3633,6 +3643,13 @@ declare const shapeUnknownTable: Lint;
3633
3643
  * lint (a CAPTCHA stops bots; the email gate stops throwaway domains — both are
3634
3644
  * worth having).
3635
3645
  *
3646
+ * A procedure that declares **no email-shaped argument** is skipped: the gate
3647
+ * needs a selector onto an address, so there is nothing to action. Without that
3648
+ * check the lint fired on B2B membership writes — `members.add(userId, role)`,
3649
+ * `organizations.create(name, slug)` — whose only tie to the user table is the
3650
+ * word "member", and told the developer to write `email: (ctx) => ctx.args.email`
3651
+ * for an argument that does not exist.
3652
+ *
3636
3653
  * Runs only when the codegen feeder supplies protection evidence
3637
3654
  * (`context.procedureProtections`); a runtime caller with no evidence flags
3638
3655
  * nothing.
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- import{dedupeCacheKeys as a}from"./packem_shared/dedupeCacheKeys-7JgxaQWV.mjs";import m from"./packem_shared/constraintValidator-N339mfyx.mjs";import s from"./packem_shared/hotShard-DVs_U17R.mjs";import n from"./packem_shared/indexUtilization-QfbIH_w4.mjs";import p from"./packem_shared/actionFetchSsrf-BbWxy1Yf.mjs";import f from"./packem_shared/adminRouteWithoutGuard-DSo4t9j4.mjs";import l from"./packem_shared/aiRawRunEscapeHatch-DfhjYm43.mjs";import u from"./packem_shared/aiToolSideEffectPromptInjection-DnWQOoKi.mjs";import d from"./packem_shared/aiUnboundedGenerationPublic-D3HZrh5_.mjs";import c from"./packem_shared/allowUnauthenticatedShardAccessEnabled-D4aMNBb0.mjs";import $ from"./packem_shared/authApiCallWithoutHeaders-BItMMdZP.mjs";import h from"./packem_shared/authCsrfCheckDisabled-De9ammtV.mjs";import g from"./packem_shared/authEmailVerificationDisabled-BFKdJcx4.mjs";import U from"./packem_shared/authSecureCookiesDisabled-B4WIzvMm.mjs";import b from"./packem_shared/authSessionFreshageZero-Bpcaf_Pe.mjs";import S from"./packem_shared/authScimWithoutTransactions-DCtLXzks.mjs";import I from"./packem_shared/authTrustedOriginsWildcard-DjU9NXEm.mjs";import A from"./packem_shared/browserAllowPrivateTargets-Dxyeh6lg.mjs";import T from"./packem_shared/browserUserUrlWithoutAllowlist-BHBS6b0N.mjs";import y from"./packem_shared/circularFk-BMuJKmuZ.mjs";import w from"./packem_shared/containerInstanceKeyFromUserInput-C8S4T3ty.mjs";import R from"./packem_shared/containerOversizedInstance-B9wW_sU5.mjs";import k from"./packem_shared/containerPublicInternet-Bx2J7tha.mjs";import W from"./packem_shared/containerRuntimeEgressRelaxation-BQ2ZD1aV.mjs";import F from"./packem_shared/containerStartEnableInternetOverride-B62WUura.mjs";import x from"./packem_shared/duplicateIndex-DFT7qLQD.mjs";import C from"./packem_shared/emptyIndex-BiXEfyfN.mjs";import P from"./packem_shared/exportSinkMisconfigured-DvpAaa6j.mjs";import v from"./packem_shared/externalSourceIncrementalNoDeletePath-DnoL64YY.mjs";import M from"./packem_shared/externalSourceOnGlobal-DNPLoNUg.mjs";import D from"./packem_shared/externalSourceUnscoped-DqBp5jYr.mjs";import N from"./packem_shared/filterWithoutIndex-ht2GZQWV.mjs";import O from"./packem_shared/flagGatesSecurityWithUnsafeDefault-DPGFEHTt.mjs";import E from"./packem_shared/geoIndexFieldNotGeopoint-DAGLZtaH.mjs";import G from"./packem_shared/geoIndexUnused-BgDE6_AR.mjs";import z from"./packem_shared/hardcodedSecret-rIRc3aNk.mjs";import K from"./packem_shared/httpActionMissingAuthGuard-BZDdeW_D.mjs";import L from"./packem_shared/httpActionResponseHeaderInjection-D063rB7U.mjs";import V from"./packem_shared/hyperdriveOutsideAction-CRmOQz67.mjs";import j from"./packem_shared/identityUndeclaredClaimTrusted-BYRYGQ74.mjs";import q from"./packem_shared/imagesUrlSourceFromUserInput-Cy5pc_dA.mjs";import _ from"./packem_shared/indexReferencesUnknownField-r3QHlaz6.mjs";import H from"./packem_shared/insertManyUnsafeUserData-DrH7PdRs.mjs";import B from"./packem_shared/kvUnscopedUserKeyIdor-B4lGxRxh.mjs";import Q from"./packem_shared/mailInboundDispatchWithoutVerify-BivYJ5F9.mjs";import Z from"./packem_shared/mailRecipientFromRequestInput-BR_oSh65.mjs";import J from"./packem_shared/maskUncoveredPiiColumn-DqPfZM2O.mjs";import X from"./packem_shared/maskWeakHashStrategyOnPii-CEiiGgT7.mjs";import Y from"./packem_shared/maskedRelationLeakViaWith-CxYk0MDW.mjs";import oo from"./packem_shared/mutatorFullRowReplace-CEgecSGm.mjs";import ro from"./packem_shared/nondeterministicQueryMutation-BaMfbAk_.mjs";import to from"./packem_shared/normalizeIdUsedAsAuthorization-FjISSXJm.mjs";import io from"./packem_shared/notifyMissingPushConfig-C_GbVw3S.mjs";import eo from"./packem_shared/notifySendOutsideAction-B0jZuUP3.mjs";import ao from"./packem_shared/outputProjectionMissingOnPublicRead-9Pm9766s.mjs";import mo from"./packem_shared/ownerFieldFromArgsNotAuth-BoR9vvst.mjs";import so from"./packem_shared/paymentCreateWithoutAuthorize-CurtqN8K.mjs";import no from"./packem_shared/paymentWebhookWideTolerance-I7ingfR8.mjs";import po from"./packem_shared/plaintextSecretInWranglerVariables-DXjKIm8H.mjs";import fo from"./packem_shared/policyReferencesUnknownTable-D3WelAQa.mjs";import lo from"./packem_shared/privilegedDispatchUnvalidatedPayload-74GuGye1.mjs";import uo from"./packem_shared/privilegedFanoutFromPublicProcedure-C2j2GSUN.mjs";import co from"./packem_shared/publicArgumentUsesAny-BJb4cTqL.mjs";import $o from"./packem_shared/publicMutationWithoutRatelimit-D9phluHW.mjs";import ho from"./packem_shared/publicTableRlsOptoutConfusion-CaWtPGAn.mjs";import go from"./packem_shared/queueWithoutDlq-BLY3iy9Q.mjs";import Uo from"./packem_shared/r2sqlOutsideAction-CKK_I1Ms.mjs";import bo from"./packem_shared/ratelimitDefaultMemoryStore-mOdI3Jmb.mjs";import So from"./packem_shared/ratelimitKeySpoofableOrGlobal-DaGId_Fh.mjs";import Io from"./packem_shared/ratelimitMiddlewareFailOpen-CTWVosEc.mjs";import Ao from"./packem_shared/relationReferencesUnknownField-clqyB69Y.mjs";import To from"./packem_shared/relationReferencesUnknownTable-CLdrhkmS.mjs";import yo from"./packem_shared/rlsUncoveredTable-DYHgnoos.mjs";import wo from"./packem_shared/shapeTargetsGlobalTable-Blz-aSkg.mjs";import Ro from"./packem_shared/shapeUnknownTable-DFxtyFio.mjs";import ko from"./packem_shared/signupMutationWithoutDisposableGating-3ir808Vz.mjs";import Wo from"./packem_shared/softDeleteIncludeDeletedFromArgs-DgxpQHRA.mjs";import Fo from"./packem_shared/sqlInjectionRisk-D2NaT-5c.mjs";import xo from"./packem_shared/storageGenerateUploadUrlNoContentTypePin-C9cjl6Jh.mjs";import Co from"./packem_shared/storageKeyFromUserArgs-BeS5cp56.mjs";import Po from"./packem_shared/storagePresignedUrlForPrivateContent-j7VhwIdu.mjs";import vo from"./packem_shared/storageUploadWithoutContentTypeAllowlist-oxKLecuf.mjs";import Mo from"./packem_shared/storageUploadWithoutMaxSize-DUDxPutk.mjs";import Do from"./packem_shared/tableWithoutInsert-D3AhaNzR.mjs";import No from"./packem_shared/ttlFieldNotTimestamp-BFiRkSZD.mjs";import Oo from"./packem_shared/unboundedStringArgument-AkkIcr-S.mjs";import Eo from"./packem_shared/unindexedForeignKey-DK4eWXkb.mjs";import Go from"./packem_shared/unindexedRelationTarget-B5fFq1E8.mjs";import zo from"./packem_shared/unrestrictedWhereBranch-YKiydie4.mjs";import Ko from"./packem_shared/userCreatingMutationWithoutCaptcha-iDjRkUFO.mjs";import Lo from"./packem_shared/vectorsNamespaceFromUserInput-Cyq5B2kF.mjs";import Vo from"./packem_shared/workflowDuplicateStepName-cXF6Rpvg.mjs";import jo from"./packem_shared/workflowUnknownTarget-JF8rITLP.mjs";import qo from"./packem_shared/workflowUnused-Dx_FQwGE.mjs";import{AE_METRIC_EVENTS as Et,loadAnalyticsRuntimeMetrics as Gt}from"./packem_shared/AE_METRIC_EVENTS-LP_0D7Uw.mjs";import{fromServerSchema as Kt}from"./packem_shared/fromServerSchema-CJ-AQ2kw.mjs";const _o=[_,To,Ao,jo,Vo,Ro,v,M,D,C,E,G,P,No,y,Eo,Go,x,Do,qo,go,N,wo,oo,ro,V,Uo,$,fo,yo,J,X,R,k,$o,zo,Ko,ko,co,Oo,z,Fo,f,so,Q,bo,A,uo,H,d,p,mo,Co,B,w,l,Lo,Z,T,lo,F,W,S,I,h,U,g,b,q,So,ho,c,vo,Mo,xo,Po,K,L,Io,O,u,j,no,Wo,Y,ao,to,eo,io,po],Ho=[s,n,m],Bo=[..._o,...Ho],Dt=(i,o={})=>{const e=o.lints??Bo,r=[];for(const t of e)o.source!==void 0&&t.source!==o.source||r.push(...t.run(i));return a(r)};export{Et as AE_METRIC_EVENTS,Bo as ALL_LINTS,Ho as RUNTIME_LINTS,_o as STATIC_LINTS,p as actionFetchSsrf,f as adminRouteWithoutGuard,l as aiRawRunEscapeHatch,u as aiToolSideEffectPromptInjection,d as aiUnboundedGenerationPublic,c as allowUnauthenticatedShardAccessEnabled,$ as authApiCallWithoutHeaders,h as authCsrfCheckDisabled,g as authEmailVerificationDisabled,S as authScimWithoutTransactions,U as authSecureCookiesDisabled,b as authSessionFreshageZero,I as authTrustedOriginsWildcard,A as browserAllowPrivateTargets,T as browserUserUrlWithoutAllowlist,y as circularFk,m as constraintValidator,w as containerInstanceKeyFromUserInput,R as containerOversizedInstance,k as containerPublicInternet,W as containerRuntimeEgressRelaxation,F as containerStartEnableInternetOverride,a as dedupeCacheKeys,x as duplicateIndex,C as emptyIndex,P as exportSinkMisconfigured,v as externalSourceIncrementalNoDeletePath,M as externalSourceOnGlobal,D as externalSourceUnscoped,N as filterWithoutIndex,O as flagGatesSecurityWithUnsafeDefault,Kt as fromServerSchema,E as geoIndexFieldNotGeopoint,G as geoIndexUnused,z as hardcodedSecret,s as hotShard,K as httpActionMissingAuthGuard,L as httpActionResponseHeaderInjection,V as hyperdriveOutsideAction,j as identityUndeclaredClaimTrusted,q as imagesUrlSourceFromUserInput,_ as indexReferencesUnknownField,n as indexUtilization,H as insertManyUnsafeUserData,B as kvUnscopedUserKeyIdor,Gt as loadAnalyticsRuntimeMetrics,Q as mailInboundDispatchWithoutVerify,Z as mailRecipientFromRequestInput,J as maskUncoveredPiiColumn,X as maskWeakHashStrategyOnPii,Y as maskedRelationLeakViaWith,oo as mutatorFullRowReplace,ro as nondeterministicQueryMutation,to as normalizeIdUsedAsAuthorization,io as notifyMissingPushConfig,eo as notifySendOutsideAction,ao as outputProjectionMissingOnPublicRead,mo as ownerFieldFromArgsNotAuth,so as paymentCreateWithoutAuthorize,no as paymentWebhookWideTolerance,po as plaintextSecretInWranglerVariables,fo as policyReferencesUnknownTable,lo as privilegedDispatchUnvalidatedPayload,uo as privilegedFanoutFromPublicProcedure,co as publicArgumentUsesAny,$o as publicMutationWithoutRatelimit,ho as publicTableRlsOptoutConfusion,go as queueWithoutDlq,Uo as r2sqlOutsideAction,bo as ratelimitDefaultMemoryStore,So as ratelimitKeySpoofableOrGlobal,Io as ratelimitMiddlewareFailOpen,Ao as relationReferencesUnknownField,To as relationReferencesUnknownTable,yo as rlsUncoveredTable,Dt as runAdvisor,wo as shapeTargetsGlobalTable,Ro as shapeUnknownTable,ko as signupMutationWithoutDisposableGating,Wo as softDeleteIncludeDeletedFromArgs,Fo as sqlInjectionRisk,xo as storageGenerateUploadUrlNoContentTypePin,Co as storageKeyFromUserArgs,Po as storagePresignedUrlForPrivateContent,vo as storageUploadWithoutContentTypeAllowlist,Mo as storageUploadWithoutMaxSize,Do as tableWithoutInsert,No as ttlFieldNotTimestamp,Oo as unboundedStringArgument,Eo as unindexedForeignKey,Go as unindexedRelationTarget,zo as unrestrictedWhereBranch,Ko as userCreatingMutationWithoutCaptcha,Lo as vectorsNamespaceFromUserInput,Vo as workflowDuplicateStepName,jo as workflowUnknownTarget,qo as workflowUnused};
1
+ import{dedupeCacheKeys as a}from"./packem_shared/dedupeCacheKeys-7JgxaQWV.mjs";import m from"./packem_shared/constraintValidator-N339mfyx.mjs";import s from"./packem_shared/hotShard-DVs_U17R.mjs";import n from"./packem_shared/indexUtilization-QfbIH_w4.mjs";import p from"./packem_shared/actionFetchSsrf-BbWxy1Yf.mjs";import f from"./packem_shared/adminRouteWithoutGuard-DSo4t9j4.mjs";import l from"./packem_shared/aiRawRunEscapeHatch-DfhjYm43.mjs";import u from"./packem_shared/aiToolSideEffectPromptInjection-DnWQOoKi.mjs";import d from"./packem_shared/aiUnboundedGenerationPublic-D3HZrh5_.mjs";import c from"./packem_shared/allowUnauthenticatedShardAccessEnabled-D4aMNBb0.mjs";import $ from"./packem_shared/authApiCallWithoutHeaders-BItMMdZP.mjs";import h from"./packem_shared/authCsrfCheckDisabled-De9ammtV.mjs";import g from"./packem_shared/authEmailVerificationDisabled-BFKdJcx4.mjs";import U from"./packem_shared/authSecureCookiesDisabled-B4WIzvMm.mjs";import b from"./packem_shared/authSessionFreshageZero-Bpcaf_Pe.mjs";import S from"./packem_shared/authScimWithoutTransactions-DCtLXzks.mjs";import I from"./packem_shared/authTrustedOriginsWildcard-DjU9NXEm.mjs";import A from"./packem_shared/browserAllowPrivateTargets-Dxyeh6lg.mjs";import T from"./packem_shared/browserUserUrlWithoutAllowlist-BHBS6b0N.mjs";import y from"./packem_shared/circularFk-BMuJKmuZ.mjs";import w from"./packem_shared/containerInstanceKeyFromUserInput-C8S4T3ty.mjs";import R from"./packem_shared/containerOversizedInstance-B9wW_sU5.mjs";import k from"./packem_shared/containerPublicInternet-Bx2J7tha.mjs";import W from"./packem_shared/containerRuntimeEgressRelaxation-BQ2ZD1aV.mjs";import F from"./packem_shared/containerStartEnableInternetOverride-B62WUura.mjs";import x from"./packem_shared/duplicateIndex-DFT7qLQD.mjs";import C from"./packem_shared/emptyIndex-BiXEfyfN.mjs";import P from"./packem_shared/exportSinkMisconfigured-DvpAaa6j.mjs";import v from"./packem_shared/externalSourceIncrementalNoDeletePath-DnoL64YY.mjs";import M from"./packem_shared/externalSourceOnGlobal-DNPLoNUg.mjs";import D from"./packem_shared/externalSourceUnscoped-DqBp5jYr.mjs";import N from"./packem_shared/filterWithoutIndex-ht2GZQWV.mjs";import O from"./packem_shared/flagGatesSecurityWithUnsafeDefault-DPGFEHTt.mjs";import E from"./packem_shared/geoIndexFieldNotGeopoint-DAGLZtaH.mjs";import G from"./packem_shared/geoIndexUnused-BgDE6_AR.mjs";import z from"./packem_shared/hardcodedSecret-rIRc3aNk.mjs";import K from"./packem_shared/httpActionMissingAuthGuard-BZDdeW_D.mjs";import L from"./packem_shared/httpActionResponseHeaderInjection-D063rB7U.mjs";import V from"./packem_shared/hyperdriveOutsideAction-CRmOQz67.mjs";import j from"./packem_shared/identityUndeclaredClaimTrusted-BYRYGQ74.mjs";import q from"./packem_shared/imagesUrlSourceFromUserInput-Cy5pc_dA.mjs";import _ from"./packem_shared/indexReferencesUnknownField-r3QHlaz6.mjs";import H from"./packem_shared/insertManyUnsafeUserData-DrH7PdRs.mjs";import B from"./packem_shared/kvUnscopedUserKeyIdor-B4lGxRxh.mjs";import Q from"./packem_shared/mailInboundDispatchWithoutVerify-BivYJ5F9.mjs";import Z from"./packem_shared/mailRecipientFromRequestInput-BR_oSh65.mjs";import J from"./packem_shared/maskUncoveredPiiColumn-DqPfZM2O.mjs";import X from"./packem_shared/maskWeakHashStrategyOnPii-CEiiGgT7.mjs";import Y from"./packem_shared/maskedRelationLeakViaWith-CxYk0MDW.mjs";import oo from"./packem_shared/mutatorFullRowReplace-CEgecSGm.mjs";import ro from"./packem_shared/nondeterministicQueryMutation-BaMfbAk_.mjs";import to from"./packem_shared/normalizeIdUsedAsAuthorization-FjISSXJm.mjs";import io from"./packem_shared/notifyMissingPushConfig-C_GbVw3S.mjs";import eo from"./packem_shared/notifySendOutsideAction-B0jZuUP3.mjs";import ao from"./packem_shared/outputProjectionMissingOnPublicRead-9Pm9766s.mjs";import mo from"./packem_shared/ownerFieldFromArgsNotAuth-BoR9vvst.mjs";import so from"./packem_shared/paymentCreateWithoutAuthorize-CurtqN8K.mjs";import no from"./packem_shared/paymentWebhookWideTolerance-I7ingfR8.mjs";import po from"./packem_shared/plaintextSecretInWranglerVariables-DXjKIm8H.mjs";import fo from"./packem_shared/policyReferencesUnknownTable-D3WelAQa.mjs";import lo from"./packem_shared/privilegedDispatchUnvalidatedPayload-74GuGye1.mjs";import uo from"./packem_shared/privilegedFanoutFromPublicProcedure-C2j2GSUN.mjs";import co from"./packem_shared/publicArgumentUsesAny-BJb4cTqL.mjs";import $o from"./packem_shared/publicMutationWithoutRatelimit-D9phluHW.mjs";import ho from"./packem_shared/publicTableRlsOptoutConfusion-CaWtPGAn.mjs";import go from"./packem_shared/queueWithoutDlq-BLY3iy9Q.mjs";import Uo from"./packem_shared/r2sqlOutsideAction-CKK_I1Ms.mjs";import bo from"./packem_shared/ratelimitDefaultMemoryStore-mOdI3Jmb.mjs";import So from"./packem_shared/ratelimitKeySpoofableOrGlobal-DaGId_Fh.mjs";import Io from"./packem_shared/ratelimitMiddlewareFailOpen-CTWVosEc.mjs";import Ao from"./packem_shared/relationReferencesUnknownField-clqyB69Y.mjs";import To from"./packem_shared/relationReferencesUnknownTable-CLdrhkmS.mjs";import yo from"./packem_shared/rlsUncoveredTable-DYHgnoos.mjs";import wo from"./packem_shared/shapeTargetsGlobalTable-Blz-aSkg.mjs";import Ro from"./packem_shared/shapeUnknownTable-DFxtyFio.mjs";import ko from"./packem_shared/signupMutationWithoutDisposableGating-BNzlsE0F.mjs";import Wo from"./packem_shared/softDeleteIncludeDeletedFromArgs-DgxpQHRA.mjs";import Fo from"./packem_shared/sqlInjectionRisk-D2NaT-5c.mjs";import xo from"./packem_shared/storageGenerateUploadUrlNoContentTypePin-C9cjl6Jh.mjs";import Co from"./packem_shared/storageKeyFromUserArgs-BeS5cp56.mjs";import Po from"./packem_shared/storagePresignedUrlForPrivateContent-j7VhwIdu.mjs";import vo from"./packem_shared/storageUploadWithoutContentTypeAllowlist-oxKLecuf.mjs";import Mo from"./packem_shared/storageUploadWithoutMaxSize-DUDxPutk.mjs";import Do from"./packem_shared/tableWithoutInsert-D3AhaNzR.mjs";import No from"./packem_shared/ttlFieldNotTimestamp-BFiRkSZD.mjs";import Oo from"./packem_shared/unboundedStringArgument-AkkIcr-S.mjs";import Eo from"./packem_shared/unindexedForeignKey-DK4eWXkb.mjs";import Go from"./packem_shared/unindexedRelationTarget-B5fFq1E8.mjs";import zo from"./packem_shared/unrestrictedWhereBranch-YKiydie4.mjs";import Ko from"./packem_shared/userCreatingMutationWithoutCaptcha-iDjRkUFO.mjs";import Lo from"./packem_shared/vectorsNamespaceFromUserInput-Cyq5B2kF.mjs";import Vo from"./packem_shared/workflowDuplicateStepName-cXF6Rpvg.mjs";import jo from"./packem_shared/workflowUnknownTarget-JF8rITLP.mjs";import qo from"./packem_shared/workflowUnused-Dx_FQwGE.mjs";import{AE_METRIC_EVENTS as Et,loadAnalyticsRuntimeMetrics as Gt}from"./packem_shared/AE_METRIC_EVENTS-LP_0D7Uw.mjs";import{fromServerSchema as Kt}from"./packem_shared/fromServerSchema-CJ-AQ2kw.mjs";const _o=[_,To,Ao,jo,Vo,Ro,v,M,D,C,E,G,P,No,y,Eo,Go,x,Do,qo,go,N,wo,oo,ro,V,Uo,$,fo,yo,J,X,R,k,$o,zo,Ko,ko,co,Oo,z,Fo,f,so,Q,bo,A,uo,H,d,p,mo,Co,B,w,l,Lo,Z,T,lo,F,W,S,I,h,U,g,b,q,So,ho,c,vo,Mo,xo,Po,K,L,Io,O,u,j,no,Wo,Y,ao,to,eo,io,po],Ho=[s,n,m],Bo=[..._o,...Ho],Dt=(i,o={})=>{const e=o.lints??Bo,r=[];for(const t of e)o.source!==void 0&&t.source!==o.source||r.push(...t.run(i));return a(r)};export{Et as AE_METRIC_EVENTS,Bo as ALL_LINTS,Ho as RUNTIME_LINTS,_o as STATIC_LINTS,p as actionFetchSsrf,f as adminRouteWithoutGuard,l as aiRawRunEscapeHatch,u as aiToolSideEffectPromptInjection,d as aiUnboundedGenerationPublic,c as allowUnauthenticatedShardAccessEnabled,$ as authApiCallWithoutHeaders,h as authCsrfCheckDisabled,g as authEmailVerificationDisabled,S as authScimWithoutTransactions,U as authSecureCookiesDisabled,b as authSessionFreshageZero,I as authTrustedOriginsWildcard,A as browserAllowPrivateTargets,T as browserUserUrlWithoutAllowlist,y as circularFk,m as constraintValidator,w as containerInstanceKeyFromUserInput,R as containerOversizedInstance,k as containerPublicInternet,W as containerRuntimeEgressRelaxation,F as containerStartEnableInternetOverride,a as dedupeCacheKeys,x as duplicateIndex,C as emptyIndex,P as exportSinkMisconfigured,v as externalSourceIncrementalNoDeletePath,M as externalSourceOnGlobal,D as externalSourceUnscoped,N as filterWithoutIndex,O as flagGatesSecurityWithUnsafeDefault,Kt as fromServerSchema,E as geoIndexFieldNotGeopoint,G as geoIndexUnused,z as hardcodedSecret,s as hotShard,K as httpActionMissingAuthGuard,L as httpActionResponseHeaderInjection,V as hyperdriveOutsideAction,j as identityUndeclaredClaimTrusted,q as imagesUrlSourceFromUserInput,_ as indexReferencesUnknownField,n as indexUtilization,H as insertManyUnsafeUserData,B as kvUnscopedUserKeyIdor,Gt as loadAnalyticsRuntimeMetrics,Q as mailInboundDispatchWithoutVerify,Z as mailRecipientFromRequestInput,J as maskUncoveredPiiColumn,X as maskWeakHashStrategyOnPii,Y as maskedRelationLeakViaWith,oo as mutatorFullRowReplace,ro as nondeterministicQueryMutation,to as normalizeIdUsedAsAuthorization,io as notifyMissingPushConfig,eo as notifySendOutsideAction,ao as outputProjectionMissingOnPublicRead,mo as ownerFieldFromArgsNotAuth,so as paymentCreateWithoutAuthorize,no as paymentWebhookWideTolerance,po as plaintextSecretInWranglerVariables,fo as policyReferencesUnknownTable,lo as privilegedDispatchUnvalidatedPayload,uo as privilegedFanoutFromPublicProcedure,co as publicArgumentUsesAny,$o as publicMutationWithoutRatelimit,ho as publicTableRlsOptoutConfusion,go as queueWithoutDlq,Uo as r2sqlOutsideAction,bo as ratelimitDefaultMemoryStore,So as ratelimitKeySpoofableOrGlobal,Io as ratelimitMiddlewareFailOpen,Ao as relationReferencesUnknownField,To as relationReferencesUnknownTable,yo as rlsUncoveredTable,Dt as runAdvisor,wo as shapeTargetsGlobalTable,Ro as shapeUnknownTable,ko as signupMutationWithoutDisposableGating,Wo as softDeleteIncludeDeletedFromArgs,Fo as sqlInjectionRisk,xo as storageGenerateUploadUrlNoContentTypePin,Co as storageKeyFromUserArgs,Po as storagePresignedUrlForPrivateContent,vo as storageUploadWithoutContentTypeAllowlist,Mo as storageUploadWithoutMaxSize,Do as tableWithoutInsert,No as ttlFieldNotTimestamp,Oo as unboundedStringArgument,Eo as unindexedForeignKey,Go as unindexedRelationTarget,zo as unrestrictedWhereBranch,Ko as userCreatingMutationWithoutCaptcha,Lo as vectorsNamespaceFromUserInput,Vo as workflowDuplicateStepName,jo as workflowUnknownTarget,qo as workflowUnused};
@@ -1 +1 @@
1
- import{i}from"./finding-BAVgqnCF.mjs";import{i as s}from"./helpers-DwlvEUCh.mjs";const o={categories:["SECURITY"],description:"A public `mutation`/`action` that creates a user/session/account row has no disposable-email gate. Throwaway mailboxes farm free trials, evade bans, and pollute the user table.",facing:"EXTERNAL",level:"WARN",name:"signup_mutation_without_disposable_gating",remediation:"Add `.use(emailGateMiddleware({ email: (ctx) => ctx.args.email }))` from `@lunora/auth/email-guard` to reject disposable domains at signup, or gate better-auth's native signup with `withEmailGate(...)` / `emailGateDatabaseHooks(...)`.",run:a=>{if(a.procedureProtections===void 0)return[];const t=[];for(const e of a.procedureProtections)!s(e)||!e.writesUserTable||e.usesEmailGate||t.push(i(o,{cacheKey:`signup_mutation_without_disposable_gating:${e.file}:${e.exportName}`,detail:`Public ${e.kind} \`${e.exportName}\` (${e.file}) writes a user/session/account table but has no disposable-email gate. Add \`.use(emailGateMiddleware(...))\` from \`@lunora/auth/email-guard\`.`,metadata:{exportName:e.exportName,file:e.file,kind:e.kind,writesUserTable:e.writesUserTable}}));return t},source:"static",title:"Account-creating write without a disposable-email gate"};export{o as default};
1
+ import{i}from"./finding-BAVgqnCF.mjs";import{i as s}from"./helpers-DwlvEUCh.mjs";const o={categories:["SECURITY"],description:"A public `mutation`/`action` that creates a user/session/account row has no disposable-email gate. Throwaway mailboxes farm free trials, evade bans, and pollute the user table.",facing:"EXTERNAL",level:"WARN",name:"signup_mutation_without_disposable_gating",remediation:"Add `.use(emailGateMiddleware({ email: (ctx) => ctx.args.email }))` from `@lunora/auth/email-guard` to reject disposable domains at signup, or gate better-auth's native signup with `withEmailGate(...)` / `emailGateDatabaseHooks(...)`.",run:a=>{if(a.procedureProtections===void 0)return[];const t=[];for(const e of a.procedureProtections)!s(e)||!e.writesUserTable||e.usesEmailGate||e.hasEmailArg!==!1&&t.push(i(o,{cacheKey:`signup_mutation_without_disposable_gating:${e.file}:${e.exportName}`,detail:`Public ${e.kind} \`${e.exportName}\` (${e.file}) writes a user/session/account table but has no disposable-email gate. Add \`.use(emailGateMiddleware(...))\` from \`@lunora/auth/email-guard\`.`,metadata:{exportName:e.exportName,file:e.file,kind:e.kind,writesUserTable:e.writesUserTable}}));return t},source:"static",title:"Account-creating write without a disposable-email gate"};export{o as default};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lunora/advisor",
3
- "version": "1.0.0-alpha.50",
3
+ "version": "1.0.0-alpha.52",
4
4
  "description": "Schema & query lints (splinter-style advisors) for Lunora, feeding the Studio Advisors view",
5
5
  "keywords": [
6
6
  "advisor",
@@ -47,7 +47,7 @@
47
47
  },
48
48
  "dependencies": {
49
49
  "@lunora/errors": "1.0.0-alpha.8",
50
- "@lunora/server": "1.0.0-alpha.47"
50
+ "@lunora/server": "1.0.0-alpha.49"
51
51
  },
52
52
  "engines": {
53
53
  "node": "^22.15.0 || >=24.11.0"