alasio 9.0.0 → 10.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. package/dist/cli/src/bound-harnesses.js +98 -0
  2. package/dist/cli/src/bound-harnesses.js.map +1 -0
  3. package/dist/cli/src/branches.js +30 -14
  4. package/dist/cli/src/branches.js.map +1 -1
  5. package/dist/cli/src/cluster/docker.js +21 -11
  6. package/dist/cli/src/cluster/docker.js.map +1 -1
  7. package/dist/cli/src/cluster/host.js +5 -1
  8. package/dist/cli/src/cluster/host.js.map +1 -1
  9. package/dist/cli/src/cluster/k3s.js +68 -3
  10. package/dist/cli/src/cluster/k3s.js.map +1 -1
  11. package/dist/cli/src/cluster/node.js +47 -13
  12. package/dist/cli/src/cluster/node.js.map +1 -1
  13. package/dist/cli/src/cluster/stargz.js +40 -3
  14. package/dist/cli/src/cluster/stargz.js.map +1 -1
  15. package/dist/cli/src/commands/common.js +2 -2
  16. package/dist/cli/src/commands/common.js.map +1 -1
  17. package/dist/cli/src/commands/lake.js +1 -1
  18. package/dist/cli/src/commands/lake.js.map +1 -1
  19. package/dist/cli/src/commands/login-relay.js +91 -0
  20. package/dist/cli/src/commands/login-relay.js.map +1 -0
  21. package/dist/cli/src/commands/login.js +11 -10
  22. package/dist/cli/src/commands/login.js.map +1 -1
  23. package/dist/cli/src/commands/logs.js +89 -6
  24. package/dist/cli/src/commands/logs.js.map +1 -1
  25. package/dist/cli/src/commands/restart.js +10 -4
  26. package/dist/cli/src/commands/restart.js.map +1 -1
  27. package/dist/cli/src/commands/restore-filer-store.js +27 -10
  28. package/dist/cli/src/commands/restore-filer-store.js.map +1 -1
  29. package/dist/cli/src/commands/status.js +59 -12
  30. package/dist/cli/src/commands/status.js.map +1 -1
  31. package/dist/cli/src/commands/up.js +9 -6
  32. package/dist/cli/src/commands/up.js.map +1 -1
  33. package/dist/cli/src/commands/upgrade.js +14 -5
  34. package/dist/cli/src/commands/upgrade.js.map +1 -1
  35. package/dist/cli/src/folders.js +9 -13
  36. package/dist/cli/src/folders.js.map +1 -1
  37. package/dist/cli/src/gateway-calls.js +14 -8
  38. package/dist/cli/src/gateway-calls.js.map +1 -1
  39. package/dist/cli/src/install.js +7 -41
  40. package/dist/cli/src/install.js.map +1 -1
  41. package/dist/cli/src/kube/api.js +59 -12
  42. package/dist/cli/src/kube/api.js.map +1 -1
  43. package/dist/cli/src/kube/apply.js +107 -9
  44. package/dist/cli/src/kube/apply.js.map +1 -1
  45. package/dist/cli/src/kube/object-store-scale.js +10 -7
  46. package/dist/cli/src/kube/object-store-scale.js.map +1 -1
  47. package/dist/cli/src/kube/rollout.js +16 -6
  48. package/dist/cli/src/kube/rollout.js.map +1 -1
  49. package/dist/cli/src/main.js +2 -1
  50. package/dist/cli/src/main.js.map +1 -1
  51. package/dist/cli/src/manifests/admission.js +228 -11
  52. package/dist/cli/src/manifests/admission.js.map +1 -1
  53. package/dist/cli/src/manifests/alasio.js +151 -63
  54. package/dist/cli/src/manifests/alasio.js.map +1 -1
  55. package/dist/cli/src/manifests/branch.js +6 -1
  56. package/dist/cli/src/manifests/branch.js.map +1 -1
  57. package/dist/cli/src/manifests/codex-login.js +101 -0
  58. package/dist/cli/src/manifests/codex-login.js.map +1 -0
  59. package/dist/cli/src/manifests/collector.js +26 -21
  60. package/dist/cli/src/manifests/collector.js.map +1 -1
  61. package/dist/cli/src/manifests/common.js +50 -23
  62. package/dist/cli/src/manifests/common.js.map +1 -1
  63. package/dist/cli/src/manifests/config.js +79 -30
  64. package/dist/cli/src/manifests/config.js.map +1 -1
  65. package/dist/cli/src/manifests/disruption.js +8 -3
  66. package/dist/cli/src/manifests/disruption.js.map +1 -1
  67. package/dist/cli/src/manifests/folders.js +8 -5
  68. package/dist/cli/src/manifests/folders.js.map +1 -1
  69. package/dist/cli/src/manifests/harness-pools.js +236 -0
  70. package/dist/cli/src/manifests/harness-pools.js.map +1 -0
  71. package/dist/cli/src/manifests/image-holder.js +61 -0
  72. package/dist/cli/src/manifests/image-holder.js.map +1 -0
  73. package/dist/cli/src/manifests/index.js +6 -2
  74. package/dist/cli/src/manifests/index.js.map +1 -1
  75. package/dist/cli/src/manifests/keda.js +4 -2
  76. package/dist/cli/src/manifests/keda.js.map +1 -1
  77. package/dist/cli/src/manifests/lake.js +1 -17
  78. package/dist/cli/src/manifests/lake.js.map +1 -1
  79. package/dist/cli/src/manifests/log.js +63 -16
  80. package/dist/cli/src/manifests/log.js.map +1 -1
  81. package/dist/cli/src/manifests/neon.js +57 -77
  82. package/dist/cli/src/manifests/neon.js.map +1 -1
  83. package/dist/cli/src/manifests/network-policies.js +111 -39
  84. package/dist/cli/src/manifests/network-policies.js.map +1 -1
  85. package/dist/cli/src/manifests/node-agent.js +39 -19
  86. package/dist/cli/src/manifests/node-agent.js.map +1 -1
  87. package/dist/cli/src/manifests/object-store.js +98 -24
  88. package/dist/cli/src/manifests/object-store.js.map +1 -1
  89. package/dist/cli/src/manifests/sandbox-gateway.js +147 -46
  90. package/dist/cli/src/manifests/sandbox-gateway.js.map +1 -1
  91. package/dist/cli/src/manifests/scalers.js +5 -4
  92. package/dist/cli/src/manifests/scalers.js.map +1 -1
  93. package/dist/cli/src/manifests/sizing.js +1 -1
  94. package/dist/cli/src/manifests/sizing.js.map +1 -1
  95. package/dist/cli/src/manifests/valkey.js +19 -5
  96. package/dist/cli/src/manifests/valkey.js.map +1 -1
  97. package/dist/cli/src/manifests/volume-lock.js +43 -0
  98. package/dist/cli/src/manifests/volume-lock.js.map +1 -0
  99. package/dist/cli/src/manifests/vpa.js +12 -1
  100. package/dist/cli/src/manifests/vpa.js.map +1 -1
  101. package/dist/cli/src/manifests/workspace-storage.js +19 -16
  102. package/dist/cli/src/manifests/workspace-storage.js.map +1 -1
  103. package/dist/cli/src/neon-storage.js +0 -2
  104. package/dist/cli/src/neon-storage.js.map +1 -1
  105. package/dist/cli/src/release.js +9 -9
  106. package/dist/cli/src/release.js.map +1 -1
  107. package/dist/cli/src/target.js +2 -2
  108. package/dist/cli/src/target.js.map +1 -1
  109. package/dist/cli/src/telegram.js +13 -4
  110. package/dist/cli/src/telegram.js.map +1 -1
  111. package/dist/cli/src/wakes.js +68 -0
  112. package/dist/cli/src/wakes.js.map +1 -0
  113. package/dist/cli/src/webhook.js +5 -2
  114. package/dist/cli/src/webhook.js.map +1 -1
  115. package/dist/cluster/node/pins.json +6 -5
  116. package/dist/neon/control/branches.js +11 -4
  117. package/dist/neon/control/branches.js.map +1 -1
  118. package/dist/neon/control/endpoints.js +81 -10
  119. package/dist/neon/control/endpoints.js.map +1 -1
  120. package/dist/neon/control/secrets.js +11 -6
  121. package/dist/neon/control/secrets.js.map +1 -1
  122. package/dist/src/binder/bindings.js +195 -0
  123. package/dist/src/binder/bindings.js.map +1 -0
  124. package/dist/src/binder/names.js +30 -0
  125. package/dist/src/binder/names.js.map +1 -1
  126. package/dist/src/binder/tokens.js +17 -4
  127. package/dist/src/binder/tokens.js.map +1 -1
  128. package/dist/src/branch/names.js +10 -6
  129. package/dist/src/branch/names.js.map +1 -1
  130. package/dist/src/events/names.js +24 -3
  131. package/dist/src/events/names.js.map +1 -1
  132. package/dist/src/gateway/names.js +44 -5
  133. package/dist/src/gateway/names.js.map +1 -1
  134. package/dist/src/harness/names.js +18 -0
  135. package/dist/src/harness/names.js.map +1 -1
  136. package/dist/src/kube/client.js +212 -0
  137. package/dist/src/kube/client.js.map +1 -0
  138. package/dist/src/kube/sandbox-shape.js +6 -0
  139. package/dist/src/kube/sandbox-shape.js.map +1 -1
  140. package/dist/src/kube/started-map.js +12 -0
  141. package/dist/src/kube/started-map.js.map +1 -0
  142. package/dist/src/node-agent/names.js +16 -8
  143. package/dist/src/node-agent/names.js.map +1 -1
  144. package/dist/src/telegram/bot-commands.js +17 -0
  145. package/dist/src/telegram/bot-commands.js.map +1 -0
  146. package/dist/src/telegram/stop.js +12 -0
  147. package/dist/src/telegram/stop.js.map +1 -0
  148. package/package.json +1 -1
