@exla/rudder 4.0.0-alpha.2 → 4.0.0-alpha.7

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 (41) hide show
  1. package/dist/brain.d.ts +7 -5
  2. package/dist/brain.js +32 -22
  3. package/dist/brain.js.map +1 -1
  4. package/dist/claude-sdk-protocol.d.ts +125 -0
  5. package/dist/claude-sdk-protocol.js +491 -0
  6. package/dist/claude-sdk-protocol.js.map +1 -0
  7. package/dist/claude-sdk.d.ts +28 -0
  8. package/dist/claude-sdk.js +425 -0
  9. package/dist/claude-sdk.js.map +1 -0
  10. package/dist/context-audit.js +1 -1
  11. package/dist/context-audit.js.map +1 -1
  12. package/dist/daemon.js +3 -0
  13. package/dist/daemon.js.map +1 -1
  14. package/dist/engine-authority.d.ts +5 -0
  15. package/dist/engine-authority.js +34 -0
  16. package/dist/engine-authority.js.map +1 -0
  17. package/dist/engine.d.ts +33 -0
  18. package/dist/engine.js +154 -0
  19. package/dist/engine.js.map +1 -0
  20. package/dist/fabric-local.d.ts +50 -0
  21. package/dist/fabric-local.js +339 -0
  22. package/dist/fabric-local.js.map +1 -0
  23. package/dist/fabric-remote.d.ts +92 -0
  24. package/dist/fabric-remote.js +402 -0
  25. package/dist/fabric-remote.js.map +1 -0
  26. package/dist/main.js +27 -1
  27. package/dist/main.js.map +1 -1
  28. package/dist/native/darwin-arm64/rudder-native +0 -0
  29. package/dist/native/darwin-x64/rudder-native +0 -0
  30. package/dist/native/linux-x64/rudder-native +0 -0
  31. package/dist/planner.js +1 -1
  32. package/dist/planner.js.map +1 -1
  33. package/dist/run-manager.js +11 -1
  34. package/dist/run-manager.js.map +1 -1
  35. package/dist/scheduler.js +3 -0
  36. package/dist/scheduler.js.map +1 -1
  37. package/dist/surfaces.d.ts +1 -1
  38. package/dist/surfaces.js +6 -7
  39. package/dist/surfaces.js.map +1 -1
  40. package/dist/types.d.ts +3 -0
  41. package/package.json +2 -1
package/dist/engine.js ADDED
@@ -0,0 +1,154 @@
1
+ import { execFile, spawn } from "node:child_process";
2
+ import fs from "node:fs";
3
+ import fsp from "node:fs/promises";
4
+ import path from "node:path";
5
+ import { codexLaunchEnv } from "./codex-binary.js";
6
+ import { resolveNativeBinaryPath } from "./native-binary.js";
7
+ import { projectEngineAuthority } from "./engine-authority.js";
8
+ function binaryPath(options) {
9
+ const binary = options.nativeBinary ?? resolveNativeBinaryPath();
10
+ if (!binary)
11
+ throw new Error("rudder-native binary is not available. Reinstall or rebuild Rudder.");
12
+ return binary;
13
+ }
14
+ export function parseEngineStatus(raw) {
15
+ const status = JSON.parse(raw);
16
+ if (!status || typeof status !== "object")
17
+ throw new Error("Invalid engine status response");
18
+ const data = status;
19
+ if (data.format_version !== 1 || typeof data.running !== "boolean" || typeof data.repo !== "string"
20
+ || !["fabric", "legacy-native", "legacy-ts"].includes(String(data.authority)) || typeof data.state !== "string") {
21
+ throw new Error("Unsupported or invalid engine status response");
22
+ }
23
+ if (data.running && data.authority === "fabric") {
24
+ const owner = data.owner;
25
+ if (typeof data.instance_id !== "string" || !data.instance_id || typeof data.attach_socket !== "string"
26
+ || !owner || typeof owner.project_id !== "string" || typeof owner.owner_id !== "string"
27
+ || !Number.isSafeInteger(owner.epoch) || Number(owner.epoch) < 1) {
28
+ throw new Error("Engine status is missing its ownership identity");
29
+ }
30
+ }
31
+ return status;
32
+ }
33
+ async function queryEngine(action, repo, options) {
34
+ const binary = binaryPath(options);
35
+ const raw = await new Promise((resolve, reject) => {
36
+ execFile(binary, ["engine", action, "--repo", repo, "--json"], {
37
+ cwd: repo,
38
+ env: options.env ?? process.env,
39
+ timeout: options.timeoutMs ?? 3_000,
40
+ maxBuffer: 64 * 1024,
41
+ }, (error, stdout, stderr) => {
42
+ if (error)
43
+ reject(new Error(stderr.trim() || `Engine ${action} failed: ${error.message}`));
44
+ else
45
+ resolve(stdout.trim());
46
+ });
47
+ });
48
+ const status = parseEngineStatus(raw);
49
+ if (await fsp.realpath(status.repo) !== await fsp.realpath(repo))
50
+ throw new Error("Engine returned a different checkout identity");
51
+ return status;
52
+ }
53
+ export async function readEngineStatus(repo, options = {}) {
54
+ return queryEngine("status", await fsp.realpath(repo), options);
55
+ }
56
+ export async function shutdownEngine(repo, options = {}) {
57
+ const root = await fsp.realpath(repo);
58
+ const status = await queryEngine("shutdown", root, options);
59
+ if (!status.running)
60
+ return status;
61
+ const deadline = Date.now() + (options.timeoutMs ?? 12_000);
62
+ do {
63
+ const current = await readEngineStatus(root, { ...options, timeoutMs: 2_000 });
64
+ if (!current.running)
65
+ return current;
66
+ if (current.instance_id !== status.instance_id)
67
+ throw new Error("Engine ownership changed while waiting for shutdown");
68
+ await new Promise((resolve) => setTimeout(resolve, 75));
69
+ } while (Date.now() < deadline);
70
+ throw new Error("Engine accepted shutdown but has not yet confirmed it stopped");
71
+ }
72
+ /** The child owns the lifecycle. Closing the caller's terminal only closes a view. */
73
+ export async function ensureEngineRunning(repo, options = {}) {
74
+ const root = await fsp.realpath(repo);
75
+ const current = await readEngineStatus(root, options);
76
+ if (current.running) {
77
+ if (current.authority !== "fabric")
78
+ throw new Error(`The ${current.authority} owner is still running; close it before transferring this project to the persistent engine.`);
79
+ return current;
80
+ }
81
+ const stateDir = path.join(root, ".rudder", "engine");
82
+ await fsp.mkdir(stateDir, { recursive: true, mode: 0o700 });
83
+ const logFile = path.join(stateDir, "engine.log");
84
+ // Bound historical startup diagnostics without truncating a live owner's log.
85
+ const oldLog = await fsp.stat(logFile).catch(() => null);
86
+ if (oldLog && oldLog.size > 8 * 1024 * 1024) {
87
+ await fsp.rename(logFile, `${logFile}.previous`).catch(() => undefined);
88
+ }
89
+ const fd = fs.openSync(logFile, "a", 0o600);
90
+ let startupError;
91
+ const env = options.env ?? await codexLaunchEnv(process.env);
92
+ try {
93
+ const child = spawn(binaryPath(options), ["engine", "--repo", root], {
94
+ cwd: root,
95
+ detached: true,
96
+ stdio: ["ignore", fd, fd],
97
+ env: { ...env, RUDDER_NATIVE_TUI: "1" },
98
+ });
99
+ child.once("error", (error) => { startupError = error; });
100
+ child.unref();
101
+ }
102
+ finally {
103
+ fs.closeSync(fd);
104
+ }
105
+ const deadline = Date.now() + (options.timeoutMs ?? 12_000);
106
+ do {
107
+ if (startupError)
108
+ throw startupError;
109
+ const status = await readEngineStatus(root, { ...options, timeoutMs: 2_000 });
110
+ if (status.running) {
111
+ if (status.authority !== "fabric")
112
+ throw new Error("A legacy owner acquired the project during engine startup");
113
+ return status;
114
+ }
115
+ await new Promise((resolve) => setTimeout(resolve, 75));
116
+ } while (Date.now() < deadline);
117
+ throw new Error(`Persistent engine did not become ready. Startup diagnostics: ${logFile}`);
118
+ }
119
+ /** Explicit migration opt-in until the remaining legacy ingress paths are fenced. */
120
+ export function persistentEngineRequested(env = process.env) {
121
+ if (env.RUDDER_ENGINE === undefined || env.RUDDER_ENGINE === "legacy-native")
122
+ return false;
123
+ if (env.RUDDER_ENGINE === "fabric")
124
+ return true;
125
+ throw new Error("RUDDER_ENGINE must be fabric or legacy-native");
126
+ }
127
+ export function persistentProjectEngineRequested(repo, env = process.env) {
128
+ return env.RUDDER_ENGINE === undefined ? projectEngineAuthority(repo) === "fabric" : persistentEngineRequested(env);
129
+ }
130
+ export async function runEngineCommand(action, repo, json = false) {
131
+ const op = action ?? "status";
132
+ if (op === "api") {
133
+ const code = await new Promise((resolve, reject) => {
134
+ const child = spawn(binaryPath({}), ["fabric"], { stdio: "inherit", env: process.env });
135
+ child.once("error", reject);
136
+ child.once("exit", resolve);
137
+ });
138
+ process.exitCode = code ?? 1;
139
+ return;
140
+ }
141
+ let status;
142
+ if (op === "start")
143
+ status = await ensureEngineRunning(repo);
144
+ else if (op === "status")
145
+ status = await readEngineStatus(repo);
146
+ else if (op === "shutdown" || op === "stop")
147
+ status = await shutdownEngine(repo);
148
+ else
149
+ throw new Error("Usage: rudder engine [start|status|shutdown] [--repo PATH] [--json]");
150
+ process.stdout.write(json ? `${JSON.stringify(status)}\n` : status.running
151
+ ? `Engine ready in ${status.repo} (owner epoch ${status.owner?.epoch ?? "legacy"})\n`
152
+ : `Engine stopped in ${status.repo}\n`);
153
+ }
154
+ //# sourceMappingURL=engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import { type FabricLease, type FabricLocalReceipt, type FabricObjectRef, type FabricTransferSource, type FabricTransferTarget } from "./fabric-remote.js";
2
+ export declare class FabricLocalError extends Error {
3
+ readonly code: string;
4
+ constructor(code: string, message: string);
5
+ }
6
+ export interface FabricLocalOptions {
7
+ home?: string;
8
+ nativeBinary?: string;
9
+ env?: NodeJS.ProcessEnv;
10
+ requestTimeoutMs?: number;
11
+ }
12
+ export declare class FabricLocalClient implements FabricTransferSource, FabricTransferTarget {
13
+ readonly pid: number | undefined;
14
+ private readonly child;
15
+ private readonly deadline;
16
+ private pending;
17
+ private writeTail;
18
+ private failure;
19
+ private closing;
20
+ private headerParts;
21
+ private headerLength;
22
+ private incoming;
23
+ private ownedPins;
24
+ private ownedLeases;
25
+ private readonly exited;
26
+ private constructor();
27
+ static open(options?: FabricLocalOptions): Promise<FabricLocalClient>;
28
+ private fail;
29
+ private complete;
30
+ private consume;
31
+ private rpc;
32
+ request(operation: Record<string, unknown>): Promise<Record<string, unknown>>;
33
+ pin(root: FabricObjectRef): Promise<string>;
34
+ unpin(pin: string): Promise<void>;
35
+ closure(root: FabricObjectRef): Promise<FabricObjectRef[]>;
36
+ read(object: FabricObjectRef): Promise<Buffer>;
37
+ private localLease;
38
+ beginStaging(ttlMs: number): Promise<FabricLease>;
39
+ renewStaging(leaseId: string, ttlMs: number): Promise<FabricLease>;
40
+ receive(leaseId: string, object: FabricObjectRef, bytes: Uint8Array): Promise<FabricObjectRef[]>;
41
+ publish(leaseId: string, pin: string, root: FabricObjectRef): Promise<FabricLocalReceipt>;
42
+ abandonStaging(leaseId: string): Promise<void>;
43
+ close(): Promise<void>;
44
+ }
45
+ export interface FabricTransferCommandOptions extends FabricLocalOptions {
46
+ stdout?: (line: string) => void;
47
+ authHeaders?: () => Record<string, string> | Promise<Record<string, string>>;
48
+ fetch?: typeof globalThis.fetch;
49
+ }
50
+ export declare function runFabricTransferCommand(args: string[], options?: FabricTransferCommandOptions): Promise<void>;
@@ -0,0 +1,339 @@
1
+ /** One bounded native CAS connection, using raw binary frames rather than a
2
+ * process or hexadecimal JSON allocation per object. This is a trusted local
3
+ * machine API; run-scoped agents use the separate capability-authenticated API.
4
+ */
5
+ import { spawn } from "node:child_process";
6
+ import { randomUUID } from "node:crypto";
7
+ import fs from "node:fs/promises";
8
+ import os from "node:os";
9
+ import path from "node:path";
10
+ import { resolveNativeBinaryPath } from "./native-binary.js";
11
+ import { FabricRemoteClient, FabricRemoteError, validateFabricReference, verifyFabricObject } from "./fabric-remote.js";
12
+ const MAX_HEADER = 32 * 1024 * 1024;
13
+ const MAX_REQUEST_HEADER = 256 * 1024;
14
+ const MAX_BODY = 256 * 1024 * 1024;
15
+ const same = (a, b) => a.kind === b.kind && a.digest === b.digest && a.size_bytes === b.size_bytes;
16
+ export class FabricLocalError extends Error {
17
+ code;
18
+ constructor(code, message) {
19
+ super(message);
20
+ this.code = code;
21
+ this.name = "FabricLocalError";
22
+ }
23
+ }
24
+ export class FabricLocalClient {
25
+ pid;
26
+ child;
27
+ deadline;
28
+ pending = new Map();
29
+ writeTail = Promise.resolve();
30
+ failure;
31
+ closing = false;
32
+ headerParts = [];
33
+ headerLength = 0;
34
+ incoming;
35
+ ownedPins = new Set();
36
+ ownedLeases = new Set();
37
+ exited;
38
+ constructor(options) {
39
+ const binary = options.nativeBinary ?? resolveNativeBinaryPath();
40
+ if (!binary)
41
+ throw new FabricLocalError("native_unavailable", "Rebuild or reinstall the current Rudder native binary");
42
+ this.deadline = options.requestTimeoutMs ?? 120_000;
43
+ if (!Number.isInteger(this.deadline) || this.deadline < 1 || this.deadline > 120_000)
44
+ throw new FabricLocalError("invalid_limits", "Invalid local CAS request deadline");
45
+ this.child = spawn(binary, ["fabric", "rpc"], { stdio: ["pipe", "pipe", "pipe"], env: { ...(options.env ?? process.env), ...(options.home ? { RUDDER_HOME: path.resolve(options.home) } : {}) } });
46
+ this.pid = this.child.pid;
47
+ this.child.stderr.resume(); // Never reflect diagnostics containing local data.
48
+ this.child.stdout.on("data", (chunk) => { try {
49
+ this.consume(chunk);
50
+ }
51
+ catch {
52
+ this.fail("invalid_response", "Native CAS returned an invalid binary frame");
53
+ } });
54
+ this.child.stdin.on("error", () => this.fail("local_unavailable", "Native CAS connection closed; inspect retention before retrying publication"));
55
+ this.child.on("error", () => this.fail("native_unavailable", "Could not launch the current Rudder native CAS helper"));
56
+ this.exited = new Promise((resolve) => {
57
+ // close follows stdout drainage; exit can precede a final response frame.
58
+ this.child.once("close", (code, signal) => {
59
+ resolve({ code, signal });
60
+ if (!this.closing || this.pending.size)
61
+ this.fail("local_unavailable", "Native CAS exited; inspect retention before retrying publication");
62
+ });
63
+ this.child.once("error", () => resolve({ code: null, signal: null }));
64
+ });
65
+ }
66
+ static async open(options = {}) {
67
+ const client = new FabricLocalClient(options);
68
+ try {
69
+ await client.request({ operation: "capabilities" });
70
+ return client;
71
+ }
72
+ catch (failure) {
73
+ await client.close().catch(() => { });
74
+ throw failure;
75
+ }
76
+ }
77
+ fail(code, message) {
78
+ this.failure ??= new FabricLocalError(code, message);
79
+ for (const pending of this.pending.values()) {
80
+ clearTimeout(pending.timer);
81
+ pending.reject(this.failure);
82
+ }
83
+ this.pending.clear();
84
+ this.child.stdin.destroy();
85
+ this.child.stdout.destroy();
86
+ this.child.kill("SIGTERM");
87
+ }
88
+ complete(header, bytes) {
89
+ const id = String(header.id);
90
+ const pending = this.pending.get(id);
91
+ if (!pending)
92
+ throw new Error("unknown response");
93
+ clearTimeout(pending.timer);
94
+ this.pending.delete(id);
95
+ if (header.ok === false)
96
+ pending.reject(new FabricLocalError("local_request_failed", "Local CAS rejected the request; no durable transfer success is implied"));
97
+ else
98
+ pending.resolve({ result: header.result, bytes });
99
+ }
100
+ consume(chunk) {
101
+ let offset = 0;
102
+ while (offset < chunk.length) {
103
+ if (this.incoming) {
104
+ const body = this.incoming;
105
+ const count = Math.min(body.wanted - body.length, chunk.length - offset);
106
+ chunk.copy(body.bytes, body.length, offset, offset + count);
107
+ body.length += count;
108
+ offset += count;
109
+ if (body.length === body.wanted) {
110
+ this.incoming = undefined;
111
+ this.complete(body.header, body.bytes);
112
+ }
113
+ continue;
114
+ }
115
+ const newline = chunk.indexOf(10, offset);
116
+ const end = newline < 0 ? chunk.length : newline;
117
+ this.headerLength += end - offset;
118
+ if (this.headerLength > MAX_HEADER)
119
+ throw new Error("header too large");
120
+ this.headerParts.push(chunk.subarray(offset, end));
121
+ offset = end + (newline < 0 ? 0 : 1);
122
+ if (newline < 0)
123
+ continue;
124
+ const header = JSON.parse(new TextDecoder("utf-8", { fatal: true }).decode(Buffer.concat(this.headerParts, this.headerLength)));
125
+ this.headerParts = [];
126
+ this.headerLength = 0;
127
+ if (!header || header.format_version !== 1 || typeof header.id !== "string" || !this.pending.has(header.id) || typeof header.ok !== "boolean" || !Number.isSafeInteger(header.binary_bytes) || Number(header.binary_bytes) < 0 || Number(header.binary_bytes) > MAX_BODY || (!header.ok && header.binary_bytes !== 0) || (header.ok && (!header.result || typeof header.result !== "object" || Array.isArray(header.result))))
128
+ throw new Error("invalid response");
129
+ if (header.binary_bytes === 0)
130
+ this.complete(header, Buffer.alloc(0));
131
+ else
132
+ this.incoming = { header, bytes: Buffer.allocUnsafe(Number(header.binary_bytes)), length: 0, wanted: Number(header.binary_bytes) };
133
+ }
134
+ }
135
+ async rpc(request, binary) {
136
+ if (this.failure)
137
+ throw this.failure;
138
+ if (this.closing)
139
+ throw new FabricLocalError("local_closed", "Local CAS connection is closed");
140
+ if (this.pending.size >= 16)
141
+ throw new FabricLocalError("local_busy", "Too many pending local CAS requests");
142
+ const id = randomUUID();
143
+ const header = Buffer.from(JSON.stringify({ format_version: 1, id, request, binary_bytes: binary?.byteLength ?? 0 }) + "\n");
144
+ if (header.length > MAX_REQUEST_HEADER || (binary?.byteLength ?? 0) > MAX_BODY)
145
+ throw new FabricLocalError("too_large", "Local CAS frame exceeds byte limits");
146
+ const result = new Promise((resolve, reject) => {
147
+ const timer = setTimeout(() => this.fail("local_timeout", "Local CAS request exceeded its deadline; inspect retention before retrying publication"), this.deadline);
148
+ this.pending.set(id, { resolve, reject, timer });
149
+ });
150
+ const write = (bytes) => new Promise((resolve, reject) => this.child.stdin.write(bytes, (error) => error ? reject(error) : resolve()));
151
+ this.writeTail = this.writeTail.then(async () => {
152
+ if (this.failure)
153
+ return;
154
+ await write(header);
155
+ if (binary?.byteLength)
156
+ await write(binary);
157
+ }).catch(() => this.fail("local_unavailable", "Local CAS frame could not be delivered; inspect retention before retrying publication"));
158
+ return result;
159
+ }
160
+ async request(operation) {
161
+ const response = await this.rpc({ operation: "store", request: operation });
162
+ if (response.bytes.length)
163
+ throw new FabricLocalError("invalid_response", "Unexpected local CAS binary body");
164
+ return response.result;
165
+ }
166
+ async pin(root) {
167
+ validateFabricReference(root);
168
+ const { result } = await this.rpc({ operation: "pin_source", root });
169
+ if (typeof result.owned_pin !== "string" || !/^transfer:rpc:[a-f0-9-]{36}$/.test(result.owned_pin) || this.ownedPins.has(result.owned_pin))
170
+ throw new FabricLocalError("invalid_response", "Native CAS did not allocate a new private transfer pin");
171
+ this.ownedPins.add(result.owned_pin);
172
+ return result.owned_pin;
173
+ }
174
+ async unpin(pin) {
175
+ if (!this.ownedPins.has(pin))
176
+ throw new FabricLocalError("invalid_pin", "Pin is outside this transfer connection");
177
+ await this.rpc({ operation: "unpin_source", pin });
178
+ this.ownedPins.delete(pin);
179
+ }
180
+ async closure(root) {
181
+ validateFabricReference(root);
182
+ const { result } = await this.rpc({ operation: "inventory", root });
183
+ if (!Array.isArray(result.objects) || result.objects.length > 100_000)
184
+ throw new FabricLocalError("invalid_response", "Invalid local source inventory");
185
+ return result.objects.map(validateFabricReference);
186
+ }
187
+ async read(object) {
188
+ validateFabricReference(object);
189
+ const { result, bytes } = await this.rpc({ operation: "read_binary", object });
190
+ if (!same(validateFabricReference(result.object), object))
191
+ throw new FabricLocalError("invalid_response", "Native CAS read returned another object");
192
+ verifyFabricObject(object, bytes);
193
+ return bytes;
194
+ }
195
+ localLease(result) {
196
+ if (typeof result.id !== "string" || !/^[a-f0-9-]{36}$/.test(result.id) || !Number.isSafeInteger(result.expires_at_ms) || Number(result.expires_at_ms) <= 0)
197
+ throw new FabricLocalError("invalid_response", "Invalid local staging lease");
198
+ return { format_version: 1, lease_id: result.id, expires_at_ms: Number(result.expires_at_ms) };
199
+ }
200
+ async beginStaging(ttlMs) {
201
+ const value = this.localLease(await this.request({ operation: "begin_staging", ttl_ms: ttlMs }));
202
+ this.ownedLeases.add(value.lease_id);
203
+ return value;
204
+ }
205
+ async renewStaging(leaseId, ttlMs) {
206
+ if (!this.ownedLeases.has(leaseId))
207
+ throw new FabricLocalError("invalid_lease", "Lease is outside this transfer connection");
208
+ return this.localLease(await this.request({ operation: "renew_staging", lease_id: leaseId, ttl_ms: ttlMs }));
209
+ }
210
+ async receive(leaseId, object, bytes) {
211
+ if (!this.ownedLeases.has(leaseId))
212
+ throw new FabricLocalError("invalid_lease", "Lease is outside this transfer connection");
213
+ verifyFabricObject(object, bytes);
214
+ const { result } = await this.rpc({ operation: "receive_binary", lease_id: leaseId, object }, bytes);
215
+ if (!same(validateFabricReference(result.object), object) || !Array.isArray(result.children))
216
+ throw new FabricLocalError("invalid_response", "Invalid local metadata acknowledgment");
217
+ return result.children.map(validateFabricReference);
218
+ }
219
+ async publish(leaseId, pin, root) {
220
+ if (!this.ownedLeases.has(leaseId))
221
+ throw new FabricLocalError("invalid_lease", "Lease is outside this transfer connection");
222
+ validateFabricReference(root);
223
+ const result = await this.request({ operation: "publish", lease_id: leaseId, pin, root });
224
+ if (!Number.isSafeInteger(result.generation) || Number(result.generation) < 1)
225
+ throw new FabricLocalError("invalid_response", "Invalid local durable retention acknowledgment");
226
+ this.ownedLeases.delete(leaseId);
227
+ return { format_version: 1, root, pin, generation: Number(result.generation), durability: "local" };
228
+ }
229
+ async abandonStaging(leaseId) {
230
+ if (!this.ownedLeases.has(leaseId))
231
+ throw new FabricLocalError("invalid_lease", "Lease is outside this transfer connection");
232
+ await this.request({ operation: "abandon_staging", lease_id: leaseId });
233
+ this.ownedLeases.delete(leaseId);
234
+ }
235
+ async close() {
236
+ if (!this.closing) {
237
+ this.closing = true;
238
+ await this.writeTail;
239
+ this.child.stdin.end();
240
+ }
241
+ let timer;
242
+ try {
243
+ const status = await Promise.race([this.exited, new Promise((_, reject) => { timer = setTimeout(() => { this.fail("local_close_timeout", "Local helper cleanup was not confirmed; inspect transfer retention"); reject(this.failure); }, 5_000); })]);
244
+ if (status.code !== 0 || this.failure)
245
+ throw this.failure ?? new FabricLocalError("local_cleanup_failed", "Native helper cleanup was not confirmed; inspect transfer retention");
246
+ }
247
+ finally {
248
+ if (timer)
249
+ clearTimeout(timer);
250
+ }
251
+ }
252
+ }
253
+ export async function runFabricTransferCommand(args, options = {}) {
254
+ const [action, rootId, ...rest] = args;
255
+ if (!["upload", "download"].includes(action) || !rootId)
256
+ throw new Error("Usage: rudder engine api upload|download ROOT_ID [--root JSON|--root-file PATH] [--pin NAME] [--home PATH] [--url CLOUD_URL]");
257
+ const flags = new Map();
258
+ for (let i = 0; i < rest.length; i += 2) {
259
+ const key = rest[i];
260
+ const value = rest[i + 1];
261
+ if (!["--root", "--root-file", "--pin", "--home", "--url"].includes(key) || value === undefined || flags.has(key))
262
+ throw new Error("Invalid fabric transfer argument");
263
+ flags.set(key, value);
264
+ }
265
+ if (action === "upload" && flags.has("--pin"))
266
+ throw new Error("--pin selects local retention for download");
267
+ if (action === "download" && (flags.has("--root") || flags.has("--root-file")))
268
+ throw new Error("Download resolves the immutable published root id");
269
+ const env = options.env ?? process.env;
270
+ const base = new URL(flags.get("--url") ?? env.RUDDER_CLOUD_URL?.trim() ?? "https://rudder-cloud-control.fly.dev");
271
+ if (!["http:", "https:"].includes(base.protocol) || base.username || base.password || base.search || base.hash || (base.protocol === "http:" && !["127.0.0.1", "localhost", "[::1]"].includes(base.hostname) && env.RUDDER_CLOUD_ALLOW_HTTP !== "1"))
272
+ throw new Error("Fabric transfers require a trusted HTTPS endpoint or loopback HTTP");
273
+ const cloudUrl = base.toString().replace(/\/$/, "");
274
+ const auth = options.authHeaders ?? (async () => {
275
+ const worker = env.RUDDER_WORKER_TOKEN?.trim();
276
+ const workspace = env.RUDDER_WORKSPACE_ID?.trim();
277
+ if (worker || workspace) {
278
+ if (!worker || !workspace)
279
+ throw new FabricRemoteError("worker_identity_incomplete", "A worker transfer requires its paired workspace identity and worker credential");
280
+ return { Authorization: `Bearer ${worker}`, "X-Rudder-Workspace-Id": workspace };
281
+ }
282
+ const configured = env.RUDDER_CLOUD_TOKEN?.trim();
283
+ if (configured)
284
+ return { Authorization: `Bearer ${configured}` };
285
+ const file = path.join(path.resolve(env.RUDDER_HOME?.trim() || path.join(os.homedir(), ".rudder")), "cloud.json");
286
+ let state;
287
+ try {
288
+ state = JSON.parse(await fs.readFile(file, "utf8"));
289
+ }
290
+ catch { /* Missing login is handled below. */ }
291
+ if (state?.version !== 1 || typeof state.cloudUrl !== "string" || state.cloudUrl.replace(/\/$/, "") !== cloudUrl || typeof state.token !== "string" || !state.token.trim())
292
+ throw new FabricRemoteError("not_logged_in", "Not logged in to this Rudder Cloud endpoint; run rudder login");
293
+ return { Authorization: `Bearer ${state.token}` };
294
+ });
295
+ const remote = new FabricRemoteClient({ baseUrl: `${cloudUrl}/api/rudder/fabric`, authHeaders: auth, fetch: options.fetch });
296
+ let root;
297
+ if (action === "upload") {
298
+ if (flags.has("--root") === flags.has("--root-file"))
299
+ throw new Error("Upload requires exactly one of --root JSON or --root-file PATH");
300
+ let raw = flags.get("--root");
301
+ if (!raw) {
302
+ const file = await fs.open(flags.get("--root-file"), "r");
303
+ try {
304
+ const bytes = Buffer.alloc(4097);
305
+ const { bytesRead } = await file.read(bytes);
306
+ if (bytesRead > 4096)
307
+ throw new Error("Root reference file exceeds byte limit");
308
+ raw = bytes.subarray(0, bytesRead).toString("utf8");
309
+ }
310
+ finally {
311
+ await file.close();
312
+ }
313
+ }
314
+ try {
315
+ root = validateFabricReference(JSON.parse(raw));
316
+ }
317
+ catch {
318
+ throw new Error("Upload requires a valid typed root reference");
319
+ }
320
+ }
321
+ else if (!flags.get("--pin"))
322
+ throw new Error("Download requires --pin NAME for durable local retention");
323
+ const local = await FabricLocalClient.open({ ...options, home: flags.get("--home") ?? options.home });
324
+ let result;
325
+ try {
326
+ result = (action === "upload" ? await remote.uploadRoot(rootId, root, local) : await remote.downloadRoot(rootId, local, flags.get("--pin")));
327
+ }
328
+ finally {
329
+ try {
330
+ await local.close();
331
+ }
332
+ catch {
333
+ if (result)
334
+ result.cleanup_warning = "Publication committed; local helper cleanup needs inspection";
335
+ }
336
+ }
337
+ (options.stdout ?? ((line) => process.stdout.write(line)))(JSON.stringify({ format_version: 1, operation: action, ...result }) + "\n");
338
+ }
339
+ //# sourceMappingURL=fabric-local.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fabric-local.js","sourceRoot":"","sources":["../src/fabric-local.ts"],"names":[],"mappings":"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"}