alasio 4.2.0 → 5.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 (63) hide show
  1. package/dist/cli/src/branches.js +295 -0
  2. package/dist/cli/src/branches.js.map +1 -0
  3. package/dist/cli/src/commands/branch.js +112 -0
  4. package/dist/cli/src/commands/branch.js.map +1 -0
  5. package/dist/cli/src/commands/common.js +27 -8
  6. package/dist/cli/src/commands/common.js.map +1 -1
  7. package/dist/cli/src/commands/grafana.js +72 -0
  8. package/dist/cli/src/commands/grafana.js.map +1 -0
  9. package/dist/cli/src/commands/init.js +6 -5
  10. package/dist/cli/src/commands/init.js.map +1 -1
  11. package/dist/cli/src/commands/lake.js +18 -4
  12. package/dist/cli/src/commands/lake.js.map +1 -1
  13. package/dist/cli/src/commands/login.js +12 -7
  14. package/dist/cli/src/commands/login.js.map +1 -1
  15. package/dist/cli/src/commands/logs.js +12 -6
  16. package/dist/cli/src/commands/logs.js.map +1 -1
  17. package/dist/cli/src/commands/uninstall.js +16 -1
  18. package/dist/cli/src/commands/uninstall.js.map +1 -1
  19. package/dist/cli/src/commands.js +3 -1
  20. package/dist/cli/src/commands.js.map +1 -1
  21. package/dist/cli/src/kube/api.js +35 -2
  22. package/dist/cli/src/kube/api.js.map +1 -1
  23. package/dist/cli/src/kube/apply.js +21 -8
  24. package/dist/cli/src/kube/apply.js.map +1 -1
  25. package/dist/cli/src/manifests/alasio.js +143 -74
  26. package/dist/cli/src/manifests/alasio.js.map +1 -1
  27. package/dist/cli/src/manifests/branch.js +45 -0
  28. package/dist/cli/src/manifests/branch.js.map +1 -0
  29. package/dist/cli/src/manifests/collector.js +199 -0
  30. package/dist/cli/src/manifests/collector.js.map +1 -0
  31. package/dist/cli/src/manifests/common.js +44 -11
  32. package/dist/cli/src/manifests/common.js.map +1 -1
  33. package/dist/cli/src/manifests/config.js +33 -19
  34. package/dist/cli/src/manifests/config.js.map +1 -1
  35. package/dist/cli/src/manifests/grafana.js +81 -0
  36. package/dist/cli/src/manifests/grafana.js.map +1 -0
  37. package/dist/cli/src/manifests/index.js +6 -1
  38. package/dist/cli/src/manifests/index.js.map +1 -1
  39. package/dist/cli/src/manifests/juicefs-csi.js +11 -5
  40. package/dist/cli/src/manifests/juicefs-csi.js.map +1 -1
  41. package/dist/cli/src/manifests/lake.js +66 -18
  42. package/dist/cli/src/manifests/lake.js.map +1 -1
  43. package/dist/cli/src/manifests/neon.js +24 -154
  44. package/dist/cli/src/manifests/neon.js.map +1 -1
  45. package/dist/cli/src/manifests/network-policies.js +141 -38
  46. package/dist/cli/src/manifests/network-policies.js.map +1 -1
  47. package/dist/cli/src/manifests/workspace-storage.js +98 -29
  48. package/dist/cli/src/manifests/workspace-storage.js.map +1 -1
  49. package/dist/cli/src/release.js +6 -5
  50. package/dist/cli/src/release.js.map +1 -1
  51. package/dist/neon/control/branches.js +292 -0
  52. package/dist/neon/control/branches.js.map +1 -0
  53. package/dist/neon/control/jwt.js +58 -0
  54. package/dist/neon/control/jwt.js.map +1 -0
  55. package/dist/neon/control/scram.js +15 -0
  56. package/dist/neon/control/scram.js.map +1 -0
  57. package/dist/neon/control/secrets.js +111 -0
  58. package/dist/neon/control/secrets.js.map +1 -0
  59. package/dist/src/branch/names.js +18 -0
  60. package/dist/src/branch/names.js.map +1 -0
  61. package/dist/src/kube/config.js +14 -1
  62. package/dist/src/kube/config.js.map +1 -1
  63. package/package.json +1 -1
@@ -0,0 +1,58 @@
1
+ /**
2
+ * The tokens Neon's services authenticate each other with: EdDSA JWTs with a
3
+ * scope, and a tenant for tenant-scoped ones, with no expiry, as Neon issues
4
+ * them (libs/utils/src/auth.rs).
5
+ */
6
+ import { createPrivateKey, createPublicKey, generateKeyPairSync, sign, verify } from "node:crypto";
7
+ const HEADER = base64url(JSON.stringify({ alg: "EdDSA", typ: "JWT" }));
8
+ function base64url(value) {
9
+ return Buffer.from(value).toString("base64url");
10
+ }
11
+ /** A new Ed25519 keypair, as PEM. */
12
+ export function generateKeyPair() {
13
+ const { privateKey, publicKey } = generateKeyPairSync("ed25519", {
14
+ privateKeyEncoding: { type: "pkcs8", format: "pem" },
15
+ publicKeyEncoding: { type: "spki", format: "pem" },
16
+ });
17
+ return { privateKeyPem: privateKey, publicKeyPem: publicKey };
18
+ }
19
+ /**
20
+ * A token for `scope` (tenant, pageserverapi, safekeeperdata,
21
+ * generations_api, admin, infra, ...), limited to `tenantId` if given.
22
+ */
23
+ export function signToken(privateKeyPem, scope, tenantId = null) {
24
+ 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")}`;
28
+ }
29
+ /** The claims of `token` if `publicKeyPem` signed it, else null. */
30
+ export function verifyToken(publicKeyPem, token) {
31
+ const [header, claims, signature, ...rest] = String(token).split(".");
32
+ if (claims === undefined || signature === undefined || rest.length !== 0 || header !== HEADER)
33
+ return null;
34
+ const valid = verify(null, Buffer.from(`${header}.${claims}`), createPublicKey(publicKeyPem), Buffer.from(signature, "base64url"));
35
+ if (!valid)
36
+ return null;
37
+ try {
38
+ // Signed with the stack's key, so made by signToken.
39
+ const parsed = JSON.parse(Buffer.from(claims, "base64url").toString("utf8"));
40
+ return parsed;
41
+ }
42
+ catch {
43
+ return null;
44
+ }
45
+ }
46
+ /** Whether `authorization`, an HTTP Authorization header, bears a token `publicKeyPem` signed for one of `scopes`. */
47
+ export function bearsScope(publicKeyPem, authorization, ...scopes) {
48
+ if (!authorization?.startsWith("Bearer "))
49
+ return false;
50
+ const scope = verifyToken(publicKeyPem, authorization.slice("Bearer ".length))?.scope;
51
+ return scope !== undefined && scopes.includes(scope);
52
+ }
53
+ /** The public key as a JWK set, which compute_ctl verifies its API's tokens with. */
54
+ export function publicJwks(publicKeyPem) {
55
+ const jwk = createPublicKey(publicKeyPem).export({ format: "jwk" });
56
+ return { keys: [{ ...jwk, use: "sig", key_ops: ["verify"], alg: "EdDSA", kid: "alasio-neon" }] };
57
+ }
58
+ //# sourceMappingURL=jwt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt.js","sourceRoot":"","sources":["../../../../neon/control/jwt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * A Postgres SCRAM-SHA-256 password verifier (RFC 5802, 7677), in the form
3
+ * Postgres stores and compute_ctl passes through as a role's
4
+ * encrypted_password: the password itself never reaches the compute's spec.
5
+ */
6
+ import { createHash, createHmac, pbkdf2Sync, randomBytes } from "node:crypto";
7
+ const ITERATIONS = 4096;
8
+ export function scramVerifier(password, salt = randomBytes(16)) {
9
+ const salted = pbkdf2Sync(Buffer.from(password, "utf8"), salt, ITERATIONS, 32, "sha256");
10
+ const clientKey = createHmac("sha256", salted).update("Client Key").digest();
11
+ const storedKey = createHash("sha256").update(clientKey).digest();
12
+ const serverKey = createHmac("sha256", salted).update("Server Key").digest();
13
+ return `SCRAM-SHA-256$${ITERATIONS}:${salt.toString("base64")}$${storedKey.toString("base64")}:${serverKey.toString("base64")}`;
14
+ }
15
+ //# sourceMappingURL=scram.js.map
@@ -0,0 +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"}
@@ -0,0 +1,111 @@
1
+ /**
2
+ * The secrets alasio's Neon runs on, and the configuration rendered from them, for the
3
+ * setup job (./kube-setup.ts): made once and kept, completed when a deployment predates
4
+ * one, never rotated.
5
+ */
6
+ import { randomBytes, randomUUID } from "node:crypto";
7
+ export const PAGESERVER_ID = 1;
8
+ export const DATABASE = "alasio";
9
+ export const ROLE = "alasio";
10
+ function hexId() {
11
+ return randomUUID().replaceAll("-", "");
12
+ }
13
+ function secret() {
14
+ return randomBytes(24).toString("base64url");
15
+ }
16
+ /**
17
+ * The stack's secrets, `existing` completed: made on first run and then only added to,
18
+ * never rotated. Each secret has a maker, and any absent is filled in, so a deployment
19
+ * that predates a new secret gains it on the next install or upgrade without disturbing
20
+ * the rest. Returns `{ secrets, changed }`.
21
+ */
22
+ export function completeSecrets(existing = {}) {
23
+ const stored = structuredClone(existing);
24
+ let changed = false;
25
+ const kept = (value, make) => {
26
+ if (value !== undefined)
27
+ return value;
28
+ changed = true;
29
+ return make();
30
+ };
31
+ // A secret already held keeps its place; one made is added after them, in this order.
32
+ const s3 = kept(stored.s3, () => ({}));
33
+ const secrets = {
34
+ ...stored,
35
+ tenantId: kept(stored.tenantId, () => hexId()),
36
+ timelineId: kept(stored.timelineId, () => hexId()),
37
+ s3: {
38
+ ...s3,
39
+ neon: kept(s3.neon, () => ({ accessKey: `neon${hexId().slice(0, 12)}`, secretKey: secret() })),
40
+ admin: kept(s3.admin, () => ({ accessKey: `admin${hexId().slice(0, 12)}`, secretKey: secret() })),
41
+ lake: kept(s3.lake, () => ({ accessKey: `lake${hexId().slice(0, 12)}`, secretKey: secret() })),
42
+ lakeReader: kept(s3.lakeReader, () => ({ accessKey: `lakereader${hexId().slice(0, 12)}`, secretKey: secret() })),
43
+ workspaces: kept(s3.workspaces, () => ({ accessKey: `workspaces${hexId().slice(0, 12)}`, secretKey: secret() })),
44
+ },
45
+ controllerDbPassword: kept(stored.controllerDbPassword, () => secret()),
46
+ alasioPassword: kept(stored.alasioPassword, () => secret()),
47
+ lakePassword: kept(stored.lakePassword, () => secret()),
48
+ computeControlToken: kept(stored.computeControlToken, () => secret()),
49
+ valkeyPassword: kept(stored.valkeyPassword, () => secret()),
50
+ lakeReaderPassword: kept(stored.lakeReaderPassword, () => secret()),
51
+ lakeQueryToken: kept(stored.lakeQueryToken, () => secret()),
52
+ grafanaPassword: kept(stored.grafanaPassword, () => secret()),
53
+ grafanaAdminPassword: kept(stored.grafanaAdminPassword, () => secret()),
54
+ grafanaSecretKey: kept(stored.grafanaSecretKey, () => secret()),
55
+ branchForkKey: kept(stored.branchForkKey, () => secret()),
56
+ };
57
+ return { secrets, changed };
58
+ }
59
+ function toml(value) {
60
+ return `'${String(value).replaceAll("'", "")}'`;
61
+ }
62
+ /** Neon's S3 settings, under `prefix` of `bucket` at `endpoint`, as a TOML inline table. */
63
+ export function remoteStorage(prefix, { endpoint, bucket, region = "us-east-1" }) {
64
+ return `{ endpoint="${endpoint}", bucket_name="${bucket}", bucket_region="${region}", prefix_in_bucket="${prefix}" }`;
65
+ }
66
+ /**
67
+ * SeaweedFS's S3 identities: Neon, the lake and, when it is on, workspace storage, each
68
+ * on their own bucket of `buckets`; the lake's reader, which may only read the lake's;
69
+ * and an admin, which makes the buckets and keeps the backups.
70
+ */
71
+ export function s3Identities(secrets, buckets) {
72
+ const on = (name) => [`Read:${name}`, `List:${name}`, `Tagging:${name}`, `Write:${name}`];
73
+ return {
74
+ identities: [
75
+ { name: "neon", credentials: [secrets.s3.neon], actions: on(buckets.neon) },
76
+ { name: "admin", credentials: [secrets.s3.admin], actions: ["Admin", "Read", "List", "Tagging", "Write"] },
77
+ // Branch environments' lakes are given it too: a branch's lake reads main's files where they are (DuckLake keeps
78
+ // every file's path relative to one data path) and writes beside them, and SeaweedFS's Write, which writing
79
+ // needs, deletes as well, so it cannot be narrowed to a branch's own files (cli/src/branches.ts).
80
+ { name: "lake", credentials: [secrets.s3.lake], actions: on(buckets.lake) },
81
+ { name: "lakeReader", credentials: [secrets.s3.lakeReader], actions: [`Read:${buckets.lake}`, `List:${buckets.lake}`] },
82
+ ...(buckets.workspaces === null ? [] : [{ name: "workspaces", credentials: [secrets.s3.workspaces], actions: on(buckets.workspaces) }]),
83
+ ],
84
+ };
85
+ }
86
+ /**
87
+ * The pageserver's configuration: where the broker and the storage controller are, its
88
+ * remote storage, and the token it calls the controller with. Its key is read from
89
+ * `publicKeyPath`.
90
+ */
91
+ export function pageserverToml({ brokerUrl, controllerUrl, token, publicKeyPath, storage }) {
92
+ return [
93
+ `broker_endpoint=${toml(brokerUrl)}`,
94
+ `pg_distrib_dir=${toml("/usr/local/")}`,
95
+ `listen_pg_addr=${toml("0.0.0.0:6400")}`,
96
+ `listen_http_addr=${toml("0.0.0.0:9898")}`,
97
+ `availability_zone=${toml("az-pageserver")}`,
98
+ `control_plane_api=${toml(`${controllerUrl}/upcall/v1/`)}`,
99
+ `control_plane_api_token=${toml(token)}`,
100
+ `http_auth_type='NeonJWT'`,
101
+ `pg_auth_type='NeonJWT'`,
102
+ `auth_validation_public_key_path=${toml(publicKeyPath)}`,
103
+ `remote_storage=${storage}`,
104
+ "",
105
+ ].join("\n");
106
+ }
107
+ /** How the storage controller and computes reach the pageserver at `host`; it registers itself with these. */
108
+ export function pageserverMetadata(host) {
109
+ return JSON.stringify({ host, port: 6400, http_host: host, http_port: 9898, availability_zone_id: "az-pageserver" }) + "\n";
110
+ }
111
+ //# sourceMappingURL=secrets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secrets.js","sourceRoot":"","sources":["../../../../neon/control/secrets.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * What a branch environment is called, and what it is known by, as alasio and its command
3
+ * line both say it: its namespaces, the port its parent forks its sessions on, and its
4
+ * token to ask with (./fork.ts). Free of anything but Node's own, so the command line
5
+ * takes it without the server.
6
+ */
7
+ import { createHmac } from "node:crypto";
8
+ /** The port an alasio forks its sessions for its branch environments on. */
9
+ export const BRANCH_FORK_PORT = 4319;
10
+ /** The namespace of the branch environment `branch`: its alasio, its compute and its lake, and their Secrets. */
11
+ export const branchNamespace = (branch) => `alasio-branch-${branch}`;
12
+ /** The namespace of the branch environment `branch`'s sessions. */
13
+ export const branchSessionsNamespace = (branch) => `${branchNamespace(branch)}-sessions`;
14
+ /** The token the branch `branch` forks its parent's sessions with: `key`'s HMAC of its name. */
15
+ export function forkToken(key, branch) {
16
+ return createHmac("sha256", key).update(`alasio-branch-fork:${branch}`).digest("base64url");
17
+ }
18
+ //# sourceMappingURL=names.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"names.js","sourceRoot":"","sources":["../../../../src/branch/names.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,4EAA4E;AAC5E,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAErC,iHAAiH;AACjH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,MAAc,EAAU,EAAE,CAAC,iBAAiB,MAAM,EAAE,CAAC;AAErF,mEAAmE;AACnE,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,MAAc,EAAU,EAAE,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC,WAAW,CAAC;AAEzG,gGAAgG;AAChG,MAAM,UAAU,SAAS,CAAC,GAAW,EAAE,MAAc;IACnD,OAAO,UAAU,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,sBAAsB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AAC9F,CAAC"}
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * {
7
7
  * "sessions": { "namespace", "port", "workspaceDir", "egressGate", "fullModeNameservers",
8
- * "mountPodNamespace", "podTemplate", "volumeClaimTemplates" },
8
+ * "mountPodNamespace", "podTemplate", "volumeClaimTemplates", "clone" },
9
9
  * "host": { "namespace", "port", "stateRoot", "podTemplate" }
