@herdctl/chat 0.0.1 → 0.2.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/LICENSE +21 -0
- package/dist/__tests__/dm-filter.test.d.ts +5 -0
- package/dist/__tests__/dm-filter.test.d.ts.map +1 -0
- package/dist/__tests__/dm-filter.test.js +136 -0
- package/dist/__tests__/dm-filter.test.js.map +1 -0
- package/dist/__tests__/error-handler.test.d.ts +5 -0
- package/dist/__tests__/error-handler.test.d.ts.map +1 -0
- package/dist/__tests__/error-handler.test.js +235 -0
- package/dist/__tests__/error-handler.test.js.map +1 -0
- package/dist/__tests__/errors.test.d.ts +5 -0
- package/dist/__tests__/errors.test.d.ts.map +1 -0
- package/dist/__tests__/errors.test.js +140 -0
- package/dist/__tests__/errors.test.js.map +1 -0
- package/dist/__tests__/index.test.d.ts +2 -0
- package/dist/__tests__/index.test.d.ts.map +1 -0
- package/dist/__tests__/index.test.js +25 -0
- package/dist/__tests__/index.test.js.map +1 -0
- package/dist/__tests__/message-extraction.test.d.ts +5 -0
- package/dist/__tests__/message-extraction.test.d.ts.map +1 -0
- package/dist/__tests__/message-extraction.test.js +157 -0
- package/dist/__tests__/message-extraction.test.js.map +1 -0
- package/dist/__tests__/message-splitting.test.d.ts +5 -0
- package/dist/__tests__/message-splitting.test.d.ts.map +1 -0
- package/dist/__tests__/message-splitting.test.js +153 -0
- package/dist/__tests__/message-splitting.test.js.map +1 -0
- package/dist/__tests__/session-manager.test.d.ts +2 -0
- package/dist/__tests__/session-manager.test.d.ts.map +1 -0
- package/dist/__tests__/session-manager.test.js +779 -0
- package/dist/__tests__/session-manager.test.js.map +1 -0
- package/dist/__tests__/status-formatting.test.d.ts +5 -0
- package/dist/__tests__/status-formatting.test.d.ts.map +1 -0
- package/dist/__tests__/status-formatting.test.js +160 -0
- package/dist/__tests__/status-formatting.test.js.map +1 -0
- package/dist/__tests__/streaming-responder.test.d.ts +5 -0
- package/dist/__tests__/streaming-responder.test.d.ts.map +1 -0
- package/dist/__tests__/streaming-responder.test.js +154 -0
- package/dist/__tests__/streaming-responder.test.js.map +1 -0
- package/dist/dm-filter.d.ts +121 -0
- package/dist/dm-filter.d.ts.map +1 -0
- package/dist/dm-filter.js +162 -0
- package/dist/dm-filter.js.map +1 -0
- package/dist/error-handler.d.ts +217 -0
- package/dist/error-handler.d.ts.map +1 -0
- package/dist/error-handler.js +313 -0
- package/dist/error-handler.js.map +1 -0
- package/dist/errors.d.ts +118 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +157 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +69 -0
- package/dist/index.js.map +1 -0
- package/dist/message-extraction.d.ts +81 -0
- package/dist/message-extraction.d.ts.map +1 -0
- package/dist/message-extraction.js +90 -0
- package/dist/message-extraction.js.map +1 -0
- package/dist/message-splitting.d.ts +133 -0
- package/dist/message-splitting.d.ts.map +1 -0
- package/dist/message-splitting.js +188 -0
- package/dist/message-splitting.js.map +1 -0
- package/dist/session-manager/errors.d.ts +59 -0
- package/dist/session-manager/errors.d.ts.map +1 -0
- package/dist/session-manager/errors.js +71 -0
- package/dist/session-manager/errors.js.map +1 -0
- package/dist/session-manager/index.d.ts +10 -0
- package/dist/session-manager/index.d.ts.map +1 -0
- package/dist/session-manager/index.js +14 -0
- package/dist/session-manager/index.js.map +1 -0
- package/dist/session-manager/session-manager.d.ts +123 -0
- package/dist/session-manager/session-manager.d.ts.map +1 -0
- package/dist/session-manager/session-manager.js +394 -0
- package/dist/session-manager/session-manager.js.map +1 -0
- package/dist/session-manager/types.d.ts +205 -0
- package/dist/session-manager/types.d.ts.map +1 -0
- package/dist/session-manager/types.js +67 -0
- package/dist/session-manager/types.js.map +1 -0
- package/dist/status-formatting.d.ts +147 -0
- package/dist/status-formatting.d.ts.map +1 -0
- package/dist/status-formatting.js +234 -0
- package/dist/status-formatting.js.map +1 -0
- package/dist/streaming-responder.d.ts +130 -0
- package/dist/streaming-responder.d.ts.map +1 -0
- package/dist/streaming-responder.js +178 -0
- package/dist/streaming-responder.js.map +1 -0
- package/dist/types.d.ts +184 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -0
- package/package.json +39 -4
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Egghead Research
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dm-filter.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/dm-filter.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for DM filtering utilities
|
|
3
|
+
*/
|
|
4
|
+
import { describe, it, expect } from "vitest";
|
|
5
|
+
import { isDMEnabled, getDMMode, checkDMUserFilter, shouldProcessInMode, } from "../dm-filter.js";
|
|
6
|
+
describe("dm-filter", () => {
|
|
7
|
+
describe("isDMEnabled", () => {
|
|
8
|
+
it("returns true when no config provided", () => {
|
|
9
|
+
expect(isDMEnabled()).toBe(true);
|
|
10
|
+
expect(isDMEnabled(undefined)).toBe(true);
|
|
11
|
+
});
|
|
12
|
+
it("returns true when enabled is true", () => {
|
|
13
|
+
expect(isDMEnabled({ enabled: true, mode: "auto" })).toBe(true);
|
|
14
|
+
});
|
|
15
|
+
it("returns false when enabled is false", () => {
|
|
16
|
+
expect(isDMEnabled({ enabled: false, mode: "auto" })).toBe(false);
|
|
17
|
+
});
|
|
18
|
+
it("returns true when enabled is not specified", () => {
|
|
19
|
+
expect(isDMEnabled({ mode: "auto" })).toBe(true);
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
describe("getDMMode", () => {
|
|
23
|
+
it("returns 'auto' when no config provided", () => {
|
|
24
|
+
expect(getDMMode()).toBe("auto");
|
|
25
|
+
expect(getDMMode(undefined)).toBe("auto");
|
|
26
|
+
});
|
|
27
|
+
it("returns configured mode", () => {
|
|
28
|
+
expect(getDMMode({ enabled: true, mode: "mention" })).toBe("mention");
|
|
29
|
+
expect(getDMMode({ enabled: true, mode: "auto" })).toBe("auto");
|
|
30
|
+
});
|
|
31
|
+
it("returns 'auto' when mode is not specified", () => {
|
|
32
|
+
expect(getDMMode({ enabled: true })).toBe("auto");
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
describe("checkDMUserFilter", () => {
|
|
36
|
+
it("allows all users when no config provided", () => {
|
|
37
|
+
const result = checkDMUserFilter("user123");
|
|
38
|
+
expect(result.allowed).toBe(true);
|
|
39
|
+
expect(result.reason).toBe("allowed");
|
|
40
|
+
});
|
|
41
|
+
it("blocks all users when DMs are disabled", () => {
|
|
42
|
+
const result = checkDMUserFilter("user123", { enabled: false, mode: "auto" });
|
|
43
|
+
expect(result.allowed).toBe(false);
|
|
44
|
+
expect(result.reason).toBe("dm_disabled");
|
|
45
|
+
});
|
|
46
|
+
it("blocks users in blocklist", () => {
|
|
47
|
+
const config = {
|
|
48
|
+
enabled: true,
|
|
49
|
+
mode: "auto",
|
|
50
|
+
blocklist: ["blocked_user"],
|
|
51
|
+
};
|
|
52
|
+
const result = checkDMUserFilter("blocked_user", config);
|
|
53
|
+
expect(result.allowed).toBe(false);
|
|
54
|
+
expect(result.reason).toBe("in_blocklist");
|
|
55
|
+
});
|
|
56
|
+
it("allows users not in blocklist", () => {
|
|
57
|
+
const config = {
|
|
58
|
+
enabled: true,
|
|
59
|
+
mode: "auto",
|
|
60
|
+
blocklist: ["blocked_user"],
|
|
61
|
+
};
|
|
62
|
+
const result = checkDMUserFilter("other_user", config);
|
|
63
|
+
expect(result.allowed).toBe(true);
|
|
64
|
+
expect(result.reason).toBe("allowed");
|
|
65
|
+
});
|
|
66
|
+
it("blocks users not in allowlist when allowlist is defined", () => {
|
|
67
|
+
const config = {
|
|
68
|
+
enabled: true,
|
|
69
|
+
mode: "auto",
|
|
70
|
+
allowlist: ["allowed_user"],
|
|
71
|
+
};
|
|
72
|
+
const result = checkDMUserFilter("other_user", config);
|
|
73
|
+
expect(result.allowed).toBe(false);
|
|
74
|
+
expect(result.reason).toBe("not_in_allowlist");
|
|
75
|
+
});
|
|
76
|
+
it("allows users in allowlist", () => {
|
|
77
|
+
const config = {
|
|
78
|
+
enabled: true,
|
|
79
|
+
mode: "auto",
|
|
80
|
+
allowlist: ["allowed_user"],
|
|
81
|
+
};
|
|
82
|
+
const result = checkDMUserFilter("allowed_user", config);
|
|
83
|
+
expect(result.allowed).toBe(true);
|
|
84
|
+
expect(result.reason).toBe("allowed");
|
|
85
|
+
});
|
|
86
|
+
it("blocklist takes precedence over allowlist", () => {
|
|
87
|
+
const config = {
|
|
88
|
+
enabled: true,
|
|
89
|
+
mode: "auto",
|
|
90
|
+
allowlist: ["user123"],
|
|
91
|
+
blocklist: ["user123"],
|
|
92
|
+
};
|
|
93
|
+
const result = checkDMUserFilter("user123", config);
|
|
94
|
+
expect(result.allowed).toBe(false);
|
|
95
|
+
expect(result.reason).toBe("in_blocklist");
|
|
96
|
+
});
|
|
97
|
+
it("handles empty blocklist", () => {
|
|
98
|
+
const config = {
|
|
99
|
+
enabled: true,
|
|
100
|
+
mode: "auto",
|
|
101
|
+
blocklist: [],
|
|
102
|
+
};
|
|
103
|
+
const result = checkDMUserFilter("user123", config);
|
|
104
|
+
expect(result.allowed).toBe(true);
|
|
105
|
+
});
|
|
106
|
+
it("handles empty allowlist", () => {
|
|
107
|
+
const config = {
|
|
108
|
+
enabled: true,
|
|
109
|
+
mode: "auto",
|
|
110
|
+
allowlist: [],
|
|
111
|
+
};
|
|
112
|
+
// Empty allowlist is treated as "not set" - allows everyone
|
|
113
|
+
// This matches the behavior: if allowlist.length === 0, we skip the allowlist check
|
|
114
|
+
const result = checkDMUserFilter("user123", config);
|
|
115
|
+
expect(result.allowed).toBe(true);
|
|
116
|
+
expect(result.reason).toBe("allowed");
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
describe("shouldProcessInMode", () => {
|
|
120
|
+
it("never processes bot messages", () => {
|
|
121
|
+
expect(shouldProcessInMode(true, "auto", true)).toBe(false);
|
|
122
|
+
expect(shouldProcessInMode(true, "auto", false)).toBe(false);
|
|
123
|
+
expect(shouldProcessInMode(true, "mention", true)).toBe(false);
|
|
124
|
+
expect(shouldProcessInMode(true, "mention", false)).toBe(false);
|
|
125
|
+
});
|
|
126
|
+
it("processes all non-bot messages in auto mode", () => {
|
|
127
|
+
expect(shouldProcessInMode(false, "auto", true)).toBe(true);
|
|
128
|
+
expect(shouldProcessInMode(false, "auto", false)).toBe(true);
|
|
129
|
+
});
|
|
130
|
+
it("only processes mentions in mention mode", () => {
|
|
131
|
+
expect(shouldProcessInMode(false, "mention", true)).toBe(true);
|
|
132
|
+
expect(shouldProcessInMode(false, "mention", false)).toBe(false);
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
//# sourceMappingURL=dm-filter.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dm-filter.test.js","sourceRoot":"","sources":["../../src/__tests__/dm-filter.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-handler.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/error-handler.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for error handler utilities
|
|
3
|
+
*/
|
|
4
|
+
import { describe, it, expect, vi, beforeEach } from "vitest";
|
|
5
|
+
import { ErrorCategory, withRetry, isTransientError, isRateLimitError, isAuthError, safeExecute, safeExecuteWithReply, USER_ERROR_MESSAGES, } from "../error-handler.js";
|
|
6
|
+
describe("error-handler", () => {
|
|
7
|
+
let mockLogger;
|
|
8
|
+
beforeEach(() => {
|
|
9
|
+
mockLogger = {
|
|
10
|
+
debug: vi.fn(),
|
|
11
|
+
info: vi.fn(),
|
|
12
|
+
warn: vi.fn(),
|
|
13
|
+
error: vi.fn(),
|
|
14
|
+
};
|
|
15
|
+
});
|
|
16
|
+
describe("ErrorCategory", () => {
|
|
17
|
+
it("has expected categories", () => {
|
|
18
|
+
expect(ErrorCategory.TRANSIENT).toBe("transient");
|
|
19
|
+
expect(ErrorCategory.PERMANENT).toBe("permanent");
|
|
20
|
+
expect(ErrorCategory.RATE_LIMIT).toBe("rate_limit");
|
|
21
|
+
expect(ErrorCategory.CONFIGURATION).toBe("configuration");
|
|
22
|
+
expect(ErrorCategory.AUTH).toBe("auth");
|
|
23
|
+
expect(ErrorCategory.NETWORK).toBe("network");
|
|
24
|
+
expect(ErrorCategory.API).toBe("api");
|
|
25
|
+
expect(ErrorCategory.INTERNAL).toBe("internal");
|
|
26
|
+
expect(ErrorCategory.UNKNOWN).toBe("unknown");
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
describe("USER_ERROR_MESSAGES", () => {
|
|
30
|
+
it("has all expected message keys", () => {
|
|
31
|
+
expect(USER_ERROR_MESSAGES.PROCESSING_ERROR).toBeDefined();
|
|
32
|
+
expect(USER_ERROR_MESSAGES.CONNECTION_ERROR).toBeDefined();
|
|
33
|
+
expect(USER_ERROR_MESSAGES.RATE_LIMITED).toBeDefined();
|
|
34
|
+
expect(USER_ERROR_MESSAGES.COMMAND_ERROR).toBeDefined();
|
|
35
|
+
expect(USER_ERROR_MESSAGES.SESSION_ERROR).toBeDefined();
|
|
36
|
+
expect(USER_ERROR_MESSAGES.TIMEOUT_ERROR).toBeDefined();
|
|
37
|
+
expect(USER_ERROR_MESSAGES.PERMISSION_ERROR).toBeDefined();
|
|
38
|
+
expect(USER_ERROR_MESSAGES.AUTH_ERROR).toBeDefined();
|
|
39
|
+
expect(USER_ERROR_MESSAGES.API_ERROR).toBeDefined();
|
|
40
|
+
expect(USER_ERROR_MESSAGES.INTERNAL_ERROR).toBeDefined();
|
|
41
|
+
expect(USER_ERROR_MESSAGES.UNKNOWN_ERROR).toBeDefined();
|
|
42
|
+
});
|
|
43
|
+
it("messages are user-friendly (no technical jargon)", () => {
|
|
44
|
+
for (const message of Object.values(USER_ERROR_MESSAGES)) {
|
|
45
|
+
expect(message).not.toContain("exception");
|
|
46
|
+
expect(message).not.toContain("null");
|
|
47
|
+
expect(message).not.toContain("undefined");
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
describe("isTransientError", () => {
|
|
52
|
+
it("returns true for network errors", () => {
|
|
53
|
+
expect(isTransientError(new Error("ECONNRESET"))).toBe(true);
|
|
54
|
+
expect(isTransientError(new Error("ECONNREFUSED"))).toBe(true);
|
|
55
|
+
expect(isTransientError(new Error("ETIMEDOUT"))).toBe(true);
|
|
56
|
+
expect(isTransientError(new Error("ENOTFOUND"))).toBe(true);
|
|
57
|
+
expect(isTransientError(new Error("socket hang up"))).toBe(true);
|
|
58
|
+
expect(isTransientError(new Error("fetch failed"))).toBe(true);
|
|
59
|
+
});
|
|
60
|
+
it("returns true for timeout errors", () => {
|
|
61
|
+
expect(isTransientError(new Error("Request timeout"))).toBe(true);
|
|
62
|
+
expect(isTransientError(new Error("Operation timed out"))).toBe(true);
|
|
63
|
+
});
|
|
64
|
+
it("returns false for non-transient errors", () => {
|
|
65
|
+
expect(isTransientError(new Error("Invalid token"))).toBe(false);
|
|
66
|
+
expect(isTransientError(new Error("Permission denied"))).toBe(false);
|
|
67
|
+
});
|
|
68
|
+
it("returns false for non-Error values", () => {
|
|
69
|
+
expect(isTransientError("string error")).toBe(false);
|
|
70
|
+
expect(isTransientError(null)).toBe(false);
|
|
71
|
+
expect(isTransientError(undefined)).toBe(false);
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
describe("isRateLimitError", () => {
|
|
75
|
+
it("returns true for rate limit errors", () => {
|
|
76
|
+
expect(isRateLimitError(new Error("rate_limit exceeded"))).toBe(true);
|
|
77
|
+
expect(isRateLimitError(new Error("You are ratelimited"))).toBe(true);
|
|
78
|
+
});
|
|
79
|
+
it("returns false for non-rate-limit errors", () => {
|
|
80
|
+
expect(isRateLimitError(new Error("Connection failed"))).toBe(false);
|
|
81
|
+
});
|
|
82
|
+
it("returns false for non-Error values", () => {
|
|
83
|
+
expect(isRateLimitError("rate_limit")).toBe(false);
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
describe("isAuthError", () => {
|
|
87
|
+
it("returns true for auth errors", () => {
|
|
88
|
+
expect(isAuthError(new Error("invalid_auth"))).toBe(true);
|
|
89
|
+
expect(isAuthError(new Error("token_revoked"))).toBe(true);
|
|
90
|
+
expect(isAuthError(new Error("token_expired"))).toBe(true);
|
|
91
|
+
expect(isAuthError(new Error("not_authed"))).toBe(true);
|
|
92
|
+
expect(isAuthError(new Error("Unauthorized access"))).toBe(true);
|
|
93
|
+
expect(isAuthError(new Error("Forbidden"))).toBe(true);
|
|
94
|
+
});
|
|
95
|
+
it("returns false for non-auth errors", () => {
|
|
96
|
+
expect(isAuthError(new Error("Connection failed"))).toBe(false);
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
describe("withRetry", () => {
|
|
100
|
+
it("returns success on first attempt", async () => {
|
|
101
|
+
const operation = vi.fn().mockResolvedValue("result");
|
|
102
|
+
const result = await withRetry(operation);
|
|
103
|
+
expect(result.success).toBe(true);
|
|
104
|
+
expect(result.value).toBe("result");
|
|
105
|
+
expect(result.attempts).toBe(1);
|
|
106
|
+
expect(operation).toHaveBeenCalledTimes(1);
|
|
107
|
+
});
|
|
108
|
+
it("retries on transient error", async () => {
|
|
109
|
+
const operation = vi
|
|
110
|
+
.fn()
|
|
111
|
+
.mockRejectedValueOnce(new Error("ECONNRESET"))
|
|
112
|
+
.mockResolvedValue("result");
|
|
113
|
+
const result = await withRetry(operation, {
|
|
114
|
+
maxAttempts: 3,
|
|
115
|
+
baseDelayMs: 1,
|
|
116
|
+
});
|
|
117
|
+
expect(result.success).toBe(true);
|
|
118
|
+
expect(result.value).toBe("result");
|
|
119
|
+
expect(result.attempts).toBe(2);
|
|
120
|
+
});
|
|
121
|
+
it("stops after maxAttempts", async () => {
|
|
122
|
+
const operation = vi.fn().mockRejectedValue(new Error("ECONNRESET"));
|
|
123
|
+
const result = await withRetry(operation, {
|
|
124
|
+
maxAttempts: 3,
|
|
125
|
+
baseDelayMs: 1,
|
|
126
|
+
});
|
|
127
|
+
expect(result.success).toBe(false);
|
|
128
|
+
expect(result.error?.message).toBe("ECONNRESET");
|
|
129
|
+
expect(result.attempts).toBe(3);
|
|
130
|
+
expect(operation).toHaveBeenCalledTimes(3);
|
|
131
|
+
});
|
|
132
|
+
it("does not retry non-transient errors", async () => {
|
|
133
|
+
const operation = vi.fn().mockRejectedValue(new Error("Invalid token"));
|
|
134
|
+
const result = await withRetry(operation, {
|
|
135
|
+
maxAttempts: 3,
|
|
136
|
+
baseDelayMs: 1,
|
|
137
|
+
});
|
|
138
|
+
expect(result.success).toBe(false);
|
|
139
|
+
expect(result.attempts).toBe(1);
|
|
140
|
+
expect(operation).toHaveBeenCalledTimes(1);
|
|
141
|
+
});
|
|
142
|
+
it("uses custom shouldRetry predicate", async () => {
|
|
143
|
+
const operation = vi
|
|
144
|
+
.fn()
|
|
145
|
+
.mockRejectedValueOnce(new Error("Custom error"))
|
|
146
|
+
.mockResolvedValue("result");
|
|
147
|
+
const result = await withRetry(operation, {
|
|
148
|
+
maxAttempts: 3,
|
|
149
|
+
baseDelayMs: 1,
|
|
150
|
+
shouldRetry: (error) => error.message === "Custom error",
|
|
151
|
+
});
|
|
152
|
+
expect(result.success).toBe(true);
|
|
153
|
+
expect(result.attempts).toBe(2);
|
|
154
|
+
});
|
|
155
|
+
it("logs retry attempts when logger provided", async () => {
|
|
156
|
+
const operation = vi
|
|
157
|
+
.fn()
|
|
158
|
+
.mockRejectedValueOnce(new Error("ECONNRESET"))
|
|
159
|
+
.mockResolvedValue("result");
|
|
160
|
+
await withRetry(operation, {
|
|
161
|
+
maxAttempts: 3,
|
|
162
|
+
baseDelayMs: 1,
|
|
163
|
+
logger: mockLogger,
|
|
164
|
+
operationName: "testOp",
|
|
165
|
+
});
|
|
166
|
+
expect(mockLogger.info).toHaveBeenCalledWith(expect.stringContaining("testOp failed, retrying"), expect.any(Object));
|
|
167
|
+
});
|
|
168
|
+
it("respects exponential backoff", async () => {
|
|
169
|
+
const operation = vi
|
|
170
|
+
.fn()
|
|
171
|
+
.mockRejectedValueOnce(new Error("ECONNRESET"))
|
|
172
|
+
.mockRejectedValueOnce(new Error("ECONNRESET"))
|
|
173
|
+
.mockResolvedValue("result");
|
|
174
|
+
const startTime = Date.now();
|
|
175
|
+
await withRetry(operation, {
|
|
176
|
+
maxAttempts: 3,
|
|
177
|
+
baseDelayMs: 10,
|
|
178
|
+
backoffMultiplier: 2,
|
|
179
|
+
});
|
|
180
|
+
const elapsed = Date.now() - startTime;
|
|
181
|
+
// First retry: 10ms, second retry: 20ms, total: 30ms minimum
|
|
182
|
+
expect(elapsed).toBeGreaterThanOrEqual(25);
|
|
183
|
+
});
|
|
184
|
+
});
|
|
185
|
+
describe("safeExecute", () => {
|
|
186
|
+
it("returns result on success", async () => {
|
|
187
|
+
const result = await safeExecute(() => Promise.resolve("success"), mockLogger, "test operation");
|
|
188
|
+
expect(result).toBe("success");
|
|
189
|
+
expect(mockLogger.error).not.toHaveBeenCalled();
|
|
190
|
+
});
|
|
191
|
+
it("returns undefined on error", async () => {
|
|
192
|
+
const result = await safeExecute(() => Promise.reject(new Error("Failed")), mockLogger, "test operation");
|
|
193
|
+
expect(result).toBeUndefined();
|
|
194
|
+
expect(mockLogger.error).toHaveBeenCalledWith(expect.stringContaining("test operation"));
|
|
195
|
+
});
|
|
196
|
+
it("logs error message", async () => {
|
|
197
|
+
await safeExecute(() => Promise.reject(new Error("Specific error")), mockLogger, "my operation");
|
|
198
|
+
expect(mockLogger.error).toHaveBeenCalledWith(expect.stringContaining("Specific error"));
|
|
199
|
+
});
|
|
200
|
+
});
|
|
201
|
+
describe("safeExecuteWithReply", () => {
|
|
202
|
+
let mockReply;
|
|
203
|
+
beforeEach(() => {
|
|
204
|
+
mockReply = vi.fn().mockResolvedValue(undefined);
|
|
205
|
+
});
|
|
206
|
+
it("executes operation successfully", async () => {
|
|
207
|
+
const operation = vi.fn().mockResolvedValue(undefined);
|
|
208
|
+
await safeExecuteWithReply(operation, mockReply, mockLogger, "test");
|
|
209
|
+
expect(operation).toHaveBeenCalled();
|
|
210
|
+
expect(mockReply).not.toHaveBeenCalled();
|
|
211
|
+
});
|
|
212
|
+
it("sends error reply on failure", async () => {
|
|
213
|
+
const operation = vi.fn().mockRejectedValue(new Error("Failed"));
|
|
214
|
+
await safeExecuteWithReply(operation, mockReply, mockLogger, "test");
|
|
215
|
+
expect(mockReply).toHaveBeenCalledWith(USER_ERROR_MESSAGES.PROCESSING_ERROR);
|
|
216
|
+
});
|
|
217
|
+
it("uses custom error message", async () => {
|
|
218
|
+
const operation = vi.fn().mockRejectedValue(new Error("Failed"));
|
|
219
|
+
await safeExecuteWithReply(operation, mockReply, mockLogger, "test", "Custom error message");
|
|
220
|
+
expect(mockReply).toHaveBeenCalledWith("Custom error message");
|
|
221
|
+
});
|
|
222
|
+
it("logs error on failure", async () => {
|
|
223
|
+
const operation = vi.fn().mockRejectedValue(new Error("Specific error"));
|
|
224
|
+
await safeExecuteWithReply(operation, mockReply, mockLogger, "test op");
|
|
225
|
+
expect(mockLogger.error).toHaveBeenCalledWith(expect.stringContaining("test op"));
|
|
226
|
+
});
|
|
227
|
+
it("logs when reply fails", async () => {
|
|
228
|
+
const operation = vi.fn().mockRejectedValue(new Error("Failed"));
|
|
229
|
+
mockReply.mockRejectedValue(new Error("Reply failed"));
|
|
230
|
+
await safeExecuteWithReply(operation, mockReply, mockLogger, "test");
|
|
231
|
+
expect(mockLogger.error).toHaveBeenCalledWith(expect.stringContaining("Reply failed"));
|
|
232
|
+
});
|
|
233
|
+
});
|
|
234
|
+
});
|
|
235
|
+
//# sourceMappingURL=error-handler.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-handler.test.js","sourceRoot":"","sources":["../../src/__tests__/error-handler.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/errors.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for chat connector errors
|
|
3
|
+
*/
|
|
4
|
+
import { describe, it, expect } from "vitest";
|
|
5
|
+
import { ChatErrorCode, ChatConnectorError, ChatConnectionError, AlreadyConnectedError, InvalidTokenError, MissingTokenError, isChatConnectorError, isChatConnectionError, isAlreadyConnectedError, isInvalidTokenError, isMissingTokenError, } from "../errors.js";
|
|
6
|
+
describe("errors", () => {
|
|
7
|
+
describe("ChatErrorCode", () => {
|
|
8
|
+
it("has expected error codes", () => {
|
|
9
|
+
expect(ChatErrorCode.CONNECTION_FAILED).toBe("CHAT_CONNECTION_FAILED");
|
|
10
|
+
expect(ChatErrorCode.ALREADY_CONNECTED).toBe("CHAT_ALREADY_CONNECTED");
|
|
11
|
+
expect(ChatErrorCode.INVALID_TOKEN).toBe("CHAT_INVALID_TOKEN");
|
|
12
|
+
expect(ChatErrorCode.MISSING_TOKEN).toBe("CHAT_MISSING_TOKEN");
|
|
13
|
+
});
|
|
14
|
+
});
|
|
15
|
+
describe("ChatConnectorError", () => {
|
|
16
|
+
it("creates error with message, code, and agentName", () => {
|
|
17
|
+
const error = new ChatConnectorError("Test error", ChatErrorCode.CONNECTION_FAILED, "test-agent");
|
|
18
|
+
expect(error.message).toBe("Test error");
|
|
19
|
+
expect(error.code).toBe(ChatErrorCode.CONNECTION_FAILED);
|
|
20
|
+
expect(error.agentName).toBe("test-agent");
|
|
21
|
+
expect(error.name).toBe("ChatConnectorError");
|
|
22
|
+
});
|
|
23
|
+
it("supports cause option", () => {
|
|
24
|
+
const cause = new Error("Original error");
|
|
25
|
+
const error = new ChatConnectorError("Wrapper error", ChatErrorCode.CONNECTION_FAILED, "test-agent", { cause });
|
|
26
|
+
expect(error.cause).toBe(cause);
|
|
27
|
+
});
|
|
28
|
+
it("is instance of Error", () => {
|
|
29
|
+
const error = new ChatConnectorError("Test", ChatErrorCode.CONNECTION_FAILED, "agent");
|
|
30
|
+
expect(error).toBeInstanceOf(Error);
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
describe("ChatConnectionError", () => {
|
|
34
|
+
it("creates formatted connection error message", () => {
|
|
35
|
+
const error = new ChatConnectionError("test-agent", "Connection refused");
|
|
36
|
+
expect(error.message).toBe("Chat connection failed for agent 'test-agent': Connection refused");
|
|
37
|
+
expect(error.code).toBe(ChatErrorCode.CONNECTION_FAILED);
|
|
38
|
+
expect(error.agentName).toBe("test-agent");
|
|
39
|
+
expect(error.name).toBe("ChatConnectionError");
|
|
40
|
+
});
|
|
41
|
+
it("supports cause option", () => {
|
|
42
|
+
const cause = new Error("Network error");
|
|
43
|
+
const error = new ChatConnectionError("agent", "Failed", { cause });
|
|
44
|
+
expect(error.cause).toBe(cause);
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
describe("AlreadyConnectedError", () => {
|
|
48
|
+
it("creates formatted already connected error message", () => {
|
|
49
|
+
const error = new AlreadyConnectedError("test-agent");
|
|
50
|
+
expect(error.message).toBe("Chat connector for agent 'test-agent' is already connected");
|
|
51
|
+
expect(error.code).toBe(ChatErrorCode.ALREADY_CONNECTED);
|
|
52
|
+
expect(error.agentName).toBe("test-agent");
|
|
53
|
+
expect(error.name).toBe("AlreadyConnectedError");
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
describe("InvalidTokenError", () => {
|
|
57
|
+
it("creates formatted invalid token error message", () => {
|
|
58
|
+
const error = new InvalidTokenError("test-agent", "Token expired");
|
|
59
|
+
expect(error.message).toBe("Invalid chat token for agent 'test-agent': Token expired");
|
|
60
|
+
expect(error.code).toBe(ChatErrorCode.INVALID_TOKEN);
|
|
61
|
+
expect(error.agentName).toBe("test-agent");
|
|
62
|
+
expect(error.name).toBe("InvalidTokenError");
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
describe("MissingTokenError", () => {
|
|
66
|
+
it("creates formatted missing token error message", () => {
|
|
67
|
+
const error = new MissingTokenError("test-agent", "BOT_TOKEN");
|
|
68
|
+
expect(error.message).toBe("Missing chat token for agent 'test-agent': environment variable 'BOT_TOKEN' is not set");
|
|
69
|
+
expect(error.code).toBe(ChatErrorCode.MISSING_TOKEN);
|
|
70
|
+
expect(error.agentName).toBe("test-agent");
|
|
71
|
+
expect(error.envVar).toBe("BOT_TOKEN");
|
|
72
|
+
expect(error.name).toBe("MissingTokenError");
|
|
73
|
+
});
|
|
74
|
+
it("supports token type", () => {
|
|
75
|
+
const error = new MissingTokenError("test-agent", "APP_TOKEN", "app");
|
|
76
|
+
expect(error.message).toBe("Missing chat app token for agent 'test-agent': environment variable 'APP_TOKEN' is not set");
|
|
77
|
+
expect(error.tokenType).toBe("app");
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
describe("type guards", () => {
|
|
81
|
+
describe("isChatConnectorError", () => {
|
|
82
|
+
it("returns true for ChatConnectorError", () => {
|
|
83
|
+
const error = new ChatConnectorError("Test", ChatErrorCode.CONNECTION_FAILED, "agent");
|
|
84
|
+
expect(isChatConnectorError(error)).toBe(true);
|
|
85
|
+
});
|
|
86
|
+
it("returns true for subclasses", () => {
|
|
87
|
+
expect(isChatConnectorError(new ChatConnectionError("agent", "msg"))).toBe(true);
|
|
88
|
+
expect(isChatConnectorError(new AlreadyConnectedError("agent"))).toBe(true);
|
|
89
|
+
expect(isChatConnectorError(new InvalidTokenError("agent", "reason"))).toBe(true);
|
|
90
|
+
expect(isChatConnectorError(new MissingTokenError("agent", "env"))).toBe(true);
|
|
91
|
+
});
|
|
92
|
+
it("returns false for regular Error", () => {
|
|
93
|
+
expect(isChatConnectorError(new Error("Test"))).toBe(false);
|
|
94
|
+
});
|
|
95
|
+
it("returns false for non-errors", () => {
|
|
96
|
+
expect(isChatConnectorError("string")).toBe(false);
|
|
97
|
+
expect(isChatConnectorError(null)).toBe(false);
|
|
98
|
+
expect(isChatConnectorError(undefined)).toBe(false);
|
|
99
|
+
expect(isChatConnectorError({})).toBe(false);
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
describe("isChatConnectionError", () => {
|
|
103
|
+
it("returns true for ChatConnectionError", () => {
|
|
104
|
+
const error = new ChatConnectionError("agent", "msg");
|
|
105
|
+
expect(isChatConnectionError(error)).toBe(true);
|
|
106
|
+
});
|
|
107
|
+
it("returns false for other ChatConnectorError subclasses", () => {
|
|
108
|
+
expect(isChatConnectionError(new AlreadyConnectedError("agent"))).toBe(false);
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
describe("isAlreadyConnectedError", () => {
|
|
112
|
+
it("returns true for AlreadyConnectedError", () => {
|
|
113
|
+
const error = new AlreadyConnectedError("agent");
|
|
114
|
+
expect(isAlreadyConnectedError(error)).toBe(true);
|
|
115
|
+
});
|
|
116
|
+
it("returns false for other errors", () => {
|
|
117
|
+
expect(isAlreadyConnectedError(new ChatConnectionError("agent", "msg"))).toBe(false);
|
|
118
|
+
});
|
|
119
|
+
});
|
|
120
|
+
describe("isInvalidTokenError", () => {
|
|
121
|
+
it("returns true for InvalidTokenError", () => {
|
|
122
|
+
const error = new InvalidTokenError("agent", "reason");
|
|
123
|
+
expect(isInvalidTokenError(error)).toBe(true);
|
|
124
|
+
});
|
|
125
|
+
it("returns false for other errors", () => {
|
|
126
|
+
expect(isInvalidTokenError(new MissingTokenError("agent", "env"))).toBe(false);
|
|
127
|
+
});
|
|
128
|
+
});
|
|
129
|
+
describe("isMissingTokenError", () => {
|
|
130
|
+
it("returns true for MissingTokenError", () => {
|
|
131
|
+
const error = new MissingTokenError("agent", "env");
|
|
132
|
+
expect(isMissingTokenError(error)).toBe(true);
|
|
133
|
+
});
|
|
134
|
+
it("returns false for other errors", () => {
|
|
135
|
+
expect(isMissingTokenError(new InvalidTokenError("agent", "reason"))).toBe(false);
|
|
136
|
+
});
|
|
137
|
+
});
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
//# sourceMappingURL=errors.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.test.js","sourceRoot":"","sources":["../../src/__tests__/errors.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/index.test.ts"],"names":[],"mappings":""}
|