@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.
Files changed (134) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/LICENSE +21 -0
  3. package/README.md +145 -2
  4. package/dist/cjs/doctor/constants.d.ts +59 -0
  5. package/dist/cjs/doctor/constants.d.ts.map +1 -0
  6. package/dist/cjs/doctor/constants.js +57 -0
  7. package/dist/cjs/doctor/constants.js.map +1 -0
  8. package/dist/cjs/doctor/index.d.ts +5 -0
  9. package/dist/cjs/doctor/index.d.ts.map +1 -0
  10. package/dist/cjs/doctor/index.js +24 -0
  11. package/dist/cjs/doctor/index.js.map +1 -0
  12. package/dist/cjs/doctor/schemas.d.ts +186 -0
  13. package/dist/cjs/doctor/schemas.d.ts.map +1 -0
  14. package/dist/cjs/doctor/schemas.js +183 -0
  15. package/dist/cjs/doctor/schemas.js.map +1 -0
  16. package/dist/cjs/index.d.ts +13 -0
  17. package/dist/cjs/index.d.ts.map +1 -0
  18. package/dist/cjs/index.js +16 -0
  19. package/dist/cjs/index.js.map +1 -0
  20. package/dist/cjs/package.json +3 -0
  21. package/dist/cjs/telemetry/assistant.d.ts +173 -0
  22. package/dist/cjs/telemetry/assistant.d.ts.map +1 -0
  23. package/dist/cjs/telemetry/assistant.js +43 -0
  24. package/dist/cjs/telemetry/assistant.js.map +1 -0
  25. package/dist/cjs/telemetry/config.d.ts +92 -0
  26. package/dist/cjs/telemetry/config.d.ts.map +1 -0
  27. package/dist/cjs/telemetry/config.js +101 -0
  28. package/dist/cjs/telemetry/config.js.map +1 -0
  29. package/dist/cjs/telemetry/connection.d.ts +355 -0
  30. package/dist/cjs/telemetry/connection.d.ts.map +1 -0
  31. package/dist/cjs/telemetry/connection.js +451 -0
  32. package/dist/cjs/telemetry/connection.js.map +1 -0
  33. package/dist/cjs/telemetry/constants.d.ts +442 -0
  34. package/dist/cjs/telemetry/constants.d.ts.map +1 -0
  35. package/dist/cjs/telemetry/constants.js +400 -0
  36. package/dist/cjs/telemetry/constants.js.map +1 -0
  37. package/dist/cjs/telemetry/dashboard.d.ts +826 -0
  38. package/dist/cjs/telemetry/dashboard.d.ts.map +1 -0
  39. package/dist/cjs/telemetry/dashboard.js +697 -0
  40. package/dist/cjs/telemetry/dashboard.js.map +1 -0
  41. package/dist/cjs/telemetry/enum.d.ts +5 -0
  42. package/dist/cjs/telemetry/enum.d.ts.map +1 -0
  43. package/dist/cjs/telemetry/enum.js +12 -0
  44. package/dist/cjs/telemetry/enum.js.map +1 -0
  45. package/dist/cjs/telemetry/index.d.ts +5 -0
  46. package/dist/cjs/telemetry/index.d.ts.map +1 -0
  47. package/dist/cjs/telemetry/index.js +128 -0
  48. package/dist/cjs/telemetry/index.js.map +1 -0
  49. package/dist/cjs/telemetry/query.d.ts +147 -0
  50. package/dist/cjs/telemetry/query.d.ts.map +1 -0
  51. package/dist/cjs/telemetry/query.js +141 -0
  52. package/dist/cjs/telemetry/query.js.map +1 -0
  53. package/dist/cjs/telemetry/schemas.d.ts +17 -0
  54. package/dist/cjs/telemetry/schemas.d.ts.map +1 -0
  55. package/dist/cjs/telemetry/schemas.js +89 -0
  56. package/dist/cjs/telemetry/schemas.js.map +1 -0
  57. package/dist/cjs/telemetry/settings.d.ts +65 -0
  58. package/dist/cjs/telemetry/settings.d.ts.map +1 -0
  59. package/dist/cjs/telemetry/settings.js +77 -0
  60. package/dist/cjs/telemetry/settings.js.map +1 -0
  61. package/dist/cjs/telemetry/stack.d.ts +87 -0
  62. package/dist/cjs/telemetry/stack.d.ts.map +1 -0
  63. package/dist/cjs/telemetry/stack.js +93 -0
  64. package/dist/cjs/telemetry/stack.js.map +1 -0
  65. package/dist/cjs/telemetry/status.d.ts +65 -0
  66. package/dist/cjs/telemetry/status.d.ts.map +1 -0
  67. package/dist/cjs/telemetry/status.js +65 -0
  68. package/dist/cjs/telemetry/status.js.map +1 -0
  69. package/dist/esm/doctor/constants.d.ts +59 -0
  70. package/dist/esm/doctor/constants.d.ts.map +1 -0
  71. package/dist/esm/doctor/constants.js +54 -0
  72. package/dist/esm/doctor/constants.js.map +1 -0
  73. package/dist/esm/doctor/index.d.ts +5 -0
  74. package/dist/esm/doctor/index.d.ts.map +1 -0
  75. package/dist/esm/doctor/index.js +10 -0
  76. package/dist/esm/doctor/index.js.map +1 -0
  77. package/dist/esm/doctor/schemas.d.ts +186 -0
  78. package/dist/esm/doctor/schemas.d.ts.map +1 -0
  79. package/dist/esm/doctor/schemas.js +180 -0
  80. package/dist/esm/doctor/schemas.js.map +1 -0
  81. package/dist/esm/index.d.ts +13 -0
  82. package/dist/esm/index.d.ts.map +1 -0
  83. package/dist/esm/index.js +13 -0
  84. package/dist/esm/index.js.map +1 -0
  85. package/dist/esm/package.json +3 -0
  86. package/dist/esm/telemetry/assistant.d.ts +173 -0
  87. package/dist/esm/telemetry/assistant.d.ts.map +1 -0
  88. package/dist/esm/telemetry/assistant.js +40 -0
  89. package/dist/esm/telemetry/assistant.js.map +1 -0
  90. package/dist/esm/telemetry/config.d.ts +92 -0
  91. package/dist/esm/telemetry/config.d.ts.map +1 -0
  92. package/dist/esm/telemetry/config.js +98 -0
  93. package/dist/esm/telemetry/config.js.map +1 -0
  94. package/dist/esm/telemetry/connection.d.ts +355 -0
  95. package/dist/esm/telemetry/connection.d.ts.map +1 -0
  96. package/dist/esm/telemetry/connection.js +447 -0
  97. package/dist/esm/telemetry/connection.js.map +1 -0
  98. package/dist/esm/telemetry/constants.d.ts +442 -0
  99. package/dist/esm/telemetry/constants.d.ts.map +1 -0
  100. package/dist/esm/telemetry/constants.js +397 -0
  101. package/dist/esm/telemetry/constants.js.map +1 -0
  102. package/dist/esm/telemetry/dashboard.d.ts +826 -0
  103. package/dist/esm/telemetry/dashboard.d.ts.map +1 -0
  104. package/dist/esm/telemetry/dashboard.js +690 -0
  105. package/dist/esm/telemetry/dashboard.js.map +1 -0
  106. package/dist/esm/telemetry/enum.d.ts +5 -0
  107. package/dist/esm/telemetry/enum.d.ts.map +1 -0
  108. package/dist/esm/telemetry/enum.js +9 -0
  109. package/dist/esm/telemetry/enum.js.map +1 -0
  110. package/dist/esm/telemetry/index.d.ts +5 -0
  111. package/dist/esm/telemetry/index.d.ts.map +1 -0
  112. package/dist/esm/telemetry/index.js +10 -0
  113. package/dist/esm/telemetry/index.js.map +1 -0
  114. package/dist/esm/telemetry/query.d.ts +147 -0
  115. package/dist/esm/telemetry/query.d.ts.map +1 -0
  116. package/dist/esm/telemetry/query.js +138 -0
  117. package/dist/esm/telemetry/query.js.map +1 -0
  118. package/dist/esm/telemetry/schemas.d.ts +17 -0
  119. package/dist/esm/telemetry/schemas.d.ts.map +1 -0
  120. package/dist/esm/telemetry/schemas.js +12 -0
  121. package/dist/esm/telemetry/schemas.js.map +1 -0
  122. package/dist/esm/telemetry/settings.d.ts +65 -0
  123. package/dist/esm/telemetry/settings.d.ts.map +1 -0
  124. package/dist/esm/telemetry/settings.js +74 -0
  125. package/dist/esm/telemetry/settings.js.map +1 -0
  126. package/dist/esm/telemetry/stack.d.ts +87 -0
  127. package/dist/esm/telemetry/stack.d.ts.map +1 -0
  128. package/dist/esm/telemetry/stack.js +90 -0
  129. package/dist/esm/telemetry/stack.js.map +1 -0
  130. package/dist/esm/telemetry/status.d.ts +65 -0
  131. package/dist/esm/telemetry/status.d.ts.map +1 -0
  132. package/dist/esm/telemetry/status.js +62 -0
  133. package/dist/esm/telemetry/status.js.map +1 -0
  134. 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":";AAAA,gFAAgF;AAChF,yEAAyE;AACzE,uEAAuE;AACvE,4EAA4E;AAC5E,gFAAgF;AAChF,EAAE;AACF,4EAA4E;AAC5E,2EAA2E;AAC3E,0EAA0E;AAC1E,EAAE;AACF,0EAA0E;AAC1E,+EAA+E;AAC/E,wEAAwE;AACxE,yEAAyE;AACzE,gFAAgF;;;AA0ChF,gDAIC;AA5CD,6BAAwB;AAExB,iDAMwB;AACxB,uCAAqC;AAErC,iFAAiF;AACjF,EAAE;AACF,2EAA2E;AAC3E,uEAAuE;AACvE,wEAAwE;AAExE,MAAM,MAAM,GAAG,sDAAsD,CAAC;AACtE,MAAM,MAAM,GAAG,MAAM,MAAM,UAAU,MAAM,EAAE,CAAC;AAC9C,MAAM,IAAI,GAAG,IAAI,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC;AACvC,MAAM,MAAM,GAAG,sBAAsB,CAAC;AACtC,MAAM,IAAI,GAAG,IAAI,MAAM,CACrB,MAAM;IACJ,MAAM,MAAM,WAAW,MAAM,MAAM;IACnC,MAAM,MAAM,WAAW,MAAM,KAAK,MAAM,MAAM;IAC9C,MAAM,MAAM,YAAY,MAAM,QAAQ,MAAM,YAAY;IACxD,MAAM,MAAM,eAAe,MAAM,UAAU,MAAM,QAAQ,MAAM,YAAY;IAC3E,MAAM,MAAM,eAAe,MAAM,UAAU,MAAM,QAAQ,MAAM,YAAY;IAC3E,MAAM,MAAM,eAAe,MAAM,UAAU,MAAM,QAAQ,MAAM,YAAY;IAC3E,MAAM,MAAM,eAAe,MAAM,UAAU,MAAM,QAAQ,MAAM,YAAY;IAC3E,cAAc,MAAM,UAAU,MAAM,QAAQ,MAAM,YAAY;IAC9D,4BAA4B,CAC/B,CAAC;AAEF;;;;;GAKG;AACH,SAAgB,kBAAkB,CAAC,KAAa;IAC9C,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAC/B,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAC/B,OAAO,CAAC,CAAC;AACX,CAAC;AAED,mFAAmF;AAEnF;;;;;;GAMG;AACU,QAAA,mBAAmB,GAAG,OAAC;KACjC,MAAM,EAAE;KACR,IAAI,EAAE;KACN,GAAG,CAAC,CAAC,CAAC;KACN,GAAG,CAAC,GAAG,CAAC;KACR,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,kBAAkB,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,yCAA0B,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;IAC5F,OAAO,EAAE,oEAAoE;CAC9E,CAAC,CAAC;AAEL;;;;;;;GAOG;AACU,QAAA,2BAA2B,GAAG,OAAC;KACzC,MAAM,EAAE;KACR,OAAO,EAAE;KACT,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;KAC3D,IAAI,CAAC,2BAAmB,CAAC,QAAQ,EAAE,CAAC,CAAC;AAExC;;;;;GAKG;AACU,QAAA,qBAAqB,GAAG,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAExE;;;;;;GAMG;AACU,QAAA,uBAAuB,GAAG,OAAC;KACrC,MAAM,EAAE;KACR,IAAI,EAAE;KACN,GAAG,CAAC,CAAC,CAAC;KACN,GAAG,CAAC,GAAG,CAAC;KACR,KAAK,CAAC,yCAA0B,EAAE;IACjC,OAAO,EAAE,kGAAkG;CAC5G,CAAC,CAAC;AAEL;;;;;GAKG;AACU,QAAA,mBAAmB,GAAG,OAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAErE,qFAAqF;AAErF;;;;;;;GAOG;AACU,QAAA,oCAAoC,GAAG,OAAC,CAAC,MAAM,CAAC;IAC3D,uBAAuB;IACvB,IAAI,EAAE,2BAAmB;IACzB,uCAAuC;IACvC,MAAM,EAAE,6BAAqB;IAC7B,4CAA4C;IAC5C,QAAQ,EAAE,+BAAuB;IACjC,2BAA2B;IAC3B,UAAU,EAAE,2BAAmB;IAC/B,+EAA+E;IAC/E,SAAS,EAAE,2BAAmB,CAAC,QAAQ,EAAE;CAC1C,CAAC,CAAC;AAEH;;;;;;;GAOG;AACU,QAAA,uCAAuC,GAAG,OAAC,CAAC,MAAM,CAAC;IAC9D,mDAAmD;IACnD,IAAI,EAAE,OAAC,CAAC,IAAI,EAAE;CACf,CAAC,CAAC;AAEH;;;;;;GAMG;AACU,QAAA,8BAA8B,GAAG,OAAC,CAAC,KAAK,CAAC;IACpD,4CAAoC;IACpC,+CAAuC;CACxC,CAAC,CAAC;AAyDH;;;;;GAKG;AACU,QAAA,sCAAsC,GAAuC,IAAI,CAAC;AAE/F,uFAAuF;AAEvF,8EAA8E;AAC9E,MAAM,cAAc,GAAG,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAE5C;;;GAGG;AACH,MAAM,gBAAgB,GAAG,OAAC;KACvB,MAAM,EAAE;KACR,IAAI,EAAE;KACN,GAAG,CAAC,GAAG,CAAC;KACR,QAAQ,EAAE;KACV,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;AAErD;;;;GAIG;AACH,MAAM,eAAe,GAAG,OAAC;KACtB,MAAM,EAAE;KACR,IAAI,EAAE;KACN,GAAG,CAAC,GAAG,CAAC;KACR,OAAO,EAAE;KACT,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAElF;;;;;;GAMG;AACH,SAAS,0BAA0B,CACjC,KAA8E,EAC9E,GAAoB;IAEpB,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI;QAAE,OAAO;IAEhC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;QACtB,GAAG,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,0CAA0C,EAAE,CAAC,CAAC;IAC9G,CAAC;IAED,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QAClC,GAAG,CAAC,QAAQ,CAAC;YACX,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,CAAC,WAAW,CAAC;YACnB,OAAO,EAAE,wEAAwE;SAClF,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED;;;;;;;;;GASG;AACU,QAAA,+BAA+B,GAAG,OAAC;KAC7C,MAAM,CAAC;IACN;;;;;;;OAOG;IACH,IAAI,EAAE,mCAA2B;IACjC,iGAAiG;IACjG,MAAM,EAAE,6BAAqB,CAAC,OAAO,CAAC,4CAA6B,CAAC,MAAM,CAAC;IAC3E,wFAAwF;IACxF,QAAQ,EAAE,+BAAuB,CAAC,OAAO,CAAC,4CAA6B,CAAC,QAAQ,CAAC;IACjF,mGAAmG;IACnG,UAAU,EAAE,gBAAgB;IAC5B;;;;OAIG;IACH,cAAc,EAAE,cAAc,CAAC,QAAQ,EAAE;IACzC;;;;OAIG;IACH,SAAS,EAAE,eAAe;IAC1B;;;;OAIG;IACH,aAAa,EAAE,cAAc,CAAC,QAAQ,EAAE;CACzC,CAAC;KACD,WAAW,CAAC,0BAA0B,CAAC,CAAC;AAiB3C;;;;;;;;;GASG;AACU,QAAA,6BAA6B,GAAG,uCAA+B,CAAC;AAS7E,wFAAwF;AAExF;;;;;;;GAOG;AACU,QAAA,+BAA+B,GAAG,OAAC,CAAC,MAAM,CAAC;IACtD;;;;OAIG;IACH,UAAU,EAAE,OAAC,CAAC,OAAO,EAAE;IACvB;;;;OAIG;IACH,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,oDAAoD;IACpD,SAAS,EAAE,OAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACtC,gCAAgC;IAChC,eAAe,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACvC,CAAC,CAAC;AASH;;;;;;;GAOG;AACU,QAAA,mCAAmC,GAAG,OAAC,CAAC,MAAM,CAAC;IAC1D,wDAAwD;IACxD,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE;IAChB,2CAA2C;IAC3C,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IACxB,iCAAiC;IACjC,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE;IACpB,4DAA4D;IAC5D,UAAU,EAAE,OAAC,CAAC,MAAM,EAAE;IACtB,uEAAuE;IACvE,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,yFAAyF;IACzF,gBAAgB,EAAE,OAAC,CAAC,OAAO,EAAE;IAC7B,yFAAyF;IACzF,eAAe,EAAE,OAAC,CAAC,OAAO,EAAE;CAC7B,CAAC,CAAC;AASH;;;;;;;;GAQG;AACU,QAAA,iCAAiC,GAAG,OAAC,CAAC,MAAM,CAAC;IACxD;;;;OAIG;IACH,MAAM,EAAE,IAAA,kBAAQ,EAAC,2CAA4B,CAAC;IAC9C;;;;OAIG;IACH,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B;;;;OAIG;IACH,aAAa,EAAE,OAAC,CAAC,MAAM,EAAE;IACzB,gGAAgG;IAChG,QAAQ,EAAE,IAAA,kBAAQ,EAAC,8CAA+B,CAAC;IACnD;;;;;OAKG;IACH,iBAAiB,EAAE,OAAC,CAAC,OAAO,EAAE;IAC9B;;;;;OAKG;IACH,UAAU,EAAE,2CAAmC;IAC/C;;;;OAIG;IACH,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,uCAAuC;IACvC,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IACxB,6BAA6B;IAC7B,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE;IACpB,qCAAqC;IACrC,UAAU,EAAE,OAAC,CAAC,MAAM,EAAE;IACtB,oDAAoD;IACpD,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,sEAAsE;IACtE,UAAU,EAAE,OAAC,CAAC,OAAO,EAAE;IACvB,sEAAsE;IACtE,eAAe,EAAE,OAAC,CAAC,OAAO,EAAE;IAC5B,mEAAmE;IACnE,WAAW,EAAE,OAAC,CAAC,MAAM,CAAC;QACpB,mCAAmC;QACnC,MAAM,EAAE,uCAA+B;QACvC,kCAAkC;QAClC,KAAK,EAAE,uCAA+B;KACvC,CAAC;IACF,gGAAgG;IAChG,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IACzB,qDAAqD;IACrD,SAAS,EAAE,OAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACtC,oCAAoC;IACpC,SAAS,EAAE,OAAC;SACT,MAAM,CAAC;QACN,qBAAqB;QACrB,EAAE,EAAE,OAAC,CAAC,MAAM,EAAE;QACd,wBAAwB;QACxB,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE;KAClB,CAAC;SACD,QAAQ,EAAE;CACd,CAAC,CAAC;AASH;;;;;;GAMG;AACU,QAAA,8BAA8B,GAAG,OAAC,CAAC,MAAM,CAAC;IACrD,yDAAyD;IACzD,OAAO,EAAE,OAAC,CAAC,OAAO,EAAE;IACpB,mEAAmE;IACnE,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IAC3B,8CAA8C;IAC9C,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,+EAA+E;IAC/E,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC7B,CAAC,CAAC;AASH;;;;;;GAMG;AACU,QAAA,gCAAgC,GAAG,OAAC,CAAC,MAAM,CAAC;IACvD,0EAA0E;IAC1E,OAAO,EAAE,OAAC,CAAC,OAAO,CAAC,IAAI,CAAC;CACzB,CAAC,CAAC;AASH;;;;;;;GAOG;AACU,QAAA,mCAAmC,GAAG,OAAC,CAAC,MAAM,CAAC;IAC1D,yFAAyF;IACzF,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE;IAChB;;;;OAIG;IACH,QAAQ,EAAE,IAAA,kBAAQ,EAAC,8CAA+B,CAAC;IACnD,wCAAwC;IACxC,MAAM,EAAE,sCAA8B;IACtC,kEAAkE;IAClE,KAAK,EAAE,OAAC,CAAC,KAAK,CAAC,CAAC,sCAA8B,EAAE,wCAAgC,CAAC,CAAC;CACnF,CAAC,CAAC"}