10
10
  * }
11
11
  *
@@ -38,6 +38,17 @@ const Path = said(Schema.String, "must be a path");
38
38
  */
39
39
  const PodTemplate = said(Schema.declare((value) => Predicate.isObject(value)), "must be an object").pipe(Schema.withDecodingDefaultKey(Effect.succeed({})));
40
40
  const VolumeClaimTemplates = said(Schema.Array(Schema.declare((value) => Predicate.isObject(value))), "must be a list of volume claim templates");
41
+ /**
42
+ * How a session's volume is cloned (cloneJob in cli/src/manifests/workspace-storage.ts):
43
+ * the name of the volume's claim template, and the Job that clones one claim of it into
44
+ * another, given the claims' namespaces and names as `SOURCE_NAMESPACE`, `SOURCE_CLAIM`,
45
+ * `DESTINATION_NAMESPACE` and `DESTINATION_CLAIM`. The Job is a Kubernetes object the
46
+ * installation gives, which the API server checks as each is made.
47
+ */
48
+ const Clone = said(Schema.Struct({
49
+ claimTemplate: said(Schema.NonEmptyString, "must be a claim template's name"),
50
+ job: said(Schema.declare((value) => Predicate.isObject(value)), "must be an object"),
51
+ }), "must be an object");
41
52
  /** Whether `podTemplate`, as the installation gives it, runs a container named `bayma`. */
42
53
  function runsBayma(podTemplate) {
43
54
  const containers = Predicate.hasProperty(podTemplate, "spec") && Predicate.hasProperty(podTemplate.spec, "containers")
@@ -64,6 +75,8 @@ const SessionsProfile = said(Schema.Struct({
64
75
  */
65
76
  mountPodNamespace: Schema.optional(Schema.NullOr(Namespace)),
66
77
  volumeClaimTemplates: Schema.optional(VolumeClaimTemplates),
78
+ /** How a session's volume is cloned, where its storage can; none where it cannot, and sessions are not forked. */
79
+ clone: Schema.optional(Schema.NullOr(Clone)),
67
80
  }), "must be an object").check(Schema.makeFilter((profile) => (runsBayma(profile.podTemplate) ? undefined : baymaIssue)));
68
81
  /** The template of folder workspaces' bayma (hostProfile in cli/src/manifests/alasio.ts). */
69
82
  const HostProfile = said(Schema.Struct({
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../src/kube/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../src/kube/config.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "alasio",
3
- "version": "4.2.0",
3
+ "version": "5.0.0",
4
4
  "description": "alasio: coding agents you talk to from Telegram, installed and run with npx alasio",
5
5
  "type": "module",
6
6
  "license": "MIT",