alchemy 0.77.4 → 0.78.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 (67) hide show
  1. package/bin/alchemy.js +2414 -323
  2. package/bin/commands/util.ts +234 -315
  3. package/bin/services/execute-alchemy.ts +8 -33
  4. package/lib/cloudflare/assets.js +1 -1
  5. package/lib/cloudflare/assets.js.map +1 -1
  6. package/lib/cloudflare/astro/plugin.d.ts.map +1 -1
  7. package/lib/cloudflare/astro/plugin.js +3 -1
  8. package/lib/cloudflare/astro/plugin.js.map +1 -1
  9. package/lib/cloudflare/auth.d.ts +73 -68
  10. package/lib/cloudflare/auth.d.ts.map +1 -1
  11. package/lib/cloudflare/auth.js +73 -72
  12. package/lib/cloudflare/auth.js.map +1 -1
  13. package/lib/cloudflare/cloudflare-env-proxy.d.ts +1 -1
  14. package/lib/cloudflare/cloudflare-env-proxy.d.ts.map +1 -1
  15. package/lib/cloudflare/cloudflare-env-proxy.js +2 -2
  16. package/lib/cloudflare/cloudflare-env-proxy.js.map +1 -1
  17. package/lib/cloudflare/compatibility-date.gen.d.ts +1 -1
  18. package/lib/cloudflare/compatibility-date.gen.js +1 -1
  19. package/lib/cloudflare/container.d.ts +0 -3
  20. package/lib/cloudflare/container.d.ts.map +1 -1
  21. package/lib/cloudflare/container.js +10 -4
  22. package/lib/cloudflare/container.js.map +1 -1
  23. package/lib/cloudflare/d1-database.d.ts.map +1 -1
  24. package/lib/cloudflare/d1-database.js +4 -4
  25. package/lib/cloudflare/d1-database.js.map +1 -1
  26. package/lib/cloudflare/index.d.ts +2 -2
  27. package/lib/cloudflare/index.d.ts.map +1 -1
  28. package/lib/cloudflare/index.js +2 -2
  29. package/lib/cloudflare/index.js.map +1 -1
  30. package/lib/cloudflare/permission-groups.d.ts +35 -0
  31. package/lib/cloudflare/permission-groups.d.ts.map +1 -1
  32. package/lib/cloudflare/permission-groups.js +42 -0
  33. package/lib/cloudflare/permission-groups.js.map +1 -1
  34. package/lib/cloudflare/worker-assets.d.ts.map +1 -1
  35. package/lib/cloudflare/worker-assets.js +22 -1
  36. package/lib/cloudflare/worker-assets.js.map +1 -1
  37. package/lib/cloudflare/worker-bundle.d.ts.map +1 -1
  38. package/lib/cloudflare/worker-bundle.js +1 -0
  39. package/lib/cloudflare/worker-bundle.js.map +1 -1
  40. package/lib/cloudflare/worker.d.ts +2 -0
  41. package/lib/cloudflare/worker.d.ts.map +1 -1
  42. package/lib/cloudflare/worker.js.map +1 -1
  43. package/lib/util/detect-node-runtime.d.ts.map +1 -1
  44. package/lib/util/detect-node-runtime.js +0 -2
  45. package/lib/util/detect-node-runtime.js.map +1 -1
  46. package/lib/util/detect-package-manager.d.ts +1 -1
  47. package/lib/util/detect-package-manager.d.ts.map +1 -1
  48. package/lib/util/detect-package-manager.js +11 -8
  49. package/lib/util/detect-package-manager.js.map +1 -1
  50. package/package.json +5 -1
  51. package/src/cloudflare/assets.ts +1 -1
  52. package/src/cloudflare/astro/plugin.ts +8 -1
  53. package/src/cloudflare/auth.ts +94 -75
  54. package/src/cloudflare/cloudflare-env-proxy.ts +5 -1
  55. package/src/cloudflare/compatibility-date.gen.ts +1 -1
  56. package/src/cloudflare/container.ts +10 -7
  57. package/src/cloudflare/d1-database.ts +7 -4
  58. package/src/cloudflare/index.ts +2 -2
  59. package/src/cloudflare/permission-groups.ts +42 -0
  60. package/src/cloudflare/worker-assets.ts +34 -1
  61. package/src/cloudflare/worker-bundle.ts +1 -0
  62. package/src/cloudflare/worker.ts +2 -0
  63. package/src/util/detect-node-runtime.ts +0 -2
  64. package/src/util/detect-package-manager.ts +12 -8
  65. package/templates/tanstack-start/alchemy.run.ts +8 -2
  66. package/templates/tanstack-start/src/routes/demo.start.server-funcs.tsx +11 -16
  67. package/workers/tunnel-proxy.js +1 -1
