@lovrozagar/honey 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1596 -6
- package/dist/accepts.d.ts +6 -0
- package/dist/accepts.d.ts.map +1 -0
- package/dist/body-limit.d.ts +22 -0
- package/dist/body-limit.d.ts.map +1 -0
- package/dist/build/index.d.ts +42 -0
- package/dist/build/index.d.ts.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/client/error.d.ts +14 -0
- package/dist/client/error.d.ts.map +1 -0
- package/dist/client/http.d.ts +88 -0
- package/dist/client/http.d.ts.map +1 -0
- package/dist/client/index.d.ts +22 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/sdk.d.ts +34 -0
- package/dist/client/sdk.d.ts.map +1 -0
- package/dist/client/sse.d.ts +10 -0
- package/dist/client/sse.d.ts.map +1 -0
- package/dist/client/types.d.ts +124 -0
- package/dist/client/types.d.ts.map +1 -0
- package/dist/client/ws.d.ts +15 -0
- package/dist/client/ws.d.ts.map +1 -0
- package/dist/client-mcp/server.d.ts +10 -0
- package/dist/client-mcp/server.d.ts.map +1 -0
- package/dist/client-mcp/types.d.ts +16 -0
- package/dist/client-mcp/types.d.ts.map +1 -0
- package/dist/cloudflare/realtime.d.ts +30 -0
- package/dist/cloudflare/realtime.d.ts.map +1 -0
- package/dist/codegen-go-cli.d.ts +22 -0
- package/dist/codegen-go-cli.d.ts.map +1 -0
- package/dist/codegen-go.d.ts +29 -0
- package/dist/codegen-go.d.ts.map +1 -0
- package/dist/codegen-hash.d.ts +3 -0
- package/dist/codegen-hash.d.ts.map +1 -0
- package/dist/codegen-ir.d.ts +123 -0
- package/dist/codegen-ir.d.ts.map +1 -0
- package/dist/codegen-loaders.d.ts +12 -0
- package/dist/codegen-loaders.d.ts.map +1 -0
- package/dist/codegen-mcp.d.ts +13 -0
- package/dist/codegen-mcp.d.ts.map +1 -0
- package/dist/codegen-python.d.ts +21 -0
- package/dist/codegen-python.d.ts.map +1 -0
- package/dist/codegen-rust.d.ts +18 -0
- package/dist/codegen-rust.d.ts.map +1 -0
- package/dist/codegen-sanitize.d.ts +3 -0
- package/dist/codegen-sanitize.d.ts.map +1 -0
- package/dist/codegen-schema-naming.d.ts +22 -0
- package/dist/codegen-schema-naming.d.ts.map +1 -0
- package/dist/codegen.d.ts +178 -0
- package/dist/codegen.d.ts.map +1 -0
- package/dist/context.d.ts +56 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/cookie-sign.d.ts +3 -0
- package/dist/cookie-sign.d.ts.map +1 -0
- package/dist/cookie.d.ts +12 -0
- package/dist/cookie.d.ts.map +1 -0
- package/dist/cors.d.ts +13 -0
- package/dist/cors.d.ts.map +1 -0
- package/dist/crypto.d.ts +2 -0
- package/dist/crypto.d.ts.map +1 -0
- package/dist/csrf.d.ts +9 -0
- package/dist/csrf.d.ts.map +1 -0
- package/dist/curl-logger.d.ts +33 -0
- package/dist/curl-logger.d.ts.map +1 -0
- package/dist/detect-runtime.d.ts +16 -0
- package/dist/detect-runtime.d.ts.map +1 -0
- package/dist/error.d.ts +21 -0
- package/dist/error.d.ts.map +1 -0
- package/dist/errors.d.ts +40 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/etag.d.ts +9 -0
- package/dist/etag.d.ts.map +1 -0
- package/dist/feature-load.d.ts +3 -0
- package/dist/feature-load.d.ts.map +1 -0
- package/dist/go-type-emitter.d.ts +33 -0
- package/dist/go-type-emitter.d.ts.map +1 -0
- package/dist/honey-response.d.ts +82 -0
- package/dist/honey-response.d.ts.map +1 -0
- package/dist/i18n-slot.d.ts +7 -0
- package/dist/i18n-slot.d.ts.map +1 -0
- package/dist/i18n.d.ts +26 -0
- package/dist/i18n.d.ts.map +1 -0
- package/dist/index.d.ts +470 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/init.d.ts +7 -0
- package/dist/init.d.ts.map +1 -0
- package/dist/input.d.ts +6 -0
- package/dist/input.d.ts.map +1 -0
- package/dist/ip-restrict.d.ts +12 -0
- package/dist/ip-restrict.d.ts.map +1 -0
- package/dist/logger.d.ts +45 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/meta-spec.d.ts +81 -0
- package/dist/meta-spec.d.ts.map +1 -0
- package/dist/middleware.d.ts +60 -0
- package/dist/middleware.d.ts.map +1 -0
- package/dist/node-request.d.ts +59 -0
- package/dist/node-request.d.ts.map +1 -0
- package/dist/node.d.ts +13 -0
- package/dist/node.d.ts.map +1 -0
- package/dist/openapi/register.d.ts +3 -0
- package/dist/openapi/register.d.ts.map +1 -0
- package/dist/openapi/scalar.d.ts +12 -0
- package/dist/openapi/scalar.d.ts.map +1 -0
- package/dist/openapi/spec-factory.d.ts +31 -0
- package/dist/openapi/spec-factory.d.ts.map +1 -0
- package/dist/openapi/spec.d.ts +19 -0
- package/dist/openapi/spec.d.ts.map +1 -0
- package/dist/openapi/swagger.d.ts +12 -0
- package/dist/openapi/swagger.d.ts.map +1 -0
- package/dist/plugin.d.ts +167 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/powered-by.d.ts +7 -0
- package/dist/powered-by.d.ts.map +1 -0
- package/dist/pretty-json.d.ts +10 -0
- package/dist/pretty-json.d.ts.map +1 -0
- package/dist/proxy.d.ts +51 -0
- package/dist/proxy.d.ts.map +1 -0
- package/dist/python-type-emitter.d.ts +11 -0
- package/dist/python-type-emitter.d.ts.map +1 -0
- package/dist/realtime/buffer.d.ts +18 -0
- package/dist/realtime/buffer.d.ts.map +1 -0
- package/dist/realtime/bus.d.ts +11 -0
- package/dist/realtime/bus.d.ts.map +1 -0
- package/dist/realtime/longpoll.d.ts +23 -0
- package/dist/realtime/longpoll.d.ts.map +1 -0
- package/dist/realtime/protocol.d.ts +50 -0
- package/dist/realtime/protocol.d.ts.map +1 -0
- package/dist/realtime/route.d.ts +42 -0
- package/dist/realtime/route.d.ts.map +1 -0
- package/dist/realtime/runtime.d.ts +74 -0
- package/dist/realtime/runtime.d.ts.map +1 -0
- package/dist/request-id.d.ts +12 -0
- package/dist/request-id.d.ts.map +1 -0
- package/dist/request-to-curl.d.ts +9 -0
- package/dist/request-to-curl.d.ts.map +1 -0
- package/dist/response.d.ts +57 -0
- package/dist/response.d.ts.map +1 -0
- package/dist/rust-type-emitter.d.ts +32 -0
- package/dist/rust-type-emitter.d.ts.map +1 -0
- package/dist/secure-headers.d.ts +16 -0
- package/dist/secure-headers.d.ts.map +1 -0
- package/dist/serve-register.d.ts +2 -0
- package/dist/serve-register.d.ts.map +1 -0
- package/dist/serve-slot.d.ts +6 -0
- package/dist/serve-slot.d.ts.map +1 -0
- package/dist/serve.d.ts +21 -0
- package/dist/serve.d.ts.map +1 -0
- package/dist/server-timing.d.ts +9 -0
- package/dist/server-timing.d.ts.map +1 -0
- package/dist/static.d.ts +12 -0
- package/dist/static.d.ts.map +1 -0
- package/dist/telemetry/otel.d.ts +59 -0
- package/dist/telemetry/otel.d.ts.map +1 -0
- package/dist/testing.d.ts +24 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/timeout.d.ts +7 -0
- package/dist/timeout.d.ts.map +1 -0
- package/dist/tree.d.ts +90 -0
- package/dist/tree.d.ts.map +1 -0
- package/dist/ts-type-emitter.d.ts +4 -0
- package/dist/ts-type-emitter.d.ts.map +1 -0
- package/dist/type-emitter.d.ts +8 -0
- package/dist/type-emitter.d.ts.map +1 -0
- package/dist/type-extractor.d.ts +39 -0
- package/dist/type-extractor.d.ts.map +1 -0
- package/dist/types.d.ts +451 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/validation.d.ts +18 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/ws/bun.d.ts +28 -0
- package/dist/ws/bun.d.ts.map +1 -0
- package/dist/ws/cloudflare.d.ts +55 -0
- package/dist/ws/cloudflare.d.ts.map +1 -0
- package/dist/ws/deno.d.ts +13 -0
- package/dist/ws/deno.d.ts.map +1 -0
- package/dist/ws/node.d.ts +10 -0
- package/dist/ws/node.d.ts.map +1 -0
- package/dist/yaml.d.ts +4 -0
- package/dist/yaml.d.ts.map +1 -0
- package/docs/api-ref/go.md +82 -82
- package/docs/api-ref/python.md +82 -82
- package/docs/api-ref/rust.md +82 -82
- package/docs/api-ref/typescript.md +82 -82
- package/docs/invalidate-spec.md +13 -13
- package/docs/meta-spec.md +513 -0
- package/docs/packaging.md +85 -0
- package/docs/sdk.md +87 -73
- package/package.json +195 -51
- package/src/body-limit.ts +2 -1
- package/src/build/index.ts +2 -9
- package/src/cli.ts +2 -3
- package/src/client/http.ts +204 -223
- package/src/client/index.ts +6 -14
- package/src/client/sdk.ts +24 -17
- package/src/client/types.ts +4 -9
- package/src/client/ws.ts +3 -5
- package/src/client-mcp/server.ts +1 -4
- package/src/cloudflare/realtime.ts +8 -10
- package/src/codegen-go-cli.ts +74 -67
- package/src/codegen-go.ts +71 -51
- package/src/codegen-ir.ts +16 -27
- package/src/codegen-loaders.ts +5 -8
- package/src/codegen-mcp.ts +9 -27
- package/src/codegen-python.ts +47 -27
- package/src/codegen-rust.ts +110 -66
- package/src/codegen-sanitize.ts +1 -7
- package/src/codegen-schema-naming.ts +8 -2
- package/src/codegen.ts +299 -196
- package/src/context.ts +91 -95
- package/src/cookie-sign.ts +5 -13
- package/src/cookie.ts +1 -2
- package/src/cors.ts +4 -6
- package/src/crypto.ts +1 -4
- package/src/csrf.ts +3 -3
- package/src/curl-logger.ts +14 -32
- package/src/detect-runtime.ts +1 -3
- package/src/errors.ts +1 -3
- package/src/etag.ts +3 -4
- package/src/go-type-emitter.ts +45 -40
- package/src/honey-response.ts +1 -3
- package/src/i18n.ts +3 -12
- package/src/index.ts +1168 -1412
- package/src/ip-restrict.ts +2 -1
- package/src/logger.ts +13 -13
- package/src/meta-spec.ts +0 -0
- package/src/middleware.ts +111 -79
- package/src/node-request.ts +2 -1
- package/src/node.ts +9 -10
- package/src/openapi/register.ts +1 -2
- package/src/openapi/scalar.ts +9 -9
- package/src/openapi/spec-factory.ts +2 -2
- package/src/openapi/spec.ts +26 -19
- package/src/openapi/swagger.ts +9 -9
- package/src/plugin.ts +226 -256
- package/src/powered-by.ts +2 -1
- package/src/pretty-json.ts +2 -1
- package/src/proxy.ts +1 -3
- package/src/python-type-emitter.ts +37 -12
- package/src/realtime/route.ts +1 -1
- package/src/realtime/runtime.ts +9 -12
- package/src/request-id.ts +3 -4
- package/src/request-to-curl.ts +1 -4
- package/src/response.ts +150 -199
- package/src/rust-type-emitter.ts +66 -25
- package/src/secure-headers.ts +2 -1
- package/src/serve.ts +3 -12
- package/src/server-timing.ts +2 -1
- package/src/static.ts +3 -4
- package/src/telemetry/otel.ts +1 -6
- package/src/testing.ts +2 -11
- package/src/timeout.ts +2 -1
- package/src/tree.ts +12 -27
- package/src/ts-type-emitter.ts +71 -15
- package/src/type-emitter.ts +226 -237
- package/src/type-extractor.ts +260 -334
- package/src/types.ts +168 -68
- package/src/validation.ts +7 -30
- package/src/ws/bun.ts +2 -9
- package/src/ws/cloudflare.ts +13 -16
- package/src/ws/deno.ts +31 -40
- package/src/ws/node.ts +4 -19
package/src/powered-by.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { namedMiddleware } from "./middleware.ts"
|
|
1
2
|
import type { MiddlewareFn } from "./middleware.ts"
|
|
2
3
|
|
|
3
4
|
type PoweredByOptions = {
|
|
@@ -13,5 +14,5 @@ export function poweredBy(options?: PoweredByOptions): MiddlewareFn<{}, {}> {
|
|
|
13
14
|
return response
|
|
14
15
|
}
|
|
15
16
|
|
|
16
|
-
return mw
|
|
17
|
+
return namedMiddleware("poweredBy", mw)
|
|
17
18
|
}
|
package/src/pretty-json.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { namedMiddleware } from "./middleware.ts"
|
|
1
2
|
import { replaceResponse } from "./honey-response.ts"
|
|
2
3
|
import type { MiddlewareFn } from "./middleware.ts"
|
|
3
4
|
|
|
@@ -35,5 +36,5 @@ export function prettyJson(options?: PrettyJsonOptions): MiddlewareFn<{ req: Req
|
|
|
35
36
|
})
|
|
36
37
|
}
|
|
37
38
|
|
|
38
|
-
return mw
|
|
39
|
+
return namedMiddleware("prettyJson", mw)
|
|
39
40
|
}
|
package/src/proxy.ts
CHANGED
|
@@ -57,9 +57,7 @@ export type ProxyConfig<TCtx> = {
|
|
|
57
57
|
* compatibility with { path, req }. At runtime ctx is always HoneyContext
|
|
58
58
|
* which has both fields — we access them via property access on the object.
|
|
59
59
|
*/
|
|
60
|
-
export function createProxyHandler<TCtx>(
|
|
61
|
-
config: ProxyConfig<TCtx>,
|
|
62
|
-
): (ctx: TCtx) => Promise<Response> {
|
|
60
|
+
export function createProxyHandler<TCtx>(config: ProxyConfig<TCtx>): (ctx: TCtx) => Promise<Response> {
|
|
63
61
|
const timeoutOpt = config.timeout ?? 30_000
|
|
64
62
|
|
|
65
63
|
return async (ctx: TCtx) => {
|
|
@@ -2,11 +2,41 @@ import { schemaToIR } from "./codegen-ir.ts"
|
|
|
2
2
|
import type { IRField, IRSchema } from "./codegen-ir.ts"
|
|
3
3
|
|
|
4
4
|
const PY_RESERVED = new Set([
|
|
5
|
-
"False",
|
|
6
|
-
"
|
|
7
|
-
"
|
|
8
|
-
"
|
|
9
|
-
"
|
|
5
|
+
"False",
|
|
6
|
+
"None",
|
|
7
|
+
"True",
|
|
8
|
+
"and",
|
|
9
|
+
"as",
|
|
10
|
+
"assert",
|
|
11
|
+
"async",
|
|
12
|
+
"await",
|
|
13
|
+
"break",
|
|
14
|
+
"class",
|
|
15
|
+
"continue",
|
|
16
|
+
"def",
|
|
17
|
+
"del",
|
|
18
|
+
"elif",
|
|
19
|
+
"else",
|
|
20
|
+
"except",
|
|
21
|
+
"finally",
|
|
22
|
+
"for",
|
|
23
|
+
"from",
|
|
24
|
+
"global",
|
|
25
|
+
"if",
|
|
26
|
+
"import",
|
|
27
|
+
"in",
|
|
28
|
+
"is",
|
|
29
|
+
"lambda",
|
|
30
|
+
"nonlocal",
|
|
31
|
+
"not",
|
|
32
|
+
"or",
|
|
33
|
+
"pass",
|
|
34
|
+
"raise",
|
|
35
|
+
"return",
|
|
36
|
+
"try",
|
|
37
|
+
"while",
|
|
38
|
+
"with",
|
|
39
|
+
"yield",
|
|
10
40
|
])
|
|
11
41
|
|
|
12
42
|
/** Suffix reserved words with `_` per PEP 8 convention. */
|
|
@@ -32,9 +62,7 @@ function formatConstPy(v: string | number | boolean): string {
|
|
|
32
62
|
|
|
33
63
|
function emitScalarPy(ir: Extract<IRSchema, { kind: "scalar" }>): string {
|
|
34
64
|
if (ir.enum) {
|
|
35
|
-
const members = ir.enum
|
|
36
|
-
.map((v) => (typeof v === "string" ? JSON.stringify(v) : String(v)))
|
|
37
|
-
.join(", ")
|
|
65
|
+
const members = ir.enum.map((v) => (typeof v === "string" ? JSON.stringify(v) : String(v))).join(", ")
|
|
38
66
|
return `Literal[${members}]`
|
|
39
67
|
}
|
|
40
68
|
return primitiveToPy(ir.type)
|
|
@@ -135,10 +163,7 @@ export function irToPython(ir: IRSchema, depth = 0): string {
|
|
|
135
163
|
}
|
|
136
164
|
|
|
137
165
|
/** Thin shim — delegates to irToPython(schemaToIR(schema), depth). */
|
|
138
|
-
export function jsonSchemaToPy(
|
|
139
|
-
schema: Record<string, unknown> | undefined,
|
|
140
|
-
depth = 0,
|
|
141
|
-
): string {
|
|
166
|
+
export function jsonSchemaToPy(schema: Record<string, unknown> | undefined, depth = 0): string {
|
|
142
167
|
if (!schema || depth > 8) return "Any"
|
|
143
168
|
return irToPython(schemaToIR(schema), depth)
|
|
144
169
|
}
|
package/src/realtime/route.ts
CHANGED
|
@@ -91,7 +91,7 @@ export function createConnContext(opts: {
|
|
|
91
91
|
|
|
92
92
|
Object.defineProperty(conn, "on", {
|
|
93
93
|
enumerable: true,
|
|
94
|
-
value(event: "message" | "close", handler: (
|
|
94
|
+
value(event: "message" | "close", handler: (...args: unknown[]) => void) {
|
|
95
95
|
if (event === "message") {
|
|
96
96
|
handlers.message = handler as (payload: unknown) => void
|
|
97
97
|
} else {
|
package/src/realtime/runtime.ts
CHANGED
|
@@ -153,10 +153,7 @@ export function createKeepaliveLoop(opts: {
|
|
|
153
153
|
|
|
154
154
|
const DEFAULT_FALLBACK_TIMEOUT = 3000
|
|
155
155
|
|
|
156
|
-
export function createFallbackChain(opts: {
|
|
157
|
-
transports: TransportAdapter[]
|
|
158
|
-
timeout?: number
|
|
159
|
-
}): {
|
|
156
|
+
export function createFallbackChain(opts: { transports: TransportAdapter[]; timeout?: number }): {
|
|
160
157
|
connect(url: string, transportOpts: TransportOpts): Promise<{ conn: TransportConnection; transport: Transport }>
|
|
161
158
|
readonly provenTransport: Transport | null
|
|
162
159
|
} {
|
|
@@ -222,7 +219,6 @@ export function createFallbackChain(opts: {
|
|
|
222
219
|
transportOpts: TransportOpts,
|
|
223
220
|
transports: TransportAdapter[],
|
|
224
221
|
): Promise<{ conn: TransportConnection; transport: Transport }> {
|
|
225
|
-
|
|
226
222
|
/* If we have a proven transport, try it first (it's at a specific index) */
|
|
227
223
|
if (proven !== null) {
|
|
228
224
|
/* proven refers to index position — try that adapter directly */
|
|
@@ -280,10 +276,7 @@ export type ResumableConnectionOpts = {
|
|
|
280
276
|
keepaliveInterval?: number
|
|
281
277
|
}
|
|
282
278
|
|
|
283
|
-
type QueueEntry =
|
|
284
|
-
| { type: "value"; value: unknown }
|
|
285
|
-
| { type: "done" }
|
|
286
|
-
| { type: "error"; error: unknown }
|
|
279
|
+
type QueueEntry = { type: "value"; value: unknown } | { type: "done" } | { type: "error"; error: unknown }
|
|
287
280
|
|
|
288
281
|
export function createResumableConnection(opts: ResumableConnectionOpts): {
|
|
289
282
|
readonly state: ConnectionState
|
|
@@ -350,9 +343,13 @@ export function createResumableConnection(opts: ResumableConnectionOpts): {
|
|
|
350
343
|
|
|
351
344
|
/* Listen for abort signal */
|
|
352
345
|
if (opts.signal && !opts.signal.aborted) {
|
|
353
|
-
opts.signal.addEventListener(
|
|
354
|
-
|
|
355
|
-
|
|
346
|
+
opts.signal.addEventListener(
|
|
347
|
+
"abort",
|
|
348
|
+
() => {
|
|
349
|
+
handleAbort()
|
|
350
|
+
},
|
|
351
|
+
{ once: true },
|
|
352
|
+
)
|
|
356
353
|
}
|
|
357
354
|
|
|
358
355
|
function startConnection(): void {
|
package/src/request-id.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { namedMiddleware } from "./middleware.ts"
|
|
1
2
|
import type { MiddlewareFn } from "./middleware.ts"
|
|
2
3
|
|
|
3
4
|
type RequestIdOptions = {
|
|
@@ -5,9 +6,7 @@ type RequestIdOptions = {
|
|
|
5
6
|
header?: string
|
|
6
7
|
}
|
|
7
8
|
|
|
8
|
-
export function requestId(
|
|
9
|
-
options?: RequestIdOptions,
|
|
10
|
-
): MiddlewareFn<{ req: Request }, { requestId: string }> {
|
|
9
|
+
export function requestId(options?: RequestIdOptions): MiddlewareFn<{ req: Request }, { requestId: string }> {
|
|
11
10
|
const headerName = options?.header ?? "x-request-id"
|
|
12
11
|
const generate = options?.generator ?? (() => crypto.randomUUID())
|
|
13
12
|
|
|
@@ -19,5 +18,5 @@ export function requestId(
|
|
|
19
18
|
return response
|
|
20
19
|
}
|
|
21
20
|
|
|
22
|
-
return mw
|
|
21
|
+
return namedMiddleware("requestId", mw)
|
|
23
22
|
}
|
package/src/request-to-curl.ts
CHANGED
|
@@ -10,10 +10,7 @@ function shellEscape(value: string): string {
|
|
|
10
10
|
* Convert a native Request into a curl command string.
|
|
11
11
|
* The request is cloned so reading the body does not consume the original stream.
|
|
12
12
|
*/
|
|
13
|
-
export async function requestToCurl(
|
|
14
|
-
request: Request,
|
|
15
|
-
options?: RequestToCurlOptions,
|
|
16
|
-
): Promise<string> {
|
|
13
|
+
export async function requestToCurl(request: Request, options?: RequestToCurlOptions): Promise<string> {
|
|
17
14
|
const clonedRequest = request.clone()
|
|
18
15
|
const parts: string[] = [`curl -X ${clonedRequest.method}`]
|
|
19
16
|
|