alchemy 0.76.0 → 0.77.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.
Files changed (107) hide show
  1. package/bin/alchemy.js +111 -30
  2. package/bin/services/execute-alchemy.ts +10 -1
  3. package/lib/aws/ec2/index.d.ts +1 -0
  4. package/lib/aws/ec2/index.d.ts.map +1 -1
  5. package/lib/aws/ec2/index.js +1 -0
  6. package/lib/aws/ec2/index.js.map +1 -1
  7. package/lib/aws/index.d.ts +1 -7
  8. package/lib/aws/index.d.ts.map +1 -1
  9. package/lib/aws/index.js +1 -8
  10. package/lib/aws/index.js.map +1 -1
  11. package/lib/cloudflare/auth.d.ts.map +1 -1
  12. package/lib/cloudflare/auth.js +1 -0
  13. package/lib/cloudflare/auth.js.map +1 -1
  14. package/lib/cloudflare/bucket-custom-domain.d.ts +90 -0
  15. package/lib/cloudflare/bucket-custom-domain.d.ts.map +1 -0
  16. package/lib/cloudflare/bucket-custom-domain.js +81 -0
  17. package/lib/cloudflare/bucket-custom-domain.js.map +1 -0
  18. package/lib/cloudflare/bucket.d.ts +28 -4
  19. package/lib/cloudflare/bucket.d.ts.map +1 -1
  20. package/lib/cloudflare/bucket.js +41 -14
  21. package/lib/cloudflare/bucket.js.map +1 -1
  22. package/lib/cloudflare/cloudflare-env-proxy.d.ts.map +1 -1
  23. package/lib/cloudflare/cloudflare-env-proxy.js +0 -3
  24. package/lib/cloudflare/cloudflare-env-proxy.js.map +1 -1
  25. package/lib/cloudflare/compatibility-date.gen.d.ts +1 -1
  26. package/lib/cloudflare/compatibility-date.gen.js +1 -1
  27. package/lib/cloudflare/index.d.ts +1 -0
  28. package/lib/cloudflare/index.d.ts.map +1 -1
  29. package/lib/cloudflare/index.js +1 -0
  30. package/lib/cloudflare/index.js.map +1 -1
  31. package/lib/cloudflare/miniflare/build-worker-options.d.ts.map +1 -1
  32. package/lib/cloudflare/miniflare/build-worker-options.js +3 -1
  33. package/lib/cloudflare/miniflare/build-worker-options.js.map +1 -1
  34. package/lib/cloudflare/miniflare/remote-binding-proxy.d.ts.map +1 -1
  35. package/lib/cloudflare/miniflare/remote-binding-proxy.js +73 -9
  36. package/lib/cloudflare/miniflare/remote-binding-proxy.js.map +1 -1
  37. package/lib/cloudflare/react-router/plugin.d.ts +2 -1
  38. package/lib/cloudflare/react-router/plugin.d.ts.map +1 -1
  39. package/lib/cloudflare/react-router/plugin.js +6 -14
  40. package/lib/cloudflare/react-router/plugin.js.map +1 -1
  41. package/lib/cloudflare/vite/plugin.d.ts.map +1 -1
  42. package/lib/cloudflare/vite/plugin.js +0 -3
  43. package/lib/cloudflare/vite/plugin.js.map +1 -1
  44. package/lib/cloudflare/worker-bundle.d.ts.map +1 -1
  45. package/lib/cloudflare/worker-bundle.js +17 -0
  46. package/lib/cloudflare/worker-bundle.js.map +1 -1
  47. package/lib/cloudflare/worker-metadata.d.ts.map +1 -1
  48. package/lib/cloudflare/worker-metadata.js +6 -4
  49. package/lib/cloudflare/worker-metadata.js.map +1 -1
  50. package/lib/cloudflare/worker-subdomain.d.ts.map +1 -1
  51. package/lib/cloudflare/worker-subdomain.js +0 -1
  52. package/lib/cloudflare/worker-subdomain.js.map +1 -1
  53. package/lib/cloudflare/worker.d.ts.map +1 -1
  54. package/lib/cloudflare/worker.js +28 -38
  55. package/lib/cloudflare/worker.js.map +1 -1
  56. package/lib/cloudflare/wrangler.json.d.ts +2 -281
  57. package/lib/cloudflare/wrangler.json.d.ts.map +1 -1
  58. package/lib/cloudflare/wrangler.json.js +23 -11
  59. package/lib/cloudflare/wrangler.json.js.map +1 -1
  60. package/lib/encrypt.d.ts +28 -3
  61. package/lib/encrypt.d.ts.map +1 -1
  62. package/lib/encrypt.js +77 -3
  63. package/lib/encrypt.js.map +1 -1
  64. package/lib/planetscale/role.d.ts +9 -0
  65. package/lib/planetscale/role.d.ts.map +1 -1
  66. package/lib/planetscale/role.js +18 -3
  67. package/lib/planetscale/role.js.map +1 -1
  68. package/lib/prisma-postgres/api.d.ts.map +1 -1
  69. package/lib/prisma-postgres/api.js +1 -0
  70. package/lib/prisma-postgres/api.js.map +1 -1
  71. package/lib/scope.d.ts +5 -0
  72. package/lib/scope.d.ts.map +1 -1
  73. package/lib/scope.js +23 -0
  74. package/lib/scope.js.map +1 -1
  75. package/lib/serde.js +1 -1
  76. package/lib/serde.js.map +1 -1
  77. package/lib/util/telemetry.js +4 -0
  78. package/lib/util/telemetry.js.map +1 -1
  79. package/package.json +12 -10
  80. package/src/aws/ec2/index.ts +1 -0
  81. package/src/aws/index.ts +1 -9
  82. package/src/cloudflare/auth.ts +1 -0
  83. package/src/cloudflare/bucket-custom-domain.ts +281 -0
  84. package/src/cloudflare/bucket.ts +85 -18
  85. package/src/cloudflare/cloudflare-env-proxy.ts +0 -3
  86. package/src/cloudflare/compatibility-date.gen.ts +1 -1
  87. package/src/cloudflare/index.ts +1 -0
  88. package/src/cloudflare/miniflare/build-worker-options.ts +3 -1
  89. package/src/cloudflare/miniflare/remote-binding-proxy.ts +80 -9
  90. package/src/cloudflare/react-router/plugin.ts +9 -21
  91. package/src/cloudflare/vite/plugin.ts +0 -3
  92. package/src/cloudflare/worker-bundle.ts +28 -1
  93. package/src/cloudflare/worker-metadata.ts +8 -4
  94. package/src/cloudflare/worker-subdomain.ts +0 -1
  95. package/src/cloudflare/worker.ts +32 -45
  96. package/src/cloudflare/wrangler.json.ts +62 -397
  97. package/src/encrypt.ts +115 -3
  98. package/src/planetscale/role.ts +30 -3
  99. package/src/prisma-postgres/api.ts +1 -0
  100. package/src/scope.ts +27 -0
  101. package/src/serde.ts +1 -1
  102. package/src/util/telemetry.ts +5 -0
  103. package/workers/cloudflare-state-store.js +4802 -8
  104. package/workers/dofs-state-store.js +632 -2
  105. package/workers/remote-binding-proxy.js +1929 -3
  106. package/workers/tunnel-proxy.js +58 -6
  107. package/workers/tunnel-proxy.ts +1 -1