@@ -10,6 +10,9 @@ import {
10
10
  import pc from "picocolors";
11
11
  import z from "zod";
12
12
  import { Profile, Provider } from "../../src/auth.ts";
13
+ import { extractCloudflareResult } from "../../src/cloudflare/api-response.ts";
14
+ import type { CloudflareAuth } from "../../src/cloudflare/auth.ts";
15
+ import { PERMISSION_GROUPS } from "../../src/cloudflare/permission-groups.ts";
13
16
  import { CancelSignal, loggedProcedure, t } from "../trpc.ts";
14
17
  import { promptForProfileName } from "./configure.ts";
15
18
 
@@ -42,60 +45,63 @@ export const util = t.router({
42
45
  "create-cloudflare-token": createCloudflareToken,
43
46
  });
44
47
 
45
- async function createToken(
46
- keyName: string,
47
- accountIds: Array<string>,
48
- permissionGroupIds: Array<string> | undefined,
49
- credentials: { apiKey: string; accountEmail: string },
50
- ) {
51
- type PermissionGroup = {
52
- id: string;
53
- name: string;
54
- description: string;
55
- scopes: Array<string>;
56
- };
57
-
58
- const permissionGroups = await fetch(
59
- "https://api.cloudflare.com/client/v4/user/tokens/permission_groups",
60
- {
61
- headers: {
62
- "Content-Type": "application/json",
63
- "X-Auth-Key": credentials.apiKey,
64
- "X-Auth-Email": credentials.accountEmail,
48
+ function formatTokenPolicies(
49
+ accountIds: string[],
50
+ predicate: (group: PermissionGroup) => boolean = () => true,
51
+ ): TokenPolicy[] {
52
+ const policies: Record<PermissionGroup["scopes"][number], TokenPolicy> = {
53
+ "com.cloudflare.api.account": {
54
+ effect: "allow",
55
+ permission_groups: [],
56
+ resources: Object.fromEntries(
57
+ accountIds.map((id) => [`com.cloudflare.api.account.${id}`, "*"]),
58
+ ),
59
+ },
60
+ "com.cloudflare.api.account.zone": {
61
+ effect: "allow",
62
+ permission_groups: [],
63
+ resources: {
64
+ "com.cloudflare.api.account.zone.*": "*",
65
65
  },
66
66
  },
67
- )
68
- .then((res) => res.json())
69
- .then((data) => data.result as Array<PermissionGroup>)
70
- .then((data) => {
71
- //* filter permissions and group by scope
72
- const groupedByScope = data.reduce(
73
- (acc, group) => {
74
- if (
75
- permissionGroupIds != null &&
76
- !permissionGroupIds.includes(group.id)
77
- ) {
78
- return acc;
79
- }
80
- const scope = group.scopes[0];
81
- if (!acc[scope]) {
82
- acc[scope] = [];
83
- }
84
- acc[scope].push(group);
85
- return acc;
86
- },
87
- {} as Record<string, Array<PermissionGroup>>,
88
- );
89
- return groupedByScope;
90
- })
91
- .catch((err) => {
92
- log.error(pc.red(`Error fetching permission groups: ${err.message}`));
93
- throw new CancelSignal();
67
+ "com.cloudflare.edge.r2.bucket": {
68
+ effect: "allow",
69
+ permission_groups: [],
70
+ resources: {
71
+ "com.cloudflare.edge.r2.bucket.*": "*",
72
+ },
73
+ },
74
+ };
75
+ for (const group of PERMISSION_GROUPS) {
76
+ if (!predicate(group)) continue;
77
+ policies[group.scopes[0]].permission_groups.push({
78
+ id: group.id,
94
79
  });
80
+ }
81
+ return Object.values(policies).filter(
82
+ (policy) => policy.permission_groups.length > 0,
83
+ );
84
+ }
95
85
 
96
- const apiToken = await fetch(
97
- "https://api.cloudflare.com/client/v4/user/tokens",
98
- {
86
+ interface TokenPolicy {
87
+ id?: string;
88
+ effect: "allow" | "deny";
89
+ permission_groups: {
90
+ id: string;
91
+ meta?: { key: string; value: string };
92
+ name?: string;
93
+ }[];
94
+ resources: Record<string, string> | Record<string, Record<string, string>>;
95
+ }
96
+
97
+ async function createToken(
98
+ name: string,
99
+ policies: TokenPolicy[],
100
+ credentials: { apiKey: string; accountEmail: string },
101
+ ) {
102
+ const apiToken = await extractCloudflareResult<{ value: string }>(
103
+ "create cloudflare token",
104
+ fetch("https://api.cloudflare.com/client/v4/user/tokens", {
99
105
  method: "POST",
100
106
  headers: {
101
107
  "Content-Type": "application/json",
@@ -103,38 +109,13 @@ async function createToken(
103
109
  "X-Auth-Email": credentials.accountEmail,
104
110
  },
105
111
  body: JSON.stringify({
106
- name: `Alchemy Token - ${keyName}`,
112
+ name: `Alchemy Token - ${name}`,
107
113
  status: "active",
108
- policies: [
109
- {
110
- effect: "allow",
111
- resources: accountIds.reduce((acc, id) => {
112
- acc[`com.cloudflare.api.account.${id}`] = "*";
113
- return acc;
114
- }, {}),
115
- permission_groups: permissionGroups[
116
- "com.cloudflare.api.account"
117
- ].map((group) => ({ id: group.id })),
118
- },
119
- {
120
- effect: "allow",
121
- resources: { "com.cloudflare.api.account.zone.*": "*" },
122
- permission_groups: permissionGroups[
123
- "com.cloudflare.api.account.zone"
124
- ].map((group) => ({ id: group.id })),
125
- },
126
- ],
114
+ policies,
127
115
  }),
128
- },
129
- )
130
- .then((res) => res.json())
131
- .then((data) => data.result.value)
132
- .catch((err) => {
133
- log.error(pc.red(`Error creating cloudflare token: ${err.message}`));
134
- throw new CancelSignal();
135
- });
136
-
137
- return apiToken;
116
+ }),
117
+ );
118
+ return apiToken.value;
138
119
  }
139
120
 
140
121
  async function createCloudflareGodToken() {
@@ -208,13 +189,14 @@ async function createCloudflareGodToken() {
208
189
  throw new CancelSignal();
209
190
  }
210
191
 
211
- const apiToken = await createToken("GOD-TOKEN", accountIds, undefined, {
212
- apiKey,
213
- accountEmail,
214
- }).catch((err) => {
215
- log.error(pc.red(`Error creating cloudflare god token: ${err.message}`));
216
- throw new CancelSignal();
217
- });
192
+ const apiToken = await createToken(
193
+ "GOD-TOKEN",
194
+ formatTokenPolicies(accountIds),
195
+ {
196
+ apiKey,
197
+ accountEmail,
198
+ },
199
+ );
218
200
 
219
201
  outro(`Cloudflare god token created: ${pc.magenta(apiToken)}`);
220
202
  }
@@ -244,13 +226,14 @@ async function createCloudflareProfileToken(input: { profile?: string }) {
244
226
  );
245
227
  }
246
228
 
247
- const permissionGroupIds: Array<string> = [];
248
- for (const scope of provider.scopes) {
249
- const ids = CLOUDFLARE_OAUTH_SCOPES_TO_PERMISSION_GROUP_IDS[scope];
250
- if (ids != null) {
251
- permissionGroupIds.push(...ids);
252
- }
253
- }
229
+ const groupNames = new Set(
230
+ provider.scopes.flatMap(
231
+ (scope) => CLOUDFLARE_OAUTH_SCOPES_TO_PERMISSION_GROUP_NAMES[scope] ?? [],
232
+ ),
233
+ );
234
+ const policies = formatTokenPolicies([provider.metadata.id], (group) =>
235
+ groupNames.has(group.name),
236
+ );
254
237
 
255
238
  const apiKey = await password({
256
239
  message:
@@ -268,247 +251,183 @@ async function createCloudflareProfileToken(input: { profile?: string }) {
268
251
  throw new CancelSignal();
269
252
  }
270
253
 
271
- const apiToken = await createToken(
272
- name,
273
- [provider.metadata.id],
274
- permissionGroupIds,
275
- { apiKey, accountEmail },
276
- );
254
+ const apiToken = await createToken(name, policies, { apiKey, accountEmail });
277
255
 
278
256
  outro(
279
257
  `Cloudflare token created for profile ${pc.bold(name)}: ${pc.magenta(apiToken)}`,
280
258
  );
281
259
  }
282
260
 
283
- export const CLOUDFLARE_OAUTH_SCOPES_TO_PERMISSION_GROUP_IDS = {
261
+ type PermissionGroup = (typeof PERMISSION_GROUPS)[number];
262
+
263
+ export const CLOUDFLARE_OAUTH_SCOPES_TO_PERMISSION_GROUP_NAMES: Record<
264
+ CloudflareAuth.Scope,
265
+ Array<PermissionGroup["name"]>
266
+ > = {
284
267
  "access:read": [
285
- "eb258a38ea634c86a0c89da6b27cb6b6",
286
- "7ea222f6d5064cfa89ea366d7c1fee89",
287
- "08e61dabe81a422dab0dea6fdef1a98a",
288
- "0f4841f80adb4bada5a09493300e7f8d",
289
- "4f3196a5c95747b6ad82e34e1d0a694f",
290
- "26bc23f853634eb4bff59983b9064fde",
291
- "b8b7514ce5364cd8ac0455f3eb16eb5f",
292
- "de99c87e48d642ce8c985d027905b475",
293
- "91f7ce32fa614d73b7e1fc8f0e78582b",
294
- "99ff99e4e30247a99d3777a8c4c18541",
295
- "e985ca9351db460faebbe8681c48e560",
268
+ "Access: Apps and Policies Read",
269
+ "Access: Custom Pages Read",
270
+ "Access: Device Posture Read",
271
+ "Access: Mutual TLS Certificates Read",
272
+ "Access: Organizations, Identity Providers, and Groups Read",
273
+ "Access: Policy Test Read",
274
+ "Access: Population Read",
275
+ "Access: Service Tokens Read",
276
+ "Access: SSH Auditing Read",
277
+ "Access: SCIM logs read",
296
278
  ],
297
279
  "access:write": [
298
- "a1c0fec57cf94af79479a6d827fa518c",
299
- "d30c9ad8b5224e7cb8d41bcb4757effc",
300
- "bc783549a3a741aaa10556faf8b485bb",
301
- "6d23f290472f4e6fad5c4398c057c356",
302
- "bfe0d8686a584fa680f4c53b5eb0de6d",
303
- "7121a0c7e9ed46e3829f9cca2bb572aa",
304
- "29d3afbfd4054af9accdd1118815ed05",
305
- "2fc1072ee6b743828db668fcb3f9dee7",
306
- "4e5fd8ac327b4a358e48c66fcbeb856d",
307
- "1e13c5124ca64b72b1969a67e8829049",
308
- "959972745952452f8be2452be8cbb9f2",
309
- "6c9d1cfcfc6840a987d1b5bfb880a841",
310
- "6db4e222e21248ac96a3f4c2a81e3b41",
311
- "eb258a38ea634c86a0c89da6b27cb6b6",
312
- "7ea222f6d5064cfa89ea366d7c1fee89",
313
- "08e61dabe81a422dab0dea6fdef1a98a",
314
- "0f4841f80adb4bada5a09493300e7f8d",
315
- "4f3196a5c95747b6ad82e34e1d0a694f",
316
- "26bc23f853634eb4bff59983b9064fde",
317
- "b8b7514ce5364cd8ac0455f3eb16eb5f",
318
- "de99c87e48d642ce8c985d027905b475",
319
- "91f7ce32fa614d73b7e1fc8f0e78582b",
320
- "99ff99e4e30247a99d3777a8c4c18541",
321
- "e985ca9351db460faebbe8681c48e560",
322
- ],
323
- "account:read": ["c1fde68c7bcc44588cbb6ddbc16d6480"],
324
- "agw:read": ["05a2a65760a546439ed29762b163cece"],
325
- "agw:run": [
326
- "05a2a65760a546439ed29762b163cece",
327
- "5e5d3e8efeec49f3afb67bafecbcd511",
328
- ],
329
- "ai:read": ["a92d2450e05d4e7bb7d0a64968f83d11"],
330
- "ai:write": [
331
- "a92d2450e05d4e7bb7d0a64968f83d11",
332
- "bacc64e0f6c34fc0883a1223f938a104",
333
- ],
334
- "aiaudit:read": ["19637fbb73d242c0a92845d8db0b95b1"],
335
- "aiaudit:write": [
336
- "19637fbb73d242c0a92845d8db0b95b1",
337
- "1ba6ab4cacdb454b913bbb93e1b8cb8c",
338
- ],
339
- "aig:read": ["4dc8917b4b40457d88d3035d5dadb054"],
340
- "aig:write": [
341
- "4dc8917b4b40457d88d3035d5dadb054",
342
- "644535f4ed854494a59cb289d634b257",
343
- "6c8a3737f07f46369c1ea1f22138daaf",
344
- ],
345
- "auditlogs:read": ["b05b28e839c54467a7d6cba5d3abb5a3"],
346
- "browser:read": ["374b03fa229f4eb6b011bb1cd7f235ee"],
347
- "browser:write": [
348
- "374b03fa229f4eb6b011bb1cd7f235ee",
349
- "adddda876faa4a0590f1b23a038976e4",
350
- ],
280
+ "Access: Service Tokens Write",
281
+ "Access: SSH Auditing Write",
282
+ "Access: Population Write",
283
+ "Access: Policy Test Write",
284
+ "Access: Organizations, Identity Providers, and Groups Write",
285
+ "Access: Organizations, Identity Providers, and Groups Revoke",
286
+ "Access: Mutual TLS Certificates Write",
287
+ "Access: Device Posture Write",
288
+ "Access: Custom Pages Write",
289
+ "Access: Apps and Policies Write",
290
+ "Access: Apps and Policies Revoke",
291
+ "Access: Apps and Policies Read",
292
+ "Access: Custom Pages Read",
293
+ "Access: Device Posture Read",
294
+ "Access: Mutual TLS Certificates Read",
295
+ "Access: Organizations, Identity Providers, and Groups Read",
296
+ "Access: Policy Test Read",
297
+ "Access: Population Read",
298
+ "Access: Service Tokens Read",
299
+ "Access: SSH Auditing Read",
300
+ "Access: SCIM logs read",
301
+ ],
302
+ "account:read": ["Account Settings Read"],
303
+ "agw:read": ["Account API Gateway Read"],
304
+ "agw:run": ["Account API Gateway Read", "Account API Gateway"],
305
+ "ai:read": ["Workers AI Read"],
306
+ "ai:write": ["Workers AI Read", "Workers AI Write"],
307
+ "aiaudit:read": ["AI Audit Read"],
308
+ "aiaudit:write": ["AI Audit Read", "AI Audit Write"],
309
+ "aig:read": ["AI Gateway Read"],
310
+ "aig:write": ["AI Gateway Read", "AI Gateway Run", "AI Gateway Write"],
311
+ "auditlogs:read": ["Access: Audit Logs Read"],
312
+ "browser:read": ["Browser Rendering Read"],
313
+ "browser:write": ["Browser Rendering Read", "Browser Rendering Write"],
351
314
  "cfone:read": [
352
- "1cd960c063a0448481343372c963d8c7",
353
- "c1968d31028d4239976ec3bc4750bbf6",
354
- "07cf1c1952a84b13b2cd542f3d2f29ab",
315
+ "Cloudflare One Connector: WARP Read",
316
+ "Cloudflare One Connector: cloudflared Read",
317
+ "Cloudflare One Connectors Read",
355
318
  ],
356
319
  "cfone:write": [
357
- "5b5c774a5d174ca88d046c8889648b3f",
358
- "037b9e348b3b42d4b46ea2fcb1cfb3e7",
359
- "a7030c9c98d544e092d8b099fabb1f06",
360
- "1cd960c063a0448481343372c963d8c7",
361
- "c1968d31028d4239976ec3bc4750bbf6",
362
- "07cf1c1952a84b13b2cd542f3d2f29ab",
363
- ],
364
- "cloudchamber:write": [
365
- "65ec50cbde3d4c838bbe7500024d5745",
366
- "26ce6c7d18a346528e7b905d5e269866",
367
- ],
368
- "constellation:write": [
369
- "eeffa4d16812430cb4a0ae9e7f46fc24",
370
- "7c81856725af47ce89a790d5fb36f362",
371
- ],
372
- "containers:write": [
373
- "cfd39eebc07c4e3ea849e4b3d2644637",
374
- "bdbcd690c763475a985e8641dddc09f7",
375
- ],
376
- "d1:write": [
377
- "192192df92ee43ac90f2aeeffce67e35",
378
- "09b2857d1c31407795e75e3fed8617a1",
379
- ],
380
- "dex:read": ["3b376e0aa52c41cbb6afc9cab945afa8"],
320
+ "Cloudflare One Connector: WARP Write",
321
+ "Cloudflare One Connector: cloudflared Write",
322
+ "Cloudflare One Connectors Write",
323
+ "Cloudflare One Connector: WARP Read",
324
+ "Cloudflare One Connector: cloudflared Read",
325
+ "Cloudflare One Connectors Read",
326
+ ],
327
+ "cloudchamber:write": ["Cloudchamber Read", "Cloudchamber Write"],
328
+ "constellation:write": ["Constellation Read", "Constellation Write"],
329
+ "containers:write": ["Workers Containers Read", "Workers Containers Write"],
330
+ "d1:write": ["D1 Read", "D1 Write"],
331
+ "dex:read": ["Cloudflare DEX Read"],
381
332
  "dex:write": [
382
- "3a1e1ef09dd34271bb44fc4c6a419952",
383
- "3b376e0aa52c41cbb6afc9cab945afa8",
384
- "92c8dcd551cc42a6a57a54e8f8d3f3e3",
333
+ "Cloudflare DEX",
334
+ "Cloudflare DEX Read",
335
+ "Cloudflare DEX Write",
385
336
  ],
386
- "dns_analytics:read": [], //??
337
+ "dns_analytics:read": [],
387
338
  "dns_records:edit": [
388
- "82e64a83756745bbbb1c9c2701bf816b",
389
- "95d69e8d6d5144bfb0923667355d9f11",
390
- "5b7aedd821a548b9bf5a2acabbce98c7",
391
- "4755a26eedb94da69e1066d98aa820be",
392
- ],
393
- "dns_records:read": [
394
- "82e64a83756745bbbb1c9c2701bf816b",
395
- "95d69e8d6d5144bfb0923667355d9f11",
396
- ],
397
- "dns_settings:read": ["cfa964bcdafc4ab39704e7476154e41b"],
398
- "firstpartytags:write": [], //??
339
+ "DNS Read",
340
+ "DNS View Read",
341
+ "DNS View Write",
342
+ "DNS Write",
343
+ ],
344
+ "dns_records:read": ["DNS Read", "DNS View Read"],
345
+ "dns_settings:read": ["Account DNS Settings Read"],
346
+ "firstpartytags:write": ["Zaraz Edit"],
399
347
  "lb:edit": [
400
- "59059f0c977b44f8b1c18e0aaf91c369",
401
- "419ec42810af4659ade77716dbe47bc6",
402
- "6d7f2f5f5b1d4a0e9081fdc98d432fd1",
403
- "9d24387c6e8544e2bc4024a03991339f",
404
- "d2a1802cc9a34e30852f8b33869b2f3c",
348
+ "Load Balancers Account Read",
349
+ "Load Balancers Account Write",
350
+ "Load Balancers Write",
351
+ "Load Balancing: Monitors and Pools Read",
352
+ "Load Balancing: Monitors and Pools Write",
405
353
  ],
406
354
  "lb:read": [
407
- "59059f0c977b44f8b1c18e0aaf91c369",
408
- "9d24387c6e8544e2bc4024a03991339f",
409
- "e9a975f628014f1d85b723993116f7d5",
410
- ],
411
- "logpush:read": [
412
- "6a315a56f18441e59ed03352369ae956",
413
- "c4a30cd58c5d42619c86a3c36c441e2d",
414
- ],
415
- "logpush:write": [
416
- "6a315a56f18441e59ed03352369ae956",
417
- "c4a30cd58c5d42619c86a3c36c441e2d",
418
- "96163bd1b0784f62b3e44ed8c2ab1eb6",
419
- "3e0b5820118e47f3922f7c989e673882",
420
- ],
421
- "notification:read": ["ce18edbdcebf465e9d6d1d2fc80ffd42"],
422
- "notification:write": [
423
- "ce18edbdcebf465e9d6d1d2fc80ffd42",
424
- "c3c847c5802d4ce3ba00e3e97b3c8555",
425
- ],
426
- "pages:read": ["e247aedd66bd41cc9193af0213416666"],
427
- "pages:write": [
428
- "e247aedd66bd41cc9193af0213416666",
429
- "8d28297797f24fb8a0c332fe0866ec89",
430
- ],
431
- "pipelines:read": ["14b9cf2f410f4c0c9a16bb10a81c0e0b"],
432
- "pipelines:setup": ["5606e7405dc542949d949d59993d321f"],
433
- "pipelines:write": [
434
- "14b9cf2f410f4c0c9a16bb10a81c0e0b",
435
- "5606e7405dc542949d949d59993d321f",
436
- "e34111af393449539859485aa5ddd5bd",
437
- ],
355
+ "Load Balancers Account Read",
356
+ "Load Balancing: Monitors and Pools Read",
357
+ "Load Balancers Read",
358
+ ],
359
+ "logpush:read": ["Logs Read"],
360
+ "logpush:write": ["Logs Read", "Logs Write"],
361
+ "notification:read": ["Notifications Read"],
362
+ "notification:write": ["Notifications Read", "Notifications Write"],
363
+ "pages:read": ["Pages Read"],
364
+ "pages:write": ["Pages Read", "Pages Write"],
365
+ "pipelines:read": ["Pipelines Read"],
366
+ "pipelines:setup": ["Pipelines Send"],
367
+ "pipelines:write": ["Pipelines Read", "Pipelines Send", "Pipelines Write"],
438
368
  "query_cache:write": [],
439
- "queues:write": [
440
- "84a7755d54c646ca87cd50682a34bf7c",
441
- "366f57075ffc42689627bcf8242a1b6d",
442
- ],
369
+ "queues:write": ["Queues Read", "Queues Write"],
443
370
  "r2_catalog:write": [
444
- "45db74139a62490b9b60eb7c4f34994b",
445
- "d229766a2f7f4d299f20eaa8c9b1fde9",
446
- "f45430d92e2b4a6cb9f94f2594c141b8",
447
- ],
448
- "radar:read": ["dfe525ec7b07472c827d8d009178b2ac"],
449
- "rag:read": ["d7887c7a417e4cf2a69f1d01c1a1dc3b"],
450
- "rag:write": [
451
- "d7887c7a417e4cf2a69f1d01c1a1dc3b",
452
- "7fb8d27511b34d02994d005b520b679f",
453
- "234108c786084936a381bb19b7f4ea65",
454
- ],
455
- "secrets_store:read": ["5e33b7d77788455c9fdf18cbd38ee5a0"],
456
- "secrets_store:write": [
457
- "5e33b7d77788455c9fdf18cbd38ee5a0",
458
- "adc8fa2bc6124928a8b3314dc63a1235",
459
- ],
460
- "sso-connector:read": ["1d80f6f165ea47f2b55d4a393fd697de"],
461
- "sso-connector:write": [
462
- "1d80f6f165ea47f2b55d4a393fd697de",
463
- "901ca5e292584c6aa1b4cdb39248bb07",
464
- ],
371
+ "Workers R2 Data Catalog Read",
372
+ "Workers R2 Data Catalog Write",
373
+ "Workers R2 SQL Read",
374
+ ],
375
+ "radar:read": ["Radar Read"],
376
+ "rag:read": ["Auto Rag Read"],
377
+ "rag:write": ["Auto Rag Read", "Auto Rag Write", "Auto Rag Write Run Engine"],
378
+ "secrets_store:read": ["Secrets Store Read"],
379
+ "secrets_store:write": ["Secrets Store Read", "Secrets Store Write"],
380
+ "sso-connector:read": ["SSO Connector Read"],
381
+ "sso-connector:write": ["SSO Connector Read", "SSO Connector Write"],
465
382
  "ssl_certs:write": [
466
- "a7a233f9604845c787d4c8c39ac09c21",
467
- "db37e5f1cb1a4e1aabaef8deaea43575",
468
- "7b7216b327b04b8fbc8f524e1f9b7531",
469
- "c03055bc037c4ea9afb9a9f104b7b721",
470
- ],
471
- "teams:pii": [], //??
472
- "teams:read": [], //??
473
- "teams:secure_location": [], //??
474
- "teams:write": [], //??
475
- "url_scanner:read": ["5d613a610b294788a29572aaac2f254d"],
476
- "url_scanner:write": [
477
- "5d613a610b294788a29572aaac2f254d",
478
- "2a400bcb29154daab509fe07e3facab0",
479
- ],
480
- "user:read": [], //??
481
- "vectorize:write": [
482
- "1799edaae5db489294430e20d9b519e0",
483
- "64156ba5be47441096c83c7fc17c488b",
484
- ],
383
+ "Account: SSL and Certificates Read",
384
+ "Account: SSL and Certificates Write",
385
+ "SSL and Certificates Read",
386
+ "SSL and Certificates Write",
387
+ ],
388
+ "teams:pii": [],
389
+ "teams:read": [],
390
+ "teams:secure_location": [],
391
+ "teams:write": [],
392
+ "url_scanner:read": ["URL Scanner Read"],
393
+ "url_scanner:write": ["URL Scanner Read", "URL Scanner Write"],
394
+ "user:read": [],
395
+ "vectorize:write": ["Vectorize Read", "Vectorize Write"],
485
396
  "workers:write": [
486
- "2072033d694d415a936eaeb94e6405b8",
487
- "28f4b596e7d643029c524985477ae49a",
488
- "1a71c399035b4950a1bd1466bbe4f420",
489
- "e086da7e2179491d91ee5f35b3ca210a",
490
- ],
491
- "workers_builds:read": ["ad99c5ae555e45c4bef5bdf2678388ba"],
492
- "workers_builds:write": ["2e095cf436e2455fa62c9a9c2e18c478"],
493
- "workers_kv:write": [
494
- "8b47d2786a534c08a1f94ee8f9f599ef",
495
- "f7f0eda5697f475c90846e879bab8666",
496
- ],
497
- "workers_observability:read": ["66c1ed49f4ed46098b75696a6d4ee3c9"],
498
- "workers_observability:write": [
499
- "66c1ed49f4ed46098b75696a6d4ee3c9",
500
- "82c075da3f4647a2a03becd0fe240f8a",
501
- ],
502
- "workers_observability_telemetry:write": ["29c629fb7b5e4c408ca0f7b545724fcc"],
503
- "workers_routes:write": [], //??
504
- "workers_scripts:write": [], //??
505
- "workers_tail:read": ["05880cd1bdc24d8bae0be2136972816b"],
397
+ "Workers Routes Read",
398
+ "Workers Routes Write",
399
+ "Workers Scripts Read",
400
+ "Workers Scripts Write",
401
+ "Workers KV Storage Read",
402
+ "Workers KV Storage Write",
403
+ "Workers R2 Storage Write",
404
+ "Workers R2 Storage Read",
405
+ ],
406
+ "workers_builds:read": ["Workers CI Read"],
407
+ "workers_builds:write": ["Workers CI Write"],
408
+ "workers_kv:write": ["Workers KV Storage Read", "Workers KV Storage Write"],
409
+ "workers_observability:read": ["Workers Observability Read"],
410
+ "workers_observability_telemetry:write": [
411
+ "Workers Observability Telemetry Write",
412
+ ],
413
+ "workers_routes:write": ["Workers Routes Write"],
414
+ "workers_scripts:write": ["Workers Scripts Write"],
415
+ "workers_tail:read": ["Workers Tail Read"],
506
416
  "zone:read": [
507
- "c8fed203ed3043cba015a93ad1616f1f",
508
- "517b21aee92c4d89936c976ba6e4be55",
509
- "211a4c0feb3e43b3a2d41f1443a433e7",
510
- "1b1ea24cf0904d33903f0cc7e54e280f",
511
- "dbc512b354774852af2b5a5f4ba3d470",
512
- ],
513
- offline_access: [],
514
- } as const;
417
+ "Zone Read",
418
+ "Zone Settings Read",
419
+ "Zone Transform Rules Read",
420
+ "Zone Versioning Read",
421
+ "Zone WAF Read",
422
+ ],
423
+ "agw:write": ["AI Gateway Read", "AI Gateway Run", "AI Gateway Write"],
424
+ "connectivity:admin": ["Connectivity Directory Admin"],
425
+ "connectivity:bind": ["Connectivity Directory Bind"],
426
+ "connectivity:read": ["Connectivity Directory Read"],
427
+ "workers:read": [
428
+ "Workers Scripts Read",
429
+ "Workers KV Storage Read",
430
+ "Workers R2 Storage Read",
431
+ "Workers Routes Read",
432
+ ],
433
+ };