@jamesaphoenix/tx-api-server 0.1.1 → 0.1.2
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/package.json +7 -2
- package/dist/__tests__/api.test.d.ts +0 -7
- package/dist/__tests__/api.test.d.ts.map +0 -1
- package/dist/__tests__/api.test.js +0 -184
- package/dist/__tests__/api.test.js.map +0 -1
- package/dist/__tests__/auth.test.d.ts +0 -7
- package/dist/__tests__/auth.test.d.ts.map +0 -1
- package/dist/__tests__/auth.test.js +0 -174
- package/dist/__tests__/auth.test.js.map +0 -1
- package/dist/__tests__/body-limit.test.d.ts +0 -7
- package/dist/__tests__/body-limit.test.d.ts.map +0 -1
- package/dist/__tests__/body-limit.test.js +0 -60
- package/dist/__tests__/body-limit.test.js.map +0 -1
- package/dist/__tests__/health.test.d.ts.map +0 -1
- package/dist/__tests__/health.test.js.map +0 -1
- package/dist/__tests__/log-reader.test.d.ts +0 -8
- package/dist/__tests__/log-reader.test.d.ts.map +0 -1
- package/dist/__tests__/log-reader.test.js +0 -55
- package/dist/__tests__/log-reader.test.js.map +0 -1
- package/dist/__tests__/rate-limit.test.d.ts.map +0 -1
- package/dist/__tests__/rate-limit.test.js.map +0 -1
- package/dist/__tests__/server-lib.test.d.ts +0 -10
- package/dist/__tests__/server-lib.test.d.ts.map +0 -1
- package/dist/__tests__/server-lib.test.js +0 -145
- package/dist/__tests__/server-lib.test.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jamesaphoenix/tx-api-server",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "TX REST/HTTP API server - OpenAPI-compliant HTTP interface",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -39,7 +39,12 @@
|
|
|
39
39
|
}
|
|
40
40
|
},
|
|
41
41
|
"files": [
|
|
42
|
-
"dist"
|
|
42
|
+
"dist",
|
|
43
|
+
"!dist/__tests__",
|
|
44
|
+
"!dist/**/*.test.*",
|
|
45
|
+
"!dist/**/*.test.d.ts",
|
|
46
|
+
"!dist/**/*.test.d.ts.map",
|
|
47
|
+
"README.md"
|
|
43
48
|
],
|
|
44
49
|
"scripts": {
|
|
45
50
|
"build": "tsc -b",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"api.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/api.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
@@ -1,184 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* API Definition Tests
|
|
3
|
-
*
|
|
4
|
-
* Tests error types, mapCoreError mapping, and API structure.
|
|
5
|
-
*/
|
|
6
|
-
import { describe, it, expect } from "vitest";
|
|
7
|
-
import { Schema } from "effect";
|
|
8
|
-
import { NotFound, BadRequest, InternalError, Unauthorized, Forbidden, ServiceUnavailable, mapCoreError, SafePathString, TxApi, HealthGroup, TasksGroup, LearningsGroup, RunsGroup, SyncGroup, } from "../api.js";
|
|
9
|
-
// =============================================================================
|
|
10
|
-
// Error Type Tests
|
|
11
|
-
// =============================================================================
|
|
12
|
-
describe("Error types", () => {
|
|
13
|
-
it("should create NotFound with message", () => {
|
|
14
|
-
const error = new NotFound({ message: "Task not found" });
|
|
15
|
-
expect(error._tag).toBe("NotFound");
|
|
16
|
-
expect(error.message).toBe("Task not found");
|
|
17
|
-
});
|
|
18
|
-
it("should create BadRequest with message", () => {
|
|
19
|
-
const error = new BadRequest({ message: "Invalid input" });
|
|
20
|
-
expect(error._tag).toBe("BadRequest");
|
|
21
|
-
expect(error.message).toBe("Invalid input");
|
|
22
|
-
});
|
|
23
|
-
it("should create InternalError with message", () => {
|
|
24
|
-
const error = new InternalError({ message: "Something went wrong" });
|
|
25
|
-
expect(error._tag).toBe("InternalError");
|
|
26
|
-
expect(error.message).toBe("Something went wrong");
|
|
27
|
-
});
|
|
28
|
-
it("should create Unauthorized with message", () => {
|
|
29
|
-
const error = new Unauthorized({ message: "Missing credentials" });
|
|
30
|
-
expect(error._tag).toBe("Unauthorized");
|
|
31
|
-
expect(error.message).toBe("Missing credentials");
|
|
32
|
-
});
|
|
33
|
-
it("should create Forbidden with message", () => {
|
|
34
|
-
const error = new Forbidden({ message: "Access denied" });
|
|
35
|
-
expect(error._tag).toBe("Forbidden");
|
|
36
|
-
expect(error.message).toBe("Access denied");
|
|
37
|
-
});
|
|
38
|
-
it("should create ServiceUnavailable with message", () => {
|
|
39
|
-
const error = new ServiceUnavailable({ message: "Service down" });
|
|
40
|
-
expect(error._tag).toBe("ServiceUnavailable");
|
|
41
|
-
expect(error.message).toBe("Service down");
|
|
42
|
-
});
|
|
43
|
-
});
|
|
44
|
-
// =============================================================================
|
|
45
|
-
// mapCoreError Tests
|
|
46
|
-
// =============================================================================
|
|
47
|
-
describe("mapCoreError", () => {
|
|
48
|
-
describe("maps not-found errors to NotFound", () => {
|
|
49
|
-
it("should map TaskNotFoundError", () => {
|
|
50
|
-
const result = mapCoreError({ _tag: "TaskNotFoundError", message: "Task tx-abc123 not found" });
|
|
51
|
-
expect(result._tag).toBe("NotFound");
|
|
52
|
-
expect(result.message).toBe("Task tx-abc123 not found");
|
|
53
|
-
});
|
|
54
|
-
it("should map LearningNotFoundError", () => {
|
|
55
|
-
const result = mapCoreError({ _tag: "LearningNotFoundError", message: "Learning 42 not found" });
|
|
56
|
-
expect(result._tag).toBe("NotFound");
|
|
57
|
-
expect(result.message).toBe("Learning 42 not found");
|
|
58
|
-
});
|
|
59
|
-
it("should map FileLearningNotFoundError", () => {
|
|
60
|
-
const result = mapCoreError({ _tag: "FileLearningNotFoundError", message: "Not found" });
|
|
61
|
-
expect(result._tag).toBe("NotFound");
|
|
62
|
-
});
|
|
63
|
-
it("should map AttemptNotFoundError", () => {
|
|
64
|
-
const result = mapCoreError({ _tag: "AttemptNotFoundError", message: "Not found" });
|
|
65
|
-
expect(result._tag).toBe("NotFound");
|
|
66
|
-
});
|
|
67
|
-
});
|
|
68
|
-
describe("maps validation errors to BadRequest", () => {
|
|
69
|
-
it("should map ValidationError", () => {
|
|
70
|
-
const result = mapCoreError({ _tag: "ValidationError", message: "Title is required" });
|
|
71
|
-
expect(result._tag).toBe("BadRequest");
|
|
72
|
-
expect(result.message).toBe("Title is required");
|
|
73
|
-
});
|
|
74
|
-
it("should map CircularDependencyError", () => {
|
|
75
|
-
const result = mapCoreError({ _tag: "CircularDependencyError", message: "Cycle detected" });
|
|
76
|
-
expect(result._tag).toBe("BadRequest");
|
|
77
|
-
expect(result.message).toBe("Cycle detected");
|
|
78
|
-
});
|
|
79
|
-
});
|
|
80
|
-
describe("maps service errors to ServiceUnavailable", () => {
|
|
81
|
-
it("should map EmbeddingUnavailableError", () => {
|
|
82
|
-
const result = mapCoreError({ _tag: "EmbeddingUnavailableError", message: "No embedding model" });
|
|
83
|
-
expect(result._tag).toBe("ServiceUnavailable");
|
|
84
|
-
expect(result.message).toBe("No embedding model");
|
|
85
|
-
});
|
|
86
|
-
});
|
|
87
|
-
describe("maps database and unknown tagged errors to InternalError", () => {
|
|
88
|
-
it("should map DatabaseError", () => {
|
|
89
|
-
const result = mapCoreError({ _tag: "DatabaseError", message: "Connection failed" });
|
|
90
|
-
expect(result._tag).toBe("InternalError");
|
|
91
|
-
expect(result.message).toBe("Connection failed");
|
|
92
|
-
});
|
|
93
|
-
it("should map unknown tagged errors to InternalError", () => {
|
|
94
|
-
const result = mapCoreError({ _tag: "SomeNewError", message: "Unknown issue" });
|
|
95
|
-
expect(result._tag).toBe("InternalError");
|
|
96
|
-
expect(result.message).toBe("Unknown issue");
|
|
97
|
-
});
|
|
98
|
-
});
|
|
99
|
-
describe("handles non-tagged errors", () => {
|
|
100
|
-
it("should map string errors to InternalError", () => {
|
|
101
|
-
const result = mapCoreError("Something broke");
|
|
102
|
-
expect(result._tag).toBe("InternalError");
|
|
103
|
-
expect(result.message).toBe("Something broke");
|
|
104
|
-
});
|
|
105
|
-
it("should map Error objects to InternalError", () => {
|
|
106
|
-
const result = mapCoreError(new Error("Unexpected"));
|
|
107
|
-
expect(result._tag).toBe("InternalError");
|
|
108
|
-
});
|
|
109
|
-
it("should map null to InternalError", () => {
|
|
110
|
-
const result = mapCoreError(null);
|
|
111
|
-
expect(result._tag).toBe("InternalError");
|
|
112
|
-
expect(result.message).toBe("null");
|
|
113
|
-
});
|
|
114
|
-
it("should map undefined to InternalError", () => {
|
|
115
|
-
const result = mapCoreError(undefined);
|
|
116
|
-
expect(result._tag).toBe("InternalError");
|
|
117
|
-
expect(result.message).toBe("undefined");
|
|
118
|
-
});
|
|
119
|
-
it("should use _tag as message when no message field present", () => {
|
|
120
|
-
const result = mapCoreError({ _tag: "TaskNotFoundError" });
|
|
121
|
-
expect(result._tag).toBe("NotFound");
|
|
122
|
-
expect(result.message).toBe("TaskNotFoundError");
|
|
123
|
-
});
|
|
124
|
-
});
|
|
125
|
-
});
|
|
126
|
-
// =============================================================================
|
|
127
|
-
// API Structure Tests
|
|
128
|
-
// =============================================================================
|
|
129
|
-
describe("API structure", () => {
|
|
130
|
-
it("should export TxApi class", () => {
|
|
131
|
-
expect(TxApi).toBeDefined();
|
|
132
|
-
});
|
|
133
|
-
it("should export all groups", () => {
|
|
134
|
-
expect(HealthGroup).toBeDefined();
|
|
135
|
-
expect(TasksGroup).toBeDefined();
|
|
136
|
-
expect(LearningsGroup).toBeDefined();
|
|
137
|
-
expect(RunsGroup).toBeDefined();
|
|
138
|
-
expect(SyncGroup).toBeDefined();
|
|
139
|
-
});
|
|
140
|
-
});
|
|
141
|
-
// =============================================================================
|
|
142
|
-
// SafePathString Tests
|
|
143
|
-
// =============================================================================
|
|
144
|
-
describe("SafePathString", () => {
|
|
145
|
-
const decode = Schema.decodeUnknownSync(SafePathString);
|
|
146
|
-
describe("accepts valid paths", () => {
|
|
147
|
-
it("should accept absolute paths", () => {
|
|
148
|
-
expect(decode("/home/user/.claude/projects/session.jsonl")).toBe("/home/user/.claude/projects/session.jsonl");
|
|
149
|
-
});
|
|
150
|
-
it("should accept paths with .tx/runs/", () => {
|
|
151
|
-
expect(decode("/project/.tx/runs/run-abc12345/stdout.log")).toBe("/project/.tx/runs/run-abc12345/stdout.log");
|
|
152
|
-
});
|
|
153
|
-
it("should accept tilde paths", () => {
|
|
154
|
-
expect(decode("~/.claude/projects/abc/session.jsonl")).toBe("~/.claude/projects/abc/session.jsonl");
|
|
155
|
-
});
|
|
156
|
-
it("should accept single dots in paths", () => {
|
|
157
|
-
expect(decode("/home/user/./file.txt")).toBe("/home/user/./file.txt");
|
|
158
|
-
});
|
|
159
|
-
it("should accept files named with double dots in name (not as segment)", () => {
|
|
160
|
-
expect(decode("/home/user/file..txt")).toBe("/home/user/file..txt");
|
|
161
|
-
});
|
|
162
|
-
});
|
|
163
|
-
describe("rejects traversal attacks", () => {
|
|
164
|
-
it("should reject paths with .. traversal", () => {
|
|
165
|
-
expect(() => decode("/home/user/../etc/passwd")).toThrow();
|
|
166
|
-
});
|
|
167
|
-
it("should reject paths starting with ..", () => {
|
|
168
|
-
expect(() => decode("../etc/passwd")).toThrow();
|
|
169
|
-
});
|
|
170
|
-
it("should reject paths ending with ..", () => {
|
|
171
|
-
expect(() => decode("/home/user/..")).toThrow();
|
|
172
|
-
});
|
|
173
|
-
it("should reject bare ..", () => {
|
|
174
|
-
expect(() => decode("..")).toThrow();
|
|
175
|
-
});
|
|
176
|
-
it("should reject paths with null bytes", () => {
|
|
177
|
-
expect(() => decode("/home/user/\0/file.txt")).toThrow();
|
|
178
|
-
});
|
|
179
|
-
it("should reject paths with embedded null byte before extension", () => {
|
|
180
|
-
expect(() => decode("/home/user/file.txt\0.jpg")).toThrow();
|
|
181
|
-
});
|
|
182
|
-
});
|
|
183
|
-
});
|
|
184
|
-
//# sourceMappingURL=api.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"api.test.js","sourceRoot":"","sources":["../../src/__tests__/api.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auth.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/auth.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
@@ -1,174 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Authentication Middleware Tests
|
|
3
|
-
*
|
|
4
|
-
* Tests API key extraction, timing-safe comparison, and middleware behavior.
|
|
5
|
-
*/
|
|
6
|
-
import { describe, it, expect, beforeEach, afterEach } from "vitest";
|
|
7
|
-
import { isAuthEnabled, extractApiKey, timingSafeEqual, authMiddleware } from "../middleware/auth.js";
|
|
8
|
-
// =============================================================================
|
|
9
|
-
// isAuthEnabled Tests
|
|
10
|
-
// =============================================================================
|
|
11
|
-
describe("isAuthEnabled", () => {
|
|
12
|
-
let originalApiKey;
|
|
13
|
-
beforeEach(() => {
|
|
14
|
-
originalApiKey = process.env.TX_API_KEY;
|
|
15
|
-
});
|
|
16
|
-
afterEach(() => {
|
|
17
|
-
if (originalApiKey === undefined) {
|
|
18
|
-
delete process.env.TX_API_KEY;
|
|
19
|
-
}
|
|
20
|
-
else {
|
|
21
|
-
process.env.TX_API_KEY = originalApiKey;
|
|
22
|
-
}
|
|
23
|
-
});
|
|
24
|
-
it("should return false when TX_API_KEY is not set", () => {
|
|
25
|
-
delete process.env.TX_API_KEY;
|
|
26
|
-
expect(isAuthEnabled()).toBe(false);
|
|
27
|
-
});
|
|
28
|
-
it("should return false when TX_API_KEY is empty string", () => {
|
|
29
|
-
process.env.TX_API_KEY = "";
|
|
30
|
-
expect(isAuthEnabled()).toBe(false);
|
|
31
|
-
});
|
|
32
|
-
it("should return true when TX_API_KEY is set", () => {
|
|
33
|
-
process.env.TX_API_KEY = "test-key-12345";
|
|
34
|
-
expect(isAuthEnabled()).toBe(true);
|
|
35
|
-
});
|
|
36
|
-
it("should return true for any non-empty TX_API_KEY value", () => {
|
|
37
|
-
process.env.TX_API_KEY = "x";
|
|
38
|
-
expect(isAuthEnabled()).toBe(true);
|
|
39
|
-
});
|
|
40
|
-
});
|
|
41
|
-
// =============================================================================
|
|
42
|
-
// extractApiKey Tests
|
|
43
|
-
// =============================================================================
|
|
44
|
-
describe("extractApiKey", () => {
|
|
45
|
-
it("should extract X-Api-Key header", () => {
|
|
46
|
-
const result = extractApiKey({ "x-api-key": "my-secret" });
|
|
47
|
-
expect(result).toBe("my-secret");
|
|
48
|
-
});
|
|
49
|
-
it("should extract Bearer token from Authorization header", () => {
|
|
50
|
-
const result = extractApiKey({ "authorization": "Bearer my-token" });
|
|
51
|
-
expect(result).toBe("my-token");
|
|
52
|
-
});
|
|
53
|
-
it("should prefer X-Api-Key over Authorization header", () => {
|
|
54
|
-
const result = extractApiKey({
|
|
55
|
-
"x-api-key": "from-x-api-key",
|
|
56
|
-
"authorization": "Bearer from-bearer",
|
|
57
|
-
});
|
|
58
|
-
expect(result).toBe("from-x-api-key");
|
|
59
|
-
});
|
|
60
|
-
it("should return null when no auth headers present", () => {
|
|
61
|
-
const result = extractApiKey({});
|
|
62
|
-
expect(result).toBeNull();
|
|
63
|
-
});
|
|
64
|
-
it("should return null for non-Bearer Authorization header", () => {
|
|
65
|
-
const result = extractApiKey({ "authorization": "Basic dXNlcjpwYXNz" });
|
|
66
|
-
expect(result).toBeNull();
|
|
67
|
-
});
|
|
68
|
-
it("should return null for empty Authorization header", () => {
|
|
69
|
-
const result = extractApiKey({ "authorization": "" });
|
|
70
|
-
expect(result).toBeNull();
|
|
71
|
-
});
|
|
72
|
-
it("should handle undefined header values", () => {
|
|
73
|
-
const result = extractApiKey({ "x-api-key": undefined, "authorization": undefined });
|
|
74
|
-
expect(result).toBeNull();
|
|
75
|
-
});
|
|
76
|
-
it("should extract Bearer token with spaces in the token", () => {
|
|
77
|
-
const result = extractApiKey({ "authorization": "Bearer abc def" });
|
|
78
|
-
expect(result).toBe("abc def");
|
|
79
|
-
});
|
|
80
|
-
});
|
|
81
|
-
// =============================================================================
|
|
82
|
-
// timingSafeEqual Tests
|
|
83
|
-
// =============================================================================
|
|
84
|
-
describe("timingSafeEqual", () => {
|
|
85
|
-
it("should return true for equal strings", () => {
|
|
86
|
-
expect(timingSafeEqual("secret123", "secret123")).toBe(true);
|
|
87
|
-
});
|
|
88
|
-
it("should return false for different strings of same length", () => {
|
|
89
|
-
expect(timingSafeEqual("secret123", "secret456")).toBe(false);
|
|
90
|
-
});
|
|
91
|
-
it("should return false for different strings of different length", () => {
|
|
92
|
-
expect(timingSafeEqual("short", "longer-string")).toBe(false);
|
|
93
|
-
});
|
|
94
|
-
it("should return true for empty strings", () => {
|
|
95
|
-
expect(timingSafeEqual("", "")).toBe(true);
|
|
96
|
-
});
|
|
97
|
-
it("should return false when one string is empty", () => {
|
|
98
|
-
expect(timingSafeEqual("", "notempty")).toBe(false);
|
|
99
|
-
});
|
|
100
|
-
it("should handle unicode characters", () => {
|
|
101
|
-
expect(timingSafeEqual("héllo", "héllo")).toBe(true);
|
|
102
|
-
expect(timingSafeEqual("héllo", "hello")).toBe(false);
|
|
103
|
-
});
|
|
104
|
-
it("should handle long strings", () => {
|
|
105
|
-
const longStr = "a".repeat(10000);
|
|
106
|
-
expect(timingSafeEqual(longStr, longStr)).toBe(true);
|
|
107
|
-
expect(timingSafeEqual(longStr, "b".repeat(10000))).toBe(false);
|
|
108
|
-
});
|
|
109
|
-
});
|
|
110
|
-
// =============================================================================
|
|
111
|
-
// authMiddleware Tests
|
|
112
|
-
// =============================================================================
|
|
113
|
-
describe("authMiddleware", () => {
|
|
114
|
-
it("should export authMiddleware as a function", () => {
|
|
115
|
-
expect(authMiddleware).toBeDefined();
|
|
116
|
-
expect(typeof authMiddleware).toBe("function");
|
|
117
|
-
});
|
|
118
|
-
});
|
|
119
|
-
// =============================================================================
|
|
120
|
-
// Sensitive Info Disclosure Tests (health endpoint auth logic)
|
|
121
|
-
// =============================================================================
|
|
122
|
-
describe("sensitive info disclosure prevention", () => {
|
|
123
|
-
let originalApiKey;
|
|
124
|
-
beforeEach(() => {
|
|
125
|
-
originalApiKey = process.env.TX_API_KEY;
|
|
126
|
-
});
|
|
127
|
-
afterEach(() => {
|
|
128
|
-
if (originalApiKey === undefined) {
|
|
129
|
-
delete process.env.TX_API_KEY;
|
|
130
|
-
}
|
|
131
|
-
else {
|
|
132
|
-
process.env.TX_API_KEY = originalApiKey;
|
|
133
|
-
}
|
|
134
|
-
});
|
|
135
|
-
/**
|
|
136
|
-
* Tests the logic used by the /health endpoint to decide whether
|
|
137
|
-
* to expose the database path. The pattern is:
|
|
138
|
-
* showSensitive = TX_API_KEY is set AND request has valid key
|
|
139
|
-
*/
|
|
140
|
-
function shouldShowSensitive(headers) {
|
|
141
|
-
const apiKey = process.env.TX_API_KEY;
|
|
142
|
-
if (!apiKey)
|
|
143
|
-
return false;
|
|
144
|
-
const providedKey = extractApiKey(headers);
|
|
145
|
-
if (!providedKey)
|
|
146
|
-
return false;
|
|
147
|
-
return timingSafeEqual(providedKey, apiKey);
|
|
148
|
-
}
|
|
149
|
-
it("should NOT expose sensitive info when auth is disabled (no TX_API_KEY)", () => {
|
|
150
|
-
delete process.env.TX_API_KEY;
|
|
151
|
-
expect(shouldShowSensitive({})).toBe(false);
|
|
152
|
-
});
|
|
153
|
-
it("should NOT expose sensitive info when auth is disabled even with a key header", () => {
|
|
154
|
-
delete process.env.TX_API_KEY;
|
|
155
|
-
expect(shouldShowSensitive({ "x-api-key": "some-key" })).toBe(false);
|
|
156
|
-
});
|
|
157
|
-
it("should NOT expose sensitive info when auth is enabled but no key provided", () => {
|
|
158
|
-
process.env.TX_API_KEY = "server-secret";
|
|
159
|
-
expect(shouldShowSensitive({})).toBe(false);
|
|
160
|
-
});
|
|
161
|
-
it("should NOT expose sensitive info when auth is enabled but wrong key provided", () => {
|
|
162
|
-
process.env.TX_API_KEY = "server-secret";
|
|
163
|
-
expect(shouldShowSensitive({ "x-api-key": "wrong-key" })).toBe(false);
|
|
164
|
-
});
|
|
165
|
-
it("should expose sensitive info when auth is enabled and correct key provided", () => {
|
|
166
|
-
process.env.TX_API_KEY = "server-secret";
|
|
167
|
-
expect(shouldShowSensitive({ "x-api-key": "server-secret" })).toBe(true);
|
|
168
|
-
});
|
|
169
|
-
it("should expose sensitive info when auth is enabled and correct Bearer token provided", () => {
|
|
170
|
-
process.env.TX_API_KEY = "server-secret";
|
|
171
|
-
expect(shouldShowSensitive({ "authorization": "Bearer server-secret" })).toBe(true);
|
|
172
|
-
});
|
|
173
|
-
});
|
|
174
|
-
//# sourceMappingURL=auth.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auth.test.js","sourceRoot":"","sources":["../../src/__tests__/auth.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"body-limit.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/body-limit.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Body Size Limit Middleware Tests
|
|
3
|
-
*
|
|
4
|
-
* Tests for getMaxBytes routing logic and bodyLimitMiddleware export.
|
|
5
|
-
*/
|
|
6
|
-
import { describe, it, expect } from "vitest";
|
|
7
|
-
import { getMaxBytes, DEFAULT_MAX_BYTES, SYNC_MAX_BYTES, bodyLimitMiddleware, } from "../middleware/body-limit.js";
|
|
8
|
-
// =============================================================================
|
|
9
|
-
// Constants Tests
|
|
10
|
-
// =============================================================================
|
|
11
|
-
describe("body limit constants", () => {
|
|
12
|
-
it("should define DEFAULT_MAX_BYTES as 1MB", () => {
|
|
13
|
-
expect(DEFAULT_MAX_BYTES).toBe(1 * 1024 * 1024);
|
|
14
|
-
});
|
|
15
|
-
it("should define SYNC_MAX_BYTES as 10MB", () => {
|
|
16
|
-
expect(SYNC_MAX_BYTES).toBe(10 * 1024 * 1024);
|
|
17
|
-
});
|
|
18
|
-
});
|
|
19
|
-
// =============================================================================
|
|
20
|
-
// getMaxBytes Tests
|
|
21
|
-
// =============================================================================
|
|
22
|
-
describe("getMaxBytes", () => {
|
|
23
|
-
it("should return SYNC_MAX_BYTES for /api/sync/export", () => {
|
|
24
|
-
expect(getMaxBytes("/api/sync/export")).toBe(SYNC_MAX_BYTES);
|
|
25
|
-
});
|
|
26
|
-
it("should return SYNC_MAX_BYTES for /api/sync/import", () => {
|
|
27
|
-
expect(getMaxBytes("/api/sync/import")).toBe(SYNC_MAX_BYTES);
|
|
28
|
-
});
|
|
29
|
-
it("should return SYNC_MAX_BYTES for /api/sync/status", () => {
|
|
30
|
-
expect(getMaxBytes("/api/sync/status")).toBe(SYNC_MAX_BYTES);
|
|
31
|
-
});
|
|
32
|
-
it("should return SYNC_MAX_BYTES for /api/sync/compact", () => {
|
|
33
|
-
expect(getMaxBytes("/api/sync/compact")).toBe(SYNC_MAX_BYTES);
|
|
34
|
-
});
|
|
35
|
-
it("should return DEFAULT_MAX_BYTES for /api/tasks", () => {
|
|
36
|
-
expect(getMaxBytes("/api/tasks")).toBe(DEFAULT_MAX_BYTES);
|
|
37
|
-
});
|
|
38
|
-
it("should return DEFAULT_MAX_BYTES for /api/learnings", () => {
|
|
39
|
-
expect(getMaxBytes("/api/learnings")).toBe(DEFAULT_MAX_BYTES);
|
|
40
|
-
});
|
|
41
|
-
it("should return DEFAULT_MAX_BYTES for /api/runs", () => {
|
|
42
|
-
expect(getMaxBytes("/api/runs")).toBe(DEFAULT_MAX_BYTES);
|
|
43
|
-
});
|
|
44
|
-
it("should return DEFAULT_MAX_BYTES for /health", () => {
|
|
45
|
-
expect(getMaxBytes("/health")).toBe(DEFAULT_MAX_BYTES);
|
|
46
|
-
});
|
|
47
|
-
it("should return DEFAULT_MAX_BYTES for root path", () => {
|
|
48
|
-
expect(getMaxBytes("/")).toBe(DEFAULT_MAX_BYTES);
|
|
49
|
-
});
|
|
50
|
-
});
|
|
51
|
-
// =============================================================================
|
|
52
|
-
// bodyLimitMiddleware Export Tests
|
|
53
|
-
// =============================================================================
|
|
54
|
-
describe("bodyLimitMiddleware", () => {
|
|
55
|
-
it("should export bodyLimitMiddleware as a function", () => {
|
|
56
|
-
expect(bodyLimitMiddleware).toBeDefined();
|
|
57
|
-
expect(typeof bodyLimitMiddleware).toBe("function");
|
|
58
|
-
});
|
|
59
|
-
});
|
|
60
|
-
//# sourceMappingURL=body-limit.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"body-limit.test.js","sourceRoot":"","sources":["../../src/__tests__/body-limit.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"health.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/health.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"health.test.js","sourceRoot":"","sources":["../../src/__tests__/health.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"log-reader.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/log-reader.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Log Reader Tests
|
|
3
|
-
*
|
|
4
|
-
* Tests path traversal protection in isAllowedRunPath.
|
|
5
|
-
* Verifies prefix match (startsWith) instead of substring match (includes).
|
|
6
|
-
*/
|
|
7
|
-
import { describe, it, expect } from "vitest";
|
|
8
|
-
import { resolve } from "node:path";
|
|
9
|
-
import { isAllowedRunPath } from "../utils/log-reader.js";
|
|
10
|
-
const cwd = process.cwd();
|
|
11
|
-
const runsDir = resolve(cwd, ".tx", "runs");
|
|
12
|
-
describe("isAllowedRunPath", () => {
|
|
13
|
-
describe("accepts valid paths under .tx/runs/", () => {
|
|
14
|
-
it("should accept a file directly under .tx/runs/", () => {
|
|
15
|
-
expect(isAllowedRunPath(`${runsDir}/stdout.log`)).toBe(true);
|
|
16
|
-
});
|
|
17
|
-
it("should accept a file in a run subdirectory", () => {
|
|
18
|
-
expect(isAllowedRunPath(`${runsDir}/run-abc12345/stdout.log`)).toBe(true);
|
|
19
|
-
});
|
|
20
|
-
it("should accept a nested file under .tx/runs/", () => {
|
|
21
|
-
expect(isAllowedRunPath(`${runsDir}/run-abc12345/logs/stderr.log`)).toBe(true);
|
|
22
|
-
});
|
|
23
|
-
});
|
|
24
|
-
describe("rejects paths outside .tx/runs/", () => {
|
|
25
|
-
it("should reject an absolute path outside the project", () => {
|
|
26
|
-
expect(isAllowedRunPath("/etc/passwd")).toBe(false);
|
|
27
|
-
});
|
|
28
|
-
it("should reject a path under .tx/ but not .tx/runs/", () => {
|
|
29
|
-
expect(isAllowedRunPath(resolve(cwd, ".tx", "tasks.db"))).toBe(false);
|
|
30
|
-
});
|
|
31
|
-
it("should reject the runs directory itself (no trailing file)", () => {
|
|
32
|
-
// runsDir alone should not match — startsWith(runsDir + sep) requires a child
|
|
33
|
-
expect(isAllowedRunPath(runsDir)).toBe(false);
|
|
34
|
-
});
|
|
35
|
-
});
|
|
36
|
-
describe("rejects substring bypass attacks", () => {
|
|
37
|
-
it("should reject a path from a different project containing /.tx/runs/", () => {
|
|
38
|
-
// This is the key attack vector: a different project's .tx/runs/ passes
|
|
39
|
-
// an includes() check but fails a startsWith() check
|
|
40
|
-
expect(isAllowedRunPath("/other/project/.tx/runs/evil.log")).toBe(false);
|
|
41
|
-
});
|
|
42
|
-
it("should reject a crafted path with .tx/runs/ as a non-prefix substring", () => {
|
|
43
|
-
expect(isAllowedRunPath("/evil/.tx/runs/payload")).toBe(false);
|
|
44
|
-
});
|
|
45
|
-
it("should reject a path with .. that resolves outside .tx/runs/", () => {
|
|
46
|
-
// resolve() normalizes the .., so this becomes cwd/.tx/tasks.db
|
|
47
|
-
expect(isAllowedRunPath(`${runsDir}/../tasks.db`)).toBe(false);
|
|
48
|
-
});
|
|
49
|
-
it("should reject a directory name that starts with 'runs' but is different", () => {
|
|
50
|
-
// e.g., .tx/runs-evil/ should not match .tx/runs/
|
|
51
|
-
expect(isAllowedRunPath(resolve(cwd, ".tx", "runs-evil", "file.log"))).toBe(false);
|
|
52
|
-
});
|
|
53
|
-
});
|
|
54
|
-
});
|
|
55
|
-
//# sourceMappingURL=log-reader.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"log-reader.test.js","sourceRoot":"","sources":["../../src/__tests__/log-reader.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rate-limit.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/rate-limit.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rate-limit.test.js","sourceRoot":"","sources":["../../src/__tests__/rate-limit.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Server Library Tests
|
|
3
|
-
*
|
|
4
|
-
* Tests for server configuration and module exports.
|
|
5
|
-
* Note: makeServerLive and route layers require bun:sqlite (via tx-core)
|
|
6
|
-
* and can only be tested with `bun test`. These tests cover the parts
|
|
7
|
-
* that work in Node.js vitest.
|
|
8
|
-
*/
|
|
9
|
-
export {};
|
|
10
|
-
//# sourceMappingURL=server-lib.test.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"server-lib.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/server-lib.test.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
|
|
@@ -1,145 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Server Library Tests
|
|
3
|
-
*
|
|
4
|
-
* Tests for server configuration and module exports.
|
|
5
|
-
* Note: makeServerLive and route layers require bun:sqlite (via tx-core)
|
|
6
|
-
* and can only be tested with `bun test`. These tests cover the parts
|
|
7
|
-
* that work in Node.js vitest.
|
|
8
|
-
*/
|
|
9
|
-
import { describe, it, expect, beforeEach, afterEach } from "vitest";
|
|
10
|
-
import { isAuthEnabled } from "../middleware/auth.js";
|
|
11
|
-
import { getCorsConfig } from "../middleware/cors.js";
|
|
12
|
-
// =============================================================================
|
|
13
|
-
// Auth Configuration Tests
|
|
14
|
-
// =============================================================================
|
|
15
|
-
describe("Server auth configuration", () => {
|
|
16
|
-
let savedEnv;
|
|
17
|
-
beforeEach(() => {
|
|
18
|
-
savedEnv = {
|
|
19
|
-
TX_API_PORT: process.env.TX_API_PORT,
|
|
20
|
-
TX_API_HOST: process.env.TX_API_HOST,
|
|
21
|
-
TX_DB_PATH: process.env.TX_DB_PATH,
|
|
22
|
-
TX_API_KEY: process.env.TX_API_KEY,
|
|
23
|
-
TX_API_CORS_ORIGIN: process.env.TX_API_CORS_ORIGIN,
|
|
24
|
-
TX_API_CORS_CREDENTIALS: process.env.TX_API_CORS_CREDENTIALS,
|
|
25
|
-
};
|
|
26
|
-
});
|
|
27
|
-
afterEach(() => {
|
|
28
|
-
for (const [key, value] of Object.entries(savedEnv)) {
|
|
29
|
-
if (value === undefined) {
|
|
30
|
-
delete process.env[key];
|
|
31
|
-
}
|
|
32
|
-
else {
|
|
33
|
-
process.env[key] = value;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
});
|
|
37
|
-
it("should detect auth enabled via TX_API_KEY", () => {
|
|
38
|
-
process.env.TX_API_KEY = "my-secret-key";
|
|
39
|
-
expect(isAuthEnabled()).toBe(true);
|
|
40
|
-
});
|
|
41
|
-
it("should detect auth disabled when TX_API_KEY not set", () => {
|
|
42
|
-
delete process.env.TX_API_KEY;
|
|
43
|
-
expect(isAuthEnabled()).toBe(false);
|
|
44
|
-
});
|
|
45
|
-
it("should detect auth disabled for empty TX_API_KEY", () => {
|
|
46
|
-
process.env.TX_API_KEY = "";
|
|
47
|
-
expect(isAuthEnabled()).toBe(false);
|
|
48
|
-
});
|
|
49
|
-
});
|
|
50
|
-
// =============================================================================
|
|
51
|
-
// CORS Configuration Tests
|
|
52
|
-
// =============================================================================
|
|
53
|
-
describe("CORS configuration", () => {
|
|
54
|
-
let savedEnv;
|
|
55
|
-
beforeEach(() => {
|
|
56
|
-
savedEnv = {
|
|
57
|
-
TX_API_CORS_ORIGIN: process.env.TX_API_CORS_ORIGIN,
|
|
58
|
-
TX_API_CORS_CREDENTIALS: process.env.TX_API_CORS_CREDENTIALS,
|
|
59
|
-
};
|
|
60
|
-
});
|
|
61
|
-
afterEach(() => {
|
|
62
|
-
for (const [key, value] of Object.entries(savedEnv)) {
|
|
63
|
-
if (value === undefined) {
|
|
64
|
-
delete process.env[key];
|
|
65
|
-
}
|
|
66
|
-
else {
|
|
67
|
-
process.env[key] = value;
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
});
|
|
71
|
-
it("should default to localhost origins when TX_API_CORS_ORIGIN is not set", () => {
|
|
72
|
-
delete process.env.TX_API_CORS_ORIGIN;
|
|
73
|
-
const config = getCorsConfig();
|
|
74
|
-
expect(config.allowedOrigins).toEqual([
|
|
75
|
-
"http://localhost:3000",
|
|
76
|
-
"http://localhost:3001",
|
|
77
|
-
"http://localhost:5173",
|
|
78
|
-
"http://127.0.0.1:3000",
|
|
79
|
-
"http://127.0.0.1:3001",
|
|
80
|
-
"http://127.0.0.1:5173",
|
|
81
|
-
]);
|
|
82
|
-
// Must NOT include wildcard by default
|
|
83
|
-
expect(config.allowedOrigins).not.toContain("*");
|
|
84
|
-
});
|
|
85
|
-
it("should allow wildcard only when explicitly set to *", () => {
|
|
86
|
-
process.env.TX_API_CORS_ORIGIN = "*";
|
|
87
|
-
const config = getCorsConfig();
|
|
88
|
-
expect(config.allowedOrigins).toEqual(["*"]);
|
|
89
|
-
});
|
|
90
|
-
it("should parse comma-separated origins", () => {
|
|
91
|
-
process.env.TX_API_CORS_ORIGIN = "https://app.example.com, https://admin.example.com";
|
|
92
|
-
const config = getCorsConfig();
|
|
93
|
-
expect(config.allowedOrigins).toEqual([
|
|
94
|
-
"https://app.example.com",
|
|
95
|
-
"https://admin.example.com",
|
|
96
|
-
]);
|
|
97
|
-
});
|
|
98
|
-
it("should handle single custom origin", () => {
|
|
99
|
-
process.env.TX_API_CORS_ORIGIN = "https://myapp.com";
|
|
100
|
-
const config = getCorsConfig();
|
|
101
|
-
expect(config.allowedOrigins).toEqual(["https://myapp.com"]);
|
|
102
|
-
});
|
|
103
|
-
it("should enable credentials when TX_API_CORS_CREDENTIALS is true", () => {
|
|
104
|
-
process.env.TX_API_CORS_CREDENTIALS = "true";
|
|
105
|
-
const config = getCorsConfig();
|
|
106
|
-
expect(config.credentials).toBe(true);
|
|
107
|
-
});
|
|
108
|
-
it("should disable credentials by default", () => {
|
|
109
|
-
delete process.env.TX_API_CORS_CREDENTIALS;
|
|
110
|
-
const config = getCorsConfig();
|
|
111
|
-
expect(config.credentials).toBe(false);
|
|
112
|
-
});
|
|
113
|
-
});
|
|
114
|
-
// =============================================================================
|
|
115
|
-
// API Definition Exports Tests (no bun:sqlite dependency)
|
|
116
|
-
// =============================================================================
|
|
117
|
-
describe("API definition exports", () => {
|
|
118
|
-
it("should export TxApi class from api.ts", async () => {
|
|
119
|
-
const { TxApi } = await import("../api.js");
|
|
120
|
-
expect(TxApi).toBeDefined();
|
|
121
|
-
});
|
|
122
|
-
it("should export all error types from api.ts", async () => {
|
|
123
|
-
const { NotFound, BadRequest, InternalError, Unauthorized, Forbidden, ServiceUnavailable } = await import("../api.js");
|
|
124
|
-
expect(NotFound).toBeDefined();
|
|
125
|
-
expect(BadRequest).toBeDefined();
|
|
126
|
-
expect(InternalError).toBeDefined();
|
|
127
|
-
expect(Unauthorized).toBeDefined();
|
|
128
|
-
expect(Forbidden).toBeDefined();
|
|
129
|
-
expect(ServiceUnavailable).toBeDefined();
|
|
130
|
-
});
|
|
131
|
-
it("should export mapCoreError from api.ts", async () => {
|
|
132
|
-
const { mapCoreError } = await import("../api.js");
|
|
133
|
-
expect(mapCoreError).toBeDefined();
|
|
134
|
-
expect(typeof mapCoreError).toBe("function");
|
|
135
|
-
});
|
|
136
|
-
it("should export all API groups from api.ts", async () => {
|
|
137
|
-
const { HealthGroup, TasksGroup, LearningsGroup, RunsGroup, SyncGroup } = await import("../api.js");
|
|
138
|
-
expect(HealthGroup).toBeDefined();
|
|
139
|
-
expect(TasksGroup).toBeDefined();
|
|
140
|
-
expect(LearningsGroup).toBeDefined();
|
|
141
|
-
expect(RunsGroup).toBeDefined();
|
|
142
|
-
expect(SyncGroup).toBeDefined();
|
|
143
|
-
});
|
|
144
|
-
});
|
|
145
|
-
//# sourceMappingURL=server-lib.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"server-lib.test.js","sourceRoot":"","sources":["../../src/__tests__/server-lib.test.ts"],"names":[],"mappings":"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"}
|