@pipeline-builder/api-core 5.2.10 → 5.2.12

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/lib/helpers/org-hierarchy-http.d.ts +3 -2
  2. package/lib/helpers/org-hierarchy-http.js +11 -5
  3. package/lib/middleware/index.d.ts +1 -1
  4. package/lib/middleware/index.js +2 -2
  5. package/lib/middleware/step-up.d.ts +4 -3
  6. package/lib/middleware/step-up.js +1 -1
  7. package/lib/services/index.d.ts +2 -2
  8. package/lib/services/index.js +2 -2
  9. package/lib/services/quota.d.ts +1 -2
  10. package/lib/services/quota.js +1 -1
  11. package/lib/services/version-vuln-policy.d.ts +1 -3
  12. package/lib/services/version-vuln-policy.js +2 -3
  13. package/lib/types/common.d.ts +13 -22
  14. package/lib/types/common.js +44 -5
  15. package/lib/types/ecosystem-notifications.d.ts +218 -26
  16. package/lib/types/ecosystem-notifications.js +26 -10
  17. package/lib/types/ecosystem.d.ts +1 -0
  18. package/lib/types/ecosystem.js +33 -23
  19. package/lib/types/error-codes.d.ts +41 -0
  20. package/lib/types/error-codes.js +62 -1
  21. package/lib/types/feature-flags.d.ts +11 -4
  22. package/lib/types/feature-flags.js +51 -11
  23. package/lib/types/index.d.ts +1 -1
  24. package/lib/types/index.js +2 -2
  25. package/lib/types/permissions.d.ts +353 -22
  26. package/lib/types/permissions.js +263 -125
  27. package/lib/types/pipeline.d.ts +2 -0
  28. package/lib/types/pipeline.js +3 -1
  29. package/lib/types/plugin-catalog.d.ts +68 -0
  30. package/lib/types/plugin-catalog.js +82 -1
  31. package/lib/types/quota-tiers.d.ts +6 -24
  32. package/lib/types/quota-tiers.js +6 -28
  33. package/lib/types/remote-audit-actions.d.ts +1 -1
  34. package/lib/types/remote-audit-actions.js +22 -1
  35. package/lib/types/tier-limits.d.ts +19 -0
  36. package/lib/types/tier-limits.js +27 -1
  37. package/lib/types/usage-projection.d.ts +0 -16
  38. package/lib/types/usage-projection.js +1 -20
  39. package/lib/types/wire-vocabulary.d.ts +81 -2
  40. package/lib/types/wire-vocabulary.js +89 -3
  41. package/lib/validation/index.d.ts +1 -1
  42. package/lib/validation/index.js +2 -2
  43. package/lib/validation/pipeline-schemas.d.ts +22 -0
  44. package/lib/validation/pipeline-schemas.js +19 -1
  45. package/lib/validation/plugin-spec-schema.d.ts +45 -2
  46. package/lib/validation/plugin-spec-schema.js +85 -7
  47. package/package.json +8 -1
@@ -1,4 +1,4 @@
1
- import type { OrgRole } from './common.js';
1
+ import type { OrgRole } from './wire-vocabulary.js';
2
2
  /**
3
3
  * Canonical fine-grained permission identifiers, in `resource:action` form.
4
4
  *
@@ -11,8 +11,12 @@ import type { OrgRole } from './common.js';
11
11
  * quota override, user admin, impersonation, platform settings) stay behind the
12
12
  * global `isSuperAdmin` flag, not a per-org permission; and `requireStepUp`
13
13
  * (MFA) / `requireFeature` (plan entitlements) remain orthogonal gates.
14
+ *
15
+ * The ids are the keys of {@link PERMISSION_DEFS} (below, beside their picker
16
+ * label, description and category), so the union, {@link ALL_PERMISSIONS} and
17
+ * {@link PERMISSION_CATALOG} cannot drift: adding a permission is one entry.
14
18
  */