@@ -1,4 +1,53 @@
1
- var h={async fetch(e,r){let n=new URL(e.url);n.host=r.TUNNEL_HOST;let l=new Headers(e.headers);l.set("alchemy-worker-name",r.WORKER_NAME);let t=await fetch(n,{method:e.method,headers:l,body:e.body,redirect:"manual"});if(t.status===530){let a=await i(t),s=new Headers(t.headers);return s.set("Content-Type","text/html"),new Response(c({name:r.WORKER_NAME,error:a,rayId:t.headers.get("cf-ray")??"Unknown"}),{status:530,headers:s})}return t}},i=async e=>{let r=e.headers.get("Alchemy-Error");if(r)return r;let n,l,{promise:t,resolve:a}=Promise.withResolvers(),s=new HTMLRewriter;return s.on("h1",{text(o){if(n)return;let d=o.text.match(/(\d+)/);d&&(n=d[1])}}),s.on("h2",{text(o){l||(l=o.text)}}),s.onDocument({end(){a([n,l].filter(Boolean).join(": ")||"Unknown")}}),await s.transform(e).text(),t},c=e=>`
1
+ //#region workers/tunnel-proxy.ts
2
+ var tunnel_proxy_default = { async fetch(request, env) {
3
+ const url = new URL(request.url);
4
+ url.host = env.TUNNEL_HOST;
5
+ const headers = new Headers(request.headers);
6
+ headers.set("alchemy-worker-name", env.WORKER_NAME);
7
+ const response = await fetch(url, {
8
+ method: request.method,
9
+ headers,
10
+ body: request.body,
11
+ redirect: "manual"
12
+ });
13
+ if (response.status === 530) {
14
+ const error = await extractResponseError(response);
15
+ const headers$1 = new Headers(response.headers);
16
+ headers$1.set("Content-Type", "text/html");
17
+ return new Response(renderErrorHtml({
18
+ name: env.WORKER_NAME,
19
+ error,
20
+ rayId: response.headers.get("cf-ray") ?? "Unknown"
21
+ }), {
22
+ status: 530,
23
+ headers: headers$1
24
+ });
25
+ }
26
+ return response;
27
+ } };
28
+ const extractResponseError = async (response) => {
29
+ const error = response.headers.get("Alchemy-Error");
30
+ if (error) return error;
31
+ let code;
32
+ let message;
33
+ const { promise, resolve } = Promise.withResolvers();
34
+ const rewriter = new HTMLRewriter();
35
+ rewriter.on("h1", { text(text) {
36
+ if (code) return;
37
+ const match = text.text.match(/(\d+)/);
38
+ if (match) code = match[1];
39
+ } });
40
+ rewriter.on("h2", { text(text) {
41
+ if (message) return;
42
+ message = text.text;
43
+ } });
44
+ rewriter.onDocument({ end() {
45
+ resolve([code, message].filter(Boolean).join(": ") || "Unknown");
46
+ } });
47
+ await rewriter.transform(response).text();
48
+ return promise;
49
+ };
50
+ const renderErrorHtml = (props) => `
2
51
  <!DOCTYPE html>
