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 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: cert.secretName ?? "-"
386
+ children: spec.secretName ?? "-"
312
387
  }),
313
388
  /* @__PURE__ */ jsx(Renderer.Component.DrawerItem, {
314
389
  name: "Common Name",
315
- children: cert.commonName ?? "-"
390
+ children: spec.commonName ?? "-"
316
391
  }),
317
392
  /* @__PURE__ */ jsx(Renderer.Component.DrawerItem, {
318
393
  name: "DNS Names",
319
- children: cert.dnsNames.length > 0 ? cert.dnsNames.join(", ") : "-"
394
+ children: dnsNames.length > 0 ? dnsNames.join(", ") : "-"
320
395
  }),
321
396
  /* @__PURE__ */ jsx(Renderer.Component.DrawerItem, {
322
397
  name: "Issuer",
323
- children: cert.issuerRef ? `${cert.issuerRef.kind}/${cert.issuerRef.name}` : "-"
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: cert.duration ?? "-"
402
+ children: spec.duration ?? "-"
328
403
  }),
329
404
  /* @__PURE__ */ jsx(Renderer.Component.DrawerItem, {
330
405
  name: "Renew Before",
331
- children: cert.renewBefore ?? "-"
406
+ children: spec.renewBefore ?? "-"
332
407
  }),
333
408
  /* @__PURE__ */ jsx(Renderer.Component.DrawerItem, {
334
409
  name: "Not Before",
335
- children: cert.notBefore ?? "-"
410
+ children: status.notBefore ?? "-"
336
411
  }),
337
412
  /* @__PURE__ */ jsx(Renderer.Component.DrawerItem, {
338
413
  name: "Not After (Expires)",
339
- children: cert.notAfter ?? "-"
414
+ children: status.notAfter ?? "-"
340
415
  }),
341
416
  /* @__PURE__ */ jsx(Renderer.Component.DrawerItem, {
342
417
  name: "Renewal Time",
343
- children: cert.renewalTime ?? "-"
418
+ children: status.renewalTime ?? "-"
344
419
  }),
345
420
  /* @__PURE__ */ jsx(Renderer.Component.DrawerItem, {
346
421
  name: "Status",
347
- children: cert.isReady ? "✓ Ready" : "✗ Not Ready"
422
+ children: ready ? "✓ Ready" : "✗ Not Ready"
348
423
  }),
349
- cert.readyMessage && /* @__PURE__ */ jsx(Renderer.Component.DrawerItem, {
424
+ readyMessage && /* @__PURE__ */ jsx(Renderer.Component.DrawerItem, {
350
425
  name: "Message",
351
- children: cert.readyMessage
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: cr.issuerRef ? `${cr.issuerRef.kind}/${cr.issuerRef.name}` : "-"
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: cr.duration ?? "-"
451
+ children: spec.duration ?? "-"
373
452
  }),
374
453
  /* @__PURE__ */ jsx(Renderer.Component.DrawerItem, {
375
454
  name: "Is CA",
376
- children: cr.isCA ? "Yes" : "No"
455
+ children: spec.isCA ? "Yes" : "No"
377
456
  }),
378
- cr.usages.length > 0 && /* @__PURE__ */ jsx(Renderer.Component.DrawerItem, {
457
+ usages.length > 0 && /* @__PURE__ */ jsx(Renderer.Component.DrawerItem, {
379
458
  name: "Usages",
380
- children: cr.usages.join(", ")
459
+ children: usages.join(", ")
381
460
  }),
382
461
  /* @__PURE__ */ jsx(Renderer.Component.DrawerItem, {
383
462
  name: "Status",
384
- children: cr.isReady ? "✓ Ready" : cr.isDenied ? "✗ Denied" : "⏳ Pending"
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.isApproved ? "Yes" : "No"
467
+ children: isCertReqApproved(cr) ? "Yes" : "No"
389
468
  }),
390
- cr.failureTime && /* @__PURE__ */ jsx(Renderer.Component.DrawerItem, {
469
+ status.failureTime && /* @__PURE__ */ jsx(Renderer.Component.DrawerItem, {
391
470
  name: "Failed At",
392
- children: cr.failureTime
471
+ children: status.failureTime
393
472
  }),
394
- cr.readyMessage && /* @__PURE__ */ jsx(Renderer.Component.DrawerItem, {
473
+ readyMessage && /* @__PURE__ */ jsx(Renderer.Component.DrawerItem, {
395
474
  name: "Message",
396
- children: cr.readyMessage
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.issuerType
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.isReady ? "✓ Ready" : "✗ Not Ready"
501
+ children: isClusterIssuerReady(issuer) ? "✓ Ready" : "✗ Not Ready"
422
502
  }),
423
- issuer.readyMessage && /* @__PURE__ */ jsx(Renderer.Component.DrawerItem, {
503
+ readyMessage && /* @__PURE__ */ jsx(Renderer.Component.DrawerItem, {
424
504
  name: "Message",
425
- children: issuer.readyMessage
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.issuerType
523
+ children: getIssuerType(issuer)
443
524
  }),
444
525
  /* @__PURE__ */ jsx(Renderer.Component.DrawerItem, {
445
526
  name: "Status",
446
- children: issuer.isReady ? "✓ Ready" : "✗ Not Ready"
527
+ children: isIssuerReady(issuer) ? "✓ Ready" : "✗ Not Ready"
447
528
  }),
448
- issuer.readyMessage && /* @__PURE__ */ jsx(Renderer.Component.DrawerItem, {
529
+ readyMessage && /* @__PURE__ */ jsx(Renderer.Component.DrawerItem, {
449
530
  name: "Message",
450
- children: issuer.readyMessage
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
- const store = CertificateRequest.getStore();
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.getName(),
571
- cr.getNs(),
572
- cr.isReady ? "✓" : "✗",
573
- cr.isApproved ? "✓" : cr.isDenied ? "Denied" : "-",
574
- cr.issuerRef ? `${cr.issuerRef.kind}/${cr.issuerRef.name}` : "-"
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
- const store = Certificate.getStore();
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.isReady ? "✓" : "✗",
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
- const store = ClusterIssuer.getStore();
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.isReady ? "✓" : "✗",
650
- issuer.issuerType
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
- const store = Issuer.getStore();
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.isReady ? "✓" : "✗",
688
- issuer.issuerType
829
+ isIssuerReady(issuer) ? "✓" : "✗",
830
+ getIssuerType(issuer)
689
831
  ]
690
832
  });
691
833
  }
@@ -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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "freelens-cert-manager",
3
- "version": "0.1.1",
3
+ "version": "0.2.1",
4
4
  "description": "Freelens v2 extension for managing cert-manager resources",
5
5
  "repository": {
6
6
  "type": "git",