@@ -0,0 +1,195 @@
1
+ import { Clock, Effect } from "effect";
2
+ import { hasStatus, KubeClient } from "../kube/client.js";
3
+ import { BINDING_LABEL, boundAnnotations, boundLabels, FREE_LABEL, freeLabels, KEY_ANNOTATION, keyHash, leaseName, POOL_LABEL } from "./names.js";
4
+ /** The annotation of a binding's Lease while it is released: the releasing binder. */
5
+ export const RELEASING_ANNOTATION = "alasio.dev/releasing";
6
+ /** How long a binding under way may go unrenewed before another binder takes it over, by default. */
7
+ export const BINDING_TIMEOUT_MS = 60_000;
8
+ /** `ms`, as the API's MicroTime. */
9
+ const microTime = (ms) => `${new Date(ms).toISOString().slice(0, -1)}000Z`;
10
+ const selector = (labels) => Object.entries(labels).map(([label, value]) => `${label}=${value}`).join(",");
11
+ /** Whether `pod` runs, its containers started, and is not being deleted: free to be claimed, as it waits for what it is to serve. */
12
+ export const running = (pod) => !pod.metadata?.deletionTimestamp && pod.status?.phase === "Running";
13
+ /**
14
+ * Whether a container of `pod` ended, or was started again in it, as one whose rootfs failed
15
+ * under it does: a free pod so serves no binding, as what binds takes a bound pod whose container
16
+ * ended or started again for broken (src/gateway/sessions.ts, src/gateway/harnesses.ts hostEnded),
17
+ * and is never claimed, but deleted, for its Deployment to make another (reconcile).
18
+ */
19
+ export const restarted = (pod) => (pod.status?.containerStatuses ?? []).some(({ restartCount, state, lastState }) => restartCount > 0 || state?.terminated !== undefined || lastState?.terminated !== undefined);
20
+ /** Whether `pod` runs ready, and is not being deleted: serving its binding. */
21
+ export const serving = (pod) => running(pod) && (pod.status?.conditions ?? []).some(({ type, status }) => type === "Ready" && status === "True");
22
+ /** A Lease as the API holds it, by its key: null where there is none. */
23
+ export const readLease = Effect.fnUntraced(function* (pool, key) {
24
+ const kube = yield* KubeClient;
25
+ return (yield* kube.read("coordination.k8s.io/v1", "Lease", pool.namespace, leaseName(key)));
26
+ });
27
+ /** The Lease of a binding of `key` under way, by `binder`, renewed now. */
28
+ const leaseUnderWay = (pool, key, binder, now, staleMs) => ({
29
+ apiVersion: "coordination.k8s.io/v1",
30
+ kind: "Lease",
31
+ metadata: { name: leaseName(key), namespace: pool.namespace, labels: { [POOL_LABEL]: pool.name, [BINDING_LABEL]: keyHash(key) }, annotations: { [KEY_ANNOTATION]: key, "alasio.dev/binder": binder } },
32
+ spec: { renewTime: microTime(now), leaseDurationSeconds: Math.ceil(staleMs / 1000) },
33
+ });
34
+ /** Whether `lease` has gone unrenewed for `staleMs` by `now`. */
35
+ export const stale = (lease, staleMs, now) => now - (Date.parse(lease.spec?.renewTime ?? "") || 0) >= staleMs;
36
+ /**
37
+ * Takes the Lease of `key`'s binding for `binder`: made, where there is none; or taken over,
38
+ * by an update conditioned on the version read, where a binding under way names no holder
39
+ * and has gone unrenewed for `staleMs`. Otherwise it is another binding's.
40
+ */
41
+ export const takeLease = Effect.fnUntraced(function* (pool, key, binder, staleMs = BINDING_TIMEOUT_MS) {
42
+ const kube = yield* KubeClient;
43
+ for (;;) {
44
+ const now = yield* Clock.currentTimeMillis;
45
+ const made = yield* kube.create(leaseUnderWay(pool, key, binder, now, staleMs)).pipe(Effect.map((lease) => ({ taken: true, lease })), Effect.catchIf(hasStatus(409), () => Effect.succeed(null)));
46
+ if (made)
47
+ return made;
48
+ const held = yield* readLease(pool, key);
49
+ // Released between the two: made anew.
50
+ if (!held)
51
+ continue;
52
+ if (held.spec?.holderIdentity || !stale(held, staleMs, now))
53
+ return { taken: false, lease: held };
54
+ const fresh = leaseUnderWay(pool, key, binder, now, staleMs);
55
+ const over = yield* kube.replace({ ...held, metadata: { ...held.metadata, annotations: fresh.metadata?.annotations ?? {} }, spec: fresh.spec ?? {} }).pipe(Effect.map((lease) => ({ taken: true, lease })), Effect.catchIf((error) => hasStatus(409)(error) || hasStatus(404)(error), () => Effect.succeed(null)));
56
+ if (over)
57
+ return over;
58
+ }
59
+ });
60
+ /** Names `pod` the holder of the Lease `lease`, by an update conditioned on its version: the Lease, or null where another binder took it over meanwhile. */
61
+ export const holdLease = Effect.fnUntraced(function* (lease, pod) {
62
+ const kube = yield* KubeClient;
63
+ return yield* kube.replace({ ...lease, spec: { ...lease.spec, holderIdentity: pod } }).pipe(Effect.catchIf((error) => hasStatus(409)(error) || hasStatus(404)(error), () => Effect.succeed(null)));
64
+ });
65
+ /** Marks the Lease `lease` of a binding released by `binder`, renewed now, by an update conditioned on its version: the Lease, or null where it changed meanwhile. */
66
+ export const markReleasing = Effect.fnUntraced(function* (lease, binder) {
67
+ const kube = yield* KubeClient;
68
+ const now = yield* Clock.currentTimeMillis;
69
+ return yield* kube.replace({ ...lease, metadata: { ...lease.metadata, annotations: { ...lease.metadata?.annotations, [RELEASING_ANNOTATION]: binder } }, spec: { ...lease.spec, renewTime: microTime(now) } }).pipe(Effect.catchIf((error) => hasStatus(409)(error) || hasStatus(404)(error), () => Effect.succeed(null)));
70
+ });
71
+ /** The annotation of a binding's Lease saying when a request of its key last came, in ms: stamped by its binders, now and then. */
72
+ export const ACTIVE_ANNOTATION = "alasio.dev/active-at";
73
+ /** Stamps the Lease of `key`'s binding with a request of it at `now`; one gone, or changed meanwhile, is left. */
74
+ export const touchLease = Effect.fnUntraced(function* (pool, key, now) {
75
+ const kube = yield* KubeClient;
76
+ yield* kube.patch("coordination.k8s.io/v1", "Lease", pool.namespace, leaseName(key), { metadata: { annotations: { [ACTIVE_ANNOTATION]: String(now) } } }).pipe(Effect.catchIf(hasStatus(404), () => Effect.void), Effect.asVoid);
77
+ });
78
+ /** When a request of the binding `lease` last came, as its binders stamped it; null where none ever did. */
79
+ export const activeAt = (lease) => {
80
+ const at = Number(lease.metadata?.annotations?.[ACTIVE_ANNOTATION]);
81
+ return Number.isFinite(at) && at > 0 ? at : null;
82
+ };
83
+ /** The bindings of `pool` whose pods are named, as their Leases hold them. */
84
+ export const heldLeases = Effect.fnUntraced(function* (pool) {
85
+ const kube = yield* KubeClient;
86
+ const leases = (yield* kube.list("coordination.k8s.io/v1", "Lease", pool.namespace, `${POOL_LABEL}=${pool.name},${BINDING_LABEL}`));
87
+ return leases.filter(({ spec }) => spec?.holderIdentity);
88
+ });
89
+ /** Takes the releasing mark off the Lease `lease`, by an update conditioned on its version: the Lease, or null where it changed meanwhile. */
90
+ export const unmarkReleasing = Effect.fnUntraced(function* (lease) {
91
+ const kube = yield* KubeClient;
92
+ const annotations = { ...lease.metadata?.annotations };
93
+ delete annotations[RELEASING_ANNOTATION];
94
+ return yield* kube.replace({ ...lease, metadata: { ...lease.metadata, annotations } }).pipe(Effect.catchIf((error) => hasStatus(409)(error) || hasStatus(404)(error), () => Effect.succeed(null)));
95
+ });
96
+ /** Renews the Lease `lease` of a binding under way, or being released, by an update conditioned on its version: the Lease, or null where another binder took it over meanwhile. */
97
+ export const renewLease = Effect.fnUntraced(function* (lease) {
98
+ const kube = yield* KubeClient;
99
+ const now = yield* Clock.currentTimeMillis;
100
+ return yield* kube.replace({ ...lease, spec: { ...lease.spec, renewTime: microTime(now) } }).pipe(Effect.catchIf((error) => hasStatus(409)(error) || hasStatus(404)(error), () => Effect.succeed(null)));
101
+ });
102
+ /**
103
+ * Claims a free pod of `pool` that runs for `key`, ready or not, as one is ready only once
104
+ * what it serves is readied for it (BindOptions' prepare): each tried in turn, from a random
105
+ * one on, so binders claiming at once mostly try apart, relabelled by an update conditioned
106
+ * on the version read; one another claimed first is passed over, and so is one a container of
107
+ * which ended or started again (restarted). The pod claimed, or null where none was free.
108
+ */
109
+ export const claim = Effect.fnUntraced(function* (pool, key) {
110
+ const kube = yield* KubeClient;
111
+ // A pod that was ever bound is never claimed, whatever its labels came to say since: it
112
+ // serves one binding in its life, as a sandbox released can still reach what it was given.
113
+ const free = (yield* kube.list("v1", "Pod", pool.namespace, selector(freeLabels(pool)))).filter((pod) => running(pod) && !restarted(pod) && pod.metadata?.labels?.[BINDING_LABEL] === undefined && pod.metadata?.annotations?.[KEY_ANNOTATION] === undefined);
114
+ const from = Math.floor(Math.random() * free.length);
115
+ for (let n = 0; n < free.length; n += 1) {
116
+ const pod = free[(from + n) % free.length];
117
+ const labels = { ...pod.metadata?.labels };
118
+ delete labels[FREE_LABEL];
119
+ const claimed = yield* kube.replace({
120
+ ...pod,
121
+ // A listed object's own, as a list's items come without them.
122
+ apiVersion: "v1",
123
+ kind: "Pod",
124
+ metadata: { ...pod.metadata, labels: { ...labels, ...boundLabels(pool, key) }, annotations: { ...pod.metadata?.annotations, ...boundAnnotations(key) } },
125
+ }).pipe(Effect.catchIf((error) => hasStatus(409)(error) || hasStatus(404)(error), () => Effect.succeed(null)));
126
+ if (claimed)
127
+ return claimed;
128
+ }
129
+ return null;
130
+ });
131
+ /** The pod bound to `key` in `pool`, serving or not, being deleted or not; null where there is none. */
132
+ export const boundPod = Effect.fnUntraced(function* (pool, key) {
133
+ const kube = yield* KubeClient;
134
+ const pods = (yield* kube.list("v1", "Pod", pool.namespace, selector(boundLabels(pool, key))));
135
+ return pods.find((pod) => pod.metadata?.annotations?.[KEY_ANNOTATION] === key) ?? null;
136
+ });
137
+ /** Lets the Lease `lease` go, as it is: one changed since, by another binder, is kept (409). */
138
+ export const releaseLease = Effect.fnUntraced(function* (lease) {
139
+ const kube = yield* KubeClient;
140
+ yield* kube.remove("coordination.k8s.io/v1", "Lease", lease.metadata?.namespace ?? "", lease.metadata?.name ?? "", lease.metadata?.resourceVersion);
141
+ });
142
+ /** How many keys are bound in `namespace`, of every pool there. */
143
+ export const boundIn = Effect.fnUntraced(function* (namespace) {
144
+ const kube = yield* KubeClient;
145
+ const leases = (yield* kube.list("coordination.k8s.io/v1", "Lease", namespace, POOL_LABEL));
146
+ return leases.filter(({ spec }) => spec?.holderIdentity).length;
147
+ });
148
+ /** How many of `pool`'s pods are free and running, none of whose containers ended or started again, and how many of its keys are bound. */
149
+ export const counts = Effect.fnUntraced(function* (pool) {
150
+ const kube = yield* KubeClient;
151
+ const free = (yield* kube.list("v1", "Pod", pool.namespace, selector(freeLabels(pool)))).filter((pod) => running(pod) && !restarted(pod)).length;
152
+ const leases = (yield* kube.list("coordination.k8s.io/v1", "Lease", pool.namespace, `${POOL_LABEL}=${pool.name}`));
153
+ return { free, bound: leases.filter(({ spec }) => spec?.holderIdentity).length };
154
+ });
155
+ /**
156
+ * Sets `pool`'s bindings right where a binder ended between their steps: a bound pod no Lease
157
+ * of its key names is deleted, as one claimed by a bind that then gave up; and a Lease naming
158
+ * a pod gone is let go, as it was read, `before` run while it holds still, as what binds may
159
+ * record of it, then told of (`letGo`), as a binding whose pod went while it was bound, which
160
+ * what binds may say lost. A pod being deleted is not gone while it is there, as its binder may
161
+ * be saving it as it ends. A binding under way, its pod not yet named, is left to its binder,
162
+ * or to the next to take it over; and so is one being released, whose releaser deletes its pod
163
+ * before its Lease, and tells of its release itself, unless it has stopped renewing it, so a
164
+ * binding released is never told of as lost too. And a free pod a container of which ended or
165
+ * started again (restarted), which no bind claims, is deleted as it was read, for its Deployment
166
+ * to make another; one claimed since is left to its binder. What was set right, as names.
167
+ */
168
+ export const reconcile = Effect.fnUntraced(function* (pool, letGo = () => Effect.void, before = () => Effect.void) {
169
+ const kube = yield* KubeClient;
170
+ const leases = (yield* kube.list("coordination.k8s.io/v1", "Lease", pool.namespace, `${POOL_LABEL}=${pool.name},${BINDING_LABEL}`));
171
+ const there = (yield* kube.list("v1", "Pod", pool.namespace, `${POOL_LABEL}=${pool.name},${BINDING_LABEL}`));
172
+ const pods = there.filter(({ metadata }) => !metadata?.deletionTimestamp);
173
+ const held = new Map(leases.map((lease) => [lease.metadata?.labels?.[BINDING_LABEL] ?? "", lease]));
174
+ const running = new Set(there.map(({ metadata }) => metadata?.name ?? ""));
175
+ const orphans = pods.filter(({ metadata }) => {
176
+ const lease = held.get(metadata?.labels?.[BINDING_LABEL] ?? "");
177
+ return !lease || (lease.spec?.holderIdentity && lease.spec.holderIdentity !== metadata?.name);
178
+ });
179
+ const now = yield* Clock.currentTimeMillis;
180
+ const released = (lease) => lease.metadata?.annotations?.[RELEASING_ANNOTATION] !== undefined && !stale(lease, BINDING_TIMEOUT_MS, now);
181
+ const gone = leases.filter((lease) => lease.spec?.holderIdentity && !running.has(lease.spec.holderIdentity) && !released(lease));
182
+ yield* Effect.forEach(orphans, ({ metadata }) => kube.remove("v1", "Pod", pool.namespace, metadata?.name ?? ""), { discard: true });
183
+ // One changed since it was read, as by its binder, is no more this one's to let go, nor to tell of.
184
+ const letGone = yield* Effect.forEach(gone, (lease) => before(lease).pipe(Effect.andThen(releaseLease(lease)), Effect.as(true), Effect.catchIf(hasStatus(409), () => Effect.succeed(false))));
185
+ yield* Effect.forEach(gone.filter((_, n) => letGone[n]), letGo, { discard: true });
186
+ const free = (yield* kube.list("v1", "Pod", pool.namespace, selector(freeLabels(pool))));
187
+ const broken = free.filter((pod) => !pod.metadata?.deletionTimestamp && restarted(pod) && pod.metadata?.labels?.[BINDING_LABEL] === undefined && pod.metadata?.annotations?.[KEY_ANNOTATION] === undefined);
188
+ const deleted = yield* Effect.forEach(broken, ({ metadata }) => kube.remove("v1", "Pod", pool.namespace, metadata?.name ?? "", metadata?.resourceVersion).pipe(Effect.as(true), Effect.catchIf(hasStatus(409), () => Effect.succeed(false))));
189
+ return {
190
+ pods: orphans.map(({ metadata }) => metadata?.name ?? ""),
191
+ leases: gone.filter((_, n) => letGone[n]).map(({ metadata }) => metadata?.name ?? ""),
192
+ broken: broken.filter((_, n) => deleted[n]).map(({ metadata }) => metadata?.name ?? ""),
193
+ };
194
+ });
195
+ //# sourceMappingURL=bindings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bindings.js","sourceRoot":"","sources":["../../../../src/binder/bindings.ts"],"names":[],"mappings":"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"}
@@ -13,6 +13,8 @@ export const FREE_LABEL = "alasio.dev/free";
13
13
  export const BINDING_LABEL = "alasio.dev/binding";
