{"id":19551406,"url":"https://github.com/chientrm/wrangler-proxy","last_synced_at":"2025-09-14T14:32:21.543Z","repository":{"id":176771802,"uuid":"659330911","full_name":"chientrm/wrangler-proxy","owner":"chientrm","description":"Wrangler Proxy exposes Workers API to outside and integrate to your favorite frameworks. Compatible with DrizzleORM.","archived":false,"fork":false,"pushed_at":"2024-01-29T01:07:11.000Z","size":140,"stargazers_count":35,"open_issues_count":3,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-08-09T03:02:12.542Z","etag":null,"topics":["bindings","cloudflare","cloudflare-kv","cloudflare-r2","d1","drizzle-orm","fullstack","kv","r2","service","svelte","sveltekit","workers","wrangler"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/chientrm.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":"FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null},"funding":{"patreon":"chientrm","github":"chientrm"}},"created_at":"2023-06-27T15:45:59.000Z","updated_at":"2025-01-31T11:55:05.000Z","dependencies_parsed_at":"2023-12-29T07:24:58.699Z","dependency_job_id":"31f88d27-f6a5-4c62-b646-99757915d041","html_url":"https://github.com/chientrm/wrangler-proxy","commit_stats":null,"previous_names":["chientrm/cf-workers-proxy","chientrm/wrangler-proxy"],"tags_count":45,"template":false,"template_full_name":null,"purl":"pkg:github/chientrm/wrangler-proxy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chientrm%2Fwrangler-proxy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chientrm%2Fwrangler-proxy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chientrm%2Fwrangler-proxy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chientrm%2Fwrangler-proxy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/chientrm","download_url":"https://codeload.github.com/chientrm/wrangler-proxy/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chientrm%2Fwrangler-proxy/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":270793602,"owners_count":24646624,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-16T02:00:11.002Z","response_time":91,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bindings","cloudflare","cloudflare-kv","cloudflare-r2","d1","drizzle-orm","fullstack","kv","r2","service","svelte","sveltekit","workers","wrangler"],"created_at":"2024-11-11T04:13:48.788Z","updated_at":"2025-08-17T01:10:12.377Z","avatar_url":"https://github.com/chientrm.png","language":"TypeScript","funding_links":["https://patreon.com/chientrm","https://github.com/sponsors/chientrm","https://www.buymeacoffee.com/chientrm","https://www.paypal.me/chientrm"],"categories":[],"sub_categories":[],"readme":"# wrangler-proxy\n\n[![Download](https://img.shields.io/npm/dt/wrangler-proxy)](https://www.npmjs.com/package/wrangler-proxy)\n[![Version](https://img.shields.io/npm/v/wrangler-proxy)](https://github.com/chientrm/wrangler-proxy)\n\nWrangler Proxy exposes Workers API to outside and integrate to your favorite frameworks. Compatible with DrizzleORM.\n\n## Quick links\n\n- [Get Started](#get-started)\n  - [Install](#install)\n  - [Setup `wrangler.toml`](#example-wranglertoml)\n  - [Setup proxy for dev](#start-proxy-for-dev)\n    - [Remote mode](#remote-mode)\n    - [Local mode](#local-mode)\n  - [Setup SvelteKit project](#example-sveltekit-project)\n- [Using wrangler-proxy to expose workers API](#using-wrangler-proxy-to-expose-workers-api)\n- [Features](#features)\n\n  - [D1](#d1)\n    - [PreparedStatement](#preparedstatement)\n  - [Service Bindings](#service-bindings)\n    - [app.d.ts](#appdts)\n    - [hooks.server.ts](#hooksserverts)\n    - [Example Usage](#example-usage)\n  - [KV](#kv)\n  - [R2](#r2)\n  - [waitUntil](#waituntil)\n  - [Queues](#queues-😔)\n  - [Hyperdrive](#hyperdrive-😔)\n  - [Workers AI](#workers-ai-😔)\n  - [AI Gateway](#ai-gateway-😔)\n  - [Stream](#stream-😔)\n  - [Images](#images-😔)\n\n- [Contributing](#contributing)\n  - [Buy Me A Coffee](https://www.buymeacoffee.com/chientrm)\n  - [Donating via PayPal](https://www.paypal.me/chientrm)\n\n## Get Started\n\n### Install\n\n```\nnpm i -D wrangler-proxy\n```\n\n### Example `wrangler.toml`\n\n```toml\nname = \"worker\"\ncompatibility_date = \"2023-07-02\"\n\n[[d1_databases]]\nbinding = \"D1\"\ndatabase_name = \"D1\"\ndatabase_id = \"\u003cd1-id\u003e\"\n\n[[kv_namespaces]]\nbinding = \"KV\"\nid = \"\u003ckv-id\u003e\"\npreview_id = \"\u003csame-kv-id-as-above\u003e\"\n\n[[services]]\nbinding = \"WORKER\"\nservice = \"\u003cworker-name\u003e\"\nenvironment = \"production\"\n```\n\n### Start proxy for dev\n\n#### Remote mode\n\n```\nwrangler dev node_modules/wrangler-proxy/dist/worker.js --remote\n```\n\n#### Local mode\n\n```\nwrangler dev node_modules/wrangler-proxy/dist/worker.js\n```\n\n### Example SvelteKit project\n\n```ts\n// file: app.d.ts\n\ndeclare global {\n  namespace App {\n    interface Locals {\n      D1: D1Database;\n    }\n    interface Platform {\n      env?: {\n        D1: D1Database;\n      };\n    }\n  }\n}\n\nexport {};\n```\n\n```ts\n// file: src/hooks.server.ts\n\nimport { connectD1 } from 'wrangler-proxy';\n\nexport const handle = ({ event, resolve }) =\u003e {\n  event.locals.D1 = event.platform?.env?.D1 ?? connectD1('D1');\n  // or connectD1('D1', { hostname: 'custom-host-name' });\n  // default hostname is `http://127.0.0.1:8787`\n  return resolve(event);\n};\n```\n\n## Using `wrangler-proxy` to expose workers API\n\nInit worker\n\n```\nnpm create cloudflare@2 - .\n```\n\n```ts\n// file: src/index.ts\nimport { createWorker } from 'wrangler-proxy';\n\nexport default createWorker();\n```\n\n## Features\n\n- 😔 Need funding\n- 🤷 Not fully tested\n- ✅ Complete\n\n### D1\n\n```ts\nimport { connectD1 } from 'wrangler-proxy';\n```\n\n| Function    | Status |\n| ----------- | ------ |\n| `prepare()` | ✅     |\n| `batch()`   | ✅     |\n| `dump()`    | 😔     |\n| `exec()`    | ✅     |\n\n#### PreparedStatement\n\n| Function  | Status |\n| --------- | ------ |\n| `first()` | ✅     |\n| `run()`   | ✅     |\n| `all()`   | ✅     |\n| `raw()`   | ✅     |\n| `bind()`  | ✅     |\n\n### Service Bindings\n\n```ts\nimport { connectServiceBinding } from 'wrangler-proxy';\n```\n\n| Function    | Status |\n| ----------- | ------ |\n| `fetch()`   | ✅     |\n| `connect()` | 😔     |\n\n#### app.d.ts\n\n```ts\n// app.d.ts\n\ndeclare global {\n  namespace App {\n    interface Locals {\n      SB: Fetcher;\n    }\n    interface Platform {\n      env?: {\n        SB: Fetcher;\n      };\n    }\n  }\n}\n```\n\n#### hooks.server.ts\n\n```ts\n/// hooks.server.ts\n\nimport { connectServiceBinding } from 'wrangler-proxy';\n\nexport const handle = async ({ resolve, event }) =\u003e {\n  event.locals.SB = event.platform?.env?.SB ?? connectServiceBinding('SB');\n  return resolve(event);\n};\n```\n\n#### Example usage\n\n```ts\nevent.locals.SB.fetch('http://whatever.fake/send');\n```\n\n`http://whatever.fake` is required as a dummy hostname. Without a dummy hostname the `fetch` will fail.\n\n### KV\n\n```ts\nimport { connectKV } from 'wrangler-proxy';\n```\n\n| Function            | Status |\n| ------------------- | ------ |\n| `put()`             | 🤷     |\n| `get()`             | ✅     |\n| `getWithMetadata()` | 🤷     |\n| `delete()`          | ✅     |\n| `list()`            | 🤷     |\n\n### R2\n\n```ts\nimport { connectR2 } from 'wrangler-proxy';\n```\n\n| Function                  | Status |\n| ------------------------- | ------ |\n| `head()`                  | 😔     |\n| `get()`                   | ✅     |\n| `put()`                   | ✅     |\n| `createMultipartUpload()` | 😔     |\n| `resumeMultipartUpload()` | 😔     |\n| `delete()`                | ✅     |\n| `list()`                  | 😔     |\n\n### `waitUntil`\n\n```ts\n// file: app.d.ts\nnamespace App {\n  interface Platform {\n    context: {\n      waitUntil(promise: Promise\u003cany\u003e): void;\n    };\n  }\n}\n```\n\n```ts\n// file: +page.server.ts\nimport { waitUntil } from 'wrangler-proxy';\n\nexport const actions = {\n  default: ({ locals, platform }) =\u003e {\n    waitUntil((async () =\u003e {})(), platform?.context);\n    return { message: 'success' };\n  },\n};\n```\n\n### Queues 😔\n\n### Hyperdrive 😔\n\n### Workers AI 😔\n\n### AI Gateway 😔\n\n### Stream 😔\n\n### Images 😔\n\n## Contributing\n\nIf you find this project helpful, consider supporting it by\n\n\u003ca href=\"https://www.buymeacoffee.com/chientrm\" target=\"_blank\"\u003e\u003cimg src=\"https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png\" alt=\"Buy Me A Coffee\" style=\"height: 41px !important;width: 174px !important;box-shadow: 0px 3px 2px 0px rgba(190, 190, 190, 0.5) !important;-webkit-box-shadow: 0px 3px 2px 0px rgba(190, 190, 190, 0.5) !important;\" \u003e\u003c/a\u003e\n\nor\n\n[Donating via PayPal](https://www.paypal.me/chientrm)\n\nYour donation will help us implement your requested features faster.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchientrm%2Fwrangler-proxy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fchientrm%2Fwrangler-proxy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchientrm%2Fwrangler-proxy/lists"}