gemi 0.4.126 → 0.5.0
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/app/index.js +2 -2
- package/dist/app/index.js.map +2 -2
- package/dist/bin/index.js +30767 -57
- package/dist/broadcasting/index.js +1 -1
- package/dist/{chunk-716jpkxk.js → chunk-0s3yapam.js} +3 -3
- package/dist/{chunk-716jpkxk.js.map → chunk-0s3yapam.js.map} +1 -1
- package/dist/chunk-1tpqxqmt.js +20 -0
- package/dist/{chunk-1qw2v7pp.js.map → chunk-1tpqxqmt.js.map} +12 -25
- package/dist/chunk-3pfpq2xc.js +4 -0
- package/dist/{chunk-49eas1md.js.map → chunk-3pfpq2xc.js.map} +1 -1
- package/dist/chunk-45df2pgm.js +5 -0
- package/dist/chunk-45df2pgm.js.map +65 -0
- package/dist/{chunk-99h5xbnm.js → chunk-6y378xez.js} +2 -2
- package/dist/{chunk-99h5xbnm.js.map → chunk-6y378xez.js.map} +1 -1
- package/dist/chunk-740bx4ar.js +3 -0
- package/dist/chunk-740bx4ar.js.map +15 -0
- package/dist/chunk-77gdtbj7.js +4 -0
- package/dist/{chunk-5vx2z0tr.js.map → chunk-77gdtbj7.js.map} +2 -2
- package/dist/chunk-7v15p9nn.js +4 -0
- package/dist/chunk-7v15p9nn.js.map +26 -0
- package/dist/{chunk-jtv3vbyw.js → chunk-83snmykp.js} +3 -3
- package/dist/{chunk-jtv3vbyw.js.map → chunk-83snmykp.js.map} +1 -1
- package/dist/{chunk-2h3dg6ak.js → chunk-95hz1khz.js} +2 -2
- package/dist/{chunk-2h3dg6ak.js.map → chunk-95hz1khz.js.map} +1 -1
- package/dist/{chunk-h64zrvbm.js → chunk-9877dbvm.js} +2 -2
- package/dist/{chunk-h64zrvbm.js.map → chunk-9877dbvm.js.map} +1 -1
- package/dist/chunk-9em80ypy.js +4 -0
- package/dist/{chunk-3sgwee0d.js.map → chunk-9em80ypy.js.map} +2 -2
- package/dist/{chunk-cqn3123n.js → chunk-ac7dhq1c.js} +2 -2
- package/dist/{chunk-cqn3123n.js.map → chunk-ac7dhq1c.js.map} +1 -1
- package/dist/chunk-ch0p7trm.js +4 -0
- package/dist/chunk-ch0p7trm.js.map +14 -0
- package/dist/chunk-dfc3y8yn.js +4 -0
- package/dist/{chunk-mkwkxzth.js.map → chunk-dfc3y8yn.js.map} +5 -5
- package/dist/{chunk-tmp6k3re.js → chunk-ewp71f92.js} +2 -2
- package/dist/{chunk-tmp6k3re.js.map → chunk-ewp71f92.js.map} +1 -1
- package/dist/chunk-fn89vt9j.js +4 -0
- package/dist/{chunk-mr2ew71j.js.map → chunk-fn89vt9j.js.map} +6 -6
- package/dist/chunk-hhbd5qn0.js +11 -0
- package/dist/{chunk-75wm7ysh.js.map → chunk-hhbd5qn0.js.map} +5 -5
- package/dist/{chunk-wdx058ey.js → chunk-hnyegpzf.js} +3 -3
- package/dist/{chunk-wdx058ey.js.map → chunk-hnyegpzf.js.map} +1 -1
- package/dist/chunk-hrf5jh5c.js +8 -0
- package/dist/{chunk-qcdwj08x.js.map → chunk-hrf5jh5c.js.map} +2 -2
- package/dist/chunk-k8t4vgx8.js +4 -0
- package/dist/{chunk-yd2678ws.js.map → chunk-k8t4vgx8.js.map} +4 -4
- package/dist/chunk-n34j31ss.js +4 -0
- package/dist/chunk-n34j31ss.js.map +16 -0
- package/dist/{chunk-2srb036m.js → chunk-rr5j1686.js} +2 -2
- package/dist/{chunk-2srb036m.js.map → chunk-rr5j1686.js.map} +1 -1
- package/dist/chunk-sqgv2xyc.js +4 -0
- package/dist/{chunk-4rgtv394.js.map → chunk-sqgv2xyc.js.map} +4 -4
- package/dist/{chunk-qf0qr76c.js → chunk-srsjrh5y.js} +3 -3
- package/dist/{chunk-qf0qr76c.js.map → chunk-srsjrh5y.js.map} +1 -1
- package/dist/chunk-t34vnmky.js +4 -0
- package/dist/{chunk-sdejryyp.js.map → chunk-t34vnmky.js.map} +1 -1
- package/dist/chunk-vc1yv3v5.js +4 -0
- package/dist/{chunk-7vggss3r.js.map → chunk-vc1yv3v5.js.map} +2 -2
- package/dist/chunk-vp96f2zv.js +4 -0
- package/dist/{chunk-w1t51rk3.js.map → chunk-vp96f2zv.js.map} +4 -4
- package/dist/chunk-yq60hz8s.js +4 -0
- package/dist/{chunk-5e4ahq43.js.map → chunk-yq60hz8s.js.map} +6 -6
- package/dist/client/ClientRouter.d.ts.map +1 -1
- package/dist/client/ClientRouterContext.d.ts +2 -0
- package/dist/client/ClientRouterContext.d.ts.map +1 -1
- package/dist/client/Mutation.d.ts.map +1 -1
- package/dist/client/ServerDataProvider.d.ts +2 -0
- package/dist/client/ServerDataProvider.d.ts.map +1 -1
- package/dist/client/index.js +38 -5
- package/dist/client/index.js.map +1 -1
- package/dist/client/useNavigate.d.ts.map +1 -1
- package/dist/email/index.js +2 -2
- package/dist/email/index.js.map +2 -2
- package/dist/facades/index.js +2 -2
- package/dist/facades/index.js.map +4 -4
- package/dist/http/CSRFMiddleware.d.ts +18 -0
- package/dist/http/CSRFMiddleware.d.ts.map +1 -0
- package/dist/http/HttpRequest.d.ts +4 -9
- package/dist/http/HttpRequest.d.ts.map +1 -1
- package/dist/http/index.d.ts +1 -0
- package/dist/http/index.d.ts.map +1 -1
- package/dist/http/index.js +2 -2
- package/dist/http/index.js.map +7 -6
- package/dist/http/requestContext.d.ts +2 -0
- package/dist/http/requestContext.d.ts.map +1 -1
- package/dist/kernel/index.js +2 -2
- package/dist/kernel/index.js.map +2 -2
- package/dist/server/index.js +5 -5
- package/dist/server/index.js.map +5 -5
- package/dist/services/index.js +5 -5
- package/dist/services/index.js.map +6 -7
- package/dist/services/router/ViewRouterServiceContainer.d.ts +5 -1
- package/dist/services/router/ViewRouterServiceContainer.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/chunk-1qw2v7pp.js +0 -20
- package/dist/chunk-3sgwee0d.js +0 -4
- package/dist/chunk-49eas1md.js +0 -4
- package/dist/chunk-4rgtv394.js +0 -4
- package/dist/chunk-5e4ahq43.js +0 -4
- package/dist/chunk-5vx2z0tr.js +0 -4
- package/dist/chunk-75wm7ysh.js +0 -11
- package/dist/chunk-7sn2drtt.js +0 -5
- package/dist/chunk-7sn2drtt.js.map +0 -64
- package/dist/chunk-7vggss3r.js +0 -4
- package/dist/chunk-a0zzg1ga.js +0 -3
- package/dist/chunk-a0zzg1ga.js.map +0 -16
- package/dist/chunk-hxntatg7.js +0 -4
- package/dist/chunk-hxntatg7.js.map +0 -10
- package/dist/chunk-mkwkxzth.js +0 -4
- package/dist/chunk-mr2ew71j.js +0 -4
- package/dist/chunk-qcdwj08x.js +0 -8
- package/dist/chunk-sdejryyp.js +0 -4
- package/dist/chunk-tq3grsay.js +0 -4
- package/dist/chunk-tq3grsay.js.map +0 -14
- package/dist/chunk-w1t51rk3.js +0 -4
- package/dist/chunk-yd2678ws.js +0 -4
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { RequestBreakerError } from "./Error";
|
|
2
|
+
import { Middleware } from "./Middleware";
|
|
3
|
+
export declare class CSRFMiddleware extends Middleware {
|
|
4
|
+
run(): Promise<{}>;
|
|
5
|
+
}
|
|
6
|
+
export declare class InvalidCSRFTokenError extends RequestBreakerError {
|
|
7
|
+
constructor();
|
|
8
|
+
payload: {
|
|
9
|
+
api: {
|
|
10
|
+
status: number;
|
|
11
|
+
data: {
|
|
12
|
+
error: string;
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
view: {};
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=CSRFMiddleware.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CSRFMiddleware.d.ts","sourceRoot":"","sources":["../../http/CSRFMiddleware.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAE9C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG1C,qBAAa,cAAe,SAAQ,UAAU;IACtC,GAAG;CA+BV;AAED,qBAAa,qBAAsB,SAAQ,mBAAmB;;IAM5D,OAAO;;;;;;;;MAML;CACH"}
|
|
@@ -27,20 +27,22 @@ export declare class HttpRequest<T extends Body = Record<string, never>, Params
|
|
|
27
27
|
schema: any;
|
|
28
28
|
routePath: string;
|
|
29
29
|
params: Params;
|
|
30
|
-
|
|
30
|
+
constructor(req?: Request, params?: any, kind?: HttpRequestKind, routePath?: string);
|
|
31
|
+
ctx(): {
|
|
31
32
|
cookies: Set<import("./Cookie").Cookie>;
|
|
32
33
|
headers: Headers;
|
|
33
34
|
prefetchedResources: Map<string, Record<string, any>>;
|
|
34
35
|
prefetchPromiseQueue: Set<() => Promise<any>>;
|
|
35
36
|
user: any;
|
|
37
|
+
csrfHmac: string | null;
|
|
36
38
|
req: HttpRequest;
|
|
39
|
+
setCSRFHmac(hmac: string): void;
|
|
37
40
|
setCookie(name: string, value: string, options?: import("./Cookie").CreateCookieOptions): void;
|
|
38
41
|
setHeaders(name: string, value: string): void;
|
|
39
42
|
setUser(user: any): void;
|
|
40
43
|
setRequest(req: HttpRequest<any, any>): void;
|
|
41
44
|
destroy(): void;
|
|
42
45
|
};
|
|
43
|
-
constructor(req?: Request, params?: any, kind?: HttpRequestKind, routePath?: string);
|
|
44
46
|
refine(_input: any): any;
|
|
45
47
|
private parseBody;
|
|
46
48
|
private validateInput;
|
|
@@ -50,13 +52,6 @@ export declare class HttpRequest<T extends Body = Record<string, never>, Params
|
|
|
50
52
|
errors: Record<string, string[]>;
|
|
51
53
|
input: Input<T>;
|
|
52
54
|
}>;
|
|
53
|
-
terminate(_params: TerminateParams): Promise<void>;
|
|
54
55
|
}
|
|
55
|
-
type TerminateParams = {
|
|
56
|
-
message: string;
|
|
57
|
-
status: number;
|
|
58
|
-
headers?: Record<string, string>;
|
|
59
|
-
payload?: Record<string, any>;
|
|
60
|
-
};
|
|
61
56
|
export {};
|
|
62
57
|
//# sourceMappingURL=HttpRequest.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HttpRequest.d.ts","sourceRoot":"","sources":["../../http/HttpRequest.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"HttpRequest.d.ts","sourceRoot":"","sources":["../../http/HttpRequest.ts"],"names":[],"mappings":"AAKA,cAAM,KAAK,CAAC,CAAC;IACC,OAAO,CAAC,IAAI;gBAAJ,IAAI,EAAE,CAAC;IAEpB,GAAG,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAIpC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC;IAIhB,MAAM,IAAI,CAAC;CAGnB;AAuHD,KAAK,UAAU,GAAG,QAAQ,CAAC;AAC3B,KAAK,UAAU,GAAG,QAAQ,CAAC;AAC3B,KAAK,WAAW,GAAG,SAAS,CAAC;AAC7B,KAAK,aAAa,GAAG,OAAO,MAAM,EAAE,CAAC;AACrC,KAAK,aAAa,GAAG,OAAO,MAAM,EAAE,CAAC;AACrC,KAAK,YAAY,GAAG,UAAU,CAAC;AAC/B,KAAK,QAAQ,GAAG,MAAM,CAAC;AACvB,KAAK,YAAY,GAAG,oBAAoB,CAAC;AACzC,KAAK,YAAY,GAAG,oBAAoB,CAAC;AACzC,KAAK,SAAS,GACV,UAAU,GACV,UAAU,GACV,WAAW,GACX,aAAa,GACb,aAAa,GACb,YAAY,GACZ,QAAQ,GACR,YAAY,GACZ,YAAY,CAAC;AAEjB,MAAM,MAAM,MAAM,CAAC,CAAC,SAAS,IAAI,IAAI,MAAM,CACzC,MAAM,CAAC,EACP,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CACnC,CAAC;AAEF,MAAM,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AACvC,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,KAAK,CAAC;AAE7C,qBAAa,WAAW,CACtB,CAAC,SAAS,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EACtC,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC;IAEvB,IAAI,EAAE,eAAe,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IACjB,MAAM,EAAE,GAAG,CAAM;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;gBAGpB,GAAG,CAAC,EAAE,OAAO,EACb,MAAM,CAAC,EAAE,GAAG,EACZ,IAAI,CAAC,EAAE,eAAe,EACtB,SAAS,CAAC,EAAE,MAAM;IAgDb,GAAG;;;;;;;;;;;;;;;IAIH,MAAM,CAAC,MAAM,EAAE,GAAG,GAAG,GAAG;YAIjB,SAAS;IAuCvB,OAAO,CAAC,aAAa;IA+CR,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAI1B,SAAS,IAAI,OAAO,CAAC;QAChC,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACjC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;KACjB,CAAC;CAoBH"}
|
package/dist/http/index.d.ts
CHANGED
|
@@ -10,6 +10,7 @@ export { MiddlewareServiceProvider } from "./MiddlewareServiceProvider";
|
|
|
10
10
|
export { AuthenticationMiddleware } from "./AuthenticationMiddlware";
|
|
11
11
|
export { CacheMiddleware } from "./CacheMiddleware";
|
|
12
12
|
export { RateLimitMiddleware } from "./RateLimitMiddleware";
|
|
13
|
+
export { CSRFMiddleware } from "./CSRFMiddleware";
|
|
13
14
|
export { PoliciesServiceProvider } from "./PoliciesServiceProvider";
|
|
14
15
|
export { Policies } from "./Policy";
|
|
15
16
|
export { AuthenticationError, AuthorizationError, InsufficientPermissionsError, } from "./errors";
|
package/dist/http/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../http/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,KAAK,aAAa,EAAE,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAE9C,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../http/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,KAAK,aAAa,EAAE,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAE9C,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEpC,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,4BAA4B,GAC7B,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC"}
|
package/dist/http/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{Ib as R}from"../chunk-sdejryyp.js";import{Kb as f}from"../chunk-tmp6k3re.js";import"../chunk-2srb036m.js";class C{static kind="controller";constructor(){}}class b extends C{}function I(e){return typeof e==="function"&&e.prototype!==void 0}function B(e){return I(e)}class l{e;t;r;__internal_brand="RouteHandler";middlewares=[];constructor(e,t,r){this.method=e;this.handler=t;this.methodName=r;this.handler=t,this.methodName=r,this.method=e}__internal_use(){return{run:this.run.bind(this),middlewares:this.middlewares}}run(e){if(B(this.handler)){let t=new this.handler;return t[this.methodName].bind(t)()}else return this.handler()}middleware(e){return this.middlewares=e,this}}class M{constructor(...e){return new l(...e)}}class A{static __brand="ApiRouter";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){return(t)=>{return{"/":{list:new l("GET",e,"list"),create:new l("POST",e,"create")},[`/:${String(t)}`]:{show:new l("GET",e,"show"),update:new l("PUT",e,"update"),delete:new l("DELETE",e,"delete")}}}}file(e,t){return new M("GET",e,t)}}class E{e;middlewares=[];handler;constructor(e,t){this.viewPath=e;if(!t)this.handler=()=>({});else if(typeof t==="function")this.handler=t;else{let[r,n]=t,s=new r,o=s[n].bind(s);this.handler=(a)=>{return o()}}}async run(e){return{[this.viewPath]:await this.handler(e)}}middleware(e){return this.middlewares=e,this}}class q{e;children;middlewares=[];handler=()=>({});constructor(e,t,r){this.viewPath=e;if(typeof t==="function")this.handler=t,this.children=class extends P{routes=r??{}};else if(Array.isArray(t)){let[n,s]=t,o=new n,a=o[s].bind(o);this.handler=(i)=>{return a(i)},this.children=class extends P{routes=r??{}}}else this.children=class extends P{routes=t},this.handler=()=>({})}async run(e){return{[this.viewPath]:await this.handler(e)}}middleware(e){return this.middlewares=e,this}}class P{middlewares=[];routes={};view(e,t){return new E(e,t)}layout(e,t,r){return new q(e,t,r)}}var oe="GEMI_REQUEST_BREAKER_ERROR";class d extends Error{kind="GEMI_REQUEST_BREAKER_ERROR";payload={api:{},view:{}}}class T extends d{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 F}from"async_hooks";class H{e;t;r;constructor(e,t,r={}){this.name=e;this.value=t;this.options=r}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 K=new F;class ${e;cookies=new Set;headers=new Headers;prefetchedResources=new Map;prefetchPromiseQueue=new Set;user=null;constructor(e){this.req=e}setCookie(e,t,r={}){this.cookies.add(new H(e,t,r))}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 y{static getStore(){return K.getStore()}static setRequest(e){K.getStore().req=e}static run(e,t){return K.run(new $(e),t)}}class x{e;constructor(e){this.data=e}get(e){return this.data[e]}has(e){return this.data[e]!==void 0}toJSON(){return this.data}}function Q(e){let[t,r]=e.match(/\d+|\D+/g)??[];if(!t||!r)return 0;let n=parseInt(t);switch(r){case"B":return n;case"KB":return n*1024;case"MB":return n*1024*1024;case"GB":return n*1024*1024*1024;case"TB":return n*1024*1024*1024*1024;default:return 0}}function Y(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}}function J(e){let[t,r]=e.split(":");switch(t){case"required":return(n)=>{if(n instanceof Blob)return n.size>0;return n!==null&&n!==void 0&&n?.length>0};case"password":return(n)=>{return/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[^a-zA-Z0-9]).{8,}$/.test(n)};case"number":return(n)=>{if(typeof n!=="number")return!1;return!isNaN(n)};case"min":return(n)=>{return n?.length>=parseInt(r)};case"max":return(n)=>{return n?.length<=parseInt(r)};case"email":return(n)=>{return/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(n)};case"file":return(n)=>{return n instanceof Blob};case"fileType":return(n)=>{if(n instanceof Blob){let s=Y(r);return n.type.startsWith(s)}};case"fileSize":return(n)=>{if(n instanceof Blob){let s=Q(r);return n.size<=s}};default:return()=>!0}}class S{kind;rawRequest;headers;cookies;search;schema={};routePath;params;ctx=y.getStore();constructor(e,t,r,n){if(!e){let a=y.getStore().req;this.params=a.params,this.rawRequest=a.rawRequest,this.kind=a.kind,this.routePath=a.routePath}else this.params=t,this.rawRequest=e,this.routePath=n,this.kind=r??"api";this.headers=this.rawRequest.headers;let s=this.rawRequest.headers.get("Cookie"),o=new Map;if(s){let a=s.split(";");for(let i of a){let[p,c]=i.split("=");o.set(p.trim(),c.trim())}}if(this.rawRequest.method==="GET"){let a=new URL(this.rawRequest.url),i=new Map;for(let[c,w]of a.searchParams)if(i.has(c)){let m=i.get(c);if(Array.isArray(m))m.push(w),i.set(c,m);else i.set(c,[m,w])}else i.set(c,w);let p=Object.fromEntries(i.entries());this.search=new x(p)}this.cookies=o}refine(e){return{}}async parseBody(){let e=new x({});if(this.rawRequest.headers.get("Content-Type")==="application/json"){let t=await this.rawRequest.json();e=new x(t)}if(this.rawRequest.headers.get("Content-Type")==="application/x-www-form-urlencoded"){let t=await this.rawRequest.formData();e=new x(t)}if(this.rawRequest.headers.get("Content-Type")?.startsWith("multipart/form-data")){let t=await this.rawRequest.formData(),r=new Map;for(let[n,s]of t.entries())if(r.has(n)){let o=r.get(n);if(Array.isArray(o))o.push(s),r.set(n,o);else r.set(n,[o,s])}else r.set(n,s);e=new x(Object.fromEntries(r.entries()))}return e}validateInput(e){let t={};for(let[r,n]of Object.entries(this.schema))for(let[s,o]of Object.entries(n)){let a=J(s),i=o,p=!1;if(typeof o==="function")i=o(e.get(r)),p=typeof i==="undefined";else p=a(e.get(r));if(p)continue;if(!t[r])t[r]=[];if(s==="required"){t[r]=[String(i)];break}else t[r].push(String(i))}for(let[r,n]of Object.entries(this.refine(e.toJSON())??{})){if(!t[r])t[r]=[];t[r]=[...t[r]??[],n]}if(Object.keys(t).length>0)throw new T(t);else return e}async input(){return this.validateInput(await this.parseBody())}async safeInput(){let e=await this.parseBody();try{return this.validateInput(e),{isValid:!0,errors:{},input:e}}catch(t){if(!(t instanceof T))throw t;return{isValid:!1,errors:t.errors,input:e}}}async terminate(e){throw"not implemented"}}class u{e;constructor(e){this.req=e}run(...e){return{}}}function W(e){let t=e.headers.get("cookie");if(!t)return new Map;let r=new Map,n=t.split(";");for(let s of n){let[o,a]=s.split("=");r.set(o.trim(),a)}return r}class v extends R{aliases={};boot(){}}class U extends d{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 L extends d{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 h extends d{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 g extends f{e;static _name="AuthenticationServiceContainer";constructor(e){super();this.provider=e}async getSession(e,t){let r=await this.provider.adapter.findSession({token:e,userAgent:t}),n=null;if(r?.user)n=await this.provider.extendSession(r.user),r.user.extension=n;return r}}class V extends u{async run(e){let t=y.getStore(),r=t.req.cookies.get("access_token");if(!r)throw new h;let n=t.user;if(!n){let s=await g.use().getSession(r,t.req.headers.get("User-Agent"));if(!s)throw new h;n=s?.user,t.setUser(n)}return{}}}class k extends u{async run(...e){let[t="public",r="864000",...n]=e,s=`${t}, max-age=${r}${n.length>0?", ":""}${n.join(", ")}`;if(e.length===0)s="public, max-age=864000, stale-while-revalidate=300, stale-if-error=600";if(e.length===1&&e[0]==="public")s="public, max-age=864000, stale-while-revalidate=300, stale-if-error=600";if(e.length===1&&e[0]==="private")s="private, max-age=0, stale-while-revalidate=300, stale-if-error=600";if(this.req.rawRequest.method==="GET")this.req.ctx.setHeaders("Cache-Control",s);return{}}}class O extends f{e;static _name="RateLimiterServiceContainer";constructor(e){super();this.service=e}}class D extends d{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 G extends u{async run(e=1000){let t=this.req.headers.get("x-forwarded-for"),r=O.use().service.driver;if(r.consume.call(r,t,this.req.routePath)>e)throw new D;return{}}}class _{policiesList={};constructor(){let e=this.register();for(let t of e){let r=new t;this.policiesList[t.name]=r}}register(){return[]}}class N{all(e,t){return!0}}class j extends R{dictionary={};supportedLocales=[];defaultLocale="en-US";async init(){}detectLocale(e){return""}boot(){}}export{W as getCookies,P as ViewRouter,T as ValidationError,b as ResourceController,d as RequestBreakerError,G as RateLimitMiddleware,_ as PoliciesServiceProvider,N as Policies,v as MiddlewareServiceProvider,u as Middleware,L as InsufficientPermissionsError,j as I18nServiceProvider,S as HttpRequest,C as Controller,k as CacheMiddleware,U as AuthorizationError,V as AuthenticationMiddleware,h as AuthenticationError,A as ApiRouter};export{C as m,I as n,A as o,P as p,oe as q,d as r,T as s,y as t,S as u,v,U as w,L as x,g as y,O as z,j as A};
|
|
2
|
+
import{Rb as f}from"../chunk-t34vnmky.js";import{Tb as w}from"../chunk-ewp71f92.js";import"../chunk-rr5j1686.js";class K{static kind="controller";constructor(){}}class M extends K{}function E(e){return typeof e==="function"&&e.prototype!==void 0}function Q(e){return E(e)}class l{e;t;r;__internal_brand="RouteHandler";middlewares=[];constructor(e,t,r){this.method=e;this.handler=t;this.methodName=r;this.handler=t,this.methodName=r,this.method=e}__internal_use(){return{run:this.run.bind(this),middlewares:this.middlewares}}run(e){if(Q(this.handler)){let t=new this.handler;return t[this.methodName].bind(t)()}else return this.handler()}middleware(e){return this.middlewares=e,this}}class q{constructor(...e){return new l(...e)}}class A{static __brand="ApiRouter";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){return(t)=>{return{"/":{list:new l("GET",e,"list"),create:new l("POST",e,"create")},[`/:${String(t)}`]:{show:new l("GET",e,"show"),update:new l("PUT",e,"update"),delete:new l("DELETE",e,"delete")}}}}file(e,t){return new q("GET",e,t)}}class S{e;middlewares=[];handler;constructor(e,t){this.viewPath=e;if(!t)this.handler=()=>({});else if(typeof t==="function")this.handler=t;else{let[r,n]=t,s=new r,o=s[n].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 ${e;children;middlewares=[];handler=()=>({});constructor(e,t,r){this.viewPath=e;if(typeof t==="function")this.handler=t,this.children=class extends x{routes=r??{}};else if(Array.isArray(t)){let[n,s]=t,o=new n,i=o[s].bind(o);this.handler=(a)=>{return i(a)},this.children=class extends x{routes=r??{}}}else this.children=class extends x{routes=t},this.handler=()=>({})}async run(e){return{[this.viewPath]:await this.handler(e)}}middleware(e){return this.middlewares=e,this}}class x{middlewares=[];routes={};view(e,t){return new S(e,t)}layout(e,t,r){return new $(e,t,r)}}var de="GEMI_REQUEST_BREAKER_ERROR";class d extends Error{kind="GEMI_REQUEST_BREAKER_ERROR";payload={api:{},view:{}}}class P extends d{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 Y}from"async_hooks";class g{e;t;r;constructor(e,t,r={}){this.name=e;this.value=t;this.options=r}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 O=new Y;class v{e;cookies=new Set;headers=new Headers;prefetchedResources=new Map;prefetchPromiseQueue=new Set;user=null;csrfHmac=null;constructor(e){this.req=e}setCSRFHmac(e){this.csrfHmac=e}setCookie(e,t,r={}){this.cookies.add(new g(e,t,r))}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 y{static getStore(){return O.getStore()}static setRequest(e){O.getStore().req=e}static run(e,t){return O.run(new v(e),t)}}class T{e;constructor(e){this.data=e}get(e){return this.data[e]}has(e){return this.data[e]!==void 0}toJSON(){return this.data}}function J(e){let[t,r]=e.match(/\d+|\D+/g)??[];if(!t||!r)return 0;let n=parseInt(t);switch(r){case"B":return n;case"KB":return n*1024;case"MB":return n*1024*1024;case"GB":return n*1024*1024*1024;case"TB":return n*1024*1024*1024*1024;default:return 0}}function W(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}}function X(e){let[t,r]=e.split(":");switch(t){case"required":return(n)=>{if(n instanceof Blob)return n.size>0;return n!==null&&n!==void 0&&n?.length>0};case"password":return(n)=>{return/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[^a-zA-Z0-9]).{8,}$/.test(n)};case"number":return(n)=>{if(typeof n!=="number")return!1;return!isNaN(n)};case"min":return(n)=>{return n?.length>=parseInt(r)};case"max":return(n)=>{return n?.length<=parseInt(r)};case"email":return(n)=>{return/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(n)};case"file":return(n)=>{return n instanceof Blob};case"fileType":return(n)=>{if(n instanceof Blob){let s=W(r);return n.type.startsWith(s)}};case"fileSize":return(n)=>{if(n instanceof Blob){let s=J(r);return n.size<=s}};default:return()=>!0}}class R{kind;rawRequest;headers;cookies;search;schema={};routePath;params;constructor(e,t,r,n){if(!e){let i=y.getStore().req;this.params=i.params,this.rawRequest=i.rawRequest,this.kind=i.kind,this.routePath=i.routePath}else this.params=t,this.rawRequest=e,this.routePath=n,this.kind=r??"api";this.headers=this.rawRequest.headers;let s=this.rawRequest.headers.get("Cookie"),o=new Map;if(s){let i=s.split(";");for(let a of i){let[p,c]=a.split("=");o.set(p.trim(),c.trim())}}if(this.rawRequest.method==="GET"){let i=new URL(this.rawRequest.url),a=new Map;for(let[c,H]of i.searchParams)if(a.has(c)){let m=a.get(c);if(Array.isArray(m))m.push(H),a.set(c,m);else a.set(c,[m,H])}else a.set(c,H);let p=Object.fromEntries(a.entries());this.search=new T(p)}this.cookies=o}ctx(){return y.getStore()}refine(e){return{}}async parseBody(){let e=new T({});if(this.rawRequest.headers.get("Content-Type")==="application/json"){let t=await this.rawRequest.json();e=new T(t)}if(this.rawRequest.headers.get("Content-Type")==="application/x-www-form-urlencoded"){let t=await this.rawRequest.formData();e=new T(t)}if(this.rawRequest.headers.get("Content-Type")?.startsWith("multipart/form-data")){let t=await this.rawRequest.formData(),r=new Map;for(let[n,s]of t.entries())if(r.has(n)){let o=r.get(n);if(Array.isArray(o))o.push(s),r.set(n,o);else r.set(n,[o,s])}else r.set(n,s);e=new T(Object.fromEntries(r.entries()))}return e}validateInput(e){let t={};for(let[r,n]of Object.entries(this.schema))for(let[s,o]of Object.entries(n)){let i=X(s),a=o,p=!1;if(typeof o==="function")a=o(e.get(r)),p=typeof a==="undefined";else p=i(e.get(r));if(p)continue;if(!t[r])t[r]=[];if(s==="required"){t[r]=[String(a)];break}else t[r].push(String(a))}for(let[r,n]of Object.entries(this.refine(e.toJSON())??{})){if(!t[r])t[r]=[];t[r]=[...t[r]??[],n]}if(Object.keys(t).length>0)throw new P(t);else return e}async input(){return this.validateInput(await this.parseBody())}async safeInput(){let e=await this.parseBody();try{return this.validateInput(e),{isValid:!0,errors:{},input:e}}catch(t){if(!(t instanceof P))throw t;return{isValid:!1,errors:t.errors,input:e}}}}class u{e;constructor(e){this.req=e}run(...e){return{}}}function Z(e){let t=e.headers.get("cookie");if(!t)return new Map;let r=new Map,n=t.split(";");for(let s of n){let[o,i]=s.split("=");r.set(o.trim(),i)}return r}class U extends f{aliases={};boot(){}}class L extends d{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 V extends d{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 h extends d{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 b extends w{e;static _name="AuthenticationServiceContainer";constructor(e){super();this.provider=e}async getSession(e,t){let r=await this.provider.adapter.findSession({token:e,userAgent:t}),n=null;if(r?.user)n=await this.provider.extendSession(r.user),r.user.extension=n;return r}}class k extends u{async run(e){let t=y.getStore(),r=t.req.cookies.get("access_token");if(!r)throw new h;let n=t.user;if(!n){let s=await b.use().getSession(r,t.req.headers.get("User-Agent"));if(!s)throw new h;n=s?.user,t.setUser(n)}return{}}}class _ extends u{async run(...e){let[t="public",r="864000",...n]=e,s=`${t}, max-age=${r}${n.length>0?", ":""}${n.join(", ")}`;if(e.length===0)s="public, max-age=864000, stale-while-revalidate=300, stale-if-error=600";if(e.length===1&&e[0]==="public")s="public, max-age=864000, stale-while-revalidate=300, stale-if-error=600";if(e.length===1&&e[0]==="private")s="private, max-age=0, stale-while-revalidate=300, stale-if-error=600";if(this.req.rawRequest.method==="GET")this.req.ctx().setHeaders("Cache-Control",s);return{}}}class I extends w{e;static _name="RateLimiterServiceContainer";constructor(e){super();this.service=e}}class G extends d{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 D extends u{async run(e=1000){let t=this.req.headers.get("x-forwarded-for"),r=I.use().service.driver;if(r.consume.call(r,t,this.req.routePath)>e)throw new G;return{}}}import{createHmac as z,timingSafeEqual as ee}from"crypto";class N extends u{async run(){let e=this.req.cookies.get("csrf_token");if(!e)throw new C;if(!["POST","PUT","PATCH","DELETE"].includes(this.req.rawRequest.method))return{};try{let r=Buffer.from(process.env.SECRET,"utf8"),n=z("sha256",r);n.update(e);let s=n.digest(),o=this.req.rawRequest.clone(),a=await new R(o).input(),p=Buffer.from(a.get("__csrf"),"base64");if(!ee(p,s))throw new C}catch(r){throw new C}return{}}}class C extends d{constructor(){super("Invalid CSRF token");this.name="InvalidCSRFTokenError"}payload={api:{status:403,data:{error:"Invalid CSRF token"}},view:{}}}class B{policiesList={};constructor(){let e=this.register();for(let t of e){let r=new t;this.policiesList[t.name]=r}}register(){return[]}}class F{all(e,t){return!0}}class j extends f{dictionary={};supportedLocales=[];defaultLocale="en-US";async init(){}detectLocale(e){return""}boot(){}}export{Z as getCookies,x as ViewRouter,P as ValidationError,M as ResourceController,d as RequestBreakerError,D as RateLimitMiddleware,B as PoliciesServiceProvider,F as Policies,U as MiddlewareServiceProvider,u as Middleware,V as InsufficientPermissionsError,j as I18nServiceProvider,R as HttpRequest,K as Controller,_ as CacheMiddleware,N as CSRFMiddleware,L as AuthorizationError,k as AuthenticationMiddleware,h as AuthenticationError,A as ApiRouter};export{K as n,E as o,A as p,x as q,de as r,d as s,P as t,y as u,R as v,U as w,L as x,V as y,b as z,I as A,j as B};
|
|
3
3
|
|
|
4
|
-
//# debugId=
|
|
4
|
+
//# debugId=8D360E20478C55EB64756E2164756E21
|
package/dist/http/index.js.map
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../http/Controller.ts", "../internal/isConstructor.ts", "../http/ApiRouter.ts", "../http/ViewRouter.ts", "../http/Error.ts", "../http/Router.ts", "../http/requestContext.ts", "../http/Cookie.ts", "../http/HttpRequest.ts", "../http/Middleware.ts", "../http/getCookies.ts", "../http/MiddlewareServiceProvider.ts", "../http/errors.ts", "../auth/AuthenticationServiceContainer.ts", "../http/AuthenticationMiddlware.ts", "../http/CacheMiddleware.ts", "../services/rate-limiter/RateLimiterServiceContainer.ts", "../http/RateLimitMiddleware.ts", "../http/PoliciesServiceProvider.ts", "../http/Policy.ts", "../http/I18nServiceProvider.ts"],
|
|
3
|
+
"sources": ["../http/Controller.ts", "../internal/isConstructor.ts", "../http/ApiRouter.ts", "../http/ViewRouter.ts", "../http/Error.ts", "../http/Router.ts", "../http/requestContext.ts", "../http/Cookie.ts", "../http/HttpRequest.ts", "../http/Middleware.ts", "../http/getCookies.ts", "../http/MiddlewareServiceProvider.ts", "../http/errors.ts", "../auth/AuthenticationServiceContainer.ts", "../http/AuthenticationMiddlware.ts", "../http/CacheMiddleware.ts", "../services/rate-limiter/RateLimiterServiceContainer.ts", "../http/RateLimitMiddleware.ts", "../http/CSRFMiddleware.ts", "../http/PoliciesServiceProvider.ts", "../http/Policy.ts", "../http/I18nServiceProvider.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"import type { HttpRequest } from \"./HttpRequest\";\n\nexport class Controller {\n static kind = \"controller\" as const;\n\n constructor() {}\n}\n\ntype PromiseOrData<T> = T | Promise<T>;\n\nexport abstract class ResourceController extends Controller {\n abstract create(req: HttpRequest<any, any>): PromiseOrData<any>;\n abstract update(req: HttpRequest<any, any>): PromiseOrData<any>;\n abstract delete(req: HttpRequest<any, any>): PromiseOrData<any>;\n abstract list(req: HttpRequest<any, any>): PromiseOrData<any>;\n abstract show(req: HttpRequest<any, any>): PromiseOrData<any>;\n}\n\nexport type ControllerMethods<\n T extends new () => Controller | ResourceController,\n> = {\n [K in keyof InstanceType<T>]: InstanceType<T>[K] extends Function ? K : never;\n}[keyof InstanceType<T>];\n",
|
|
6
6
|
"export function isConstructor(value: any) {\n return typeof value === \"function\" && value.prototype !== undefined;\n}\n",
|
|
@@ -8,23 +8,24 @@
|
|
|
8
8
|
"import type { KeyAndValue, KeyAndValueToObject } from \"../internal/type-utils\";\nimport { Controller } from \"./Controller\";\nimport { HttpRequest } from \"./HttpRequest\";\n\ntype ControllerMethods<T extends new () => Controller> = {\n [K in keyof InstanceType<T>]: InstanceType<T>[K] extends Function ? K : never;\n}[keyof InstanceType<T>];\n\nexport type ViewRoutes = Record<\n string,\n | ViewRoute<any, any, any>\n | LayoutRoute<any, any, any, any>\n | (new () => ViewRouter)\n>;\n\ntype CallbackHandler<Input, Output, Params> = (\n req: HttpRequest<Input, Params>,\n) => Promise<Output> | Output;\n\nexport type ViewHandler<Input, Output, Params> =\n | CallbackHandler<Input, Output, Params>\n | (new () => Controller);\n\ntype ParseViewControllerHandler<\n C extends new () => Controller,\n M extends ControllerMethods<C>,\n> = InstanceType<C>[M] extends (\n req: HttpRequest<infer Input, infer Params>,\n) => infer Output\n ? ViewRoute<Input, Output, Params>\n : never;\n\ntype ParseLayoutControllerHandler<\n T extends ViewRoutes,\n C extends new () => Controller,\n M extends ControllerMethods<C>,\n> = InstanceType<C>[M] extends (\n req: HttpRequest<infer Input, infer Params>,\n) => infer Output\n ? LayoutRoute<T, Input, Output, Params>\n : never;\n\nexport class ViewRoute<Input, Output, Params> {\n middlewares: string[] = [];\n private handler: (req: HttpRequest<Input, Params>) => Output;\n constructor(\n public viewPath: string,\n handler?:\n | CallbackHandler<Input, Output, Params>\n | [new () => Controller, ControllerMethods<any>],\n ) {\n if (!handler) {\n this.handler = (() => ({})) as any;\n } else if (typeof handler === \"function\") {\n this.handler = handler as any;\n } else {\n const [controller, methodName] = handler;\n const controllerInstance = new controller();\n const controllerHandler =\n controllerInstance[methodName].bind(controllerInstance);\n this.handler = (_req: HttpRequest<Input, Params>): Output => {\n return controllerHandler();\n };\n }\n }\n\n async run(req: HttpRequest<Input, Params>) {\n return {\n [this.viewPath]: await this.handler(req),\n };\n }\n\n middleware(middlewares: string[]) {\n this.middlewares = middlewares;\n return this;\n }\n}\n\nexport class LayoutRoute<T extends ViewRoutes, Input, Output, Params> {\n children: new () => ViewRouter;\n middlewares: string[] = [];\n private handler: (req: HttpRequest<Input, Params>) => Output =\n (() => ({})) as any;\n constructor(\n public viewPath: string,\n handlerOrRoutes:\n | CallbackHandler<Input, Output, Params>\n | [new () => Controller, ControllerMethods<any>]\n | T,\n routes?: T,\n ) {\n if (typeof handlerOrRoutes === \"function\") {\n this.handler = handlerOrRoutes as any;\n this.children = class extends ViewRouter {\n routes = routes ?? ({} as T);\n };\n } else if (Array.isArray(handlerOrRoutes)) {\n const [controller, methodName] = handlerOrRoutes;\n const controllerInstance = new controller();\n const controllerHandler =\n controllerInstance[methodName].bind(controllerInstance);\n this.handler = (req: HttpRequest<Input, Params>): Output => {\n return controllerHandler(req);\n };\n this.children = class extends ViewRouter {\n routes = routes ?? ({} as T);\n };\n } else {\n this.children = class extends ViewRouter {\n routes = handlerOrRoutes as T;\n };\n this.handler = () => ({}) as Output;\n }\n }\n\n async run(req: HttpRequest<Input, Params>) {\n return {\n [this.viewPath]: await this.handler(req),\n };\n }\n\n middleware(middlewares: string[]) {\n this.middlewares = middlewares;\n return this;\n }\n}\n\nexport class ViewRouter {\n middlewares: string[] = [];\n routes: ViewRoutes = {};\n\n public view<C extends new () => Controller, M extends ControllerMethods<C>>(\n viewPath: string,\n handler?: [C, M],\n ): ParseViewControllerHandler<C, M>;\n public view<Input, Output, Params>(\n viewPath: string,\n handler?: ViewHandler<Input, Output, Params>,\n ): ViewRoute<Input, Output, Params>;\n public view<C extends new () => Controller, M extends ControllerMethods<C>>(\n viewPath: string,\n handler?: [C, M] | ViewHandler<any, any, any>,\n ) {\n return new ViewRoute(viewPath, handler as any);\n }\n\n public layout<T extends ViewRoutes>(\n viewPath: string,\n handlerOrRoutes: T,\n routes?: T,\n ): LayoutRoute<T, any, any, any>;\n public layout<\n T extends ViewRoutes,\n C extends new () => Controller,\n M extends ControllerMethods<C>,\n >(\n viewPath: string,\n handlerOrRoutes: [C, M],\n routes?: T,\n ): ParseLayoutControllerHandler<T, C, M>;\n public layout<T extends ViewRoutes, Input, Output, Params>(\n viewPath: string,\n handlerOrRoutes: CallbackHandler<Input, Output, Params>,\n routes?: T,\n ): LayoutRoute<T, Input, Output, Params>;\n public layout<\n T extends ViewRoutes,\n C extends new () => Controller,\n M extends ControllerMethods<C>,\n >(\n viewPath: string,\n handlerOrRoutes: ViewHandler<any, any, any> | [C, M] | T,\n routes?: T,\n ) {\n return new LayoutRoute(viewPath, handlerOrRoutes as any, routes);\n }\n}\n\ntype ViewRouteParser<T, Prefix extends PropertyKey = \"\"> =\n T extends ViewRoute<infer Input, infer Output, infer Params>\n ? KeyAndValue<`view:${Prefix & string}`, ViewHandler<Input, Output, Params>>\n : never;\n\ntype LayoutRouteParser<T, Prefix extends PropertyKey = \"\"> =\n T extends LayoutRoute<infer Routes, infer I, infer O, infer P>\n ?\n | RoutesParser<Routes, Prefix>\n | KeyAndValue<`layout:${Prefix & string}`, ViewHandler<I, O, P>>\n : never;\n\ntype ParsePrefixAndKey<\n P extends PropertyKey,\n K extends PropertyKey,\n U = `${P & string}${K & string}`,\n> = U extends \"//\"\n ? \"/\"\n : U extends `${infer T1}//${infer T2}`\n ? `${T1}/${T2}`\n : U extends `${infer T1}/${infer T2}/`\n ? `${T1}/${T2}`\n : U;\n\ntype RouterInstanceParser<\n T extends new () => ViewRouter,\n Prefix extends PropertyKey = \"\",\n> = RoutesParser<InstanceType<T>[\"routes\"], Prefix>;\n\ntype RoutesParser<\n T extends ViewRoutes,\n Prefix extends PropertyKey = \"\",\n K extends keyof T = keyof T,\n> = K extends any\n ? T[K] extends new () => ViewRouter\n ? RouterInstanceParser<T[K], ParsePrefixAndKey<Prefix, K>>\n : T[K] extends LayoutRoute<any, any, any, any>\n ? LayoutRouteParser<T[K], ParsePrefixAndKey<Prefix, K>>\n : T[K] extends ViewRoute<any, any, any>\n ? ViewRouteParser<T[K], ParsePrefixAndKey<Prefix, K>>\n : never\n : never;\n\nexport type CreateViewRPC<\n T extends ViewRouter,\n Prefix extends PropertyKey = \"\",\n> = KeyAndValueToObject<RoutesParser<T[\"routes\"], Prefix>>;\n",
|
|
9
9
|
"export const GEMI_REQUEST_BREAKER_ERROR = \"GEMI_REQUEST_BREAKER_ERROR\";\n\nexport class RequestBreakerError extends Error {\n public kind = GEMI_REQUEST_BREAKER_ERROR;\n public payload: {\n api: Record<string, any>;\n view: Record<string, any>;\n } = { api: {}, view: {} };\n}\n",
|
|
10
10
|
"import { RequestBreakerError } from \"./Error\";\nimport type { HttpRequest } from \"./HttpRequest\";\n\ntype MiddlewareResult = Partial<{\n headers: Record<string, string>;\n cookies: Record<string, string>;\n}>;\n\nexport type MiddlewareReturnType =\n | void\n | Promise<MiddlewareResult>\n | MiddlewareResult;\n\nexport type RouterMiddleware = (\n req: HttpRequest,\n ctx: any,\n) => MiddlewareReturnType;\n\nexport class ValidationError extends RequestBreakerError {\n errors: Record<string, string[]> = {};\n constructor(errors: Record<string, string[]>) {\n super(\"Validation error\");\n this.name = \"ValidationError\";\n this.errors = errors;\n this.payload = {\n api: {\n status: 400,\n data: {\n error: {\n kind: \"validation_error\",\n messages: errors,\n },\n },\n headers: {\n \"Content-Type\": \"application/json\",\n },\n },\n view: {\n status: 400,\n },\n };\n }\n}\n",
|
|
11
|
-
"import { AsyncLocalStorage } from \"async_hooks\";\nimport { Cookie, type CreateCookieOptions } from \"./Cookie\";\nimport { HttpRequest } from \"./HttpRequest\";\n\nconst requestContext = new AsyncLocalStorage<Store>();\n\nclass Store {\n cookies: Set<Cookie> = new Set();\n headers: Headers = new Headers();\n prefetchedResources = new Map<string, Record<string, any>>();\n prefetchPromiseQueue = new Set<() => Promise<any>>();\n user: any = null;\n\n constructor(public req: HttpRequest) {}\n\n setCookie(name: string, value: string, options: CreateCookieOptions = {}) {\n this.cookies.add(new Cookie(name, value, options));\n }\n\n setHeaders(name: string, value: string) {\n this.headers.set(name, value);\n }\n\n setUser(user: any) {\n this.user = user;\n }\n\n setRequest(req: HttpRequest<any, any>) {\n this.req = req;\n }\n\n destroy() {\n delete this.cookies;\n delete this.headers;\n delete this.prefetchedResources;\n delete this.prefetchPromiseQueue;\n delete this.user;\n }\n}\n\nexport class RequestContext {\n static getStore() {\n return requestContext.getStore()!;\n }\n\n static setRequest(req: HttpRequest<any, any>) {\n requestContext.getStore().req = req;\n }\n\n static run<T>(httpRequest: HttpRequest, fn: () => T): T {\n return requestContext.run(new Store(httpRequest), fn);\n }\n}\n",
|
|
11
|
+
"import { AsyncLocalStorage } from \"async_hooks\";\nimport { Cookie, type CreateCookieOptions } from \"./Cookie\";\nimport { HttpRequest } from \"./HttpRequest\";\n\nconst requestContext = new AsyncLocalStorage<Store>();\n\nclass Store {\n cookies: Set<Cookie> = new Set();\n headers: Headers = new Headers();\n prefetchedResources = new Map<string, Record<string, any>>();\n prefetchPromiseQueue = new Set<() => Promise<any>>();\n user: any = null;\n csrfHmac: string | null = null;\n\n constructor(public req: HttpRequest) {}\n\n setCSRFHmac(hmac: string) {\n this.csrfHmac = hmac;\n }\n\n setCookie(name: string, value: string, options: CreateCookieOptions = {}) {\n this.cookies.add(new Cookie(name, value, options));\n }\n\n setHeaders(name: string, value: string) {\n this.headers.set(name, value);\n }\n\n setUser(user: any) {\n this.user = user;\n }\n\n setRequest(req: HttpRequest<any, any>) {\n this.req = req;\n }\n\n destroy() {\n delete this.cookies;\n delete this.headers;\n delete this.prefetchedResources;\n delete this.prefetchPromiseQueue;\n delete this.user;\n }\n}\n\nexport class RequestContext {\n static getStore() {\n return requestContext.getStore()!;\n }\n\n static setRequest(req: HttpRequest<any, any>) {\n requestContext.getStore().req = req;\n }\n\n static run<T>(httpRequest: HttpRequest, fn: () => T): T {\n return requestContext.run(new Store(httpRequest), fn);\n }\n}\n",
|
|
12
12
|
"export interface CreateCookieOptions {\n maxAge?: number;\n expires?: Date;\n httpOnly?: boolean;\n secure?: boolean;\n sameSite?: \"Strict\" | \"Lax\";\n path?: string;\n domain?: string;\n partitioned?: boolean;\n}\n\nexport class Cookie {\n constructor(\n private name: string,\n private value: string,\n private options: CreateCookieOptions = {},\n ) {}\n\n toString() {\n return [\n `${this.name}=${this.value}`,\n this.options.maxAge ? `Max-Age=${this.options.maxAge}` : \"\",\n this.options.httpOnly ? \"HttpOnly\" : \"\",\n this.options.secure ? \"Secure\" : \"\",\n this.options.sameSite\n ? `SameSite=${this.options.sameSite}`\n : \"SameSite=Strict\",\n this.options.path ? `Path=${this.options.path}` : \"Path=/\",\n this.options.domain ? `Domain=${this.options.domain}` : \"\",\n this.options.expires\n ? `Expires=${this.options.expires.toUTCString()}`\n : \"\",\n this.options.partitioned ? \"Partitioned\" : \"\",\n ]\n .filter((i) => i !== \"\")\n .join(\"; \");\n }\n}\n",
|
|
13
|
-
"import { RequestContext } from \"./requestContext\";\nimport { ValidationError } from \"./Router\";\n\nclass Input<T> {\n constructor(private data: T) {}\n\n public get<K extends keyof T>(key: K): T[K] {\n return this.data[key];\n }\n\n public has(key: keyof T) {\n return this.data[key] !== undefined;\n }\n\n public toJSON(): T {\n return this.data;\n }\n}\n\n// Formats B KB MB GB TB\n// e.g parseFileSizeString(\"1MB\") => 1024 * 1024\nfunction parseFileSizeString(size: string) {\n const [number, unit] = size.match(/\\d+|\\D+/g) ?? [];\n if (!number || !unit) {\n return 0;\n }\n const fileSize = parseInt(number);\n switch (unit) {\n case \"B\":\n return fileSize;\n case \"KB\":\n return fileSize * 1024;\n case \"MB\":\n return fileSize * 1024 * 1024;\n case \"GB\":\n return fileSize * 1024 * 1024 * 1024;\n case \"TB\":\n return fileSize * 1024 * 1024 * 1024 * 1024;\n default:\n return 0;\n }\n}\n\n// Formats png, jpg, ttf, excel, csv, word, pdf, json\n// Eg. png => image/png\nfunction parseFileTypeString(type: string) {\n switch (type) {\n case \"image\":\n return \"image\";\n case \"png\":\n return \"image/png\";\n case \"jpg\":\n return \"image/jpeg\";\n case \"jpeg\":\n return \"image/jpeg\";\n case \"ttf\":\n return \"font/ttf\";\n case \"excel\":\n return \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\";\n case \"csv\":\n return \"text/csv\";\n case \"word\":\n return \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\";\n case \"pdf\":\n return \"application/pdf\";\n case \"json\":\n return \"application/json\";\n default:\n return type;\n }\n}\n\nfunction validate(ruleName: string) {\n const [rule, param] = ruleName.split(\":\");\n switch (rule) {\n case \"required\":\n return (value: any) => {\n if (value instanceof Blob) {\n return value.size > 0;\n }\n return value !== null && value !== undefined && value?.length > 0;\n };\n case \"password\":\n return (value: any) => {\n // min 8 characters\n // at least one uppercase letter,\n // at least one lowercase letter and one number\n // at least one special character\n const passwordRegex =\n /^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[^a-zA-Z0-9]).{8,}$/;\n return passwordRegex.test(value);\n };\n\n case \"number\":\n return (value: any) => {\n if (typeof value !== \"number\") return false;\n\n return !isNaN(value);\n };\n case \"min\":\n return (value: any) => {\n return value?.length >= parseInt(param);\n };\n case \"max\":\n return (value: any) => {\n return value?.length <= parseInt(param);\n };\n case \"email\":\n return (value: any) => {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n return emailRegex.test(value);\n };\n case \"file\":\n return (value: any) => {\n return value instanceof Blob;\n };\n case \"fileType\":\n return (value: Blob) => {\n if (value instanceof Blob) {\n const parsedType = parseFileTypeString(param);\n return value.type.startsWith(parsedType);\n }\n };\n\n case \"fileSize\":\n return (value: Blob) => {\n if (value instanceof Blob) {\n const absoluteSize = parseFileSizeString(param);\n return value.size <= absoluteSize;\n }\n };\n default:\n return () => true;\n }\n}\n\ntype StringType = \"string\";\ntype NumberType = \"number\";\ntype BooleanType = \"boolean\";\ntype MinLengthType = `min:${number}`;\ntype MaxLengthType = `max:${number}`;\ntype RequiredType = \"required\";\ntype FileType = \"file\";\ntype FileTypeType = \"fileType:${string}\";\ntype FileSizeType = \"fileSize:${string}\";\ntype SchemaKey =\n | StringType\n | NumberType\n | BooleanType\n | MinLengthType\n | MaxLengthType\n | RequiredType\n | FileType\n | FileTypeType\n | FileSizeType;\n\nexport type Schema<T extends Body> = Record<\n keyof T,\n Partial<Record<SchemaKey, string>>\n>;\n\nexport type Body = Record<string, any>;\nexport type HttpRequestKind = \"view\" | \"api\";\n\nexport class HttpRequest<\n T extends Body = Record<string, never>,\n Params = Record<string, never>,\n> {\n public kind: HttpRequestKind;\n public rawRequest: Request;\n public headers: Headers;\n public cookies: Map<string, string>;\n public search: Input<T>;\n public schema: any = {};\n public routePath: string;\n public params: Params;\n public ctx = RequestContext.getStore();\n\n constructor(\n req?: Request,\n params?: any,\n kind?: HttpRequestKind,\n routePath?: string,\n ) {\n if (!req) {\n const _req = RequestContext.getStore().req;\n this.params = _req.params as any;\n this.rawRequest = _req.rawRequest;\n this.kind = _req.kind;\n this.routePath = _req.routePath;\n } else {\n this.params = params;\n this.rawRequest = req;\n this.routePath = routePath;\n this.kind = kind ?? \"api\";\n }\n\n this.headers = this.rawRequest.headers;\n\n const cookie = this.rawRequest.headers.get(\"Cookie\");\n const cookies = new Map();\n if (cookie) {\n const cookieArray = cookie.split(\";\");\n for (const c of cookieArray) {\n const [key, value] = c.split(\"=\");\n cookies.set(key.trim(), value.trim());\n }\n }\n if (this.rawRequest.method === \"GET\") {\n const url = new URL(this.rawRequest.url);\n const map = new Map<string, string | string[]>();\n for (const [key, value] of url.searchParams) {\n if (map.has(key)) {\n const currentValue = map.get(key);\n if (Array.isArray(currentValue)) {\n currentValue.push(value);\n map.set(key, currentValue);\n } else {\n map.set(key, [currentValue, value]);\n }\n } else {\n map.set(key, value);\n }\n }\n const params = Object.fromEntries(map.entries());\n this.search = new Input<T>(params as T);\n }\n this.cookies = cookies;\n }\n\n public refine(_input: any): any {\n return {};\n }\n\n private async parseBody() {\n let inputMap = new Input<T>({} as T);\n if (this.rawRequest.headers.get(\"Content-Type\") === \"application/json\") {\n const body = await this.rawRequest.json();\n inputMap = new Input<T>(body as T);\n }\n if (\n this.rawRequest.headers.get(\"Content-Type\") ===\n \"application/x-www-form-urlencoded\"\n ) {\n const body = (await this.rawRequest.formData()) as any; // TODO: fix type\n inputMap = new Input<T>(body as T);\n }\n\n if (\n this.rawRequest.headers\n .get(\"Content-Type\")\n ?.startsWith(\"multipart/form-data\")\n ) {\n const body = (await this.rawRequest.formData()) as any; // TODO: fix type\n const _inputMap = new Map<string, any>();\n for (const [key, value] of body.entries()) {\n if (_inputMap.has(key)) {\n const currentValue = _inputMap.get(key);\n if (Array.isArray(currentValue)) {\n currentValue.push(value);\n _inputMap.set(key, currentValue);\n } else {\n _inputMap.set(key, [currentValue, value] as any);\n }\n } else {\n _inputMap.set(key, value as T[keyof T]);\n }\n }\n inputMap = new Input<T>(Object.fromEntries(_inputMap.entries()) as T);\n }\n return inputMap;\n }\n\n private validateInput(input: Input<T>) {\n const errors: Record<string, string[]> = {};\n for (const [key, rules] of Object.entries(this.schema)) {\n for (const [rule, message] of Object.entries(rules)) {\n const validator = validate(rule);\n\n let _message = message;\n let _isValid = false;\n if (typeof message === \"function\") {\n _message = message(input.get(key));\n _isValid = typeof _message === \"undefined\";\n } else {\n _isValid = validator(input.get(key));\n }\n\n if (_isValid) {\n continue;\n }\n\n if (!errors[key]) {\n errors[key] = [];\n }\n if (rule === \"required\") {\n errors[key] = [String(_message)];\n break;\n } else {\n errors[key].push(String(_message));\n }\n }\n }\n\n for (const [key, value] of Object.entries(\n this.refine(input.toJSON()) ?? {},\n )) {\n if (!errors[key]) {\n errors[key] = [];\n }\n errors[key] = [...(errors[key] ?? []), value as string];\n }\n\n if (Object.keys(errors).length > 0) {\n throw new ValidationError(errors);\n } else {\n return input;\n }\n }\n\n public async input(): Promise<Input<T>> {\n return this.validateInput(await this.parseBody());\n }\n\n public async safeInput(): Promise<{\n isValid: boolean;\n errors: Record<string, string[]>;\n input: Input<T>;\n }> {\n const input = await this.parseBody();\n try {\n this.validateInput(input);\n return {\n isValid: true,\n errors: {},\n input,\n };\n } catch (err) {\n if (!(err instanceof ValidationError)) {\n throw err;\n }\n return {\n isValid: false,\n errors: err.errors,\n input,\n };\n }\n }\n\n // TODO implement this method\n public async terminate(_params: TerminateParams) {\n throw \"not implemented\";\n }\n}\n\n// class TerminateError extends RequestBreakerError {\n// constructor(\n// private requestKind: \"api\" | \"view\",\n// private payload: Record<string, any>,\n// ) {\n// super();\n// const api = requestKind === \"view\" ? {} : payload;\n// const view = requestKind === \"api\" ? {} : payload;\n\n// this.payload = { api, view };\n// }\n// }\n\ntype TerminateParams = {\n message: string;\n status: number;\n headers?: Record<string, string>;\n payload?: Record<string, any>;\n};\n",
|
|
13
|
+
"import { RequestBreakerError } from \"./Error\";\nimport { AuthenticationError } from \"./errors\";\nimport { RequestContext } from \"./requestContext\";\nimport { ValidationError } from \"./Router\";\n\nclass Input<T> {\n constructor(private data: T) {}\n\n public get<K extends keyof T>(key: K): T[K] {\n return this.data[key];\n }\n\n public has(key: keyof T) {\n return this.data[key] !== undefined;\n }\n\n public toJSON(): T {\n return this.data;\n }\n}\n\n// Formats B KB MB GB TB\n// e.g parseFileSizeString(\"1MB\") => 1024 * 1024\nfunction parseFileSizeString(size: string) {\n const [number, unit] = size.match(/\\d+|\\D+/g) ?? [];\n if (!number || !unit) {\n return 0;\n }\n const fileSize = parseInt(number);\n switch (unit) {\n case \"B\":\n return fileSize;\n case \"KB\":\n return fileSize * 1024;\n case \"MB\":\n return fileSize * 1024 * 1024;\n case \"GB\":\n return fileSize * 1024 * 1024 * 1024;\n case \"TB\":\n return fileSize * 1024 * 1024 * 1024 * 1024;\n default:\n return 0;\n }\n}\n\n// Formats png, jpg, ttf, excel, csv, word, pdf, json\n// Eg. png => image/png\nfunction parseFileTypeString(type: string) {\n switch (type) {\n case \"image\":\n return \"image\";\n case \"png\":\n return \"image/png\";\n case \"jpg\":\n return \"image/jpeg\";\n case \"jpeg\":\n return \"image/jpeg\";\n case \"ttf\":\n return \"font/ttf\";\n case \"excel\":\n return \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\";\n case \"csv\":\n return \"text/csv\";\n case \"word\":\n return \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\";\n case \"pdf\":\n return \"application/pdf\";\n case \"json\":\n return \"application/json\";\n default:\n return type;\n }\n}\n\nfunction validate(ruleName: string) {\n const [rule, param] = ruleName.split(\":\");\n switch (rule) {\n case \"required\":\n return (value: any) => {\n if (value instanceof Blob) {\n return value.size > 0;\n }\n return value !== null && value !== undefined && value?.length > 0;\n };\n case \"password\":\n return (value: any) => {\n // min 8 characters\n // at least one uppercase letter,\n // at least one lowercase letter and one number\n // at least one special character\n const passwordRegex =\n /^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[^a-zA-Z0-9]).{8,}$/;\n return passwordRegex.test(value);\n };\n\n case \"number\":\n return (value: any) => {\n if (typeof value !== \"number\") return false;\n\n return !isNaN(value);\n };\n case \"min\":\n return (value: any) => {\n return value?.length >= parseInt(param);\n };\n case \"max\":\n return (value: any) => {\n return value?.length <= parseInt(param);\n };\n case \"email\":\n return (value: any) => {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n return emailRegex.test(value);\n };\n case \"file\":\n return (value: any) => {\n return value instanceof Blob;\n };\n case \"fileType\":\n return (value: Blob) => {\n if (value instanceof Blob) {\n const parsedType = parseFileTypeString(param);\n return value.type.startsWith(parsedType);\n }\n };\n\n case \"fileSize\":\n return (value: Blob) => {\n if (value instanceof Blob) {\n const absoluteSize = parseFileSizeString(param);\n return value.size <= absoluteSize;\n }\n };\n default:\n return () => true;\n }\n}\n\ntype StringType = \"string\";\ntype NumberType = \"number\";\ntype BooleanType = \"boolean\";\ntype MinLengthType = `min:${number}`;\ntype MaxLengthType = `max:${number}`;\ntype RequiredType = \"required\";\ntype FileType = \"file\";\ntype FileTypeType = \"fileType:${string}\";\ntype FileSizeType = \"fileSize:${string}\";\ntype SchemaKey =\n | StringType\n | NumberType\n | BooleanType\n | MinLengthType\n | MaxLengthType\n | RequiredType\n | FileType\n | FileTypeType\n | FileSizeType;\n\nexport type Schema<T extends Body> = Record<\n keyof T,\n Partial<Record<SchemaKey, string>>\n>;\n\nexport type Body = Record<string, any>;\nexport type HttpRequestKind = \"view\" | \"api\";\n\nexport class HttpRequest<\n T extends Body = Record<string, never>,\n Params = Record<string, never>,\n> {\n public kind: HttpRequestKind;\n public rawRequest: Request;\n public headers: Headers;\n public cookies: Map<string, string>;\n public search: Input<T>;\n public schema: any = {};\n public routePath: string;\n public params: Params;\n\n constructor(\n req?: Request,\n params?: any,\n kind?: HttpRequestKind,\n routePath?: string,\n ) {\n if (!req) {\n const _req = RequestContext.getStore().req;\n this.params = _req.params as any;\n this.rawRequest = _req.rawRequest;\n this.kind = _req.kind;\n this.routePath = _req.routePath;\n } else {\n this.params = params;\n this.rawRequest = req;\n this.routePath = routePath;\n this.kind = kind ?? \"api\";\n }\n\n this.headers = this.rawRequest.headers;\n\n const cookie = this.rawRequest.headers.get(\"Cookie\");\n const cookies = new Map();\n if (cookie) {\n const cookieArray = cookie.split(\";\");\n for (const c of cookieArray) {\n const [key, value] = c.split(\"=\");\n cookies.set(key.trim(), value.trim());\n }\n }\n if (this.rawRequest.method === \"GET\") {\n const url = new URL(this.rawRequest.url);\n const map = new Map<string, string | string[]>();\n for (const [key, value] of url.searchParams) {\n if (map.has(key)) {\n const currentValue = map.get(key);\n if (Array.isArray(currentValue)) {\n currentValue.push(value);\n map.set(key, currentValue);\n } else {\n map.set(key, [currentValue, value]);\n }\n } else {\n map.set(key, value);\n }\n }\n const params = Object.fromEntries(map.entries());\n this.search = new Input<T>(params as T);\n }\n this.cookies = cookies;\n }\n\n public ctx() {\n return RequestContext.getStore();\n }\n\n public refine(_input: any): any {\n return {};\n }\n\n private async parseBody() {\n let inputMap = new Input<T>({} as T);\n if (this.rawRequest.headers.get(\"Content-Type\") === \"application/json\") {\n const body = await this.rawRequest.json();\n inputMap = new Input<T>(body as T);\n }\n if (\n this.rawRequest.headers.get(\"Content-Type\") ===\n \"application/x-www-form-urlencoded\"\n ) {\n const body = (await this.rawRequest.formData()) as any; // TODO: fix type\n inputMap = new Input<T>(body as T);\n }\n\n if (\n this.rawRequest.headers\n .get(\"Content-Type\")\n ?.startsWith(\"multipart/form-data\")\n ) {\n const body = (await this.rawRequest.formData()) as any; // TODO: fix type\n const _inputMap = new Map<string, any>();\n for (const [key, value] of body.entries()) {\n if (_inputMap.has(key)) {\n const currentValue = _inputMap.get(key);\n if (Array.isArray(currentValue)) {\n currentValue.push(value);\n _inputMap.set(key, currentValue);\n } else {\n _inputMap.set(key, [currentValue, value] as any);\n }\n } else {\n _inputMap.set(key, value as T[keyof T]);\n }\n }\n inputMap = new Input<T>(Object.fromEntries(_inputMap.entries()) as T);\n }\n return inputMap;\n }\n\n private validateInput(input: Input<T>) {\n const errors: Record<string, string[]> = {};\n for (const [key, rules] of Object.entries(this.schema)) {\n for (const [rule, message] of Object.entries(rules)) {\n const validator = validate(rule);\n\n let _message = message;\n let _isValid = false;\n if (typeof message === \"function\") {\n _message = message(input.get(key));\n _isValid = typeof _message === \"undefined\";\n } else {\n _isValid = validator(input.get(key));\n }\n\n if (_isValid) {\n continue;\n }\n\n if (!errors[key]) {\n errors[key] = [];\n }\n if (rule === \"required\") {\n errors[key] = [String(_message)];\n break;\n } else {\n errors[key].push(String(_message));\n }\n }\n }\n\n for (const [key, value] of Object.entries(\n this.refine(input.toJSON()) ?? {},\n )) {\n if (!errors[key]) {\n errors[key] = [];\n }\n errors[key] = [...(errors[key] ?? []), value as string];\n }\n\n if (Object.keys(errors).length > 0) {\n throw new ValidationError(errors);\n } else {\n return input;\n }\n }\n\n public async input(): Promise<Input<T>> {\n return this.validateInput(await this.parseBody());\n }\n\n public async safeInput(): Promise<{\n isValid: boolean;\n errors: Record<string, string[]>;\n input: Input<T>;\n }> {\n const input = await this.parseBody();\n try {\n this.validateInput(input);\n return {\n isValid: true,\n errors: {},\n input,\n };\n } catch (err) {\n if (!(err instanceof ValidationError)) {\n throw err;\n }\n return {\n isValid: false,\n errors: err.errors,\n input,\n };\n }\n }\n}\n",
|
|
14
14
|
"import { HttpRequest } from \"./HttpRequest\";\n\nexport class Middleware {\n constructor(protected req: HttpRequest) {}\n run(..._args: any[]): Promise<any> | any {\n return {};\n }\n}\n",
|
|
15
15
|
"export function getCookies(req: Request): Map<string, string> {\n const cookies = req.headers.get(\"cookie\");\n if (!cookies) {\n return new Map();\n }\n const _cookies = new Map();\n const cookieStrings = cookies.split(\";\");\n for (const cookieString of cookieStrings) {\n const [name, value] = cookieString.split(\"=\");\n _cookies.set(name.trim(), value);\n }\n return _cookies;\n}\n",
|
|
16
16
|
"import { ServiceProvider } from \"../services/ServiceProvider\";\nimport { HttpRequest } from \"./HttpRequest\";\nimport { Middleware } from \"./Middleware\";\n\nexport class MiddlewareServiceProvider extends ServiceProvider {\n aliases: Record<string, new (req: HttpRequest) => Middleware> = {};\n\n boot() {}\n}\n",
|
|
17
17
|
"import { RequestBreakerError } from \"./Error\";\n\nexport class AuthorizationError extends RequestBreakerError {\n private error: string;\n constructor(error: string = \"Not authorized\") {\n super(\"Authentication error\");\n this.name = \"AuthenticationError\";\n this.error = error;\n this.payload = {\n api: {\n status: 401,\n data: { error: this.error },\n },\n view: {},\n };\n }\n}\n\nexport class InsufficientPermissionsError extends RequestBreakerError {\n private error: string;\n constructor(error: string = \"Insufficient permissions\") {\n super(\"Authentication error\");\n this.name = \"AuthenticationError\";\n this.error = error;\n this.payload = {\n api: {\n status: 401,\n data: { error: this.error },\n },\n view: {},\n };\n }\n}\n\nexport class AuthenticationError extends RequestBreakerError {\n constructor() {\n super(\"Authentication error\");\n this.name = \"AuthenticationError\";\n }\n\n payload = {\n api: {\n status: 401,\n data: { error: \"Authentication error\" },\n },\n view: {\n status: 302,\n headers: {\n \"Cache-Control\":\n \"private, no-cache, no-store, max-age=0, must-revalidate\",\n Location: \"/auth/sign-in\",\n },\n },\n };\n}\n",
|
|
18
18
|
"import { ServiceContainer } from \"../services/ServiceContainer\";\nimport { AuthenticationServiceProvider } from \"./AuthenticationServiceProvider\";\n\nexport class AuthenticationServiceContainer extends ServiceContainer {\n static _name = \"AuthenticationServiceContainer\";\n\n constructor(public provider: AuthenticationServiceProvider) {\n super();\n }\n\n async getSession(token: string, userAgent: string) {\n const session = await this.provider.adapter.findSession({\n token,\n userAgent,\n });\n let sessionExtension = null;\n if (session?.user) {\n sessionExtension = await this.provider.extendSession(session.user);\n session.user[\"extension\"] = sessionExtension;\n }\n return session;\n }\n}\n",
|
|
19
19
|
"import { HttpRequest } from \"./HttpRequest\";\nimport { Middleware } from \"./Middleware\";\nimport { RequestContext } from \"./requestContext\";\nimport { AuthenticationError } from \"./errors\";\nimport { AuthenticationServiceContainer } from \"../auth/AuthenticationServiceContainer\";\n\nexport class AuthenticationMiddleware extends Middleware {\n async run(_req: HttpRequest) {\n const requestContextStore = RequestContext.getStore();\n const accessToken = requestContextStore.req.cookies.get(\"access_token\");\n\n if (!accessToken) {\n throw new AuthenticationError();\n }\n\n let user = requestContextStore.user;\n\n if (!user) {\n const session = await AuthenticationServiceContainer.use().getSession(\n accessToken,\n requestContextStore.req.headers.get(\"User-Agent\"),\n );\n if (!session) {\n throw new AuthenticationError();\n }\n user = session?.user;\n requestContextStore.setUser(user);\n }\n\n return {};\n }\n}\n",
|
|
20
|
-
"import { Middleware } from \"./Middleware\";\n\nexport class CacheMiddleware extends Middleware {\n async run(...args: [scope: string, maxAge: string, ...rest: string[]]) {\n const [scope = \"public\", maxAge = \"864000\", ...rest] = args;\n let value = `${scope}, max-age=${maxAge}${rest.length > 0 ? \", \" : \"\"}${rest.join(\", \")}`;\n if (args.length === 0) {\n value =\n \"public, max-age=864000, stale-while-revalidate=300, stale-if-error=600\";\n }\n if (args.length === 1 && args[0] === \"public\") {\n value =\n \"public, max-age=864000, stale-while-revalidate=300, stale-if-error=600\";\n }\n if (args.length === 1 && args[0] === \"private\") {\n value =\n \"private, max-age=0, stale-while-revalidate=300, stale-if-error=600\";\n }\n if (this.req.rawRequest.method === \"GET\") {\n this.req.ctx.setHeaders(\"Cache-Control\", value);\n }\n\n return {};\n }\n}\n",
|
|
20
|
+
"import { Middleware } from \"./Middleware\";\n\nexport class CacheMiddleware extends Middleware {\n async run(...args: [scope: string, maxAge: string, ...rest: string[]]) {\n const [scope = \"public\", maxAge = \"864000\", ...rest] = args;\n let value = `${scope}, max-age=${maxAge}${rest.length > 0 ? \", \" : \"\"}${rest.join(\", \")}`;\n if (args.length === 0) {\n value =\n \"public, max-age=864000, stale-while-revalidate=300, stale-if-error=600\";\n }\n if (args.length === 1 && args[0] === \"public\") {\n value =\n \"public, max-age=864000, stale-while-revalidate=300, stale-if-error=600\";\n }\n if (args.length === 1 && args[0] === \"private\") {\n value =\n \"private, max-age=0, stale-while-revalidate=300, stale-if-error=600\";\n }\n if (this.req.rawRequest.method === \"GET\") {\n this.req.ctx().setHeaders(\"Cache-Control\", value);\n }\n\n return {};\n }\n}\n",
|
|
21
21
|
"import { ServiceContainer } from \"../ServiceContainer\";\nimport { RateLimiterServiceProvider } from \"./RateLimiterServiceProvider\";\n\nexport class RateLimiterServiceContainer extends ServiceContainer {\n static _name = \"RateLimiterServiceContainer\";\n\n constructor(public service: RateLimiterServiceProvider) {\n super();\n }\n}\n",
|
|
22
22
|
"import { RateLimiterServiceContainer } from \"../services/rate-limiter/RateLimiterServiceContainer\";\nimport { RequestBreakerError } from \"./Error\";\nimport { Middleware } from \"./Middleware\";\n\nclass RateLimitExceededError extends RequestBreakerError {\n constructor() {\n super(\"Rate limit exceeded\");\n this.payload = {\n api: {\n status: 429,\n data: {\n error: {\n message: \"Rate limit exceeded\",\n },\n },\n headers: {\n \"Content-Type\": \"application/json\",\n },\n },\n view: {\n error: {\n message: \"Rate limit exceeded\",\n },\n status: 429,\n },\n };\n }\n}\n\nexport class RateLimitMiddleware extends Middleware {\n async run(limit = 1000) {\n const userId = this.req.headers.get(\"x-forwarded-for\");\n const driver = RateLimiterServiceContainer.use().service.driver;\n const result = driver.consume.call(driver, userId, this.req.routePath);\n if (result > limit) {\n throw new RateLimitExceededError();\n }\n\n return {};\n }\n}\n",
|
|
23
|
+
"import { log } from \"util\";\nimport { RequestBreakerError } from \"./Error\";\nimport { HttpRequest } from \"./HttpRequest\";\nimport { Middleware } from \"./Middleware\";\nimport { createHmac, timingSafeEqual } from \"crypto\";\n\nexport class CSRFMiddleware extends Middleware {\n async run() {\n const csrfToken = this.req.cookies.get(\"csrf_token\");\n if (!csrfToken) {\n throw new InvalidCSRFTokenError();\n }\n const NON_GET_METHODS = [\"POST\", \"PUT\", \"PATCH\", \"DELETE\"];\n if (!NON_GET_METHODS.includes(this.req.rawRequest.method)) {\n return {};\n }\n\n try {\n const secret = Buffer.from(process.env.SECRET, \"utf8\");\n const mac = createHmac(\"sha256\", secret);\n mac.update(csrfToken);\n const expectedHMAC = mac.digest();\n\n const cloneReq = this.req.rawRequest.clone();\n const httpRequest = new HttpRequest(cloneReq);\n const input = await httpRequest.input();\n\n const csrfTokenHMAC = Buffer.from(input.get(\"__csrf\"), \"base64\");\n\n if (!timingSafeEqual(csrfTokenHMAC, expectedHMAC)) {\n throw new InvalidCSRFTokenError();\n }\n } catch (err) {\n throw new InvalidCSRFTokenError();\n }\n\n return {};\n }\n}\n\nexport class InvalidCSRFTokenError extends RequestBreakerError {\n constructor() {\n super(\"Invalid CSRF token\");\n this.name = \"InvalidCSRFTokenError\";\n }\n\n payload = {\n api: {\n status: 403,\n data: { error: \"Invalid CSRF token\" },\n },\n view: {},\n };\n}\n",
|
|
23
24
|
"import { Policies } from \"./Policy\";\n\nexport class PoliciesServiceProvider {\n policiesList: Record<string, Policies> = {};\n constructor() {\n const policies = this.register();\n for (const Policy of policies) {\n const policy = new Policy();\n this.policiesList[Policy.name] = policy;\n }\n }\n\n protected register(): Array<new () => Policies> {\n return [];\n }\n}\n",
|
|
24
25
|
"export class Policies {\n all(_operation: string, _args: any): Promise<boolean> | boolean {\n return true;\n }\n}\n",
|
|
25
26
|
"import { HttpRequest } from \"./HttpRequest\";\n\nimport type { Translations } from \"../client/i18n/I18nContext\";\nimport { ServiceProvider } from \"../services/ServiceProvider\";\n\nexport class I18nServiceProvider extends ServiceProvider {\n dictionary: Translations = {};\n supportedLocales: string[] = [];\n defaultLocale = \"en-US\";\n\n async init() {}\n\n detectLocale(_req: HttpRequest) {\n return \"\";\n }\n\n boot() {}\n}\n"
|
|
26
27
|
],
|
|
27
|
-
"mappings": ";2HAEO,CAAM,JAAW,OACf,MAAO,aAEd,WAAW,EAAG,EAChB,CAIO,MAAe,UAA2B,CAAW,CAM5D,CChBO,SAAS,CAAa,CAAC,EAAY,CACxC,cAAc,IAAU,YAAc,EAAM,YAAc,OC6B5D,SAAS,CAAY,CACnB,EACmC,CACnC,OAAO,EAAc,CAAS,EAGzB,MAAM,CAA0D,CAK5D,EACC,EAGA,EARV,iBAAmB,eACnB,YAAwB,CAAC,EAEzB,WAAW,CACF,EACC,EAGA,EACR,CALO,cACC,eAGA,kBAER,KAAK,QAAU,EACf,KAAK,WAAa,EAClB,KAAK,OAAS,EAGhB,cAAc,EAAG,CACf,MAAO,CACL,IAAK,KAAK,IAAI,KAAK,IAAI,EACvB,YAAa,KAAK,WACpB,EAGF,GAAG,CAAC,EAAkC,CACpC,GAAI,EAAa,KAAK,OAAO,EAAG,CAC9B,IAAM,EAAa,IAAI,KAAK,QAE5B,OADgB,EAAW,KAAK,YAAY,KAAK,CAAU,EAC5C,MAGf,QAAO,KAAK,QAAQ,EAIxB,UAAU,CAAC,EAA0B,CAEnC,OADA,KAAK,YAAc,EACZ,KAEX,CAEO,MAAM,CAAY,CACvB,WAAW,IAAI,EAAkD,CAC/D,OAAO,IAAI,EAAa,GAAG,CAAI,EAEnC,CA2CO,MAAM,CAAU,OACd,SAAU,YACV,OAAoB,CAAC,EACrB,YAAwB,CAAC,EACzB,UAAU,CAAC,EAAmD,EAS9D,GAGN,CAAC,EAAY,EAAgB,CAC5B,OAAO,IAAI,EAAa,MAAO,EAAS,CAAU,EAU7C,IAGN,CAAC,EAAY,EAAgB,CAC5B,OAAO,IAAI,EAAa,OAAQ,EAAS,CAAU,EAU9C,GAGN,CAAC,EAAY,EAAgB,CAC5B,OAAO,IAAI,EAAa,MAAO,EAAS,CAAU,EAU7C,KAGN,CAAC,EAAY,EAAgB,CAC5B,OAAO,IAAI,EAAa,QAAS,EAAS,CAAU,EAU/C,MAGN,CAAC,EAAY,EAAgB,CAC5B,OAAO,IAAI,EAAa,SAAU,EAAS,CAAU,EAGhD,QAAgD,CAAC,EAAe,CACrE,MAAO,CAAwB,IAAkB,CAC/C,MAAO,CACL,IAAK,CACH,KAAM,IAAI,EAAa,MAAO,EAAY,MAAM,EAChD,OAAQ,IAAI,EAAa,OAAQ,EAAY,QAAQ,CACvD,GACC,KAAK,OAAO,CAAU,KAAM,CAC3B,KAAM,IAAI,EAAa,MAAO,EAAY,MAAM,EAChD,OAAQ,IAAI,EAAa,MAAO,EAAY,QAAQ,EACpD,OAAQ,IAAI,EAAa,SAAU,EAAY,QAAQ,CACzD,CACF,GAWG,IAGN,CAAC,EAAY,EAAgB,CAC5B,OAAO,IAAI,EAAY,MAAO,EAAS,CAAU,EAErD,CC1LO,MAAM,CAAiC,CAInC,EAHT,YAAwB,CAAC,EACjB,QACR,WAAW,CACF,EACP,EAGA,CAJO,gBAKP,IAAK,EACH,KAAK,QAAW,KAAO,CAAC,kBACR,IAAY,WAC5B,KAAK,QAAU,MACV,CACL,IAAO,EAAY,GAAc,EAC3B,EAAqB,IAAI,EACzB,EACJ,EAAmB,GAAY,KAAK,CAAkB,EACxD,KAAK,QAAU,CAAC,IAA6C,CAC3D,OAAO,EAAkB,SAKzB,IAAG,CAAC,EAAiC,CACzC,MAAO,EACJ,KAAK,UAAW,MAAM,KAAK,QAAQ,CAAG,CACzC,EAGF,UAAU,CAAC,EAAuB,CAEhC,OADA,KAAK,YAAc,EACZ,KAEX,CAEO,MAAM,CAAyD,CAM3D,EALT,SACA,YAAwB,CAAC,EACjB,QACL,KAAO,CAAC,GACX,WAAW,CACF,EACP,EAIA,EACA,CANO,gBAOP,UAAW,IAAoB,WAC7B,KAAK,QAAU,EACf,KAAK,SAAW,cAAc,CAAW,CACvC,OAAS,GAAW,CAAC,CACvB,UACS,MAAM,QAAQ,CAAe,EAAG,CACzC,IAAO,EAAY,GAAc,EAC3B,EAAqB,IAAI,EACzB,EACJ,EAAmB,GAAY,KAAK,CAAkB,EACxD,KAAK,QAAU,CAAC,IAA4C,CAC1D,OAAO,EAAkB,CAAG,GAE9B,KAAK,SAAW,cAAc,CAAW,CACvC,OAAS,GAAW,CAAC,CACvB,MAEA,MAAK,SAAW,cAAc,CAAW,CACvC,OAAS,CACX,EACA,KAAK,QAAU,KAAO,CAAC,QAIrB,IAAG,CAAC,EAAiC,CACzC,MAAO,EACJ,KAAK,UAAW,MAAM,KAAK,QAAQ,CAAG,CACzC,EAGF,UAAU,CAAC,EAAuB,CAEhC,OADA,KAAK,YAAc,EACZ,KAEX,CAEO,MAAM,CAAW,CACtB,YAAwB,CAAC,EACzB,OAAqB,CAAC,EAUf,IAAoE,CACzE,EACA,EACA,CACA,OAAO,IAAI,EAAU,EAAU,CAAc,EAsBxC,MAIN,CACC,EACA,EACA,EACA,CACA,OAAO,IAAI,EAAY,EAAU,EAAwB,CAAM,EAEnE,CChLO,IAAM,GAA6B,6BAEnC,MAAM,UAA4B,KAAM,CACtC,KAHiC,6BAIjC,QAGH,CAAE,IAAK,CAAC,EAAG,KAAM,CAAC,CAAE,CAC1B,CCUO,MAAM,UAAwB,CAAoB,CACvD,OAAmC,CAAC,EACpC,WAAW,CAAC,EAAkC,CAC5C,MAAM,kBAAkB,EACxB,KAAK,KAAO,kBACZ,KAAK,OAAS,EACd,KAAK,QAAU,CACb,IAAK,CACH,OAAQ,IACR,KAAM,CACJ,MAAO,CACL,KAAM,mBACN,SAAU,CACZ,CACF,EACA,QAAS,CACP,eAAgB,kBAClB,CACF,EACA,KAAM,CACJ,OAAQ,GACV,CACF,EAEJ,CC1CA,4BAAS,oBCWF,MAAM,CAAO,CAER,EACA,EACA,EAHV,WAAW,CACD,EACA,EACA,EAA+B,CAAC,EACxC,CAHQ,YACA,aACA,eAGV,QAAQ,EAAG,CACT,MAAO,CACL,GAAG,KAAK,QAAQ,KAAK,QACrB,KAAK,QAAQ,OAAS,WAAW,KAAK,QAAQ,SAAW,GACzD,KAAK,QAAQ,SAAW,WAAa,GACrC,KAAK,QAAQ,OAAS,SAAW,GACjC,KAAK,QAAQ,SACT,YAAY,KAAK,QAAQ,WACzB,kBACJ,KAAK,QAAQ,KAAO,QAAQ,KAAK,QAAQ,OAAS,SAClD,KAAK,QAAQ,OAAS,UAAU,KAAK,QAAQ,SAAW,GACxD,KAAK,QAAQ,QACT,WAAW,KAAK,QAAQ,QAAQ,YAAY,IAC5C,GACJ,KAAK,QAAQ,YAAc,cAAgB,EAC7C,EACG,OAAO,CAAC,IAAM,IAAM,EAAE,EACtB,KAAK,IAAI,EAEhB,CDjCA,IAAM,EAAiB,IAAI,EAE3B,MAAM,CAAM,CAOS,EANnB,QAAuB,IAAI,IAC3B,QAAmB,IAAI,QACvB,oBAAsB,IAAI,IAC1B,qBAAuB,IAAI,IAC3B,KAAY,KAEZ,WAAW,CAAQ,EAAkB,CAAlB,WAEnB,SAAS,CAAC,EAAc,EAAe,EAA+B,CAAC,EAAG,CACxE,KAAK,QAAQ,IAAI,IAAI,EAAO,EAAM,EAAO,CAAO,CAAC,EAGnD,UAAU,CAAC,EAAc,EAAe,CACtC,KAAK,QAAQ,IAAI,EAAM,CAAK,EAG9B,OAAO,CAAC,EAAW,CACjB,KAAK,KAAO,EAGd,UAAU,CAAC,EAA4B,CACrC,KAAK,IAAM,EAGb,OAAO,EAAG,CACR,OAAO,KAAK,eACL,KAAK,eACL,KAAK,2BACL,KAAK,4BACL,KAAK,KAEhB,CAEO,MAAM,CAAe,OACnB,SAAQ,EAAG,CAChB,OAAO,EAAe,SAAS,QAG1B,WAAU,CAAC,EAA4B,CAC5C,EAAe,SAAS,EAAE,IAAM,QAG3B,IAAM,CAAC,EAA0B,EAAgB,CACtD,OAAO,EAAe,IAAI,IAAI,EAAM,CAAW,EAAG,CAAE,EAExD,CEjDA,MAAM,CAAS,CACO,EAApB,WAAW,CAAS,EAAS,CAAT,YAEb,GAAsB,CAAC,EAAc,CAC1C,OAAO,KAAK,KAAK,GAGZ,GAAG,CAAC,EAAc,CACvB,OAAO,KAAK,KAAK,KAAS,OAGrB,MAAM,EAAM,CACjB,OAAO,KAAK,KAEhB,CAIA,SAAS,CAAmB,CAAC,EAAc,CACzC,IAAO,EAAQ,GAAQ,EAAK,MAAM,UAAU,GAAK,CAAC,EAClD,IAAK,IAAW,EACd,MAAO,GAET,IAAM,EAAW,SAAS,CAAM,EAChC,OAAQ,OACD,IACH,OAAO,MACJ,KACH,OAAO,EAAW,SACf,KACH,OAAO,EAAW,KAAO,SACtB,KACH,OAAO,EAAW,KAAO,KAAO,SAC7B,KACH,OAAO,EAAW,KAAO,KAAO,KAAO,aAEvC,MAAO,IAMb,SAAS,CAAmB,CAAC,EAAc,CACzC,OAAQ,OACD,QACH,MAAO,YACJ,MACH,MAAO,gBACJ,MACH,MAAO,iBACJ,OACH,MAAO,iBACJ,MACH,MAAO,eACJ,QACH,MAAO,wEACJ,MACH,MAAO,eACJ,OACH,MAAO,8EACJ,MACH,MAAO,sBACJ,OACH,MAAO,2BAEP,OAAO,GAIb,SAAS,CAAQ,CAAC,EAAkB,CAClC,IAAO,EAAM,GAAS,EAAS,MAAM,GAAG,EACxC,OAAQ,OACD,WACH,MAAO,CAAC,IAAe,CACrB,GAAI,aAAiB,KACnB,OAAO,EAAM,KAAO,EAEtB,OAAO,IAAU,MAAQ,IAAU,QAAa,GAAO,OAAS,OAE/D,WACH,MAAO,CAAC,IAAe,CAOrB,MADE,0DACmB,KAAK,CAAK,OAG9B,SACH,MAAO,CAAC,IAAe,CACrB,UAAW,IAAU,SAAU,MAAO,GAEtC,OAAQ,MAAM,CAAK,OAElB,MACH,MAAO,CAAC,IAAe,CACrB,OAAO,GAAO,QAAU,SAAS,CAAK,OAErC,MACH,MAAO,CAAC,IAAe,CACrB,OAAO,GAAO,QAAU,SAAS,CAAK,OAErC,QACH,MAAO,CAAC,IAAe,CAErB,MADmB,6BACD,KAAK,CAAK,OAE3B,OACH,MAAO,CAAC,IAAe,CACrB,OAAO,aAAiB,UAEvB,WACH,MAAO,CAAC,IAAgB,CACtB,GAAI,aAAiB,KAAM,CACzB,IAAM,EAAa,EAAoB,CAAK,EAC5C,OAAO,EAAM,KAAK,WAAW,CAAU,QAIxC,WACH,MAAO,CAAC,IAAgB,CACtB,GAAI,aAAiB,KAAM,CACzB,IAAM,EAAe,EAAoB,CAAK,EAC9C,OAAO,EAAM,MAAQ,YAIzB,MAAO,IAAM,IAgCZ,MAAM,CAGX,CACO,KACA,WACA,QACA,QACA,OACA,OAAc,CAAC,EACf,UACA,OACA,IAAM,EAAe,SAAS,EAErC,WAAW,CACT,EACA,EACA,EACA,EACA,CACA,IAAK,EAAK,CACR,IAAM,EAAO,EAAe,SAAS,EAAE,IACvC,KAAK,OAAS,EAAK,OACnB,KAAK,WAAa,EAAK,WACvB,KAAK,KAAO,EAAK,KACjB,KAAK,UAAY,EAAK,cAEtB,MAAK,OAAS,EACd,KAAK,WAAa,EAClB,KAAK,UAAY,EACjB,KAAK,KAAO,GAAQ,MAGtB,KAAK,QAAU,KAAK,WAAW,QAE/B,IAAM,EAAS,KAAK,WAAW,QAAQ,IAAI,QAAQ,EAC7C,EAAU,IAAI,IACpB,GAAI,EAAQ,CACV,IAAM,EAAc,EAAO,MAAM,GAAG,EACpC,QAAW,KAAK,EAAa,CAC3B,IAAO,EAAK,GAAS,EAAE,MAAM,GAAG,EAChC,EAAQ,IAAI,EAAI,KAAK,EAAG,EAAM,KAAK,CAAC,GAGxC,GAAI,KAAK,WAAW,SAAW,MAAO,CACpC,IAAM,EAAM,IAAI,IAAI,KAAK,WAAW,GAAG,EACjC,EAAM,IAAI,IAChB,QAAY,EAAK,KAAU,EAAI,aAC7B,GAAI,EAAI,IAAI,CAAG,EAAG,CAChB,IAAM,EAAe,EAAI,IAAI,CAAG,EAChC,GAAI,MAAM,QAAQ,CAAY,EAC5B,EAAa,KAAK,CAAK,EACvB,EAAI,IAAI,EAAK,CAAY,MAEzB,GAAI,IAAI,EAAK,CAAC,EAAc,CAAK,CAAC,MAGpC,GAAI,IAAI,EAAK,CAAK,EAGtB,IAAM,EAAS,OAAO,YAAY,EAAI,QAAQ,CAAC,EAC/C,KAAK,OAAS,IAAI,EAAS,CAAW,EAExC,KAAK,QAAU,EAGV,MAAM,CAAC,EAAkB,CAC9B,MAAO,CAAC,OAGI,UAAS,EAAG,CACxB,IAAI,EAAW,IAAI,EAAS,CAAC,CAAM,EACnC,GAAI,KAAK,WAAW,QAAQ,IAAI,cAAc,IAAM,mBAAoB,CACtE,IAAM,EAAO,MAAM,KAAK,WAAW,KAAK,EACxC,EAAW,IAAI,EAAS,CAAS,EAEnC,GACE,KAAK,WAAW,QAAQ,IAAI,cAAc,IAC1C,oCACA,CACA,IAAM,EAAQ,MAAM,KAAK,WAAW,SAAS,EAC7C,EAAW,IAAI,EAAS,CAAS,EAGnC,GACE,KAAK,WAAW,QACb,IAAI,cAAc,GACjB,WAAW,qBAAqB,EACpC,CACA,IAAM,EAAQ,MAAM,KAAK,WAAW,SAAS,EACvC,EAAY,IAAI,IACtB,QAAY,EAAK,KAAU,EAAK,QAAQ,EACtC,GAAI,EAAU,IAAI,CAAG,EAAG,CACtB,IAAM,EAAe,EAAU,IAAI,CAAG,EACtC,GAAI,MAAM,QAAQ,CAAY,EAC5B,EAAa,KAAK,CAAK,EACvB,EAAU,IAAI,EAAK,CAAY,MAE/B,GAAU,IAAI,EAAK,CAAC,EAAc,CAAK,CAAQ,MAGjD,GAAU,IAAI,EAAK,CAAmB,EAG1C,EAAW,IAAI,EAAS,OAAO,YAAY,EAAU,QAAQ,CAAC,CAAM,EAEtE,OAAO,EAGD,aAAa,CAAC,EAAiB,CACrC,IAAM,EAAmC,CAAC,EAC1C,QAAY,EAAK,KAAU,OAAO,QAAQ,KAAK,MAAM,EACnD,QAAY,EAAM,KAAY,OAAO,QAAQ,CAAK,EAAG,CACnD,IAAM,EAAY,EAAS,CAAI,EAE3B,EAAW,EACX,EAAW,GACf,UAAW,IAAY,WACrB,EAAW,EAAQ,EAAM,IAAI,CAAG,CAAC,EACjC,SAAkB,IAAa,gBAE/B,GAAW,EAAU,EAAM,IAAI,CAAG,CAAC,EAGrC,GAAI,EACF,SAGF,IAAK,EAAO,GACV,EAAO,GAAO,CAAC,EAEjB,GAAI,IAAS,WAAY,CACvB,EAAO,GAAO,CAAC,OAAO,CAAQ,CAAC,EAC/B,UAEA,GAAO,GAAK,KAAK,OAAO,CAAQ,CAAC,EAKvC,QAAY,EAAK,KAAU,OAAO,QAChC,KAAK,OAAO,EAAM,OAAO,CAAC,GAAK,CAAC,CAClC,EAAG,CACD,IAAK,EAAO,GACV,EAAO,GAAO,CAAC,EAEjB,EAAO,GAAO,CAAC,GAAI,EAAO,IAAQ,CAAC,EAAI,CAAe,EAGxD,GAAI,OAAO,KAAK,CAAM,EAAE,OAAS,EAC/B,MAAM,IAAI,EAAgB,CAAM,MAEhC,QAAO,OAIE,MAAK,EAAsB,CACtC,OAAO,KAAK,cAAc,MAAM,KAAK,UAAU,CAAC,OAGrC,UAAS,EAInB,CACD,IAAM,EAAQ,MAAM,KAAK,UAAU,EACnC,GAAI,CAEF,OADA,KAAK,cAAc,CAAK,EACjB,CACL,QAAS,GACT,OAAQ,CAAC,EACT,OACF,QACO,EAAP,CACA,KAAM,aAAe,GACnB,MAAM,EAER,MAAO,CACL,QAAS,GACT,OAAQ,EAAI,OACZ,OACF,QAKS,UAAS,CAAC,EAA0B,CAC/C,KAAM,kBAEV,CC/VO,MAAM,CAAW,CACA,EAAtB,WAAW,CAAW,EAAkB,CAAlB,WACtB,GAAG,IAAI,EAAkC,CACvC,MAAO,CAAC,EAEZ,CCPO,SAAS,CAAU,CAAC,EAAmC,CAC5D,IAAM,EAAU,EAAI,QAAQ,IAAI,QAAQ,EACxC,IAAK,EACH,OAAO,IAAI,IAEb,IAAM,EAAW,IAAI,IACf,EAAgB,EAAQ,MAAM,GAAG,EACvC,QAAW,KAAgB,EAAe,CACxC,IAAO,EAAM,GAAS,EAAa,MAAM,GAAG,EAC5C,EAAS,IAAI,EAAK,KAAK,EAAG,CAAK,EAEjC,OAAO,ECPF,MAAM,UAAkC,CAAgB,CAC7D,QAAgE,CAAC,EAEjE,IAAI,EAAG,EACT,CCNO,MAAM,UAA2B,CAAoB,CAClD,MACR,WAAW,CAAC,EAAgB,iBAAkB,CAC5C,MAAM,sBAAsB,EAC5B,KAAK,KAAO,sBACZ,KAAK,MAAQ,EACb,KAAK,QAAU,CACb,IAAK,CACH,OAAQ,IACR,KAAM,CAAE,MAAO,KAAK,KAAM,CAC5B,EACA,KAAM,CAAC,CACT,EAEJ,CAEO,MAAM,UAAqC,CAAoB,CAC5D,MACR,WAAW,CAAC,EAAgB,2BAA4B,CACtD,MAAM,sBAAsB,EAC5B,KAAK,KAAO,sBACZ,KAAK,MAAQ,EACb,KAAK,QAAU,CACb,IAAK,CACH,OAAQ,IACR,KAAM,CAAE,MAAO,KAAK,KAAM,CAC5B,EACA,KAAM,CAAC,CACT,EAEJ,CAEO,MAAM,UAA4B,CAAoB,CAC3D,WAAW,EAAG,CACZ,MAAM,sBAAsB,EAC5B,KAAK,KAAO,sBAGd,QAAU,CACR,IAAK,CACH,OAAQ,IACR,KAAM,CAAE,MAAO,sBAAuB,CACxC,EACA,KAAM,CACJ,OAAQ,IACR,QAAS,CACP,gBACE,0DACF,SAAU,eACZ,CACF,CACF,CACF,CCnDO,MAAM,UAAuC,CAAiB,CAGhD,QAFZ,OAAQ,iCAEf,WAAW,CAAQ,EAAyC,CAC1D,MAAM,EADW,qBAIb,WAAU,CAAC,EAAe,EAAmB,CACjD,IAAM,EAAU,MAAM,KAAK,SAAS,QAAQ,YAAY,CACtD,QACA,WACF,CAAC,EACG,EAAmB,KACvB,GAAI,GAAS,KACX,EAAmB,MAAM,KAAK,SAAS,cAAc,EAAQ,IAAI,EACjE,EAAQ,KAAK,UAAe,EAE9B,OAAO,EAEX,CChBO,MAAM,UAAiC,CAAW,MACjD,IAAG,CAAC,EAAmB,CAC3B,IAAM,EAAsB,EAAe,SAAS,EAC9C,EAAc,EAAoB,IAAI,QAAQ,IAAI,cAAc,EAEtE,IAAK,EACH,MAAM,IAAI,EAGZ,IAAI,EAAO,EAAoB,KAE/B,IAAK,EAAM,CACT,IAAM,EAAU,MAAM,EAA+B,IAAI,EAAE,WACzD,EACA,EAAoB,IAAI,QAAQ,IAAI,YAAY,CAClD,EACA,IAAK,EACH,MAAM,IAAI,EAEZ,EAAO,GAAS,KAChB,EAAoB,QAAQ,CAAI,EAGlC,MAAO,CAAC,EAEZ,CC7BO,MAAM,UAAwB,CAAW,MACxC,IAAG,IAAI,EAA0D,CACrE,IAAO,EAAQ,SAAU,EAAS,YAAa,GAAQ,EACnD,EAAQ,GAAG,cAAkB,IAAS,EAAK,OAAS,EAAI,KAAO,KAAK,EAAK,KAAK,IAAI,IACtF,GAAI,EAAK,SAAW,EAClB,EACE,yEAEJ,GAAI,EAAK,SAAW,GAAK,EAAK,KAAO,SACnC,EACE,yEAEJ,GAAI,EAAK,SAAW,GAAK,EAAK,KAAO,UACnC,EACE,qEAEJ,GAAI,KAAK,IAAI,WAAW,SAAW,MACjC,KAAK,IAAI,IAAI,WAAW,gBAAiB,CAAK,EAGhD,MAAO,CAAC,EAEZ,CCrBO,MAAM,UAAoC,CAAiB,CAG7C,QAFZ,OAAQ,8BAEf,WAAW,CAAQ,EAAqC,CACtD,MAAM,EADW,eAGrB,CCLA,MAAM,UAA+B,CAAoB,CACvD,WAAW,EAAG,CACZ,MAAM,qBAAqB,EAC3B,KAAK,QAAU,CACb,IAAK,CACH,OAAQ,IACR,KAAM,CACJ,MAAO,CACL,QAAS,qBACX,CACF,EACA,QAAS,CACP,eAAgB,kBAClB,CACF,EACA,KAAM,CACJ,MAAO,CACL,QAAS,qBACX,EACA,OAAQ,GACV,CACF,EAEJ,CAEO,MAAM,UAA4B,CAAW,MAC5C,IAAG,CAAC,EAAQ,KAAM,CACtB,IAAM,EAAS,KAAK,IAAI,QAAQ,IAAI,iBAAiB,EAC/C,EAAS,EAA4B,IAAI,EAAE,QAAQ,OAEzD,GADe,EAAO,QAAQ,KAAK,EAAQ,EAAQ,KAAK,IAAI,SAAS,EACxD,EACX,MAAM,IAAI,EAGZ,MAAO,CAAC,EAEZ,CCtCO,MAAM,CAAwB,CACnC,aAAyC,CAAC,EAC1C,WAAW,EAAG,CACZ,IAAM,EAAW,KAAK,SAAS,EAC/B,QAAW,KAAU,EAAU,CAC7B,IAAM,EAAS,IAAI,EACnB,KAAK,aAAa,EAAO,MAAQ,GAI3B,QAAQ,EAA8B,CAC9C,MAAO,CAAC,EAEZ,CCfO,MAAM,CAAS,CACpB,GAAG,CAAC,EAAoB,EAAwC,CAC9D,MAAO,GAEX,CCCO,MAAM,UAA4B,CAAgB,CACvD,WAA2B,CAAC,EAC5B,iBAA6B,CAAC,EAC9B,cAAgB,aAEV,KAAI,EAAG,EAEb,YAAY,CAAC,EAAmB,CAC9B,MAAO,GAGT,IAAI,EAAG,EACT",
|
|
28
|
-
"debugId": "
|
|
28
|
+
"mappings": "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",
|
|
29
|
+
"debugId": "8D360E20478C55EB64756E2164756E21",
|
|
29
30
|
"names": []
|
|
30
31
|
}
|
|
@@ -7,7 +7,9 @@ declare class Store {
|
|
|
7
7
|
prefetchedResources: Map<string, Record<string, any>>;
|
|
8
8
|
prefetchPromiseQueue: Set<() => Promise<any>>;
|
|
9
9
|
user: any;
|
|
10
|
+
csrfHmac: string | null;
|
|
10
11
|
constructor(req: HttpRequest);
|
|
12
|
+
setCSRFHmac(hmac: string): void;
|
|
11
13
|
setCookie(name: string, value: string, options?: CreateCookieOptions): void;
|
|
12
14
|
setHeaders(name: string, value: string): void;
|
|
13
15
|
setUser(user: any): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requestContext.d.ts","sourceRoot":"","sources":["../../http/requestContext.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,KAAK,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAI5C,cAAM,KAAK;
|
|
1
|
+
{"version":3,"file":"requestContext.d.ts","sourceRoot":"","sources":["../../http/requestContext.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,KAAK,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAI5C,cAAM,KAAK;IAQU,GAAG,EAAE,WAAW;IAPnC,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAa;IACjC,OAAO,EAAE,OAAO,CAAiB;IACjC,mBAAmB,mCAA0C;IAC7D,oBAAoB,YAAiB,OAAO,CAAC,GAAG,CAAC,EAAI;IACrD,IAAI,EAAE,GAAG,CAAQ;IACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAQ;gBAEZ,GAAG,EAAE,WAAW;IAEnC,WAAW,CAAC,IAAI,EAAE,MAAM;IAIxB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,mBAAwB;IAIxE,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAItC,OAAO,CAAC,IAAI,EAAE,GAAG;IAIjB,UAAU,CAAC,GAAG,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC;IAIrC,OAAO;CAOR;AAED,qBAAa,cAAc;IACzB,MAAM,CAAC,QAAQ;IAIf,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC;IAI5C,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC;CAGxD"}
|
package/dist/kernel/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{e as Z}from"../chunk-
|
|
2
|
+
import{e as Z}from"../chunk-ch0p7trm.js";import{f as K,g as N,h as U,i as W,k as q,l as X,m as Y}from"../facades/index.js";import{A as J,B as T,w as D,z as H}from"../http/index.js";import{C as $}from"../chunk-3pfpq2xc.js";import"../chunk-9877dbvm.js";import"../chunk-83snmykp.js";import{F as f,G as O,H as b,I as y,J as B,K as E,L as F,M}from"../services/index.js";import"../chunk-hhbd5qn0.js";import"../chunk-1tpqxqmt.js";import"../chunk-n34j31ss.js";import"../chunk-45df2pgm.js";import"../chunk-ac7dhq1c.js";import"../chunk-srsjrh5y.js";import"../chunk-9em80ypy.js";import"../chunk-740bx4ar.js";import{Ob as _}from"../chunk-0s3yapam.js";import"../chunk-7v15p9nn.js";import"../chunk-t34vnmky.js";import{Sb as G}from"../chunk-ewp71f92.js";import"../chunk-hnyegpzf.js";import"../chunk-rr5j1686.js";class V{emailServiceProvider=y;authenticationServiceProvider=q;middlewareServiceProvider=D;i18nServiceProvider=T;fileStorageServiceProvider=f;apiRouterServiceProvider=O;viewRouterServiceProvider=E;rateLimiterServiceProvider=b;broadcastingsServiceProvider=B;loggingServiceProvider=F;queueServiceProvider=M;services={};boot(){this.services={[$._name]:new $(new this.emailServiceProvider),[H._name]:new H(new this.authenticationServiceProvider),[X._name]:new X(new this.middlewareServiceProvider),[N._name]:new N(new this.i18nServiceProvider),[U._name]:new U(new this.fileStorageServiceProvider),[Y._name]:new Y(new this.apiRouterServiceProvider),[Z._name]:new Z(new this.viewRouterServiceProvider),[J._name]:new J(new this.rateLimiterServiceProvider),[K._name]:new K(new this.broadcastingsServiceProvider),[W._name]:new W(new this.loggingServiceProvider),[_._name]:new _(new this.queueServiceProvider)}}run(j){let z=this.services;return G.run(z,j)}destroy(){for(let j of Object.keys(this.services))delete this.services[j];G.disable()}}class x{j;constructor(j){this.prisma=j}async findUserByVerificationToken(j){return await this.prisma.user.findFirst({where:{verificationToken:j}})}async verifyUser(j){return await this.prisma.user.update({where:{id:j},data:{emailVerifiedAt:new Date}})}async createSession(j){return await this.prisma.session.create({data:j,include:{user:!0}})}async createUser(j){return await this.prisma.user.create({data:j})}async deleteSession(j){return await this.prisma.session.deleteMany({where:{token:j.token}})}async findUserByEmailAddress(j,z){if(z)return await this.prisma.user.findUnique({where:{email:j,emailVerifiedAt:{not:null}}});return await this.prisma.user.findUnique({where:{email:j}})}async findSession(j){if(!j.token)return null;try{return await this.prisma.session.findUnique({where:{token:j.token,userAgent:j.userAgent},include:{user:{select:{password:!1,id:!0,email:!0,globalRole:!0,name:!0,publicId:!0,accounts:{select:{id:!0,publicId:!0,organization:!0,organizationRole:!0}}}}}})}catch(z){return console.log(z),null}}async updateSession(j){return await this.prisma.session.update({where:{token:j.token},data:{expiresAt:j.expiresAt},include:{user:{select:{password:!1,email:!0,globalRole:!0,name:!0,publicId:!0,accounts:{select:{id:!0,publicId:!0,organization:!0,organizationRole:!0}},organization:!0}}}})}async updateUserPassword(j){return await this.prisma.user.update({where:{id:j.id},data:{password:j.password}})}async createPasswordResetToken(j){return await this.prisma.passwordResetToken.create({data:{user:{connect:{id:j.user.id}},token:j.token}})}async findPasswordResetToken(j){let{token:z}=j;return await this.prisma.passwordResetToken.findUnique({where:{token:z},include:{user:!0}})}async deleteAllUserSessions(j){return await this.prisma.session.deleteMany({where:{userId:j}})}async deletePasswordResetToken(j){let{token:z}=j;return await this.prisma.passwordResetToken.delete({where:{token:z}})}async createAccount(j){return await this.prisma.account.create({data:{organizationId:j.organizationId,organizationRole:j.organizationRole,userId:j.userId}})}async deleteInvitationById(j){return await this.prisma.organizationInvitation.delete({where:{publicId:j}})}async findInvitation(j,z){return await this.prisma.organizationInvitation.findFirst({where:{publicId:j,email:z}})}}export{x as PrismaAuthenticationAdapter,V as Kernel,q as AuthenticationServiceProvider};
|
|
3
3
|
|
|
4
|
-
//# debugId=
|
|
4
|
+
//# debugId=400DA86F01763B1D64756E2164756E21
|
package/dist/kernel/index.js.map
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"import { AuthenticationServiceProvider } from \"../auth/AuthenticationServiceProvider\";\nimport { AuthenticationServiceContainer } from \"../auth/AuthenticationServiceContainer\";\nimport { kernelContext } from \"./context\";\nimport { MiddlewareServiceProvider } from \"../http/MiddlewareServiceProvider\";\nimport { I18nServiceProvider } from \"../http/I18nServiceProvider\";\nimport { I18nServiceContainer } from \"../http/I18nServiceContainer\";\nimport { FileStorageServiceContainer } from \"../services/file-storage/FileStorageServiceContainer\";\nimport { FileStorageServiceProvider } from \"../services/file-storage/FileStorageServiceProvider\";\nimport { ApiRouterServiceContainer } from \"../services/router/ApiRouterServiceContainer\";\nimport { ApiRouterServiceProvider } from \"../services/router/ApiRouterServiceProvider\";\nimport { MiddlewareServiceContainer } from \"../services/middleware/MiddlewareServiceContainer\";\nimport { RateLimiterServiceContainer } from \"../services/rate-limiter/RateLimiterServiceContainer\";\nimport { QueueServiceProvider, RateLimiterServiceProvider } from \"../services\";\nimport { EmailServiceProvider } from \"../services/email/EmailServiceProvider\";\nimport { EmailServiceContainer } from \"../services/email/EmailServiceContainer\";\nimport { BroadcastingServiceContainer } from \"../services/pubsub/BroadcastingServiceContainer\";\nimport { BroadcastingServiceProvider } from \"../services/pubsub/BroadcastingServiceProvider\";\nimport { ViewRouterServiceContainer } from \"../services/router/ViewRouterServiceContainer\";\nimport { ViewRouterServiceProvider } from \"../services/router/ViewRouterServiceProvider\";\nimport { ServiceContainer } from \"../services/ServiceContainer\";\nimport { LoggingServiceContainer } from \"../services/logging/LoggingServiceContainer\";\nimport { LoggingServiceProvider } from \"../services/logging/LoggingServiceProvider\";\nimport { QueueServiceContainer } from \"../services/queue/QueueServiceContainer\";\n\nexport class Kernel {\n protected emailServiceProvider = EmailServiceProvider;\n protected authenticationServiceProvider = AuthenticationServiceProvider;\n protected middlewareServiceProvider = MiddlewareServiceProvider;\n protected i18nServiceProvider = I18nServiceProvider;\n protected fileStorageServiceProvider = FileStorageServiceProvider;\n protected apiRouterServiceProvider = ApiRouterServiceProvider;\n protected viewRouterServiceProvider = ViewRouterServiceProvider;\n protected rateLimiterServiceProvider = RateLimiterServiceProvider;\n protected broadcastingsServiceProvider = BroadcastingServiceProvider;\n protected loggingServiceProvider = LoggingServiceProvider;\n protected queueServiceProvider = QueueServiceProvider;\n\n services: Record<string, ServiceContainer> = {};\n\n boot() {\n this.services = {\n [EmailServiceContainer._name]: new EmailServiceContainer(\n new this.emailServiceProvider(),\n ),\n [AuthenticationServiceContainer._name]:\n new AuthenticationServiceContainer(\n new this.authenticationServiceProvider(),\n ),\n [MiddlewareServiceContainer._name]: new MiddlewareServiceContainer(\n new this.middlewareServiceProvider(),\n ),\n [I18nServiceContainer._name]: new I18nServiceContainer(\n new this.i18nServiceProvider(),\n ),\n [FileStorageServiceContainer._name]: new FileStorageServiceContainer(\n new this.fileStorageServiceProvider(),\n ),\n [ApiRouterServiceContainer._name]: new ApiRouterServiceContainer(\n new this.apiRouterServiceProvider(),\n ),\n [ViewRouterServiceContainer._name]: new ViewRouterServiceContainer(\n new this.viewRouterServiceProvider(),\n ),\n [RateLimiterServiceContainer._name]: new RateLimiterServiceContainer(\n new this.rateLimiterServiceProvider(),\n ),\n [BroadcastingServiceContainer._name]: new BroadcastingServiceContainer(\n new this.broadcastingsServiceProvider(),\n ),\n [LoggingServiceContainer._name]: new LoggingServiceContainer(\n new this.loggingServiceProvider(),\n ),\n [QueueServiceContainer._name]: new QueueServiceContainer(\n new this.queueServiceProvider(),\n ),\n };\n }\n\n run<T>(cb: () => T) {\n const services = this.services;\n return kernelContext.run(services, cb);\n }\n\n destroy() {\n for (const key of Object.keys(this.services)) {\n delete this.services[key];\n }\n\n kernelContext.disable();\n }\n}\n",
|
|
6
6
|
"import type {\n User,\n CreateSessionArgs,\n DeleteSessionArgs,\n SessionWithUser,\n CreateUserArgs,\n FindSessionArgs,\n UpdateSessionArgs,\n IAuthenticationAdapter,\n CreatePasswordResetTokenArgs,\n PasswordResetToken,\n FindPasswordResetTokenArgs,\n DeletePasswordResetTokenArgs,\n CreateAccountArgs,\n} from \"./types\";\n\nexport class PrismaAuthenticationAdapter implements IAuthenticationAdapter {\n constructor(private prisma: any) {}\n\n async findUserByVerificationToken(token: string): Promise<User | null> {\n return await this.prisma.user.findFirst({\n where: { verificationToken: token },\n });\n }\n\n async verifyUser(userId: number): Promise<User> {\n return await this.prisma.user.update({\n where: { id: userId },\n data: { emailVerifiedAt: new Date() },\n });\n }\n\n async createSession(args: CreateSessionArgs): Promise<SessionWithUser> {\n return await this.prisma.session.create({\n data: args,\n include: { user: true },\n });\n }\n\n async createUser(args: CreateUserArgs): Promise<User> {\n return await this.prisma.user.create({ data: args });\n }\n\n async deleteSession(args: DeleteSessionArgs): Promise<void> {\n return await this.prisma.session.deleteMany({\n where: { token: args.token },\n });\n }\n\n async findUserByEmailAddress(email: string, verify: boolean): Promise<User> {\n if (verify) {\n return await this.prisma.user.findUnique({\n where: { email, emailVerifiedAt: { not: null } },\n });\n }\n\n return await this.prisma.user.findUnique({ where: { email } });\n }\n\n // TODO: extend the session until absolute expiration\n async findSession(args: FindSessionArgs): Promise<SessionWithUser | null> {\n if (!args.token) return null;\n try {\n const session = await this.prisma.session.findUnique({\n where: {\n token: args.token,\n userAgent:\n process.env.NODE_ENV === \"development\" ? \"local\" : args.userAgent,\n },\n include: {\n user: {\n select: {\n password: false,\n id: true,\n email: true,\n globalRole: true,\n name: true,\n publicId: true,\n accounts: {\n select: {\n id: true,\n publicId: true,\n organization: true,\n organizationRole: true,\n },\n },\n },\n },\n },\n });\n\n return session;\n } catch (err) {\n console.log(err);\n return null;\n }\n }\n\n async updateSession(\n args: UpdateSessionArgs,\n ): Promise<SessionWithUser | null> {\n return await this.prisma.session.update({\n where: { token: args.token },\n data: { expiresAt: args.expiresAt },\n include: {\n user: {\n select: {\n password: false,\n email: true,\n globalRole: true,\n name: true,\n publicId: true,\n accounts: {\n select: {\n id: true,\n publicId: true,\n organization: true,\n organizationRole: true,\n },\n },\n organization: true,\n },\n },\n },\n });\n }\n\n async updateUserPassword(args: {\n id: number;\n password: string;\n }): Promise<User> {\n return await this.prisma.user.update({\n where: { id: args.id },\n data: { password: args.password },\n });\n }\n\n async createPasswordResetToken(args: CreatePasswordResetTokenArgs) {\n return await this.prisma.passwordResetToken.create({\n data: {\n user: { connect: { id: args.user.id } },\n token: args.token,\n },\n });\n }\n\n async findPasswordResetToken(\n args: FindPasswordResetTokenArgs,\n ): Promise<PasswordResetToken | null> {\n const { token } = args;\n return await this.prisma.passwordResetToken.findUnique({\n where: { token },\n include: { user: true },\n });\n }\n\n async deleteAllUserSessions(userId: number) {\n return await this.prisma.session.deleteMany({ where: { userId } });\n }\n\n async deletePasswordResetToken(args: DeletePasswordResetTokenArgs) {\n const { token } = args;\n return await this.prisma.passwordResetToken.delete({ where: { token } });\n }\n\n async createAccount(args: CreateAccountArgs) {\n return await this.prisma.account.create({\n data: {\n organizationId: args.organizationId,\n organizationRole: args.organizationRole,\n userId: args.userId,\n },\n });\n }\n\n async deleteInvitationById(invitationId: string) {\n return await this.prisma.organizationInvitation.delete({\n where: { publicId: invitationId },\n });\n }\n\n async findInvitation(invitationId: string, email: string) {\n return await this.prisma.organizationInvitation.findFirst({\n where: { publicId: invitationId, email },\n });\n }\n}\n"
|
|
7
7
|
],
|
|
8
|
-
"mappings": ";
|
|
9
|
-
"debugId": "
|
|
8
|
+
"mappings": ";s4BAwBO,AAAM,RAAO,JACR,gBAAuB,HACvB,yBAAgC,HAChC,qBAA4B,HAC5B,eAAsB,HACtB,sBAA6B,HAC7B,oBAA2B,HAC3B,qBAA4B,HAC5B,sBAA6B,HAC7B,wBAA+B,EAC/B,uBAAyB,EACzB,qBAAuB,EAEjC,SAA6C,CAAC,EAE9C,IAAI,EAAG,CACL,KAAK,SAAW,EACb,EAAsB,OAAQ,IAAI,EACjC,IAAI,KAAK,oBACX,GACC,EAA+B,OAC9B,IAAI,EACF,IAAI,KAAK,6BACX,GACD,EAA2B,OAAQ,IAAI,EACtC,IAAI,KAAK,yBACX,GACC,EAAqB,OAAQ,IAAI,EAChC,IAAI,KAAK,mBACX,GACC,EAA4B,OAAQ,IAAI,EACvC,IAAI,KAAK,0BACX,GACC,EAA0B,OAAQ,IAAI,EACrC,IAAI,KAAK,wBACX,GACC,EAA2B,OAAQ,IAAI,EACtC,IAAI,KAAK,yBACX,GACC,EAA4B,OAAQ,IAAI,EACvC,IAAI,KAAK,0BACX,GACC,EAA6B,OAAQ,IAAI,EACxC,IAAI,KAAK,4BACX,GACC,EAAwB,OAAQ,IAAI,EACnC,IAAI,KAAK,sBACX,GACC,EAAsB,OAAQ,IAAI,EACjC,IAAI,KAAK,oBACX,CACF,EAGF,GAAM,CAAC,EAAa,CAClB,IAAM,EAAW,KAAK,SACtB,OAAO,EAAc,IAAI,EAAU,CAAE,EAGvC,OAAO,EAAG,CACR,QAAW,KAAO,OAAO,KAAK,KAAK,QAAQ,EACzC,OAAO,KAAK,SAAS,GAGvB,EAAc,QAAQ,EAE1B,CC1EO,MAAM,CAA8D,CACrD,EAApB,WAAW,CAAS,EAAa,CAAb,mBAEd,4BAA2B,CAAC,EAAqC,CACrE,OAAO,MAAM,KAAK,OAAO,KAAK,UAAU,CACtC,MAAO,CAAE,kBAAmB,CAAM,CACpC,CAAC,OAGG,WAAU,CAAC,EAA+B,CAC9C,OAAO,MAAM,KAAK,OAAO,KAAK,OAAO,CACnC,MAAO,CAAE,GAAI,CAAO,EACpB,KAAM,CAAE,gBAAiB,IAAI,IAAO,CACtC,CAAC,OAGG,cAAa,CAAC,EAAmD,CACrE,OAAO,MAAM,KAAK,OAAO,QAAQ,OAAO,CACtC,KAAM,EACN,QAAS,CAAE,KAAM,EAAK,CACxB,CAAC,OAGG,WAAU,CAAC,EAAqC,CACpD,OAAO,MAAM,KAAK,OAAO,KAAK,OAAO,CAAE,KAAM,CAAK,CAAC,OAG/C,cAAa,CAAC,EAAwC,CAC1D,OAAO,MAAM,KAAK,OAAO,QAAQ,WAAW,CAC1C,MAAO,CAAE,MAAO,EAAK,KAAM,CAC7B,CAAC,OAGG,uBAAsB,CAAC,EAAe,EAAgC,CAC1E,GAAI,EACF,OAAO,MAAM,KAAK,OAAO,KAAK,WAAW,CACvC,MAAO,CAAE,QAAO,gBAAiB,CAAE,IAAK,IAAK,CAAE,CACjD,CAAC,EAGH,OAAO,MAAM,KAAK,OAAO,KAAK,WAAW,CAAE,MAAO,CAAE,OAAM,CAAE,CAAC,OAIzD,YAAW,CAAC,EAAwD,CACxE,IAAK,EAAK,MAAO,OAAO,KACxB,GAAI,CA6BF,OA5BgB,MAAM,KAAK,OAAO,QAAQ,WAAW,CACnD,MAAO,CACL,MAAO,EAAK,MACZ,UACqD,EAAK,SAC5D,EACA,QAAS,CACP,KAAM,CACJ,OAAQ,CACN,SAAU,GACV,GAAI,GACJ,MAAO,GACP,WAAY,GACZ,KAAM,GACN,SAAU,GACV,SAAU,CACR,OAAQ,CACN,GAAI,GACJ,SAAU,GACV,aAAc,GACd,iBAAkB,EACpB,CACF,CACF,CACF,CACF,CACF,CAAC,QAGM,EAAP,CAEA,OADA,QAAQ,IAAI,CAAG,EACR,WAIL,cAAa,CACjB,EACiC,CACjC,OAAO,MAAM,KAAK,OAAO,QAAQ,OAAO,CACtC,MAAO,CAAE,MAAO,EAAK,KAAM,EAC3B,KAAM,CAAE,UAAW,EAAK,SAAU,EAClC,QAAS,CACP,KAAM,CACJ,OAAQ,CACN,SAAU,GACV,MAAO,GACP,WAAY,GACZ,KAAM,GACN,SAAU,GACV,SAAU,CACR,OAAQ,CACN,GAAI,GACJ,SAAU,GACV,aAAc,GACd,iBAAkB,EACpB,CACF,EACA,aAAc,EAChB,CACF,CACF,CACF,CAAC,OAGG,mBAAkB,CAAC,EAGP,CAChB,OAAO,MAAM,KAAK,OAAO,KAAK,OAAO,CACnC,MAAO,CAAE,GAAI,EAAK,EAAG,EACrB,KAAM,CAAE,SAAU,EAAK,QAAS,CAClC,CAAC,OAGG,yBAAwB,CAAC,EAAoC,CACjE,OAAO,MAAM,KAAK,OAAO,mBAAmB,OAAO,CACjD,KAAM,CACJ,KAAM,CAAE,QAAS,CAAE,GAAI,EAAK,KAAK,EAAG,CAAE,EACtC,MAAO,EAAK,KACd,CACF,CAAC,OAGG,uBAAsB,CAC1B,EACoC,CACpC,IAAQ,SAAU,EAClB,OAAO,MAAM,KAAK,OAAO,mBAAmB,WAAW,CACrD,MAAO,CAAE,OAAM,EACf,QAAS,CAAE,KAAM,EAAK,CACxB,CAAC,OAGG,sBAAqB,CAAC,EAAgB,CAC1C,OAAO,MAAM,KAAK,OAAO,QAAQ,WAAW,CAAE,MAAO,CAAE,QAAO,CAAE,CAAC,OAG7D,yBAAwB,CAAC,EAAoC,CACjE,IAAQ,SAAU,EAClB,OAAO,MAAM,KAAK,OAAO,mBAAmB,OAAO,CAAE,MAAO,CAAE,OAAM,CAAE,CAAC,OAGnE,cAAa,CAAC,EAAyB,CAC3C,OAAO,MAAM,KAAK,OAAO,QAAQ,OAAO,CACtC,KAAM,CACJ,eAAgB,EAAK,eACrB,iBAAkB,EAAK,iBACvB,OAAQ,EAAK,MACf,CACF,CAAC,OAGG,qBAAoB,CAAC,EAAsB,CAC/C,OAAO,MAAM,KAAK,OAAO,uBAAuB,OAAO,CACrD,MAAO,CAAE,SAAU,CAAa,CAClC,CAAC,OAGG,eAAc,CAAC,EAAsB,EAAe,CACxD,OAAO,MAAM,KAAK,OAAO,uBAAuB,UAAU,CACxD,MAAO,CAAE,SAAU,EAAc,OAAM,CACzC,CAAC,EAEL",
|
|
9
|
+
"debugId": "400DA86F01763B1D64756E2164756E21",
|
|
10
10
|
"names": []
|
|
11
11
|
}
|
package/dist/server/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{
|
|
2
|
+
import{D as C}from"../chunk-9877dbvm.js";import{E as F}from"../chunk-83snmykp.js";import{Vb as L}from"../chunk-rr5j1686.js";import{join as B}from"path";import{jsx as j}from"react/jsx-runtime";function T(c){return c.map((e,l)=>{if(e.isDev)return j("style",{type:"text/css","data-vite-dev-id":e.id,children:e.content},e.id);else return j("style",{id:e?.id,type:"text/css",children:e.content},l)})}var O=L(F(),1);async function D(c){let e=new URL(c.url),l=e.searchParams.get("url"),u=Number(e.searchParams.get("w")),d=Number(e.searchParams.get("h")),y=e.searchParams.get("fit")??"cover",g=Number(e.searchParams.get("q"));if(!l)return new Response(JSON.stringify({error:"url query parameter is required"}),{headers:{"Content-Type":"application/json"},status:404});let s=`${l.startsWith("http")?"":`http://localhost:${process.env.PORT||5173}`}${l}`,o=await fetch(s);if(!o.ok)return new Response(JSON.stringify({error:"Image not found",info:s}),{headers:{"Content-Type":"application/json"},status:404});let r=Buffer.from(await o.arrayBuffer()),i=await O.default(r).resize(u>0?u:void 0,d>0?d:void 0,{fit:y}).webp({quality:g>0?g:80,force:!0}).toBuffer();return o.headers.delete("Content-Type"),o.headers.delete("Content-Length"),new Response(i,{headers:{"Content-Type":"image/webp","Content-Length":`${i.byteLength}`,...o.headers.toJSON()}})}function A(c){return`
|
|
3
3
|
<!DOCTYPE html>
|
|
4
4
|
<html lang="en">
|
|
5
5
|
<head>
|
|
@@ -21,16 +21,16 @@ import{C as S}from"../chunk-h64zrvbm.js";import{D as E}from"../chunk-jtv3vbyw.js
|
|
|
21
21
|
</head>
|
|
22
22
|
<body>
|
|
23
23
|
<h1>Error</h1>
|
|
24
|
-
<pre>${JSON.stringify(
|
|
24
|
+
<pre>${JSON.stringify(c,null,2)}</pre>
|
|
25
25
|
<script type="module" src="/refresh.js"></script>
|
|
26
26
|
</body>
|
|
27
27
|
</html>
|
|
28
|
-
`}var _=process.cwd(),
|
|
28
|
+
`}var _=process.cwd(),b=B(_,"app");async function U(){let c=process.cwd(),e=await(await import("vite")).createServer({root:c,logLevel:"error",server:{watch:{usePolling:!0,interval:100,ignored:["**/storage/**"]},hmr:{clientPort:5174}},appType:"custom",resolve:{alias:{"@/app":b}}});process.env.ROOT_DIR=_,process.env.APP_DIR=b;async function l(s){let{pathname:o}=new URL(s.url);if(o.startsWith("/refresh.js"))return new Response(`
|
|
29
29
|
import RefreshRuntime from "http://localhost:5173/@react-refresh";
|
|
30
30
|
RefreshRuntime.injectIntoGlobalHook(window);
|
|
31
31
|
window.\$RefreshReg\$ = () => {};
|
|
32
32
|
window.\$RefreshSig\$ = () => (type) => type;
|
|
33
33
|
window.__vite_plugin_react_preamble_installed__ = true;
|
|
34
|
-
`,{headers:{"Content-Type":"application/javascript"}});try{let
|
|
34
|
+
`,{headers:{"Content-Type":"application/javascript"}});try{let r=await fetch(`http://localhost:5174${o}`);if(r.ok)return r}catch(r){console.log(r)}}async function u(){try{return(await e.ssrLoadModule(B(b,"bootstrap.ts"),{fixStacktrace:!0})).app}catch(s){e.ws.send({type:"error",err:s}),console.error(s)}}async function d(s){let o=s.fetch.bind(s);return{fetch:async(r,i)=>{if(i.upgrade(r,{data:{headers:r.headers}}))return;if(!r.headers.get("x-forwarded-for")){let a=i.requestIP(r);r.headers.set("x-forwarded-for",a.address)}let{pathname:t}=new URL(r.url),n=await l(r);if(n instanceof Response)return n;if(t.startsWith("/__gemi/image"))return await D(r);try{let a=await o(r);if(a instanceof Response)return a;else{let f={},P=(m,$)=>`"${m}": () => import("${$}")`,p=[];for(let m of["404",...s.getFlatComponentTree.call(s)]){let $=`${process.env.APP_DIR}`,x=await e.ssrLoadModule(`${$}/views/${m}.tsx`);f[m]=x.default,p.push(P(m,`${$}/views/${m}.tsx`))}let v=`{${p.join(",")}}`,{default:h}=await e.ssrLoadModule(`${b}/app.css`),R=[];return R.push({isDev:!0,id:`${b}/app.css`,content:h}),await a({getStyles:()=>T(R),bootstrapModules:["/refresh.js","/app/client.tsx","http://localhost:5173/@vite/client"],viewImportMap:f,loaders:v,cssManifest:{}})}}catch(a){if(console.error(a),t.startsWith("/api"))return new Response(JSON.stringify({error:a.message}),{status:500,headers:{"Content-Type":"application/json"}});return new Response(A(a),{headers:{"Content-Type":"text/html"}})}},port:process.env.PORT||5173,websocket:s.websocket}}await e.listen(5174);let y=await u(),g=await d(y),w=Bun.serve(g);return y.onPublish((s,o,r)=>{w.publish(s,o,r)}),console.log(`Server started on http://localhost:${process.env.PORT||5173}`),e.watcher.on("change",async(s)=>{let o=s.replace(_,"");if(o.startsWith("/logs"))return;if(o.startsWith("/app/views")){console.log(`[vite] ${o} changed. \uD83C\uDF5C Hot reloading...`);return}console.log(`[vite] ${o} changed. Reloading...`);let r=e.moduleGraph.getModulesByFile(s)??[];for(let i of Array.from(r))e.moduleGraph.invalidateModule(i);try{let i=await u(),t=await d(i);i.onPublish((n,a,f)=>{w.publish(n,a,f)}),w.reload(t),e.ws.send({type:"custom",event:"http-reload"})}catch(i){console.log("Error on server reload"),console.log(i),e.ws.send({type:"error",err:i})}}),w}import{join as k}from"path";function N(c){let e=c.toString(),l=new Bun.CryptoHasher("sha1");return l.update(e),l.digest("hex")}if(!globalThis.URLPattern)globalThis.URLPattern=C;var I=process.cwd(),M=k(I,"app"),S=k(I,"dist");async function W(){let{app:c}=await import(`${S}/server/bootstrap.mjs`),e=await import(`${S}/client/.vite/manifest.json`),l=await import(`${S}/server/.vite/manifest.json`);process.env.ROOT_DIR=I,process.env.APP_DIR=M,process.env.DIST_DIR=S;let u={},d={},y=(t,n)=>`"${t}": () => import("${n}")`,g=[];for(let t of["404",...c.getFlatComponentTree.call(c)]){let n=l[`app/views/${t}.tsx`];if(!n?.file){console.log(`Server file not found for ${t}`),console.log(n);let P=Object.keys(l),p=`app/views/${t}.tsx`;console.log(`${p} not found in server manifest`),console.log(P)}let a=await import(`${process.env.DIST_DIR}/server/${n?.file}`);u[t]=a.default;let f=e[`app/views/${t}.tsx`];if(f?.css&&f?.css.length>0)d[t]=f?.css;if(f)g.push(y(t,`/${f?.file}`))}let w=`{${g.join(",")}}`,o=await Bun.file(`${S}/client/${e["app/client.tsx"].css}`).text();async function r(t){let{pathname:n}=new URL(t.url);if(n.startsWith("/__gemi/image"))return await D(t);let a=new C({pathname:"/*.:filetype(png|txt|js|css|jpg|svg|jpeg|ico|ttf)"}),f=n.startsWith("/api");if(a.test({pathname:n})&&!f){let p=new URL(t.url),v=t.url.replace(p.origin,"").split("?")[0],h=Bun.file(`dist/client${v.replace("/assets/assets","/assets")}`);if(!h)return new Response("Not found",{status:404});let R=N(h.lastModified);return new Response(h.stream(),{headers:{"Content-Type":h.type,"Cache-Control":"public, max-age=31536000, must-revalidate","Content-Length":String(h.size),ETag:R}})}let P=c.fetch.bind(c);try{let p=await P(t);if(p instanceof Response)return p;else{let v=[];return v.push({content:o}),await p({getStyles:async(R)=>{for(let m of R){let $=e[`app/views/${m}.tsx`];for(let x of $?.css??[]){let E=Bun.file(`${process.env.DIST_DIR}/client/${x}`);v.push({id:x,content:await E.text()})}}return T(v)},bootstrapModules:[`/${e["app/client.tsx"].file}`],loaders:w,viewImportMap:u,cssManifest:d})}}catch(p){if(console.error(p),n.startsWith("/api"))return new Response(JSON.stringify({error:p.message}),{status:500,headers:{"Content-Type":"application/json"}});return new Response(p.stack,{status:500})}}let i=Bun.serve({fetch:async(t,n)=>{if(!t.headers.get("x-forwarded-for")){let a=n.requestIP(t);t.headers.set("x-forwarded-for",a.address)}return await r(t)},port:process.env.PORT||5173});return console.log("Production server running on",i.url.href),i}export{W as startProdServer,U as startDevServer};
|
|
35
35
|
|
|
36
|
-
//# debugId=
|
|
36
|
+
//# debugId=BE91FD614E013E9E64756E2164756E21
|