Skip to main content

TypeScript Parity

The initial parity baseline is @cdot65/prisma-airs-sdk 0.34.0 at 4a80dbdb3dc14365e1c25d838ac0bd139485d48c. Its immutable inventory contains 2,630 root exports and 1,190 public members: 3,820 capabilities. The separate native ledger is contracts/native-exports.json; the frozen classification is preserved as source evidence.

Every native row records its exact frozen identity/declarations, concrete public Rust paths, actual Cargo feature requirements, source and test bindings, explicit language adaptations and an external public compile probe. Missing or deferred adapters remain errors. Source-proposed features are retained separately from actual native features: shared validation is available in the core, model contracts through models, and product clients through their named features.

TypeScript 0.35.0 profile addition​

The 0.2.4 release adds two directional-profile types, two named schemas and five typed field occurrences through a separate additive ledger. The historical 3,820 capabilities and 448 methods remain scoped to TypeScript 0.34.0. See directional profiles for current request validation, tolerant Rust responses and the unverified directional service scope.

Three kinds of proof​

EvidenceWhat it establishes
Named-schema Zod oracleAll exported validators, normalization, defaults, refinements and typed non-JSON boundaries
Native model and operation contractsTyped wire round trips, unknown values, exact endpoints/headers/bodies/queries and lifecycle behavior
Public export probesEvery mapped public type, generic instantiation, field, constructor, accessor, function and constant is reachable outside library privacy

The generated integration test contains one explicit probe per frozen capability. contracts/native-probes is a separate Cargo package with the same probes. It uses only public SDK APIs, enables the implemented features, and preserves the reviewed root dependency versions/checksums. Its execution performs local validation and literal assertions; lazy constructor/function probes never dispatch service calls. The wrapper removes PANW/AIRS/SCM environment variables and records the actual compiler host. This evidence establishes public API availability and literal contracts; live service acceptance remains a separate denominator.

Manual adapter mappings reside in contracts/native-capability-mappings. Concrete operation mappings and model generation supply the remaining rows. The generator rejects unknown/duplicate IDs, missing verification functions, unrelated probes, stale source pins, missing public methods and incomplete adapters. The compiled consumer detects private, incorrectly qualified or nonexistent public paths.

Run:

python tools/native_exports.py --check
python -m unittest discover -s tools -p test_native_exports.py -v
python scripts/check-native-exports.py --toolchain 1.99.0

Regenerate with python tools/native_exports.py after reviewed source or adapter changes. This emits the ledger, integration probes, standalone consumer and its locked dependency graph together. No consumer requires the development TypeScript baseline or Node tooling.

Deliberate native adaptations​

Rust builders, immutable client snapshots and explicit environment resolution replace the JavaScript mutable singleton and constructor option bags. Presence types preserve omission/null/value states. Generic native pagination reports bounds, partial results and resumable positions. Caller-driven Stream/Sink polling and drop replace Node iterator/listener/factory lifecycles; the native SDK has no implicit reader workers or callback registry. Scope provisioning exposes structured recovery and retains dependencies after uncertain writes.

Error taxonomy and sanitized problem diagnostics retain explicit access. Ordinary formatting omits custom messages and upstream bodies. JavaScript inherited stack hooks become explicit per-error backtrace capture and caller-owned formatting; std::error::Error supplies the native cause interface without retaining arbitrary transport errors. These changes are individual ledger entries, not blanket claims that a generic client or error covers unrelated exported members.

The ergonomic provisioning request/result types are the operation's primary native API. The models namespace also retains source-derived wire types for model-only consumers; their generated structural aliases are not claimed as accepted workflow inputs. SDK version/User-Agent constants intentionally identify the Rust crate; frozen vendor vocabulary and protocol constants retain their exact values.

Gateway source binding​

tools/verify_gateway_bindings.py --check supplements executed contract suites with 194 exact Phase 6 source bindings. Each row records frozen method/helper hashes, HTTP method, complete route topology, schema roots and native helper proofs. The one explicit telemetry decomposition checks identical shared filter node IDs and bounds refinement against the frozen composed schemas. A pinned reviewed runtime path helper preserves ordered segments, routing and replay application.

Thirteen adversarial guards reject wrong schema roots, methods, route literals or segments, changed metrics/refinements, comment-only evidence and unrelated-method evidence. This is a bounded structural check of reviewed source patterns. Exact wire fixtures and behavioral tests establish the transport contracts; token matching does not prove general equivalence between JavaScript and Rust programs.