alchemy 0.1.11 → 0.1.12
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.
- package/README.md +324 -0
- package/lib/apply.d.ts +2 -2
- package/lib/apply.d.ts.map +1 -1
- package/lib/apply.js +2 -2
- package/lib/apply.js.map +1 -1
- package/lib/aws/index.d.ts +1 -0
- package/lib/aws/index.d.ts.map +1 -1
- package/lib/aws/index.js +1 -0
- package/lib/aws/index.js.map +1 -1
- package/lib/aws/ses.d.ts +75 -0
- package/lib/aws/ses.d.ts.map +1 -0
- package/lib/aws/ses.js +197 -0
- package/lib/aws/ses.js.map +1 -0
- package/lib/cloudflare/api.d.ts +84 -0
- package/lib/cloudflare/api.d.ts.map +1 -0
- package/lib/cloudflare/api.js +178 -0
- package/lib/cloudflare/api.js.map +1 -0
- package/lib/cloudflare/asset-manifest.d.ts +15 -0
- package/lib/cloudflare/asset-manifest.d.ts.map +1 -0
- package/lib/cloudflare/asset-manifest.js +2 -0
- package/lib/cloudflare/asset-manifest.js.map +1 -0
- package/lib/cloudflare/auth.d.ts +52 -0
- package/lib/cloudflare/auth.d.ts.map +1 -0
- package/lib/cloudflare/auth.js +114 -0
- package/lib/cloudflare/auth.js.map +1 -0
- package/lib/cloudflare/bindings.d.ts +244 -0
- package/lib/cloudflare/bindings.d.ts.map +1 -0
- package/lib/cloudflare/bindings.js +7 -0
- package/lib/cloudflare/bindings.js.map +1 -0
- package/lib/cloudflare/generate-asset-manifest.d.ts +3 -0
- package/lib/cloudflare/generate-asset-manifest.d.ts.map +1 -0
- package/lib/cloudflare/generate-asset-manifest.js +69 -0
- package/lib/cloudflare/generate-asset-manifest.js.map +1 -0
- package/lib/cloudflare/index.d.ts +6 -0
- package/lib/cloudflare/index.d.ts.map +1 -0
- package/lib/cloudflare/index.js +6 -0
- package/lib/cloudflare/index.js.map +1 -0
- package/lib/cloudflare/kv-namespace.d.ts +61 -0
- package/lib/cloudflare/kv-namespace.d.ts.map +1 -0
- package/lib/cloudflare/kv-namespace.js +93 -0
- package/lib/cloudflare/kv-namespace.js.map +1 -0
- package/lib/cloudflare/state.d.ts +83 -0
- package/lib/cloudflare/state.d.ts.map +1 -0
- package/lib/cloudflare/state.js +109 -0
- package/lib/cloudflare/state.js.map +1 -0
- package/lib/cloudflare/static-site-router.d.ts +10 -0
- package/lib/cloudflare/static-site-router.d.ts.map +1 -0
- package/lib/cloudflare/static-site-router.js +88 -0
- package/lib/cloudflare/static-site-router.js.map +1 -0
- package/lib/cloudflare/static-site.d.ts +166 -0
- package/lib/cloudflare/static-site.d.ts.map +1 -0
- package/lib/cloudflare/static-site.js +152 -0
- package/lib/cloudflare/static-site.js.map +1 -0
- package/lib/cloudflare/types.d.ts +52 -0
- package/lib/cloudflare/types.d.ts.map +1 -0
- package/lib/cloudflare/types.js +21 -0
- package/lib/cloudflare/types.js.map +1 -0
- package/lib/cloudflare/upload-asset-manifest.d.ts +12 -0
- package/lib/cloudflare/upload-asset-manifest.d.ts.map +1 -0
- package/lib/cloudflare/upload-asset-manifest.js +55 -0
- package/lib/cloudflare/upload-asset-manifest.js.map +1 -0
- package/lib/cloudflare/worker.d.ts +87 -0
- package/lib/cloudflare/worker.d.ts.map +1 -0
- package/lib/cloudflare/worker.js +364 -0
- package/lib/cloudflare/worker.js.map +1 -0
- package/lib/esbuild.d.ts +82 -0
- package/lib/esbuild.d.ts.map +1 -1
- package/lib/esbuild.js +24 -17
- package/lib/esbuild.js.map +1 -1
- package/lib/fs.d.ts +1 -1
- package/lib/global.d.ts.map +1 -1
- package/lib/global.js +3 -1
- package/lib/global.js.map +1 -1
- package/lib/index.d.ts +0 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +0 -1
- package/lib/index.js.map +1 -1
- package/lib/main.js +1 -1
- package/lib/main.js.map +1 -1
- package/lib/output.d.ts +17 -13
- package/lib/output.d.ts.map +1 -1
- package/lib/output.js +2 -2
- package/lib/output.js.map +1 -1
- package/lib/resource.d.ts +3 -2
- package/lib/resource.d.ts.map +1 -1
- package/lib/resource.js +2 -2
- package/lib/resource.js.map +1 -1
- package/lib/utils/content-type.d.ts +8 -0
- package/lib/utils/content-type.d.ts.map +1 -0
- package/lib/utils/content-type.js +41 -0
- package/lib/utils/content-type.js.map +1 -0
- package/package.json +26 -8
- package/src/apply.ts +5 -5
- package/src/aws/index.ts +1 -0
- package/src/aws/ses.ts +346 -0
- package/src/cloudflare/api.ts +276 -0
- package/src/cloudflare/asset-manifest.ts +16 -0
- package/src/cloudflare/auth.ts +187 -0
- package/src/cloudflare/bindings.ts +286 -0
- package/src/cloudflare/generate-asset-manifest.ts +93 -0
- package/src/cloudflare/index.ts +5 -0
- package/src/cloudflare/kv-namespace.ts +195 -0
- package/src/cloudflare/state.ts +138 -0
- package/src/cloudflare/static-site-router.ts +108 -0
- package/src/cloudflare/static-site.ts +379 -0
- package/src/cloudflare/types.ts +71 -0
- package/src/cloudflare/upload-asset-manifest.ts +83 -0
- package/src/cloudflare/worker.ts +568 -0
- package/src/esbuild.ts +31 -22
- package/src/global.ts +1 -0
- package/src/index.ts +0 -1
- package/src/main.ts +1 -1
- package/src/output.ts +32 -32
- package/src/resource.ts +11 -5
- package/src/utils/content-type.ts +42 -0
- package/lib/$.d.ts +0 -7
- package/lib/$.d.ts.map +0 -1
- package/lib/$.js +0 -31
- package/lib/$.js.map +0 -1
- package/lib/agent/ai.d.ts +0 -40
- package/lib/agent/ai.d.ts.map +0 -1
- package/lib/agent/ai.js +0 -132
- package/lib/agent/ai.js.map +0 -1
- package/lib/agent/anthropic.d.ts +0 -9
- package/lib/agent/anthropic.d.ts.map +0 -1
- package/lib/agent/anthropic.js +0 -25
- package/lib/agent/anthropic.js.map +0 -1
- package/lib/agent/dependencies.d.ts +0 -4
- package/lib/agent/dependencies.d.ts.map +0 -1
- package/lib/agent/dependencies.js +0 -48
- package/lib/agent/dependencies.js.map +0 -1
- package/lib/agent/file-context.d.ts +0 -13
- package/lib/agent/file-context.d.ts.map +0 -1
- package/lib/agent/file-context.js +0 -6
- package/lib/agent/file-context.js.map +0 -1
- package/lib/agent/index.d.ts +0 -10
- package/lib/agent/index.d.ts.map +0 -1
- package/lib/agent/index.js +0 -10
- package/lib/agent/index.js.map +0 -1
- package/lib/agent/model.d.ts +0 -8
- package/lib/agent/model.d.ts.map +0 -1
- package/lib/agent/model.js +0 -29
- package/lib/agent/model.js.map +0 -1
- package/lib/agent/module.d.ts +0 -81
- package/lib/agent/module.d.ts.map +0 -1
- package/lib/agent/module.js +0 -309
- package/lib/agent/module.js.map +0 -1
- package/lib/agent/openai.d.ts +0 -6
- package/lib/agent/openai.d.ts.map +0 -1
- package/lib/agent/openai.js +0 -41
- package/lib/agent/openai.js.map +0 -1
- package/lib/agent/program.d.ts +0 -12
- package/lib/agent/program.d.ts.map +0 -1
- package/lib/agent/program.js +0 -21
- package/lib/agent/program.js.map +0 -1
- package/lib/agent/prompts.d.ts +0 -4
- package/lib/agent/prompts.d.ts.map +0 -1
- package/lib/agent/prompts.js +0 -11
- package/lib/agent/prompts.js.map +0 -1
- package/lib/agent/scrape.d.ts +0 -71
- package/lib/agent/scrape.d.ts.map +0 -1
- package/lib/agent/scrape.js +0 -45
- package/lib/agent/scrape.js.map +0 -1
- package/lib/aws/auto/docs.d.ts +0 -11
- package/lib/aws/auto/docs.d.ts.map +0 -1
- package/lib/aws/auto/docs.js +0 -56
- package/lib/aws/auto/docs.js.map +0 -1
- package/lib/aws/auto/index.d.ts +0 -5
- package/lib/aws/auto/index.d.ts.map +0 -1
- package/lib/aws/auto/index.js +0 -5
- package/lib/aws/auto/index.js.map +0 -1
- package/lib/aws/auto/resource.d.ts +0 -24
- package/lib/aws/auto/resource.d.ts.map +0 -1
- package/lib/aws/auto/resource.js +0 -194
- package/lib/aws/auto/resource.js.map +0 -1
- package/lib/aws/auto/service.d.ts +0 -10
- package/lib/aws/auto/service.d.ts.map +0 -1
- package/lib/aws/auto/service.js +0 -34
- package/lib/aws/auto/service.js.map +0 -1
- package/lib/aws/auto/spec.d.ts +0 -83
- package/lib/aws/auto/spec.d.ts.map +0 -1
- package/lib/aws/auto/spec.js +0 -58
- package/lib/aws/auto/spec.js.map +0 -1
- package/lib/markdown/design.d.ts +0 -17
- package/lib/markdown/design.d.ts.map +0 -1
- package/lib/markdown/design.js +0 -92
- package/lib/markdown/design.js.map +0 -1
- package/lib/markdown/extract.d.ts +0 -7
- package/lib/markdown/extract.d.ts.map +0 -1
- package/lib/markdown/extract.js +0 -10
- package/lib/markdown/extract.js.map +0 -1
- package/lib/markdown/index.d.ts +0 -4
- package/lib/markdown/index.d.ts.map +0 -1
- package/lib/markdown/index.js +0 -4
- package/lib/markdown/index.js.map +0 -1
- package/lib/markdown/requirements.d.ts +0 -79
- package/lib/markdown/requirements.d.ts.map +0 -1
- package/lib/markdown/requirements.js +0 -105
- package/lib/markdown/requirements.js.map +0 -1
- package/lib/typescript/check-omission.d.ts +0 -2
- package/lib/typescript/check-omission.d.ts.map +0 -1
- package/lib/typescript/check-omission.js +0 -43
- package/lib/typescript/check-omission.js.map +0 -1
- package/lib/typescript/debug-type-errors.d.ts +0 -3
- package/lib/typescript/debug-type-errors.d.ts.map +0 -1
- package/lib/typescript/debug-type-errors.js +0 -35
- package/lib/typescript/debug-type-errors.js.map +0 -1
- package/lib/typescript/extract.d.ts +0 -7
- package/lib/typescript/extract.d.ts.map +0 -1
- package/lib/typescript/extract.js +0 -10
- package/lib/typescript/extract.js.map +0 -1
- package/lib/typescript/index.d.ts +0 -7
- package/lib/typescript/index.d.ts.map +0 -1
- package/lib/typescript/index.js +0 -7
- package/lib/typescript/index.js.map +0 -1
- package/lib/typescript/install-dependencies.d.ts +0 -29
- package/lib/typescript/install-dependencies.d.ts.map +0 -1
- package/lib/typescript/install-dependencies.js +0 -52
- package/lib/typescript/install-dependencies.js.map +0 -1
- package/lib/typescript/package.d.ts +0 -157
- package/lib/typescript/package.d.ts.map +0 -1
- package/lib/typescript/package.js +0 -115
- package/lib/typescript/package.js.map +0 -1
- package/lib/typescript/repair-omissions.d.ts +0 -3
- package/lib/typescript/repair-omissions.d.ts.map +0 -1
- package/lib/typescript/repair-omissions.js +0 -23
- package/lib/typescript/repair-omissions.js.map +0 -1
- package/lib/typescript/repair.d.ts +0 -3
- package/lib/typescript/repair.d.ts.map +0 -1
- package/lib/typescript/repair.js +0 -34
- package/lib/typescript/repair.js.map +0 -1
- package/lib/typescript/tsconfig.d.ts +0 -469
- package/lib/typescript/tsconfig.d.ts.map +0 -1
- package/lib/typescript/tsconfig.js +0 -143
- package/lib/typescript/tsconfig.js.map +0 -1
- package/lib/typescript/typescript.d.ts +0 -107
- package/lib/typescript/typescript.d.ts.map +0 -1
- package/lib/typescript/typescript.js +0 -180
- package/lib/typescript/typescript.js.map +0 -1
- package/lib/typescript/validate.d.ts +0 -10
- package/lib/typescript/validate.d.ts.map +0 -1
- package/lib/typescript/validate.js +0 -49
- package/lib/typescript/validate.js.map +0 -1
- package/src/$.ts +0 -36
- package/src/agent/ai.ts +0 -215
- package/src/agent/anthropic.ts +0 -31
- package/src/agent/dependencies.ts +0 -62
- package/src/agent/file-context.ts +0 -8
- package/src/agent/index.ts +0 -9
- package/src/agent/model.ts +0 -39
- package/src/agent/module.ts +0 -418
- package/src/agent/openai.ts +0 -50
- package/src/agent/program.md +0 -38
- package/src/agent/program.ts +0 -37
- package/src/agent/prompts.ts +0 -20
- package/src/agent/scrape.ts +0 -47
- package/src/aws/auto/cfn.json +0 -225310
- package/src/aws/auto/docs.ts +0 -73
- package/src/aws/auto/index.ts +0 -4
- package/src/aws/auto/resource.ts +0 -269
- package/src/aws/auto/service.ts +0 -51
- package/src/aws/auto/spec.ts +0 -160
- package/src/markdown/design.ts +0 -125
- package/src/markdown/extract.ts +0 -9
- package/src/markdown/index.ts +0 -3
- package/src/markdown/requirements.ts +0 -135
- package/src/typescript/check-omission.ts +0 -47
- package/src/typescript/debug-type-errors.ts +0 -42
- package/src/typescript/extract.ts +0 -9
- package/src/typescript/index.ts +0 -6
- package/src/typescript/install-dependencies.ts +0 -61
- package/src/typescript/package.ts +0 -143
- package/src/typescript/repair-omissions.ts +0 -31
- package/src/typescript/repair.ts +0 -45
- package/src/typescript/tsconfig.ts +0 -170
- package/src/typescript/typescript.ts +0 -217
- package/src/typescript/validate.ts +0 -73
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cloudflare API response format
|
|
3
|
+
*/
|
|
4
|
+
export interface CloudflareApiResponse<T> {
|
|
5
|
+
/**
|
|
6
|
+
* API response result
|
|
7
|
+
*/
|
|
8
|
+
result: T;
|
|
9
|
+
/**
|
|
10
|
+
* Success status
|
|
11
|
+
*/
|
|
12
|
+
success: boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Error details if success is false
|
|
15
|
+
*/
|
|
16
|
+
errors: CloudflareApiError[];
|
|
17
|
+
/**
|
|
18
|
+
* Response messages
|
|
19
|
+
*/
|
|
20
|
+
messages: string[];
|
|
21
|
+
/**
|
|
22
|
+
* Result information (typically for paginated results)
|
|
23
|
+
*/
|
|
24
|
+
result_info?: {
|
|
25
|
+
page: number;
|
|
26
|
+
per_page: number;
|
|
27
|
+
total_pages: number;
|
|
28
|
+
count: number;
|
|
29
|
+
total_count: number;
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Cloudflare API error format
|
|
34
|
+
*/
|
|
35
|
+
export interface CloudflareApiError {
|
|
36
|
+
/**
|
|
37
|
+
* Error code
|
|
38
|
+
*/
|
|
39
|
+
code: number;
|
|
40
|
+
/**
|
|
41
|
+
* Error message
|
|
42
|
+
*/
|
|
43
|
+
message: string;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Helper to extract and handle Cloudflare API errors
|
|
47
|
+
*
|
|
48
|
+
* @param response Fetch response object
|
|
49
|
+
* @returns Formatted error message
|
|
50
|
+
*/
|
|
51
|
+
export declare function extractCloudflareError(response: Response): Promise<string>;
|
|
52
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/cloudflare/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,qBAAqB,CAAC,CAAC;IACtC;;OAEG;IACH,MAAM,EAAE,CAAC,CAAC;IAEV;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;IAEjB;;OAEG;IACH,MAAM,EAAE,kBAAkB,EAAE,CAAC;IAE7B;;OAEG;IACH,QAAQ,EAAE,MAAM,EAAE,CAAC;IAEnB;;OAEG;IACH,WAAW,CAAC,EAAE;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAC1C,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,MAAM,CAAC,CAWjB"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Helper to extract and handle Cloudflare API errors
|
|
3
|
+
*
|
|
4
|
+
* @param response Fetch response object
|
|
5
|
+
* @returns Formatted error message
|
|
6
|
+
*/
|
|
7
|
+
export async function extractCloudflareError(response) {
|
|
8
|
+
try {
|
|
9
|
+
const data = (await response.json());
|
|
10
|
+
if (data.errors && data.errors.length > 0) {
|
|
11
|
+
return data.errors.map((e) => `Error ${e.code}: ${e.message}`).join(", ");
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
return `HTTP ${response.status}: ${response.statusText}`;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
catch (e) {
|
|
18
|
+
return `HTTP ${response.status}: ${response.statusText}`;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/cloudflare/types.ts"],"names":[],"mappings":"AAmDA;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,QAAkB;IAElB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAA+B,CAAC;QACnE,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1C,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5E,CAAC;aAAM,CAAC;YACN,OAAO,QAAQ,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,UAAU,EAAE,CAAC;QAC3D,CAAC;IACH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,QAAQ,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,UAAU,EAAE,CAAC;IAC3D,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { CloudflareApi } from "./api";
|
|
2
|
+
import type { AssetManifest } from "./asset-manifest";
|
|
3
|
+
type AssetItem = AssetManifest[number];
|
|
4
|
+
type UploadResult = {
|
|
5
|
+
item: AssetItem;
|
|
6
|
+
success: boolean;
|
|
7
|
+
status?: number;
|
|
8
|
+
error?: unknown;
|
|
9
|
+
};
|
|
10
|
+
export declare function uploadAssetManifest(api: CloudflareApi, namespaceId: string, manifest: AssetManifest): Promise<UploadResult[]>;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=upload-asset-manifest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upload-asset-manifest.d.ts","sourceRoot":"","sources":["../../src/cloudflare/upload-asset-manifest.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAMtD,KAAK,SAAS,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;AACvC,KAAK,YAAY,GAAG;IAClB,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,aAAa,EAClB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,aAAa,GACtB,OAAO,CAAC,YAAY,EAAE,CAAC,CA8DzB"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import fs from "node:fs/promises";
|
|
2
|
+
// Maximum number of concurrent uploads
|
|
3
|
+
const MAX_CONCURRENT = 100; // Adjust based on API limits and performance testing
|
|
4
|
+
export async function uploadAssetManifest(api, namespaceId, manifest) {
|
|
5
|
+
const results = [];
|
|
6
|
+
// Process in batches with controlled concurrency
|
|
7
|
+
let index = 0;
|
|
8
|
+
const activePromises = new Set();
|
|
9
|
+
while (index < manifest.length || activePromises.size > 0) {
|
|
10
|
+
// Fill up to MAX_CONCURRENT active uploads
|
|
11
|
+
while (activePromises.size < MAX_CONCURRENT && index < manifest.length) {
|
|
12
|
+
const item = manifest[index++];
|
|
13
|
+
const promise = uploadItem(item).then((result) => {
|
|
14
|
+
results.push(result);
|
|
15
|
+
activePromises.delete(promise);
|
|
16
|
+
});
|
|
17
|
+
activePromises.add(promise);
|
|
18
|
+
}
|
|
19
|
+
// Wait for at least one promise to complete if we have any active
|
|
20
|
+
if (activePromises.size > 0) {
|
|
21
|
+
await Promise.race(activePromises);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return results;
|
|
25
|
+
async function uploadItem(item) {
|
|
26
|
+
const content = await fs.readFile(item.source);
|
|
27
|
+
// Create metadata object
|
|
28
|
+
const metadata = {
|
|
29
|
+
key: item.key,
|
|
30
|
+
hash: item.hash,
|
|
31
|
+
contentType: item.contentType,
|
|
32
|
+
cacheControl: item.cacheControl,
|
|
33
|
+
};
|
|
34
|
+
// Create FormData for multipart upload
|
|
35
|
+
const formData = new FormData();
|
|
36
|
+
formData.append("metadata", JSON.stringify(metadata));
|
|
37
|
+
// Add file content as 'value'
|
|
38
|
+
const blob = new Blob([content]);
|
|
39
|
+
formData.append("value", blob);
|
|
40
|
+
try {
|
|
41
|
+
const response = await api.put(`/accounts/${api.accountId}/storage/kv/namespaces/${namespaceId}/values/${item.key}`, formData);
|
|
42
|
+
const result = { item, success: response.ok, status: response.status };
|
|
43
|
+
if (!result.success) {
|
|
44
|
+
console.warn(`Error uploading asset ${item.key}: ${result.status}`);
|
|
45
|
+
}
|
|
46
|
+
return result;
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
const result = { item, success: false, error };
|
|
50
|
+
console.warn(`Error uploading asset ${item.key}: ${error}`);
|
|
51
|
+
return result;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=upload-asset-manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upload-asset-manifest.js","sourceRoot":"","sources":["../../src/cloudflare/upload-asset-manifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { Bundle, type BundleProps } from "../esbuild";
|
|
2
|
+
import type { WorkerBinding } from "./bindings";
|
|
3
|
+
/**
|
|
4
|
+
* Properties for creating or updating a Worker
|
|
5
|
+
*/
|
|
6
|
+
export interface WorkerProps {
|
|
7
|
+
/**
|
|
8
|
+
* The worker script content (JavaScript or WASM)
|
|
9
|
+
* One of script, entryPoint, or bundle must be provided
|
|
10
|
+
*/
|
|
11
|
+
script?: string;
|
|
12
|
+
/**
|
|
13
|
+
* Path to the entry point file
|
|
14
|
+
* Will be bundled using esbuild
|
|
15
|
+
* One of script, entryPoint, or bundle must be provided
|
|
16
|
+
*/
|
|
17
|
+
entrypoint?: string;
|
|
18
|
+
/**
|
|
19
|
+
* Reference to a pre-configured Bundle resource
|
|
20
|
+
* One of script, entryPoint, or bundle must be provided
|
|
21
|
+
*/
|
|
22
|
+
bundle?: Bundle;
|
|
23
|
+
/**
|
|
24
|
+
* Bundle options when using entryPoint
|
|
25
|
+
* Ignored if bundle is provided
|
|
26
|
+
*/
|
|
27
|
+
bundleOptions?: Omit<BundleProps, "entryPoint">;
|
|
28
|
+
/**
|
|
29
|
+
* Module format for the worker script
|
|
30
|
+
* 'esm' - ECMAScript modules (default)
|
|
31
|
+
* 'cjs' - CommonJS modules
|
|
32
|
+
* @default 'esm'
|
|
33
|
+
*/
|
|
34
|
+
format?: "esm" | "cjs";
|
|
35
|
+
/**
|
|
36
|
+
* Name for the worker
|
|
37
|
+
* This is mandatory - must be explicitly specified
|
|
38
|
+
*/
|
|
39
|
+
name: string;
|
|
40
|
+
/**
|
|
41
|
+
* Routes to associate with this worker
|
|
42
|
+
* Format: example.com/* or *.example.com/*
|
|
43
|
+
*/
|
|
44
|
+
routes?: string[];
|
|
45
|
+
/**
|
|
46
|
+
* Bindings to attach to the worker
|
|
47
|
+
*/
|
|
48
|
+
bindings?: WorkerBinding[];
|
|
49
|
+
/**
|
|
50
|
+
* Whether the worker should be deployed to production
|
|
51
|
+
* @default true
|
|
52
|
+
*/
|
|
53
|
+
production?: boolean;
|
|
54
|
+
/**
|
|
55
|
+
* Whether to enable a workers.dev URL for this worker
|
|
56
|
+
* If true, the worker will be available at {name}.{subdomain}.workers.dev
|
|
57
|
+
* @default false
|
|
58
|
+
*/
|
|
59
|
+
url?: boolean;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Output returned after Worker creation/update
|
|
63
|
+
*/
|
|
64
|
+
export interface WorkerOutput extends Omit<WorkerProps, "url"> {
|
|
65
|
+
/**
|
|
66
|
+
* The ID of the worker
|
|
67
|
+
*/
|
|
68
|
+
id: string;
|
|
69
|
+
/**
|
|
70
|
+
* Time at which the worker was created
|
|
71
|
+
*/
|
|
72
|
+
createdAt: number;
|
|
73
|
+
/**
|
|
74
|
+
* Time at which the worker was last updated
|
|
75
|
+
*/
|
|
76
|
+
updatedAt: number;
|
|
77
|
+
/**
|
|
78
|
+
* The worker's URL if enabled
|
|
79
|
+
* Format: {name}.{subdomain}.workers.dev
|
|
80
|
+
*/
|
|
81
|
+
url?: string;
|
|
82
|
+
}
|
|
83
|
+
declare const Worker_base: import("../resource").Provider<"cloudflare::Worker", [props: WorkerProps], WorkerOutput>;
|
|
84
|
+
export declare class Worker extends Worker_base {
|
|
85
|
+
}
|
|
86
|
+
export {};
|
|
87
|
+
//# sourceMappingURL=worker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/cloudflare/worker.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAGtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,aAAa,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IAEhD;;;;;OAKG;IACH,MAAM,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;IAEvB;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAElB;;OAEG;IACH,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAC;IAE3B;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;;OAIG;IACH,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,YAAa,SAAQ,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC;IAC5D;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;;AAED,qBAAa,MAAO,SAAQ,WAkd3B;CAAG"}
|
|
@@ -0,0 +1,364 @@
|
|
|
1
|
+
import * as fs from "fs/promises";
|
|
2
|
+
import { apply } from "../apply";
|
|
3
|
+
import { Bundle } from "../esbuild";
|
|
4
|
+
import { Resource } from "../resource";
|
|
5
|
+
import { createCloudflareApi } from "./api";
|
|
6
|
+
export class Worker extends Resource("cloudflare::Worker", async (ctx, props) => {
|
|
7
|
+
// Create Cloudflare API client with automatic account discovery
|
|
8
|
+
const api = await createCloudflareApi();
|
|
9
|
+
// Validate that a name is provided
|
|
10
|
+
if (!props.name) {
|
|
11
|
+
throw new Error("Worker name is required - must be explicitly specified");
|
|
12
|
+
}
|
|
13
|
+
// Use the provided name
|
|
14
|
+
const workerName = props.name;
|
|
15
|
+
// Validate input - we need either script, entryPoint, or bundle
|
|
16
|
+
if (!props.script && !props.entrypoint && !props.bundle) {
|
|
17
|
+
throw new Error("One of script, entryPoint, or bundle must be provided");
|
|
18
|
+
}
|
|
19
|
+
// For create operations, check if a worker with the same name already exists
|
|
20
|
+
if (ctx.event === "create") {
|
|
21
|
+
const checkExistsResponse = await api.get(`/accounts/${api.accountId}/workers/scripts/${workerName}`);
|
|
22
|
+
if (checkExistsResponse.ok) {
|
|
23
|
+
throw new Error(`Worker with name '${workerName}' already exists. Please use a unique name.`);
|
|
24
|
+
}
|
|
25
|
+
else if (checkExistsResponse.status !== 404) {
|
|
26
|
+
// If it's neither a success nor a 404, it's an unexpected error
|
|
27
|
+
const errorData = await checkExistsResponse.json().catch(() => ({
|
|
28
|
+
errors: [{ message: checkExistsResponse.statusText }],
|
|
29
|
+
}));
|
|
30
|
+
throw new Error(`Error checking if worker exists: ${errorData.errors?.[0]?.message || checkExistsResponse.statusText}`);
|
|
31
|
+
}
|
|
32
|
+
// If it's a 404, that means the worker doesn't exist yet, which is what we want
|
|
33
|
+
}
|
|
34
|
+
if (ctx.event === "delete") {
|
|
35
|
+
// Delete worker
|
|
36
|
+
const deleteResponse = await api.delete(`/accounts/${api.accountId}/workers/scripts/${workerName}`);
|
|
37
|
+
// Check for success (2xx status code)
|
|
38
|
+
if (!deleteResponse.ok && deleteResponse.status !== 404) {
|
|
39
|
+
const errorData = await deleteResponse
|
|
40
|
+
.json()
|
|
41
|
+
.catch(() => ({ errors: [{ message: deleteResponse.statusText }] }));
|
|
42
|
+
console.error("Error deleting worker:", errorData.errors?.[0]?.message || deleteResponse.statusText);
|
|
43
|
+
}
|
|
44
|
+
// Also remove any associated routes if they exist
|
|
45
|
+
if (ctx.output?.routes && ctx.output.routes.length > 0 && api.zoneId) {
|
|
46
|
+
// First get existing routes to find their IDs
|
|
47
|
+
const routesResponse = await api.get(`/zones/${api.zoneId}/workers/routes`);
|
|
48
|
+
if (routesResponse.ok) {
|
|
49
|
+
const routesData = await routesResponse.json();
|
|
50
|
+
const existingRoutes = routesData.result || [];
|
|
51
|
+
for (const route of existingRoutes) {
|
|
52
|
+
if (ctx.output.routes.includes(route.pattern)) {
|
|
53
|
+
// Delete the route
|
|
54
|
+
const routeDeleteResponse = await api.delete(`/zones/${api.zoneId}/workers/routes/${route.id}`);
|
|
55
|
+
if (!routeDeleteResponse.ok) {
|
|
56
|
+
console.warn(`Failed to delete route ${route.pattern}: ${routeDeleteResponse.status} ${routeDeleteResponse.statusText}`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
console.warn("Could not fetch routes for cleanup:", routesResponse.status, routesResponse.statusText);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
// Disable the URL if it was enabled
|
|
66
|
+
if (ctx.output?.url) {
|
|
67
|
+
try {
|
|
68
|
+
await api.post(`/accounts/${api.accountId}/workers/scripts/${workerName}/subdomain`, JSON.stringify({ enabled: false }), {
|
|
69
|
+
headers: { "Content-Type": "application/json" },
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
console.warn("Failed to disable worker URL during deletion:", error);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
// Return minimal output for deleted state
|
|
77
|
+
return {
|
|
78
|
+
...props,
|
|
79
|
+
id: "",
|
|
80
|
+
createdAt: 0,
|
|
81
|
+
updatedAt: 0,
|
|
82
|
+
url: undefined,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
// Get the script content - either from props.script, or by bundling
|
|
87
|
+
let scriptContent;
|
|
88
|
+
if (props.script) {
|
|
89
|
+
// Use the provided script
|
|
90
|
+
scriptContent = props.script;
|
|
91
|
+
}
|
|
92
|
+
else if (props.bundle) {
|
|
93
|
+
// Use a pre-configured Bundle resource
|
|
94
|
+
const bundleOutput = await apply(props.bundle);
|
|
95
|
+
scriptContent = await fs.readFile(bundleOutput.path, "utf-8");
|
|
96
|
+
}
|
|
97
|
+
else if (props.entrypoint) {
|
|
98
|
+
// Create and use a Bundle resource with worker-optimized configuration
|
|
99
|
+
const defaultBundleOptions = {
|
|
100
|
+
format: props.format === "cjs" ? "cjs" : "esm", // Use the specified format or default to ESM
|
|
101
|
+
target: "es2020",
|
|
102
|
+
platform: "browser",
|
|
103
|
+
minify: true,
|
|
104
|
+
options: {
|
|
105
|
+
keepNames: true, // Important for Durable Object classes
|
|
106
|
+
},
|
|
107
|
+
};
|
|
108
|
+
// Merge with user-provided options
|
|
109
|
+
const bundleOptions = {
|
|
110
|
+
...defaultBundleOptions,
|
|
111
|
+
...(props.bundleOptions || {}),
|
|
112
|
+
};
|
|
113
|
+
// Create the bundle
|
|
114
|
+
const bundle = new Bundle("bundle", {
|
|
115
|
+
entryPoint: props.entrypoint,
|
|
116
|
+
...bundleOptions,
|
|
117
|
+
});
|
|
118
|
+
// Get the bundled content
|
|
119
|
+
const bundleOutput = await apply(bundle);
|
|
120
|
+
try {
|
|
121
|
+
scriptContent = await fs.readFile(bundleOutput.path, "utf-8");
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
console.error("Error reading bundle:", error);
|
|
125
|
+
throw new Error("Error reading bundle");
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
throw new Error("No script source provided"); // Shouldn't reach here due to earlier validation
|
|
130
|
+
}
|
|
131
|
+
// Prepare metadata with bindings
|
|
132
|
+
const metadata = {
|
|
133
|
+
bindings: [],
|
|
134
|
+
};
|
|
135
|
+
// Convert bindings to the format expected by the API
|
|
136
|
+
if (props.bindings && props.bindings.length > 0) {
|
|
137
|
+
for (const binding of props.bindings) {
|
|
138
|
+
const bindingData = {
|
|
139
|
+
name: binding.name,
|
|
140
|
+
type: binding.type,
|
|
141
|
+
};
|
|
142
|
+
// Map binding properties to the API format based on binding type
|
|
143
|
+
switch (binding.type) {
|
|
144
|
+
case "kv_namespace":
|
|
145
|
+
bindingData.namespace_id = binding.namespace_id;
|
|
146
|
+
break;
|
|
147
|
+
case "durable_object_namespace":
|
|
148
|
+
bindingData.class_name = binding.class_name;
|
|
149
|
+
if (binding.namespace_id) {
|
|
150
|
+
bindingData.namespace_id = binding.namespace_id;
|
|
151
|
+
}
|
|
152
|
+
if (binding.script_name) {
|
|
153
|
+
bindingData.script_name = binding.script_name;
|
|
154
|
+
}
|
|
155
|
+
if (binding.environment) {
|
|
156
|
+
bindingData.environment = binding.environment;
|
|
157
|
+
}
|
|
158
|
+
break;
|
|
159
|
+
case "secret_text":
|
|
160
|
+
bindingData.text = binding.text;
|
|
161
|
+
break;
|
|
162
|
+
case "r2_bucket":
|
|
163
|
+
bindingData.bucket_name = binding.bucket_name;
|
|
164
|
+
break;
|
|
165
|
+
case "analytics_engine":
|
|
166
|
+
bindingData.dataset = binding.dataset;
|
|
167
|
+
break;
|
|
168
|
+
case "service":
|
|
169
|
+
bindingData.service = binding.service;
|
|
170
|
+
if (binding.environment) {
|
|
171
|
+
bindingData.environment = binding.environment;
|
|
172
|
+
}
|
|
173
|
+
if (binding.namespace) {
|
|
174
|
+
bindingData.namespace = binding.namespace;
|
|
175
|
+
}
|
|
176
|
+
break;
|
|
177
|
+
case "d1":
|
|
178
|
+
bindingData.id = binding.id;
|
|
179
|
+
break;
|
|
180
|
+
case "queue":
|
|
181
|
+
bindingData.queue_name = binding.queue_name;
|
|
182
|
+
break;
|
|
183
|
+
case "json":
|
|
184
|
+
bindingData.json = binding.json;
|
|
185
|
+
break;
|
|
186
|
+
case "hyperdrive":
|
|
187
|
+
bindingData.id = binding.id;
|
|
188
|
+
break;
|
|
189
|
+
case "vectorize":
|
|
190
|
+
bindingData.index_name = binding.index_name;
|
|
191
|
+
break;
|
|
192
|
+
case "dispatch_namespace":
|
|
193
|
+
bindingData.namespace = binding.namespace;
|
|
194
|
+
if (binding.outbound) {
|
|
195
|
+
bindingData.outbound = binding.outbound;
|
|
196
|
+
}
|
|
197
|
+
break;
|
|
198
|
+
case "mtls_certificate":
|
|
199
|
+
bindingData.certificate_id = binding.certificate_id;
|
|
200
|
+
break;
|
|
201
|
+
case "plain_text":
|
|
202
|
+
bindingData.text = binding.text;
|
|
203
|
+
break;
|
|
204
|
+
case "wasm_module":
|
|
205
|
+
bindingData.module = binding.module;
|
|
206
|
+
break;
|
|
207
|
+
case "tail_consumer":
|
|
208
|
+
bindingData.service = binding.service;
|
|
209
|
+
break;
|
|
210
|
+
}
|
|
211
|
+
metadata.bindings.push(bindingData);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
// Create FormData for the upload
|
|
215
|
+
const formData = new FormData();
|
|
216
|
+
// Determine if we're using ESM or service worker format
|
|
217
|
+
const isEsModule = props.format !== "cjs"; // Default to ESM unless CJS is specified
|
|
218
|
+
const scriptName = isEsModule ? "worker.js" : "script";
|
|
219
|
+
const contentType = isEsModule
|
|
220
|
+
? "application/javascript+module"
|
|
221
|
+
: "application/javascript";
|
|
222
|
+
// Prepare metadata
|
|
223
|
+
const updatedMetadata = {
|
|
224
|
+
...metadata,
|
|
225
|
+
};
|
|
226
|
+
// Add Durable Object migrations if there are any DO bindings
|
|
227
|
+
const durableObjectBindings = props.bindings?.filter((binding) => binding.type === "durable_object_namespace" &&
|
|
228
|
+
// Only include self-referencing DOs (ones defined in this script)
|
|
229
|
+
binding.script_name === props.name);
|
|
230
|
+
if (durableObjectBindings && durableObjectBindings.length > 0) {
|
|
231
|
+
// Add migrations metadata for Durable Objects
|
|
232
|
+
updatedMetadata.migrations = {
|
|
233
|
+
new_classes: durableObjectBindings.map((binding) => binding.class_name),
|
|
234
|
+
deleted_classes: [],
|
|
235
|
+
renamed_classes: [],
|
|
236
|
+
// Version 2 migrations
|
|
237
|
+
new_sqlite_classes: [],
|
|
238
|
+
updated_sqlite_classes: [],
|
|
239
|
+
renamed_sqlite_classes: [],
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
if (isEsModule) {
|
|
243
|
+
// For ES modules format
|
|
244
|
+
updatedMetadata.main_module = scriptName;
|
|
245
|
+
}
|
|
246
|
+
else {
|
|
247
|
+
// For service worker format (CJS)
|
|
248
|
+
updatedMetadata.body_part = scriptName;
|
|
249
|
+
}
|
|
250
|
+
// Add the actual script content as a named file part
|
|
251
|
+
formData.append(scriptName, new Blob([scriptContent], { type: contentType }), scriptName);
|
|
252
|
+
// Add metadata as JSON
|
|
253
|
+
formData.append("metadata", new Blob([JSON.stringify(updatedMetadata)], {
|
|
254
|
+
type: "application/json",
|
|
255
|
+
}));
|
|
256
|
+
// Upload worker script with bindings
|
|
257
|
+
const uploadResponse = await api.put(`/accounts/${api.accountId}/workers/scripts/${workerName}`, formData);
|
|
258
|
+
// Check if the upload was successful
|
|
259
|
+
if (!uploadResponse.ok) {
|
|
260
|
+
const errorData = await uploadResponse
|
|
261
|
+
.json()
|
|
262
|
+
.catch(() => ({ errors: [{ message: uploadResponse.statusText }] }));
|
|
263
|
+
throw new Error(`Error uploading worker script: ${errorData.errors?.[0]?.message || uploadResponse.statusText}`);
|
|
264
|
+
}
|
|
265
|
+
// Set up routes if provided
|
|
266
|
+
if (props.routes && props.routes.length > 0 && api.zoneId) {
|
|
267
|
+
// First get existing routes
|
|
268
|
+
const routesResponse = await api.get(`/zones/${api.zoneId}/workers/routes`);
|
|
269
|
+
if (routesResponse.ok) {
|
|
270
|
+
const routesData = await routesResponse.json();
|
|
271
|
+
const existingRoutes = routesData.result || [];
|
|
272
|
+
// For each desired route
|
|
273
|
+
for (const pattern of props.routes) {
|
|
274
|
+
const existingRoute = existingRoutes.find((r) => r.pattern === pattern);
|
|
275
|
+
if (existingRoute) {
|
|
276
|
+
// Update if script name doesn't match
|
|
277
|
+
if (existingRoute.script !== workerName) {
|
|
278
|
+
const updateRouteResponse = await api.put(`/zones/${api.zoneId}/workers/routes/${existingRoute.id}`, {
|
|
279
|
+
pattern,
|
|
280
|
+
script: workerName,
|
|
281
|
+
});
|
|
282
|
+
if (!updateRouteResponse.ok) {
|
|
283
|
+
console.warn(`Failed to update route ${pattern}: ${updateRouteResponse.status} ${updateRouteResponse.statusText}`);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
else {
|
|
288
|
+
// Create new route
|
|
289
|
+
const createRouteResponse = await api.post(`/zones/${api.zoneId}/workers/routes`, {
|
|
290
|
+
pattern,
|
|
291
|
+
script: workerName,
|
|
292
|
+
});
|
|
293
|
+
if (!createRouteResponse.ok) {
|
|
294
|
+
console.warn(`Failed to create route ${pattern}: ${createRouteResponse.status} ${createRouteResponse.statusText}`);
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
else {
|
|
300
|
+
console.warn("Could not fetch routes:", routesResponse.status, routesResponse.statusText);
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
// Handle worker URL if requested
|
|
304
|
+
let workerUrl;
|
|
305
|
+
if (props.url) {
|
|
306
|
+
try {
|
|
307
|
+
// Enable the workers.dev subdomain for this worker
|
|
308
|
+
await api.post(`/accounts/${api.accountId}/workers/scripts/${workerName}/subdomain`, { enabled: true, previews_enabled: true }, {
|
|
309
|
+
headers: { "Content-Type": "application/json" },
|
|
310
|
+
});
|
|
311
|
+
// Get the account's workers.dev subdomain
|
|
312
|
+
const subdomainResponse = await api.get(`/accounts/${api.accountId}/workers/subdomain`);
|
|
313
|
+
if (subdomainResponse.ok) {
|
|
314
|
+
const subdomainData = await subdomainResponse.json();
|
|
315
|
+
const subdomain = subdomainData.result?.subdomain;
|
|
316
|
+
if (subdomain) {
|
|
317
|
+
workerUrl = `${workerName}.${subdomain}.workers.dev`;
|
|
318
|
+
// Add a delay when the subdomain is first created.
|
|
319
|
+
// This is to prevent an issue where a negative cache-hit
|
|
320
|
+
// causes the subdomain to be unavailable for 30 seconds.
|
|
321
|
+
if (ctx.event === "create" || !ctx.output?.url) {
|
|
322
|
+
await new Promise((resolve) => setTimeout(resolve, 3000));
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
else {
|
|
327
|
+
console.warn("Could not fetch workers.dev subdomain:", subdomainResponse.status, subdomainResponse.statusText);
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
catch (error) {
|
|
331
|
+
console.warn("Failed to enable worker URL:", error);
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
else if (props.url === false && ctx.output?.url) {
|
|
335
|
+
// Explicitly disable URL if it was previously enabled
|
|
336
|
+
try {
|
|
337
|
+
await api.post(`/accounts/${api.accountId}/workers/scripts/${workerName}/subdomain`, JSON.stringify({ enabled: false }), {
|
|
338
|
+
headers: { "Content-Type": "application/json" },
|
|
339
|
+
});
|
|
340
|
+
}
|
|
341
|
+
catch (error) {
|
|
342
|
+
console.warn("Failed to disable worker URL:", error);
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
// Get current timestamp
|
|
346
|
+
const now = Date.now();
|
|
347
|
+
// Construct the output
|
|
348
|
+
const output = {
|
|
349
|
+
id: workerName,
|
|
350
|
+
name: workerName,
|
|
351
|
+
script: scriptContent,
|
|
352
|
+
format: props.format || "esm", // Include format in the output
|
|
353
|
+
routes: props.routes || [],
|
|
354
|
+
bindings: props.bindings || [],
|
|
355
|
+
production: props.production !== false,
|
|
356
|
+
createdAt: now,
|
|
357
|
+
updatedAt: now,
|
|
358
|
+
url: workerUrl,
|
|
359
|
+
};
|
|
360
|
+
return output;
|
|
361
|
+
}
|
|
362
|
+
}) {
|
|
363
|
+
}
|
|
364
|
+
//# 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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"}
|