gemi 0.4.78 → 0.4.80

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.
Files changed (117) hide show
  1. package/dist/app/App.d.ts +5 -10
  2. package/dist/app/App.d.ts.map +1 -1
  3. package/dist/app/index.js +60 -60
  4. package/dist/bin/index.js +104 -75
  5. package/dist/broadcasting/BroadcastingChannel.d.ts +5 -0
  6. package/dist/broadcasting/BroadcastingChannel.d.ts.map +1 -0
  7. package/dist/broadcasting/index.js +2 -0
  8. package/dist/chunk-02ba977a552fd2da.js +18 -0
  9. package/dist/chunk-0ba2cc302113ab40.js +3 -0
  10. package/dist/{chunk-28c7d04b6f555350.js → chunk-1e6b656dc70ab1fd.js} +2 -2
  11. package/dist/{chunk-e3d242546d1a2927.js → chunk-24a86f8f5ddc0cbd.js} +1 -1
  12. package/dist/chunk-2786cd9024d0d164.js +2 -0
  13. package/dist/chunk-357d6f34be7eafaa.js +2 -0
  14. package/dist/chunk-5075c75a0b45f02c.js +2 -0
  15. package/dist/{chunk-20e12a96dfe36b97.js → chunk-53b7d6267c9172bc.js} +1 -1
  16. package/dist/chunk-55c7fe17750b0378.js +9 -0
  17. package/dist/chunk-5ddf530ee3afe1d4.js +2 -0
  18. package/dist/{chunk-4e37f45d636da627.js → chunk-6a97611e6bd65152.js} +2 -2
  19. package/dist/chunk-7d5fe4acabfee228.js +2 -0
  20. package/dist/{chunk-9631e167bae739a0.js → chunk-813a4c185ab4c0c0.js} +1 -1
  21. package/dist/chunk-81fb135d80e84b06.js +2 -0
  22. package/dist/chunk-8ee09f1f74206a04.js +2 -0
  23. package/dist/chunk-9475c6ed18013dc8.js +2 -0
  24. package/dist/chunk-a7246b5b3e2f2366.js +2 -0
  25. package/dist/chunk-aebf7df48200842b.js +2 -0
  26. package/dist/chunk-b3b228374e54f4ff.js +6 -0
  27. package/dist/chunk-c22e0fc22de0403a.js +2 -0
  28. package/dist/chunk-e1a9177afdc46b3b.js +2 -0
  29. package/dist/chunk-e834f558250dac89.js +2 -0
  30. package/dist/chunk-e910e2a8677bca82.js +2 -0
  31. package/dist/chunk-f47acd04bf65c5c9.js +2 -0
  32. package/dist/{chunk-5ea45ebea038bef4.js → chunk-f9f264ce0c8e9699.js} +2 -2
  33. package/dist/{chunk-4ad752c87b795617.js → chunk-ff8cd8fd047cfee5.js} +2 -2
  34. package/dist/client/ClientRouter.d.ts.map +1 -1
  35. package/dist/client/HttpReload.d.ts.map +1 -1
  36. package/dist/client/WebsocketContext.d.ts +10 -0
  37. package/dist/client/WebsocketContext.d.ts.map +1 -0
  38. package/dist/client/index.d.ts +2 -0
  39. package/dist/client/index.d.ts.map +1 -1
  40. package/dist/client/index.js +114 -13
  41. package/dist/client/useBroadcast.d.ts +4 -0
  42. package/dist/client/useBroadcast.d.ts.map +1 -0
  43. package/dist/client/useQuery.d.ts.map +1 -1
  44. package/dist/client/useSearchParams.d.ts +1 -1
  45. package/dist/client/useSearchParams.d.ts.map +1 -1
  46. package/dist/client/useSubscription.d.ts +5 -0
  47. package/dist/client/useSubscription.d.ts.map +1 -0
  48. package/dist/email/Email.d.ts +12 -5
  49. package/dist/email/Email.d.ts.map +1 -1
  50. package/dist/email/index.d.ts +0 -2
  51. package/dist/email/index.d.ts.map +1 -1
  52. package/dist/email/index.js +1 -1
  53. package/dist/facades/Auth.d.ts.map +1 -1
  54. package/dist/facades/Broadcast.d.ts +6 -0
  55. package/dist/facades/Broadcast.d.ts.map +1 -0
  56. package/dist/facades/Prefetch.d.ts.map +1 -1
  57. package/dist/facades/index.d.ts +1 -0
  58. package/dist/facades/index.d.ts.map +1 -1
  59. package/dist/facades/index.js +1 -1
  60. package/dist/http/ApiRouter.d.ts.map +1 -1
  61. package/dist/http/BroadcastingRouter.d.ts +8 -0
  62. package/dist/http/BroadcastingRouter.d.ts.map +1 -0
  63. package/dist/http/HttpRequest.d.ts.map +1 -1
  64. package/dist/http/index.js +1 -1
  65. package/dist/kernel/Kernel.d.ts +9 -3
  66. package/dist/kernel/Kernel.d.ts.map +1 -1
  67. package/dist/kernel/context.d.ts +4 -2
  68. package/dist/kernel/context.d.ts.map +1 -1
  69. package/dist/kernel/index.js +1 -2
  70. package/dist/server/index.js +5 -5
  71. package/dist/services/ServiceContainer.d.ts +7 -0
  72. package/dist/services/ServiceContainer.d.ts.map +1 -0
  73. package/dist/services/email/EmailServiceContainer.d.ts +8 -0
  74. package/dist/services/email/EmailServiceContainer.d.ts.map +1 -0
  75. package/dist/services/email/EmailServiceProvider.d.ts +9 -0
  76. package/dist/services/email/EmailServiceProvider.d.ts.map +1 -0
  77. package/dist/services/email/drivers/EmailDriver.d.ts +5 -0
  78. package/dist/services/email/drivers/EmailDriver.d.ts.map +1 -0
  79. package/dist/services/email/drivers/ResendDriver.d.ts +8 -0
  80. package/dist/services/email/drivers/ResendDriver.d.ts.map +1 -0
  81. package/dist/{email → services/email/drivers}/types.d.ts +2 -3
  82. package/dist/services/email/drivers/types.d.ts.map +1 -0
  83. package/dist/services/index.d.ts +5 -0
  84. package/dist/services/index.d.ts.map +1 -1
  85. package/dist/services/index.js +1 -1
  86. package/dist/services/pubsub/BroadcastingServiceContainer.d.ts +24 -0
  87. package/dist/services/pubsub/BroadcastingServiceContainer.d.ts.map +1 -0
  88. package/dist/services/pubsub/BroadcastingServiceProvider.d.ts +7 -0
  89. package/dist/services/pubsub/BroadcastingServiceProvider.d.ts.map +1 -0
  90. package/dist/services/pubsub/types.d.ts +6 -0
  91. package/dist/services/pubsub/types.d.ts.map +1 -0
  92. package/dist/utils/applyParams.d.ts +1 -1
  93. package/dist/utils/applyParams.d.ts.map +1 -1
  94. package/package.json +4 -2
  95. package/dist/chunk-168ace6fc79b185b.js +0 -2
  96. package/dist/chunk-1c56f79378e4123d.js +0 -2
  97. package/dist/chunk-269dd2cd89aa1c32.js +0 -2
  98. package/dist/chunk-30daf610f498e198.js +0 -6
  99. package/dist/chunk-3abc648638ed6645.js +0 -18
  100. package/dist/chunk-48b2990a93ae50b3.js +0 -2
  101. package/dist/chunk-52dd5453e79e1cef.js +0 -2
  102. package/dist/chunk-5c1c113b94101135.js +0 -2
  103. package/dist/chunk-5fb9d31b7b4629e9.js +0 -1
  104. package/dist/chunk-8bf925705fdcef0c.js +0 -2
  105. package/dist/chunk-9c05674e98ebc485.js +0 -2
  106. package/dist/chunk-a5da5f8d6f9e8633.js +0 -2
  107. package/dist/chunk-b943cac32cc3670f.js +0 -2
  108. package/dist/chunk-d4eceea16ddc567d.js +0 -9
  109. package/dist/chunk-e64fe80074576b85.js +0 -2
  110. package/dist/chunk-f9d7921dc209275a.js +0 -2
  111. package/dist/email/EmailServiceProvider.d.ts +0 -8
  112. package/dist/email/EmailServiceProvider.d.ts.map +0 -1
  113. package/dist/email/EmailTemplate.d.ts +0 -22
  114. package/dist/email/EmailTemplate.d.ts.map +0 -1
  115. package/dist/email/providers.d.ts +0 -5
  116. package/dist/email/providers.d.ts.map +0 -1
  117. package/dist/email/types.d.ts.map +0 -1
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- import"../chunk-e3d242546d1a2927.js";class T{requests={};static kind="controller";constructor(){}}class C extends T{constructor(){super(...arguments)}}function H(e){return typeof e==="function"&&e.prototype!==void 0}var v=function(e){return H(e)};class l{e;t;n;middlewares=[];constructor(e,t,n){this.method=e;this.handler=t;this.methodName=n;this.handler=t,this.methodName=n,this.method=e}run(e){if(v(this.handler)){const t=new this.handler;return t[this.methodName].bind(t)()}else return this.handler()}middleware(e){return this.middlewares=e,this}}class K{constructor(...e){return new l(...e)}}class m{routes={};middlewares=[];middleware(e){}get(e,t){return new l("GET",e,t)}post(e,t){return new l("POST",e,t)}put(e,t){return new l("PUT",e,t)}patch(e,t){return new l("PATCH",e,t)}delete(e,t){return new l("DELETE",e,t)}resource(e){class t extends m{constructor(){super(...arguments)}routes={"/":{list:this.get(e,"list"),create:this.post(e,"create")},"/:id":{show:this.get(e,"show"),update:this.put(e,"update"),delete:this.delete(e,"delete")}}}return t}file(e,t){return new K("GET",e,t)}}class g{e;middlewares=[];handler;constructor(e,t){this.viewPath=e;if(!t)this.handler=()=>({});else if(typeof t==="function")this.handler=t;else{const[n,r]=t,o=new n,s=o[r].bind(o);this.handler=(u)=>{return s()}}}async run(e){return{[this.viewPath]:await this.handler(e)}}middleware(e){return this.middlewares=e,this}}class O{e;children;middlewares=[];handler=()=>({});constructor(e,t,n){this.viewPath=e;if(typeof t==="function")this.handler=t,this.children=class extends y{routes=n??{}};else if(Array.isArray(t)){const[r,o]=t,s=new r,u=s[o].bind(s);this.handler=(a)=>{let d=a;return d=s.requests[o]?new s.requests[o](a.rawRequest,a.params):d,u(a)},this.children=class extends y{routes=n??{}}}else this.children=class extends y{routes=t},this.handler=()=>({})}async run(e){return{[this.viewPath]:await this.handler(e)}}middleware(e){return this.middlewares=e,this}}class y{middlewares=[];routes={};view(e,t){return new g(e,t)}layout(e,t,n){return new O(e,t,n)}}var ee="GEMI_REQUEST_BREAKER_ERROR";class i extends Error{constructor(){super(...arguments)}kind="GEMI_REQUEST_BREAKER_ERROR";payload={api:{},view:{}}}class h extends i{errors={};constructor(e){super("Validation error");this.name="ValidationError",this.errors=e,this.payload={api:{status:400,data:{error:{kind:"validation_error",messages:e}},headers:{"Content-Type":"application/json"}},view:{status:400}}}}import{AsyncLocalStorage as D} from"async_hooks";class R{e;t;n;constructor(e,t,n={}){this.name=e;this.value=t;this.options=n}toString(){return[`${this.name}=${this.value}`,this.options.maxAge?`Max-Age=${this.options.maxAge}`:"",this.options.httpOnly?"HttpOnly":"",this.options.secure?"Secure":"",this.options.sameSite?`SameSite=${this.options.sameSite}`:"SameSite=Strict",this.options.path?`Path=${this.options.path}`:"Path=/",this.options.domain?`Domain=${this.options.domain}`:"",this.options.expires?`Expires=${this.options.expires.toUTCString()}`:"",this.options.partitioned?"Partitioned":""].filter((e)=>e!=="").join("; ")}}var f=new D;class I{e;cookies=new Set;headers=new Headers;prefetchedResources=new Map;prefetchPromiseQueue=new Set;user=null;constructor(e){this.req=e}setCookie(e,t,n={}){this.cookies.add(new R(e,t,n))}setHeaders(e,t){this.headers.set(e,t)}setUser(e){this.user=e}setRequest(e){this.req=e}destroy(){delete this.cookies,delete this.headers,delete this.prefetchedResources,delete this.prefetchPromiseQueue,delete this.user}}class p{static getStore(){return f.getStore()}static setRequest(e){f.getStore().req=e}static run(e,t){return f.run(new I(e),t)}}var G=function(e){const[t,n]=e.match(/\d+|\D+/g)??[];if(!t||!n)return 0;const r=parseInt(t);switch(n){case"B":return r;case"KB":return r*1024;case"MB":return r*1024*1024;case"GB":return r*1024*1024*1024;case"TB":return r*1024*1024*1024*1024;default:return 0}},_=function(e){switch(e){case"image":return"image";case"png":return"image/png";case"jpg":return"image/jpeg";case"jpeg":return"image/jpeg";case"ttf":return"font/ttf";case"excel":return"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";case"csv":return"text/csv";case"word":return"application/vnd.openxmlformats-officedocument.wordprocessingml.document";case"pdf":return"application/pdf";case"json":return"application/json";default:return e}},N=function(e){const[t,n]=e.split(":");switch(t){case"required":return(r)=>{if(r instanceof Blob)return r.size>0;return r!==null&&r!==void 0&&r?.length>0};case"password":return(r)=>{return/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[^a-zA-Z0-9]).{8,}$/.test(r)};case"number":return(r)=>{if(typeof r!=="number")return!1;return!isNaN(r)};case"min":return(r)=>{return r?.length>=parseInt(n)};case"max":return(r)=>{return r?.length<=parseInt(n)};case"email":return(r)=>{return/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(r)};case"file":return(r)=>{return r instanceof Blob};case"fileType":return(r)=>{if(r instanceof Blob){const o=_(n);return r.type.startsWith(o)}};case"fileSize":return(r)=>{if(r instanceof Blob){const o=G(n);return r.size<=o}};default:return()=>!0}};class w{e;constructor(e){this.data=e}get(e){return this.data[e]}set(e,t){this.data[e]=t}has(e){return this.data[e]!==void 0}toJSON(){return this.data}}class M{rawRequest;headers;cookies;search;schema={};params;ctx=p.getStore();constructor(e,t){if(!e){const o=p.getStore().req;this.params=o.params,this.rawRequest=o.rawRequest}else this.params=t,this.rawRequest=e;this.headers=this.rawRequest.headers;const n=this.rawRequest.headers.get("Cookie"),r=new Map;if(n){const o=n.split(";");for(let s of o){const[u,a]=s.split("=");r.set(u.trim(),a.trim())}}if(this.rawRequest.method==="GET"){const o=new URL(this.rawRequest.url),s=Object.fromEntries(o.searchParams.entries());this.search=new w(s)}this.cookies=r}refine(e){return{}}async parseBody(){const e=new w({});if(this.rawRequest.headers.get("Content-Type")==="application/json"){const t=await this.rawRequest.json();for(let[n,r]of Object.entries(t))e.set(n,r)}if(this.rawRequest.headers.get("Content-Type")==="application/x-www-form-urlencoded"){const t=await this.rawRequest.formData();for(let[n,r]of t)e.set(n,r)}if(this.rawRequest.headers.get("Content-Type")?.startsWith("multipart/form-data")){const t=await this.rawRequest.formData();for(let[n,r]of t)if(e.has(n)){const o=e.get(n);if(Array.isArray(o))o.push(r),e.set(n,o);else e.set(n,[o,r])}else e.set(n,r)}return e}validateInput(e){const t={};for(let[n,r]of Object.entries(this.schema))for(let[o,s]of Object.entries(r)){const u=N(o);let a=s,d=!1;if(typeof s==="function")a=s(e.get(n)),d=typeof a==="undefined";else d=u(e.get(n));if(d)continue;if(!t[n])t[n]=[];if(o==="required"){t[n]=[String(a)];break}else t[n].push(String(a))}for(let[n,r]of Object.entries(this.refine(e.toJSON())??{})){if(!t[n])t[n]=[];t[n]=[...t[n]??[],r]}if(Object.keys(t).length>0)throw new h(t);else return e}async input(){return this.validateInput(await this.parseBody())}async safeInput(){const e=await this.parseBody();try{return this.validateInput(e),{isValid:!0,errors:{},input:e}}catch(t){if(!(t instanceof h))throw t;return{isValid:!1,errors:t.errors,input:e}}}async terminate(e){throw"not implemented"}}class c{e;constructor(e){this.routePath=e}async run(e,...t){return{}}}function B(e){const t=e.headers.get("cookie");if(!t)return new Map;const n=new Map,r=t.split(";");for(let o of r){const[s,u]=o.split("=");n.set(s.trim(),u)}return n}class q{aliases={}}import{AsyncLocalStorage as j} from"async_hooks";var b=new j;class x{static getStore=()=>b.getStore()}class E extends i{error;constructor(e="Not authorized"){super("Authentication error");this.name="AuthenticationError",this.error=e,this.payload={api:{status:401,data:{error:this.error}},view:{}}}}class A extends i{error;constructor(e="Insufficient permissions"){super("Authentication error");this.name="AuthenticationError",this.error=e,this.payload={api:{status:401,data:{error:this.error}},view:{}}}}class P extends i{constructor(){super("Authentication error");this.name="AuthenticationError"}payload={api:{status:401,data:{error:"Authentication error"}},view:{status:302,headers:{"Cache-Control":"private, no-cache, no-store, max-age=0, must-revalidate",Location:"/auth/sign-in"}}}}class S extends c{constructor(){super(...arguments)}async run(e){const t=p.getStore(),n=t.req.cookies.get("access_token");if(!n)throw new P;let r=t.user;if(!r){const o=await x.getStore().authenticationServiceProvider.adapter.findSession({token:n,userAgent:t.req.headers.get("User-Agent")});if(!o)throw new P;r=o?.user,t.setUser(r)}return{}}}class V extends i{constructor(){super("Rate limit exceeded");this.payload={api:{status:429,data:{error:{message:"Rate limit exceeded"}},headers:{"Content-Type":"application/json"}},view:{error:{message:"Rate limit exceeded"},status:429}}}}class $ extends c{constructor(){super(...arguments)}async run(e,t=1000){const n=e.headers.get("x-forwarded-for"),r=x.getStore().rateLimiterServiceContainer.service.driver,o=r.consume.call(r,n,this.routePath);if(console.log({result:o,limit:t}),o>t)throw new V;return{}}}class k{policiesList={};constructor(){const e=this.register();for(let t of e){const n=new t;this.policiesList[t.name]=n}}register(){return[]}}class L{all(e,t){return!0}}class U{dictionary={};supportedLocales=[];defaultLocale="en-US";async init(){}detectLocale(e){return this.defaultLocale}}export{B as getCookies,y as ViewRouter,h as ValidationError,C as ResourceController,i as RequestBreakerError,$ as RateLimitMiddleware,k as PoliciesServiceProvider,L as Policies,q as MiddlewareServiceProvider,c as Middleware,A as InsufficientPermissionsError,U as I18nServiceProvider,M as HttpRequest,T as Controller,E as AuthorizationError,S as AuthenticationMiddleware,P as AuthenticationError,m as ApiRouter};export{T as a,H as b,m as c,y as d,ee as e,i as f,h as g,p as h,M as i,q as j,b as k,x as l,E as m,A as n,k as o,U as p};
2
+ import{A as T} from"../chunk-9475c6ed18013dc8.js";import"../chunk-24a86f8f5ddc0cbd.js";class m{requests={};static kind="controller";constructor(){}}class H extends m{constructor(){super(...arguments)}}function K(e){return typeof e==="function"&&e.prototype!==void 0}var v=function(e){return K(e)};class u{e;t;n;middlewares=[];constructor(e,t,n){this.method=e;this.handler=t;this.methodName=n;this.handler=t,this.methodName=n,this.method=e}run(e){if(v(this.handler)){const t=new this.handler;return t[this.methodName].bind(t)()}else return this.handler()}middleware(e){return this.middlewares=e,this}}class g{constructor(...e){return new u(...e)}}class R{routes={};middlewares=[];middleware(e){}get(e,t){return new u("GET",e,t)}post(e,t){return new u("POST",e,t)}put(e,t){return new u("PUT",e,t)}patch(e,t){return new u("PATCH",e,t)}delete(e,t){return new u("DELETE",e,t)}resource(e){class t extends R{constructor(){super(...arguments)}routes={"/":{list:this.get(e,"list"),create:this.post(e,"create")},"/:id":{show:this.get(e,"show"),update:this.put(e,"update"),delete:this.delete(e,"delete")}}}return t}file(e,t){return new g("GET",e,t)}}class O{e;middlewares=[];handler;constructor(e,t){this.viewPath=e;if(!t)this.handler=()=>({});else if(typeof t==="function")this.handler=t;else{const[n,r]=t,s=new n,o=s[r].bind(s);this.handler=(i)=>{return o()}}}async run(e){return{[this.viewPath]:await this.handler(e)}}middleware(e){return this.middlewares=e,this}}class I{e;children;middlewares=[];handler=()=>({});constructor(e,t,n){this.viewPath=e;if(typeof t==="function")this.handler=t,this.children=class extends y{routes=n??{}};else if(Array.isArray(t)){const[r,s]=t,o=new r,i=o[s].bind(o);this.handler=(a)=>{let d=a;return d=o.requests[s]?new o.requests[s](a.rawRequest,a.params):d,i(a)},this.children=class extends y{routes=n??{}}}else this.children=class extends y{routes=t},this.handler=()=>({})}async run(e){return{[this.viewPath]:await this.handler(e)}}middleware(e){return this.middlewares=e,this}}class y{middlewares=[];routes={};view(e,t){return new O(e,t)}layout(e,t,n){return new I(e,t,n)}}var z="GEMI_REQUEST_BREAKER_ERROR";class l extends Error{constructor(){super(...arguments)}kind="GEMI_REQUEST_BREAKER_ERROR";payload={api:{},view:{}}}class h extends l{errors={};constructor(e){super("Validation error");this.name="ValidationError",this.errors=e,this.payload={api:{status:400,data:{error:{kind:"validation_error",messages:e}},headers:{"Content-Type":"application/json"}},view:{status:400}}}}import{AsyncLocalStorage as D} from"async_hooks";class f{e;t;n;constructor(e,t,n={}){this.name=e;this.value=t;this.options=n}toString(){return[`${this.name}=${this.value}`,this.options.maxAge?`Max-Age=${this.options.maxAge}`:"",this.options.httpOnly?"HttpOnly":"",this.options.secure?"Secure":"",this.options.sameSite?`SameSite=${this.options.sameSite}`:"SameSite=Strict",this.options.path?`Path=${this.options.path}`:"Path=/",this.options.domain?`Domain=${this.options.domain}`:"",this.options.expires?`Expires=${this.options.expires.toUTCString()}`:"",this.options.partitioned?"Partitioned":""].filter((e)=>e!=="").join("; ")}}var w=new D;class M{e;cookies=new Set;headers=new Headers;prefetchedResources=new Map;prefetchPromiseQueue=new Set;user=null;constructor(e){this.req=e}setCookie(e,t,n={}){this.cookies.add(new f(e,t,n))}setHeaders(e,t){this.headers.set(e,t)}setUser(e){this.user=e}setRequest(e){this.req=e}destroy(){delete this.cookies,delete this.headers,delete this.prefetchedResources,delete this.prefetchPromiseQueue,delete this.user}}class p{static getStore(){return w.getStore()}static setRequest(e){w.getStore().req=e}static run(e,t){return w.run(new M(e),t)}}var G=function(e){const[t,n]=e.match(/\d+|\D+/g)??[];if(!t||!n)return 0;const r=parseInt(t);switch(n){case"B":return r;case"KB":return r*1024;case"MB":return r*1024*1024;case"GB":return r*1024*1024*1024;case"TB":return r*1024*1024*1024*1024;default:return 0}},_=function(e){switch(e){case"image":return"image";case"png":return"image/png";case"jpg":return"image/jpeg";case"jpeg":return"image/jpeg";case"ttf":return"font/ttf";case"excel":return"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";case"csv":return"text/csv";case"word":return"application/vnd.openxmlformats-officedocument.wordprocessingml.document";case"pdf":return"application/pdf";case"json":return"application/json";default:return e}},N=function(e){const[t,n]=e.split(":");switch(t){case"required":return(r)=>{if(r instanceof Blob)return r.size>0;return r!==null&&r!==void 0&&r?.length>0};case"password":return(r)=>{return/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[^a-zA-Z0-9]).{8,}$/.test(r)};case"number":return(r)=>{if(typeof r!=="number")return!1;return!isNaN(r)};case"min":return(r)=>{return r?.length>=parseInt(n)};case"max":return(r)=>{return r?.length<=parseInt(n)};case"email":return(r)=>{return/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(r)};case"file":return(r)=>{return r instanceof Blob};case"fileType":return(r)=>{if(r instanceof Blob){const s=_(n);return r.type.startsWith(s)}};case"fileSize":return(r)=>{if(r instanceof Blob){const s=G(n);return r.size<=s}};default:return()=>!0}};class C{e;constructor(e){this.data=e}get(e){return this.data[e]}set(e,t){this.data[e]=t}has(e){return this.data[e]!==void 0}toJSON(){return this.data}}class q{rawRequest;headers;cookies;search;schema={};params;ctx=p.getStore();constructor(e,t){if(!e){const s=p.getStore().req;this.params=s.params,this.rawRequest=s.rawRequest}else this.params=t,this.rawRequest=e;this.headers=this.rawRequest.headers;const n=this.rawRequest.headers.get("Cookie"),r=new Map;if(n){const s=n.split(";");for(let o of s){const[i,a]=o.split("=");r.set(i.trim(),a.trim())}}if(this.rawRequest.method==="GET"){const s=new URL(this.rawRequest.url),o=new Map;for(let[a,d]of s.searchParams)if(o.has(a)){const P=o.get(a);if(Array.isArray(P))P.push(d),o.set(a,P);else o.set(a,[P,d])}else o.set(a,d);const i=Object.fromEntries(o.entries());this.search=new C(i)}this.cookies=r}refine(e){return{}}async parseBody(){const e=new C({});if(this.rawRequest.headers.get("Content-Type")==="application/json"){const t=await this.rawRequest.json();for(let[n,r]of Object.entries(t))e.set(n,r)}if(this.rawRequest.headers.get("Content-Type")==="application/x-www-form-urlencoded"){const t=await this.rawRequest.formData();for(let[n,r]of t)e.set(n,r)}if(this.rawRequest.headers.get("Content-Type")?.startsWith("multipart/form-data")){const t=await this.rawRequest.formData();for(let[n,r]of t)if(e.has(n)){const s=e.get(n);if(Array.isArray(s))s.push(r),e.set(n,s);else e.set(n,[s,r])}else e.set(n,r)}return e}validateInput(e){const t={};for(let[n,r]of Object.entries(this.schema))for(let[s,o]of Object.entries(r)){const i=N(s);let a=o,d=!1;if(typeof o==="function")a=o(e.get(n)),d=typeof a==="undefined";else d=i(e.get(n));if(d)continue;if(!t[n])t[n]=[];if(s==="required"){t[n]=[String(a)];break}else t[n].push(String(a))}for(let[n,r]of Object.entries(this.refine(e.toJSON())??{})){if(!t[n])t[n]=[];t[n]=[...t[n]??[],r]}if(Object.keys(t).length>0)throw new h(t);else return e}async input(){return this.validateInput(await this.parseBody())}async safeInput(){const e=await this.parseBody();try{return this.validateInput(e),{isValid:!0,errors:{},input:e}}catch(t){if(!(t instanceof h))throw t;return{isValid:!1,errors:t.errors,input:e}}}async terminate(e){throw"not implemented"}}class c{e;constructor(e){this.routePath=e}async run(e,...t){return{}}}function B(e){const t=e.headers.get("cookie");if(!t)return new Map;const n=new Map,r=t.split(";");for(let s of r){const[o,i]=s.split("=");n.set(o.trim(),i)}return n}class b{aliases={}}class E extends l{error;constructor(e="Not authorized"){super("Authentication error");this.name="AuthenticationError",this.error=e,this.payload={api:{status:401,data:{error:this.error}},view:{}}}}class A extends l{error;constructor(e="Insufficient permissions"){super("Authentication error");this.name="AuthenticationError",this.error=e,this.payload={api:{status:401,data:{error:this.error}},view:{}}}}class x extends l{constructor(){super("Authentication error");this.name="AuthenticationError"}payload={api:{status:401,data:{error:"Authentication error"}},view:{status:302,headers:{"Cache-Control":"private, no-cache, no-store, max-age=0, must-revalidate",Location:"/auth/sign-in"}}}}class S extends c{constructor(){super(...arguments)}async run(e){const t=p.getStore(),n=t.req.cookies.get("access_token");if(!n)throw new x;let r=t.user;if(!r){const s=await T.getStore().authenticationServiceProvider.adapter.findSession({token:n,userAgent:t.req.headers.get("User-Agent")});if(!s)throw new x;r=s?.user,t.setUser(r)}return{}}}class $ extends l{constructor(){super("Rate limit exceeded");this.payload={api:{status:429,data:{error:{message:"Rate limit exceeded"}},headers:{"Content-Type":"application/json"}},view:{error:{message:"Rate limit exceeded"},status:429}}}}class V extends c{constructor(){super(...arguments)}async run(e,t=1000){const n=e.headers.get("x-forwarded-for"),r=T.getStore().rateLimiterServiceContainer.service.driver,s=r.consume.call(r,n,this.routePath);if(console.log({result:s,limit:t}),s>t)throw new $;return{}}}class L{policiesList={};constructor(){const e=this.register();for(let t of e){const n=new t;this.policiesList[t.name]=n}}register(){return[]}}class k{all(e,t){return!0}}class U{dictionary={};supportedLocales=[];defaultLocale="en-US";async init(){}detectLocale(e){return this.defaultLocale}}export{B as getCookies,y as ViewRouter,h as ValidationError,H as ResourceController,l as RequestBreakerError,V as RateLimitMiddleware,L as PoliciesServiceProvider,k as Policies,b as MiddlewareServiceProvider,c as Middleware,A as InsufficientPermissionsError,U as I18nServiceProvider,q as HttpRequest,m as Controller,E as AuthorizationError,S as AuthenticationMiddleware,x as AuthenticationError,R as ApiRouter};export{m as a,K as b,R as c,y as d,z as e,l as f,h as g,p as h,q as i,b as j,E as k,A as l,L as m,U as n};
@@ -1,4 +1,3 @@
1
- import { EmailServiceProvider } from "../email/EmailServiceProvider";
2
1
  import { AuthenticationServiceProvider } from "../auth/AuthenticationServiceProvider";
