alchemy 0.1.16 → 0.1.18

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 (250) hide show
  1. package/lib/$.d.ts +12 -0
  2. package/lib/$.d.ts.map +1 -0
  3. package/lib/$.js +42 -0
  4. package/lib/$.js.map +1 -0
  5. package/lib/alchemize.d.ts +47 -0
  6. package/lib/alchemize.d.ts.map +1 -0
  7. package/lib/alchemize.js +116 -0
  8. package/lib/alchemize.js.map +1 -0
  9. package/lib/apply.d.ts +23 -0
  10. package/lib/apply.d.ts.map +1 -1
  11. package/lib/apply.js +4 -0
  12. package/lib/apply.js.map +1 -1
  13. package/lib/aws/account-id.d.ts +5 -0
  14. package/lib/aws/account-id.d.ts.map +1 -0
  15. package/lib/aws/account-id.js +10 -0
  16. package/lib/aws/account-id.js.map +1 -0
  17. package/lib/aws/bucket.d.ts +21 -0
  18. package/lib/aws/bucket.d.ts.map +1 -0
  19. package/lib/aws/bucket.js +114 -0
  20. package/lib/aws/bucket.js.map +1 -0
  21. package/lib/aws/function.d.ts +53 -0
  22. package/lib/aws/function.d.ts.map +1 -0
  23. package/lib/aws/function.js +195 -0
  24. package/lib/aws/function.js.map +1 -0
  25. package/lib/aws/index.d.ts +9 -0
  26. package/lib/aws/index.d.ts.map +1 -0
  27. package/lib/aws/index.js +9 -0
  28. package/lib/aws/index.js.map +1 -0
  29. package/lib/aws/oidc/github-oidc-provider.d.ts +11 -0
  30. package/lib/aws/oidc/github-oidc-provider.d.ts.map +1 -0
  31. package/lib/aws/oidc/github-oidc-provider.js +22 -0
  32. package/lib/aws/oidc/github-oidc-provider.js.map +1 -0
  33. package/lib/aws/oidc/index.d.ts +3 -0
  34. package/lib/aws/oidc/index.d.ts.map +1 -0
  35. package/lib/aws/oidc/index.js +3 -0
  36. package/lib/aws/oidc/index.js.map +1 -0
  37. package/lib/aws/oidc/oidc-provider.d.ts +60 -0
  38. package/lib/aws/oidc/oidc-provider.d.ts.map +1 -0
  39. package/lib/aws/oidc/oidc-provider.js +140 -0
  40. package/lib/aws/oidc/oidc-provider.js.map +1 -0
  41. package/lib/aws/policy.d.ts +46 -0
  42. package/lib/aws/policy.d.ts.map +1 -0
  43. package/lib/aws/policy.js +139 -0
  44. package/lib/aws/policy.js.map +1 -0
  45. package/lib/aws/queue.d.ts +62 -0
  46. package/lib/aws/queue.d.ts.map +1 -0
  47. package/lib/aws/queue.js +167 -0
  48. package/lib/aws/queue.js.map +1 -0
  49. package/lib/aws/role.d.ts +27 -0
  50. package/lib/aws/role.d.ts.map +1 -0
  51. package/lib/aws/role.js +197 -0
  52. package/lib/aws/role.js.map +1 -0
  53. package/lib/aws/ses.d.ts +75 -0
  54. package/lib/aws/ses.d.ts.map +1 -0
  55. package/lib/aws/ses.js +189 -0
  56. package/lib/aws/ses.js.map +1 -0
  57. package/lib/aws/table.d.ts +26 -0
  58. package/lib/aws/table.d.ts.map +1 -0
  59. package/lib/aws/table.js +154 -0
  60. package/lib/aws/table.js.map +1 -0
  61. package/lib/cloudflare/api.d.ts +88 -0
  62. package/lib/cloudflare/api.d.ts.map +1 -0
  63. package/lib/cloudflare/api.js +184 -0
  64. package/lib/cloudflare/api.js.map +1 -0
  65. package/lib/cloudflare/asset-manifest.d.ts +15 -0
  66. package/lib/cloudflare/asset-manifest.d.ts.map +1 -0
  67. package/lib/cloudflare/asset-manifest.js +2 -0
  68. package/lib/cloudflare/asset-manifest.js.map +1 -0
  69. package/lib/cloudflare/auth.d.ts +52 -0
  70. package/lib/cloudflare/auth.d.ts.map +1 -0
  71. package/lib/cloudflare/auth.js +114 -0
  72. package/lib/cloudflare/auth.js.map +1 -0
  73. package/lib/cloudflare/bindings.d.ts +261 -0
  74. package/lib/cloudflare/bindings.d.ts.map +1 -0
  75. package/lib/cloudflare/bindings.js +2 -0
  76. package/lib/cloudflare/bindings.js.map +1 -0
  77. package/lib/cloudflare/bound.d.ts +8 -0
  78. package/lib/cloudflare/bound.d.ts.map +1 -0
  79. package/lib/cloudflare/bound.js +2 -0
  80. package/lib/cloudflare/bound.js.map +1 -0
  81. package/lib/cloudflare/bucket.d.ts +54 -0
  82. package/lib/cloudflare/bucket.d.ts.map +1 -0
  83. package/lib/cloudflare/bucket.js +120 -0
  84. package/lib/cloudflare/bucket.js.map +1 -0
  85. package/lib/cloudflare/durable-object-namespace.d.ts +20 -0
  86. package/lib/cloudflare/durable-object-namespace.d.ts.map +1 -0
  87. package/lib/cloudflare/durable-object-namespace.js +21 -0
  88. package/lib/cloudflare/durable-object-namespace.js.map +1 -0
  89. package/lib/cloudflare/generate-asset-manifest.d.ts +3 -0
  90. package/lib/cloudflare/generate-asset-manifest.d.ts.map +1 -0
  91. package/lib/cloudflare/generate-asset-manifest.js +69 -0
  92. package/lib/cloudflare/generate-asset-manifest.js.map +1 -0
  93. package/lib/cloudflare/index.d.ts +8 -0
  94. package/lib/cloudflare/index.d.ts.map +1 -0
  95. package/lib/cloudflare/index.js +8 -0
  96. package/lib/cloudflare/index.js.map +1 -0
  97. package/lib/cloudflare/kv-namespace.d.ts +64 -0
  98. package/lib/cloudflare/kv-namespace.d.ts.map +1 -0
  99. package/lib/cloudflare/kv-namespace.js +114 -0
  100. package/lib/cloudflare/kv-namespace.js.map +1 -0
  101. package/lib/cloudflare/state.d.ts +83 -0
  102. package/lib/cloudflare/state.d.ts.map +1 -0
  103. package/lib/cloudflare/state.js +109 -0
  104. package/lib/cloudflare/state.js.map +1 -0
  105. package/lib/cloudflare/static-site-router.d.ts +19 -0
  106. package/lib/cloudflare/static-site-router.d.ts.map +1 -0
  107. package/lib/cloudflare/static-site-router.js +110 -0
  108. package/lib/cloudflare/static-site-router.js.map +1 -0
  109. package/lib/cloudflare/static-site.d.ts +166 -0
  110. package/lib/cloudflare/static-site.d.ts.map +1 -0
  111. package/lib/cloudflare/static-site.js +161 -0
  112. package/lib/cloudflare/static-site.js.map +1 -0
  113. package/lib/cloudflare/types.d.ts +52 -0
  114. package/lib/cloudflare/types.d.ts.map +1 -0
  115. package/lib/cloudflare/types.js +21 -0
  116. package/lib/cloudflare/types.js.map +1 -0
  117. package/lib/cloudflare/upload-asset-manifest.d.ts +12 -0
  118. package/lib/cloudflare/upload-asset-manifest.d.ts.map +1 -0
  119. package/lib/cloudflare/upload-asset-manifest.js +55 -0
  120. package/lib/cloudflare/upload-asset-manifest.js.map +1 -0
  121. package/lib/cloudflare/worker-metadata.d.ts +130 -0
  122. package/lib/cloudflare/worker-metadata.d.ts.map +1 -0
  123. package/lib/cloudflare/worker-metadata.js +2 -0
  124. package/lib/cloudflare/worker-metadata.js.map +1 -0
  125. package/lib/cloudflare/worker-migration.d.ts +110 -0
  126. package/lib/cloudflare/worker-migration.d.ts.map +1 -0
  127. package/lib/cloudflare/worker-migration.js +11 -0
  128. package/lib/cloudflare/worker-migration.js.map +1 -0
  129. package/lib/cloudflare/worker.d.ts +114 -0
  130. package/lib/cloudflare/worker.d.ts.map +1 -0
  131. package/lib/cloudflare/worker.js +419 -0
  132. package/lib/cloudflare/worker.js.map +1 -0
  133. package/lib/destroy.d.ts +19 -0
  134. package/lib/encrypt.d.ts +17 -0
  135. package/lib/encrypt.d.ts.map +1 -0
  136. package/lib/encrypt.js +45 -0
  137. package/lib/encrypt.js.map +1 -0
  138. package/lib/error.d.ts +2 -0
  139. package/lib/error.d.ts.map +1 -0
  140. package/lib/error.js +13 -0
  141. package/lib/error.js.map +1 -0
  142. package/lib/esbuild.d.ts +152 -0
  143. package/lib/esbuild.d.ts.map +1 -0
  144. package/lib/esbuild.js +67 -0
  145. package/lib/esbuild.js.map +1 -0
  146. package/lib/fs.d.ts +12 -0
  147. package/lib/fs.d.ts.map +1 -0
  148. package/lib/fs.js +41 -0
  149. package/lib/fs.js.map +1 -0
  150. package/lib/github/client.d.ts +34 -0
  151. package/lib/github/client.d.ts.map +1 -0
  152. package/lib/github/client.js +91 -0
  153. package/lib/github/client.js.map +1 -0
  154. package/lib/github/index.d.ts +2 -0
  155. package/lib/github/index.d.ts.map +1 -0
  156. package/lib/github/index.js +2 -0
  157. package/lib/github/index.js.map +1 -0
  158. package/lib/github/secret.d.ts +47 -0
  159. package/lib/github/secret.d.ts.map +1 -0
  160. package/lib/github/secret.js +99 -0
  161. package/lib/github/secret.js.map +1 -0
  162. package/lib/global.d.ts +16 -0
  163. package/lib/global.d.ts.map +1 -0
  164. package/lib/global.js +42 -0
  165. package/lib/global.js.map +1 -0
  166. package/lib/index.d.ts +11 -0
  167. package/lib/index.d.ts.map +1 -0
  168. package/lib/index.js +10 -0
  169. package/lib/index.js.map +1 -0
  170. package/lib/input.d.ts +7 -0
  171. package/lib/input.d.ts.map +1 -0
  172. package/lib/input.js +2 -0
  173. package/lib/input.js.map +1 -0
  174. package/lib/main.d.ts +3 -0
  175. package/lib/main.d.ts.map +1 -0
  176. package/lib/main.js +32 -0
  177. package/lib/main.js.map +1 -0
  178. package/lib/output.d.ts +25 -0
  179. package/lib/output.d.ts.map +1 -0
  180. package/lib/output.js +23 -0
  181. package/lib/output.js.map +1 -0
  182. package/lib/print.d.ts +7 -0
  183. package/lib/print.d.ts.map +1 -0
  184. package/lib/print.js +10 -0
  185. package/lib/print.js.map +1 -0
  186. package/lib/resource.d.ts +71 -0
  187. package/lib/resource.d.ts.map +1 -0
  188. package/lib/resource.js +276 -0
  189. package/lib/resource.js.map +1 -0
  190. package/lib/scope.d.ts +18 -0
  191. package/lib/scope.d.ts.map +1 -0
  192. package/lib/scope.js +30 -0
  193. package/lib/scope.js.map +1 -0
  194. package/lib/secret.d.ts +12 -0
  195. package/lib/secret.d.ts.map +1 -0
  196. package/lib/secret.js +30 -0
  197. package/lib/secret.js.map +1 -0
  198. package/lib/serde.d.ts +3 -0
  199. package/lib/serde.d.ts.map +1 -0
  200. package/lib/serde.js +37 -0
  201. package/lib/serde.js.map +1 -0
  202. package/lib/slug.d.ts +2 -0
  203. package/lib/slug.d.ts.map +1 -0
  204. package/lib/slug.js +4 -0
  205. package/lib/slug.js.map +1 -0
  206. package/lib/state.d.ts +40 -0
  207. package/lib/state.d.ts.map +1 -0
  208. package/lib/state.js +74 -0
  209. package/lib/state.js.map +1 -0
  210. package/lib/stripe/index.d.ts +4 -0
  211. package/lib/stripe/index.d.ts.map +1 -0
  212. package/lib/stripe/index.js +4 -0
  213. package/lib/stripe/index.js.map +1 -0
  214. package/lib/stripe/price.d.ts +109 -0
  215. package/lib/stripe/price.d.ts.map +1 -0
  216. package/lib/stripe/price.js +112 -0
  217. package/lib/stripe/price.js.map +1 -0
  218. package/lib/stripe/product.d.ts +86 -0
  219. package/lib/stripe/product.d.ts.map +1 -0
  220. package/lib/stripe/product.js +90 -0
  221. package/lib/stripe/product.js.map +1 -0
  222. package/lib/stripe/webhook.d.ts +73 -0
  223. package/lib/stripe/webhook.d.ts.map +1 -0
  224. package/lib/stripe/webhook.js +94 -0
  225. package/lib/stripe/webhook.js.map +1 -0
  226. package/lib/utils/content-type.d.ts +8 -0
  227. package/lib/utils/content-type.d.ts.map +1 -0
  228. package/lib/utils/content-type.js +41 -0
  229. package/lib/utils/content-type.js.map +1 -0
  230. package/lib/utils/retry.d.ts +13 -0
  231. package/lib/utils/retry.d.ts.map +1 -0
  232. package/lib/utils/retry.js +32 -0
  233. package/lib/utils/retry.js.map +1 -0
  234. package/package.json +3 -6
  235. package/src/alchemize.ts +9 -0
  236. package/src/apply.ts +3 -0
  237. package/src/cloudflare/bindings.ts +9 -1
  238. package/src/cloudflare/bound.ts +18 -0
  239. package/src/cloudflare/bucket.ts +240 -0
  240. package/src/cloudflare/index.ts +1 -0
  241. package/src/cloudflare/static-site.ts +14 -2
  242. package/src/cloudflare/worker.ts +84 -59
  243. package/src/encrypt.ts +79 -0
  244. package/src/github/secret.ts +34 -33
  245. package/src/index.ts +1 -0
  246. package/src/input.ts +13 -10
  247. package/src/output.ts +13 -9
  248. package/src/secret.ts +41 -0
  249. package/src/serde.ts +46 -0
  250. package/src/state.ts +3 -2
