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.
@@ -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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"}
@@ -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,CA6Kf;AAED,wBAAsB,UAAU,CAC9B,SAAS,EAAE,QAAQ,EAAE,EACrB,OAAO,CAAC,EAAE,cAAc,GAAG;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,iBAa/C"}
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, destroyOptions);
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 {
@@ -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":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EACL,sBAAsB,EAEtB,WAAW,EACX,UAAU,EACV,YAAY,EAEZ,aAAa,EACb,WAAW,GACZ,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,OAAO,EAAyB,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnE,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,MAAM,OAAO,eAAgB,SAAQ,KAAK;CAAG;AAI7C,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;AAWtE,SAAS,WAAW,CAAC,CAAM;IACzB,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,GAAG,IAEwE;IAE3E,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;QACrB,MAAM,OAAO,GAAG;YACd,QAAQ,EAAE,KAAK,CAAC,eAAe,IAAI,YAAY;YAC/C,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACM,CAAC;QAE3B,MAAM,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;YACzB,2CAA2C;YAC3C,MAAM,KAAK,CAAC,uBAAuB,EAAE,CAAC;YACtC,MAAM,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;YAEhE,uCAAuC;YACvC,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;YACxC,MAAM,UAAU,CACd,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBACtC,GAAG,MAAM,CAAC,MAAM;gBAChB,KAAK,EAAE,KAAK;aACb,CAAC,CAAC,EACH,OAAO,CACR,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,uCAAuC;QACvC,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC;QACrB,OAAO;IACT,CAAC;IAED,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAEjC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO;IACT,CAAC;IAED,IAAI,QAAQ,CAAC,YAAY,CAAC,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC;QAC1C,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC;YACtB,MAAM,EAAE,QAAQ,CAAC,aAAa,CAAC;YAC/B,SAAS,EAAE,QAAQ,CAAC,UAAU,CAAC;SAChC,CAAC,CAAC;QACH,OAAO,MAAM,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACvC,CAAC;IAED,MAAM,QAAQ,GAAG,sBAAsB,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC;IAChE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CACb,4BAA4B,QAAQ,CAAC,WAAW,CAAC,UAAU,QAAQ,CAAC,YAAY,CAAC,mFAAmF,CACrK,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC;IACtC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,CAAC,IAAI,CAAC,aAAa,QAAQ,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;IAClE,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC;IAE5C,IAAI,CAAC;QACH,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;gBACjC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU;gBACjD,WAAW,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW;gBACvD,QAAQ,EAAE,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;gBAC1C,OAAO,EAAE,OAAO,EAAE,OAAO;oBACvB,CAAC,CAAC,6BAA6B;oBAC/B,CAAC,CAAC,sBAAsB;aAC3B,CAAC,CAAC;QACL,CAAC;QAED,IAAI,KAAY,CAAC;QACjB,IAAI,KAAgC,CAAC;QACrC,IAAI,OAAO,EAAE,OAAO,EAAE,CAAC;YACrB,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;YAC9B,KAAK,GAAG;gBACN,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,MAAO;gBAC/B,MAAM,EAAE,UAAU;gBAClB,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK;gBAC/B,IAAI,EAAE,EAAE;gBACR,IAAI,EAAE,QAAQ,CAAC,YAAY,CAAC;gBAC5B,EAAE,EAAE,QAAQ,CAAC,UAAU,CAAC;gBACxB,GAAG,EAAE,QAAQ,CAAC,WAAW,CAAC;gBAC1B,GAAG,EAAE,QAAQ,CAAC,WAAW,CAAC;gBAC1B,KAAK;aACN,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;YAC3D,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,OAAO;YACT,CAAC;YACD,KAAK,GAAG,MAAM,CAAC;YACf,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QACtB,CAAC;QACD,MAAM,GAAG,GAAG,OAAO,CAAC;YAClB,KAAK;YACL,KAAK,EAAE,QAAQ;YACf,IAAI,EAAE,QAAQ,CAAC,YAAY,CAAC;YAC5B,EAAE,EAAE,QAAQ,CAAC,UAAU,CAAC;YACxB,GAAG,EAAE,QAAQ,CAAC,WAAW,CAAC;YAC1B,GAAG,EAAE,QAAQ,CAAC,WAAW,CAAC;YAC1B,KAAK;YACL,KAAK;YACL,uEAAuE;YACvE,aAAa,EAAE,KAAK;YACpB,OAAO,EAAE,GAAG,EAAE;gBACZ,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;YACrE,CAAC;SACF,CAAC,CAAC;QAEH,IAAI,WAA8B,CAAC;QACnC,IAAI,CAAC;YACH,6CAA6C;YAC7C,MAAM,OAAO,CAAC,GAAG,CACf,QAAQ,CAAC,UAAU,CAAC,EACpB;gBACE,uFAAuF;gBACvF,UAAU,EAAE,QAAQ,CAAC,YAAY,CAAC,KAAK,gBAAgB;gBACvD,MAAM,EAAE,KAAK;gBACb,eAAe,EAAE,QAAQ,CAAC,eAAe,CAAC,IAAI,YAAY;aAC3D,EACD,KAAK,EAAE,KAAK,EAAE,EAAE;gBACd,WAAW,GAAG,OAAO,EAAE,OAAO,EAAE,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;gBAClE,OAAO,MAAM,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CACrC,QAAQ,CAAC,UAAU,CAAC,EACpB,GAAG,CAAC,KAAK,CACV,CAAC;YACJ,CAAC,CACF,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,eAAe,EAAE,CAAC;gBACnC,6DAA6D;YAC/D,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,CAAC;YACZ,CAAC;QACH,CAAC;QAED,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,OAAO,CAAC,WAAW,EAAE;gBACzB,GAAG,OAAO;gBACV,QAAQ,EAAE,QAAQ,CAAC,eAAe,CAAC,IAAI,YAAY;aACpD,CAAC,CAAC;QACL,CAAC;QAED,IAAI,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,CAAC;YAC7B,MAAM,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;QACnD,CAAC;aAAM,CAAC;YACN,IAAI,gBAAgB,GAClB,MAAM,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,GAAG,CACnC,kBAAkB,CACnB,CAAC;YACJ,gBAAgB,GAAG,gBAAgB,EAAE,MAAM,CACzC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,QAAQ,CAAC,UAAU,CAAC,CACrE,CAAC;YACF,MAAM,KAAK,CAAC,GAAG,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,CAAC;QACxD,CAAC;QAED,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;gBACjC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;gBAChD,WAAW,EAAE,aAAa;gBAC1B,QAAQ,EAAE,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;gBAC1C,OAAO,EAAE,OAAO,EAAE,OAAO;oBACvB,CAAC,CAAC,+BAA+B;oBACjC,CAAC,CAAC,kBAAkB;gBACtB,MAAM,EAAE,SAAS;aAClB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACpB,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,SAAqB,EACrB,OAA8C;IAE9C,IAAI,OAAO,EAAE,QAAQ,KAAK,UAAU,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;QACzE,KAAK,MAAM,QAAQ,IAAI,MAAM,EAAE,CAAC;YAC9B,IAAI,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACtB,MAAM,QAAQ,CAAC,uBAAuB,EAAE,CAAC;YAC3C,CAAC;YACD,MAAM,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAC7E,CAAC;AACH,CAAC"}
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
@@ -1 +1 @@
1
- {"version":3,"file":"secret.d.ts","sourceRoot":"","sources":["../src/secret.ts"],"names":[],"mappings":"AAEA,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;CAIrC;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"}
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "alchemy",
3
- "version": "0.57.2",
3
+ "version": "0.58.0",
4
4
  "license": "Apache-2.0",
5
5
  "author": "Sam Goodwin <sam@alchemy.run>",
6
6
  "homepage": "https://alchemy.run",
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
  }