freelens-cert-manager 0.1.1 → 0.2.1
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.
- package/dist/renderer.js +192 -50
- package/dist/renderer.js.map +1 -1
- package/package.json +1 -1
package/dist/renderer.js
CHANGED
|
@@ -292,6 +292,76 @@ _init = __decoratorStart(_a);
|
|
|
292
292
|
_showExpiredCerts = /* @__PURE__ */ new WeakMap();
|
|
293
293
|
__decorateElement(_init, 4, "showExpiredCerts", _showExpiredCerts_dec, CertManagerPreferencesStore, _showExpiredCerts);
|
|
294
294
|
__decoratorMetadata(_init, CertManagerPreferencesStore);
|
|
295
|
+
// src/common/api/accessors.ts
|
|
296
|
+
function rawSpec(obj) {
|
|
297
|
+
return obj.spec ?? {};
|
|
298
|
+
}
|
|
299
|
+
function rawStatus(obj) {
|
|
300
|
+
return obj.status ?? {};
|
|
301
|
+
}
|
|
302
|
+
function conditionReady(conditions) {
|
|
303
|
+
return (conditions ?? []).some((c) => c.type === "Ready" && c.status === "True");
|
|
304
|
+
}
|
|
305
|
+
function getCertSpec(obj) {
|
|
306
|
+
return rawSpec(obj);
|
|
307
|
+
}
|
|
308
|
+
function getCertStatus(obj) {
|
|
309
|
+
return rawStatus(obj);
|
|
310
|
+
}
|
|
311
|
+
function isCertReady(obj) {
|
|
312
|
+
return conditionReady(getCertStatus(obj).conditions);
|
|
313
|
+
}
|
|
314
|
+
function getIssuerSpec(obj) {
|
|
315
|
+
return rawSpec(obj);
|
|
316
|
+
}
|
|
317
|
+
function getIssuerStatus(obj) {
|
|
318
|
+
return rawStatus(obj);
|
|
319
|
+
}
|
|
320
|
+
function isIssuerReady(obj) {
|
|
321
|
+
return conditionReady(getIssuerStatus(obj).conditions);
|
|
322
|
+
}
|
|
323
|
+
function getIssuerType(obj) {
|
|
324
|
+
const spec = getIssuerSpec(obj);
|
|
325
|
+
if (spec.acme) return "ACME";
|
|
326
|
+
if (spec.ca) return "CA";
|
|
327
|
+
if (spec.selfSigned) return "SelfSigned";
|
|
328
|
+
if (spec.vault) return "Vault";
|
|
329
|
+
if (spec.venafi) return "Venafi";
|
|
330
|
+
return "Unknown";
|
|
331
|
+
}
|
|
332
|
+
function getClusterIssuerSpec(obj) {
|
|
333
|
+
return rawSpec(obj);
|
|
334
|
+
}
|
|
335
|
+
function getClusterIssuerStatus(obj) {
|
|
336
|
+
return rawStatus(obj);
|
|
337
|
+
}
|
|
338
|
+
function isClusterIssuerReady(obj) {
|
|
339
|
+
return conditionReady(getClusterIssuerStatus(obj).conditions);
|
|
340
|
+
}
|
|
341
|
+
function getClusterIssuerType(obj) {
|
|
342
|
+
const spec = getClusterIssuerSpec(obj);
|
|
343
|
+
if (spec.acme) return "ACME";
|
|
344
|
+
if (spec.ca) return "CA";
|
|
345
|
+
if (spec.selfSigned) return "SelfSigned";
|
|
346
|
+
if (spec.vault) return "Vault";
|
|
347
|
+
if (spec.venafi) return "Venafi";
|
|
348
|
+
return "Unknown";
|
|
349
|
+
}
|
|
350
|
+
function getCertReqSpec(obj) {
|
|
351
|
+
return rawSpec(obj);
|
|
352
|
+
}
|
|
353
|
+
function getCertReqStatus(obj) {
|
|
354
|
+
return rawStatus(obj);
|
|
355
|
+
}
|
|
356
|
+
function isCertReqReady(obj) {
|
|
357
|
+
return conditionReady(getCertReqStatus(obj).conditions);
|
|
358
|
+
}
|
|
359
|
+
function isCertReqDenied(obj) {
|
|
360
|
+
return (getCertReqStatus(obj).conditions ?? []).some((c) => c.type === "Denied" && c.status === "True");
|
|
361
|
+
}
|
|
362
|
+
function isCertReqApproved(obj) {
|
|
363
|
+
return (getCertReqStatus(obj).conditions ?? []).some((c) => c.type === "Approved" && c.status === "True");
|
|
364
|
+
}
|
|
295
365
|
// \0freelens-host:react/jsx-runtime
|
|
296
366
|
var hostModule$1 = globalThis.FreelensExtensionApi.ReactJsxRuntime;
|
|
297
367
|
var jsx = /* @__PURE__ */ Reflect.get(hostModule$1, "jsx");
|
|
@@ -302,53 +372,58 @@ var jsxs = /* @__PURE__ */ Reflect.get(hostModule$1, "jsxs");
|
|
|
302
372
|
* Co-Author: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
303
373
|
*/
|
|
304
374
|
function CertificateDetails({ object: cert }) {
|
|
375
|
+
const spec = getCertSpec(cert);
|
|
376
|
+
const status = getCertStatus(cert);
|
|
377
|
+
const ready = isCertReady(cert);
|
|
378
|
+
const readyMessage = (status.conditions ?? []).find((c) => c.type === "Ready")?.message;
|
|
379
|
+
const dnsNames = spec.dnsNames ?? [];
|
|
305
380
|
return /* @__PURE__ */ jsxs(Renderer.Component.DrawerItem, {
|
|
306
381
|
name: "Certificate Details",
|
|
307
382
|
labelsOnly: true,
|
|
308
383
|
children: [
|
|
309
384
|
/* @__PURE__ */ jsx(Renderer.Component.DrawerItem, {
|
|
310
385
|
name: "Secret Name",
|
|
311
|
-
children:
|
|
386
|
+
children: spec.secretName ?? "-"
|
|
312
387
|
}),
|
|
313
388
|
/* @__PURE__ */ jsx(Renderer.Component.DrawerItem, {
|
|
314
389
|
name: "Common Name",
|
|
315
|
-
children:
|
|
390
|
+
children: spec.commonName ?? "-"
|
|
316
391
|
}),
|
|
317
392
|
/* @__PURE__ */ jsx(Renderer.Component.DrawerItem, {
|
|
318
393
|
name: "DNS Names",
|
|
319
|
-
children:
|
|
394
|
+
children: dnsNames.length > 0 ? dnsNames.join(", ") : "-"
|
|
320
395
|
}),
|
|
321
396
|
/* @__PURE__ */ jsx(Renderer.Component.DrawerItem, {
|
|
322
397
|
name: "Issuer",
|
|
323
|
-
children:
|
|
398
|
+
children: spec.issuerRef ? `${spec.issuerRef.kind}/${spec.issuerRef.name}` : "-"
|
|
324
399
|
}),
|
|
325
400
|
/* @__PURE__ */ jsx(Renderer.Component.DrawerItem, {
|
|
326
401
|
name: "Duration",
|
|
327
|
-
children:
|
|
402
|
+
children: spec.duration ?? "-"
|
|
328
403
|
}),
|
|
329
404
|
/* @__PURE__ */ jsx(Renderer.Component.DrawerItem, {
|
|
330
405
|
name: "Renew Before",
|
|
331
|
-
children:
|
|
406
|
+
children: spec.renewBefore ?? "-"
|
|
332
407
|
}),
|
|
333
408
|
/* @__PURE__ */ jsx(Renderer.Component.DrawerItem, {
|
|
334
409
|
name: "Not Before",
|
|
335
|
-
children:
|
|
410
|
+
children: status.notBefore ?? "-"
|
|
336
411
|
}),
|
|
337
412
|
/* @__PURE__ */ jsx(Renderer.Component.DrawerItem, {
|
|
338
413
|
name: "Not After (Expires)",
|
|
339
|
-
children:
|
|
414
|
+
children: status.notAfter ?? "-"
|
|
340
415
|
}),
|
|
341
416
|
/* @__PURE__ */ jsx(Renderer.Component.DrawerItem, {
|
|
342
417
|
name: "Renewal Time",
|
|
343
|
-
children:
|
|
418
|
+
children: status.renewalTime ?? "-"
|
|
344
419
|
}),
|
|
345
420
|
/* @__PURE__ */ jsx(Renderer.Component.DrawerItem, {
|
|
346
421
|
name: "Status",
|
|
347
|
-
children:
|
|
422
|
+
children: ready ? "✓ Ready" : "✗ Not Ready"
|
|
348
423
|
}),
|
|
349
|
-
|
|
424
|
+
readyMessage && /* @__PURE__ */ jsx(Renderer.Component.DrawerItem, {
|
|
350
425
|
name: "Message",
|
|
351
|
-
children:
|
|
426
|
+
children: readyMessage
|
|
352
427
|
})
|
|
353
428
|
]
|
|
354
429
|
});
|
|
@@ -359,41 +434,45 @@ function CertificateDetails({ object: cert }) {
|
|
|
359
434
|
* Co-Author: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
360
435
|
*/
|
|
361
436
|
function CertificateRequestDetails({ object: cr }) {
|
|
437
|
+
const spec = getCertReqSpec(cr);
|
|
438
|
+
const status = getCertReqStatus(cr);
|
|
439
|
+
const usages = spec.usages ?? [];
|
|
440
|
+
const readyMessage = (status.conditions ?? []).find((c) => c.type === "Ready")?.message;
|
|
362
441
|
return /* @__PURE__ */ jsxs(Renderer.Component.DrawerItem, {
|
|
363
442
|
name: "CertificateRequest Details",
|
|
364
443
|
labelsOnly: true,
|
|
365
444
|
children: [
|
|
366
445
|
/* @__PURE__ */ jsx(Renderer.Component.DrawerItem, {
|
|
367
446
|
name: "Issuer",
|
|
368
|
-
children:
|
|
447
|
+
children: spec.issuerRef ? `${spec.issuerRef.kind}/${spec.issuerRef.name}` : "-"
|
|
369
448
|
}),
|
|
370
449
|
/* @__PURE__ */ jsx(Renderer.Component.DrawerItem, {
|
|
371
450
|
name: "Duration",
|
|
372
|
-
children:
|
|
451
|
+
children: spec.duration ?? "-"
|
|
373
452
|
}),
|
|
374
453
|
/* @__PURE__ */ jsx(Renderer.Component.DrawerItem, {
|
|
375
454
|
name: "Is CA",
|
|
376
|
-
children:
|
|
455
|
+
children: spec.isCA ? "Yes" : "No"
|
|
377
456
|
}),
|
|
378
|
-
|
|
457
|
+
usages.length > 0 && /* @__PURE__ */ jsx(Renderer.Component.DrawerItem, {
|
|
379
458
|
name: "Usages",
|
|
380
|
-
children:
|
|
459
|
+
children: usages.join(", ")
|
|
381
460
|
}),
|
|
382
461
|
/* @__PURE__ */ jsx(Renderer.Component.DrawerItem, {
|
|
383
462
|
name: "Status",
|
|
384
|
-
children: cr
|
|
463
|
+
children: isCertReqReady(cr) ? "✓ Ready" : isCertReqDenied(cr) ? "✗ Denied" : "⏳ Pending"
|
|
385
464
|
}),
|
|
386
465
|
/* @__PURE__ */ jsx(Renderer.Component.DrawerItem, {
|
|
387
466
|
name: "Approved",
|
|
388
|
-
children: cr
|
|
467
|
+
children: isCertReqApproved(cr) ? "Yes" : "No"
|
|
389
468
|
}),
|
|
390
|
-
|
|
469
|
+
status.failureTime && /* @__PURE__ */ jsx(Renderer.Component.DrawerItem, {
|
|
391
470
|
name: "Failed At",
|
|
392
|
-
children:
|
|
471
|
+
children: status.failureTime
|
|
393
472
|
}),
|
|
394
|
-
|
|
473
|
+
readyMessage && /* @__PURE__ */ jsx(Renderer.Component.DrawerItem, {
|
|
395
474
|
name: "Message",
|
|
396
|
-
children:
|
|
475
|
+
children: readyMessage
|
|
397
476
|
})
|
|
398
477
|
]
|
|
399
478
|
});
|
|
@@ -404,13 +483,14 @@ function CertificateRequestDetails({ object: cr }) {
|
|
|
404
483
|
* Co-Author: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
405
484
|
*/
|
|
406
485
|
function ClusterIssuerDetails({ object: issuer }) {
|
|
486
|
+
const readyMessage = (getClusterIssuerStatus(issuer).conditions ?? []).find((c) => c.type === "Ready")?.message;
|
|
407
487
|
return /* @__PURE__ */ jsxs(Renderer.Component.DrawerItem, {
|
|
408
488
|
name: "ClusterIssuer Details",
|
|
409
489
|
labelsOnly: true,
|
|
410
490
|
children: [
|
|
411
491
|
/* @__PURE__ */ jsx(Renderer.Component.DrawerItem, {
|
|
412
492
|
name: "Type",
|
|
413
|
-
children: issuer
|
|
493
|
+
children: getClusterIssuerType(issuer)
|
|
414
494
|
}),
|
|
415
495
|
/* @__PURE__ */ jsx(Renderer.Component.DrawerItem, {
|
|
416
496
|
name: "Scope",
|
|
@@ -418,11 +498,11 @@ function ClusterIssuerDetails({ object: issuer }) {
|
|
|
418
498
|
}),
|
|
419
499
|
/* @__PURE__ */ jsx(Renderer.Component.DrawerItem, {
|
|
420
500
|
name: "Status",
|
|
421
|
-
children: issuer
|
|
501
|
+
children: isClusterIssuerReady(issuer) ? "✓ Ready" : "✗ Not Ready"
|
|
422
502
|
}),
|
|
423
|
-
|
|
503
|
+
readyMessage && /* @__PURE__ */ jsx(Renderer.Component.DrawerItem, {
|
|
424
504
|
name: "Message",
|
|
425
|
-
children:
|
|
505
|
+
children: readyMessage
|
|
426
506
|
})
|
|
427
507
|
]
|
|
428
508
|
});
|
|
@@ -433,21 +513,22 @@ function ClusterIssuerDetails({ object: issuer }) {
|
|
|
433
513
|
* Co-Author: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
434
514
|
*/
|
|
435
515
|
function IssuerDetails({ object: issuer }) {
|
|
516
|
+
const readyMessage = (getIssuerStatus(issuer).conditions ?? []).find((c) => c.type === "Ready")?.message;
|
|
436
517
|
return /* @__PURE__ */ jsxs(Renderer.Component.DrawerItem, {
|
|
437
518
|
name: "Issuer Details",
|
|
438
519
|
labelsOnly: true,
|
|
439
520
|
children: [
|
|
440
521
|
/* @__PURE__ */ jsx(Renderer.Component.DrawerItem, {
|
|
441
522
|
name: "Type",
|
|
442
|
-
children: issuer
|
|
523
|
+
children: getIssuerType(issuer)
|
|
443
524
|
}),
|
|
444
525
|
/* @__PURE__ */ jsx(Renderer.Component.DrawerItem, {
|
|
445
526
|
name: "Status",
|
|
446
|
-
children: issuer
|
|
527
|
+
children: isIssuerReady(issuer) ? "✓ Ready" : "✗ Not Ready"
|
|
447
528
|
}),
|
|
448
|
-
|
|
529
|
+
readyMessage && /* @__PURE__ */ jsx(Renderer.Component.DrawerItem, {
|
|
449
530
|
name: "Message",
|
|
450
|
-
children:
|
|
531
|
+
children: readyMessage
|
|
451
532
|
})
|
|
452
533
|
]
|
|
453
534
|
});
|
|
@@ -469,7 +550,7 @@ function CertificateDeleteCascadeMenuItem({ object: cert }) {
|
|
|
469
550
|
function handleDeleteCascade() {
|
|
470
551
|
const ns = cert.getNs();
|
|
471
552
|
const name = cert.getName();
|
|
472
|
-
const secretName = cert.secretName;
|
|
553
|
+
const secretName = getCertSpec(cert).secretName;
|
|
473
554
|
Renderer.Component.ConfirmDialog.open({
|
|
474
555
|
message: secretName ? `Delete Certificate "${name}" and its managed Secret "${secretName}"?` : `Delete Certificate "${name}"?`,
|
|
475
556
|
labelOk: "Delete",
|
|
@@ -532,13 +613,47 @@ function CertificateForceRenewMenuItem({ object: cert }) {
|
|
|
532
613
|
children: "Force Renew"
|
|
533
614
|
});
|
|
534
615
|
}
|
|
616
|
+
// src/renderer/pages/not-installed.tsx
|
|
617
|
+
/**
|
|
618
|
+
* Author: Maifee Ul Asad <maifeeulasad@gmail.com>
|
|
619
|
+
* Co-Author: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
620
|
+
*/
|
|
621
|
+
function NotInstalled({ resource }) {
|
|
622
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
623
|
+
style: {
|
|
624
|
+
display: "flex",
|
|
625
|
+
flexDirection: "column",
|
|
626
|
+
alignItems: "center",
|
|
627
|
+
justifyContent: "center",
|
|
628
|
+
height: "100%",
|
|
629
|
+
gap: "8px",
|
|
630
|
+
opacity: .6
|
|
631
|
+
},
|
|
632
|
+
children: [
|
|
633
|
+
/* @__PURE__ */ jsx("span", {
|
|
634
|
+
style: { fontSize: "2rem" },
|
|
635
|
+
children: "⚠️"
|
|
636
|
+
}),
|
|
637
|
+
/* @__PURE__ */ jsxs("p", { children: [/* @__PURE__ */ jsx("strong", { children: "cert-manager" }), " is not installed in this cluster."] }),
|
|
638
|
+
/* @__PURE__ */ jsxs("p", {
|
|
639
|
+
style: { fontSize: "0.85rem" },
|
|
640
|
+
children: [resource, " API is not registered. Install cert-manager to use this page."]
|
|
641
|
+
})
|
|
642
|
+
]
|
|
643
|
+
});
|
|
644
|
+
}
|
|
535
645
|
// src/renderer/pages/certificate-requests-page.tsx
|
|
536
646
|
/**
|
|
537
647
|
* Author: Maifee Ul Asad <maifeeulasad@gmail.com>
|
|
538
648
|
* Co-Author: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
539
649
|
*/
|
|
540
650
|
function CertificateRequestsPage() {
|
|
541
|
-
|
|
651
|
+
let store;
|
|
652
|
+
try {
|
|
653
|
+
store = CertificateRequest.getStore();
|
|
654
|
+
} catch {
|
|
655
|
+
return /* @__PURE__ */ jsx(NotInstalled, { resource: "CertificateRequest" });
|
|
656
|
+
}
|
|
542
657
|
return /* @__PURE__ */ jsx(Renderer.Component.KubeObjectListLayout, {
|
|
543
658
|
store,
|
|
544
659
|
isConfigurable: true,
|
|
@@ -566,13 +681,16 @@ function CertificateRequestsPage() {
|
|
|
566
681
|
className: "issuer"
|
|
567
682
|
}
|
|
568
683
|
],
|
|
569
|
-
renderTableContents: (cr) =>
|
|
570
|
-
cr.
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
684
|
+
renderTableContents: (cr) => {
|
|
685
|
+
const issuerRef = getCertReqSpec(cr).issuerRef;
|
|
686
|
+
return [
|
|
687
|
+
cr.getName(),
|
|
688
|
+
cr.getNs(),
|
|
689
|
+
isCertReqReady(cr) ? "✓" : "✗",
|
|
690
|
+
isCertReqApproved(cr) ? "✓" : isCertReqDenied(cr) ? "Denied" : "-",
|
|
691
|
+
issuerRef ? `${issuerRef.kind}/${issuerRef.name}` : "-"
|
|
692
|
+
];
|
|
693
|
+
}
|
|
576
694
|
});
|
|
577
695
|
}
|
|
578
696
|
// src/renderer/pages/certificates-page.tsx
|
|
@@ -580,8 +698,22 @@ function CertificateRequestsPage() {
|
|
|
580
698
|
* Author: Maifee Ul Asad <maifeeulasad@gmail.com>
|
|
581
699
|
* Co-Author: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
582
700
|
*/
|
|
701
|
+
function certSpec(obj) {
|
|
702
|
+
return obj.spec ?? {};
|
|
703
|
+
}
|
|
704
|
+
function certStatus(obj) {
|
|
705
|
+
return obj.status ?? {};
|
|
706
|
+
}
|
|
707
|
+
function certIsReady(obj) {
|
|
708
|
+
return (certStatus(obj).conditions ?? []).some((c) => c.type === "Ready" && c.status === "True");
|
|
709
|
+
}
|
|
583
710
|
function CertificatesPage() {
|
|
584
|
-
|
|
711
|
+
let store;
|
|
712
|
+
try {
|
|
713
|
+
store = Certificate.getStore();
|
|
714
|
+
} catch {
|
|
715
|
+
return /* @__PURE__ */ jsx(NotInstalled, { resource: "Certificate" });
|
|
716
|
+
}
|
|
585
717
|
return /* @__PURE__ */ jsx(Renderer.Component.KubeObjectListLayout, {
|
|
586
718
|
store,
|
|
587
719
|
isConfigurable: true,
|
|
@@ -612,9 +744,9 @@ function CertificatesPage() {
|
|
|
612
744
|
renderTableContents: (cert) => [
|
|
613
745
|
cert.getName(),
|
|
614
746
|
cert.getNs(),
|
|
615
|
-
cert
|
|
616
|
-
cert.secretName ?? "-",
|
|
617
|
-
cert.notAfter ?? "-"
|
|
747
|
+
certIsReady(cert) ? "✓" : "✗",
|
|
748
|
+
certSpec(cert).secretName ?? "-",
|
|
749
|
+
certStatus(cert).notAfter ?? "-"
|
|
618
750
|
]
|
|
619
751
|
});
|
|
620
752
|
}
|
|
@@ -624,7 +756,12 @@ function CertificatesPage() {
|
|
|
624
756
|
* Co-Author: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
625
757
|
*/
|
|
626
758
|
function ClusterIssuersPage() {
|
|
627
|
-
|
|
759
|
+
let store;
|
|
760
|
+
try {
|
|
761
|
+
store = ClusterIssuer.getStore();
|
|
762
|
+
} catch {
|
|
763
|
+
return /* @__PURE__ */ jsx(NotInstalled, { resource: "ClusterIssuer" });
|
|
764
|
+
}
|
|
628
765
|
return /* @__PURE__ */ jsx(Renderer.Component.KubeObjectListLayout, {
|
|
629
766
|
store,
|
|
630
767
|
isConfigurable: true,
|
|
@@ -646,8 +783,8 @@ function ClusterIssuersPage() {
|
|
|
646
783
|
],
|
|
647
784
|
renderTableContents: (issuer) => [
|
|
648
785
|
issuer.getName(),
|
|
649
|
-
issuer
|
|
650
|
-
issuer
|
|
786
|
+
isClusterIssuerReady(issuer) ? "✓" : "✗",
|
|
787
|
+
getClusterIssuerType(issuer)
|
|
651
788
|
]
|
|
652
789
|
});
|
|
653
790
|
}
|
|
@@ -657,7 +794,12 @@ function ClusterIssuersPage() {
|
|
|
657
794
|
* Co-Author: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
658
795
|
*/
|
|
659
796
|
function IssuersPage() {
|
|
660
|
-
|
|
797
|
+
let store;
|
|
798
|
+
try {
|
|
799
|
+
store = Issuer.getStore();
|
|
800
|
+
} catch {
|
|
801
|
+
return /* @__PURE__ */ jsx(NotInstalled, { resource: "Issuer" });
|
|
802
|
+
}
|
|
661
803
|
return /* @__PURE__ */ jsx(Renderer.Component.KubeObjectListLayout, {
|
|
662
804
|
store,
|
|
663
805
|
isConfigurable: true,
|
|
@@ -684,8 +826,8 @@ function IssuersPage() {
|
|
|
684
826
|
renderTableContents: (issuer) => [
|
|
685
827
|
issuer.getName(),
|
|
686
828
|
issuer.getNs(),
|
|
687
|
-
issuer
|
|
688
|
-
issuer
|
|
829
|
+
isIssuerReady(issuer) ? "✓" : "✗",
|
|
830
|
+
getIssuerType(issuer)
|
|
689
831
|
]
|
|
690
832
|
});
|
|
691
833
|
}
|
package/dist/renderer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer.js","names":[],"sources":["../node_modules/.pnpm/@freelensapp+extensions@2.0.0_@types+react-dom@19.3.0_@types+react@19.3.0__@types+react_163ce80f4db73e27a81a16b7c0508b62/node_modules/@freelensapp/extensions/dist/extension-api.js","../src/common/api/certificate-request-v1.ts","../src/common/api/certificate-v1.ts","../src/common/api/cluster-issuer-v1.ts","../src/common/api/issuer-v1.ts","../src/common/store/preferences-store.ts","../src/renderer/details/certificate-details.tsx","../src/renderer/details/certificate-request-details.tsx","../src/renderer/details/cluster-issuer-details.tsx","../src/renderer/details/issuer-details.tsx","../src/renderer/menus/certificate-delete-cascade-menu-item.tsx","../src/renderer/menus/certificate-force-renew-menu-item.tsx","../src/renderer/pages/certificate-requests-page.tsx","../src/renderer/pages/certificates-page.tsx","../src/renderer/pages/cluster-issuers-page.tsx","../src/renderer/pages/issuers-page.tsx","../src/renderer/preferences/cert-manager-preference.tsx","../src/renderer/index.tsx"],"sourcesContent":["/**\n * Copyright (c) Freelens Authors. All rights reserved.\n * Licensed under MIT License. See LICENSE in root directory for more information.\n */\n\n// The runtime shim of `@freelensapp/extensions`, transpiled verbatim to\n// `dist/extension-api.js` (see `scripts/build-shim.mjs`). It only re-exports\n// `globalThis.FreelensExtensionApi`, which the app assigns at startup, so the\n// emitted file has no runtime dependencies. The published types come from the\n// d.ts rollup of `./extension-api.ts` instead; this file is intentionally\n// untyped beyond the ambient global declared there.\n\nconst api = globalThis.FreelensExtensionApi;\n\nexport const Common = api.Common;\nexport const Main = api.Main;\nexport const Renderer = api.Renderer;\n","/**\n * Author: Maifee Ul Asad <maifeeulasad@gmail.com>\n * Co-Author: Claude Sonnet 4.6 <noreply@anthropic.com>\n *\n * cert-manager CertificateRequest CRD — v1\n * Ref: https://cert-manager.io/docs/reference/api-docs/#cert-manager.io/v1.CertificateRequest\n */\n\nimport { Renderer } from \"@freelensapp/extensions\";\n\nexport interface CertificateRequestSpec {\n issuerRef?: { name: string; kind: string; group?: string };\n duration?: string;\n isCA?: boolean;\n usages?: string[];\n request?: string;\n}\n\nexport interface CertificateRequestStatus {\n failureTime?: string;\n conditions?: Array<{ type: string; status: string; message?: string }>;\n}\n\nexport class CertificateRequest extends Renderer.K8sApi.LensExtensionKubeObject<\n Renderer.K8sApi.KubeObjectMetadata,\n CertificateRequestStatus,\n CertificateRequestSpec\n> {\n declare kind: \"CertificateRequest\";\n declare apiVersion: \"cert-manager.io/v1\";\n\n static readonly kind = \"CertificateRequest\";\n static readonly namespaced = true;\n static readonly apiBase = \"/apis/cert-manager.io/v1/certificaterequests\";\n\n static readonly crd: Renderer.K8sApi.LensExtensionKubeObjectCRD & { title: string } = {\n apiVersions: [\"cert-manager.io/v1\"],\n plural: \"certificaterequests\",\n singular: \"certificaterequest\",\n shortNames: [\"cr\"],\n title: \"CertificateRequests\",\n };\n\n get issuerRef(): { name: string; kind: string; group?: string } | undefined {\n return this.spec.issuerRef;\n }\n\n get duration(): string | undefined {\n return this.spec.duration;\n }\n\n get isCA(): boolean {\n return this.spec.isCA === true;\n }\n\n get usages(): string[] {\n return this.spec.usages ?? [];\n }\n\n get isReady(): boolean {\n return (this.status?.conditions ?? []).some((c) => c.type === \"Ready\" && c.status === \"True\");\n }\n\n get isDenied(): boolean {\n return (this.status?.conditions ?? []).some((c) => c.type === \"Denied\" && c.status === \"True\");\n }\n\n get isApproved(): boolean {\n return (this.status?.conditions ?? []).some(\n (c) => c.type === \"Approved\" && c.status === \"True\",\n );\n }\n\n get failureTime(): string | undefined {\n return this.status?.failureTime;\n }\n\n get readyMessage(): string | undefined {\n return (this.status?.conditions ?? []).find((c) => c.type === \"Ready\")?.message;\n }\n}\n\nexport class CertificateRequestApi extends Renderer.K8sApi.KubeApi<CertificateRequest> {}\nexport class CertificateRequestStore extends Renderer.K8sApi.KubeObjectStore<\n CertificateRequest,\n CertificateRequestApi\n> {}\n","/**\n * Author: Maifee Ul Asad <maifeeulasad@gmail.com>\n * Co-Author: Claude Sonnet 4.6 <noreply@anthropic.com>\n *\n * cert-manager Certificate CRD — v1\n * Ref: https://cert-manager.io/docs/reference/api-docs/#cert-manager.io/v1.Certificate\n */\n\nimport { Renderer } from \"@freelensapp/extensions\";\n\nexport interface CertificateSpec {\n secretName?: string;\n commonName?: string;\n dnsNames?: string[];\n issuerRef?: { name: string; kind: string; group?: string };\n duration?: string;\n renewBefore?: string;\n}\n\nexport interface CertificateStatus {\n notAfter?: string;\n notBefore?: string;\n renewalTime?: string;\n conditions?: Array<{ type: string; status: string; message?: string }>;\n}\n\nexport class Certificate extends Renderer.K8sApi.LensExtensionKubeObject<\n Renderer.K8sApi.KubeObjectMetadata,\n CertificateStatus,\n CertificateSpec\n> {\n declare kind: \"Certificate\";\n declare apiVersion: \"cert-manager.io/v1\";\n\n static readonly kind = \"Certificate\";\n static readonly namespaced = true;\n static readonly apiBase = \"/apis/cert-manager.io/v1/certificates\";\n\n static readonly crd: Renderer.K8sApi.LensExtensionKubeObjectCRD & { title: string } = {\n apiVersions: [\"cert-manager.io/v1\"],\n plural: \"certificates\",\n singular: \"certificate\",\n shortNames: [\"cert\"],\n title: \"Certificates\",\n };\n\n get secretName(): string | undefined {\n return this.spec.secretName;\n }\n\n get commonName(): string | undefined {\n return this.spec.commonName;\n }\n\n get dnsNames(): string[] {\n return this.spec.dnsNames ?? [];\n }\n\n get issuerRef(): { name: string; kind: string; group?: string } | undefined {\n return this.spec.issuerRef;\n }\n\n get duration(): string | undefined {\n return this.spec.duration;\n }\n\n get renewBefore(): string | undefined {\n return this.spec.renewBefore;\n }\n\n get notAfter(): string | undefined {\n return this.status?.notAfter;\n }\n\n get notBefore(): string | undefined {\n return this.status?.notBefore;\n }\n\n get renewalTime(): string | undefined {\n return this.status?.renewalTime;\n }\n\n get isReady(): boolean {\n return (this.status?.conditions ?? []).some((c) => c.type === \"Ready\" && c.status === \"True\");\n }\n\n get readyMessage(): string | undefined {\n return (this.status?.conditions ?? []).find((c) => c.type === \"Ready\")?.message;\n }\n}\n\nexport class CertificateApi extends Renderer.K8sApi.KubeApi<Certificate> {}\nexport class CertificateStore extends Renderer.K8sApi.KubeObjectStore<\n Certificate,\n CertificateApi\n> {}\n","/**\n * Author: Maifee Ul Asad <maifeeulasad@gmail.com>\n * Co-Author: Claude Sonnet 4.6 <noreply@anthropic.com>\n *\n * cert-manager ClusterIssuer CRD — v1 (cluster-scoped)\n * Ref: https://cert-manager.io/docs/reference/api-docs/#cert-manager.io/v1.ClusterIssuer\n */\n\nimport { Renderer } from \"@freelensapp/extensions\";\n\nexport interface ClusterIssuerSpec {\n acme?: unknown;\n ca?: unknown;\n selfSigned?: unknown;\n vault?: unknown;\n venafi?: unknown;\n}\n\nexport interface ClusterIssuerStatus {\n conditions?: Array<{ type: string; status: string; message?: string }>;\n}\n\nexport class ClusterIssuer extends Renderer.K8sApi.LensExtensionKubeObject<\n Renderer.K8sApi.KubeObjectMetadata,\n ClusterIssuerStatus,\n ClusterIssuerSpec\n> {\n declare kind: \"ClusterIssuer\";\n declare apiVersion: \"cert-manager.io/v1\";\n\n static readonly kind = \"ClusterIssuer\";\n static readonly namespaced = false;\n static readonly apiBase = \"/apis/cert-manager.io/v1/clusterissuers\";\n\n static readonly crd: Renderer.K8sApi.LensExtensionKubeObjectCRD & { title: string } = {\n apiVersions: [\"cert-manager.io/v1\"],\n plural: \"clusterissuers\",\n singular: \"clusterissuer\",\n shortNames: [],\n title: \"ClusterIssuers\",\n };\n\n get isReady(): boolean {\n return (this.status?.conditions ?? []).some((c) => c.type === \"Ready\" && c.status === \"True\");\n }\n\n get readyMessage(): string | undefined {\n return (this.status?.conditions ?? []).find((c) => c.type === \"Ready\")?.message;\n }\n\n get issuerType(): string {\n if (this.spec.acme) return \"ACME\";\n if (this.spec.ca) return \"CA\";\n if (this.spec.selfSigned) return \"SelfSigned\";\n if (this.spec.vault) return \"Vault\";\n if (this.spec.venafi) return \"Venafi\";\n return \"Unknown\";\n }\n}\n\nexport class ClusterIssuerApi extends Renderer.K8sApi.KubeApi<ClusterIssuer> {}\nexport class ClusterIssuerStore extends Renderer.K8sApi.KubeObjectStore<\n ClusterIssuer,\n ClusterIssuerApi\n> {}\n","/**\n * Author: Maifee Ul Asad <maifeeulasad@gmail.com>\n * Co-Author: Claude Sonnet 4.6 <noreply@anthropic.com>\n *\n * cert-manager Issuer CRD — v1 (namespace-scoped)\n * Ref: https://cert-manager.io/docs/reference/api-docs/#cert-manager.io/v1.Issuer\n */\n\nimport { Renderer } from \"@freelensapp/extensions\";\n\nexport interface IssuerSpec {\n acme?: unknown;\n ca?: unknown;\n selfSigned?: unknown;\n vault?: unknown;\n venafi?: unknown;\n}\n\nexport interface IssuerStatus {\n conditions?: Array<{ type: string; status: string; message?: string }>;\n}\n\nexport class Issuer extends Renderer.K8sApi.LensExtensionKubeObject<\n Renderer.K8sApi.KubeObjectMetadata,\n IssuerStatus,\n IssuerSpec\n> {\n declare kind: \"Issuer\";\n declare apiVersion: \"cert-manager.io/v1\";\n\n static readonly kind = \"Issuer\";\n static readonly namespaced = true;\n static readonly apiBase = \"/apis/cert-manager.io/v1/issuers\";\n\n static readonly crd: Renderer.K8sApi.LensExtensionKubeObjectCRD & { title: string } = {\n apiVersions: [\"cert-manager.io/v1\"],\n plural: \"issuers\",\n singular: \"issuer\",\n shortNames: [],\n title: \"Issuers\",\n };\n\n get isReady(): boolean {\n return (this.status?.conditions ?? []).some((c) => c.type === \"Ready\" && c.status === \"True\");\n }\n\n get readyMessage(): string | undefined {\n return (this.status?.conditions ?? []).find((c) => c.type === \"Ready\")?.message;\n }\n\n get issuerType(): string {\n if (this.spec.acme) return \"ACME\";\n if (this.spec.ca) return \"CA\";\n if (this.spec.selfSigned) return \"SelfSigned\";\n if (this.spec.vault) return \"Vault\";\n if (this.spec.venafi) return \"Venafi\";\n return \"Unknown\";\n }\n}\n\nexport class IssuerApi extends Renderer.K8sApi.KubeApi<Issuer> {}\nexport class IssuerStore extends Renderer.K8sApi.KubeObjectStore<Issuer, IssuerApi> {}\n","/**\n * Author: Maifee Ul Asad <maifeeulasad@gmail.com>\n * Co-Author: Claude Sonnet 4.6 <noreply@anthropic.com>\n */\n\nimport { Common } from \"@freelensapp/extensions\";\nimport { observable } from \"mobx\";\n\nexport interface CertManagerPreferencesModel {\n showExpiredCerts: boolean;\n}\n\nexport class CertManagerPreferencesStore extends Common.Store\n .ExtensionStore<CertManagerPreferencesModel> {\n @observable accessor showExpiredCerts = false;\n\n constructor() {\n super({\n configName: \"cert-manager-preferences-store\",\n defaults: {\n showExpiredCerts: false,\n },\n });\n }\n\n fromStore({ showExpiredCerts }: CertManagerPreferencesModel): void {\n this.showExpiredCerts = showExpiredCerts;\n }\n\n toJSON(): CertManagerPreferencesModel {\n return {\n showExpiredCerts: this.showExpiredCerts,\n };\n }\n}\n","/**\n * Author: Maifee Ul Asad <maifeeulasad@gmail.com>\n * Co-Author: Claude Sonnet 4.6 <noreply@anthropic.com>\n */\n\nimport { Renderer } from \"@freelensapp/extensions\";\n\nimport type { Certificate } from \"../../common/api\";\n\ninterface Props {\n object: Certificate;\n}\n\nexport function CertificateDetails({ object: cert }: Props) {\n return (\n <Renderer.Component.DrawerItem name=\"Certificate Details\" labelsOnly>\n <Renderer.Component.DrawerItem name=\"Secret Name\">\n {cert.secretName ?? \"-\"}\n </Renderer.Component.DrawerItem>\n\n <Renderer.Component.DrawerItem name=\"Common Name\">\n {cert.commonName ?? \"-\"}\n </Renderer.Component.DrawerItem>\n\n <Renderer.Component.DrawerItem name=\"DNS Names\">\n {cert.dnsNames.length > 0 ? cert.dnsNames.join(\", \") : \"-\"}\n </Renderer.Component.DrawerItem>\n\n <Renderer.Component.DrawerItem name=\"Issuer\">\n {cert.issuerRef ? `${cert.issuerRef.kind}/${cert.issuerRef.name}` : \"-\"}\n </Renderer.Component.DrawerItem>\n\n <Renderer.Component.DrawerItem name=\"Duration\">\n {cert.duration ?? \"-\"}\n </Renderer.Component.DrawerItem>\n\n <Renderer.Component.DrawerItem name=\"Renew Before\">\n {cert.renewBefore ?? \"-\"}\n </Renderer.Component.DrawerItem>\n\n <Renderer.Component.DrawerItem name=\"Not Before\">\n {cert.notBefore ?? \"-\"}\n </Renderer.Component.DrawerItem>\n\n <Renderer.Component.DrawerItem name=\"Not After (Expires)\">\n {cert.notAfter ?? \"-\"}\n </Renderer.Component.DrawerItem>\n\n <Renderer.Component.DrawerItem name=\"Renewal Time\">\n {cert.renewalTime ?? \"-\"}\n </Renderer.Component.DrawerItem>\n\n <Renderer.Component.DrawerItem name=\"Status\">\n {cert.isReady ? \"✓ Ready\" : \"✗ Not Ready\"}\n </Renderer.Component.DrawerItem>\n\n {cert.readyMessage && (\n <Renderer.Component.DrawerItem name=\"Message\">\n {cert.readyMessage}\n </Renderer.Component.DrawerItem>\n )}\n </Renderer.Component.DrawerItem>\n );\n}\n","/**\n * Author: Maifee Ul Asad <maifeeulasad@gmail.com>\n * Co-Author: Claude Sonnet 4.6 <noreply@anthropic.com>\n */\n\nimport { Renderer } from \"@freelensapp/extensions\";\n\nimport type { CertificateRequest } from \"../../common/api\";\n\ninterface Props {\n object: CertificateRequest;\n}\n\nexport function CertificateRequestDetails({ object: cr }: Props) {\n return (\n <Renderer.Component.DrawerItem name=\"CertificateRequest Details\" labelsOnly>\n <Renderer.Component.DrawerItem name=\"Issuer\">\n {cr.issuerRef ? `${cr.issuerRef.kind}/${cr.issuerRef.name}` : \"-\"}\n </Renderer.Component.DrawerItem>\n\n <Renderer.Component.DrawerItem name=\"Duration\">\n {cr.duration ?? \"-\"}\n </Renderer.Component.DrawerItem>\n\n <Renderer.Component.DrawerItem name=\"Is CA\">\n {cr.isCA ? \"Yes\" : \"No\"}\n </Renderer.Component.DrawerItem>\n\n {cr.usages.length > 0 && (\n <Renderer.Component.DrawerItem name=\"Usages\">\n {cr.usages.join(\", \")}\n </Renderer.Component.DrawerItem>\n )}\n\n <Renderer.Component.DrawerItem name=\"Status\">\n {cr.isReady ? \"✓ Ready\" : cr.isDenied ? \"✗ Denied\" : \"⏳ Pending\"}\n </Renderer.Component.DrawerItem>\n\n <Renderer.Component.DrawerItem name=\"Approved\">\n {cr.isApproved ? \"Yes\" : \"No\"}\n </Renderer.Component.DrawerItem>\n\n {cr.failureTime && (\n <Renderer.Component.DrawerItem name=\"Failed At\">\n {cr.failureTime}\n </Renderer.Component.DrawerItem>\n )}\n\n {cr.readyMessage && (\n <Renderer.Component.DrawerItem name=\"Message\">\n {cr.readyMessage}\n </Renderer.Component.DrawerItem>\n )}\n </Renderer.Component.DrawerItem>\n );\n}\n","/**\n * Author: Maifee Ul Asad <maifeeulasad@gmail.com>\n * Co-Author: Claude Sonnet 4.6 <noreply@anthropic.com>\n */\n\nimport { Renderer } from \"@freelensapp/extensions\";\n\nimport type { ClusterIssuer } from \"../../common/api\";\n\ninterface Props {\n object: ClusterIssuer;\n}\n\nexport function ClusterIssuerDetails({ object: issuer }: Props) {\n return (\n <Renderer.Component.DrawerItem name=\"ClusterIssuer Details\" labelsOnly>\n <Renderer.Component.DrawerItem name=\"Type\">{issuer.issuerType}</Renderer.Component.DrawerItem>\n\n <Renderer.Component.DrawerItem name=\"Scope\">Cluster-wide</Renderer.Component.DrawerItem>\n\n <Renderer.Component.DrawerItem name=\"Status\">\n {issuer.isReady ? \"✓ Ready\" : \"✗ Not Ready\"}\n </Renderer.Component.DrawerItem>\n\n {issuer.readyMessage && (\n <Renderer.Component.DrawerItem name=\"Message\">\n {issuer.readyMessage}\n </Renderer.Component.DrawerItem>\n )}\n </Renderer.Component.DrawerItem>\n );\n}\n","/**\n * Author: Maifee Ul Asad <maifeeulasad@gmail.com>\n * Co-Author: Claude Sonnet 4.6 <noreply@anthropic.com>\n */\n\nimport { Renderer } from \"@freelensapp/extensions\";\n\nimport type { Issuer } from \"../../common/api\";\n\ninterface Props {\n object: Issuer;\n}\n\nexport function IssuerDetails({ object: issuer }: Props) {\n return (\n <Renderer.Component.DrawerItem name=\"Issuer Details\" labelsOnly>\n <Renderer.Component.DrawerItem name=\"Type\">{issuer.issuerType}</Renderer.Component.DrawerItem>\n\n <Renderer.Component.DrawerItem name=\"Status\">\n {issuer.isReady ? \"✓ Ready\" : \"✗ Not Ready\"}\n </Renderer.Component.DrawerItem>\n\n {issuer.readyMessage && (\n <Renderer.Component.DrawerItem name=\"Message\">\n {issuer.readyMessage}\n </Renderer.Component.DrawerItem>\n )}\n </Renderer.Component.DrawerItem>\n );\n}\n","/**\n * Author: Maifee Ul Asad <maifeeulasad@gmail.com>\n * Co-Author: Claude Sonnet 4.6 <noreply@anthropic.com>\n *\n * \"Delete (cascade)\" context menu item for Certificate resources.\n *\n * Deletes the Certificate object and, if spec.secretName is set, deletes that\n * Secret too. cert-manager does NOT garbage-collect the Secret on Certificate\n * deletion unless --enable-certificate-owner-ref is set on the controller.\n *\n * Ref: https://cert-manager.io/docs/usage/certificate/#cleaning-up-after-a-deleted-certificate\n */\n\nimport { Renderer } from \"@freelensapp/extensions\";\nimport { Certificate } from \"../../common/api\";\n\ninterface Props {\n object: Certificate;\n}\n\nexport function CertificateDeleteCascadeMenuItem({ object: cert }: Props) {\n function handleDeleteCascade() {\n const ns = cert.getNs();\n const name = cert.getName();\n const secretName = cert.secretName;\n\n Renderer.Component.ConfirmDialog.open({\n message: secretName\n ? `Delete Certificate \"${name}\" and its managed Secret \"${secretName}\"?`\n : `Delete Certificate \"${name}\"?`,\n labelOk: \"Delete\",\n ok: async () => {\n try {\n const certApi = Certificate.getStore().api as any;\n await certApi.delete({ name, namespace: ns });\n\n if (secretName) {\n const secretApi = Renderer.K8sApi.apiManager.getApiByKind(\"Secret\", \"v1\") as any;\n if (secretApi) {\n await secretApi.delete({ name: secretName, namespace: ns });\n }\n }\n } catch (err) {\n console.error(`[cert-manager] cascade delete failed for ${ns}/${name}:`, err);\n }\n },\n });\n }\n\n return (\n <Renderer.Component.MenuItem onClick={handleDeleteCascade}>\n Delete (cascade)\n </Renderer.Component.MenuItem>\n );\n}\n","/**\n * Author: Maifee Ul Asad <maifeeulasad@gmail.com>\n * Co-Author: Claude Sonnet 4.6 <noreply@anthropic.com>\n *\n * \"Force Renew\" context menu item for Certificate resources.\n *\n * cert-manager does not have a direct API call for forced renewal; the\n * canonical approach is to delete the managed Secret so cert-manager reissues\n * it, OR to add/toggle the annotation\n * `cert-manager.io/issuer-name` on the Certificate — but the most reliable\n * in-cluster trigger is bumping the `cert-manager.io/trigger-renew` annotation\n * with a timestamp, which the controller watches.\n *\n * Ref: https://cert-manager.io/docs/usage/certificate/#triggering-certificate-renewal-manually\n */\n\nimport { Renderer } from \"@freelensapp/extensions\";\nimport { Certificate } from \"../../common/api\";\n\ninterface Props {\n object: Certificate;\n}\n\nexport function CertificateForceRenewMenuItem({ object: cert }: Props) {\n async function handleForceRenew() {\n const api = Certificate.getStore().api as any;\n const ns = cert.getNs();\n const name = cert.getName();\n\n try {\n await api.patch(\n { name, namespace: ns },\n {\n metadata: {\n annotations: {\n \"cert-manager.io/trigger-renew\": new Date().toISOString(),\n },\n },\n },\n \"merge\",\n );\n } catch (err) {\n console.error(`[cert-manager] force renew failed for ${ns}/${name}:`, err);\n }\n }\n\n return (\n <Renderer.Component.MenuItem onClick={handleForceRenew}>\n Force Renew\n </Renderer.Component.MenuItem>\n );\n}\n","/**\n * Author: Maifee Ul Asad <maifeeulasad@gmail.com>\n * Co-Author: Claude Sonnet 4.6 <noreply@anthropic.com>\n */\n\nimport { Renderer } from \"@freelensapp/extensions\";\nimport { CertificateRequest, type CertificateRequestApi } from \"../../common/api\";\n\nexport function CertificateRequestsPage() {\n const store = CertificateRequest.getStore<CertificateRequest>();\n\n return (\n <Renderer.Component.KubeObjectListLayout<CertificateRequest, CertificateRequestApi>\n store={store}\n isConfigurable\n tableId=\"cert-manager-certificate-requests\"\n className=\"CertificateRequestsPage\"\n renderTableHeader={[\n { title: \"Name\", className: \"name\" },\n { title: \"Namespace\", className: \"namespace\" },\n { title: \"Ready\", className: \"ready\" },\n { title: \"Approved\", className: \"approved\" },\n { title: \"Issuer\", className: \"issuer\" },\n ]}\n renderTableContents={(cr) => [\n cr.getName(),\n cr.getNs(),\n cr.isReady ? \"✓\" : \"✗\",\n cr.isApproved ? \"✓\" : cr.isDenied ? \"Denied\" : \"-\",\n cr.issuerRef ? `${cr.issuerRef.kind}/${cr.issuerRef.name}` : \"-\",\n ]}\n />\n );\n}\n","/**\n * Author: Maifee Ul Asad <maifeeulasad@gmail.com>\n * Co-Author: Claude Sonnet 4.6 <noreply@anthropic.com>\n */\n\nimport { Renderer } from \"@freelensapp/extensions\";\nimport { Certificate, type CertificateApi } from \"../../common/api\";\n\nexport function CertificatesPage() {\n const store = Certificate.getStore<Certificate>();\n\n return (\n <Renderer.Component.KubeObjectListLayout<Certificate, CertificateApi>\n store={store}\n isConfigurable\n tableId=\"cert-manager-certificates\"\n className=\"CertificatesPage\"\n renderTableHeader={[\n { title: \"Name\", className: \"name\" },\n { title: \"Namespace\", className: \"namespace\" },\n { title: \"Ready\", className: \"ready\" },\n { title: \"Secret\", className: \"secret\" },\n { title: \"Expires\", className: \"expiry\" },\n ]}\n renderTableContents={(cert) => [\n cert.getName(),\n cert.getNs(),\n cert.isReady ? \"✓\" : \"✗\",\n cert.secretName ?? \"-\",\n cert.notAfter ?? \"-\",\n ]}\n />\n );\n}\n","/**\n * Author: Maifee Ul Asad <maifeeulasad@gmail.com>\n * Co-Author: Claude Sonnet 4.6 <noreply@anthropic.com>\n */\n\nimport { Renderer } from \"@freelensapp/extensions\";\nimport { ClusterIssuer, type ClusterIssuerApi } from \"../../common/api\";\n\nexport function ClusterIssuersPage() {\n const store = ClusterIssuer.getStore<ClusterIssuer>();\n\n return (\n <Renderer.Component.KubeObjectListLayout<ClusterIssuer, ClusterIssuerApi>\n store={store}\n isConfigurable\n tableId=\"cert-manager-cluster-issuers\"\n className=\"ClusterIssuersPage\"\n renderTableHeader={[\n { title: \"Name\", className: \"name\" },\n { title: \"Ready\", className: \"ready\" },\n { title: \"Type\", className: \"type\" },\n ]}\n renderTableContents={(issuer) => [\n issuer.getName(),\n issuer.isReady ? \"✓\" : \"✗\",\n issuer.issuerType,\n ]}\n />\n );\n}\n","/**\n * Author: Maifee Ul Asad <maifeeulasad@gmail.com>\n * Co-Author: Claude Sonnet 4.6 <noreply@anthropic.com>\n */\n\nimport { Renderer } from \"@freelensapp/extensions\";\nimport { Issuer, type IssuerApi } from \"../../common/api\";\n\nexport function IssuersPage() {\n const store = Issuer.getStore<Issuer>();\n\n return (\n <Renderer.Component.KubeObjectListLayout<Issuer, IssuerApi>\n store={store}\n isConfigurable\n tableId=\"cert-manager-issuers\"\n className=\"IssuersPage\"\n renderTableHeader={[\n { title: \"Name\", className: \"name\" },\n { title: \"Namespace\", className: \"namespace\" },\n { title: \"Ready\", className: \"ready\" },\n { title: \"Type\", className: \"type\" },\n ]}\n renderTableContents={(issuer) => [\n issuer.getName(),\n issuer.getNs(),\n issuer.isReady ? \"✓\" : \"✗\",\n issuer.issuerType,\n ]}\n />\n );\n}\n","/**\n * Author: Maifee Ul Asad <maifeeulasad@gmail.com>\n * Co-Author: Claude Sonnet 4.6 <noreply@anthropic.com>\n */\n\nimport { observer } from \"mobx-react\";\nimport { CertManagerPreferencesStore } from \"../../common/store\";\n\nexport const CertManagerPreferenceInput = observer(function CertManagerPreferenceInput() {\n const store = CertManagerPreferencesStore.getInstanceOrCreate() as CertManagerPreferencesStore;\n\n return (\n <label style={{ display: \"flex\", alignItems: \"center\", gap: \"8px\", cursor: \"pointer\" }}>\n <input\n type=\"checkbox\"\n checked={store.showExpiredCerts}\n onChange={(e) => {\n store.fromStore({ showExpiredCerts: e.target.checked });\n }}\n />\n Show expired certificates\n </label>\n );\n});\n\nexport function CertManagerPreferenceHint() {\n return (\n <small>\n When enabled, expired certificates remain visible in the list instead of being filtered out.\n </small>\n );\n}\n","/**\n * Author: Maifee Ul Asad <maifeeulasad@gmail.com>\n * Co-Author: Claude Sonnet 4.6 <noreply@anthropic.com>\n */\n\nimport { Renderer } from \"@freelensapp/extensions\";\nimport { Certificate, CertificateRequest, ClusterIssuer, Issuer } from \"../common/api\";\nimport { CertManagerPreferencesStore } from \"../common/store\";\nimport { CertificateDetails } from \"./details/certificate-details\";\nimport { CertificateRequestDetails } from \"./details/certificate-request-details\";\nimport { ClusterIssuerDetails } from \"./details/cluster-issuer-details\";\nimport { IssuerDetails } from \"./details/issuer-details\";\nimport { CertificateDeleteCascadeMenuItem } from \"./menus/certificate-delete-cascade-menu-item\";\nimport { CertificateForceRenewMenuItem } from \"./menus/certificate-force-renew-menu-item\";\nimport { CertificateRequestsPage } from \"./pages/certificate-requests-page\";\nimport { CertificatesPage } from \"./pages/certificates-page\";\nimport { ClusterIssuersPage } from \"./pages/cluster-issuers-page\";\nimport { IssuersPage } from \"./pages/issuers-page\";\nimport {\n CertManagerPreferenceHint,\n CertManagerPreferenceInput,\n} from \"./preferences/cert-manager-preference\";\n\nexport default class CertManagerRenderer extends Renderer.LensExtension {\n async onActivate() {\n CertManagerPreferencesStore.getInstanceOrCreate().loadExtension(this);\n }\n\n customResources = [Certificate, CertificateRequest, Issuer, ClusterIssuer];\n\n kubeObjectDetailItems: Renderer.LensExtension[\"kubeObjectDetailItems\"] = [\n Renderer.K8sApi.detailsFor(Certificate, {\n priority: 10,\n Details: CertificateDetails as any,\n }),\n Renderer.K8sApi.detailsFor(CertificateRequest, {\n priority: 10,\n Details: CertificateRequestDetails as any,\n }),\n Renderer.K8sApi.detailsFor(Issuer, {\n priority: 10,\n Details: IssuerDetails as any,\n }),\n Renderer.K8sApi.detailsFor(ClusterIssuer, {\n priority: 10,\n Details: ClusterIssuerDetails as any,\n }),\n ];\n\n clusterPages: Renderer.LensExtension[\"clusterPages\"] = [\n {\n id: \"cert-manager-certificates\",\n components: {\n Page: () => <CertificatesPage />,\n },\n },\n {\n id: \"cert-manager-issuers\",\n components: {\n Page: () => <IssuersPage />,\n },\n },\n {\n id: \"cert-manager-cluster-issuers\",\n components: {\n Page: () => <ClusterIssuersPage />,\n },\n },\n {\n id: \"cert-manager-certificate-requests\",\n components: {\n Page: () => <CertificateRequestsPage />,\n },\n },\n ];\n\n appPreferences = [\n {\n title: \"Cert Manager\",\n components: {\n Input: () => <CertManagerPreferenceInput />,\n Hint: () => <CertManagerPreferenceHint />,\n },\n },\n ];\n\n kubeObjectMenuItems: Renderer.LensExtension[\"kubeObjectMenuItems\"] = [\n Renderer.K8sApi.menuItemFor(Certificate, {\n MenuItem: CertificateForceRenewMenuItem as any,\n }),\n Renderer.K8sApi.menuItemFor(Certificate, {\n MenuItem: CertificateDeleteCascadeMenuItem as any,\n }),\n ];\n\n clusterPageMenus = [\n {\n id: \"cert-manager\",\n title: \"Cert Manager\",\n components: {\n Icon: () => <span>🔐</span>,\n },\n },\n {\n id: \"cert-manager-certificates\",\n parentId: \"cert-manager\",\n title: Certificate.crd.title,\n target: { pageId: \"cert-manager-certificates\" },\n components: {\n Icon: () => <span>📜</span>,\n },\n },\n {\n id: \"cert-manager-issuers\",\n parentId: \"cert-manager\",\n title: Issuer.crd.title,\n target: { pageId: \"cert-manager-issuers\" },\n components: {\n Icon: () => <span>🏛️</span>,\n },\n },\n {\n id: \"cert-manager-cluster-issuers\",\n parentId: \"cert-manager\",\n title: ClusterIssuer.crd.title,\n target: { pageId: \"cert-manager-cluster-issuers\" },\n components: {\n Icon: () => <span>🌐</span>,\n },\n },\n {\n id: \"cert-manager-certificate-requests\",\n parentId: \"cert-manager\",\n title: CertificateRequest.crd.title,\n target: { pageId: \"cert-manager-certificate-requests\" },\n components: {\n Icon: () => <span>📋</span>,\n },\n },\n ];\n}\n"],"ignoreList":[0],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"renderer.js","names":[],"sources":["../node_modules/.pnpm/@freelensapp+extensions@2.0.0_@types+react-dom@19.3.0_@types+react@19.3.0__@types+react_163ce80f4db73e27a81a16b7c0508b62/node_modules/@freelensapp/extensions/dist/extension-api.js","../src/common/api/certificate-request-v1.ts","../src/common/api/certificate-v1.ts","../src/common/api/cluster-issuer-v1.ts","../src/common/api/issuer-v1.ts","../src/common/store/preferences-store.ts","../src/common/api/accessors.ts","../src/renderer/details/certificate-details.tsx","../src/renderer/details/certificate-request-details.tsx","../src/renderer/details/cluster-issuer-details.tsx","../src/renderer/details/issuer-details.tsx","../src/renderer/menus/certificate-delete-cascade-menu-item.tsx","../src/renderer/menus/certificate-force-renew-menu-item.tsx","../src/renderer/pages/not-installed.tsx","../src/renderer/pages/certificate-requests-page.tsx","../src/renderer/pages/certificates-page.tsx","../src/renderer/pages/cluster-issuers-page.tsx","../src/renderer/pages/issuers-page.tsx","../src/renderer/preferences/cert-manager-preference.tsx","../src/renderer/index.tsx"],"sourcesContent":["/**\n * Copyright (c) Freelens Authors. All rights reserved.\n * Licensed under MIT License. See LICENSE in root directory for more information.\n */\n\n// The runtime shim of `@freelensapp/extensions`, transpiled verbatim to\n// `dist/extension-api.js` (see `scripts/build-shim.mjs`). It only re-exports\n// `globalThis.FreelensExtensionApi`, which the app assigns at startup, so the\n// emitted file has no runtime dependencies. The published types come from the\n// d.ts rollup of `./extension-api.ts` instead; this file is intentionally\n// untyped beyond the ambient global declared there.\n\nconst api = globalThis.FreelensExtensionApi;\n\nexport const Common = api.Common;\nexport const Main = api.Main;\nexport const Renderer = api.Renderer;\n","/**\n * Author: Maifee Ul Asad <maifeeulasad@gmail.com>\n * Co-Author: Claude Sonnet 4.6 <noreply@anthropic.com>\n *\n * cert-manager CertificateRequest CRD — v1\n * Ref: https://cert-manager.io/docs/reference/api-docs/#cert-manager.io/v1.CertificateRequest\n */\n\nimport { Renderer } from \"@freelensapp/extensions\";\n\nexport interface CertificateRequestSpec {\n issuerRef?: { name: string; kind: string; group?: string };\n duration?: string;\n isCA?: boolean;\n usages?: string[];\n request?: string;\n}\n\nexport interface CertificateRequestStatus {\n failureTime?: string;\n conditions?: Array<{ type: string; status: string; message?: string }>;\n}\n\nexport class CertificateRequest extends Renderer.K8sApi.LensExtensionKubeObject<\n Renderer.K8sApi.KubeObjectMetadata,\n CertificateRequestStatus,\n CertificateRequestSpec\n> {\n declare kind: \"CertificateRequest\";\n declare apiVersion: \"cert-manager.io/v1\";\n\n static readonly kind = \"CertificateRequest\";\n static readonly namespaced = true;\n static readonly apiBase = \"/apis/cert-manager.io/v1/certificaterequests\";\n\n static readonly crd: Renderer.K8sApi.LensExtensionKubeObjectCRD & { title: string } = {\n apiVersions: [\"cert-manager.io/v1\"],\n plural: \"certificaterequests\",\n singular: \"certificaterequest\",\n shortNames: [\"cr\"],\n title: \"CertificateRequests\",\n };\n\n get issuerRef(): { name: string; kind: string; group?: string } | undefined {\n return this.spec.issuerRef;\n }\n\n get duration(): string | undefined {\n return this.spec.duration;\n }\n\n get isCA(): boolean {\n return this.spec.isCA === true;\n }\n\n get usages(): string[] {\n return this.spec.usages ?? [];\n }\n\n get isReady(): boolean {\n return (this.status?.conditions ?? []).some((c) => c.type === \"Ready\" && c.status === \"True\");\n }\n\n get isDenied(): boolean {\n return (this.status?.conditions ?? []).some((c) => c.type === \"Denied\" && c.status === \"True\");\n }\n\n get isApproved(): boolean {\n return (this.status?.conditions ?? []).some(\n (c) => c.type === \"Approved\" && c.status === \"True\",\n );\n }\n\n get failureTime(): string | undefined {\n return this.status?.failureTime;\n }\n\n get readyMessage(): string | undefined {\n return (this.status?.conditions ?? []).find((c) => c.type === \"Ready\")?.message;\n }\n}\n\nexport class CertificateRequestApi extends Renderer.K8sApi.KubeApi<CertificateRequest> {}\nexport class CertificateRequestStore extends Renderer.K8sApi.KubeObjectStore<\n CertificateRequest,\n CertificateRequestApi\n> {}\n","/**\n * Author: Maifee Ul Asad <maifeeulasad@gmail.com>\n * Co-Author: Claude Sonnet 4.6 <noreply@anthropic.com>\n *\n * cert-manager Certificate CRD — v1\n * Ref: https://cert-manager.io/docs/reference/api-docs/#cert-manager.io/v1.Certificate\n */\n\nimport { Renderer } from \"@freelensapp/extensions\";\n\nexport interface CertificateSpec {\n secretName?: string;\n commonName?: string;\n dnsNames?: string[];\n issuerRef?: { name: string; kind: string; group?: string };\n duration?: string;\n renewBefore?: string;\n}\n\nexport interface CertificateStatus {\n notAfter?: string;\n notBefore?: string;\n renewalTime?: string;\n conditions?: Array<{ type: string; status: string; message?: string }>;\n}\n\nexport class Certificate extends Renderer.K8sApi.LensExtensionKubeObject<\n Renderer.K8sApi.KubeObjectMetadata,\n CertificateStatus,\n CertificateSpec\n> {\n declare kind: \"Certificate\";\n declare apiVersion: \"cert-manager.io/v1\";\n\n static readonly kind = \"Certificate\";\n static readonly namespaced = true;\n static readonly apiBase = \"/apis/cert-manager.io/v1/certificates\";\n\n static readonly crd: Renderer.K8sApi.LensExtensionKubeObjectCRD & { title: string } = {\n apiVersions: [\"cert-manager.io/v1\"],\n plural: \"certificates\",\n singular: \"certificate\",\n shortNames: [\"cert\"],\n title: \"Certificates\",\n };\n\n get secretName(): string | undefined {\n return this.spec.secretName;\n }\n\n get commonName(): string | undefined {\n return this.spec.commonName;\n }\n\n get dnsNames(): string[] {\n return this.spec.dnsNames ?? [];\n }\n\n get issuerRef(): { name: string; kind: string; group?: string } | undefined {\n return this.spec.issuerRef;\n }\n\n get duration(): string | undefined {\n return this.spec.duration;\n }\n\n get renewBefore(): string | undefined {\n return this.spec.renewBefore;\n }\n\n get notAfter(): string | undefined {\n return this.status?.notAfter;\n }\n\n get notBefore(): string | undefined {\n return this.status?.notBefore;\n }\n\n get renewalTime(): string | undefined {\n return this.status?.renewalTime;\n }\n\n get isReady(): boolean {\n return (this.status?.conditions ?? []).some((c) => c.type === \"Ready\" && c.status === \"True\");\n }\n\n get readyMessage(): string | undefined {\n return (this.status?.conditions ?? []).find((c) => c.type === \"Ready\")?.message;\n }\n}\n\nexport class CertificateApi extends Renderer.K8sApi.KubeApi<Certificate> {}\nexport class CertificateStore extends Renderer.K8sApi.KubeObjectStore<\n Certificate,\n CertificateApi\n> {}\n","/**\n * Author: Maifee Ul Asad <maifeeulasad@gmail.com>\n * Co-Author: Claude Sonnet 4.6 <noreply@anthropic.com>\n *\n * cert-manager ClusterIssuer CRD — v1 (cluster-scoped)\n * Ref: https://cert-manager.io/docs/reference/api-docs/#cert-manager.io/v1.ClusterIssuer\n */\n\nimport { Renderer } from \"@freelensapp/extensions\";\n\nexport interface ClusterIssuerSpec {\n acme?: unknown;\n ca?: unknown;\n selfSigned?: unknown;\n vault?: unknown;\n venafi?: unknown;\n}\n\nexport interface ClusterIssuerStatus {\n conditions?: Array<{ type: string; status: string; message?: string }>;\n}\n\nexport class ClusterIssuer extends Renderer.K8sApi.LensExtensionKubeObject<\n Renderer.K8sApi.KubeObjectMetadata,\n ClusterIssuerStatus,\n ClusterIssuerSpec\n> {\n declare kind: \"ClusterIssuer\";\n declare apiVersion: \"cert-manager.io/v1\";\n\n static readonly kind = \"ClusterIssuer\";\n static readonly namespaced = false;\n static readonly apiBase = \"/apis/cert-manager.io/v1/clusterissuers\";\n\n static readonly crd: Renderer.K8sApi.LensExtensionKubeObjectCRD & { title: string } = {\n apiVersions: [\"cert-manager.io/v1\"],\n plural: \"clusterissuers\",\n singular: \"clusterissuer\",\n shortNames: [],\n title: \"ClusterIssuers\",\n };\n\n get isReady(): boolean {\n return (this.status?.conditions ?? []).some((c) => c.type === \"Ready\" && c.status === \"True\");\n }\n\n get readyMessage(): string | undefined {\n return (this.status?.conditions ?? []).find((c) => c.type === \"Ready\")?.message;\n }\n\n get issuerType(): string {\n if (this.spec.acme) return \"ACME\";\n if (this.spec.ca) return \"CA\";\n if (this.spec.selfSigned) return \"SelfSigned\";\n if (this.spec.vault) return \"Vault\";\n if (this.spec.venafi) return \"Venafi\";\n return \"Unknown\";\n }\n}\n\nexport class ClusterIssuerApi extends Renderer.K8sApi.KubeApi<ClusterIssuer> {}\nexport class ClusterIssuerStore extends Renderer.K8sApi.KubeObjectStore<\n ClusterIssuer,\n ClusterIssuerApi\n> {}\n","/**\n * Author: Maifee Ul Asad <maifeeulasad@gmail.com>\n * Co-Author: Claude Sonnet 4.6 <noreply@anthropic.com>\n *\n * cert-manager Issuer CRD — v1 (namespace-scoped)\n * Ref: https://cert-manager.io/docs/reference/api-docs/#cert-manager.io/v1.Issuer\n */\n\nimport { Renderer } from \"@freelensapp/extensions\";\n\nexport interface IssuerSpec {\n acme?: unknown;\n ca?: unknown;\n selfSigned?: unknown;\n vault?: unknown;\n venafi?: unknown;\n}\n\nexport interface IssuerStatus {\n conditions?: Array<{ type: string; status: string; message?: string }>;\n}\n\nexport class Issuer extends Renderer.K8sApi.LensExtensionKubeObject<\n Renderer.K8sApi.KubeObjectMetadata,\n IssuerStatus,\n IssuerSpec\n> {\n declare kind: \"Issuer\";\n declare apiVersion: \"cert-manager.io/v1\";\n\n static readonly kind = \"Issuer\";\n static readonly namespaced = true;\n static readonly apiBase = \"/apis/cert-manager.io/v1/issuers\";\n\n static readonly crd: Renderer.K8sApi.LensExtensionKubeObjectCRD & { title: string } = {\n apiVersions: [\"cert-manager.io/v1\"],\n plural: \"issuers\",\n singular: \"issuer\",\n shortNames: [],\n title: \"Issuers\",\n };\n\n get isReady(): boolean {\n return (this.status?.conditions ?? []).some((c) => c.type === \"Ready\" && c.status === \"True\");\n }\n\n get readyMessage(): string | undefined {\n return (this.status?.conditions ?? []).find((c) => c.type === \"Ready\")?.message;\n }\n\n get issuerType(): string {\n if (this.spec.acme) return \"ACME\";\n if (this.spec.ca) return \"CA\";\n if (this.spec.selfSigned) return \"SelfSigned\";\n if (this.spec.vault) return \"Vault\";\n if (this.spec.venafi) return \"Venafi\";\n return \"Unknown\";\n }\n}\n\nexport class IssuerApi extends Renderer.K8sApi.KubeApi<Issuer> {}\nexport class IssuerStore extends Renderer.K8sApi.KubeObjectStore<Issuer, IssuerApi> {}\n","/**\n * Author: Maifee Ul Asad <maifeeulasad@gmail.com>\n * Co-Author: Claude Sonnet 4.6 <noreply@anthropic.com>\n */\n\nimport { Common } from \"@freelensapp/extensions\";\nimport { observable } from \"mobx\";\n\nexport interface CertManagerPreferencesModel {\n showExpiredCerts: boolean;\n}\n\nexport class CertManagerPreferencesStore extends Common.Store\n .ExtensionStore<CertManagerPreferencesModel> {\n @observable accessor showExpiredCerts = false;\n\n constructor() {\n super({\n configName: \"cert-manager-preferences-store\",\n defaults: {\n showExpiredCerts: false,\n },\n });\n }\n\n fromStore({ showExpiredCerts }: CertManagerPreferencesModel): void {\n this.showExpiredCerts = showExpiredCerts;\n }\n\n toJSON(): CertManagerPreferencesModel {\n return {\n showExpiredCerts: this.showExpiredCerts,\n };\n }\n}\n","/**\n * Author: Maifee Ul Asad <maifeeulasad@gmail.com>\n * Co-Author: Claude Sonnet 4.6 <noreply@anthropic.com>\n *\n * Raw-data accessors for cert-manager CRD objects.\n *\n * Freelens creates KubeObject instances using the Freelens-internal base class,\n * not our subclass constructors, so prototype getters on Certificate/Issuer/etc.\n * are not reachable at runtime. These helpers read spec/status from the raw\n * object properties directly.\n */\n\nimport type { Renderer } from \"@freelensapp/extensions\";\n\nimport type {\n CertificateRequestSpec,\n CertificateRequestStatus,\n CertificateSpec,\n CertificateStatus,\n ClusterIssuerSpec,\n ClusterIssuerStatus,\n IssuerSpec,\n IssuerStatus,\n} from \".\";\n\ntype AnyObj = Renderer.K8sApi.KubeObject;\ntype Raw<T> = AnyObj & { spec?: T; status?: T };\n\nfunction rawSpec<T>(obj: AnyObj): T {\n return ((obj as Raw<T>).spec as T) ?? ({} as T);\n}\n\nfunction rawStatus<T>(obj: AnyObj): T {\n return ((obj as Raw<T>).status as T) ?? ({} as T);\n}\n\nfunction conditionReady(conditions: Array<{ type: string; status: string }> | undefined): boolean {\n return (conditions ?? []).some((c) => c.type === \"Ready\" && c.status === \"True\");\n}\n\n// ── Certificate ─────────────────────────────────────────────────────────────\n\nexport function getCertSpec(obj: AnyObj): CertificateSpec {\n return rawSpec<CertificateSpec>(obj);\n}\n\nexport function getCertStatus(obj: AnyObj): CertificateStatus {\n return rawStatus<CertificateStatus>(obj);\n}\n\nexport function isCertReady(obj: AnyObj): boolean {\n return conditionReady(getCertStatus(obj).conditions);\n}\n\n// ── Issuer ───────────────────────────────────────────────────────────────────\n\nexport function getIssuerSpec(obj: AnyObj): IssuerSpec {\n return rawSpec<IssuerSpec>(obj);\n}\n\nexport function getIssuerStatus(obj: AnyObj): IssuerStatus {\n return rawStatus<IssuerStatus>(obj);\n}\n\nexport function isIssuerReady(obj: AnyObj): boolean {\n return conditionReady(getIssuerStatus(obj).conditions);\n}\n\nexport function getIssuerType(obj: AnyObj): string {\n const spec = getIssuerSpec(obj);\n if (spec.acme) return \"ACME\";\n if (spec.ca) return \"CA\";\n if (spec.selfSigned) return \"SelfSigned\";\n if (spec.vault) return \"Vault\";\n if (spec.venafi) return \"Venafi\";\n return \"Unknown\";\n}\n\n// ── ClusterIssuer ─────────────────────────────────────────────────────────────\n\nexport function getClusterIssuerSpec(obj: AnyObj): ClusterIssuerSpec {\n return rawSpec<ClusterIssuerSpec>(obj);\n}\n\nexport function getClusterIssuerStatus(obj: AnyObj): ClusterIssuerStatus {\n return rawStatus<ClusterIssuerStatus>(obj);\n}\n\nexport function isClusterIssuerReady(obj: AnyObj): boolean {\n return conditionReady(getClusterIssuerStatus(obj).conditions);\n}\n\nexport function getClusterIssuerType(obj: AnyObj): string {\n const spec = getClusterIssuerSpec(obj);\n if (spec.acme) return \"ACME\";\n if (spec.ca) return \"CA\";\n if (spec.selfSigned) return \"SelfSigned\";\n if (spec.vault) return \"Vault\";\n if (spec.venafi) return \"Venafi\";\n return \"Unknown\";\n}\n\n// ── CertificateRequest ────────────────────────────────────────────────────────\n\nexport function getCertReqSpec(obj: AnyObj): CertificateRequestSpec {\n return rawSpec<CertificateRequestSpec>(obj);\n}\n\nexport function getCertReqStatus(obj: AnyObj): CertificateRequestStatus {\n return rawStatus<CertificateRequestStatus>(obj);\n}\n\nexport function isCertReqReady(obj: AnyObj): boolean {\n return conditionReady(getCertReqStatus(obj).conditions);\n}\n\nexport function isCertReqDenied(obj: AnyObj): boolean {\n return (getCertReqStatus(obj).conditions ?? []).some(\n (c) => c.type === \"Denied\" && c.status === \"True\",\n );\n}\n\nexport function isCertReqApproved(obj: AnyObj): boolean {\n return (getCertReqStatus(obj).conditions ?? []).some(\n (c) => c.type === \"Approved\" && c.status === \"True\",\n );\n}\n","/**\n * Author: Maifee Ul Asad <maifeeulasad@gmail.com>\n * Co-Author: Claude Sonnet 4.6 <noreply@anthropic.com>\n */\n\nimport { Renderer } from \"@freelensapp/extensions\";\nimport { getCertSpec, getCertStatus, isCertReady } from \"../../common/api/accessors\";\n\nimport type { Certificate } from \"../../common/api\";\n\ninterface Props {\n object: Certificate;\n}\n\nexport function CertificateDetails({ object: cert }: Props) {\n const spec = getCertSpec(cert);\n const status = getCertStatus(cert);\n const ready = isCertReady(cert);\n const readyMessage = (status.conditions ?? []).find((c) => c.type === \"Ready\")?.message;\n const dnsNames = spec.dnsNames ?? [];\n\n return (\n <Renderer.Component.DrawerItem name=\"Certificate Details\" labelsOnly>\n <Renderer.Component.DrawerItem name=\"Secret Name\">\n {spec.secretName ?? \"-\"}\n </Renderer.Component.DrawerItem>\n\n <Renderer.Component.DrawerItem name=\"Common Name\">\n {spec.commonName ?? \"-\"}\n </Renderer.Component.DrawerItem>\n\n <Renderer.Component.DrawerItem name=\"DNS Names\">\n {dnsNames.length > 0 ? dnsNames.join(\", \") : \"-\"}\n </Renderer.Component.DrawerItem>\n\n <Renderer.Component.DrawerItem name=\"Issuer\">\n {spec.issuerRef ? `${spec.issuerRef.kind}/${spec.issuerRef.name}` : \"-\"}\n </Renderer.Component.DrawerItem>\n\n <Renderer.Component.DrawerItem name=\"Duration\">\n {spec.duration ?? \"-\"}\n </Renderer.Component.DrawerItem>\n\n <Renderer.Component.DrawerItem name=\"Renew Before\">\n {spec.renewBefore ?? \"-\"}\n </Renderer.Component.DrawerItem>\n\n <Renderer.Component.DrawerItem name=\"Not Before\">\n {status.notBefore ?? \"-\"}\n </Renderer.Component.DrawerItem>\n\n <Renderer.Component.DrawerItem name=\"Not After (Expires)\">\n {status.notAfter ?? \"-\"}\n </Renderer.Component.DrawerItem>\n\n <Renderer.Component.DrawerItem name=\"Renewal Time\">\n {status.renewalTime ?? \"-\"}\n </Renderer.Component.DrawerItem>\n\n <Renderer.Component.DrawerItem name=\"Status\">\n {ready ? \"✓ Ready\" : \"✗ Not Ready\"}\n </Renderer.Component.DrawerItem>\n\n {readyMessage && (\n <Renderer.Component.DrawerItem name=\"Message\">{readyMessage}</Renderer.Component.DrawerItem>\n )}\n </Renderer.Component.DrawerItem>\n );\n}\n","/**\n * Author: Maifee Ul Asad <maifeeulasad@gmail.com>\n * Co-Author: Claude Sonnet 4.6 <noreply@anthropic.com>\n */\n\nimport { Renderer } from \"@freelensapp/extensions\";\nimport {\n getCertReqSpec,\n getCertReqStatus,\n isCertReqApproved,\n isCertReqDenied,\n isCertReqReady,\n} from \"../../common/api/accessors\";\n\nimport type { CertificateRequest } from \"../../common/api\";\n\ninterface Props {\n object: CertificateRequest;\n}\n\nexport function CertificateRequestDetails({ object: cr }: Props) {\n const spec = getCertReqSpec(cr);\n const status = getCertReqStatus(cr);\n const usages = spec.usages ?? [];\n const readyMessage = (status.conditions ?? []).find((c) => c.type === \"Ready\")?.message;\n\n return (\n <Renderer.Component.DrawerItem name=\"CertificateRequest Details\" labelsOnly>\n <Renderer.Component.DrawerItem name=\"Issuer\">\n {spec.issuerRef ? `${spec.issuerRef.kind}/${spec.issuerRef.name}` : \"-\"}\n </Renderer.Component.DrawerItem>\n\n <Renderer.Component.DrawerItem name=\"Duration\">\n {spec.duration ?? \"-\"}\n </Renderer.Component.DrawerItem>\n\n <Renderer.Component.DrawerItem name=\"Is CA\">\n {spec.isCA ? \"Yes\" : \"No\"}\n </Renderer.Component.DrawerItem>\n\n {usages.length > 0 && (\n <Renderer.Component.DrawerItem name=\"Usages\">\n {usages.join(\", \")}\n </Renderer.Component.DrawerItem>\n )}\n\n <Renderer.Component.DrawerItem name=\"Status\">\n {isCertReqReady(cr) ? \"✓ Ready\" : isCertReqDenied(cr) ? \"✗ Denied\" : \"⏳ Pending\"}\n </Renderer.Component.DrawerItem>\n\n <Renderer.Component.DrawerItem name=\"Approved\">\n {isCertReqApproved(cr) ? \"Yes\" : \"No\"}\n </Renderer.Component.DrawerItem>\n\n {status.failureTime && (\n <Renderer.Component.DrawerItem name=\"Failed At\">\n {status.failureTime}\n </Renderer.Component.DrawerItem>\n )}\n\n {readyMessage && (\n <Renderer.Component.DrawerItem name=\"Message\">{readyMessage}</Renderer.Component.DrawerItem>\n )}\n </Renderer.Component.DrawerItem>\n );\n}\n","/**\n * Author: Maifee Ul Asad <maifeeulasad@gmail.com>\n * Co-Author: Claude Sonnet 4.6 <noreply@anthropic.com>\n */\n\nimport { Renderer } from \"@freelensapp/extensions\";\nimport {\n getClusterIssuerStatus,\n getClusterIssuerType,\n isClusterIssuerReady,\n} from \"../../common/api/accessors\";\n\nimport type { ClusterIssuer } from \"../../common/api\";\n\ninterface Props {\n object: ClusterIssuer;\n}\n\nexport function ClusterIssuerDetails({ object: issuer }: Props) {\n const status = getClusterIssuerStatus(issuer);\n const readyMessage = (status.conditions ?? []).find((c) => c.type === \"Ready\")?.message;\n\n return (\n <Renderer.Component.DrawerItem name=\"ClusterIssuer Details\" labelsOnly>\n <Renderer.Component.DrawerItem name=\"Type\">\n {getClusterIssuerType(issuer)}\n </Renderer.Component.DrawerItem>\n\n <Renderer.Component.DrawerItem name=\"Scope\">Cluster-wide</Renderer.Component.DrawerItem>\n\n <Renderer.Component.DrawerItem name=\"Status\">\n {isClusterIssuerReady(issuer) ? \"✓ Ready\" : \"✗ Not Ready\"}\n </Renderer.Component.DrawerItem>\n\n {readyMessage && (\n <Renderer.Component.DrawerItem name=\"Message\">{readyMessage}</Renderer.Component.DrawerItem>\n )}\n </Renderer.Component.DrawerItem>\n );\n}\n","/**\n * Author: Maifee Ul Asad <maifeeulasad@gmail.com>\n * Co-Author: Claude Sonnet 4.6 <noreply@anthropic.com>\n */\n\nimport { Renderer } from \"@freelensapp/extensions\";\nimport { getIssuerStatus, getIssuerType, isIssuerReady } from \"../../common/api/accessors\";\n\nimport type { Issuer } from \"../../common/api\";\n\ninterface Props {\n object: Issuer;\n}\n\nexport function IssuerDetails({ object: issuer }: Props) {\n const status = getIssuerStatus(issuer);\n const readyMessage = (status.conditions ?? []).find((c) => c.type === \"Ready\")?.message;\n\n return (\n <Renderer.Component.DrawerItem name=\"Issuer Details\" labelsOnly>\n <Renderer.Component.DrawerItem name=\"Type\">\n {getIssuerType(issuer)}\n </Renderer.Component.DrawerItem>\n\n <Renderer.Component.DrawerItem name=\"Status\">\n {isIssuerReady(issuer) ? \"✓ Ready\" : \"✗ Not Ready\"}\n </Renderer.Component.DrawerItem>\n\n {readyMessage && (\n <Renderer.Component.DrawerItem name=\"Message\">{readyMessage}</Renderer.Component.DrawerItem>\n )}\n </Renderer.Component.DrawerItem>\n );\n}\n","/**\n * Author: Maifee Ul Asad <maifeeulasad@gmail.com>\n * Co-Author: Claude Sonnet 4.6 <noreply@anthropic.com>\n *\n * \"Delete (cascade)\" context menu item for Certificate resources.\n *\n * Deletes the Certificate object and, if spec.secretName is set, deletes that\n * Secret too. cert-manager does NOT garbage-collect the Secret on Certificate\n * deletion unless --enable-certificate-owner-ref is set on the controller.\n *\n * Ref: https://cert-manager.io/docs/usage/certificate/#cleaning-up-after-a-deleted-certificate\n */\n\nimport { Renderer } from \"@freelensapp/extensions\";\nimport { Certificate } from \"../../common/api\";\nimport { getCertSpec } from \"../../common/api/accessors\";\n\nimport type { CertificateStore } from \"../../common/api\";\n\ninterface Props {\n object: Certificate;\n}\n\nexport function CertificateDeleteCascadeMenuItem({ object: cert }: Props) {\n function handleDeleteCascade() {\n const ns = cert.getNs();\n const name = cert.getName();\n const secretName = getCertSpec(cert).secretName;\n\n Renderer.Component.ConfirmDialog.open({\n message: secretName\n ? `Delete Certificate \"${name}\" and its managed Secret \"${secretName}\"?`\n : `Delete Certificate \"${name}\"?`,\n labelOk: \"Delete\",\n ok: async () => {\n try {\n const certApi = (Certificate.getStore() as CertificateStore).api;\n await certApi.delete({ name, namespace: ns });\n\n if (secretName) {\n const secretApi = Renderer.K8sApi.apiManager.getApiByKind(\n \"Secret\",\n \"v1\",\n ) as unknown as Renderer.K8sApi.KubeApi<Renderer.K8sApi.KubeObject>;\n if (secretApi) {\n await secretApi.delete({ name: secretName, namespace: ns });\n }\n }\n } catch (err) {\n console.error(`[cert-manager] cascade delete failed for ${ns}/${name}:`, err);\n }\n },\n });\n }\n\n return (\n <Renderer.Component.MenuItem onClick={handleDeleteCascade}>\n Delete (cascade)\n </Renderer.Component.MenuItem>\n );\n}\n","/**\n * Author: Maifee Ul Asad <maifeeulasad@gmail.com>\n * Co-Author: Claude Sonnet 4.6 <noreply@anthropic.com>\n *\n * \"Force Renew\" context menu item for Certificate resources.\n *\n * cert-manager does not have a direct API call for forced renewal; the\n * canonical approach is to delete the managed Secret so cert-manager reissues\n * it, OR to add/toggle the annotation\n * `cert-manager.io/issuer-name` on the Certificate — but the most reliable\n * in-cluster trigger is bumping the `cert-manager.io/trigger-renew` annotation\n * with a timestamp, which the controller watches.\n *\n * Ref: https://cert-manager.io/docs/usage/certificate/#triggering-certificate-renewal-manually\n */\n\nimport { Renderer } from \"@freelensapp/extensions\";\nimport { Certificate } from \"../../common/api\";\n\nimport type { CertificateStore } from \"../../common/api\";\n\ninterface Props {\n object: Certificate;\n}\n\nexport function CertificateForceRenewMenuItem({ object: cert }: Props) {\n async function handleForceRenew() {\n const api = (Certificate.getStore() as CertificateStore).api;\n const ns = cert.getNs();\n const name = cert.getName();\n\n try {\n await api.patch(\n { name, namespace: ns },\n {\n metadata: {\n annotations: {\n \"cert-manager.io/trigger-renew\": new Date().toISOString(),\n },\n },\n },\n \"merge\",\n );\n } catch (err) {\n console.error(`[cert-manager] force renew failed for ${ns}/${name}:`, err);\n }\n }\n\n return (\n <Renderer.Component.MenuItem onClick={handleForceRenew}>\n Force Renew\n </Renderer.Component.MenuItem>\n );\n}\n","/**\n * Author: Maifee Ul Asad <maifeeulasad@gmail.com>\n * Co-Author: Claude Sonnet 4.6 <noreply@anthropic.com>\n */\n\nexport function NotInstalled({ resource }: { resource: string }) {\n return (\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n height: \"100%\",\n gap: \"8px\",\n opacity: 0.6,\n }}\n >\n <span style={{ fontSize: \"2rem\" }}>⚠️</span>\n <p>\n <strong>cert-manager</strong> is not installed in this cluster.\n </p>\n <p style={{ fontSize: \"0.85rem\" }}>\n {resource} API is not registered. Install cert-manager to use this page.\n </p>\n </div>\n );\n}\n","/**\n * Author: Maifee Ul Asad <maifeeulasad@gmail.com>\n * Co-Author: Claude Sonnet 4.6 <noreply@anthropic.com>\n */\n\nimport { Renderer } from \"@freelensapp/extensions\";\nimport { CertificateRequest, type CertificateRequestApi } from \"../../common/api\";\nimport {\n getCertReqSpec,\n isCertReqApproved,\n isCertReqDenied,\n isCertReqReady,\n} from \"../../common/api/accessors\";\nimport { NotInstalled } from \"./not-installed\";\n\nexport function CertificateRequestsPage() {\n let store: ReturnType<typeof CertificateRequest.getStore<CertificateRequest>>;\n try {\n store = CertificateRequest.getStore<CertificateRequest>();\n } catch {\n return <NotInstalled resource=\"CertificateRequest\" />;\n }\n\n return (\n <Renderer.Component.KubeObjectListLayout<CertificateRequest, CertificateRequestApi>\n store={store}\n isConfigurable\n tableId=\"cert-manager-certificate-requests\"\n className=\"CertificateRequestsPage\"\n renderTableHeader={[\n { title: \"Name\", className: \"name\" },\n { title: \"Namespace\", className: \"namespace\" },\n { title: \"Ready\", className: \"ready\" },\n { title: \"Approved\", className: \"approved\" },\n { title: \"Issuer\", className: \"issuer\" },\n ]}\n renderTableContents={(cr) => {\n const issuerRef = getCertReqSpec(cr).issuerRef;\n return [\n cr.getName(),\n cr.getNs(),\n isCertReqReady(cr) ? \"✓\" : \"✗\",\n isCertReqApproved(cr) ? \"✓\" : isCertReqDenied(cr) ? \"Denied\" : \"-\",\n issuerRef ? `${issuerRef.kind}/${issuerRef.name}` : \"-\",\n ];\n }}\n />\n );\n}\n","/**\n * Author: Maifee Ul Asad <maifeeulasad@gmail.com>\n * Co-Author: Claude Sonnet 4.6 <noreply@anthropic.com>\n */\n\nimport { Renderer } from \"@freelensapp/extensions\";\nimport {\n Certificate,\n type CertificateApi,\n type CertificateSpec,\n type CertificateStatus,\n} from \"../../common/api\";\n\nfunction certSpec(obj: Renderer.K8sApi.KubeObject): CertificateSpec {\n return (obj as unknown as { spec: CertificateSpec }).spec ?? {};\n}\n\nfunction certStatus(obj: Renderer.K8sApi.KubeObject): CertificateStatus {\n return (obj as unknown as { status: CertificateStatus }).status ?? {};\n}\n\nfunction certIsReady(obj: Renderer.K8sApi.KubeObject): boolean {\n return (certStatus(obj).conditions ?? []).some((c) => c.type === \"Ready\" && c.status === \"True\");\n}\n\nimport { NotInstalled } from \"./not-installed\";\n\nexport function CertificatesPage() {\n let store: ReturnType<typeof Certificate.getStore<Certificate>>;\n try {\n store = Certificate.getStore<Certificate>();\n } catch {\n return <NotInstalled resource=\"Certificate\" />;\n }\n\n return (\n <Renderer.Component.KubeObjectListLayout<Certificate, CertificateApi>\n store={store}\n isConfigurable\n tableId=\"cert-manager-certificates\"\n className=\"CertificatesPage\"\n renderTableHeader={[\n { title: \"Name\", className: \"name\" },\n { title: \"Namespace\", className: \"namespace\" },\n { title: \"Ready\", className: \"ready\" },\n { title: \"Secret\", className: \"secret\" },\n { title: \"Expires\", className: \"expiry\" },\n ]}\n renderTableContents={(cert) => [\n cert.getName(),\n cert.getNs(),\n certIsReady(cert) ? \"✓\" : \"✗\",\n certSpec(cert).secretName ?? \"-\",\n certStatus(cert).notAfter ?? \"-\",\n ]}\n />\n );\n}\n","/**\n * Author: Maifee Ul Asad <maifeeulasad@gmail.com>\n * Co-Author: Claude Sonnet 4.6 <noreply@anthropic.com>\n */\n\nimport { Renderer } from \"@freelensapp/extensions\";\nimport { ClusterIssuer, type ClusterIssuerApi } from \"../../common/api\";\nimport { getClusterIssuerType, isClusterIssuerReady } from \"../../common/api/accessors\";\nimport { NotInstalled } from \"./not-installed\";\n\nexport function ClusterIssuersPage() {\n let store: ReturnType<typeof ClusterIssuer.getStore<ClusterIssuer>>;\n try {\n store = ClusterIssuer.getStore<ClusterIssuer>();\n } catch {\n return <NotInstalled resource=\"ClusterIssuer\" />;\n }\n\n return (\n <Renderer.Component.KubeObjectListLayout<ClusterIssuer, ClusterIssuerApi>\n store={store}\n isConfigurable\n tableId=\"cert-manager-cluster-issuers\"\n className=\"ClusterIssuersPage\"\n renderTableHeader={[\n { title: \"Name\", className: \"name\" },\n { title: \"Ready\", className: \"ready\" },\n { title: \"Type\", className: \"type\" },\n ]}\n renderTableContents={(issuer) => [\n issuer.getName(),\n isClusterIssuerReady(issuer) ? \"✓\" : \"✗\",\n getClusterIssuerType(issuer),\n ]}\n />\n );\n}\n","/**\n * Author: Maifee Ul Asad <maifeeulasad@gmail.com>\n * Co-Author: Claude Sonnet 4.6 <noreply@anthropic.com>\n */\n\nimport { Renderer } from \"@freelensapp/extensions\";\nimport { Issuer, type IssuerApi } from \"../../common/api\";\nimport { getIssuerType, isIssuerReady } from \"../../common/api/accessors\";\nimport { NotInstalled } from \"./not-installed\";\n\nexport function IssuersPage() {\n let store: ReturnType<typeof Issuer.getStore<Issuer>>;\n try {\n store = Issuer.getStore<Issuer>();\n } catch {\n return <NotInstalled resource=\"Issuer\" />;\n }\n\n return (\n <Renderer.Component.KubeObjectListLayout<Issuer, IssuerApi>\n store={store}\n isConfigurable\n tableId=\"cert-manager-issuers\"\n className=\"IssuersPage\"\n renderTableHeader={[\n { title: \"Name\", className: \"name\" },\n { title: \"Namespace\", className: \"namespace\" },\n { title: \"Ready\", className: \"ready\" },\n { title: \"Type\", className: \"type\" },\n ]}\n renderTableContents={(issuer) => [\n issuer.getName(),\n issuer.getNs(),\n isIssuerReady(issuer) ? \"✓\" : \"✗\",\n getIssuerType(issuer),\n ]}\n />\n );\n}\n","/**\n * Author: Maifee Ul Asad <maifeeulasad@gmail.com>\n * Co-Author: Claude Sonnet 4.6 <noreply@anthropic.com>\n */\n\nimport { observer } from \"mobx-react\";\nimport { CertManagerPreferencesStore } from \"../../common/store\";\n\nexport const CertManagerPreferenceInput = observer(function CertManagerPreferenceInput() {\n const store = CertManagerPreferencesStore.getInstanceOrCreate() as CertManagerPreferencesStore;\n\n return (\n <label style={{ display: \"flex\", alignItems: \"center\", gap: \"8px\", cursor: \"pointer\" }}>\n <input\n type=\"checkbox\"\n checked={store.showExpiredCerts}\n onChange={(e) => {\n store.fromStore({ showExpiredCerts: e.target.checked });\n }}\n />\n Show expired certificates\n </label>\n );\n});\n\nexport function CertManagerPreferenceHint() {\n return (\n <small>\n When enabled, expired certificates remain visible in the list instead of being filtered out.\n </small>\n );\n}\n","/**\n * Author: Maifee Ul Asad <maifeeulasad@gmail.com>\n * Co-Author: Claude Sonnet 4.6 <noreply@anthropic.com>\n */\n\nimport { Renderer } from \"@freelensapp/extensions\";\nimport { Certificate, CertificateRequest, ClusterIssuer, Issuer } from \"../common/api\";\n\ntype DetailsComponent =\n Renderer.LensExtension[\"kubeObjectDetailItems\"][number][\"components\"][\"Details\"];\ntype MenuItemComponent =\n Renderer.LensExtension[\"kubeObjectMenuItems\"][number][\"components\"][\"MenuItem\"];\n\nimport { CertManagerPreferencesStore } from \"../common/store\";\nimport { CertificateDetails } from \"./details/certificate-details\";\nimport { CertificateRequestDetails } from \"./details/certificate-request-details\";\nimport { ClusterIssuerDetails } from \"./details/cluster-issuer-details\";\nimport { IssuerDetails } from \"./details/issuer-details\";\nimport { CertificateDeleteCascadeMenuItem } from \"./menus/certificate-delete-cascade-menu-item\";\nimport { CertificateForceRenewMenuItem } from \"./menus/certificate-force-renew-menu-item\";\nimport { CertificateRequestsPage } from \"./pages/certificate-requests-page\";\nimport { CertificatesPage } from \"./pages/certificates-page\";\nimport { ClusterIssuersPage } from \"./pages/cluster-issuers-page\";\nimport { IssuersPage } from \"./pages/issuers-page\";\nimport {\n CertManagerPreferenceHint,\n CertManagerPreferenceInput,\n} from \"./preferences/cert-manager-preference\";\n\nexport default class CertManagerRenderer extends Renderer.LensExtension {\n async onActivate() {\n CertManagerPreferencesStore.getInstanceOrCreate().loadExtension(this);\n }\n\n customResources = [Certificate, CertificateRequest, Issuer, ClusterIssuer];\n\n kubeObjectDetailItems: Renderer.LensExtension[\"kubeObjectDetailItems\"] = [\n Renderer.K8sApi.detailsFor(Certificate, {\n priority: 10,\n Details: CertificateDetails as unknown as DetailsComponent,\n }),\n Renderer.K8sApi.detailsFor(CertificateRequest, {\n priority: 10,\n Details: CertificateRequestDetails as unknown as DetailsComponent,\n }),\n Renderer.K8sApi.detailsFor(Issuer, {\n priority: 10,\n Details: IssuerDetails as unknown as DetailsComponent,\n }),\n Renderer.K8sApi.detailsFor(ClusterIssuer, {\n priority: 10,\n Details: ClusterIssuerDetails as unknown as DetailsComponent,\n }),\n ];\n\n clusterPages: Renderer.LensExtension[\"clusterPages\"] = [\n {\n id: \"cert-manager-certificates\",\n components: {\n Page: () => <CertificatesPage />,\n },\n },\n {\n id: \"cert-manager-issuers\",\n components: {\n Page: () => <IssuersPage />,\n },\n },\n {\n id: \"cert-manager-cluster-issuers\",\n components: {\n Page: () => <ClusterIssuersPage />,\n },\n },\n {\n id: \"cert-manager-certificate-requests\",\n components: {\n Page: () => <CertificateRequestsPage />,\n },\n },\n ];\n\n appPreferences = [\n {\n title: \"Cert Manager\",\n components: {\n Input: () => <CertManagerPreferenceInput />,\n Hint: () => <CertManagerPreferenceHint />,\n },\n },\n ];\n\n kubeObjectMenuItems: Renderer.LensExtension[\"kubeObjectMenuItems\"] = [\n Renderer.K8sApi.menuItemFor(Certificate, {\n MenuItem: CertificateForceRenewMenuItem as unknown as MenuItemComponent,\n }),\n Renderer.K8sApi.menuItemFor(Certificate, {\n MenuItem: CertificateDeleteCascadeMenuItem as unknown as MenuItemComponent,\n }),\n ];\n\n clusterPageMenus = [\n {\n id: \"cert-manager\",\n title: \"Cert Manager\",\n components: {\n Icon: () => <span>🔐</span>,\n },\n },\n {\n id: \"cert-manager-certificates\",\n parentId: \"cert-manager\",\n title: Certificate.crd.title,\n target: { pageId: \"cert-manager-certificates\" },\n components: {\n Icon: () => <span>📜</span>,\n },\n },\n {\n id: \"cert-manager-issuers\",\n parentId: \"cert-manager\",\n title: Issuer.crd.title,\n target: { pageId: \"cert-manager-issuers\" },\n components: {\n Icon: () => <span>🏛️</span>,\n },\n },\n {\n id: \"cert-manager-cluster-issuers\",\n parentId: \"cert-manager\",\n title: ClusterIssuer.crd.title,\n target: { pageId: \"cert-manager-cluster-issuers\" },\n components: {\n Icon: () => <span>🌐</span>,\n },\n },\n {\n id: \"cert-manager-certificate-requests\",\n parentId: \"cert-manager\",\n title: CertificateRequest.crd.title,\n target: { pageId: \"cert-manager-certificate-requests\" },\n components: {\n Icon: () => <span>📋</span>,\n },\n },\n ];\n}\n"],"ignoreList":[0],"mappings":"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"}
|