@sx3/ultra 0.0.1 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/LICENSE +20 -20
  2. package/README.md +512 -512
  3. package/dist/auth.d.mts +16 -16
  4. package/dist/auth.mjs +1 -84
  5. package/dist/client.d.mts +9 -9
  6. package/dist/client.mjs +1 -131
  7. package/dist/context-BAOh_2qI.mjs +1 -0
  8. package/dist/context.d.mts +1 -1
  9. package/dist/context.mjs +1 -10
  10. package/dist/cors.d.mts +3 -3
  11. package/dist/cors.mjs +1 -58
  12. package/dist/crypto-DrpstqPB.mjs +1 -0
  13. package/dist/crypto.mjs +1 -44
  14. package/dist/error-CvEWFOYT.mjs +1 -0
  15. package/dist/error.mjs +1 -3
  16. package/dist/{http-BqWCMASL.d.mts → http-CD8MvQOV.d.mts} +2 -2
  17. package/dist/http.d.mts +2 -2
  18. package/dist/http.mjs +1 -1
  19. package/dist/{middleware-COKreBGP.d.mts → middleware-DVREjjkO.d.mts} +4 -4
  20. package/dist/middleware.d.mts +3 -3
  21. package/dist/middleware.mjs +1 -1
  22. package/dist/procedure-BekIoOQX.mjs +1 -0
  23. package/dist/procedure.d.mts +3 -3
  24. package/dist/procedure.mjs +1 -3
  25. package/dist/response-D9PTLpdq.mjs +1 -0
  26. package/dist/response.mjs +1 -3
  27. package/dist/rpc-D9H6IkRD.mjs +1 -0
  28. package/dist/{rpc-Ch2UXReT.d.mts → rpc-DADpT17P.d.mts} +1 -1
  29. package/dist/rpc.d.mts +1 -1
  30. package/dist/rpc.mjs +1 -3
  31. package/dist/session.d.mts +4 -4
  32. package/dist/session.mjs +1 -181
  33. package/dist/test.d.mts +1 -0
  34. package/dist/test.mjs +1 -0
  35. package/dist/types.d.mts +1 -1
  36. package/dist/types.mjs +1 -1
  37. package/dist/ultra.d.mts +7 -7
  38. package/dist/ultra.mjs +1 -273
  39. package/dist/validation-s1s8P8HO.mjs +1 -0
  40. package/dist/validation.d.mts +1 -1
  41. package/dist/validation.mjs +1 -3
  42. package/package.json +10 -3
  43. package/dist/error-CII1zMOR.mjs +0 -45
  44. package/dist/procedure-BN1rLLRX.mjs +0 -86
  45. package/dist/response-CNhIkAYG.mjs +0 -59
  46. package/dist/rpc-_rBI0z-9.mjs +0 -7
  47. package/dist/validation-Cop5Wvlr.mjs +0 -12
  48. /package/dist/{context-ChCsZh7S.d.mts → context-DNamt_XE.d.mts} +0 -0
  49. /package/dist/{types-Cn69QrjS.d.mts → types-CzIiTHWF.d.mts} +0 -0
  50. /package/dist/{validation-CkRfxQJ_.d.mts → validation-Dfgqsq2f.d.mts} +0 -0
package/dist/auth.d.mts CHANGED
@@ -1,7 +1,7 @@
1
- import { n as DefaultSocketData, t as BaseContext } from "./context-ChCsZh7S.mjs";
2
- import { o as Promisable, r as JSONObject } from "./types-Cn69QrjS.mjs";
3
- import "./http-BqWCMASL.mjs";
4
- import { t as Middleware } from "./middleware-COKreBGP.mjs";
1
+ import { n as DefaultSocketData, t as BaseContext } from "./context-DNamt_XE.mjs";
2
+ import { o as Promisable } from "./types-CzIiTHWF.mjs";
3
+ import "./http-CD8MvQOV.mjs";
4
+ import { t as Middleware } from "./middleware-DVREjjkO.mjs";
5
5
  import { ProceduresMap, Ultra } from "./ultra.mjs";
6
6
  import { Session } from "./session.mjs";
7
7
 
@@ -13,27 +13,27 @@ interface AuthProvider<User> {
13
13
  logout: () => Promisable<void>;
14
14
  setUser: (user: User) => Promisable<void>;
15
15
  }
16
- type AuthProviderFactory<User = any> = (context: BaseContext) => AuthProvider<User>;
16
+ type AuthProviderFactory<User = any> = (context: AuthContext<User>) => AuthProvider<User>;
17
17
  interface AuthConfig<P extends Record<string, AuthProviderFactory> = Record<string, AuthProviderFactory>> {
18
18
  provider: keyof P;
19
19
  providers: P;
20
20
  }