3
2
  import { MiddlewareServiceProvider } from "../http/MiddlewareServiceProvider";
4
3
  import { PoliciesServiceProvider } from "../http/PoliciesServiceProvider";
@@ -11,6 +10,10 @@ import { ApiRouterServiceProvider } from "../services/router/ApiRouterServicePro
11
10
  import { MiddlewareServiceContainer } from "../services/middleware/MiddlewareServiceContainer";
12
11
  import { RateLimiterServiceContainer } from "../services/rate-limiter/RateLimiterServiceContainer";
13
12
  import { RateLimiterServiceProvider } from "../services";
13
+ import { EmailServiceProvider } from "../services/email/EmailServiceProvider";
14
+ import { EmailServiceContainer } from "../services/email/EmailServiceContainer";
15
+ import { BroadcastingServiceContainer } from "../services/pubsub/BroadcastingServiceContainer";
16
+ import { BroadcastingServiceProvider } from "../services/pubsub/BroadcastingServiceProvider";
14
17
  export declare class Kernel {
15
18
  protected emailServiceProvider: typeof EmailServiceProvider;
16
19
  protected authenticationServiceProvider: typeof AuthenticationServiceProvider;
@@ -20,8 +23,9 @@ export declare class Kernel {
20
23
  protected fileStorageServiceProvider: typeof FileStorageServiceProvider;
21
24
  protected apiRouterServiceProvider: typeof ApiRouterServiceProvider;
22
25
  protected rateLimiterServiceProvider: typeof RateLimiterServiceProvider;
26
+ protected broadcastingsServiceProvider: typeof BroadcastingServiceProvider;
23
27
  services: {
24
- emailServiceProvider: EmailServiceProvider;
28
+ emailServiceContainer: EmailServiceContainer;
25
29
  authenticationServiceProvider: AuthenticationServiceProvider;
26
30
  policiesServiceProvider: PoliciesServiceProvider;
27
31
  i18nServiceContainer: I18nServiceContainer;
@@ -29,9 +33,10 @@ export declare class Kernel {
29
33
  apiRouterServiceContainer: ApiRouterServiceContainer;
30
34
  middlewareServiceContainer: MiddlewareServiceContainer;
31
35
  rateLimiterServiceContainer: RateLimiterServiceContainer;
36
+ broadcastingServiceContainer: BroadcastingServiceContainer;
32
37
  };
33
38
  getServices: () => {
34
- emailServiceProvider: EmailServiceProvider;
39
+ emailServiceContainer: EmailServiceContainer;
35
40
  authenticationServiceProvider: AuthenticationServiceProvider;
36
41
  policiesServiceProvider: PoliciesServiceProvider;
37
42
  i18nServiceContainer: I18nServiceContainer;
@@ -39,6 +44,7 @@ export declare class Kernel {
39
44
  apiRouterServiceContainer: ApiRouterServiceContainer;
40
45
  middlewareServiceContainer: MiddlewareServiceContainer;
41
46
  rateLimiterServiceContainer: RateLimiterServiceContainer;
47
+ broadcastingServiceContainer: BroadcastingServiceContainer;
42
48
  };
43
49
  static getContext: () => import("./context").KernelContextValue;
44
50
  run<T>(cb: () => T): T;
@@ -1 +1 @@
1
- {"version":3,"file":"Kernel.d.ts","sourceRoot":"","sources":["../../kernel/Kernel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,6BAA6B,EAAE,MAAM,uCAAuC,CAAC;AAEtF,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,2BAA2B,EAAE,MAAM,sDAAsD,CAAC;AACnG,OAAO,EAAE,0BAA0B,EAAE,MAAM,qDAAqD,CAAC;AACjG,OAAO,EAAE,yBAAyB,EAAE,MAAM,8CAA8C,CAAC;AACzF,OAAO,EAAE,wBAAwB,EAAE,MAAM,6CAA6C,CAAC;AACvF,OAAO,EAAE,0BAA0B,EAAE,MAAM,mDAAmD,CAAC;AAC/F,OAAO,EAAE,2BAA2B,EAAE,MAAM,sDAAsD,CAAC;AACnG,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAEzD,qBAAa,MAAM;IACjB,SAAS,CAAC,oBAAoB,8BAAwB;IACtD,SAAS,CAAC,6BAA6B,uCAAiC;IACxE,SAAS,CAAC,yBAAyB,mCAA6B;IAChE,SAAS,CAAC,uBAAuB,iCAA2B;IAC5D,SAAS,CAAC,mBAAmB,6BAAuB;IACpD,SAAS,CAAC,0BAA0B,oCAA8B;IAClE,SAAS,CAAC,wBAAwB,kCAA4B;IAC9D,SAAS,CAAC,0BAA0B,oCAA8B;IAElE,QAAQ,EAAE;QACR,oBAAoB,EAAE,oBAAoB,CAAC;QAC3C,6BAA6B,EAAE,6BAA6B,CAAC;QAC7D,uBAAuB,EAAE,uBAAuB,CAAC;QACjD,oBAAoB,EAAE,oBAAoB,CAAC;QAC3C,2BAA2B,EAAE,2BAA2B,CAAC;QACzD,yBAAyB,EAAE,yBAAyB,CAAC;QACrD,0BAA0B,EAAE,0BAA0B,CAAC;QACvD,2BAA2B,EAAE,2BAA2B,CAAC;KAC1D,CAAC;IAEF,WAAW;8BAVa,oBAAoB;uCACX,6BAA6B;iCACnC,uBAAuB;8BAC1B,oBAAoB;qCACb,2BAA2B;mCAC7B,yBAAyB;oCACxB,0BAA0B;qCACzB,2BAA2B;MA2BxD;IAEF,MAAM,CAAC,UAAU,+CAAkC;IAEnD,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC;CAInB"}
1
+ {"version":3,"file":"Kernel.d.ts","sourceRoot":"","sources":["../../kernel/Kernel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAE,MAAM,uCAAuC,CAAC;AAEtF,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,2BAA2B,EAAE,MAAM,sDAAsD,CAAC;AACnG,OAAO,EAAE,0BAA0B,EAAE,MAAM,qDAAqD,CAAC;AACjG,OAAO,EAAE,yBAAyB,EAAE,MAAM,8CAA8C,CAAC;AACzF,OAAO,EAAE,wBAAwB,EAAE,MAAM,6CAA6C,CAAC;AACvF,OAAO,EAAE,0BAA0B,EAAE,MAAM,mDAAmD,CAAC;AAC/F,OAAO,EAAE,2BAA2B,EAAE,MAAM,sDAAsD,CAAC;AACnG,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAC9E,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAChF,OAAO,EAAE,4BAA4B,EAAE,MAAM,iDAAiD,CAAC;AAC/F,OAAO,EAAE,2BAA2B,EAAE,MAAM,gDAAgD,CAAC;AAE7F,qBAAa,MAAM;IACjB,SAAS,CAAC,oBAAoB,8BAAwB;IACtD,SAAS,CAAC,6BAA6B,uCAAiC;IACxE,SAAS,CAAC,yBAAyB,mCAA6B;IAChE,SAAS,CAAC,uBAAuB,iCAA2B;IAC5D,SAAS,CAAC,mBAAmB,6BAAuB;IACpD,SAAS,CAAC,0BAA0B,oCAA8B;IAClE,SAAS,CAAC,wBAAwB,kCAA4B;IAC9D,SAAS,CAAC,0BAA0B,oCAA8B;IAClE,SAAS,CAAC,4BAA4B,qCAA+B;IAErE,QAAQ,EAAE;QACR,qBAAqB,EAAE,qBAAqB,CAAC;QAC7C,6BAA6B,EAAE,6BAA6B,CAAC;QAC7D,uBAAuB,EAAE,uBAAuB,CAAC;QACjD,oBAAoB,EAAE,oBAAoB,CAAC;QAC3C,2BAA2B,EAAE,2BAA2B,CAAC;QACzD,yBAAyB,EAAE,yBAAyB,CAAC;QACrD,0BAA0B,EAAE,0BAA0B,CAAC;QACvD,2BAA2B,EAAE,2BAA2B,CAAC;QACzD,4BAA4B,EAAE,4BAA4B,CAAC;KAC5D,CAAC;IAEF,WAAW;+BAXc,qBAAqB;uCACb,6BAA6B;iCACnC,uBAAuB;8BAC1B,oBAAoB;qCACb,2BAA2B;mCAC7B,yBAAyB;oCACxB,0BAA0B;qCACzB,2BAA2B;sCAC1B,4BAA4B;MAgC1D;IAEF,MAAM,CAAC,UAAU,+CAAkC;IAEnD,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC;CAInB"}
@@ -1,5 +1,4 @@
1
1
  import { AsyncLocalStorage } from "async_hooks";
2
- import { EmailServiceProvider } from "../email/EmailServiceProvider";
3
2
  import { AuthenticationServiceProvider } from "../auth/AuthenticationServiceProvider";
4
3
  import { PoliciesServiceProvider } from "../http/PoliciesServiceProvider";
5
4
  import { I18nServiceContainer } from "../http/I18nServiceContainer";
@@ -7,8 +6,10 @@ import { FileStorageServiceContainer } from "../services/file-storage/FileStorag
7
6
  import { ApiRouterServiceContainer } from "../services/router/ApiRouterServiceContainer";
8
7
  import { MiddlewareServiceContainer } from "../services/middleware/MiddlewareServiceContainer";
9
8
  import { RateLimiterServiceContainer } from "../services/rate-limiter/RateLimiterServiceContainer";
9
+ import { EmailServiceContainer } from "../services/email/EmailServiceContainer";
10
+ import { BroadcastingServiceContainer } from "../services/pubsub/BroadcastingServiceContainer";
10
11
  export interface KernelContextValue {
11
- emailServiceProvider: EmailServiceProvider;
12
+ emailServiceContainer: EmailServiceContainer;
12
13
  authenticationServiceProvider: AuthenticationServiceProvider;
13
14
  policiesServiceProvider: PoliciesServiceProvider;
14
15
  i18nServiceContainer: I18nServiceContainer;
@@ -16,6 +17,7 @@ export interface KernelContextValue {
16
17
  apiRouterServiceContainer: ApiRouterServiceContainer;
17
18
  middlewareServiceContainer: MiddlewareServiceContainer;
18
19
  rateLimiterServiceContainer: RateLimiterServiceContainer;
20
+ broadcastingServiceContainer: BroadcastingServiceContainer;
19
21
  }
20
22
  export declare const kernelContext: AsyncLocalStorage<KernelContextValue>;
21
23
  //# sourceMappingURL=context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../kernel/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,6BAA6B,EAAE,MAAM,uCAAuC,CAAC;AACtF,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,2BAA2B,EAAE,MAAM,sDAAsD,CAAC;AACnG,OAAO,EAAE,yBAAyB,EAAE,MAAM,8CAA8C,CAAC;AACzF,OAAO,EAAE,0BAA0B,EAAE,MAAM,mDAAmD,CAAC;AAC/F,OAAO,EAAE,2BAA2B,EAAE,MAAM,sDAAsD,CAAC;AAEnG,MAAM,WAAW,kBAAkB;IACjC,oBAAoB,EAAE,oBAAoB,CAAC;IAC3C,6BAA6B,EAAE,6BAA6B,CAAC;IAC7D,uBAAuB,EAAE,uBAAuB,CAAC;IACjD,oBAAoB,EAAE,oBAAoB,CAAC;IAC3C,2BAA2B,EAAE,2BAA2B,CAAC;IACzD,yBAAyB,EAAE,yBAAyB,CAAC;IACrD,0BAA0B,EAAE,0BAA0B,CAAC;IACvD,2BAA2B,EAAE,2BAA2B,CAAC;CAC1D;AAED,eAAO,MAAM,aAAa,uCAA8C,CAAC"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../kernel/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,6BAA6B,EAAE,MAAM,uCAAuC,CAAC;AACtF,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,2BAA2B,EAAE,MAAM,sDAAsD,CAAC;AACnG,OAAO,EAAE,yBAAyB,EAAE,MAAM,8CAA8C,CAAC;AACzF,OAAO,EAAE,0BAA0B,EAAE,MAAM,mDAAmD,CAAC;AAC/F,OAAO,EAAE,2BAA2B,EAAE,MAAM,sDAAsD,CAAC;AACnG,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAChF,OAAO,EAAE,4BAA4B,EAAE,MAAM,iDAAiD,CAAC;AAE/F,MAAM,WAAW,kBAAkB;IACjC,qBAAqB,EAAE,qBAAqB,CAAC;IAC7C,6BAA6B,EAAE,6BAA6B,CAAC;IAC7D,uBAAuB,EAAE,uBAAuB,CAAC;IACjD,oBAAoB,EAAE,oBAAoB,CAAC;IAC3C,2BAA2B,EAAE,2BAA2B,CAAC;IACzD,yBAAyB,EAAE,yBAAyB,CAAC;IACrD,0BAA0B,EAAE,0BAA0B,CAAC;IACvD,2BAA2B,EAAE,2BAA2B,CAAC;IACzD,4BAA4B,EAAE,4BAA4B,CAAC;CAC5D;AAED,eAAO,MAAM,aAAa,uCAA8C,CAAC"}