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
@@ -1,10 +1,7 @@
1
1
  import { cancel, intro, log, outro } from "@clack/prompts";
2
2
  import pc from "picocolors";
3
- import z from "zod";
4
- import {
5
- DEFAULT_SCOPES,
6
- wranglerLogin,
7
- } from "../../src/cloudflare/auth-wrangler.ts";
3
+ import { zod as z } from "trpc-cli";
4
+ import { DEFAULT_SCOPES, wranglerLogin } from "../../src/cloudflare/oauth.ts";
8
5
  import { throwWithContext } from "../errors.ts";
9
6
  import { t } from "../trpc.ts";
10
7
 
@@ -2,5 +2,5 @@
2
2
  * The build date used as the default worker compatibility date.
3
3
  * This is set to the date when the package was built.
4
4
  */
5
- export declare const BUILD_DATE = "2025-07-15";
5
+ export declare const BUILD_DATE = "2025-07-16";
6
6
  //# sourceMappingURL=build-date.d.ts.map
package/lib/build-date.js CHANGED
@@ -4,5 +4,5 @@
4
4
  * The build date used as the default worker compatibility date.
5
5
  * This is set to the date when the package was built.
6
6
  */
7
- export const BUILD_DATE = "2025-07-15";
7
+ export const BUILD_DATE = "2025-07-16";
8
8
  //# sourceMappingURL=build-date.js.map
@@ -29,22 +29,24 @@ export interface CloudflareApiOptions {
29
29
  */
30
30
  email?: string;
31
31
  }
32
+ /** Used to propagate normalized auth options from a parent resource to `createCloudflareApi` in a child resource */
33
+ export type InternalCloudflareApiOptions = CloudflareAuthOptions & {
34
+ baseUrl?: string;
35
+ accountId: string;
36
+ };
32
37
  /**
33
38
  * Creates a CloudflareApi instance with automatic account ID discovery if not provided
34
39
  *
35
40
  * @param options API options
36
41
  * @returns Promise resolving to a CloudflareApi instance
37
42
  */
38
- export declare function createCloudflareApi(options?: Partial<CloudflareApiOptions>): Promise<CloudflareApi>;
43
+ export declare function createCloudflareApi(options?: Partial<CloudflareApiOptions> | InternalCloudflareApiOptions): Promise<CloudflareApi>;
39
44
  /**
40
45
  * Cloudflare API client using raw fetch
41
46
  */
