@marinoscar/platform-contract 0.0.0-stage → 0.1.0-next.3
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/CHANGELOG.md +33 -0
- package/LICENSE +21 -0
- package/README.md +145 -2
- package/dist/cjs/doctor/constants.d.ts +59 -0
- package/dist/cjs/doctor/constants.d.ts.map +1 -0
- package/dist/cjs/doctor/constants.js +57 -0
- package/dist/cjs/doctor/constants.js.map +1 -0
- package/dist/cjs/doctor/index.d.ts +5 -0
- package/dist/cjs/doctor/index.d.ts.map +1 -0
- package/dist/cjs/doctor/index.js +24 -0
- package/dist/cjs/doctor/index.js.map +1 -0
- package/dist/cjs/doctor/schemas.d.ts +186 -0
- package/dist/cjs/doctor/schemas.d.ts.map +1 -0
- package/dist/cjs/doctor/schemas.js +183 -0
- package/dist/cjs/doctor/schemas.js.map +1 -0
- package/dist/cjs/index.d.ts +13 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +16 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/telemetry/assistant.d.ts +173 -0
- package/dist/cjs/telemetry/assistant.d.ts.map +1 -0
- package/dist/cjs/telemetry/assistant.js +43 -0
- package/dist/cjs/telemetry/assistant.js.map +1 -0
- package/dist/cjs/telemetry/config.d.ts +92 -0
- package/dist/cjs/telemetry/config.d.ts.map +1 -0
- package/dist/cjs/telemetry/config.js +101 -0
- package/dist/cjs/telemetry/config.js.map +1 -0
- package/dist/cjs/telemetry/connection.d.ts +355 -0
- package/dist/cjs/telemetry/connection.d.ts.map +1 -0
- package/dist/cjs/telemetry/connection.js +451 -0
- package/dist/cjs/telemetry/connection.js.map +1 -0
- package/dist/cjs/telemetry/constants.d.ts +442 -0
- package/dist/cjs/telemetry/constants.d.ts.map +1 -0
- package/dist/cjs/telemetry/constants.js +400 -0
- package/dist/cjs/telemetry/constants.js.map +1 -0
- package/dist/cjs/telemetry/dashboard.d.ts +826 -0
- package/dist/cjs/telemetry/dashboard.d.ts.map +1 -0
- package/dist/cjs/telemetry/dashboard.js +697 -0
- package/dist/cjs/telemetry/dashboard.js.map +1 -0
- package/dist/cjs/telemetry/enum.d.ts +5 -0
- package/dist/cjs/telemetry/enum.d.ts.map +1 -0
- package/dist/cjs/telemetry/enum.js +12 -0
- package/dist/cjs/telemetry/enum.js.map +1 -0
- package/dist/cjs/telemetry/index.d.ts +5 -0
- package/dist/cjs/telemetry/index.d.ts.map +1 -0
- package/dist/cjs/telemetry/index.js +128 -0
- package/dist/cjs/telemetry/index.js.map +1 -0
- package/dist/cjs/telemetry/query.d.ts +147 -0
- package/dist/cjs/telemetry/query.d.ts.map +1 -0
- package/dist/cjs/telemetry/query.js +141 -0
- package/dist/cjs/telemetry/query.js.map +1 -0
- package/dist/cjs/telemetry/schemas.d.ts +17 -0
- package/dist/cjs/telemetry/schemas.d.ts.map +1 -0
- package/dist/cjs/telemetry/schemas.js +89 -0
- package/dist/cjs/telemetry/schemas.js.map +1 -0
- package/dist/cjs/telemetry/settings.d.ts +65 -0
- package/dist/cjs/telemetry/settings.d.ts.map +1 -0
- package/dist/cjs/telemetry/settings.js +77 -0
- package/dist/cjs/telemetry/settings.js.map +1 -0
- package/dist/cjs/telemetry/stack.d.ts +87 -0
- package/dist/cjs/telemetry/stack.d.ts.map +1 -0
- package/dist/cjs/telemetry/stack.js +93 -0
- package/dist/cjs/telemetry/stack.js.map +1 -0
- package/dist/cjs/telemetry/status.d.ts +65 -0
- package/dist/cjs/telemetry/status.d.ts.map +1 -0
- package/dist/cjs/telemetry/status.js +65 -0
- package/dist/cjs/telemetry/status.js.map +1 -0
- package/dist/esm/doctor/constants.d.ts +59 -0
- package/dist/esm/doctor/constants.d.ts.map +1 -0
- package/dist/esm/doctor/constants.js +54 -0
- package/dist/esm/doctor/constants.js.map +1 -0
- package/dist/esm/doctor/index.d.ts +5 -0
- package/dist/esm/doctor/index.d.ts.map +1 -0
- package/dist/esm/doctor/index.js +10 -0
- package/dist/esm/doctor/index.js.map +1 -0
- package/dist/esm/doctor/schemas.d.ts +186 -0
- package/dist/esm/doctor/schemas.d.ts.map +1 -0
- package/dist/esm/doctor/schemas.js +180 -0
- package/dist/esm/doctor/schemas.js.map +1 -0
- package/dist/esm/index.d.ts +13 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +13 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/telemetry/assistant.d.ts +173 -0
- package/dist/esm/telemetry/assistant.d.ts.map +1 -0
- package/dist/esm/telemetry/assistant.js +40 -0
- package/dist/esm/telemetry/assistant.js.map +1 -0
- package/dist/esm/telemetry/config.d.ts +92 -0
- package/dist/esm/telemetry/config.d.ts.map +1 -0
- package/dist/esm/telemetry/config.js +98 -0
- package/dist/esm/telemetry/config.js.map +1 -0
- package/dist/esm/telemetry/connection.d.ts +355 -0
- package/dist/esm/telemetry/connection.d.ts.map +1 -0
- package/dist/esm/telemetry/connection.js +447 -0
- package/dist/esm/telemetry/connection.js.map +1 -0
- package/dist/esm/telemetry/constants.d.ts +442 -0
- package/dist/esm/telemetry/constants.d.ts.map +1 -0
- package/dist/esm/telemetry/constants.js +397 -0
- package/dist/esm/telemetry/constants.js.map +1 -0
- package/dist/esm/telemetry/dashboard.d.ts +826 -0
- package/dist/esm/telemetry/dashboard.d.ts.map +1 -0
- package/dist/esm/telemetry/dashboard.js +690 -0
- package/dist/esm/telemetry/dashboard.js.map +1 -0
- package/dist/esm/telemetry/enum.d.ts +5 -0
- package/dist/esm/telemetry/enum.d.ts.map +1 -0
- package/dist/esm/telemetry/enum.js +9 -0
- package/dist/esm/telemetry/enum.js.map +1 -0
- package/dist/esm/telemetry/index.d.ts +5 -0
- package/dist/esm/telemetry/index.d.ts.map +1 -0
- package/dist/esm/telemetry/index.js +10 -0
- package/dist/esm/telemetry/index.js.map +1 -0
- package/dist/esm/telemetry/query.d.ts +147 -0
- package/dist/esm/telemetry/query.d.ts.map +1 -0
- package/dist/esm/telemetry/query.js +138 -0
- package/dist/esm/telemetry/query.js.map +1 -0
- package/dist/esm/telemetry/schemas.d.ts +17 -0
- package/dist/esm/telemetry/schemas.d.ts.map +1 -0
- package/dist/esm/telemetry/schemas.js +12 -0
- package/dist/esm/telemetry/schemas.js.map +1 -0
- package/dist/esm/telemetry/settings.d.ts +65 -0
- package/dist/esm/telemetry/settings.d.ts.map +1 -0
- package/dist/esm/telemetry/settings.js +74 -0
- package/dist/esm/telemetry/settings.js.map +1 -0
- package/dist/esm/telemetry/stack.d.ts +87 -0
- package/dist/esm/telemetry/stack.d.ts.map +1 -0
- package/dist/esm/telemetry/stack.js +90 -0
- package/dist/esm/telemetry/stack.js.map +1 -0
- package/dist/esm/telemetry/status.d.ts +65 -0
- package/dist/esm/telemetry/status.d.ts.map +1 -0
- package/dist/esm/telemetry/status.js +62 -0
- package/dist/esm/telemetry/status.js.map +1 -0
- package/package.json +78 -4
|
@@ -0,0 +1,451 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// =============================================================================
|
|
3
|
+
// /api/admin/telemetry/connection (issue #558; moved here from the API's
|
|
4
|
+
// `telemetry/connection/dto/telemetry-connection.dto.ts` and the value
|
|
5
|
+
// schemas of `telemetry/connection/telemetry-connection.schema.ts` by #702)
|
|
6
|
+
// =============================================================================
|
|
7
|
+
//
|
|
8
|
+
// Passwords are WRITE-ONLY. They appear in the two request bodies and in no
|
|
9
|
+
// response: a response carries a masked `credentials.<login>` status built
|
|
10
|
+
// from the credential store's description, which cannot decrypt anything.
|
|
11
|
+
//
|
|
12
|
+
// The stored connection (`system_settings` row `telemetry_connection`) is
|
|
13
|
+
// non-secret by construction: `TelemetryConnectionCarriesNoSecret` below stops
|
|
14
|
+
// compiling if a password field is added to it. Where it is stored, its
|
|
15
|
+
// credential purpose and the deployment host resolution stay in the API.
|
|
16
|
+
// =============================================================================
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.telemetryConnectionTestResultSchema = exports.telemetryConnectionSkippedSchema = exports.telemetryConnectionProbeSchema = exports.telemetryConnectionResponseSchema = exports.telemetryDeploymentConnectionSchema = exports.telemetryCredentialStatusSchema = exports.testTelemetryConnectionSchema = exports.updateTelemetryConnectionSchema = exports.TELEMETRY_CONNECTION_CARRIES_NO_SECRET = exports.telemetryConnectionValueSchema = exports.telemetryAutomaticConnectionValueSchema = exports.telemetryCustomConnectionValueSchema = exports.telemetryUserSchema = exports.telemetryDatabaseSchema = exports.telemetryPgPortSchema = exports.telemetryOptionalHostSchema = exports.telemetryHostSchema = void 0;
|
|
19
|
+
exports.telemetryIpVersion = telemetryIpVersion;
|
|
20
|
+
const zod_1 = require("zod");
|
|
21
|
+
const constants_js_1 = require("./constants.js");
|
|
22
|
+
const enum_js_1 = require("./enum.js");
|
|
23
|
+
// ---- IP literals -------------------------------------------------------------
|
|
24
|
+
//
|
|
25
|
+
// The same grammar as Node's `net.isIP` (lib/internal/net.js), so the host
|
|
26
|
+
// rule is identical in the browser, which has no `node:net`. The API's
|
|
27
|
+
// `telemetry-connection.schema.spec.ts` compares the two over a corpus.
|
|
28
|
+
const V4_SEG = '(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])';
|
|
29
|
+
const V4_STR = `(?:${V4_SEG}\\.){3}${V4_SEG}`;
|
|
30
|
+
const IPV4 = new RegExp(`^${V4_STR}$`);
|
|
31
|
+
const V6_SEG = '(?:[0-9a-fA-F]{1,4})';
|
|
32
|
+
const IPV6 = new RegExp('^(?:' +
|
|
33
|
+
`(?:${V6_SEG}:){7}(?:${V6_SEG}|:)|` +
|
|
34
|
+
`(?:${V6_SEG}:){6}(?:${V4_STR}|:${V6_SEG}|:)|` +
|
|
35
|
+
`(?:${V6_SEG}:){5}(?::${V4_STR}|(?::${V6_SEG}){1,2}|:)|` +
|
|
36
|
+
`(?:${V6_SEG}:){4}(?:(?::${V6_SEG}){0,1}:${V4_STR}|(?::${V6_SEG}){1,3}|:)|` +
|
|
37
|
+
`(?:${V6_SEG}:){3}(?:(?::${V6_SEG}){0,2}:${V4_STR}|(?::${V6_SEG}){1,4}|:)|` +
|
|
38
|
+
`(?:${V6_SEG}:){2}(?:(?::${V6_SEG}){0,3}:${V4_STR}|(?::${V6_SEG}){1,5}|:)|` +
|
|
39
|
+
`(?:${V6_SEG}:){1}(?:(?::${V6_SEG}){0,4}:${V4_STR}|(?::${V6_SEG}){1,6}|:)|` +
|
|
40
|
+
`(?::(?:(?::${V6_SEG}){0,5}:${V4_STR}|(?::${V6_SEG}){1,7}|:))` +
|
|
41
|
+
')(?:%[0-9a-zA-Z-.:]{1,})?$');
|
|
42
|
+
/**
|
|
43
|
+
* `4` for an IPv4 literal, `6` for an IPv6 literal (zone id allowed), `0`
|
|
44
|
+
* otherwise: the same answers as Node's `net.isIP`, without Node.
|
|
45
|
+
*
|
|
46
|
+
* @stability stable
|
|
47
|
+
*/
|
|
48
|
+
function telemetryIpVersion(value) {
|
|
49
|
+
if (IPV4.test(value))
|
|
50
|
+
return 4;
|
|
51
|
+
if (IPV6.test(value))
|
|
52
|
+
return 6;
|
|
53
|
+
return 0;
|
|
54
|
+
}
|
|
55
|
+
// ---- field validators ----------------------------------------------------------
|
|
56
|
+
/**
|
|
57
|
+
* A GreptimeDB host: a hostname ({@link TELEMETRY_HOSTNAME_PATTERN}) or a bare
|
|
58
|
+
* IPv4/IPv6 address, trimmed, 1..253 characters. No scheme, port or path.
|
|
59
|
+
*
|
|
60
|
+
* @extensionPoint schema
|
|
61
|
+
* @stability stable
|
|
62
|
+
*/
|
|
63
|
+
exports.telemetryHostSchema = zod_1.z
|
|
64
|
+
.string()
|
|
65
|
+
.trim()
|
|
66
|
+
.min(1)
|
|
67
|
+
.max(253)
|
|
68
|
+
.refine((value) => telemetryIpVersion(value) !== 0 || constants_js_1.TELEMETRY_HOSTNAME_PATTERN.test(value), {
|
|
69
|
+
message: 'host must be a hostname or an IP address — no scheme, port or path',
|
|
70
|
+
});
|
|
71
|
+
/**
|
|
72
|
+
* A host as SUBMITTED on the admin form: absent, `null` or blank means
|
|
73
|
+
* AUTOMATIC (output `null`: the deployment host, resolved at use); anything
|
|
74
|
+
* else is a custom host validated by {@link telemetryHostSchema}.
|
|
75
|
+
*
|
|
76
|
+
* @extensionPoint schema
|
|
77
|
+
* @stability stable
|
|
78
|
+
*/
|
|
79
|
+
exports.telemetryOptionalHostSchema = zod_1.z
|
|
80
|
+
.string()
|
|
81
|
+
.nullish()
|
|
82
|
+
.transform((value) => (value?.trim() ? value.trim() : null))
|
|
83
|
+
.pipe(exports.telemetryHostSchema.nullable());
|
|
84
|
+
/**
|
|
85
|
+
* GreptimeDB's Postgres-wire port: an integer 1..65535.
|
|
86
|
+
*
|
|
87
|
+
* @extensionPoint schema
|
|
88
|
+
* @stability stable
|
|
89
|
+
*/
|
|
90
|
+
exports.telemetryPgPortSchema = zod_1.z.number().int().min(1).max(65535);
|
|
91
|
+
/**
|
|
92
|
+
* A connection's database: trimmed, 1..128 characters, a plain identifier
|
|
93
|
+
* ({@link TELEMETRY_DATABASE_PATTERN}).
|
|
94
|
+
*
|
|
95
|
+
* @extensionPoint schema
|
|
96
|
+
* @stability stable
|
|
97
|
+
*/
|
|
98
|
+
exports.telemetryDatabaseSchema = zod_1.z
|
|
99
|
+
.string()
|
|
100
|
+
.trim()
|
|
101
|
+
.min(1)
|
|
102
|
+
.max(128)
|
|
103
|
+
.regex(constants_js_1.TELEMETRY_DATABASE_PATTERN, {
|
|
104
|
+
message: 'database must be a plain identifier (letters, digits and underscores, not starting with a digit)',
|
|
105
|
+
});
|
|
106
|
+
/**
|
|
107
|
+
* A GreptimeDB login name: trimmed, 1..128 characters.
|
|
108
|
+
*
|
|
109
|
+
* @extensionPoint schema
|
|
110
|
+
* @stability stable
|
|
111
|
+
*/
|
|
112
|
+
exports.telemetryUserSchema = zod_1.z.string().trim().min(1).max(128);
|
|
113
|
+
// ---- the stored value ------------------------------------------------------------
|
|
114
|
+
/**
|
|
115
|
+
* A stored CUSTOM connection: `host`, `pgPort`, `database`, `readerUser` and
|
|
116
|
+
* `adminUser` (`null`: no admin login, so retention cannot be applied). The
|
|
117
|
+
* two passwords live in the encrypted credential store, never here.
|
|
118
|
+
*
|
|
119
|
+
* @extensionPoint schema
|
|
120
|
+
* @stability stable
|
|
121
|
+
*/
|
|
122
|
+
exports.telemetryCustomConnectionValueSchema = zod_1.z.object({
|
|
123
|
+
/** The custom host. */
|
|
124
|
+
host: exports.telemetryHostSchema,
|
|
125
|
+
/** GreptimeDB's Postgres-wire port. */
|
|
126
|
+
pgPort: exports.telemetryPgPortSchema,
|
|
127
|
+
/** The database telemetry is written to. */
|
|
128
|
+
database: exports.telemetryDatabaseSchema,
|
|
129
|
+
/** The read-only login. */
|
|
130
|
+
readerUser: exports.telemetryUserSchema,
|
|
131
|
+
/** Null: no admin login, so retention cannot be applied (reads still work). */
|
|
132
|
+
adminUser: exports.telemetryUserSchema.nullable(),
|
|
133
|
+
});
|
|
134
|
+
/**
|
|
135
|
+
* A stored AUTOMATIC connection: `{ host: null }`, a marker only. The
|
|
136
|
+
* deployment supplies the host, port, database, logins and passwords at every
|
|
137
|
+
* refresh; extra keys of older rows are stripped on parse.
|
|
138
|
+
*
|
|
139
|
+
* @extensionPoint schema
|
|
140
|
+
* @stability stable
|
|
141
|
+
*/
|
|
142
|
+
exports.telemetryAutomaticConnectionValueSchema = zod_1.z.object({
|
|
143
|
+
/** Always `null`: the host is the deployment's. */
|
|
144
|
+
host: zod_1.z.null(),
|
|
145
|
+
});
|
|
146
|
+
/**
|
|
147
|
+
* The stored connection row's `value`: custom or automatic. Non-secret by
|
|
148
|
+
* construction ({@link TelemetryConnectionCarriesNoSecret}).
|
|
149
|
+
*
|
|
150
|
+
* @extensionPoint schema
|
|
151
|
+
* @stability stable
|
|
152
|
+
*/
|
|
153
|
+
exports.telemetryConnectionValueSchema = zod_1.z.union([
|
|
154
|
+
exports.telemetryCustomConnectionValueSchema,
|
|
155
|
+
exports.telemetryAutomaticConnectionValueSchema,
|
|
156
|
+
]);
|
|
157
|
+
/**
|
|
158
|
+
* The value of {@link TelemetryConnectionCarriesNoSecret}; it only compiles
|
|
159
|
+
* while the proof holds.
|
|
160
|
+
*
|
|
161
|
+
* @stability stable
|
|
162
|
+
*/
|
|
163
|
+
exports.TELEMETRY_CONNECTION_CARRIES_NO_SECRET = true;
|
|
164
|
+
// ---- request bodies ----------------------------------------------------------------
|
|
165
|
+
/** A password as submitted. Not trimmed: a secret is stored byte for byte. */
|
|
166
|
+
const passwordSchema = zod_1.z.string().max(1024);
|
|
167
|
+
/**
|
|
168
|
+
* `readerUser` — blank is "not sent" (an automatic host needs none; a custom
|
|
169
|
+
* one is refused without it, below).
|
|
170
|
+
*/
|
|
171
|
+
const readerUserSchema = zod_1.z
|
|
172
|
+
.string()
|
|
173
|
+
.trim()
|
|
174
|
+
.max(128)
|
|
175
|
+
.optional()
|
|
176
|
+
.transform((value) => (value ? value : undefined));
|
|
177
|
+
/**
|
|
178
|
+
* `adminUser` — null (or an empty string) means "no admin login", which
|
|
179
|
+
* removes a stored admin password. Absent (undefined) is only accepted for an
|
|
180
|
+
* automatic host; a custom one must say which (or null).
|
|
181
|
+
*/
|
|
182
|
+
const adminUserSchema = zod_1.z
|
|
183
|
+
.string()
|
|
184
|
+
.trim()
|
|
185
|
+
.max(128)
|
|
186
|
+
.nullish()
|
|
187
|
+
.transform((value) => (value === undefined ? undefined : value ? value : null));
|
|
188
|
+
/**
|
|
189
|
+
* AUTOMATIC vs CUSTOM (issue #570). A blank host means the GreptimeDB deployed
|
|
190
|
+
* with this application, whose port, database, logins and passwords the
|
|
191
|
+
* deployment supplies: every other field is then accepted (older clients send
|
|
192
|
+
* them) and IGNORED. A custom host needs `readerUser` and `adminUser` (or
|
|
193
|
+
* null), exactly as before.
|
|
194
|
+
*/
|
|
195
|
+
function requireLoginsForCustomHost(value, ctx) {
|
|
196
|
+
if (value.host === null)
|
|
197
|
+
return;
|
|
198
|
+
if (!value.readerUser) {
|
|
199
|
+
ctx.addIssue({ code: 'custom', path: ['readerUser'], message: 'readerUser is required for a custom host' });
|
|
200
|
+
}
|
|
201
|
+
if (value.adminUser === undefined) {
|
|
202
|
+
ctx.addIssue({
|
|
203
|
+
code: 'custom',
|
|
204
|
+
path: ['adminUser'],
|
|
205
|
+
message: 'adminUser is required for a custom host (send null for no admin login)',
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* `PUT /api/admin/telemetry/connection` body. A blank or absent `host` is
|
|
211
|
+
* AUTOMATIC and every other field is ignored; a custom host needs
|
|
212
|
+
* `readerUser` and `adminUser` (or `null`). An omitted or empty password
|
|
213
|
+
* keeps the stored one. Output: `host` is `null` for automatic, `pgPort`
|
|
214
|
+
* defaults to 4003 and `database` to `public`.
|
|
215
|
+
*
|
|
216
|
+
* @extensionPoint schema
|
|
217
|
+
* @stability stable
|
|
218
|
+
*/
|
|
219
|
+
exports.updateTelemetryConnectionSchema = zod_1.z
|
|
220
|
+
.object({
|
|
221
|
+
/**
|
|
222
|
+
* Hostname or IP address of GreptimeDB's Postgres-wire endpoint (no scheme,
|
|
223
|
+
* port or path) — a CUSTOM GreptimeDB. Omit it, or send null or blank, for
|
|
224
|
+
* AUTOMATIC: the GreptimeDB deployed with this application. Automatic is
|
|
225
|
+
* stored as a marker only; its host, port, database, logins and passwords
|
|
226
|
+
* all come from the deployment, and every other field of this body is
|
|
227
|
+
* ignored.
|
|
228
|
+
*/
|
|
229
|
+
host: exports.telemetryOptionalHostSchema,
|
|
230
|
+
/** Custom host only (ignored when automatic). GreptimeDB's Postgres-wire port. Omitted: 4003. */
|
|
231
|
+
pgPort: exports.telemetryPgPortSchema.default(constants_js_1.TELEMETRY_CONNECTION_DEFAULTS.pgPort),
|
|
232
|
+
/** Custom host only (ignored when automatic). A plain identifier. Omitted: `public`. */
|
|
233
|
+
database: exports.telemetryDatabaseSchema.default(constants_js_1.TELEMETRY_CONNECTION_DEFAULTS.database),
|
|
234
|
+
/** Custom host only, and required there: the read-only GreptimeDB user. Ignored when automatic. */
|
|
235
|
+
readerUser: readerUserSchema,
|
|
236
|
+
/**
|
|
237
|
+
* Custom host only. Write-only. Omit or send empty to KEEP the stored
|
|
238
|
+
* reader password; a save with none stored and none sent is a 400.
|
|
239
|
+
* Ignored when automatic.
|
|
240
|
+
*/
|
|
241
|
+
readerPassword: passwordSchema.optional(),
|
|
242
|
+
/**
|
|
243
|
+
* Custom host only, and required there: the DDL-capable user retention
|
|
244
|
+
* needs, or null for none (retention is then not applied). Ignored when
|
|
245
|
+
* automatic.
|
|
246
|
+
*/
|
|
247
|
+
adminUser: adminUserSchema,
|
|
248
|
+
/**
|
|
249
|
+
* Custom host only. Write-only. Omit or send empty to KEEP the stored
|
|
250
|
+
* admin password. Ignored when `adminUser` is null (the stored one is then
|
|
251
|
+
* deleted) and when automatic.
|
|
252
|
+
*/
|
|
253
|
+
adminPassword: passwordSchema.optional(),
|
|
254
|
+
})
|
|
255
|
+
.superRefine(requireLoginsForCustomHost);
|
|
256
|
+
/**
|
|
257
|
+
* `POST /api/admin/telemetry/connection/test` body: a CANDIDATE connection,
|
|
258
|
+
* not necessarily saved, in the shape of {@link updateTelemetryConnectionSchema}.
|
|
259
|
+
* A blank host probes the deployment's own GreptimeDB with its own logins;
|
|
260
|
+
* for a custom host, a blank password means "the password the connection in
|
|
261
|
+
* force uses for that login".
|
|
262
|
+
*
|
|
263
|
+
* @extensionPoint schema
|
|
264
|
+
* @stability stable
|
|
265
|
+
*/
|
|
266
|
+
exports.testTelemetryConnectionSchema = exports.updateTelemetryConnectionSchema;
|
|
267
|
+
// ---- responses ----------------------------------------------------------------------
|
|
268
|
+
/**
|
|
269
|
+
* Masked, non-secret facts about one stored password: `configured`, `hint`
|
|
270
|
+
* (the credential store's mask, never the password), `updatedAt` and
|
|
271
|
+
* `updatedByUserId`.
|
|
272
|
+
*
|
|
273
|
+
* @extensionPoint schema
|
|
274
|
+
* @stability stable
|
|
275
|
+
*/
|
|
276
|
+
exports.telemetryCredentialStatusSchema = zod_1.z.object({
|
|
277
|
+
/**
|
|
278
|
+
* Whether a password is present for this login in the connection's source
|
|
279
|
+
* (the deployment's while `deploymentManaged`, the credential store's for a
|
|
280
|
+
* custom host).
|
|
281
|
+
*/
|
|
282
|
+
configured: zod_1.z.boolean(),
|
|
283
|
+
/**
|
|
284
|
+
* The credential store's mask (`••••Xk9q`) so an admin can tell two
|
|
285
|
+
* passwords apart. Never the password. Always null for the deployment
|
|
286
|
+
* default: the environment's value is not the store's to describe.
|
|
287
|
+
*/
|
|
288
|
+
hint: zod_1.z.string().nullable(),
|
|
289
|
+
/** When the password was last stored, or `null`. */
|
|
290
|
+
updatedAt: zod_1.z.iso.datetime().nullable(),
|
|
291
|
+
/** Who stored it, or `null`. */
|
|
292
|
+
updatedByUserId: zod_1.z.string().nullable(),
|
|
293
|
+
});
|
|
294
|
+
/**
|
|
295
|
+
* The GreptimeDB deployed with this application, as the deployment describes
|
|
296
|
+
* it: `host`, `pgPort`, `database`, `readerUser`, `adminUser`,
|
|
297
|
+
* `readerConfigured` and `adminConfigured`. Non-secret: never a password.
|
|
298
|
+
*
|
|
299
|
+
* @extensionPoint schema
|
|
300
|
+
* @stability stable
|
|
301
|
+
*/
|
|
302
|
+
exports.telemetryDeploymentConnectionSchema = zod_1.z.object({
|
|
303
|
+
/** The deployment host an automatic connection uses. */
|
|
304
|
+
host: zod_1.z.string(),
|
|
305
|
+
/** The deployment's Postgres-wire port. */
|
|
306
|
+
pgPort: zod_1.z.number().int(),
|
|
307
|
+
/** The deployment's database. */
|
|
308
|
+
database: zod_1.z.string(),
|
|
309
|
+
/** Empty when the deployment provisions no reader login. */
|
|
310
|
+
readerUser: zod_1.z.string(),
|
|
311
|
+
/** The deployment's admin login, or `null` when it provisions none. */
|
|
312
|
+
adminUser: zod_1.z.string().nullable(),
|
|
313
|
+
/** The deployment provides a reader user and its password. Never the password itself. */
|
|
314
|
+
readerConfigured: zod_1.z.boolean(),
|
|
315
|
+
/** The deployment provides an admin user and its password. Never the password itself. */
|
|
316
|
+
adminConfigured: zod_1.z.boolean(),
|
|
317
|
+
});
|
|
318
|
+
/**
|
|
319
|
+
* `GET /api/admin/telemetry/connection` (and the `PUT` / `DELETE`
|
|
320
|
+
* responses): where the connection comes from, its host as configured and as
|
|
321
|
+
* used, the deployment's own connection, the logins, masked password
|
|
322
|
+
* statuses and the row `version` (send it back as `If-Match`).
|
|
323
|
+
*
|
|
324
|
+
* @extensionPoint schema
|
|
325
|
+
* @stability stable
|
|
326
|
+
*/
|
|
327
|
+
exports.telemetryConnectionResponseSchema = zod_1.z.object({
|
|
328
|
+
/**
|
|
329
|
+
* Where the connection in force comes from: `stored` (saved on this page —
|
|
330
|
+
* a custom host, or the automatic marker), `environment` (nothing saved:
|
|
331
|
+
* the deployment's own GreptimeDB) or `none`.
|
|
332
|
+
*/
|
|
333
|
+
source: (0, enum_js_1.wireEnum)(constants_js_1.TELEMETRY_CONNECTION_SOURCES),
|
|
334
|
+
/**
|
|
335
|
+
* The host as CONFIGURED: null when it is automatic (a stored automatic
|
|
336
|
+
* connection, `source` `environment` or `source` `none`); a literal only for
|
|
337
|
+
* a stored custom host.
|
|
338
|
+
*/
|
|
339
|
+
host: zod_1.z.string().nullable(),
|
|
340
|
+
/**
|
|
341
|
+
* The host actually used (or, for `source` `none`, the one an automatic
|
|
342
|
+
* host would use: the deployment host). Empty only for a stored connection
|
|
343
|
+
* that does not validate.
|
|
344
|
+
*/
|
|
345
|
+
effectiveHost: zod_1.z.string(),
|
|
346
|
+
/** `auto` — `host` is null and `effectiveHost` is the deployment host; `custom` — a literal. */
|
|
347
|
+
hostMode: (0, enum_js_1.wireEnum)(constants_js_1.TELEMETRY_CONNECTION_HOST_MODES),
|
|
348
|
+
/**
|
|
349
|
+
* True when the whole connection (port, database, logins, passwords) comes
|
|
350
|
+
* from the deployment and nothing but the host mode is the administrator's
|
|
351
|
+
* to set: `source` `environment`, or a stored automatic host. The form
|
|
352
|
+
* then collects no credentials.
|
|
353
|
+
*/
|
|
354
|
+
deploymentManaged: zod_1.z.boolean(),
|
|
355
|
+
/**
|
|
356
|
+
* The GreptimeDB deployed with this application — what an automatic host
|
|
357
|
+
* uses (and what `pgPort`/`database`/users show while `deploymentManaged`).
|
|
358
|
+
* Present whatever is in force, so a form switching back to automatic can
|
|
359
|
+
* say what it will get.
|
|
360
|
+
*/
|
|
361
|
+
deployment: exports.telemetryDeploymentConnectionSchema,
|
|
362
|
+
/**
|
|
363
|
+
* Why a deployment-managed connection cannot be used, in administrator
|
|
364
|
+
* language (for example, the deployment provisions no reader login), or
|
|
365
|
+
* null. Always null for a custom host: its problems are a test's to find.
|
|
366
|
+
*/
|
|
367
|
+
problem: zod_1.z.string().nullable(),
|
|
368
|
+
/** The Postgres-wire port in force. */
|
|
369
|
+
pgPort: zod_1.z.number().int(),
|
|
370
|
+
/** The database in force. */
|
|
371
|
+
database: zod_1.z.string(),
|
|
372
|
+
/** Empty when `source` is `none`. */
|
|
373
|
+
readerUser: zod_1.z.string(),
|
|
374
|
+
/** The admin login in force, or `null` for none. */
|
|
375
|
+
adminUser: zod_1.z.string().nullable(),
|
|
376
|
+
/** A host, a reader login and its password: telemetry can be read. */
|
|
377
|
+
configured: zod_1.z.boolean(),
|
|
378
|
+
/** The admin login is usable as well, so retention can be applied. */
|
|
379
|
+
adminConfigured: zod_1.z.boolean(),
|
|
380
|
+
/** Masked status of the two stored passwords. Never a password. */
|
|
381
|
+
credentials: zod_1.z.object({
|
|
382
|
+
/** The reader login's password. */
|
|
383
|
+
reader: exports.telemetryCredentialStatusSchema,
|
|
384
|
+
/** The admin login's password. */
|
|
385
|
+
admin: exports.telemetryCredentialStatusSchema,
|
|
386
|
+
}),
|
|
387
|
+
/** The stored connection's version — send it back as `If-Match`. `0` when nothing is stored. */
|
|
388
|
+
version: zod_1.z.number().int(),
|
|
389
|
+
/** When the connection was last saved, or `null`. */
|
|
390
|
+
updatedAt: zod_1.z.iso.datetime().nullable(),
|
|
391
|
+
/** Who saved it last, or `null`. */
|
|
392
|
+
updatedBy: zod_1.z
|
|
393
|
+
.object({
|
|
394
|
+
/** The user's id. */
|
|
395
|
+
id: zod_1.z.string(),
|
|
396
|
+
/** The user's email. */
|
|
397
|
+
email: zod_1.z.string(),
|
|
398
|
+
})
|
|
399
|
+
.nullable(),
|
|
400
|
+
});
|
|
401
|
+
/**
|
|
402
|
+
* One login's probe in a connection test: `success`, `latencyMs`, `version`
|
|
403
|
+
* (reader only) and `error` (never a password or connection string).
|
|
404
|
+
*
|
|
405
|
+
* @extensionPoint schema
|
|
406
|
+
* @stability stable
|
|
407
|
+
*/
|
|
408
|
+
exports.telemetryConnectionProbeSchema = zod_1.z.object({
|
|
409
|
+
/** Whether the login connected and the statement ran. */
|
|
410
|
+
success: zod_1.z.boolean(),
|
|
411
|
+
/** Wall-clock time of the connect + statement, in milliseconds. */
|
|
412
|
+
latencyMs: zod_1.z.number().int(),
|
|
413
|
+
/** `SELECT version()` — reader check only. */
|
|
414
|
+
version: zod_1.z.string().optional(),
|
|
415
|
+
/** The driver's or server's message. Never a password or connection string. */
|
|
416
|
+
error: zod_1.z.string().optional(),
|
|
417
|
+
});
|
|
418
|
+
/**
|
|
419
|
+
* `{ skipped: true }`: the candidate had no admin user, so the admin login
|
|
420
|
+
* was not checked.
|
|
421
|
+
*
|
|
422
|
+
* @extensionPoint schema
|
|
423
|
+
* @stability stable
|
|
424
|
+
*/
|
|
425
|
+
exports.telemetryConnectionSkippedSchema = zod_1.z.object({
|
|
426
|
+
/** No admin user in the candidate, so the admin login was not checked. */
|
|
427
|
+
skipped: zod_1.z.literal(true),
|
|
428
|
+
});
|
|
429
|
+
/**
|
|
430
|
+
* `POST /api/admin/telemetry/connection/test` response, always a 200: the
|
|
431
|
+
* `host` probed, `hostMode`, the `reader` probe and the `admin` probe (or
|
|
432
|
+
* skipped).
|
|
433
|
+
*
|
|
434
|
+
* @extensionPoint schema
|
|
435
|
+
* @stability stable
|
|
436
|
+
*/
|
|
437
|
+
exports.telemetryConnectionTestResultSchema = zod_1.z.object({
|
|
438
|
+
/** The host actually probed — the deployment host when the request left `host` blank. */
|
|
439
|
+
host: zod_1.z.string(),
|
|
440
|
+
/**
|
|
441
|
+
* `auto` — the request left `host` blank, so the deployment's own GreptimeDB
|
|
442
|
+
* was probed with the deployment's logins (submitted credentials ignored);
|
|
443
|
+
* `custom` — the submitted host and credentials.
|
|
444
|
+
*/
|
|
445
|
+
hostMode: (0, enum_js_1.wireEnum)(constants_js_1.TELEMETRY_CONNECTION_HOST_MODES),
|
|
446
|
+
/** `SELECT version()` as the reader. */
|
|
447
|
+
reader: exports.telemetryConnectionProbeSchema,
|
|
448
|
+
/** `SHOW CREATE DATABASE <database>` as the admin, or skipped. */
|
|
449
|
+
admin: zod_1.z.union([exports.telemetryConnectionProbeSchema, exports.telemetryConnectionSkippedSchema]),
|
|
450
|
+
});
|
|
451
|
+
//# sourceMappingURL=connection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../../../src/telemetry/connection.ts"],"names":[],"mappings":"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"}
|