@@ -0,0 +1,419 @@
1
+ import * as fs from "fs/promises";
2
+ import { apply } from "../apply";
3
+ import { Bundle } from "../esbuild";
4
+ import { Resource } from "../resource";
5
+ import { Secret } from "../secret";
6
+ import { withExponentialBackoff } from "../utils/retry";
7
+ import { createCloudflareApi } from "./api";
8
+ import { isBucket } from "./bucket";
9
+ import { isDurableObjectNamespace } from "./durable-object-namespace";
10
+ import { isKVNamespace } from "./kv-namespace";
11
+ export function isWorker(resource) {
12
+ return resource && typeof resource === "object" && resource.type === "worker";
13
+ }
14
+ export class Worker extends Resource("cloudflare::Worker", {
15
+ alwaysUpdate: true,
16
+ }, applyWorker) {
17
+ constructor(id, input, ...inputs) {
18
+ super(id, input, ...inputs);
19
+ }
20
+ }
21
+ async function applyWorker(ctx, props) {
22
+ // Create Cloudflare API client with automatic account discovery
23
+ const api = await createCloudflareApi();
24
+ // Use the provided name
25
+ const workerName = props.name;
26
+ // Validate input - we need either script, entryPoint, or bundle
27
+ if (!props.script && !props.entrypoint) {
28
+ throw new Error("One of script or entryPoint must be provided");
29
+ }
30
+ if (ctx.event === "delete") {
31
+ return deleteWorker(ctx, api, workerName);
32
+ }
33
+ else if (ctx.event === "create") {
34
+ await assertWorkerDoesNotExist(ctx, api, workerName);
35
+ }
36
+ const oldBindings = await ctx.get("bindings");
37
+ const scriptMetadata = await prepareWorkerMetadata(ctx, oldBindings, props);
38
+ // Get the script content - either from props.script, or by bundling
39
+ const scriptContent = props.script ?? (await bundleWorkerScript(ctx, props));
40
+ // Upload the worker script
41
+ await putWorker(ctx, api, workerName, scriptContent, scriptMetadata);
42
+ // TODO: it is less than ideal that this can fail, resulting in state problem
43
+ await ctx.set("bindings", props.bindings);
44
+ // Handle routes if requested
45
+ await setupRoutes(api, workerName, props.routes || []);
46
+ // Handle worker URL if requested
47
+ const workerUrl = await configureURL(ctx, api, workerName, props.url ?? false);
48
+ // Get current timestamp
49
+ const now = Date.now();
50
+ // Construct the output
51
+ const output = {
52
+ type: "service",
53
+ id: workerName,
54
+ name: workerName,
55
+ script: scriptContent,
56
+ format: props.format || "esm", // Include format in the output
57
+ routes: props.routes || [],
58
+ bindings: props.bindings ?? {},
59
+ env: props.env,
60
+ observability: scriptMetadata.observability,
61
+ createdAt: now,
62
+ updatedAt: now,
63
+ url: workerUrl,
64
+ };
65
+ return output;
66
+ }
67
+ async function deleteWorker(ctx, api, workerName) {
68
+ // Delete worker
69
+ const deleteResponse = await api.delete(`/accounts/${api.accountId}/workers/scripts/${workerName}`);
70
+ // Check for success (2xx status code)
71
+ if (!deleteResponse.ok && deleteResponse.status !== 404) {
72
+ const errorData = await deleteResponse
73
+ .json()
74
+ .catch(() => ({ errors: [{ message: deleteResponse.statusText }] }));
75
+ console.error("Error deleting worker:", errorData.errors?.[0]?.message || deleteResponse.statusText);
76
+ }
77
+ // Also remove any associated routes if they exist
78
+ if (ctx.output?.routes && ctx.output.routes.length > 0 && api.zoneId) {
79
+ // First get existing routes to find their IDs
80
+ const routesResponse = await api.get(`/zones/${api.zoneId}/workers/routes`);
81
+ if (!routesResponse.ok) {
82
+ throw new Error(`Could not fetch routes for cleanup: ${routesResponse.status} ${routesResponse.statusText}`);
83
+ }
84
+ const routesData = await routesResponse.json();
85
+ const existingRoutes = routesData.result || [];
86
+ for (const route of existingRoutes) {
87
+ if (ctx.output.routes.includes(route.pattern)) {
88
+ // Delete the route
89
+ const routeDeleteResponse = await api.delete(`/zones/${api.zoneId}/workers/routes/${route.id}`);
90
+ if (!routeDeleteResponse.ok) {
91
+ console.warn(`Failed to delete route ${route.pattern}: ${routeDeleteResponse.status} ${routeDeleteResponse.statusText}`);
92
+ }
93
+ }
94
+ }
95
+ }
96
+ // Disable the URL if it was enabled
97
+ if (ctx.output?.url) {
98
+ try {
99
+ await api.post(`/accounts/${api.accountId}/workers/scripts/${workerName}/subdomain`, JSON.stringify({ enabled: false }), {
100
+ headers: { "Content-Type": "application/json" },
101
+ });
102
+ }
103
+ catch (error) {
104
+ console.warn("Failed to disable worker URL during deletion:", error);
105
+ }
106
+ }
107
+ // Return minimal output for deleted state
108
+ return;
109
+ }
110
+ async function putWorker(ctx, api, workerName, scriptContent, scriptMetadata) {
111
+ return withExponentialBackoff(async () => {
112
+ const scriptName = scriptMetadata.main_module ?? scriptMetadata.body_part;
113
+ // Create FormData for the upload
114
+ const formData = new FormData();
115
+ // Add the actual script content as a named file part
116
+ formData.append(scriptName, new Blob([scriptContent], {
117
+ type: scriptMetadata.main_module
118
+ ? "application/javascript+module"
119
+ : "application/javascript",
120
+ }), scriptName);
121
+ // console.log("Script Metadata:", JSON.stringify(scriptMetadata, null, 2));
122
+ // Add metadata as JSON
123
+ formData.append("metadata", new Blob([JSON.stringify(scriptMetadata)], {
124
+ type: "application/json",
125
+ }));
126
+ await new Promise((resolve) => setTimeout(resolve, 1000));
127
+ // Upload worker script with bindings
128
+ const uploadResponse = await api.put(`/accounts/${api.accountId}/workers/scripts/${workerName}`, formData, {
129
+ headers: {
130
+ "Content-Type": "multipart/form-data",
131
+ },
132
+ });
133
+ // Check if the upload was successful
134
+ if (!uploadResponse.ok) {
135
+ const errorData = await uploadResponse
136
+ .json()
137
+ .catch(() => ({ errors: [{ message: uploadResponse.statusText }] }));
138
+ const errorMessage = `Error (HTTP ${uploadResponse.status}) uploading worker script '${workerName}': ${errorData.errors?.[0]?.message || uploadResponse.statusText}`;
139
+ if (uploadResponse.status === 400 &&
140
+ errorMessage.includes("not found")) {
141
+ throw new NotFoundError(errorMessage);
142
+ }
143
+ throw new Error(errorMessage);
144
+ }
145
+ return formData;
146
+ }, (err) => err instanceof NotFoundError, 10, 100);
147
+ }
148
+ class NotFoundError extends Error {
149
+ constructor(message) {
150
+ super(message);
151
+ this.name = "NotFoundError";
152
+ }
153
+ }
154
+ async function prepareWorkerMetadata(ctx, oldBindings, props) {
155
+ // Prepare metadata with bindings
156
+ const meta = {
157
+ bindings: [],
158
+ observability: {
159
+ enabled: props.observability?.enabled !== false,
160
+ },
161
+ tags: [`alchemy:id:${ctx.resourceFQN}`],
162
+ migrations: {
163
+ new_classes: props.migrations?.new_classes ?? [],
164
+ deleted_classes: props.migrations?.deleted_classes ?? [],
165
+ renamed_classes: props.migrations?.renamed_classes ?? [],
166
+ transferred_classes: props.migrations?.transferred_classes ?? [],
167
+ new_sqlite_classes: props.migrations?.new_sqlite_classes ?? [],
168
+ },
169
+ };
170
+ const bindings = (props.bindings ?? {});
171
+ // Convert bindings to the format expected by the API
172
+ for (const [bindingName, binding] of Object.entries(bindings)) {
173
+ // Create a copy of the binding to avoid modifying the original
174
+ if (isKVNamespace(binding)) {
175
+ meta.bindings.push({
176
+ type: "kv_namespace",
177
+ name: bindingName,
178
+ namespace_id: binding.id,
179
+ });
180
+ }
181
+ else if (typeof binding === "string") {
182
+ meta.bindings.push({
183
+ type: "plain_text",
184
+ name: bindingName,
185
+ text: binding,
186
+ });
187
+ }
188
+ else if (binding.type === "service") {
189
+ meta.bindings.push({
190
+ type: "service",
191
+ name: bindingName,
192
+ service: binding.id,
193
+ });
194
+ }
195
+ else if (isDurableObjectNamespace(binding)) {
196
+ const stableId = binding.id;
197
+ const className = binding.className;
198
+ meta.bindings.push({
199
+ type: "durable_object_namespace",
200
+ name: bindingName,
201
+ class_name: className,
202
+ script_name: binding.scriptName,
203
+ environment: binding.environment,
204
+ namespace_id: binding.namespaceId,
205
+ });
206
+ const oldBinding = Object.values(oldBindings ?? {})
207
+ ?.filter(isDurableObjectNamespace)
208
+ ?.find((b) => b.id === stableId);
209
+ if (!oldBinding) {
210
+ if (binding.sqlite) {
211
+ meta.migrations.new_sqlite_classes.push(className);
212
+ }
213
+ else {
214
+ meta.migrations.new_classes.push(className);
215
+ }
216
+ }
217
+ else if (oldBinding.className !== className) {
218
+ meta.migrations.renamed_classes.push({
219
+ from: oldBinding.className,
220
+ to: className,
221
+ });
222
+ }
223
+ }
224
+ else if (isBucket(binding)) {
225
+ meta.bindings.push({
226
+ type: "r2_bucket",
227
+ name: bindingName,
228
+ bucket_name: binding.name || binding.id,
229
+ });
230
+ }
231
+ else if (binding instanceof Secret) {
232
+ meta.bindings.push({
233
+ type: "secret_text",
234
+ name: bindingName,
235
+ text: binding.unencrypted,
236
+ });
237
+ }
238
+ else {
239
+ // @ts-expect-error - we should never reach here
240
+ throw new Error(`Unsupported binding type: ${binding.type}`);
241
+ }
242
+ }
243
+ // Convert env variables to plain_text bindings
244
+ if (props.env) {
245
+ for (const [key, value] of Object.entries(props.env)) {
246
+ meta.bindings.push({
247
+ name: key,
248
+ type: "plain_text",
249
+ text: value,
250
+ });
251
+ }
252
+ }
253
+ // Determine if we're using ESM or service worker format
254
+ const isEsModule = props.format !== "cjs"; // Default to ESM unless CJS is specified
255
+ const scriptName = isEsModule ? "worker.js" : "script";
256
+ if (isEsModule) {
257
+ // For ES modules format
258
+ meta.main_module = scriptName;
259
+ }
260
+ else {
261
+ // For service worker format (CJS)
262
+ meta.body_part = scriptName;
263
+ }
264
+ return meta;
265
+ }
266
+ async function assertWorkerDoesNotExist(ctx, api, workerName) {
267
+ const response = await api.get(`/accounts/${api.accountId}/workers/scripts/${workerName}`);
268
+ if (response.status === 404) {
269
+ return true;
270
+ }
271
+ if (response.status === 200) {
272
+ const metadata = await getWorkerScriptMetadata(api, workerName);
273
+ if (!metadata) {
274
+ throw new Error(`Worker exists but failed to fetch metadata: ${response.status} ${response.statusText}`);
275
+ }
276
+ if (metadata.default_environment?.script.tags.includes(`alchemy:id:${ctx.resourceFQN}`)) {
277
+ return true;
278
+ }
279
+ throw new Error(`Worker with name '${workerName}' already exists. Please use a unique name.`);
280
+ }
281
+ else {
282
+ throw new Error(`Error checking if worker exists: ${response.status} ${response.statusText}`);
283
+ }
284
+ }
285
+ async function bundleWorkerScript(ctx, props) {
286
+ // Get the script content - either from props.script, or by bundling
287
+ // Create and use a Bundle resource with worker-optimized configuration
288
+ const defaultBundleOptions = {
289
+ format: props.format === "cjs" ? "cjs" : "esm", // Use the specified format or default to ESM
290
+ target: "es2020",
291
+ platform: "browser",
292
+ minify: true,
293
+ options: {
294
+ keepNames: true, // Important for Durable Object classes
295
+ },
296
+ };
297
+ // Merge with user-provided options
298
+ const bundleOptions = {
299
+ ...defaultBundleOptions,
300
+ ...(props.bundle || {}),
301
+ };
302
+ // Create the bundle
303
+ const bundle = new Bundle("bundle", {
304
+ entryPoint: props.entrypoint,
305
+ ...bundleOptions,
306
+ external: [...(bundleOptions.external ?? []), "cloudflare:workers"],
307
+ });
308
+ // Get the bundled content
309
+ const bundleOutput = await apply(bundle, {
310
+ quiet: ctx.quiet,
311
+ });
312
+ try {
313
+ return await fs.readFile(bundleOutput.path, "utf-8");
314
+ }
315
+ catch (error) {
316
+ console.error("Error reading bundle:", error);
317
+ throw new Error("Error reading bundle");
318
+ }
319
+ }
320
+ async function setupRoutes(api, workerName, routes) {
321
+ // Set up routes if provided
322
+ if (routes && routes.length > 0 && api.zoneId) {
323
+ // First get existing routes
324
+ const routesResponse = await api.get(`/zones/${api.zoneId}/workers/routes`);
325
+ if (!routesResponse.ok) {
326
+ throw new Error(`Could not fetch routes: ${routesResponse.status} ${routesResponse.statusText}`);
327
+ }
328
+ const routesData = await routesResponse.json();
329
+ const existingRoutes = routesData.result || [];
330
+ // For each desired route
331
+ for (const pattern of routes) {
332
+ const existingRoute = existingRoutes.find((r) => r.pattern === pattern);
333
+ if (existingRoute) {
334
+ // Update if script name doesn't match
335
+ if (existingRoute.script !== workerName) {
336
+ const updateRouteResponse = await api.put(`/zones/${api.zoneId}/workers/routes/${existingRoute.id}`, {
337
+ pattern,
338
+ script: workerName,
339
+ });
340
+ if (!updateRouteResponse.ok) {
341
+ console.warn(`Failed to update route ${pattern}: ${updateRouteResponse.status} ${updateRouteResponse.statusText}`);
342
+ }
343
+ }
344
+ }
345
+ else {
346
+ // Create new route
347
+ const createRouteResponse = await api.post(`/zones/${api.zoneId}/workers/routes`, {
348
+ pattern,
349
+ script: workerName,
350
+ });
351
+ if (!createRouteResponse.ok) {
352
+ throw new Error(`Failed to create route ${pattern}: ${createRouteResponse.status} ${createRouteResponse.statusText}`);
353
+ }
354
+ }
355
+ }
356
+ }
357
+ }
358
+ async function configureURL(ctx, api, workerName, url) {
359
+ let workerUrl;
360
+ if (url) {
361
+ // Enable the workers.dev subdomain for this worker
362
+ await api.post(`/accounts/${api.accountId}/workers/scripts/${workerName}/subdomain`, { enabled: true, previews_enabled: true }, {
363
+ headers: { "Content-Type": "application/json" },
364
+ });
365
+ // Get the account's workers.dev subdomain
366
+ const subdomainResponse = await api.get(`/accounts/${api.accountId}/workers/subdomain`);
367
+ if (!subdomainResponse.ok) {
368
+ throw new Error(`Could not fetch workers.dev subdomain: ${subdomainResponse.status} ${subdomainResponse.statusText}`);
369
+ }
370
+ const subdomainData = await subdomainResponse.json();
371
+ const subdomain = subdomainData.result?.subdomain;
372
+ if (subdomain) {
373
+ workerUrl = `https://${workerName}.${subdomain}.workers.dev`;
374
+ // Add a delay when the subdomain is first created.
375
+ // This is to prevent an issue where a negative cache-hit
376
+ // causes the subdomain to be unavailable for 30 seconds.
377
+ if (ctx.event === "create" || !ctx.output?.url) {
378
+ await new Promise((resolve) => setTimeout(resolve, 3000));
379
+ }
380
+ }
381
+ }
382
+ else if (url === false && ctx.output?.url) {
383
+ // Explicitly disable URL if it was previously enabled
384
+ const response = await api.post(`/accounts/${api.accountId}/workers/scripts/${workerName}/subdomain`, JSON.stringify({ enabled: false }), {
385
+ headers: { "Content-Type": "application/json" },
386
+ });
387
+ if (!response.ok) {
388
+ throw new Error(`Failed to disable worker URL: ${response.status} ${response.statusText}`);
389
+ }
390
+ }
391
+ return workerUrl;
392
+ }
393
+ async function getWorkerScriptMetadata(api, workerName) {
394
+ const response = await api.get(`/accounts/${api.accountId}/workers/services/${workerName}`);
395
+ if (response.status === 404) {
396
+ return undefined;
397
+ }
398
+ if (!response.ok) {
399
+ throw new Error(`Error getting worker script metadata: ${response.status} ${response.statusText}`);
400
+ }
401
+ return (await response.json()).result;
402
+ }
403
+ async function getWorkerBindings(api, workerName, environment = "production") {
404
+ const response = await api.get(`/accounts/${api.accountId}/workers/services/${workerName}/environments/${environment}/bindings`, {
405
+ headers: {
406
+ Authorization: `Bearer ${process.env.CLOUDFLARE_API_TOKEN}`,
407
+ "Content-Type": "application/json",
408
+ },
409
+ });
410
+ if (response.status === 404) {
411
+ return undefined;
412
+ }
413
+ if (!response.ok) {
414
+ throw new Error(`Failed to fetch bindings: ${response.status} ${response.statusText}`);
415
+ }
416
+ const data = await response.json();
417
+ return data.result;
418
+ }
419
+ //# sourceMappingURL=worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/cloudflare/worker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { Output } from "./output";
2
+ import { Provider, ResourceID } from "./resource";
3
+ import { type Scope } from "./scope";
4
+ import type { State, StateStore } from "./state";
5
+ export interface DestroyOptions {
6
+ stage?: string;
7
+ stateStore?: StateStore;
8
+ scope?: Scope;
9
+ quiet?: boolean;
10
+ }
11
+ /**
12
+ * Prune all resources from an Output and "down", i.e. that branches from it.
13
+ */
14
+ export declare function destroy<T>(output: Output<T>, options?: DestroyOptions): Promise<void>;
15
+ /**
16
+ * @internal
17
+ */
18
+ export declare function destroy<T>(stage: string, scope: Scope, resourceID: ResourceID, resourceState: State, resourceProvider: Provider, stateStore: StateStore, options: DestroyOptions): Promise<void>;
19
+ //# sourceMappingURL=destroy.d.ts.map
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Encrypt a value with a symmetric key using libsodium
3
+ *
4
+ * @param value - The value to encrypt
5
+ * @param key - The encryption key
6
+ * @returns The base64-encoded encrypted value with nonce
7
+ */
8
+ export declare function encryptWithKey(value: string, key: string): Promise<string>;
9
+ /**
10
+ * Decrypt a value encrypted with a symmetric key
11
+ *
12
+ * @param encryptedValue - The base64-encoded encrypted value with nonce
13
+ * @param key - The decryption key
14
+ * @returns The decrypted string
15
+ */
16
+ export declare function decryptWithKey(encryptedValue: string, key: string): Promise<string>;
17
+ //# sourceMappingURL=encrypt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encrypt.d.ts","sourceRoot":"","sources":["../src/encrypt.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,CAAC,CA0BjB;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAClC,cAAc,EAAE,MAAM,EACtB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,CAAC,CA4BjB"}
package/lib/encrypt.js ADDED
@@ -0,0 +1,45 @@
1
+ import sodium from "libsodium-wrappers";
2
+ /**
3
+ * Encrypt a value with a symmetric key using libsodium
4
+ *
5
+ * @param value - The value to encrypt
6
+ * @param key - The encryption key
7
+ * @returns The base64-encoded encrypted value with nonce
8
+ */
9
+ export async function encryptWithKey(value, key) {
10
+ // Initialize libsodium
11
+ await sodium.ready;
12
+ // Derive a key from the passphrase
13
+ const cryptoKey = sodium.crypto_generichash(sodium.crypto_secretbox_KEYBYTES, sodium.from_string(key));
14
+ // Generate a random nonce
15
+ const nonce = sodium.randombytes_buf(sodium.crypto_secretbox_NONCEBYTES);
16
+ // Encrypt the message
17
+ const encryptedBin = sodium.crypto_secretbox_easy(sodium.from_string(value), nonce, cryptoKey);
18
+ // Combine nonce and ciphertext, then encode to base64
19
+ const combined = new Uint8Array(nonce.length + encryptedBin.length);
20
+ combined.set(nonce);
21
+ combined.set(encryptedBin, nonce.length);
22
+ return sodium.to_base64(combined, sodium.base64_variants.ORIGINAL);
23
+ }
24
+ /**
25
+ * Decrypt a value encrypted with a symmetric key
26
+ *
27
+ * @param encryptedValue - The base64-encoded encrypted value with nonce
28
+ * @param key - The decryption key
29
+ * @returns The decrypted string
30
+ */
31
+ export async function decryptWithKey(encryptedValue, key) {
32
+ // Initialize libsodium
33
+ await sodium.ready;
34
+ // Derive a key from the passphrase
35
+ const cryptoKey = sodium.crypto_generichash(sodium.crypto_secretbox_KEYBYTES, sodium.from_string(key));
36
+ // Decode the base64 combined value
37
+ const combined = sodium.from_base64(encryptedValue, sodium.base64_variants.ORIGINAL);
38
+ // Extract nonce and ciphertext
39
+ const nonce = combined.slice(0, sodium.crypto_secretbox_NONCEBYTES);
40
+ const ciphertext = combined.slice(sodium.crypto_secretbox_NONCEBYTES);
41
+ // Decrypt the message
42
+ const decryptedBin = sodium.crypto_secretbox_open_easy(ciphertext, nonce, cryptoKey);
43
+ return sodium.to_string(decryptedBin);
44
+ }
45
+ //# sourceMappingURL=encrypt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encrypt.js","sourceRoot":"","sources":["../src/encrypt.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AAExC;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,KAAa,EACb,GAAW;IAEX,uBAAuB;IACvB,MAAM,MAAM,CAAC,KAAK,CAAC;IAEnB,mCAAmC;IACnC,MAAM,SAAS,GAAG,MAAM,CAAC,kBAAkB,CACzC,MAAM,CAAC,yBAAyB,EAChC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CACxB,CAAC;IAEF,0BAA0B;IAC1B,MAAM,KAAK,GAAG,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAAC;IAEzE,sBAAsB;IACtB,MAAM,YAAY,GAAG,MAAM,CAAC,qBAAqB,CAC/C,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,EACzB,KAAK,EACL,SAAS,CACV,CAAC;IAEF,sDAAsD;IACtD,MAAM,QAAQ,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACpE,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACpB,QAAQ,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAEzC,OAAO,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;AACrE,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,cAAsB,EACtB,GAAW;IAEX,uBAAuB;IACvB,MAAM,MAAM,CAAC,KAAK,CAAC;IAEnB,mCAAmC;IACnC,MAAM,SAAS,GAAG,MAAM,CAAC,kBAAkB,CACzC,MAAM,CAAC,yBAAyB,EAChC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CACxB,CAAC;IAEF,mCAAmC;IACnC,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,CACjC,cAAc,EACd,MAAM,CAAC,eAAe,CAAC,QAAQ,CAChC,CAAC;IAEF,+BAA+B;IAC/B,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,2BAA2B,CAAC,CAAC;IACpE,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAAC;IAEtE,sBAAsB;IACtB,MAAM,YAAY,GAAG,MAAM,CAAC,0BAA0B,CACpD,UAAU,EACV,KAAK,EACL,SAAS,CACV,CAAC;IAEF,OAAO,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;AACxC,CAAC"}
package/lib/error.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export declare function ignore<T>(codes: string | string[], fn: () => Promise<T>): Promise<T | undefined>;
2
+ //# sourceMappingURL=error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":"AAAA,wBAAsB,MAAM,CAAC,CAAC,EAC5B,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,EACxB,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACnB,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAYxB"}
package/lib/error.js ADDED
@@ -0,0 +1,13 @@
1
+ export async function ignore(codes, fn) {
2
+ try {
3
+ return await fn();
4
+ }
5
+ catch (error) {
6
+ const errorCode = error.code || error.name;
7
+ if (Array.isArray(codes) ? codes.includes(errorCode) : errorCode === codes) {
8
+ return undefined;
9
+ }
10
+ throw error;
11
+ }
12
+ }
13
+ //# sourceMappingURL=error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.js","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,KAAK,UAAU,MAAM,CAC1B,KAAwB,EACxB,EAAoB;IAEpB,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,EAAE,CAAC;IACpB,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC;QAC3C,IACE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,KAAK,KAAK,EACtE,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}