pepr 0.0.9 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,470 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // SPDX-FileCopyrightText: 2023-Present The Pepr Authors
3
+
4
+ import { GroupVersionKind } from "./types";
5
+
6
+ export const gvkMap: Record<string, GroupVersionKind> = {
7
+ /**
8
+ * Represents a K8s ConfigMap resource.
9
+ * ConfigMap holds configuration data for pods to consume.
10
+ * @see {@link https://kubernetes.io/docs/concepts/configuration/configmap/}
11
+ */
12
+ V1ConfigMap: {
13
+ kind: "ConfigMap",
14
+ version: "v1",
15
+ group: "",
16
+ },
17
+
18
+ /**
19
+ * Represents a K8s Endpoints resource.
20
+ * Endpoints expose a service's IP addresses and ports to other resources.
21
+ * @see {@link https://kubernetes.io/docs/concepts/services-networking/service/#endpoints}
22
+ */
23
+ V1Endpoint: {
24
+ kind: "Endpoints",
25
+ version: "v1",
26
+ group: "",
27
+ },
28
+
29
+ /**
30
+ * Represents a K8s LimitRange resource.
31
+ * LimitRange enforces constraints on the resource consumption of objects in a namespace.
32
+ * @see {@link https://kubernetes.io/docs/concepts/policy/limit-range/}
33
+ */
34
+ V1LimitRange: {
35
+ kind: "LimitRange",
36
+ version: "v1",
37
+ group: "",
38
+ },
39
+
40
+ /**
41
+ * Represents a K8s Namespace resource.
42
+ * Namespace is a way to divide cluster resources between multiple users.
43
+ * @see {@link https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/}
44
+ */
45
+ V1Namespace: {
46
+ kind: "Namespace",
47
+ version: "v1",
48
+ group: "",
49
+ },
50
+
51
+ /**
52
+ * Represents a K8s Node resource.
53
+ * Node is a worker machine in Kubernetes.
54
+ * @see {@link https://kubernetes.io/docs/concepts/architecture/nodes/}
55
+ */
56
+ V1Node: {
57
+ kind: "Node",
58
+ version: "v1",
59
+ group: "",
60
+ },
61
+
62
+ /**
63
+ * Represents a K8s PersistentVolumeClaim resource.
64
+ * PersistentVolumeClaim is a user's request for and claim to a persistent volume.
65
+ * @see {@link https://kubernetes.io/docs/concepts/storage/persistent-volumes/#persistentvolumeclaims}
66
+ */
67
+ V1PersistentVolumeClaim: {
68
+ kind: "PersistentVolumeClaim",
69
+ version: "v1",
70
+ group: "",
71
+ },
72
+
73
+ /**
74
+ * Represents a K8s PersistentVolume resource.
75
+ * PersistentVolume is a piece of storage in the cluster that has been provisioned by an administrator.
76
+ * @see {@link https://kubernetes.io/docs/concepts/storage/persistent-volumes/}
77
+ */
78
+ V1PersistentVolume: {
79
+ kind: "PersistentVolume",
80
+ version: "v1",
81
+ group: "",
82
+ },
83
+
84
+ /**
85
+ * Represents a K8s Pod resource.
86
+ * Pod is the smallest and simplest unit in the Kubernetes object model.
87
+ * @see {@link https://kubernetes.io/docs/concepts/workloads/pods/}
88
+ */
89
+ V1Pod: {
90
+ kind: "Pod",
91
+ version: "v1",
92
+ group: "",
93
+ },
94
+ /**
95
+ * Represents a K8s PodTemplate resource.
96
+ * PodTemplate is an object that describes the pod that will be created from a higher level abstraction.
97
+ * @see {@link https://kubernetes.io/docs/concepts/workloads/controllers/#pod-template}
98
+ */
99
+ V1PodTemplate: {
100
+ kind: "PodTemplate",
101
+ version: "v1",
102
+ group: "",
103
+ },
104
+
105
+ /**
106
+ * Represents a K8s ReplicationController resource.
107
+ * ReplicationController ensures that a specified number of pod replicas are running at any given time.
108
+ * @see {@link https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/}
109
+ */
110
+ V1ReplicationController: {
111
+ kind: "ReplicationController",
112
+ version: "v1",
113
+ group: "",
114
+ },
115
+
116
+ /**
117
+ * Represents a K8s ResourceQuota resource.
118
+ * ResourceQuota provides constraints that limit resource consumption per namespace.
119
+ * @see {@link https://kubernetes.io/docs/concepts/policy/resource-quotas/}
120
+ */
121
+ V1ResourceQuota: {
122
+ kind: "ResourceQuota",
123
+ version: "v1",
124
+ group: "",
125
+ },
126
+
127
+ /**
128
+ * Represents a K8s Secret resource.
129
+ * Secret holds secret data of a certain type.
130
+ * @see {@link https://kubernetes.io/docs/concepts/configuration/secret/}
131
+ */
132
+ V1Secret: {
133
+ kind: "Secret",
134
+ version: "v1",
135
+ group: "",
136
+ },
137
+
138
+ /**
139
+ * Represents a K8s ServiceAccount resource.
140
+ * ServiceAccount is an identity that processes in a pod can use to access the Kubernetes API.
141
+ * @see {@link https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/}
142
+ */
143
+ V1ServiceAccount: {
144
+ kind: "ServiceAccount",
145
+ version: "v1",
146
+ group: "",
147
+ },
148
+
149
+ /**
150
+ * Represents a K8s Service resource.
151
+ * Service is an abstraction which defines a logical set of Pods and a policy by which to access them.
152
+ * @see {@link https://kubernetes.io/docs/concepts/services-networking/service/}
153
+ */
154
+ V1Service: {
155
+ kind: "Service",
156
+ version: "v1",
157
+ group: "",
158
+ },
159
+
160
+ /**
161
+ * Represents a K8s MutatingWebhookConfiguration resource.
162
+ * MutatingWebhookConfiguration configures a mutating admission webhook.
163
+ * @see {@link https://kubernetes.io/docs/reference/access-authn-authz/extensible-admission-controllers/#configure-admission-webhooks-on-the-fly}
164
+ */
165
+ V1MutatingWebhookConfiguration: {
166
+ kind: "MutatingWebhookConfiguration",
167
+ version: "v1",
168
+ group: "admissionregistration.k8s.io",
169
+ },
170
+
171
+ /**
172
+ * Represents a K8s ValidatingWebhookConfiguration resource.
173
+ * ValidatingWebhookConfiguration configures a validating admission webhook.
174
+ * @see {@link https://kubernetes.io/docs/reference/access-authn-authz/extensible-admission-controllers/#configure-admission-webhooks-on-the-fly}
175
+ */
176
+ V1ValidatingWebhookConfiguration: {
177
+ kind: "ValidatingWebhookConfiguration",
178
+ version: "v1",
179
+ group: "admissionregistration.k8s.io",
180
+ },
181
+ /**
182
+ * Represents a K8s CustomResourceDefinition resource.
183
+ * CustomResourceDefinition is a custom resource in a Kubernetes cluster.
184
+ * @see {@link https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/}
185
+ */
186
+ V1CustomResourceDefinition: {
187
+ kind: "CustomResourceDefinition",
188
+ version: "v1",
189
+ group: "apiextensions.k8s.io",
190
+ },
191
+
192
+ /**
193
+ * Represents a K8s APIService resource.
194
+ * APIService represents a server for a particular API version and group.
195
+ * @see {@link https://kubernetes.io/docs/tasks/access-kubernetes-api/setup-extension-api-server/}
196
+ */
197
+ V1APIService: {
198
+ kind: "APIService",
199
+ version: "v1",
200
+ group: "apiregistration.k8s.io",
201
+ },
202
+
203
+ /**
204
+ * Represents a K8s ControllerRevision resource.
205
+ * ControllerRevision is used to manage the history of a StatefulSet or DaemonSet.
206
+ * @see {@link https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#revision-history}
207
+ */
208
+ V1ControllerRevision: {
209
+ kind: "ControllerRevision",
210
+ version: "v1",
211
+ group: "apps",
212
+ },
213
+
214
+ /**
215
+ * Represents a K8s DaemonSet resource.
216
+ * DaemonSet ensures that all (or some) nodes run a copy of a Pod.
217
+ * @see {@link https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/}
218
+ */
219
+ V1DaemonSet: {
220
+ kind: "DaemonSet",
221
+ version: "v1",
222
+ group: "apps",
223
+ },
224
+
225
+ /**
226
+ * Represents a K8s Deployment resource.
227
+ * Deployment provides declarative updates for Pods and ReplicaSets.
228
+ * @see {@link https://kubernetes.io/docs/concepts/workloads/controllers/deployment/}
229
+ */
230
+ V1Deployment: {
231
+ kind: "Deployment",
232
+ version: "v1",
233
+ group: "apps",
234
+ },
235
+
236
+ /**
237
+ * Represents a K8s ReplicaSet resource.
238
+ * ReplicaSet ensures that a specified number of pod replicas are running at any given time.
239
+ * @see {@link https://kubernetes.io/docs/concepts/workloads/controllers/replicaset/}
240
+ */
241
+ V1ReplicaSet: {
242
+ kind: "ReplicaSet",
243
+ version: "v1",
244
+ group: "apps",
245
+ },
246
+
247
+ /**
248
+ * Represents a K8s StatefulSet resource.
249
+ * StatefulSet is used to manage stateful applications.
250
+ * @see {@link https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/}
251
+ */
252
+ V1StatefulSet: {
253
+ kind: "StatefulSet",
254
+ version: "v1",
255
+ group: "apps",
256
+ },
257
+
258
+ /**
259
+ * Represents a K8s TokenReview resource.
260
+ * TokenReview attempts to authenticate a token to a known user.
261
+ * @see {@link https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.20/#tokenreview-v1-authentication-k8s-io}
262
+ */
263
+ V1TokenReview: {
264
+ kind: "TokenReview",
265
+ version: "v1",
266
+ group: "authentication.k8s.io",
267
+ },
268
+
269
+ /**
270
+ * Represents a K8s LocalSubjectAccessReview resource.
271
+ * LocalSubjectAccessReview checks whether a specific user can perform a specific action in a specific namespace.
272
+ * @see {@link https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.20/#localsubjectaccessreview-v1-authorization-k8s-io}
273
+ */
274
+ V1LocalSubjectAccessReview: {
275
+ kind: "LocalSubjectAccessReview",
276
+ version: "v1",
277
+ group: "authorization.k8s.io",
278
+ },
279
+
280
+ /**
281
+ * Represents a K8s SelfSubjectAccessReview resource.
282
+ * SelfSubjectAccessReview checks whether the current user can perform a specific action.
283
+ * @see {@link https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.20/#selfsubjectaccessreview-v1-authorization-k8s-io}
284
+ */
285
+ V1SelfSubjectAccessReview: {
286
+ kind: "SelfSubjectAccessReview",
287
+ version: "v1",
288
+ group: "authorization.k8s.io",
289
+ },
290
+
291
+ /**
292
+ * Represents a K8s SelfSubjectRulesReview resource.
293
+ * SelfSubjectRulesReview lists the permissions a specific user has within a namespace.
294
+ * @see {@link https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.20/#selfsubjectrulesreview-v1-authorization-k8s-io}
295
+ */
296
+ V1SelfSubjectRulesReview: {
297
+ kind: "SelfSubjectRulesReview",
298
+ version: "v1",
299
+ group: "authorization.k8s.io",
300
+ },
301
+
302
+ /**
303
+ * Represents a K8s SubjectAccessReview resource.
304
+ * SubjectAccessReview checks whether a specific user can perform a specific action.
305
+ * @see {@link https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.20/#subjectaccessreview-v1-authorization-k8s-io}
306
+ */
307
+ V1SubjectAccessReview: {
308
+ kind: "SubjectAccessReview",
309
+ version: "v1",
310
+ group: "authorization.k8s.io",
311
+ },
312
+
313
+ /**
314
+ * Represents a K8s HorizontalPodAutoscaler resource.
315
+ * HorizontalPodAutoscaler automatically scales the number of Pods in a replication controller, deployment, or replica set.
316
+ * @see {@link https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/}
317
+ */
318
+ V1HorizontalPodAutoscaler: {
319
+ kind: "HorizontalPodAutoscaler",
320
+ version: "v2",
321
+ group: "autoscaling",
322
+ },
323
+
324
+ /**
325
+ * Represents a K8s CronJob resource.
326
+ * CronJob manages time-based jobs, specifically those that run periodically and complete after a successful execution.
327
+ * @see {@link https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/}
328
+ */
329
+ V1CronJob: {
330
+ kind: "CronJob",
331
+ version: "v1",
332
+ group: "batch",
333
+ },
334
+
335
+ /**
336
+ * Represents a K8s Job resource.
337
+ * Job represents the configuration of a single job.
338
+ * @see {@link https://kubernetes.io/docs/concepts/workloads/controllers/job/}
339
+ */
340
+ V1Job: {
341
+ kind: "Job",
342
+ version: "v1",
343
+ group: "batch",
344
+ },
345
+
346
+ /**
347
+ * Represents a K8s CertificateSigningRequest resource.
348
+ * CertificateSigningRequest represents a certificate signing request.
349
+ * @see {@link https://kubernetes.io/docs/reference/access-authn-authz/certificate-signing-requests/}
350
+ */
351
+ V1CertificateSigningRequest: {
352
+ kind: "CertificateSigningRequest",
353
+ version: "v1",
354
+ group: "certificates.k8s.io",
355
+ },
356
+
357
+ /**
358
+ * Represents a K8s EndpointSlice resource.
359
+ * EndpointSlice represents a scalable set of network endpoints for a Kubernetes Service.
360
+ * @see {@link https://kubernetes.io/docs/concepts/services-networking/endpoint-slices/}
361
+ */
362
+ V1EndpointSlice: {
363
+ kind: "EndpointSlice",
364
+ version: "v1",
365
+ group: "discovery.k8s.io",
366
+ },
367
+
368
+ /**
369
+ * Represents a K8s IngressClass resource.
370
+ * IngressClass represents the class of the Ingress, referenced by the Ingress spec.
371
+ * @see {@link https://kubernetes.io/docs/concepts/services-networking/ingress/}
372
+ */
373
+ V1IngressClass: {
374
+ kind: "IngressClass",
375
+ version: "v1",
376
+ group: "networking.k8s.io",
377
+ },
378
+
379
+ /**
380
+ * Represents a K8s Ingress resource.
381
+ * Ingress exposes HTTP and HTTPS routes from outside the cluster to services within the cluster.
382
+ * @see {@link https://kubernetes.io/docs/concepts/services-networking/ingress/}
383
+ */
384
+ V1Ingress: {
385
+ kind: "Ingress",
386
+ version: "v1",
387
+ group: "networking.k8s.io",
388
+ },
389
+
390
+ /**
391
+ * Represents a K8s NetworkPolicy resource.
392
+ * NetworkPolicy defines a set of rules for how pods communicate with each other.
393
+ * @see {@link https://kubernetes.io/docs/concepts/services-networking/network-policies/}
394
+ */
395
+ V1NetworkPolicy: {
396
+ kind: "NetworkPolicy",
397
+ version: "v1",
398
+ group: "networking.k8s.io",
399
+ },
400
+
401
+ /**
402
+ * Represents a K8s RuntimeClass resource.
403
+ * RuntimeClass is a cluster-scoped resource that surfaces container runtime properties to the control plane.
404
+ * @see {@link https://kubernetes.io/docs/concepts/containers/runtime-class/}
405
+ */
406
+ V1RuntimeClass: {
407
+ kind: "RuntimeClass",
408
+ version: "v1",
409
+ group: "node.k8s.io",
410
+ },
411
+
412
+ /**
413
+ * Represents a K8s PodDisruptionBudget resource.
414
+ * PodDisruptionBudget is an API object that limits the number of pods of a replicated application that are down simultaneously.
415
+ * @see {@link https://kubernetes.io/docs/concepts/workloads/pods/disruptions/}
416
+ */
417
+ V1PodDisruptionBudget: {
418
+ kind: "PodDisruptionBudget",
419
+ version: "v1",
420
+ group: "policy",
421
+ },
422
+
423
+ /**
424
+ * Represents a K8s VolumeAttachment resource.
425
+ * VolumeAttachment captures the intent to attach or detach the specified volume to/from the specified node.
426
+ * @see {@link https://kubernetes.io/docs/concepts/storage/storage-classes/}
427
+ */
428
+ V1VolumeAttachment: {
429
+ kind: "VolumeAttachment",
430
+ version: "v1",
431
+ group: "storage.k8s.io",
432
+ },
433
+
434
+ /**
435
+ * Represents a K8s CSIDriver resource.
436
+ * CSIDriver captures information about a Container Storage Interface (CSI) volume driver.
437
+ * @see {@link https://kubernetes.io/docs/concepts/storage/volumes/}
438
+ */
439
+ V1CSIDriver: {
440
+ kind: "CSIDriver",
441
+ version: "v1",
442
+ group: "storage.k8s.io",
443
+ },
444
+
445
+ /**
446
+ * Represents a K8s CSIStorageCapacity resource.
447
+ * CSIStorageCapacity stores the reported storage capacity of a CSI node or storage class.
448
+ * @see {@link https://kubernetes.io/docs/concepts/storage/csi/}
449
+ */
450
+ V1CSIStorageCapacity: {
451
+ kind: "CSIStorageCapacity",
452
+ version: "v1",
453
+ group: "storage.k8s.io",
454
+ },
455
+
456
+ /**
457
+ * Represents a K8s StorageClass resource.
458
+ * StorageClass is a cluster-scoped resource that provides a way for administrators to describe the classes of storage they offer.
459
+ * @see {@link https://kubernetes.io/docs/concepts/storage/storage-classes/}
460
+ */
461
+ V1StorageClass: {
462
+ kind: "StorageClass",
463
+ version: "v1",
464
+ group: "storage.k8s.io",
465
+ },
466
+ };
467
+
468
+ export function modelToGroupVersionKind(key: string): GroupVersionKind {
469
+ return gvkMap[key];
470
+ }
@@ -0,0 +1,88 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // SPDX-FileCopyrightText: 2023-Present The Pepr Authors
3
+
4
+ // @todo: quick and dirty temp tls chain for testing, to be replaced at runtime
5
+ // Don't freak out, this is a self-signed cert for testing purposes only.
6
+
7
+ export function tlsCert() {
8
+ return Buffer.from(
9
+ `-----BEGIN CERTIFICATE-----
10
+ MIIDgzCCAmugAwIBAgIRALguxABI0Iy914FcdkM7B7EwDQYJKoZIhvcNAQELBQAw
11
+ NzEXMBUGA1UEChMOWmFyZiBDb21tdW5pdHkxHDAaBgNVBAMTE2NhLnByaXZhdGUu
12
+ emFyZi5kZXYwHhcNMjMwMzMxMjMyMTUxWhcNMjQwNDA5MjMyMTUxWjA8MRUwEwYD
13
+ VQQKEwxaYXJmIENsdXN0ZXIxIzAhBgNVBAMTGmNvbnRyb2xsZXIucGVwci1zeXN0
14
+ ZW0uc3ZjMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAt6s7JQyXdZrj
15
+ uobjqbZEdh2VRnWaVhdYnWGOB3jguWXrBTTRmPhPuKx9X+ORFrDftG5cGkDp3okC
16
+ YGimun932Vi/nmwIc2Q1EAvmaj7LbPDPR4J8RUAO3pqsJijUULmXhrkLgdUxAIY5
17
+ srFtuLdaEh0VSc8YUDtbBP3dagDIe+v9eHVS1/ayiv/Tfscm7Mk3NQzvmQfJ5Vt5
18
+ K9At+9k7gfV//vBd7SoTJ4uowL+XgyIgF0jIHjHRAX9eR3ew8yly9Sp1K6gEt/oQ
19
+ 8pQ8wS37/Dhb3FOQQ5owB1hem1hvdK9qtbwClyzUU/o4RODPcrl/k4MADrGi3wcq
20
+ n+FpiwlLLQIDAQABo4GEMIGBMA4GA1UdDwEB/wQEAwIFoDATBgNVHSUEDDAKBggr
21
+ BgEFBQcDATAMBgNVHRMBAf8EAjAAMB8GA1UdIwQYMBaAFIARVhDhiMNYF+0KwIgA
22
+ AhO2gLlRMCsGA1UdEQQkMCKCGmNvbnRyb2xsZXIucGVwci1zeXN0ZW0uc3ZjhwR/
23
+ AAABMA0GCSqGSIb3DQEBCwUAA4IBAQBsJN3H67/YTl8jQHgsU5sY65u0KlDcxL/v
24
+ vDDx807P4ohTa6dLl/mXZD6swN7W0O1oDCgVtTWjAB10UrcLlvs6yos8V4ENzqhM
25
+ DaUMwsQSXKCIH/VKaJecpt23SCGYoPZuYBh4PkYwdzBYIQPykV5NdMf02t5DONN+
26
+ 08Cj+sE8ESpM3SyTpAAqaJfI+CFzNho8yq3e/zjrswG0FbjZCmG6fitNCCj6G4p1
27
+ lOmt+yadVUqov483l09JKUHTut+UsIf91XLCEfon+ajU/IObWDk9sqW8tCFBxhiq
28
+ 5Ub2jDZ/hw/3RQHZfP69c1rFRIHMy/ci8cfk6PMg+d4rsNll6kYI
29
+ -----END CERTIFICATE-----`
30
+ ).toString("base64");
31
+ }
32
+
33
+ export function tlsKey() {
34
+ return Buffer.from(
35
+ `-----BEGIN RSA PRIVATE KEY-----
36
+ MIIEpQIBAAKCAQEAt6s7JQyXdZrjuobjqbZEdh2VRnWaVhdYnWGOB3jguWXrBTTR
37
+ mPhPuKx9X+ORFrDftG5cGkDp3okCYGimun932Vi/nmwIc2Q1EAvmaj7LbPDPR4J8
38
+ RUAO3pqsJijUULmXhrkLgdUxAIY5srFtuLdaEh0VSc8YUDtbBP3dagDIe+v9eHVS
39
+ 1/ayiv/Tfscm7Mk3NQzvmQfJ5Vt5K9At+9k7gfV//vBd7SoTJ4uowL+XgyIgF0jI
40
+ HjHRAX9eR3ew8yly9Sp1K6gEt/oQ8pQ8wS37/Dhb3FOQQ5owB1hem1hvdK9qtbwC
41
+ lyzUU/o4RODPcrl/k4MADrGi3wcqn+FpiwlLLQIDAQABAoIBAAxt3wPD1WAVCkIu
42
+ LKvodLuVhuuMu9QFom6MEoN476Q8PGpOx7xVWXfC3H0ntkLV112rdjokmG8B0JJb
43
+ oqTOSXsA4X7ECtJcPqcGVyJre3K03SIWt3gsPJVd3DZ83tlTpehtD1VK6xUBAFiS
44
+ Xz130vWU2EL1a8zKJ3+v+lLZGLgiA8smdUSa3eOCC6nNbPQb8v2d8qRy0f/VaQE8
45
+ PtjKaMRK+3pSz2wuWXnGC0rerjyANs1zpDP/ZbQ3gqZ/NGi91E5JueCyZeIA/Rw3
46
+ XtEwxoN66OFrdONortUvTgPvpITLKQiL/kK7BX5jX0xAQQtKyd6uL2fWMHcg/AQz
47
+ D7T4+dUCgYEA6FJfBPu1505UZxsOvgpCN8qCt+NKF8QW+m90Bvfx7NQcVH/8iYq9
48
+ 7biR6fBTWWlNjwqlZ+jl1L50HP3gaZ95rjOfJYFQ47XESDVjOoVNfZWBx7c410or
49
+ kx9wOLUv21GGndxIlcsTUSJZ9S++rBjFZfPPSmfmMA/GTusTfkiJS1MCgYEAymNu
50
+ ibcSagKpgjesPosVRz+KQqeDt2cWnWgvlfTD8urRY/0eGObZ9Fy0iDamtaJRhMYT
51
+ UenvIHntBBnc1wBvzyOrveQpnCpkeaWrqt38VUm2RO4w0ANxXqF6LMEQBTDbsVUm
52
+ JTyzRc+e5RL3O63Gx0jEu5iAvOg4pznK+wQev38CgYEAvm9u9i3CsUVTCGV0kzDj
53
+ kMoOlt/YR1z0nPqpOGEcTU6dnmJ/RtuUzn1iFkpqeDtKWTuX1HJjmx03HuC4iLwx
54
+ ySsFhH/ZJ59CsxIYMcs9dvkLtgMps8hXqbS2j7Vt8jCE0XfVg/w/7FzlMoedm4J+
55
+ pRDS1aIPXUxA+UXW58hbyoMCgYEAv2BEfx7I38uCpCqmykFULpor0Bl82Kk3XkLN
56
+ dHwN6h8XPvhzRFLO2F3tLDyZaXmCog126WdPAiOo9s7J39h+4Z02YgplOlFvzwPU
57
+ j273k2JvY0DkkV4gDr6cu8MXtgDcTRRaTK3YS3QnKS/E7v7Ez17FASsU2QyxvZdN
58
+ lAzyUlsCgYEA6A3UAY/gdxtwGf0kAb/hsHPaZLE8dJk7V6k9AUpgiC+sXEr3hLOe
59
+ f5FVCDgseP0vWtRLytYbNZSNkW07RIpJV0tE98E7iUVt41NJD1QPRLOSZEAuwkDi
60
+ yfYC8xiJwEHBEDTCnKYEyvB6be3zXssGzhp1dbtYILkheEkaewfP5ks=
61
+ -----END RSA PRIVATE KEY-----`
62
+ ).toString("base64");
63
+ }
64
+
65
+ export function tlsCA() {
66
+ return Buffer.from(
67
+ `-----BEGIN CERTIFICATE-----
68
+ MIIDWTCCAkGgAwIBAgIQb32UoSCN8rk1nBF3YcWU6zANBgkqhkiG9w0BAQsFADA3
69
+ MRcwFQYDVQQKEw5aYXJmIENvbW11bml0eTEcMBoGA1UEAxMTY2EucHJpdmF0ZS56
70
+ YXJmLmRldjAeFw0yMzAzMzEyMzIxNTBaFw0yNDA0MDkyMzIxNTBaMDcxFzAVBgNV
71
+ BAoTDlphcmYgQ29tbXVuaXR5MRwwGgYDVQQDExNjYS5wcml2YXRlLnphcmYuZGV2
72
+ MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuBDS+q67EPRR0pGFNWxd
73
+ JaM2qFWlsjmS8RPiSGmLrRrtLkYDhOUK+PlZLT7Gww/kGPrC/Jq+NSbKt7gDdbrr
74
+ 1dBo4tSMFNG0DpcR5JVLGayU1qOBCVoM0kGSJ2U4w9q475rbogb+k+/nnwHCjfTN
75
+ fN/78c4Tg6ZKGc0ChXbEPduVmku0qrFwV70Cx6rNjsGT7o5E84NJ/SEZEKsv9DXz
76
+ R6Padsnc7291XmyOqyoV4hOwbP6Xs2ZySefVkBm3JuT5brD6BXp/One9PjzeQHtP
77
+ Ito1dOnpiCXFS4GTkEJ3slTMFPpxnImgn3+rgr3a8Pq5ICqfheEtCUeLlayKohO2
78
+ uwIDAQABo2EwXzAOBgNVHQ8BAf8EBAMCAoQwHQYDVR0lBBYwFAYIKwYBBQUHAwEG
79
+ CCsGAQUFBwMCMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFIARVhDhiMNYF+0K
80
+ wIgAAhO2gLlRMA0GCSqGSIb3DQEBCwUAA4IBAQBCeISg2fAvgUm+LCxE0An5ZwUw
81
+ knO+vTjxeEQXxH4xQjz5Hpj3MQaXFvH2XAhbTAYQl8pKNWcN7vyl/5O8u+AjdDVD
82
+ 3TQv5TxQK7gs8YmC1LMc66aFSYHruqCD14PiwaQqD8Rzz8/nGwqvCD3K6vDsyvC4
83
+ anUV/tzbMU/hwCn6uw+S/LgM4xQIllccGX1cJC7pSZJNiTzmhWEfKpOVrUoTEQqf
84
+ tyAwSSHdPz5EhuDybxhOhh00lQG5POY6UGYqKKR1uoXXniqGXXjIqUeiA6FjEMYC
85
+ 4V//uhn+NeiPo1VtU7sCZfxT4x/qSy/bSSdB3qADqmgWhRHelJPe2TlBmCDx
86
+ -----END CERTIFICATE-----`
87
+ ).toString("base64");
88
+ }