alchemy 0.1.10 → 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 +27 -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,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Get authentication headers for Cloudflare API
|
|
3
|
+
*
|
|
4
|
+
* Priority:
|
|
5
|
+
* 1. API Token (CLOUDFLARE_API_TOKEN) - Recommended by Cloudflare
|
|
6
|
+
* 2. API Key (CLOUDFLARE_API_KEY) - Will attempt to discover email automatically
|
|
7
|
+
*
|
|
8
|
+
* @param options Authentication options
|
|
9
|
+
* @returns Authentication headers
|
|
10
|
+
*/
|
|
11
|
+
export async function getCloudflareAuth(options = {}) {
|
|
12
|
+
const { required = true } = options;
|
|
13
|
+
// Check for API Token (preferred method)
|
|
14
|
+
const apiToken = process.env.CLOUDFLARE_API_TOKEN;
|
|
15
|
+
if (apiToken) {
|
|
16
|
+
return {
|
|
17
|
+
headers: {
|
|
18
|
+
Authorization: `Bearer ${apiToken}`,
|
|
19
|
+
},
|
|
20
|
+
type: "token",
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
// Check for API Key
|
|
24
|
+
const apiKey = process.env.CLOUDFLARE_API_KEY;
|
|
25
|
+
if (apiKey) {
|
|
26
|
+
// If email is provided directly, use it
|
|
27
|
+
const providedEmail = options.email || process.env.CLOUDFLARE_EMAIL;
|
|
28
|
+
if (providedEmail) {
|
|
29
|
+
return {
|
|
30
|
+
headers: {
|
|
31
|
+
"X-Auth-Key": apiKey,
|
|
32
|
+
"X-Auth-Email": providedEmail,
|
|
33
|
+
},
|
|
34
|
+
type: "key",
|
|
35
|
+
email: providedEmail,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
// Otherwise, try to discover email from Cloudflare API
|
|
39
|
+
try {
|
|
40
|
+
const email = await getUserEmailFromApiKey(apiKey);
|
|
41
|
+
return {
|
|
42
|
+
headers: {
|
|
43
|
+
"X-Auth-Key": apiKey,
|
|
44
|
+
"X-Auth-Email": email,
|
|
45
|
+
},
|
|
46
|
+
type: "key",
|
|
47
|
+
email,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
console.error("Failed to discover email from API key:", error);
|
|
52
|
+
throw new Error("Failed to automatically discover email for API Key authentication.\n" +
|
|
53
|
+
"Options:\n" +
|
|
54
|
+
"1. Set CLOUDFLARE_EMAIL environment variable\n" +
|
|
55
|
+
"2. Use CLOUDFLARE_API_TOKEN instead (recommended by Cloudflare)");
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
// No authentication found
|
|
59
|
+
if (required) {
|
|
60
|
+
throw new Error("Cloudflare authentication required. Set either:\n" +
|
|
61
|
+
"1. CLOUDFLARE_API_TOKEN (recommended by Cloudflare)\n" +
|
|
62
|
+
" Generate a token at: https://dash.cloudflare.com/profile/api-tokens\n" +
|
|
63
|
+
"2. CLOUDFLARE_API_KEY environment variable");
|
|
64
|
+
}
|
|
65
|
+
return {
|
|
66
|
+
headers: {},
|
|
67
|
+
type: "none",
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Fetch the user's email from Cloudflare API using API Key
|
|
72
|
+
*
|
|
73
|
+
* @param apiKey The Cloudflare API key
|
|
74
|
+
* @returns The user's email
|
|
75
|
+
*/
|
|
76
|
+
async function getUserEmailFromApiKey(apiKey) {
|
|
77
|
+
try {
|
|
78
|
+
const baseUrl = "https://api.cloudflare.com/client/v4";
|
|
79
|
+
// Call the /user endpoint to get user information
|
|
80
|
+
const response = await fetch(`${baseUrl}/user`, {
|
|
81
|
+
headers: {
|
|
82
|
+
"Content-Type": "application/json",
|
|
83
|
+
"X-Auth-Key": apiKey,
|
|
84
|
+
},
|
|
85
|
+
});
|
|
86
|
+
if (!response.ok) {
|
|
87
|
+
throw new Error(`Failed to get user information: ${response.status} ${response.statusText}`);
|
|
88
|
+
}
|
|
89
|
+
const data = (await response.json());
|
|
90
|
+
if (!data.success || !data.result || !data.result.email) {
|
|
91
|
+
throw new Error("Cloudflare API did not return valid user information");
|
|
92
|
+
}
|
|
93
|
+
return data.result.email;
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
console.error("Error retrieving email from Cloudflare API:", error);
|
|
97
|
+
throw new Error("Failed to automatically discover email for API Key authentication");
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Get headers for a Cloudflare API request, including content-type
|
|
102
|
+
*
|
|
103
|
+
* @param contentType Content type for the request
|
|
104
|
+
* @param options Authentication options
|
|
105
|
+
* @returns Complete headers for the request
|
|
106
|
+
*/
|
|
107
|
+
export async function getCloudflareHeaders(contentType = "application/json", options = {}) {
|
|
108
|
+
const auth = await getCloudflareAuth(options);
|
|
109
|
+
return {
|
|
110
|
+
"Content-Type": contentType,
|
|
111
|
+
...auth.headers,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/cloudflare/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type definitions for Cloudflare Worker bindings
|
|
3
|
+
* Based on Cloudflare API documentation:
|
|
4
|
+
* https://developers.cloudflare.com/api/resources/workers/subresources/scripts/methods/update/
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* AI binding type
|
|
8
|
+
*/
|
|
9
|
+
export interface WorkerBindingAI {
|
|
10
|
+
/** The name of the binding */
|
|
11
|
+
name: string;
|
|
12
|
+
/** Type identifier for AI binding */
|
|
13
|
+
type: "ai";
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Analytics Engine binding type
|
|
17
|
+
*/
|
|
18
|
+
export interface WorkerBindingAnalyticsEngine {
|
|
19
|
+
/** The name of the binding */
|
|
20
|
+
name: string;
|
|
21
|
+
/** Type identifier for Analytics Engine binding */
|
|
22
|
+
type: "analytics_engine";
|
|
23
|
+
/** Dataset name */
|
|
24
|
+
dataset: string;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Assets binding type
|
|
28
|
+
*/
|
|
29
|
+
export interface WorkerBindingAssets {
|
|
30
|
+
/** The name of the binding */
|
|
31
|
+
name: string;
|
|
32
|
+
/** Type identifier for Assets binding */
|
|
33
|
+
type: "assets";
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Browser Rendering binding type
|
|
37
|
+
*/
|
|
38
|
+
export interface WorkerBindingBrowserRendering {
|
|
39
|
+
/** The name of the binding */
|
|
40
|
+
name: string;
|
|
41
|
+
/** Type identifier for Browser Rendering binding */
|
|
42
|
+
type: "browser_rendering";
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* D1 database binding type
|
|
46
|
+
*/
|
|
47
|
+
export interface WorkerBindingD1 {
|
|
48
|
+
/** The name of the binding */
|
|
49
|
+
name: string;
|
|
50
|
+
/** Type identifier for D1 binding */
|
|
51
|
+
type: "d1";
|
|
52
|
+
/** D1 database ID */
|
|
53
|
+
id: string;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Dispatch Namespace binding type
|
|
57
|
+
*/
|
|
58
|
+
export interface WorkerBindingDispatchNamespace {
|
|
59
|
+
/** The name of the binding */
|
|
60
|
+
name: string;
|
|
61
|
+
/** Type identifier for Dispatch Namespace binding */
|
|
62
|
+
type: "dispatch_namespace";
|
|
63
|
+
/** Namespace identifier */
|
|
64
|
+
namespace: string;
|
|
65
|
+
/** Optional outbound service */
|
|
66
|
+
outbound?: any;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Durable Object Namespace binding type
|
|
70
|
+
*/
|
|
71
|
+
export interface WorkerBindingDurableObjectNamespace {
|
|
72
|
+
/** The name of the binding */
|
|
73
|
+
name: string;
|
|
74
|
+
/** Type identifier for Durable Object Namespace binding */
|
|
75
|
+
type: "durable_object_namespace";
|
|
76
|
+
/** Durable Object class name */
|
|
77
|
+
class_name: string;
|
|
78
|
+
/** Script name that contains the Durable Object */
|
|
79
|
+
script_name?: string;
|
|
80
|
+
/** Environment */
|
|
81
|
+
environment?: string;
|
|
82
|
+
/** Namespace ID */
|
|
83
|
+
namespace_id?: string;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Hyperdrive binding type
|
|
87
|
+
*/
|
|
88
|
+
export interface WorkerBindingHyperdrive {
|
|
89
|
+
/** The name of the binding */
|
|
90
|
+
name: string;
|
|
91
|
+
/** Type identifier for Hyperdrive binding */
|
|
92
|
+
type: "hyperdrive";
|
|
93
|
+
/** Hyperdrive ID */
|
|
94
|
+
id: string;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* JSON binding type
|
|
98
|
+
*/
|
|
99
|
+
export interface WorkerBindingJson {
|
|
100
|
+
/** The name of the binding */
|
|
101
|
+
name: string;
|
|
102
|
+
/** Type identifier for JSON binding */
|
|
103
|
+
type: "json";
|
|
104
|
+
/** JSON value */
|
|
105
|
+
json: any;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* KV Namespace binding type
|
|
109
|
+
*/
|
|
110
|
+
export interface WorkerBindingKVNamespace {
|
|
111
|
+
/** The name of the binding */
|
|
112
|
+
name: string;
|
|
113
|
+
/** Type identifier for KV Namespace binding */
|
|
114
|
+
type: "kv_namespace";
|
|
115
|
+
/** KV Namespace ID */
|
|
116
|
+
namespace_id: string;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* MTLS Certificate binding type
|
|
120
|
+
*/
|
|
121
|
+
export interface WorkerBindingMTLSCertificate {
|
|
122
|
+
/** The name of the binding */
|
|
123
|
+
name: string;
|
|
124
|
+
/** Type identifier for MTLS Certificate binding */
|
|
125
|
+
type: "mtls_certificate";
|
|
126
|
+
/** Certificate ID */
|
|
127
|
+
certificate_id: string;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Plain Text binding type
|
|
131
|
+
*/
|
|
132
|
+
export interface WorkerBindingPlainText {
|
|
133
|
+
/** The name of the binding */
|
|
134
|
+
name: string;
|
|
135
|
+
/** Type identifier for Plain Text binding */
|
|
136
|
+
type: "plain_text";
|
|
137
|
+
/** Text content */
|
|
138
|
+
text: string;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Queue binding type
|
|
142
|
+
*/
|
|
143
|
+
export interface WorkerBindingQueue {
|
|
144
|
+
/** The name of the binding */
|
|
145
|
+
name: string;
|
|
146
|
+
/** Type identifier for Queue binding */
|
|
147
|
+
type: "queue";
|
|
148
|
+
/** Queue name */
|
|
149
|
+
queue_name: string;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* R2 Bucket binding type
|
|
153
|
+
*/
|
|
154
|
+
export interface WorkerBindingR2Bucket {
|
|
155
|
+
/** The name of the binding */
|
|
156
|
+
name: string;
|
|
157
|
+
/** Type identifier for R2 Bucket binding */
|
|
158
|
+
type: "r2_bucket";
|
|
159
|
+
/** Bucket name */
|
|
160
|
+
bucket_name: string;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Secret Text binding type
|
|
164
|
+
*/
|
|
165
|
+
export interface WorkerBindingSecretText {
|
|
166
|
+
/** The name of the binding */
|
|
167
|
+
name: string;
|
|
168
|
+
/** Type identifier for Secret Text binding */
|
|
169
|
+
type: "secret_text";
|
|
170
|
+
/** Secret value */
|
|
171
|
+
text: string;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Service binding type
|
|
175
|
+
*/
|
|
176
|
+
export interface WorkerBindingService {
|
|
177
|
+
/** The name of the binding */
|
|
178
|
+
name: string;
|
|
179
|
+
/** Type identifier for Service binding */
|
|
180
|
+
type: "service";
|
|
181
|
+
/** Service name */
|
|
182
|
+
service: string;
|
|
183
|
+
/** Environment */
|
|
184
|
+
environment?: string;
|
|
185
|
+
/** Service namespace */
|
|
186
|
+
namespace?: string;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Tail Consumer binding type
|
|
190
|
+
*/
|
|
191
|
+
export interface WorkerBindingTailConsumer {
|
|
192
|
+
/** The name of the binding */
|
|
193
|
+
name: string;
|
|
194
|
+
/** Type identifier for Tail Consumer binding */
|
|
195
|
+
type: "tail_consumer";
|
|
196
|
+
/** Service name */
|
|
197
|
+
service: string;
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Vectorize binding type
|
|
201
|
+
*/
|
|
202
|
+
export interface WorkerBindingVectorize {
|
|
203
|
+
/** The name of the binding */
|
|
204
|
+
name: string;
|
|
205
|
+
/** Type identifier for Vectorize binding */
|
|
206
|
+
type: "vectorize";
|
|
207
|
+
/** Index name */
|
|
208
|
+
index_name: string;
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Version Metadata binding type
|
|
212
|
+
*/
|
|
213
|
+
export interface WorkerBindingVersionMetadata {
|
|
214
|
+
/** The name of the binding */
|
|
215
|
+
name: string;
|
|
216
|
+
/** Type identifier for Version Metadata binding */
|
|
217
|
+
type: "version_metadata";
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* WASM Module binding type
|
|
221
|
+
*/
|
|
222
|
+
export interface WorkerBindingWasmModule {
|
|
223
|
+
/** The name of the binding */
|
|
224
|
+
name: string;
|
|
225
|
+
/** Type identifier for WASM Module binding */
|
|
226
|
+
type: "wasm_module";
|
|
227
|
+
/** Module name */
|
|
228
|
+
module: string;
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Static content binding for Cloudflare Workers
|
|
232
|
+
* Used for Workers Sites and static assets
|
|
233
|
+
*/
|
|
234
|
+
export interface WorkerBindingStaticContent {
|
|
235
|
+
/** The name of the binding */
|
|
236
|
+
name: string;
|
|
237
|
+
/** Type identifier for Static Content binding */
|
|
238
|
+
type: "static_content";
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Union type for all Worker binding types
|
|
242
|
+
*/
|
|
243
|
+
export type WorkerBinding = WorkerBindingAI | WorkerBindingAnalyticsEngine | WorkerBindingAssets | WorkerBindingBrowserRendering | WorkerBindingD1 | WorkerBindingDispatchNamespace | WorkerBindingDurableObjectNamespace | WorkerBindingHyperdrive | WorkerBindingJson | WorkerBindingKVNamespace | WorkerBindingMTLSCertificate | WorkerBindingPlainText | WorkerBindingQueue | WorkerBindingR2Bucket | WorkerBindingSecretText | WorkerBindingService | WorkerBindingStaticContent | WorkerBindingTailConsumer | WorkerBindingVectorize | WorkerBindingVersionMetadata | WorkerBindingWasmModule;
|
|
244
|
+
//# sourceMappingURL=bindings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bindings.d.ts","sourceRoot":"","sources":["../../src/cloudflare/bindings.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bindings.js","sourceRoot":"","sources":["../../src/cloudflare/bindings.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-asset-manifest.d.ts","sourceRoot":"","sources":["../../src/cloudflare/generate-asset-manifest.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,aAAa,EAEb,UAAU,EACX,MAAM,kBAAkB,CAAC;AAE1B,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,MAAM,EACX,WAAW,GAAE,UAAU,EAStB,GACA,OAAO,CAAC,aAAa,CAAC,CAqExB"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import crypto from "crypto";
|
|
2
|
+
import { promises as fs } from "fs";
|
|
3
|
+
import { glob } from "glob";
|
|
4
|
+
import path from "path";
|
|
5
|
+
import { getContentType } from "../utils/content-type";
|
|
6
|
+
export async function generateAssetManifest(dir, fileOptions = [
|
|
7
|
+
{
|
|
8
|
+
files: "**",
|
|
9
|
+
cacheControl: "max-age=0,no-cache,no-store,must-revalidate",
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
files: ["**/*.js", "**/*.css"],
|
|
13
|
+
cacheControl: "max-age=31536000,public,immutable",
|
|
14
|
+
},
|
|
15
|
+
]) {
|
|
16
|
+
// First, collect all file info based on fileOptions (reversed to prioritize later rules)
|
|
17
|
+
const fileInfos = [];
|
|
18
|
+
const filesProcessed = new Set();
|
|
19
|
+
// Process file options in reverse order (later rules override earlier ones)
|
|
20
|
+
// Use for...of to maintain order but allow await inside the loop
|
|
21
|
+
const reversedOptions = [...fileOptions].reverse();
|
|
22
|
+
for (const fileOption of reversedOptions) {
|
|
23
|
+
const patterns = Array.isArray(fileOption.files)
|
|
24
|
+
? fileOption.files
|
|
25
|
+
: [fileOption.files];
|
|
26
|
+
// Get all files matching the pattern
|
|
27
|
+
const files = (await Promise.all(patterns.map(async (p) => {
|
|
28
|
+
// Use glob as async function instead of globSync
|
|
29
|
+
return glob(p, {
|
|
30
|
+
cwd: path.resolve(dir),
|
|
31
|
+
nodir: true,
|
|
32
|
+
dot: true,
|
|
33
|
+
ignore: [
|
|
34
|
+
".git/**",
|
|
35
|
+
"node_modules/**",
|
|
36
|
+
...(typeof fileOption.ignore === "string"
|
|
37
|
+
? [fileOption.ignore]
|
|
38
|
+
: (fileOption.ignore ?? [])),
|
|
39
|
+
],
|
|
40
|
+
});
|
|
41
|
+
})))
|
|
42
|
+
.flat()
|
|
43
|
+
.filter((file) => !filesProcessed.has(file));
|
|
44
|
+
// Add files to processed set
|
|
45
|
+
for (const file of files) {
|
|
46
|
+
filesProcessed.add(file);
|
|
47
|
+
fileInfos.push({
|
|
48
|
+
file,
|
|
49
|
+
cacheControl: fileOption.cacheControl,
|
|
50
|
+
contentType: fileOption.contentType,
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
// Process all files in parallel
|
|
55
|
+
const manifestEntries = await Promise.all(fileInfos.map(async ({ file, cacheControl, contentType }) => {
|
|
56
|
+
const source = path.resolve(dir, file);
|
|
57
|
+
const content = await fs.readFile(source);
|
|
58
|
+
const hash = crypto.createHash("sha256").update(content).digest("hex");
|
|
59
|
+
return {
|
|
60
|
+
source,
|
|
61
|
+
key: file,
|
|
62
|
+
hash,
|
|
63
|
+
cacheControl,
|
|
64
|
+
contentType: contentType ?? getContentType(file),
|
|
65
|
+
};
|
|
66
|
+
}));
|
|
67
|
+
return manifestEntries;
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=generate-asset-manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-asset-manifest.js","sourceRoot":"","sources":["../../src/cloudflare/generate-asset-manifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cloudflare/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cloudflare/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Properties for creating or updating a KV Namespace
|
|
3
|
+
*/
|
|
4
|
+
export interface KVNamespaceProps {
|
|
5
|
+
/**
|
|
6
|
+
* Title of the namespace
|
|
7
|
+
*/
|
|
8
|
+
title: string;
|
|
9
|
+
/**
|
|
10
|
+
* KV pairs to store in the namespace
|
|
11
|
+
* Only used for initial setup or updates
|
|
12
|
+
*/
|
|
13
|
+
values?: KVPair[];
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Key-value pair to store in a KV Namespace
|
|
17
|
+
*/
|
|
18
|
+
export interface KVPair {
|
|
19
|
+
/**
|
|
20
|
+
* Key name
|
|
21
|
+
*/
|
|
22
|
+
key: string;
|
|
23
|
+
/**
|
|
24
|
+
* Value to store (string or JSON object)
|
|
25
|
+
*/
|
|
26
|
+
value: string | object;
|
|
27
|
+
/**
|
|
28
|
+
* Optional expiration in seconds from now
|
|
29
|
+
*/
|
|
30
|
+
expiration?: number;
|
|
31
|
+
/**
|
|
32
|
+
* Optional expiration timestamp in seconds since epoch
|
|
33
|
+
*/
|
|
34
|
+
expirationTtl?: number;
|
|
35
|
+
/**
|
|
36
|
+
* Optional metadata for the key
|
|
37
|
+
*/
|
|
38
|
+
metadata?: any;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Output returned after KV Namespace creation/update
|
|
42
|
+
*/
|
|
43
|
+
export interface KVNamespaceOutput extends KVNamespaceProps {
|
|
44
|
+
/**
|
|
45
|
+
* The ID of the namespace
|
|
46
|
+
*/
|
|
47
|
+
id: string;
|
|
48
|
+
/**
|
|
49
|
+
* Time at which the namespace was created
|
|
50
|
+
*/
|
|
51
|
+
createdAt: number;
|
|
52
|
+
/**
|
|
53
|
+
* Time at which the namespace was last modified
|
|
54
|
+
*/
|
|
55
|
+
modifiedAt: number;
|
|
56
|
+
}
|
|
57
|
+
declare const KVNamespace_base: import("../resource").Provider<"cloudflare::KVNamespace", [props: KVNamespaceProps], KVNamespaceOutput>;
|
|
58
|
+
export declare class KVNamespace extends KVNamespace_base {
|
|
59
|
+
}
|
|
60
|
+
export {};
|
|
61
|
+
//# sourceMappingURL=kv-namespace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kv-namespace.d.ts","sourceRoot":"","sources":["../../src/cloudflare/kv-namespace.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IAEZ;;OAEG;IACH,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IAEvB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,QAAQ,CAAC,EAAE,GAAG,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAkB,SAAQ,gBAAgB;IACzD;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;CACpB;;AAED,qBAAa,WAAY,SAAQ,gBA6HhC;CAAG"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { Resource } from "../resource";
|
|
2
|
+
import { createCloudflareApi } from "./api";
|
|
3
|
+
export class KVNamespace extends Resource("cloudflare::KVNamespace", async (ctx, props) => {
|
|
4
|
+
// Create Cloudflare API client with automatic account discovery
|
|
5
|
+
const api = await createCloudflareApi();
|
|
6
|
+
if (ctx.event === "delete") {
|
|
7
|
+
// For delete operations, we need to check if the namespace ID exists in the output
|
|
8
|
+
const namespaceId = ctx.output?.id;
|
|
9
|
+
if (namespaceId) {
|
|
10
|
+
// Delete KV namespace
|
|
11
|
+
const deleteResponse = await api.delete(`/accounts/${api.accountId}/storage/kv/namespaces/${namespaceId}`);
|
|
12
|
+
if (!deleteResponse.ok && deleteResponse.status !== 404) {
|
|
13
|
+
const errorData = await deleteResponse.json().catch(() => ({
|
|
14
|
+
errors: [{ message: deleteResponse.statusText }],
|
|
15
|
+
}));
|
|
16
|
+
console.error("Error deleting KV namespace:", errorData.errors?.[0]?.message || deleteResponse.statusText);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
// Return minimal output for deleted state
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
// For create or update operations
|
|
24
|
+
// If ctx.event is "update", we expect ctx.output to exist
|
|
25
|
+
let namespaceId = ctx.event === "update" ? ctx.output?.id || "" : "";
|
|
26
|
+
let createdAt = ctx.event === "update"
|
|
27
|
+
? ctx.output?.createdAt || Date.now()
|
|
28
|
+
: Date.now();
|
|
29
|
+
if (ctx.event === "update" && namespaceId) {
|
|
30
|
+
// Can't update a KV namespace title directly, just work with existing ID
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
// Create new KV namespace
|
|
34
|
+
const createResponse = await api.post(`/accounts/${api.accountId}/storage/kv/namespaces`, {
|
|
35
|
+
title: props.title,
|
|
36
|
+
});
|
|
37
|
+
if (!createResponse.ok) {
|
|
38
|
+
const errorData = await createResponse.json().catch(() => ({
|
|
39
|
+
errors: [{ message: createResponse.statusText }],
|
|
40
|
+
}));
|
|
41
|
+
throw new Error(`Error creating KV namespace: ${errorData.errors?.[0]?.message || createResponse.statusText}`);
|
|
42
|
+
}
|
|
43
|
+
const createResult = await createResponse.json();
|
|
44
|
+
namespaceId = createResult.result.id;
|
|
45
|
+
createdAt = Date.now();
|
|
46
|
+
}
|
|
47
|
+
// Handle KV pairs if provided
|
|
48
|
+
if (props.values && props.values.length > 0 && namespaceId) {
|
|
49
|
+
// Process KV pairs in batches of 10000 (API limit)
|
|
50
|
+
const BATCH_SIZE = 10000;
|
|
51
|
+
for (let i = 0; i < props.values.length; i += BATCH_SIZE) {
|
|
52
|
+
const batch = props.values.slice(i, i + BATCH_SIZE);
|
|
53
|
+
const bulkPayload = batch.map((entry) => {
|
|
54
|
+
const item = {
|
|
55
|
+
key: entry.key,
|
|
56
|
+
value: typeof entry.value === "string"
|
|
57
|
+
? entry.value
|
|
58
|
+
: JSON.stringify(entry.value),
|
|
59
|
+
};
|
|
60
|
+
if (entry.expiration) {
|
|
61
|
+
item.expiration = entry.expiration;
|
|
62
|
+
}
|
|
63
|
+
if (entry.expirationTtl) {
|
|
64
|
+
item.expiration_ttl = entry.expirationTtl;
|
|
65
|
+
}
|
|
66
|
+
if (entry.metadata) {
|
|
67
|
+
item.metadata = entry.metadata;
|
|
68
|
+
}
|
|
69
|
+
return item;
|
|
70
|
+
});
|
|
71
|
+
const bulkResponse = await api.put(`/accounts/${api.accountId}/storage/kv/namespaces/${namespaceId}/bulk`, bulkPayload);
|
|
72
|
+
if (!bulkResponse.ok) {
|
|
73
|
+
const errorData = await bulkResponse.json().catch(() => ({
|
|
74
|
+
errors: [{ message: bulkResponse.statusText }],
|
|
75
|
+
}));
|
|
76
|
+
console.warn(`Error writing KV batch: ${errorData.errors?.[0]?.message || bulkResponse.statusText}`);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
const now = Date.now();
|
|
81
|
+
// Construct the output
|
|
82
|
+
const output = {
|
|
83
|
+
id: namespaceId,
|
|
84
|
+
title: props.title,
|
|
85
|
+
values: props.values,
|
|
86
|
+
createdAt: createdAt,
|
|
87
|
+
modifiedAt: now,
|
|
88
|
+
};
|
|
89
|
+
return output;
|
|
90
|
+
}
|
|
91
|
+
}) {
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=kv-namespace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kv-namespace.js","sourceRoot":"","sources":["../../src/cloudflare/kv-namespace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,QAAQ,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,OAAO,CAAC;AAoE5C,MAAM,OAAO,WAAY,SAAQ,QAAQ,CACvC,yBAAyB,EACzB,KAAK,EAAE,GAA+B,EAAE,KAAuB,EAAE,EAAE;IACjE,gEAAgE;IAChE,MAAM,GAAG,GAAG,MAAM,mBAAmB,EAAE,CAAC;IAExC,IAAI,GAAG,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC3B,mFAAmF;QACnF,MAAM,WAAW,GAAG,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC;QAEnC,IAAI,WAAW,EAAE,CAAC;YAChB,sBAAsB;YACtB,MAAM,cAAc,GAAG,MAAM,GAAG,CAAC,MAAM,CACrC,aAAa,GAAG,CAAC,SAAS,0BAA0B,WAAW,EAAE,CAClE,CAAC;YAEF,IAAI,CAAC,cAAc,CAAC,EAAE,IAAI,cAAc,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBACxD,MAAM,SAAS,GAAQ,MAAM,cAAc,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;oBAC9D,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,cAAc,CAAC,UAAU,EAAE,CAAC;iBACjD,CAAC,CAAC,CAAC;gBACJ,OAAO,CAAC,KAAK,CACX,8BAA8B,EAC9B,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,cAAc,CAAC,UAAU,CAC5D,CAAC;YACJ,CAAC;QACH,CAAC;QAED,0CAA0C;QAC1C,OAAO;IACT,CAAC;SAAM,CAAC;QACN,kCAAkC;QAClC,0DAA0D;QAC1D,IAAI,WAAW,GAAG,GAAG,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrE,IAAI,SAAS,GACX,GAAG,CAAC,KAAK,KAAK,QAAQ;YACpB,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE;YACrC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QAEjB,IAAI,GAAG,CAAC,KAAK,KAAK,QAAQ,IAAI,WAAW,EAAE,CAAC;YAC1C,yEAAyE;QAC3E,CAAC;aAAM,CAAC;YACN,0BAA0B;YAC1B,MAAM,cAAc,GAAG,MAAM,GAAG,CAAC,IAAI,CACnC,aAAa,GAAG,CAAC,SAAS,wBAAwB,EAClD;gBACE,KAAK,EAAE,KAAK,CAAC,KAAK;aACnB,CACF,CAAC;YAEF,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,CAAC;gBACvB,MAAM,SAAS,GAAQ,MAAM,cAAc,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;oBAC9D,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,cAAc,CAAC,UAAU,EAAE,CAAC;iBACjD,CAAC,CAAC,CAAC;gBACJ,MAAM,IAAI,KAAK,CACb,gCAAgC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,cAAc,CAAC,UAAU,EAAE,CAC9F,CAAC;YACJ,CAAC;YAED,MAAM,YAAY,GAAQ,MAAM,cAAc,CAAC,IAAI,EAAE,CAAC;YACtD,WAAW,GAAG,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;YACrC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,CAAC;QAED,8BAA8B;QAC9B,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,EAAE,CAAC;YAC3D,mDAAmD;YACnD,MAAM,UAAU,GAAG,KAAK,CAAC;YAEzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,UAAU,EAAE,CAAC;gBACzD,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC;gBAEpD,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;oBACtC,MAAM,IAAI,GAAQ;wBAChB,GAAG,EAAE,KAAK,CAAC,GAAG;wBACd,KAAK,EACH,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;4BAC7B,CAAC,CAAC,KAAK,CAAC,KAAK;4BACb,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC;qBAClC,CAAC;oBAEF,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;wBACrB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;oBACrC,CAAC;oBAED,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;wBACxB,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,aAAa,CAAC;oBAC5C,CAAC;oBAED,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;wBACnB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;oBACjC,CAAC;oBAED,OAAO,IAAI,CAAC;gBACd,CAAC,CAAC,CAAC;gBAEH,MAAM,YAAY,GAAG,MAAM,GAAG,CAAC,GAAG,CAChC,aAAa,GAAG,CAAC,SAAS,0BAA0B,WAAW,OAAO,EACtE,WAAW,CACZ,CAAC;gBAEF,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC;oBACrB,MAAM,SAAS,GAAQ,MAAM,YAAY,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;wBAC5D,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,UAAU,EAAE,CAAC;qBAC/C,CAAC,CAAC,CAAC;oBACJ,OAAO,CAAC,IAAI,CACV,2BAA2B,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,YAAY,CAAC,UAAU,EAAE,CACvF,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEvB,uBAAuB;QACvB,MAAM,MAAM,GAAsB;YAChC,EAAE,EAAE,WAAW;YACf,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,SAAS,EAAE,SAAS;YACpB,UAAU,EAAE,GAAG;SAChB,CAAC;QAEF,OAAO,MAAM,CAAC;IAChB,CAAC;AACH,CAAC,CACF;CAAG"}
|