15
- export type Permission = 'pipelines:read' | 'pipelines:write' | 'pipelines:publish' | 'pipeline_registry:write' | 'templates:read' | 'templates:write' | 'templates:publish' | 'plugins:read' | 'plugins:write' | 'plugins:publish' | 'plugins:install' | 'plugin_installs:manage' | 'publishers:manage' | 'plugins:moderate' | 'publishers:verify' | 'platform:read' | 'orgs:read' | 'billing:operate' | 'observability_console:open' | 'database_console:open' | 'objectstore_console:open' | 'oncall:manage' | 'support_cases:write' | 'support_content:write' | 'subscriptions:read' | 'subscriptions:manage' | 'orgs:manage' | 'quotas:manage' | 'plugin_queue:manage' | 'compliance:read' | 'compliance:write' | 'members:manage' | 'roles:manage' | 'invitations:manage' | 'service_accounts:manage' | 'dashboards:read' | 'dashboards:write' | 'observability:read' | 'observability:write' | 'logs:export' | 'audit:read' | 'reports:read' | 'reports:rollup' | 'reports:write' | 'reports:publish' | 'messages:read' | 'messages:write' | 'billing:read' | 'billing:manage' | 'quotas:read' | 'impersonation:open' | 'impersonation:approve' | 'team_access:open' | 'registry:read' | 'registry:write' | 'registry:purge' | 'org_settings:write' | 'org_idp:write' | 'org_kms:write' | 'org_impersonation:write';
19
+ export type Permission = keyof typeof PERMISSION_DEFS;
16
20
  /**
17
21
  * The CLOSED set of actions a permission id may end in — the second half of the
18
22
  * `resource:action` strategy the docs describe.
@@ -37,8 +41,6 @@ export type Permission = 'pipelines:read' | 'pipelines:write' | 'pipelines:publi
37
41
  export declare const PERMISSION_ACTIONS: readonly string[];
38
42
  /** `resource:action`, where resource is `snake_case` and action is in {@link PERMISSION_ACTIONS}. */
39
43
  export declare const PERMISSION_ID_SHAPE: RegExp;
40
- /** All valid permissions (order determines display order in the picker). */
41
- export declare const ALL_PERMISSIONS: readonly Permission[];
42
44
  /**
43
45
  * The CLOSED set of functions that take a {@link Permission} and decide access.
44
46
  *
@@ -69,14 +71,330 @@ export interface PermissionMeta {
69
71
  category: string;
70
72
  }
71
73
  /**
72
- * The permission catalog with display metadata, in picker order.
74
+ * Every permission, keyed by id, with the display metadata the permission-picker
75
+ * UI shows (label, description, the category it groups under), in picker order.
76
+ * The comment above an entry is that permission's design note.
73
77
  *
74
78
  * This module is the SINGLE catalog for backend and browser alike: it has no
75
79
  * runtime dependencies (the only import is a type), so the frontend imports it
76
80
  * through the `@pipeline-builder/api-core/permissions` subpath instead of keeping
77
- * a hand-maintained mirror. Every id in {@link ALL_PERMISSIONS} must appear here
78
- * exactly once (asserted by `permissions.test.ts`).
81
+ * a hand-maintained mirror.
79
82
  */
