equipped 5.3.2 → 5.3.3
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/CHANGELOG.md +7 -0
- package/dist/cjs/errors/index.cjs +11 -0
- package/dist/cjs/errors/index.cjs.map +1 -1
- package/dist/cjs/errors/index.min.cjs +1 -1
- package/dist/cjs/errors/index.min.cjs.map +1 -1
- package/dist/cjs/orm/adapters/postgresql/index.cjs +8 -0
- package/dist/cjs/orm/adapters/postgresql/index.cjs.map +1 -1
- package/dist/cjs/orm/adapters/postgresql/index.min.cjs +5 -5
- package/dist/cjs/orm/adapters/postgresql/index.min.cjs.map +1 -1
- package/dist/cjs/server/adapters/express/index.cjs +1 -0
- package/dist/cjs/server/adapters/express/index.cjs.map +1 -1
- package/dist/cjs/server/adapters/express/index.min.cjs +1 -1
- package/dist/cjs/server/adapters/express/index.min.cjs.map +1 -1
- package/dist/cjs/server/adapters/fastify/index.cjs +1 -0
- package/dist/cjs/server/adapters/fastify/index.cjs.map +1 -1
- package/dist/cjs/server/adapters/fastify/index.min.cjs +1 -1
- package/dist/cjs/server/adapters/fastify/index.min.cjs.map +1 -1
- package/dist/cjs/server/index.cjs +1 -0
- package/dist/cjs/server/index.cjs.map +1 -1
- package/dist/cjs/server/index.min.cjs +4 -4
- package/dist/cjs/server/index.min.cjs.map +1 -1
- package/dist/cjs/validations/index.cjs +1 -0
- package/dist/cjs/validations/index.cjs.map +1 -1
- package/dist/cjs/validations/index.min.cjs +1 -1
- package/dist/cjs/validations/index.min.cjs.map +1 -1
- package/dist/esm/cache/adapters/in-memory/index.min.mjs +1 -1
- package/dist/esm/cache/adapters/in-memory/index.mjs +3 -3
- package/dist/esm/cache/adapters/redis/index.min.mjs +1 -1
- package/dist/esm/cache/adapters/redis/index.mjs +4 -4
- package/dist/esm/cache/index.min.mjs +1 -1
- package/dist/esm/cache/index.mjs +2 -2
- package/dist/esm/{chunk-YDQW6ETS.min.mjs → chunk-4GZ43EQ2.min.mjs} +2 -2
- package/dist/esm/{chunk-DAUQA32Q.min.mjs → chunk-5FEVQT6K.min.mjs} +2 -2
- package/dist/esm/{chunk-RPPYCWXW.mjs → chunk-74GY55PM.mjs} +2 -2
- package/dist/esm/{chunk-CEYT5YBA.mjs → chunk-7N4WUZ7P.mjs} +11 -1
- package/dist/esm/chunk-7N4WUZ7P.mjs.map +1 -0
- package/dist/esm/{chunk-NNFUYHQ7.mjs → chunk-A332TTED.mjs} +2 -2
- package/dist/esm/{chunk-PCEHFZ6G.mjs → chunk-BONYW6LU.mjs} +3 -3
- package/dist/esm/{chunk-T2O72JBW.mjs → chunk-C3G4W4ZV.mjs} +3 -3
- package/dist/esm/{chunk-X7VNAGLR.min.mjs → chunk-LJZOS62I.min.mjs} +2 -2
- package/dist/esm/{chunk-AODOD22O.min.mjs → chunk-MCX2O5IT.min.mjs} +2 -2
- package/dist/esm/{chunk-FQYRVHQT.mjs → chunk-MNKDFIVK.mjs} +2 -2
- package/dist/esm/{chunk-APSDCRY5.min.mjs → chunk-N3OD4QL2.min.mjs} +8 -8
- package/dist/esm/chunk-N3OD4QL2.min.mjs.map +1 -0
- package/dist/esm/{chunk-VQO4MSEC.mjs → chunk-RFJ5URMP.mjs} +2 -2
- package/dist/esm/{chunk-DAK7OKSH.min.mjs → chunk-RX4XPABH.min.mjs} +2 -2
- package/dist/esm/{chunk-ZDBDR3IB.min.mjs → chunk-SPOVKWV3.min.mjs} +2 -2
- package/dist/esm/{chunk-RIXTQQUU.mjs → chunk-XESM7IWM.mjs} +2 -2
- package/dist/esm/{chunk-26BOI6IL.mjs → chunk-XJKBHQWO.mjs} +3 -3
- package/dist/esm/{chunk-XTXAEBXY.min.mjs → chunk-YC6V4HLT.min.mjs} +2 -2
- package/dist/esm/{chunk-QCCDJLBH.min.mjs → chunk-YWQTFKNY.min.mjs} +2 -2
- package/dist/esm/dbs/adapters/mongodb/index.min.mjs +1 -1
- package/dist/esm/dbs/adapters/mongodb/index.mjs +4 -4
- package/dist/esm/dbs/index.min.mjs +1 -1
- package/dist/esm/dbs/index.mjs +4 -4
- package/dist/esm/errors/index.min.mjs +1 -1
- package/dist/esm/errors/index.mjs +3 -1
- package/dist/esm/events/adapters/kafka/index.min.mjs +1 -1
- package/dist/esm/events/adapters/kafka/index.mjs +3 -3
- package/dist/esm/events/adapters/rabbitmq/index.min.mjs +1 -1
- package/dist/esm/events/adapters/rabbitmq/index.mjs +2 -2
- package/dist/esm/index.min.mjs +1 -1
- package/dist/esm/index.mjs +1 -1
- package/dist/esm/instance/index.min.mjs +1 -1
- package/dist/esm/instance/index.mjs +1 -1
- package/dist/esm/introspection-TO27QT2X.min.mjs +2 -0
- package/dist/esm/{introspection-FGDVYTPP.mjs → introspection-ZUQYVEFC.mjs} +3 -3
- package/dist/esm/jobs/adapters/redis/index.min.mjs +1 -1
- package/dist/esm/jobs/adapters/redis/index.mjs +4 -4
- package/dist/esm/orm/adapters/in-memory/index.min.mjs +1 -1
- package/dist/esm/orm/adapters/in-memory/index.mjs +3 -3
- package/dist/esm/orm/adapters/json/index.min.mjs +1 -1
- package/dist/esm/orm/adapters/json/index.mjs +3 -3
- package/dist/esm/orm/adapters/mongodb/index.min.mjs +1 -1
- package/dist/esm/orm/adapters/mongodb/index.mjs +2 -2
- package/dist/esm/orm/adapters/postgresql/index.min.mjs +2 -2
- package/dist/esm/orm/adapters/postgresql/index.mjs +4 -4
- package/dist/esm/orm/index.min.mjs +1 -1
- package/dist/esm/orm/index.mjs +3 -3
- package/dist/esm/server/adapters/express/index.min.mjs +1 -1
- package/dist/esm/server/adapters/express/index.mjs +2 -2
- package/dist/esm/server/adapters/fastify/index.min.mjs +1 -1
- package/dist/esm/server/adapters/fastify/index.mjs +2 -2
- package/dist/esm/server/index.min.mjs +1 -1
- package/dist/esm/server/index.mjs +1 -1
- package/dist/esm/utilities/index.min.mjs +1 -1
- package/dist/esm/utilities/index.mjs +2 -2
- package/dist/esm/validations/index.min.mjs +1 -1
- package/dist/esm/validations/index.mjs +1 -1
- package/dist/types/{base-qDndMBf8.d.ts → base-BnwwLupM.d.ts} +1 -1
- package/dist/types/cache/adapters/in-memory/index.js +5 -5
- package/dist/types/cache/adapters/redis/index.js +4 -4
- package/dist/types/cache/index.js +2 -2
- package/dist/types/{chunk-H5V6ADFD.js → chunk-7MXHWHRV.js} +1 -1
- package/dist/types/{chunk-GDMGPX4C.js → chunk-BKXNLF6X.js} +1 -1
- package/dist/types/{chunk-4YQA5GPT.js → chunk-DZFKDZDZ.js} +2 -2
- package/dist/types/{chunk-AQIV47BY.js → chunk-GQRSK2KP.js} +4 -4
- package/dist/types/{chunk-T7K7PO6G.js → chunk-SZAA5GF6.js} +1 -1
- package/dist/types/{chunk-35CDCTLR.js → chunk-UGLZIYAR.js} +1 -1
- package/dist/types/{chunk-DA2VYP7D.js → chunk-UR7O43FC.js} +1 -1
- package/dist/types/{chunk-OOKJEMQI.js → chunk-X5ZDIXCZ.js} +2 -2
- package/dist/types/{chunk-BKDWUJRG.js → chunk-YGIIUOQM.js} +10 -0
- package/dist/types/dbs/adapters/mongodb/index.js +4 -4
- package/dist/types/dbs/index.js +4 -4
- package/dist/types/errors/index.d.ts +8 -3
- package/dist/types/errors/index.js +3 -1
- package/dist/types/events/adapters/kafka/index.js +3 -3
- package/dist/types/events/adapters/rabbitmq/index.js +2 -2
- package/dist/types/index.js +1 -1
- package/dist/types/instance/index.js +1 -1
- package/dist/types/{introspection-FSNS33CQ.js → introspection-ZQMYTW6H.js} +2 -2
- package/dist/types/jobs/adapters/redis/index.js +4 -4
- package/dist/types/orm/adapters/in-memory/index.js +3 -3
- package/dist/types/orm/adapters/json/index.js +3 -3
- package/dist/types/orm/adapters/mongodb/index.js +2 -2
- package/dist/types/orm/adapters/postgresql/index.js +4 -4
- package/dist/types/orm/index.js +3 -3
- package/dist/types/{requestError-DdaL8hc3.d.ts → requestError-BmOhSuFb.d.ts} +1 -0
- package/dist/types/server/adapters/express/index.d.ts +2 -2
- package/dist/types/server/adapters/express/index.js +2 -2
- package/dist/types/server/adapters/fastify/index.d.ts +3 -3
- package/dist/types/server/adapters/fastify/index.js +2 -2
- package/dist/types/server/index.d.ts +4 -4
- package/dist/types/server/index.js +1 -1
- package/dist/types/utilities/index.js +2 -2
- package/dist/types/{validationError-oigtHqBi.d.ts → validationError-C2tVK4s7.d.ts} +1 -1
- package/dist/types/validations/index.d.ts +4 -4
- package/dist/types/validations/index.js +1 -1
- package/package.json +1 -1
- package/dist/esm/chunk-APSDCRY5.min.mjs.map +0 -1
- package/dist/esm/chunk-CEYT5YBA.mjs.map +0 -1
- package/dist/esm/introspection-UDWDS6DV.min.mjs +0 -2
- /package/dist/esm/{chunk-YDQW6ETS.min.mjs.map → chunk-4GZ43EQ2.min.mjs.map} +0 -0
- /package/dist/esm/{chunk-DAUQA32Q.min.mjs.map → chunk-5FEVQT6K.min.mjs.map} +0 -0
- /package/dist/esm/{chunk-RPPYCWXW.mjs.map → chunk-74GY55PM.mjs.map} +0 -0
- /package/dist/esm/{chunk-NNFUYHQ7.mjs.map → chunk-A332TTED.mjs.map} +0 -0
- /package/dist/esm/{chunk-PCEHFZ6G.mjs.map → chunk-BONYW6LU.mjs.map} +0 -0
- /package/dist/esm/{chunk-T2O72JBW.mjs.map → chunk-C3G4W4ZV.mjs.map} +0 -0
- /package/dist/esm/{chunk-X7VNAGLR.min.mjs.map → chunk-LJZOS62I.min.mjs.map} +0 -0
- /package/dist/esm/{chunk-AODOD22O.min.mjs.map → chunk-MCX2O5IT.min.mjs.map} +0 -0
- /package/dist/esm/{chunk-FQYRVHQT.mjs.map → chunk-MNKDFIVK.mjs.map} +0 -0
- /package/dist/esm/{chunk-VQO4MSEC.mjs.map → chunk-RFJ5URMP.mjs.map} +0 -0
- /package/dist/esm/{chunk-DAK7OKSH.min.mjs.map → chunk-RX4XPABH.min.mjs.map} +0 -0
- /package/dist/esm/{chunk-ZDBDR3IB.min.mjs.map → chunk-SPOVKWV3.min.mjs.map} +0 -0
- /package/dist/esm/{chunk-RIXTQQUU.mjs.map → chunk-XESM7IWM.mjs.map} +0 -0
- /package/dist/esm/{chunk-26BOI6IL.mjs.map → chunk-XJKBHQWO.mjs.map} +0 -0
- /package/dist/esm/{chunk-XTXAEBXY.min.mjs.map → chunk-YC6V4HLT.min.mjs.map} +0 -0
- /package/dist/esm/{chunk-QCCDJLBH.min.mjs.map → chunk-YWQTFKNY.min.mjs.map} +0 -0
- /package/dist/esm/{introspection-FGDVYTPP.mjs.map → introspection-TO27QT2X.min.mjs.map} +0 -0
- /package/dist/esm/{introspection-UDWDS6DV.min.mjs.map → introspection-ZUQYVEFC.mjs.map} +0 -0
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
"use strict";var Be=Object.create;var G=Object.defineProperty;var Ie=Object.getOwnPropertyDescriptor;var Oe=Object.getOwnPropertyNames;var Ne=Object.getPrototypeOf,Me=Object.prototype.hasOwnProperty;var te=(o,e)=>{for(var t in e)G(o,t,{get:e[t],enumerable:!0})},V=(o,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of Oe(e))!Me.call(o,r)&&r!==t&&G(o,r,{get:()=>e[r],enumerable:!(s=Ie(e,r))||s.enumerable});return o},O=(o,e,t)=>(V(o,e,"default"),t&&V(t,e,"default")),K=(o,e,t)=>(t=o!=null?Be(Ne(o)):{},V(e||!o||!o.__esModule?G(t,"default",{value:o,enumerable:!0}):t,o)),je=o=>V(G({},"__esModule",{value:!0}),o);var tt={};te(tt,{BaseApiKeyRequestAuthMethod:()=>pe,BaseJwtCookieRequestAuthMethod:()=>de,BaseJwtHeaderRequestAuthMethod:()=>ce,BaseJwtRequestAuthMethod:()=>$,BaseRequestAuthMethod:()=>q,Methods:()=>x,Request:()=>ie,Response:()=>H,Router:()=>L,Server:()=>le,StatusCodes:()=>h,makeErrorMiddleware:()=>Ue,makeMiddleware:()=>ae,makeResponseMiddleware:()=>ze,requireAuthUser:()=>et,serverConfigPipe:()=>Qe});module.exports=je(tt);var Yt=require("http"),es=require("@fastify/cors"),ts=require("cors"),qe=require("socket.io"),Se=K(require("supertest"),1),i=require("valleyed");var R=class extends Error{constructor(t,s,r){super(t,{cause:r});this.message=t;this.context=s;this.cause=r}};var C=class extends R{constructor(t,s,r){super(t,{serializedErrors:s},r);this.message=t;this.serializedErrors=s}};var J=class extends C{statusCode=h.BadRequest;constructor(e,t){super(e,[{message:e}],t)}};var E=class extends C{statusCode=h.NotAuthenticated;constructor(e="Not authenticated",t){super(e,[{message:e}],t)}};var z=class extends C{statusCode=h.NotFound;constructor(e="Not found",t){super(e,[{message:e}],t)}};var N=class extends C{statusCode=h.TokenExpired;constructor(e="Token expired",t){super(e,[{message:e}],t)}};var U=class extends C{statusCode=h.ValidationError;constructor(e,t){super("Unprocessable Entity",e.flatMap(({field:s,messages:r})=>r.map(n=>({message:n,field:s}))),t)}};var W=class{};var M=K(require("pino"),1),me=require("ulid"),se=require("valleyed");function he(o,e){for(let t of e.after)if(!o.some(s=>s.class===t)){let s=t.name||"unknown",r=e.class?.name||"anonymous";throw new Error(`Missing dependency: ${r} declares after: [${s}], but ${s} is not registered`)}if(e.class){let t=[...o,e];Le(t)}o.push(e)}function Le(o){let e=new Map;for(let n of o){if(!n.class)continue;let d=e.get(n.class);if(d)for(let u of n.after)d.includes(u)||d.push(u);else e.set(n.class,[...n.after])}let t=new Set,s=new Set;function r(n,d){if(s.has(n)){let u=d.indexOf(n),c=[...d.slice(u),n].map(g=>g.name||"unknown");throw new Error(`Cycle detected: ${c.join(" \u2192 ")}`)}if(!t.has(n)){s.add(n),d.push(n);for(let u of e.get(n)??[])r(u,d);d.pop(),s.delete(n),t.add(n)}}for(let n of e.keys())r(n,[])}function Fe(o,e=!1){if(o.length===0)return[];let t=new Map,s=[];for(let c of o)if(c.class){let g=t.get(c.class);g?g.push(c):t.set(c.class,[c])}else s.push(c);let r=[...t.keys()],n=new Map,d=new Map;for(let c of r)n.set(c,0),d.set(c,[]);for(let c of o)if(c.class)for(let g of c.after){let[y,k]=e?[c.class,g]:[g,c.class],b=d.get(y);b.includes(k)||(b.push(k),n.set(k,n.get(k)+1))}let u=[],m=r.filter(c=>n.get(c)===0);for(;m.length>0;){let c=[],g=[];for(let y of m)c.push(...t.get(y)??[]);u.push(c);for(let y of m)for(let k of d.get(y)??[]){let b=n.get(k)-1;n.set(k,b),b===0&&g.push(k)}m=g}if(s.length>0){let c=s.filter(y=>y.after.length>0),g=s.filter(y=>y.after.length===0);if(c.length>0){let y=-1;for(let b of c)for(let B of b.after){let a=u.findIndex(p=>p.some(l=>l.class===B));a>y&&(y=a)}let k=y+1;k<u.length?u[k].push(...c):u.push(c)}g.length>0&&(u.length>0?u[u.length-1].push(...g):u.push(g))}return u}async function _(o,e=s=>{throw s},t=!1){let s=Fe(o,t);for(let r of s)await Promise.all(r.map(async n=>{try{return typeof n.cb=="function"?await n.cb():await n.cb}catch(d){return e(d instanceof Error?d:new Error(`${d}`))}}))}var T=require("valleyed"),ye=()=>T.v.object({app:T.v.object({name:T.v.string()}),log:T.v.defaults(T.v.object({level:T.v.defaults(T.v.in(["fatal","error","warn","info","debug","trace","silent"]),"info")}),{}),utils:T.v.defaults(T.v.object({hashSaltRounds:T.v.defaults(T.v.number(),10),paginationDefaultLimit:T.v.defaults(T.v.number(),100),maxFileUploadSizeInMb:T.v.defaults(T.v.number(),500)}),{})});var
|
|
1
|
+
"use strict";var Be=Object.create;var G=Object.defineProperty;var Ie=Object.getOwnPropertyDescriptor;var Oe=Object.getOwnPropertyNames;var Ne=Object.getPrototypeOf,Me=Object.prototype.hasOwnProperty;var te=(o,e)=>{for(var t in e)G(o,t,{get:e[t],enumerable:!0})},V=(o,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of Oe(e))!Me.call(o,r)&&r!==t&&G(o,r,{get:()=>e[r],enumerable:!(s=Ie(e,r))||s.enumerable});return o},O=(o,e,t)=>(V(o,e,"default"),t&&V(t,e,"default")),K=(o,e,t)=>(t=o!=null?Be(Ne(o)):{},V(e||!o||!o.__esModule?G(t,"default",{value:o,enumerable:!0}):t,o)),je=o=>V(G({},"__esModule",{value:!0}),o);var tt={};te(tt,{BaseApiKeyRequestAuthMethod:()=>pe,BaseJwtCookieRequestAuthMethod:()=>de,BaseJwtHeaderRequestAuthMethod:()=>ce,BaseJwtRequestAuthMethod:()=>$,BaseRequestAuthMethod:()=>q,Methods:()=>x,Request:()=>ie,Response:()=>H,Router:()=>L,Server:()=>le,StatusCodes:()=>h,makeErrorMiddleware:()=>Ue,makeMiddleware:()=>ae,makeResponseMiddleware:()=>ze,requireAuthUser:()=>et,serverConfigPipe:()=>Qe});module.exports=je(tt);var Yt=require("http"),es=require("@fastify/cors"),ts=require("cors"),qe=require("socket.io"),Se=K(require("supertest"),1),i=require("valleyed");var R=class extends Error{constructor(t,s,r){super(t,{cause:r});this.message=t;this.context=s;this.cause=r}};var C=class extends R{constructor(t,s,r){super(t,{serializedErrors:s},r);this.message=t;this.serializedErrors=s}};var J=class extends C{statusCode=h.BadRequest;constructor(e,t){super(e,[{message:e}],t)}};var E=class extends C{statusCode=h.NotAuthenticated;constructor(e="Not authenticated",t){super(e,[{message:e}],t)}};var z=class extends C{statusCode=h.NotFound;constructor(e="Not found",t){super(e,[{message:e}],t)}};var N=class extends C{statusCode=h.TokenExpired;constructor(e="Token expired",t){super(e,[{message:e}],t)}};var U=class extends C{statusCode=h.ValidationError;constructor(e,t){super("Unprocessable Entity",e.flatMap(({field:s,messages:r})=>r.map(n=>({message:n,field:s}))),t)}};var W=class{};var M=K(require("pino"),1),me=require("ulid"),se=require("valleyed");function he(o,e){for(let t of e.after)if(!o.some(s=>s.class===t)){let s=t.name||"unknown",r=e.class?.name||"anonymous";throw new Error(`Missing dependency: ${r} declares after: [${s}], but ${s} is not registered`)}if(e.class){let t=[...o,e];Le(t)}o.push(e)}function Le(o){let e=new Map;for(let n of o){if(!n.class)continue;let d=e.get(n.class);if(d)for(let u of n.after)d.includes(u)||d.push(u);else e.set(n.class,[...n.after])}let t=new Set,s=new Set;function r(n,d){if(s.has(n)){let u=d.indexOf(n),c=[...d.slice(u),n].map(g=>g.name||"unknown");throw new Error(`Cycle detected: ${c.join(" \u2192 ")}`)}if(!t.has(n)){s.add(n),d.push(n);for(let u of e.get(n)??[])r(u,d);d.pop(),s.delete(n),t.add(n)}}for(let n of e.keys())r(n,[])}function Fe(o,e=!1){if(o.length===0)return[];let t=new Map,s=[];for(let c of o)if(c.class){let g=t.get(c.class);g?g.push(c):t.set(c.class,[c])}else s.push(c);let r=[...t.keys()],n=new Map,d=new Map;for(let c of r)n.set(c,0),d.set(c,[]);for(let c of o)if(c.class)for(let g of c.after){let[y,k]=e?[c.class,g]:[g,c.class],b=d.get(y);b.includes(k)||(b.push(k),n.set(k,n.get(k)+1))}let u=[],m=r.filter(c=>n.get(c)===0);for(;m.length>0;){let c=[],g=[];for(let y of m)c.push(...t.get(y)??[]);u.push(c);for(let y of m)for(let k of d.get(y)??[]){let b=n.get(k)-1;n.set(k,b),b===0&&g.push(k)}m=g}if(s.length>0){let c=s.filter(y=>y.after.length>0),g=s.filter(y=>y.after.length===0);if(c.length>0){let y=-1;for(let b of c)for(let B of b.after){let a=u.findIndex(p=>p.some(l=>l.class===B));a>y&&(y=a)}let k=y+1;k<u.length?u[k].push(...c):u.push(c)}g.length>0&&(u.length>0?u[u.length-1].push(...g):u.push(g))}return u}async function _(o,e=s=>{throw s},t=!1){let s=Fe(o,t);for(let r of s)await Promise.all(r.map(async n=>{try{return typeof n.cb=="function"?await n.cb():await n.cb}catch(d){return e(d instanceof Error?d:new Error(`${d}`))}}))}var T=require("valleyed"),ye=()=>T.v.object({app:T.v.object({name:T.v.string()}),log:T.v.defaults(T.v.object({level:T.v.defaults(T.v.in(["fatal","error","warn","info","debug","trace","silent"]),"info")}),{}),utils:T.v.defaults(T.v.object({hashSaltRounds:T.v.defaults(T.v.number(),10),paginationDefaultLimit:T.v.defaults(T.v.number(),100),maxFileUploadSizeInMb:T.v.defaults(T.v.number(),500)}),{})});var P=class o{static#e;static#t;static#o={};settings;log;constructor(e){o.#t=this,this.settings=Object.freeze(e),this.log=(0,M.default)({level:this.settings.log.level,serializers:{err:M.default.stdSerializers.err,error:M.default.stdSerializers.err,req:M.default.stdSerializers.req,res:M.default.stdSerializers.res},mixin:()=>({instanceId:o.#e})}),o.#s()}alias(e){if(o.#e!==void 0)return o.crash(new R("Instance already has an alias",{}));o.#e=e}get id(){return o.#e===void 0?o.crash(new R("Instance doesnt have an alias yet",{})):o.#e}getScopedName(e,t="."){return[this.settings.app.name,e].join(t)}async start(){try{await _(o.#o.setup??[]),await _(o.#o.start??[])}catch(e){o.crash(new R("Error starting instance",{},e))}}static envs(e){let t=se.v.validate(e,process.env);return t.valid||o.crash(new R(`Environment variables are not valid
|
|
2
2
|
${t.error.toString()}`,{messages:t.error.messages})),t.value}static create(e){if(o.#t)return o.crash(new R("Instance has been initialized already",{}));let t=se.v.validate(ye(),e);return t.valid||o.crash(new R(`Settings are not valid
|
|
3
|
-
${t.error.toString()}`,{messages:t.error.messages})),new o(t.value)}static get(){return o.#t?o.#t:o.crash(new R("Has not been initialized. Make sure an instance has been created before you get an instance",{}))}static maybeGet(){return o.#t}static on(e,t,s){o.#o[e]??=[];let r={cb:t,class:s?.class,after:s?.after??[]};he(o.#o[e],r)}static#s(){Object.entries({SIGHUP:1,SIGINT:2,SIGTERM:15}).forEach(([t,s])=>{process.on(t,async()=>{await _(o.#o.close??[],()=>{},!0),process.exit(128+s)})})}static resolveBeforeCrash(e){let t=e();return o.on("close",async()=>await t),t}static crash(e){console.error(e),process.exit(1)}static createId(e){return`${e?.prefix??""}${(0,me.ulid)(e?.time?.getTime())}`}};var I={};te(I,{pipeErrorToValidationError:()=>j,validate:()=>Je,ve:()=>re});O(I,require("valleyed"));var re={};te(re,{incomingFile:()=>$e,incomingFiles:()=>Ve,requestLocalStorage:()=>Q,responseLocalStorage:()=>X,withRequest:()=>Ge,withResponse:()=>Ke});var oe=require("async_hooks"),D=require("valleyed");var ge=o=>D.v.array(D.v.file(o).pipe(e=>{let t=`is larger than allowed limit of ${
|
|
3
|
+
${t.error.toString()}`,{messages:t.error.messages})),new o(t.value)}static get(){return o.#t?o.#t:o.crash(new R("Has not been initialized. Make sure an instance has been created before you get an instance",{}))}static maybeGet(){return o.#t}static on(e,t,s){o.#o[e]??=[];let r={cb:t,class:s?.class,after:s?.after??[]};he(o.#o[e],r)}static#s(){Object.entries({SIGHUP:1,SIGINT:2,SIGTERM:15}).forEach(([t,s])=>{process.on(t,async()=>{await _(o.#o.close??[],()=>{},!0),process.exit(128+s)})})}static resolveBeforeCrash(e){let t=e();return o.on("close",async()=>await t),t}static crash(e){console.error(e),process.exit(1)}static createId(e){return`${e?.prefix??""}${(0,me.ulid)(e?.time?.getTime())}`}};var I={};te(I,{pipeErrorToValidationError:()=>j,validate:()=>Je,ve:()=>re});O(I,require("valleyed"));var re={};te(re,{incomingFile:()=>$e,incomingFiles:()=>Ve,requestLocalStorage:()=>Q,responseLocalStorage:()=>X,withRequest:()=>Ge,withResponse:()=>Ke});var oe=require("async_hooks"),D=require("valleyed");var ge=o=>D.v.array(D.v.file(o).pipe(e=>{let t=`is larger than allowed limit of ${P.get().settings.utils.maxFileUploadSizeInMb}mb`;if(e?!e.isTruncated:!0)return e;throw D.PipeError.root(t,e)})),$e=o=>D.v.define(D.v.compile(ge(o).pipe(D.v.min(1,"no file provided")).pipe(e=>e[0])),{schema:()=>({type:"string",format:"binary"})}),Ve=o=>D.v.define(D.v.compile(ge(o)),{schema:()=>({type:"string",format:"binary"})}),Q=new oe.AsyncLocalStorage,X=new oe.AsyncLocalStorage,Ge=o=>D.v.define(e=>{let t=Q.getStore();if(!t)throw new Error("Request not found in context");let s=D.v.validate(o(t),e);return s.valid?s.value:s.error}),Ke=o=>D.v.define(e=>{let t=X.getStore();if(!t)throw new Error("Response not found in context");let s=D.v.validate(o(t),e);return s.valid?s.value:s.error});var Re=require("valleyed");function j(o){let e=o.messages.reduce((t,{path:s="",message:r})=>(t[s]?t[s].messages.push(r):t[s]={field:s,messages:[r]},t),{});return new U(Object.values(e))}function Je(o,e){let t=Re.v.validate(o,e);if(t.valid)return t.value;throw j(t.error)}var F=require("@openapi-contrib/json-schema-to-openapi-schema"),ve=require("valleyed");var ke=require("valleyed");var x={head:"head",get:"get",post:"post",put:"put",patch:"patch",delete:"delete",options:"options"},h={Ok:200,Found:302,BadRequest:400,NotAuthenticated:401,NotAuthorized:403,NotFound:404,ValidationError:422,PreconditionRequired:428,TooManyRequests:429,TokenExpired:461};function ne(o,e){return{cb:o,onSetup:e}}var ae=(...o)=>ne(...o),ze=(...o)=>ne(...o),Ue=(...o)=>ne(...o);function We(...o){let e={params:"",headers:"",query:"",body:"",cookies:"",response:"",responseHeaders:"",responseCookies:"",defaultStatusCode:"",defaultContentType:""};function t(s,r){return s?r?typeof s=="number"||typeof s=="string"||typeof s=="function"?r:ke.v.merge(s,r):s:r}return Object.fromEntries(Object.keys(e).map(s=>[s,o.map(r=>r[s]).reduce(t,null)]))}var we=(o,e)=>e.map(t=>({...o,...t,path:`${o.path}/${t.path}`,groups:[...o.groups??[],...t.groups??[]],middlewares:[...o.middlewares??[],...t.middlewares??[]],responseMiddlewares:[...o.responseMiddlewares??[],...t.responseMiddlewares??[]],schema:We(o.schema??{},t.schema??{}),security:[...o.security??[],...t.security??[]]})),L=class{#e={path:""};#t=[];#o=[];constructor(e={path:""}){this.#e=e}#s(e){return(t,s={})=>r=>{let n=we(this.#e,[{...s,path:t,method:e,handler:r}])[0];return this.#t.push(n),n}}head=this.#s(x.head);get=this.#s(x.get);post=this.#s(x.post);put=this.#s(x.put);patch=this.#s(x.patch);delete=this.#s(x.delete);options=this.#s(x.options);nest(...e){e.forEach(t=>this.#o.push(t))}get routes(){return[...this.#t].concat(this.#o.flatMap(e=>we(this.#e,e.routes)))}};var be=o=>{let e=P.get(),{app:t}=e.settings,s={openapi:"3.0.0",info:{title:`${t.name} ${e.id}`,version:o.openapi.docsVersion??""},servers:o.openapi.docsBaseUrl?.map(a=>({url:a})),paths:{},components:{schemas:{},securitySchemes:{Authorization:{type:"apiKey",name:"authorization",in:"header"},RefreshToken:{type:"apiKey",name:"x-refresh-token",in:"header"},ApiKey:{type:"apiKey",name:"x-api-key",in:"header"}}},tags:[],"x-tagGroups":[]},r={},n={},d=a=>{let{allOf:p,oneOf:l,anyOf:f,...S}=a;return p?p.flatMap(v=>d(v)):[S]},u=a=>{if(!a||typeof a!="object")return a;if(typeof a.$refId=="string"){let{$refId:p,...l}=a,f=u(l);return s.components?.schemas?(s.components.schemas[p]=f,{$ref:`#/components/schemas/${p}`}):f}return Array.isArray(a)?a.map(p=>u(p)):Object.fromEntries(Object.entries(a).map(([p,l])=>[p,u(l)]))},m=a=>{if(!a.length)return;let p=a.map(v=>typeof v=="string"?{name:v}:v),l=p.map(v=>v.name).join(" > "),f=p.at(-1)?.name??"",S=p.map(v=>v.description?.trim()??"").filter(Boolean).join(`
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
|
|
7
|
-
`);if(!r[l]){r[l]=!0,s.tags.push({name:l,"x-displayName":f,description:S});let w=p.slice(0,-1).map(
|
|
7
|
+
`);if(!r[l]){r[l]=!0,s.tags.push({name:l,"x-displayName":f,description:S});let w=p.slice(0,-1).map(A=>A.name).join(" > ")||"default";if(!n[w]){let A={name:w,tags:[]};s["x-tagGroups"].push(A),n[w]=A}n[w].tags=[...new Set([...n[w].tags,l])]}return l},c=async(a,p,l,f)=>{if(l.response.response?.length){f.responses??={};for(let w of l.response.response){f.responses[w.status]??={description:"",content:{}};let A=f.responses[w.status];A.content[w.contentType]={schema:await(0,F.convert)(u(w.schema))}}}if(l.response.responseHeaders?.length){f.responses??={};for(let w of l.response.responseHeaders){f.responses[w.status]??={description:"",content:{}},f.responses[w.status];let A=f.responses[w.status];A.headers={schema:await(0,F.convert)(u(w.schema))}}}l.request.body&&(f.requestBody={required:!0,content:{"application/json":{schema:await(0,F.convert)(u(l.request.body))}}});let S=[],v=async(w,A)=>{if(!A)return;let Ae=d(A);for(let ee of Ae)if(ee.properties)for(let[fe,Ee]of Object.entries(ee.properties))S.push({name:fe,in:w,schema:await(0,F.convert)(u(Ee)),required:(ee.required||[]).includes(fe)})};await Promise.all([v("query",l.request.query),v("path",l.request.params),v("header",l.request.headers)]),S.length&&(f.parameters=S),s.paths||(s.paths={}),s.paths[a]||(s.paths[a]={}),s.paths[a][p]=f},g=a=>`
|
|
8
8
|
<!doctype html>
|
|
9
9
|
<html>
|
|
10
10
|
<head>
|
|
@@ -28,5 +28,5 @@ ${t.error.toString()}`,{messages:t.error.messages})),new o(t.value)}static get()
|
|
|
28
28
|
</html>
|
|
29
29
|
`,y=a=>{let p=a.replace(/(\/\s*)+/g,"/");return p.startsWith("/")||(p=`/${p}`),p!=="/"&&p.endsWith("/")&&(p=p.slice(0,-1)),p},k=async(a,p)=>{if(a.hide)return;let l=m(a.groups??[]),f=y(a.path),S=`(${a.method.toUpperCase()}) ${f}`;await c(f,a.method.toLowerCase(),p,{operationId:S,summary:a.title??f,description:a.descriptions?.join(`
|
|
30
30
|
|
|
31
|
-
`),tags:l?[l]:void 0,security:a.security})},b="/openapi.json",B=new L({path:o.openapi.docsPath??"/",hide:!0});return B.get("/index.html")(a=>a.res({body:g(`.${b}`),contentType:"text/html"})),B.get(b)(a=>a.res({body:s})),{router:B,register:k,cleanPath:y}};var ie=class{ip;method;path;body;params;query;headers;cookies;authUser=null;constructor({ip:e,body:t,cookies:s,params:r,query:n,method:d,path:u,headers:m,files:c}){this.ip=e,this.method=d,this.path=u,this.params=r,this.cookies=s,this.headers=m;let g=Object.keys(c).length>0,y=t&&typeof t=="object"&&!Array.isArray(t)?t:{};this.query=n,this.body=g?Object.assign({},y,c):t}pipe(e,t={}){return new H({...t,piped:!0,body:e})}res(e){return new H({...e,piped:!1})}error(e){return new H({...e,piped:!1})}},H=class{body;headers;cookies;status;contentType;piped;constructor({body:e,status:t=200,headers:s={},cookies:r={},piped:n=!1,contentType:d="application/json"}){this.body=e,this.status=t,this.contentType=d,this.headers=s,this.cookies=r,this.piped=n,this.piped||(this.headers["Content-Type"]=d)}get cookieValues(){return Object.fromEntries(Object.entries(this.cookies).map(([e,t])=>[e,t]))}set cookieValues(e){Object.entries(e).forEach(([t,s])=>{this.cookies[t]&&(this.cookies[t].value=s)})}};var Lt=require("http2");var q=class{static async process(e,t){if(e.length===0)return null;let s;for(let r of e)try{return await r.parse(t)}catch(n){s=n}throw s instanceof C?s:new J("failed to parse auth user",s)}};var pe=class extends q{headerName;constructor(e){super(),this.headerName=e}async parse(e){let t=e[this.headerName];if(!t||typeof t!="string")throw new E;return this.verify(t)}routeSecuritySchemeName(){return this.headerName}};var xe=K(require("@fastify/cookie"),1),Y=K(require("jsonwebtoken"),1);var $=class extends q{options;constructor(e){super(),this.options=e}#e(e){return`${this.options.storagePrefix??""}${e}`}async createToken(e){let t=Y.default.sign(e,this.options.signingKey,{expiresIn:this.options.storageTTL});return await this.store(this.#e(e.id),t,this.options.storageTTL),t}async parse(e){try{let t=await this.parseHeader(e),s=Y.default.verify(t,this.options.signingKey);if(!s)throw new E;if(this.options.enforceSingleSession){let r=await this.retrieve(this.#e(s.id));if(t&&t!==r)throw new N}return s}catch(t){throw t instanceof N?t:t instanceof Y.default.TokenExpiredError?new N(void 0,t):new E(void 0,t)}}async retrieveFor(e){return this.retrieve(this.#e(e))}async deleteFor(e){await this.delete(this.#e(e))}},ce=class extends ${options;constructor(e){super(e),this.options=e}async parseHeader(e){let t=e[this.options.headerName];if(!t||typeof t!="string")throw new E;return t.startsWith("Bearer ")?t.slice(7):t}routeSecuritySchemeName(){return this.options.headerName}},de=class extends ${options;constructor(e){super(e),this.options=e}async parseHeader(e){let s=(xe.default.parse(e.cookie||"")??{})[this.options.cookieName];if(!s||typeof s!="string")throw new E;return s}routeSecuritySchemeName(){return`cookie:${this.options.cookieName}`}};var Te=require("path-to-regexp");var _e="__listener_emitter",Ce="*",Z=class{constructor(e,t){this.config=t;this.socketInstance=e,this.#r(),A.on("setup",()=>{let s=t.eventBus?.stream(_e,{fanout:!0});this.#o=s?s.publish:async r=>{e.to(r.channel).emit(r.channel,r)},s?.subscribe(async r=>{e.to(r.channel).emit(r.channel,r)})})}socketInstance;#e={onConnect:async()=>{},onDisconnect:async()=>{}};#t={};#o=async()=>{};async created(e,t,s){await this.#s(e,"created",{after:t.toJSON(),before:null},s)}async updated(e,{after:t,before:s},r){await this.#s(e,"updated",{after:t.toJSON(),before:s.toJSON()},r)}async deleted(e,t,s){await this.#s(e,"deleted",{before:t.toJSON(),after:null},s)}async#s(e,t,{before:s,after:r},n){let d=Array.isArray(n)?n:[n??Ce],u=e.flatMap(m=>d.map(c=>`${c}:${m}`));await Promise.all(u.map(async m=>this.#o({channel:m,type:t,before:s,after:r})))}set connectionCallbacks(e){this.#e=e,this.#r()}register(e,t){return this.#t[e]=t,this.#t[e+"/:id"]=t,this}#n(e){let t=n=>(0,Te.match)(n)(e),s=Object.keys(this.#t).find(t)??null;if(!s)return null;let r=t(s);return r?{config:this.#t[s],params:r.params}:null}#r=()=>{this.socketInstance.removeAllListeners("connection"),this.socketInstance.on("connection",async e=>{let t=e.id,s=await q.process(this.config.socketsAuthMethods,e.handshake.headers).catch(()=>null);e.on("leave",async(r,n)=>r.channel?(e.leave(r.channel),typeof n=="function"&&n({code:h.Ok,message:"",channel:r.channel})):typeof n=="function"&&n({code:h.ValidationError,message:"channel is required",channel:""})),e.on("join",async(r,n)=>{if(!r.channel)return typeof n=="function"&&n({code:h.ValidationError,message:"channel is required",channel:""});let d=r.channel,u=this.#n(d)??null;if(!u)return typeof n=="function"&&n({code:h.BadRequest,message:"unknown channel",channel:d});let c=`${await u.config({channel:d,user:s},u.params,r.query??{})??Ce}:${d}`;return e.join(c),typeof n=="function"&&n({code:h.Ok,message:"",channel:c})}),s&&await this.#e.onConnect(s.id,t),e.on("disconnect",async()=>{s&&await this.#e.onDisconnect(s.id,t)})})}};var Qe=()=>i.v.object({port:i.v.number(),cors:i.v.optional(i.v.object({origin:i.v.optional(i.v.or([i.v.array(i.v.string()),i.v.is(!0)])),methods:i.v.optional(i.v.array(i.v.in(Object.values(x)))),credentials:i.v.optional(i.v.boolean())})),eventBus:i.v.optional(i.v.instanceOf(W)),publicPath:i.v.optional(i.v.string()),healthPath:i.v.optional(i.v.string()),openapi:i.v.defaults(i.v.object({docsVersion:i.v.defaults(i.v.string(),"1.0.0"),docsBaseUrl:i.v.defaults(i.v.array(i.v.string()),["/"]),docsPath:i.v.defaults(i.v.string(),"/__docs")}),{}),requests:i.v.defaults(i.v.object({log:i.v.defaults(i.v.boolean(),!0),rateLimit:i.v.defaults(i.v.object({enabled:i.v.defaults(i.v.boolean(),!1),periodInMs:i.v.defaults(i.v.number(),3600*1e3),limit:i.v.defaults(i.v.number(),5e3)}),{}),slowdown:i.v.defaults(i.v.object({enabled:i.v.defaults(i.v.boolean(),!1),periodInMs:i.v.defaults(i.v.number(),600*1e3),delayAfter:i.v.defaults(i.v.number(),2e3),delayInMs:i.v.defaults(i.v.number(),500)}),{})}),{}),socketsAuthMethods:i.v.defaults(i.v.array(i.v.instanceOf(q)),[])}),Ae=Symbol("rawResponseHandled"),He=Object.freeze({[Ae]:!0}),Xe="Raw not-found handler did not start or complete a response";function Ye(o){return!!(o&&typeof o=="object"&&Ae in o)}function ue(o){return o.headersSent||o.writableEnded}function De(o,e){if(ue(o))return;o.statusCode=h.BadRequest,o.setHeader("Content-Type","application/json");let t=e instanceof Error?e.message:`${e}`;o.end(JSON.stringify([{message:t}]))}var Ze=Object.entries(h).filter(([,o])=>o>399).map(([o,e])=>({status:e,contentType:"application/json",pipe:i.v.meta(i.v.array(i.v.object({message:i.v.string(),field:i.v.optional(i.v.string())})),{$refId:`Errors.${o}Response`,description:`${o} Response`})})),le=class{socket;cors;#e;#t;#o;#s=[];#n=new Set;#r=!1;#i=[];#a=null;setup(e,t){this.#e=e,this.#o=t,this.cors={origin:t.cors?.origin?(r,n)=>n(null,!0):t.cors?.origin,methods:(t.cors?.methods??Object.values(x)).filter(r=>r!==x.options).map(r=>r.toUpperCase()),credentials:t.cors?.credentials},this.#t=be(t);let s=new qe.Server(e,{cors:this.cors});this.socket=new Z(s,t),this.addRouter(this.#t.router)}addRouter(...e){e.map(t=>t.routes).forEach(t=>this.addRoute(...t))}addRoute(...e){e.forEach(t=>{this.#s.push(async()=>{let{method:s,path:r,schema:n={},onError:d,middlewares:u=[],responseMiddlewares:m=[]}=t,c=`(${s.toUpperCase()}) ${this.#t.cleanPath(r)}`;if(this.#n.has(c))throw new R(`Route key ${c} already registered. All route keys must be unique`,{route:t,key:c});u.forEach(b=>b.onSetup?.(t)),d?.onSetup?.(t),m.forEach(b=>b.onSetup?.(t));let{validateRequest:g,validateResponse:y,jsonSchema:k}=this.#c(s,n);this.#n.add(c),await this.#t.register(t,k),this.registerRoute(s,this.#t.cleanPath(r),async(b,B)=>{let a=await g(await this.parseRequest(b));try{for(let f of u)await f.cb(a);let p=await t.handler(a),l=p instanceof H?p:new H({body:p,status:h.Ok,headers:{},piped:!1});for(let f of m)await f.cb(a,l);return await this.handleResponse(B,await y(l))}catch(p){if(d?.cb){let l=await d.cb(a,p),f=l instanceof H?l:new H({body:l,status:h.BadRequest,headers:{}});return await this.handleResponse(B,await y(f))}throw p}})})})}setNotFoundHandler(e){if(this.#r)throw new R("Cannot set not-found handler after server has started",{});return this.#a=e,this}onBeforeListen(e){if(this.#r)throw new R("Cannot add before-listen handler after server has started",{});return this.#i.push(e),this}test(){return(0,Se.default)(this.#e)}async start(){this.#r=!0;let e=this.#o,t=A.get(),{app:s}=t.settings;e.healthPath&&this.addRoute({method:x.get,path:e.healthPath,handler:async n=>n.res({body:`${t.id}(${s.name}) service running`,contentType:"text/plain"})}),await Promise.all(this.#s.map(n=>n())),this.registerNotFoundHandler(async(n,d)=>await this.#p(n,d)),this.registerErrorHandler(async(n,d,u)=>{n instanceof R||A.get().log.error({error:n},"Uncaught error in route handler");let m=n instanceof C?new H({body:n.serializedErrors,status:n.statusCode}):n instanceof R?new H({body:[{message:n.message}],status:h.BadRequest}):new H({body:[{message:"Something went wrong",data:n.message}],status:h.BadRequest});return await this.handleResponse(u,m)});for(let n of this.#i)await n({httpServer:this.#e,port:e.port});let r=await this.startServer(e.port);return r&&A.get().log.info(`${t.id}(${s.name}) service listening on port ${e.port}`),r}createNodeRawResponder(e){return async t=>{e.beforeHandle?.();try{await t(e.request,e.response)}catch(s){if(!ue(e.response))return De(e.response,s),He;throw s}return ue(e.response)||De(e.response,new R(Xe,{})),He}}async#p(e,t){let s=await this.parseRequest(e);if(!this.#a)throw new z(`Route ${s.path} not found`);let r=await this.#a({request:s,respondWithRaw:this.createRawResponder(e,t)});if(!Ye(r)){if(r instanceof H)return await this.handleResponse(t,r);throw new R("Not-found handler must return a Response or respondWithRaw(...)",{})}}#c(e,t){let s=t?.defaultStatusCode??h.Ok,r=t?.defaultContentType??"application/json",n=s,d=r,u={response:{},request:{}},m={},c={};[{key:"params",type:"request"},{key:"headers",type:"request"},{key:"cookies",type:"request"},{key:"query",type:"request"},{key:"body",type:"request",skip:![x.post,x.put,x.patch].includes(e)},{key:"response",type:"response"},{key:"responseHeaders",type:"response"},{key:"responseCookies",type:"response"}].forEach(a=>{let p=t[a.key]??i.v.any();if(!a.skip&&(a.type==="request"&&(m[a.key]=p,u.request[a.key]=i.v.schema(p)),a.type==="response")){let l=Ze.concat({status:s,contentType:d,pipe:p});c[a.key]=i.v.any().pipe(f=>{let S=l.find(w=>w.status===n)?.pipe;if(!S)throw i.PipeError.root(`schema not defined for status code: ${n}`,f);let v=i.v.validate(S,f);if(!v.valid)throw v.error;return v.value}),u.response[a.key]=l.map(f=>({status:f.status,contentType:f.contentType,schema:i.v.schema(f.pipe)}))}});let y=i.v.object(m);i.v.compile(y,{allErrors:!0});let k=i.v.object(c);return i.v.compile(k,{allErrors:!0}),{jsonSchema:u,validateRequest:async a=>{if(!Object.keys(m))return a;let p=Q.run(a,()=>i.v.validate(y,{params:a.params,headers:a.headers,query:a.query,body:a.body,cookies:a.cookies}));if(!p.valid)throw j(p.error);return a.params=p.value.params,a.headers=p.value.headers,a.query=p.value.query,a.body=p.value.body,a.cookies=p.value.cookies,a},validateResponse:async a=>{if(!Object.keys(c))return a;n=a.status,d=a.contentType;let p=X.run(a,()=>i.v.validate(k,{responseHeaders:a.headers,responseCookies:Object.fromEntries(Object.entries(a.cookies).map(([l,f])=>[l,f.value])),response:a.body}));if(!p.valid)throw j(p.error);return a.body=p.value.response,a.headers=p.value.responseHeaders,a.cookieValues=p.value.responseCookies,a}}}};var et=o=>ae(async e=>{if(e.authUser=await q.process(o,e.headers),!e.authUser)throw new E},e=>{e.security??=[];for(let t of o){let s=t.routeSecuritySchemeName();s&&e.security.push({[s]:[]})}e.descriptions??=[],e.descriptions.push("Requires a valid means of authentication.")});0&&(module.exports={BaseApiKeyRequestAuthMethod,BaseJwtCookieRequestAuthMethod,BaseJwtHeaderRequestAuthMethod,BaseJwtRequestAuthMethod,BaseRequestAuthMethod,Methods,Request,Response,Router,Server,StatusCodes,makeErrorMiddleware,makeMiddleware,makeResponseMiddleware,requireAuthUser,serverConfigPipe});
|
|
31
|
+
`),tags:l?[l]:void 0,security:a.security})},b="/openapi.json",B=new L({path:o.openapi.docsPath??"/",hide:!0});return B.get("/index.html")(a=>a.res({body:g(`.${b}`),contentType:"text/html"})),B.get(b)(a=>a.res({body:s})),{router:B,register:k,cleanPath:y}};var ie=class{ip;method;path;body;params;query;headers;cookies;authUser=null;constructor({ip:e,body:t,cookies:s,params:r,query:n,method:d,path:u,headers:m,files:c}){this.ip=e,this.method=d,this.path=u,this.params=r,this.cookies=s,this.headers=m;let g=Object.keys(c).length>0,y=t&&typeof t=="object"&&!Array.isArray(t)?t:{};this.query=n,this.body=g?Object.assign({},y,c):t}pipe(e,t={}){return new H({...t,piped:!0,body:e})}res(e){return new H({...e,piped:!1})}error(e){return new H({...e,piped:!1})}},H=class{body;headers;cookies;status;contentType;piped;constructor({body:e,status:t=200,headers:s={},cookies:r={},piped:n=!1,contentType:d="application/json"}){this.body=e,this.status=t,this.contentType=d,this.headers=s,this.cookies=r,this.piped=n,this.piped||(this.headers["Content-Type"]=d)}get cookieValues(){return Object.fromEntries(Object.entries(this.cookies).map(([e,t])=>[e,t]))}set cookieValues(e){Object.entries(e).forEach(([t,s])=>{this.cookies[t]&&(this.cookies[t].value=s)})}};var Lt=require("http2");var q=class{static async process(e,t){if(e.length===0)return null;let s;for(let r of e)try{return await r.parse(t)}catch(n){s=n}throw s instanceof C?s:new J("failed to parse auth user",s)}};var pe=class extends q{headerName;constructor(e){super(),this.headerName=e}async parse(e){let t=e[this.headerName];if(!t||typeof t!="string")throw new E;return this.verify(t)}routeSecuritySchemeName(){return this.headerName}};var xe=K(require("@fastify/cookie"),1),Y=K(require("jsonwebtoken"),1);var $=class extends q{options;constructor(e){super(),this.options=e}#e(e){return`${this.options.storagePrefix??""}${e}`}async createToken(e){let t=Y.default.sign(e,this.options.signingKey,{expiresIn:this.options.storageTTL});return await this.store(this.#e(e.id),t,this.options.storageTTL),t}async parse(e){try{let t=await this.parseHeader(e),s=Y.default.verify(t,this.options.signingKey);if(!s)throw new E;if(this.options.enforceSingleSession){let r=await this.retrieve(this.#e(s.id));if(t&&t!==r)throw new N}return s}catch(t){throw t instanceof N?t:t instanceof Y.default.TokenExpiredError?new N(void 0,t):new E(void 0,t)}}async retrieveFor(e){return this.retrieve(this.#e(e))}async deleteFor(e){await this.delete(this.#e(e))}},ce=class extends ${options;constructor(e){super(e),this.options=e}async parseHeader(e){let t=e[this.options.headerName];if(!t||typeof t!="string")throw new E;return t.startsWith("Bearer ")?t.slice(7):t}routeSecuritySchemeName(){return this.options.headerName}},de=class extends ${options;constructor(e){super(e),this.options=e}async parseHeader(e){let s=(xe.default.parse(e.cookie||"")??{})[this.options.cookieName];if(!s||typeof s!="string")throw new E;return s}routeSecuritySchemeName(){return`cookie:${this.options.cookieName}`}};var Te=require("path-to-regexp");var _e="__listener_emitter",Ce="*",Z=class{constructor(e,t){this.config=t;this.socketInstance=e,this.#r(),P.on("setup",()=>{let s=t.eventBus?.stream(_e,{fanout:!0});this.#o=s?s.publish:async r=>{e.to(r.channel).emit(r.channel,r)},s?.subscribe(async r=>{e.to(r.channel).emit(r.channel,r)})})}socketInstance;#e={onConnect:async()=>{},onDisconnect:async()=>{}};#t={};#o=async()=>{};async created(e,t,s){await this.#s(e,"created",{after:t.toJSON(),before:null},s)}async updated(e,{after:t,before:s},r){await this.#s(e,"updated",{after:t.toJSON(),before:s.toJSON()},r)}async deleted(e,t,s){await this.#s(e,"deleted",{before:t.toJSON(),after:null},s)}async#s(e,t,{before:s,after:r},n){let d=Array.isArray(n)?n:[n??Ce],u=e.flatMap(m=>d.map(c=>`${c}:${m}`));await Promise.all(u.map(async m=>this.#o({channel:m,type:t,before:s,after:r})))}set connectionCallbacks(e){this.#e=e,this.#r()}register(e,t){return this.#t[e]=t,this.#t[e+"/:id"]=t,this}#n(e){let t=n=>(0,Te.match)(n)(e),s=Object.keys(this.#t).find(t)??null;if(!s)return null;let r=t(s);return r?{config:this.#t[s],params:r.params}:null}#r=()=>{this.socketInstance.removeAllListeners("connection"),this.socketInstance.on("connection",async e=>{let t=e.id,s=await q.process(this.config.socketsAuthMethods,e.handshake.headers).catch(()=>null);e.on("leave",async(r,n)=>r.channel?(e.leave(r.channel),typeof n=="function"&&n({code:h.Ok,message:"",channel:r.channel})):typeof n=="function"&&n({code:h.ValidationError,message:"channel is required",channel:""})),e.on("join",async(r,n)=>{if(!r.channel)return typeof n=="function"&&n({code:h.ValidationError,message:"channel is required",channel:""});let d=r.channel,u=this.#n(d)??null;if(!u)return typeof n=="function"&&n({code:h.BadRequest,message:"unknown channel",channel:d});let c=`${await u.config({channel:d,user:s},u.params,r.query??{})??Ce}:${d}`;return e.join(c),typeof n=="function"&&n({code:h.Ok,message:"",channel:c})}),s&&await this.#e.onConnect(s.id,t),e.on("disconnect",async()=>{s&&await this.#e.onDisconnect(s.id,t)})})}};var Qe=()=>i.v.object({port:i.v.number(),cors:i.v.optional(i.v.object({origin:i.v.optional(i.v.or([i.v.array(i.v.string()),i.v.is(!0)])),methods:i.v.optional(i.v.array(i.v.in(Object.values(x)))),credentials:i.v.optional(i.v.boolean())})),eventBus:i.v.optional(i.v.instanceOf(W)),publicPath:i.v.optional(i.v.string()),healthPath:i.v.optional(i.v.string()),openapi:i.v.defaults(i.v.object({docsVersion:i.v.defaults(i.v.string(),"1.0.0"),docsBaseUrl:i.v.defaults(i.v.array(i.v.string()),["/"]),docsPath:i.v.defaults(i.v.string(),"/__docs")}),{}),requests:i.v.defaults(i.v.object({log:i.v.defaults(i.v.boolean(),!0),rateLimit:i.v.defaults(i.v.object({enabled:i.v.defaults(i.v.boolean(),!1),periodInMs:i.v.defaults(i.v.number(),3600*1e3),limit:i.v.defaults(i.v.number(),5e3)}),{}),slowdown:i.v.defaults(i.v.object({enabled:i.v.defaults(i.v.boolean(),!1),periodInMs:i.v.defaults(i.v.number(),600*1e3),delayAfter:i.v.defaults(i.v.number(),2e3),delayInMs:i.v.defaults(i.v.number(),500)}),{})}),{}),socketsAuthMethods:i.v.defaults(i.v.array(i.v.instanceOf(q)),[])}),Pe=Symbol("rawResponseHandled"),He=Object.freeze({[Pe]:!0}),Xe="Raw not-found handler did not start or complete a response";function Ye(o){return!!(o&&typeof o=="object"&&Pe in o)}function ue(o){return o.headersSent||o.writableEnded}function De(o,e){if(ue(o))return;o.statusCode=h.BadRequest,o.setHeader("Content-Type","application/json");let t=e instanceof Error?e.message:`${e}`;o.end(JSON.stringify([{message:t}]))}var Ze=Object.entries(h).filter(([,o])=>o>399).map(([o,e])=>({status:e,contentType:"application/json",pipe:i.v.meta(i.v.array(i.v.object({message:i.v.string(),field:i.v.optional(i.v.string())})),{$refId:`Errors.${o}Response`,description:`${o} Response`})})),le=class{socket;cors;#e;#t;#o;#s=[];#n=new Set;#r=!1;#i=[];#a=null;setup(e,t){this.#e=e,this.#o=t,this.cors={origin:t.cors?.origin?(r,n)=>n(null,!0):t.cors?.origin,methods:(t.cors?.methods??Object.values(x)).filter(r=>r!==x.options).map(r=>r.toUpperCase()),credentials:t.cors?.credentials},this.#t=be(t);let s=new qe.Server(e,{cors:this.cors});this.socket=new Z(s,t),this.addRouter(this.#t.router)}addRouter(...e){e.map(t=>t.routes).forEach(t=>this.addRoute(...t))}addRoute(...e){e.forEach(t=>{this.#s.push(async()=>{let{method:s,path:r,schema:n={},onError:d,middlewares:u=[],responseMiddlewares:m=[]}=t,c=`(${s.toUpperCase()}) ${this.#t.cleanPath(r)}`;if(this.#n.has(c))throw new R(`Route key ${c} already registered. All route keys must be unique`,{route:t,key:c});u.forEach(b=>b.onSetup?.(t)),d?.onSetup?.(t),m.forEach(b=>b.onSetup?.(t));let{validateRequest:g,validateResponse:y,jsonSchema:k}=this.#c(s,n);this.#n.add(c),await this.#t.register(t,k),this.registerRoute(s,this.#t.cleanPath(r),async(b,B)=>{let a=await g(await this.parseRequest(b));try{for(let f of u)await f.cb(a);let p=await t.handler(a),l=p instanceof H?p:new H({body:p,status:h.Ok,headers:{},piped:!1});for(let f of m)await f.cb(a,l);return await this.handleResponse(B,await y(l))}catch(p){if(d?.cb){let l=await d.cb(a,p),f=l instanceof H?l:new H({body:l,status:h.BadRequest,headers:{}});return await this.handleResponse(B,await y(f))}throw p}})})})}setNotFoundHandler(e){if(this.#r)throw new R("Cannot set not-found handler after server has started",{});return this.#a=e,this}onBeforeListen(e){if(this.#r)throw new R("Cannot add before-listen handler after server has started",{});return this.#i.push(e),this}test(){return(0,Se.default)(this.#e)}async start(){this.#r=!0;let e=this.#o,t=P.get(),{app:s}=t.settings;e.healthPath&&this.addRoute({method:x.get,path:e.healthPath,handler:async n=>n.res({body:`${t.id}(${s.name}) service running`,contentType:"text/plain"})}),await Promise.all(this.#s.map(n=>n())),this.registerNotFoundHandler(async(n,d)=>await this.#p(n,d)),this.registerErrorHandler(async(n,d,u)=>{n instanceof R||P.get().log.error({error:n},"Uncaught error in route handler");let m=n instanceof C?new H({body:n.serializedErrors,status:n.statusCode}):n instanceof R?new H({body:[{message:n.message}],status:h.BadRequest}):new H({body:[{message:"Something went wrong",data:n.message}],status:h.BadRequest});return await this.handleResponse(u,m)});for(let n of this.#i)await n({httpServer:this.#e,port:e.port});let r=await this.startServer(e.port);return r&&P.get().log.info(`${t.id}(${s.name}) service listening on port ${e.port}`),r}createNodeRawResponder(e){return async t=>{e.beforeHandle?.();try{await t(e.request,e.response)}catch(s){if(!ue(e.response))return De(e.response,s),He;throw s}return ue(e.response)||De(e.response,new R(Xe,{})),He}}async#p(e,t){let s=await this.parseRequest(e);if(!this.#a)throw new z(`Route ${s.path} not found`);let r=await this.#a({request:s,respondWithRaw:this.createRawResponder(e,t)});if(!Ye(r)){if(r instanceof H)return await this.handleResponse(t,r);throw new R("Not-found handler must return a Response or respondWithRaw(...)",{})}}#c(e,t){let s=t?.defaultStatusCode??h.Ok,r=t?.defaultContentType??"application/json",n=s,d=r,u={response:{},request:{}},m={},c={};[{key:"params",type:"request"},{key:"headers",type:"request"},{key:"cookies",type:"request"},{key:"query",type:"request"},{key:"body",type:"request",skip:![x.post,x.put,x.patch].includes(e)},{key:"response",type:"response"},{key:"responseHeaders",type:"response"},{key:"responseCookies",type:"response"}].forEach(a=>{let p=t[a.key]??i.v.any();if(!a.skip&&(a.type==="request"&&(m[a.key]=p,u.request[a.key]=i.v.schema(p)),a.type==="response")){let l=Ze.concat({status:s,contentType:d,pipe:p});c[a.key]=i.v.any().pipe(f=>{let S=l.find(w=>w.status===n)?.pipe;if(!S)throw i.PipeError.root(`schema not defined for status code: ${n}`,f);let v=i.v.validate(S,f);if(!v.valid)throw v.error;return v.value}),u.response[a.key]=l.map(f=>({status:f.status,contentType:f.contentType,schema:i.v.schema(f.pipe)}))}});let y=i.v.object(m);i.v.compile(y,{allErrors:!0});let k=i.v.object(c);return i.v.compile(k,{allErrors:!0}),{jsonSchema:u,validateRequest:async a=>{if(!Object.keys(m))return a;let p=Q.run(a,()=>i.v.validate(y,{params:a.params,headers:a.headers,query:a.query,body:a.body,cookies:a.cookies}));if(!p.valid)throw j(p.error);return a.params=p.value.params,a.headers=p.value.headers,a.query=p.value.query,a.body=p.value.body,a.cookies=p.value.cookies,a},validateResponse:async a=>{if(!Object.keys(c))return a;n=a.status,d=a.contentType;let p=X.run(a,()=>i.v.validate(k,{responseHeaders:a.headers,responseCookies:Object.fromEntries(Object.entries(a.cookies).map(([l,f])=>[l,f.value])),response:a.body}));if(!p.valid)throw j(p.error);return a.body=p.value.response,a.headers=p.value.responseHeaders,a.cookieValues=p.value.responseCookies,a}}}};var et=o=>ae(async e=>{if(e.authUser=await q.process(o,e.headers),!e.authUser)throw new E},e=>{e.security??=[];for(let t of o){let s=t.routeSecuritySchemeName();s&&e.security.push({[s]:[]})}e.descriptions??=[],e.descriptions.push("Requires a valid means of authentication.")});0&&(module.exports={BaseApiKeyRequestAuthMethod,BaseJwtCookieRequestAuthMethod,BaseJwtHeaderRequestAuthMethod,BaseJwtRequestAuthMethod,BaseRequestAuthMethod,Methods,Request,Response,Router,Server,StatusCodes,makeErrorMiddleware,makeMiddleware,makeResponseMiddleware,requireAuthUser,serverConfigPipe});
|
|
32
32
|
//# sourceMappingURL=index.min.cjs.map
|