3
52
  <html lang="en">
4
53
 
@@ -14,18 +63,18 @@ var h={async fetch(e,r){let n=new URL(e.url);n.host=r.TUNNEL_HOST;let l=new Head
14
63
  <div class="flex flex-col items-center justify-center h-screen">
15
64
  <div class="border-t-3 border-red-600 px-5 py-7 bg-white gap-3 flex flex-col w-full max-w-lg">
16
65
  <h1 class="text-2xl font-semibold">530: Tunnel Error</h1>
17
- <p class="text-slate-800">The worker "${e.name}" could not be reached.</p>
66
+ <p class="text-slate-800">The worker "${props.name}" could not be reached.</p>
18
67
  <p class="text-slate-800">Please ensure that <code
19
68
  class="bg-slate-100 text-slate-800 p-1 rounded-md text-sm">alchemy dev</code>
20
69
  is running and tunnel mode is enabled for the worker.</p>
21
70
  <div class="flex flex-col gap-2 border-l-2 border-slate-300 pl-3 my-1.5">
22
71
  <div class="text-sm flex flex-col gap-1">
23
72
  <div class="text-slate-500">Error:</div>
24
- <div class="text-slate-800 font-mono">${e.error}</div>
73
+ <div class="text-slate-800 font-mono">${props.error}</div>
25
74
  </div>
26
75
  <div class="text-sm flex flex-col gap-1">
27
76
  <div class="text-slate-500">Ray ID:</div>
28
- <div class="text-slate-800 font-mono">${e.rayId}</div>
77
+ <div class="text-slate-800 font-mono">${props.rayId}</div>
29
78
  </div>
30
79
  </div>
31
80
  <p class="text-slate-800"><a href="https://alchemy.run/docs/guides/cloudflare-tunnel"
@@ -34,10 +83,13 @@ var h={async fetch(e,r){let n=new URL(e.url);n.host=r.TUNNEL_HOST;let l=new Head
34
83
  Alchemy</a>.</p>
35
84
  </div>
36
85
  <div class="bg-slate-200 px-5 py-3 flex flex-col w-full max-w-lg">
37
- <p class="text-sm text-slate-500">Alchemy 0.76.0</p>
86
+ <p class="text-sm text-slate-500">Alchemy 0.77.0</p>
38
87
  </div>
39
88
  </div>
40
89
  </body>
41
90
 
42
91
  </html>
43
- `;export{h as default};
92
+ `;
93
+
94
+ //#endregion
95
+ export { tunnel_proxy_default as default };
@@ -5,7 +5,7 @@ interface Env {
5
5
  TUNNEL_HOST: string;
6
6
  }
7
7
 
8
- declare const ALCHEMY_VERSION: string; // injected during `bun run build:workers`
8
+ declare const ALCHEMY_VERSION: string; // injected during build
9
9
 
10
10
  export default {
11
11
  async fetch(request: Request, env: Env) {