@hypequery/serve 0.0.7 → 0.0.9
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/adapters/fetch.d.ts +3 -0
- package/dist/adapters/fetch.d.ts.map +1 -0
- package/dist/adapters/fetch.js +26 -0
- package/dist/adapters/node.d.ts +8 -0
- package/dist/adapters/node.d.ts.map +1 -0
- package/dist/adapters/node.js +105 -0
- package/dist/adapters/utils.d.ts +39 -0
- package/dist/adapters/utils.d.ts.map +1 -0
- package/dist/adapters/utils.js +114 -0
- package/dist/adapters/vercel.d.ts +7 -0
- package/dist/adapters/vercel.d.ts.map +1 -0
- package/dist/adapters/vercel.js +13 -0
- package/dist/auth.d.ts +192 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +221 -0
- package/dist/builder.d.ts +3 -0
- package/dist/builder.d.ts.map +1 -0
- package/dist/builder.js +56 -0
- package/dist/client-config.d.ts +44 -0
- package/dist/client-config.d.ts.map +1 -0
- package/dist/client-config.js +53 -0
- package/dist/dev.d.ts +9 -0
- package/dist/dev.d.ts.map +1 -0
- package/dist/dev.js +30 -0
- package/dist/docs-ui.d.ts +3 -0
- package/dist/docs-ui.d.ts.map +1 -0
- package/dist/docs-ui.js +34 -0
- package/dist/endpoint.d.ts +5 -0
- package/dist/endpoint.d.ts.map +1 -0
- package/dist/endpoint.js +65 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/openapi.d.ts +3 -0
- package/dist/openapi.d.ts.map +1 -0
- package/dist/openapi.js +205 -0
- package/dist/pipeline.d.ts +77 -0
- package/dist/pipeline.d.ts.map +1 -0
- package/dist/pipeline.js +424 -0
- package/dist/query-logger.d.ts +65 -0
- package/dist/query-logger.d.ts.map +1 -0
- package/dist/query-logger.js +91 -0
- package/dist/router.d.ts +13 -0
- package/dist/router.d.ts.map +1 -0
- package/dist/router.js +56 -0
- package/dist/server/builder.d.ts +7 -0
- package/dist/server/builder.d.ts.map +1 -0
- package/dist/server/builder.js +73 -0
- package/dist/server/define-serve.d.ts +3 -0
- package/dist/server/define-serve.d.ts.map +1 -0
- package/dist/server/define-serve.js +88 -0
- package/dist/server/execute-query.d.ts +8 -0
- package/dist/server/execute-query.d.ts.map +1 -0
- package/dist/server/execute-query.js +39 -0
- package/dist/server/index.d.ts +6 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +5 -0
- package/dist/server/init-serve.d.ts +8 -0
- package/dist/server/init-serve.d.ts.map +1 -0
- package/dist/server/init-serve.js +18 -0
- package/dist/server/mapper.d.ts +3 -0
- package/dist/server/mapper.d.ts.map +1 -0
- package/dist/server/mapper.js +30 -0
- package/dist/tenant.d.ts +35 -0
- package/dist/tenant.d.ts.map +1 -0
- package/dist/tenant.js +49 -0
- package/dist/type-tests/builder.test-d.d.ts +13 -0
- package/dist/type-tests/builder.test-d.d.ts.map +1 -0
- package/dist/type-tests/builder.test-d.js +20 -0
- package/dist/types.d.ts +514 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +1 -0
- package/dist/utils.d.ts +4 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +16 -0
- package/package.json +1 -1
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,514 @@
|
|
|
1
|
+
import type { ZodTypeAny } from "zod";
|
|
2
|
+
import type { ServeQueryLogger, ServeQueryEventCallback } from "./query-logger.js";
|
|
3
|
+
/** Supported HTTP verbs for serve-managed endpoints. */
|
|
4
|
+
export type HttpMethod = "GET" | "POST" | "PUT" | "PATCH" | "DELETE" | "OPTIONS";
|
|
5
|
+
export type HeaderMap = Record<string, string | undefined>;
|
|
6
|
+
export type QueryParams = Record<string, string | string[] | undefined>;
|
|
7
|
+
export interface ServeRequest<TBody = unknown> {
|
|
8
|
+
method: HttpMethod;
|
|
9
|
+
path: string;
|
|
10
|
+
query: QueryParams;
|
|
11
|
+
headers: HeaderMap;
|
|
12
|
+
body?: TBody;
|
|
13
|
+
/** Raw underlying request (IncomingMessage, Request, etc.) */
|
|
14
|
+
raw?: unknown;
|
|
15
|
+
}
|
|
16
|
+
export interface ServeResponse<TData = unknown> {
|
|
17
|
+
status: number;
|
|
18
|
+
headers?: Record<string, string>;
|
|
19
|
+
body: TData;
|
|
20
|
+
}
|
|
21
|
+
export type ServeHandler = (request: ServeRequest) => Promise<ServeResponse<unknown>>;
|
|
22
|
+
export type ServeErrorType = "VALIDATION_ERROR" | "UNAUTHORIZED" | "FORBIDDEN" | "QUERY_FAILURE" | "CLICKHOUSE_UNREACHABLE" | "RATE_LIMITED" | "NOT_FOUND" | "INTERNAL_SERVER_ERROR";
|
|
23
|
+
export interface ErrorEnvelope {
|
|
24
|
+
error: {
|
|
25
|
+
type: ServeErrorType;
|
|
26
|
+
message: string;
|
|
27
|
+
details?: Record<string, unknown>;
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
export interface ServeError extends Error {
|
|
31
|
+
status: number;
|
|
32
|
+
payload: ErrorEnvelope["error"];
|
|
33
|
+
cause?: unknown;
|
|
34
|
+
}
|
|
35
|
+
export type EndpointVisibility = "public" | "internal" | "private";
|
|
36
|
+
export interface EndpointMetadata<TCustom = Record<string, unknown>> {
|
|
37
|
+
path: string;
|
|
38
|
+
method: HttpMethod;
|
|
39
|
+
name?: string;
|
|
40
|
+
summary?: string;
|
|
41
|
+
description?: string;
|
|
42
|
+
tags: string[];
|
|
43
|
+
deprecated?: boolean;
|
|
44
|
+
requiresAuth?: boolean;
|
|
45
|
+
/** Roles required to access this endpoint. Implies requiresAuth. */
|
|
46
|
+
requiredRoles?: string[];
|
|
47
|
+
/** Scopes required to access this endpoint. Implies requiresAuth. */
|
|
48
|
+
requiredScopes?: string[];
|
|
49
|
+
cacheTtlMs?: number | null;
|
|
50
|
+
visibility: EndpointVisibility;
|
|
51
|
+
/** Custom metadata fields for application-specific use cases */
|
|
52
|
+
custom?: TCustom;
|
|
53
|
+
}
|
|
54
|
+
export interface AuthContext {
|
|
55
|
+
userId?: string;
|
|
56
|
+
roles?: string[];
|
|
57
|
+
scopes?: string[];
|
|
58
|
+
tenantId?: string;
|
|
59
|
+
metadata?: Record<string, unknown>;
|
|
60
|
+
[key: string]: unknown;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Type-safe auth context with constrained roles.
|
|
64
|
+
* Use this to enforce compile-time checking of role values.
|
|
65
|
+
*
|
|
66
|
+
* @example
|
|
67
|
+
* ```ts
|
|
68
|
+
* type AppRole = 'admin' | 'editor' | 'viewer';
|
|
69
|
+
* type AppAuth = AuthContextWithRoles<AppRole>;
|
|
70
|
+
*
|
|
71
|
+
* const api = defineServe<AppAuth>({
|
|
72
|
+
* auth: jwtStrategy,
|
|
73
|
+
* queries: {
|
|
74
|
+
* adminOnly: query.requireRole('admin').query(async ({ ctx }) => {
|
|
75
|
+
* // ✅ TypeScript autocomplete for 'admin' role
|
|
76
|
+
* // ❌ Compile error if you use typo like 'admn'
|
|
77
|
+
* }),
|
|
78
|
+
* },
|
|
79
|
+
* });
|
|
80
|
+
* ```
|
|
81
|
+
*/
|
|
82
|
+
export type AuthContextWithRoles<TRoles extends string> = Omit<AuthContext, 'roles'> & {
|
|
83
|
+
roles?: TRoles[];
|
|
84
|
+
};
|
|
85
|
+
/**
|
|
86
|
+
* Type-safe auth context with constrained scopes.
|
|
87
|
+
* Use this to enforce compile-time checking of scope values.
|
|
88
|
+
*
|
|
89
|
+
* @example
|
|
90
|
+
* ```ts
|
|
91
|
+
* type AppScope = 'read:metrics' | 'write:metrics' | 'delete:metrics';
|
|
92
|
+
* type AppAuth = AuthContextWithScopes<AppScope>;
|
|
93
|
+
*
|
|
94
|
+
* const api = defineServe<AppAuth>({
|
|
95
|
+
* auth: jwtStrategy,
|
|
96
|
+
* queries: {
|
|
97
|
+
* writeData: query.requireScope('write:metrics').query(async ({ ctx }) => {
|
|
98
|
+
* // ✅ TypeScript autocomplete for scopes
|
|
99
|
+
* // ❌ Compile error if you use typo like 'writ:metrics'
|
|
100
|
+
* }),
|
|
101
|
+
* },
|
|
102
|
+
* });
|
|
103
|
+
* ```
|
|
104
|
+
*/
|
|
105
|
+
export type AuthContextWithScopes<TScopes extends string> = Omit<AuthContext, 'scopes'> & {
|
|
106
|
+
scopes?: TScopes[];
|
|
107
|
+
};
|
|
108
|
+
/**
|
|
109
|
+
* Configuration for multi-tenant query isolation.
|
|
110
|
+
* Automatically enforces tenant-scoped data access.
|
|
111
|
+
*/
|
|
112
|
+
export interface TenantConfig<TAuth extends AuthContext = AuthContext> {
|
|
113
|
+
/**
|
|
114
|
+
* Function to extract the tenant ID from the auth context.
|
|
115
|
+
* @example
|
|
116
|
+
* extract: (auth) => auth.tenantId
|
|
117
|
+
* extract: (auth) => auth.organizationId
|
|
118
|
+
*/
|
|
119
|
+
extract: (auth: TAuth) => string | null | undefined;
|
|
120
|
+
/**
|
|
121
|
+
* Whether tenant context is required.
|
|
122
|
+
* If true, requests without a valid tenant ID will be rejected.
|
|
123
|
+
* @default true
|
|
124
|
+
*/
|
|
125
|
+
required?: boolean;
|
|
126
|
+
/**
|
|
127
|
+
* Column name for tenant filtering (e.g., 'organization_id', 'tenant_id').
|
|
128
|
+
* When specified with mode='auto-inject', provides tenant-scoped query helpers.
|
|
129
|
+
* @example
|
|
130
|
+
* column: 'organization_id'
|
|
131
|
+
*/
|
|
132
|
+
column?: string;
|
|
133
|
+
/**
|
|
134
|
+
* Tenant isolation mode.
|
|
135
|
+
* - 'auto-inject': Provides tenant-scoped query helpers in context (recommended)
|
|
136
|
+
* - 'manual': Developer must manually filter queries (for complex cases)
|
|
137
|
+
* @default 'manual'
|
|
138
|
+
*/
|
|
139
|
+
mode?: 'auto-inject' | 'manual';
|
|
140
|
+
/**
|
|
141
|
+
* Custom error message when tenant validation fails.
|
|
142
|
+
*/
|
|
143
|
+
errorMessage?: string;
|
|
144
|
+
}
|
|
145
|
+
export interface AuthStrategyContext {
|
|
146
|
+
request: ServeRequest;
|
|
147
|
+
endpoint?: EndpointMetadata;
|
|
148
|
+
}
|
|
149
|
+
export type AuthStrategy<TAuth extends AuthContext = AuthContext> = (context: AuthStrategyContext) => Promise<TAuth | null>;
|
|
150
|
+
export type EndpointContext<TInput = unknown, TContext extends Record<string, unknown> = Record<string, unknown>, TAuth extends AuthContext = AuthContext> = QueryRuntimeContext<TContext, TAuth> & {
|
|
151
|
+
input: TInput;
|
|
152
|
+
metadata: EndpointMetadata;
|
|
153
|
+
/** Extracted tenant ID if tenant config is enabled */
|
|
154
|
+
tenantId?: string;
|
|
155
|
+
};
|
|
156
|
+
export type EndpointHandler<TInput = unknown, TResult = unknown, TContext extends Record<string, unknown> = Record<string, unknown>, TAuth extends AuthContext = AuthContext> = (ctx: EndpointContext<TInput, TContext, TAuth>) => Promise<TResult>;
|
|
157
|
+
export type ServeMiddleware<TInput = unknown, TResult = unknown, TContext extends Record<string, unknown> = Record<string, unknown>, TAuth extends AuthContext = AuthContext> = (ctx: EndpointContext<TInput, TContext, TAuth>, next: () => Promise<TResult>) => Promise<TResult>;
|
|
158
|
+
export type SchemaInput<T extends ZodTypeAny | undefined> = T extends ZodTypeAny ? T["_input"] : unknown;
|
|
159
|
+
export type SchemaOutput<T extends ZodTypeAny | undefined> = T extends ZodTypeAny ? T["_output"] : unknown;
|
|
160
|
+
type ExtractServeQueries<TTarget, TContext extends Record<string, unknown> = Record<string, unknown>, TAuth extends AuthContext = AuthContext> = TTarget extends ServeBuilder<infer TQueries, any, any> ? TQueries : TTarget extends ServeQueriesMap<TContext, TAuth> ? TTarget : never;
|
|
161
|
+
type ServeQueryEntry<TTarget, TKey extends keyof ExtractServeQueries<TTarget, any, any>> = ExtractServeQueries<TTarget, any, any>[TKey];
|
|
162
|
+
export type InferExecutableQueryResult<TExecutable> = TExecutable extends QueryResolver<any, infer TResult, any, any> ? Awaited<TResult> : TExecutable extends {
|
|
163
|
+
run: QueryResolver<any, infer TResult, any, any>;
|
|
164
|
+
} ? Awaited<TResult> : never;
|
|
165
|
+
export type InferQueryInput<TTarget, TKey extends keyof ExtractServeQueries<TTarget, any, any>> = SchemaInput<ServeQueryEntry<TTarget, TKey>["inputSchema"]>;
|
|
166
|
+
export type InferQueryOutput<TTarget, TKey extends keyof ExtractServeQueries<TTarget, any, any>> = SchemaOutput<ServeQueryEntry<TTarget, TKey>["outputSchema"]>;
|
|
167
|
+
export type InferQueryResult<TTarget, TKey extends keyof ExtractServeQueries<TTarget, any, any>> = InferExecutableQueryResult<ServeQueryEntry<TTarget, TKey>["query"]>;
|
|
168
|
+
/**
|
|
169
|
+
* Infer the API type from a ServeBuilder for use with @hypequery/react.
|
|
170
|
+
*
|
|
171
|
+
* @example
|
|
172
|
+
* const api = define({ queries: { hello: ... } });
|
|
173
|
+
* type Api = InferApiType<typeof api>;
|
|
174
|
+
* createHooks<Api>({ baseUrl: '/api' });
|
|
175
|
+
*/
|
|
176
|
+
export type InferApiType<TTarget> = TTarget extends ServeBuilder<infer TQueries, any, any> ? {
|
|
177
|
+
[K in keyof TQueries]: TQueries[K] extends ServeEndpoint<infer TInputSchema, infer TOutputSchema, any, any, any> ? {
|
|
178
|
+
input: SchemaInput<TInputSchema>;
|
|
179
|
+
output: SchemaOutput<TOutputSchema>;
|
|
180
|
+
} : never;
|
|
181
|
+
} : never;
|
|
182
|
+
export type QueryRuntimeContext<TContext extends Record<string, unknown> = Record<string, unknown>, TAuth extends AuthContext = AuthContext> = {
|
|
183
|
+
request: ServeRequest;
|
|
184
|
+
auth: TAuth | null;
|
|
185
|
+
locals: Record<string, unknown>;
|
|
186
|
+
setCacheTtl: (ttlMs: number | null) => void;
|
|
187
|
+
} & TContext;
|
|
188
|
+
export interface QueryResolverArgs<TInput = unknown, TContext extends Record<string, unknown> = Record<string, unknown>, TAuth extends AuthContext = AuthContext> {
|
|
189
|
+
input: TInput;
|
|
190
|
+
ctx: QueryRuntimeContext<TContext, TAuth>;
|
|
191
|
+
}
|
|
192
|
+
export type QueryResolver<TInput = unknown, TResult = unknown, TContext extends Record<string, unknown> = Record<string, unknown>, TAuth extends AuthContext = AuthContext> = (args: QueryResolverArgs<TInput, TContext, TAuth>) => Promise<TResult>;
|
|
193
|
+
type QueryWrapper<TInput, TResult, TContext extends Record<string, unknown>, TAuth extends AuthContext> = QueryResolver<TInput, TResult, TContext, TAuth> | {
|
|
194
|
+
run: QueryResolver<TInput, TResult, TContext, TAuth>;
|
|
195
|
+
describe?: () => string;
|
|
196
|
+
};
|
|
197
|
+
export type ExecutableQuery<TInput = unknown, TResult = unknown, TContext extends Record<string, unknown> = Record<string, unknown>, TAuth extends AuthContext = AuthContext> = QueryWrapper<TInput, TResult, TContext, TAuth>;
|
|
198
|
+
export interface ServeEndpoint<TInputSchema extends ZodTypeAny | undefined = undefined, TOutputSchema extends ZodTypeAny = ZodTypeAny, TContext extends Record<string, unknown> = Record<string, unknown>, TAuth extends AuthContext = AuthContext, TResult = SchemaOutput<TOutputSchema>> {
|
|
199
|
+
key: string;
|
|
200
|
+
method: HttpMethod;
|
|
201
|
+
inputSchema?: TInputSchema;
|
|
202
|
+
outputSchema: TOutputSchema;
|
|
203
|
+
handler: EndpointHandler<SchemaInput<TInputSchema>, TResult, TContext, TAuth>;
|
|
204
|
+
query?: ExecutableQuery<SchemaInput<TInputSchema>, TResult, TContext, TAuth>;
|
|
205
|
+
middlewares: ServeMiddleware<SchemaInput<TInputSchema>, SchemaOutput<TOutputSchema>, TContext, TAuth>[];
|
|
206
|
+
auth?: AuthStrategy<TAuth> | null;
|
|
207
|
+
tenant?: TenantConfig<TAuth>;
|
|
208
|
+
metadata: EndpointMetadata;
|
|
209
|
+
cacheTtlMs?: number | null;
|
|
210
|
+
defaultHeaders?: Record<string, string>;
|
|
211
|
+
/** Roles required to access this endpoint. Checked after authentication. */
|
|
212
|
+
requiredRoles?: string[];
|
|
213
|
+
/** Scopes required to access this endpoint. Checked after authentication. */
|
|
214
|
+
requiredScopes?: string[];
|
|
215
|
+
}
|
|
216
|
+
export type ServeEndpointResult<TEndpoint extends ServeEndpoint<any, any, any, any>> = TEndpoint extends ServeEndpoint<any, any, any, any, infer TResult> ? TResult : never;
|
|
217
|
+
export interface ServeQueryConfig<TInputSchema extends ZodTypeAny | undefined = undefined, TOutputSchema extends ZodTypeAny = ZodTypeAny, TContext extends Record<string, unknown> = Record<string, unknown>, TAuth extends AuthContext = AuthContext, TResult = SchemaOutput<TOutputSchema>> {
|
|
218
|
+
key?: string;
|
|
219
|
+
query: ExecutableQuery<SchemaInput<TInputSchema>, TResult, TContext, TAuth>;
|
|
220
|
+
method?: HttpMethod;
|
|
221
|
+
name?: string;
|
|
222
|
+
summary?: string;
|
|
223
|
+
description?: string;
|
|
224
|
+
tags?: string[];
|
|
225
|
+
inputSchema?: TInputSchema;
|
|
226
|
+
outputSchema?: TOutputSchema;
|
|
227
|
+
middlewares?: ServeMiddleware<SchemaInput<TInputSchema>, SchemaOutput<TOutputSchema>, TContext, TAuth>[];
|
|
228
|
+
auth?: AuthStrategy<TAuth> | null;
|
|
229
|
+
/** Explicitly set whether authentication is required. Set by .requireAuth() or .public(). */
|
|
230
|
+
requiresAuth?: boolean;
|
|
231
|
+
tenant?: TenantConfig<TAuth>;
|
|
232
|
+
cacheTtlMs?: number | null;
|
|
233
|
+
/** Roles required to access this endpoint. Checked after authentication. */
|
|
234
|
+
requiredRoles?: string[];
|
|
235
|
+
/** Scopes required to access this endpoint. Checked after authentication. */
|
|
236
|
+
requiredScopes?: string[];
|
|
237
|
+
/** Custom metadata for application-specific use cases */
|
|
238
|
+
custom?: Record<string, unknown>;
|
|
239
|
+
}
|
|
240
|
+
export type ServeQueriesMap<TContext extends Record<string, unknown> = Record<string, unknown>, TAuth extends AuthContext = AuthContext> = Record<string, ServeQueryConfig<any, any, TContext, TAuth>>;
|
|
241
|
+
export type ServeEndpointMap<TQueries extends ServeQueriesMap<TContext, TAuth>, TContext extends Record<string, unknown>, TAuth extends AuthContext> = {
|
|
242
|
+
[TKey in keyof TQueries]: TQueries[TKey] extends ServeQueryConfig<infer TInputSchema, infer TOutputSchema, TContext, TAuth, infer TResult> ? ServeEndpoint<TInputSchema, TOutputSchema, TContext, TAuth, TResult> : ServeEndpoint<any, any, TContext, TAuth>;
|
|
243
|
+
};
|
|
244
|
+
export interface DocsOptions {
|
|
245
|
+
enabled?: boolean;
|
|
246
|
+
path?: string;
|
|
247
|
+
title?: string;
|
|
248
|
+
subtitle?: string;
|
|
249
|
+
darkMode?: boolean;
|
|
250
|
+
}
|
|
251
|
+
export interface OpenApiOptions {
|
|
252
|
+
enabled?: boolean;
|
|
253
|
+
path?: string;
|
|
254
|
+
version?: string;
|
|
255
|
+
info?: {
|
|
256
|
+
title: string;
|
|
257
|
+
description?: string;
|
|
258
|
+
termsOfService?: string;
|
|
259
|
+
contact?: {
|
|
260
|
+
name?: string;
|
|
261
|
+
url?: string;
|
|
262
|
+
email?: string;
|
|
263
|
+
};
|
|
264
|
+
license?: {
|
|
265
|
+
name: string;
|
|
266
|
+
url?: string;
|
|
267
|
+
};
|
|
268
|
+
};
|
|
269
|
+
servers?: Array<{
|
|
270
|
+
url: string;
|
|
271
|
+
description?: string;
|
|
272
|
+
}>;
|
|
273
|
+
}
|
|
274
|
+
export interface OpenApiDocument {
|
|
275
|
+
openapi: string;
|
|
276
|
+
info: {
|
|
277
|
+
title: string;
|
|
278
|
+
version: string;
|
|
279
|
+
description?: string;
|
|
280
|
+
termsOfService?: string;
|
|
281
|
+
contact?: {
|
|
282
|
+
name?: string;
|
|
283
|
+
url?: string;
|
|
284
|
+
email?: string;
|
|
285
|
+
};
|
|
286
|
+
license?: {
|
|
287
|
+
name: string;
|
|
288
|
+
url?: string;
|
|
289
|
+
};
|
|
290
|
+
};
|
|
291
|
+
servers: Array<{
|
|
292
|
+
url: string;
|
|
293
|
+
description?: string;
|
|
294
|
+
}>;
|
|
295
|
+
paths: Record<string, Record<string, unknown>>;
|
|
296
|
+
components?: {
|
|
297
|
+
securitySchemes?: Record<string, unknown>;
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
export interface ServeConfig<TContext extends Record<string, unknown> = Record<string, unknown>, TAuth extends AuthContext = AuthContext, TQueries extends ServeQueriesMap<TContext, TAuth> = ServeQueriesMap<TContext, TAuth>> {
|
|
301
|
+
queries: TQueries;
|
|
302
|
+
basePath?: string;
|
|
303
|
+
middlewares?: ServeMiddleware<any, any, TContext, TAuth>[];
|
|
304
|
+
auth?: AuthStrategy<TAuth> | AuthStrategy<TAuth>[];
|
|
305
|
+
/** Global tenant configuration applied to all queries (can be overridden per-query) */
|
|
306
|
+
tenant?: TenantConfig<TAuth>;
|
|
307
|
+
docs?: DocsOptions;
|
|
308
|
+
openapi?: OpenApiOptions;
|
|
309
|
+
context?: ServeContextFactory<TContext, TAuth>;
|
|
310
|
+
hooks?: ServeLifecycleHooks<TAuth>;
|
|
311
|
+
/**
|
|
312
|
+
* Enable query logging in production.
|
|
313
|
+
* - `true` — logs to console in human-readable text format
|
|
314
|
+
* - `'json'` — logs to console in structured JSON (for Datadog, CloudWatch, etc.)
|
|
315
|
+
* - `(event) => void` — custom callback
|
|
316
|
+
* - `false` / omitted — disabled (zero overhead)
|
|
317
|
+
*
|
|
318
|
+
* In development (`serveDev`), logging is always enabled regardless of this setting.
|
|
319
|
+
*/
|
|
320
|
+
queryLogging?: boolean | 'json' | ServeQueryEventCallback;
|
|
321
|
+
/**
|
|
322
|
+
* Warn when a query takes longer than this many milliseconds.
|
|
323
|
+
* Emits a console.warn with the endpoint key and duration.
|
|
324
|
+
* Only applies when `queryLogging` is enabled.
|
|
325
|
+
*/
|
|
326
|
+
slowQueryThreshold?: number;
|
|
327
|
+
/**
|
|
328
|
+
* Control verbosity of authentication/authorization error messages.
|
|
329
|
+
*
|
|
330
|
+
* - `true` — Detailed error messages that specify missing roles/scopes.
|
|
331
|
+
* Better developer experience during debugging, but leaks your authorization structure.
|
|
332
|
+
*
|
|
333
|
+
* - `false` (default) — Generic error messages ("Access denied", "Insufficient permissions").
|
|
334
|
+
* Recommended for all environments to prevent information leakage.
|
|
335
|
+
*
|
|
336
|
+
* @default false
|
|
337
|
+
*
|
|
338
|
+
* @example
|
|
339
|
+
* // Enable verbose errors for development
|
|
340
|
+
* const api = defineServe({
|
|
341
|
+
* queries,
|
|
342
|
+
* security: {
|
|
343
|
+
* verboseAuthErrors: true
|
|
344
|
+
* }
|
|
345
|
+
* });
|
|
346
|
+
*/
|
|
347
|
+
security?: {
|
|
348
|
+
verboseAuthErrors?: boolean;
|
|
349
|
+
};
|
|
350
|
+
}
|
|
351
|
+
export interface RouteRegistrationOptions<TContext extends Record<string, unknown> = Record<string, unknown>, TAuth extends AuthContext = AuthContext> {
|
|
352
|
+
method?: HttpMethod;
|
|
353
|
+
name?: string;
|
|
354
|
+
summary?: string;
|
|
355
|
+
description?: string;
|
|
356
|
+
tags?: string[];
|
|
357
|
+
middlewares?: ServeMiddleware<any, any, TContext, TAuth>[];
|
|
358
|
+
requiresAuth?: boolean;
|
|
359
|
+
visibility?: EndpointVisibility;
|
|
360
|
+
}
|
|
361
|
+
export interface StartServerOptions {
|
|
362
|
+
port?: number;
|
|
363
|
+
hostname?: string;
|
|
364
|
+
signal?: AbortSignal;
|
|
365
|
+
/** Whether to suppress internal logging. */
|
|
366
|
+
quiet?: boolean;
|
|
367
|
+
}
|
|
368
|
+
/**
|
|
369
|
+
* Type-safe function signature for executing queries programmatically.
|
|
370
|
+
* Used internally by the serve builder for direct query execution.
|
|
371
|
+
*/
|
|
372
|
+
export type ExecuteQueryFunction<TQueries extends Record<string, ServeEndpoint<any, any, any, any>>, TContext extends Record<string, unknown>, TAuth extends AuthContext> = <TKey extends keyof TQueries>(key: TKey, options?: {
|
|
373
|
+
input?: SchemaInput<TQueries[TKey]["inputSchema"]>;
|
|
374
|
+
context?: Partial<TContext>;
|
|
375
|
+
request?: Partial<ServeRequest>;
|
|
376
|
+
}) => Promise<ServeEndpointResult<TQueries[TKey]>>;
|
|
377
|
+
export interface ServeBuilder<TQueries extends Record<string, ServeEndpoint<any, any, any, any>> = Record<string, ServeEndpoint<any, any, any, any>>, TContext extends Record<string, unknown> = Record<string, unknown>, TAuth extends AuthContext = AuthContext> {
|
|
378
|
+
readonly queries: TQueries;
|
|
379
|
+
/** Serve-layer query logger for subscribing to endpoint execution events */
|
|
380
|
+
readonly queryLogger: ServeQueryLogger;
|
|
381
|
+
/** Internal route configuration mapping query names to their HTTP methods */
|
|
382
|
+
readonly _routeConfig?: Record<string, {
|
|
383
|
+
method: HttpMethod;
|
|
384
|
+
}>;
|
|
385
|
+
route<Path extends string, TKey extends keyof TQueries>(path: Path, endpoint: TQueries[TKey], options?: Partial<RouteRegistrationOptions<TContext, TAuth>>): this;
|
|
386
|
+
use(middleware: ServeMiddleware<any, any, TContext, TAuth>): this;
|
|
387
|
+
useAuth(strategy: AuthStrategy<TAuth>): this;
|
|
388
|
+
execute<TKey extends keyof TQueries>(key: TKey, options?: {
|
|
389
|
+
input?: SchemaInput<TQueries[TKey]["inputSchema"]>;
|
|
390
|
+
context?: Partial<TContext>;
|
|
391
|
+
request?: Partial<ServeRequest>;
|
|
392
|
+
}): Promise<ServeEndpointResult<TQueries[TKey]>>;
|
|
393
|
+
run<TKey extends keyof TQueries>(key: TKey, options?: {
|
|
394
|
+
input?: SchemaInput<TQueries[TKey]["inputSchema"]>;
|
|
395
|
+
context?: Partial<TContext>;
|
|
396
|
+
request?: Partial<ServeRequest>;
|
|
397
|
+
}): Promise<ServeEndpointResult<TQueries[TKey]>>;
|
|
398
|
+
describe(): ToolkitDescription;
|
|
399
|
+
handler: ServeHandler;
|
|
400
|
+
start(options?: StartServerOptions): Promise<ServeStartResult>;
|
|
401
|
+
}
|
|
402
|
+
export interface ServeInitializer<TContext extends Record<string, unknown> = Record<string, unknown>, TAuth extends AuthContext = AuthContext> {
|
|
403
|
+
readonly procedure: QueryProcedureBuilder<TContext, TAuth>;
|
|
404
|
+
readonly query: QueryProcedureBuilder<TContext, TAuth>;
|
|
405
|
+
queries<TQueries extends ServeQueriesMap<TContext, TAuth>>(queries: TQueries): TQueries;
|
|
406
|
+
define<TQueries extends ServeQueriesMap<TContext, TAuth>>(config: Omit<ServeConfig<TContext, TAuth, TQueries>, "context">): ServeBuilder<ServeEndpointMap<TQueries, TContext, TAuth>, TContext, TAuth>;
|
|
407
|
+
}
|
|
408
|
+
export interface QueryProcedureBuilder<TContext extends Record<string, unknown>, TAuth extends AuthContext, TInputSchema extends ZodTypeAny | undefined = undefined, TOutputSchema extends ZodTypeAny = ZodTypeAny> {
|
|
409
|
+
input<TNewInputSchema extends ZodTypeAny>(schema: TNewInputSchema): QueryProcedureBuilder<TContext, TAuth, TNewInputSchema, TOutputSchema>;
|
|
410
|
+
output<TNewOutputSchema extends ZodTypeAny>(schema: TNewOutputSchema): QueryProcedureBuilder<TContext, TAuth, TInputSchema, TNewOutputSchema>;
|
|
411
|
+
describe(description: string): QueryProcedureBuilder<TContext, TAuth, TInputSchema, TOutputSchema>;
|
|
412
|
+
name(name: string): QueryProcedureBuilder<TContext, TAuth, TInputSchema, TOutputSchema>;
|
|
413
|
+
summary(summary: string): QueryProcedureBuilder<TContext, TAuth, TInputSchema, TOutputSchema>;
|
|
414
|
+
tag(tag: string): QueryProcedureBuilder<TContext, TAuth, TInputSchema, TOutputSchema>;
|
|
415
|
+
tags(tags: string[]): QueryProcedureBuilder<TContext, TAuth, TInputSchema, TOutputSchema>;
|
|
416
|
+
method(method: HttpMethod): QueryProcedureBuilder<TContext, TAuth, TInputSchema, TOutputSchema>;
|
|
417
|
+
cache(ttlMs: number | null): QueryProcedureBuilder<TContext, TAuth, TInputSchema, TOutputSchema>;
|
|
418
|
+
auth(strategy: AuthStrategy<TAuth> | null): QueryProcedureBuilder<TContext, TAuth, TInputSchema, TOutputSchema>;
|
|
419
|
+
/**
|
|
420
|
+
* Require authentication for this endpoint.
|
|
421
|
+
* Equivalent to setting requiresAuth: true, but more explicit in the builder chain.
|
|
422
|
+
*/
|
|
423
|
+
requireAuth(): QueryProcedureBuilder<TContext, TAuth, TInputSchema, TOutputSchema>;
|
|
424
|
+
/**
|
|
425
|
+
* Require the authenticated user to have at least one of the specified roles.
|
|
426
|
+
* Implies requireAuth(). Returns 403 if the user lacks the required role.
|
|
427
|
+
* @example query.requireRole('admin', 'editor').query(...)
|
|
428
|
+
*/
|
|
429
|
+
requireRole(...roles: string[]): QueryProcedureBuilder<TContext, TAuth, TInputSchema, TOutputSchema>;
|
|
430
|
+
/**
|
|
431
|
+
* Require the authenticated user to have all of the specified scopes.
|
|
432
|
+
* Implies requireAuth(). Returns 403 if the user lacks a required scope.
|
|
433
|
+
* @example query.requireScope('read:metrics', 'read:users').query(...)
|
|
434
|
+
*/
|
|
435
|
+
requireScope(...scopes: string[]): QueryProcedureBuilder<TContext, TAuth, TInputSchema, TOutputSchema>;
|
|
436
|
+
/**
|
|
437
|
+
* Explicitly mark this endpoint as public (no auth required).
|
|
438
|
+
* Overrides global auth strategies for this endpoint.
|
|
439
|
+
*/
|
|
440
|
+
public(): QueryProcedureBuilder<TContext, TAuth, TInputSchema, TOutputSchema>;
|
|
441
|
+
tenant(config: TenantConfig<TAuth>): QueryProcedureBuilder<TContext, TAuth, TInputSchema, TOutputSchema>;
|
|
442
|
+
custom(custom: Record<string, unknown>): QueryProcedureBuilder<TContext, TAuth, TInputSchema, TOutputSchema>;
|
|
443
|
+
use(...middlewares: ServeMiddleware<SchemaInput<TInputSchema>, SchemaOutput<TOutputSchema>, TContext, TAuth>[]): QueryProcedureBuilder<TContext, TAuth, TInputSchema, TOutputSchema>;
|
|
444
|
+
query<TExecutable extends ExecutableQuery<SchemaInput<TInputSchema>, any, TContext, TAuth>>(executable: TExecutable): ServeQueryConfig<TInputSchema, TOutputSchema, TContext, TAuth, InferExecutableQueryResult<TExecutable>>;
|
|
445
|
+
}
|
|
446
|
+
export interface RequestLifecycleBase<TAuth extends AuthContext = AuthContext> {
|
|
447
|
+
requestId: string;
|
|
448
|
+
queryKey: string;
|
|
449
|
+
metadata: EndpointMetadata;
|
|
450
|
+
request: ServeRequest;
|
|
451
|
+
auth: TAuth | null;
|
|
452
|
+
}
|
|
453
|
+
export interface RequestStartEvent<TAuth extends AuthContext = AuthContext> extends RequestLifecycleBase<TAuth> {
|
|
454
|
+
}
|
|
455
|
+
export interface RequestEndEvent<TAuth extends AuthContext = AuthContext> extends RequestLifecycleBase<TAuth> {
|
|
456
|
+
durationMs: number;
|
|
457
|
+
result: unknown;
|
|
458
|
+
}
|
|
459
|
+
export interface RequestErrorEvent<TAuth extends AuthContext = AuthContext> extends RequestLifecycleBase<TAuth> {
|
|
460
|
+
durationMs: number;
|
|
461
|
+
error: unknown;
|
|
462
|
+
}
|
|
463
|
+
export interface AuthFailureEvent<TAuth extends AuthContext = AuthContext> extends RequestLifecycleBase<TAuth> {
|
|
464
|
+
reason: "MISSING" | "INVALID";
|
|
465
|
+
}
|
|
466
|
+
export interface AuthorizationFailureEvent<TAuth extends AuthContext = AuthContext> extends RequestLifecycleBase<TAuth> {
|
|
467
|
+
reason: "MISSING_ROLE" | "MISSING_SCOPE";
|
|
468
|
+
required: string[];
|
|
469
|
+
actual: string[];
|
|
470
|
+
}
|
|
471
|
+
export interface ServeLifecycleHooks<TAuth extends AuthContext = AuthContext> {
|
|
472
|
+
onRequestStart?: (event: RequestStartEvent<TAuth>) => MaybePromise<void>;
|
|
473
|
+
onRequestEnd?: (event: RequestEndEvent<TAuth>) => MaybePromise<void>;
|
|
474
|
+
onError?: (event: RequestErrorEvent<TAuth>) => MaybePromise<void>;
|
|
475
|
+
onAuthFailure?: (event: AuthFailureEvent<TAuth>) => MaybePromise<void>;
|
|
476
|
+
onAuthorizationFailure?: (event: AuthorizationFailureEvent<TAuth>) => MaybePromise<void>;
|
|
477
|
+
}
|
|
478
|
+
export interface ToolkitDescription {
|
|
479
|
+
basePath?: string;
|
|
480
|
+
queries: Array<ToolkitQueryDescription>;
|
|
481
|
+
}
|
|
482
|
+
export interface ToolkitQueryDescription {
|
|
483
|
+
key: string;
|
|
484
|
+
path: string;
|
|
485
|
+
method: HttpMethod;
|
|
486
|
+
name?: string;
|
|
487
|
+
summary?: string;
|
|
488
|
+
description?: string;
|
|
489
|
+
tags: string[];
|
|
490
|
+
visibility: EndpointVisibility;
|
|
491
|
+
requiresAuth: boolean;
|
|
492
|
+
requiresTenant?: boolean;
|
|
493
|
+
requiredRoles?: string[];
|
|
494
|
+
requiredScopes?: string[];
|
|
495
|
+
inputSchema?: unknown;
|
|
496
|
+
outputSchema?: unknown;
|
|
497
|
+
custom?: Record<string, unknown>;
|
|
498
|
+
}
|
|
499
|
+
export interface EndpointRegistry {
|
|
500
|
+
list(): ServeEndpoint<any, any, any, any>[];
|
|
501
|
+
register(endpoint: ServeEndpoint<any, any, any, any>): void;
|
|
502
|
+
match(method: HttpMethod, path: string): ServeEndpoint<any, any, any, any> | null;
|
|
503
|
+
}
|
|
504
|
+
export interface ServeStartResult {
|
|
505
|
+
stop(): Promise<void>;
|
|
506
|
+
}
|
|
507
|
+
export type FetchHandler = (request: Request) => Promise<Response>;
|
|
508
|
+
export type MaybePromise<T> = Promise<T> | T;
|
|
509
|
+
export type ServeContextFactory<TContext extends Record<string, unknown>, TAuth extends AuthContext> = TContext | ((options: {
|
|
510
|
+
request: ServeRequest;
|
|
511
|
+
auth: TAuth | null;
|
|
512
|
+
}) => MaybePromise<TContext>);
|
|
513
|
+
export {};
|
|
514
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist/utils.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,GAAI,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,GAAG,SAAS,GAAG,IAAI,KAAG,CAAC,EAKnE,CAAC;AAEF,eAAO,MAAM,SAAS,GAAI,UAAU,MAAM,EAAE,EAAE,OAAO,MAAM,EAAE,aAG5D,CAAC;AAEF,eAAO,MAAM,iBAAiB,QAAO,MAKpC,CAAC"}
|
package/dist/utils.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export const ensureArray = (value) => {
|
|
2
|
+
if (!value) {
|
|
3
|
+
return [];
|
|
4
|
+
}
|
|
5
|
+
return Array.isArray(value) ? value : [value];
|
|
6
|
+
};
|
|
7
|
+
export const mergeTags = (existing, next) => {
|
|
8
|
+
const merged = [...existing, ...(next ?? [])];
|
|
9
|
+
return Array.from(new Set(merged.filter(Boolean)));
|
|
10
|
+
};
|
|
11
|
+
export const generateRequestId = () => {
|
|
12
|
+
if (typeof globalThis.crypto?.randomUUID === 'function') {
|
|
13
|
+
return globalThis.crypto.randomUUID();
|
|
14
|
+
}
|
|
15
|
+
return `req_${Date.now()}_${Math.random().toString(36).substring(2, 11)}`;
|
|
16
|
+
};
|