@leaflow/sdk 0.196.0 → 0.198.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 (47) hide show
  1. package/dist/billing/v1/generated/functions.d.ts +1 -1
  2. package/dist/billing/v1/generated/functions.js +1 -1
  3. package/dist/billing/v1/generated/models.d.ts +15 -6
  4. package/dist/billing/v1/generated/models.js +5 -5
  5. package/dist/billing/v1/generated/schemas.zod.d.ts +7 -1
  6. package/dist/billing/v1/generated/schemas.zod.js +9 -1
  7. package/dist/billing/v1/generated/validators/billingAccount.zod.js +2 -1
  8. package/dist/billing/v1/generated/validators/billingAccountStatus.zod.d.ts +15 -0
  9. package/dist/billing/v1/generated/validators/billingAccountStatus.zod.js +11 -0
  10. package/dist/billing/v1/generated/validators/listBillingAccountsParams.zod.d.ts +6 -0
  11. package/dist/billing/v1/generated/validators/listBillingAccountsParams.zod.js +3 -0
  12. package/dist/iam/v1/generated/functions.d.ts +46 -103
  13. package/dist/iam/v1/generated/functions.js +29 -114
  14. package/dist/iam/v1/generated/models.d.ts +53 -118
  15. package/dist/iam/v1/generated/models.js +2 -6
  16. package/dist/iam/v1/generated/schemas.zod.d.ts +31 -62
  17. package/dist/iam/v1/generated/schemas.zod.js +35 -53
  18. package/dist/iam/v1/generated/validators/{updatePolicyRequestBody.zod.d.ts → createMemberPermissionRequestBody.zod.d.ts} +9 -11
  19. package/dist/iam/v1/generated/validators/createMemberPermissionRequestBody.zod.js +36 -0
  20. package/dist/iam/v1/generated/validators/grantResource.zod.js +1 -1
  21. package/dist/iam/v1/generated/validators/lengthAwarePageMemberResource.zod.d.ts +12 -0
  22. package/dist/iam/v1/generated/validators/{listProjectInvitationsParams.zod.d.ts → listInvitationsParams.zod.d.ts} +8 -8
  23. package/dist/iam/v1/generated/validators/{listProjectInvitationsParams.zod.js → listInvitationsParams.zod.js} +11 -11
  24. package/dist/iam/v1/generated/validators/{policyListResponseBody.zod.d.ts → memberPermissionListResponseBody.zod.d.ts} +8 -14
  25. package/dist/iam/v1/generated/validators/{catalogListResponseBody.zod.js → memberPermissionListResponseBody.zod.js} +3 -3
  26. package/dist/iam/v1/generated/validators/{policyResource.zod.d.ts → memberPermissionResource.zod.d.ts} +11 -14
  27. package/dist/iam/v1/generated/validators/memberPermissionResource.zod.js +38 -0
  28. package/dist/iam/v1/generated/validators/memberResource.zod.d.ts +12 -0
  29. package/dist/iam/v1/generated/validators/memberResource.zod.js +5 -0
  30. package/dist/iam/v1/generated/validators/ownershipTransferResponseBody.zod.d.ts +24 -0
  31. package/dist/iam/v1/generated/validators/{catalogResource.zod.d.ts → permissionListResponseBody.zod.d.ts} +4 -8
  32. package/dist/iam/v1/generated/validators/{policyListResponseBody.zod.js → permissionListResponseBody.zod.js} +3 -3
  33. package/dist/routes.d.ts +7 -31
  34. package/dist/routes.js +7 -34
  35. package/package.json +1 -1
  36. package/dist/iam/v1/generated/validators/attachPolicyRequestBody.zod.d.ts +0 -33
  37. package/dist/iam/v1/generated/validators/attachPolicyRequestBody.zod.js +0 -43
  38. package/dist/iam/v1/generated/validators/catalogListResponseBody.zod.d.ts +0 -30
  39. package/dist/iam/v1/generated/validators/catalogResource.zod.js +0 -25
  40. package/dist/iam/v1/generated/validators/listPoliciesParams.zod.d.ts +0 -21
  41. package/dist/iam/v1/generated/validators/listPoliciesParams.zod.js +0 -23
  42. package/dist/iam/v1/generated/validators/policyResource.zod.js +0 -33
  43. package/dist/iam/v1/generated/validators/resourceTypeResource.zod.d.ts +0 -20
  44. package/dist/iam/v1/generated/validators/resourceTypeResource.zod.js +0 -20
  45. package/dist/iam/v1/generated/validators/setMemberPermissionsRequestBody.zod.d.ts +0 -20
  46. package/dist/iam/v1/generated/validators/setMemberPermissionsRequestBody.zod.js +0 -21
  47. package/dist/iam/v1/generated/validators/updatePolicyRequestBody.zod.js +0 -39