14
14
  /** The annotation of a bound pod, and of its Lease: its key. */
15
15
  export const KEY_ANNOTATION = "alasio.dev/binding-key";
16
+ /** The header of a request that binds nothing: passed on where its key is bound, and otherwise answered as unbound (./server.ts). */
17
+ export const NO_BIND_HEADER = "x-alasio-bind";
16
18
  /**
17
19
  * The key of the environment `environment`'s callers, of the gateway's caller key `master`:
18
20
  * its HMAC of the environment's name, hex, a key as the text its Secret holds is, as the
@@ -30,4 +32,32 @@ export const freeLabels = (pool) => ({ [POOL_LABEL]: pool.name, [FREE_LABEL]: "t
30
32
  export const boundLabels = (pool, key) => ({ [POOL_LABEL]: pool.name, [BINDING_LABEL]: keyHash(key) });
31
33
  /** The annotations of a pod bound to `key`: the key, and what keeps its node from being removed while it is. */
32
34
  export const boundAnnotations = (key) => ({ [KEY_ANNOTATION]: key, ...BUSY_ANNOTATIONS });
35
+ /**
36
+ * The header of an answer the front gives a request it passed to no pod, nothing of it sent
37
+ * past the front (./server.ts), so that its caller may send it again, after its Retry-After: an
38
+ * MCP call's among them, which a pod given it may have run.
39
+ */
40
+ export const NOT_PASSED_HEADER = "x-alasio-not-passed";
41
+ /**
42
+ * How long the gateway's pod is given to stop (its terminationGracePeriodSeconds): its front's
43
+ * calls under way let end within it, past its linger (./server.ts STOP_CALLS_MS, STOP_LINGER_MS),
44
+ * with room for what stops after the front.
45
+ */
46
+ export const STOP_GRACE_SECONDS = 35;
47
+ /**
48
+ * How the gateway's pod's readiness is probed: so long as its front, stopping, answers no
49
+ * probe, a pod deleted as its Deployment's one replica is a target still, until it is marked
50
+ * unready after these (./server.ts STOP_LINGER_MS).
51
+ */
52
+ export const GATEWAY_READINESS = { periodSeconds: 5, failureThreshold: 3 };
53
+ /** Where a bound pod tells the front of what its harness did on its own, for its caller's control plane, with its binding's token (./server.ts relay). */
54
+ export const EVENTS_PATH = "/events";
55
+ /**
56
+ * The header of a request for the binding it names alone, by its Lease's uid, as one that gives
57
+ * that binding's pod its grant is (src/harness/grant.ts): where its key is bound to another now,
58
+ * bound anew as the request came or before, it is passed to no pod, and answered 409 `{ moved:
59
+ * { binding, namespace } }`, the binding it is bound to now, for its caller to ask again of that
60
+ * one (./server.ts).
61
+ */
62
+ export const PINNED_HEADER = "x-alasio-binding";
33
63
  //# sourceMappingURL=names.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"names.js","sourceRoot":"","sources":["../../../../src/binder/names.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAErD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,4CAA4C;AAC5C,MAAM,CAAC,MAAM,UAAU,GAAG,iBAAiB,CAAC;AAC5C,gGAAgG;AAChG,MAAM,CAAC,MAAM,UAAU,GAAG,iBAAiB,CAAC;AAC5C,kEAAkE;AAClE,MAAM,CAAC,MAAM,aAAa,GAAG,oBAAoB,CAAC;AAClD,gEAAgE;AAChE,MAAM,CAAC,MAAM,cAAc,GAAG,wBAAwB,CAAC;AAQvD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,MAAc,EAAE,WAAmB,EAAU,EAAE,CAC5E,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,eAAe,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAE/F,8FAA8F;AAC9F,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,GAAW,EAAU,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAE5G,gDAAgD;AAChD,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,GAAW,EAAU,EAAE,CAAC,WAAW,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;AAE5E,6FAA6F;AAC7F,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAU,EAAoC,EAAE,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;AAEhI,oDAAoD;AACpD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,IAAU,EAAE,GAAW,EAAoC,EAAE,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAEvJ,gHAAgH;AAChH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,GAAW,EAAoC,EAAE,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,EAAE,GAAG,EAAE,GAAG,gBAAgB,EAAE,CAAC,CAAC"}
