@kuadrant/kuadrant-backstage-plugin-frontend 0.0.2-dev-d2ba42b → 0.0.2-dev-8189c1c

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 (111) hide show
  1. package/dist/api.esm.js +236 -0
  2. package/dist/api.esm.js.map +1 -0
  3. package/dist/apis.esm.js +15 -0
  4. package/dist/apis.esm.js.map +1 -0
  5. package/dist/components/ApiAccessCard/ApiAccessCard.esm.js +25 -36
  6. package/dist/components/ApiAccessCard/ApiAccessCard.esm.js.map +1 -1
  7. package/dist/components/ApiKeyDetailPage/ApiKeyDetailPage.esm.js +24 -36
  8. package/dist/components/ApiKeyDetailPage/ApiKeyDetailPage.esm.js.map +1 -1
  9. package/dist/components/ApiKeyManagementTab/ApiKeyManagementTab.esm.js +20 -46
  10. package/dist/components/ApiKeyManagementTab/ApiKeyManagementTab.esm.js.map +1 -1
  11. package/dist/components/ApiProductDetailPage/ApiProductDetailPage.esm.js +9 -43
  12. package/dist/components/ApiProductDetailPage/ApiProductDetailPage.esm.js.map +1 -1
  13. package/dist/components/ApiProductDetails/ApiProductDetails.esm.js.map +1 -1
  14. package/dist/components/ApiProductInfoCard/ApiProductInfoCard.esm.js +5 -13
  15. package/dist/components/ApiProductInfoCard/ApiProductInfoCard.esm.js.map +1 -1
  16. package/dist/components/ApiProductOpenApiAlert/ApiProductOpenApiAlert.esm.js +7 -10
  17. package/dist/components/ApiProductOpenApiAlert/ApiProductOpenApiAlert.esm.js.map +1 -1
  18. package/dist/components/ApiProductPolicies/ApiProductPolicies.esm.js +113 -0
  19. package/dist/components/ApiProductPolicies/ApiProductPolicies.esm.js.map +1 -0
  20. package/dist/components/ApprovalQueueTable/ApprovalQueueTable.esm.js +32 -64
  21. package/dist/components/ApprovalQueueTable/ApprovalQueueTable.esm.js.map +1 -1
  22. package/dist/components/CreateAPIProductDialog/CreateAPIProductDialog.esm.js +85 -63
  23. package/dist/components/CreateAPIProductDialog/CreateAPIProductDialog.esm.js.map +1 -1
  24. package/dist/components/EditAPIKeyDialog/EditAPIKeyDialog.esm.js +8 -18
  25. package/dist/components/EditAPIKeyDialog/EditAPIKeyDialog.esm.js.map +1 -1
  26. package/dist/components/EditAPIProductDialog/EditAPIProductDialog.esm.js +56 -35
  27. package/dist/components/EditAPIProductDialog/EditAPIProductDialog.esm.js.map +1 -1
  28. package/dist/components/EntityApiApprovalTab/EntityApiApprovalTab.esm.js +9 -25
  29. package/dist/components/EntityApiApprovalTab/EntityApiApprovalTab.esm.js.map +1 -1
  30. package/dist/components/KuadrantPage/ApiProductsPage.esm.js +20 -54
  31. package/dist/components/KuadrantPage/ApiProductsPage.esm.js.map +1 -1
  32. package/dist/components/MyApiKeysTable/MyApiKeysTable.esm.js +25 -52
  33. package/dist/components/MyApiKeysTable/MyApiKeysTable.esm.js.map +1 -1
  34. package/dist/components/RequestAccessDialog/RequestAccessDialog.esm.js +10 -25
  35. package/dist/components/RequestAccessDialog/RequestAccessDialog.esm.js.map +1 -1
  36. package/dist/index.d.ts +510 -1
  37. package/dist/index.esm.js +3 -1
  38. package/dist/index.esm.js.map +1 -1
  39. package/dist/permissions.esm.js +12 -2
  40. package/dist/permissions.esm.js.map +1 -1
  41. package/dist/utils/policies.esm.js +11 -0
  42. package/dist/utils/policies.esm.js.map +1 -0
  43. package/dist-scalprum/internal.plugin-kuadrant.1ed3b3b414caa08ac5be.js +2 -0
  44. package/dist-scalprum/internal.plugin-kuadrant.1ed3b3b414caa08ac5be.js.map +1 -0
  45. package/dist-scalprum/plugin-manifest.json +3 -3
  46. package/dist-scalprum/static/2967.17aec2fb.chunk.js +2 -0
  47. package/dist-scalprum/static/2967.17aec2fb.chunk.js.map +1 -0
  48. package/dist-scalprum/static/{3947.ff1c25cf.chunk.js → 3947.ad129ba4.chunk.js} +1 -1
  49. package/dist-scalprum/static/{3947.ff1c25cf.chunk.js.map → 3947.ad129ba4.chunk.js.map} +1 -1
  50. package/dist-scalprum/static/3976.c8138b52.chunk.js +2 -0
  51. package/dist-scalprum/static/3976.c8138b52.chunk.js.map +1 -0
  52. package/dist-scalprum/static/4447.d924bc59.chunk.js +2 -0
  53. package/dist-scalprum/static/4447.d924bc59.chunk.js.map +1 -0
  54. package/dist-scalprum/static/5203.11ef2211.chunk.js +2 -0
  55. package/dist-scalprum/static/5203.11ef2211.chunk.js.map +1 -0
  56. package/dist-scalprum/static/6371.d849c508.chunk.js +2 -0
  57. package/dist-scalprum/static/6371.d849c508.chunk.js.map +1 -0
  58. package/dist-scalprum/static/6387.79be6155.chunk.js +2 -0
  59. package/dist-scalprum/static/6387.79be6155.chunk.js.map +1 -0
  60. package/dist-scalprum/static/6800.6faeb7c6.chunk.js +2 -0
  61. package/dist-scalprum/static/6800.6faeb7c6.chunk.js.map +1 -0
  62. package/dist-scalprum/static/69.b6afd1fe.chunk.js +2 -0
  63. package/dist-scalprum/static/69.b6afd1fe.chunk.js.map +1 -0
  64. package/dist-scalprum/static/7005.98c5e400.chunk.js +2 -0
  65. package/dist-scalprum/static/7005.98c5e400.chunk.js.map +1 -0
  66. package/dist-scalprum/static/7270.4a71807b.chunk.js +2 -0
  67. package/dist-scalprum/static/7270.4a71807b.chunk.js.map +1 -0
  68. package/dist-scalprum/static/7791.0a1d55bc.chunk.js +2 -0
  69. package/dist-scalprum/static/7791.0a1d55bc.chunk.js.map +1 -0
  70. package/dist-scalprum/static/8789.2f437443.chunk.js +2 -0
  71. package/dist-scalprum/static/8789.2f437443.chunk.js.map +1 -0
  72. package/dist-scalprum/static/9051.d45ac154.chunk.js +2 -0
  73. package/dist-scalprum/static/9051.d45ac154.chunk.js.map +1 -0
  74. package/dist-scalprum/static/{2946.a35243f1.chunk.js → 9370.2e9fe34b.chunk.js} +3 -3
  75. package/dist-scalprum/static/9370.2e9fe34b.chunk.js.map +1 -0
  76. package/dist-scalprum/static/9838.966ce0a0.chunk.js +2 -0
  77. package/dist-scalprum/static/9838.966ce0a0.chunk.js.map +1 -0
  78. package/dist-scalprum/static/exposed-PluginRoot.3b24e5af.chunk.js +2 -0
  79. package/dist-scalprum/static/{exposed-PluginRoot.8d8f0b09.chunk.js.map → exposed-PluginRoot.3b24e5af.chunk.js.map} +1 -1
  80. package/package.json +3 -1
  81. package/dist/components/PlanPolicyDetailsCard/PlanPolicyDetails.esm.js +0 -48
  82. package/dist/components/PlanPolicyDetailsCard/PlanPolicyDetails.esm.js.map +0 -1
  83. package/dist-scalprum/internal.plugin-kuadrant.eacc31ca4d6c1340f8a8.js +0 -2
  84. package/dist-scalprum/internal.plugin-kuadrant.eacc31ca4d6c1340f8a8.js.map +0 -1
  85. package/dist-scalprum/static/2946.a35243f1.chunk.js.map +0 -1
  86. package/dist-scalprum/static/2967.5bade048.chunk.js +0 -2
  87. package/dist-scalprum/static/2967.5bade048.chunk.js.map +0 -1
  88. package/dist-scalprum/static/3650.89dfc64c.chunk.js +0 -2
  89. package/dist-scalprum/static/3650.89dfc64c.chunk.js.map +0 -1
  90. package/dist-scalprum/static/3976.4cf18515.chunk.js +0 -2
  91. package/dist-scalprum/static/3976.4cf18515.chunk.js.map +0 -1
  92. package/dist-scalprum/static/4447.adbf663f.chunk.js +0 -2
  93. package/dist-scalprum/static/4447.adbf663f.chunk.js.map +0 -1
  94. package/dist-scalprum/static/5203.fce2a28f.chunk.js +0 -2
  95. package/dist-scalprum/static/5203.fce2a28f.chunk.js.map +0 -1
  96. package/dist-scalprum/static/6371.d45f37cc.chunk.js +0 -2
  97. package/dist-scalprum/static/6371.d45f37cc.chunk.js.map +0 -1
  98. package/dist-scalprum/static/6800.cd5c7bcb.chunk.js +0 -2
  99. package/dist-scalprum/static/6800.cd5c7bcb.chunk.js.map +0 -1
  100. package/dist-scalprum/static/7005.72759857.chunk.js +0 -2
  101. package/dist-scalprum/static/7005.72759857.chunk.js.map +0 -1
  102. package/dist-scalprum/static/7270.9473c969.chunk.js +0 -2
  103. package/dist-scalprum/static/7270.9473c969.chunk.js.map +0 -1
  104. package/dist-scalprum/static/7791.01371352.chunk.js +0 -2
  105. package/dist-scalprum/static/7791.01371352.chunk.js.map +0 -1
  106. package/dist-scalprum/static/8789.30227526.chunk.js +0 -2
  107. package/dist-scalprum/static/8789.30227526.chunk.js.map +0 -1
  108. package/dist-scalprum/static/8804.63919453.chunk.js +0 -2
  109. package/dist-scalprum/static/8804.63919453.chunk.js.map +0 -1
  110. package/dist-scalprum/static/exposed-PluginRoot.8d8f0b09.chunk.js +0 -2
  111. /package/dist-scalprum/static/{2946.a35243f1.chunk.js.LICENSE.txt → 9370.2e9fe34b.chunk.js.LICENSE.txt} +0 -0