package/dist/routes.js CHANGED
@@ -3836,7 +3836,7 @@ export const routes = [
3836
3836
  contract: "iam",
3837
3837
  method: "GET",
3838
3838
  path: "/api/v1/invitations",
3839
- operationId: "list-project-invitations",
3839
+ operationId: "list-invitations",
3840
3840
  securityScheme: "ScopedToken",
3841
3841
  upstreamUrl: "https://iam.leaflow.cloud",
3842
3842
  },
@@ -3894,21 +3894,12 @@ export const routes = [
3894
3894
  securityScheme: "ScopedToken",
3895
3895
  upstreamUrl: "https://iam.leaflow.cloud",
3896
3896
  },
3897
- {
3898
- service: "iam",
3899
- contract: "iam",
3900
- method: "PUT",
3901
- path: "/api/v1/members/{userId}/permissions",
3902
- operationId: "set-member-permissions",
3903
- securityScheme: "ScopedToken",
3904
- upstreamUrl: "https://iam.leaflow.cloud",
3905
- },
3906
3897
  {
3907
3898
  service: "iam",
3908
3899
  contract: "iam",
3909
3900
  method: "GET",
3910
- path: "/api/v1/policies",
3911
- operationId: "list-policies",
3901
+ path: "/api/v1/members/{userId}/permissions",
3902
+ operationId: "list-member-permissions",
3912
3903
  securityScheme: "ScopedToken",
3913
3904
  upstreamUrl: "https://iam.leaflow.cloud",
3914
3905
  },
@@ -3916,26 +3907,8 @@ export const routes = [
3916
3907
  service: "iam",
3917
3908
  contract: "iam",
3918
3909
  method: "POST",
3919
- path: "/api/v1/policies",
3920
- operationId: "attach-policy",
3921
- securityScheme: "ScopedToken",
3922
- upstreamUrl: "https://iam.leaflow.cloud",
3923
- },
3924
- {
3925
- service: "iam",
3926
- contract: "iam",
3927
- method: "GET",
3928
- path: "/api/v1/policies/{policyId}",
3929
- operationId: "get-policy",
3930
- securityScheme: "ScopedToken",
3931
- upstreamUrl: "https://iam.leaflow.cloud",
3932
- },
3933
- {
3934
- service: "iam",
3935
- contract: "iam",
3936
- method: "PUT",
3937
- path: "/api/v1/policies/{policyId}",
3938
- operationId: "update-policy",
3910
+ path: "/api/v1/members/{userId}/permissions",
3911
+ operationId: "create-member-permission",
3939
3912
  securityScheme: "ScopedToken",
3940
3913
  upstreamUrl: "https://iam.leaflow.cloud",
3941
3914
  },
