alchemy 0.46.0 → 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.
Files changed (61) hide show
  1. package/bin/alchemy.mjs +713 -255
  2. package/bin/commands/login.ts +2 -5
  3. package/lib/build-date.d.ts +1 -1
  4. package/lib/build-date.js +1 -1
  5. package/lib/cloudflare/api.d.ts +9 -5
  6. package/lib/cloudflare/api.d.ts.map +1 -1
  7. package/lib/cloudflare/api.js +6 -46
  8. package/lib/cloudflare/api.js.map +1 -1
  9. package/lib/cloudflare/auth.d.ts +16 -35
  10. package/lib/cloudflare/auth.d.ts.map +1 -1
  11. package/lib/cloudflare/auth.js +54 -24
  12. package/lib/cloudflare/auth.js.map +1 -1
  13. package/lib/cloudflare/{auth-wrangler.d.ts → oauth.d.ts} +11 -14
  14. package/lib/cloudflare/oauth.d.ts.map +1 -0
  15. package/lib/cloudflare/{auth-wrangler.js → oauth.js} +101 -111
  16. package/lib/cloudflare/oauth.js.map +1 -0
  17. package/lib/cloudflare/user.d.ts +1 -1
  18. package/lib/cloudflare/user.d.ts.map +1 -1
  19. package/lib/cloudflare/user.js +20 -29
  20. package/lib/cloudflare/user.js.map +1 -1
  21. package/lib/cloudflare/worker-metadata.d.ts +6 -0
  22. package/lib/cloudflare/worker-metadata.d.ts.map +1 -1
  23. package/lib/cloudflare/worker-metadata.js +1 -0
  24. package/lib/cloudflare/worker-metadata.js.map +1 -1
  25. package/lib/cloudflare/worker.d.ts +27 -1
  26. package/lib/cloudflare/worker.d.ts.map +1 -1
  27. package/lib/cloudflare/worker.js +8 -3
  28. package/lib/cloudflare/worker.js.map +1 -1
  29. package/lib/cloudflare/zone.d.ts +1 -1
  30. package/lib/cloudflare/zone.d.ts.map +1 -1
  31. package/lib/cloudflare/zone.js +38 -56
  32. package/lib/cloudflare/zone.js.map +1 -1
  33. package/lib/util/memoize.d.ts +0 -1
  34. package/lib/util/memoize.d.ts.map +1 -1
  35. package/lib/util/memoize.js +0 -13
  36. package/lib/util/memoize.js.map +1 -1
  37. package/lib/util/neverthrow.d.ts +7 -0
  38. package/lib/util/neverthrow.d.ts.map +1 -1
  39. package/lib/util/neverthrow.js +17 -0
  40. package/lib/util/neverthrow.js.map +1 -1
  41. package/lib/util/telemetry/constants.js +2 -2
  42. package/lib/util/telemetry/constants.js.map +1 -1
  43. package/package.json +2 -1
  44. package/src/build-date.ts +1 -1
  45. package/src/cloudflare/api.ts +18 -57
  46. package/src/cloudflare/auth.ts +84 -68
  47. package/src/cloudflare/{auth-wrangler.ts → oauth.ts} +156 -169
  48. package/src/cloudflare/user.ts +33 -51
  49. package/src/cloudflare/worker-metadata.ts +7 -0
  50. package/src/cloudflare/worker.ts +40 -4
  51. package/src/cloudflare/zone.ts +50 -70
  52. package/src/util/memoize.ts +0 -17
  53. package/src/util/neverthrow.ts +28 -0
  54. package/src/util/telemetry/constants.ts +2 -2
  55. package/lib/cloudflare/auth-wrangler.d.ts.map +0 -1
  56. package/lib/cloudflare/auth-wrangler.js.map +0 -1
  57. package/lib/util/xdg-paths.d.ts +0 -9
  58. package/lib/util/xdg-paths.d.ts.map +0 -1
  59. package/lib/util/xdg-paths.js +0 -41
  60. package/lib/util/xdg-paths.js.map +0 -1
  61. package/src/util/xdg-paths.ts +0 -48
