@r8s/umami 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +103 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +146 -0
- package/dist/index.js.map +1 -0
- package/package.json +43 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { type DatabaseProps } from '@r8s/recipes';
|
|
2
|
+
export interface UmamiProps {
|
|
3
|
+
/** Resource name (defaults to 'umami') */
|
|
4
|
+
name?: string;
|
|
5
|
+
/** Kubernetes namespace (inherited from <Platform> unless set) */
|
|
6
|
+
namespace?: string;
|
|
7
|
+
/**
|
|
8
|
+
* Umami image tag. PINNED by default ('postgresql-v2.17.0') — facit
|
|
9
|
+
* floated on `postgresql-latest` and schema migrations are
|
|
10
|
+
* forward-only, so a surprise major upgrade breaks the install.
|
|
11
|
+
* Pass `version` explicitly to upgrade; `latest` is rejected.
|
|
12
|
+
*/
|
|
13
|
+
version?: string;
|
|
14
|
+
/** Public hostname (required), e.g. 'umami.berget.ai' */
|
|
15
|
+
host: string;
|
|
16
|
+
/**
|
|
17
|
+
* OpenID Connect SSO (Keycloak). The discovery URL may point at any
|
|
18
|
+
* realm — facit uses the Keycloak master realm. Client credentials
|
|
19
|
+
* (keys `client-id` / `client-secret` — hyphenated per the Keycloak
|
|
20
|
+
* convention) are provisioned through the Platform secrets backend
|
|
21
|
+
* unless `clientSecretRef` references a pre-created Secret.
|
|
22
|
+
*/
|
|
23
|
+
sso?: {
|
|
24
|
+
/** Full .well-known/openid-configuration URL, e.g. https://keycloak.example.com/realms/master/.well-known/openid-configuration */
|
|
25
|
+
discoveryUrl: string;
|
|
26
|
+
/** OIDC client id, e.g. 'umami' */
|
|
27
|
+
clientId: string;
|
|
28
|
+
/** Backend path (defaults to `<provider.path>/<name>/keycloak-oidc`) */
|
|
29
|
+
path?: string;
|
|
30
|
+
/** Reference a pre-created OIDC Secret (keys: client-id, client-secret) instead of provisioning */
|
|
31
|
+
clientSecretRef?: string;
|
|
32
|
+
/** OAuth scope (defaults to 'openid email profile') */
|
|
33
|
+
scope?: string;
|
|
34
|
+
};
|
|
35
|
+
/** Reference a pre-created app-secret bundle (key: app-secret) instead of backend provisioning */
|
|
36
|
+
appSecretRef?: string;
|
|
37
|
+
/** CNPG cluster name (defaults to `<name>-db`) */
|
|
38
|
+
dbName?: string;
|
|
39
|
+
/** Number of CNPG instances (defaults to 2) */
|
|
40
|
+
dbInstances?: number;
|
|
41
|
+
/** CNPG data volume size (defaults to '20Gi') */
|
|
42
|
+
dbStorage?: string;
|
|
43
|
+
/** CNPG storage class (defaults to cluster default) */
|
|
44
|
+
dbStorageClass?: string;
|
|
45
|
+
/**
|
|
46
|
+
* CNPG backup configuration passed through to the Database recipe.
|
|
47
|
+
* Facit targets Scaleway S3 (https://s3.nl-ams.scw.cloud) — the
|
|
48
|
+
* endpoint is therefore a required part of the prop, not a constant.
|
|
49
|
+
*/
|
|
50
|
+
backup?: DatabaseProps['backup'];
|
|
51
|
+
/** Number of app replicas (defaults to 1 — umami is not horizontally scaled in facit) */
|
|
52
|
+
replicas?: number;
|
|
53
|
+
/** App resources (defaults to facit: 256Mi/100m → 512Mi/500m) */
|
|
54
|
+
resources?: {
|
|
55
|
+
requests?: {
|
|
56
|
+
cpu?: string;
|
|
57
|
+
memory?: string;
|
|
58
|
+
};
|
|
59
|
+
limits?: {
|
|
60
|
+
cpu?: string;
|
|
61
|
+
memory?: string;
|
|
62
|
+
};
|
|
63
|
+
};
|
|
64
|
+
/**
|
|
65
|
+
* Extra Endpoint annotations merged over the default. NOTE:
|
|
66
|
+
* `nginx.ingress.kubernetes.io/configuration-snippet` is disabled by the
|
|
67
|
+
* ingress-nginx admin on this cluster — the package never emits it.
|
|
68
|
+
*/
|
|
69
|
+
endpointAnnotations?: Record<string, string>;
|
|
70
|
+
/** TLS configuration (defaults to letsencrypt-prod cluster issuer) */
|
|
71
|
+
tls?: {
|
|
72
|
+
secretName: string;
|
|
73
|
+
clusterIssuer: string;
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Umami — privacy-focused web analytics, facit-aligned.
|
|
78
|
+
*
|
|
79
|
+
* @title Umami
|
|
80
|
+
* @category Data & Analytics
|
|
81
|
+
*
|
|
82
|
+
* Composes:
|
|
83
|
+
* - Umami Deployment + Service (pinned image, `/api/heartbeat` probes with
|
|
84
|
+
* the app's slow-boot delays)
|
|
85
|
+
* - CNPG Postgres cluster with `credentialsMode: 'cnpg'` — DATABASE_URL
|
|
86
|
+
* references the operator-generated `<db>-app` secret's `fqdn-uri` key
|
|
87
|
+
* directly (no vault-stored DB credentials)
|
|
88
|
+
* - App secret + optional OIDC client credentials via the Platform
|
|
89
|
+
* secrets backend
|
|
90
|
+
* - Endpoint with TLS
|
|
91
|
+
*
|
|
92
|
+
* @example
|
|
93
|
+
* import { Platform } from '@r8s/recipes'
|
|
94
|
+
* import { Umami } from '@r8s/umami'
|
|
95
|
+
*
|
|
96
|
+
* export default (
|
|
97
|
+
* <Platform secrets={{ backend: 'openbao', mount: 'secret', path: 'umami' }}>
|
|
98
|
+
* <Umami host="umami.example.com" />
|
|
99
|
+
* </Platform>
|
|
100
|
+
* )
|
|
101
|
+
*/
|
|
102
|
+
export declare function Umami(props: UmamiProps): import("@r8s/core").r8sElement;
|
|
103
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAEA,OAAO,EAOL,KAAK,aAAa,EACnB,MAAM,cAAc,CAAA;AAErB,MAAM,WAAW,UAAU;IACzB,0CAA0C;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,kEAAkE;IAClE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,yDAAyD;IACzD,IAAI,EAAE,MAAM,CAAA;IACZ;;;;;;OAMG;IACH,GAAG,CAAC,EAAE;QACJ,kIAAkI;QAClI,YAAY,EAAE,MAAM,CAAA;QACpB,mCAAmC;QACnC,QAAQ,EAAE,MAAM,CAAA;QAChB,wEAAwE;QACxE,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,mGAAmG;QACnG,eAAe,CAAC,EAAE,MAAM,CAAA;QACxB,uDAAuD;QACvD,KAAK,CAAC,EAAE,MAAM,CAAA;KACf,CAAA;IACD,kGAAkG;IAClG,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,kDAAkD;IAClD,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,+CAA+C;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,iDAAiD;IACjD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,uDAAuD;IACvD,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB;;;;OAIG;IACH,MAAM,CAAC,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAA;IAChC,yFAAyF;IACzF,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,iEAAiE;IACjE,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;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC5C,sEAAsE;IACtE,GAAG,CAAC,EAAE;QACJ,UAAU,EAAE,MAAM,CAAA;QAClB,aAAa,EAAE,MAAM,CAAA;KACtB,CAAA;CACF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,kCA4JtC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Umami = Umami;
|
|
4
|
+
const core_1 = require("@r8s/core");
|
|
5
|
+
const defaults_1 = require("@r8s/core/defaults");
|
|
6
|
+
const recipes_1 = require("@r8s/recipes");
|
|
7
|
+
/**
|
|
8
|
+
* Umami — privacy-focused web analytics, facit-aligned.
|
|
9
|
+
*
|
|
10
|
+
* @title Umami
|
|
11
|
+
* @category Data & Analytics
|
|
12
|
+
*
|
|
13
|
+
* Composes:
|
|
14
|
+
* - Umami Deployment + Service (pinned image, `/api/heartbeat` probes with
|
|
15
|
+
* the app's slow-boot delays)
|
|
16
|
+
* - CNPG Postgres cluster with `credentialsMode: 'cnpg'` — DATABASE_URL
|
|
17
|
+
* references the operator-generated `<db>-app` secret's `fqdn-uri` key
|
|
18
|
+
* directly (no vault-stored DB credentials)
|
|
19
|
+
* - App secret + optional OIDC client credentials via the Platform
|
|
20
|
+
* secrets backend
|
|
21
|
+
* - Endpoint with TLS
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* import { Platform } from '@r8s/recipes'
|
|
25
|
+
* import { Umami } from '@r8s/umami'
|
|
26
|
+
*
|
|
27
|
+
* export default (
|
|
28
|
+
* <Platform secrets={{ backend: 'openbao', mount: 'secret', path: 'umami' }}>
|
|
29
|
+
* <Umami host="umami.example.com" />
|
|
30
|
+
* </Platform>
|
|
31
|
+
* )
|
|
32
|
+
*/
|
|
33
|
+
function Umami(props) {
|
|
34
|
+
const { name = 'umami', namespace: namespaceProp, version = 'postgresql-v2.17.0', host, sso, appSecretRef, dbName = `${name}-db`, dbInstances = 2, dbStorage = '20Gi', dbStorageClass, backup, replicas = 1, resources = {
|
|
35
|
+
requests: { memory: '256Mi', cpu: '100m' },
|
|
36
|
+
limits: { memory: '512Mi', cpu: '500m' },
|
|
37
|
+
}, endpointAnnotations = {}, tls = { secretName: `${name}-tls`, clusterIssuer: 'letsencrypt-prod' }, } = props;
|
|
38
|
+
const namespace = (0, defaults_1.useNamespace)(namespaceProp);
|
|
39
|
+
const secretProvider = (0, core_1.useContext)(defaults_1.SecretContext);
|
|
40
|
+
const resources_ = [];
|
|
41
|
+
if (version === 'latest' || version.endsWith('-latest')) {
|
|
42
|
+
throw new Error(`Umami "${name}" requires a pinned version.\n` +
|
|
43
|
+
`\n` +
|
|
44
|
+
`Facit floated on 'postgresql-latest' — umami schema migrations are\n` +
|
|
45
|
+
`forward-only, so a surprise major upgrade breaks the install.\n` +
|
|
46
|
+
`\n` +
|
|
47
|
+
`Fix: <Umami version="postgresql-v2.17.0" ... />`);
|
|
48
|
+
}
|
|
49
|
+
// --- App secret (session signing) -------------------------------------------
|
|
50
|
+
const appSecretsName = appSecretRef ?? `${name}-secrets`;
|
|
51
|
+
if (!appSecretRef) {
|
|
52
|
+
if (!(0, recipes_1.canProvisionSecrets)(secretProvider)) {
|
|
53
|
+
throw (0, recipes_1.secretsRequiredError)('Umami', name, 'an app secret (APP_SECRET) — it signs all sessions', { propName: 'appSecretRef', exampleValue: `${name}-secrets`, keys: ['app-secret'] });
|
|
54
|
+
}
|
|
55
|
+
resources_.push((0, core_1.jsx)(recipes_1.StaticSecret, {
|
|
56
|
+
name: `${name}-secrets`,
|
|
57
|
+
namespace,
|
|
58
|
+
path: `${secretProvider.path ?? name}/${name}/app`,
|
|
59
|
+
secretName: appSecretsName,
|
|
60
|
+
keys: ['app-secret'],
|
|
61
|
+
restart: [{ kind: 'Deployment', name }],
|
|
62
|
+
}));
|
|
63
|
+
}
|
|
64
|
+
// --- OIDC (Keycloak) ----------------------------------------------------------
|
|
65
|
+
const oidcSecretsName = sso?.clientSecretRef ?? `${name}-keycloak-oidc`;
|
|
66
|
+
if (sso && !sso.clientSecretRef) {
|
|
67
|
+
if (!(0, recipes_1.canProvisionSecrets)(secretProvider)) {
|
|
68
|
+
throw (0, recipes_1.secretsRequiredError)('Umami', name, 'OIDC client credentials (client-id, client-secret) because sso is configured', {
|
|
69
|
+
propName: 'sso.clientSecretRef',
|
|
70
|
+
exampleValue: `${name}-keycloak-oidc`,
|
|
71
|
+
keys: ['client-id', 'client-secret'],
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
resources_.push((0, core_1.jsx)(recipes_1.StaticSecret, {
|
|
75
|
+
name: `${name}-keycloak-oidc`,
|
|
76
|
+
namespace,
|
|
77
|
+
path: sso.path ?? `${secretProvider.path ?? name}/${name}/keycloak-oidc`,
|
|
78
|
+
secretName: oidcSecretsName,
|
|
79
|
+
keys: ['client-id', 'client-secret'],
|
|
80
|
+
restart: [{ kind: 'Deployment', name }],
|
|
81
|
+
}));
|
|
82
|
+
}
|
|
83
|
+
// --- Database (CNPG; CNPG-managed credentials incl. fqdn-uri) -----------------
|
|
84
|
+
resources_.push((0, core_1.jsx)(recipes_1.Database, {
|
|
85
|
+
name: dbName,
|
|
86
|
+
namespace,
|
|
87
|
+
instances: dbInstances,
|
|
88
|
+
storage: dbStorage,
|
|
89
|
+
...(dbStorageClass ? { storageClass: dbStorageClass } : {}),
|
|
90
|
+
parameters: {
|
|
91
|
+
shared_buffers: '256MB',
|
|
92
|
+
max_connections: '100',
|
|
93
|
+
work_mem: '8MB',
|
|
94
|
+
maintenance_work_mem: '128MB',
|
|
95
|
+
effective_cache_size: '768MB',
|
|
96
|
+
},
|
|
97
|
+
credentialsMode: 'cnpg',
|
|
98
|
+
...(backup ? { backup } : {}),
|
|
99
|
+
}));
|
|
100
|
+
// --- App -----------------------------------------------------------------------
|
|
101
|
+
resources_.push((0, core_1.jsx)(recipes_1.WebService, {
|
|
102
|
+
name,
|
|
103
|
+
namespace,
|
|
104
|
+
image: `ghcr.io/umami-software/umami:${version}`,
|
|
105
|
+
port: 3000,
|
|
106
|
+
replicas,
|
|
107
|
+
resources,
|
|
108
|
+
env: {
|
|
109
|
+
...(sso
|
|
110
|
+
? {
|
|
111
|
+
OAUTH_DISCOVERY_URL: sso.discoveryUrl,
|
|
112
|
+
OAUTH_REDIRECT_URL: `https://${host}/api/auth/callback/openid`,
|
|
113
|
+
OAUTH_SCOPE: sso.scope ?? 'openid email profile',
|
|
114
|
+
OAUTH_USERNAME_CLAIM: 'preferred_username',
|
|
115
|
+
OAUTH_EMAIL_CLAIM: 'email',
|
|
116
|
+
OAUTH_NAME_CLAIM: 'name',
|
|
117
|
+
}
|
|
118
|
+
: {}),
|
|
119
|
+
},
|
|
120
|
+
secrets: {
|
|
121
|
+
// CNPG-generated `<db>-app` carries fqdn-uri — use it directly
|
|
122
|
+
DATABASE_URL: { secret: `${dbName}-app`, key: 'fqdn-uri' },
|
|
123
|
+
APP_SECRET: { secret: appSecretsName, key: 'app-secret' },
|
|
124
|
+
...(sso
|
|
125
|
+
? {
|
|
126
|
+
OAUTH_CLIENT_ID: { secret: oidcSecretsName, key: 'client-id' },
|
|
127
|
+
OAUTH_CLIENT_SECRET: { secret: oidcSecretsName, key: 'client-secret' },
|
|
128
|
+
}
|
|
129
|
+
: {}),
|
|
130
|
+
},
|
|
131
|
+
probes: {
|
|
132
|
+
readiness: { path: '/api/heartbeat', initialDelaySeconds: 30, periodSeconds: 10 },
|
|
133
|
+
liveness: { path: '/api/heartbeat', initialDelaySeconds: 60, periodSeconds: 30 },
|
|
134
|
+
},
|
|
135
|
+
}), (0, core_1.jsx)(recipes_1.Endpoint, {
|
|
136
|
+
name: `${name}-endpoint`,
|
|
137
|
+
namespace,
|
|
138
|
+
host,
|
|
139
|
+
serviceName: name,
|
|
140
|
+
servicePort: 80,
|
|
141
|
+
annotations: endpointAnnotations,
|
|
142
|
+
tls,
|
|
143
|
+
}));
|
|
144
|
+
return (0, core_1.jsx)(core_1.Fragment, { children: resources_ });
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":";;AA2GA,sBA4JC;AAvQD,oCAAqD;AACrD,iDAAgE;AAChE,0CAQqB;AAuErB;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,SAAgB,KAAK,CAAC,KAAiB;IACrC,MAAM,EACJ,IAAI,GAAG,OAAO,EACd,SAAS,EAAE,aAAa,EACxB,OAAO,GAAG,oBAAoB,EAC9B,IAAI,EACJ,GAAG,EACH,YAAY,EACZ,MAAM,GAAG,GAAG,IAAI,KAAK,EACrB,WAAW,GAAG,CAAC,EACf,SAAS,GAAG,MAAM,EAClB,cAAc,EACd,MAAM,EACN,QAAQ,GAAG,CAAC,EACZ,SAAS,GAAG;QACV,QAAQ,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE;QAC1C,MAAM,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE;KACzC,EACD,mBAAmB,GAAG,EAAE,EACxB,GAAG,GAAG,EAAE,UAAU,EAAE,GAAG,IAAI,MAAM,EAAE,aAAa,EAAE,kBAAkB,EAAE,GACvE,GAAG,KAAK,CAAA;IAET,MAAM,SAAS,GAAG,IAAA,uBAAY,EAAC,aAAa,CAAC,CAAA;IAC7C,MAAM,cAAc,GAAG,IAAA,iBAAU,EAAC,wBAAa,CAAC,CAAA;IAChD,MAAM,UAAU,GAA6B,EAAE,CAAA;IAE/C,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACxD,MAAM,IAAI,KAAK,CACb,UAAU,IAAI,gCAAgC;YAC5C,IAAI;YACJ,sEAAsE;YACtE,iEAAiE;YACjE,IAAI;YACJ,iDAAiD,CACpD,CAAA;IACH,CAAC;IAED,+EAA+E;IAC/E,MAAM,cAAc,GAAG,YAAY,IAAI,GAAG,IAAI,UAAU,CAAA;IACxD,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,IAAI,CAAC,IAAA,6BAAmB,EAAC,cAAc,CAAC,EAAE,CAAC;YACzC,MAAM,IAAA,8BAAoB,EACxB,OAAO,EACP,IAAI,EACJ,oDAAoD,EACpD,EAAE,QAAQ,EAAE,cAAc,EAAE,YAAY,EAAE,GAAG,IAAI,UAAU,EAAE,IAAI,EAAE,CAAC,YAAY,CAAC,EAAE,CACpF,CAAA;QACH,CAAC;QACD,UAAU,CAAC,IAAI,CACb,IAAA,UAAG,EAAC,sBAAY,EAAE;YAChB,IAAI,EAAE,GAAG,IAAI,UAAU;YACvB,SAAS;YACT,IAAI,EAAE,GAAG,cAAc,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM;YAClD,UAAU,EAAE,cAAc;YAC1B,IAAI,EAAE,CAAC,YAAY,CAAC;YACpB,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;SACxC,CAAC,CACH,CAAA;IACH,CAAC;IAED,iFAAiF;IACjF,MAAM,eAAe,GAAG,GAAG,EAAE,eAAe,IAAI,GAAG,IAAI,gBAAgB,CAAA;IACvE,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC;QAChC,IAAI,CAAC,IAAA,6BAAmB,EAAC,cAAc,CAAC,EAAE,CAAC;YACzC,MAAM,IAAA,8BAAoB,EACxB,OAAO,EACP,IAAI,EACJ,8EAA8E,EAC9E;gBACE,QAAQ,EAAE,qBAAqB;gBAC/B,YAAY,EAAE,GAAG,IAAI,gBAAgB;gBACrC,IAAI,EAAE,CAAC,WAAW,EAAE,eAAe,CAAC;aACrC,CACF,CAAA;QACH,CAAC;QACD,UAAU,CAAC,IAAI,CACb,IAAA,UAAG,EAAC,sBAAY,EAAE;YAChB,IAAI,EAAE,GAAG,IAAI,gBAAgB;YAC7B,SAAS;YACT,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,GAAG,cAAc,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,gBAAgB;YACxE,UAAU,EAAE,eAAe;YAC3B,IAAI,EAAE,CAAC,WAAW,EAAE,eAAe,CAAC;YACpC,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;SACxC,CAAC,CACH,CAAA;IACH,CAAC;IAED,iFAAiF;IACjF,UAAU,CAAC,IAAI,CACb,IAAA,UAAG,EAAC,kBAAQ,EAAE;QACZ,IAAI,EAAE,MAAM;QACZ,SAAS;QACT,SAAS,EAAE,WAAW;QACtB,OAAO,EAAE,SAAS;QAClB,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,UAAU,EAAE;YACV,cAAc,EAAE,OAAO;YACvB,eAAe,EAAE,KAAK;YACtB,QAAQ,EAAE,KAAK;YACf,oBAAoB,EAAE,OAAO;YAC7B,oBAAoB,EAAE,OAAO;SAC9B;QACD,eAAe,EAAE,MAAM;QACvB,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9B,CAAC,CACH,CAAA;IAED,kFAAkF;IAClF,UAAU,CAAC,IAAI,CACb,IAAA,UAAG,EAAC,oBAAU,EAAE;QACd,IAAI;QACJ,SAAS;QACT,KAAK,EAAE,gCAAgC,OAAO,EAAE;QAChD,IAAI,EAAE,IAAI;QACV,QAAQ;QACR,SAAS;QACT,GAAG,EAAE;YACH,GAAG,CAAC,GAAG;gBACL,CAAC,CAAC;oBACE,mBAAmB,EAAE,GAAG,CAAC,YAAY;oBACrC,kBAAkB,EAAE,WAAW,IAAI,2BAA2B;oBAC9D,WAAW,EAAE,GAAG,CAAC,KAAK,IAAI,sBAAsB;oBAChD,oBAAoB,EAAE,oBAAoB;oBAC1C,iBAAiB,EAAE,OAAO;oBAC1B,gBAAgB,EAAE,MAAM;iBACzB;gBACH,CAAC,CAAC,EAAE,CAAC;SACR;QACD,OAAO,EAAE;YACP,+DAA+D;YAC/D,YAAY,EAAE,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE;YAC1D,UAAU,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,EAAE,YAAY,EAAE;YACzD,GAAG,CAAC,GAAG;gBACL,CAAC,CAAC;oBACE,eAAe,EAAE,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,EAAE,WAAW,EAAE;oBAC9D,mBAAmB,EAAE,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,EAAE,eAAe,EAAE;iBACvE;gBACH,CAAC,CAAC,EAAE,CAAC;SACR;QACD,MAAM,EAAE;YACN,SAAS,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE;YACjF,QAAQ,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE;SACjF;KACF,CAAC,EACF,IAAA,UAAG,EAAC,kBAAQ,EAAE;QACZ,IAAI,EAAE,GAAG,IAAI,WAAW;QACxB,SAAS;QACT,IAAI;QACJ,WAAW,EAAE,IAAI;QACjB,WAAW,EAAE,EAAE;QACf,WAAW,EAAE,mBAAmB;QAChC,GAAG;KACJ,CAAC,CACH,CAAA;IAED,OAAO,IAAA,UAAG,EAAC,eAAQ,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAA;AAChD,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@r8s/umami",
|
|
3
|
+
"version": "0.2.1",
|
|
4
|
+
"description": "Umami web analytics — Postgres persistence, CNPG backups, Keycloak OIDC for r8s",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"author": "Berget AI AB",
|
|
7
|
+
"homepage": "https://r8s.berget.ai",
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "git+https://github.com/berget-ai/r8s.git",
|
|
11
|
+
"directory": "packages/umami"
|
|
12
|
+
},
|
|
13
|
+
"bugs": "https://github.com/berget-ai/r8s/issues",
|
|
14
|
+
"publishConfig": {
|
|
15
|
+
"access": "public"
|
|
16
|
+
},
|
|
17
|
+
"files": [
|
|
18
|
+
"dist"
|
|
19
|
+
],
|
|
20
|
+
"keywords": [
|
|
21
|
+
"umami"
|
|
22
|
+
],
|
|
23
|
+
"r8s": {
|
|
24
|
+
"category": "Data & Analytics"
|
|
25
|
+
},
|
|
26
|
+
"main": "./dist/index.js",
|
|
27
|
+
"types": "./dist/index.d.ts",
|
|
28
|
+
"scripts": {
|
|
29
|
+
"build": "tsc --build",
|
|
30
|
+
"test": "vitest run",
|
|
31
|
+
"clean": "rm -rf dist tsconfig.tsbuildinfo"
|
|
32
|
+
},
|
|
33
|
+
"dependencies": {
|
|
34
|
+
"@r8s/core": "^0.2.0",
|
|
35
|
+
"@r8s/crds": "^0.2.0",
|
|
36
|
+
"@r8s/k8s-types": "^0.2.0",
|
|
37
|
+
"@r8s/recipes": "^0.2.0"
|
|
38
|
+
},
|
|
39
|
+
"devDependencies": {
|
|
40
|
+
"typescript": "^5.3.0",
|
|
41
|
+
"vitest": "^1.0.0"
|
|
42
|
+
}
|
|
43
|
+
}
|