gateproof 0.2.4 → 0.5.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.
- package/README.md +1447 -153
- package/dist/cloudflare/index.d.ts +4 -6
- package/dist/cloudflare/index.d.ts.map +1 -1
- package/dist/cloudflare/index.js +9 -43
- package/dist/cloudflare/index.js.map +1 -1
- package/dist/index.d.ts +263 -75
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1327 -212
- package/dist/index.js.map +1 -1
- package/package.json +18 -48
- package/dist/act.d.ts +0 -78
- package/dist/act.d.ts.map +0 -1
- package/dist/act.js +0 -47
- package/dist/act.js.map +0 -1
- package/dist/action-executors.d.ts +0 -39
- package/dist/action-executors.d.ts.map +0 -1
- package/dist/action-executors.js +0 -195
- package/dist/action-executors.js.map +0 -1
- package/dist/assert.d.ts +0 -59
- package/dist/assert.d.ts.map +0 -1
- package/dist/assert.js +0 -120
- package/dist/assert.js.map +0 -1
- package/dist/authority.d.ts +0 -34
- package/dist/authority.d.ts.map +0 -1
- package/dist/authority.js +0 -141
- package/dist/authority.js.map +0 -1
- package/dist/cli/gateproof.d.ts +0 -3
- package/dist/cli/gateproof.d.ts.map +0 -1
- package/dist/cli/gateproof.js +0 -548
- package/dist/cli/gateproof.js.map +0 -1
- package/dist/cloudflare/analytics.d.ts +0 -9
- package/dist/cloudflare/analytics.d.ts.map +0 -1
- package/dist/cloudflare/analytics.js +0 -98
- package/dist/cloudflare/analytics.js.map +0 -1
- package/dist/cloudflare/cli-stream.d.ts +0 -7
- package/dist/cloudflare/cli-stream.d.ts.map +0 -1
- package/dist/cloudflare/cli-stream.js +0 -85
- package/dist/cloudflare/cli-stream.js.map +0 -1
- package/dist/cloudflare/polling-backend.d.ts +0 -18
- package/dist/cloudflare/polling-backend.d.ts.map +0 -1
- package/dist/cloudflare/polling-backend.js +0 -53
- package/dist/cloudflare/polling-backend.js.map +0 -1
- package/dist/cloudflare/workers-logs.d.ts +0 -9
- package/dist/cloudflare/workers-logs.d.ts.map +0 -1
- package/dist/cloudflare/workers-logs.js +0 -51
- package/dist/cloudflare/workers-logs.js.map +0 -1
- package/dist/constants.d.ts +0 -11
- package/dist/constants.d.ts.map +0 -1
- package/dist/constants.js +0 -11
- package/dist/constants.js.map +0 -1
- package/dist/filepath-backend.d.ts +0 -64
- package/dist/filepath-backend.d.ts.map +0 -1
- package/dist/filepath-backend.js +0 -126
- package/dist/filepath-backend.js.map +0 -1
- package/dist/filepath-protocol.d.ts +0 -214
- package/dist/filepath-protocol.d.ts.map +0 -1
- package/dist/filepath-protocol.js +0 -239
- package/dist/filepath-protocol.js.map +0 -1
- package/dist/filepath-runtime.d.ts +0 -100
- package/dist/filepath-runtime.d.ts.map +0 -1
- package/dist/filepath-runtime.js +0 -190
- package/dist/filepath-runtime.js.map +0 -1
- package/dist/http-backend.d.ts +0 -32
- package/dist/http-backend.d.ts.map +0 -1
- package/dist/http-backend.js +0 -166
- package/dist/http-backend.js.map +0 -1
- package/dist/observe.d.ts +0 -26
- package/dist/observe.d.ts.map +0 -1
- package/dist/observe.js +0 -84
- package/dist/observe.js.map +0 -1
- package/dist/prd/define-prd.d.ts +0 -7
- package/dist/prd/define-prd.d.ts.map +0 -1
- package/dist/prd/define-prd.js +0 -8
- package/dist/prd/define-prd.js.map +0 -1
- package/dist/prd/index.d.ts +0 -7
- package/dist/prd/index.d.ts.map +0 -1
- package/dist/prd/index.js +0 -8
- package/dist/prd/index.js.map +0 -1
- package/dist/prd/loop.d.ts +0 -160
- package/dist/prd/loop.d.ts.map +0 -1
- package/dist/prd/loop.js +0 -462
- package/dist/prd/loop.js.map +0 -1
- package/dist/prd/runner.d.ts +0 -19
- package/dist/prd/runner.d.ts.map +0 -1
- package/dist/prd/runner.js +0 -253
- package/dist/prd/runner.js.map +0 -1
- package/dist/prd/scope-check.d.ts +0 -28
- package/dist/prd/scope-check.d.ts.map +0 -1
- package/dist/prd/scope-check.js +0 -135
- package/dist/prd/scope-check.js.map +0 -1
- package/dist/prd/scope-defaults.d.ts +0 -75
- package/dist/prd/scope-defaults.d.ts.map +0 -1
- package/dist/prd/scope-defaults.js +0 -235
- package/dist/prd/scope-defaults.js.map +0 -1
- package/dist/prd/types.d.ts +0 -101
- package/dist/prd/types.d.ts.map +0 -1
- package/dist/prd/types.js +0 -2
- package/dist/prd/types.js.map +0 -1
- package/dist/provider.d.ts +0 -6
- package/dist/provider.d.ts.map +0 -1
- package/dist/provider.js +0 -2
- package/dist/provider.js.map +0 -1
- package/dist/report.d.ts +0 -137
- package/dist/report.d.ts.map +0 -1
- package/dist/report.js +0 -234
- package/dist/report.js.map +0 -1
- package/dist/test-helpers.d.ts +0 -12
- package/dist/test-helpers.d.ts.map +0 -1
- package/dist/test-helpers.js +0 -33
- package/dist/test-helpers.js.map +0 -1
- package/dist/types.d.ts +0 -41
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -2
- package/dist/types.js.map +0 -1
- package/dist/utils.d.ts +0 -22
- package/dist/utils.d.ts.map +0 -1
- package/dist/utils.js +0 -49
- package/dist/utils.js.map +0 -1
- package/dist/validation.d.ts +0 -6
- package/dist/validation.d.ts.map +0 -1
- package/dist/validation.js +0 -38
- package/dist/validation.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"analytics.js","sourceRoot":"","sources":["../../src/cloudflare/analytics.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cli-stream.d.ts","sourceRoot":"","sources":["../../src/cloudflare/cli-stream.ts"],"names":[],"mappings":"AAGA,OAAO,EAA0E,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AAElH,MAAM,WAAW,eAAe;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AA8BD,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,eAAe,GACtB,OAAO,CAiFT"}
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
import { spawn } from "node:child_process";
|
|
2
|
-
import { Effect, Queue, Either } from "effect";
|
|
3
|
-
import { createLogStreamFromQueue, createObservabilityError } from "../observe";
|
|
4
|
-
function parseLogLine(line) {
|
|
5
|
-
return Effect.gen(function* () {
|
|
6
|
-
const parsed = yield* Effect.try({
|
|
7
|
-
try: () => JSON.parse(line),
|
|
8
|
-
catch: (e) => createObservabilityError(e)
|
|
9
|
-
});
|
|
10
|
-
const msg = parsed.message;
|
|
11
|
-
if (typeof msg === "string") {
|
|
12
|
-
const innerResult = yield* Effect.try({
|
|
13
|
-
try: () => JSON.parse(msg),
|
|
14
|
-
catch: () => createObservabilityError(new Error("Failed to parse inner JSON"))
|
|
15
|
-
}).pipe(Effect.either);
|
|
16
|
-
if (Either.isRight(innerResult) && innerResult.right && typeof innerResult.right === "object") {
|
|
17
|
-
const merged = {
|
|
18
|
-
...parsed,
|
|
19
|
-
...innerResult.right
|
|
20
|
-
};
|
|
21
|
-
return merged;
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
return parsed;
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
export function createCliStreamBackend(config) {
|
|
28
|
-
let proc = null;
|
|
29
|
-
const releaseProcess = (procToRelease) => {
|
|
30
|
-
return Effect.gen(function* () {
|
|
31
|
-
procToRelease.kill("SIGTERM");
|
|
32
|
-
yield* Effect.tryPromise({
|
|
33
|
-
try: () => new Promise((resolve) => {
|
|
34
|
-
procToRelease.on("exit", () => resolve());
|
|
35
|
-
procToRelease.on("close", () => resolve());
|
|
36
|
-
setTimeout(() => resolve(), 1000);
|
|
37
|
-
}),
|
|
38
|
-
catch: () => createObservabilityError(new Error("Process cleanup failed"))
|
|
39
|
-
}).pipe(Effect.tapError((error) => Effect.logError("Process cleanup error", error)),
|
|
40
|
-
// Swallow errors during cleanup - already logged above
|
|
41
|
-
Effect.catchAll(() => Effect.void));
|
|
42
|
-
});
|
|
43
|
-
};
|
|
44
|
-
return {
|
|
45
|
-
start() {
|
|
46
|
-
return Effect.gen(function* () {
|
|
47
|
-
const queue = yield* Queue.unbounded();
|
|
48
|
-
const args = ["tail"];
|
|
49
|
-
if (config.workerName)
|
|
50
|
-
args.push(config.workerName);
|
|
51
|
-
args.push("--format", "json");
|
|
52
|
-
const env = { ...process.env };
|
|
53
|
-
if (config.accountId) {
|
|
54
|
-
env.CLOUDFLARE_ACCOUNT_ID = config.accountId;
|
|
55
|
-
}
|
|
56
|
-
proc = spawn("wrangler", args, {
|
|
57
|
-
stdio: ["ignore", "pipe", "pipe"],
|
|
58
|
-
env
|
|
59
|
-
});
|
|
60
|
-
if (!proc.stdout || !proc.stderr) {
|
|
61
|
-
yield* Effect.fail(createObservabilityError(new Error("Failed to spawn wrangler")));
|
|
62
|
-
}
|
|
63
|
-
proc.stdout.on("data", (buf) => {
|
|
64
|
-
const lines = buf.toString("utf8").split("\n").filter(Boolean);
|
|
65
|
-
for (const line of lines) {
|
|
66
|
-
void Effect.runPromise(parseLogLine(line).pipe(Effect.flatMap((log) => Queue.offer(queue, log)), Effect.tapError((error) => Effect.logError("Failed to parse log line", error)), Effect.catchAll(() => Effect.void))).catch(() => { });
|
|
67
|
-
}
|
|
68
|
-
});
|
|
69
|
-
proc.stderr.on("data", (buf) => {
|
|
70
|
-
process.stderr.write(buf);
|
|
71
|
-
});
|
|
72
|
-
return createLogStreamFromQueue(queue);
|
|
73
|
-
}).pipe(Effect.catchAll((cause) => Effect.fail(createObservabilityError(cause))));
|
|
74
|
-
},
|
|
75
|
-
stop() {
|
|
76
|
-
return Effect.gen(function* () {
|
|
77
|
-
if (proc) {
|
|
78
|
-
yield* releaseProcess(proc);
|
|
79
|
-
proc = null;
|
|
80
|
-
}
|
|
81
|
-
});
|
|
82
|
-
}
|
|
83
|
-
};
|
|
84
|
-
}
|
|
85
|
-
//# sourceMappingURL=cli-stream.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cli-stream.js","sourceRoot":"","sources":["../../src/cloudflare/cli-stream.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { Effect } from "effect";
|
|
2
|
-
import type { Log, LogStream } from "../types";
|
|
3
|
-
import { ObservabilityError } from "../observe";
|
|
4
|
-
export interface PollingBackendConfig {
|
|
5
|
-
pollInterval?: number;
|
|
6
|
-
}
|
|
7
|
-
export interface PollingBackend<T> {
|
|
8
|
-
fetchData(lastTimestamp: number): Effect.Effect<T[], ObservabilityError, never>;
|
|
9
|
-
processData(data: T[], lastTimestamp: number): {
|
|
10
|
-
logs: Log[];
|
|
11
|
-
newTimestamp: number;
|
|
12
|
-
};
|
|
13
|
-
}
|
|
14
|
-
export declare function createPollingBackend<T>(config: PollingBackendConfig, backend: PollingBackend<T>): {
|
|
15
|
-
start(): Effect.Effect<LogStream, ObservabilityError>;
|
|
16
|
-
stop(): Effect.Effect<void, ObservabilityError>;
|
|
17
|
-
};
|
|
18
|
-
//# sourceMappingURL=polling-backend.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"polling-backend.d.ts","sourceRoot":"","sources":["../../src/cloudflare/polling-backend.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAA+B,MAAM,QAAQ,CAAC;AAC7D,OAAO,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAsD,MAAM,YAAY,CAAC;AAEpG,MAAM,WAAW,oBAAoB;IACnC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,cAAc,CAAC,CAAC;IAC/B,SAAS,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,kBAAkB,EAAE,KAAK,CAAC,CAAC;IAChF,WAAW,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,aAAa,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,GAAG,EAAE,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;CACtF;AAED,wBAAgB,oBAAoB,CAAC,CAAC,EACpC,MAAM,EAAE,oBAAoB,EAC5B,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,GACzB;IACD,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;IACtD,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC;CACjD,CAmEA"}
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import { Effect, Queue, Fiber, Ref } from "effect";
|
|
2
|
-
import { createLogStreamFromQueue } from "../observe";
|
|
3
|
-
export function createPollingBackend(config, backend) {
|
|
4
|
-
const stoppedRef = Ref.unsafeMake(false);
|
|
5
|
-
let fiberRef = null;
|
|
6
|
-
return {
|
|
7
|
-
start() {
|
|
8
|
-
return Effect.gen(function* () {
|
|
9
|
-
const queue = yield* Queue.bounded(10000);
|
|
10
|
-
let lastTimestamp = Date.now() - 60000;
|
|
11
|
-
const pollOnce = Effect.gen(function* () {
|
|
12
|
-
const isStopped = yield* Ref.get(stoppedRef);
|
|
13
|
-
if (isStopped)
|
|
14
|
-
return;
|
|
15
|
-
const data = yield* backend.fetchData(lastTimestamp).pipe(Effect.catchAll((error) => Effect.gen(function* () {
|
|
16
|
-
yield* Effect.logError("Failed to fetch data", error);
|
|
17
|
-
return [];
|
|
18
|
-
})));
|
|
19
|
-
const { logs, newTimestamp } = backend.processData(data, lastTimestamp);
|
|
20
|
-
lastTimestamp = newTimestamp;
|
|
21
|
-
for (const log of logs) {
|
|
22
|
-
const isStopped = yield* Ref.get(stoppedRef);
|
|
23
|
-
if (isStopped)
|
|
24
|
-
break;
|
|
25
|
-
yield* Queue.offer(queue, log).pipe(Effect.catchAll(() => Effect.void));
|
|
26
|
-
}
|
|
27
|
-
});
|
|
28
|
-
const pollLoop = Effect.gen(function* () {
|
|
29
|
-
while (true) {
|
|
30
|
-
const isStopped = yield* Ref.get(stoppedRef);
|
|
31
|
-
if (isStopped)
|
|
32
|
-
break;
|
|
33
|
-
yield* pollOnce;
|
|
34
|
-
yield* Effect.sleep(`${config.pollInterval ?? 1000} millis`);
|
|
35
|
-
}
|
|
36
|
-
});
|
|
37
|
-
const fiber = yield* Effect.forkDaemon(pollLoop.pipe(Effect.tapError((error) => Effect.logError("Polling failed", error))));
|
|
38
|
-
fiberRef = fiber;
|
|
39
|
-
return createLogStreamFromQueue(queue);
|
|
40
|
-
});
|
|
41
|
-
},
|
|
42
|
-
stop() {
|
|
43
|
-
return Effect.gen(function* () {
|
|
44
|
-
yield* Ref.set(stoppedRef, true);
|
|
45
|
-
if (fiberRef) {
|
|
46
|
-
yield* Fiber.interrupt(fiberRef);
|
|
47
|
-
fiberRef = null;
|
|
48
|
-
}
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
//# sourceMappingURL=polling-backend.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"polling-backend.js","sourceRoot":"","sources":["../../src/cloudflare/polling-backend.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { type Backend } from "../observe";
|
|
2
|
-
export interface WorkersLogsConfig {
|
|
3
|
-
accountId: string;
|
|
4
|
-
apiToken: string;
|
|
5
|
-
workerName: string;
|
|
6
|
-
pollInterval?: number;
|
|
7
|
-
}
|
|
8
|
-
export declare function createWorkersLogsBackend(config: WorkersLogsConfig): Backend;
|
|
9
|
-
//# sourceMappingURL=workers-logs.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"workers-logs.d.ts","sourceRoot":"","sources":["../../src/cloudflare/workers-logs.ts"],"names":[],"mappings":"AAEA,OAAO,EAAgD,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AAGxF,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,iBAAiB,GACxB,OAAO,CAyDT"}
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import { Effect, Schedule } from "effect";
|
|
2
|
-
import { createObservabilityError } from "../observe";
|
|
3
|
-
import { createPollingBackend } from "./polling-backend";
|
|
4
|
-
export function createWorkersLogsBackend(config) {
|
|
5
|
-
const fetchLogs = (lastTs) => {
|
|
6
|
-
return Effect.gen(function* () {
|
|
7
|
-
const response = yield* Effect.tryPromise({
|
|
8
|
-
try: async () => {
|
|
9
|
-
return await fetch(`https://api.cloudflare.com/client/v4/accounts/${config.accountId}/workers/${config.workerName}/logs`, {
|
|
10
|
-
method: "GET",
|
|
11
|
-
headers: {
|
|
12
|
-
Authorization: `Bearer ${config.apiToken}`,
|
|
13
|
-
"Content-Type": "application/json"
|
|
14
|
-
}
|
|
15
|
-
});
|
|
16
|
-
},
|
|
17
|
-
catch: (e) => createObservabilityError(e)
|
|
18
|
-
}).pipe(Effect.timeout("30 seconds"), Effect.retry(Schedule.exponential("100 millis").pipe(Schedule.compose(Schedule.recurs(3)))), Effect.catchTag("TimeoutException", (e) => Effect.fail(createObservabilityError(e))));
|
|
19
|
-
if (!response.ok) {
|
|
20
|
-
yield* Effect.fail(createObservabilityError(new Error(`API request failed: ${response.status}`)));
|
|
21
|
-
}
|
|
22
|
-
const data = yield* Effect.tryPromise({
|
|
23
|
-
try: async () => (await response.json()),
|
|
24
|
-
catch: (e) => createObservabilityError(e)
|
|
25
|
-
});
|
|
26
|
-
const logs = data.result && Array.isArray(data.result) ? data.result : [];
|
|
27
|
-
return logs.filter((log) => {
|
|
28
|
-
if (log.timestamp) {
|
|
29
|
-
const ts = new Date(log.timestamp).getTime();
|
|
30
|
-
return ts > lastTs;
|
|
31
|
-
}
|
|
32
|
-
return false;
|
|
33
|
-
});
|
|
34
|
-
});
|
|
35
|
-
};
|
|
36
|
-
const backend = {
|
|
37
|
-
fetchData: fetchLogs,
|
|
38
|
-
processData(logs, lastTimestamp) {
|
|
39
|
-
let newTimestamp = lastTimestamp;
|
|
40
|
-
for (const log of logs) {
|
|
41
|
-
if (log.timestamp) {
|
|
42
|
-
const ts = new Date(log.timestamp).getTime();
|
|
43
|
-
newTimestamp = Math.max(newTimestamp, ts);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
return { logs, newTimestamp };
|
|
47
|
-
}
|
|
48
|
-
};
|
|
49
|
-
return createPollingBackend({ pollInterval: config.pollInterval ?? 1000 }, backend);
|
|
50
|
-
}
|
|
51
|
-
//# sourceMappingURL=workers-logs.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"workers-logs.js","sourceRoot":"","sources":["../../src/cloudflare/workers-logs.ts"],"names":[],"mappings":"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"}
|
package/dist/constants.d.ts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
export declare const DEFAULT_IDLE_MS = 3000;
|
|
2
|
-
export declare const DEFAULT_MAX_MS = 15000;
|
|
3
|
-
export declare const MAX_LOG_BUFFER = 50000;
|
|
4
|
-
export declare const LOG_BUFFER_CAPACITY = 1000;
|
|
5
|
-
export declare const HTTP_DEFAULT_POLL_INTERVAL_MS = 1000;
|
|
6
|
-
export declare const HTTP_DEFAULT_TIMEOUT_MS = 5000;
|
|
7
|
-
export declare const HTTP_MAX_RESPONSE_SIZE_BYTES: number;
|
|
8
|
-
export declare const QUEUE_TAKE_TIMEOUT_MS = 100;
|
|
9
|
-
export declare const QUEUE_DRAIN_LIMIT = 100;
|
|
10
|
-
export declare const QUEUE_DRAIN_TIMEOUT_MS = 10;
|
|
11
|
-
//# sourceMappingURL=constants.d.ts.map
|
package/dist/constants.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,OAAO,CAAC;AACpC,eAAO,MAAM,cAAc,QAAQ,CAAC;AAEpC,eAAO,MAAM,cAAc,QAAS,CAAC;AACrC,eAAO,MAAM,mBAAmB,OAAO,CAAC;AAExC,eAAO,MAAM,6BAA6B,OAAO,CAAC;AAClD,eAAO,MAAM,uBAAuB,OAAO,CAAC;AAC5C,eAAO,MAAM,4BAA4B,QAAmB,CAAC;AAE7D,eAAO,MAAM,qBAAqB,MAAM,CAAC;AACzC,eAAO,MAAM,iBAAiB,MAAM,CAAC;AACrC,eAAO,MAAM,sBAAsB,KAAK,CAAC"}
|
package/dist/constants.js
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
export const DEFAULT_IDLE_MS = 3000;
|
|
2
|
-
export const DEFAULT_MAX_MS = 15000;
|
|
3
|
-
export const MAX_LOG_BUFFER = 50_000;
|
|
4
|
-
export const LOG_BUFFER_CAPACITY = 1000;
|
|
5
|
-
export const HTTP_DEFAULT_POLL_INTERVAL_MS = 1000;
|
|
6
|
-
export const HTTP_DEFAULT_TIMEOUT_MS = 5000;
|
|
7
|
-
export const HTTP_MAX_RESPONSE_SIZE_BYTES = 10 * 1024 * 1024;
|
|
8
|
-
export const QUEUE_TAKE_TIMEOUT_MS = 100;
|
|
9
|
-
export const QUEUE_DRAIN_LIMIT = 100;
|
|
10
|
-
export const QUEUE_DRAIN_TIMEOUT_MS = 10;
|
|
11
|
-
//# sourceMappingURL=constants.js.map
|
package/dist/constants.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC;AACpC,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,CAAC;AAEpC,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC;AACrC,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,CAAC;AAExC,MAAM,CAAC,MAAM,6BAA6B,GAAG,IAAI,CAAC;AAClD,MAAM,CAAC,MAAM,uBAAuB,GAAG,IAAI,CAAC;AAC5C,MAAM,CAAC,MAAM,4BAA4B,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAE7D,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,CAAC;AACzC,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,CAAC;AACrC,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,CAAC"}
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Filepath Backend — ObserveResource implementation for Filepath containers
|
|
3
|
-
*
|
|
4
|
-
* Creates an observe resource that reads NDJSON events from a Filepath
|
|
5
|
-
* agent container's stdout and maps them to Gateproof Log entries.
|
|
6
|
-
*
|
|
7
|
-
* This is the bridge: Filepath's agent protocol becomes observable
|
|
8
|
-
* evidence for gate assertions.
|
|
9
|
-
*/
|
|
10
|
-
import type { AgentActConfig } from "./act";
|
|
11
|
-
import { type Backend, type ObserveResource } from "./observe";
|
|
12
|
-
import { type AgentEvent } from "./filepath-protocol";
|
|
13
|
-
/**
|
|
14
|
-
* Interface for a Filepath container connection.
|
|
15
|
-
* Implemented by real container runtimes or test mocks.
|
|
16
|
-
*/
|
|
17
|
-
export interface FilepathContainer {
|
|
18
|
-
/** NDJSON line stream from the container's stdout */
|
|
19
|
-
stdout: AsyncIterable<string>;
|
|
20
|
-
/** Send an NDJSON message to the container's stdin */
|
|
21
|
-
sendInput(line: string): Promise<void>;
|
|
22
|
-
/** Stop the container */
|
|
23
|
-
stop(): Promise<void>;
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Interface for spawning Filepath containers.
|
|
27
|
-
* Swap implementations for real containers vs test mocks.
|
|
28
|
-
*/
|
|
29
|
-
export interface FilepathRuntime {
|
|
30
|
-
spawn(config: AgentActConfig): Promise<FilepathContainer>;
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Creates a Backend that reads NDJSON events from a Filepath container
|
|
34
|
-
* and emits them as Gateproof Log entries.
|
|
35
|
-
*/
|
|
36
|
-
export declare function createFilepathBackend(container: FilepathContainer, agentName?: string): Backend;
|
|
37
|
-
/**
|
|
38
|
-
* Creates an ObserveResource backed by a Filepath container.
|
|
39
|
-
*
|
|
40
|
-
* Usage:
|
|
41
|
-
* ```ts
|
|
42
|
-
* const container = await runtime.spawn(config);
|
|
43
|
-
* const observe = createFilepathObserveResource(container, "my-agent");
|
|
44
|
-
*
|
|
45
|
-
* const result = await Gate.run({
|
|
46
|
-
* observe,
|
|
47
|
-
* act: [Act.wait(1000)],
|
|
48
|
-
* assert: [Assert.hasAction("commit")],
|
|
49
|
-
* });
|
|
50
|
-
* ```
|
|
51
|
-
*/
|
|
52
|
-
export declare function createFilepathObserveResource(container: FilepathContainer, agentName?: string): ObserveResource;
|
|
53
|
-
/**
|
|
54
|
-
* Creates a mock Filepath container for testing.
|
|
55
|
-
*
|
|
56
|
-
* Feed it NDJSON events and it emits them as if they came from a real container.
|
|
57
|
-
* Use `container.emit(event)` to push events, `container.done()` to signal completion.
|
|
58
|
-
*/
|
|
59
|
-
export declare function createMockFilepathContainer(): FilepathContainer & {
|
|
60
|
-
emit(event: AgentEvent): void;
|
|
61
|
-
emitRaw(line: string): void;
|
|
62
|
-
done(): void;
|
|
63
|
-
};
|
|
64
|
-
//# sourceMappingURL=filepath-backend.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"filepath-backend.d.ts","sourceRoot":"","sources":["../src/filepath-backend.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAyB,KAAK,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,WAAW,CAAC;AACtF,OAAO,EAAoD,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAExG;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,qDAAqD;IACrD,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC9B,sDAAsD;IACtD,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,yBAAyB;IACzB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;CAC3D;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,iBAAiB,EAC5B,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAwBT;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,6BAA6B,CAC3C,SAAS,EAAE,iBAAiB,EAC5B,SAAS,CAAC,EAAE,MAAM,GACjB,eAAe,CAEjB;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,IAAI,iBAAiB,GAAG;IACjE,IAAI,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;IAC9B,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,IAAI,IAAI,IAAI,CAAC;CACd,CA4DA"}
|
package/dist/filepath-backend.js
DELETED
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Filepath Backend — ObserveResource implementation for Filepath containers
|
|
3
|
-
*
|
|
4
|
-
* Creates an observe resource that reads NDJSON events from a Filepath
|
|
5
|
-
* agent container's stdout and maps them to Gateproof Log entries.
|
|
6
|
-
*
|
|
7
|
-
* This is the bridge: Filepath's agent protocol becomes observable
|
|
8
|
-
* evidence for gate assertions.
|
|
9
|
-
*/
|
|
10
|
-
import { Effect } from "effect";
|
|
11
|
-
import { createObserveResource } from "./observe";
|
|
12
|
-
import { agentEventToLog, parseAgentEvent } from "./filepath-protocol";
|
|
13
|
-
/**
|
|
14
|
-
* Creates a Backend that reads NDJSON events from a Filepath container
|
|
15
|
-
* and emits them as Gateproof Log entries.
|
|
16
|
-
*/
|
|
17
|
-
export function createFilepathBackend(container, agentName) {
|
|
18
|
-
return {
|
|
19
|
-
start() {
|
|
20
|
-
return Effect.succeed({
|
|
21
|
-
async *[Symbol.asyncIterator]() {
|
|
22
|
-
for await (const line of container.stdout) {
|
|
23
|
-
const trimmed = line.trim();
|
|
24
|
-
if (!trimmed)
|
|
25
|
-
continue;
|
|
26
|
-
const event = parseAgentEvent(trimmed);
|
|
27
|
-
if (!event)
|
|
28
|
-
continue;
|
|
29
|
-
yield agentEventToLog(event, agentName);
|
|
30
|
-
}
|
|
31
|
-
},
|
|
32
|
-
});
|
|
33
|
-
},
|
|
34
|
-
stop() {
|
|
35
|
-
return Effect.tryPromise({
|
|
36
|
-
try: () => container.stop(),
|
|
37
|
-
catch: () => undefined,
|
|
38
|
-
}).pipe(Effect.catchAll(() => Effect.void));
|
|
39
|
-
},
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Creates an ObserveResource backed by a Filepath container.
|
|
44
|
-
*
|
|
45
|
-
* Usage:
|
|
46
|
-
* ```ts
|
|
47
|
-
* const container = await runtime.spawn(config);
|
|
48
|
-
* const observe = createFilepathObserveResource(container, "my-agent");
|
|
49
|
-
*
|
|
50
|
-
* const result = await Gate.run({
|
|
51
|
-
* observe,
|
|
52
|
-
* act: [Act.wait(1000)],
|
|
53
|
-
* assert: [Assert.hasAction("commit")],
|
|
54
|
-
* });
|
|
55
|
-
* ```
|
|
56
|
-
*/
|
|
57
|
-
export function createFilepathObserveResource(container, agentName) {
|
|
58
|
-
return createObserveResource(createFilepathBackend(container, agentName));
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Creates a mock Filepath container for testing.
|
|
62
|
-
*
|
|
63
|
-
* Feed it NDJSON events and it emits them as if they came from a real container.
|
|
64
|
-
* Use `container.emit(event)` to push events, `container.done()` to signal completion.
|
|
65
|
-
*/
|
|
66
|
-
export function createMockFilepathContainer() {
|
|
67
|
-
const lines = [];
|
|
68
|
-
let resolve = null;
|
|
69
|
-
let isDone = false;
|
|
70
|
-
const waitForLine = () => new Promise((r) => {
|
|
71
|
-
resolve = r;
|
|
72
|
-
});
|
|
73
|
-
return {
|
|
74
|
-
emit(event) {
|
|
75
|
-
lines.push(JSON.stringify(event));
|
|
76
|
-
if (resolve) {
|
|
77
|
-
const r = resolve;
|
|
78
|
-
resolve = null;
|
|
79
|
-
r();
|
|
80
|
-
}
|
|
81
|
-
},
|
|
82
|
-
emitRaw(line) {
|
|
83
|
-
lines.push(line);
|
|
84
|
-
if (resolve) {
|
|
85
|
-
const r = resolve;
|
|
86
|
-
resolve = null;
|
|
87
|
-
r();
|
|
88
|
-
}
|
|
89
|
-
},
|
|
90
|
-
done() {
|
|
91
|
-
isDone = true;
|
|
92
|
-
if (resolve) {
|
|
93
|
-
const r = resolve;
|
|
94
|
-
resolve = null;
|
|
95
|
-
r();
|
|
96
|
-
}
|
|
97
|
-
},
|
|
98
|
-
stdout: {
|
|
99
|
-
async *[Symbol.asyncIterator]() {
|
|
100
|
-
while (true) {
|
|
101
|
-
if (lines.length > 0) {
|
|
102
|
-
yield lines.shift();
|
|
103
|
-
}
|
|
104
|
-
else if (isDone) {
|
|
105
|
-
return;
|
|
106
|
-
}
|
|
107
|
-
else {
|
|
108
|
-
await waitForLine();
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
},
|
|
112
|
-
},
|
|
113
|
-
async sendInput(line) {
|
|
114
|
-
// Mock: just collect input, no real stdin
|
|
115
|
-
},
|
|
116
|
-
async stop() {
|
|
117
|
-
isDone = true;
|
|
118
|
-
if (resolve) {
|
|
119
|
-
const r = resolve;
|
|
120
|
-
resolve = null;
|
|
121
|
-
r();
|
|
122
|
-
}
|
|
123
|
-
},
|
|
124
|
-
};
|
|
125
|
-
}
|
|
126
|
-
//# sourceMappingURL=filepath-backend.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"filepath-backend.js","sourceRoot":"","sources":["../src/filepath-backend.ts"],"names":[],"mappings":"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"}
|