@selvajs/platform 0.16.1-beta.2 → 0.17.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 (127) hide show
  1. package/README.md +25 -28
  2. package/dist/access/rules.d.ts +20 -26
  3. package/dist/access/rules.d.ts.map +1 -1
  4. package/dist/access/rules.js +16 -16
  5. package/dist/access/rules.js.map +1 -1
  6. package/dist/auth/interface.d.ts +99 -116
  7. package/dist/auth/interface.d.ts.map +1 -1
  8. package/dist/auth/types.d.ts +1 -4
  9. package/dist/auth/types.d.ts.map +1 -1
  10. package/dist/bindings/interface.d.ts +19 -32
  11. package/dist/bindings/interface.d.ts.map +1 -1
  12. package/dist/bindings/interface.js +6 -12
  13. package/dist/bindings/interface.js.map +1 -1
  14. package/dist/computeServer/interface.d.ts +34 -41
  15. package/dist/computeServer/interface.d.ts.map +1 -1
  16. package/dist/computeServer/secrets.d.ts +16 -20
  17. package/dist/computeServer/secrets.d.ts.map +1 -1
  18. package/dist/computeServer/secrets.js +11 -12
  19. package/dist/computeServer/secrets.js.map +1 -1
  20. package/dist/computeServer/types.d.ts +15 -17
  21. package/dist/computeServer/types.d.ts.map +1 -1
  22. package/dist/computeServer/types.js.map +1 -1
  23. package/dist/computeServer/utils.d.ts +8 -14
  24. package/dist/computeServer/utils.d.ts.map +1 -1
  25. package/dist/computeServer/utils.js +8 -16
  26. package/dist/computeServer/utils.js.map +1 -1
  27. package/dist/config.d.ts +16 -39
  28. package/dist/config.d.ts.map +1 -1
  29. package/dist/config.js +1 -2
  30. package/dist/config.js.map +1 -1
  31. package/dist/context.d.ts +12 -19
  32. package/dist/context.d.ts.map +1 -1
  33. package/dist/context.js +6 -10
  34. package/dist/context.js.map +1 -1
  35. package/dist/data/interface.d.ts +32 -47
  36. package/dist/data/interface.d.ts.map +1 -1
  37. package/dist/data/interface.js +7 -10
  38. package/dist/data/interface.js.map +1 -1
  39. package/dist/definitions/interface.d.ts +24 -31
  40. package/dist/definitions/interface.d.ts.map +1 -1
  41. package/dist/definitions/schemas.d.ts.map +1 -1
  42. package/dist/definitions/schemas.js +6 -9
  43. package/dist/definitions/schemas.js.map +1 -1
  44. package/dist/definitions/types.d.ts +26 -42
  45. package/dist/definitions/types.d.ts.map +1 -1
  46. package/dist/definitions/types.js +0 -1
  47. package/dist/definitions/types.js.map +1 -1
  48. package/dist/errors/interface.d.ts +4 -8
  49. package/dist/errors/interface.d.ts.map +1 -1
  50. package/dist/errors/interface.js.map +1 -1
  51. package/dist/errors.d.ts +2 -5
  52. package/dist/errors.d.ts.map +1 -1
  53. package/dist/errors.js +2 -5
  54. package/dist/errors.js.map +1 -1
  55. package/dist/events/audit.d.ts +13 -26
  56. package/dist/events/audit.d.ts.map +1 -1
  57. package/dist/events/interface.d.ts +17 -33
  58. package/dist/events/interface.d.ts.map +1 -1
  59. package/dist/events/interface.js +7 -22
  60. package/dist/events/interface.js.map +1 -1
  61. package/dist/index.d.ts.map +1 -1
  62. package/dist/index.js.map +1 -1
  63. package/dist/invites/interface.d.ts +3 -9
  64. package/dist/invites/interface.d.ts.map +1 -1
  65. package/dist/invites/types.d.ts +4 -11
  66. package/dist/invites/types.d.ts.map +1 -1
  67. package/dist/logging/interface.d.ts +19 -33
  68. package/dist/logging/interface.d.ts.map +1 -1
  69. package/dist/logging/interface.js +9 -17
  70. package/dist/logging/interface.js.map +1 -1
  71. package/dist/metrics/interface.d.ts +16 -31
  72. package/dist/metrics/interface.d.ts.map +1 -1
  73. package/dist/metrics/interface.js +1 -5
  74. package/dist/metrics/interface.js.map +1 -1
  75. package/dist/organizations/interface.d.ts +14 -23
  76. package/dist/organizations/interface.d.ts.map +1 -1
  77. package/dist/organizations/paths.d.ts +9 -12
  78. package/dist/organizations/paths.d.ts.map +1 -1
  79. package/dist/organizations/paths.js +12 -16
  80. package/dist/organizations/paths.js.map +1 -1
  81. package/dist/organizations/schemas.d.ts +10 -19
  82. package/dist/organizations/schemas.d.ts.map +1 -1
  83. package/dist/organizations/schemas.js +10 -19
  84. package/dist/organizations/schemas.js.map +1 -1
  85. package/dist/organizations/types.d.ts +3 -4
  86. package/dist/organizations/types.d.ts.map +1 -1
  87. package/dist/pagination.d.ts +13 -21
  88. package/dist/pagination.d.ts.map +1 -1
  89. package/dist/pagination.js.map +1 -1
  90. package/dist/permissions/interface.d.ts +12 -21
  91. package/dist/permissions/interface.d.ts.map +1 -1
  92. package/dist/permissions/types.d.ts +5 -5
  93. package/dist/permissions/types.js +5 -5
  94. package/dist/platformProjects/interface.d.ts +7 -14
  95. package/dist/platformProjects/interface.d.ts.map +1 -1
  96. package/dist/platformProjects/types.d.ts +1 -4
  97. package/dist/platformProjects/types.d.ts.map +1 -1
  98. package/dist/projects/interface.d.ts +12 -17
  99. package/dist/projects/interface.d.ts.map +1 -1
  100. package/dist/shareLinks/interface.d.ts +5 -8
  101. package/dist/shareLinks/interface.d.ts.map +1 -1
  102. package/dist/shareLinks/schemas.d.ts.map +1 -1
  103. package/dist/shareLinks/schemas.js +1 -5
  104. package/dist/shareLinks/schemas.js.map +1 -1
  105. package/dist/shareLinks/types.d.ts +5 -6
  106. package/dist/shareLinks/types.d.ts.map +1 -1
  107. package/dist/shareLinks/types.js.map +1 -1
  108. package/dist/solveCache/interface.d.ts +32 -46
  109. package/dist/solveCache/interface.d.ts.map +1 -1
  110. package/dist/solveCache/interface.js.map +1 -1
  111. package/dist/storage/assetClasses.d.ts +16 -24
  112. package/dist/storage/assetClasses.d.ts.map +1 -1
  113. package/dist/storage/assetClasses.js +21 -28
  114. package/dist/storage/assetClasses.js.map +1 -1
  115. package/dist/storage/cacheBust.d.ts +12 -14
  116. package/dist/storage/cacheBust.d.ts.map +1 -1
  117. package/dist/storage/cacheBust.js +12 -14
  118. package/dist/storage/cacheBust.js.map +1 -1
  119. package/dist/storage/image.d.ts +9 -13
  120. package/dist/storage/image.d.ts.map +1 -1
  121. package/dist/storage/image.js +9 -13
  122. package/dist/storage/image.js.map +1 -1
  123. package/dist/userProfile/interface.d.ts +1 -1
  124. package/dist/userProfile/types.d.ts +1 -5
  125. package/dist/userProfile/types.d.ts.map +1 -1
  126. package/dist/userProfile/types.js.map +1 -1
  127. package/package.json +4 -4
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @selvajs/platform
2
2
 