83
+ declare const PERMISSION_DEFS: {
84
+ 'pipelines:read': {
85
+ label: string;
86
+ description: string;
87
+ category: string;
88
+ };
89
+ 'pipelines:write': {
90
+ label: string;
91
+ description: string;
92
+ category: string;
93
+ };
94
+ 'pipelines:publish': {
95
+ label: string;
96
+ description: string;
97
+ category: string;
98
+ };
99
+ 'pipeline_registry:write': {
100
+ label: string;
101
+ description: string;
102
+ category: string;
103
+ };
104
+ 'toolchain:manage': {
105
+ label: string;
106
+ description: string;
107
+ category: string;
108
+ };
109
+ 'templates:read': {
110
+ label: string;
111
+ description: string;
112
+ category: string;
113
+ };
114
+ 'templates:write': {
115
+ label: string;
116
+ description: string;
117
+ category: string;
118
+ };
119
+ 'templates:publish': {
120
+ label: string;
121
+ description: string;
122
+ category: string;
123
+ };
124
+ 'plugins:read': {
125
+ label: string;
126
+ description: string;
127
+ category: string;
128
+ };
129
+ 'plugins:write': {
130
+ label: string;
131
+ description: string;
132
+ category: string;
133
+ };
134
+ 'plugins:publish': {
135
+ label: string;
136
+ description: string;
137
+ category: string;
138
+ };
139
+ 'plugins:install': {
140
+ label: string;
141
+ description: string;
142
+ category: string;
143
+ };
144
+ 'plugin_installs:manage': {
145
+ label: string;
146
+ description: string;
147
+ category: string;
148
+ };
149
+ 'publishers:manage': {
150
+ label: string;
151
+ description: string;
152
+ category: string;
153
+ };
154
+ 'plugins:moderate': {
155
+ label: string;
156
+ description: string;
157
+ category: string;
158
+ };
159
+ 'publishers:verify': {
160
+ label: string;
161
+ description: string;
162
+ category: string;
163
+ };
164
+ 'platform:read': {
165
+ label: string;
166
+ description: string;
167
+ category: string;
168
+ };
169
+ 'orgs:read': {
170
+ label: string;
171
+ description: string;
172
+ category: string;
173
+ };
174
+ 'toolchain:operate': {
175
+ label: string;
176
+ description: string;
177
+ category: string;
178
+ };
179
+ 'billing:operate': {
180
+ label: string;
181
+ description: string;
182
+ category: string;
183
+ };
184
+ 'observability_console:open': {
185
+ label: string;
186
+ description: string;
187
+ category: string;
188
+ };
189
+ 'database_console:open': {
190
+ label: string;
191
+ description: string;
192
+ category: string;
193
+ };
194
+ 'objectstore_console:open': {
195
+ label: string;
196
+ description: string;
197
+ category: string;
198
+ };
199
+ 'oncall:manage': {
200
+ label: string;
201
+ description: string;
202
+ category: string;
203
+ };
204
+ 'support_cases:write': {
205
+ label: string;
206
+ description: string;
207
+ category: string;
208
+ };
209
+ 'support_content:write': {
210
+ label: string;
211
+ description: string;
212
+ category: string;
213
+ };
214
+ 'subscriptions:read': {
215
+ label: string;
216
+ description: string;
217
+ category: string;
218
+ };
219
+ 'subscriptions:manage': {
220
+ label: string;
221
+ description: string;
222
+ category: string;
223
+ };
224
+ 'orgs:manage': {
225
+ label: string;
226
+ description: string;
227
+ category: string;
228
+ };
229
+ 'quotas:manage': {
230
+ label: string;
231
+ description: string;
232
+ category: string;
233
+ };
234
+ 'plugin_queue:manage': {
235
+ label: string;
236
+ description: string;
237
+ category: string;
238
+ };
239
+ 'compliance:read': {
240
+ label: string;
241
+ description: string;
242
+ category: string;
243
+ };
244
+ 'compliance:write': {
245
+ label: string;
246
+ description: string;
247
+ category: string;
248
+ };
249
+ 'members:manage': {
250
+ label: string;
251
+ description: string;
252
+ category: string;
253
+ };
254
+ 'roles:manage': {
255
+ label: string;
256
+ description: string;
257
+ category: string;
258
+ };
259
+ 'invitations:manage': {
260
+ label: string;
261
+ description: string;
262
+ category: string;
263
+ };
264
+ 'service_accounts:manage': {
265
+ label: string;
266
+ description: string;
267
+ category: string;
268
+ };
269
+ 'dashboards:read': {
270
+ label: string;
271
+ description: string;
272
+ category: string;
273
+ };
274
+ 'dashboards:write': {
275
+ label: string;
276
+ description: string;
277
+ category: string;
278
+ };
279
+ 'observability:read': {
280
+ label: string;
281
+ description: string;
282
+ category: string;
283
+ };
284
+ 'observability:write': {
285
+ label: string;
286
+ description: string;
287
+ category: string;
288
+ };
289
+ 'logs:export': {
290
+ label: string;
291
+ description: string;
292
+ category: string;
293
+ };
294
+ 'audit:read': {
295
+ label: string;
296
+ description: string;
297
+ category: string;
298
+ };
299
+ 'reports:read': {
300
+ label: string;
301
+ description: string;
302
+ category: string;
303
+ };
304
+ 'reports:rollup': {
305
+ label: string;
306
+ description: string;
307
+ category: string;
308
+ };
309
+ 'reports:write': {
310
+ label: string;
311
+ description: string;
312
+ category: string;
313
+ };
314
+ 'reports:publish': {
315
+ label: string;
316
+ description: string;
317
+ category: string;
318
+ };
319
+ 'messages:read': {
320
+ label: string;
321
+ description: string;
322
+ category: string;
323
+ };
324
+ 'messages:write': {
325
+ label: string;
326
+ description: string;
327
+ category: string;
328
+ };
329
+ 'billing:read': {
330
+ label: string;
331
+ description: string;
332
+ category: string;
333
+ };
334
+ 'billing:manage': {
335
+ label: string;
336
+ description: string;
337
+ category: string;
338
+ };
339
+ 'quotas:read': {
340
+ label: string;
341
+ description: string;
342
+ category: string;
343
+ };
344
+ 'registry:read': {
345
+ label: string;
346
+ description: string;
347
+ category: string;
348
+ };
349
+ 'registry:write': {
350
+ label: string;
351
+ description: string;
352
+ category: string;
353
+ };
354
+ 'registry:purge': {
355
+ label: string;
356
+ description: string;
357
+ category: string;
358
+ };
359
+ 'impersonation:open': {
360
+ label: string;
361
+ description: string;
362
+ category: string;
363
+ };
364
+ 'impersonation:approve': {
365
+ label: string;
366
+ description: string;
367
+ category: string;
368
+ };
369
+ 'team_access:open': {
370
+ label: string;
371
+ description: string;
372
+ category: string;
373
+ };
374
+ 'org_settings:write': {
375
+ label: string;
376
+ description: string;
377
+ category: string;
378
+ };
379
+ 'org_idp:write': {
380
+ label: string;
381
+ description: string;
382
+ category: string;
383
+ };
384
+ 'org_kms:write': {
385
+ label: string;
386
+ description: string;
387
+ category: string;
388
+ };
389
+ 'org_impersonation:write': {
390
+ label: string;
391
+ description: string;
392
+ category: string;
393
+ };
394
+ };
395
+ /** All valid permissions (order determines display order in the picker). */
396
+ export declare const ALL_PERMISSIONS: readonly Permission[];
397
+ /** The permission catalog with display metadata, in picker order. */
80
398
  export declare const PERMISSION_CATALOG: readonly PermissionMeta[];
