@r8s/recipes 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.
Files changed (65) hide show
  1. package/dist/app.d.ts +94 -0
  2. package/dist/app.d.ts.map +1 -0
  3. package/dist/app.js +120 -0
  4. package/dist/app.js.map +1 -0
  5. package/dist/auth/components.d.ts +163 -0
  6. package/dist/auth/components.d.ts.map +1 -0
  7. package/dist/auth/components.js +134 -0
  8. package/dist/auth/components.js.map +1 -0
  9. package/dist/auth/index.d.ts +2 -0
  10. package/dist/auth/index.d.ts.map +1 -0
  11. package/dist/auth/index.js +14 -0
  12. package/dist/auth/index.js.map +1 -0
  13. package/dist/auth.d.ts +92 -0
  14. package/dist/auth.d.ts.map +1 -0
  15. package/dist/auth.js +302 -0
  16. package/dist/auth.js.map +1 -0
  17. package/dist/backup.d.ts +45 -0
  18. package/dist/backup.d.ts.map +1 -0
  19. package/dist/backup.js +59 -0
  20. package/dist/backup.js.map +1 -0
  21. package/dist/cert-provider.d.ts +78 -0
  22. package/dist/cert-provider.d.ts.map +1 -0
  23. package/dist/cert-provider.js +71 -0
  24. package/dist/cert-provider.js.map +1 -0
  25. package/dist/database.d.ts +49 -0
  26. package/dist/database.d.ts.map +1 -0
  27. package/dist/database.js +212 -0
  28. package/dist/database.js.map +1 -0
  29. package/dist/dns-provider.d.ts +110 -0
  30. package/dist/dns-provider.d.ts.map +1 -0
  31. package/dist/dns-provider.js +121 -0
  32. package/dist/dns-provider.js.map +1 -0
  33. package/dist/endpoint-provider.d.ts +121 -0
  34. package/dist/endpoint-provider.d.ts.map +1 -0
  35. package/dist/endpoint-provider.js +79 -0
  36. package/dist/endpoint-provider.js.map +1 -0
  37. package/dist/endpoint.d.ts +43 -0
  38. package/dist/endpoint.d.ts.map +1 -0
  39. package/dist/endpoint.js +221 -0
  40. package/dist/endpoint.js.map +1 -0
  41. package/dist/index.d.ts +14 -0
  42. package/dist/index.d.ts.map +1 -0
  43. package/dist/index.js +49 -0
  44. package/dist/index.js.map +1 -0
  45. package/dist/monitoring.d.ts +49 -0
  46. package/dist/monitoring.d.ts.map +1 -0
  47. package/dist/monitoring.js +128 -0
  48. package/dist/monitoring.js.map +1 -0
  49. package/dist/operators.d.ts +19 -0
  50. package/dist/operators.d.ts.map +1 -0
  51. package/dist/operators.js +30 -0
  52. package/dist/operators.js.map +1 -0
  53. package/dist/platform.d.ts +116 -0
  54. package/dist/platform.d.ts.map +1 -0
  55. package/dist/platform.js +121 -0
  56. package/dist/platform.js.map +1 -0
  57. package/dist/secret-provider.d.ts +119 -0
  58. package/dist/secret-provider.d.ts.map +1 -0
  59. package/dist/secret-provider.js +125 -0
  60. package/dist/secret-provider.js.map +1 -0
  61. package/dist/web-service.d.ts +87 -0
  62. package/dist/web-service.d.ts.map +1 -0
  63. package/dist/web-service.js +171 -0
  64. package/dist/web-service.js.map +1 -0
  65. package/package.json +48 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"endpoint-provider.js","sourceRoot":"","sources":["../src/endpoint-provider.tsx"],"names":[],"mappings":";;;AAsBA,sBAQC;AAoBD,oCAQC;AAyFD,4CAgBC;AAnKD,oCAA2C;AAC3C,iDAAkD;AAClD,iDAAmD;AAoBnD,SAAgB,KAAK,CAAC,KAAiB;IACrC,OAAO;QACL,QAAQ,EAAE,OAAO;QACjB,QAAQ,EAAE;YACR,gBAAgB,EAAE,KAAK,CAAC,SAAS,IAAI,OAAO;YAC5C,GAAG,EAAE,KAAK,CAAC,GAAG;SACf;KACF,CAAA;AACH,CAAC;AAoBD,SAAgB,YAAY,CAAC,KAAwB;IACnD,OAAO;QACL,QAAQ,EAAE,eAAe;QACzB,QAAQ,EAAE;YACR,gBAAgB,EAAE,KAAK,CAAC,SAAS,IAAI,IAAI;YACzC,GAAG,EAAE,KAAK,CAAC,GAAG;SACf;KACF,CAAA;AACH,CAAC;AAsBY,QAAA,eAAe,GAAG,IAAA,wBAAa,EAAiB,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAA;AA+BnF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,SAAgB,gBAAgB,CAAC,KAA4B;IAC3D,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAA;IAEpC,0BAA0B;IAC1B,MAAM,MAAM,GAAmB,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAA;IAErF,mDAAmD;IACnD,MAAM,OAAO,GAAG;QACd,IAAI,EAAE,MAAM,CAAC,QAAQ,KAAK,eAAe,CAAC,CAAC,CAAE,SAAmB,CAAC,CAAC,CAAE,SAAmB;QACvF,gBAAgB,EAAE,MAAM,CAAC,QAAQ,EAAE,gBAAgB,IAAI,IAAI;KAC5D,CAAA;IAED,OAAO,IAAA,UAAG,EAAC,yBAAc,CAAC,QAAQ,EAAE;QAClC,KAAK,EAAE,OAAO;QACd,QAAQ,EAAE,IAAA,UAAG,EAAC,uBAAe,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;KACrE,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,43 @@
