alchemy 0.57.2 → 0.58.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/alchemy.js +1 -1
- package/lib/apply.js +3 -3
- package/lib/apply.js.map +1 -1
- package/lib/cloudflare/api-error.js +1 -1
- package/lib/cloudflare/api-error.js.map +1 -1
- package/lib/cloudflare/api-response.d.ts +19 -0
- package/lib/cloudflare/api-response.d.ts.map +1 -1
- package/lib/cloudflare/api-response.js.map +1 -1
- package/lib/cloudflare/compatibility-date.gen.d.ts +1 -1
- package/lib/cloudflare/compatibility-date.gen.js +1 -1
- package/lib/cloudflare/d1-import.d.ts.map +1 -1
- package/lib/cloudflare/d1-import.js.map +1 -1
- 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/tunnel.d.ts +448 -0
- package/lib/cloudflare/tunnel.d.ts.map +1 -0
- package/lib/cloudflare/tunnel.js +467 -0
- package/lib/cloudflare/tunnel.js.map +1 -0
- package/lib/destroy.d.ts.map +1 -1
- package/lib/destroy.js +4 -8
- package/lib/destroy.js.map +1 -1
- package/lib/secret.d.ts +9 -0
- package/lib/secret.d.ts.map +1 -1
- package/lib/secret.js +13 -0
- package/lib/secret.js.map +1 -1
- package/package.json +1 -1
- package/src/apply.ts +5 -6
- package/src/cloudflare/api-error.ts +2 -2
- package/src/cloudflare/api-response.ts +22 -0
- package/src/cloudflare/compatibility-date.gen.ts +1 -1
- package/src/cloudflare/d1-import.ts +1 -14
- package/src/cloudflare/index.ts +1 -0
- package/src/cloudflare/tunnel.ts +911 -0
- package/src/destroy.ts +4 -8
- package/src/secret.ts +15 -0
|
@@ -0,0 +1,467 @@
|
|
|
1
|
+
import { alchemy } from "../alchemy.js";
|
|
2
|
+
import { Resource, ResourceKind } from "../resource.js";
|
|
3
|
+
import { logger } from "../util/logger.js";
|
|
4
|
+
import { handleApiError } from "./api-error.js";
|
|
5
|
+
import { createCloudflareApi, } from "./api.js";
|
|
6
|
+
import { DnsRecords } from "./dns-records.js";
|
|
7
|
+
import { findZoneForHostname } from "./zone.js";
|
|
8
|
+
export function isTunnel(resource) {
|
|
9
|
+
return resource[ResourceKind] === "cloudflare::Tunnel";
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Creates and manages a Cloudflare Tunnel, which provides a secure connection between
|
|
13
|
+
* your origin server and Cloudflare's edge. This resource handles the tunnel lifecycle
|
|
14
|
+
* (create, update, delete) and configuration.
|
|
15
|
+
*
|
|
16
|
+
* @remarks
|
|
17
|
+
* After creating a tunnel, use the returned credentials and token to run the
|
|
18
|
+
* cloudflared connector on your origin server.
|
|
19
|
+
*
|
|
20
|
+
* When hostnames are specified in ingress rules, this resource automatically creates
|
|
21
|
+
* the required DNS CNAME records pointing to <tunnel-id>.cfargotunnel.com, following
|
|
22
|
+
* the Cloudflare API documentation for connecting applications (step 3a).
|
|
23
|
+
*
|
|
24
|
+
* @see https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/
|
|
25
|
+
* @see https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/get-started/create-remote-tunnel-api/
|
|
26
|
+
* @see https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/configure-tunnels/
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* // Create a basic tunnel
|
|
30
|
+
* const tunnel = await Tunnel("my-app", {
|
|
31
|
+
* name: "my-app-tunnel"
|
|
32
|
+
* });
|
|
33
|
+
*
|
|
34
|
+
* // Run cloudflared with:
|
|
35
|
+
* // cloudflared tunnel run --token <tunnel.token.unencrypted>
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* // Create a tunnel with ingress configuration for a web app
|
|
39
|
+
* // DNS records are automatically created for each hostname
|
|
40
|
+
* const webTunnel = await Tunnel("web-app", {
|
|
41
|
+
* name: "web-app-tunnel",
|
|
42
|
+
* ingress: [
|
|
43
|
+
* {
|
|
44
|
+
* hostname: "app.example.com",
|
|
45
|
+
* service: "http://localhost:3000"
|
|
46
|
+
* },
|
|
47
|
+
* {
|
|
48
|
+
* service: "http_status:404" // catch-all rule
|
|
49
|
+
* }
|
|
50
|
+
* ]
|
|
51
|
+
* });
|
|
52
|
+
* // A CNAME record for app.example.com → webTunnel.tunnelId.cfargotunnel.com
|
|
53
|
+
* // is automatically created in the appropriate zone
|
|
54
|
+
*
|
|
55
|
+
* @example
|
|
56
|
+
* // Create a tunnel with multiple services and origin configuration
|
|
57
|
+
* const apiTunnel = await Tunnel("api", {
|
|
58
|
+
* name: "api-tunnel",
|
|
59
|
+
* ingress: [
|
|
60
|
+
* {
|
|
61
|
+
* hostname: "api.example.com",
|
|
62
|
+
* path: "/v1/*",
|
|
63
|
+
* service: "http://localhost:8080",
|
|
64
|
+
* originRequest: {
|
|
65
|
+
* httpHostHeader: "api.internal",
|
|
66
|
+
* connectTimeout: 30
|
|
67
|
+
* }
|
|
68
|
+
* },
|
|
69
|
+
* {
|
|
70
|
+
* hostname: "api.example.com",
|
|
71
|
+
* path: "/v2/*",
|
|
72
|
+
* service: "http://localhost:8081"
|
|
73
|
+
* },
|
|
74
|
+
* {
|
|
75
|
+
* service: "http_status:404"
|
|
76
|
+
* }
|
|
77
|
+
* ]
|
|
78
|
+
* });
|
|
79
|
+
*
|
|
80
|
+
* @example
|
|
81
|
+
* // Create a tunnel for private network access with WARP
|
|
82
|
+
* const privateTunnel = await Tunnel("private-network", {
|
|
83
|
+
* name: "private-network-tunnel",
|
|
84
|
+
* warpRouting: {
|
|
85
|
+
* enabled: true
|
|
86
|
+
* }
|
|
87
|
+
* });
|
|
88
|
+
*
|
|
89
|
+
* @example
|
|
90
|
+
* // Create a tunnel with origin request configuration
|
|
91
|
+
* const secureTunnel = await Tunnel("secure", {
|
|
92
|
+
* name: "secure-tunnel",
|
|
93
|
+
* originRequest: {
|
|
94
|
+
* noTLSVerify: false,
|
|
95
|
+
* connectTimeout: 30,
|
|
96
|
+
* httpHostHeader: "internal.service"
|
|
97
|
+
* },
|
|
98
|
+
* ingress: [
|
|
99
|
+
* {
|
|
100
|
+
* hostname: "secure.example.com",
|
|
101
|
+
* service: "https://localhost:8443"
|
|
102
|
+
* },
|
|
103
|
+
* {
|
|
104
|
+
* service: "http_status:404"
|
|
105
|
+
* }
|
|
106
|
+
* ]
|
|
107
|
+
* });
|
|
108
|
+
*
|
|
109
|
+
* @example
|
|
110
|
+
* // Adopt an existing tunnel if it already exists
|
|
111
|
+
* const existingTunnel = await Tunnel("existing", {
|
|
112
|
+
* name: "existing-tunnel",
|
|
113
|
+
* adopt: true,
|
|
114
|
+
* ingress: [
|
|
115
|
+
* {
|
|
116
|
+
* hostname: "updated.example.com",
|
|
117
|
+
* service: "http://localhost:5000"
|
|
118
|
+
* },
|
|
119
|
+
* {
|
|
120
|
+
* service: "http_status:404"
|
|
121
|
+
* }
|
|
122
|
+
* ]
|
|
123
|
+
* });
|
|
124
|
+
*
|
|
125
|
+
* @example
|
|
126
|
+
* // Tunnel with automatic DNS record creation
|
|
127
|
+
* // The Tunnel resource automatically creates DNS records for hostnames in ingress rules
|
|
128
|
+
* const appTunnel = await Tunnel("app", {
|
|
129
|
+
* name: "app-tunnel",
|
|
130
|
+
* ingress: [
|
|
131
|
+
* {
|
|
132
|
+
* hostname: "app.example.com",
|
|
133
|
+
* service: "http://localhost:3000"
|
|
134
|
+
* },
|
|
135
|
+
* {
|
|
136
|
+
* hostname: "api.example.com",
|
|
137
|
+
* service: "http://localhost:8080"
|
|
138
|
+
* },
|
|
139
|
+
* {
|
|
140
|
+
* service: "http_status:404"
|
|
141
|
+
* }
|
|
142
|
+
* ]
|
|
143
|
+
* });
|
|
144
|
+
* // DNS CNAME records are automatically created:
|
|
145
|
+
* // - app.example.com → {tunnelId}.cfargotunnel.com
|
|
146
|
+
* // - api.example.com → {tunnelId}.cfargotunnel.com
|
|
147
|
+
*
|
|
148
|
+
* // Run the tunnel:
|
|
149
|
+
* // cloudflared tunnel run --token <appTunnel.token.unencrypted>
|
|
150
|
+
*
|
|
151
|
+
* @example
|
|
152
|
+
* // For advanced DNS control, you can still manually manage DNS records
|
|
153
|
+
* // by omitting hostnames from ingress rules:
|
|
154
|
+
* const tunnel = await Tunnel("manual-dns", {
|
|
155
|
+
* name: "manual-dns-tunnel",
|
|
156
|
+
* ingress: [
|
|
157
|
+
* {
|
|
158
|
+
* service: "http://localhost:3000"
|
|
159
|
+
* },
|
|
160
|
+
* {
|
|
161
|
+
* service: "http_status:404"
|
|
162
|
+
* }
|
|
163
|
+
* ]
|
|
164
|
+
* });
|
|
165
|
+
* // Then create DNS records separately with custom configuration
|
|
166
|
+
*/
|
|
167
|
+
export const Tunnel = Resource("cloudflare::Tunnel", async function (id, props) {
|
|
168
|
+
// Create Cloudflare API client with automatic account discovery
|
|
169
|
+
const api = await createCloudflareApi(props);
|
|
170
|
+
const name = props.name ?? id;
|
|
171
|
+
if (this.phase === "delete") {
|
|
172
|
+
// For delete operations, check if the tunnel ID exists in the output
|
|
173
|
+
const tunnelId = this.output?.tunnelId;
|
|
174
|
+
if (tunnelId && props.delete !== false) {
|
|
175
|
+
await deleteTunnel(api, tunnelId);
|
|
176
|
+
}
|
|
177
|
+
// Return destroyed state
|
|
178
|
+
return this.destroy();
|
|
179
|
+
}
|
|
180
|
+
// For create or update operations
|
|
181
|
+
let tunnelData;
|
|
182
|
+
if (this.phase === "update" && this.output?.tunnelId) {
|
|
183
|
+
// Get existing tunnel data
|
|
184
|
+
tunnelData = await getTunnel(api, this.output.tunnelId);
|
|
185
|
+
// Check if name is being changed - tunnel names are immutable
|
|
186
|
+
if (props.name && props.name !== tunnelData.name) {
|
|
187
|
+
this.replace(true);
|
|
188
|
+
}
|
|
189
|
+
// Update configuration if provided
|
|
190
|
+
if ((props.ingress || props.warpRouting || props.originRequest) &&
|
|
191
|
+
props.configSrc !== "local") {
|
|
192
|
+
const config = {
|
|
193
|
+
ingress: props.ingress,
|
|
194
|
+
warpRouting: props.warpRouting,
|
|
195
|
+
originRequest: props.originRequest,
|
|
196
|
+
};
|
|
197
|
+
await updateTunnelConfiguration(api, this.output.tunnelId, config);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
else {
|
|
201
|
+
// Create new tunnel
|
|
202
|
+
try {
|
|
203
|
+
tunnelData = await createTunnel(api, {
|
|
204
|
+
name,
|
|
205
|
+
configSrc: props.configSrc,
|
|
206
|
+
tunnelSecret: props.tunnelSecret,
|
|
207
|
+
metadata: props.metadata,
|
|
208
|
+
});
|
|
209
|
+
// Configure tunnel if config is provided
|
|
210
|
+
if ((props.ingress || props.warpRouting || props.originRequest) &&
|
|
211
|
+
props.configSrc !== "local") {
|
|
212
|
+
await updateTunnelConfiguration(api, tunnelData.id, {
|
|
213
|
+
ingress: props.ingress,
|
|
214
|
+
warpRouting: props.warpRouting,
|
|
215
|
+
originRequest: props.originRequest,
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
catch (error) {
|
|
220
|
+
// Check if this is a "tunnel already exists" error and adopt is enabled
|
|
221
|
+
if (props.adopt &&
|
|
222
|
+
error instanceof Error &&
|
|
223
|
+
(error.message.includes("already have a tunnel with this name") ||
|
|
224
|
+
error.message.includes("already exists"))) {
|
|
225
|
+
console.log(error);
|
|
226
|
+
logger.log(`Tunnel '${name}' already exists, adopting it`);
|
|
227
|
+
// Find the existing tunnel by name
|
|
228
|
+
const existingTunnel = await findTunnelByName(api, name);
|
|
229
|
+
if (!existingTunnel) {
|
|
230
|
+
throw new Error(`Failed to find existing tunnel '${name}' for adoption`);
|
|
231
|
+
}
|
|
232
|
+
tunnelData = existingTunnel;
|
|
233
|
+
// Update configuration if provided
|
|
234
|
+
if ((props.ingress || props.warpRouting || props.originRequest) &&
|
|
235
|
+
props.configSrc !== "local") {
|
|
236
|
+
const config = {
|
|
237
|
+
ingress: props.ingress,
|
|
238
|
+
warpRouting: props.warpRouting,
|
|
239
|
+
originRequest: props.originRequest,
|
|
240
|
+
};
|
|
241
|
+
await updateTunnelConfiguration(api, existingTunnel.id, config);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
else {
|
|
245
|
+
// Re-throw the error if adopt is false or it's not an "already exists" error
|
|
246
|
+
throw error;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
// Handle DNS records for ingress hostnames
|
|
251
|
+
let dnsRecords = this.output?.dnsRecords || {};
|
|
252
|
+
// Extract hostnames from ingress rules
|
|
253
|
+
const hostnames = new Set();
|
|
254
|
+
if (props.ingress) {
|
|
255
|
+
for (const rule of props.ingress) {
|
|
256
|
+
if (rule.hostname && !rule.hostname.includes("*")) {
|
|
257
|
+
// Skip wildcard hostnames as they need special handling
|
|
258
|
+
hostnames.add(rule.hostname);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
// Create or update DNS records for each hostname
|
|
263
|
+
if (hostnames.size > 0) {
|
|
264
|
+
// Group hostnames by zone
|
|
265
|
+
const hostnamesByZone = new Map();
|
|
266
|
+
for (const hostname of hostnames) {
|
|
267
|
+
const { zoneId } = await findZoneForHostname(api, hostname);
|
|
268
|
+
if (!hostnamesByZone.has(zoneId)) {
|
|
269
|
+
hostnamesByZone.set(zoneId, { zoneId, hostnames: [] });
|
|
270
|
+
}
|
|
271
|
+
hostnamesByZone.get(zoneId).hostnames.push(hostname);
|
|
272
|
+
}
|
|
273
|
+
// Create DNS records for each zone in parallel
|
|
274
|
+
const dnsPromises = Array.from(hostnamesByZone.entries()).map(async ([zoneId, { hostnames: zoneHostnames }]) => {
|
|
275
|
+
const dnsResourceId = `${id}-dns-${zoneId}`;
|
|
276
|
+
const dnsResource = await DnsRecords(dnsResourceId, {
|
|
277
|
+
zoneId,
|
|
278
|
+
records: zoneHostnames.map((hostname) => ({
|
|
279
|
+
name: hostname,
|
|
280
|
+
type: "CNAME",
|
|
281
|
+
content: `${tunnelData.id}.cfargotunnel.com`,
|
|
282
|
+
proxied: true,
|
|
283
|
+
comment: `Cloudflare Tunnel: ${tunnelData.name}`,
|
|
284
|
+
})),
|
|
285
|
+
});
|
|
286
|
+
// Return records for mapping storage
|
|
287
|
+
return dnsResource.records;
|
|
288
|
+
});
|
|
289
|
+
const allDnsRecords = await Promise.all(dnsPromises);
|
|
290
|
+
// Store DNS record mappings
|
|
291
|
+
for (const records of allDnsRecords) {
|
|
292
|
+
for (const record of records) {
|
|
293
|
+
dnsRecords[record.name] = record.id;
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
// Clean up DNS records that are no longer needed
|
|
298
|
+
const currentHostnames = Array.from(hostnames);
|
|
299
|
+
for (const hostname of Object.keys(dnsRecords)) {
|
|
300
|
+
if (!currentHostnames.includes(hostname)) {
|
|
301
|
+
delete dnsRecords[hostname];
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
// Transform API response to our interface
|
|
305
|
+
return this({
|
|
306
|
+
tunnelId: tunnelData.id,
|
|
307
|
+
accountTag: tunnelData.account_tag,
|
|
308
|
+
name: tunnelData.name,
|
|
309
|
+
createdAt: tunnelData.created_at,
|
|
310
|
+
deletedAt: tunnelData.deleted_at,
|
|
311
|
+
credentials: tunnelData.credentials_file
|
|
312
|
+
? {
|
|
313
|
+
accountTag: tunnelData.credentials_file.AccountTag,
|
|
314
|
+
tunnelId: tunnelData.credentials_file.TunnelID,
|
|
315
|
+
tunnelName: tunnelData.credentials_file.TunnelName,
|
|
316
|
+
tunnelSecret: alchemy.secret(tunnelData.credentials_file.TunnelSecret),
|
|
317
|
+
}
|
|
318
|
+
: this.output?.credentials || {
|
|
319
|
+
accountTag: tunnelData.account_tag,
|
|
320
|
+
tunnelId: tunnelData.id,
|
|
321
|
+
tunnelName: tunnelData.name,
|
|
322
|
+
tunnelSecret: alchemy.secret(""),
|
|
323
|
+
},
|
|
324
|
+
token: tunnelData.token
|
|
325
|
+
? alchemy.secret(tunnelData.token)
|
|
326
|
+
: this.output?.token || alchemy.secret(""),
|
|
327
|
+
metadata: props.metadata,
|
|
328
|
+
ingress: props.ingress,
|
|
329
|
+
warpRouting: props.warpRouting,
|
|
330
|
+
originRequest: props.originRequest,
|
|
331
|
+
configSrc: props.configSrc,
|
|
332
|
+
dnsRecords: Object.keys(dnsRecords).length > 0 ? dnsRecords : undefined,
|
|
333
|
+
});
|
|
334
|
+
});
|
|
335
|
+
/**
|
|
336
|
+
* Get tunnel details
|
|
337
|
+
* @internal
|
|
338
|
+
*/
|
|
339
|
+
export async function getTunnel(api, tunnelId) {
|
|
340
|
+
const response = await api.get(`/accounts/${api.accountId}/cfd_tunnel/${tunnelId}`);
|
|
341
|
+
if (!response.ok) {
|
|
342
|
+
await handleApiError(response, "get", "tunnel", tunnelId);
|
|
343
|
+
}
|
|
344
|
+
const data = (await response.json());
|
|
345
|
+
return data.result;
|
|
346
|
+
}
|
|
347
|
+
/**
|
|
348
|
+
* Get tunnel configuration
|
|
349
|
+
* @internal
|
|
350
|
+
*/
|
|
351
|
+
export async function getTunnelConfiguration(api, tunnelId) {
|
|
352
|
+
const response = await api.get(`/accounts/${api.accountId}/cfd_tunnel/${tunnelId}/configurations`);
|
|
353
|
+
if (!response.ok) {
|
|
354
|
+
await handleApiError(response, "get configuration", "tunnel", tunnelId);
|
|
355
|
+
}
|
|
356
|
+
const data = (await response.json());
|
|
357
|
+
return data.result.config;
|
|
358
|
+
}
|
|
359
|
+
/**
|
|
360
|
+
* Delete a tunnel
|
|
361
|
+
* @internal
|
|
362
|
+
*/
|
|
363
|
+
async function deleteTunnel(api, tunnelId) {
|
|
364
|
+
const response = await api.delete(`/accounts/${api.accountId}/cfd_tunnel/${tunnelId}`);
|
|
365
|
+
if (!response.ok && response.status !== 404) {
|
|
366
|
+
await handleApiError(response, "delete", "tunnel", tunnelId);
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
/**
|
|
370
|
+
* Create a new tunnel
|
|
371
|
+
* @internal
|
|
372
|
+
*/
|
|
373
|
+
async function createTunnel(api, props) {
|
|
374
|
+
const payload = {
|
|
375
|
+
name: props.name,
|
|
376
|
+
config_src: props.configSrc || "cloudflare",
|
|
377
|
+
};
|
|
378
|
+
if (props.tunnelSecret) {
|
|
379
|
+
payload.tunnel_secret = props.tunnelSecret.unencrypted;
|
|
380
|
+
}
|
|
381
|
+
if (props.metadata) {
|
|
382
|
+
payload.metadata = props.metadata;
|
|
383
|
+
}
|
|
384
|
+
const response = await api.post(`/accounts/${api.accountId}/cfd_tunnel`, payload);
|
|
385
|
+
if (!response.ok) {
|
|
386
|
+
await handleApiError(response, "create", "tunnel", props.name);
|
|
387
|
+
}
|
|
388
|
+
const data = (await response.json());
|
|
389
|
+
return data.result;
|
|
390
|
+
}
|
|
391
|
+
/**
|
|
392
|
+
* Update tunnel configuration
|
|
393
|
+
* @internal
|
|
394
|
+
*/
|
|
395
|
+
async function updateTunnelConfiguration(api, tunnelId, config) {
|
|
396
|
+
const response = await api.put(`/accounts/${api.accountId}/cfd_tunnel/${tunnelId}/configurations`, { config });
|
|
397
|
+
if (!response.ok) {
|
|
398
|
+
await handleApiError(response, "update configuration", "tunnel", tunnelId);
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
/**
|
|
402
|
+
* List all tunnels with pagination support
|
|
403
|
+
* @internal
|
|
404
|
+
*/
|
|
405
|
+
export async function listTunnels(api, options) {
|
|
406
|
+
const tunnels = [];
|
|
407
|
+
let page = 1;
|
|
408
|
+
const perPage = 100; // Maximum allowed by API
|
|
409
|
+
let hasMorePages = true;
|
|
410
|
+
const limit = options?.limit;
|
|
411
|
+
const includeDeleted = options?.includeDeleted ?? false;
|
|
412
|
+
while (hasMorePages) {
|
|
413
|
+
const params = new URLSearchParams({
|
|
414
|
+
page: page.toString(),
|
|
415
|
+
per_page: perPage.toString(),
|
|
416
|
+
});
|
|
417
|
+
if (!includeDeleted) {
|
|
418
|
+
params.append("is_deleted", "false");
|
|
419
|
+
}
|
|
420
|
+
const response = await api.get(`/accounts/${api.accountId}/cfd_tunnel?${params.toString()}`);
|
|
421
|
+
if (!response.ok) {
|
|
422
|
+
await handleApiError(response, "list", "tunnel", "all");
|
|
423
|
+
}
|
|
424
|
+
const data = (await response.json());
|
|
425
|
+
tunnels.push(...data.result);
|
|
426
|
+
const resultInfo = data.result_info;
|
|
427
|
+
// Check if we've reached the limit
|
|
428
|
+
if (limit && tunnels.length >= limit) {
|
|
429
|
+
return tunnels.slice(0, limit);
|
|
430
|
+
}
|
|
431
|
+
// Check if we've seen all pages
|
|
432
|
+
hasMorePages =
|
|
433
|
+
resultInfo.page * resultInfo.per_page < resultInfo.total_count;
|
|
434
|
+
page++;
|
|
435
|
+
}
|
|
436
|
+
return tunnels;
|
|
437
|
+
}
|
|
438
|
+
/**
|
|
439
|
+
* Find a tunnel by name with pagination support
|
|
440
|
+
* @internal
|
|
441
|
+
*/
|
|
442
|
+
export async function findTunnelByName(api, name) {
|
|
443
|
+
let page = 1;
|
|
444
|
+
const perPage = 100; // Maximum allowed by API
|
|
445
|
+
let hasMorePages = true;
|
|
446
|
+
while (hasMorePages) {
|
|
447
|
+
const response = await api.get(`/accounts/${api.accountId}/cfd_tunnel?page=${page}&per_page=${perPage}&is_deleted=false`);
|
|
448
|
+
if (!response.ok) {
|
|
449
|
+
await handleApiError(response, "list", "tunnel", "all");
|
|
450
|
+
}
|
|
451
|
+
const data = (await response.json());
|
|
452
|
+
const tunnels = data.result;
|
|
453
|
+
const resultInfo = data.result_info;
|
|
454
|
+
// Look for a tunnel with matching name
|
|
455
|
+
const match = tunnels.find((tunnel) => tunnel.name === name);
|
|
456
|
+
if (match) {
|
|
457
|
+
return match;
|
|
458
|
+
}
|
|
459
|
+
// Check if we've seen all pages
|
|
460
|
+
hasMorePages =
|
|
461
|
+
resultInfo.page * resultInfo.per_page < resultInfo.total_count;
|
|
462
|
+
page++;
|
|
463
|
+
}
|
|
464
|
+
// No matching tunnel found
|
|
465
|
+
return null;
|
|
466
|
+
}
|
|
467
|
+
//# sourceMappingURL=tunnel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tunnel.js","sourceRoot":"","sources":["../../src/cloudflare/tunnel.ts"],"names":[],"mappings":"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"}
|
package/lib/destroy.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"destroy.d.ts","sourceRoot":"","sources":["../src/destroy.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,QAAQ,EAIb,KAAK,aAAa,EAGnB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAkC,KAAK,EAAE,MAAM,YAAY,CAAC;AAKnE,qBAAa,eAAgB,SAAQ,KAAK;CAAG;AAE7C,MAAM,MAAM,eAAe,GAAG,YAAY,GAAG,UAAU,CAAC;AAExD,eAAO,MAAM,eAAe,eAAyC,CAAC;AAEtE,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,OAAO,CAAC,EAAE;QACR,KAAK,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;QAClC,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;KAC3B,CAAC;CACH;AAMD;;GAEG;AACH,wBAAsB,OAAO,CAAC,IAAI,SAAS,MAAM,EAC/C,GAAG,IAAI,EACH,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,cAAc,CAAC,GACxC,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,SAAS,GAAG,IAAI,EAAE,OAAO,CAAC,EAAE,cAAc,CAAC,GAC1E,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"destroy.d.ts","sourceRoot":"","sources":["../src/destroy.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,QAAQ,EAIb,KAAK,aAAa,EAGnB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAkC,KAAK,EAAE,MAAM,YAAY,CAAC;AAKnE,qBAAa,eAAgB,SAAQ,KAAK;CAAG;AAE7C,MAAM,MAAM,eAAe,GAAG,YAAY,GAAG,UAAU,CAAC;AAExD,eAAO,MAAM,eAAe,eAAyC,CAAC;AAEtE,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,OAAO,CAAC,EAAE;QACR,KAAK,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;QAClC,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;KAC3B,CAAC;CACH;AAMD;;GAEG;AACH,wBAAsB,OAAO,CAAC,IAAI,SAAS,MAAM,EAC/C,GAAG,IAAI,EACH,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,cAAc,CAAC,GACxC,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,SAAS,GAAG,IAAI,EAAE,OAAO,CAAC,EAAE,cAAc,CAAC,GAC1E,OAAO,CAAC,IAAI,CAAC,CAyKf;AAED,wBAAsB,UAAU,CAC9B,SAAS,EAAE,QAAQ,EAAE,EACrB,OAAO,CAAC,EAAE,cAAc,GAAG;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,iBAa/C"}
|
package/lib/destroy.js
CHANGED
|
@@ -126,17 +126,13 @@ export async function destroy(...args) {
|
|
|
126
126
|
throw err;
|
|
127
127
|
}
|
|
128
128
|
}
|
|
129
|
-
const destroyOptions = {
|
|
130
|
-
...options,
|
|
131
|
-
strategy: instance[DestroyStrategy] ?? "sequential",
|
|
132
|
-
};
|
|
133
129
|
if (nestedScope) {
|
|
134
|
-
await destroy(nestedScope,
|
|
130
|
+
await destroy(nestedScope, {
|
|
131
|
+
...options,
|
|
132
|
+
strategy: instance[DestroyStrategy] ?? "sequential",
|
|
133
|
+
});
|
|
135
134
|
}
|
|
136
135
|
if (options?.replace == null) {
|
|
137
|
-
if (nestedScope) {
|
|
138
|
-
await destroy(nestedScope, destroyOptions);
|
|
139
|
-
}
|
|
140
136
|
await scope.deleteResource(instance[ResourceID]);
|
|
141
137
|
}
|
|
142
138
|
else {
|
package/lib/destroy.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"destroy.js","sourceRoot":"","sources":["../src/destroy.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"destroy.js","sourceRoot":"","sources":["../src/destroy.ts"],"names":[],"mappings":"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"}
|
package/lib/secret.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { inspect } from "node:util";
|
|
1
2
|
declare global {
|
|
2
3
|
var __ALCHEMY_SECRETS__: {
|
|
3
4
|
[name: string]: Secret;
|
|
@@ -49,6 +50,14 @@ export declare class Secret<T = string> {
|
|
|
49
50
|
static all(): Secret<any>[];
|
|
50
51
|
readonly type = "secret";
|
|
51
52
|
constructor(unencrypted: T, name?: string);
|
|
53
|
+
/**
|
|
54
|
+
* Override toString to prevent accidental exposure of secret values
|
|
55
|
+
*/
|
|
56
|
+
toString(): string;
|
|
57
|
+
/**
|
|
58
|
+
* Custom inspect implementation for console.log to prevent exposing secrets
|
|
59
|
+
*/
|
|
60
|
+
[inspect.custom](): string;
|
|
52
61
|
}
|
|
53
62
|
/**
|
|
54
63
|
* Type guard to check if a value is a Secret wrapper
|
package/lib/secret.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secret.d.ts","sourceRoot":"","sources":["../src/secret.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"secret.d.ts","sourceRoot":"","sources":["../src/secret.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,CAAC,MAAM,CAAC;IACb,IAAI,mBAAmB,EAAE;QACvB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;KACxB,CAAC;CACH;AAYD,QAAA,MAAM,YAAY,eAAgC,CAAC;AAEnD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,qBAAa,MAAM,CAAC,CAAC,GAAG,MAAM;IAY1B,QAAQ,CAAC,WAAW,EAAE,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM;IAZvB,CAAC,YAAY,CAAC,UAAQ;IAEtB;;OAEG;WACW,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE;IAIlC,SAAgB,IAAI,YAAY;gBAErB,WAAW,EAAE,CAAC,EACd,IAAI,GAAE,MAAmB;IAKpC;;OAEG;IACH,QAAQ,IAAI,MAAM;IAIlB;;OAEG;IACH,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM;CAG3B;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,IAAI,MAAM,CAKxD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,MAAM,CAAC,CAAC,GAAG,MAAM,EAC/B,WAAW,EAAE,CAAC,GAAG,SAAS,EAC1B,IAAI,CAAC,EAAE,MAAM,GACZ,MAAM,CAAC,CAAC,CAAC,CAKX;AAED,yBAAiB,MAAM,CAAC;IACtB,UAAiB,GAAG;QAClB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;QACtB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;KACxD;IAEM,MAAM,GAAG,EAGV,GAAG,CAAC;CASX"}
|
package/lib/secret.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { inspect } from "node:util";
|
|
1
2
|
import { alchemy } from "./alchemy.js";
|
|
2
3
|
// a global registry of all secrets that we will use when serializing an application
|
|
3
4
|
const globalSecrets = (globalThis.__ALCHEMY_SECRETS__ ??= {});
|
|
@@ -57,6 +58,18 @@ export class Secret {
|
|
|
57
58
|
this.name = name;
|
|
58
59
|
globalSecrets[name] = this;
|
|
59
60
|
}
|
|
61
|
+
/**
|
|
62
|
+
* Override toString to prevent accidental exposure of secret values
|
|
63
|
+
*/
|
|
64
|
+
toString() {
|
|
65
|
+
return `Secret(${this.name ?? ""})`;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Custom inspect implementation for console.log to prevent exposing secrets
|
|
69
|
+
*/
|
|
70
|
+
[inspect.custom]() {
|
|
71
|
+
return this.toString();
|
|
72
|
+
}
|
|
60
73
|
}
|
|
61
74
|
/**
|
|
62
75
|
* Type guard to check if a value is a Secret wrapper
|
package/lib/secret.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secret.js","sourceRoot":"","sources":["../src/secret.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAQvC,oFAAoF;AACpF,MAAM,aAAa,GAEf,CAAC,UAAU,CAAC,mBAAmB,KAAK,EAAE,CAAC,CAAC;AAE5C,IAAI,CAAC,GAAG,CAAC,CAAC;AACV,SAAS,QAAQ;IACf,OAAO,4BAA4B,CAAC,EAAE,EAAE,CAAC;AAC3C,CAAC;AAED,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;AAEnD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAM,OAAO,MAAM;IAYN;IACA;IAZX,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC;IAEtB;;OAEG;IACI,MAAM,CAAC,GAAG;QACf,OAAO,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IACtC,CAAC;IAEe,IAAI,GAAG,QAAQ,CAAC;IAChC,YACW,WAAc,EACd,OAAe,QAAQ,EAAE;QADzB,gBAAW,GAAX,WAAW,CAAG;QACd,SAAI,GAAJ,IAAI,CAAqB;QAElC,aAAa,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC7B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,OAAY;IACnC,OAAO,CACL,OAAO,YAAY,MAAM;QACzB,CAAC,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,EAAE,IAAI,KAAK,QAAQ,CAAC,CAC5D,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,UAAU,MAAM,CACpB,WAA0B,EAC1B,IAAa;IAEb,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,IAAI,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;AACvC,CAAC;AAED,WAAiB,MAAM;IAMR,UAAG,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE;QACjC,GAAG,EAAE,CAAC,CAAC,EAAE,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;QACpC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,IAA6B,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;KAC/D,CAAQ,CAAC;IAEV,SAAS,IAAI,CAAC,IAAY,EAAE,KAAc,EAAE,KAAc;QACxD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAC/C,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC/B,OAAO,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC9B,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,+BAA+B,IAAI,kBAAkB,CAAC,CAAC;IACzE,CAAC;AACH,CAAC,EAlBgB,MAAM,KAAN,MAAM,QAkBtB"}
|
|
1
|
+
{"version":3,"file":"secret.js","sourceRoot":"","sources":["../src/secret.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAQvC,oFAAoF;AACpF,MAAM,aAAa,GAEf,CAAC,UAAU,CAAC,mBAAmB,KAAK,EAAE,CAAC,CAAC;AAE5C,IAAI,CAAC,GAAG,CAAC,CAAC;AACV,SAAS,QAAQ;IACf,OAAO,4BAA4B,CAAC,EAAE,EAAE,CAAC;AAC3C,CAAC;AAED,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;AAEnD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAM,OAAO,MAAM;IAYN;IACA;IAZX,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC;IAEtB;;OAEG;IACI,MAAM,CAAC,GAAG;QACf,OAAO,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IACtC,CAAC;IAEe,IAAI,GAAG,QAAQ,CAAC;IAChC,YACW,WAAc,EACd,OAAe,QAAQ,EAAE;QADzB,gBAAW,GAAX,WAAW,CAAG;QACd,SAAI,GAAJ,IAAI,CAAqB;QAElC,aAAa,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,OAAO,UAAU,IAAI,CAAC,IAAI,IAAI,EAAE,GAAG,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,CAAC,OAAO,CAAC,MAAM,CAAC;QACd,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;IACzB,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,OAAY;IACnC,OAAO,CACL,OAAO,YAAY,MAAM;QACzB,CAAC,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,EAAE,IAAI,KAAK,QAAQ,CAAC,CAC5D,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,UAAU,MAAM,CACpB,WAA0B,EAC1B,IAAa;IAEb,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,IAAI,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;AACvC,CAAC;AAED,WAAiB,MAAM;IAMR,UAAG,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE;QACjC,GAAG,EAAE,CAAC,CAAC,EAAE,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;QACpC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,IAA6B,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;KAC/D,CAAQ,CAAC;IAEV,SAAS,IAAI,CAAC,IAAY,EAAE,KAAc,EAAE,KAAc;QACxD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAC/C,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC/B,OAAO,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC9B,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,+BAA+B,IAAI,kBAAkB,CAAC,CAAC;IACzE,CAAC;AACH,CAAC,EAlBgB,MAAM,KAAN,MAAM,QAkBtB"}
|
package/package.json
CHANGED
package/src/apply.ts
CHANGED
|
@@ -205,12 +205,6 @@ async function _apply<Out extends Resource>(
|
|
|
205
205
|
);
|
|
206
206
|
} catch (error) {
|
|
207
207
|
if (error instanceof ReplacedSignal) {
|
|
208
|
-
if (scope.children.get(resource[ResourceID])?.children.size! > 0) {
|
|
209
|
-
throw new Error(
|
|
210
|
-
`Resource ${resource[ResourceFQN]} has children and cannot be replaced.`,
|
|
211
|
-
);
|
|
212
|
-
}
|
|
213
|
-
|
|
214
208
|
if (error.force) {
|
|
215
209
|
await destroy(resource, {
|
|
216
210
|
quiet: scope.quiet,
|
|
@@ -221,6 +215,11 @@ async function _apply<Out extends Resource>(
|
|
|
221
215
|
},
|
|
222
216
|
});
|
|
223
217
|
} else {
|
|
218
|
+
if (scope.children.get(resource[ResourceID])?.children.size! > 0) {
|
|
219
|
+
throw new Error(
|
|
220
|
+
`Resource ${resource[ResourceFQN]} has children and cannot be replaced.`,
|
|
221
|
+
);
|
|
222
|
+
}
|
|
224
223
|
const pendingDeletions =
|
|
225
224
|
(await scope.get<PendingDeletions>("pendingDeletions")) ?? [];
|
|
226
225
|
pendingDeletions.push({
|
|
@@ -91,12 +91,12 @@ export async function handleApiError(
|
|
|
91
91
|
}
|
|
92
92
|
|
|
93
93
|
// Handle general API errors
|
|
94
|
-
const errors: { message: string }[] = json?.errors || [
|
|
94
|
+
const errors: { message: string; code: number }[] = json?.errors || [
|
|
95
95
|
{ message: response.statusText },
|
|
96
96
|
];
|
|
97
97
|
const errorMessage = `Error ${response.status} ${action} ${resourceType}${
|
|
98
98
|
resourceName ? ` '${resourceName}'` : ""
|
|
99
|
-
}: ${errors.map((error) => error.message).join(", ")}`;
|
|
99
|
+
}: ${errors.map((error) => `${error.code}: ${error.message}`).join(", ")}`;
|
|
100
100
|
// End of Selection
|
|
101
101
|
throw new CloudflareApiError(errorMessage, response, errors);
|
|
102
102
|
}
|