@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.
- package/LICENSE +20 -20
- package/README.md +512 -512
- package/dist/auth.d.mts +16 -16
- package/dist/auth.mjs +1 -84
- package/dist/client.d.mts +9 -9
- package/dist/client.mjs +1 -131
- package/dist/context-BAOh_2qI.mjs +1 -0
- package/dist/context.d.mts +1 -1
- package/dist/context.mjs +1 -10
- package/dist/cors.d.mts +3 -3
- package/dist/cors.mjs +1 -58
- package/dist/crypto-DrpstqPB.mjs +1 -0
- package/dist/crypto.mjs +1 -44
- package/dist/error-CvEWFOYT.mjs +1 -0
- package/dist/error.mjs +1 -3
- package/dist/{http-BqWCMASL.d.mts → http-CD8MvQOV.d.mts} +2 -2
- package/dist/http.d.mts +2 -2
- package/dist/http.mjs +1 -1
- package/dist/{middleware-COKreBGP.d.mts → middleware-DVREjjkO.d.mts} +4 -4
- package/dist/middleware.d.mts +3 -3
- package/dist/middleware.mjs +1 -1
- package/dist/procedure-BekIoOQX.mjs +1 -0
- package/dist/procedure.d.mts +3 -3
- package/dist/procedure.mjs +1 -3
- package/dist/response-D9PTLpdq.mjs +1 -0
- package/dist/response.mjs +1 -3
- package/dist/rpc-D9H6IkRD.mjs +1 -0
- package/dist/{rpc-Ch2UXReT.d.mts → rpc-DADpT17P.d.mts} +1 -1
- package/dist/rpc.d.mts +1 -1
- package/dist/rpc.mjs +1 -3
- package/dist/session.d.mts +4 -4
- package/dist/session.mjs +1 -181
- package/dist/test.d.mts +1 -0
- package/dist/test.mjs +1 -0
- package/dist/types.d.mts +1 -1
- package/dist/types.mjs +1 -1
- package/dist/ultra.d.mts +7 -7
- package/dist/ultra.mjs +1 -273
- package/dist/validation-s1s8P8HO.mjs +1 -0
- package/dist/validation.d.mts +1 -1
- package/dist/validation.mjs +1 -3
- package/package.json +10 -3
- package/dist/error-CII1zMOR.mjs +0 -45
- package/dist/procedure-BN1rLLRX.mjs +0 -86
- package/dist/response-CNhIkAYG.mjs +0 -59
- package/dist/rpc-_rBI0z-9.mjs +0 -7
- package/dist/validation-Cop5Wvlr.mjs +0 -12
- /package/dist/{context-ChCsZh7S.d.mts → context-DNamt_XE.d.mts} +0 -0
- /package/dist/{types-Cn69QrjS.d.mts → types-CzIiTHWF.d.mts} +0 -0
- /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-
|
|
2
|
-
import { o as Promisable
|
|
3
|
-
import "./http-
|
|
4
|
-
import { t as Middleware } from "./middleware-
|
|
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:
|
|
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
|
|
22
|
-
session: Session
|
|
21
|
+
type AuthContext<User> = BaseContext & {
|
|
22
|
+
session: Session<any>;
|
|
23
23
|
auth: Auth<User>;
|
|
24
24
|
};
|
|
25
|
-
declare function defineConfig<User
|
|
26
|
-
declare function createAuthModule<User
|
|
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<
|
|
30
|
-
declare const isGuest: Middleware<
|
|
31
|
-
declare class Auth<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:
|
|
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:
|
|
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
|
|
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
|
|
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-
|
|
2
|
-
import "./http-
|
|
3
|
-
import { i as Procedure } from "./middleware-
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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};
|
package/dist/context.d.mts
CHANGED
|
@@ -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-
|
|
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
|
-
|
|
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-
|
|
2
|
-
import "./http-
|
|
3
|
-
import { t as Middleware } from "./middleware-
|
|
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
|
|
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
|
|
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
|
|
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-
|
|
2
|
-
import { o as Promisable } from "./types-
|
|
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-
|
|
2
|
-
import { n as BunRoutes, r as HTTPMethod, t as BunRouteHandler } from "./http-
|
|
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-
|
|
2
|
-
import { o as Promisable } from "./types-
|
|
3
|
-
import { r as HTTPMethod } from "./http-
|
|
4
|
-
import { c as StandardSchemaV1 } from "./validation-
|
|
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> {
|
package/dist/middleware.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import "./context-
|
|
2
|
-
import "./http-
|
|
3
|
-
import { n as MiddlewareOptions, t as Middleware } from "./middleware-
|
|
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 };
|
package/dist/middleware.mjs
CHANGED
|
@@ -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};
|
package/dist/procedure.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import "./context-
|
|
2
|
-
import "./http-
|
|
3
|
-
import { a as ProcedureHandler, i as Procedure, o as ProcedureOptions, r as HTTPOptions } from "./middleware-
|
|
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 };
|
package/dist/procedure.mjs
CHANGED
|
@@ -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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function e(e){return!!e&&typeof e==`object`&&`id`in e&&`method`in e}export{e as t};
|
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-
|
|
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
package/dist/session.d.mts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { n as DefaultSocketData, r as HTTPContext, t as BaseContext } from "./context-
|
|
2
|
-
import { a as JSONValue, o as Promisable, r as JSONObject, t as DeepReadonly } from "./types-
|
|
3
|
-
import "./http-
|
|
4
|
-
import "./middleware-
|
|
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
|
|