1
+ import type { BaseRouteProps } from '@r8s/k8s-types';
2
+ export interface EndpointProps extends Omit<BaseRouteProps, 'host'> {
3
+ /** Hostname for the endpoint (required) */
4
+ host: string;
5
+ /** Service name to route to */
6
+ serviceName: string;
7
+ /** Service port (default: 80) */
8
+ servicePort?: number;
9
+ /** Create a DNS record via ExternalDNS (default: false, or true when DnsProvider is set) */
10
+ dns?: boolean;
11
+ /** DNS record TTL in seconds (default: 300) */
12
+ dnsTtl?: number;
13
+ }
14
+ /**
15
+ * Endpoint — cluster-adaptive routing for a service.
16
+ *
17
+ * @title Endpoint
18
+ * @category Networking
19
+ *
20
+ * Reads the RoutingContext (set by Platform) to determine whether the
21
+ * cluster uses nginx Ingress or Envoy Gateway (Gateway API), and renders
22
+ * the appropriate resources automatically. Without a Platform, defaults
23
+ * to nginx Ingress.
24
+ *
25
+ * To pin operator versions, pass them at the Platform level.
26
+ *
27
+ * @example
28
+ * import { Endpoint } from '@r8s/recipes'
29
+ *
30
+ * export default <Endpoint name="api" host="api.example.com" serviceName="api" />
31
+ *
32
+ * @example
33
+ * import { Platform, Endpoint } from '@r8s/recipes'
34
+ * import { operators } from '@r8s/crds'
35
+ *
36
+ * export default (
37
+ * <Platform operators={[operators['cert-manager']('1.18.0')]}>
38
+ * <Endpoint name="api" host="api.example.com" serviceName="api" />
39
+ * </Platform>
40
+ * )
41
+ */
42
+ export declare function Endpoint(props: EndpointProps): import("@r8s/core").r8sElement;
43
+ //# sourceMappingURL=endpoint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"endpoint.d.ts","sourceRoot":"","sources":["../src/endpoint.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAQpD,MAAM,WAAW,aAAc,SAAQ,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC;IACjE,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAA;IACZ,+BAA+B;IAC/B,WAAW,EAAE,MAAM,CAAA;IACnB,iCAAiC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,4FAA4F;IAC5F,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,+CAA+C;IAC/C,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,kCAqN5C"}
@@ -0,0 +1,221 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Endpoint = Endpoint;
4
+ const core_1 = require("@r8s/core");
5
+ const defaults_1 = require("@r8s/core/defaults");
6
+ const endpoint_provider_1 = require("./endpoint-provider");
7
+ const operators_1 = require("./operators");
8
+ const crds_1 = require("@r8s/crds");
9
+ const externaldns_1 = require("@r8s/crds/externaldns");
10
+ const dns_provider_1 = require("./dns-provider");
11
+ /**
12
+ * Endpoint — cluster-adaptive routing for a service.
13
+ *
14
+ * @title Endpoint
15
+ * @category Networking
16
+ *
17
+ * Reads the RoutingContext (set by Platform) to determine whether the
18
+ * cluster uses nginx Ingress or Envoy Gateway (Gateway API), and renders
19
+ * the appropriate resources automatically. Without a Platform, defaults
20
+ * to nginx Ingress.
21
+ *
22
+ * To pin operator versions, pass them at the Platform level.
23
+ *
24
+ * @example
25
+ * import { Endpoint } from '@r8s/recipes'
26
+ *
27
+ * export default <Endpoint name="api" host="api.example.com" serviceName="api" />
28
+ *
29
+ * @example
30
+ * import { Platform, Endpoint } from '@r8s/recipes'
31
+ * import { operators } from '@r8s/crds'
32
+ *
33
+ * export default (
34
+ * <Platform operators={[operators['cert-manager']('1.18.0')]}>
35
+ * <Endpoint name="api" host="api.example.com" serviceName="api" />
36
+ * </Platform>
37
+ * )
38
+ */
39
+ function Endpoint(props) {
40
+ const { name, namespace = 'default', host, serviceName, servicePort = 80, tls, annotations = {}, dns, dnsTtl = 300, } = props;
41
+ const routing = (0, core_1.useContext)(defaults_1.RoutingContext);
42
+ const endpointConfig = (0, core_1.useContext)(endpoint_provider_1.EndpointContext);
43
+ const sharedOperators = (0, core_1.useContext)(defaults_1.OperatorContext);
44
+ const dnsConfig = (0, core_1.useContext)(dns_provider_1.DnsContext);
45
+ // DNS defaults to true when DnsProvider is set, unless explicitly disabled
46
+ const createDnsRecord = dns ?? dnsConfig !== null;
47
+ const resources = [];
48
+ if (routing.mode === 'gateway') {
49
+ const gatewayClassName = routing.gatewayClassName || 'eg';
50
+ const secretName = tls?.secretName || `${name}-tls`;
51
+ const issuerName = tls?.clusterIssuer || 'letsencrypt-prod';
52
+ const hasCertManager = sharedOperators.some((op) => op.name === 'cert-manager');
53
+ const hasEnvoyGateway = sharedOperators.some((op) => op.name === 'envoy-gateway');
54
+ if (tls && !hasCertManager) {
55
+ resources.push((0, core_1.declareOperator)(crds_1.operators['cert-manager']()));
56
+ }
57
+ if (!hasEnvoyGateway) {
58
+ resources.push((0, core_1.declareOperator)(crds_1.operators['envoy-gateway']()));
59
+ }
60
+ if (tls) {
61
+ resources.push((0, core_1.jsx)('Certificate', {
62
+ apiVersion: 'cert-manager.io/v1',
63
+ kind: 'Certificate',
64
+ metadata: {
65
+ name: `${name}-tls`,
66
+ namespace,
67
+ },
68
+ spec: {
69
+ secretName,
70
+ dnsNames: [host],
71
+ issuerRef: {
72
+ name: issuerName,
73
+ kind: 'ClusterIssuer',
74
+ },
75
+ },
76
+ }));
77
+ }
78
+ // HTTPS listener with TLS, HTTP listener without
79
+ const useHttps = !!tls;
80
+ resources.push((0, core_1.jsx)('Gateway', {
81
+ apiVersion: 'gateway.networking.k8s.io/v1',
82
+ kind: 'Gateway',
83
+ metadata: {
84
+ name: `${name}-gateway`,
85
+ namespace,
86
+ // ExternalDNS gateway source picks up hostnames from this annotation
87
+ ...(createDnsRecord && {
88
+ annotations: {
89
+ 'external-dns.alpha.kubernetes.io/hostname': host,
90
+ },
91
+ }),
92
+ },
93
+ spec: {
94
+ gatewayClassName,
95
+ listeners: [
96
+ {
97
+ name: useHttps ? 'https' : 'http',
98
+ protocol: useHttps ? 'HTTPS' : 'HTTP',
99
+ port: useHttps ? 443 : 80,
100
+ hostname: host,
101
+ ...(tls && {
102
+ tls: {
103
+ mode: 'Terminate',
104
+ certificateRefs: [{ name: secretName }],
105
+ },
106
+ }),
107
+ },
108
+ ],
109
+ },
110
+ }));
111
+ resources.push((0, core_1.jsx)('HTTPRoute', {
112
+ apiVersion: 'gateway.networking.k8s.io/v1',
113
+ kind: 'HTTPRoute',
114
+ metadata: { name: `${name}-route`, namespace },
115
+ spec: {
116
+ parentRefs: [{ name: `${name}-gateway` }],
117
+ hostnames: [host],
118
+ rules: [
119
+ {
120
+ backendRefs: [{ name: serviceName, port: servicePort }],
121
+ },
122
+ ],
123
+ },
124
+ }));
125
+ }
126
+ else {
127
+ const hasNginxIngress = sharedOperators.some((op) => op.name === 'nginx-ingress');
128
+ const hasCertManager = sharedOperators.some((op) => op.name === 'cert-manager');
129
+ if (!hasNginxIngress) {
130
+ resources.push((0, core_1.declareOperator)((0, operators_1.nginxIngressOperator)()));
131
+ }
132
+ if (tls && !hasCertManager) {
133
+ resources.push((0, core_1.declareOperator)(crds_1.operators['cert-manager']()));
134
+ }
135
+ const ingress = {
136
+ apiVersion: 'networking.k8s.io/v1',
137
+ kind: 'Ingress',
138
+ metadata: {
139
+ name,
140
+ namespace,
141
+ annotations: {
142
+ 'nginx.ingress.kubernetes.io/rewrite-target': '/',
143
+ // ExternalDNS ingress source picks up hostnames from this annotation
144
+ ...(createDnsRecord ? { 'external-dns.alpha.kubernetes.io/hostname': host } : {}),
145
+ ...(tls?.clusterIssuer
146
+ ? {
147
+ 'cert-manager.io/cluster-issuer': tls.clusterIssuer,
148
+ }
149
+ : {}),
150
+ ...annotations,
151
+ },
152
+ },
153
+ spec: {
154
+ ingressClassName: endpointConfig.settings?.ingressClassName ?? 'nginx',
155
+ rules: [
156
+ {
157
+ host,
158
+ http: {
159
+ paths: [
160
+ {
161
+ path: '/',
162
+ pathType: 'Prefix',
163
+ backend: {
164
+ service: {
165
+ name: serviceName,
166
+ port: { number: servicePort },
167
+ },
168
+ },
169
+ },
170
+ ],
171
+ },
172
+ },
173
+ ],
174
+ ...(tls?.secretName && {
175
+ tls: [
176
+ {
177
+ hosts: [host],
178
+ secretName: tls.secretName,
179
+ },
180
+ ],
181
+ }),
182
+ },
183
+ };
184
+ resources.push((0, core_1.jsx)('Ingress', ingress));
185
+ }
186
+ // DNS record via ExternalDNS.
187
+ //
188
+ // Two modes:
189
+ // 1. Explicit targets (dnsTargets prop or dnsConfig.settings.targets):
190
+ // create a DNSEndpoint CR with those targets (ExternalDNS crd source).
191
+ // 2. No targets: annotate the Gateway/Ingress with the hostname and let
192
+ // ExternalDNS pick it up via its gateway/ingress source. Creating a
193
+ // DNSEndpoint with empty targets would produce a DNS record pointing
194
+ // nowhere, so we deliberately skip the CR in that case.
195
+ const dnsTargets = dnsConfig?.settings?.targets;
196
+ if (createDnsRecord) {
197
+ const hasExternalDNS = sharedOperators.some((op) => op.name === 'external-dns');
198
+ if (!hasExternalDNS) {
199
+ resources.push((0, core_1.declareOperator)(crds_1.operators['external-dns']()));
200
+ }
201
+ if (dnsTargets && dnsTargets.length > 0) {
202
+ resources.push((0, externaldns_1.DNSEndpointComponent)({
203
+ metadata: { name: `${name}-dns`, namespace },
204
+ spec: {
205
+ endpoints: [
206
+ {
207
+ dnsName: host,
208
+ recordType: 'A',
209
+ targets: dnsTargets,
210
+ recordTTL: dnsTtl,
211
+ },
212
+ ],
213
+ },
214
+ }));
215
+ }
216
+ // else: no targets known at render time — rely on ExternalDNS
217
+ // gateway/ingress source instead of creating an empty DNSEndpoint.
218
+ }
219
+ return (0, core_1.jsx)(core_1.Fragment, { children: resources });
220
+ }
221
+ //# sourceMappingURL=endpoint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"endpoint.js","sourceRoot":"","sources":["../src/endpoint.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export { Platform, type PlatformProps, type RoutingMode } from './platform';
2
+ export { App, type AppProps } from './app';
3
+ export { Database, type DatabaseProps } from './database';
4
+ export { Endpoint, type EndpointProps } from './endpoint';
5
+ export { WebService, type WebServiceProps, type SecretRef, type VaultSecretRef, } from './web-service';
6
+ export { Auth, type AuthProps } from './auth';
7
+ export { Monitoring, type MonitoringProps } from './monitoring';
8
+ export { Backup, type BackupProps } from './backup';
9
+ export { SecretProvider, type SecretProviderProps, type SecretProviderValue, OpenBao, type OpenBaoProps, Vault, type VaultProps, SealedSecrets, type SealedSecretsProps, ManualSecrets, type ManualSecretsProps, } from './secret-provider';
10
+ export { DnsProvider, type DnsProviderProps, type DnsProviderValue, type DnsConfig, DnsContext, ExternalDns, type ExternalDnsProps, } from './dns-provider';
11
+ export { EndpointProvider, type EndpointProviderProps, type EndpointProviderValue, type EndpointConfig, EndpointContext, Nginx, type NginxProps, EnvoyGateway, type EnvoyGatewayProps, } from './endpoint-provider';
12
+ export { CertProvider, type CertProviderProps, type CertProviderValue, type CertConfig, CertContext, CertManager, type CertManagerProps, } from './cert-provider';
13
+ export { cnpgOperator, nginxIngressOperator, vaultSecretsOperator } from './operators';
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAA;AAC3E,OAAO,EAAE,GAAG,EAAE,KAAK,QAAQ,EAAE,MAAM,OAAO,CAAA;AAC1C,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAA;AACzD,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAA;AACzD,OAAO,EACL,UAAU,EACV,KAAK,eAAe,EACpB,KAAK,SAAS,EACd,KAAK,cAAc,GACpB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAA;AAC/D,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,MAAM,UAAU,CAAA;AAGnD,OAAO,EACL,cAAc,EACd,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,OAAO,EACP,KAAK,YAAY,EACjB,KAAK,EACL,KAAK,UAAU,EACf,aAAa,EACb,KAAK,kBAAkB,EACvB,aAAa,EACb,KAAK,kBAAkB,GACxB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EACL,WAAW,EACX,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,SAAS,EACd,UAAU,EACV,WAAW,EACX,KAAK,gBAAgB,GACtB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,gBAAgB,EAChB,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC1B,KAAK,cAAc,EACnB,eAAe,EACf,KAAK,EACL,KAAK,UAAU,EACf,YAAY,EACZ,KAAK,iBAAiB,GACvB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EACL,YAAY,EACZ,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,UAAU,EACf,WAAW,EACX,WAAW,EACX,KAAK,gBAAgB,GACtB,MAAM,iBAAiB,CAAA;AAGxB,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ // Core recipes — the only place for abstraction in r8s.
3
+ // Each recipe composes generated CRD components into a higher-level pattern
4
+ // with good defaults. Named after what the user wants to achieve, not the
5
+ // underlying tools.
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.vaultSecretsOperator = exports.nginxIngressOperator = exports.cnpgOperator = exports.CertManager = exports.CertContext = exports.CertProvider = exports.EnvoyGateway = exports.Nginx = exports.EndpointContext = exports.EndpointProvider = exports.ExternalDns = exports.DnsContext = exports.DnsProvider = exports.ManualSecrets = exports.SealedSecrets = exports.Vault = exports.OpenBao = exports.SecretProvider = exports.Backup = exports.Monitoring = exports.Auth = exports.WebService = exports.Endpoint = exports.Database = exports.App = exports.Platform = void 0;
8
+ var platform_1 = require("./platform");
9
+ Object.defineProperty(exports, "Platform", { enumerable: true, get: function () { return platform_1.Platform; } });
10
+ var app_1 = require("./app");
11
+ Object.defineProperty(exports, "App", { enumerable: true, get: function () { return app_1.App; } });
12
+ var database_1 = require("./database");
13
+ Object.defineProperty(exports, "Database", { enumerable: true, get: function () { return database_1.Database; } });
14
+ var endpoint_1 = require("./endpoint");
15
+ Object.defineProperty(exports, "Endpoint", { enumerable: true, get: function () { return endpoint_1.Endpoint; } });
16
+ var web_service_1 = require("./web-service");
17
+ Object.defineProperty(exports, "WebService", { enumerable: true, get: function () { return web_service_1.WebService; } });
18
+ var auth_1 = require("./auth");
19
+ Object.defineProperty(exports, "Auth", { enumerable: true, get: function () { return auth_1.Auth; } });
20
+ var monitoring_1 = require("./monitoring");
21
+ Object.defineProperty(exports, "Monitoring", { enumerable: true, get: function () { return monitoring_1.Monitoring; } });
22
+ var backup_1 = require("./backup");
23
+ Object.defineProperty(exports, "Backup", { enumerable: true, get: function () { return backup_1.Backup; } });
24
+ // Provider components — fine-grained control over cluster configuration
25
+ var secret_provider_1 = require("./secret-provider");
26
+ Object.defineProperty(exports, "SecretProvider", { enumerable: true, get: function () { return secret_provider_1.SecretProvider; } });
27
+ Object.defineProperty(exports, "OpenBao", { enumerable: true, get: function () { return secret_provider_1.OpenBao; } });
28
+ Object.defineProperty(exports, "Vault", { enumerable: true, get: function () { return secret_provider_1.Vault; } });
29
+ Object.defineProperty(exports, "SealedSecrets", { enumerable: true, get: function () { return secret_provider_1.SealedSecrets; } });
30
+ Object.defineProperty(exports, "ManualSecrets", { enumerable: true, get: function () { return secret_provider_1.ManualSecrets; } });
31
+ var dns_provider_1 = require("./dns-provider");
32
+ Object.defineProperty(exports, "DnsProvider", { enumerable: true, get: function () { return dns_provider_1.DnsProvider; } });
33
+ Object.defineProperty(exports, "DnsContext", { enumerable: true, get: function () { return dns_provider_1.DnsContext; } });
34
+ Object.defineProperty(exports, "ExternalDns", { enumerable: true, get: function () { return dns_provider_1.ExternalDns; } });
35
+ var endpoint_provider_1 = require("./endpoint-provider");
36
+ Object.defineProperty(exports, "EndpointProvider", { enumerable: true, get: function () { return endpoint_provider_1.EndpointProvider; } });
37
+ Object.defineProperty(exports, "EndpointContext", { enumerable: true, get: function () { return endpoint_provider_1.EndpointContext; } });
38
+ Object.defineProperty(exports, "Nginx", { enumerable: true, get: function () { return endpoint_provider_1.Nginx; } });
39
+ Object.defineProperty(exports, "EnvoyGateway", { enumerable: true, get: function () { return endpoint_provider_1.EnvoyGateway; } });
40
+ var cert_provider_1 = require("./cert-provider");
41
+ Object.defineProperty(exports, "CertProvider", { enumerable: true, get: function () { return cert_provider_1.CertProvider; } });
42
+ Object.defineProperty(exports, "CertContext", { enumerable: true, get: function () { return cert_provider_1.CertContext; } });
43
+ Object.defineProperty(exports, "CertManager", { enumerable: true, get: function () { return cert_provider_1.CertManager; } });
44
+ // Operator declarations for components in this package
45
+ var operators_1 = require("./operators");
46
+ Object.defineProperty(exports, "cnpgOperator", { enumerable: true, get: function () { return operators_1.cnpgOperator; } });
47
+ Object.defineProperty(exports, "nginxIngressOperator", { enumerable: true, get: function () { return operators_1.nginxIngressOperator; } });
48
+ Object.defineProperty(exports, "vaultSecretsOperator", { enumerable: true, get: function () { return operators_1.vaultSecretsOperator; } });
49
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,wDAAwD;AACxD,4EAA4E;AAC5E,0EAA0E;AAC1E,oBAAoB;;;AAEpB,uCAA2E;AAAlE,oGAAA,QAAQ,OAAA;AACjB,6BAA0C;AAAjC,0FAAA,GAAG,OAAA;AACZ,uCAAyD;AAAhD,oGAAA,QAAQ,OAAA;AACjB,uCAAyD;AAAhD,oGAAA,QAAQ,OAAA;AACjB,6CAKsB;AAJpB,yGAAA,UAAU,OAAA;AAKZ,+BAA6C;AAApC,4FAAA,IAAI,OAAA;AACb,2CAA+D;AAAtD,wGAAA,UAAU,OAAA;AACnB,mCAAmD;AAA1C,gGAAA,MAAM,OAAA;AAEf,wEAAwE;AACxE,qDAY0B;AAXxB,iHAAA,cAAc,OAAA;AAGd,0GAAA,OAAO,OAAA;AAEP,wGAAA,KAAK,OAAA;AAEL,gHAAA,aAAa,OAAA;AAEb,gHAAA,aAAa,OAAA;AAGf,+CAQuB;AAPrB,2GAAA,WAAW,OAAA;AAIX,0GAAA,UAAU,OAAA;AACV,2GAAA,WAAW,OAAA;AAGb,yDAU4B;AAT1B,qHAAA,gBAAgB,OAAA;AAIhB,oHAAA,eAAe,OAAA;AACf,0GAAA,KAAK,OAAA;AAEL,iHAAA,YAAY,OAAA;AAGd,iDAQwB;AAPtB,6GAAA,YAAY,OAAA;AAIZ,4GAAA,WAAW,OAAA;AACX,4GAAA,WAAW,OAAA;AAIb,uDAAuD;AACvD,yCAAsF;AAA7E,yGAAA,YAAY,OAAA;AAAE,iHAAA,oBAAoB,OAAA;AAAE,iHAAA,oBAAoB,OAAA"}
@@ -0,0 +1,49 @@
1
+ export interface MonitoringProps {
2
+ /** Resource name (used for ServiceMonitor labels) */
3
+ name: string;
4
+ /** Kubernetes namespace where the app runs (defaults to 'default') */
5
+ namespace?: string;
6
+ /** Labels matching the Kubernetes Service to monitor (e.g., { app: 'api' }) */
7
+ selector: Record<string, string>;
8
+ /** Metrics endpoint port name (defaults to 'metrics') */
9
+ port?: string;
10
+ /** Metrics path (defaults to '/metrics') */
11
+ path?: string;
12
+ /** Scrape interval (defaults to '30s') */
13
+ interval?: string;
14
+ /** Enable log aggregation with Loki (default: false) */
15
+ logs?: boolean;
16
+ /** Loki storage size (default: '10Gi') */
17
+ logsStorage?: string;
18
+ }
19
+ /**
20
+ * Application monitoring — Prometheus ServiceMonitor for your app.
21
+ *
22
+ * @title Monitoring
23
+ * @category Observability
24
+ *
25
+ * Creates a ServiceMonitor that tells Prometheus to scrape your app's
26
+ * metrics endpoint. Pair with a Grafana dashboard for visualization.
27
+ *
28
+ * The Prometheus operator (kube-prometheus-stack) is declared as a
29
+ * dependency — it installs Prometheus, Grafana, and Alertmanager.
30
+ *
31
+ * @example
32
+ * import { Monitoring } from '@r8s/recipes'
33
+ *
34
+ * export default <Monitoring name="api-monitor" selector={{ app: 'api' }} />
35
+ *
36
+ * @example
37
+ * import { Monitoring } from '@r8s/recipes'
38
+ *
39
+ * export default (
40
+ * <Monitoring
41
+ * name="api-monitor"
42
+ * selector={{ app: 'api' }}
43
+ * path="/actuator/prometheus"
44
+ * interval="15s"
45
+ * />
46
+ * )
47
+ */
48
+ export declare function Monitoring(props: MonitoringProps): import("@r8s/core").r8sElement;
49
+ //# sourceMappingURL=monitoring.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monitoring.d.ts","sourceRoot":"","sources":["../src/monitoring.tsx"],"names":[],"mappings":"AAMA,MAAM,WAAW,eAAe;IAC9B,qDAAqD;IACrD,IAAI,EAAE,MAAM,CAAA;IACZ,sEAAsE;IACtE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,+EAA+E;IAC/E,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,yDAAyD;IACzD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,4CAA4C;IAC5C,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,wDAAwD;IACxD,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,0CAA0C;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,kCAsHhD"}
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Monitoring = Monitoring;
4
+ const core_1 = require("@r8s/core");
5
+ const defaults_1 = require("@r8s/core/defaults");
6
+ const crds_1 = require("@r8s/crds");
7
+ const loki_1 = require("@r8s/crds/loki");
8
+ const logging_1 = require("@r8s/crds/logging");
9
+ /**
10
+ * Application monitoring — Prometheus ServiceMonitor for your app.
11
+ *
12
+ * @title Monitoring
13
+ * @category Observability
14
+ *
15
+ * Creates a ServiceMonitor that tells Prometheus to scrape your app's
16
+ * metrics endpoint. Pair with a Grafana dashboard for visualization.
17
+ *
18
+ * The Prometheus operator (kube-prometheus-stack) is declared as a
19
+ * dependency — it installs Prometheus, Grafana, and Alertmanager.
20
+ *
21
+ * @example
22
+ * import { Monitoring } from '@r8s/recipes'
23
+ *
24
+ * export default <Monitoring name="api-monitor" selector={{ app: 'api' }} />
25
+ *
26
+ * @example
27
+ * import { Monitoring } from '@r8s/recipes'
28
+ *
29
+ * export default (
30
+ * <Monitoring
31
+ * name="api-monitor"
32
+ * selector={{ app: 'api' }}
33
+ * path="/actuator/prometheus"
34
+ * interval="15s"
35
+ * />
36
+ * )
37
+ */
38
+ function Monitoring(props) {
39
+ const { name, namespace = 'default', selector, port = 'metrics', path = '/metrics', interval = '30s', logs = false, logsStorage = '10Gi', } = props;
40
+ const sharedOperators = (0, core_1.useContext)(defaults_1.OperatorContext);
41
+ const hasPrometheus = sharedOperators.some((op) => op.name === 'prometheus');
42
+ const hasLoki = sharedOperators.some((op) => op.name === 'loki');
43
+ const hasLogging = sharedOperators.some((op) => op.name === 'logging-operator');
44
+ const resources = [];
45
+ if (!hasPrometheus) {
46
+ resources.push((0, core_1.declareOperator)(crds_1.operators['prometheus']()));
47
+ }
48
+ resources.push((0, core_1.jsx)('ServiceMonitor', {
49
+ apiVersion: 'monitoring.coreos.com/v1',
50
+ kind: 'ServiceMonitor',
51
+ metadata: {
52
+ name,
53
+ namespace,
54
+ labels: { release: 'prometheus' },
55
+ },
56
+ spec: {
57
+ selector: { matchLabels: selector },
58
+ endpoints: [{ port, path, interval }],
59
+ },
60
+ }));
61
+ // Log aggregation with Loki
62
+ if (logs) {
63
+ if (!hasLoki) {
64
+ resources.push((0, core_1.declareOperator)(crds_1.operators['loki']()));
65
+ }
66
+ if (!hasLogging) {
67
+ resources.push((0, core_1.declareOperator)(crds_1.operators['logging-operator']()));
68
+ }
69
+ resources.push((0, loki_1.LokiStackComponent)({
70
+ metadata: { name: `${name}-loki`, namespace },
71
+ spec: {
72
+ size: '1x.small',
73
+ storage: {
74
+ schemas: [{ version: 'v13', effectiveDate: '2024-01-01' }],
75
+ secret: { name: `${name}-loki-storage`, type: 's3' },
76
+ },
77
+ storageClassName: 'standard',
78
+ tenants: {
79
+ mode: 'static',
80
+ authentication: [{ tenantName: 'application', tenantId: 'app' }],
81
+ authorization: {
82
+ roles: [
83
+ {
84
+ name: 'app-reader',
85
+ permissions: ['read'],
86
+ resources: ['logs'],
87
+ tenants: ['application'],
88
+ },
89
+ ],
90
+ roleBindings: [
91
+ {
92
+ name: 'app-reader-binding',
93
+ roles: ['app-reader'],
94
+ subjects: [{ kind: 'group', name: 'system:authenticated' }],
95
+ },
96
+ ],
97
+ },
98
+ },
99
+ },
100
+ }));
101
+ resources.push((0, logging_1.LoggingComponent)({
102
+ metadata: { name: `${name}-logging`, namespace },
103
+ spec: {
104
+ fluentd: {},
105
+ fluentbit: {},
106
+ controlNamespace: namespace,
107
+ },
108
+ }));
109
+ resources.push((0, logging_1.OutputComponent)({
110
+ metadata: { name: `${name}-loki-output`, namespace },
111
+ spec: {
112
+ loki: {
113
+ url: 'http://loki-gateway.loki.svc.cluster.local',
114
+ tenant: 'application',
115
+ },
116
+ },
117
+ }));
118
+ resources.push((0, logging_1.FlowComponent)({
119
+ metadata: { name: `${name}-flow`, namespace },
120
+ spec: {
121
+ match: [{ select: { labels: selector } }],
122
+ localOutputRefs: [`${name}-loki-output`],
123
+ },
124
+ }));
125
+ }
126
+ return (0, core_1.jsx)(core_1.Fragment, { children: resources });
127
+ }
128
+ //# sourceMappingURL=monitoring.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monitoring.js","sourceRoot":"","sources":["../src/monitoring.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /** CloudNativePG operator declaration */
2
+ export declare const cnpgOperator: (version?: string) => import("@r8s/k8s-types").Operator;
3
+ /** NGINX Ingress Controller operator declaration (not in operators.yaml — nginx-specific) */
4
+ export declare const nginxIngressOperator: (version?: string) => {
5
+ name: string;
6
+ description: string;
7
+ source: {
8
+ type: "manifest";
9
+ url: string;
10
+ version: string;
11
+ namespace: string;
12
+ };
13
+ version: string;
14
+ namespace: string;
15
+ installCommand: string;
16
+ };
17
+ /** Vault Secrets Operator declaration */
18
+ export declare const vaultSecretsOperator: (version?: string) => import("@r8s/k8s-types").Operator;
19
+ //# sourceMappingURL=operators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operators.d.ts","sourceRoot":"","sources":["../src/operators.ts"],"names":[],"mappings":"AAQA,yCAAyC;AACzC,eAAO,MAAM,YAAY,yDAAoB,CAAA;AAE7C,6FAA6F;AAC7F,eAAO,MAAM,oBAAoB,GAAI,gBAAkB;;;;;;;;;;;;CAYrD,CAAA;AAEF,yCAAyC;AACzC,eAAO,MAAM,oBAAoB,yDAAsC,CAAA"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.vaultSecretsOperator = exports.nginxIngressOperator = exports.cnpgOperator = void 0;
4
+ /**
5
+ * Operator declarations re-exported from @r8s/crds.
6
+ *
7
+ * The canonical source is packages/crds/operators.yaml. These wrappers
8
+ * exist for backwards compatibility with recipes that import from here.
9
+ */
10
+ const crds_1 = require("@r8s/crds");
11
+ /** CloudNativePG operator declaration */
12
+ exports.cnpgOperator = crds_1.operators['cnpg'];
13
+ /** NGINX Ingress Controller operator declaration (not in operators.yaml — nginx-specific) */
14
+ const nginxIngressOperator = (version = '1.15.1') => ({
15
+ name: 'nginx-ingress',
16
+ description: 'NGINX Ingress Controller',
17
+ source: {
18
+ type: 'manifest',
19
+ url: `https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v${version}/deploy/static/provider/cloud/deploy.yaml`,
20
+ version,
21
+ namespace: 'ingress-nginx',
22
+ },
23
+ version,
24
+ namespace: 'ingress-nginx',
25
+ installCommand: `kubectl apply --server-side -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v${version}/deploy/static/provider/cloud/deploy.yaml`,
26
+ });
27
+ exports.nginxIngressOperator = nginxIngressOperator;
28
+ /** Vault Secrets Operator declaration */
29
+ exports.vaultSecretsOperator = crds_1.operators['vault-secrets-operator'];
30
+ //# sourceMappingURL=operators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operators.js","sourceRoot":"","sources":["../src/operators.ts"],"names":[],"mappings":";;;AAAA;;;;;GAKG;AACH,oCAAqC;AAErC,yCAAyC;AAC5B,QAAA,YAAY,GAAG,gBAAS,CAAC,MAAM,CAAC,CAAA;AAE7C,6FAA6F;AACtF,MAAM,oBAAoB,GAAG,CAAC,OAAO,GAAG,QAAQ,EAAE,EAAE,CAAC,CAAC;IAC3D,IAAI,EAAE,eAAe;IACrB,WAAW,EAAE,0BAA0B;IACvC,MAAM,EAAE;QACN,IAAI,EAAE,UAAmB;QACzB,GAAG,EAAE,0EAA0E,OAAO,2CAA2C;QACjI,OAAO;QACP,SAAS,EAAE,eAAe;KAC3B;IACD,OAAO;IACP,SAAS,EAAE,eAAe;IAC1B,cAAc,EAAE,yGAAyG,OAAO,2CAA2C;CAC5K,CAAC,CAAA;AAZW,QAAA,oBAAoB,wBAY/B;AAEF,yCAAyC;AAC5B,QAAA,oBAAoB,GAAG,gBAAS,CAAC,wBAAwB,CAAC,CAAA"}