@@ -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
- const zoneData = ((await response.json()) as { result: CloudflareZone })
353
- .result;
354
-
355
- // Update zone settings if provided
356
- if (props.settings) {
357
- await updateZoneSettings(api, this.output.id, props.settings);
358
- // Add a small delay to ensure settings are propagated
359
- await new Promise((resolve) => setTimeout(resolve, 2000));
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
- if (!getResponse.ok) {
401
- throw new Error(
402
- `Error fetching existing zone '${props.name}': ${getResponse.statusText}`,
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
- const zones = (
407
- (await getResponse.json()) as { result: CloudflareZone[] }
408
- ).result;
409
- if (zones.length === 0) {
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
- `Zone '${props.name}' does not exist, but the name is reserved for another user.`,
390
+ `Error creating zone '${props.name}': ${response.statusText}\n${body}`,
412
391
  );
413
392
  }
414
- zoneData = zones[0];
415
393
  } else {
416
- throw new Error(
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
- // Update zone settings if provided
425
- if (props.settings) {
426
- await updateZoneSettings(api, zoneData.id, props.settings);
427
- // Add a small delay to ensure settings are propagated
428
- await new Promise((resolve) => setTimeout(resolve, 2000));
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: any,
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: any,
491
+ api: CloudflareApi,
512
492
  zoneId: string,
513
493
  ): Promise<Zone["settings"]> {
514
494
  const settingsResponse = await api.get(`/zones/${zoneId}/settings`);
@@ -24,23 +24,6 @@ export function memoize<F extends (...args: any[]) => Promise<any>>(
24
24
  };
25
25
  }
26
26
 
27
- export function memoizeSync<F extends (...args: any[]) => any>(
28
- fn: F,
29
- keyFn: (...args: Parameters<F>) => string = defaultKeyFn,
30
- ) {
31
- const cache = new Map<string, ReturnType<F>>();
32
- return (...args: Parameters<F>): ReturnType<F> => {
33
- const key = keyFn(...args);
34
- const cached = cache.get(key);
35
- if (cached) {
36
- return cached;
37
- }
38
- const result = fn(...args);
39
- cache.set(key, result);
40
- return result;
41
- };
42
- }
43
-
44
27
  export const defaultKeyFn = (...args: any[]) => {
45
28
  return createHash("sha256").update(JSON.stringify(args)).digest("hex");
46
29
  };
@@ -34,3 +34,31 @@ export const singleFlight = <Args extends any[], Value, Error>(
34
34
  });
35
35
  };
36
36
  };
37
+
38
+ export class HTTPError extends Error {
39
+ constructor(
40
+ message: string,
41
+ public readonly status: number,
42
+ ) {
43
+ super(message);
44
+ }
45
+ }
46
+
47
+ // TODO: merge this with safe-fetch?
48
+ export const fetchResult = (url: string, init: RequestInit = {}) => {
49
+ return ResultAsync.fromPromise(
50
+ fetch(url, init),
51
+ () => new HTTPError(`Failed to ${init.method ?? "GET"} ${url}`, 0),
52
+ );
53
+ };
54
+
55
+ export const fetchJSON = <T, E>(url: string, init: RequestInit = {}) => {
56
+ return fetchResult(url, init).andThen(decodeJSON<T, E>);
57
+ };
58
+
59
+ export const decodeJSON = <T, E>(response: Response) => {
60
+ return ResultAsync.fromPromise(
61
+ response.json(),
62
+ () => new HTTPError("Failed to decode JSON", response.status),
63
+ ).andThen((json) => (response.ok ? ok(json as T) : err(json as E)));
64
+ };
@@ -1,6 +1,6 @@
1
- import { createXdgAppPaths } from "../xdg-paths.js";
1
+ import xdgAppPaths from "xdg-app-paths";
2
2
 
3
- const xdg = createXdgAppPaths("alchemy");
3
+ const xdg = xdgAppPaths("alchemy");
4
4
 
5
5
  export const CONFIG_DIR = xdg.config();
6
6
 
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth-wrangler.d.ts","sourceRoot":"","sources":["../../src/cloudflare/auth-wrangler.ts"],"names":[],"mappings":"AACA,OAAO,EAAW,WAAW,EAAE,MAAM,YAAY,CAAC;AAclD,eAAO,MAAM,cAAc,UAkB1B,CAAC;AAEF,UAAU,cAAc;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAyHD,eAAO,MAAM,0BAA0B,sDA0BtC,CAAC;AA0BF,cAAM,UAAW,SAAQ,KAAK;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;gBACjB,MAAM,EAAE;QAClB,KAAK,EAAE,MAAM,CAAC;QACd,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;KACrB;CAQF;AAED,eAAO,MAAM,aAAa,GACxB,SAAQ,MAAM,EAAmB,EACjC,MAAK,CAAC,OAAO,EAAE,MAAM,KAAK,IAAkB,4CA6E7C,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth-wrangler.js","sourceRoot":"","sources":["../../src/cloudflare/auth-wrangler.ts"],"names":[],"mappings":"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"}
@@ -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"}
@@ -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"}
@@ -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
- }