3
- Pure TypeScript interfaces that define Selva's contract with its backends. No runtime dependencies on a specific database, storage, or auth service every concrete adapter (local filesystem, Supabase, Azure, ...) lives in its own package and implements these interfaces.
3
+ Pure TypeScript interfaces defining Selva's contract with its backends no runtime dependency on a specific database, storage, or auth service. Concrete adapters (local filesystem, Supabase, Azure, ...) live in their own packages and implement these interfaces.
4
4
 
5
5
  This README is the contract. Read it before writing an adapter.
6
6
 
@@ -8,20 +8,21 @@ This README is the contract. Read it before writing an adapter.
8
8
 
9
9
  ## Interfaces at a glance
10
10
 
11
- | Interface | Purpose | Scoped by `RequestContext`? |
12
- | -------------------------- | --------------------------------------------------------------------------------- | -------------------------------------------------------------------- |
13
- | `IAuthProvider` | Verify tokens, manage users, issue sessions. Optional `passwordAuth?` capability. | No — the auth provider produces the identity that fills the context. |
14
- | `IPlatformPermissionStore` | Per-user platform permissions; owns the sole-`instance_admin` invariant. | Yes — every method. |
15
- | `IUserProfileStore` | Per-user profile (display name, starred definitions, recent runs). | Yes — adapters scope by `ctx.userId`. |
16
- | `IOrgStore` | Orgs and org memberships. | Yes — every method. |
17
- | `IProjectStore` | Projects and project memberships. | Yes — every method. |
18
- | `IDefinitionStore` | Definition metadata records + version history. | Yes — every method. |
19
- | `IShareLinkStore` | Per-definition anonymous-access tokens. | Yes — every method. |
20
- | `IInviteStore` | Pending org-membership invitations. | Yes — every method. |
21
- | `IComputeServerStore` | Global + per-org compute-server config. | Nonot tenant-scoped. |
22
- | `IStorageProvider` | Path-based blob storage. Authorization is the caller's responsibility. | No — callers pass already-authorized paths. |
23
-
24
- `IDataProvider` composes every store: `{ orgs, projects, definitions, computeServer, invites, shareLinks, userProfile, permissions }`. An adapter typically implements one class per store and aggregates them.
11
+ | Interface | Purpose | Scoped by `RequestContext`? |
12
+ | ---------------------------- | --------------------------------------------------------------------------------- | -------------------------------------------------------------------- |
13
+ | `IAuthProvider` | Verify tokens, manage users, issue sessions. Optional `passwordAuth?` capability. | No — the auth provider produces the identity that fills the context. |
14
+ | `IPlatformPermissionStore` | Per-user platform permissions; owns the sole-`instance_admin` invariant. | Yes — every method. |
15
+ | `IUserProfileStore` | Per-user profile (display name, starred definitions, recent runs). | Yes — adapters scope by `ctx.userId`. |
16
+ | `IOrgStore` | Orgs and org memberships. | Yes — every method. |
17
+ | `IProjectStore` | Projects and project memberships. | Yes — every method. |
18
+ | `IPlatformProjectGrantStore` | Instance-admin-managed grants onto `platform`-visibility projects. | Yes — every method. |
19
+ | `IDefinitionStore` | Definition metadata records + version history. | Yes — every method. |
20
+ | `IShareLinkStore` | Per-definition anonymous-access tokens. | Yes — every method. |
21
+ | `IInviteStore` | Pending org-membership invitations. | Yesevery method. |
22
+ | `IComputeServerStore` | Global + per-org compute-server config. | No — not tenant-scoped. |
23
+ | `IStorageProvider` | Path-based blob storage. Authorization is the caller's responsibility. | No — callers pass already-authorized paths. |
24
+
25
+ `IDataProvider` composes every store, plus optional `auditQuery` / `events` hooks and lifecycle methods `ensureUser` and `onUserDeleted`. An adapter typically implements one class per store and aggregates them.
25
26
 
