@lunora/server 1.0.0-alpha.224 → 1.0.0-alpha.225

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.mjs CHANGED
@@ -1 +1 @@
1
- import{ACTION_CACHE_DEFAULT_TTL_MS as t,ACTION_CACHE_TABLE as n,actionCacheExtension as i,cacheKeyFor as f,defineActionCache as a}from"./packem_shared/ACTION_CACHE_DEFAULT_TTL_MS-mmP-6BcT.mjs";import{initLunora as d}from"./packem_shared/initLunora-B-7Xs3Qq.mjs";import{isPerDispatchMiddleware as p,tagPerDispatchMiddleware as x}from"./packem_shared/isPerDispatchMiddleware-DDQPatSm.mjs";import{createSecrets as l}from"./packem_shared/createSecrets-D6rLB42U.mjs";import{beginDeferredDeletes as S,flushDeferredDeletes as u,withDeferredDeletes as h}from"./packem_shared/beginDeferredDeletes-DhwFBbvs.mjs";import{beginDeferredSchedules as T,withDeferredSchedules as g}from"./packem_shared/beginDeferredSchedules-C7QLYr6C.mjs";import{DOCUMENT_HISTORY_REDACTED_FIELDS as A,DOCUMENT_HISTORY_TABLE as I,defineDocumentHistory as L,documentHistoryExtension as _}from"./packem_shared/DOCUMENT_HISTORY_REDACTED_FIELDS-B5Zp-7SI.mjs";import{LunoraEnvError as M,defineEnv as P,redactSecrets as b}from"./packem_shared/LunoraEnvError-bkdMu_-N.mjs";import{bindOrm as F,bindTableFacade as O}from"./packem_shared/bindOrm-9fbLRbOb.mjs";import{httpAction as H,httpRoute as N,httpRouter as k,isSafeHeaderValue as w,lastEventId as U,sseEvent as B}from"./packem_shared/httpAction-DplHzcUa.mjs";import{serveStorageObject as W}from"./packem_shared/serveStorageObject-B9GbK4qd.mjs";import{defineIdentity as Y}from"./packem_shared/defineIdentity-DwkNKwYa.mjs";import{default as J}from"./packem_shared/defineIdentityGuard-Bt8N65Zs.mjs";import{onConnect as Q,onDisconnect as X,onShardInit as q}from"./packem_shared/onConnect-BLRoOpv2.mjs";import{DEFAULT_LIMIT as Z,DEFAULT_MAX_LIMIT as $,clampLimit as ee,defineListArgs as re}from"./packem_shared/DEFAULT_LIMIT-pT_tV8R0.mjs";import{defineLiveStream as te}from"./packem_shared/defineLiveStream-5DXpg7Jy.mjs";import{defineMigration as ie}from"./packem_shared/defineMigration-CXOS0Bvq.mjs";import{defineModule as ae}from"./packem_shared/defineModule-OecXWM3U.mjs";import{defineMutator as de}from"./packem_shared/defineMutator-B4ipDtDR.mjs";import{platformAdmin as pe}from"./packem_shared/platformAdmin-kczXQme8.mjs";import{c as ce,d as le,a as Ee,b as Se,e as ue,f as he,g as De,h as Te,i as ge,j as Re,k as Ae,m as Ie}from"./packem_shared/plugin-Bm9wIpiI.mjs";import{PRESENCE_DEFAULT_TTL_MS as _e,PRESENCE_TABLE as Ce,definePresence as Me,presenceExtension as Pe}from"./packem_shared/PRESENCE_DEFAULT_TTL_MS-DFpy5J8G.mjs";import{protectPublic as ye}from"./packem_shared/protectPublic-Bi5_95aP.mjs";import{onQueryChange as Oe}from"./packem_shared/onQueryChange-iuLzmyPs.mjs";import{defineRoom as He}from"./packem_shared/defineRoom-CoGi-xwm.mjs";import{createServices as ke}from"./packem_shared/createServices-IJvoqi0e.mjs";import{defineShape as Ue}from"./packem_shared/defineShape-CwKm5KLp.mjs";import{defineWebSocket as Ve}from"./packem_shared/defineWebSocket-BHoy6_ox.mjs";import{onWhisper as je}from"./packem_shared/onWhisper-CfDbFLQh.mjs";import{LunoraError as Ge}from"@lunora/errors";import{cronJobs as Ke}from"@lunora/scheduler";import{ValidationError as Xe,v as qe}from"@lunora/values";import{allowAll as Ze,deny as $e,isDeny as er,toWhereInput as rr}from"./packem_shared/allowAll-DkRAgItV.mjs";import{asBucketStorage as tr}from"./packem_shared/asBucketStorage-DoGYOjq3.mjs";import{assertShapesDeclareReadPolicies as ir,buildRlsReadRegistry as fr,composeShapeReadWhere as ar}from"./packem_shared/assertShapesDeclareReadPolicies-Bg4Ter7Q.mjs";import{buildMaskRegistry as dr}from"./packem_shared/buildMaskRegistry-DpWMtalG.mjs";import{createPolicyDsl as pr,definePermission as xr,definePolicies as cr,definePolicy as lr,defineRole as Er}from"./packem_shared/createPolicyDsl-BZa6SqLJ.mjs";import{defineStorageRule as ur,defineStorageRules as hr}from"./packem_shared/defineStorageRule-Dv4nJE0H.mjs";import{mask as Tr}from"./packem_shared/mask-D-jRCAhy.mjs";import{r as Rr}from"./packem_shared/middleware-3ySZVrpt.mjs";import{storageRules as Ir}from"./packem_shared/storageRules-CBLioxF7.mjs";const e="0.0.0";export{t as ACTION_CACHE_DEFAULT_TTL_MS,n as ACTION_CACHE_TABLE,Z as DEFAULT_LIMIT,$ as DEFAULT_MAX_LIMIT,A as DOCUMENT_HISTORY_REDACTED_FIELDS,I as DOCUMENT_HISTORY_TABLE,M as LunoraEnvError,Ge as LunoraError,_e as PRESENCE_DEFAULT_TTL_MS,Ce as PRESENCE_TABLE,e as VERSION,Xe as ValidationError,i as actionCacheExtension,Ze as allowAll,tr as asBucketStorage,ir as assertShapesDeclareReadPolicies,S as beginDeferredDeletes,T as beginDeferredSchedules,F as bindOrm,O as bindTableFacade,dr as buildMaskRegistry,fr as buildRlsReadRegistry,f as cacheKeyFor,ee as clampLimit,ce as composePluginMiddleware,ar as composeShapeReadWhere,pr as createPolicyDsl,l as createSecrets,ke as createServices,Ke as cronJobs,a as defineActionCache,le as defineAggregateIndex,Ee as defineComponent,L as defineDocumentHistory,P as defineEnv,Y as defineIdentity,J as defineIdentityGuard,re as defineListArgs,te as defineLiveStream,ie as defineMigration,ae as defineModule,de as defineMutator,xr as definePermission,Se as definePlugin,cr as definePolicies,lr as definePolicy,Me as definePresence,ue as defineRankIndex,Er as defineRole,He as defineRoom,he as defineSchema,De as defineSchemaExtension,Ue as defineShape,ur as defineStorageRule,hr as defineStorageRules,Te as defineTable,ge as defineVectorIndex,Ve as defineWebSocket,$e as deny,_ as documentHistoryExtension,u as flushDeferredDeletes,H as httpAction,N as httpRoute,k as httpRouter,Re as indexFieldsFromSchema,d as initLunora,Ae as installPlugins,er as isDeny,p as isPerDispatchMiddleware,w as isSafeHeaderValue,U as lastEventId,Tr as mask,Ie as mergeSchemaExtension,Q as onConnect,X as onDisconnect,Oe as onQueryChange,q as onShardInit,je as onWhisper,pe as platformAdmin,Pe as presenceExtension,ye as protectPublic,b as redactSecrets,Rr as rls,W as serveStorageObject,B as sseEvent,Ir as storageRules,x as tagPerDispatchMiddleware,rr as toWhereInput,qe as v,h as withDeferredDeletes,g as withDeferredSchedules};
1
+ import{ACTION_CACHE_DEFAULT_TTL_MS as t,ACTION_CACHE_TABLE as n,actionCacheExtension as i,cacheKeyFor as f,defineActionCache as a}from"./packem_shared/ACTION_CACHE_DEFAULT_TTL_MS-9W5_vf8H.mjs";import{initLunora as d}from"./packem_shared/initLunora-DH7k24N0.mjs";import{isPerDispatchMiddleware as p,tagPerDispatchMiddleware as x}from"./packem_shared/isPerDispatchMiddleware-DDQPatSm.mjs";import{createSecrets as l}from"./packem_shared/createSecrets-D6rLB42U.mjs";import{beginDeferredDeletes as S,flushDeferredDeletes as u,withDeferredDeletes as h}from"./packem_shared/beginDeferredDeletes-DhwFBbvs.mjs";import{beginDeferredSchedules as T,withDeferredSchedules as g}from"./packem_shared/beginDeferredSchedules-C7QLYr6C.mjs";import{DOCUMENT_HISTORY_REDACTED_FIELDS as A,DOCUMENT_HISTORY_TABLE as I,defineDocumentHistory as L,documentHistoryExtension as _}from"./packem_shared/DOCUMENT_HISTORY_REDACTED_FIELDS-xyn3tFOE.mjs";import{LunoraEnvError as M,defineEnv as P,redactSecrets as b}from"./packem_shared/LunoraEnvError-bkdMu_-N.mjs";import{bindOrm as F,bindTableFacade as O}from"./packem_shared/bindOrm-9fbLRbOb.mjs";import{httpAction as H,httpRoute as N,httpRouter as k,isSafeHeaderValue as w,lastEventId as U,sseEvent as B}from"./packem_shared/httpAction-DplHzcUa.mjs";import{serveStorageObject as W}from"./packem_shared/serveStorageObject-B9GbK4qd.mjs";import{defineIdentity as Y}from"./packem_shared/defineIdentity-DwkNKwYa.mjs";import{default as J}from"./packem_shared/defineIdentityGuard-Bt8N65Zs.mjs";import{onConnect as Q,onDisconnect as X,onShardInit as q}from"./packem_shared/onConnect-BLRoOpv2.mjs";import{DEFAULT_LIMIT as Z,DEFAULT_MAX_LIMIT as $,clampLimit as ee,defineListArgs as re}from"./packem_shared/DEFAULT_LIMIT-pT_tV8R0.mjs";import{defineLiveStream as te}from"./packem_shared/defineLiveStream-5DXpg7Jy.mjs";import{defineMigration as ie}from"./packem_shared/defineMigration-CXOS0Bvq.mjs";import{defineModule as ae}from"./packem_shared/defineModule-OecXWM3U.mjs";import{defineMutator as de}from"./packem_shared/defineMutator-DlLFSWbO.mjs";import{platformAdmin as pe}from"./packem_shared/platformAdmin-kczXQme8.mjs";import{c as ce,d as le,a as Ee,b as Se,e as ue,f as he,g as De,h as Te,i as ge,j as Re,k as Ae,m as Ie}from"./packem_shared/plugin-Bm9wIpiI.mjs";import{PRESENCE_DEFAULT_TTL_MS as _e,PRESENCE_TABLE as Ce,definePresence as Me,presenceExtension as Pe}from"./packem_shared/PRESENCE_DEFAULT_TTL_MS-CKKVL22B.mjs";import{protectPublic as ye}from"./packem_shared/protectPublic-Bi5_95aP.mjs";import{onQueryChange as Oe}from"./packem_shared/onQueryChange-iuLzmyPs.mjs";import{defineRoom as He}from"./packem_shared/defineRoom-CoGi-xwm.mjs";import{createServices as ke}from"./packem_shared/createServices-IJvoqi0e.mjs";import{defineShape as Ue}from"./packem_shared/defineShape-CULsDRu5.mjs";import{defineWebSocket as Ve}from"./packem_shared/defineWebSocket-BHoy6_ox.mjs";import{onWhisper as je}from"./packem_shared/onWhisper-CfDbFLQh.mjs";import{LunoraError as Ge}from"@lunora/errors";import{cronJobs as Ke}from"@lunora/scheduler";import{ValidationError as Xe,v as qe}from"@lunora/values";import{allowAll as Ze,deny as $e,isDeny as er,toWhereInput as rr}from"./packem_shared/allowAll-DkRAgItV.mjs";import{asBucketStorage as tr}from"./packem_shared/asBucketStorage-DoGYOjq3.mjs";import{assertShapesDeclareReadPolicies as ir,buildRlsReadRegistry as fr,composeShapeReadWhere as ar}from"./packem_shared/assertShapesDeclareReadPolicies-Bg4Ter7Q.mjs";import{buildMaskRegistry as dr}from"./packem_shared/buildMaskRegistry-DpWMtalG.mjs";import{createPolicyDsl as pr,definePermission as xr,definePolicies as cr,definePolicy as lr,defineRole as Er}from"./packem_shared/createPolicyDsl-BZa6SqLJ.mjs";import{defineStorageRule as ur,defineStorageRules as hr}from"./packem_shared/defineStorageRule-Dv4nJE0H.mjs";import{mask as Tr}from"./packem_shared/mask-D-jRCAhy.mjs";import{r as Rr}from"./packem_shared/middleware-3ySZVrpt.mjs";import{storageRules as Ir}from"./packem_shared/storageRules-CBLioxF7.mjs";const e="0.0.0";export{t as ACTION_CACHE_DEFAULT_TTL_MS,n as ACTION_CACHE_TABLE,Z as DEFAULT_LIMIT,$ as DEFAULT_MAX_LIMIT,A as DOCUMENT_HISTORY_REDACTED_FIELDS,I as DOCUMENT_HISTORY_TABLE,M as LunoraEnvError,Ge as LunoraError,_e as PRESENCE_DEFAULT_TTL_MS,Ce as PRESENCE_TABLE,e as VERSION,Xe as ValidationError,i as actionCacheExtension,Ze as allowAll,tr as asBucketStorage,ir as assertShapesDeclareReadPolicies,S as beginDeferredDeletes,T as beginDeferredSchedules,F as bindOrm,O as bindTableFacade,dr as buildMaskRegistry,fr as buildRlsReadRegistry,f as cacheKeyFor,ee as clampLimit,ce as composePluginMiddleware,ar as composeShapeReadWhere,pr as createPolicyDsl,l as createSecrets,ke as createServices,Ke as cronJobs,a as defineActionCache,le as defineAggregateIndex,Ee as defineComponent,L as defineDocumentHistory,P as defineEnv,Y as defineIdentity,J as defineIdentityGuard,re as defineListArgs,te as defineLiveStream,ie as defineMigration,ae as defineModule,de as defineMutator,xr as definePermission,Se as definePlugin,cr as definePolicies,lr as definePolicy,Me as definePresence,ue as defineRankIndex,Er as defineRole,He as defineRoom,he as defineSchema,De as defineSchemaExtension,Ue as defineShape,ur as defineStorageRule,hr as defineStorageRules,Te as defineTable,ge as defineVectorIndex,Ve as defineWebSocket,$e as deny,_ as documentHistoryExtension,u as flushDeferredDeletes,H as httpAction,N as httpRoute,k as httpRouter,Re as indexFieldsFromSchema,d as initLunora,Ae as installPlugins,er as isDeny,p as isPerDispatchMiddleware,w as isSafeHeaderValue,U as lastEventId,Tr as mask,Ie as mergeSchemaExtension,Q as onConnect,X as onDisconnect,Oe as onQueryChange,q as onShardInit,je as onWhisper,pe as platformAdmin,Pe as presenceExtension,ye as protectPublic,b as redactSecrets,Rr as rls,W as serveStorageObject,B as sseEvent,Ir as storageRules,x as tagPerDispatchMiddleware,rr as toWhereInput,qe as v,h as withDeferredDeletes,g as withDeferredSchedules};
@@ -1 +1 @@
1
- import{isLunoraError as O}from"@lunora/errors";import{v as d}from"@lunora/values";import{decodeWire as U,encodeWire as D,stableWireKey as S}from"@lunora/wire";import{initLunora as F}from"./initLunora-B-7Xs3Qq.mjs";import{g as k,h as q,a as B}from"./plugin-Bm9wIpiI.mjs";const P=3600*1e3,R=512*1024,H=8,b=64,V=64,K=256,W=4096,u="actionCache",h="entries",c=`${u}_${h}`,T=r=>r===void 0?"":S(r),x=async(r,m)=>{const A=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(`${r}\0${m}`));return[...new Uint8Array(A)].map(y=>y.toString(16).padStart(2,"0")).join("")},$=k(u,{tables:{[h]:q({expiresAt:d.number(),key:d.string(),name:d.string(),value:d.string()}).index("byKey",["key"],{unique:!0}).index("byName",["name"]).index("byExpiresAt",["expiresAt"])}}),{internalMutation:G}=F.dataModel().create(),Z=(r={})=>{const m=r.ttlMs!==void 0&&Number.isFinite(r.ttlMs)?Math.max(1,Math.floor(r.ttlMs)):P,A=r.maxValueBytes!==void 0&&Number.isFinite(r.maxValueBytes)?Math.max(1,Math.floor(r.maxValueBytes)):R,y=async(e,t)=>{const n=(await e.db.query(c).withIndex("byExpiresAt").order("asc").take(H)).filter(s=>s.expiresAt<=t);await Promise.all(n.map(async s=>e.db.delete(s._id)))},C=async(e,t)=>e.db.query(c).withIndex("byKey",a=>a.eq("key",t)).first(),f=new Set(["CONFLICT","NOT_FOUND","NOT_UNIQUE"]),N=async(e,t,a)=>{try{await(t?e.db.patch(t._id,{expiresAt:a.expiresAt,value:a.value}):e.db.insert(c,a))}catch(n){if(O(n)&&f.has(n.code))return;throw n}},I=async(e,t,a,n)=>{const s=T(a),i=await x(t,s),l=Date.now(),o=await C(e,i);if(o&&o.expiresAt>l)return U(JSON.parse(o.value)).v;const p=await n(),w=JSON.stringify(D({v:p})),E=Date.now(),g=E+m;return new TextEncoder().encode(w).length<=A?await N(e,o,{expiresAt:g,key:i,name:t,value:w}):o&&await e.db.delete(o._id),await y(e,E),p},M=async(e,t,a)=>{const n=await x(t,T(a)),s=await e.db.query(c).withIndex("byKey",i=>i.eq("key",n)).take(b);await Promise.all(s.map(async i=>e.db.delete(i._id)))},_=async(e,t,a,n)=>{if(n>=V)return{complete:!1,deleted:a};const s=await e.db.query(c).withIndex("byName",i=>i.eq("name",t)).take(b);return s.length===0?{complete:!0,deleted:a}:(await Promise.all(s.map(async i=>e.db.delete(i._id))),_(e,t,a+s.length,n+1))},L=async(e,t)=>_(e,t,0,0),v=G.input({limit:d.optional(d.number())}).mutation(async({args:e,ctx:t})=>{const a=Date.now(),n=e.limit!==void 0&&Number.isFinite(e.limit)?Math.min(W,Math.max(1,Math.floor(e.limit))):K,i=(await t.db.query(c).withIndex("byExpiresAt").order("asc").take(n)).filter(l=>l.expiresAt<=a);return await Promise.all(i.map(async l=>t.db.delete(l._id))),{deleted:i.length}});return{...B(u,{extension:$,functions:{purgeExpired:v}}),invalidate:M,invalidateAll:L,wrap:I}};export{P as ACTION_CACHE_DEFAULT_TTL_MS,c as ACTION_CACHE_TABLE,$ as actionCacheExtension,x as cacheKeyFor,Z as defineActionCache};
1
+ import{isLunoraError as O}from"@lunora/errors";import{v as d}from"@lunora/values";import{decodeWire as U,encodeWire as D,stableWireKey as S}from"@lunora/wire";import{initLunora as F}from"./initLunora-DH7k24N0.mjs";import{g as k,h as q,a as B}from"./plugin-Bm9wIpiI.mjs";const P=3600*1e3,R=512*1024,H=8,b=64,V=64,K=256,W=4096,u="actionCache",h="entries",c=`${u}_${h}`,T=r=>r===void 0?"":S(r),x=async(r,m)=>{const A=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(`${r}\0${m}`));return[...new Uint8Array(A)].map(y=>y.toString(16).padStart(2,"0")).join("")},$=k(u,{tables:{[h]:q({expiresAt:d.number(),key:d.string(),name:d.string(),value:d.string()}).index("byKey",["key"],{unique:!0}).index("byName",["name"]).index("byExpiresAt",["expiresAt"])}}),{internalMutation:G}=F.dataModel().create(),Z=(r={})=>{const m=r.ttlMs!==void 0&&Number.isFinite(r.ttlMs)?Math.max(1,Math.floor(r.ttlMs)):P,A=r.maxValueBytes!==void 0&&Number.isFinite(r.maxValueBytes)?Math.max(1,Math.floor(r.maxValueBytes)):R,y=async(e,t)=>{const n=(await e.db.query(c).withIndex("byExpiresAt").order("asc").take(H)).filter(s=>s.expiresAt<=t);await Promise.all(n.map(async s=>e.db.delete(s._id)))},C=async(e,t)=>e.db.query(c).withIndex("byKey",a=>a.eq("key",t)).first(),f=new Set(["CONFLICT","NOT_FOUND","NOT_UNIQUE"]),N=async(e,t,a)=>{try{await(t?e.db.patch(t._id,{expiresAt:a.expiresAt,value:a.value}):e.db.insert(c,a))}catch(n){if(O(n)&&f.has(n.code))return;throw n}},I=async(e,t,a,n)=>{const s=T(a),i=await x(t,s),l=Date.now(),o=await C(e,i);if(o&&o.expiresAt>l)return U(JSON.parse(o.value)).v;const p=await n(),w=JSON.stringify(D({v:p})),E=Date.now(),g=E+m;return new TextEncoder().encode(w).length<=A?await N(e,o,{expiresAt:g,key:i,name:t,value:w}):o&&await e.db.delete(o._id),await y(e,E),p},M=async(e,t,a)=>{const n=await x(t,T(a)),s=await e.db.query(c).withIndex("byKey",i=>i.eq("key",n)).take(b);await Promise.all(s.map(async i=>e.db.delete(i._id)))},_=async(e,t,a,n)=>{if(n>=V)return{complete:!1,deleted:a};const s=await e.db.query(c).withIndex("byName",i=>i.eq("name",t)).take(b);return s.length===0?{complete:!0,deleted:a}:(await Promise.all(s.map(async i=>e.db.delete(i._id))),_(e,t,a+s.length,n+1))},L=async(e,t)=>_(e,t,0,0),v=G.input({limit:d.optional(d.number())}).mutation(async({args:e,ctx:t})=>{const a=Date.now(),n=e.limit!==void 0&&Number.isFinite(e.limit)?Math.min(W,Math.max(1,Math.floor(e.limit))):K,i=(await t.db.query(c).withIndex("byExpiresAt").order("asc").take(n)).filter(l=>l.expiresAt<=a);return await Promise.all(i.map(async l=>t.db.delete(l._id))),{deleted:i.length}});return{...B(u,{extension:$,functions:{purgeExpired:v}}),invalidate:M,invalidateAll:L,wrap:I}};export{P as ACTION_CACHE_DEFAULT_TTL_MS,c as ACTION_CACHE_TABLE,$ as actionCacheExtension,x as cacheKeyFor,Z as defineActionCache};
@@ -1 +1 @@
1
- import{v as r}from"@lunora/values";import{decodeWire as I,encodeWire as h}from"@lunora/wire";import{initLunora as x}from"./initLunora-B-7Xs3Qq.mjs";import{g as v,h as R,a as U}from"./plugin-Bm9wIpiI.mjs";const H=2160*60*60*1e3,L=64*1024,y=200,q=1e3,C=64,F=512,u=16,g=["_commitSeq","seq"],B=["accessToken","apiKey","backupCodes","clientSecret","hashedPassword","password","privateKey","refreshToken","secret","totpSecret"],b="documentHistory",T="versions",f=`${b}_${T}`,w=v(b,{tables:{[T]:R({doc:r.optional(r.string()),documentId:r.string(),op:r.union(r.literal("delete"),r.literal("insert"),r.literal("update")),previous:r.optional(r.string()),recordedAt:r.number(),seq:r.number(),tableName:r.string(),truncated:r.optional(r.boolean())}).commitOrdered().index("byDocumentRecordedAt",["documentId","recordedAt","seq"]).index("byRecordedAt",["recordedAt"])}}),{internalMutation:P,internalQuery:Y}=x.dataModel().create(),V=(d={})=>{const _=d.retentionMs!==void 0&&Number.isFinite(d.retentionMs)?Math.max(1,Math.floor(d.retentionMs)):H,l=d.maxSnapshotBytes!==void 0&&Number.isFinite(d.maxSnapshotBytes)?Math.max(1,Math.floor(d.maxSnapshotBytes)):L,A=new Set([...B,...d.redact??[]]);let M=0;const S=()=>(M+=1,M),a=(e,t=0)=>{if(Array.isArray(e))return t>=u?void 0:e.map(o=>a(o,t+1));if(typeof e!="object"||e===null)return e;if(e instanceof Map)return t>=u?void 0:new Map([...e.entries()].filter(([o])=>typeof o!="string"||!A.has(o)).map(([o,i])=>[o,a(i,t+1)]));if(e instanceof Set)return t>=u?void 0:new Set([...e].map(o=>a(o,t+1)));if(Object.getPrototypeOf(e)!==Object.prototype&&Object.getPrototypeOf(e)!==null)return e;if(!(t>=u))return Object.fromEntries(Object.entries(e).filter(([o])=>!A.has(o)).map(([o,i])=>[o,a(i,t+1)]))},E=e=>{if(e===void 0)return;const t=JSON.stringify(h(a(e)));if(!(t.length>l))return 3*t.length<=l?t:new TextEncoder().encode(t).length>l?void 0:t},p=async(e,t)=>{const o=E(t.doc),i=E(t.previous),n=t.doc!==void 0&&o===void 0||t.previous!==void 0&&i===void 0;await e.db.insert(f,{documentId:t.documentId,op:t.op,recordedAt:Date.now(),seq:S(),tableName:t.tableName,...n?{truncated:!0}:{},...o===void 0?{}:{doc:o},...i===void 0?{}:{previous:i}})},D=e=>({documentHistoryDelete:e.afterDelete(async(t,o)=>p(t,{documentId:o.id,op:"delete",previous:o.previous,tableName:o.table})),documentHistoryInsert:e.afterInsert(async(t,o)=>p(t,{doc:o.doc,documentId:o.id,op:"insert",tableName:o.table})),documentHistoryUpdate:e.afterUpdate(async(t,o)=>p(t,{doc:o.doc,documentId:o.id,op:"update",previous:o.previous,tableName:o.table}))}),N=Y.input({before:r.optional(r.number()),documentId:r.string(),limit:r.optional(r.number())}).query(async({args:e,ctx:t})=>{const o=e.limit!==void 0&&Number.isFinite(e.limit)?Math.min(q,Math.max(1,Math.floor(e.limit))):y,i=await t.db.query(f).withIndex("byDocumentRecordedAt",n=>e.before===void 0?n.eq("documentId",e.documentId):n.eq("documentId",e.documentId).lte("recordedAt",e.before)).order("desc").take(o);return i.sort((n,m)=>{for(const c of g){const s=(m[c]??0)-(n[c]??0);if(s!==0)return s}return 0}),i.map(n=>({documentId:n.documentId,op:n.op,recordedAt:n.recordedAt,tableName:n.tableName,...n.doc===void 0?{}:{doc:I(JSON.parse(n.doc))},...n.previous===void 0?{}:{previous:I(JSON.parse(n.previous))},...n.truncated===!0?{truncated:!0}:{}}))}),O=P.input({limit:r.optional(r.number())}).mutation(async({args:e,ctx:t})=>{const o=Date.now()-_,i=e.limit!==void 0&&Number.isFinite(e.limit)?Math.max(1,Math.floor(e.limit)):F;let n=0;for(let m=0;m<C&&n<i;m+=1){const c=await t.db.query(f).withIndex("byRecordedAt",s=>s.lt("recordedAt",o)).order("asc").take(Math.min(y,i-n));if(c.length===0)return{deleted:n};await Promise.all(c.map(async s=>t.db.delete(s._id))),n+=c.length}return{deleted:n}});return{...U(b,{extension:w,functions:{listForDocument:N,vacuum:O}}),record:D}};export{B as DOCUMENT_HISTORY_REDACTED_FIELDS,f as DOCUMENT_HISTORY_TABLE,V as defineDocumentHistory,w as documentHistoryExtension};
1
+ import{v as r}from"@lunora/values";import{decodeWire as I,encodeWire as h}from"@lunora/wire";import{initLunora as x}from"./initLunora-DH7k24N0.mjs";import{g as v,h as R,a as U}from"./plugin-Bm9wIpiI.mjs";const H=2160*60*60*1e3,L=64*1024,y=200,q=1e3,C=64,F=512,u=16,g=["_commitSeq","seq"],B=["accessToken","apiKey","backupCodes","clientSecret","hashedPassword","password","privateKey","refreshToken","secret","totpSecret"],b="documentHistory",T="versions",f=`${b}_${T}`,w=v(b,{tables:{[T]:R({doc:r.optional(r.string()),documentId:r.string(),op:r.union(r.literal("delete"),r.literal("insert"),r.literal("update")),previous:r.optional(r.string()),recordedAt:r.number(),seq:r.number(),tableName:r.string(),truncated:r.optional(r.boolean())}).commitOrdered().index("byDocumentRecordedAt",["documentId","recordedAt","seq"]).index("byRecordedAt",["recordedAt"])}}),{internalMutation:P,internalQuery:Y}=x.dataModel().create(),V=(d={})=>{const _=d.retentionMs!==void 0&&Number.isFinite(d.retentionMs)?Math.max(1,Math.floor(d.retentionMs)):H,l=d.maxSnapshotBytes!==void 0&&Number.isFinite(d.maxSnapshotBytes)?Math.max(1,Math.floor(d.maxSnapshotBytes)):L,A=new Set([...B,...d.redact??[]]);let M=0;const S=()=>(M+=1,M),a=(e,t=0)=>{if(Array.isArray(e))return t>=u?void 0:e.map(o=>a(o,t+1));if(typeof e!="object"||e===null)return e;if(e instanceof Map)return t>=u?void 0:new Map([...e.entries()].filter(([o])=>typeof o!="string"||!A.has(o)).map(([o,i])=>[o,a(i,t+1)]));if(e instanceof Set)return t>=u?void 0:new Set([...e].map(o=>a(o,t+1)));if(Object.getPrototypeOf(e)!==Object.prototype&&Object.getPrototypeOf(e)!==null)return e;if(!(t>=u))return Object.fromEntries(Object.entries(e).filter(([o])=>!A.has(o)).map(([o,i])=>[o,a(i,t+1)]))},E=e=>{if(e===void 0)return;const t=JSON.stringify(h(a(e)));if(!(t.length>l))return 3*t.length<=l?t:new TextEncoder().encode(t).length>l?void 0:t},p=async(e,t)=>{const o=E(t.doc),i=E(t.previous),n=t.doc!==void 0&&o===void 0||t.previous!==void 0&&i===void 0;await e.db.insert(f,{documentId:t.documentId,op:t.op,recordedAt:Date.now(),seq:S(),tableName:t.tableName,...n?{truncated:!0}:{},...o===void 0?{}:{doc:o},...i===void 0?{}:{previous:i}})},D=e=>({documentHistoryDelete:e.afterDelete(async(t,o)=>p(t,{documentId:o.id,op:"delete",previous:o.previous,tableName:o.table})),documentHistoryInsert:e.afterInsert(async(t,o)=>p(t,{doc:o.doc,documentId:o.id,op:"insert",tableName:o.table})),documentHistoryUpdate:e.afterUpdate(async(t,o)=>p(t,{doc:o.doc,documentId:o.id,op:"update",previous:o.previous,tableName:o.table}))}),N=Y.input({before:r.optional(r.number()),documentId:r.string(),limit:r.optional(r.number())}).query(async({args:e,ctx:t})=>{const o=e.limit!==void 0&&Number.isFinite(e.limit)?Math.min(q,Math.max(1,Math.floor(e.limit))):y,i=await t.db.query(f).withIndex("byDocumentRecordedAt",n=>e.before===void 0?n.eq("documentId",e.documentId):n.eq("documentId",e.documentId).lte("recordedAt",e.before)).order("desc").take(o);return i.sort((n,m)=>{for(const c of g){const s=(m[c]??0)-(n[c]??0);if(s!==0)return s}return 0}),i.map(n=>({documentId:n.documentId,op:n.op,recordedAt:n.recordedAt,tableName:n.tableName,...n.doc===void 0?{}:{doc:I(JSON.parse(n.doc))},...n.previous===void 0?{}:{previous:I(JSON.parse(n.previous))},...n.truncated===!0?{truncated:!0}:{}}))}),O=P.input({limit:r.optional(r.number())}).mutation(async({args:e,ctx:t})=>{const o=Date.now()-_,i=e.limit!==void 0&&Number.isFinite(e.limit)?Math.max(1,Math.floor(e.limit)):F;let n=0;for(let m=0;m<C&&n<i;m+=1){const c=await t.db.query(f).withIndex("byRecordedAt",s=>s.lt("recordedAt",o)).order("asc").take(Math.min(y,i-n));if(c.length===0)return{deleted:n};await Promise.all(c.map(async s=>t.db.delete(s._id))),n+=c.length}return{deleted:n}});return{...U(b,{extension:w,functions:{listForDocument:N,vacuum:O}}),record:D}};export{B as DOCUMENT_HISTORY_REDACTED_FIELDS,f as DOCUMENT_HISTORY_TABLE,V as defineDocumentHistory,w as documentHistoryExtension};
@@ -1 +1 @@
1
- import{LunoraError as b}from"@lunora/errors";import{v as t}from"@lunora/values";import{initLunora as M}from"./initLunora-B-7Xs3Qq.mjs";import{onDisconnect as T}from"./onConnect-BLRoOpv2.mjs";import{g as v,h as A,a as L}from"./plugin-Bm9wIpiI.mjs";const D=3e4,g=1024,P=8,p=4096,w="presence",h="present",l=`${w}_${h}`,N=v(w,{tables:{[h]:A({data:t.optional(t.record(t.string(),t.any())),lastSeen:t.number(),roomId:t.string(),sessionId:t.string(),userId:t.optional(t.string())}).index("byRoomSession",["roomId","sessionId"]).index("byRoom",["roomId"]).index("byRoomLastSeen",["roomId","lastSeen"])}}),{mutation:E,query:B}=M.dataModel().create(),G=(u={})=>{const m=u.ttlMs??D,f=Math.max(0,Math.min(u.disconnectGraceMs??0,m)),S=u.maxSessions,y=S!==void 0&&Number.isFinite(S)?Math.max(1,Math.floor(S)):g,_=E.input({data:t.optional(t.record(t.string(),t.any())),roomId:t.string(),sessionId:t.string()}).mutation(async({args:o,ctx:s})=>{const r=Date.now(),d=s.auth.userId??void 0;if(o.data!==void 0&&new TextEncoder().encode(JSON.stringify(o.data)).length>p)throw new b("BAD_REQUEST",`presence data exceeds the ${String(p)}-byte limit`);const e=await s.db.query(l).withIndex("byRoomSession",i=>i.eq("roomId",o.roomId).eq("sessionId",o.sessionId)).first();if(e&&(e.userId??void 0)!==d)throw new b("FORBIDDEN","presence heartbeat denied: this (roomId, sessionId) is held by another identity");const a={lastSeen:r,roomId:o.roomId,sessionId:o.sessionId,...o.data===void 0?{}:{data:o.data},...d===void 0?{}:{userId:d}};await(e?s.db.patch(e._id,a):s.db.insert(l,a));const I=r-m-Math.max(f,m),c=(await s.db.query(l).withIndex("byRoomLastSeen",i=>i.eq("roomId",o.roomId)).order("asc").take(P)).filter(i=>i.lastSeen<=I);return await Promise.all(c.map(i=>s.db.delete(i._id))),{lastSeen:r}}),x=B.input({roomId:t.string()}).query(async({args:o,ctx:s})=>{const r=Date.now()-m,e=(await s.db.query(l).withIndex("byRoomLastSeen",n=>n.eq("roomId",o.roomId)).order("desc").take(y)).filter(n=>n.lastSeen>r),a=new Set,I=[];for(const n of e){const c=n.userId;if(c!==void 0){if(a.has(c))continue;a.add(c)}const i={lastSeen:n.lastSeen,roomId:n.roomId};c!==void 0&&(i.userId=c),n.data!==void 0&&(i.data=n.data),I.push(i)}return I}),R={...E.input({roomId:t.string()}).mutation(async({args:o,ctx:s})=>{const r=Date.now()-m,d=await s.db.query(l).withIndex("byRoom",e=>e.eq("roomId",o.roomId)).filter(e=>e.lastSeen<=r).collect();return await Promise.all(d.map(e=>s.db.delete(e._id))),{deleted:d.length}}),visibility:"internal"},q=T(async(o,s)=>{const r=s.context?.roomId,d=s.context?.sessionId;if(typeof r!="string"||typeof d!="string")return;const e=await o.db.query(l).withIndex("byRoomSession",n=>n.eq("roomId",r).eq("sessionId",d)).first();if(!e)return;const a=s.userId??void 0;if((e.userId??void 0)!==a)return;if(f===0){await o.db.delete(e._id);return}const I=Math.min(e.lastSeen,Date.now()+f-m);await o.db.patch(e._id,{lastSeen:I})});return L(w,{extension:N,functions:{disconnect:q,heartbeat:_,listPresent:x,sweep:R}})};export{D as PRESENCE_DEFAULT_TTL_MS,l as PRESENCE_TABLE,G as definePresence,N as presenceExtension};
1
+ import{LunoraError as b}from"@lunora/errors";import{v as t}from"@lunora/values";import{initLunora as M}from"./initLunora-DH7k24N0.mjs";import{onDisconnect as T}from"./onConnect-BLRoOpv2.mjs";import{g as v,h as A,a as L}from"./plugin-Bm9wIpiI.mjs";const D=3e4,g=1024,P=8,p=4096,w="presence",h="present",l=`${w}_${h}`,N=v(w,{tables:{[h]:A({data:t.optional(t.record(t.string(),t.any())),lastSeen:t.number(),roomId:t.string(),sessionId:t.string(),userId:t.optional(t.string())}).index("byRoomSession",["roomId","sessionId"]).index("byRoom",["roomId"]).index("byRoomLastSeen",["roomId","lastSeen"])}}),{mutation:E,query:B}=M.dataModel().create(),G=(u={})=>{const m=u.ttlMs??D,f=Math.max(0,Math.min(u.disconnectGraceMs??0,m)),S=u.maxSessions,y=S!==void 0&&Number.isFinite(S)?Math.max(1,Math.floor(S)):g,_=E.input({data:t.optional(t.record(t.string(),t.any())),roomId:t.string(),sessionId:t.string()}).mutation(async({args:o,ctx:s})=>{const r=Date.now(),d=s.auth.userId??void 0;if(o.data!==void 0&&new TextEncoder().encode(JSON.stringify(o.data)).length>p)throw new b("BAD_REQUEST",`presence data exceeds the ${String(p)}-byte limit`);const e=await s.db.query(l).withIndex("byRoomSession",i=>i.eq("roomId",o.roomId).eq("sessionId",o.sessionId)).first();if(e&&(e.userId??void 0)!==d)throw new b("FORBIDDEN","presence heartbeat denied: this (roomId, sessionId) is held by another identity");const a={lastSeen:r,roomId:o.roomId,sessionId:o.sessionId,...o.data===void 0?{}:{data:o.data},...d===void 0?{}:{userId:d}};await(e?s.db.patch(e._id,a):s.db.insert(l,a));const I=r-m-Math.max(f,m),c=(await s.db.query(l).withIndex("byRoomLastSeen",i=>i.eq("roomId",o.roomId)).order("asc").take(P)).filter(i=>i.lastSeen<=I);return await Promise.all(c.map(i=>s.db.delete(i._id))),{lastSeen:r}}),x=B.input({roomId:t.string()}).query(async({args:o,ctx:s})=>{const r=Date.now()-m,e=(await s.db.query(l).withIndex("byRoomLastSeen",n=>n.eq("roomId",o.roomId)).order("desc").take(y)).filter(n=>n.lastSeen>r),a=new Set,I=[];for(const n of e){const c=n.userId;if(c!==void 0){if(a.has(c))continue;a.add(c)}const i={lastSeen:n.lastSeen,roomId:n.roomId};c!==void 0&&(i.userId=c),n.data!==void 0&&(i.data=n.data),I.push(i)}return I}),R={...E.input({roomId:t.string()}).mutation(async({args:o,ctx:s})=>{const r=Date.now()-m,d=await s.db.query(l).withIndex("byRoom",e=>e.eq("roomId",o.roomId)).filter(e=>e.lastSeen<=r).collect();return await Promise.all(d.map(e=>s.db.delete(e._id))),{deleted:d.length}}),visibility:"internal"},q=T(async(o,s)=>{const r=s.context?.roomId,d=s.context?.sessionId;if(typeof r!="string"||typeof d!="string")return;const e=await o.db.query(l).withIndex("byRoomSession",n=>n.eq("roomId",r).eq("sessionId",d)).first();if(!e)return;const a=s.userId??void 0;if((e.userId??void 0)!==a)return;if(f===0){await o.db.delete(e._id);return}const I=Math.min(e.lastSeen,Date.now()+f-m);await o.db.patch(e._id,{lastSeen:I})});return L(w,{extension:N,functions:{disconnect:q,heartbeat:_,listPresent:x,sweep:R}})};export{D as PRESENCE_DEFAULT_TTL_MS,l as PRESENCE_TABLE,G as definePresence,N as presenceExtension};
@@ -0,0 +1 @@
1
+ import{LunoraError as n}from"@lunora/errors";import{c}from"./context-identity-B2XYGA0B.mjs";import{v as m,a as w}from"./functions-QFoBUe9t.mjs";const i=(r,a,s)=>{if(r.trim()==="")throw new n("INTERNAL",'defineMutator: `owner` must name the column carrying the row owner (e.g. `owner: "userId"`)');const t=c(a);if(t===void 0)throw new n("UNAUTHORIZED","defineMutator: an owner-scoped mutator requires a verified identity; none was resolved for this request");const e=s,o=e[r];if(o!==void 0&&o!==t)throw new n("FORBIDDEN",`defineMutator: \`${r}\` does not match the verified identity — a mutator may only write rows its caller owns`);return e[r]=t,s},h=r=>{const a={},s=async(t,e)=>{const o=m(r.args??{},e);w(t,r.args??{},o);const u=r.owner===void 0?o:i(r.owner,t,o);return Reflect.apply(r.server,a.mutator,[t,u])};return a.mutator={__lunoraMutator:!0,...r,handler:s,kind:"mutation",server:async(t,e)=>s(t,e)},a.mutator};export{h as defineMutator};
@@ -0,0 +1 @@
1
+ import{LunoraError as r}from"@lunora/errors";import{c as m}from"./context-identity-B2XYGA0B.mjs";import{v as p,a as u}from"./functions-QFoBUe9t.mjs";import{toWhereInput as d,deny as c}from"./allowAll-DkRAgItV.mjs";import{buildRlsReadRegistry as b}from"./assertShapesDeclareReadPolicies-Bg4Ter7Q.mjs";const I=e=>{if(e.table.trim()==="")throw new r("INTERNAL","defineShape: `table` must be a non-empty string");if(e.columns?.length===0)throw new r("INTERNAL","defineShape: `columns` must list at least one column when provided");if(!e.where&&e.owner===void 0)throw new r("INTERNAL",`defineShape: shape on table "${e.table}" needs a \`where\` predicate or an \`owner\` (\`owner: true\` uses the table's .ownedBy(field), \`owner: "field"\` names the column) — a shape with neither would replicate the whole table`);return{__lunoraShape:!0,...e,compileWhere:(t,w,n)=>{const s=p(e.args??{},w);u(t,e.args??{},s);const o=e.where?d(e.where(t,s)):void 0;if(e.owner===void 0)return o;const a=e.owner===!0?n?.ownerField:e.owner;if(a===void 0||a==="")throw new r("INTERNAL",`defineShape: shape on table "${e.table}" declares \`owner: true\` but the table has no \`.ownedBy(field)\` — add it to the table, or name the column directly with \`owner: "field"\``);const h=m(t);if(h===void 0)return c();const l={[a]:h};return o===void 0?l:{AND:[l,o]}},rlsRegistry:b(e.use??[])}};export{I as defineShape};
@@ -0,0 +1 @@
1
+ import{parseValidatorMap as o,sensitiveArgumentNames as r}from"@lunora/values";const f=(s,t)=>o(s,t,"args"),n=Symbol.for("lunora.admitSensitiveArgs"),l=(s,t,e)=>{const a=r(t);if(a.size===0||typeof s!="object"||s===null)return;const i=s[n];typeof i=="function"&&i(e,a)};export{l as a,f as v};
@@ -0,0 +1 @@
1
+ import{a as j}from"./apply-output-C5wZ5EAL.mjs";import{v as h,a as C}from"./functions-QFoBUe9t.mjs";import{unionMaskColumns as w}from"./buildMaskRegistry-DpWMtalG.mjs";import{r as b}from"./policy-tag-V0lqFzgS.mjs";import{r as z,e as S}from"./run-middleware-BefYq7Xd.mjs";import{isPerDispatchMiddleware as _}from"./isPerDispatchMiddleware-DDQPatSm.mjs";const y=(e,r,o,n)=>n===0&&r===void 0||typeof e!="object"||e===null?e:S(e,{args:Object.freeze({...o}),...r===void 0?{}:{meta:r}}),M=(e,r)=>z(e,r,o=>o),q=(e,r,o,n,s)=>async(d,t)=>{const c=h(e,t);C(d,e,c);const u=await M(r,y(d,s,c,r.length)),m=await o({args:c,ctx:u});return n?j(n,m):m},D=(e,r,o,n)=>(s,d,t)=>{const c=h(e,d);return C(s,e,c),(async function*(){const m=await M(r,y(s,n,c,r.length)),f=o({args:c,ctx:m,signal:t})[Symbol.asyncIterator]();try{for(;;){if(t.aborted)return;const p=await f.next();if(p.done||t.aborted)return;yield p.value}}finally{await f.return?.()}})()},i=e=>{const r=e.flatMap(o=>b(o));return r.length>0?{tags:r}:void 0},g=e=>e.some(r=>_(r)),x=e=>{for(const r of["add","clear","delete","set"])typeof e[r]=="function"&&Object.defineProperty(e,r,{configurable:!1,enumerable:!1,value:()=>{throw new TypeError(`Cannot mutate a frozen .meta() declaration (${e.constructor.name}.${r})`)},writable:!1})},l=(e,r)=>{if(e===null||typeof e!="object"||r.has(e))return e;if(r.add(e),e instanceof Map){for(const[o,n]of e)l(o,r),l(n,r);x(e)}else if(e instanceof Set){for(const o of e)l(o,r);x(e)}for(const o of Object.values(e))l(o,r);return Object.freeze(e),e},O=e=>l(structuredClone(e),new WeakSet),a=(e,r,o)=>({__lunoraProcedure:e,...o?{__lunoraVisibility:o}:{},input:n=>a(e,{...r,args:{...r.args,...n}},o),[e]:n=>{const s=i(r.middlewares),d=w(r.middlewares),t=g(r.middlewares);return{args:r.args,...r.expose?{expose:r.expose}:{},handler:q(r.args,r.middlewares,n,r.output,r.meta),kind:e,...d?{maskedTables:d}:{},...t?{perDispatch:t}:{},...s?{rls:s}:{},...o?{visibility:o}:{},...r.x402?{x402:r.x402}:{}}},meta:n=>a(e,{...r,meta:O({...r.meta,...n})},o),output:n=>a(e,{...r,output:n},o),...e==="query"?{stream:(n,s)=>{const d=i(r.middlewares),t=w(r.middlewares),c=g(r.middlewares),u=s?.durable===!0?{}:s?.durable;return{args:r.args,...u?{durable:u}:{},...r.expose?{expose:r.expose}:{},handler:D(r.args,r.middlewares,n,r.meta),kind:"stream",...t?{maskedTables:t}:{},...c?{perDispatch:c}:{},...d?{rls:d}:{},...o?{visibility:o}:{},...r.x402?{x402:r.x402}:{}}}}:{},use:n=>a(e,{...r,middlewares:[...r.middlewares,n]},o),...o?{}:{expose:n=>a(e,{...r,expose:n},o)},...o?{}:{x402:n=>a(e,{...r,x402:n},o)}}),B={dataModel:()=>({create:e=>({action:a("action",{args:{},middlewares:[]}),internalAction:a("action",{args:{},middlewares:[]},"internal"),internalMutation:a("mutation",{args:{},middlewares:[]},"internal"),internalQuery:a("query",{args:{},middlewares:[]},"internal"),mutation:a("mutation",{args:{},middlewares:[]}),query:a("query",{args:{},middlewares:[]})})})};export{B as initLunora};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lunora/server",
3
- "version": "1.0.0-alpha.224",
3
+ "version": "1.0.0-alpha.225",
4
4
  "description": "Server primitives for Lunora: defineSchema, defineTable, query, mutation, and action",