81
399
  /** Human label for a permission id (falls back to the raw id for an unknown one). */
82
400
  export declare function permissionLabel(id: string): string;
@@ -498,59 +816,71 @@ export declare function hasPermission(granted: readonly string[] | null | undefi
498
816
  export declare const SEED_BUNDLES: {
499
817
  readonly ecosystem_manager: {
500
818
  readonly name: 'Ecosystem Manager';
501
- readonly permissions: readonly Permission[];
819
+ readonly permissions: readonly ("audit:read" | "billing:manage" | "billing:operate" | "billing:read" | "compliance:read" | "compliance:write" | "dashboards:read" | "dashboards:write" | "database_console:open" | "impersonation:approve" | "impersonation:open" | "invitations:manage" | "logs:export" | "members:manage" | "messages:read" | "messages:write" | "objectstore_console:open" | "observability:read" | "observability:write" | "observability_console:open" | "oncall:manage" | "org_idp:write" | "org_impersonation:write" | "org_kms:write" | "org_settings:write" | "orgs:manage" | "orgs:read" | "pipeline_registry:write" | "pipelines:publish" | "pipelines:read" | "pipelines:write" | "platform:read" | "plugin_installs:manage" | "plugin_queue:manage" | "plugins:install" | "plugins:moderate" | "plugins:publish" | "plugins:read" | "plugins:write" | "publishers:manage" | "publishers:verify" | "quotas:manage" | "quotas:read" | "registry:purge" | "registry:read" | "registry:write" | "reports:publish" | "reports:read" | "reports:rollup" | "reports:write" | "roles:manage" | "service_accounts:manage" | "subscriptions:manage" | "subscriptions:read" | "support_cases:write" | "support_content:write" | "team_access:open" | "templates:publish" | "templates:read" | "templates:write" | "toolchain:manage" | "toolchain:operate")[];
820
+ readonly seededIn: 'system';
502
821
  };
503
822
  readonly publisher_verifier: {
504
823
  readonly name: 'Publisher Verifier';
505
- readonly permissions: readonly Permission[];
824
+ readonly permissions: readonly ("audit:read" | "billing:manage" | "billing:operate" | "billing:read" | "compliance:read" | "compliance:write" | "dashboards:read" | "dashboards:write" | "database_console:open" | "impersonation:approve" | "impersonation:open" | "invitations:manage" | "logs:export" | "members:manage" | "messages:read" | "messages:write" | "objectstore_console:open" | "observability:read" | "observability:write" | "observability_console:open" | "oncall:manage" | "org_idp:write" | "org_impersonation:write" | "org_kms:write" | "org_settings:write" | "orgs:manage" | "orgs:read" | "pipeline_registry:write" | "pipelines:publish" | "pipelines:read" | "pipelines:write" | "platform:read" | "plugin_installs:manage" | "plugin_queue:manage" | "plugins:install" | "plugins:moderate" | "plugins:publish" | "plugins:read" | "plugins:write" | "publishers:manage" | "publishers:verify" | "quotas:manage" | "quotas:read" | "registry:purge" | "registry:read" | "registry:write" | "reports:publish" | "reports:read" | "reports:rollup" | "reports:write" | "roles:manage" | "service_accounts:manage" | "subscriptions:manage" | "subscriptions:read" | "support_cases:write" | "support_content:write" | "team_access:open" | "templates:publish" | "templates:read" | "templates:write" | "toolchain:manage" | "toolchain:operate")[];
825
+ readonly seededIn: 'system';
506
826
  };
507
827
  readonly team_lead: {
508
828
  readonly name: 'Team Lead';
509
- readonly permissions: readonly Permission[];
829
+ readonly permissions: readonly ("audit:read" | "billing:manage" | "billing:operate" | "billing:read" | "compliance:read" | "compliance:write" | "dashboards:read" | "dashboards:write" | "database_console:open" | "impersonation:approve" | "impersonation:open" | "invitations:manage" | "logs:export" | "members:manage" | "messages:read" | "messages:write" | "objectstore_console:open" | "observability:read" | "observability:write" | "observability_console:open" | "oncall:manage" | "org_idp:write" | "org_impersonation:write" | "org_kms:write" | "org_settings:write" | "orgs:manage" | "orgs:read" | "pipeline_registry:write" | "pipelines:publish" | "pipelines:read" | "pipelines:write" | "platform:read" | "plugin_installs:manage" | "plugin_queue:manage" | "plugins:install" | "plugins:moderate" | "plugins:publish" | "plugins:read" | "plugins:write" | "publishers:manage" | "publishers:verify" | "quotas:manage" | "quotas:read" | "registry:purge" | "registry:read" | "registry:write" | "reports:publish" | "reports:read" | "reports:rollup" | "reports:write" | "roles:manage" | "service_accounts:manage" | "subscriptions:manage" | "subscriptions:read" | "support_cases:write" | "support_content:write" | "team_access:open" | "templates:publish" | "templates:read" | "templates:write" | "toolchain:manage" | "toolchain:operate")[];
830
+ readonly seededIn: null;
510
831
  };
511
832
  readonly platform_observer: {
512
833
  readonly name: 'Platform Observer';
513
- readonly permissions: readonly Permission[];
834
+ readonly permissions: readonly ("audit:read" | "billing:manage" | "billing:operate" | "billing:read" | "compliance:read" | "compliance:write" | "dashboards:read" | "dashboards:write" | "database_console:open" | "impersonation:approve" | "impersonation:open" | "invitations:manage" | "logs:export" | "members:manage" | "messages:read" | "messages:write" | "objectstore_console:open" | "observability:read" | "observability:write" | "observability_console:open" | "oncall:manage" | "org_idp:write" | "org_impersonation:write" | "org_kms:write" | "org_settings:write" | "orgs:manage" | "orgs:read" | "pipeline_registry:write" | "pipelines:publish" | "pipelines:read" | "pipelines:write" | "platform:read" | "plugin_installs:manage" | "plugin_queue:manage" | "plugins:install" | "plugins:moderate" | "plugins:publish" | "plugins:read" | "plugins:write" | "publishers:manage" | "publishers:verify" | "quotas:manage" | "quotas:read" | "registry:purge" | "registry:read" | "registry:write" | "reports:publish" | "reports:read" | "reports:rollup" | "reports:write" | "roles:manage" | "service_accounts:manage" | "subscriptions:manage" | "subscriptions:read" | "support_cases:write" | "support_content:write" | "team_access:open" | "templates:publish" | "templates:read" | "templates:write" | "toolchain:manage" | "toolchain:operate")[];
835
+ readonly seededIn: 'system';
514
836
  };
515
837
  readonly platform_operator: {
516
838
  readonly name: 'Platform Operator';
517
- readonly permissions: readonly Permission[];
839
+ readonly permissions: readonly ("audit:read" | "billing:manage" | "billing:operate" | "billing:read" | "compliance:read" | "compliance:write" | "dashboards:read" | "dashboards:write" | "database_console:open" | "impersonation:approve" | "impersonation:open" | "invitations:manage" | "logs:export" | "members:manage" | "messages:read" | "messages:write" | "objectstore_console:open" | "observability:read" | "observability:write" | "observability_console:open" | "oncall:manage" | "org_idp:write" | "org_impersonation:write" | "org_kms:write" | "org_settings:write" | "orgs:manage" | "orgs:read" | "pipeline_registry:write" | "pipelines:publish" | "pipelines:read" | "pipelines:write" | "platform:read" | "plugin_installs:manage" | "plugin_queue:manage" | "plugins:install" | "plugins:moderate" | "plugins:publish" | "plugins:read" | "plugins:write" | "publishers:manage" | "publishers:verify" | "quotas:manage" | "quotas:read" | "registry:purge" | "registry:read" | "registry:write" | "reports:publish" | "reports:read" | "reports:rollup" | "reports:write" | "roles:manage" | "service_accounts:manage" | "subscriptions:manage" | "subscriptions:read" | "support_cases:write" | "support_content:write" | "team_access:open" | "templates:publish" | "templates:read" | "templates:write" | "toolchain:manage" | "toolchain:operate")[];
840
+ readonly seededIn: 'system';
518
841
  };
519
842
  readonly account_manager: {
520
843
  readonly name: 'Account Manager';
521
- readonly permissions: readonly Permission[];
844
+ readonly permissions: readonly ("audit:read" | "billing:manage" | "billing:operate" | "billing:read" | "compliance:read" | "compliance:write" | "dashboards:read" | "dashboards:write" | "database_console:open" | "impersonation:approve" | "impersonation:open" | "invitations:manage" | "logs:export" | "members:manage" | "messages:read" | "messages:write" | "objectstore_console:open" | "observability:read" | "observability:write" | "observability_console:open" | "oncall:manage" | "org_idp:write" | "org_impersonation:write" | "org_kms:write" | "org_settings:write" | "orgs:manage" | "orgs:read" | "pipeline_registry:write" | "pipelines:publish" | "pipelines:read" | "pipelines:write" | "platform:read" | "plugin_installs:manage" | "plugin_queue:manage" | "plugins:install" | "plugins:moderate" | "plugins:publish" | "plugins:read" | "plugins:write" | "publishers:manage" | "publishers:verify" | "quotas:manage" | "quotas:read" | "registry:purge" | "registry:read" | "registry:write" | "reports:publish" | "reports:read" | "reports:rollup" | "reports:write" | "roles:manage" | "service_accounts:manage" | "subscriptions:manage" | "subscriptions:read" | "support_cases:write" | "support_content:write" | "team_access:open" | "templates:publish" | "templates:read" | "templates:write" | "toolchain:manage" | "toolchain:operate")[];
845
+ readonly seededIn: 'system';
522
846
  };
523
847
  readonly console_admin: {
524
848
  readonly name: 'Console Administrator';
525
- readonly permissions: readonly Permission[];
849
+ readonly permissions: readonly ("audit:read" | "billing:manage" | "billing:operate" | "billing:read" | "compliance:read" | "compliance:write" | "dashboards:read" | "dashboards:write" | "database_console:open" | "impersonation:approve" | "impersonation:open" | "invitations:manage" | "logs:export" | "members:manage" | "messages:read" | "messages:write" | "objectstore_console:open" | "observability:read" | "observability:write" | "observability_console:open" | "oncall:manage" | "org_idp:write" | "org_impersonation:write" | "org_kms:write" | "org_settings:write" | "orgs:manage" | "orgs:read" | "pipeline_registry:write" | "pipelines:publish" | "pipelines:read" | "pipelines:write" | "platform:read" | "plugin_installs:manage" | "plugin_queue:manage" | "plugins:install" | "plugins:moderate" | "plugins:publish" | "plugins:read" | "plugins:write" | "publishers:manage" | "publishers:verify" | "quotas:manage" | "quotas:read" | "registry:purge" | "registry:read" | "registry:write" | "reports:publish" | "reports:read" | "reports:rollup" | "reports:write" | "roles:manage" | "service_accounts:manage" | "subscriptions:manage" | "subscriptions:read" | "support_cases:write" | "support_content:write" | "team_access:open" | "templates:publish" | "templates:read" | "templates:write" | "toolchain:manage" | "toolchain:operate")[];
850
+ readonly seededIn: 'system';
526
851
  };
527
852
  readonly support_agent: {
528
853
  readonly name: 'Support Agent';
529
- readonly permissions: readonly Permission[];
854
+ readonly permissions: readonly ("audit:read" | "billing:manage" | "billing:operate" | "billing:read" | "compliance:read" | "compliance:write" | "dashboards:read" | "dashboards:write" | "database_console:open" | "impersonation:approve" | "impersonation:open" | "invitations:manage" | "logs:export" | "members:manage" | "messages:read" | "messages:write" | "objectstore_console:open" | "observability:read" | "observability:write" | "observability_console:open" | "oncall:manage" | "org_idp:write" | "org_impersonation:write" | "org_kms:write" | "org_settings:write" | "orgs:manage" | "orgs:read" | "pipeline_registry:write" | "pipelines:publish" | "pipelines:read" | "pipelines:write" | "platform:read" | "plugin_installs:manage" | "plugin_queue:manage" | "plugins:install" | "plugins:moderate" | "plugins:publish" | "plugins:read" | "plugins:write" | "publishers:manage" | "publishers:verify" | "quotas:manage" | "quotas:read" | "registry:purge" | "registry:read" | "registry:write" | "reports:publish" | "reports:read" | "reports:rollup" | "reports:write" | "roles:manage" | "service_accounts:manage" | "subscriptions:manage" | "subscriptions:read" | "support_cases:write" | "support_content:write" | "team_access:open" | "templates:publish" | "templates:read" | "templates:write" | "toolchain:manage" | "toolchain:operate")[];
855
+ readonly seededIn: 'system';
530
856
  };
531
857
  readonly support_lead: {
532
858
  readonly name: 'Support Lead';
533
- readonly permissions: readonly Permission[];
859
+ readonly permissions: readonly ("audit:read" | "billing:manage" | "billing:operate" | "billing:read" | "compliance:read" | "compliance:write" | "dashboards:read" | "dashboards:write" | "database_console:open" | "impersonation:approve" | "impersonation:open" | "invitations:manage" | "logs:export" | "members:manage" | "messages:read" | "messages:write" | "objectstore_console:open" | "observability:read" | "observability:write" | "observability_console:open" | "oncall:manage" | "org_idp:write" | "org_impersonation:write" | "org_kms:write" | "org_settings:write" | "orgs:manage" | "orgs:read" | "pipeline_registry:write" | "pipelines:publish" | "pipelines:read" | "pipelines:write" | "platform:read" | "plugin_installs:manage" | "plugin_queue:manage" | "plugins:install" | "plugins:moderate" | "plugins:publish" | "plugins:read" | "plugins:write" | "publishers:manage" | "publishers:verify" | "quotas:manage" | "quotas:read" | "registry:purge" | "registry:read" | "registry:write" | "reports:publish" | "reports:read" | "reports:rollup" | "reports:write" | "roles:manage" | "service_accounts:manage" | "subscriptions:manage" | "subscriptions:read" | "support_cases:write" | "support_content:write" | "team_access:open" | "templates:publish" | "templates:read" | "templates:write" | "toolchain:manage" | "toolchain:operate")[];
860
+ readonly seededIn: 'system';
534
861
  };
535
862
  readonly registry_operator: {
536
863
  readonly name: 'Registry Operator';
537
- readonly permissions: readonly Permission[];
864
+ readonly permissions: readonly ("audit:read" | "billing:manage" | "billing:operate" | "billing:read" | "compliance:read" | "compliance:write" | "dashboards:read" | "dashboards:write" | "database_console:open" | "impersonation:approve" | "impersonation:open" | "invitations:manage" | "logs:export" | "members:manage" | "messages:read" | "messages:write" | "objectstore_console:open" | "observability:read" | "observability:write" | "observability_console:open" | "oncall:manage" | "org_idp:write" | "org_impersonation:write" | "org_kms:write" | "org_settings:write" | "orgs:manage" | "orgs:read" | "pipeline_registry:write" | "pipelines:publish" | "pipelines:read" | "pipelines:write" | "platform:read" | "plugin_installs:manage" | "plugin_queue:manage" | "plugins:install" | "plugins:moderate" | "plugins:publish" | "plugins:read" | "plugins:write" | "publishers:manage" | "publishers:verify" | "quotas:manage" | "quotas:read" | "registry:purge" | "registry:read" | "registry:write" | "reports:publish" | "reports:read" | "reports:rollup" | "reports:write" | "roles:manage" | "service_accounts:manage" | "subscriptions:manage" | "subscriptions:read" | "support_cases:write" | "support_content:write" | "team_access:open" | "templates:publish" | "templates:read" | "templates:write" | "toolchain:manage" | "toolchain:operate")[];
865
+ readonly seededIn: 'system';
538
866
  };
539
867
  readonly pipeline_automation: {
540
868
  readonly name: 'Pipeline Automation';
541
- readonly permissions: readonly Permission[];
869
+ readonly permissions: readonly ("audit:read" | "billing:manage" | "billing:operate" | "billing:read" | "compliance:read" | "compliance:write" | "dashboards:read" | "dashboards:write" | "database_console:open" | "impersonation:approve" | "impersonation:open" | "invitations:manage" | "logs:export" | "members:manage" | "messages:read" | "messages:write" | "objectstore_console:open" | "observability:read" | "observability:write" | "observability_console:open" | "oncall:manage" | "org_idp:write" | "org_impersonation:write" | "org_kms:write" | "org_settings:write" | "orgs:manage" | "orgs:read" | "pipeline_registry:write" | "pipelines:publish" | "pipelines:read" | "pipelines:write" | "platform:read" | "plugin_installs:manage" | "plugin_queue:manage" | "plugins:install" | "plugins:moderate" | "plugins:publish" | "plugins:read" | "plugins:write" | "publishers:manage" | "publishers:verify" | "quotas:manage" | "quotas:read" | "registry:purge" | "registry:read" | "registry:write" | "reports:publish" | "reports:read" | "reports:rollup" | "reports:write" | "roles:manage" | "service_accounts:manage" | "subscriptions:manage" | "subscriptions:read" | "support_cases:write" | "support_content:write" | "team_access:open" | "templates:publish" | "templates:read" | "templates:write" | "toolchain:manage" | "toolchain:operate")[];
870
+ readonly seededIn: 'org';
542
871
  };
543
872
  readonly pipeline_registration: {
544
873
  readonly name: 'Pipeline Registration';
545
- readonly permissions: readonly Permission[];
874
+ readonly permissions: readonly ("audit:read" | "billing:manage" | "billing:operate" | "billing:read" | "compliance:read" | "compliance:write" | "dashboards:read" | "dashboards:write" | "database_console:open" | "impersonation:approve" | "impersonation:open" | "invitations:manage" | "logs:export" | "members:manage" | "messages:read" | "messages:write" | "objectstore_console:open" | "observability:read" | "observability:write" | "observability_console:open" | "oncall:manage" | "org_idp:write" | "org_impersonation:write" | "org_kms:write" | "org_settings:write" | "orgs:manage" | "orgs:read" | "pipeline_registry:write" | "pipelines:publish" | "pipelines:read" | "pipelines:write" | "platform:read" | "plugin_installs:manage" | "plugin_queue:manage" | "plugins:install" | "plugins:moderate" | "plugins:publish" | "plugins:read" | "plugins:write" | "publishers:manage" | "publishers:verify" | "quotas:manage" | "quotas:read" | "registry:purge" | "registry:read" | "registry:write" | "reports:publish" | "reports:read" | "reports:rollup" | "reports:write" | "roles:manage" | "service_accounts:manage" | "subscriptions:manage" | "subscriptions:read" | "support_cases:write" | "support_content:write" | "team_access:open" | "templates:publish" | "templates:read" | "templates:write" | "toolchain:manage" | "toolchain:operate")[];
875
+ readonly seededIn: 'org';
546
876
  };
547
877
  };
548
878
  /** Every seed-bundle id. The platform's `Role.seedBundle` enum is this list. */
549
879
  export declare const SEED_BUNDLE_IDS: Array<keyof typeof SEED_BUNDLES>;
550
880
  export type SeedBundleId = keyof typeof SEED_BUNDLES;
551
881
  /**
552
- * The SYSTEM ORG's job Roles, in staffing order — the subset of
553
- * {@link SEED_BUNDLES} seeded there, which is every bundle except `team_lead`
882
+ * The SYSTEM ORG's job Roles, in staffing order (table order) — the subset of
883
+ * {@link SEED_BUNDLES} seeded there (`seededIn: 'system'`), which is every bundle except `team_lead`
554
884
  * (a tenant job, and a template rather than a seeded Role since it stopped
555
885
  * being structural).
556
886
  *
@@ -561,7 +891,7 @@ export type SeedBundleId = keyof typeof SEED_BUNDLES;
561
891
  */
562
892
  export declare const SYSTEM_ORG_JOB_BUNDLES: readonly SeedBundleId[];
563
893
  /**
564
- * The MACHINE Roles every org seeds — the subset of {@link SEED_BUNDLES} held by
894
+ * The MACHINE Roles every org seeds (`seededIn: 'org'`) — the subset of {@link SEED_BUNDLES} held by
565
895
  * the service accounts `pipeline-manager infra store-token` provisions.
566
896
  *
567
897
  * Seeded rather than offered as a {@link ROLE_TEMPLATES} entry, unlike the
@@ -586,3 +916,4 @@ export declare const AUTOMATION_ACCOUNT_BUNDLES: {
586
916
  readonly 'reporting-ingest': null;
587
917
  readonly 'registry-push': null;
588
918
  };
919
+ export {};