26
27
  ---
27
28
 
@@ -38,15 +39,15 @@ This README is the contract. Read it before writing an adapter.
38
39
 
39
40
  ## Transaction ordering rules
40
41
 
41
- Providers are two-phase: a metadata store (`IDataProvider`) and a blob store (`IStorageProvider`). They have no shared transaction. The consumer's orchestration layer (`DefinitionService` in `@selvajs/selva`) composes them with fixed ordering so partial failure is recoverable.
42
+ Providers are two-phase: a metadata store (`IDataProvider`) and a blob store (`IStorageProvider`) with no shared transaction. `DefinitionService` (`@selvajs/server/definitions`) composes them with fixed ordering so partial failure is recoverable.
42
43
 
43
- **Create — metadata-first with `pending` → `ready`:**
44
+ **Create — metadata-first, `pending` → `draft`:**
44
45
 
45
46
  1. Write the record with `status: 'pending'`.
46
47
  2. Upload the blob.
47
- 3. Flip `status` to `'ready'`.
48
+ 3. `attachInitialVersion` flips `status` to `'draft'`.
48
49
 
49
- List queries filter `'pending'` by default (`ListOptions.includePending` opts in). If step 2 fails, the record stays `'pending'` and is invisible to consumers.
50
+ List queries filter `'pending'` and `'archived'` by default (`DefinitionListOptions.includePending` / `includeArchived` opt in). If step 2 fails, the record stays `'pending'` and is invisible to consumers.
50
51
 