@@ -3943,8 +3916,8 @@ export const routes = [
3943
3916
  service: "iam",
3944
3917
  contract: "iam",
3945
3918
  method: "DELETE",
3946
- path: "/api/v1/policies/{policyId}",
3947
- operationId: "detach-policy",
3919
+ path: "/api/v1/members/{userId}/permissions/{permissionId}",
3920
+ operationId: "delete-member-permission",
3948
3921
  securityScheme: "ScopedToken",
3949
3922
  upstreamUrl: "https://iam.leaflow.cloud",
3950
3923
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@leaflow/sdk",
3
- "version": "0.196.0",
3
+ "version": "0.198.0",
4
4
  "description": "Leaflow 平台 API 的 TypeScript SDK",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -1,33 +0,0 @@
1
- /**
2
- * Generated by orval 🍺
3
- * Do not edit manually.
4
- * Leaflow IAM API
5
- * What happens inside a project: members, roles, invitations and the SSH keys the project shares.
6
- *
7
- * Every request carries a scoped token; see the `bearerAuth` security scheme. No path carries a
8
- * `projectId`, and the current project is the one the token states. Tokens are obtained from the
9
- * account API.
10
- *
11
- * `GET /api/v1/membership` returns the roles and permissions the caller holds in the current
12
- * project. It does not state whether a given operation is allowed; each service declares which permission its own operations require.
13
- * OpenAPI spec version: 1.0.0
14
- */
15
- import * as zod from "zod";
16
- export declare const attachPolicyRequestBodyDescriptionMax = 255;
17
- export declare const attachPolicyRequestBodyUserIdMax = 255;
18
- export declare const AttachPolicyRequestBody: zod.ZodObject<{
19
- description: zod.ZodOptional<zod.ZodString>;
20
- effect: zod.ZodEnum<{
21
- allow: "allow";
22
- deny: "deny";
23
- }>;
24
- permissions: zod.ZodOptional<zod.ZodNullable<zod.ZodArray<zod.ZodString>>>;
25
- resources: zod.ZodOptional<zod.ZodNullable<zod.ZodArray<zod.ZodObject<{
26
- id: zod.ZodString;
27
- type: zod.ZodString;
28
- }, zod.z.core.$strict>>>>;
29
- roles: zod.ZodOptional<zod.ZodNullable<zod.ZodArray<zod.ZodString>>>;
30
- user_id: zod.ZodString;
31
- }, zod.z.core.$strict>;
32
- export type AttachPolicyRequestBody = zod.input<typeof AttachPolicyRequestBody>;
33
- export type AttachPolicyRequestBodyOutput = zod.output<typeof AttachPolicyRequestBody>;
@@ -1,43 +0,0 @@
1
- /**
2
- * Generated by orval 🍺
3
- * Do not edit manually.
4
- * Leaflow IAM API
5
- * What happens inside a project: members, roles, invitations and the SSH keys the project shares.
6
- *
7
- * Every request carries a scoped token; see the `bearerAuth` security scheme. No path carries a
8
- * `projectId`, and the current project is the one the token states. Tokens are obtained from the
9
- * account API.
10
- *
11
- * `GET /api/v1/membership` returns the roles and permissions the caller holds in the current
12
- * project. It does not state whether a given operation is allowed; each service declares which permission its own operations require.
13
- * OpenAPI spec version: 1.0.0
14
- */
15
- import * as zod from "zod";
16
- import { ResourceRefResource } from "./resourceRefResource.zod.js";
17
- export const attachPolicyRequestBodyDescriptionMax = 255;
18
- export const attachPolicyRequestBodyUserIdMax = 255;
19
- export const AttachPolicyRequestBody = zod.strictObject({
20
- description: zod
21
- .string()
22
- .max(attachPolicyRequestBodyDescriptionMax)
23
- .optional()
24
- .describe("Why it was granted, written for a reader"),
25
- effect: zod.enum(["allow", "deny"]),
26
- permissions: zod
27
- .array(zod.string())
28
- .nullish()
29
- .describe("Permission names attached directly, which avoids creating a role only one person holds"),
30
- resources: zod
31
- .array(ResourceRefResource)
32
- .nullish()
33
- .describe("The policy holds only on these resources. Leaving it empty makes sense only together with `deny`, since an `allow` covering every resource is the base policy, which already exists"),
34
- roles: zod
35
- .array(zod.string())
36
- .nullish()
37
- .describe("Each must be a role already defined in this project. `OWNER` and `ADMIN` are not accepted, being rules rather than sets of permissions"),
38
- user_id: zod
39
- .string()
40
- .min(1)
41
- .max(attachPolicyRequestBodyUserIdMax)
42
- .describe("Must already be a member of this project"),
43
- });
@@ -1,30 +0,0 @@
1
- /**
2
- * Generated by orval 🍺
3
- * Do not edit manually.
4
- * Leaflow IAM API
5
- * What happens inside a project: members, roles, invitations and the SSH keys the project shares.
6
- *
7
- * Every request carries a scoped token; see the `bearerAuth` security scheme. No path carries a
8
- * `projectId`, and the current project is the one the token states. Tokens are obtained from the
9
- * account API.
10
- *
11
- * `GET /api/v1/membership` returns the roles and permissions the caller holds in the current
12
- * project. It does not state whether a given operation is allowed; each service declares which permission its own operations require.
13
- * OpenAPI spec version: 1.0.0
14
- */
15
- import * as zod from "zod";
16
- export declare const CatalogListResponseBody: zod.ZodObject<{
17
- items: zod.ZodNullable<zod.ZodArray<zod.ZodObject<{
18
- permissions: zod.ZodNullable<zod.ZodArray<zod.ZodObject<{
19
- name: zod.ZodString;
20
- owner_only: zod.ZodBoolean;
21
- resource_type: zod.ZodString;
22
- }, zod.z.core.$strict>>>;
23
- resource_types: zod.ZodNullable<zod.ZodArray<zod.ZodObject<{
24
- name: zod.ZodString;
25
- }, zod.z.core.$strict>>>;
26
- service: zod.ZodString;
27
- }, zod.z.core.$strict>>>;
28
- }, zod.z.core.$strict>;
29
- export type CatalogListResponseBody = zod.input<typeof CatalogListResponseBody>;
30
- export type CatalogListResponseBodyOutput = zod.output<typeof CatalogListResponseBody>;
@@ -1,25 +0,0 @@
1
- /**
2
- * Generated by orval 🍺
3
- * Do not edit manually.
4
- * Leaflow IAM API
5
- * What happens inside a project: members, roles, invitations and the SSH keys the project shares.
6
- *
7
- * Every request carries a scoped token; see the `bearerAuth` security scheme. No path carries a
8
- * `projectId`, and the current project is the one the token states. Tokens are obtained from the
9
- * account API.
10
- *
11
- * `GET /api/v1/membership` returns the roles and permissions the caller holds in the current
12
- * project. It does not state whether a given operation is allowed; each service declares which permission its own operations require.
13
- * OpenAPI spec version: 1.0.0
14
- */
15
- import * as zod from "zod";
16
- import { PermissionResource } from "./permissionResource.zod.js";
17
- import { ResourceTypeResource } from "./resourceTypeResource.zod.js";
18
- export const CatalogResource = zod.strictObject({
19
- permissions: zod.array(PermissionResource).nullable(),
20
- resource_types: zod
21
- .array(ResourceTypeResource)
22
- .nullable()
23
- .describe("The resource types this service declares. A scoped rule can only land on one of them"),
24
- service: zod.string(),
25
- });
@@ -1,21 +0,0 @@
1
- /**
2
- * Generated by orval 🍺
3
- * Do not edit manually.
4
- * Leaflow IAM API
5
- * What happens inside a project: members, roles, invitations and the SSH keys the project shares.
6
- *
7
- * Every request carries a scoped token; see the `bearerAuth` security scheme. No path carries a
8
- * `projectId`, and the current project is the one the token states. Tokens are obtained from the
9
- * account API.
10
- *
11
- * `GET /api/v1/membership` returns the roles and permissions the caller holds in the current
12
- * project. It does not state whether a given operation is allowed; each service declares which permission its own operations require.
13
- * OpenAPI spec version: 1.0.0
14
- */
15
- import * as zod from "zod";
16
- export declare const listPoliciesParamsUserIdMax = 255;
17
- export declare const ListPoliciesParams: zod.ZodObject<{
18
- userId: zod.ZodOptional<zod.ZodString>;
19
- }, zod.z.core.$strict>;
20
- export type ListPoliciesParams = zod.input<typeof ListPoliciesParams>;
21
- export type ListPoliciesParamsOutput = zod.output<typeof ListPoliciesParams>;
@@ -1,23 +0,0 @@
1
- /**
2
- * Generated by orval 🍺
3
- * Do not edit manually.
4
- * Leaflow IAM API
5
- * What happens inside a project: members, roles, invitations and the SSH keys the project shares.
6
- *
7
- * Every request carries a scoped token; see the `bearerAuth` security scheme. No path carries a
8
- * `projectId`, and the current project is the one the token states. Tokens are obtained from the
9
- * account API.
10
- *
11
- * `GET /api/v1/membership` returns the roles and permissions the caller holds in the current
12
- * project. It does not state whether a given operation is allowed; each service declares which permission its own operations require.
13
- * OpenAPI spec version: 1.0.0
14
- */
15
- import * as zod from "zod";
16
- export const listPoliciesParamsUserIdMax = 255;
17
- export const ListPoliciesParams = zod.strictObject({
18
- userId: zod
19
- .string()
20
- .max(listPoliciesParamsUserIdMax)
21
- .optional()
22
- .describe("Restricts the result to one person. Omitting it covers the whole project"),
23
- });
@@ -1,33 +0,0 @@
1
- /**
2
- * Generated by orval 🍺
3
- * Do not edit manually.
4
- * Leaflow IAM API
5
- * What happens inside a project: members, roles, invitations and the SSH keys the project shares.
6
- *
7
- * Every request carries a scoped token; see the `bearerAuth` security scheme. No path carries a
8
- * `projectId`, and the current project is the one the token states. Tokens are obtained from the
9
- * account API.
10
- *
11
- * `GET /api/v1/membership` returns the roles and permissions the caller holds in the current
12
- * project. It does not state whether a given operation is allowed; each service declares which permission its own operations require.
13
- * OpenAPI spec version: 1.0.0
14
- */
15
- import * as zod from "zod";
16
- import { ResourceRefResource } from "./resourceRefResource.zod.js";
17
- export const PolicyResource = zod.strictObject({
18
- base: zod
19
- .boolean()
20
- .describe("The base policy is the one whose effect is `allow` and which covers every resource. Each member holds exactly one, and it carries their ordinary roles. Change it with PUT /members/{userId}/roles and PUT /members/{userId}/permissions"),
21
- created_at: zod.iso.datetime({ offset: true }),
22
- description: zod.string().describe("Why it was granted, written for a reader"),
23
- effect: zod.enum(["allow", "deny"]),
24
- id: zod.uuid(),
25
- permissions: zod
26
- .array(zod.string())
27
- .nullable()
28
- .describe("Permission names attached directly to this person, without passing through a role"),
29
- resources: zod.array(ResourceRefResource).nullable().describe("Empty means the whole project"),
30
- roles: zod.array(zod.string()).nullable().describe("The role codes this policy carries"),
31
- updated_at: zod.iso.datetime({ offset: true }),
32
- user_id: zod.string(),
33
- });
@@ -1,20 +0,0 @@
1
- /**
2
- * Generated by orval 🍺
3
- * Do not edit manually.
4
- * Leaflow IAM API
5
- * What happens inside a project: members, roles, invitations and the SSH keys the project shares.
6
- *
7
- * Every request carries a scoped token; see the `bearerAuth` security scheme. No path carries a
8
- * `projectId`, and the current project is the one the token states. Tokens are obtained from the
9
- * account API.
10
- *
11
- * `GET /api/v1/membership` returns the roles and permissions the caller holds in the current
12
- * project. It does not state whether a given operation is allowed; each service declares which permission its own operations require.
13
- * OpenAPI spec version: 1.0.0
14
- */
15
- import * as zod from "zod";
16
- export declare const ResourceTypeResource: zod.ZodObject<{
17
- name: zod.ZodString;
18
- }, zod.z.core.$strict>;
19
- export type ResourceTypeResource = zod.input<typeof ResourceTypeResource>;
20
- export type ResourceTypeResourceOutput = zod.output<typeof ResourceTypeResource>;
@@ -1,20 +0,0 @@
1
- /**
2
- * Generated by orval 🍺
3
- * Do not edit manually.
4
- * Leaflow IAM API
5
- * What happens inside a project: members, roles, invitations and the SSH keys the project shares.
6
- *
7
- * Every request carries a scoped token; see the `bearerAuth` security scheme. No path carries a
8
- * `projectId`, and the current project is the one the token states. Tokens are obtained from the
9
- * account API.
10
- *
11
- * `GET /api/v1/membership` returns the roles and permissions the caller holds in the current
12
- * project. It does not state whether a given operation is allowed; each service declares which permission its own operations require.
13
- * OpenAPI spec version: 1.0.0
14
- */
15
- import * as zod from "zod";
16
- export const ResourceTypeResource = zod.strictObject({
17
- name: zod
18
- .string()
19
- .describe("The code of the resource type, such as dns:zone. There is no display name here either; what it reads as is decided by the layer rendering it"),
20
- });
@@ -1,20 +0,0 @@
1
- /**
2
- * Generated by orval 🍺
3
- * Do not edit manually.
4
- * Leaflow IAM API
5
- * What happens inside a project: members, roles, invitations and the SSH keys the project shares.
6
- *
7
- * Every request carries a scoped token; see the `bearerAuth` security scheme. No path carries a
8
- * `projectId`, and the current project is the one the token states. Tokens are obtained from the
9
- * account API.
10
- *
11
- * `GET /api/v1/membership` returns the roles and permissions the caller holds in the current
12
- * project. It does not state whether a given operation is allowed; each service declares which permission its own operations require.
13
- * OpenAPI spec version: 1.0.0
14
- */
15
- import * as zod from "zod";
16
- export declare const SetMemberPermissionsRequestBody: zod.ZodObject<{
17
- permissions: zod.ZodNullable<zod.ZodArray<zod.ZodString>>;
18
- }, zod.z.core.$strict>;
19
- export type SetMemberPermissionsRequestBody = zod.input<typeof SetMemberPermissionsRequestBody>;
20
- export type SetMemberPermissionsRequestBodyOutput = zod.output<typeof SetMemberPermissionsRequestBody>;
@@ -1,21 +0,0 @@
1
- /**
2
- * Generated by orval 🍺
3
- * Do not edit manually.
4
- * Leaflow IAM API
5
- * What happens inside a project: members, roles, invitations and the SSH keys the project shares.
6
- *
7
- * Every request carries a scoped token; see the `bearerAuth` security scheme. No path carries a
8
- * `projectId`, and the current project is the one the token states. Tokens are obtained from the
9
- * account API.
10
- *
11
- * `GET /api/v1/membership` returns the roles and permissions the caller holds in the current
12
- * project. It does not state whether a given operation is allowed; each service declares which permission its own operations require.
13
- * OpenAPI spec version: 1.0.0
14
- */
15
- import * as zod from "zod";
16
- export const SetMemberPermissionsRequestBody = zod.strictObject({
17
- permissions: zod
18
- .array(zod.string())
19
- .nullable()
20
- .describe("**Every** permission name to be attached directly to this person, replaced in full. The permissions a role grants are neither listed here nor touched by this write"),
21
- });
@@ -1,39 +0,0 @@
1
- /**
2
- * Generated by orval 🍺
3
- * Do not edit manually.
4
- * Leaflow IAM API
5
- * What happens inside a project: members, roles, invitations and the SSH keys the project shares.
6
- *
7
- * Every request carries a scoped token; see the `bearerAuth` security scheme. No path carries a
8
- * `projectId`, and the current project is the one the token states. Tokens are obtained from the
9
- * account API.
10
- *
11
- * `GET /api/v1/membership` returns the roles and permissions the caller holds in the current
12
- * project. It does not state whether a given operation is allowed; each service declares which permission its own operations require.
13
- * OpenAPI spec version: 1.0.0
14
- */
15
- import * as zod from "zod";
16
- import { ResourceRefResource } from "./resourceRefResource.zod.js";
17
- export const updatePolicyRequestBodyDescriptionMax = 255;
18
- export const UpdatePolicyRequestBody = zod.strictObject({
19
- description: zod
20
- .string()
21
- .max(updatePolicyRequestBodyDescriptionMax)
22
- .optional()
23
- .describe("Why it was granted, written for a reader. It is replaced together with the change, so that what remains does not explain an earlier version"),
24
- effect: zod
25
- .enum(["allow", "deny"])
26
- .describe("Must match the current effect of the policy. The effect itself cannot be changed; delete the policy and create another instead. It is still required in the request because the write replaces the policy in full, and omitting it would let a caller believe an effect had been changed while the field was ignored. A mismatch answers PROJECT_POLICY_EFFECT_IMMUTABLE"),
27
- permissions: zod
28
- .array(zod.string())
29
- .nullish()
30
- .describe("Permission names attached directly, replaced in full. Anything not listed is withdrawn rather than kept"),
31
- resources: zod
32
- .array(ResourceRefResource)
33
- .nullish()
34
- .describe("The resource scope of this policy, replaced in full. What the scope contains can change; whether the policy has one cannot. A base policy cannot take a scope, and a scoped policy cannot have its scope cleared"),
35
- roles: zod
36
- .array(zod.string())
37
- .nullish()
38
- .describe("Each must be a role already defined in this project, replaced in full. As when attaching, `OWNER` and `ADMIN` are not accepted"),
39
- });