@r8s/recipes 0.1.0 → 0.2.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.
@@ -1 +1 @@
1
- {"version":3,"file":"endpoint-provider.d.ts","sourceRoot":"","sources":["../src/endpoint-provider.tsx"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AACH,MAAM,WAAW,UAAU;IACzB,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,gCAAgC;IAChC,GAAG,CAAC,EAAE;QACJ,qCAAqC;QACrC,aAAa,CAAC,EAAE,MAAM,CAAA;KACvB,CAAA;CACF;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,cAAc,CAQvD;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,iBAAiB;IAChC,yCAAyC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,gCAAgC;IAChC,GAAG,CAAC,EAAE;QACJ,qCAAqC;QACrC,aAAa,CAAC,EAAE,MAAM,CAAA;KACvB,CAAA;CACF;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,cAAc,CAQrE;AAED,sCAAsC;AACtC,MAAM,WAAW,cAAc;IAC7B,6BAA6B;IAC7B,QAAQ,EAAE,OAAO,GAAG,eAAe,CAAA;IACnC,iCAAiC;IACjC,QAAQ,CAAC,EAAE;QACT,8CAA8C;QAC9C,gBAAgB,CAAC,EAAE,MAAM,CAAA;QACzB,sCAAsC;QACtC,gBAAgB,CAAC,EAAE,MAAM,CAAA;QACzB,gCAAgC;QAChC,GAAG,CAAC,EAAE;YACJ,aAAa,CAAC,EAAE,MAAM,CAAA;SACvB,CAAA;KACF,CAAA;CACF;AAED,oDAAoD;AACpD,MAAM,MAAM,qBAAqB,GAAG,OAAO,GAAG,eAAe,GAAG,cAAc,CAAA;AAE9E,eAAO,MAAM,eAAe,0DAAuD,CAAA;AAEnF,MAAM,WAAW,qBAAqB;IACpC;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,QAAQ,EAAE,qBAAqB,CAAA;IAC/B,uBAAuB;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,kCAgB5D"}
1
+ {"version":3,"file":"endpoint-provider.d.ts","sourceRoot":"","sources":["../src/endpoint-provider.tsx"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AACH,MAAM,WAAW,UAAU;IACzB,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,gCAAgC;IAChC,GAAG,CAAC,EAAE;QACJ,qCAAqC;QACrC,aAAa,CAAC,EAAE,MAAM,CAAA;KACvB,CAAA;CACF;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,cAAc,CAQvD;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,iBAAiB;IAChC,yCAAyC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,gCAAgC;IAChC,GAAG,CAAC,EAAE;QACJ,qCAAqC;QACrC,aAAa,CAAC,EAAE,MAAM,CAAA;KACvB,CAAA;CACF;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,cAAc,CAQrE;AAED,sCAAsC;AACtC,MAAM,WAAW,cAAc;IAC7B,6BAA6B;IAC7B,QAAQ,EAAE,OAAO,GAAG,eAAe,CAAA;IACnC,iCAAiC;IACjC,QAAQ,CAAC,EAAE;QACT,8CAA8C;QAC9C,gBAAgB,CAAC,EAAE,MAAM,CAAA;QACzB,sCAAsC;QACtC,gBAAgB,CAAC,EAAE,MAAM,CAAA;QACzB,gCAAgC;QAChC,GAAG,CAAC,EAAE;YACJ,aAAa,CAAC,EAAE,MAAM,CAAA;SACvB,CAAA;KACF,CAAA;CACF;AAED,oDAAoD;AACpD,MAAM,MAAM,qBAAqB,GAAG,OAAO,GAAG,eAAe,GAAG,cAAc,CAAA;AAE9E,eAAO,MAAM,eAAe,0DAAuD,CAAA;AAEnF,MAAM,WAAW,qBAAqB;IACpC;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,QAAQ,EAAE,qBAAqB,CAAA;IAC/B,uBAAuB;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,kCAiC5D"}
@@ -64,8 +64,28 @@ exports.EndpointContext = (0, defaults_1.createContext)({ provider: 'nginx' });
64
64
  */
65
65
  function EndpointProvider(props) {
66
66
  const { provider, children } = props;
67
- // Resolve provider config
68
- const config = typeof provider === 'string' ? { provider } : provider;
67
+ // Resolve provider config. Accepts:
68
+ // - string ('nginx' | 'envoy-gateway')
69
+ // - a plain EndpointConfig object
70
+ // - a JSX element of a provider component (e.g. <EnvoyGateway className="eg" />)
71
+ // — invoked here to produce its EndpointConfig
72
+ let config;
73
+ if (typeof provider === 'string') {
74
+ config = { provider };
75
+ }
76
+ else if (provider && typeof provider === 'object') {
77
+ const element = provider;
78
+ if (typeof element.type === 'function') {
79
+ const ProviderComponent = element.type;
80
+ config = ProviderComponent(element.props ?? {});
81
+ }
82
+ else {
83
+ config = provider;
84
+ }
85
+ }
86
+ else {
87
+ config = provider;
88
+ }
69
89
  // Map to RoutingContext for backward compatibility
70
90
  const routing = {
71
91
  mode: config.provider === 'envoy-gateway' ? 'gateway' : 'ingress',
@@ -1 +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"}
1
+ {"version":3,"file":"endpoint-provider.js","sourceRoot":"","sources":["../src/endpoint-provider.tsx"],"names":[],"mappings":";;;AAsBA,sBAQC;AAoBD,oCAQC;AAyFD,4CAiCC;AApLD,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,oCAAoC;IACpC,wCAAwC;IACxC,mCAAmC;IACnC,kFAAkF;IAClF,kDAAkD;IAClD,IAAI,MAAsB,CAAA;IAC1B,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjC,MAAM,GAAG,EAAE,QAAQ,EAAE,CAAA;IACvB,CAAC;SAAM,IAAI,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACpD,MAAM,OAAO,GAAG,QAA8C,CAAA;QAC9D,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YACvC,MAAM,iBAAiB,GAAG,OAAO,CAAC,IAAqC,CAAA;YACvE,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAA;QACjD,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,QAA0B,CAAA;QACrC,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,QAA0B,CAAA;IACrC,CAAC;IAED,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"}
@@ -6,10 +6,27 @@ export interface EndpointProps extends Omit<BaseRouteProps, 'host'> {
6
6
  serviceName: string;
7
7
  /** Service port (default: 80) */
8
8
  servicePort?: number;
9
+ /**
10
+ * Request path to route (default: '/'). Path-based routes are rendered
11
+ * as Prefix paths in Ingress mode AND PathPrefix matches in Gateway
12
+ * (HTTPRoute) mode so one host can serve multiple services.
13
+ */
14
+ path?: string;
15
+ /** Ingress pathType when `path` is set (default: 'Prefix') */
16
+ pathType?: 'Prefix' | 'Exact' | 'ImplementationSpecific';
9
17
  /** Create a DNS record via ExternalDNS (default: false, or true when DnsProvider is set) */
10
18
  dns?: boolean;
11
19
  /** DNS record TTL in seconds (default: 300) */
12
20
  dnsTtl?: number;
21
+ /**
22
+ * Reference to an existing shared Gateway instead of creating a new one.
23
+ * Set this to avoid allocating a new LoadBalancer IP per app.
24
+ * When set, only an HTTPRoute is created (no Gateway resource).
25
+ */
26
+ sharedGateway?: {
27
+ name: string;
28
+ namespace?: string;
29
+ };
13
30
  }
14
31
  /**
15
32
  * Endpoint — cluster-adaptive routing for a service.
@@ -1 +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"}
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;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,wBAAwB,CAAA;IACxD,4FAA4F;IAC5F,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,+CAA+C;IAC/C,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;;;OAIG;IACH,aAAa,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CACrD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,kCAmQ5C"}
package/dist/endpoint.js CHANGED
@@ -37,18 +37,22 @@ const dns_provider_1 = require("./dns-provider");
37
37
  * )
38
38
  */
39
39
  function Endpoint(props) {
40
- const { name, namespace = 'default', host, serviceName, servicePort = 80, tls, annotations = {}, dns, dnsTtl = 300, } = props;
40
+ const { name, namespace = 'default', host, serviceName, servicePort = 80, path, pathType, tls, annotations = {}, dns, dnsTtl = 300, sharedGateway, } = props;
41
41
  const routing = (0, core_1.useContext)(defaults_1.RoutingContext);
42
42
  const endpointConfig = (0, core_1.useContext)(endpoint_provider_1.EndpointContext);
43
43
  const sharedOperators = (0, core_1.useContext)(defaults_1.OperatorContext);
44
44
  const dnsConfig = (0, core_1.useContext)(dns_provider_1.DnsContext);
45
45
  // DNS defaults to true when DnsProvider is set, unless explicitly disabled
46
46
  const createDnsRecord = dns ?? dnsConfig !== null;
47
+ // Mode resolution: the Platform RoutingContext describes the cluster, but
48
+ // an explicit EndpointProvider with <EnvoyGateway /> opts this endpoint
49
+ // into Gateway API even without a Platform (or CLI route-level default)
50
+ const gatewayMode = routing.mode === 'gateway' || endpointConfig.provider === 'envoy-gateway';
47
51
  const resources = [];
48
- if (routing.mode === 'gateway') {
49
- const gatewayClassName = routing.gatewayClassName || 'eg';
52
+ if (gatewayMode) {
53
+ const gatewayClassName = endpointConfig.settings?.gatewayClassName ?? routing.gatewayClassName ?? 'eg';
50
54
  const secretName = tls?.secretName || `${name}-tls`;
51
- const issuerName = tls?.clusterIssuer || 'letsencrypt-prod';
55
+ const issuerName = tls?.clusterIssuer ?? endpointConfig.settings?.tls?.clusterIssuer ?? 'letsencrypt-prod';
52
56
  const hasCertManager = sharedOperators.some((op) => op.name === 'cert-manager');
53
57
  const hasEnvoyGateway = sharedOperators.some((op) => op.name === 'envoy-gateway');
54
58
  if (tls && !hasCertManager) {
@@ -77,46 +81,77 @@ function Endpoint(props) {
77
81
  }
78
82
  // HTTPS listener with TLS, HTTP listener without
79
83
  const useHttps = !!tls;
80
- resources.push((0, core_1.jsx)('Gateway', {
84
+ // Only create a Gateway when no sharedGateway is provided.
85
+ // When sharedGateway is set, attach an HTTPRoute to the existing
86
+ // gateway instead of allocating a new LoadBalancer IP.
87
+ if (!sharedGateway) {
88
+ resources.push((0, core_1.jsx)('Gateway', {
89
+ apiVersion: 'gateway.networking.k8s.io/v1',
90
+ kind: 'Gateway',
91
+ metadata: {
92
+ name: `${name}-gateway`,
93
+ namespace,
94
+ // ExternalDNS gateway source picks up hostnames from this annotation
95
+ ...(createDnsRecord && {
96
+ annotations: {
97
+ 'external-dns.alpha.kubernetes.io/hostname': host,
98
+ },
99
+ }),
100
+ },
101
+ spec: {
102
+ gatewayClassName,
103
+ listeners: [
104
+ {
105
+ name: useHttps ? 'https' : 'http',
106
+ protocol: useHttps ? 'HTTPS' : 'HTTP',
107
+ port: useHttps ? 443 : 80,
108
+ hostname: host,
109
+ ...(tls && {
110
+ tls: {
111
+ mode: 'Terminate',
112
+ certificateRefs: [{ name: secretName }],
113
+ },
114
+ }),
115
+ },
116
+ ],
117
+ },
118
+ }));
119
+ }
120
+ const parentRef = sharedGateway
121
+ ? {
122
+ name: sharedGateway.name,
123
+ ...(sharedGateway.namespace && { namespace: sharedGateway.namespace }),
124
+ }
125
+ : { name: `${name}-gateway` };
126
+ resources.push((0, core_1.jsx)('HTTPRoute', {
81
127
  apiVersion: 'gateway.networking.k8s.io/v1',
82
- kind: 'Gateway',
128
+ kind: 'HTTPRoute',
83
129
  metadata: {
84
- name: `${name}-gateway`,
130
+ name: `${name}-route`,
85
131
  namespace,
86
- // ExternalDNS gateway source picks up hostnames from this annotation
87
- ...(createDnsRecord && {
132
+ // ExternalDNS picks up hostnames from HTTPRoute annotations
133
+ ...(createDnsRecord &&
134
+ sharedGateway && {
88
135
  annotations: {
89
136
  'external-dns.alpha.kubernetes.io/hostname': host,
90
137
  },
91
138
  }),
92
139
  },
93
140
  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` }],
141
+ parentRefs: [parentRef],
117
142
  hostnames: [host],
118
143
  rules: [
119
144
  {
145
+ ...(path && {
146
+ matches: [
147
+ {
148
+ path: {
149
+ type: 'PathPrefix',
150
+ value: path,
151
+ },
152
+ },
153
+ ],
154
+ }),
120
155
  backendRefs: [{ name: serviceName, port: servicePort }],
121
156
  },
122
157
  ],
@@ -139,7 +174,10 @@ function Endpoint(props) {
139
174
  name,
140
175
  namespace,
141
176
  annotations: {
142
- 'nginx.ingress.kubernetes.io/rewrite-target': '/',
177
+ // NOTE: no rewrite-target on host-level routes — setting it to
178
+ // '/' rewrites EVERY request path to '/' and breaks path-based
179
+ // upstreams (webhooks, APIs, OAuth callbacks). Set annotations
180
+ // explicitly when a captured-regex path needs one.
143
181
  // ExternalDNS ingress source picks up hostnames from this annotation
144
182
  ...(createDnsRecord ? { 'external-dns.alpha.kubernetes.io/hostname': host } : {}),
145
183
  ...(tls?.clusterIssuer
@@ -158,8 +196,8 @@ function Endpoint(props) {
158
196
  http: {
159
197
  paths: [
160
198
  {
161
- path: '/',
162
- pathType: 'Prefix',
199
+ path: path ?? '/',
200
+ pathType: pathType ?? 'Prefix',
163
201
  backend: {
164
202
  service: {
165
203
  name: serviceName,
@@ -1 +1 @@
1
- {"version":3,"file":"endpoint.js","sourceRoot":"","sources":["../src/endpoint.tsx"],"names":[],"mappings":";;AAmDA,4BAqNC;AAxQD,oCAAsE;AAGtE,iDAAoE;AACpE,2DAAqD;AACrD,2CAAkD;AAClD,oCAAqC;AACrC,uDAA4D;AAC5D,iDAA2C;AAe3C;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,SAAgB,QAAQ,CAAC,KAAoB;IAC3C,MAAM,EACJ,IAAI,EACJ,SAAS,GAAG,SAAS,EACrB,IAAI,EACJ,WAAW,EACX,WAAW,GAAG,EAAE,EAChB,GAAG,EACH,WAAW,GAAG,EAAE,EAChB,GAAG,EACH,MAAM,GAAG,GAAG,GACb,GAAG,KAAK,CAAA;IAET,MAAM,OAAO,GAAG,IAAA,iBAAU,EAAC,yBAAc,CAAC,CAAA;IAC1C,MAAM,cAAc,GAAG,IAAA,iBAAU,EAAC,mCAAe,CAAC,CAAA;IAClD,MAAM,eAAe,GAAG,IAAA,iBAAU,EAAC,0BAAe,CAAC,CAAA;IACnD,MAAM,SAAS,GAAG,IAAA,iBAAU,EAAC,yBAAU,CAAC,CAAA;IAExC,2EAA2E;IAC3E,MAAM,eAAe,GAAG,GAAG,IAAI,SAAS,KAAK,IAAI,CAAA;IAEjD,MAAM,SAAS,GAA6B,EAAE,CAAA;IAE9C,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC/B,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,IAAI,IAAI,CAAA;QACzD,MAAM,UAAU,GAAG,GAAG,EAAE,UAAU,IAAI,GAAG,IAAI,MAAM,CAAA;QACnD,MAAM,UAAU,GAAG,GAAG,EAAE,aAAa,IAAI,kBAAkB,CAAA;QAE3D,MAAM,cAAc,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,cAAc,CAAC,CAAA;QAC/E,MAAM,eAAe,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,eAAe,CAAC,CAAA;QAEjF,IAAI,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YAC3B,SAAS,CAAC,IAAI,CAAC,IAAA,sBAAe,EAAC,gBAAS,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAA;QAC9D,CAAC;QACD,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,SAAS,CAAC,IAAI,CAAC,IAAA,sBAAe,EAAC,gBAAS,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAA;QAC/D,CAAC;QAED,IAAI,GAAG,EAAE,CAAC;YACR,SAAS,CAAC,IAAI,CACZ,IAAA,UAAG,EAAC,aAAa,EAAE;gBACjB,UAAU,EAAE,oBAAoB;gBAChC,IAAI,EAAE,aAAa;gBACnB,QAAQ,EAAE;oBACR,IAAI,EAAE,GAAG,IAAI,MAAM;oBACnB,SAAS;iBACV;gBACD,IAAI,EAAE;oBACJ,UAAU;oBACV,QAAQ,EAAE,CAAC,IAAI,CAAC;oBAChB,SAAS,EAAE;wBACT,IAAI,EAAE,UAAU;wBAChB,IAAI,EAAE,eAAe;qBACtB;iBACF;aACF,CAAC,CACH,CAAA;QACH,CAAC;QAED,iDAAiD;QACjD,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAA;QACtB,SAAS,CAAC,IAAI,CACZ,IAAA,UAAG,EAAC,SAAS,EAAE;YACb,UAAU,EAAE,8BAA8B;YAC1C,IAAI,EAAE,SAAS;YACf,QAAQ,EAAE;gBACR,IAAI,EAAE,GAAG,IAAI,UAAU;gBACvB,SAAS;gBACT,qEAAqE;gBACrE,GAAG,CAAC,eAAe,IAAI;oBACrB,WAAW,EAAE;wBACX,2CAA2C,EAAE,IAAI;qBAClD;iBACF,CAAC;aACH;YACD,IAAI,EAAE;gBACJ,gBAAgB;gBAChB,SAAS,EAAE;oBACT;wBACE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;wBACjC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;wBACrC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;wBACzB,QAAQ,EAAE,IAAI;wBACd,GAAG,CAAC,GAAG,IAAI;4BACT,GAAG,EAAE;gCACH,IAAI,EAAE,WAAW;gCACjB,eAAe,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;6BACxC;yBACF,CAAC;qBACH;iBACF;aACF;SACF,CAAC,CACH,CAAA;QAED,SAAS,CAAC,IAAI,CACZ,IAAA,UAAG,EAAC,WAAW,EAAE;YACf,UAAU,EAAE,8BAA8B;YAC1C,IAAI,EAAE,WAAW;YACjB,QAAQ,EAAE,EAAE,IAAI,EAAE,GAAG,IAAI,QAAQ,EAAE,SAAS,EAAE;YAC9C,IAAI,EAAE;gBACJ,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,IAAI,UAAU,EAAE,CAAC;gBACzC,SAAS,EAAE,CAAC,IAAI,CAAC;gBACjB,KAAK,EAAE;oBACL;wBACE,WAAW,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;qBACxD;iBACF;aACF;SACF,CAAC,CACH,CAAA;IACH,CAAC;SAAM,CAAC;QACN,MAAM,eAAe,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,eAAe,CAAC,CAAA;QACjF,MAAM,cAAc,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,cAAc,CAAC,CAAA;QAE/E,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,SAAS,CAAC,IAAI,CAAC,IAAA,sBAAe,EAAC,IAAA,gCAAoB,GAAE,CAAC,CAAC,CAAA;QACzD,CAAC;QACD,IAAI,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YAC3B,SAAS,CAAC,IAAI,CAAC,IAAA,sBAAe,EAAC,gBAAS,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAA;QAC9D,CAAC;QAED,MAAM,OAAO,GAAY;YACvB,UAAU,EAAE,sBAAsB;YAClC,IAAI,EAAE,SAAS;YACf,QAAQ,EAAE;gBACR,IAAI;gBACJ,SAAS;gBACT,WAAW,EAAE;oBACX,4CAA4C,EAAE,GAAG;oBACjD,qEAAqE;oBACrE,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,2CAA2C,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACjF,GAAG,CAAC,GAAG,EAAE,aAAa;wBACpB,CAAC,CAAC;4BACE,gCAAgC,EAAE,GAAG,CAAC,aAAa;yBACpD;wBACH,CAAC,CAAC,EAAE,CAAC;oBACP,GAAG,WAAW;iBACf;aACF;YACD,IAAI,EAAE;gBACJ,gBAAgB,EAAE,cAAc,CAAC,QAAQ,EAAE,gBAAgB,IAAI,OAAO;gBACtE,KAAK,EAAE;oBACL;wBACE,IAAI;wBACJ,IAAI,EAAE;4BACJ,KAAK,EAAE;gCACL;oCACE,IAAI,EAAE,GAAG;oCACT,QAAQ,EAAE,QAAQ;oCAClB,OAAO,EAAE;wCACP,OAAO,EAAE;4CACP,IAAI,EAAE,WAAW;4CACjB,IAAI,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE;yCAC9B;qCACF;iCACF;6BACF;yBACF;qBACF;iBACF;gBACD,GAAG,CAAC,GAAG,EAAE,UAAU,IAAI;oBACrB,GAAG,EAAE;wBACH;4BACE,KAAK,EAAE,CAAC,IAAI,CAAC;4BACb,UAAU,EAAE,GAAG,CAAC,UAAU;yBAC3B;qBACF;iBACF,CAAC;aACH;SACF,CAAA;QAED,SAAS,CAAC,IAAI,CAAC,IAAA,UAAG,EAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAA;IACzC,CAAC;IAED,8BAA8B;IAC9B,EAAE;IACF,aAAa;IACb,uEAAuE;IACvE,0EAA0E;IAC1E,wEAAwE;IACxE,uEAAuE;IACvE,wEAAwE;IACxE,2DAA2D;IAC3D,MAAM,UAAU,GAAG,SAAS,EAAE,QAAQ,EAAE,OAA+B,CAAA;IACvE,IAAI,eAAe,EAAE,CAAC;QACpB,MAAM,cAAc,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,cAAc,CAAC,CAAA;QAC/E,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,SAAS,CAAC,IAAI,CAAC,IAAA,sBAAe,EAAC,gBAAS,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAA;QAC9D,CAAC;QAED,IAAI,UAAU,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxC,SAAS,CAAC,IAAI,CACZ,IAAA,kCAAoB,EAAC;gBACnB,QAAQ,EAAE,EAAE,IAAI,EAAE,GAAG,IAAI,MAAM,EAAE,SAAS,EAAE;gBAC5C,IAAI,EAAE;oBACJ,SAAS,EAAE;wBACT;4BACE,OAAO,EAAE,IAAI;4BACb,UAAU,EAAE,GAAG;4BACf,OAAO,EAAE,UAAU;4BACnB,SAAS,EAAE,MAAM;yBAClB;qBACF;iBACF;aACF,CAAC,CACH,CAAA;QACH,CAAC;QACD,8DAA8D;QAC9D,mEAAmE;IACrE,CAAC;IAED,OAAO,IAAA,UAAG,EAAC,eAAQ,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAA;AAC/C,CAAC"}
1
+ {"version":3,"file":"endpoint.js","sourceRoot":"","sources":["../src/endpoint.tsx"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  export { Platform, type PlatformProps, type RoutingMode } from './platform';
2
+ export { R8sCluster, type R8sClusterProps } from './r8s-cluster';
2
3
  export { App, type AppProps } from './app';
3
4
  export { Database, type DatabaseProps } from './database';
4
5
  export { Endpoint, type EndpointProps } from './endpoint';
@@ -1 +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"}
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,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAA;AAChE,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 CHANGED
@@ -4,9 +4,11 @@
4
4
  // with good defaults. Named after what the user wants to achieve, not the
5
5
  // underlying tools.
6
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;
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.R8sCluster = exports.Platform = void 0;
8
8
  var platform_1 = require("./platform");
9
9
  Object.defineProperty(exports, "Platform", { enumerable: true, get: function () { return platform_1.Platform; } });
10
+ var r8s_cluster_1 = require("./r8s-cluster");
11
+ Object.defineProperty(exports, "R8sCluster", { enumerable: true, get: function () { return r8s_cluster_1.R8sCluster; } });
10
12
  var app_1 = require("./app");
11
13
  Object.defineProperty(exports, "App", { enumerable: true, get: function () { return app_1.App; } });
12
14
  var database_1 = require("./database");
package/dist/index.js.map CHANGED
@@ -1 +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"}
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,6CAAgE;AAAvD,yGAAA,UAAU,OAAA;AACnB,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"}
@@ -11,6 +11,15 @@ export interface PlatformProps {
11
11
  routing?: RoutingMode;
12
12
  /** Gateway class name (only used when routing='gateway', default: 'eg') */
13
13
  gatewayClassName?: string;
14
+ /**
15
+ * Reference to a shared Gateway for all child endpoints.
16
+ * When set, App/Endpoint create only HTTPRoutes (no per-app Gateway),
17
+ * avoiding a new LoadBalancer IP per app.
18
+ */
19
+ sharedGateway?: {
20
+ name: string;
21
+ namespace?: string;
22
+ };
14
23
  /** Default namespace for all child resources */
15
24
  namespace?: string;
16
25
  /** Default labels applied to all child resources */
@@ -1 +1 @@
1
- {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../src/platform.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,EAAkB,KAAK,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAC5E,OAAO,EAAe,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAOnE,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,SAAS,CAAA;AAE/C,MAAM,WAAW,aAAa;IAC5B;;;;OAIG;IACH,OAAO,CAAC,EAAE,WAAW,CAAA;IACrB,2EAA2E;IAC3E,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,gDAAgD;IAChD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,oDAAoD;IACpD,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,+CAA+C;IAC/C,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAA;IACtB;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,EAAE,mBAAmB,CAAA;IAC7B;;;;;;OAMG;IACH,GAAG,CAAC,EAAE,gBAAgB,CAAA;IACtB,uFAAuF;IACvF,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqEG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,WA4D5C"}
1
+ {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../src/platform.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,EAAkB,KAAK,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAC5E,OAAO,EAAe,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAOnE,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,SAAS,CAAA;AAE/C,MAAM,WAAW,aAAa;IAC5B;;;;OAIG;IACH,OAAO,CAAC,EAAE,WAAW,CAAA;IACrB,2EAA2E;IAC3E,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB;;;;OAIG;IACH,aAAa,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACpD,gDAAgD;IAChD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,oDAAoD;IACpD,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,+CAA+C;IAC/C,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAA;IACtB;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,EAAE,mBAAmB,CAAA;IAC7B;;;;;;OAMG;IACH,GAAG,CAAC,EAAE,gBAAgB,CAAA;IACtB,uFAAuF;IACvF,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqEG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,WA4D5C"}
@@ -1 +1 @@
1
- {"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.tsx"],"names":[],"mappings":";;AAmIA,4BA4DC;AA/LD,oCAAqD;AACrD,iDAO2B;AAE3B,uDAA4E;AAC5E,iDAAmE;AACnE,2DAI4B;AA6C5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqEG;AACH,SAAgB,QAAQ,CAAC,KAAoB;IAC3C,MAAM,EACJ,OAAO,GAAG,SAAS,EACnB,gBAAgB,GAAG,IAAI,EACvB,SAAS,EACT,MAAM,EACN,SAAS,EACT,OAAO,EACP,GAAG,EACH,QAAQ,GACT,GAAG,KAAK,CAAA;IAET,IAAI,MAAM,GAAY,QAAQ,CAAA;IAE9B,2EAA2E;IAC3E,0EAA0E;IAC1E,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,GAAG,IAAA,UAAG,EAAC,eAAQ,EAAE;YACrB,QAAQ,EAAE;gBACR,IAAA,UAAG,EAAC,WAAW,EAAE;oBACf,UAAU,EAAE,IAAI;oBAChB,IAAI,EAAE,WAAW;oBACjB,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;iBAC9B,CAAC;gBACF,MAAM;aACP;SACF,CAAC,CAAA;IACJ,CAAC;IAED,qFAAqF;IACrF,IAAI,GAAG,EAAE,CAAC;QACR,MAAM,GAAG,IAAA,UAAG,EAAC,0BAAW,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAA;IAChE,CAAC;IAED,iEAAiE;IACjE,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,GAAG,IAAA,UAAG,EAAC,gCAAc,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAA;IACvE,CAAC;IAED,6CAA6C;IAC7C,MAAM,gBAAgB,GACpB,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE,EAAE,gBAAgB,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAA;IACjG,MAAM,GAAG,IAAA,UAAG,EAAC,oCAAgB,EAAE,EAAE,QAAQ,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAA;IAEhF,0BAA0B;IAC1B,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtC,MAAM,GAAG,IAAA,UAAG,EAAC,0BAAe,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAA;IAChF,CAAC;IAED,uBAAuB;IACvB,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,GAAG,IAAA,UAAG,EAAC,iBAAM,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAA;IACpE,CAAC;IAED,0BAA0B;IAC1B,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,GAAG,IAAA,UAAG,EAAC,oBAAS,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAA;IAC1E,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC"}
1
+ {"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.tsx"],"names":[],"mappings":";;AAyIA,4BA4DC;AArMD,oCAAqD;AACrD,iDAO2B;AAE3B,uDAA4E;AAC5E,iDAAmE;AACnE,2DAI4B;AAmD5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqEG;AACH,SAAgB,QAAQ,CAAC,KAAoB;IAC3C,MAAM,EACJ,OAAO,GAAG,SAAS,EACnB,gBAAgB,GAAG,IAAI,EACvB,SAAS,EACT,MAAM,EACN,SAAS,EACT,OAAO,EACP,GAAG,EACH,QAAQ,GACT,GAAG,KAAK,CAAA;IAET,IAAI,MAAM,GAAY,QAAQ,CAAA;IAE9B,2EAA2E;IAC3E,0EAA0E;IAC1E,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,GAAG,IAAA,UAAG,EAAC,eAAQ,EAAE;YACrB,QAAQ,EAAE;gBACR,IAAA,UAAG,EAAC,WAAW,EAAE;oBACf,UAAU,EAAE,IAAI;oBAChB,IAAI,EAAE,WAAW;oBACjB,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;iBAC9B,CAAC;gBACF,MAAM;aACP;SACF,CAAC,CAAA;IACJ,CAAC;IAED,qFAAqF;IACrF,IAAI,GAAG,EAAE,CAAC;QACR,MAAM,GAAG,IAAA,UAAG,EAAC,0BAAW,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAA;IAChE,CAAC;IAED,iEAAiE;IACjE,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,GAAG,IAAA,UAAG,EAAC,gCAAc,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAA;IACvE,CAAC;IAED,6CAA6C;IAC7C,MAAM,gBAAgB,GACpB,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE,EAAE,gBAAgB,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAA;IACjG,MAAM,GAAG,IAAA,UAAG,EAAC,oCAAgB,EAAE,EAAE,QAAQ,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAA;IAEhF,0BAA0B;IAC1B,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtC,MAAM,GAAG,IAAA,UAAG,EAAC,0BAAe,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAA;IAChF,CAAC;IAED,uBAAuB;IACvB,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,GAAG,IAAA,UAAG,EAAC,iBAAM,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAA;IACpE,CAAC;IAED,0BAA0B;IAC1B,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,GAAG,IAAA,UAAG,EAAC,oBAAS,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAA;IAC1E,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC"}
@@ -0,0 +1,105 @@
1
+ import type { Operator } from '@r8s/k8s-types';
2
+ export interface R8sClusterProps {
3
+ /**
4
+ * OpenBao secrets backend configuration. VSO (Vault Secrets Operator)
5
+ * is declared automatically. This context is inherited by all
6
+ * children (App, Database, Auth, etc.) so credentials are managed
7
+ * by VSO — never plaintext.
8
+ */
9
+ secrets: {
10
+ /** OpenBao mount path (e.g., 'secret') */
11
+ mount: string;
12
+ /** OpenBao path prefix for this cluster (e.g., 'production') */
13
+ path: string;
14
+ /** Optional VSO auth reference name */
15
+ authRef?: string;
16
+ };
17
+ /**
18
+ * ExternalDNS configuration with TSIG for secure RFC 2136 updates.
19
+ * The external-dns operator is declared automatically, and a
20
+ * VaultStaticSecret is created for the TSIG key in the external-dns
21
+ * namespace.
22
+ */
23
+ dns: {
24
+ /** RFC 2136 DNS server (e.g., 'ns1.example.com') */
25
+ server: string;
26
+ /** DNS zone (e.g., 'example.com') */
27
+ zone: string;
28
+ /** TSIG key path in OpenBao (e.g., 'dns/tsig') */
29
+ tsigPath: string;
30
+ /** TSIG key name in the secret (default: 'secret') */
31
+ tsigKey?: string;
32
+ };
33
+ /**
34
+ * Gateway class name for Envoy Gateway (default: 'eg').
35
+ * The envoy-gateway operator is declared automatically.
36
+ */
37
+ gatewayClassName?: string;
38
+ /**
39
+ * Default labels applied to all resources.
40
+ */
41
+ labels?: Record<string, string>;
42
+ /**
43
+ * Pre-installed operators. R8sCluster won't re-declare these.
44
+ */
45
+ operators?: Operator[];
46
+ /**
47
+ * Namespace for LokiStack and logging resources (default: 'logging').
48
+ * This is separate from app namespaces — logging infra lives in
49
+ * its own namespace.
50
+ */
51
+ logsNamespace?: string;
52
+ /**
53
+ * Storage class for Loki logs (default: 'standard').
54
+ */
55
+ logsStorageClass?: string;
56
+ /**
57
+ * Application components (App, Database, Auth, etc.).
58
+ * Children inherit routing, secrets, and DNS contexts.
59
+ * Optional — R8sCluster can be used standalone to set up cluster
60
+ * infrastructure without any apps.
61
+ */
62
+ children?: unknown;
63
+ }
64
+ /**
65
+ * R8sCluster — opinionated cluster foundation with all recommended operators.
66
+ *
67
+ * @title R8sCluster
68
+ * @category Complete Solution
69
+ *
70
+ * Sets up a complete cluster foundation in one component:
71
+ * - **cert-manager** for TLS certificate automation
72
+ * - **external-dns** with TSIG for secure DNS updates
73
+ * - **Envoy Gateway** for Gateway API routing
74
+ * - **OpenBao VSO** for secrets management
75
+ * - **Prometheus** for metrics and alerting
76
+ * - **Loki + FluentBit** for log aggregation of all user pods
77
+ *
78
+ * All operators are declared automatically. Children inherit routing,
79
+ * secrets, and DNS contexts — just add your apps.
80
+ *
81
+ * R8sCluster is cluster-scoped — it does not take a namespace. Operators
82
+ * install to their own namespaces (cert-manager, external-dns, etc.).
83
+ * Logging infrastructure lives in a dedicated namespace (default:
84
+ * 'logging'). App namespaces are managed by Platform or the apps
85
+ * themselves.
86
+ *
87
+ * @example
88
+ * import { R8sCluster, Platform, App, Database } from '@r8s/recipes'
89
+ *
90
+ * export default (
91
+ * <>
92
+ * <R8sCluster
93
+ * secrets={{ mount: 'secret', path: 'production' }}
94
+ * dns={{ server: 'ns1.example.com', zone: 'example.com', tsigPath: 'dns/tsig' }}
95
+ * >
96
+ * <Platform namespace="production">
97
+ * <Database name="api-db" storage="20Gi" />
98
+ * <App name="api" image="api:v1" host="api.example.com" />
99
+ * </Platform>
100
+ * </R8sCluster>
101
+ * </>
102
+ * )
103
+ */
104
+ export declare function R8sCluster(props: R8sClusterProps): unknown;
105
+ //# sourceMappingURL=r8s-cluster.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"r8s-cluster.d.ts","sourceRoot":"","sources":["../src/r8s-cluster.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAE9C,MAAM,WAAW,eAAe;IAC9B;;;;;OAKG;IACH,OAAO,EAAE;QACP,0CAA0C;QAC1C,KAAK,EAAE,MAAM,CAAA;QACb,gEAAgE;QAChE,IAAI,EAAE,MAAM,CAAA;QACZ,uCAAuC;QACvC,OAAO,CAAC,EAAE,MAAM,CAAA;KACjB,CAAA;IACD;;;;;OAKG;IACH,GAAG,EAAE;QACH,oDAAoD;QACpD,MAAM,EAAE,MAAM,CAAA;QACd,qCAAqC;QACrC,IAAI,EAAE,MAAM,CAAA;QACZ,kDAAkD;QAClD,QAAQ,EAAE,MAAM,CAAA;QAChB,sDAAsD;QACtD,OAAO,CAAC,EAAE,MAAM,CAAA;KACjB,CAAA;IACD;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B;;OAEG;IACH,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAA;IACtB;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,WA2KhD"}
@@ -0,0 +1,187 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.R8sCluster = R8sCluster;
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
+ const secret_provider_1 = require("./secret-provider");
10
+ const dns_provider_1 = require("./dns-provider");
11
+ const endpoint_provider_1 = require("./endpoint-provider");
12
+ /**
13
+ * R8sCluster — opinionated cluster foundation with all recommended operators.
14
+ *
15
+ * @title R8sCluster
16
+ * @category Complete Solution
17
+ *
18
+ * Sets up a complete cluster foundation in one component:
19
+ * - **cert-manager** for TLS certificate automation
20
+ * - **external-dns** with TSIG for secure DNS updates
21
+ * - **Envoy Gateway** for Gateway API routing
22
+ * - **OpenBao VSO** for secrets management
23
+ * - **Prometheus** for metrics and alerting
24
+ * - **Loki + FluentBit** for log aggregation of all user pods
25
+ *
26
+ * All operators are declared automatically. Children inherit routing,
27
+ * secrets, and DNS contexts — just add your apps.
28
+ *
29
+ * R8sCluster is cluster-scoped — it does not take a namespace. Operators
30
+ * install to their own namespaces (cert-manager, external-dns, etc.).
31
+ * Logging infrastructure lives in a dedicated namespace (default:
32
+ * 'logging'). App namespaces are managed by Platform or the apps
33
+ * themselves.
34
+ *
35
+ * @example
36
+ * import { R8sCluster, Platform, App, Database } from '@r8s/recipes'
37
+ *
38
+ * export default (
39
+ * <>
40
+ * <R8sCluster
41
+ * secrets={{ mount: 'secret', path: 'production' }}
42
+ * dns={{ server: 'ns1.example.com', zone: 'example.com', tsigPath: 'dns/tsig' }}
43
+ * >
44
+ * <Platform namespace="production">
45
+ * <Database name="api-db" storage="20Gi" />
46
+ * <App name="api" image="api:v1" host="api.example.com" />
47
+ * </Platform>
48
+ * </R8sCluster>
49
+ * </>
50
+ * )
51
+ */
52
+ function R8sCluster(props) {
53
+ const { secrets, dns, gatewayClassName = 'eg', labels, operators: preinstalled = [], logsNamespace = 'logging', logsStorageClass = 'standard', children, } = props;
54
+ // Build the operator list — R8sCluster declares all cluster operators
55
+ // so children don't have to. Children can still declare more (e.g.
56
+ // cnpg, keycloak) via their own logic.
57
+ const sharedOperators = (0, core_1.useContext)(defaults_1.OperatorContext);
58
+ const declared = [];
59
+ const clusterOperators = [
60
+ 'cert-manager',
61
+ 'external-dns',
62
+ 'envoy-gateway',
63
+ 'vault-secrets-operator',
64
+ 'prometheus',
65
+ 'loki',
66
+ 'logging-operator',
67
+ ];
68
+ for (const opName of clusterOperators) {
69
+ const alreadyDeclared = sharedOperators.some((op) => op.name === opName) ||
70
+ preinstalled.some((op) => op.name === opName) ||
71
+ declared.some((op) => op.name === opName);
72
+ if (!alreadyDeclared && crds_1.operators[opName]) {
73
+ declared.push(crds_1.operators[opName]());
74
+ }
75
+ }
76
+ // Build the secrets provider (OpenBao VSO)
77
+ const secretProvider = (0, secret_provider_1.OpenBao)({
78
+ mount: secrets.mount,
79
+ path: secrets.path,
80
+ authRef: secrets.authRef,
81
+ });
82
+ // Build the DNS provider (ExternalDNS with TSIG)
83
+ const dnsProvider = (0, dns_provider_1.ExternalDns)({
84
+ server: dns.server,
85
+ zone: dns.zone,
86
+ tsig: {
87
+ path: dns.tsigPath,
88
+ key: dns.tsigKey ?? 'secret',
89
+ },
90
+ });
91
+ // Build the endpoint provider (Envoy Gateway)
92
+ const endpointProvider = (0, endpoint_provider_1.EnvoyGateway)({ className: gatewayClassName });
93
+ // Cluster-level logging: FluentBit collects logs from ALL pods
94
+ // and ships to Loki. Resources live in the logs namespace.
95
+ const loggingName = 'cluster-logging';
96
+ const lokiName = 'cluster-loki';
97
+ const lokiOutputName = 'cluster-loki-output';
98
+ const lokiStorageSecret = 'cluster-loki-storage';
99
+ const clusterResources = [];
100
+ // LokiStack — log aggregation backend (in logs namespace)
101
+ clusterResources.push((0, loki_1.LokiStackComponent)({
102
+ metadata: { name: lokiName, namespace: logsNamespace },
103
+ spec: {
104
+ size: '1x.small',
105
+ storageClassName: logsStorageClass,
106
+ storage: {
107
+ schemas: [{ version: 'v13', effectiveDate: '2024-01-01' }],
108
+ secret: { name: lokiStorageSecret, type: 's3' },
109
+ },
110
+ tenants: {
111
+ mode: 'static',
112
+ authentication: [{ tenantName: 'application', tenantId: 'app' }],
113
+ authorization: {
114
+ roles: [
115
+ {
116
+ name: 'app-reader',
117
+ permissions: ['read'],
118
+ resources: ['logs'],
119
+ tenants: ['application'],
120
+ },
121
+ ],
122
+ roleBindings: [
123
+ {
124
+ name: 'app-reader-binding',
125
+ roles: ['app-reader'],
126
+ subjects: [{ kind: 'group', name: 'system:authenticated' }],
127
+ },
128
+ ],
129
+ },
130
+ },
131
+ },
132
+ }));
133
+ // Logging — Banzai Cloud Logging Operator with FluentBit
134
+ // FluentBit runs as a DaemonSet on every node, collecting all
135
+ // container logs from /var/log/containers/.
136
+ clusterResources.push((0, logging_1.LoggingComponent)({
137
+ metadata: { name: loggingName, namespace: logsNamespace },
138
+ spec: {
139
+ fluentd: {},
140
+ fluentbit: {},
141
+ controlNamespace: logsNamespace,
142
+ },
143
+ }));
144
+ // Output — ship logs to Loki gateway
145
+ clusterResources.push((0, logging_1.OutputComponent)({
146
+ metadata: { name: lokiOutputName, namespace: logsNamespace },
147
+ spec: {
148
+ loki: {
149
+ url: `http://loki-gateway.${logsNamespace}.svc.cluster.local`,
150
+ tenant: 'application',
151
+ },
152
+ },
153
+ }));
154
+ // Flow — match ALL pods (empty selector = match everything)
155
+ clusterResources.push((0, logging_1.FlowComponent)({
156
+ metadata: { name: 'cluster-flow', namespace: logsNamespace },
157
+ spec: {
158
+ match: [{ select: { labels: {} } }],
159
+ localOutputRefs: [lokiOutputName],
160
+ },
161
+ }));
162
+ // Assemble the full context stack. R8sCluster does NOT set a namespace
163
+ // context — it's cluster-scoped. Children (or Platform) handle
164
+ // app namespaces.
165
+ let result = children;
166
+ // Cluster-level resources first (LokiStack, Logging, Flow, Output)
167
+ result = (0, core_1.jsx)(core_1.Fragment, {
168
+ children: [...clusterResources, result],
169
+ });
170
+ // Apply DNS context (inside SecretProvider so it can access TSIG secret)
171
+ result = (0, core_1.jsx)(dns_provider_1.DnsProvider, { provider: dnsProvider, children: result });
172
+ // Apply secrets context (OpenBao VSO)
173
+ result = (0, core_1.jsx)(secret_provider_1.SecretProvider, { provider: secretProvider, children: result });
174
+ // Apply routing context (Envoy Gateway)
175
+ result = (0, core_1.jsx)(endpoint_provider_1.EndpointProvider, { provider: endpointProvider, children: result });
176
+ // Apply operators context — merge parent operators + preinstalled + declared
177
+ const allOperators = [...sharedOperators, ...preinstalled, ...declared];
178
+ if (allOperators.length > 0) {
179
+ result = (0, core_1.jsx)(defaults_1.OperatorContext.Provider, { value: allOperators, children: result });
180
+ }
181
+ // Apply labels context
182
+ if (labels) {
183
+ result = (0, core_1.jsx)(defaults_1.Labels.Provider, { value: labels, children: result });
184
+ }
185
+ return result;
186
+ }
187
+ //# sourceMappingURL=r8s-cluster.js.map