Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

cf-bindings-proxy

Package Overview
Dependencies
Maintainers
1
Versions
58
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

cf-bindings-proxy

Experimental proxy for interfacing with bindings in projects targeting Cloudflare Pages

  • 0.7.1
  • latest
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
135
increased by32.35%
Maintainers
1
Weekly downloads
 
Created
Source

cf-bindings-proxy

Experimental proxy for interfacing with bindings
in projects targeting Cloudflare Pages.


npm (tag) GitHub Workflow Status (with branch)


This library was written to accompany @cloudflare/next-on-pages, so that you can use bindings when developing Next.js apps locally through next dev.

It is intended to be used for frameworks that do not support Cloudflare bindings in a fast HMR environment.

Usage

Add the library to your project.

npm add cf-bindings-proxy

In a separate terminal window, run the following command to start the proxy, passing through your bindings are arguments.

npx cf-bindings-proxy --kv=MY_KV

In your project's code, import the binding function from cf-bindings-proxy and use it to interact with your bindings.

import { binding } from 'cf-bindings-proxy';

const value = await binding<KVNamespace>('MY_KV').get('key');

It is also possible to specify a custom fallback for use in production instead of process.env.

import { binding } from 'cf-bindings-proxy';

const value = await binding<KVNamespace>('MY_KV', { fallback: platform.env }).get('key');

How It Works

Starting the proxy spawns an instance of Wrangler using a template, passing through any commands and bindings that are supplied to the CLI. It uses port 8799.

In development mode, when interacting with a binding through the binding('BINDING_NAME') function, it sends HTTP requests to the proxy. These HTTP requests contain destructured function calls, which are then reconstructed and executed inside the proxy. The result is then returned to the client.

When building for production, binding('BINDING_NAME') simply calls process.env.BINDING_NAME to retrieve the binding instead. If you wish to use a custom fallback like platform.env instead of process.env, you can pass a custom fallback to the binding call with binding('BINDING_NAME', { fallback: platform.env }).

When It's Active

Calls to binding('BINDING_NAME') will try to use the proxy when either of the following two conditions are met:

  • The ENABLE_BINDINGS_PROXY environment variable is set to true. OR
  • The DISABLE_BINDINGS_PROXY environment variable is not set and NODE_ENV is set to development.

Supported

Note: Functionality and bindings not listed below may still work but have not been tested.

KV
  • put
  • get
  • list
  • getWithMetadata
  • delete
D1
  • prepare
    • bind
    • run
    • all
    • first
    • raw
  • batch
  • exec
  • dump
R2
  • put
    • writeHttpMetadata
    • value type: ArrayBuffer
    • value type: string
    • value type: Blob
    • value type: ReadableStream
  • get
    • writeHttpMetadata
    • text
    • json
    • arrayBuffer
    • blob
    • body
    • bodyUsed
  • head
    • writeHttpMetadata
  • list
    • writeHttpMetadata
  • delete
  • createMultipartUpload (needs more tests)
  • resumeMultipartUpload (needs more tests)
Cache API
  • put
  • match
  • delete

FAQs

Package last updated on 01 Nov 2023

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc