alasio 6.0.0 → 8.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/dist/cli/src/branches.js +106 -31
  2. package/dist/cli/src/branches.js.map +1 -1
  3. package/dist/cli/src/cluster/docker-engine.js +6 -4
  4. package/dist/cli/src/cluster/docker-engine.js.map +1 -1
  5. package/dist/cli/src/cluster/docker.js +49 -10
  6. package/dist/cli/src/cluster/docker.js.map +1 -1
  7. package/dist/cli/src/cluster/host.js +45 -19
  8. package/dist/cli/src/cluster/host.js.map +1 -1
  9. package/dist/cli/src/cluster/k3s.js +104 -5
  10. package/dist/cli/src/cluster/k3s.js.map +1 -1
  11. package/dist/cli/src/cluster/node.js +102 -51
  12. package/dist/cli/src/cluster/node.js.map +1 -1
  13. package/dist/cli/src/cluster/tar.js +43 -1
  14. package/dist/cli/src/cluster/tar.js.map +1 -1
  15. package/dist/cli/src/commands/branch.js +7 -3
  16. package/dist/cli/src/commands/branch.js.map +1 -1
  17. package/dist/cli/src/commands/init.js +54 -4
  18. package/dist/cli/src/commands/init.js.map +1 -1
  19. package/dist/cli/src/commands/lake.js +40 -6
  20. package/dist/cli/src/commands/lake.js.map +1 -1
  21. package/dist/cli/src/commands/restore-filer-store.js +56 -13
  22. package/dist/cli/src/commands/restore-filer-store.js.map +1 -1
  23. package/dist/cli/src/commands/status.js +182 -10
  24. package/dist/cli/src/commands/status.js.map +1 -1
  25. package/dist/cli/src/commands/up.js +40 -3
  26. package/dist/cli/src/commands/up.js.map +1 -1
  27. package/dist/cli/src/commands/upgrade.js +22 -6
  28. package/dist/cli/src/commands/upgrade.js.map +1 -1
  29. package/dist/cli/src/config.js +20 -8
  30. package/dist/cli/src/config.js.map +1 -1
  31. package/dist/cli/src/cpu-baseline.js +97 -0
  32. package/dist/cli/src/cpu-baseline.js.map +1 -0
  33. package/dist/cli/src/install.js +94 -13
  34. package/dist/cli/src/install.js.map +1 -1
  35. package/dist/cli/src/kept-releases.js +59 -0
  36. package/dist/cli/src/kept-releases.js.map +1 -0
  37. package/dist/cli/src/kube/api.js +9 -2
  38. package/dist/cli/src/kube/api.js.map +1 -1
  39. package/dist/cli/src/kube/apply.js +1 -1
  40. package/dist/cli/src/kube/apply.js.map +1 -1
  41. package/dist/cli/src/kube/rollout.js +79 -12
  42. package/dist/cli/src/kube/rollout.js.map +1 -1
  43. package/dist/cli/src/lake.js +124 -0
  44. package/dist/cli/src/lake.js.map +1 -0
  45. package/dist/cli/src/manifests/admission.js +183 -24
  46. package/dist/cli/src/manifests/admission.js.map +1 -1
  47. package/dist/cli/src/manifests/alasio.js +198 -27
  48. package/dist/cli/src/manifests/alasio.js.map +1 -1
  49. package/dist/cli/src/manifests/branch.js +2 -1
  50. package/dist/cli/src/manifests/branch.js.map +1 -1
  51. package/dist/cli/src/manifests/collector.js +229 -122
  52. package/dist/cli/src/manifests/collector.js.map +1 -1
  53. package/dist/cli/src/manifests/common.js +23 -8
  54. package/dist/cli/src/manifests/common.js.map +1 -1
  55. package/dist/cli/src/manifests/config.js +254 -21
  56. package/dist/cli/src/manifests/config.js.map +1 -1
  57. package/dist/cli/src/manifests/grafana.js +18 -6
  58. package/dist/cli/src/manifests/grafana.js.map +1 -1
  59. package/dist/cli/src/manifests/index.js +15 -6
  60. package/dist/cli/src/manifests/index.js.map +1 -1
  61. package/dist/cli/src/manifests/juicefs-csi.js +7 -6
  62. package/dist/cli/src/manifests/juicefs-csi.js.map +1 -1
  63. package/dist/cli/src/manifests/keda.js +2 -1
  64. package/dist/cli/src/manifests/keda.js.map +1 -1
  65. package/dist/cli/src/manifests/lake.js +340 -73
  66. package/dist/cli/src/manifests/lake.js.map +1 -1
  67. package/dist/cli/src/manifests/log.js +298 -0
  68. package/dist/cli/src/manifests/log.js.map +1 -0
  69. package/dist/cli/src/manifests/neon.js +282 -66
  70. package/dist/cli/src/manifests/neon.js.map +1 -1
  71. package/dist/cli/src/manifests/network-policies.js +211 -45
  72. package/dist/cli/src/manifests/network-policies.js.map +1 -1
  73. package/dist/cli/src/manifests/node-agent.js +116 -0
  74. package/dist/cli/src/manifests/node-agent.js.map +1 -0
  75. package/dist/cli/src/manifests/object-store.js +42 -10
  76. package/dist/cli/src/manifests/object-store.js.map +1 -1
  77. package/dist/cli/src/manifests/priorities.js +1 -0
  78. package/dist/cli/src/manifests/priorities.js.map +1 -1
  79. package/dist/cli/src/manifests/scalers.js.map +1 -1
  80. package/dist/cli/src/manifests/valkey.js +1 -1
  81. package/dist/cli/src/manifests/webhook.js +102 -0
  82. package/dist/cli/src/manifests/webhook.js.map +1 -0
  83. package/dist/cli/src/neon-storage.js +115 -0
  84. package/dist/cli/src/neon-storage.js.map +1 -0
  85. package/dist/cli/src/release.js +9 -6
  86. package/dist/cli/src/release.js.map +1 -1
  87. package/dist/cli/src/secrets.js +45 -4
  88. package/dist/cli/src/secrets.js.map +1 -1
  89. package/dist/cli/src/target.js +1 -1
  90. package/dist/cli/src/target.js.map +1 -1
  91. package/dist/cli/src/telegram.js +56 -10
  92. package/dist/cli/src/telegram.js.map +1 -1
  93. package/dist/cli/src/webhook.js +182 -0
  94. package/dist/cli/src/webhook.js.map +1 -0
  95. package/dist/cluster/node/pins.json +11 -2
  96. package/dist/neon/control/branches.js +146 -22
  97. package/dist/neon/control/branches.js.map +1 -1
  98. package/dist/neon/control/endpoints.js +117 -0
  99. package/dist/neon/control/endpoints.js.map +1 -0
  100. package/dist/neon/control/jwt.js +16 -3
  101. package/dist/neon/control/jwt.js.map +1 -1
  102. package/dist/neon/control/scram.js +13 -1
  103. package/dist/neon/control/scram.js.map +1 -1
  104. package/dist/neon/control/secrets.js +88 -14
  105. package/dist/neon/control/secrets.js.map +1 -1
  106. package/dist/src/kube/config.js +27 -3
  107. package/dist/src/kube/config.js.map +1 -1
  108. package/dist/src/kube/sandbox-shape.js +49 -3
  109. package/dist/src/kube/sandbox-shape.js.map +1 -1
  110. package/dist/src/node-agent/names.js +140 -0
  111. package/dist/src/node-agent/names.js.map +1 -0
  112. package/dist/src/telegram/deliveries.js +40 -0
  113. package/dist/src/telegram/deliveries.js.map +1 -0
  114. package/package.json +2 -2
  115. package/dist/cluster/node/config-v3.toml.tmpl +0 -12
@@ -12,13 +12,15 @@
12
12
  * asked again, after a failure or a restart, asks for exactly the same timeline.
13
13
  *
14
14
  * A branch's compute has credentials of its own, which whoever asks for the branch makes
15
- * and neon-control is given only the hashes of: the SCRAM verifier of the password of
16
- * alasio's role on it, which its spec gives the role, and the SHA-256 of the token it
17
- * fetches its spec with, which fetches its spec alone. So what a branch is given reaches
18
- * neither main's compute nor another branch's spec. main's compute keeps the stack's.
15
+ * and neon-control is given only the hashes of: the SCRAM verifiers of the passwords of
16
+ * the roles its clients connect as (alasio's, which its spec gives the role, and the
17
+ * lake's, which its alasio sets), which neon-control answers Neon's proxy with, and the
18
+ * SHA-256 of the token it fetches its spec with, which fetches its spec alone. So what a
19
+ * branch is given reaches neither main's compute nor another branch's spec. main's
20
+ * compute keeps the stack's.
19
21
  */
20
22
  import { createHash, timingSafeEqual } from "node:crypto";
21
- import { DATABASE, ROLE } from "./secrets.js";
23
+ import { DATABASE, LAKE_ROLE, ROLE } from "./secrets.js";
22
24
  /** alasio's own branch: its first timeline, bootstrapped, never deleted. */
23
25
  export const MAIN = "main";
24
26
  /**
@@ -35,17 +37,26 @@ export const MAX_NAME_LENGTH = 30;
35
37
  export const HISTORY_DAYS = 1;
36
38
  /** HISTORY_DAYS, as alasio says it. */
37
39
  export const HISTORY = HISTORY_DAYS === 1 ? "a day" : `${HISTORY_DAYS} days`;
40
+ /** The roles a branch's clients connect as: alasio's, and its lake's. */
41
+ export const BRANCH_ROLES = [ROLE, LAKE_ROLE];
38
42
  /**
39
43
  * The scope of the lake's token, which lists the branches and does nothing else: Neon's
40
44
  * own services do not know it.
41
45
  */
42
46
  export const BRANCHES_SCOPE = "branches";
47
+ /** The scope of Neon's proxy's token, which asks for roles' secrets and wakes computes, and does nothing else. */
48
+ export const PROXY_SCOPE = "proxy";
49
+ /** The paths of neon-control's API that Neon's proxy calls, as its control plane (./endpoints.ts). */
50
+ export const PROXY_PATHS = ["/get_endpoint_access_control", "/wake_compute"];
43
51
  /**
44
52
  * The scopes of the tokens a call of neon-control's API (`method` on `url`) is taken
45
- * with: the admin's, as the storage controller's hooks bear it, and for a list of the
46
- * branches the lake's too, which keeps its files while any branch may read them.
53
+ * with: the admin's, as the storage controller's hooks bear it; for a list of the
54
+ * branches the lake's too, which keeps its files while any branch may read them; and for
55
+ * what the proxy calls, the proxy's alone.
47
56
  */
48
57
  export function callScopes(method, url) {
58
+ if (method === "GET" && PROXY_PATHS.includes(new URL(url, "http://neon-control").pathname))
59
+ return [PROXY_SCOPE];
49
60
  return method === "GET" && url === "/branches" ? ["admin", BRANCHES_SCOPE] : ["admin"];
50
61
  }
51
62
  /** A refusal for the API's caller: its HTTP status, and what it says. */
@@ -65,6 +76,8 @@ export function nameProblem(name) {
65
76
  // A DNS-1123 label, as the names of the objects named after it must be.
66
77
  if (!/^[a-z0-9]([-a-z0-9]*[a-z0-9])?$/u.test(name))
67
78
  return "a branch's name is lowercase letters, digits and inner hyphens";
79
+ if (name.endsWith(REPLICA_SUFFIX))
80
+ return `a branch's name does not end in ${REPLICA_SUFFIX}, which names a read replica's compute`;
68
81
  return null;
69
82
  }
70
83
  /**
@@ -84,12 +97,16 @@ export function branchPoint(text) {
84
97
  export const tokenSha256 = (token) => createHash("sha256").update(token).digest("hex");
85
98
  /** The credentials `value` gives a branch's compute, checked. */
86
99
  function computeCredentials(value) {
87
- const { passwordVerifier, tokenSha256: sha, ...rest } = (typeof value === "object" && value !== null ? value : {});
88
- if (Object.keys(rest).length > 0 || typeof passwordVerifier !== "string" || !passwordVerifier.startsWith("SCRAM-SHA-256$") ||
100
+ const object = (candidate) => (typeof candidate === "object" && candidate !== null ? candidate : {});
101
+ const { verifiers, tokenSha256: sha, ...rest } = object(value);
102
+ const given = object(verifiers);
103
+ const verifier = (role) => typeof given[role] === "string" && given[role].startsWith("SCRAM-SHA-256$");
104
+ if (Object.keys(rest).length > 0 || Object.keys(given).length !== BRANCH_ROLES.length || !BRANCH_ROLES.every(verifier) ||
89
105
  typeof sha !== "string" || !/^[0-9a-f]{64}$/u.test(sha)) {
90
- throw new BranchError(400, "a branch's compute is given as { passwordVerifier, tokenSha256 }: a SCRAM-SHA-256 verifier, and a SHA-256 in hexadecimal");
106
+ throw new BranchError(400, `a branch's compute is given as { verifiers, tokenSha256 }: a SCRAM-SHA-256 verifier of each of ${BRANCH_ROLES.join(" and ")}, and a SHA-256 in hexadecimal`);
91
107
  }
92
- return { passwordVerifier, tokenSha256: sha };
108
+ // Each checked above to be a verifier.
109
+ return { verifiers: { [ROLE]: given[ROLE], [LAKE_ROLE]: given[LAKE_ROLE] }, tokenSha256: sha };
93
110
  }
94
111
  /** The branch `body` asks for: `{ name, parent?, lsn?, compute }`, its parent main if not given. */
95
112
  export function branchRequest(body) {
@@ -122,6 +139,16 @@ export function computeId(name) {
122
139
  export function branchOfCompute(branches, id) {
123
140
  return branches.find((branch) => branch.state === "ready" && computeId(branch.name) === id);
124
141
  }
142
+ /** What ends the id of a branch's read replica's compute, after its primary's. */
143
+ export const REPLICA_SUFFIX = "-ro";
144
+ /** The id of the read replica's compute of the branch `name`: `<computeId>-ro`. */
145
+ export const replicaId = (name) => `${computeId(name)}${REPLICA_SUFFIX}`;
146
+ /** The compute `id` names, a ready branch's primary or its read replica, if any. */
147
+ export function computeNamed(branches, id) {
148
+ const replica = id.endsWith(REPLICA_SUFFIX);
149
+ const branch = branchOfCompute(branches, replica ? id.slice(0, -REPLICA_SUFFIX.length) : id);
150
+ return branch && { branch, replica };
151
+ }
125
152
  /** The compute whose token `authorization` bears, by its id: main's, the stack's `mainToken`, or a branch's own; null for none. */
126
153
  export function computeOfToken(branches, authorization, mainToken) {
127
154
  const token = /^Bearer (.+)$/u.exec(authorization ?? "")?.[1];
@@ -237,23 +264,96 @@ export function withNotifiedPlacement(branches, { timelineId, placement }) {
237
264
  return null;
238
265
  return withBranch(branches, { ...branch, safekeepers: placement });
239
266
  }
267
+ /**
268
+ * The notification `body` is, of the tenant `tenantId`'s shards, checked: `{ tenant_id,
269
+ * stripe_size, shards: [{ node_id, shard_number }] }`, its shards in any order.
270
+ */
271
+ export function attachNotified(body, tenantId) {
272
+ const record = (value) => (typeof value === "object" && value !== null ? value : {});
273
+ const { tenant_id, stripe_size, shards } = record(body);
274
+ const placed = Array.isArray(shards) ? shards.map((shard) => record(shard)) : [];
275
+ const numbers = placed.map(({ shard_number }) => shard_number);
276
+ if (typeof tenant_id !== "string" || (stripe_size !== null && typeof stripe_size !== "number") || placed.length === 0 ||
277
+ !placed.every(({ node_id, shard_number }) => typeof node_id === "number" && typeof shard_number === "number") ||
278
+ [...numbers].sort((a, b) => Number(a) - Number(b)).some((number, index) => number !== index)) {
279
+ throw new BranchError(400, "shards are notified as { tenant_id, stripe_size, shards: [{ node_id, shard_number }] }, numbered from 0");
280
+ }
281
+ if (tenant_id !== tenantId)
282
+ throw new BranchError(400, `the shards of the tenant ${tenant_id} were notified, which is not alasio's`);
283
+ const ordered = [...placed].sort((a, b) => Number(a["shard_number"]) - Number(b["shard_number"]));
284
+ return { nodeIds: ordered.map(({ node_id }) => node_id), stripeSize: placed.length > 1 ? stripe_size : null };
285
+ }
286
+ /**
287
+ * The layout `notified` places the shards in, each pageserver's address `addresses` has by
288
+ * its node id; null where it names a node `addresses` has not, which the storage
289
+ * controller notifies again.
290
+ */
291
+ export function layoutOf({ nodeIds, stripeSize }, addresses) {
292
+ const pageservers = nodeIds.map((id) => addresses.get(id));
293
+ return pageservers.every((address) => address !== undefined) ? { pageservers, stripeSize } : null;
294
+ }
295
+ /** Whether the layouts `a` and `b` place the shards alike. */
296
+ export const sameLayout = (a, b) => a.stripeSize === b.stripeSize && a.pageservers.length === b.pageservers.length && a.pageservers.every((pageserver, index) => pageserver === b.pageservers[index]);
297
+ /**
298
+ * The moves that spread the tenant's `shards`, in shard order, over `pageservers`
299
+ * pageservers numbered from 1, shard n onto pageserver n mod `pageservers`, plus one:
300
+ * where every shard is attached to one pageserver, at rest, as a split leaves them, and
301
+ * as a failover does once every pageserver is back. None otherwise: any other placement
302
+ * is the storage controller's own, as its drain and fill make it, which neon-control
303
+ * never undoes.
304
+ */
305
+ export function shardMoves(shards, pageservers) {
306
+ const attached = new Set(shards.map(({ node_attached }) => node_attached));
307
+ const [from] = attached;
308
+ if (shards.length < 2 || pageservers < 2 || !shardsAtRest(shards) || attached.size !== 1 || from === null || from === undefined)
309
+ return [];
310
+ return shards.flatMap(({ tenant_shard_id }, index) => {
311
+ const to = (index % pageservers) + 1;
312
+ return from === to ? [] : [{ shardId: tenant_shard_id, from, to }];
313
+ });
314
+ }
315
+ /** Whether none of `shards` is being moved or split, so where they are attached is where they stay. */
316
+ export const shardsAtRest = (shards) => shards.every(({ is_reconciling, is_splitting }) => !is_reconciling && !is_splitting);
317
+ /** Whether each of `pageservers` pageservers, numbered from 1, is registered, available and takes shards, among `nodes`. */
318
+ export const pageserversServing = (nodes, pageservers) => Array.from({ length: pageservers }, (_, index) => index + 1)
319
+ .every((id) => nodes.some((node) => node.id === id && node.availability === "Active" && node.scheduling === "Active"));
240
320
  /** The port every compute serves Postgres on. */
241
321
  export const COMPUTE_PORT = 55433;
322
+ /** The port of compute_ctl's API, and its metrics, on every compute. */
323
+ export const COMPUTE_CTL_PORT = 3080;
242
324
  function setting(name, value, vartype) {
243
325
  return { name, value: String(value), vartype };
244
326
  }
327
+ /** `value` as a postgresql.conf string, quoted. */
328
+ const confString = (value) => `'${value.replaceAll("'", "''")}'`;
245
329
  /**
246
- * The spec of `branch`'s compute: a primary on its timeline, at its safekeepers. The role
247
- * and database are main's, which every branch inherits with its data; the role's password
248
- * is the branch's own.
330
+ * The spec of `branch`'s compute: a primary on its timeline, at its safekeepers, reading
331
+ * each shard's pages from the pageserver `layout` places it on. The role and database are
332
+ * main's, which every branch inherits with its data; the role's password is the branch's
333
+ * own.
334
+ *
335
+ * With `replica`, its read replica's (`<computeId>-ro`): Neon's Replica mode, its
336
+ * basebackup the pageserver's latest, streaming the timeline's WAL from the branch's
337
+ * safekeepers, which Neon's compute_ctl leaves to its control plane to say, as neon_local
338
+ * does (control_plane/src/endpoint.rs at Neon's release-9129), with the storage token as
339
+ * the safekeepers' password. It makes no role, as a replica writes nothing: its roles are
340
+ * its primary's, neon-control's own among them, with its primary's password.
249
341
  *
250
342
  * Its storage token is the tenant's, as the pageserver and safekeepers take no narrower
251
343
  * one: a timeline is not a scope of theirs. A branch's compute could read main's timeline
252
344
  * with it, which only Neon's storage services take, and only from the stack's pods.
253
345
  */
254
- export function computeConfig(branch, stack) {
346
+ export function computeConfig(branch, stack, layout, { replica = false } = {}) {
255
347
  // The timeline was placed on safekeepers of the stack, so each id is one of theirs.
256
- const safekeeper = (id) => stack.safekeepers.find((sk) => sk.id === id);
348
+ const placed = branch.safekeepers.ids.map((id) => stack.safekeepers.find((sk) => sk.id === id));
349
+ const streaming = [
350
+ `host=${placed.map(({ host }) => host).join(",")}`,
351
+ `port=${placed.map(({ pgPort }) => pgPort).join(",")}`,
352
+ `options='-c timeline_id=${branch.timelineId} tenant_id=${stack.tenantId}'`,
353
+ "application_name=replica",
354
+ "replication=true",
355
+ `password=${stack.storageAuthToken}`,
356
+ ].join(" ");
257
357
  return {
258
358
  spec: {
259
359
  format_version: 1.0,
@@ -261,13 +361,20 @@ export function computeConfig(branch, stack) {
261
361
  cluster: {
262
362
  cluster_id: "alasio",
263
363
  name: "alasio",
264
- roles: [{ name: ROLE, encrypted_password: branch.compute?.passwordVerifier ?? stack.passwordVerifier, options: null }],
265
- databases: [{ name: DATABASE, owner: ROLE, options: null }],
364
+ roles: replica
365
+ ? []
366
+ : [
367
+ { name: ROLE, encrypted_password: branch.compute?.verifiers.alasio ?? stack.verifiers.alasio, options: null },
368
+ // After alasio's: compute_ctl applies them in order, so once it may log in, alasio may too.
369
+ { name: stack.monitor.role, encrypted_password: stack.monitor.verifier(computeId(branch.name)), options: null },
370
+ ],
371
+ databases: replica ? [] : [{ name: DATABASE, owner: ROLE, options: null }],
266
372
  settings: [
267
373
  setting("listen_addresses", "0.0.0.0", "string"),
268
374
  setting("port", COMPUTE_PORT, "integer"),
269
375
  setting("max_connections", 100, "integer"),
270
- setting("shared_buffers", "128MB", "string"),
376
+ // A replica serves the lake's loader alone.
377
+ setting("shared_buffers", replica ? "64MB" : "128MB", "string"),
271
378
  setting("password_encryption", "scram-sha-256", "enum"),
272
379
  // Durability is the safekeepers': a commit waits for their quorum,
273
380
  // and the compute's own disk is rebuilt on every start.
@@ -291,14 +398,31 @@ export function computeConfig(branch, stack) {
291
398
  setting("max_replication_flush_lag", "10GB", "string"),
292
399
  setting("restart_after_crash", "off", "bool"),
293
400
  ],
401
+ ...(replica
402
+ ? {
403
+ postgresql_conf: [
404
+ `primary_conninfo = ${confString(streaming)}`,
405
+ `primary_slot_name = ${confString(`repl_${branch.timelineId}_`)}`,
406
+ "hot_standby = on",
407
+ // The loader's reads hold back the cleanup of what they read, on the primary, rather
408
+ // than be cancelled by its replay; and WAL that would cancel one waits for it a while.
409
+ "hot_standby_feedback = on",
410
+ "max_standby_streaming_delay = 5min",
411
+ "recovery_prefetch = off",
412
+ "",
413
+ ].join("\n"),
414
+ }
415
+ : {}),
294
416
  },
295
417
  delta_operations: [],
296
418
  tenant_id: stack.tenantId,
297
419
  timeline_id: branch.timelineId,
298
- mode: "Primary",
299
- pageserver_connstring: `postgresql://no_user@${stack.pageserverHost}:6400`,
420
+ mode: replica ? "Replica" : "Primary",
421
+ pageserver_connstring: layout.pageservers.map((pageserver) => `postgresql://no_user@${pageserver}`).join(","),
422
+ ...(layout.stripeSize === null ? {} : { shard_stripe_size: layout.stripeSize }),
300
423
  safekeepers_generation: branch.safekeepers.generation,
301
- safekeeper_connstrings: branch.safekeepers.ids.map((id) => `${safekeeper(id).host}:${safekeeper(id).pgPort}`),
424
+ // A replica syncs with no safekeeper: it streams from them (postgresql_conf).
425
+ safekeeper_connstrings: replica ? [] : placed.map(({ host, pgPort }) => `${host}:${pgPort}`),
302
426
  storage_auth_token: stack.storageAuthToken,
303
427
  },
304
428
  compute_ctl_config: { jwks: stack.jwks },
@@ -1 +1 @@
1
- {"version":3,"file":"branches.js","sourceRoot":"","sources":["../../../../neon/control/branches.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAG1D,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAE9C,4EAA4E;AAC5E,MAAM,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC;AAE3B;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,CAAC;AAElC;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC;AAE9B,uCAAuC;AACvC,MAAM,CAAC,MAAM,OAAO,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,YAAY,OAAO,CAAC;AAiD7E;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,UAAU,CAAC;AAEzC;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,MAAc,EAAE,GAAW;IACpD,OAAO,MAAM,KAAK,KAAK,IAAI,GAAG,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;AACzF,CAAC;AAED,yEAAyE;AACzE,MAAM,OAAO,WAAY,SAAQ,KAAK;IAC3B,MAAM,CAAS;IAExB,YAAY,MAAc,EAAE,OAAe;QACzC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF;AAED,2EAA2E;AAC3E,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,GAAG,IAAI,yBAAyB,CAAC;IAC3D,IAAI,IAAI,CAAC,MAAM,GAAG,eAAe;QAAE,OAAO,8BAA8B,eAAe,aAAa,CAAC;IACrG,wEAAwE;IACxE,IAAI,CAAC,kCAAkC,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,gEAAgE,CAAC;IAC5H,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,MAAM,KAAK,GAAG,sCAAsC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChE,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,CAAC,EAAE,IAAI,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC;IACtC,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,IAAI,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;IAC/E,OAAO,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,GAAG,WAAW,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;AAChH,CAAC;AAED,4FAA4F;AAC5F,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAEvG,iEAAiE;AACjE,SAAS,kBAAkB,CAAC,KAAc;IACxC,MAAM,EAAE,gBAAgB,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAA4B,CAAC;IAC9I,IACE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,gBAAgB,KAAK,QAAQ,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,gBAAgB,CAAC;QACtH,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,EACvD,CAAC;QACD,MAAM,IAAI,WAAW,CAAC,GAAG,EAAE,0HAA0H,CAAC,CAAC;IACzJ,CAAC;IACD,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC;AAChD,CAAC;AAED,oGAAoG;AACpG,MAAM,UAAU,aAAa,CAAC,IAAa;IACzC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI;QAAE,MAAM,IAAI,WAAW,CAAC,GAAG,EAAE,2DAA2D,CAAC,CAAC;IACvI,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,IAA+B,CAAC;IAC9F,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,IAAI,WAAW,CAAC,GAAG,EAAE,mBAAmB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC5F,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,MAAM,IAAI,WAAW,CAAC,GAAG,EAAE,mCAAmC,CAAC,CAAC;IAC9F,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,OAAO;QAAE,MAAM,IAAI,WAAW,CAAC,GAAG,EAAE,GAAG,IAAI,yBAAyB,OAAO,EAAE,CAAC,CAAC;IACnF,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,MAAM,IAAI,WAAW,CAAC,GAAG,EAAE,sCAAsC,CAAC,CAAC;IACnG,MAAM,WAAW,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAChD,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;IACrE,MAAM,KAAK,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAChE,IAAI,KAAK,KAAK,IAAI;QAAE,MAAM,IAAI,WAAW,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC;IAC3H,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;AAC5D,CAAC;AAED,wGAAwG;AACxG,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,OAAO,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC;AACrD,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,eAAe,CAAC,QAA2B,EAAE,EAAU;IACrE,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,EAAyB,EAAE,CAAC,MAAM,CAAC,KAAK,KAAK,OAAO,IAAI,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;AACrH,CAAC;AAED,mIAAmI;AACnI,MAAM,UAAU,cAAc,CAAC,QAA2B,EAAE,aAAiC,EAAE,SAAiB;IAC9G,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,aAAa,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9D,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,IAAI,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAChH,IAAI,SAAS,IAAI,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC;QAAE,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC;IAChE,MAAM,GAAG,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAC/B,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,KAAK,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;IAC1G,OAAO,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC9C,CAAC;AAKD,mDAAmD;AACnD,MAAM,UAAU,UAAU,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,MAAM,EAAU;IACrE,OAAO,EAAE,GAAG,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;AAC1D,CAAC;AAED,uCAAuC;AACvC,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,QAA2B,EAAE,IAAY,EAAsB,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AAE9I,qFAAqF;AACrF,MAAM,UAAU,UAAU,CAAC,QAA2B,EAAE,MAAc;IACpE,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC;IACrE,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AACnH,CAAC;AAED,+CAA+C;AAC/C,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,QAA2B,EAAE,IAAY,EAAY,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AAExI;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,QAA2B,EAAE,OAAsB;IAChF,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,KAAK,IAAI,IAAI,QAAQ,CAAC,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;QAC1G,IAAI,QAAQ,CAAC,KAAK,KAAK,UAAU;YAAE,MAAM,IAAI,WAAW,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,mBAAmB,CAAC,CAAC;QAClG,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,WAAW,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,mBAAmB,QAAQ,CAAC,MAAM,OAAO,QAAQ,CAAC,GAAG,UAAU,CAAC,CAAC;QACtH,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,MAAM,MAAM,GAAG,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACrD,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,WAAW,CAAC,GAAG,EAAE,sBAAsB,OAAO,CAAC,MAAM,iBAAiB,CAAC,CAAC;IAC/F,IAAI,MAAM,CAAC,KAAK,KAAK,OAAO;QAAE,MAAM,IAAI,WAAW,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,MAAM,OAAO,MAAM,CAAC,KAAK,wCAAwC,CAAC,CAAC;IACvI,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,QAAQ,CAAC,QAA2B,EAAE,IAAY;IAChE,IAAI,IAAI,KAAK,IAAI;QAAE,MAAM,IAAI,WAAW,CAAC,GAAG,EAAE,GAAG,IAAI,iDAAiD,CAAC,CAAC;IACxG,MAAM,MAAM,GAAG,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC3C,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,WAAW,CAAC,GAAG,EAAE,sBAAsB,IAAI,EAAE,CAAC,CAAC;IACtE,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC9F,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,IAAI,WAAW,CAAC,GAAG,EAAE,GAAG,IAAI,4CAA4C,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC9H,OAAO,UAAU,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;AACxL,CAAC;AAUD;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,MAAmD,EAAE,gBAA+B,EAAE,OAAwB;IACxI,MAAM,GAAG,GAAG,OAAO,OAAO,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAChG,MAAM,IAAI,GAAG,wCAAwC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,QAAQ,MAAM,CAAC,OAAO,CAAC,oBAAoB,IAAI,aAAa,CAAC,OAAO,GAAG,IAAI,QAAQ,EAAE,CAAC;IACtK,IAAI,OAAO,CAAC,WAAW,KAAK,MAAM,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,oBAAoB,IAAI,IAAI,CAAC,KAAK,gBAAgB,IAAI,CAAC,gBAAgB,KAAK,IAAI,IAAI,GAAG,KAAK,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QAClK,MAAM,IAAI,WAAW,CAAC,GAAG,EAAE,GAAG,IAAI,SAAS,MAAM,CAAC,IAAI,MAAM,MAAM,CAAC,UAAU,OAAO,gBAAgB,IAAI,aAAa,OAAO,MAAM,CAAC,GAAG,IAAI,QAAQ,EAAE,CAAC,CAAC;IACxJ,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,WAAW;QAAE,MAAM,IAAI,WAAW,CAAC,GAAG,EAAE,iCAAiC,MAAM,CAAC,IAAI,+BAA+B,CAAC,CAAC;IAClI,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,WAAW,CAAC,UAAU,EAAE,GAAG,EAAE,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACjH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,MAA+C,EAAE,MAAqB,EAAE,OAAe;IACrH,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,KAAK,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC;QACjF,OAAO,IAAI,WAAW,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,MAAM,WAAW,MAAM,CAAC,GAAG,cAAc,MAAM,CAAC,IAAI,wDAAwD,OAAO,2BAA2B,OAAO,GAAG,CAAC,CAAC;IAClM,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,OAAO,EAAE,CAAC;IACpE,OAAO,IAAI,WAAW,CAAC,GAAG,EAAE,yCAAyC,MAAM,CAAC,IAAI,mCAAmC,QAAQ,EAAE,CAAC,CAAC;AACjI,CAAC;AAQD,2CAA2C;AAC3C,MAAM,UAAU,mBAAmB,CAAC,IAAa;IAC/C,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,CAAC,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAA4B,CAAC;IACpI,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAW,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,KAAK,IAAI,CAAC,CAAC,CAAE,EAA8B,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5K,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,EAAE,KAAK,QAAQ,CAAC,EAAE,CAAC;QACxI,MAAM,IAAI,WAAW,CAAC,GAAG,EAAE,2FAA2F,CAAC,CAAC;IAC1H,CAAC;IACD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,GAAe,EAAE,EAAE,CAAC;AACtF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAA2B,EAAE,EAAE,UAAU,EAAE,SAAS,EAAuB;IAC/G,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,SAAS,EAA4B,EAAE,CAAC,SAAS,CAAC,KAAK,KAAK,OAAO,IAAI,SAAS,CAAC,UAAU,KAAK,UAAU,CAAC,CAAC;IAC1I,IAAI,CAAC,MAAM,IAAI,SAAS,CAAC,UAAU,IAAI,MAAM,CAAC,WAAW,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IAClF,OAAO,UAAU,CAAC,QAAQ,EAAE,EAAE,GAAG,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC;AACrE,CAAC;AA2DD,iDAAiD;AACjD,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,CAAC;AAElC,SAAS,OAAO,CAAC,IAAY,EAAE,KAAsB,EAAE,OAAoB;IACzE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;AACjD,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,aAAa,CAAC,MAAmB,EAAE,KAAmB;IACpE,oFAAoF;IACpF,MAAM,UAAU,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAE,CAAC;IACjF,OAAO;QACL,IAAI,EAAE;YACJ,cAAc,EAAE,GAAG;YACnB,uBAAuB,EAAE,CAAC,CAAC;YAC3B,OAAO,EAAE;gBACP,UAAU,EAAE,QAAQ;gBACpB,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,CAAC,OAAO,EAAE,gBAAgB,IAAI,KAAK,CAAC,gBAAgB,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;gBACtH,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;gBAC3D,QAAQ,EAAE;oBACR,OAAO,CAAC,kBAAkB,EAAE,SAAS,EAAE,QAAQ,CAAC;oBAChD,OAAO,CAAC,MAAM,EAAE,YAAY,EAAE,SAAS,CAAC;oBACxC,OAAO,CAAC,iBAAiB,EAAE,GAAG,EAAE,SAAS,CAAC;oBAC1C,OAAO,CAAC,gBAAgB,EAAE,OAAO,EAAE,QAAQ,CAAC;oBAC5C,OAAO,CAAC,qBAAqB,EAAE,eAAe,EAAE,MAAM,CAAC;oBACvD,mEAAmE;oBACnE,wDAAwD;oBACxD,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC;oBAC/B,OAAO,CAAC,2BAA2B,EAAE,aAAa,EAAE,QAAQ,CAAC;oBAC7D,OAAO,CAAC,0BAA0B,EAAE,MAAM,EAAE,QAAQ,CAAC;oBACrD,OAAO,CAAC,WAAW,EAAE,SAAS,EAAE,MAAM,CAAC;oBACvC,OAAO,CAAC,eAAe,EAAE,KAAK,EAAE,MAAM,CAAC;oBACvC,OAAO,CAAC,eAAe,EAAE,CAAC,EAAE,SAAS,CAAC;oBACtC,gFAAgF;oBAChF,4EAA4E;oBAC5E,0EAA0E;oBAC1E,+EAA+E;oBAC/E,+EAA+E;oBAC/E,OAAO,CAAC,oBAAoB,EAAE,IAAI,EAAE,QAAQ,CAAC;oBAC7C,OAAO,CAAC,cAAc,EAAE,KAAK,EAAE,QAAQ,CAAC;oBACxC,OAAO,CAAC,oBAAoB,EAAE,IAAI,EAAE,QAAQ,CAAC;oBAC7C,OAAO,CAAC,iBAAiB,EAAE,EAAE,EAAE,SAAS,CAAC;oBACzC,OAAO,CAAC,uBAAuB,EAAE,EAAE,EAAE,SAAS,CAAC;oBAC/C,OAAO,CAAC,2BAA2B,EAAE,MAAM,EAAE,QAAQ,CAAC;oBACtD,OAAO,CAAC,2BAA2B,EAAE,MAAM,EAAE,QAAQ,CAAC;oBACtD,OAAO,CAAC,qBAAqB,EAAE,KAAK,EAAE,MAAM,CAAC;iBAC9C;aACF;YACD,gBAAgB,EAAE,EAAE;YACpB,SAAS,EAAE,KAAK,CAAC,QAAQ;YACzB,WAAW,EAAE,MAAM,CAAC,UAAU;YAC9B,IAAI,EAAE,SAAS;YACf,qBAAqB,EAAE,wBAAwB,KAAK,CAAC,cAAc,OAAO;YAC1E,sBAAsB,EAAE,MAAM,CAAC,WAAW,CAAC,UAAU;YACrD,sBAAsB,EAAE,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;YAC7G,kBAAkB,EAAE,KAAK,CAAC,gBAAgB;SAC3C;QACD,kBAAkB,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE;KACzC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"branches.js","sourceRoot":"","sources":["../../../../neon/control/branches.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,117 @@
1
+ /**
2
+ * neon-control as the control plane of Neon's proxy (its `cplane-v1` backend:
3
+ * proxy/src/control_plane/client/cplane_proxy_v1.rs and messages.rs at Neon's
4
+ * release-9129), what is decided without I/O. Every client of alasio's Neon connects to
5
+ * the proxy, naming the compute it wants by `options=endpoint=<id>` (the compute's id,
6
+ * ./branches.ts's computeId), and the proxy asks:
7
+ *
8
+ * - `GET /get_endpoint_access_control?endpointish&role`: the role's SCRAM verifier, which
9
+ * it authenticates the client against and then the compute with, so the compute must
10
+ * store that verifier to the byte (./scram.ts). Main's roles' are the stack's, from its
11
+ * secrets; a branch's, the verifiers its request gave. Anything else is no endpoint, or
12
+ * no role, and refused.
13
+ * - `GET /wake_compute?endpointish`: the compute's address, once it accepts connections,
14
+ * woken first if it sleeps (./service.ts).
15
+ *
16
+ * A compute sleeps when no client has had a session on it for its `suspendAfter`, which
17
+ * neon-control counts on the compute itself: so a session holding an advisory lock, idle,
18
+ * keeps it awake, as compute_ctl's own activity monitor would not, and so does one opened
19
+ * and closed between two counts, and a wake asked for since, which a connection, or
20
+ * alasio's command line, is about to use.
21
+ */
22
+ import { COMPUTE_PORT } from "./branches.js";
23
+ /** The annotation of a compute's Deployment saying how many seconds it may be idle before it sleeps (./computes.ts). */
24
+ export const SUSPEND_AFTER = "alasio.dev/suspend-after-seconds";
25
+ /** The query of a proxy's call, at `url`, or null when it names no endpoint. */
26
+ export function proxyQuery(url) {
27
+ const { searchParams } = new URL(url, "http://neon-control");
28
+ const endpoint = searchParams.get("endpointish");
29
+ return endpoint ? { endpoint, role: searchParams.get("role") } : null;
30
+ }
31
+ /**
32
+ * The verifier `role` authenticates with on a branch's compute, given its `credentials`:
33
+ * of main's, which has none of its own, `mainVerifiers`' (the stack's); of any other, its
34
+ * own; null for a role neither has, as neon-control's own role, which no client connects
35
+ * as.
36
+ */
37
+ export function roleSecret(credentials, role, mainVerifiers) {
38
+ const verifiers = credentials?.verifiers ?? mainVerifiers;
39
+ return Object.hasOwn(verifiers, role) ? verifiers[role] ?? null : null;
40
+ }
41
+ /**
42
+ * Neon's error, as the proxy reads one (ControlPlaneErrorMessage): `reason` decides
43
+ * whether it asks again, ENDPOINT_IDLE among those it does, after the given delay.
44
+ */
45
+ export function controlPlaneError(reason, message, retryDelayMs = null) {
46
+ return {
47
+ error: message,
48
+ status: {
49
+ code: reason,
50
+ message,
51
+ details: {
52
+ error_info: { reason },
53
+ retry_info: retryDelayMs === null ? null : { retry_delay_ms: retryDelayMs },
54
+ user_facing_message: { message },
55
+ },
56
+ },
57
+ };
58
+ }
59
+ /** Where a compute is, as the proxy connects to it: its Service in `namespace`, which takes connections before the pod is ready. */
60
+ export const computeAddress = (service, namespace) => `${service}.${namespace}.svc.cluster.local:${COMPUTE_PORT}`;
61
+ /** What `wake_compute` answers: the compute of the branch `branch`'s address, and labels for the proxy's metrics. */
62
+ export function woken(address, branch, endpoint, cold) {
63
+ return {
64
+ address,
65
+ aux: { endpoint_id: endpoint, project_id: "alasio", branch_id: branch, compute_id: endpoint, cold_start_info: cold ? "pool_miss" : "warm" },
66
+ };
67
+ }
68
+ /**
69
+ * A compute's idleness, given what it was (none before the first count), its `use`
70
+ * counted now, and the time: used while a session is open, or one was established, or a
71
+ * wake asked for, since the last count; idle from the first count that finds none of
72
+ * them.
73
+ */
74
+ export function idleness(previous, use, now) {
75
+ const used = use.sessions > 0 || (previous !== undefined && (use.established !== previous.established || use.wokenAt !== previous.wokenAt));
76
+ return { since: used ? null : previous?.since ?? now, established: use.established, wokenAt: use.wokenAt };
77
+ }
78
+ /** Whether a compute idle as `idle` says has been idle for `suspendAfterMs` by `now`. */
79
+ export const suspendDue = ({ since }, now, suspendAfterMs) => since !== null && now - since >= suspendAfterMs;
80
+ /**
81
+ * Wakes a compute, as `steps` read it and act: records the wake asked for, and scales a
82
+ * compute that sleeps to one under its lock, once the pod put to sleep is gone, read
83
+ * again under it, as a sleep may have ended meanwhile; then waits until it takes
84
+ * connections. One found running needs no lock, but a sleep may then have scaled it
85
+ * down: one that counted it again before the wake was recorded, its scale to none
86
+ * landing after the compute was read. So while it takes none, the compute is read again,
87
+ * and one found asleep woken likewise. Whether it slept.
88
+ */
89
+ export async function wakeCompute(steps) {
90
+ const first = await steps.deployment();
91
+ await steps.asked();
92
+ const scaled = () => steps.locked(async () => {
93
+ const now = await steps.deployment();
94
+ if (now.replicas > 0)
95
+ return false;
96
+ await steps.untilGone(now);
97
+ await steps.scaleUp();
98
+ return true;
99
+ });
100
+ let slept = first.replicas === 0 && await scaled();
101
+ while (!(await steps.accepts())) {
102
+ if ((await steps.deployment()).replicas === 0)
103
+ slept = (await scaled()) || slept;
104
+ await steps.pause();
105
+ }
106
+ return slept;
107
+ }
108
+ /** The bytes from LSN `from` to LSN `to` (each `<high>/<low>` in hexadecimal, as Postgres writes one), 0 where `to` is not past `from`. */
109
+ export function lsnDistance(from, to) {
110
+ const bytes = (lsn) => {
111
+ const [high = "0", low = "0"] = lsn.split("/");
112
+ return (BigInt(`0x${high}`) << 32n) + BigInt(`0x${low}`);
113
+ };
114
+ const distance = bytes(to) - bytes(from);
115
+ return distance > 0n ? Number(distance) : 0;
116
+ }
117
+ //# sourceMappingURL=endpoints.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"endpoints.js","sourceRoot":"","sources":["../../../../neon/control/endpoints.ts"],"names":[],"mappings":"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"}
@@ -16,16 +16,29 @@ export function generateKeyPair() {
16
16
  });
17
17
  return { privateKeyPem: privateKey, publicKeyPem: publicKey };
18
18
  }
19
+ /** A token of `claims`, signed with `privateKeyPem`. */
20
+ function signClaims(privateKeyPem, claims) {
21
+ const unsigned = `${HEADER}.${base64url(JSON.stringify(claims))}`;
22
+ const signature = sign(null, Buffer.from(unsigned), createPrivateKey(privateKeyPem));
23
+ return `${unsigned}.${signature.toString("base64url")}`;
24
+ }
19
25
  /**
20
26
  * A token for `scope` (tenant, pageserverapi, safekeeperdata,
21
27
  * generations_api, admin, infra, ...), limited to `tenantId` if given.
22
28
  */
23
29
  export function signToken(privateKeyPem, scope, tenantId = null) {
24
30
  const claims = tenantId ? { scope, tenant_id: tenantId } : { scope };
25
- const unsigned = `${HEADER}.${base64url(JSON.stringify(claims))}`;
26
- const signature = sign(null, Buffer.from(unsigned), createPrivateKey(privateKeyPem));
27
- return `${unsigned}.${signature.toString("base64url")}`;
31
+ return signClaims(privateKeyPem, claims);
28
32
  }
33
+ /** How long a token for compute_ctl's API lasts: the calls it is made for. */
34
+ const COMPUTE_CTL_TOKEN_SECONDS = 300;
35
+ /**
36
+ * A token for compute_ctl's API on the compute `computeId` alone, as its middleware takes
37
+ * one (compute_tools/src/http/middleware/authorize.rs at Neon's release-compute-9073):
38
+ * of no scope, naming the compute, verified with the key set its spec gave it, and good for
39
+ * the calls it is made for alone. No other service takes it, as it bears no scope.
40
+ */
41
+ export const computeCtlToken = (privateKeyPem, computeId, now = Date.now()) => signClaims(privateKeyPem, { compute_id: computeId, exp: Math.floor(now / 1000) + COMPUTE_CTL_TOKEN_SECONDS });
29
42
  /** The claims of `token` if `publicKeyPem` signed it, else null. */
30
43
  export function verifyToken(publicKeyPem, token) {
31
44
  const [header, claims, signature, ...rest] = String(token).split(".");
@@ -1 +1 @@
1
- {"version":3,"file":"jwt.js","sourceRoot":"","sources":["../../../../neon/control/jwt.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"jwt.js","sourceRoot":"","sources":["../../../../neon/control/jwt.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,22 @@
1
1
  /**
2
2
  * A Postgres SCRAM-SHA-256 password verifier (RFC 5802, 7677), in the form
3
3
  * Postgres stores and compute_ctl passes through as a role's
4
- * encrypted_password: the password itself never reaches the compute's spec.
4
+ * encrypted_password: the password itself never reaches the compute's spec. Each is
5
+ * salted at random, as Postgres salts one, and made once: whoever sets a role's
6
+ * password (a compute's spec, alasio) and whoever answers for it (neon-control, to
7
+ * Neon's proxy, which authenticates a client with the keys of the verifier it is
8
+ * answered) are given the one verifier, which the compute must store to the byte.
5
9
  */
6
10
  import { createHash, createHmac, pbkdf2Sync, randomBytes } from "node:crypto";
7
11
  const ITERATIONS = 4096;
12
+ /**
13
+ * A verifier as Postgres stores one: its iterations, its salt, and the 32-byte StoredKey
14
+ * and ServerKey, each in base64. Nothing else, so one checked to be one may be written
15
+ * into a statement that sets a role's password.
16
+ */
17
+ const VERIFIER = /^SCRAM-SHA-256\$[1-9][0-9]*:[A-Za-z0-9+/]+={0,2}\$[A-Za-z0-9+/]{43}=:[A-Za-z0-9+/]{43}=$/u;
18
+ /** Whether `text` is a SCRAM-SHA-256 verifier, in the form scramVerifier makes and Postgres stores. */
19
+ export const isScramVerifier = (text) => VERIFIER.test(text);
8
20
  export function scramVerifier(password, salt = randomBytes(16)) {
9
21
  const salted = pbkdf2Sync(Buffer.from(password, "utf8"), salt, ITERATIONS, 32, "sha256");
10
22
  const clientKey = createHmac("sha256", salted).update("Client Key").digest();
@@ -1 +1 @@
1
- {"version":3,"file":"scram.js","sourceRoot":"","sources":["../../../../neon/control/scram.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE9E,MAAM,UAAU,GAAG,IAAI,CAAC;AAExB,MAAM,UAAU,aAAa,CAAC,QAAgB,EAAE,IAAI,GAAW,WAAW,CAAC,EAAE,CAAC;IAC5E,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;IACzF,MAAM,SAAS,GAAG,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE,CAAC;IAC7E,MAAM,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,CAAC;IAClE,MAAM,SAAS,GAAG,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE,CAAC;IAC7E,OAAO,iBAAiB,UAAU,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;AAClI,CAAC"}
1
+ {"version":3,"file":"scram.js","sourceRoot":"","sources":["../../../../neon/control/scram.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE9E,MAAM,UAAU,GAAG,IAAI,CAAC;AAExB;;;;GAIG;AACH,MAAM,QAAQ,GAAG,2FAA2F,CAAC;AAE7G,uGAAuG;AACvG,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,IAAY,EAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAE9E,MAAM,UAAU,aAAa,CAAC,QAAgB,EAAE,IAAI,GAAW,WAAW,CAAC,EAAE,CAAC;IAC5E,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;IACzF,MAAM,SAAS,GAAG,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE,CAAC;IAC7E,MAAM,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,CAAC;IAClE,MAAM,SAAS,GAAG,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE,CAAC;IAC7E,OAAO,iBAAiB,UAAU,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;AAClI,CAAC"}