alchemy 0.15.4 → 0.15.6
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/lib/cloudflare/index.d.ts +1 -0
- package/lib/cloudflare/index.d.ts.map +1 -1
- package/lib/cloudflare/index.js +1 -0
- package/lib/cloudflare/index.js.map +1 -1
- package/lib/cloudflare/kv-namespace.d.ts +39 -0
- package/lib/cloudflare/kv-namespace.d.ts.map +1 -1
- package/lib/cloudflare/kv-namespace.js +95 -26
- package/lib/cloudflare/kv-namespace.js.map +1 -1
- package/lib/cloudflare/route.d.ts +102 -0
- package/lib/cloudflare/route.d.ts.map +1 -0
- package/lib/cloudflare/route.js +130 -0
- package/lib/cloudflare/route.js.map +1 -0
- package/lib/cloudflare/worker.d.ts +6 -0
- package/lib/cloudflare/worker.d.ts.map +1 -1
- package/lib/cloudflare/worker.js +6 -0
- package/lib/cloudflare/worker.js.map +1 -1
- package/lib/cloudflare/wrangler.json.d.ts +20 -0
- package/lib/cloudflare/wrangler.json.d.ts.map +1 -1
- package/lib/cloudflare/wrangler.json.js +20 -3
- package/lib/cloudflare/wrangler.json.js.map +1 -1
- package/lib/internal/docs/providers.d.ts.map +1 -1
- package/lib/internal/docs/providers.js +8 -2
- package/lib/internal/docs/providers.js.map +1 -1
- package/lib/scope.d.ts +0 -1
- package/lib/scope.d.ts.map +1 -1
- package/lib/scope.js +3 -2
- package/lib/scope.js.map +1 -1
- package/package.json +1 -1
- package/src/cloudflare/index.ts +1 -0
- package/src/cloudflare/kv-namespace.ts +162 -36
- package/src/cloudflare/route.ts +268 -0
- package/src/cloudflare/worker.ts +6 -0
- package/src/cloudflare/wrangler.json.ts +42 -2
- package/src/internal/docs/providers.ts +11 -2
- package/src/scope.ts +6 -1
|
@@ -23,6 +23,7 @@ export * from "./queue-consumer.js";
|
|
|
23
23
|
export * from "./queue.js";
|
|
24
24
|
export * from "./r2-rest-state-store.js";
|
|
25
25
|
export * from "./redwood.js";
|
|
26
|
+
export * from "./route.js";
|
|
26
27
|
export * from "./tanstack-start.js";
|
|
27
28
|
export * from "./vectorize-index.js";
|
|
28
29
|
export * from "./vectorize-metadata-index.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cloudflare/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,wBAAwB,CAAC;AACvC,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,uCAAuC,CAAC;AACtD,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,WAAW,CAAC;AAC1B,cAAc,wBAAwB,CAAC;AACvC,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,YAAY,CAAC;AAC3B,cAAc,0BAA0B,CAAC;AACzC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cloudflare/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,wBAAwB,CAAC;AACvC,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,uCAAuC,CAAC;AACtD,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,WAAW,CAAC;AAC1B,cAAc,wBAAwB,CAAC;AACvC,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,YAAY,CAAC;AAC3B,cAAc,0BAA0B,CAAC;AACzC,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,WAAW,CAAC"}
|
package/lib/cloudflare/index.js
CHANGED
|
@@ -23,6 +23,7 @@ export * from "./queue-consumer.js";
|
|
|
23
23
|
export * from "./queue.js";
|
|
24
24
|
export * from "./r2-rest-state-store.js";
|
|
25
25
|
export * from "./redwood.js";
|
|
26
|
+
export * from "./route.js";
|
|
26
27
|
export * from "./tanstack-start.js";
|
|
27
28
|
export * from "./vectorize-index.js";
|
|
28
29
|
export * from "./vectorize-metadata-index.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cloudflare/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,wBAAwB,CAAC;AACvC,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,uCAAuC,CAAC;AACtD,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,WAAW,CAAC;AAC1B,cAAc,wBAAwB,CAAC;AACvC,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,YAAY,CAAC;AAC3B,cAAc,0BAA0B,CAAC;AACzC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cloudflare/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,wBAAwB,CAAC;AACvC,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,uCAAuC,CAAC;AACtD,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,WAAW,CAAC;AAC1B,cAAc,wBAAwB,CAAC;AACvC,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,YAAY,CAAC;AAC3B,cAAc,0BAA0B,CAAC;AACzC,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,WAAW,CAAC"}
|
|
@@ -14,6 +14,20 @@ export interface KVNamespaceProps extends CloudflareApiOptions {
|
|
|
14
14
|
* Only used for initial setup or updates
|
|
15
15
|
*/
|
|
16
16
|
values?: KVPair[];
|
|
17
|
+
/**
|
|
18
|
+
* Whether to adopt an existing namespace with the same title if it exists
|
|
19
|
+
* If true and a namespace with the same title exists, it will be adopted rather than creating a new one
|
|
20
|
+
*
|
|
21
|
+
* @default false
|
|
22
|
+
*/
|
|
23
|
+
adopt?: boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Whether to delete the namespace.
|
|
26
|
+
* If set to false, the namespace will remain but the resource will be removed from state
|
|
27
|
+
*
|
|
28
|
+
* @default true
|
|
29
|
+
*/
|
|
30
|
+
delete?: boolean;
|
|
17
31
|
}
|
|
18
32
|
/**
|
|
19
33
|
* Key-value pair to store in a KV Namespace
|
|
@@ -93,6 +107,24 @@ export interface KVNamespace extends Resource<"cloudflare::KVNamespace">, KVName
|
|
|
93
107
|
* }
|
|
94
108
|
* }]
|
|
95
109
|
* });
|
|
110
|
+
*
|
|
111
|
+
* @example
|
|
112
|
+
* // Adopt an existing namespace if it already exists instead of failing
|
|
113
|
+
* const existingNamespace = await KVNamespace("existing-ns", {
|
|
114
|
+
* title: "existing-namespace",
|
|
115
|
+
* adopt: true,
|
|
116
|
+
* values: [{
|
|
117
|
+
* key: "config",
|
|
118
|
+
* value: { setting: "updated-value" }
|
|
119
|
+
* }]
|
|
120
|
+
* });
|
|
121
|
+
*
|
|
122
|
+
* @example
|
|
123
|
+
* // When removing from Alchemy state, keep the namespace in Cloudflare
|
|
124
|
+
* const preservedNamespace = await KVNamespace("preserve-ns", {
|
|
125
|
+
* title: "preserved-namespace",
|
|
126
|
+
* delete: false
|
|
127
|
+
* });
|
|
96
128
|
*/
|
|
97
129
|
export declare const KVNamespace: (((this: any, id: string, props?: {}) => never) & (new (_: never) => never)) | ((this: Context<KVNamespace>, id: string, props: KVNamespaceProps) => Promise<KVNamespace>);
|
|
98
130
|
export declare function createKVNamespace(api: CloudflareApi, props: KVNamespaceProps): Promise<{
|
|
@@ -100,4 +132,11 @@ export declare function createKVNamespace(api: CloudflareApi, props: KVNamespace
|
|
|
100
132
|
}>;
|
|
101
133
|
export declare function deleteKVNamespace(api: CloudflareApi, namespaceId: string): Promise<void>;
|
|
102
134
|
export declare function insertKVRecords(api: CloudflareApi, namespaceId: string, props: KVNamespaceProps): Promise<void>;
|
|
135
|
+
/**
|
|
136
|
+
* Find a KV namespace by title with pagination support
|
|
137
|
+
*/
|
|
138
|
+
export declare function findKVNamespaceByTitle(api: CloudflareApi, title: string): Promise<{
|
|
139
|
+
id: string;
|
|
140
|
+
createdAt?: number;
|
|
141
|
+
} | null>;
|
|
103
142
|
//# sourceMappingURL=kv-namespace.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kv-namespace.d.ts","sourceRoot":"","sources":["../../src/cloudflare/kv-namespace.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG1C,OAAO,
|
|
1
|
+
{"version":3,"file":"kv-namespace.d.ts","sourceRoot":"","sources":["../../src/cloudflare/kv-namespace.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG1C,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,oBAAoB,EAC1B,MAAM,UAAU,CAAC;AAElB;;GAEG;AACH,MAAM,WAAW,gBAAiB,SAAQ,oBAAoB;IAC5D;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAElB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;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,WACf,SAAQ,QAAQ,CAAC,yBAAyB,CAAC,EACzC,gBAAgB;IAClB,IAAI,EAAE,cAAc,CAAC;IACrB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AACH,eAAO,MAAM,WAAW,yFAGd,OAAO,CAAC,WAAW,CAAC,MACtB,MAAM,SACH,gBAAgB,0BAyE1B,CAAC;AAEF,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,aAAa,EAClB,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC,CAazB;AAED,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,aAAa,EAClB,WAAW,EAAE,MAAM,iBAUpB;AAED,wBAAsB,eAAe,CACnC,GAAG,EAAE,aAAa,EAClB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,gBAAgB,iBA8DxB;AAYD;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,aAAa,EAClB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAiDpD"}
|
|
@@ -37,6 +37,24 @@ import { createCloudflareApi, } from "./api.js";
|
|
|
37
37
|
* }
|
|
38
38
|
* }]
|
|
39
39
|
* });
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* // Adopt an existing namespace if it already exists instead of failing
|
|
43
|
+
* const existingNamespace = await KVNamespace("existing-ns", {
|
|
44
|
+
* title: "existing-namespace",
|
|
45
|
+
* adopt: true,
|
|
46
|
+
* values: [{
|
|
47
|
+
* key: "config",
|
|
48
|
+
* value: { setting: "updated-value" }
|
|
49
|
+
* }]
|
|
50
|
+
* });
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* // When removing from Alchemy state, keep the namespace in Cloudflare
|
|
54
|
+
* const preservedNamespace = await KVNamespace("preserve-ns", {
|
|
55
|
+
* title: "preserved-namespace",
|
|
56
|
+
* delete: false
|
|
57
|
+
* });
|
|
40
58
|
*/
|
|
41
59
|
export const KVNamespace = Resource("cloudflare::KVNamespace", async function (id, props) {
|
|
42
60
|
// Create Cloudflare API client with automatic account discovery
|
|
@@ -44,7 +62,7 @@ export const KVNamespace = Resource("cloudflare::KVNamespace", async function (i
|
|
|
44
62
|
if (this.phase === "delete") {
|
|
45
63
|
// For delete operations, we need to check if the namespace ID exists in the output
|
|
46
64
|
const namespaceId = this.output?.namespaceId;
|
|
47
|
-
if (namespaceId) {
|
|
65
|
+
if (namespaceId && props.delete !== false) {
|
|
48
66
|
await deleteKVNamespace(api, namespaceId);
|
|
49
67
|
}
|
|
50
68
|
// Return minimal output for deleted state
|
|
@@ -60,10 +78,32 @@ export const KVNamespace = Resource("cloudflare::KVNamespace", async function (i
|
|
|
60
78
|
// Can't update a KV namespace title directly, just work with existing ID
|
|
61
79
|
}
|
|
62
80
|
else {
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
81
|
+
try {
|
|
82
|
+
// Try to create the KV namespace
|
|
83
|
+
const { id } = await createKVNamespace(api, props);
|
|
84
|
+
createdAt = Date.now();
|
|
85
|
+
namespaceId = id;
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
// Check if this is a "namespace already exists" error and adopt is enabled
|
|
89
|
+
if (props.adopt &&
|
|
90
|
+
error instanceof Error &&
|
|
91
|
+
error.message.includes("already exists")) {
|
|
92
|
+
console.log(`Namespace '${props.title}' already exists, adopting it`);
|
|
93
|
+
// Find the existing namespace by title
|
|
94
|
+
const existingNamespace = await findKVNamespaceByTitle(api, props.title);
|
|
95
|
+
if (!existingNamespace) {
|
|
96
|
+
throw new Error(`Failed to find existing namespace '${props.title}' for adoption`);
|
|
97
|
+
}
|
|
98
|
+
// Use the existing namespace ID
|
|
99
|
+
namespaceId = existingNamespace.id;
|
|
100
|
+
createdAt = existingNamespace.createdAt || Date.now();
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
// Re-throw the error if adopt is false or it's not a "namespace already exists" error
|
|
104
|
+
throw error;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
67
107
|
}
|
|
68
108
|
await insertKVRecords(api, namespaceId, props);
|
|
69
109
|
return this({
|
|
@@ -115,28 +155,57 @@ export async function insertKVRecords(api, namespaceId, props) {
|
|
|
115
155
|
}
|
|
116
156
|
return item;
|
|
117
157
|
});
|
|
118
|
-
|
|
119
|
-
await
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
158
|
+
await withExponentialBackoff(async () => {
|
|
159
|
+
const bulkResponse = await api.put(`/accounts/${api.accountId}/storage/kv/namespaces/${namespaceId}/bulk`, bulkPayload);
|
|
160
|
+
if (!bulkResponse.ok) {
|
|
161
|
+
const errorData = await bulkResponse.json().catch(() => ({
|
|
162
|
+
errors: [{ message: bulkResponse.statusText }],
|
|
163
|
+
}));
|
|
164
|
+
const errorMessage = errorData.errors?.[0]?.message || bulkResponse.statusText;
|
|
165
|
+
// Throw error to trigger retry
|
|
166
|
+
throw new Error(`Error writing KV batch: ${errorMessage}`);
|
|
167
|
+
}
|
|
168
|
+
return bulkResponse;
|
|
169
|
+
}, (error) => {
|
|
170
|
+
// Retry on "namespace not found" errors as they're likely propagation delays
|
|
171
|
+
return error.message?.includes("not found");
|
|
172
|
+
}, 5, // 5 retry attempts
|
|
173
|
+
1000);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Find a KV namespace by title with pagination support
|
|
179
|
+
*/
|
|
180
|
+
export async function findKVNamespaceByTitle(api, title) {
|
|
181
|
+
let page = 1;
|
|
182
|
+
const perPage = 100; // Maximum allowed by API
|
|
183
|
+
let hasMorePages = true;
|
|
184
|
+
while (hasMorePages) {
|
|
185
|
+
const response = await api.get(`/accounts/${api.accountId}/storage/kv/namespaces?page=${page}&per_page=${perPage}`);
|
|
186
|
+
if (!response.ok) {
|
|
187
|
+
await handleApiError(response, "list", "kv_namespace", "all");
|
|
188
|
+
}
|
|
189
|
+
const data = (await response.json());
|
|
190
|
+
const namespaces = data.result;
|
|
191
|
+
const resultInfo = data.result_info;
|
|
192
|
+
// Look for a namespace with matching title
|
|
193
|
+
const match = namespaces.find((ns) => ns.title === title);
|
|
194
|
+
if (match) {
|
|
195
|
+
return {
|
|
196
|
+
id: match.id,
|
|
197
|
+
// Convert ISO string to timestamp if available, otherwise use current time
|
|
198
|
+
createdAt: match.created_on
|
|
199
|
+
? new Date(match.created_on).getTime()
|
|
200
|
+
: undefined,
|
|
201
|
+
};
|
|
139
202
|
}
|
|
203
|
+
// Check if we've seen all pages
|
|
204
|
+
hasMorePages =
|
|
205
|
+
resultInfo.page * resultInfo.per_page < resultInfo.total_count;
|
|
206
|
+
page++;
|
|
140
207
|
}
|
|
208
|
+
// No matching namespace found
|
|
209
|
+
return null;
|
|
141
210
|
}
|
|
142
211
|
//# sourceMappingURL=kv-namespace.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kv-namespace.js","sourceRoot":"","sources":["../../src/cloudflare/kv-namespace.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,
|
|
1
|
+
{"version":3,"file":"kv-namespace.js","sourceRoot":"","sources":["../../src/cloudflare/kv-namespace.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import type { Context } from "../context.js";
|
|
2
|
+
import { Resource } from "../resource.js";
|
|
3
|
+
import { type CloudflareApi, type CloudflareApiOptions } from "./api.js";
|
|
4
|
+
import type { Worker } from "./worker.js";
|
|
5
|
+
/**
|
|
6
|
+
* Properties for creating or updating a Route
|
|
7
|
+
*/
|
|
8
|
+
export interface RouteProps extends CloudflareApiOptions {
|
|
9
|
+
/**
|
|
10
|
+
* URL pattern for the route
|
|
11
|
+
* @example "example.com/*"
|
|
12
|
+
*/
|
|
13
|
+
pattern: string;
|
|
14
|
+
/**
|
|
15
|
+
* Worker script for the route
|
|
16
|
+
* This can be a Worker resource or script name as a string
|
|
17
|
+
*/
|
|
18
|
+
script: Worker | string;
|
|
19
|
+
/**
|
|
20
|
+
* Zone ID for the route
|
|
21
|
+
*/
|
|
22
|
+
zoneId: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Output returned after Route creation/update
|
|
26
|
+
*/
|
|
27
|
+
export interface Route extends Resource<"cloudflare::Route">, RouteProps {
|
|
28
|
+
/**
|
|
29
|
+
* The unique ID of the route
|
|
30
|
+
*/
|
|
31
|
+
id: string;
|
|
32
|
+
/**
|
|
33
|
+
* The URL pattern for the route
|
|
34
|
+
*/
|
|
35
|
+
pattern: string;
|
|
36
|
+
/**
|
|
37
|
+
* The Worker script name for the route
|
|
38
|
+
*/
|
|
39
|
+
script: string;
|
|
40
|
+
/**
|
|
41
|
+
* The Zone ID for the route
|
|
42
|
+
*/
|
|
43
|
+
zoneId: string;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Creates and manages Cloudflare Worker Routes.
|
|
47
|
+
*
|
|
48
|
+
* Routes map URL patterns to Worker scripts, allowing you to control which
|
|
49
|
+
* requests are handled by your Workers.
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* // Create a route that maps all requests on a domain to a Worker
|
|
53
|
+
* const basicRoute = await Route("main-route", {
|
|
54
|
+
* pattern: "example.com/*",
|
|
55
|
+
* script: "my-worker",
|
|
56
|
+
* zoneId: "your-zone-id"
|
|
57
|
+
* });
|
|
58
|
+
*
|
|
59
|
+
* @example
|
|
60
|
+
* // Create a route using a Worker resource
|
|
61
|
+
* const worker = await Worker("api-worker", {
|
|
62
|
+
* script: `
|
|
63
|
+
* export default {
|
|
64
|
+
* fetch(request, env) {
|
|
65
|
+
* return new Response("Hello from API!");
|
|
66
|
+
* }
|
|
67
|
+
* }
|
|
68
|
+
* `
|
|
69
|
+
* });
|
|
70
|
+
*
|
|
71
|
+
* const apiRoute = await Route("api-route", {
|
|
72
|
+
* pattern: "api.example.com/*",
|
|
73
|
+
* script: worker,
|
|
74
|
+
* zoneId: "your-zone-id"
|
|
75
|
+
* });
|
|
76
|
+
*
|
|
77
|
+
* @see https://developers.cloudflare.com/workers/configuration/routes/
|
|
78
|
+
*/
|
|
79
|
+
export declare const Route: (((this: any, id: string, props?: {}) => never) & (new (_: never) => never)) | ((this: Context<Route>, id: string, props: RouteProps) => Promise<Route>);
|
|
80
|
+
interface CloudflareRouteResponse {
|
|
81
|
+
result: {
|
|
82
|
+
id: string;
|
|
83
|
+
pattern: string;
|
|
84
|
+
script: string;
|
|
85
|
+
};
|
|
86
|
+
success: boolean;
|
|
87
|
+
errors: Array<{
|
|
88
|
+
code: number;
|
|
89
|
+
message: string;
|
|
90
|
+
}>;
|
|
91
|
+
messages: string[];
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Get a route by ID
|
|
95
|
+
*/
|
|
96
|
+
export declare function getRoute(api: CloudflareApi, zoneId: string, routeId: string): Promise<CloudflareRouteResponse>;
|
|
97
|
+
/**
|
|
98
|
+
* List all routes for a zone
|
|
99
|
+
*/
|
|
100
|
+
export declare function listRoutes(api: CloudflareApi, zoneId: string): Promise<CloudflareRouteResponse>;
|
|
101
|
+
export {};
|
|
102
|
+
//# sourceMappingURL=route.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../src/cloudflare/route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,oBAAoB,EAC1B,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C;;GAEG;AACH,MAAM,WAAW,UAAW,SAAQ,oBAAoB;IACtD;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IAExB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,KAAM,SAAQ,QAAQ,CAAC,mBAAmB,CAAC,EAAE,UAAU;IACtE;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,eAAO,MAAM,KAAK,yFAGR,OAAO,CAAC,KAAK,CAAC,MAChB,MAAM,SACH,UAAU,KAChB,OAAO,CAAC,KAAK,CAAC,CAkDlB,CAAC;AAEF,UAAU,uBAAuB;IAC/B,MAAM,EAAE;QACN,EAAE,EAAE,MAAM,CAAC;QACX,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjD,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAwED;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,GAAG,EAAE,aAAa,EAClB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,uBAAuB,CAAC,CAWlC;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC9B,GAAG,EAAE,aAAa,EAClB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,uBAAuB,CAAC,CAWlC"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { Resource } from "../resource.js";
|
|
2
|
+
import { CloudflareApiError, handleApiError } from "./api-error.js";
|
|
3
|
+
import { createCloudflareApi, } from "./api.js";
|
|
4
|
+
/**
|
|
5
|
+
* Creates and manages Cloudflare Worker Routes.
|
|
6
|
+
*
|
|
7
|
+
* Routes map URL patterns to Worker scripts, allowing you to control which
|
|
8
|
+
* requests are handled by your Workers.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* // Create a route that maps all requests on a domain to a Worker
|
|
12
|
+
* const basicRoute = await Route("main-route", {
|
|
13
|
+
* pattern: "example.com/*",
|
|
14
|
+
* script: "my-worker",
|
|
15
|
+
* zoneId: "your-zone-id"
|
|
16
|
+
* });
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* // Create a route using a Worker resource
|
|
20
|
+
* const worker = await Worker("api-worker", {
|
|
21
|
+
* script: `
|
|
22
|
+
* export default {
|
|
23
|
+
* fetch(request, env) {
|
|
24
|
+
* return new Response("Hello from API!");
|
|
25
|
+
* }
|
|
26
|
+
* }
|
|
27
|
+
* `
|
|
28
|
+
* });
|
|
29
|
+
*
|
|
30
|
+
* const apiRoute = await Route("api-route", {
|
|
31
|
+
* pattern: "api.example.com/*",
|
|
32
|
+
* script: worker,
|
|
33
|
+
* zoneId: "your-zone-id"
|
|
34
|
+
* });
|
|
35
|
+
*
|
|
36
|
+
* @see https://developers.cloudflare.com/workers/configuration/routes/
|
|
37
|
+
*/
|
|
38
|
+
export const Route = Resource("cloudflare::Route", async function (id, props) {
|
|
39
|
+
const api = await createCloudflareApi(props);
|
|
40
|
+
// Get script name from script prop (either a string or a Worker resource)
|
|
41
|
+
const scriptName = typeof props.script === "string" ? props.script : props.script.name;
|
|
42
|
+
// Get zone ID from props
|
|
43
|
+
const { zoneId } = props;
|
|
44
|
+
if (this.phase === "delete") {
|
|
45
|
+
console.log("Deleting Route:", props.pattern);
|
|
46
|
+
// Only delete if we have an ID
|
|
47
|
+
if (this.output?.id) {
|
|
48
|
+
await deleteRoute(api, zoneId, this.output.id);
|
|
49
|
+
}
|
|
50
|
+
// Return void (a deleted route has no content)
|
|
51
|
+
return this.destroy();
|
|
52
|
+
}
|
|
53
|
+
let routeData;
|
|
54
|
+
if (this.phase === "update" && this.output?.id) {
|
|
55
|
+
console.log("Updating Route:", props.pattern);
|
|
56
|
+
// Update existing route
|
|
57
|
+
routeData = await updateRoute(api, zoneId, this.output.id, props.pattern, scriptName);
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
console.log("Creating Route:", props.pattern);
|
|
61
|
+
// Create new route
|
|
62
|
+
routeData = await createRoute(api, zoneId, props.pattern, scriptName);
|
|
63
|
+
}
|
|
64
|
+
// Return the route resource
|
|
65
|
+
return this({
|
|
66
|
+
id: routeData.result.id,
|
|
67
|
+
pattern: routeData.result.pattern,
|
|
68
|
+
script: routeData.result.script,
|
|
69
|
+
zoneId,
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
/**
|
|
73
|
+
* Create a new route
|
|
74
|
+
*/
|
|
75
|
+
async function createRoute(api, zoneId, pattern, script) {
|
|
76
|
+
const createResponse = await api.post(`/zones/${zoneId}/workers/routes`, {
|
|
77
|
+
pattern,
|
|
78
|
+
script,
|
|
79
|
+
});
|
|
80
|
+
if (!createResponse.ok) {
|
|
81
|
+
return await handleApiError(createResponse, "creating", "Route", pattern);
|
|
82
|
+
}
|
|
83
|
+
return (await createResponse.json());
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Update a route
|
|
87
|
+
*/
|
|
88
|
+
async function updateRoute(api, zoneId, routeId, pattern, script) {
|
|
89
|
+
const updateResponse = await api.put(`/zones/${zoneId}/workers/routes/${routeId}`, {
|
|
90
|
+
pattern,
|
|
91
|
+
script,
|
|
92
|
+
});
|
|
93
|
+
if (!updateResponse.ok) {
|
|
94
|
+
return await handleApiError(updateResponse, "updating", "Route", pattern);
|
|
95
|
+
}
|
|
96
|
+
return (await updateResponse.json());
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Delete a route
|
|
100
|
+
*/
|
|
101
|
+
async function deleteRoute(api, zoneId, routeId) {
|
|
102
|
+
const deleteResponse = await api.delete(`/zones/${zoneId}/workers/routes/${routeId}`);
|
|
103
|
+
if (!deleteResponse.ok && deleteResponse.status !== 404) {
|
|
104
|
+
const errorData = await deleteResponse.json().catch(() => ({
|
|
105
|
+
errors: [{ message: deleteResponse.statusText }],
|
|
106
|
+
}));
|
|
107
|
+
throw new CloudflareApiError(`Error deleting Route '${routeId}': ${errorData.errors?.[0]?.message || deleteResponse.statusText}`, deleteResponse);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Get a route by ID
|
|
112
|
+
*/
|
|
113
|
+
export async function getRoute(api, zoneId, routeId) {
|
|
114
|
+
const response = await api.get(`/zones/${zoneId}/workers/routes/${routeId}`);
|
|
115
|
+
if (!response.ok) {
|
|
116
|
+
throw new CloudflareApiError(`Failed to get route ${routeId}: ${response.statusText}`, response);
|
|
117
|
+
}
|
|
118
|
+
return (await response.json());
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* List all routes for a zone
|
|
122
|
+
*/
|
|
123
|
+
export async function listRoutes(api, zoneId) {
|
|
124
|
+
const response = await api.get(`/zones/${zoneId}/workers/routes`);
|
|
125
|
+
if (!response.ok) {
|
|
126
|
+
throw new CloudflareApiError(`Failed to list routes: ${response.statusText}`, response);
|
|
127
|
+
}
|
|
128
|
+
return (await response.json());
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=route.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route.js","sourceRoot":"","sources":["../../src/cloudflare/route.ts"],"names":[],"mappings":"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"}
|
|
@@ -211,6 +211,12 @@ export interface Worker<B extends Bindings = Bindings> extends Resource<"cloudfl
|
|
|
211
211
|
* url: true
|
|
212
212
|
* });
|
|
213
213
|
*
|
|
214
|
+
* await Route("route", {
|
|
215
|
+
* zoneId: zone.zoneId,
|
|
216
|
+
* worker: api,
|
|
217
|
+
* pattern: "api.example.com/*",
|
|
218
|
+
* });
|
|
219
|
+
*
|
|
214
220
|
* @example
|
|
215
221
|
* // Create a real-time chat worker using Durable Objects
|
|
216
222
|
* // for state management:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/cloudflare/worker.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/cloudflare/worker.ts"],"names":[],"mappings":"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"}
|
package/lib/cloudflare/worker.js
CHANGED
|
@@ -25,6 +25,12 @@ import { upsertWorkflow } from "./workflow.js";
|
|
|
25
25
|
* url: true
|
|
26
26
|
* });
|
|
27
27
|
*
|
|
28
|
+
* await Route("route", {
|
|
29
|
+
* zoneId: zone.zoneId,
|
|
30
|
+
* worker: api,
|
|
31
|
+
* pattern: "api.example.com/*",
|
|
32
|
+
* });
|
|
33
|
+
*
|
|
28
34
|
* @example
|
|
29
35
|
* // Create a real-time chat worker using Durable Objects
|
|
30
36
|
* // for state management:
|