51
52
  **Delete — blob-first:**
52
53
 
@@ -55,10 +56,6 @@ List queries filter `'pending'` by default (`ListOptions.includePending` opts in
55
56
 
56
57
  If step 2 fails, a retry re-deletes blobs (no-op) and succeeds.
57
58
 
58
- **Update-file — best-effort, retry-safe:**
59
-
60
- Archive current → append history → write new → prune history. These are four separate writes, so a crash can leave the sequence half-done. That is survivable because re-running the same update from the start lands on the same end state — each step either has already happened or still needs to, and repeating one is harmless.
61
-
62
59
  ---
63
60
 
64
61
  ## A minimal adapter
@@ -69,19 +66,19 @@ import type {
69
66
  DefinitionRecord,
70
67
  DefinitionRecordPatch,
71
68
  RequestContext,
72
- ListOptions,
69
+ DefinitionListOptions,
73
70
  Page
74
71
  } from '@selvajs/platform';
75
72
 
76
73
  export class MyDefinitionStore implements IDefinitionStore {
77
- async list(ctx: RequestContext, opts?: ListOptions): Promise<Page<DefinitionRecord>> {
74
+ async list(ctx: RequestContext, opts?: DefinitionListOptions): Promise<Page<DefinitionRecord>> {
78
75
  // Filter by ctx.actingOrgId; exclude status='pending' unless opts.includePending.
79
76
  }
80
77
  // ... etc
81
78
  }
82
79
  ```
83
80
 
84
- Wire it into a `SelvaConfig` via `defineConfig({ auth, data, storage })`. `data` is an `IDataProvider` that composes every store (orgs, projects, definitions, invites, share-links, compute server, user profile, platform permissions).
81
+ Wire it into a `SelvaConfig` via `defineConfig({ auth, data, storage })`. `data` is an `IDataProvider` composing every store.
85
82
 
86
83
  ---
87
84
 
@@ -99,7 +96,7 @@ runDefinitionStoreConformance({
99
96
  });
100
97
  ```
101
98
 
102
- The suites cover `ctx` scoping, `pending` filtering, `includePending` opt-in, history pruning, and `ProviderError` shapes. They do not cover performance or concurrency.
99
+ The suites cover `ctx` scoping, `pending` filtering, `includePending` opt-in, and `ProviderError` shapes. They do not cover performance or concurrency.
103
100
 
104
101
  ---
105
102
 
@@ -111,7 +108,7 @@ Throw `ProviderError` for user-facing failures (`new ProviderError('...', 404)`)
111
108
 
112
109
  ## Data privacy
113
110
 
114
- User identity, credentials, and personal data are owned by the auth provider. Selva stores session tokens that carry no information themselves, plus user IDs and authorization metadata. What a deployment holds and who is responsible for it: [Providers](https://github.com/VektorNode/selva/blob/main/docs/self-hosting/providers/overview.md) and [Security & Limits](https://github.com/VektorNode/selva/blob/main/docs/self-hosting/concepts/security-and-limits.md).
111
+ Identity and credentials belong to whichever `IAuthProvider` is configured — for Supabase that's a separate service; for the local provider, Selva itself is the auth provider and holds credentials on disk. This package's own stores hold only opaque session data, user IDs, and authorization metadata. Details: [Providers](https://github.com/VektorNode/selva/blob/main/docs/self-hosting/providers/overview.md) and [Security & Limits](https://github.com/VektorNode/selva/blob/main/docs/self-hosting/concepts/security-and-limits.md).
115
112
 
116
113
  ---
117
114
 
@@ -22,30 +22,27 @@ export interface ProjectAccessInput {
22
22
  * admins — so the feature can be hidden silently without deleting data.
23
23
  */
24
24
  enablePlatformProjects: boolean;
25
- /**
26
- * Grants for `platform`-visibility projects. Pass an empty array for
27
- * non-platform projects — the rule only consults this for `platform`.
28
- */
25
+ /** Grants for `platform`-visibility projects; empty for non-platform ones. */
29
26
  platformGrants: readonly PlatformProjectGrant[];
30
- /** `ctx.actingOrgId` — used to match org grants on platform projects. */
27
+ /** `ctx.actingOrgId` — matches org grants on platform projects. */
31
28
  actingOrgId: string | null;
32
- /** `ctx.userId` — used to match user grants on platform projects. */
29
+ /** `ctx.userId` — matches user grants on platform projects. */
33
30
  userId: string;
34
31
  }
35
32
  /**
36
- * Authenticated-user view rule. Anonymous access is delivered via share-link
37
- * tokens — the route resolves a valid token before this rule runs.
33
+ * Authenticated-user view rule. Anonymous access goes through share-link
34
+ * tokens instead — the route resolves a valid token before this runs.
38
35
  *
39
- * For `platform` projects: `instance_admin` always passes; otherwise any
40
- * grant (view-only or canSolve) satisfies view access.
36
+ * Platform projects: `instance_admin` always passes; otherwise any grant
37
+ * (view-only or canSolve) satisfies view access.
41
38
  */
42
39
  export declare function canView(input: ProjectAccessInput): boolean;
43
40
  /**
44
- * For non-platform projects: same as `canView` today — kept distinct for
45
- * future cost gating.
41
+ * Non-platform projects: same as `canView` — kept as a separate function so
42
+ * cost gating can diverge from view access later.
46
43
  *
47
- * For `platform` projects: `instance_admin` always passes; a view-only grant
48
- * satisfies `canView` but NOT `canSolve` — the grant must have `canSolve=true`.
44
+ * Platform projects: `instance_admin` always passes; a view-only grant
45
+ * satisfies `canView` but not `canSolve` — the grant needs `canSolve: true`.
49
46
  */
50
47
  export declare function canSolve(input: ProjectAccessInput): boolean;
51
48
  /**
@@ -92,11 +89,11 @@ export interface ReclaimAccessInput {
92
89
  actingOrgId: string | null;
93
90
  }
94
91
  /**
95
- * Org leadership escape hatch. Reclaim adds the actor as co-owner; it does
96
- * NOT demote the existing owner. Tenancy must match.
92
+ * Org leadership escape hatch: adds the actor as co-owner without demoting
93
+ * the existing owner. Tenancy must match.
97
94
  *
98
- * Platform projects cannot be reclaimed — `instance_admin` always has
99
- * management access to them without needing the Reclaim mechanism.
95
+ * Platform projects can't be reclaimed — `instance_admin` already has
96
+ * management access to them.
100
97
  */
101
98
  export declare function canReclaim(input: ReclaimAccessInput): boolean;
102
99
  export interface CreateProjectAccessInput {
@@ -106,22 +103,19 @@ export interface CreateProjectAccessInput {
106
103
  targetOrgId: string;
107
104
  }
108
105
  /**
109
- * Owner/admin can always create. A `member` needs `manage_projects` org
106
+ * Owner/admin can always create; a `member` needs `manage_projects` org
110
107
  * permission. Tenancy is enforced.
111
108
  *
112
- * Platform projects (`visibility='platform'`) are created via the admin API
113
- * and gated on `instance_admin` — this rule is not consulted for them.
109
+ * Platform projects (`visibility: 'platform'`) go through the admin API,
110
+ * gated on `instance_admin` — this rule isn't consulted for them.
114
111
  */
115
112
  export declare function canCreateProject(input: CreateProjectAccessInput): boolean;
116
113
  /**
117
- * Pre-flight check for project-owner removal. Pure function over already-
118
- * loaded membership rows so route handlers can call it after `canManage`.
114
+ * Pre-flight check for project-owner removal, run after `canManage`.
119
115
  *
120
116
  * - `ok` — proceed
121
- * - `sole_owner` — last owner; route surfaces 409 + suggests reclaim
117
+ * - `sole_owner` — last owner; route surfaces 409 and suggests reclaim
122
118
  * - `needs_confirm` — owner-on-owner removal without `?confirm=true`
123
- *
124
- * Non-owner targets always return `ok`.
125
119
  */
126
120
  export type OwnerRemovalCheck = 'ok' | 'sole_owner' | 'needs_confirm';
127
121
  export interface OwnerRemovalInput {
@@ -1 +1 @@
1
- {"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../src/access/rules.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../src/access/rules.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@
3
3
  * adapters. Mutating store methods MUST re-enforce the same predicate
4
4
  * independently (RLS in SQL, code in local/JSON).
5
5
  *
6
- * `instance_admin` bypass is NOT baked into rule bodies — wrap calls with
6
+ * `instance_admin` bypass is not baked into rule bodies — wrap calls with
7
7
  * `withAdminBypass` at the call site.
8
8
  */
9
9
  function isInstanceAdmin(platformPermissions) {
@@ -15,11 +15,11 @@ export function withAdminBypass(platformPermissions, rule) {
15
15
  return rule();
16
16
  }
17
17
  /**
18
- * Authenticated-user view rule. Anonymous access is delivered via share-link
19
- * tokens — the route resolves a valid token before this rule runs.
18
+ * Authenticated-user view rule. Anonymous access goes through share-link
19
+ * tokens instead — the route resolves a valid token before this runs.
20
20
  *
21
- * For `platform` projects: `instance_admin` always passes; otherwise any
22
- * grant (view-only or canSolve) satisfies view access.
21
+ * Platform projects: `instance_admin` always passes; otherwise any grant
22
+ * (view-only or canSolve) satisfies view access.
23
23
  */
24
24
  export function canView(input) {
25
25
  const { project, member, orgMember, allowCrossOrgPublic, enablePlatformProjects, platformPermissions, platformGrants, actingOrgId, userId } = input;
@@ -42,11 +42,11 @@ export function canView(input) {
42
42
  return false;
43
43
  }
44
44
  /**
45
- * For non-platform projects: same as `canView` today — kept distinct for
46
- * future cost gating.
45
+ * Non-platform projects: same as `canView` — kept as a separate function so
46
+ * cost gating can diverge from view access later.
47
47
  *
48
- * For `platform` projects: `instance_admin` always passes; a view-only grant
49
- * satisfies `canView` but NOT `canSolve` — the grant must have `canSolve=true`.
48
+ * Platform projects: `instance_admin` always passes; a view-only grant
49
+ * satisfies `canView` but not `canSolve` — the grant needs `canSolve: true`.
50
50
  */
51
51
  export function canSolve(input) {
52
52
  const { project, enablePlatformProjects, platformPermissions, platformGrants, actingOrgId, userId } = input;
@@ -124,11 +124,11 @@ export function canEditDefinition(input) {
124
124
  return false;
125
125
  }
126
126
  /**
127
- * Org leadership escape hatch. Reclaim adds the actor as co-owner; it does
128
- * NOT demote the existing owner. Tenancy must match.
127
+ * Org leadership escape hatch: adds the actor as co-owner without demoting
128
+ * the existing owner. Tenancy must match.
129
129
  *
130
- * Platform projects cannot be reclaimed — `instance_admin` always has
131
- * management access to them without needing the Reclaim mechanism.
130
+ * Platform projects can't be reclaimed — `instance_admin` already has
131
+ * management access to them.
132
132
  */
133
133
  export function canReclaim(input) {
134
134
  const { project, orgMember, actingOrgId } = input;
@@ -142,11 +142,11 @@ export function canReclaim(input) {
142
142
  return role === 'owner' || role === 'admin';
143
143
  }
144
144
  /**
145
- * Owner/admin can always create. A `member` needs `manage_projects` org
145
+ * Owner/admin can always create; a `member` needs `manage_projects` org
146
146
  * permission. Tenancy is enforced.
147
147
  *
148
- * Platform projects (`visibility='platform'`) are created via the admin API
149
- * and gated on `instance_admin` — this rule is not consulted for them.
148
+ * Platform projects (`visibility: 'platform'`) go through the admin API,
149
+ * gated on `instance_admin` — this rule isn't consulted for them.
150
150
  */
151
151
  export function canCreateProject(input) {
152
152
  const { orgMember, orgPermissions, actingOrgId, targetOrgId } = input;
@@ -1 +1 @@
1
- {"version":3,"file":"rules.js","sourceRoot":"","sources":["../../src/access/rules.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rules.js","sourceRoot":"","sources":["../../src/access/rules.ts"],"names":[],"mappings":"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"}