@r8s/eneo 0.3.3 → 0.3.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +27 -17
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +23 -17
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type DatabaseProps } from '@r8s/recipes';
|
|
1
|
+
import { type BucketProps, type DatabaseProps } from '@r8s/recipes';
|
|
2
2
|
import type { SecretRef } from '@r8s/recipes';
|
|
3
3
|
export interface EneoProps {
|
|
4
4
|
/** Resource name (defaults to 'eneo') */
|
|
@@ -13,11 +13,18 @@ export interface EneoProps {
|
|
|
13
13
|
replicas?: number;
|
|
14
14
|
/**
|
|
15
15
|
* S3-compatible object storage for document corpora (RustFS in the
|
|
16
|
-
* platform).
|
|
17
|
-
*
|
|
18
|
-
* —
|
|
16
|
+
* platform). Resolution order: this prop → a `<Bucket name="…" />`
|
|
17
|
+
* descriptor → derived from the surrounding `<S3Provider>` (omit it
|
|
18
|
+
* entirely there — corpora storage and database backups then share one
|
|
19
|
+
* declared source).
|
|
20
|
+
*
|
|
21
|
+
* Storage-API-style consumers take a BUCKET NAME, not a prefixed path:
|
|
22
|
+
* a descriptor's `bucket` override selects the bucket, its `name` is
|
|
23
|
+
* only the logical scope (prefix). The bucket's credentials must live
|
|
24
|
+
* in a Secret provisioned by the secrets backend (keys: accessKey,
|
|
25
|
+
* secretKey) — never plaintext.
|
|
19
26
|
*/
|
|
20
|
-
objectStorage
|
|
27
|
+
objectStorage?: {
|
|
21
28
|
/** S3 endpoint URL, e.g. https://s3.internal.example.com */
|
|
22
29
|
endpoint: string;
|
|
23
30
|
/** Bucket holding document corpora */
|
|
@@ -26,6 +33,9 @@ export interface EneoProps {
|
|
|
26
33
|
credentialsSecret: string;
|
|
27
34
|
/** Region string for the S3 client (defaults to 'us-east-1') */
|
|
28
35
|
region?: string;
|
|
36
|
+
} | {
|
|
37
|
+
type: unknown;
|
|
38
|
+
props: BucketProps;
|
|
29
39
|
};
|
|
30
40
|
/**
|
|
31
41
|
* OIDC SSO client — register Eneo as a client in Keycloak (the Auth
|
|
@@ -102,14 +112,21 @@ export interface EneoProps {
|
|
|
102
112
|
* - CNPG Postgres cluster (conversations, workspaces, document metadata;
|
|
103
113
|
* size via `dbStorage`)
|
|
104
114
|
* - Eneo Deployment + Service + Endpoint (DATABASE_URL auto-wired)
|
|
105
|
-
* - S3/RustFS bucket reference for document corpora (
|
|
106
|
-
* do not use local volumes; a local
|
|
115
|
+
* - S3/RustFS bucket reference for document corpora (derived from the
|
|
116
|
+
* platform's S3Provider) — corpora do not use local volumes; a local
|
|
117
|
+
* corpus PVC is a v1.1 item
|
|
107
118
|
* - App secrets (appSecret, plus smtpPassword when `smtp` is set)
|
|
108
119
|
* provisioned by the Platform secrets backend (openbao / vault), or
|
|
109
120
|
* referenced from an existing Secret
|
|
110
121
|
* - Optional SMTP delivery; password via the `${name}-secrets` bundle
|
|
111
122
|
* - OIDC SSO against the Keycloak `Auth` recipe
|
|
112
123
|
*
|
|
124
|
+
* Under an `<S3Provider>` both the database backups and the document
|
|
125
|
+
* corpora's object storage derive from it — `objectStorage` can be omitted
|
|
126
|
+
* entirely. Pass it only to target a different bucket than the provider's,
|
|
127
|
+
* either as a plain object or as `<Bucket name="…" bucket="…" />` (the
|
|
128
|
+
* descriptor's `bucket` selects the bucket; `name` is the logical scope).
|
|
129
|
+
*
|
|
113
130
|
* The namespace is inherited from the surrounding `<Platform>` (via the
|
|
114
131
|
* Namespace context) unless set explicitly.
|
|
115
132
|
*
|
|
@@ -121,19 +138,12 @@ export interface EneoProps {
|
|
|
121
138
|
* import { Platform, S3Provider, MinIO } from '@r8s/recipes'
|
|
122
139
|
* import { Eneo } from '@r8s/eneo'
|
|
123
140
|
*
|
|
124
|
-
* // Backups default to on — the S3Provider
|
|
141
|
+
* // Backups default to on, objectStorage derives — the S3Provider
|
|
142
|
+
* // supplies both targets and credentials
|
|
125
143
|
* export default (
|
|
126
144
|
* <S3Provider provider={<MinIO endpoint="https://rustfs:9000" bucket="infra" credentialsSecret="infra-s3-creds" />}>
|
|
127
145
|
* <Platform secrets={{ backend: 'openbao', mount: 'kv', path: 'apps' }}>
|
|
128
|
-
* <Eneo
|
|
129
|
-
* name="eneo"
|
|
130
|
-
* host="eneo.example.com"
|
|
131
|
-
* objectStorage={{
|
|
132
|
-
* endpoint: 'https://s3.internal.example.com',
|
|
133
|
-
* bucket: 'eneo-corpora',
|
|
134
|
-
* credentialsSecret: 'eneo-object-storage',
|
|
135
|
-
* }}
|
|
136
|
-
* />
|
|
146
|
+
* <Eneo name="eneo" host="eneo.example.com" />
|
|
137
147
|
* </Platform>
|
|
138
148
|
* </S3Provider>
|
|
139
149
|
* )
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAEA,OAAO,EAML,KAAK,WAAW,EAChB,KAAK,aAAa,EACnB,MAAM,cAAc,CAAA;AACrB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAE7C,MAAM,WAAW,SAAS;IACxB,yCAAyC;IACzC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,mDAAmD;IACnD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,+EAA+E;IAC/E,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,sDAAsD;IACtD,IAAI,EAAE,MAAM,CAAA;IACZ,kFAAkF;IAClF,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;;;;;;;;;;;OAYG;IACH,aAAa,CAAC,EACV;QACE,4DAA4D;QAC5D,QAAQ,EAAE,MAAM,CAAA;QAChB,sCAAsC;QACtC,MAAM,EAAE,MAAM,CAAA;QACd,uDAAuD;QACvD,iBAAiB,EAAE,MAAM,CAAA;QACzB,gEAAgE;QAChE,MAAM,CAAC,EAAE,MAAM,CAAA;KAChB,GACD;QAAE,IAAI,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,WAAW,CAAA;KAAE,CAAA;IACzC;;;OAGG;IACH,GAAG,CAAC,EAAE;QACJ,MAAM,EAAE,MAAM,CAAA;QACd,QAAQ,EAAE,MAAM,CAAA;QAChB,eAAe,EAAE,SAAS,CAAA;QAC1B,MAAM,CAAC,EAAE,MAAM,CAAA;KAChB,CAAA;IACD;;;;;;;OAOG;IACH,IAAI,CAAC,EAAE;QACL,kDAAkD;QAClD,IAAI,EAAE,MAAM,CAAA;QACZ,kCAAkC;QAClC,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,gEAAgE;QAChE,IAAI,CAAC,EAAE,MAAM,CAAA;KACd,CAAA;IACD;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,8BAA8B;IAC9B,SAAS,CAAC,EAAE;QACV,QAAQ,CAAC,EAAE;YAAE,GAAG,CAAC,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;QAC5C,MAAM,CAAC,EAAE;YAAE,GAAG,CAAC,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAC3C,CAAA;IACD,sEAAsE;IACtE,GAAG,CAAC,EAAE;QACJ,UAAU,EAAE,MAAM,CAAA;QAClB,aAAa,EAAE,MAAM,CAAA;KACtB,CAAA;IACD;;;;OAIG;IACH,MAAM,CAAC,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAA;CACjC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,wBAAgB,IAAI,CAAC,KAAK,EAAE,SAAS,kCA8KpC"}
|
package/dist/index.js
CHANGED
|
@@ -16,14 +16,21 @@ const recipes_1 = require("@r8s/recipes");
|
|
|
16
16
|
* - CNPG Postgres cluster (conversations, workspaces, document metadata;
|
|
17
17
|
* size via `dbStorage`)
|
|
18
18
|
* - Eneo Deployment + Service + Endpoint (DATABASE_URL auto-wired)
|
|
19
|
-
* - S3/RustFS bucket reference for document corpora (
|
|
20
|
-
* do not use local volumes; a local
|
|
19
|
+
* - S3/RustFS bucket reference for document corpora (derived from the
|
|
20
|
+
* platform's S3Provider) — corpora do not use local volumes; a local
|
|
21
|
+
* corpus PVC is a v1.1 item
|
|
21
22
|
* - App secrets (appSecret, plus smtpPassword when `smtp` is set)
|
|
22
23
|
* provisioned by the Platform secrets backend (openbao / vault), or
|
|
23
24
|
* referenced from an existing Secret
|
|
24
25
|
* - Optional SMTP delivery; password via the `${name}-secrets` bundle
|
|
25
26
|
* - OIDC SSO against the Keycloak `Auth` recipe
|
|
26
27
|
*
|
|
28
|
+
* Under an `<S3Provider>` both the database backups and the document
|
|
29
|
+
* corpora's object storage derive from it — `objectStorage` can be omitted
|
|
30
|
+
* entirely. Pass it only to target a different bucket than the provider's,
|
|
31
|
+
* either as a plain object or as `<Bucket name="…" bucket="…" />` (the
|
|
32
|
+
* descriptor's `bucket` selects the bucket; `name` is the logical scope).
|
|
33
|
+
*
|
|
27
34
|
* The namespace is inherited from the surrounding `<Platform>` (via the
|
|
28
35
|
* Namespace context) unless set explicitly.
|
|
29
36
|
*
|
|
@@ -35,19 +42,12 @@ const recipes_1 = require("@r8s/recipes");
|
|
|
35
42
|
* import { Platform, S3Provider, MinIO } from '@r8s/recipes'
|
|
36
43
|
* import { Eneo } from '@r8s/eneo'
|
|
37
44
|
*
|
|
38
|
-
* // Backups default to on — the S3Provider
|
|
45
|
+
* // Backups default to on, objectStorage derives — the S3Provider
|
|
46
|
+
* // supplies both targets and credentials
|
|
39
47
|
* export default (
|
|
40
48
|
* <S3Provider provider={<MinIO endpoint="https://rustfs:9000" bucket="infra" credentialsSecret="infra-s3-creds" />}>
|
|
41
49
|
* <Platform secrets={{ backend: 'openbao', mount: 'kv', path: 'apps' }}>
|
|
42
|
-
* <Eneo
|
|
43
|
-
* name="eneo"
|
|
44
|
-
* host="eneo.example.com"
|
|
45
|
-
* objectStorage={{
|
|
46
|
-
* endpoint: 'https://s3.internal.example.com',
|
|
47
|
-
* bucket: 'eneo-corpora',
|
|
48
|
-
* credentialsSecret: 'eneo-object-storage',
|
|
49
|
-
* }}
|
|
50
|
-
* />
|
|
50
|
+
* <Eneo name="eneo" host="eneo.example.com" />
|
|
51
51
|
* </Platform>
|
|
52
52
|
* </S3Provider>
|
|
53
53
|
* )
|
|
@@ -106,6 +106,12 @@ function Eneo(props) {
|
|
|
106
106
|
spec,
|
|
107
107
|
}));
|
|
108
108
|
}
|
|
109
|
+
// --- Object storage (document corpora) — derived from the S3Provider ------
|
|
110
|
+
// Same resolution contract as Database's backup decision (#115): an
|
|
111
|
+
// explicit object wins, a <Bucket/> descriptor points the corpora at
|
|
112
|
+
// another store, and omission under an <S3Provider> derives everything.
|
|
113
|
+
const s3 = (0, recipes_1.useS3)();
|
|
114
|
+
const store = (0, recipes_1.resolveObjectStorage)('Eneo', name, 'document corpora are stored in an S3 bucket', objectStorage, s3);
|
|
109
115
|
// --- Env wiring --------------------------------------------------------------
|
|
110
116
|
// Every credential is referenced with $(VAR) expansion or secretKeyRef —
|
|
111
117
|
// no plaintext in the manifest. The WebService declares secret-backed
|
|
@@ -114,9 +120,9 @@ function Eneo(props) {
|
|
|
114
120
|
const env = {
|
|
115
121
|
PORT: '3000',
|
|
116
122
|
BASE_URL: `https://${host}`,
|
|
117
|
-
S3_ENDPOINT:
|
|
118
|
-
S3_BUCKET:
|
|
119
|
-
AWS_REGION:
|
|
123
|
+
S3_ENDPOINT: store.endpoint,
|
|
124
|
+
S3_BUCKET: store.bucket,
|
|
125
|
+
AWS_REGION: store.region ?? 'us-east-1',
|
|
120
126
|
...(sso
|
|
121
127
|
? {
|
|
122
128
|
OIDC_ISSUER: sso.issuer,
|
|
@@ -144,8 +150,8 @@ function Eneo(props) {
|
|
|
144
150
|
...(smtp
|
|
145
151
|
? { SMTP_PASSWORD: { secret: platformSecretsName, key: 'smtpPassword' } }
|
|
146
152
|
: {}),
|
|
147
|
-
AWS_ACCESS_KEY_ID: { secret:
|
|
148
|
-
AWS_SECRET_ACCESS_KEY: { secret:
|
|
153
|
+
AWS_ACCESS_KEY_ID: { secret: store.credentialsSecret, key: 'accessKey' },
|
|
154
|
+
AWS_SECRET_ACCESS_KEY: { secret: store.credentialsSecret, key: 'secretKey' },
|
|
149
155
|
...(sso ? { OIDC_CLIENT_SECRET: sso.clientSecretRef } : {}),
|
|
150
156
|
};
|
|
151
157
|
// --- Database + app + endpoint ------------------------------------------------
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"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"}
|