alchemy 0.46.1 → 0.47.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.mjs +560 -98
- package/lib/build-date.d.ts +1 -1
- package/lib/build-date.js +1 -1
- package/lib/cloudflare/oauth.d.ts.map +1 -1
- package/lib/cloudflare/oauth.js +4 -3
- package/lib/cloudflare/oauth.js.map +1 -1
- package/lib/cloudflare/worker-metadata.d.ts +6 -0
- package/lib/cloudflare/worker-metadata.d.ts.map +1 -1
- package/lib/cloudflare/worker-metadata.js +1 -0
- package/lib/cloudflare/worker-metadata.js.map +1 -1
- package/lib/cloudflare/worker.d.ts +26 -1
- package/lib/cloudflare/worker.d.ts.map +1 -1
- package/lib/cloudflare/worker.js +4 -0
- package/lib/cloudflare/worker.js.map +1 -1
- package/lib/cloudflare/zone.d.ts +1 -1
- package/lib/cloudflare/zone.d.ts.map +1 -1
- package/lib/cloudflare/zone.js +38 -56
- package/lib/cloudflare/zone.js.map +1 -1
- package/lib/util/telemetry/constants.js +2 -2
- package/lib/util/telemetry/constants.js.map +1 -1
- package/package.json +2 -1
- package/src/build-date.ts +1 -1
- package/src/cloudflare/oauth.ts +5 -4
- package/src/cloudflare/worker-metadata.ts +7 -0
- package/src/cloudflare/worker.ts +31 -0
- package/src/cloudflare/zone.ts +50 -70
- package/src/util/telemetry/constants.ts +2 -2
- package/lib/util/xdg-paths.d.ts +0 -9
- package/lib/util/xdg-paths.d.ts.map +0 -1
- package/lib/util/xdg-paths.js +0 -41
- package/lib/util/xdg-paths.js.map +0 -1
- package/src/util/xdg-paths.ts +0 -48
package/lib/cloudflare/zone.js
CHANGED
|
@@ -72,75 +72,57 @@ export const Zone = Resource("cloudflare::Zone", async function (_id, props) {
|
|
|
72
72
|
}
|
|
73
73
|
return this.destroy();
|
|
74
74
|
}
|
|
75
|
+
let zoneData;
|
|
75
76
|
if (this.phase === "update" && this.output?.id) {
|
|
76
77
|
// Get zone details to verify it exists
|
|
77
78
|
const response = await api.get(`/zones/${this.output.id}`);
|
|
78
79
|
if (!response.ok) {
|
|
79
80
|
throw new Error(`Error getting zone '${props.name}': ${response.statusText}`);
|
|
80
81
|
}
|
|
81
|
-
|
|
82
|
-
.result;
|
|
83
|
-
// Update zone settings if provided
|
|
84
|
-
if (props.settings) {
|
|
85
|
-
await updateZoneSettings(api, this.output.id, props.settings);
|
|
86
|
-
// Add a small delay to ensure settings are propagated
|
|
87
|
-
await new Promise((resolve) => setTimeout(resolve, 2000));
|
|
88
|
-
}
|
|
89
|
-
return this({
|
|
90
|
-
id: zoneData.id,
|
|
91
|
-
name: zoneData.name,
|
|
92
|
-
type: zoneData.type,
|
|
93
|
-
status: zoneData.status,
|
|
94
|
-
paused: zoneData.paused,
|
|
95
|
-
accountId: zoneData.account.id,
|
|
96
|
-
nameservers: zoneData.name_servers,
|
|
97
|
-
originalNameservers: zoneData.original_name_servers,
|
|
98
|
-
createdAt: new Date(zoneData.created_on).getTime(),
|
|
99
|
-
modifiedAt: new Date(zoneData.modified_on).getTime(),
|
|
100
|
-
activatedAt: zoneData.activated_on
|
|
101
|
-
? new Date(zoneData.activated_on).getTime()
|
|
102
|
-
: null,
|
|
103
|
-
settings: await getZoneSettings(api, zoneData.id),
|
|
104
|
-
});
|
|
82
|
+
zoneData = (await response.json()).result;
|
|
105
83
|
}
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
84
|
+
else {
|
|
85
|
+
const response = await api.post("/zones", {
|
|
86
|
+
name: props.name,
|
|
87
|
+
type: props.type || "full",
|
|
88
|
+
jump_start: props.jumpStart !== false,
|
|
89
|
+
account: {
|
|
90
|
+
id: api.accountId,
|
|
91
|
+
},
|
|
92
|
+
});
|
|
93
|
+
const body = await response.text();
|
|
94
|
+
if (!response.ok) {
|
|
95
|
+
if (response.status === 400 && body.includes("already exists")) {
|
|
96
|
+
// Zone already exists, fetch it instead
|
|
97
|
+
logger.warn(`Zone '${props.name}' already exists during Zone create, adopting it...`);
|
|
98
|
+
const getResponse = await api.get(`/zones?name=${props.name}`);
|
|
99
|
+
if (!getResponse.ok) {
|
|
100
|
+
throw new Error(`Error fetching existing zone '${props.name}': ${getResponse.statusText}`);
|
|
101
|
+
}
|
|
102
|
+
const zones = (await getResponse.json()).result;
|
|
103
|
+
if (zones.length === 0) {
|
|
104
|
+
throw new Error(`Zone '${props.name}' does not exist, but the name is reserved for another user.`);
|
|
105
|
+
}
|
|
106
|
+
zoneData = zones[0];
|
|
124
107
|
}
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
throw new Error(`Zone '${props.name}' does not exist, but the name is reserved for another user.`);
|
|
108
|
+
else {
|
|
109
|
+
throw new Error(`Error creating zone '${props.name}': ${response.statusText}\n${body}`);
|
|
128
110
|
}
|
|
129
|
-
zoneData = zones[0];
|
|
130
111
|
}
|
|
131
112
|
else {
|
|
132
|
-
|
|
113
|
+
zoneData = JSON.parse(body).result;
|
|
133
114
|
}
|
|
134
115
|
}
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
116
|
+
// Apply defaults to settings
|
|
117
|
+
const settingsToApply = {
|
|
118
|
+
...props.settings,
|
|
119
|
+
alwaysUseHttps: props.settings?.alwaysUseHttps ?? "on",
|
|
120
|
+
};
|
|
121
|
+
await updateZoneSettings(api, zoneData.id, settingsToApply);
|
|
122
|
+
// Add a small delay to ensure settings are propagated
|
|
123
|
+
// TODO(michael): do we need this?
|
|
124
|
+
// https://github.com/sam-goodwin/alchemy/issues/681
|
|
125
|
+
await new Promise((resolve) => setTimeout(resolve, 2000));
|
|
144
126
|
return this({
|
|
145
127
|
id: zoneData.id,
|
|
146
128
|
name: zoneData.name,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zone.js","sourceRoot":"","sources":["../../src/cloudflare/zone.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EACL,mBAAmB,GAGpB,MAAM,UAAU,CAAC;AA0PlB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,QAAQ,CAC1B,kBAAkB,EAClB,KAAK,WAEH,GAAW,EACX,KAAgB;IAEhB,gEAAgE;IAChE,MAAM,GAAG,GAAG,MAAM,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAE7C,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC5B,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YAC9C,MAAM,cAAc,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;YAEpE,IAAI,CAAC,cAAc,CAAC,EAAE,IAAI,cAAc,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBACxD,MAAM,cAAc,CAClB,cAAc,EACd,QAAQ,EACR,MAAM,EACN,IAAI,CAAC,MAAM,CAAC,EAAE,CACf,CAAC;YACJ,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,IAAI,8BAA8B,CAAC,CAAC;QACjE,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;IACxB,CAAC;IAED,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC;QAC/C,uCAAuC;QACvC,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;QAE3D,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CACb,uBAAuB,KAAK,CAAC,IAAI,MAAM,QAAQ,CAAC,UAAU,EAAE,CAC7D,CAAC;QACJ,CAAC;QAED,
|
|
1
|
+
{"version":3,"file":"zone.js","sourceRoot":"","sources":["../../src/cloudflare/zone.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import
|
|
2
|
-
const xdg =
|
|
1
|
+
import xdgAppPaths from "xdg-app-paths";
|
|
2
|
+
const xdg = xdgAppPaths("alchemy");
|
|
3
3
|
export const CONFIG_DIR = xdg.config();
|
|
4
4
|
export const TELEMETRY_DISABLED = !!process.env.ALCHEMY_TELEMETRY_DISABLED || !!process.env.DO_NOT_TRACK;
|
|
5
5
|
// TODO(sam): replace with permanent URL
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/util/telemetry/constants.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/util/telemetry/constants.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,eAAe,CAAC;AAExC,MAAM,GAAG,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;AAEnC,MAAM,CAAC,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;AAEvC,MAAM,CAAC,MAAM,kBAAkB,GAC7B,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,0BAA0B,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;AAEzE,wCAAwC;AACxC,MAAM,CAAC,MAAM,uBAAuB,GAClC,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,wBAAwB,CAAC;AAClE,MAAM,CAAC,MAAM,kBAAkB,GAC7B,OAAO,CAAC,GAAG,CAAC,kBAAkB;IAC9B,iDAAiD,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "alchemy",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.47.0",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"author": "Sam Goodwin <sam@alchemy.run>",
|
|
6
6
|
"homepage": "https://alchemy.run",
|
|
@@ -155,6 +155,7 @@
|
|
|
155
155
|
"turndown": "^7.0.0",
|
|
156
156
|
"unenv": "2.0.0-rc.15",
|
|
157
157
|
"ws": "^8.18.3",
|
|
158
|
+
"xdg-app-paths": "^8.3.0",
|
|
158
159
|
"yaml": "^2.0.0"
|
|
159
160
|
},
|
|
160
161
|
"peerDependencies": {
|
package/src/build-date.ts
CHANGED
package/src/cloudflare/oauth.ts
CHANGED
|
@@ -6,6 +6,7 @@ import fs from "node:fs/promises";
|
|
|
6
6
|
import os from "node:os";
|
|
7
7
|
import path from "node:path";
|
|
8
8
|
import open from "open";
|
|
9
|
+
import xdgAppPaths from "xdg-app-paths";
|
|
9
10
|
import { HTTPServer } from "../util/http-server.ts";
|
|
10
11
|
import { memoize } from "../util/memoize.ts";
|
|
11
12
|
import {
|
|
@@ -15,7 +16,6 @@ import {
|
|
|
15
16
|
HTTPError,
|
|
16
17
|
singleFlight,
|
|
17
18
|
} from "../util/neverthrow.ts";
|
|
18
|
-
import { createXdgAppPaths } from "../util/xdg-paths.ts";
|
|
19
19
|
|
|
20
20
|
const CLIENT_ID = "54d11594-84e4-41aa-b438-e81b8fa78ee7";
|
|
21
21
|
const REDIRECT_URI = "http://localhost:8976/oauth/callback";
|
|
@@ -70,7 +70,7 @@ export const getRefreshedWranglerConfig = singleFlight(() =>
|
|
|
70
70
|
);
|
|
71
71
|
|
|
72
72
|
const getWranglerConfigPath = memoize(async () => {
|
|
73
|
-
const xdgConfigDir =
|
|
73
|
+
const xdgConfigDir = xdgAppPaths(".wrangler").config();
|
|
74
74
|
const legacyConfigDir = path.join(os.homedir(), ".wrangler");
|
|
75
75
|
const configDir = (await fs
|
|
76
76
|
.stat(legacyConfigDir)
|
|
@@ -92,12 +92,12 @@ const readWranglerConfig = () => {
|
|
|
92
92
|
const config = toml.parse(text.replace(/\r\n/g, "\n"));
|
|
93
93
|
assert(typeof config.oauth_token === "string");
|
|
94
94
|
assert(typeof config.refresh_token === "string");
|
|
95
|
-
assert(config.expiration_time
|
|
95
|
+
assert(!!config.expiration_time);
|
|
96
96
|
assert(Array.isArray(config.scopes));
|
|
97
97
|
return {
|
|
98
98
|
oauth_token: config.oauth_token,
|
|
99
99
|
refresh_token: config.refresh_token,
|
|
100
|
-
expiration_time: new Date(config.expiration_time),
|
|
100
|
+
expiration_time: new Date(config.expiration_time as any),
|
|
101
101
|
scopes: config.scopes as string[],
|
|
102
102
|
};
|
|
103
103
|
}),
|
|
@@ -110,6 +110,7 @@ const writeWranglerConfig = (config: WranglerConfig) => {
|
|
|
110
110
|
return ResultAsync.fromSafePromise(getWranglerConfigPath()).map(
|
|
111
111
|
async (configPath) => {
|
|
112
112
|
const toml = await import("@iarna/toml");
|
|
113
|
+
await fs.mkdir(path.dirname(configPath), { recursive: true });
|
|
113
114
|
await fs.writeFile(
|
|
114
115
|
configPath,
|
|
115
116
|
toml.stringify({
|
|
@@ -197,6 +197,9 @@ export interface WorkerMetadata {
|
|
|
197
197
|
suspended: boolean;
|
|
198
198
|
}[];
|
|
199
199
|
containers?: { class_name: string }[];
|
|
200
|
+
placement?: {
|
|
201
|
+
mode: "smart";
|
|
202
|
+
};
|
|
200
203
|
}
|
|
201
204
|
|
|
202
205
|
export async function prepareWorkerMetadata(
|
|
@@ -213,6 +216,9 @@ export async function prepareWorkerMetadata(
|
|
|
213
216
|
};
|
|
214
217
|
tags?: string[];
|
|
215
218
|
unstable_cacheWorkerSettings?: boolean;
|
|
219
|
+
placement?: {
|
|
220
|
+
mode: "smart";
|
|
221
|
+
};
|
|
216
222
|
},
|
|
217
223
|
): Promise<WorkerMetadata> {
|
|
218
224
|
const oldSettings = await (props.unstable_cacheWorkerSettings
|
|
@@ -336,6 +342,7 @@ export async function prepareWorkerMetadata(
|
|
|
336
342
|
transferred_classes: [],
|
|
337
343
|
new_sqlite_classes: [],
|
|
338
344
|
},
|
|
345
|
+
placement: props.placement,
|
|
339
346
|
};
|
|
340
347
|
|
|
341
348
|
const assetUploadResult = props.assetUploadResult;
|
package/src/cloudflare/worker.ts
CHANGED
|
@@ -181,6 +181,8 @@ export interface BaseWorkerProps<
|
|
|
181
181
|
* Environment variables to attach to the worker
|
|
182
182
|
*
|
|
183
183
|
* These will be converted to plain_text bindings
|
|
184
|
+
*
|
|
185
|
+
* @deprecated - use `bindings` instead
|
|
184
186
|
*/
|
|
185
187
|
env?: {
|
|
186
188
|
[key: string]: string;
|
|
@@ -369,6 +371,24 @@ export interface BaseWorkerProps<
|
|
|
369
371
|
url: string;
|
|
370
372
|
cwd?: string;
|
|
371
373
|
};
|
|
374
|
+
|
|
375
|
+
/**
|
|
376
|
+
* Smart placement configuration for the worker.
|
|
377
|
+
*
|
|
378
|
+
* Controls how Cloudflare places the worker across its network for optimal performance.
|
|
379
|
+
*
|
|
380
|
+
* When omitted, smart placement is disabled (default behavior).
|
|
381
|
+
*/
|
|
382
|
+
placement?: {
|
|
383
|
+
/**
|
|
384
|
+
* The placement mode for the worker.
|
|
385
|
+
*
|
|
386
|
+
* - "smart": Automatically optimize placement based on performance metrics
|
|
387
|
+
*
|
|
388
|
+
* @default undefined (smart placement disabled)
|
|
389
|
+
*/
|
|
390
|
+
mode: "smart";
|
|
391
|
+
};
|
|
372
392
|
}
|
|
373
393
|
|
|
374
394
|
export interface InlineWorkerProps<
|
|
@@ -563,6 +583,13 @@ export type Worker<
|
|
|
563
583
|
* Version label for this worker deployment
|
|
564
584
|
*/
|
|
565
585
|
version?: string;
|
|
586
|
+
|
|
587
|
+
/**
|
|
588
|
+
* Smart placement configuration for the worker
|
|
589
|
+
*/
|
|
590
|
+
placement?: {
|
|
591
|
+
mode: "smart";
|
|
592
|
+
};
|
|
566
593
|
};
|
|
567
594
|
|
|
568
595
|
/**
|
|
@@ -1091,6 +1118,8 @@ export const _Worker = Resource(
|
|
|
1091
1118
|
assets: props.assets,
|
|
1092
1119
|
// Include cron triggers in the output
|
|
1093
1120
|
crons: props.crons,
|
|
1121
|
+
// Include placement configuration in the output
|
|
1122
|
+
placement: props.placement,
|
|
1094
1123
|
// phantom property
|
|
1095
1124
|
Env: undefined!,
|
|
1096
1125
|
} as unknown as Worker<B>);
|
|
@@ -1383,6 +1412,8 @@ export const _Worker = Resource(
|
|
|
1383
1412
|
namespace: props.namespace,
|
|
1384
1413
|
// Include version information in the output
|
|
1385
1414
|
version: props.version,
|
|
1415
|
+
// Include placement configuration in the output
|
|
1416
|
+
placement: props.placement,
|
|
1386
1417
|
// phantom property
|
|
1387
1418
|
Env: undefined!,
|
|
1388
1419
|
} as unknown as Worker<B>);
|
package/src/cloudflare/zone.ts
CHANGED
|
@@ -74,7 +74,7 @@ export interface ZoneProps extends CloudflareApiOptions {
|
|
|
74
74
|
/**
|
|
75
75
|
* Enable Always Use HTTPS
|
|
76
76
|
* Redirects all HTTP traffic to HTTPS
|
|
77
|
-
* @default "off"
|
|
77
|
+
* @default "on" (unless explicitly set to "off")
|
|
78
78
|
*/
|
|
79
79
|
alwaysUseHttps?: AlwaysUseHTTPSValue;
|
|
80
80
|
|
|
@@ -339,6 +339,7 @@ export const Zone = Resource(
|
|
|
339
339
|
return this.destroy();
|
|
340
340
|
}
|
|
341
341
|
|
|
342
|
+
let zoneData: CloudflareZone;
|
|
342
343
|
if (this.phase === "update" && this.output?.id) {
|
|
343
344
|
// Get zone details to verify it exists
|
|
344
345
|
const response = await api.get(`/zones/${this.output.id}`);
|
|
@@ -349,84 +350,63 @@ export const Zone = Resource(
|
|
|
349
350
|
);
|
|
350
351
|
}
|
|
351
352
|
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
return this({
|
|
363
|
-
id: zoneData.id,
|
|
364
|
-
name: zoneData.name,
|
|
365
|
-
type: zoneData.type,
|
|
366
|
-
status: zoneData.status,
|
|
367
|
-
paused: zoneData.paused,
|
|
368
|
-
accountId: zoneData.account.id,
|
|
369
|
-
nameservers: zoneData.name_servers,
|
|
370
|
-
originalNameservers: zoneData.original_name_servers,
|
|
371
|
-
createdAt: new Date(zoneData.created_on).getTime(),
|
|
372
|
-
modifiedAt: new Date(zoneData.modified_on).getTime(),
|
|
373
|
-
activatedAt: zoneData.activated_on
|
|
374
|
-
? new Date(zoneData.activated_on).getTime()
|
|
375
|
-
: null,
|
|
376
|
-
settings: await getZoneSettings(api, zoneData.id),
|
|
353
|
+
zoneData = ((await response.json()) as { result: CloudflareZone }).result;
|
|
354
|
+
} else {
|
|
355
|
+
const response = await api.post("/zones", {
|
|
356
|
+
name: props.name,
|
|
357
|
+
type: props.type || "full",
|
|
358
|
+
jump_start: props.jumpStart !== false,
|
|
359
|
+
account: {
|
|
360
|
+
id: api.accountId,
|
|
361
|
+
},
|
|
377
362
|
});
|
|
378
|
-
}
|
|
379
|
-
// Create new zone
|
|
380
|
-
|
|
381
|
-
const response = await api.post("/zones", {
|
|
382
|
-
name: props.name,
|
|
383
|
-
type: props.type || "full",
|
|
384
|
-
jump_start: props.jumpStart !== false,
|
|
385
|
-
account: {
|
|
386
|
-
id: api.accountId,
|
|
387
|
-
},
|
|
388
|
-
});
|
|
389
|
-
|
|
390
|
-
const body = await response.text();
|
|
391
|
-
let zoneData;
|
|
392
|
-
if (!response.ok) {
|
|
393
|
-
if (response.status === 400 && body.includes("already exists")) {
|
|
394
|
-
// Zone already exists, fetch it instead
|
|
395
|
-
logger.warn(
|
|
396
|
-
`Zone '${props.name}' already exists during Zone create, adopting it...`,
|
|
397
|
-
);
|
|
398
|
-
const getResponse = await api.get(`/zones?name=${props.name}`);
|
|
399
363
|
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
364
|
+
const body = await response.text();
|
|
365
|
+
if (!response.ok) {
|
|
366
|
+
if (response.status === 400 && body.includes("already exists")) {
|
|
367
|
+
// Zone already exists, fetch it instead
|
|
368
|
+
logger.warn(
|
|
369
|
+
`Zone '${props.name}' already exists during Zone create, adopting it...`,
|
|
403
370
|
);
|
|
404
|
-
|
|
371
|
+
const getResponse = await api.get(`/zones?name=${props.name}`);
|
|
405
372
|
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
373
|
+
if (!getResponse.ok) {
|
|
374
|
+
throw new Error(
|
|
375
|
+
`Error fetching existing zone '${props.name}': ${getResponse.statusText}`,
|
|
376
|
+
);
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
const zones = (
|
|
380
|
+
(await getResponse.json()) as { result: CloudflareZone[] }
|
|
381
|
+
).result;
|
|
382
|
+
if (zones.length === 0) {
|
|
383
|
+
throw new Error(
|
|
384
|
+
`Zone '${props.name}' does not exist, but the name is reserved for another user.`,
|
|
385
|
+
);
|
|
386
|
+
}
|
|
387
|
+
zoneData = zones[0];
|
|
388
|
+
} else {
|
|
410
389
|
throw new Error(
|
|
411
|
-
`
|
|
390
|
+
`Error creating zone '${props.name}': ${response.statusText}\n${body}`,
|
|
412
391
|
);
|
|
413
392
|
}
|
|
414
|
-
zoneData = zones[0];
|
|
415
393
|
} else {
|
|
416
|
-
|
|
417
|
-
`Error creating zone '${props.name}': ${response.statusText}\n${body}`,
|
|
418
|
-
);
|
|
394
|
+
zoneData = (JSON.parse(body) as { result: CloudflareZone }).result;
|
|
419
395
|
}
|
|
420
|
-
} else {
|
|
421
|
-
zoneData = (JSON.parse(body) as { result: CloudflareZone }).result;
|
|
422
396
|
}
|
|
423
397
|
|
|
424
|
-
//
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
398
|
+
// Apply defaults to settings
|
|
399
|
+
const settingsToApply = {
|
|
400
|
+
...props.settings,
|
|
401
|
+
alwaysUseHttps: props.settings?.alwaysUseHttps ?? "on",
|
|
402
|
+
};
|
|
403
|
+
|
|
404
|
+
await updateZoneSettings(api, zoneData.id, settingsToApply);
|
|
405
|
+
|
|
406
|
+
// Add a small delay to ensure settings are propagated
|
|
407
|
+
// TODO(michael): do we need this?
|
|
408
|
+
// https://github.com/sam-goodwin/alchemy/issues/681
|
|
409
|
+
await new Promise((resolve) => setTimeout(resolve, 2000));
|
|
430
410
|
|
|
431
411
|
return this({
|
|
432
412
|
id: zoneData.id,
|
|
@@ -451,7 +431,7 @@ export const Zone = Resource(
|
|
|
451
431
|
* Helper function to update zone settings
|
|
452
432
|
*/
|
|
453
433
|
async function updateZoneSettings(
|
|
454
|
-
api:
|
|
434
|
+
api: CloudflareApi,
|
|
455
435
|
zoneId: string,
|
|
456
436
|
settings: ZoneProps["settings"],
|
|
457
437
|
): Promise<void> {
|
|
@@ -508,7 +488,7 @@ async function updateZoneSettings(
|
|
|
508
488
|
* Helper function to get current zone settings
|
|
509
489
|
*/
|
|
510
490
|
async function getZoneSettings(
|
|
511
|
-
api:
|
|
491
|
+
api: CloudflareApi,
|
|
512
492
|
zoneId: string,
|
|
513
493
|
): Promise<Zone["settings"]> {
|
|
514
494
|
const settingsResponse = await api.get(`/zones/${zoneId}/settings`);
|
package/lib/util/xdg-paths.d.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Vendored XDG Base Directory Specification implementation
|
|
3
|
-
* Provides cross-platform directory paths for config and state
|
|
4
|
-
*/
|
|
5
|
-
export declare function createXdgAppPaths(appName: string): {
|
|
6
|
-
config: () => string;
|
|
7
|
-
state: () => string;
|
|
8
|
-
};
|
|
9
|
-
//# sourceMappingURL=xdg-paths.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"xdg-paths.d.ts","sourceRoot":"","sources":["../../src/util/xdg-paths.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM;kBAI5B,MAAM;iBAgBP,MAAM;EAoBzB"}
|
package/lib/util/xdg-paths.js
DELETED
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import { join } from "node:path";
|
|
2
|
-
import { homedir } from "node:os";
|
|
3
|
-
/**
|
|
4
|
-
* Vendored XDG Base Directory Specification implementation
|
|
5
|
-
* Provides cross-platform directory paths for config and state
|
|
6
|
-
*/
|
|
7
|
-
export function createXdgAppPaths(appName) {
|
|
8
|
-
const platform = process.platform;
|
|
9
|
-
const home = homedir();
|
|
10
|
-
function config() {
|
|
11
|
-
if (platform === "win32") {
|
|
12
|
-
return join(process.env.LOCALAPPDATA || join(home, "AppData", "Local"), appName);
|
|
13
|
-
}
|
|
14
|
-
else if (platform === "darwin") {
|
|
15
|
-
return join(home, "Library", "Preferences", appName);
|
|
16
|
-
}
|
|
17
|
-
else {
|
|
18
|
-
// Linux/Unix - follow XDG Base Directory Specification
|
|
19
|
-
const xdgConfigHome = process.env.XDG_CONFIG_HOME || join(home, ".config");
|
|
20
|
-
return join(xdgConfigHome, appName);
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
function state() {
|
|
24
|
-
if (platform === "win32") {
|
|
25
|
-
return join(process.env.LOCALAPPDATA || join(home, "AppData", "Local"), appName);
|
|
26
|
-
}
|
|
27
|
-
else if (platform === "darwin") {
|
|
28
|
-
return join(home, "Library", "Application Support", appName);
|
|
29
|
-
}
|
|
30
|
-
else {
|
|
31
|
-
// Linux/Unix - follow XDG Base Directory Specification
|
|
32
|
-
const xdgStateHome = process.env.XDG_STATE_HOME || join(home, ".local", "state");
|
|
33
|
-
return join(xdgStateHome, appName);
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
return {
|
|
37
|
-
config,
|
|
38
|
-
state,
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
//# sourceMappingURL=xdg-paths.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"xdg-paths.js","sourceRoot":"","sources":["../../src/util/xdg-paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAC/C,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAClC,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IAEvB,SAAS,MAAM;QACb,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;YACzB,OAAO,IAAI,CACT,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,EAC1D,OAAO,CACR,CAAC;QACJ,CAAC;aAAM,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACjC,OAAO,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;QACvD,CAAC;aAAM,CAAC;YACN,uDAAuD;YACvD,MAAM,aAAa,GACjB,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YACvD,OAAO,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED,SAAS,KAAK;QACZ,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;YACzB,OAAO,IAAI,CACT,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,EAC1D,OAAO,CACR,CAAC;QACJ,CAAC;aAAM,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACjC,OAAO,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,qBAAqB,EAAE,OAAO,CAAC,CAAC;QAC/D,CAAC;aAAM,CAAC;YACN,uDAAuD;YACvD,MAAM,YAAY,GAChB,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC9D,OAAO,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED,OAAO;QACL,MAAM;QACN,KAAK;KACN,CAAC;AACJ,CAAC"}
|
package/src/util/xdg-paths.ts
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { join } from "node:path";
|
|
2
|
-
import { homedir } from "node:os";
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Vendored XDG Base Directory Specification implementation
|
|
6
|
-
* Provides cross-platform directory paths for config and state
|
|
7
|
-
*/
|
|
8
|
-
export function createXdgAppPaths(appName: string) {
|
|
9
|
-
const platform = process.platform;
|
|
10
|
-
const home = homedir();
|
|
11
|
-
|
|
12
|
-
function config(): string {
|
|
13
|
-
if (platform === "win32") {
|
|
14
|
-
return join(
|
|
15
|
-
process.env.LOCALAPPDATA || join(home, "AppData", "Local"),
|
|
16
|
-
appName,
|
|
17
|
-
);
|
|
18
|
-
} else if (platform === "darwin") {
|
|
19
|
-
return join(home, "Library", "Preferences", appName);
|
|
20
|
-
} else {
|
|
21
|
-
// Linux/Unix - follow XDG Base Directory Specification
|
|
22
|
-
const xdgConfigHome =
|
|
23
|
-
process.env.XDG_CONFIG_HOME || join(home, ".config");
|
|
24
|
-
return join(xdgConfigHome, appName);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
function state(): string {
|
|
29
|
-
if (platform === "win32") {
|
|
30
|
-
return join(
|
|
31
|
-
process.env.LOCALAPPDATA || join(home, "AppData", "Local"),
|
|
32
|
-
appName,
|
|
33
|
-
);
|
|
34
|
-
} else if (platform === "darwin") {
|
|
35
|
-
return join(home, "Library", "Application Support", appName);
|
|
36
|
-
} else {
|
|
37
|
-
// Linux/Unix - follow XDG Base Directory Specification
|
|
38
|
-
const xdgStateHome =
|
|
39
|
-
process.env.XDG_STATE_HOME || join(home, ".local", "state");
|
|
40
|
-
return join(xdgStateHome, appName);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
return {
|
|
45
|
-
config,
|
|
46
|
-
state,
|
|
47
|
-
};
|
|
48
|
-
}
|