routed_node 0.2.2
routed_node: ^0.2.2 copied to clipboard
Node.js host transport for Routed — IncomingMessage/ServerResponse adapters on RequestAdapter/ResponseAdapter/ServerTransport.
Changelog #
0.2.2 - 2026-09-09 #
-
Added the provider-owned
routed deploycommand and CLI provider discovery for Cloudflare, Netlify, and Vercel deployments. The CLI contribution is conditional on Dart VM builds so Worker bundles remain portable. -
Exported the Node event-loop bootstrap used by generated Node entrypoints, including a one-shot mode for command-only invocations.
-
Added the Node process-argument bridge used by generated JavaScript entrypoints, keeping
process.argvhandling out ofrouted_core. -
Add
CloudflareJobQueueplus typed Queue batch and Cron Trigger exports forrouted_jobs, including per-message acknowledgement/retry mapping. -
Add the Cloudflare scheduler tick bridge and
CloudflareScheduleStorefor atomic occurrence claims backed by a Durable Object-compatibleStore. -
Fence Cloudflare schedule completion by the current Durable Object lock owner and route completion markers through the claim shard.
-
Add
openCloudflareD1()for creating a codegen-optional Ormed database from a native Worker D1 binding, ready forrouted_databaseregistration. -
Document the shared
routed_database/ctx.db()path for Cloudflare apps. -
Update the Cloudflare sample and live smoke harness to apply and verify an Ormed migration instead of pre-creating the D1 table with raw SQL.
-
Added
CloudflareR2Filesystem, astorage_fsadapter for native Worker R2 bindings, with scoped keys, metadata, paginated listings, directory markers, and read-only/error policies. -
Documented application-scoped R2 registration so Routed handlers can use
ctx.storage('r2')without S3 credentials or direct JavaScript interop. -
Native R2 filesystems can now back Routed's asynchronous storage handlers without a local
package:filepath; private objects use signed routes. -
Prevented R2 append/prepend from overwriting objects after failed reads, and made
deleteDirectory()report listing failures instead of false success. -
Kept native R2 objects private, rejected per-object public visibility, and changed the Cloudflare demo to expose its fixed fixture only through a Worker-secret-backed signed URL.
-
Removed caller-selected object keys from the public R2 smoke routes so they cannot overwrite or delete unrelated bucket objects.
-
Batched native R2 multi-object deletes at the binding's 1,000-key limit.
0.2.1 - 2026-08-25 #
-
Adopt
very_good_analysisand complete public API documentation for the Node, Fetch, and Cloudflare host integrations. -
Add
defineCloudflareFetchFactoryWithEnvironmentAsyncfor typed Worker startup with Cloudflare bindings such as D1 and secrets. -
Add a sharded SQLite-backed
CloudflareDurableObjectStoreandCloudflareDurableObjectStoreObjectfor shared cache and distributed-lock state on Workers, including the locking contract used byCacheRateLimiterBackend. -
Preserve Cloudflare's
CF-Connecting-IPthrough the Fetch bridge so portable request IP policies, including rate limiting, work on Workers without a socket remote address. -
Reuse the hosted
ormed_d1binding contracts for Cloudflare D1 types so applications can share the same D1 API across Routed and Ormed.
0.2.0 #
-
Enumerate native Fetch headers at the portable request boundary and retain the actual bound Node listener port, including ephemeral-port listeners.
-
Verify native Node and Cloudflare Fetch request handling against the same public Routed auth runtime conformance contract used by
routed_io. -
Adopted null-aware collection elements in the Cloudflare Fetch binding serialization paths so the host adapter remains analyzer-clean.
-
Fix D1 metadata decoding for Cloudflare's snake_case
rows_readandrows_writtenfields, and alignserved_by_primarywith Cloudflare's boolean contract while exposing theserved_by_cololocation. -
Added host-neutral Cloudflare bindings for Request
cfmetadata, the Cache API, R2 buckets, Queue producers, and Worker service bindings. -
Added host-neutral Cloudflare bindings for Container instances and Container-backed Durable Object controls, Workflow instances, and Secrets Store reads. Worker bindings are also available through
env.worker(...), including HTTP Fetch and RPC calls. -
Added Node runtime coverage for Cloudflare cache, R2 streaming objects, queue metrics, service-binding responses, Container controls, Workflow lifecycle operations, and Secrets Store reads.
-
Expanded host integrations for Bun, Deno, Vercel, and Netlify while keeping the portable request/response boundary consistent across runtimes.
-
Added listener WebSocket bridging and runtime capability reporting.
-
Fetch-host failures now return a generic public error while retaining the diagnostic details for internal logging.
-
Added the Cloudflare-specific
cloudflare.dartbinding surface for Worker environments, KV, D1, Durable Objects, alarms, and SQLite SQL storage. -
Added an end-to-end Cloudflare usage example covering D1, KV, and SQLite-backed Durable Objects.
-
Added Routed-owned Cloudflare request and response wrappers so application code does not need
package:webordart:js_interop. -
Added text and JSON helpers for buffered Durable Object responses.
-
Added host-neutral Durable Object
WebSocketPair, hibernation socket methods, and message/close/error callback forwarding. -
Add
cloudflareTextBindingso Worker text and secret bindings can be read through the public host-neutral API withoutpackage:webor JS interop.
0.1.0 #
- Initial Node.js host transport for Routed.
- Preferred value edge:
portableRequestFromNode,writePortableResponseToNode,dispatchNodeExchange→Engine.handlePortable. - Stream-sink path:
NodeRequestAdapter/NodeResponseAdapter/NodeHttpConnectionforEngine.handleConnection. NodeServerTransport+serveNodebind via Nodehttp.createServer(JS interop; stubbed on the Dart VM).- Sample API project under
example/api(JSON items API, VM smoke,serveNodeentry +index.cjsNode bootstrap).