package/dist/index.d.ts CHANGED
@@ -1,7 +1,9 @@
1
1
  import * as react from 'react';
2
2
  import react__default from 'react';
3
3
  import * as _backstage_core_plugin_api from '@backstage/core-plugin-api';
4
+ import { DiscoveryApi, FetchApi, IdentityApi } from '@backstage/core-plugin-api';
4
5
  import * as _backstage_plugin_permission_common from '@backstage/plugin-permission-common';
6
+ import * as _backstage_frontend_plugin_api from '@backstage/frontend-plugin-api';
5
7
 
6
8
  interface ApiKeyManagementTabProps {
7
9
  namespace?: string;
@@ -58,6 +60,8 @@ declare const kuadrantPlanPolicyReadPermission: _backstage_plugin_permission_com
58
60
  declare const kuadrantPlanPolicyUpdatePermission: _backstage_plugin_permission_common.BasicPermission;
59
61
  declare const kuadrantPlanPolicyDeletePermission: _backstage_plugin_permission_common.BasicPermission;
60
62
  declare const kuadrantPlanPolicyListPermission: _backstage_plugin_permission_common.BasicPermission;
63
+ declare const kuadrantAuthPolicyListPermission: _backstage_plugin_permission_common.BasicPermission;
64
+ declare const kuadrantRateLimitPolicyListPermission: _backstage_plugin_permission_common.BasicPermission;
61
65
  /**
62
66
  * permission to create new API products
63
67
  * granted to api owners and admins
@@ -146,4 +150,509 @@ declare const kuadrantApiKeyDeleteAllPermission: _backstage_plugin_permission_co
146
150
  declare const kuadrantApiKeyApprovePermission: _backstage_plugin_permission_common.BasicPermission;
147
151
  declare const kuadrantPermissions: (_backstage_plugin_permission_common.BasicPermission | _backstage_plugin_permission_common.ResourcePermission<"apiproduct">)[];
148
152
 
149
- export { ApiAccessCard, ApiKeyApprovalPage, ApiKeyDetailPage, ApiKeyManagementTab, ApiProductDetailPage, ApiProductInfoCard, ApiProductsPage, EntityKuadrantApiAccessCard, EntityKuadrantApiApprovalTab, EntityKuadrantApiKeyManagementTab, EntityKuadrantApiKeysContent, EntityKuadrantApiProductInfoContent, EntityKuadrantApiProductOpenApiAlert, KuadrantPage, MyApiKeysPage, kuadrantApiKeyApprovePermission, kuadrantApiKeyCreatePermission, kuadrantApiKeyDeleteAllPermission, kuadrantApiKeyDeleteOwnPermission, kuadrantApiKeyReadAllPermission, kuadrantApiKeyReadOwnPermission, kuadrantApiKeyUpdateAllPermission, kuadrantApiKeyUpdateOwnPermission, kuadrantApiProductCreatePermission, kuadrantApiProductDeleteAllPermission, kuadrantApiProductDeleteOwnPermission, kuadrantApiProductListPermission, kuadrantApiProductReadAllPermission, kuadrantApiProductReadOwnPermission, kuadrantApiProductUpdateAllPermission, kuadrantApiProductUpdateOwnPermission, kuadrantPermissions, kuadrantPlanPolicyCreatePermission, kuadrantPlanPolicyDeletePermission, kuadrantPlanPolicyListPermission, kuadrantPlanPolicyReadPermission, kuadrantPlanPolicyUpdatePermission, kuadrantPlugin };
153
+ type PlanTier = string;
154
+ type RequestPhase = 'Pending' | 'Approved' | 'Rejected';
155
+ interface PlanLimits {
156
+ daily?: number;
157
+ weekly?: number;
158
+ monthly?: number;
159
+ yearly?: number;
160
+ custom?: Array<{
161
+ limit: number;
162
+ window: string;
163
+ }>;
164
+ }
165
+ type OpenAPISpecConditionReason = 'SpecFetched' | 'SpecSizeTooLarge' | 'FetchFailed';
166
+ type StatusConditionType = 'OpenAPISpecReady' | string;
167
+ interface StatusCondition {
168
+ type: StatusConditionType;
169
+ status: 'True' | 'False' | 'Unknown';
170
+ reason?: OpenAPISpecConditionReason | string;
171
+ message?: string;
172
+ lastTransitionTime?: string;
173
+ }
174
+ interface APIKeySpec {
175
+ apiProductRef: {
176
+ name: string;
177
+ };
178
+ planTier: PlanTier;
179
+ useCase: string;
180
+ requestedBy: {
181
+ userId: string;
182
+ email: string;
183
+ };
184
+ }
185
+ interface CredentialsAuthorizationHeader {
186
+ prefix?: string;
187
+ }
188
+ interface CredentialsCustomHeader {
189
+ name: string;
190
+ prefix?: string;
191
+ }
192
+ interface CredentialsNamed {
193
+ name: string;
194
+ }
195
+ interface Credentials {
196
+ authorizationHeader?: CredentialsAuthorizationHeader;
197
+ customHeader?: CredentialsCustomHeader;
198
+ queryString?: CredentialsNamed;
199
+ cookie?: CredentialsNamed;
200
+ }
201
+ interface LabelSelector {
202
+ matchLabels?: Record<string, string>;
203
+ matchExpressions?: Array<{
204
+ key: string;
205
+ operator: 'In' | 'NotIn' | 'Exists' | 'DoesNotExist';
206
+ values?: string[];
207
+ }>;
208
+ }
209
+ interface AuthenticationSpec {
210
+ selector?: LabelSelector;
211
+ allNamespaces?: boolean;
212
+ }
213
+ interface APIKeyAuthScheme {
214
+ authenticationSpec?: AuthenticationSpec;
215
+ credentials?: Credentials;
216
+ }
217
+ interface APIKeyStatus {
218
+ phase?: RequestPhase;
219
+ reviewedBy?: string;
220
+ reviewedAt?: string;
221
+ apiHostname?: string;
222
+ limits?: PlanLimits;
223
+ secretRef?: {
224
+ name: string;
225
+ key: string;
226
+ };
227
+ canReadSecret?: boolean;
228
+ authScheme?: APIKeyAuthScheme;
229
+ conditions?: StatusCondition[];
230
+ }
231
+ interface APIKey {
232
+ apiVersion: 'devportal.kuadrant.io/v1alpha1';
233
+ kind: 'APIKey';
234
+ metadata: {
235
+ name: string;
236
+ namespace: string;
237
+ creationTimestamp?: string;
238
+ labels?: Record<string, string>;
239
+ annotations?: Record<string, string>;
240
+ };
241
+ spec: APIKeySpec;
242
+ status?: APIKeyStatus;
243
+ }
244
+ interface APIKeyRequest {
245
+ apiProductName: string;
246
+ namespace: string;
247
+ planTier: PlanTier;
248
+ useCase: string;
249
+ userEmail: string;
250
+ }
251
+ interface APIProductSpec {
252
+ displayName: string;
253
+ description?: string;
254
+ version?: string;
255
+ tags?: string[];
256
+ targetRef: {
257
+ group: string;
258
+ kind: string;
259
+ name: string;
260
+ namespace: string;
261
+ };
262
+ approvalMode: 'automatic' | 'manual';
263
+ publishStatus: 'Draft' | 'Published';
264
+ documentation?: {
265
+ openAPISpecURL?: string;
266
+ swaggerUI?: string;
267
+ docsURL?: string;
268
+ gitRepository?: string;
269
+ techdocsRef?: string;
270
+ };
271
+ contact?: {
272
+ team?: string;
273
+ email?: string;
274
+ slack?: string;
275
+ url?: string;
276
+ };
277
+ }
278
+ interface DiscoveredAuthScheme {
279
+ authentication: Record<string, {
280
+ apiKey?: {
281
+ selector?: LabelSelector;
282
+ allNamespaces?: boolean;
283
+ };
284
+ jwt?: {
285
+ issuerUrl: string;
286
+ };
287
+ credentials?: Credentials;
288
+ metrics?: boolean;
289
+ priority?: number;
290
+ }>;
291
+ }
292
+ interface APIProductStatus {
293
+ observedGeneration?: number;
294
+ discoveredPlans?: Plan[];
295
+ discoveredAuthScheme?: DiscoveredAuthScheme;
296
+ openapi?: {
297
+ raw: string;
298
+ lastSyncTime: string;
299
+ };
300
+ oidcDiscovery?: {
301
+ tokenEndpoint: string;
302
+ };
303
+ conditions?: StatusCondition[];
304
+ }
305
+ interface APIProduct {
306
+ apiVersion: 'devportal.kuadrant.io/v1alpha1';
307
+ kind: 'APIProduct';
308
+ metadata: {
309
+ name: string;
310
+ namespace: string;
311
+ creationTimestamp?: string;
312
+ labels?: Record<string, string>;
313
+ annotations?: Record<string, string>;
314
+ };
315
+ spec: APIProductSpec;
316
+ status?: APIProductStatus;
317
+ }
318
+ interface Plan {
319
+ tier: string;
320
+ predicate?: string;
321
+ description?: string;
322
+ limits?: PlanLimits;
323
+ }
324
+ interface PlanPolicy {
325
+ apiVersion: string;
326
+ kind: string;
327
+ metadata: {
328
+ name: string;
329
+ namespace: string;
330
+ creationTimestamp?: string;
331
+ labels?: Record<string, string>;
332
+ annotations?: Record<string, string>;
333
+ };
334
+ spec: {
335
+ targetRef: {
336
+ kind: 'HTTPRoute' | 'Gateway';
337
+ name: string;
338
+ namespace?: string;
339
+ };
340
+ plans: Plan[];
341
+ };
342
+ status?: {
343
+ conditions?: StatusCondition[];
344
+ };
345
+ }
346
+ interface BulkOperationResult {
347
+ namespace: string;
348
+ name: string;
349
+ success: boolean;
350
+ error?: string;
351
+ }
352
+ interface ExtractedSecret {
353
+ apiKey: string;
354
+ }
355
+ interface K8sResource {
356
+ apiVersion: string;
357
+ kind: string;
358
+ metadata: {
359
+ name: string;
360
+ namespace?: string;
361
+ creationTimestamp?: string;
362
+ labels?: Record<string, string>;
363
+ annotations?: Record<string, string>;
364
+ [key: string]: any;
365
+ };
366
+ spec?: any;
367
+ status?: any;
368
+ data?: any;
369
+ stringData?: any;
370
+ [key: string]: any;
371
+ }
372
+ interface K8sList {
373
+ items: K8sResource[];
374
+ }
375
+ interface AuthPolicy {
376
+ apiVersion: string;
377
+ kind: string;
378
+ metadata: {
379
+ name: string;
380
+ namespace: string;
381
+ creationTimestamp?: string;
382
+ labels?: Record<string, string>;
383
+ annotations?: Record<string, string>;
384
+ };
385
+ spec: {
386
+ targetRef: {
387
+ kind: 'HTTPRoute' | 'Gateway';
388
+ name: string;
389
+ namespace?: string;
390
+ };
391
+ };
392
+ status?: {
393
+ conditions?: StatusCondition[];
394
+ };
395
+ }
396
+ interface RateLimitPolicy {
397
+ apiVersion: string;
398
+ kind: string;
399
+ metadata: {
400
+ name: string;
401
+ namespace: string;
402
+ creationTimestamp?: string;
403
+ labels?: Record<string, string>;
404
+ annotations?: Record<string, string>;
405
+ };
406
+ spec: {
407
+ targetRef: {
408
+ kind: 'HTTPRoute' | 'Gateway';
409
+ name: string;
410
+ namespace?: string;
411
+ };
412
+ };
413
+ status?: {
414
+ conditions?: StatusCondition[];
415
+ };
416
+ }
417
+
418
+ /**
419
+ * Generic Kuadrant list type for API responses
420
+ */
421
+ interface KuadrantList<T = any> {
422
+ items: T[];
423
+ }
424
+ /**
425
+ * Options for constructing the KuadrantApiClient
426
+ */
427
+ type Options = {
428
+ discoveryApi: DiscoveryApi;
429
+ fetchApi: FetchApi;
430
+ identityApi: IdentityApi;
431
+ };
432
+ /**
433
+ * Kuadrant API interface defining all operations for managing
434
+ * API products, API keys, and related resources
435
+ */
436
+ interface KuadrantAPI {
437
+ /**
438
+ * Fetch all API key requests per user
439
+ * @returns Promise with list of all API key requests
440
+ */
441
+ getRequests(): Promise<KuadrantList<APIKey>>;
442
+ /**
443
+ * Fetch all API key requests
444
+ * @returns Promise with list of all API key requests
445
+ */
446
+ getAllRequests(): Promise<KuadrantList<APIKey>>;
447
+ /**
448
+ * Fetch API key requests for a specific namespace
449
+ * @param namespace - Kubernetes namespace
450
+ * @returns Promise with list of requests in the namespace
451
+ */
452
+ getRequestsByNamespace(namespace: string): Promise<KuadrantList<APIKey>>;
453
+ /**
454
+ * Fetch a single API key request
455
+ * @param namespace - API key request name
456
+ * @param name - Kubernetes namespace
457
+ * @returns Promise with the API key request
458
+ */
459
+ getRequest(namespace: string, name: string): Promise<APIKey>;
460
+ /**
461
+ * Create a new API key request
462
+ * @param request - APIKeyRequest specification
463
+ * @returns Promise with the created API key
464
+ */
465
+ createRequest(request: APIKeyRequest): Promise<APIKey>;
466
+ /**
467
+ * Update an existing API key request
468
+ * @param namespace - Kubernetes namespace
469
+ * @param name - API key request name
470
+ * @param patch - Partial API key spec with fields to update
471
+ * @returns Promise with the updated API key
472
+ */
473
+ updateRequest(namespace: string, name: string, patch: Partial<APIKeySpec>): Promise<APIKey>;
474
+ /**
475
+ * Delete an API key request
476
+ * @param namespace - Kubernetes namespace
477
+ * @param name - API key request name
478
+ * @returns Promise that resolves when deletion completes
479
+ */
480
+ deleteRequest(namespace: string, name: string): Promise<void>;
481
+ /**
482
+ * Approve an API key request
483
+ * @param namespace - Kubernetes namespace
484
+ * @param name - API key request name
485
+ * @param reviewedBy - Reviewed By User / System
486
+ * @returns Promise with the approved API key
487
+ */
488
+ approveRequest(namespace: string, name: string, reviewedBy: string): Promise<APIKey>;
489
+ /**
490
+ * Reject an API key request
491
+ * @param namespace - Kubernetes namespace
492
+ * @param name - API key request name
493
+ * @param reviewedBy - Reviewed By User / System
494
+ * @returns Promise with the rejected API key
495
+ */
496
+ rejectRequest(namespace: string, name: string, reviewedBy: string): Promise<APIKey>;
497
+ /**
498
+ * Bulk approve multiple API key requests
499
+ * @param requests - Array of namespace/name pairs to approve
500
+ * @param reviewedBy - Reviewed By User / System
501
+ * @returns Promise that resolves when all approvals complete
502
+ */
503
+ bulkApproveRequests(requests: Array<{
504
+ namespace: string;
505
+ name: string;
506
+ }>, reviewedBy: string): Promise<Array<BulkOperationResult>>;
507
+ /**
508
+ * Bulk reject multiple API key requests
509
+ * @param requests - Array of namespace/name pairs to reject
510
+ * @param reviewedBy - Reviewed By User / System
511
+ * @returns Promise that resolves when all rejections complete
512
+ */
513
+ bulkRejectRequests(requests: Array<{
514
+ namespace: string;
515
+ name: string;
516
+ }>, reviewedBy: string): Promise<Array<BulkOperationResult>>;
517
+ /**
518
+ * Fetch an API key resource
519
+ * @param namespace - Kubernetes namespace
520
+ * @param name - API key name
521
+ * @returns Promise with the API key
522
+ */
523
+ getApiKey(namespace: string, name: string): Promise<APIKey>;
524
+ /**
525
+ * Retrieve the secret value for an API key (one-time operation)
526
+ * @param namespace - Kubernetes namespace
527
+ * @param name - API key name
528
+ * @returns Promise with the secret value
529
+ */
530
+ getApiKeySecret(namespace: string, name: string): Promise<ExtractedSecret>;
531
+ /**
532
+ * Fetch all API products
533
+ * @returns Promise with list of all API products
534
+ */
535
+ getApiProducts(): Promise<KuadrantList<APIProduct>>;
536
+ /**
537
+ * Fetch a single API product
538
+ * @param namespace - Kubernetes namespace
539
+ * @param name - API product name
540
+ * @returns Promise with the API product
541
+ */
542
+ getApiProduct(namespace: string, name: string): Promise<APIProduct>;
543
+ /**
544
+ * Create a new API product
545
+ * @param product - API product specification
546
+ * @returns Promise with the created API product
547
+ */
548
+ createApiProduct(product: APIProduct): Promise<APIProduct>;
549
+ /**
550
+ * Update an existing API product
551
+ * @param namespace - Kubernetes namespace
552
+ * @param name - API product name
553
+ * @param patch - Partial API product spec with fields to update
554
+ * @returns Promise with the updated API product
555
+ */
556
+ updateApiProduct(namespace: string, name: string, patch: Partial<APIProduct>): Promise<APIProduct>;
557
+ /**
558
+ * Delete an API product
559
+ * @param namespace - Kubernetes namespace
560
+ * @param name - API product name
561
+ * @returns Promise that resolves when deletion completes
562
+ */
563
+ deleteApiProduct(namespace: string, name: string): Promise<void>;
564
+ /**
565
+ * Fetch all HTTPRoute(s)
566
+ * @returns Promise with list of all HTTP routes
567
+ */
568
+ getHttpRoutes(): Promise<K8sList>;
569
+ /**
570
+ * Fetch a specific HTTPRoute
571
+ * @param namespace - Kubernetes namespace
572
+ * @param name - HTTPRoute name
573
+ * @returns Promise with an HTTPRoute
574
+ */
575
+ getHttpRoute(namespace: string, name: string): Promise<K8sResource>;
576
+ /**
577
+ * Fetch all plan policies
578
+ * @returns Promise with list of all plan policies
579
+ */
580
+ getPlanPolicies(): Promise<KuadrantList<PlanPolicy>>;
581
+ /**
582
+ * Fetch all auth policies
583
+ * @returns Promise with list of all auth policies
584
+ */
585
+ getAuthPolicies(): Promise<KuadrantList<AuthPolicy>>;
586
+ /**
587
+ * Fetch all ratelimitpolicies
588
+ * @returns Promise with list of all ratelimitpolicies
589
+ */
590
+ getRateLimitPolicies(): Promise<KuadrantList<RateLimitPolicy>>;
591
+ }
592
+ /**
593
+ * API reference for the Kuadrant API
594
+ */
595
+ declare const kuadrantApiRef: _backstage_frontend_plugin_api.ApiRef<KuadrantAPI>;
596
+ /**
597
+ * Implementation of the Kuadrant API client
598
+ */
599
+ declare class KuadrantApiClient implements KuadrantAPI {
600
+ private readonly discoveryApi;
601
+ private readonly fetchApi;
602
+ constructor(options: Options);
603
+ /**
604
+ * Get the base URL for the backend API
605
+ */
606
+ private getBaseUrl;
607
+ /**
608
+ * Wrapper for GET requests with automatic retry logic
609
+ * Retries on network failures or 5xx errors with exponential backoff
610
+ */
611
+ private fetchWithRetry;
612
+ /**
613
+ * Wrapper for mutations (POST, PATCH, DELETE) without retry
614
+ * These operations are not retried to avoid duplicate side effects
615
+ */
616
+ private fetchWithoutRetry;
617
+ getRequests(): Promise<KuadrantList<APIKey>>;
618
+ getAllRequests(): Promise<KuadrantList<APIKey>>;
619
+ getRequestsByNamespace(namespace: string): Promise<KuadrantList<APIKey>>;
620
+ getRequest(namespace: string, name: string): Promise<APIKey>;
621
+ createRequest(request: APIKeyRequest): Promise<APIKey>;
622
+ updateRequest(namespace: string, name: string, patch: Partial<APIKeySpec>): Promise<APIKey>;
623
+ deleteRequest(namespace: string, name: string): Promise<void>;
624
+ approveRequest(namespace: string, name: string, reviewedBy?: string): Promise<APIKey>;
625
+ rejectRequest(namespace: string, name: string, reviewedBy?: string): Promise<APIKey>;
626
+ bulkApproveRequests(requests: Array<{
627
+ namespace: string;
628
+ name: string;
629
+ }>, reviewedBy: string): Promise<Array<BulkOperationResult>>;
630
+ bulkRejectRequests(requests: Array<{
631
+ namespace: string;
632
+ name: string;
633
+ }>, reviewedBy: string): Promise<Array<BulkOperationResult>>;
634
+ getApiKey(namespace: string, name: string): Promise<APIKey>;
635
+ getApiKeySecret(namespace: string, name: string): Promise<ExtractedSecret>;
636
+ getApiProducts(): Promise<KuadrantList<APIProduct>>;
637
+ getApiProduct(namespace: string, name: string): Promise<APIProduct>;
638
+ createApiProduct(product: APIProduct): Promise<APIProduct>;
639
+ updateApiProduct(namespace: string, name: string, patch: Partial<APIProduct>): Promise<APIProduct>;
640
+ deleteApiProduct(namespace: string, name: string): Promise<void>;
641
+ getHttpRoutes(): Promise<K8sList>;
642
+ getHttpRoute(namespace: string, name: string): Promise<K8sResource>;
643
+ getPlanPolicies(): Promise<KuadrantList<PlanPolicy>>;
644
+ getAuthPolicies(): Promise<KuadrantList<AuthPolicy>>;
645
+ getRateLimitPolicies(): Promise<KuadrantList<RateLimitPolicy>>;
646
+ }
647
+
648
+ /**
649
+ * API factory for the Kuadrant plugin
650
+ * This factory creates and configures the KuadrantApiClient with required dependencies
651
+ */
652
+ declare const kuadrantApiFactory: _backstage_frontend_plugin_api.ApiFactory<KuadrantAPI, KuadrantApiClient, {
653
+ discoveryApi: _backstage_frontend_plugin_api.DiscoveryApi;
654
+ fetchApi: _backstage_frontend_plugin_api.FetchApi;
655
+ identityApi: _backstage_frontend_plugin_api.IdentityApi;
656
+ }>;
657
+
658
+ export { ApiAccessCard, ApiKeyApprovalPage, ApiKeyDetailPage, ApiKeyManagementTab, ApiProductDetailPage, ApiProductInfoCard, ApiProductsPage, EntityKuadrantApiAccessCard, EntityKuadrantApiApprovalTab, EntityKuadrantApiKeyManagementTab, EntityKuadrantApiKeysContent, EntityKuadrantApiProductInfoContent, EntityKuadrantApiProductOpenApiAlert, type KuadrantAPI, KuadrantPage, MyApiKeysPage, kuadrantApiFactory, kuadrantApiKeyApprovePermission, kuadrantApiKeyCreatePermission, kuadrantApiKeyDeleteAllPermission, kuadrantApiKeyDeleteOwnPermission, kuadrantApiKeyReadAllPermission, kuadrantApiKeyReadOwnPermission, kuadrantApiKeyUpdateAllPermission, kuadrantApiKeyUpdateOwnPermission, kuadrantApiProductCreatePermission, kuadrantApiProductDeleteAllPermission, kuadrantApiProductDeleteOwnPermission, kuadrantApiProductListPermission, kuadrantApiProductReadAllPermission, kuadrantApiProductReadOwnPermission, kuadrantApiProductUpdateAllPermission, kuadrantApiProductUpdateOwnPermission, kuadrantApiRef, kuadrantAuthPolicyListPermission, kuadrantPermissions, kuadrantPlanPolicyCreatePermission, kuadrantPlanPolicyDeletePermission, kuadrantPlanPolicyListPermission, kuadrantPlanPolicyReadPermission, kuadrantPlanPolicyUpdatePermission, kuadrantPlugin, kuadrantRateLimitPolicyListPermission };
package/dist/index.esm.js CHANGED
@@ -2,5 +2,7 @@ export { ApiKeyApprovalPage, ApiKeyDetailPage, ApiProductDetailPage, ApiProducts
2
2
  export { ApiAccessCard } from './components/ApiAccessCard/ApiAccessCard.esm.js';
3
3
  export { ApiKeyManagementTab } from './components/ApiKeyManagementTab/ApiKeyManagementTab.esm.js';
4
4
  export { ApiProductInfoCard } from './components/ApiProductInfoCard/ApiProductInfoCard.esm.js';
5
- export { kuadrantApiKeyApprovePermission, kuadrantApiKeyCreatePermission, kuadrantApiKeyDeleteAllPermission, kuadrantApiKeyDeleteOwnPermission, kuadrantApiKeyReadAllPermission, kuadrantApiKeyReadOwnPermission, kuadrantApiKeyUpdateAllPermission, kuadrantApiKeyUpdateOwnPermission, kuadrantApiProductCreatePermission, kuadrantApiProductDeleteAllPermission, kuadrantApiProductDeleteOwnPermission, kuadrantApiProductListPermission, kuadrantApiProductReadAllPermission, kuadrantApiProductReadOwnPermission, kuadrantApiProductUpdateAllPermission, kuadrantApiProductUpdateOwnPermission, kuadrantPermissions, kuadrantPlanPolicyCreatePermission, kuadrantPlanPolicyDeletePermission, kuadrantPlanPolicyListPermission, kuadrantPlanPolicyReadPermission, kuadrantPlanPolicyUpdatePermission } from './permissions.esm.js';
5
+ export { kuadrantApiKeyApprovePermission, kuadrantApiKeyCreatePermission, kuadrantApiKeyDeleteAllPermission, kuadrantApiKeyDeleteOwnPermission, kuadrantApiKeyReadAllPermission, kuadrantApiKeyReadOwnPermission, kuadrantApiKeyUpdateAllPermission, kuadrantApiKeyUpdateOwnPermission, kuadrantApiProductCreatePermission, kuadrantApiProductDeleteAllPermission, kuadrantApiProductDeleteOwnPermission, kuadrantApiProductListPermission, kuadrantApiProductReadAllPermission, kuadrantApiProductReadOwnPermission, kuadrantApiProductUpdateAllPermission, kuadrantApiProductUpdateOwnPermission, kuadrantAuthPolicyListPermission, kuadrantPermissions, kuadrantPlanPolicyCreatePermission, kuadrantPlanPolicyDeletePermission, kuadrantPlanPolicyListPermission, kuadrantPlanPolicyReadPermission, kuadrantPlanPolicyUpdatePermission, kuadrantRateLimitPolicyListPermission } from './permissions.esm.js';
6
+ export { kuadrantApiRef } from './api.esm.js';
7
+ export { kuadrantApiFactory } from './apis.esm.js';
6
8
  //# sourceMappingURL=index.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
1
+ {"version":3,"file":"index.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -20,6 +20,14 @@ const kuadrantPlanPolicyListPermission = createPermission({
20
20
  name: "kuadrant.planpolicy.list",
21
21
  attributes: { action: "read" }
22
22
  });
23
+ const kuadrantAuthPolicyListPermission = createPermission({
24
+ name: "kuadrant.authpolicy.list",
25
+ attributes: { action: "read" }
26
+ });
27
+ const kuadrantRateLimitPolicyListPermission = createPermission({
28
+ name: "kuadrant.ratelimitpolicy.list",
29
+ attributes: { action: "read" }
30
+ });
23
31
  const kuadrantApiProductCreatePermission = createPermission({
24
32
  name: "kuadrant.apiproduct.create",
25
33
  attributes: { action: "create" }
@@ -106,8 +114,10 @@ const kuadrantPermissions = [
106
114
  kuadrantApiKeyUpdateAllPermission,
107
115
  kuadrantApiKeyDeleteOwnPermission,
108
116
  kuadrantApiKeyDeleteAllPermission,
109
- kuadrantApiKeyApprovePermission
117
+ kuadrantApiKeyApprovePermission,
118
+ kuadrantAuthPolicyListPermission,
119
+ kuadrantRateLimitPolicyListPermission
110
120
  ];
111
121
 
112
- export { kuadrantApiKeyApprovePermission, kuadrantApiKeyCreatePermission, kuadrantApiKeyDeleteAllPermission, kuadrantApiKeyDeleteOwnPermission, kuadrantApiKeyReadAllPermission, kuadrantApiKeyReadOwnPermission, kuadrantApiKeyUpdateAllPermission, kuadrantApiKeyUpdateOwnPermission, kuadrantApiProductCreatePermission, kuadrantApiProductDeleteAllPermission, kuadrantApiProductDeleteOwnPermission, kuadrantApiProductListPermission, kuadrantApiProductReadAllPermission, kuadrantApiProductReadOwnPermission, kuadrantApiProductUpdateAllPermission, kuadrantApiProductUpdateOwnPermission, kuadrantPermissions, kuadrantPlanPolicyCreatePermission, kuadrantPlanPolicyDeletePermission, kuadrantPlanPolicyListPermission, kuadrantPlanPolicyReadPermission, kuadrantPlanPolicyUpdatePermission };
122
+ export { kuadrantApiKeyApprovePermission, kuadrantApiKeyCreatePermission, kuadrantApiKeyDeleteAllPermission, kuadrantApiKeyDeleteOwnPermission, kuadrantApiKeyReadAllPermission, kuadrantApiKeyReadOwnPermission, kuadrantApiKeyUpdateAllPermission, kuadrantApiKeyUpdateOwnPermission, kuadrantApiProductCreatePermission, kuadrantApiProductDeleteAllPermission, kuadrantApiProductDeleteOwnPermission, kuadrantApiProductListPermission, kuadrantApiProductReadAllPermission, kuadrantApiProductReadOwnPermission, kuadrantApiProductUpdateAllPermission, kuadrantApiProductUpdateOwnPermission, kuadrantAuthPolicyListPermission, kuadrantPermissions, kuadrantPlanPolicyCreatePermission, kuadrantPlanPolicyDeletePermission, kuadrantPlanPolicyListPermission, kuadrantPlanPolicyReadPermission, kuadrantPlanPolicyUpdatePermission, kuadrantRateLimitPolicyListPermission };
113
123
  //# sourceMappingURL=permissions.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"permissions.esm.js","sources":["../src/permissions.ts"],"sourcesContent":["import { createPermission } from '@backstage/plugin-permission-common';\n\n/**\n * permission definitions for the kuadrant plugin\n *\n * these permissions control access to kuadrant resources and operations.\n * they must match the permissions defined in the backend plugin.\n *\n * permission types:\n * - BasicPermission: standard permission that applies globally\n * - ResourcePermission: permission scoped to specific resource types (e.g., apiproduct)\n *\n * permission patterns:\n * - `.create` - create new resources\n * - `.read` - read resource details\n * - `.read.own` - read only resources owned by the user\n * - `.read.all` - read all resources regardless of ownership\n * - `.update` - modify existing resources\n * - `.delete` - delete resources\n * - `.delete.own` - delete only resources owned by the user\n * - `.delete.all` - delete any resource regardless of ownership\n * - `.list` - list/view collections of resources\n */\n\n// planpolicy permissions\nexport const kuadrantPlanPolicyCreatePermission = createPermission({\n name: 'kuadrant.planpolicy.create',\n attributes: { action: 'create' },\n});\n\nexport const kuadrantPlanPolicyReadPermission = createPermission({\n name: 'kuadrant.planpolicy.read',\n attributes: { action: 'read' },\n});\n\nexport const kuadrantPlanPolicyUpdatePermission = createPermission({\n name: 'kuadrant.planpolicy.update',\n attributes: { action: 'update' },\n});\n\nexport const kuadrantPlanPolicyDeletePermission = createPermission({\n name: 'kuadrant.planpolicy.delete',\n attributes: { action: 'delete' },\n});\n\nexport const kuadrantPlanPolicyListPermission = createPermission({\n name: 'kuadrant.planpolicy.list',\n attributes: { action: 'read' },\n});\n\n// apiproduct permissions\n\n/**\n * permission to create new API products\n * granted to api owners and admins\n */\nexport const kuadrantApiProductCreatePermission = createPermission({\n name: 'kuadrant.apiproduct.create',\n attributes: { action: 'create' },\n});\n\n/**\n * permission to read API products owned by the current user\n * for api owners to view their own products\n */\nexport const kuadrantApiProductReadOwnPermission = createPermission({\n name: 'kuadrant.apiproduct.read.own',\n attributes: { action: 'read' },\n});\n\n/**\n * permission to read all API products regardless of ownership\n * for platform engineers/admins who need to view all products\n */\nexport const kuadrantApiProductReadAllPermission = createPermission({\n name: 'kuadrant.apiproduct.read.all',\n attributes: { action: 'read' },\n});\n\n/**\n * permission to update API products owned by the current user\n * for api owners to modify their own products\n */\nexport const kuadrantApiProductUpdateOwnPermission = createPermission({\n name: 'kuadrant.apiproduct.update.own',\n attributes: { action: 'update' },\n});\n\n/**\n * permission to update any API product regardless of ownership\n * for platform engineers/admins\n */\nexport const kuadrantApiProductUpdateAllPermission = createPermission({\n name: 'kuadrant.apiproduct.update.all',\n attributes: { action: 'update' },\n});\n\n/**\n * permission to delete API products owned by the current user\n * for api owners to remove their own products\n */\nexport const kuadrantApiProductDeleteOwnPermission = createPermission({\n name: 'kuadrant.apiproduct.delete.own',\n attributes: { action: 'delete' },\n});\n\n/**\n * permission to delete any API product regardless of ownership\n * for platform engineers/admins\n */\nexport const kuadrantApiProductDeleteAllPermission = createPermission({\n name: 'kuadrant.apiproduct.delete.all',\n attributes: { action: 'delete' },\n});\n\n/**\n * permission to list API products\n * backend filters results based on .own vs .all read permissions\n */\nexport const kuadrantApiProductListPermission = createPermission({\n name: 'kuadrant.apiproduct.list',\n attributes: { action: 'read' },\n});\n\n// apikey permissions\n\n/**\n * permission to create API keys (request API access)\n *\n * this is a ResourcePermission scoped to 'apiproduct', allowing\n * fine-grained control over which API products users can request access to.\n *\n * use in frontend: useKuadrantPermission(kuadrantApiKeyCreatePermission)\n * use in backend with resource: { permission, resourceRef: 'apiproduct:namespace/name' }\n */\nexport const kuadrantApiKeyCreatePermission = createPermission({\n name: 'kuadrant.apikey.create',\n attributes: { action: 'create' },\n resourceType: 'apiproduct',\n});\n\n/**\n * permission to read API keys owned by the current user\n * allows users to view their own API keys and request history\n */\nexport const kuadrantApiKeyReadOwnPermission = createPermission({\n name: 'kuadrant.apikey.read.own',\n attributes: { action: 'read' },\n});\n\n/**\n * permission to read all API keys regardless of ownership\n * for platform engineers/admins who need to view the approval queue and audit keys\n */\nexport const kuadrantApiKeyReadAllPermission = createPermission({\n name: 'kuadrant.apikey.read.all',\n attributes: { action: 'read' },\n});\n\n/**\n * permission to update API keys owned by the current user\n * allows users to edit their own pending requests (change plan tier, use case)\n */\nexport const kuadrantApiKeyUpdateOwnPermission = createPermission({\n name: 'kuadrant.apikey.update.own',\n attributes: { action: 'update' },\n});\n\n/**\n * permission to update any API key regardless of ownership\n * typically granted to API owners and platform engineers for approving/rejecting requests\n */\nexport const kuadrantApiKeyUpdateAllPermission = createPermission({\n name: 'kuadrant.apikey.update.all',\n attributes: { action: 'update' },\n});\n\n/**\n * permission to delete API keys owned by the current user\n * allows users to cancel their own requests or revoke their own access\n */\nexport const kuadrantApiKeyDeleteOwnPermission = createPermission({\n name: 'kuadrant.apikey.delete.own',\n attributes: { action: 'delete' },\n});\n\n/**\n * permission to delete any API key regardless of ownership\n * for platform engineers/admins who need to revoke access\n */\nexport const kuadrantApiKeyDeleteAllPermission = createPermission({\n name: 'kuadrant.apikey.delete.all',\n attributes: { action: 'delete' },\n});\n\n/**\n * permission to approve/reject API key requests\n * grants access to the approval queue - for API owners and admins only\n * separate from update.own which consumers use to edit their pending requests\n */\nexport const kuadrantApiKeyApprovePermission = createPermission({\n name: 'kuadrant.apikey.approve',\n attributes: { action: 'update' },\n});\n\nexport const kuadrantPermissions = [\n kuadrantPlanPolicyCreatePermission,\n kuadrantPlanPolicyReadPermission,\n kuadrantPlanPolicyUpdatePermission,\n kuadrantPlanPolicyDeletePermission,\n kuadrantPlanPolicyListPermission,\n kuadrantApiProductCreatePermission,\n kuadrantApiProductReadOwnPermission,\n kuadrantApiProductReadAllPermission,\n kuadrantApiProductUpdateOwnPermission,\n kuadrantApiProductUpdateAllPermission,\n kuadrantApiProductDeleteOwnPermission,\n kuadrantApiProductDeleteAllPermission,\n kuadrantApiProductListPermission,\n kuadrantApiKeyCreatePermission,\n kuadrantApiKeyReadOwnPermission,\n kuadrantApiKeyReadAllPermission,\n kuadrantApiKeyUpdateOwnPermission,\n kuadrantApiKeyUpdateAllPermission,\n kuadrantApiKeyDeleteOwnPermission,\n kuadrantApiKeyDeleteAllPermission,\n kuadrantApiKeyApprovePermission,\n];\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"permissions.esm.js","sources":["../src/permissions.ts"],"sourcesContent":["import { createPermission } from '@backstage/plugin-permission-common';\n\n/**\n * permission definitions for the kuadrant plugin\n *\n * these permissions control access to kuadrant resources and operations.\n * they must match the permissions defined in the backend plugin.\n *\n * permission types:\n * - BasicPermission: standard permission that applies globally\n * - ResourcePermission: permission scoped to specific resource types (e.g., apiproduct)\n *\n * permission patterns:\n * - `.create` - create new resources\n * - `.read` - read resource details\n * - `.read.own` - read only resources owned by the user\n * - `.read.all` - read all resources regardless of ownership\n * - `.update` - modify existing resources\n * - `.delete` - delete resources\n * - `.delete.own` - delete only resources owned by the user\n * - `.delete.all` - delete any resource regardless of ownership\n * - `.list` - list/view collections of resources\n */\n\n// planpolicy permissions\nexport const kuadrantPlanPolicyCreatePermission = createPermission({\n name: 'kuadrant.planpolicy.create',\n attributes: { action: 'create' },\n});\n\nexport const kuadrantPlanPolicyReadPermission = createPermission({\n name: 'kuadrant.planpolicy.read',\n attributes: { action: 'read' },\n});\n\nexport const kuadrantPlanPolicyUpdatePermission = createPermission({\n name: 'kuadrant.planpolicy.update',\n attributes: { action: 'update' },\n});\n\nexport const kuadrantPlanPolicyDeletePermission = createPermission({\n name: 'kuadrant.planpolicy.delete',\n attributes: { action: 'delete' },\n});\n\nexport const kuadrantPlanPolicyListPermission = createPermission({\n name: 'kuadrant.planpolicy.list',\n attributes: { action: 'read' },\n});\n\n// authpolicy permissions\nexport const kuadrantAuthPolicyListPermission = createPermission({\n name: 'kuadrant.authpolicy.list',\n attributes: { action: 'read' },\n});\n\n// ratelimitpolicy permissions\nexport const kuadrantRateLimitPolicyListPermission = createPermission({\n name: 'kuadrant.ratelimitpolicy.list',\n attributes: { action: 'read' },\n});\n\n// apiproduct permissions\n\n/**\n * permission to create new API products\n * granted to api owners and admins\n */\nexport const kuadrantApiProductCreatePermission = createPermission({\n name: 'kuadrant.apiproduct.create',\n attributes: { action: 'create' },\n});\n\n/**\n * permission to read API products owned by the current user\n * for api owners to view their own products\n */\nexport const kuadrantApiProductReadOwnPermission = createPermission({\n name: 'kuadrant.apiproduct.read.own',\n attributes: { action: 'read' },\n});\n\n/**\n * permission to read all API products regardless of ownership\n * for platform engineers/admins who need to view all products\n */\nexport const kuadrantApiProductReadAllPermission = createPermission({\n name: 'kuadrant.apiproduct.read.all',\n attributes: { action: 'read' },\n});\n\n/**\n * permission to update API products owned by the current user\n * for api owners to modify their own products\n */\nexport const kuadrantApiProductUpdateOwnPermission = createPermission({\n name: 'kuadrant.apiproduct.update.own',\n attributes: { action: 'update' },\n});\n\n/**\n * permission to update any API product regardless of ownership\n * for platform engineers/admins\n */\nexport const kuadrantApiProductUpdateAllPermission = createPermission({\n name: 'kuadrant.apiproduct.update.all',\n attributes: { action: 'update' },\n});\n\n/**\n * permission to delete API products owned by the current user\n * for api owners to remove their own products\n */\nexport const kuadrantApiProductDeleteOwnPermission = createPermission({\n name: 'kuadrant.apiproduct.delete.own',\n attributes: { action: 'delete' },\n});\n\n/**\n * permission to delete any API product regardless of ownership\n * for platform engineers/admins\n */\nexport const kuadrantApiProductDeleteAllPermission = createPermission({\n name: 'kuadrant.apiproduct.delete.all',\n attributes: { action: 'delete' },\n});\n\n/**\n * permission to list API products\n * backend filters results based on .own vs .all read permissions\n */\nexport const kuadrantApiProductListPermission = createPermission({\n name: 'kuadrant.apiproduct.list',\n attributes: { action: 'read' },\n});\n\n// apikey permissions\n\n/**\n * permission to create API keys (request API access)\n *\n * this is a ResourcePermission scoped to 'apiproduct', allowing\n * fine-grained control over which API products users can request access to.\n *\n * use in frontend: useKuadrantPermission(kuadrantApiKeyCreatePermission)\n * use in backend with resource: { permission, resourceRef: 'apiproduct:namespace/name' }\n */\nexport const kuadrantApiKeyCreatePermission = createPermission({\n name: 'kuadrant.apikey.create',\n attributes: { action: 'create' },\n resourceType: 'apiproduct',\n});\n\n/**\n * permission to read API keys owned by the current user\n * allows users to view their own API keys and request history\n */\nexport const kuadrantApiKeyReadOwnPermission = createPermission({\n name: 'kuadrant.apikey.read.own',\n attributes: { action: 'read' },\n});\n\n/**\n * permission to read all API keys regardless of ownership\n * for platform engineers/admins who need to view the approval queue and audit keys\n */\nexport const kuadrantApiKeyReadAllPermission = createPermission({\n name: 'kuadrant.apikey.read.all',\n attributes: { action: 'read' },\n});\n\n/**\n * permission to update API keys owned by the current user\n * allows users to edit their own pending requests (change plan tier, use case)\n */\nexport const kuadrantApiKeyUpdateOwnPermission = createPermission({\n name: 'kuadrant.apikey.update.own',\n attributes: { action: 'update' },\n});\n\n/**\n * permission to update any API key regardless of ownership\n * typically granted to API owners and platform engineers for approving/rejecting requests\n */\nexport const kuadrantApiKeyUpdateAllPermission = createPermission({\n name: 'kuadrant.apikey.update.all',\n attributes: { action: 'update' },\n});\n\n/**\n * permission to delete API keys owned by the current user\n * allows users to cancel their own requests or revoke their own access\n */\nexport const kuadrantApiKeyDeleteOwnPermission = createPermission({\n name: 'kuadrant.apikey.delete.own',\n attributes: { action: 'delete' },\n});\n\n/**\n * permission to delete any API key regardless of ownership\n * for platform engineers/admins who need to revoke access\n */\nexport const kuadrantApiKeyDeleteAllPermission = createPermission({\n name: 'kuadrant.apikey.delete.all',\n attributes: { action: 'delete' },\n});\n\n/**\n * permission to approve/reject API key requests\n * grants access to the approval queue - for API owners and admins only\n * separate from update.own which consumers use to edit their pending requests\n */\nexport const kuadrantApiKeyApprovePermission = createPermission({\n name: 'kuadrant.apikey.approve',\n attributes: { action: 'update' },\n});\n\nexport const kuadrantPermissions = [\n kuadrantPlanPolicyCreatePermission,\n kuadrantPlanPolicyReadPermission,\n kuadrantPlanPolicyUpdatePermission,\n kuadrantPlanPolicyDeletePermission,\n kuadrantPlanPolicyListPermission,\n kuadrantApiProductCreatePermission,\n kuadrantApiProductReadOwnPermission,\n kuadrantApiProductReadAllPermission,\n kuadrantApiProductUpdateOwnPermission,\n kuadrantApiProductUpdateAllPermission,\n kuadrantApiProductDeleteOwnPermission,\n kuadrantApiProductDeleteAllPermission,\n kuadrantApiProductListPermission,\n kuadrantApiKeyCreatePermission,\n kuadrantApiKeyReadOwnPermission,\n kuadrantApiKeyReadAllPermission,\n kuadrantApiKeyUpdateOwnPermission,\n kuadrantApiKeyUpdateAllPermission,\n kuadrantApiKeyDeleteOwnPermission,\n kuadrantApiKeyDeleteAllPermission,\n kuadrantApiKeyApprovePermission,\n kuadrantAuthPolicyListPermission,\n kuadrantRateLimitPolicyListPermission,\n];\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ const getPolicyForRoute = (policies, routeNamespace, routeName) => {
2
+ if (!policies) return null;
3
+ return policies.find((pp) => {
4
+ const ref = pp.spec.targetRef;
5
+ const targetNamespace = ref?.namespace ?? pp.metadata.namespace;
6
+ return ref?.kind === "HTTPRoute" && ref?.name === routeName && targetNamespace === routeNamespace;
7
+ }) || null;
8
+ };
9
+
10
+ export { getPolicyForRoute };
11
+ //# sourceMappingURL=policies.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policies.esm.js","sources":["../../src/utils/policies.ts"],"sourcesContent":["/**\n * Find a policy that targets a specific APIProduct\n *\n * @param policies - Array of policies with targetRef\n * @param routeNamespace - Namespace of the target HTTPRoute\n * @param routeName - Name of the target HTTPRoute\n * @returns The matching policy or null if not found\n *\n * @remarks\n * The function matches a policy if:\n * - The targetRef.kind is 'HTTPRoute'\n * - The targetRef.name matches the routeName parameter\n * - The targetRef.namespace (or policy's metadata.namespace if not specified) matches the routeNamespace parameter\n */\nexport const getPolicyForRoute = (\n policies: any[] | undefined,\n routeNamespace: string,\n routeName: string,\n) => {\n if (!policies) return null;\n\n return policies.find((pp: any) => {\n const ref = pp.spec.targetRef;\n const targetNamespace = ref?.namespace ?? pp.metadata.namespace;\n\n return (\n ref?.kind === 'HTTPRoute' &&\n ref?.name === routeName &&\n targetNamespace === routeNamespace\n );\n }) || null;\n};\n"],"names":[],"mappings":"AAcO,MAAM,iBAAoB,GAAA,CAC/B,QACA,EAAA,cAAA,EACA,SACG,KAAA;AACH,EAAI,IAAA,CAAC,UAAiB,OAAA,IAAA;AAEtB,EAAO,OAAA,QAAA,CAAS,IAAK,CAAA,CAAC,EAAY,KAAA;AAChC,IAAM,MAAA,GAAA,GAAM,GAAG,IAAK,CAAA,SAAA;AACpB,IAAA,MAAM,eAAkB,GAAA,GAAA,EAAK,SAAa,IAAA,EAAA,CAAG,QAAS,CAAA,SAAA;AAEtD,IAAA,OACE,KAAK,IAAS,KAAA,WAAA,IACd,GAAK,EAAA,IAAA,KAAS,aACd,eAAoB,KAAA,cAAA;AAAA,GAEvB,CAAK,IAAA,IAAA;AACR;;;;"}