42
47
  export declare class CloudflareApi {
43
48
  readonly accountId: string;
44
49
  readonly baseUrl: string;
45
- readonly apiKey: Secret | undefined;
46
- readonly apiToken: Secret | undefined;
47
- readonly email: string | undefined;
48
50
  readonly authOptions: CloudflareAuthOptions;
49
51
  /**
50
52
  * Create a new Cloudflare API client
@@ -53,8 +55,10 @@ export declare class CloudflareApi {
53
55
  *
54
56
  * @param options API options
55
57
  */
56
- constructor(options: CloudflareApiOptions & {
58
+ constructor(options: {
59
+ baseUrl?: string;
57
60
  accountId: string;
61
+ authOptions: CloudflareAuthOptions;
58
62
  });
59
63
  /**
60
64
  * Make a fetch request to the Cloudflare API
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/cloudflare/api.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAG3C,OAAO,EAEL,KAAK,qBAAqB,EAC3B,MAAM,WAAW,CAAC;AAGnB;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,GAAE,OAAO,CAAC,oBAAoB,CAAM,GAC1C,OAAO,CAAC,aAAa,CAAC,CAsCxB;AAED;;GAEG;AACH,qBAAa,aAAa;IACxB,SAAgB,SAAS,EAAE,MAAM,CAAC;IAClC,SAAgB,OAAO,EAAE,MAAM,CAAC;IAChC,SAAgB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,SAAgB,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7C,SAAgB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1C,SAAgB,WAAW,EAAE,qBAAqB,CAAC;IAEnD;;;;;;OAMG;gBAED,OAAO,EAAE,oBAAoB,GAAG;QAC9B,SAAS,EAAE,MAAM,CAAC;KACnB;IAuBH;;;;;;OAMG;IACU,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,QAAQ,CAAC;IA8D3E;;OAEG;IACG,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAIlE;;OAEG;IACG,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAGnE;;OAEG;IACG,IAAI,CACR,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,GAAG,EACT,IAAI,GAAE,WAAgB,GACrB,OAAO,CAAC,QAAQ,CAAC;IAUpB;;OAEG;IACG,GAAG,CACP,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,GAAG,EACT,IAAI,GAAE,WAAgB,GACrB,OAAO,CAAC,QAAQ,CAAC;IAKpB;;OAEG;IACG,KAAK,CACT,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,GAAG,EACT,IAAI,GAAE,WAAgB,GACrB,OAAO,CAAC,QAAQ,CAAC;IAQpB;;OAEG;IACG,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,QAAQ,CAAC;CAGtE"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/cloudflare/api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAG3C,OAAO,EAGL,KAAK,qBAAqB,EAC3B,MAAM,WAAW,CAAC;AAGnB;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,oHAAoH;AACpH,MAAM,MAAM,4BAA4B,GAAG,qBAAqB,GAAG;IACjE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,GAAE,OAAO,CAAC,oBAAoB,CAAC,GAAG,4BAAiC,GACzE,OAAO,CAAC,aAAa,CAAC,CAYxB;AAED;;GAEG;AACH,qBAAa,aAAa;IACxB,SAAgB,SAAS,EAAE,MAAM,CAAC;IAClC,SAAgB,OAAO,EAAE,MAAM,CAAC;IAChC,SAAgB,WAAW,EAAE,qBAAqB,CAAC;IAEnD;;;;;;OAMG;gBACS,OAAO,EAAE;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,qBAAqB,CAAC;KACpC;IAMD;;;;;;OAMG;IACU,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,QAAQ,CAAC;IA8D3E;;OAEG;IACG,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAIlE;;OAEG;IACG,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAGnE;;OAEG;IACG,IAAI,CACR,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,GAAG,EACT,IAAI,GAAE,WAAgB,GACrB,OAAO,CAAC,QAAQ,CAAC;IAUpB;;OAEG;IACG,GAAG,CACP,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,GAAG,EACT,IAAI,GAAE,WAAgB,GACrB,OAAO,CAAC,QAAQ,CAAC;IAKpB;;OAEG;IACG,KAAK,CACT,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,GAAG,EACT,IAAI,GAAE,WAAgB,GACrB,OAAO,CAAC,QAAQ,CAAC;IAQpB;;OAEG;IACG,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,QAAQ,CAAC;CAGtE"}
@@ -1,8 +1,7 @@
1
- import { alchemy } from "../alchemy.js";
2
1
  import { withExponentialBackoff } from "../util/retry.js";
3
2
  import { safeFetch } from "../util/safe-fetch.js";
4
- import { getCloudflareAuthHeaders, } from "./auth.js";
5
- import { getCloudflareAccounts, getUserEmailFromApiKey } from "./user.js";
3
+ import { getCloudflareAuthHeaders, normalizeAuthOptions, } from "./auth.js";
4
+ import { getCloudflareAccountId } from "./user.js";
6
5
  /**
7
6
  * Creates a CloudflareApi instance with automatic account ID discovery if not provided
8
7
  *
@@ -10,35 +9,15 @@ import { getCloudflareAccounts, getUserEmailFromApiKey } from "./user.js";
10
9
  * @returns Promise resolving to a CloudflareApi instance
11
10
  */
12
11
  export async function createCloudflareApi(options = {}) {
13
- const apiKey = options.apiKey ??
14
- (process.env.CLOUDFLARE_API_KEY
15
- ? alchemy.secret(process.env.CLOUDFLARE_API_KEY)
16
- : undefined);
17
- const apiToken = options.apiToken ??
18
- (process.env.CLOUDFLARE_API_TOKEN
19
- ? alchemy.secret(process.env.CLOUDFLARE_API_TOKEN)
20
- : undefined);
21
- let email = options.email ?? process.env.CLOUDFLARE_EMAIL;
22
- if (apiKey && !email) {
23
- email = await getUserEmailFromApiKey(apiKey.unencrypted);
24
- }
12
+ const authOptions = await normalizeAuthOptions(options);
25
13
  const accountId = options.accountId ??
26
14
  process.env.CLOUDFLARE_ACCOUNT_ID ??
27
15
  process.env.CF_ACCOUNT_ID ??
28
- (await getCloudflareAccounts({
29
- apiKey,
30
- apiToken,
31
- email,
32
- }))[0]?.id;
33
- if (accountId === undefined) {
34
- throw new Error("Either accountId or CLOUDFLARE_ACCOUNT_ID must be provided");
35
- }
16
+ (await getCloudflareAccountId(authOptions));
36
17
  return new CloudflareApi({
37
18
  baseUrl: options.baseUrl,
38
19
  accountId,
39
- email,
40
- apiKey,
41
- apiToken,
20
+ authOptions,
42
21
  });
43
22
  }
44
23
  /**
@@ -47,9 +26,6 @@ export async function createCloudflareApi(options = {}) {
47
26
  export class CloudflareApi {
48
27
  accountId;
49
28
  baseUrl;
50
- apiKey;
51
- apiToken;
52
- email;
53
29
  authOptions;
54
30
  /**
55
31
  * Create a new Cloudflare API client
@@ -61,23 +37,7 @@ export class CloudflareApi {
61
37
  constructor(options) {
62
38
  this.accountId = options.accountId;
63
39
  this.baseUrl = options.baseUrl ?? "https://api.cloudflare.com/client/v4";
64
- this.apiKey = options.apiKey;
65
- this.apiToken = options.apiToken;
66
- this.email = options.email;
67
- if (this.apiKey && this.apiToken) {
68
- throw new Error("'apiKey' and 'apiToken' cannot both be provided");
69
- }
70
- else if (this.apiKey && !this.email) {
71
- throw new Error("'email' must be provided if 'apiKey' is provided");
72
- }
73
- this.authOptions = this.apiKey
74
- ? {
75
- apiKey: this.apiKey,
76
- email: this.email,
77
- }
78
- : {
79
- apiToken: this.apiToken,
80
- };
40
+ this.authOptions = options.authOptions;
81
41
  }
82
42
  /**
83
43
  * Make a fetch request to the Cloudflare API
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/cloudflare/api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/cloudflare/api.ts"],"names":[],"mappings":"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"}
@@ -1,38 +1,19 @@
1
1
  import type { Secret } from "../secret.ts";
2
- /**
3
- * Authentication options for Cloudflare API
4
- */
5
- export type CloudflareAuthOptions = CloudflareApiKeyAuthOptions | CloudflareApiTokenAuthOptions;
6
- export type CloudflareApiKeyAuthOptions = {
7
- /**
8
- * API Key to use with API Key
9
- */
2
+ import type { CloudflareApiOptions } from "./api.ts";
3
+ export interface CloudflareApiTokenAuthOptions {
4
+ type: "api-token";
5
+ apiToken: Secret<string>;
6
+ }
7
+ export interface CloudflareApiKeyAuthOptions {
8
+ type: "api-key";
10
9
  apiKey: Secret;
11
- /**
12
- * Email to use with API Key
13
- * If not provided, will attempt to discover from Cloudflare API
14
- */
15
- email: string;
16
- /**
17
- * API Token to use with API Key
18
- */
19
- apiToken?: undefined;
20
- };
21
- export declare function isCloudflareApiKeyAuthOptions(options: CloudflareAuthOptions | undefined): options is CloudflareApiKeyAuthOptions;
22
- export type CloudflareApiTokenAuthOptions = {
23
- /**
24
- * API Token to use with API Key
25
- */
26
- apiToken?: Secret;
27
- /**
28
- * API Key to use with API Token
29
- */
30
- apiKey?: undefined;
31
- /**
32
- * Email to use with API Token
33
- */
34
- email?: undefined;
35
- };
36
- export declare function isCloudflareApiTokenAuthOptions(options: CloudflareAuthOptions | undefined): options is CloudflareApiTokenAuthOptions;
37
- export declare function getCloudflareAuthHeaders(options: CloudflareAuthOptions | undefined): Promise<Record<string, string>>;
10
+ apiEmail: string;
11
+ }
12
+ export interface CloudflareWranglerAuthOptions {
13
+ type: "wrangler";
14
+ }
15
+ export type CloudflareAuthOptions = CloudflareApiTokenAuthOptions | CloudflareApiKeyAuthOptions | CloudflareWranglerAuthOptions;
16
+ export declare const isCloudflareAuthOptions: (input?: CloudflareApiOptions | CloudflareAuthOptions) => input is CloudflareAuthOptions;
17
+ export declare function normalizeAuthOptions(input?: CloudflareApiOptions | CloudflareAuthOptions): Promise<CloudflareAuthOptions>;
18
+ export declare function getCloudflareAuthHeaders(authOptions: CloudflareAuthOptions): Promise<Record<string, string>>;
38
19
  //# sourceMappingURL=auth.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/cloudflare/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAC7B,2BAA2B,GAC3B,6BAA6B,CAAC;AAElC,MAAM,MAAM,2BAA2B,GAAG;IACxC;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC;AAEF,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,qBAAqB,GAAG,SAAS,GACzC,OAAO,IAAI,2BAA2B,CAExC;AAED,MAAM,MAAM,6BAA6B,GAAG;IAC1C;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;IAEnB;;OAEG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB,CAAC;AAEF,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,qBAAqB,GAAG,SAAS,GACzC,OAAO,IAAI,6BAA6B,CAE1C;AAED,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,qBAAqB,GAAG,SAAS,GACzC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CA2BjC"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/cloudflare/auth.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAIrD,MAAM,WAAW,6BAA6B;IAC5C,IAAI,EAAE,WAAW,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;CAC1B;AAED,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,6BAA6B;IAC5C,IAAI,EAAE,UAAU,CAAC;CAClB;AAED,MAAM,MAAM,qBAAqB,GAC7B,6BAA6B,GAC7B,2BAA2B,GAC3B,6BAA6B,CAAC;AAElC,eAAO,MAAM,uBAAuB,GAClC,QAAQ,oBAAoB,GAAG,qBAAqB,KACnD,KAAK,IAAI,qBAQX,CAAC;AAEF,wBAAsB,oBAAoB,CACxC,KAAK,CAAC,EAAE,oBAAoB,GAAG,qBAAqB,GACnD,OAAO,CAAC,qBAAqB,CAAC,CA+BhC;AAED,wBAAsB,wBAAwB,CAC5C,WAAW,EAAE,qBAAqB,GACjC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAyBjC"}
@@ -1,34 +1,64 @@
1
- import { getRefreshedWranglerConfig } from "./auth-wrangler.js";
2
- export function isCloudflareApiKeyAuthOptions(options) {
3
- return options !== undefined && options.apiKey !== undefined;
4
- }
5
- export function isCloudflareApiTokenAuthOptions(options) {
6
- return options !== undefined && options.apiToken !== undefined;
7
- }
8
- export async function getCloudflareAuthHeaders(options) {
9
- if (isCloudflareApiKeyAuthOptions(options)) {
10
- // Global API Key
11
- return {
12
- "X-Auth-Key": options.apiKey.unencrypted,
13
- "X-Auth-Email": options.email,
14
- };
1
+ import { alchemy } from "../alchemy.js";
2
+ import { getRefreshedWranglerConfig } from "./oauth.js";
3
+ import { getUserEmailFromApiKey } from "./user.js";
4
+ export const isCloudflareAuthOptions = (input) => {
5
+ return (input !== undefined &&
6
+ "type" in input &&
7
+ (input.type === "api-token" ||
8
+ input.type === "api-key" ||
9
+ input.type === "wrangler"));
10
+ };
11
+ export async function normalizeAuthOptions(input) {
12
+ if (isCloudflareAuthOptions(input)) {
13
+ return input;
15
14
  }
16
- else if (isCloudflareApiTokenAuthOptions(options)) {
17
- // API Token
15
+ const email = async (apiKey) => input?.email ??
16
+ process.env.CLOUDFLARE_EMAIL ??
17
+ (await getUserEmailFromApiKey(apiKey.unencrypted));
18
+ if (input?.apiKey) {
18
19
  return {
19
- Authorization: `Bearer ${options.apiToken?.unencrypted}`,
20
+ type: "api-key",
21
+ apiKey: input.apiKey,
22
+ apiEmail: await email(input.apiKey),
20
23
  };
21
24
  }
22
- // Wrangler OAuth Token
23
- const wranglerConfig = await getRefreshedWranglerConfig();
24
- if (wranglerConfig.isOk() && wranglerConfig.value) {
25
+ if (input?.apiToken) {
26
+ return { type: "api-token", apiToken: input.apiToken };
27
+ }
28
+ if (process.env.CLOUDFLARE_API_KEY) {
29
+ const key = alchemy.secret(process.env.CLOUDFLARE_API_KEY);
30
+ return { type: "api-key", apiKey: key, apiEmail: await email(key) };
31
+ }
32
+ if (process.env.CLOUDFLARE_API_TOKEN) {
25
33
  return {
26
- Authorization: `Bearer ${wranglerConfig.value.oauth_token}`,
34
+ type: "api-token",
35
+ apiToken: alchemy.secret(process.env.CLOUDFLARE_API_TOKEN),
27
36
  };
28
37
  }
29
- else if (wranglerConfig.isErr()) {
30
- throw new Error(`Cloudflare authentication failed: ${wranglerConfig.error.message}`);
38
+ return { type: "wrangler" };
39
+ }
40
+ export async function getCloudflareAuthHeaders(authOptions) {
41
+ switch (authOptions.type) {
42
+ case "api-token":
43
+ return { Authorization: `Bearer ${authOptions.apiToken.unencrypted}` };
44
+ case "api-key":
45
+ return {
46
+ "X-Auth-Key": authOptions.apiKey.unencrypted,
47
+ "X-Auth-Email": authOptions.apiEmail,
48
+ };
49
+ case "wrangler": {
50
+ const wranglerConfig = await getRefreshedWranglerConfig();
51
+ if (wranglerConfig.isErr()) {
52
+ throw new Error([
53
+ wranglerConfig.error.message,
54
+ "Please run `alchemy login`, or set either CLOUDFLARE_API_TOKEN or CLOUDFLARE_API_KEY in your environment.",
55
+ "Learn more: https://alchemy.run/guides/cloudflare/",
56
+ ].join("\n"));
57
+ }
58
+ return {
59
+ Authorization: `Bearer ${wranglerConfig.value.oauth_token}`,
60
+ };
61
+ }
31
62
  }
32
- throw new Error("Cloudflare authentication required. Did you forget to login with `wrangler login` or set CLOUDFLARE_API_TOKEN, CLOUDFLARE_API_KEY?");
33
63
  }
34
64
  //# sourceMappingURL=auth.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/cloudflare/auth.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAyBhE,MAAM,UAAU,6BAA6B,CAC3C,OAA0C;IAE1C,OAAO,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC;AAC/D,CAAC;AAmBD,MAAM,UAAU,+BAA+B,CAC7C,OAA0C;IAE1C,OAAO,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC;AACjE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,OAA0C;IAE1C,IAAI,6BAA6B,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3C,iBAAiB;QACjB,OAAO;YACL,YAAY,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW;YACxC,cAAc,EAAE,OAAO,CAAC,KAAK;SAC9B,CAAC;IACJ,CAAC;SAAM,IAAI,+BAA+B,CAAC,OAAO,CAAC,EAAE,CAAC;QACpD,YAAY;QACZ,OAAO;YACL,aAAa,EAAE,UAAU,OAAO,CAAC,QAAQ,EAAE,WAAW,EAAE;SACzD,CAAC;IACJ,CAAC;IACD,uBAAuB;IACvB,MAAM,cAAc,GAAG,MAAM,0BAA0B,EAAE,CAAC;IAC1D,IAAI,cAAc,CAAC,IAAI,EAAE,IAAI,cAAc,CAAC,KAAK,EAAE,CAAC;QAClD,OAAO;YACL,aAAa,EAAE,UAAU,cAAc,CAAC,KAAK,CAAC,WAAW,EAAE;SAC5D,CAAC;IACJ,CAAC;SAAM,IAAI,cAAc,CAAC,KAAK,EAAE,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CACb,qCAAqC,cAAc,CAAC,KAAK,CAAC,OAAO,EAAE,CACpE,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,KAAK,CACb,oIAAoI,CACrI,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/cloudflare/auth.ts"],"names":[],"mappings":"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"}
@@ -6,20 +6,17 @@ interface WranglerConfig {
6
6
  expiration_time: Date;
7
7
  scopes: string[];
8
8
  }
9
- export declare const getRefreshedWranglerConfig: () => ResultAsync<WranglerConfig | null, OAuthError>;
9
+ export declare const getRefreshedWranglerConfig: () => ResultAsync<WranglerConfig, OAuthError>;
10
+ export declare const wranglerLogin: (scopes?: string[], log?: (message: string) => void) => ResultAsync<WranglerConfig, OAuthError>;
11
+ interface OAuthErrorParams {
12
+ error: string;
13
+ error_description: string;
14
+ error_verbose?: string;
15
+ error_hint?: string;
16
+ status_code: number;
17
+ }
10
18
  declare class OAuthError extends Error {
11
- readonly error: string;
12
- readonly error_verbose?: string;
13
- readonly error_hint?: string;
14
- readonly status_code: number;
15
- constructor(params: {
16
- error: string;
17
- error_verbose?: string;
18
- error_description: string;
19
- error_hint?: string;
20
- status_code: number;
21
- });
19
+ constructor(params: OAuthErrorParams);
22
20
  }
23
- export declare const wranglerLogin: (scopes?: string[], log?: (message: string) => void) => ResultAsync<WranglerConfig, OAuthError>;
24
21
  export {};
25
- //# sourceMappingURL=auth-wrangler.d.ts.map
22
+ //# sourceMappingURL=oauth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../../src/cloudflare/oauth.ts"],"names":[],"mappings":"AACA,OAAO,EAAoB,WAAW,EAAE,MAAM,YAAY,CAAC;AAoB3D,eAAO,MAAM,cAAc,UAkB1B,CAAC;AAGF,UAAU,cAAc;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAID,eAAO,MAAM,0BAA0B,+CAkBtC,CAAC;AAyDF,eAAO,MAAM,aAAa,GACxB,SAAQ,MAAM,EAAmB,EACjC,MAAK,CAAC,OAAO,EAAE,MAAM,KAAK,IAAkB,4CAgF7C,CAAC;AA6BF,UAAU,gBAAgB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,cAAM,UAAW,SAAQ,KAAK;gBAChB,MAAM,EAAE,gBAAgB;CAKrC"}