21
- type AuthContext<User extends JSONObject> = BaseContext & {
22
- session: Session;
21
+ type AuthContext<User> = BaseContext & {
22
+ session: Session<any>;
23
23
  auth: Auth<User>;
24
24
  };
25
- declare function defineConfig<User extends JSONObject, P extends Record<string, AuthProviderFactory<User>> = Record<string, AuthProviderFactory<User>>>(config: AuthConfig<P>): AuthConfig<P>;
26
- declare function createAuthModule<User extends JSONObject, P extends Record<string, AuthProviderFactory<User>> = Record<string, AuthProviderFactory<User>>>(config: AuthConfig<P>): Ultra<ProceduresMap, BaseContext & {
25
+ declare function defineConfig<User, P extends Record<string, AuthProviderFactory<User>> = Record<string, AuthProviderFactory<User>>>(config: AuthConfig<P>): AuthConfig<P>;
26
+ declare function createAuthModule<User, P extends Record<string, AuthProviderFactory<User>> = Record<string, AuthProviderFactory<User>>>(config: AuthConfig<P>): Ultra<ProceduresMap, BaseContext & {
27
27
  auth: Auth<User, P>;
28
28
  }, DefaultSocketData>;
29
- declare const isAuthenticated: Middleware<unknown, unknown, AuthContext<JSONObject>>;
30
- declare const isGuest: Middleware<unknown, unknown, AuthContext<JSONObject>>;
31
- declare class Auth<User extends JSONObject, Providers extends Record<string, AuthProviderFactory<User>> = Record<string, AuthProviderFactory<User>>> {
29
+ declare const isAuthenticated: Middleware<any, any, AuthContext<any>>;
30
+ declare const isGuest: Middleware<any, any, AuthContext<any>>;
31
+ declare class Auth<User, Providers extends Record<string, AuthProviderFactory<User>> = Record<string, AuthProviderFactory<User>>> {
32
32
  protected readonly config: AuthConfig<Providers>;
33
- protected readonly context: BaseContext;
33
+ protected readonly context: AuthContext<User>;
34
34
  protected readonly usingProvider: keyof Providers;
35
35
  protected readonly providerCache: Map<keyof Providers, AuthProvider<User>>;
36
- constructor(config: AuthConfig<Providers>, context: BaseContext, provider?: keyof Providers, providerCache?: Map<keyof Providers, AuthProvider<User>>);
36
+ constructor(config: AuthConfig<Providers>, context: AuthContext<User>, provider?: keyof Providers, providerCache?: Map<keyof Providers, AuthProvider<User>>);
37
37
  use(provider: keyof Providers): Auth<User, Providers>;
38
38
  get user(): User | null;
39
39
  check(): Promisable<boolean>;
@@ -42,11 +42,11 @@ declare class Auth<User extends JSONObject, Providers extends Record<string, Aut
42
42
  setUser(user: User): Promisable<void>;
43
43
  protected get provider(): AuthProvider<User>;
44
44
  }
45
- declare class SessionAuthProvider<User extends JSONObject> implements AuthProvider<User> {
45
+ declare class SessionAuthProvider<User> implements AuthProvider<User> {
46
46
  protected readonly context: AuthContext<User>;
47
47
  protected readonly sessionKey: string;
48
48
  constructor(context: AuthContext<User>, sessionKey?: string);
49
- get user(): User;
49
+ get user(): NonNullable<User> | null;
50
50
  check(): boolean;
51
51
  login(user: User): void;
52
52
  logout(): void;
package/dist/auth.mjs CHANGED
@@ -1,84 +1 @@
1
- import { r as UnauthorizedError } from "./error-CII1zMOR.mjs";
2
- import { Ultra } from "./ultra.mjs";
3
-
4
- //#region src/auth.ts
5
- function defineConfig(config) {
6
- return config;
7
- }
8
- function createAuthModule(config) {
9
- return new Ultra().derive((context) => ({ auth: new Auth(config, context) }));
10
- }
11
- const isAuthenticated = async (options) => {
12
- if (!await options.context.auth.check()) return new UnauthorizedError();
13
- return options.next();
14
- };
15
- const isGuest = async (options) => {
16
- if (await options.context.auth.check()) return new UnauthorizedError();
17
- return options.next();
18
- };
19
- var Auth = class Auth {
20
- config;
21
- context;
22
- usingProvider;
23
- providerCache;
24
- constructor(config, context, provider = config.provider, providerCache = /* @__PURE__ */ new Map()) {
25
- this.config = config;
26
- this.context = context;
27
- this.usingProvider = provider;
28
- this.providerCache = providerCache;
29
- }
30
- use(provider) {
31
- return new Auth(this.config, this.context, provider, this.providerCache);
32
- }
33
- get user() {
34
- return this.provider.user;
35
- }
36
- check() {
37
- return this.provider.check();
38
- }
39
- login(user) {
40
- return this.provider.login(user);
41
- }
42
- logout() {
43
- return this.provider.logout();
44
- }
45
- setUser(user) {
46
- return this.provider.setUser(user);
47
- }
48
- get provider() {
49
- const cached = this.providerCache.get(this.usingProvider);
50
- if (cached) return cached;
51
- const providerFactory = this.config.providers[this.usingProvider];
52
- if (!providerFactory) throw new Error(`Auth provider "${String(this.usingProvider)}" is not configured.`);
53
- const instance = providerFactory(this.context);
54
- this.providerCache.set(this.usingProvider, instance);
55
- return instance;
56
- }
57
- };
58
- var SessionAuthProvider = class {
59
- context;
60
- sessionKey;
61
- constructor(context, sessionKey = "user") {
62
- this.context = context;
63
- this.sessionKey = sessionKey;
64
- }
65
- get user() {
66
- return this.context.session.get(this.sessionKey) || null;
67
- }
68
- check() {
69
- return this.user !== null;
70
- }
71
- login(user) {
72
- this.setUser(user);
73
- this.context.session.regenerate();
74
- }
75
- logout() {
76
- this.context.session.delete(this.sessionKey);
77
- }
78
- setUser(user) {
79
- this.context.session.set(this.sessionKey, user);
80
- }
81
- };
82
-
83
- //#endregion
84
- export { Auth, SessionAuthProvider, createAuthModule, defineConfig, isAuthenticated, isGuest };
1
+ import{r as e}from"./error-CvEWFOYT.mjs";import{Ultra as t}from"./ultra.mjs";function n(e){return e}function r(e){return new t().derive(t=>({auth:new o(e,t)}))}const i=async t=>await t.context.auth.check()?t.next():new e,a=async t=>await t.context.auth.check()?new e:t.next();var o=class e{config;context;usingProvider;providerCache;constructor(e,t,n=e.provider,r=new Map){this.config=e,this.context=t,this.usingProvider=n,this.providerCache=r}use(t){return new e(this.config,this.context,t,this.providerCache)}get user(){return this.provider.user}check(){return this.provider.check()}login(e){return this.provider.login(e)}logout(){return this.provider.logout()}setUser(e){return this.provider.setUser(e)}get provider(){let e=this.providerCache.get(this.usingProvider);if(e)return e;let t=this.config.providers[this.usingProvider];if(!t)throw Error(`Auth provider "${String(this.usingProvider)}" is not configured.`);let n=t(this.context);return this.providerCache.set(this.usingProvider,n),n}},s=class{context;sessionKey;constructor(e,t=`user`){this.context=e,this.sessionKey=t}get user(){return this.context.session.get(this.sessionKey)||null}check(){return this.user!==null}login(e){this.setUser(e),this.context.session.regenerate()}logout(){this.context.session.delete(this.sessionKey)}setUser(e){this.context.session.set(this.sessionKey,e)}};export{o as Auth,s as SessionAuthProvider,r as createAuthModule,n as defineConfig,i as isAuthenticated,a as isGuest};
package/dist/client.d.mts CHANGED
@@ -1,10 +1,10 @@
1
- import "./context-ChCsZh7S.mjs";
2
- import "./http-BqWCMASL.mjs";
3
- import { i as Procedure } from "./middleware-COKreBGP.mjs";
1
+ import "./context-DNamt_XE.mjs";
2
+ import "./http-CD8MvQOV.mjs";
3
+ import { i as Procedure } from "./middleware-DVREjjkO.mjs";
4
4
  import { ProceduresMap, Ultra } from "./ultra.mjs";
5
5
 
6
6
  //#region src/client.d.ts
7
- type GetProcedures<T> = T extends Ultra<infer P> ? P : never;
7
+ type GetProcedures<T> = T extends Ultra<infer P, any, any> ? P : never;
8
8
  type BuildProcedure<P, CO> = P extends Procedure<infer I, infer O, any> ? (undefined extends I ? (input?: I, callOptions?: CO) => Promise<O> : (input: I, callOptions?: CO) => Promise<O>) : never;
9
9
  type BuildClient<P extends ProceduresMap, CO> = { [K in keyof P]: P[K] extends Procedure<any, any, any> ? BuildProcedure<P[K], CO> : P[K] extends ProceduresMap ? BuildClient<P[K], CO> : never };
10
10
  type Invoke<CO> = (method: string, params: unknown, callOptions?: CO) => Promise<unknown>;
@@ -12,16 +12,16 @@ interface HTTPClientOptions extends Omit<RequestInit, 'body'> {
12
12
  baseUrl: string;
13
13
  timeout?: number;
14
14
  }
15
- declare function createHTTPClient<B extends Ultra>(clientOptions: HTTPClientOptions): BuildClient<GetProcedures<B>, Partial<HTTPClientOptions>>;
15
+ declare function createHTTPClient<B extends Ultra<any, any, any>>(clientOptions: HTTPClientOptions): BuildClient<GetProcedures<B>, Partial<HTTPClientOptions>>;
16
16
  interface WebSocketClientOptions {
17
- socket: () => WebSocket;
17
+ socket: () => WebSocket | null;
18
18
  timeout?: number;
19
19
  }
20
- declare function createWebSocketClient<B extends Ultra>(options: WebSocketClientOptions): BuildClient<GetProcedures<B>, Partial<WebSocketClientOptions>>;
20
+ declare function createWebSocketClient<B extends Ultra<any, any, any>>(options: WebSocketClientOptions): BuildClient<GetProcedures<B>, Partial<WebSocketClientOptions>>;
21
21
  type ClientsCallsParams = Partial<WebSocketClientOptions> | Partial<HTTPClientOptions>;
22
- interface SuperClientOptions<B extends Ultra> {
22
+ interface SuperClientOptions<B extends Ultra<any, any, any>> {
23
23
  pick: (...args: Parameters<Invoke<ClientsCallsParams>>) => BuildClient<GetProcedures<B>, ClientsCallsParams>;
24
24
  }
25
- declare function createSuperClient<B extends Ultra>(options: SuperClientOptions<B>): BuildClient<GetProcedures<B>, ClientsCallsParams>;
25
+ declare function createSuperClient<B extends Ultra<any, any, any>>(options: SuperClientOptions<B>): BuildClient<GetProcedures<B>, ClientsCallsParams>;
26
26
  //#endregion
27
27
  export { createHTTPClient, createSuperClient, createWebSocketClient };
package/dist/client.mjs CHANGED
@@ -1,131 +1 @@
1
- //#region src/client.ts
2
- function proxyClient(invoke, path = []) {
3
- return new Proxy(() => {}, {
4
- get(_, prop) {
5
- if (typeof prop === "string") return proxyClient(invoke, [...path, prop]);
6
- },
7
- apply(_, __, args) {
8
- if (!path.length) throw new Error("Cannot call client root; select a procedure first");
9
- const method = path.join("/");
10
- const params = args[0];
11
- const callOptions = args[1];
12
- return invoke(method, params, callOptions);
13
- }
14
- });
15
- }
16
- function mergeHeaders(...sources) {
17
- const result = new Headers();
18
- for (const headersInit of sources) {
19
- if (!headersInit) continue;
20
- new Headers(headersInit).forEach((value, key) => result.set(key, value));
21
- }
22
- return result;
23
- }
24
- function createHTTPClient(clientOptions) {
25
- const invoke = async (method, params, callOptions) => {
26
- const options = {
27
- ...clientOptions,
28
- ...callOptions
29
- };
30
- const timeout = options?.timeout || 1e4;
31
- const controller = new AbortController();
32
- const httpMethod = options?.method || "POST";
33
- let url = `${options.baseUrl}/${method}`;
34
- const headers = mergeHeaders(clientOptions?.headers, options?.headers, callOptions?.headers);
35
- let body = null;
36
- const abortTimeout = setTimeout(() => controller.abort(`Timeout: ${timeout}`), timeout);
37
- switch (true) {
38
- case httpMethod === "GET": {
39
- body = null;
40
- if (!params) break;
41
- if (typeof params !== "object") throw new Error("GET requests params to be an object for query string generation");
42
- const entries = Object.entries(params).filter(([, v]) => v !== void 0 && v !== null).map(([k, v]) => [k, String(v)]);
43
- const queryString = new URLSearchParams(entries).toString();
44
- if (queryString) url += `?${queryString}`;
45
- break;
46
- }
47
- case params instanceof FormData:
48
- body = params;
49
- break;
50
- case typeof params === "string":
51
- headers.set("Content-Type", "text/plain");
52
- body = params;
53
- break;
54
- default:
55
- headers.set("Content-Type", "application/json");
56
- body = JSON.stringify(params);
57
- }
58
- try {
59
- const response = await fetch(url, {
60
- method: httpMethod,
61
- ...body && { body },
62
- ...options,
63
- signal: controller.signal,
64
- headers
65
- });
66
- if (!response.ok) throw new Error(`HTTP error: ${response.statusText} ${response.status} `);
67
- const type = response.headers.get("Content-Type") || "";
68
- switch (true) {
69
- case type.includes("application/json"): return await response.json();
70
- case type.includes("text/"): return await response.text();
71
- default: return await response.blob();
72
- }
73
- } catch (error) {
74
- if (error.name === "AbortError") throw new Error(`Request aborted: ${error.message}`);
75
- throw error;
76
- } finally {
77
- clearTimeout(abortTimeout);
78
- }
79
- };
80
- return proxyClient(invoke);
81
- }
82
- function createWebSocketClient(options) {
83
- const { timeout = 1e4 } = options;
84
- const makeId = () => Math.random().toString(36);
85
- const invoke = (method, params, callOptions) => {
86
- const socket = options.socket();
87
- const readyState = socket.readyState;
88
- if (typeof readyState === "number" && readyState !== WebSocket.OPEN) return Promise.reject(/* @__PURE__ */ new Error("WebSocket is not open"));
89
- const { promise, resolve, reject } = Promise.withResolvers();
90
- const mergedTimeout = callOptions?.timeout ?? timeout;
91
- let rejectTimeout;
92
- const requestId = makeId();
93
- const listener = (event) => {
94
- try {
95
- const response = JSON.parse(event.data);
96
- if (response.id !== requestId) return;
97
- clearTimeout(rejectTimeout);
98
- socket.removeEventListener("message", listener);
99
- if ("error" in response) return reject(response.error);
100
- return resolve(response.result);
101
- } catch (error) {
102
- reject(error);
103
- }
104
- };
105
- socket.addEventListener("message", listener);
106
- rejectTimeout = setTimeout(() => {
107
- socket.removeEventListener("message", listener);
108
- reject(`Timeout: ${mergedTimeout}`);
109
- }, mergedTimeout);
110
- socket.send(JSON.stringify({
111
- id: requestId,
112
- method,
113
- params
114
- }));
115
- return promise;
116
- };
117
- return proxyClient(invoke);
118
- }
119
- function createSuperClient(options) {
120
- const invoke = (method, params, callOptions) => {
121
- const client = options.pick(method, params, callOptions);
122
- const segments = method.split("/").filter(Boolean);
123
- let target = client;
124
- for (const segment of segments) if (target[segment]) target = target[segment];
125
- return target(params, callOptions);
126
- };
127
- return proxyClient(invoke);
128
- }
129
-
130
- //#endregion
131
- export { createHTTPClient, createSuperClient, createWebSocketClient };
1
+ function e(t,n=[]){return new Proxy(()=>{},{get(r,i){if(typeof i==`string`)return e(t,[...n,i])},apply(e,r,i){if(!n.length)throw Error(`Cannot call client root; select a procedure first`);let a=n.join(`/`),o=i[0],s=i[1];return t(a,o,s)}})}function t(...e){let t=new Headers;for(let n of e)n&&new Headers(n).forEach((e,n)=>t.set(n,e));return t}function n(n){return e(async(e,r,i)=>{let a={...n,...i},o=a?.timeout||1e4,s=new AbortController,c=a?.method||`POST`,l=`${a.baseUrl}/${e}`,u=t(n?.headers,a?.headers,i?.headers),d=null,f=setTimeout(()=>s.abort(`Timeout: ${o}`),o);switch(!0){case c===`GET`:{if(d=null,!r)break;if(typeof r!=`object`)throw Error(`GET requests params to be an object for query string generation`);let e=Object.entries(r).filter(([,e])=>e!=null).map(([e,t])=>[e,String(t)]),t=new URLSearchParams(e).toString();t&&(l+=`?${t}`);break}case r instanceof FormData:d=r;break;case typeof r==`string`:u.set(`Content-Type`,`text/plain`),d=r;break;default:u.set(`Content-Type`,`application/json`),d=JSON.stringify(r)}try{let e=await fetch(l,{method:c,...d&&{body:d},...a,signal:s.signal,headers:u});if(!e.ok)throw Error(`HTTP error: ${e.statusText} ${e.status} `);let t=e.headers.get(`Content-Type`)||``;switch(!0){case t.includes(`application/json`):return await e.json();case t.includes(`text/`):return await e.text();default:return await e.blob()}}catch(e){throw e.name===`AbortError`?Error(`Request aborted: ${e.message}`):e}finally{clearTimeout(f)}})}function r(t){let{timeout:n=1e4}=t,r=()=>Math.random().toString(36);return e((e,i,a)=>{let o=t.socket();if(!o||o.readyState!==WebSocket.OPEN)return Promise.reject(Error(`WebSocket is not open`));let{promise:s,resolve:c,reject:l}=Promise.withResolvers(),u=a?.timeout??n,d,f=r(),p=e=>{try{let t=JSON.parse(e.data);return t.id===f?(clearTimeout(d),o.removeEventListener(`message`,p),`error`in t?l(t.error):c(t.result)):void 0}catch(e){l(e)}};return o.addEventListener(`message`,p),d=setTimeout(()=>{o.removeEventListener(`message`,p),l(`Timeout: ${u}`)},u),o.send(JSON.stringify({id:f,method:e,params:i})),s})}function i(t){return e((e,n,r)=>{let i=t.pick(e,n,r),a=e.split(`/`).filter(Boolean),o=i;for(let e of a)o[e]&&(o=o[e]);return o(n,r)})}export{n as createHTTPClient,i as createSuperClient,r as createWebSocketClient};
@@ -0,0 +1 @@
1
+ function e(e){return`request`in e}function t(e){return`ws`in e}export{t as n,e as t};
@@ -1,2 +1,2 @@
1
- import { a as isHTTP, i as WSContext, n as DefaultSocketData, o as isWS, r as HTTPContext, t as BaseContext } from "./context-ChCsZh7S.mjs";
1
+ import { a as isHTTP, i as WSContext, n as DefaultSocketData, o as isWS, r as HTTPContext, t as BaseContext } from "./context-DNamt_XE.mjs";
2
2
  export { BaseContext, DefaultSocketData, HTTPContext, WSContext, isHTTP, isWS };
package/dist/context.mjs CHANGED
@@ -1,10 +1 @@
1
- //#region src/context.ts
2
- function isHTTP(context) {
3
- return "request" in context;
4
- }
5
- function isWS(context) {
6
- return "ws" in context;
7
- }
8
-
9
- //#endregion
10
- export { isHTTP, isWS };
1
+ import{n as e,t}from"./context-BAOh_2qI.mjs";export{t as isHTTP,e as isWS};
package/dist/cors.d.mts CHANGED
@@ -1,6 +1,6 @@
1
- import { t as BaseContext } from "./context-ChCsZh7S.mjs";
2
- import "./http-BqWCMASL.mjs";
3
- import { t as Middleware } from "./middleware-COKreBGP.mjs";
1
+ import { t as BaseContext } from "./context-DNamt_XE.mjs";
2
+ import "./http-CD8MvQOV.mjs";
3
+ import { t as Middleware } from "./middleware-DVREjjkO.mjs";
4
4
 
5
5
  //#region src/cors.d.ts
6
6
  interface CorsConfig {
package/dist/cors.mjs CHANGED
@@ -1,58 +1 @@
1
- import { t as toHTTPResponse } from "./response-CNhIkAYG.mjs";
2
-
3
- //#region src/cors.ts
4
- const DEFAULT_HEADERS = {
5
- "Access-Control-Allow-Methods": [
6
- "GET",
7
- "POST",
8
- "PUT",
9
- "PATCH",
10
- "DELETE",
11
- "OPTIONS"
12
- ].join(", "),
13
- "Access-Control-Allow-Headers": [
14
- "Accept-Language",
15
- "Accept",
16
- "Content-Type",
17
- "Content-Language",
18
- "Range"
19
- ].join(", "),
20
- "Access-Control-Expose-Headers": [
21
- "Cache-Control",
22
- "Content-Language",
23
- "Content-Type",
24
- "Expires",
25
- "Last-Modified",
26
- "Pragma"
27
- ].join(", "),
28
- "Access-Control-Max-Age": "3600"
29
- };
30
- function createCORSMiddleware(config) {
31
- const cachedHeaders = {
32
- ...DEFAULT_HEADERS,
33
- ...config.methods?.length && { "Access-Control-Allow-Methods": config.methods.join(", ") },
34
- ...config.allowedHeaders?.length && { "Access-Control-Allow-Headers": config.allowedHeaders.join(", ") },
35
- ...config.exposedHeaders?.length && { "Access-Control-Expose-Headers": config.exposedHeaders.join(", ") },
36
- ...config.credentials && !config.origin.includes("*") && { "Access-Control-Allow-Credentials": "true" },
37
- ...config.maxAge && { "Access-Control-Max-Age": config.maxAge.toString() }
38
- };
39
- return async (options) => {
40
- if (!("request" in options.context)) return options.next();
41
- const origin = options.context.request.headers.get("Origin");
42
- if (!origin || !config.origin.includes(origin)) return options.next();
43
- if (options.context.request.method === "OPTIONS") return new Response(null, {
44
- status: 204,
45
- headers: {
46
- "Access-Control-Allow-Origin": origin,
47
- ...cachedHeaders
48
- }
49
- });
50
- const response = toHTTPResponse(await options.next());
51
- response.headers.set("Access-Control-Allow-Origin", origin);
52
- for (const header in cachedHeaders) response.headers.set(header, cachedHeaders[header]);
53
- return response;
54
- };
55
- }
56
-
57
- //#endregion
58
- export { createCORSMiddleware };
1
+ import{t as e}from"./response-D9PTLpdq.mjs";const t={"Access-Control-Allow-Methods":[`GET`,`POST`,`PUT`,`PATCH`,`DELETE`,`OPTIONS`].join(`, `),"Access-Control-Allow-Headers":[`Accept-Language`,`Accept`,`Content-Type`,`Content-Language`,`Range`].join(`, `),"Access-Control-Expose-Headers":[`Cache-Control`,`Content-Language`,`Content-Type`,`Expires`,`Last-Modified`,`Pragma`].join(`, `),"Access-Control-Max-Age":`3600`};function n(n){let r={...t,...n.methods?.length&&{"Access-Control-Allow-Methods":n.methods.join(`, `)},...n.allowedHeaders?.length&&{"Access-Control-Allow-Headers":n.allowedHeaders.join(`, `)},...n.exposedHeaders?.length&&{"Access-Control-Expose-Headers":n.exposedHeaders.join(`, `)},...n.credentials&&!n.origin.includes(`*`)&&{"Access-Control-Allow-Credentials":`true`},...n.maxAge&&{"Access-Control-Max-Age":n.maxAge.toString()}};return async t=>{if(!(`request`in t.context))return t.next();let i=t.context.request.headers.get(`Origin`);if(!i||!n.origin.includes(i))return t.next();if(t.context.request.method===`OPTIONS`)return new Response(null,{status:204,headers:{"Access-Control-Allow-Origin":i,...r}});let a=e(await t.next());for(let e in a.headers.set(`Access-Control-Allow-Origin`,i),r)a.headers.set(e,r[e]);return a}}export{n as createCORSMiddleware};
@@ -0,0 +1 @@
1
+ import{createCipheriv as e,createDecipheriv as t,createHmac as n,randomBytes as r,timingSafeEqual as i}from"node:crypto";const a=`aes-256-gcm`,o=`base64url`;function s(e,t){let r=Buffer.from(e).toString(o);return`${r}.${n(`sha256`,t).update(r).digest(o)}`}function c(e,t){let[r,a]=e.split(`.`);if(!r||!a)return null;let s=n(`sha256`,t).update(r).digest(o),c=Buffer.from(a,o),l=Buffer.from(s,o);return c.length!==l.length||!i(c,l)?null:Buffer.from(r,o).toString()}function l(t,n){let i=r(12),s=e(a,n,i),c=s.update(t,`utf-8`,o);return c+=s.final(o),Buffer.concat([i,s.getAuthTag(),Buffer.from(c,o)]).toString(o)}function u(e,n){let r=Buffer.from(e,o);if(r.length<28)return null;let i=r.subarray(0,12),s=r.subarray(12,28),c=r.subarray(28),l=t(a,n,i);return l.setAuthTag(s),`${l.update(c,void 0,`utf-8`)}${l.final(`utf-8`)}`}export{c as i,l as n,s as r,u as t};
package/dist/crypto.mjs CHANGED
@@ -1,44 +1 @@
1
- import { createCipheriv, createDecipheriv, createHmac, randomBytes, timingSafeEqual } from "node:crypto";
2
-
3
- //#region src/crypto.ts
4
- const ALGO = "aes-256-gcm";
5
- const ENCODING = "base64url";
6
- const IV_LEN = 12;
7
- const TAG_LEN = 16;
8
- function sign(value, secret) {
9
- const base64 = Buffer.from(value).toString(ENCODING);
10
- return `${base64}.${createHmac("sha256", secret).update(base64).digest(ENCODING)}`;
11
- }
12
- function unsign(signedValue, secret) {
13
- const [base64, sig] = signedValue.split(".");
14
- if (!base64 || !sig) return null;
15
- const expectedSig = createHmac("sha256", secret).update(base64).digest(ENCODING);
16
- const a = Buffer.from(sig, ENCODING);
17
- const b = Buffer.from(expectedSig, ENCODING);
18
- if (a.length !== b.length || !timingSafeEqual(a, b)) return null;
19
- return Buffer.from(base64, ENCODING).toString();
20
- }
21
- function encrypt(value, secret) {
22
- const iv = randomBytes(IV_LEN);
23
- const cipher = createCipheriv(ALGO, secret, iv);
24
- let enc = cipher.update(value, "utf-8", ENCODING);
25
- enc += cipher.final(ENCODING);
26
- return Buffer.concat([
27
- iv,
28
- cipher.getAuthTag(),
29
- Buffer.from(enc, ENCODING)
30
- ]).toString(ENCODING);
31
- }
32
- function decrypt(encrypted, secret) {
33
- const data = Buffer.from(encrypted, ENCODING);
34
- if (data.length < IV_LEN + TAG_LEN) return null;
35
- const iv = data.subarray(0, IV_LEN);
36
- const tag = data.subarray(IV_LEN, IV_LEN + TAG_LEN);
37
- const cipherText = data.subarray(IV_LEN + TAG_LEN);
38
- const decipher = createDecipheriv(ALGO, secret, iv);
39
- decipher.setAuthTag(tag);
40
- return `${decipher.update(cipherText, void 0, "utf-8")}${decipher.final("utf-8")}`;
41
- }
42
-
43
- //#endregion
44
- export { decrypt, encrypt, sign, unsign };
1
+ import{i as e,n as t,r as n,t as r}from"./crypto-DrpstqPB.mjs";export{r as decrypt,t as encrypt,n as sign,e as unsign};
@@ -0,0 +1 @@
1
+ var e=class extends Error{status;constructor(e,t,n){super(e),this.name=t,this.status=n}toResponse(){return Response.json({error:{name:this.name,message:this.message}},{status:this.status})}toJSON(){return{name:this.name,message:this.message,status:this.status}}},t=class extends e{constructor(e=`Validation failed`){super(e,`ValidationError`,422)}},n=class extends e{constructor(e=`Unauthorized`){super(e,`UnauthorizedError`,401)}},r=class extends e{constructor(e=`Not Found`){super(e,`NotFoundError`,404)}},i=class extends e{constructor(e=`Unsupported Protocol`){super(e,`UnsupportedProtocolError`,400)}};export{t as a,i,e as n,n as r,r as t};
package/dist/error.mjs CHANGED
@@ -1,3 +1 @@
1
- import { a as ValidationError, i as UnsupportedProtocolError, n as UltraError, r as UnauthorizedError, t as NotFoundError } from "./error-CII1zMOR.mjs";
2
-
3
- export { NotFoundError, UltraError, UnauthorizedError, UnsupportedProtocolError, ValidationError };
1
+ import{a as e,i as t,n,r,t as i}from"./error-CvEWFOYT.mjs";export{i as NotFoundError,n as UltraError,r as UnauthorizedError,t as UnsupportedProtocolError,e as ValidationError};
@@ -1,5 +1,5 @@
1
- import { n as DefaultSocketData } from "./context-ChCsZh7S.mjs";
2
- import { o as Promisable } from "./types-Cn69QrjS.mjs";
1
+ import { n as DefaultSocketData } from "./context-DNamt_XE.mjs";
2
+ import { o as Promisable } from "./types-CzIiTHWF.mjs";
3
3
  import { BunRequest, Server } from "bun";
4
4
 
5
5
  //#region src/http.d.ts
package/dist/http.d.mts CHANGED
@@ -1,3 +1,3 @@
1
- import "./context-ChCsZh7S.mjs";
2
- import { n as BunRoutes, r as HTTPMethod, t as BunRouteHandler } from "./http-BqWCMASL.mjs";
1
+ import "./context-DNamt_XE.mjs";
2
+ import { n as BunRoutes, r as HTTPMethod, t as BunRouteHandler } from "./http-CD8MvQOV.mjs";
3
3
  export { BunRouteHandler, BunRoutes, HTTPMethod };
package/dist/http.mjs CHANGED
@@ -1 +1 @@
1
- export { };
1
+ export{};
@@ -1,7 +1,7 @@
1
- import { t as BaseContext } from "./context-ChCsZh7S.mjs";
2
- import { o as Promisable } from "./types-Cn69QrjS.mjs";
3
- import { r as HTTPMethod } from "./http-BqWCMASL.mjs";
4
- import { c as StandardSchemaV1 } from "./validation-CkRfxQJ_.mjs";
1
+ import { t as BaseContext } from "./context-DNamt_XE.mjs";
2
+ import { o as Promisable } from "./types-CzIiTHWF.mjs";
3
+ import { r as HTTPMethod } from "./http-CD8MvQOV.mjs";
4
+ import { c as StandardSchemaV1 } from "./validation-Dfgqsq2f.mjs";
5
5
 
6
6
  //#region src/procedure.d.ts
7
7
  interface ProcedureOptions<I, C> {
@@ -1,4 +1,4 @@
1
- import "./context-ChCsZh7S.mjs";
2
- import "./http-BqWCMASL.mjs";
3
- import { n as MiddlewareOptions, t as Middleware } from "./middleware-COKreBGP.mjs";
1
+ import "./context-DNamt_XE.mjs";
2
+ import "./http-CD8MvQOV.mjs";
3
+ import { n as MiddlewareOptions, t as Middleware } from "./middleware-DVREjjkO.mjs";
4
4
  export { Middleware, MiddlewareOptions };
@@ -1 +1 @@
1
- export { };
1
+ export{};
@@ -0,0 +1 @@
1
+ import{t as e}from"./validation-s1s8P8HO.mjs";var t=class{inputSchema;outputSchema;handlerFunction;middleware=new Set;httpOptions;input(e){return e&&(this.inputSchema=e),this}output(e){return e&&(this.outputSchema=e),this}handler(e){return this.handlerFunction=e,this}http(e){return this.httpOptions={...e,enabled:!0},this}use(e){return this.middleware.add(e),this}wrap(){if(!this.handlerFunction)throw Error(`Procedure handler is not defined`);if(!this.inputSchema&&!this.outputSchema&&!this.middleware.size)return this.handlerFunction;let t=this.handlerFunction;switch(!0){case!this.inputSchema&&!this.outputSchema:break;case!this.inputSchema:{let n=t;t=async t=>e(this.outputSchema,await n(t));break}case!this.outputSchema:{let n=t;t=async t=>n({...t,input:await e(this.inputSchema,t.input)});break}default:{let n=t;t=async t=>{let r=await n({...t,input:await e(this.inputSchema,t.input)});return e(this.outputSchema,r)}}}if(this.middleware.size){let e=Array.from(this.middleware);for(let n=e.length-1;n>=0;n--){let r=e[n],i=t;t=e=>r({...e,next:()=>i(e)})}}return t}getInfo(){return{http:this.httpOptions,hasInput:!!this.inputSchema,hasOutput:!!this.outputSchema}}};export{t};
@@ -1,4 +1,4 @@
1
- import "./context-ChCsZh7S.mjs";
2
- import "./http-BqWCMASL.mjs";
3
- import { a as ProcedureHandler, i as Procedure, o as ProcedureOptions, r as HTTPOptions } from "./middleware-COKreBGP.mjs";
1
+ import "./context-DNamt_XE.mjs";
2
+ import "./http-CD8MvQOV.mjs";
3
+ import { a as ProcedureHandler, i as Procedure, o as ProcedureOptions, r as HTTPOptions } from "./middleware-DVREjjkO.mjs";
4
4
  export { HTTPOptions, Procedure, ProcedureHandler, ProcedureOptions };
@@ -1,3 +1 @@
1
- import { t as Procedure } from "./procedure-BN1rLLRX.mjs";
2
-
3
- export { Procedure };
1
+ import{t as e}from"./procedure-BekIoOQX.mjs";export{e as Procedure};
@@ -0,0 +1 @@
1
+ import{n as e}from"./error-CvEWFOYT.mjs";function t(t){switch(!0){case t instanceof Response:return t;case t instanceof e:return t.toResponse();case t instanceof Error:return new Response(`Internal Server Error`,{status:500});case typeof t==`object`:return Response.json(t);case!t:return new Response(null,{status:204});default:return new Response(String(t))}}function n(t,n){let r;switch(!0){case n instanceof e:r={id:t,error:{code:n.status,message:n.message}};break;case n instanceof Error:r={id:t,error:{code:500,message:n.message}};break;case n instanceof Response:r={id:t,error:{code:n.status,message:n.statusText}};break;case typeof n==`object`||typeof n==`number`||typeof n==`boolean`:r={id:t,result:n};break;default:r={id:t,result:String(n)}}return JSON.stringify(r)}export{n,t};
package/dist/response.mjs CHANGED
@@ -1,3 +1 @@
1
- import { n as toRPCResponse, t as toHTTPResponse } from "./response-CNhIkAYG.mjs";
2
-
3
- export { toHTTPResponse, toRPCResponse };
1
+ import{n as e,t}from"./response-D9PTLpdq.mjs";export{t as toHTTPResponse,e as toRPCResponse};
@@ -0,0 +1 @@
1
+ function e(e){return!!e&&typeof e==`object`&&`id`in e&&`method`in e}export{e as t};
@@ -1,4 +1,4 @@
1
- import { a as JSONValue } from "./types-Cn69QrjS.mjs";
1
+ import { a as JSONValue } from "./types-CzIiTHWF.mjs";
2
2
 
3
3
  //#region src/rpc.d.ts
4
4
  interface ErrorResult {
package/dist/rpc.d.mts CHANGED
@@ -1,2 +1,2 @@
1
- import { a as isRPC, i as SuccessResult, n as Payload, r as Result, t as ErrorResult } from "./rpc-Ch2UXReT.mjs";
1
+ import { a as isRPC, i as SuccessResult, n as Payload, r as Result, t as ErrorResult } from "./rpc-DADpT17P.mjs";
2
2
  export { ErrorResult, Payload, Result, SuccessResult, isRPC };
package/dist/rpc.mjs CHANGED
@@ -1,3 +1 @@
1
- import { t as isRPC } from "./rpc-_rBI0z-9.mjs";
2
-
3
- export { isRPC };
1
+ import{t as e}from"./rpc-D9H6IkRD.mjs";export{e as isRPC};
@@ -1,7 +1,7 @@
1
- import { n as DefaultSocketData, r as HTTPContext, t as BaseContext } from "./context-ChCsZh7S.mjs";
2
- import { a as JSONValue, o as Promisable, r as JSONObject, t as DeepReadonly } from "./types-Cn69QrjS.mjs";
3
- import "./http-BqWCMASL.mjs";
4
- import "./middleware-COKreBGP.mjs";
1
+ import { n as DefaultSocketData, r as HTTPContext, t as BaseContext } from "./context-DNamt_XE.mjs";
2
+ import { a as JSONValue, o as Promisable, r as JSONObject, t as DeepReadonly } from "./types-CzIiTHWF.mjs";
3
+ import "./http-CD8MvQOV.mjs";
4
+ import "./middleware-DVREjjkO.mjs";
5
5
  import { ProceduresMap, Ultra } from "./ultra.mjs";
6
6
  import { BunRequest, CookieSameSite, RedisClient } from "bun";
7
7