5
5
  "keywords": [
6
6
  "backend",
@@ -71,9 +71,9 @@
71
71
  },
72
72
  "dependencies": {
73
73
  "@lunora/errors": ">=1.0.0-alpha.51 <2.0.0-0",
74
- "@lunora/scheduler": "1.0.0-alpha.141",
75
- "@lunora/shard-engine": "1.0.0-alpha.146",
76
- "@lunora/values": "1.0.0-alpha.76",
74
+ "@lunora/scheduler": "1.0.0-alpha.142",
75
+ "@lunora/shard-engine": "1.0.0-alpha.147",
76
+ "@lunora/values": "1.0.0-alpha.77",
77
77
  "@lunora/wire": "1.0.0-alpha.1",
78
78
  "drizzle-orm": "^0.45.3",
79
79
  "hono": "^4.13.13"
@@ -1 +0,0 @@
1
- import{LunoraError as s}from"@lunora/errors";import{c}from"./context-identity-B2XYGA0B.mjs";import{v as m}from"./functions-B2-H4PQT.mjs";const w=(r,o,a)=>{if(r.trim()==="")throw new s("INTERNAL",'defineMutator: `owner` must name the column carrying the row owner (e.g. `owner: "userId"`)');const t=c(o);if(t===void 0)throw new s("UNAUTHORIZED","defineMutator: an owner-scoped mutator requires a verified identity; none was resolved for this request");const e=a,n=e[r];if(n!==void 0&&n!==t)throw new s("FORBIDDEN",`defineMutator: \`${r}\` does not match the verified identity — a mutator may only write rows its caller owns`);return e[r]=t,a},h=r=>{const o={},a=async(t,e)=>{const n=m(r.args??{},e),u=r.owner===void 0?n:w(r.owner,t,n);return Reflect.apply(r.server,o.mutator,[t,u])};return o.mutator={__lunoraMutator:!0,...r,handler:a,kind:"mutation",server:async(t,e)=>a(t,e)},o.mutator};export{h as defineMutator};
@@ -1 +0,0 @@
1
- import{LunoraError as r}from"@lunora/errors";import{c as p}from"./context-identity-B2XYGA0B.mjs";import{v as u}from"./functions-B2-H4PQT.mjs";import{toWhereInput as m,deny as d}from"./allowAll-DkRAgItV.mjs";import{buildRlsReadRegistry as c}from"./assertShapesDeclareReadPolicies-Bg4Ter7Q.mjs";const I=e=>{if(e.table.trim()==="")throw new r("INTERNAL","defineShape: `table` must be a non-empty string");if(e.columns?.length===0)throw new r("INTERNAL","defineShape: `columns` must list at least one column when provided");if(!e.where&&e.owner===void 0)throw new r("INTERNAL",`defineShape: shape on table "${e.table}" needs a \`where\` predicate or an \`owner\` (\`owner: true\` uses the table's .ownedBy(field), \`owner: "field"\` names the column) — a shape with neither would replicate the whole table`);return{__lunoraShape:!0,...e,compileWhere:(a,l,n)=>{const w=u(e.args??{},l),o=e.where?m(e.where(a,w)):void 0;if(e.owner===void 0)return o;const t=e.owner===!0?n?.ownerField:e.owner;if(t===void 0||t==="")throw new r("INTERNAL",`defineShape: shape on table "${e.table}" declares \`owner: true\` but the table has no \`.ownedBy(field)\` — add it to the table, or name the column directly with \`owner: "field"\``);const s=p(a);if(s===void 0)return d();const h={[t]:s};return o===void 0?h:{AND:[h,o]}},rlsRegistry:c(e.use??[])}};export{I as defineShape};
@@ -1 +0,0 @@
1
- import{parseValidatorMap as o}from"@lunora/values";const t=(a,r)=>o(a,r,"args");export{t as v};
@@ -1 +0,0 @@
1
- import{a as M}from"./apply-output-C5wZ5EAL.mjs";import{v as h}from"./functions-B2-H4PQT.mjs";import{unionMaskColumns as w}from"./buildMaskRegistry-DpWMtalG.mjs";import{r as j}from"./policy-tag-V0lqFzgS.mjs";import{r as b,e as z}from"./run-middleware-BefYq7Xd.mjs";import{isPerDispatchMiddleware as _}from"./isPerDispatchMiddleware-DDQPatSm.mjs";const C=(e,r,o,n)=>n===0&&r===void 0||typeof e!="object"||e===null?e:z(e,{args:Object.freeze({...o}),...r===void 0?{}:{meta:r}}),y=(e,r)=>b(e,r,o=>o),q=(e,r,o,n,s)=>async(d,t)=>{const c=h(e,t),u=await y(r,C(d,s,c,r.length)),m=await o({args:c,ctx:u});return n?M(n,m):m},D=(e,r,o,n)=>(s,d,t)=>{const c=h(e,d);return(async function*(){const m=await y(r,C(s,n,c,r.length)),f=o({args:c,ctx:m,signal:t})[Symbol.asyncIterator]();try{for(;;){if(t.aborted)return;const p=await f.next();if(p.done||t.aborted)return;yield p.value}}finally{await f.return?.()}})()},g=e=>{const r=e.flatMap(o=>j(o));return r.length>0?{tags:r}:void 0},i=e=>e.some(r=>_(r)),x=e=>{for(const r of["add","clear","delete","set"])typeof e[r]=="function"&&Object.defineProperty(e,r,{configurable:!1,enumerable:!1,value:()=>{throw new TypeError(`Cannot mutate a frozen .meta() declaration (${e.constructor.name}.${r})`)},writable:!1})},l=(e,r)=>{if(e===null||typeof e!="object"||r.has(e))return e;if(r.add(e),e instanceof Map){for(const[o,n]of e)l(o,r),l(n,r);x(e)}else if(e instanceof Set){for(const o of e)l(o,r);x(e)}for(const o of Object.values(e))l(o,r);return Object.freeze(e),e},O=e=>l(structuredClone(e),new WeakSet),a=(e,r,o)=>({__lunoraProcedure:e,...o?{__lunoraVisibility:o}:{},input:n=>a(e,{...r,args:{...r.args,...n}},o),[e]:n=>{const s=g(r.middlewares),d=w(r.middlewares),t=i(r.middlewares);return{args:r.args,...r.expose?{expose:r.expose}:{},handler:q(r.args,r.middlewares,n,r.output,r.meta),kind:e,...d?{maskedTables:d}:{},...t?{perDispatch:t}:{},...s?{rls:s}:{},...o?{visibility:o}:{},...r.x402?{x402:r.x402}:{}}},meta:n=>a(e,{...r,meta:O({...r.meta,...n})},o),output:n=>a(e,{...r,output:n},o),...e==="query"?{stream:(n,s)=>{const d=g(r.middlewares),t=w(r.middlewares),c=i(r.middlewares),u=s?.durable===!0?{}:s?.durable;return{args:r.args,...u?{durable:u}:{},...r.expose?{expose:r.expose}:{},handler:D(r.args,r.middlewares,n,r.meta),kind:"stream",...t?{maskedTables:t}:{},...c?{perDispatch:c}:{},...d?{rls:d}:{},...o?{visibility:o}:{},...r.x402?{x402:r.x402}:{}}}}:{},use:n=>a(e,{...r,middlewares:[...r.middlewares,n]},o),...o?{}:{expose:n=>a(e,{...r,expose:n},o)},...o?{}:{x402:n=>a(e,{...r,x402:n},o)}}),k={dataModel:()=>({create:e=>({action:a("action",{args:{},middlewares:[]}),internalAction:a("action",{args:{},middlewares:[]},"internal"),internalMutation:a("mutation",{args:{},middlewares:[]},"internal"),internalQuery:a("query",{args:{},middlewares:[]},"internal"),mutation:a("mutation",{args:{},middlewares:[]}),query:a("query",{args:{},middlewares:[]})})})};export{k as initLunora};