castrum 0.7.0 → 0.9.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/LICENSE +21 -0
- package/README.md +322 -59
- package/castrum.linux-x64-gnu.node +0 -0
- package/dist/index.d.ts +3161 -0
- package/dist/index.js +7306 -0
- package/docs/ARCHITECTURE.md +415 -0
- package/docs/BENCHMARKS.md +307 -0
- package/docs/ENVIRONMENT.md +79 -0
- package/docs/GETTING_STARTED.md +209 -0
- package/docs/INGRESS.md +745 -0
- package/docs/REPO_MAP.md +259 -0
- package/docs/adr/0001-two-wire-formats.md +39 -0
- package/docs/adr/0002-zero-dom-fast-schema.md +38 -0
- package/docs/adr/0003-bun-builtins-delegation.md +42 -0
- package/docs/bun-builtins-decision-matrix.md +108 -0
- package/index.ts +51 -8
- package/package.json +73 -20
- package/src/data/json-rows.ts +13 -13
- package/src/ingress/body.ts +149 -0
- package/src/ingress/constants.ts +220 -48
- package/src/ingress/context.ts +136 -0
- package/src/ingress/decode/baked-result.ts +121 -0
- package/src/ingress/decode/fast-result.ts +160 -0
- package/src/ingress/decode/packed-sections.ts +56 -0
- package/src/ingress/decode/result-base.ts +172 -0
- package/src/ingress/errors.ts +72 -0
- package/src/ingress/fast.ts +152 -1021
- package/src/ingress/handlers.ts +563 -1001
- package/src/ingress/headers/baked-templates.ts +102 -0
- package/src/ingress/headers/cors.ts +44 -0
- package/src/ingress/headers/fast-templates.ts +238 -0
- package/src/ingress/headers/hsts.ts +83 -0
- package/src/ingress/health.ts +67 -0
- package/src/ingress/index.ts +130 -405
- package/src/ingress/metrics.ts +132 -0
- package/src/ingress/options.ts +197 -0
- package/src/ingress/packing/gather-raw-headers.ts +75 -0
- package/src/ingress/packing/header-packing.ts +75 -0
- package/src/ingress/packing/input-packer.ts +150 -0
- package/src/ingress/packing/scratch.ts +50 -0
- package/src/ingress/packing/select-headers.ts +96 -0
- package/src/ingress/response/error-bodies.ts +75 -0
- package/src/ingress/response/terminal.ts +59 -0
- package/src/ingress/routes/common.ts +38 -0
- package/src/ingress/routes/delete.ts +14 -0
- package/src/ingress/routes/echo.ts +107 -0
- package/src/ingress/routes/fallback.ts +23 -0
- package/src/ingress/routes/head.ts +37 -0
- package/src/ingress/routes/index.ts +10 -0
- package/src/ingress/routes/json-write.ts +153 -0
- package/src/ingress/routes/options.ts +36 -0
- package/src/ingress/routes/read.ts +45 -0
- package/src/ingress/server-node.ts +376 -0
- package/src/ingress/server.ts +443 -0
- package/src/ingress/shared.ts +132 -0
- package/src/ingress/status.ts +97 -0
- package/src/ingress/types.ts +157 -0
- package/src/integration/batch.ts +58 -0
- package/src/integration/index.ts +29 -0
- package/src/integration/pipeline.ts +217 -0
- package/src/integration/streaming.ts +79 -0
- package/src/integration/websocket.ts +92 -0
- package/src/loader/batch.ts +133 -0
- package/src/loader/cost.ts +104 -0
- package/src/loader/index.ts +930 -0
- package/src/loader/ops.ts +657 -0
- package/src/native/ffi.ts +1541 -0
- package/src/native/index.ts +8 -207
- package/src/native/loader.ts +194 -0
- package/src/native/types.ts +598 -0
- package/src/rust-ffi/addon.ts +10 -0
- package/src/rust-ffi/batch.ts +431 -0
- package/src/rust-ffi/client.ts +88 -0
- package/src/rust-ffi/context.ts +164 -0
- package/src/rust-ffi/index.ts +40 -541
- package/src/rust-ffi/options.ts +113 -0
- package/src/rust-ffi/packed.ts +253 -0
- package/src/rust-ffi/proven.ts +42 -0
- package/src/rust-ffi/scalar/crypto.ts +265 -0
- package/src/rust-ffi/scalar/factories.ts +233 -0
- package/src/rust-ffi/scalar/hashing.ts +72 -0
- package/src/rust-ffi/scalar/http.ts +206 -0
- package/src/rust-ffi/scalar/index.ts +31 -0
- package/src/rust-ffi/scalar/interface.ts +450 -0
- package/src/rust-ffi/scalar/json.ts +45 -0
- package/src/rust-ffi/scalar/payload.ts +124 -0
- package/src/rust-ffi/text.ts +95 -0
- package/src/selection.json +194 -0
- package/src/selection.ts +77 -0
- package/src/shared/adaptive.ts +68 -0
- package/src/shared/bench-classify.ts +209 -0
- package/src/shared/buffer-pool.ts +209 -0
- package/src/shared/bytes.ts +35 -5
- package/src/shared/env.ts +20 -0
- package/src/shared/log.ts +74 -0
- package/src/shared/metrics.ts +247 -0
- package/src/shared/packed.ts +350 -154
- package/src/shared/proven.ts +596 -0
- package/src/shared/request-id.ts +67 -0
- package/src/shared/response.ts +104 -0
- package/src/shared/runtime.ts +34 -0
- package/src/shared/trace.ts +81 -0
- package/src/shared/uuid.ts +31 -0
- package/Cargo.toml +0 -73
- package/bench.ts +0 -3
- package/rust/batch.rs +0 -195
- package/rust/cookie_parser.rs +0 -70
- package/rust/cors.rs +0 -263
- package/rust/hashing.rs +0 -164
- package/rust/headers.rs +0 -234
- package/rust/hmac_sha256.rs +0 -113
- package/rust/http_parser.rs +0 -132
- package/rust/ingress.rs +0 -616
- package/rust/ingress_constants.rs +0 -89
- package/rust/ip_trust.rs +0 -185
- package/rust/json_ops.rs +0 -66
- package/rust/json_patch_ops.rs +0 -25
- package/rust/json_schema.rs +0 -151
- package/rust/json_ser.rs +0 -429
- package/rust/lib.rs +0 -48
- package/rust/method.rs +0 -141
- package/rust/mime_lookup.rs +0 -76
- package/rust/output.rs +0 -238
- package/rust/proxy.rs +0 -90
- package/rust/query_parser.rs +0 -141
- package/rust/random_token.rs +0 -52
- package/rust/rate_limit.rs +0 -203
- package/rust/terminal.rs +0 -95
- package/rust/unit_tests.rs +0 -843
- package/rust/url_codec.rs +0 -133
- package/rust/util.rs +0 -537
- package/rust/validation.rs +0 -107
- package/rust/websocket.rs +0 -23
- package/src/baseline/index.ts +0 -12
- package/src/baseline/tasks/cookie.ts +0 -22
- package/src/baseline/tasks/hashing.ts +0 -18
- package/src/baseline/tasks/hmac.ts +0 -38
- package/src/baseline/tasks/http.ts +0 -62
- package/src/baseline/tasks/json-patch.ts +0 -12
- package/src/baseline/tasks/json.ts +0 -50
- package/src/baseline/tasks/mime.ts +0 -5
- package/src/baseline/tasks/query.ts +0 -14
- package/src/baseline/tasks/token.ts +0 -15
- package/src/baseline/tasks/url.ts +0 -11
- package/src/baseline/tasks/validation.ts +0 -19
- package/src/baseline/tasks/websocket.ts +0 -14
- package/src/bench/assert.ts +0 -70
- package/src/bench/checks.ts +0 -227
- package/src/bench/checksum.ts +0 -27
- package/src/bench/comparisons.ts +0 -70
- package/src/bench/concurrent-worker.ts +0 -135
- package/src/bench/fixtures.ts +0 -233
- package/src/bench/index.ts +0 -2
- package/src/bench/measure.ts +0 -177
- package/src/bench/now.ts +0 -3
- package/src/bench/report.ts +0 -79
- package/src/bench/run.ts +0 -57
- package/src/bench/tasks/complex.ts +0 -232
- package/src/bench/tasks/concurrent.ts +0 -213
- package/src/bench/tasks/cookie.ts +0 -44
- package/src/bench/tasks/hashing.ts +0 -33
- package/src/bench/tasks/hmac.ts +0 -36
- package/src/bench/tasks/http.ts +0 -50
- package/src/bench/tasks/index.ts +0 -52
- package/src/bench/tasks/json-patch.ts +0 -21
- package/src/bench/tasks/json.ts +0 -33
- package/src/bench/tasks/mime.ts +0 -21
- package/src/bench/tasks/query.ts +0 -44
- package/src/bench/tasks/stress.ts +0 -142
- package/src/bench/tasks/token.ts +0 -20
- package/src/bench/tasks/url.ts +0 -34
- package/src/bench/tasks/validation.ts +0 -57
- package/src/bench/tasks/websocket.ts +0 -21
- package/src/bench/types.ts +0 -60
- package/src/ingress/packed-input.ts +0 -59
- package/src/shared/json.ts +0 -18
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
// src/ingress/errors.ts — Fast-path error-code → name/message mapping.
|
|
2
|
+
//
|
|
3
|
+
// The pre-baked path keeps its own error bodies in ./response/error-bodies.ts
|
|
4
|
+
// because it emits a different wire format ({"ok":false,"error":{...}}), so
|
|
5
|
+
// the two mappings are intentionally not unified (see AGENTS.md).
|
|
6
|
+
|
|
7
|
+
import {
|
|
8
|
+
ERR_CODE_NONE,
|
|
9
|
+
ERR_CODE_CORS_PREFLIGHT,
|
|
10
|
+
ERR_CODE_RATE_LIMITED,
|
|
11
|
+
ERR_CODE_BODY_TOO_LARGE,
|
|
12
|
+
ERR_CODE_INVALID_JSON,
|
|
13
|
+
ERR_CODE_SCHEMA_VALIDATION,
|
|
14
|
+
ERR_CODE_BAD_REQUEST,
|
|
15
|
+
ERR_CODE_REQUEST_TOO_LARGE,
|
|
16
|
+
ERR_CODE_REQUEST_TIMEOUT,
|
|
17
|
+
ERR_CODE_INTERNAL,
|
|
18
|
+
} from './constants'
|
|
19
|
+
|
|
20
|
+
/** Map a native error code to its stable string name. */
|
|
21
|
+
export function errorCodeName(code: number): string {
|
|
22
|
+
switch (code) {
|
|
23
|
+
case ERR_CODE_NONE:
|
|
24
|
+
return 'none'
|
|
25
|
+
case ERR_CODE_CORS_PREFLIGHT:
|
|
26
|
+
return 'cors_preflight'
|
|
27
|
+
case ERR_CODE_RATE_LIMITED:
|
|
28
|
+
return 'rate_limited'
|
|
29
|
+
case ERR_CODE_BODY_TOO_LARGE:
|
|
30
|
+
return 'body_too_large'
|
|
31
|
+
case ERR_CODE_INVALID_JSON:
|
|
32
|
+
return 'invalid_json'
|
|
33
|
+
case ERR_CODE_SCHEMA_VALIDATION:
|
|
34
|
+
return 'schema_validation'
|
|
35
|
+
case ERR_CODE_BAD_REQUEST:
|
|
36
|
+
return 'bad_request'
|
|
37
|
+
case ERR_CODE_REQUEST_TOO_LARGE:
|
|
38
|
+
return 'request_too_large'
|
|
39
|
+
case ERR_CODE_REQUEST_TIMEOUT:
|
|
40
|
+
return 'request_timeout'
|
|
41
|
+
case ERR_CODE_INTERNAL:
|
|
42
|
+
return 'internal'
|
|
43
|
+
default:
|
|
44
|
+
return 'unknown'
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/** Map a native error code (plus status context) to a human message. */
|
|
49
|
+
export function errorMessage(status: number, code: number): string {
|
|
50
|
+
switch (code) {
|
|
51
|
+
case ERR_CODE_CORS_PREFLIGHT:
|
|
52
|
+
return 'CORS preflight rejected'
|
|
53
|
+
case ERR_CODE_RATE_LIMITED:
|
|
54
|
+
return 'Too many requests'
|
|
55
|
+
case ERR_CODE_BODY_TOO_LARGE:
|
|
56
|
+
return 'Request body too large'
|
|
57
|
+
case ERR_CODE_INVALID_JSON:
|
|
58
|
+
return 'Invalid JSON body'
|
|
59
|
+
case ERR_CODE_SCHEMA_VALIDATION:
|
|
60
|
+
return 'JSON schema validation failed'
|
|
61
|
+
case ERR_CODE_BAD_REQUEST:
|
|
62
|
+
return 'Bad request'
|
|
63
|
+
case ERR_CODE_REQUEST_TOO_LARGE:
|
|
64
|
+
return 'Request too large'
|
|
65
|
+
case ERR_CODE_REQUEST_TIMEOUT:
|
|
66
|
+
return 'Request body read timed out'
|
|
67
|
+
case ERR_CODE_INTERNAL:
|
|
68
|
+
return 'Internal server error'
|
|
69
|
+
default:
|
|
70
|
+
return status >= 500 ? 'Internal server error' : 'Request rejected'
|
|
71
|
+
}
|
|
72
|
+
}
|