1
+ {"version":3,"file":"names.js","sourceRoot":"","sources":["../../../../src/binder/names.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAErD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,4CAA4C;AAC5C,MAAM,CAAC,MAAM,UAAU,GAAG,iBAAiB,CAAC;AAC5C,gGAAgG;AAChG,MAAM,CAAC,MAAM,UAAU,GAAG,iBAAiB,CAAC;AAC5C,kEAAkE;AAClE,MAAM,CAAC,MAAM,aAAa,GAAG,oBAAoB,CAAC;AAClD,gEAAgE;AAChE,MAAM,CAAC,MAAM,cAAc,GAAG,wBAAwB,CAAC;AAEvD,qIAAqI;AACrI,MAAM,CAAC,MAAM,cAAc,GAAG,eAAe,CAAC;AAQ9C;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,MAAc,EAAE,WAAmB,EAAU,EAAE,CAC5E,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,eAAe,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAE/F,8FAA8F;AAC9F,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,GAAW,EAAU,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAE5G,gDAAgD;AAChD,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,GAAW,EAAU,EAAE,CAAC,WAAW,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;AAE5E,6FAA6F;AAC7F,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAU,EAAoC,EAAE,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;AAEhI,oDAAoD;AACpD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,IAAU,EAAE,GAAW,EAAoC,EAAE,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAEvJ,gHAAgH;AAChH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,GAAW,EAAoC,EAAE,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,EAAE,GAAG,EAAE,GAAG,gBAAgB,EAAE,CAAC,CAAC;AAEpI;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,qBAAqB,CAAC;AAEvD;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAErC;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,aAAa,EAAE,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAW,CAAC;AAEpF,0JAA0J;AAC1J,MAAM,CAAC,MAAM,WAAW,GAAG,SAAS,CAAC;AAErC;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,kBAAkB,CAAC"}
@@ -5,7 +5,9 @@
5
5
  * key, base64url, compared in constant time.
6
6
  *
7
7
  * A caller's token names the key it may reach, when it stops, and what its key is bound with:
8
- * what the binder's callers present, which the binder checks and never forwards. A binding's
8
+ * what the binder's callers present, which the binder checks and never forwards; or, held to a
9
+ * binding of another key (`held`), as a harness elsewhere is given its workspace's, no time it
10
+ * stops, but good only for as long as that binding is held. A binding's
9
11
  * token names the key, the binding, its Lease's uid, so one minted for a binding is no
10
12
  * other's, even of the same key, and the namespace its Lease is in: what the bound pod is
11
13
  * given, to take its calls, and its telemetry, by (bindingToken).
@@ -14,19 +16,30 @@ import { createHmac, timingSafeEqual } from "node:crypto";
14
16
  import { Option, Schema } from "effect";
15
17
  /**
16
18
  * What a token says: the key it is for; the binding, and its Lease's namespace, for a
17
- * binding's; and, for a caller's, the time it stops, in ms, and what its key is bound with
18
- * where it is not bound yet, which the binder's gateway reads (as a session's environment and
19
- * internet).
19
+ * binding's; and, for a caller's, the time it stops, in ms, or the binding it is held to in its
20
+ * place (HeldTo) and when it was minted, in ms, and what its key is bound with where it is not
21
+ * bound yet, which the binder's gateway reads (as a session's environment and internet).
20
22
  */
21
23
  export const TokenClaims = Schema.Struct({
22
24
  key: Schema.String,
23
25
  binding: Schema.optional(Schema.String),
24
26
  namespace: Schema.optional(Schema.String),
25
27
  expires: Schema.optional(Schema.Number),
28
+ held: Schema.optional(Schema.Struct({ key: Schema.String, binding: Schema.String, namespace: Schema.String })),
29
+ issued: Schema.optional(Schema.Number),
26
30
  options: Schema.optional(Schema.Record(Schema.String, Schema.String)),
27
31
  });
28
32
  const decodeClaims = Schema.decodeUnknownOption(Schema.fromJsonString(TokenClaims));
29
33
  const signatureOf = (secret, claims) => createHmac("sha256", secret).update(claims).digest();
34
+ /**
35
+ * What `token` says, its signature unchecked: of a token its holder was given where it trusts
36
+ * it to come from, as a pod reads its own binding's token from beside it (../harness/program.ts);
37
+ * null where it says nothing a token does. Never of a token a caller presents (verifyToken).
38
+ */
39
+ export function claimsOf(token) {
40
+ const dot = token.indexOf(".");
41
+ return dot < 0 ? null : Option.getOrNull(decodeClaims(Buffer.from(token.slice(0, dot), "base64url").toString("utf8")));
42
+ }
30
43
  /** A token of `claims`, signed with `secret`. */
31
44
  export function mintToken(secret, claims) {
32
45
  const encoded = Buffer.from(JSON.stringify(claims)).toString("base64url");
@@ -1 +1 @@
1
- {"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../../../src/binder/tokens.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../../../src/binder/tokens.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  /**
2
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 and the label they and its objects carry, the port its
4
- * parent forks its sessions on, and its token to ask with (./fork.ts). Free of anything but Node's own, so the command line
5
- * takes it without the server.
3
+ * line both say it: its namespaces and the label they and its objects carry, the topic and
4
+ * group its parent is asked to fork its sessions on, and its token to ask with (./fork.ts).
5
+ * Free of anything but Node's own, so the command line takes it without the server.
6
6
  */
7
7
  import { createHmac } from "node:crypto";
8
8
  /** The label of a branch environment's objects and namespaces, whose value is its name. */
@@ -15,12 +15,16 @@ export const BRANCH_LABEL = "alasio.dev/branch";
15
15
  export const BRANCH_PARENT_LABEL = "alasio.dev/branch-parent";
16
16
  /** The name of main's environment, as its sessions are told apart from a branch's. */
17
17
  export const MAIN_ENVIRONMENT_NAME = "main";
18
- /** The port an alasio forks its sessions for its branch environments on. */
19
- export const BRANCH_FORK_PORT = 4319;
18
+ /** The topic of the log the environment `environment`'s branches ask it on to fork its sessions for them: a branch writes it, its alasio reads it. */
19
+ export const forksTopic = (environment) => `forks.${environment}`;
20
+ /** The consumer group the environment `environment`'s alasio reads its branches' fork requests in. */
21
+ export const forksGroup = (environment) => `alasio-forks.${environment}`;
20
22
  /** The namespace of the branch environment `branch`: its alasio, its compute and its lake, and their Secrets. */
21
23
  export const branchNamespace = (branch) => `alasio-branch-${branch}`;
24
+ /** What ends the name of a branch environment's sessions' namespace, after its own's. */
25
+ export const SESSIONS_SUFFIX = "-sessions";
22
26
  /** The namespace of the branch environment `branch`'s sessions. */
23
- export const branchSessionsNamespace = (branch) => `${branchNamespace(branch)}-sessions`;
27
+ export const branchSessionsNamespace = (branch) => `${branchNamespace(branch)}${SESSIONS_SUFFIX}`;
24
28
  /** The token the branch `branch` forks its parent's sessions with: `key`'s HMAC of its name. */
25
29
  export function forkToken(key, branch) {
26
30
  return createHmac("sha256", key).update(`alasio-branch-fork:${branch}`).digest("base64url");
@@ -1 +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,2FAA2F;AAC3F,MAAM,CAAC,MAAM,YAAY,GAAG,mBAAmB,CAAC;AAEhD;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,0BAA0B,CAAC;AAE9D,sFAAsF;AACtF,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC;AAE5C,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"}
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,2FAA2F;AAC3F,MAAM,CAAC,MAAM,YAAY,GAAG,mBAAmB,CAAC;AAEhD;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,0BAA0B,CAAC;AAE9D,sFAAsF;AACtF,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC;AAE5C,sJAAsJ;AACtJ,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,WAAmB,EAAU,EAAE,CAAC,SAAS,WAAW,EAAE,CAAC;AAElF,sGAAsG;AACtG,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,WAAmB,EAAU,EAAE,CAAC,gBAAgB,WAAW,EAAE,CAAC;AAEzF,iHAAiH;AACjH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,MAAc,EAAU,EAAE,CAAC,iBAAiB,MAAM,EAAE,CAAC;AAErF,yFAAyF;AACzF,MAAM,CAAC,MAAM,eAAe,GAAG,WAAW,CAAC;AAE3C,mEAAmE;AACnE,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,MAAc,EAAU,EAAE,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC,GAAG,eAAe,EAAE,CAAC;AAElH,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"}
@@ -1,7 +1,28 @@
1
1
  /**
2
- * What an environment's events (./events.ts) are known by: their topic in the log. Free of
3
- * anything but itself, so the command line, which makes the topic, takes it without the events.
2
+ * What an environment's events (./events.ts) are known by: their topic in the log, the group
3
+ * its alasio reads it in, and the variables that say where a program tells of them. Free of
4
+ * anything but itself, so the command line, which makes the topic and its principal's access,
5
+ * takes it without the events.
4
6
  */
7
+ /** What every environment's events topic is named with first. */
8
+ export const EVENTS_TOPIC_PREFIX = "events.";
5
9
  /** The events topic of the environment `environment`: main's, or its branch's. */
6
- export const eventsTopic = (environment) => `events.${environment}`;
10
+ export const eventsTopic = (environment) => `${EVENTS_TOPIC_PREFIX}${environment}`;
11
+ /** The consumer group the environment `environment`'s alasio reads its events topic in, apart from its Telegram updates' group, so neither holds the other back. */
12
+ export const eventsGroup = (environment) => `alasio-events.${environment}`;
13
+ /** How long an environment's events topic keeps what it is told: a week, past any wait of its alasio's to read it. */
14
+ export const EVENTS_RETENTION_MS = 7 * 86_400_000;
15
+ /**
16
+ * How long an alasio keeps the record of each event it handled (../persistence/store.ts
17
+ * withEventHandled): a day past what its topic keeps, as the log deletes a segment, closed at
18
+ * the hour, only once all of it is older than the topic's retention. A group the log forgot
19
+ * the offsets of, idle as long, reads its topic again from where it reads one told of none (a
20
+ * branch's from its first record kept, ./consume.ts), and finds each event it handled still
21
+ * recorded, so handles none again.
22
+ */
23
+ export const EVENTS_HANDLED_KEPT_MS = EVENTS_RETENTION_MS + 86_400_000;
24
+ /** The variables of where a program tells of events (./events.ts Events.fromEnvironment): the log's brokers, its principal's name, and the file of its password. */
25
+ export const EVENTS_BROKERS_VARIABLE = "EVENTS_BROKERS";
26
+ export const EVENTS_USERNAME_VARIABLE = "EVENTS_USERNAME";
27
+ export const EVENTS_PASSWORD_FILE_VARIABLE = "EVENTS_PASSWORD_FILE";
7
28
  //# sourceMappingURL=names.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"names.js","sourceRoot":"","sources":["../../../../src/events/names.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,kFAAkF;AAClF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,WAAmB,EAAU,EAAE,CAAC,UAAU,WAAW,EAAE,CAAC"}
1
+ {"version":3,"file":"names.js","sourceRoot":"","sources":["../../../../src/events/names.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,iEAAiE;AACjE,MAAM,CAAC,MAAM,mBAAmB,GAAG,SAAS,CAAC;AAE7C,kFAAkF;AAClF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,WAAmB,EAAU,EAAE,CAAC,GAAG,mBAAmB,GAAG,WAAW,EAAE,CAAC;AAEnG,oKAAoK;AACpK,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,WAAmB,EAAU,EAAE,CAAC,iBAAiB,WAAW,EAAE,CAAC;AAE3F,sHAAsH;AACtH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,GAAG,UAAU,CAAC;AAElD;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,mBAAmB,GAAG,UAAU,CAAC;AAEvE,oKAAoK;AACpK,MAAM,CAAC,MAAM,uBAAuB,GAAG,gBAAgB,CAAC;AACxD,MAAM,CAAC,MAAM,wBAAwB,GAAG,iBAAiB,CAAC;AAC1D,MAAM,CAAC,MAAM,6BAA6B,GAAG,sBAAsB,CAAC"}
@@ -8,8 +8,10 @@ import { createHash } from "node:crypto";
8
8
  import { posix } from "node:path";
9
9
  import { Schema } from "effect";
10
10
  import { keyHash } from "../binder/names.js";
11
+ import { HARNESS_NAMES } from "../harness/names.js";
11
12
  import { sanitizePathToken } from "../kube/sandbox-shape.js";
12
13
  import { ATTACH_ROOT } from "../node-agent/names.js";
14
+ import { volumeIdOfKey } from "../sandbox/names.js";
13
15
  export { RESTORE_POD } from "../node-agent/names.js";
14
16
  /** The variable of the path of the gateway's configuration, a GatewayConfig as JSON. */
15
17
  export const GATEWAY_CONFIG_VARIABLE = "ALASIO_GATEWAY_CONFIG";
@@ -26,10 +28,6 @@ export const ALASIO_GATEWAY_ENVIRONMENT_VARIABLE = "ALASIO_GATEWAY_ENVIRONMENT";
26
28
  export const ALASIO_GATEWAY_CALLER_KEY_VARIABLE = "ALASIO_GATEWAY_CALLER_KEY";
27
29
  /** The variable that says the gateway serves alasio's folder workspaces' instances too: "1" where it does. */
28
30
  export const ALASIO_GATEWAY_FOLDERS_VARIABLE = "ALASIO_GATEWAY_FOLDERS";
29
- /** The variables of where the gateway tells of events (../events/events.ts): the log's brokers, its principal's name, and the file of its password. */
30
- export const EVENTS_BROKERS_VARIABLE = "EVENTS_BROKERS";
31
- export const EVENTS_USERNAME_VARIABLE = "EVENTS_USERNAME";
32
- export const EVENTS_PASSWORD_FILE_VARIABLE = "EVENTS_PASSWORD_FILE";
33
31
  /** The variables of the receiver's port, and of main's sessions' namespace, beside which it takes branch environments' bindings. */
34
32
  export const RECEIVER_PORT_VARIABLE = "RECEIVER_PORT";
35
33
  export const SESSIONS_NAMESPACE_VARIABLE = "SESSIONS_NAMESPACE";
@@ -109,7 +107,7 @@ export const FOLDER_TOKEN_FILE = `${FOLDER_TOKEN_DIRECTORY}/token`;
109
107
  /**
110
108
  * How long a folder instance's pod is given to stop: its bayma's CRIU dumps of its idle REPL
111
109
  * sessions, one at a time, each within bayma's own 120 s; a state of the box's size is dumped
112
- * in well under a minute (gate G8, program/13.4-folder-instances.md).
110
+ * in well under a minute.
113
111
  */
114
112
  export const FOLDER_STOP_SECONDS = 600;
115
113
  /** How long a folder instance's release, or its next bind, waits for its pod to be gone, past its stop. */
@@ -144,6 +142,29 @@ export function folderPodSpec(spec, pod, stateDir) {
144
142
  volumes: [...(spec.volumes ?? []), { name: FOLDER_TOKEN_VOLUME, secret: { secretName: folderTokenSecret(pod), defaultMode: 0o440 } }],
145
143
  };
146
144
  }
145
+ /** The container of a harness pool's pod that runs its host, `alasio harness` (cli/src/manifests/harness-pools.ts). */
146
+ export const HARNESS_CONTAINER = "harness";
147
+ /** What a conversation's harness's key begins with: `harness:<conversation>` (./harnesses.ts). */
148
+ const HARNESS_KEY_PREFIX = "harness:";
149
+ /** The key of the harness of the conversation `conversation`, which its caller's token says the harness and workspace of. */
150
+ export const harnessKey = (conversation) => `${HARNESS_KEY_PREFIX}${conversation}`;
151
+ /** The conversation whose harness `key` is; null where it is no harness's. */
152
+ export function conversationOfHarnessKey(key) {
153
+ const conversation = key.startsWith(HARNESS_KEY_PREFIX) ? key.slice(HARNESS_KEY_PREFIX.length) : "";
154
+ return conversation.length > 0 && conversation.length <= 512 ? conversation : null;
155
+ }
156
+ /**
157
+ * Whether a caller's token of `key` may be held to the binding of `heldKey` in place of a time
158
+ * it stops (../binder/server.ts grants): a workspace's held to its conversation's harness's, as
159
+ * alasio gives a harness bound in a pool its workspace's bayma: a session's, or the
160
+ * conversation's own folder instance's, and no other key's.
161
+ */
162
+ export function heldToHarness(key, heldKey) {
163
+ const conversation = conversationOfHarnessKey(heldKey);
164
+ if (conversation === null)
165
+ return false;
166
+ return volumeIdOfKey(key) !== null || folderOfKey(key)?.conversation === conversation;
167
+ }
147
168
  /** A pod template, as the gateway's configuration holds one: an object, as the API server takes it. */
148
169
  const Template = Schema.Record(Schema.String, Schema.Unknown);
149
170
  /**
@@ -166,6 +187,8 @@ export const GatewaySnapshots = Schema.Struct({
166
187
  full: Schema.Struct({ current: Template, previous: Schema.NullOr(Template) }),
167
188
  }),
168
189
  });
190
+ /** The user and group a pod runs as, as the node agents write its binding (../node-agent/workspaces.ts PodOwner). */
191
+ const PodOwner = Schema.Struct({ uid: Schema.Number, gid: Schema.Number });
169
192
  /** The sandbox pods' policy, which holds every pod of a sessions' namespace to its pools' templates (cli/src/manifests/admission.ts sandboxPodPolicy). */
170
193
  export const SANDBOX_POD_POLICY = "alasio-sandbox-pods";
171
194
  /** The gateway's configuration, as `alasio up` renders it (cli/src/manifests/sandbox-gateway.ts). */
@@ -197,5 +220,21 @@ export const GatewayConfig = Schema.Struct({
197
220
  * folder workspaces.
198
221
  */
199
222
  folders: Schema.NullOr(Schema.Struct({ namespace: Schema.String, template: Template, stateRoot: Schema.String, releaseAfterSeconds: Schema.Number })),
223
+ /**
224
+ * Conversations' harnesses' pools (./harnesses.ts): each harness's pool's name, in each
225
+ * environment's own namespace, main's `namespace`, a branch's its own; the port and user
226
+ * their pods' hosts run on; how long an idle one is kept, and how long its host is given to
227
+ * drain as it is let go of; and, main's alone, each harness's pool of folder conversations,
228
+ * in main's namespace too, and their pods' user, the host profile's.
229
+ */
230
+ harnesses: Schema.Struct({
231
+ namespace: Schema.String,
232
+ pools: Schema.Record(Schema.Literals(HARNESS_NAMES), Schema.String),
233
+ podPort: Schema.Number,
234
+ owner: PodOwner,
235
+ releaseAfterSeconds: Schema.Number,
236
+ drainSeconds: Schema.Number,
237
+ folders: Schema.NullOr(Schema.Struct({ pools: Schema.Record(Schema.Literals(HARNESS_NAMES), Schema.String), owner: PodOwner })),
238
+ }),
200
239
  });
201
240
  //# sourceMappingURL=names.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"names.js","sourceRoot":"","sources":["../../../../src/gateway/names.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"names.js","sourceRoot":"","sources":["../../../../src/gateway/names.ts"],"names":[],"mappings":"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"}
@@ -10,9 +10,27 @@
10
10
  * `null` harness is therefore a real state, not a fallback, and callers must
11
11
  * not coerce it to a default.
12
12
  */
13
+ import { createHmac } from "node:crypto";
13
14
  export const CODEX_HARNESS = "codex";
14
15
  export const CLAUDE_HARNESS = "claude";
15
16
  export const HARNESS_NAMES = Object.freeze([CODEX_HARNESS, CLAUDE_HARNESS]);
17
+ /** The port alasio relays its Codex login to its harness pools' pods on (../codex/login-relay.ts). */
18
+ export const CODEX_LOGIN_PORT = 4320;
19
+ /**
20
+ * How long the relay of the Codex login, told to stop, lets the requests it passes on run to
21
+ * their end, a model's answer streaming as long as it does, before it cuts those left
22
+ * (../codex/login-relay.ts): its pod is given this and a little more to stop in.
23
+ */
24
+ export const CODEX_LOGIN_DRAIN_SECONDS = 120;
25
+ /** The variable the relay of the Codex login is given the key it checks the turns' tokens by in, in hexadecimal (poolLoginKey). */
26
+ export const CODEX_LOGIN_KEY_VARIABLE = "ALASIO_CODEX_LOGIN_KEY";
27
+ /**
28
+ * The key alasio's pool login tokens, which the relay of the Codex login checks
29
+ * (../codex/login-relay.ts), are signed with: its environment's own key of the gateway's caller
30
+ * key's, made apart, so a token of one is never the other, and the relay, holding it alone, signs
31
+ * none of the environment's sessions' tokens.
32
+ */
33
+ export const poolLoginKey = (environmentKey) => createHmac("sha256", environmentKey).update("codex-login").digest();
16
34
  const DISPLAY_NAMES = Object.freeze({
17
35
  [CODEX_HARNESS]: "Codex",
18
36
  [CLAUDE_HARNESS]: "Claude",
@@ -1 +1 @@
1
- {"version":3,"file":"names.js","sourceRoot":"","sources":["../../../../src/harness/names.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,OAAO,CAAC;AACrC,MAAM,CAAC,MAAM,cAAc,GAAG,QAAQ,CAAC;AACvC,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,EAAE,cAAc,CAAU,CAAC,CAAC;AAKrF,MAAM,aAAa,GAA0C,MAAM,CAAC,MAAM,CAAC;IACzE,CAAC,aAAa,CAAC,EAAE,OAAO;IACxB,CAAC,cAAc,CAAC,EAAE,QAAQ;CAC3B,CAAC,CAAC;AAEH,MAAM,UAAU,aAAa,CAAC,SAAkB;IAC9C,MAAM,KAAK,GAAsB,aAAa,CAAC;IAC/C,OAAO,OAAO,SAAS,KAAK,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AACpE,CAAC;AAID,MAAM,UAAU,oBAAoB,CAAC,SAAkB,EAAE,QAAQ,GAAuB,aAAa;IACnG,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;QAClC,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC/C,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,aAAa,IAAI,OAAO,KAAK,aAAa,IAAI,OAAO,KAAK,YAAY,IAAI,OAAO,KAAK,aAAa,EAAE,CAAC;QAC5I,OAAO,cAAc,CAAC;IACxB,CAAC;IACD,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACxB,OAAO,aAAa,CAAC;IACvB,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAA2B;IAC5D,OAAO,CAAC,OAAO,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI,aAAa,CAAC,aAAa,CAAC,CAAC;AAC7E,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAG,GAAsB,OAAO,CAAC,GAAG;IACpE,OAAO,oBAAoB,CAAC,GAAG,CAAC,wBAAwB,CAAC,EAAE,IAAI,CAAC,CAAC;AACnE,CAAC"}
1
+ {"version":3,"file":"names.js","sourceRoot":"","sources":["../../../../src/harness/names.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,CAAC,MAAM,aAAa,GAAG,OAAO,CAAC;AACrC,MAAM,CAAC,MAAM,cAAc,GAAG,QAAQ,CAAC;AACvC,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,EAAE,cAAc,CAAU,CAAC,CAAC;AAErF,sGAAsG;AACtG,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAErC;;;;GAIG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAG,CAAC;AAE7C,mIAAmI;AACnI,MAAM,CAAC,MAAM,wBAAwB,GAAG,wBAAwB,CAAC;AAEjE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,cAAsB,EAAU,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,MAAM,EAAE,CAAC;AAKpI,MAAM,aAAa,GAA0C,MAAM,CAAC,MAAM,CAAC;IACzE,CAAC,aAAa,CAAC,EAAE,OAAO;IACxB,CAAC,cAAc,CAAC,EAAE,QAAQ;CAC3B,CAAC,CAAC;AAEH,MAAM,UAAU,aAAa,CAAC,SAAkB;IAC9C,MAAM,KAAK,GAAsB,aAAa,CAAC;IAC/C,OAAO,OAAO,SAAS,KAAK,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AACpE,CAAC;AAID,MAAM,UAAU,oBAAoB,CAAC,SAAkB,EAAE,QAAQ,GAAuB,aAAa;IACnG,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;QAClC,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC/C,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,aAAa,IAAI,OAAO,KAAK,aAAa,IAAI,OAAO,KAAK,YAAY,IAAI,OAAO,KAAK,aAAa,EAAE,CAAC;QAC5I,OAAO,cAAc,CAAC;IACxB,CAAC;IACD,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACxB,OAAO,aAAa,CAAC;IACvB,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAA2B;IAC5D,OAAO,CAAC,OAAO,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI,aAAa,CAAC,aAAa,CAAC,CAAC;AAC7E,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAG,GAAsB,OAAO,CAAC,GAAG;IACpE,OAAO,oBAAoB,CAAC,GAAG,CAAC,wBAAwB,CAAC,EAAE,IAAI,CAAC,CAAC;AACnE,CAAC"}