@lobu/core 2.8.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/dist/__tests__/encryption.test.d.ts +2 -0
- package/dist/__tests__/encryption.test.d.ts.map +1 -0
- package/dist/__tests__/encryption.test.js +88 -0
- package/dist/__tests__/encryption.test.js.map +1 -0
- package/dist/__tests__/fixtures/factories.d.ts +30 -0
- package/dist/__tests__/fixtures/factories.d.ts.map +1 -0
- package/dist/__tests__/fixtures/factories.js +53 -0
- package/dist/__tests__/fixtures/factories.js.map +1 -0
- package/dist/__tests__/fixtures/index.d.ts +5 -0
- package/dist/__tests__/fixtures/index.d.ts.map +1 -0
- package/dist/__tests__/fixtures/index.js +14 -0
- package/dist/__tests__/fixtures/index.js.map +1 -0
- package/dist/__tests__/fixtures/mock-fetch.d.ts +13 -0
- package/dist/__tests__/fixtures/mock-fetch.d.ts.map +1 -0
- package/dist/__tests__/fixtures/mock-fetch.js +29 -0
- package/dist/__tests__/fixtures/mock-fetch.js.map +1 -0
- package/dist/__tests__/fixtures/mock-queue.d.ts +19 -0
- package/dist/__tests__/fixtures/mock-queue.d.ts.map +1 -0
- package/dist/__tests__/fixtures/mock-queue.js +45 -0
- package/dist/__tests__/fixtures/mock-queue.js.map +1 -0
- package/dist/__tests__/fixtures/mock-redis.d.ts +54 -0
- package/dist/__tests__/fixtures/mock-redis.d.ts.map +1 -0
- package/dist/__tests__/fixtures/mock-redis.js +267 -0
- package/dist/__tests__/fixtures/mock-redis.js.map +1 -0
- package/dist/__tests__/retry.test.d.ts +2 -0
- package/dist/__tests__/retry.test.d.ts.map +1 -0
- package/dist/__tests__/retry.test.js +114 -0
- package/dist/__tests__/retry.test.js.map +1 -0
- package/dist/__tests__/sanitize.test.d.ts +2 -0
- package/dist/__tests__/sanitize.test.d.ts.map +1 -0
- package/dist/__tests__/sanitize.test.js +129 -0
- package/dist/__tests__/sanitize.test.js.map +1 -0
- package/dist/agent-policy.d.ts +21 -0
- package/dist/agent-policy.d.ts.map +1 -0
- package/dist/agent-policy.js +181 -0
- package/dist/agent-policy.js.map +1 -0
- package/dist/agent-store.d.ts +140 -0
- package/dist/agent-store.d.ts.map +1 -0
- package/dist/agent-store.js +27 -0
- package/dist/agent-store.js.map +1 -0
- package/dist/api-types.d.ts +213 -0
- package/dist/api-types.d.ts.map +1 -0
- package/dist/api-types.js +7 -0
- package/dist/api-types.js.map +1 -0
- package/dist/command-registry.d.ts +41 -0
- package/dist/command-registry.d.ts.map +1 -0
- package/dist/command-registry.js +43 -0
- package/dist/command-registry.js.map +1 -0
- package/dist/constants.d.ts +54 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +60 -0
- package/dist/constants.js.map +1 -0
- package/dist/errors.d.ts +97 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +182 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +31 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +64 -0
- package/dist/index.js.map +1 -0
- package/dist/integration-types.d.ts +22 -0
- package/dist/integration-types.d.ts.map +1 -0
- package/dist/integration-types.js +9 -0
- package/dist/integration-types.js.map +1 -0
- package/dist/logger.d.ts +15 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +223 -0
- package/dist/logger.js.map +1 -0
- package/dist/modules.d.ts +96 -0
- package/dist/modules.d.ts.map +1 -0
- package/dist/modules.js +140 -0
- package/dist/modules.js.map +1 -0
- package/dist/otel.d.ts +107 -0
- package/dist/otel.d.ts.map +1 -0
- package/dist/otel.js +251 -0
- package/dist/otel.js.map +1 -0
- package/dist/plugin-types.d.ts +42 -0
- package/dist/plugin-types.d.ts.map +1 -0
- package/dist/plugin-types.js +8 -0
- package/dist/plugin-types.js.map +1 -0
- package/dist/provider-config-types.d.ts +53 -0
- package/dist/provider-config-types.d.ts.map +1 -0
- package/dist/provider-config-types.js +7 -0
- package/dist/provider-config-types.js.map +1 -0
- package/dist/redis/base-store.d.ts +73 -0
- package/dist/redis/base-store.d.ts.map +1 -0
- package/dist/redis/base-store.js +174 -0
- package/dist/redis/base-store.js.map +1 -0
- package/dist/sentry.d.ts +12 -0
- package/dist/sentry.d.ts.map +1 -0
- package/dist/sentry.js +82 -0
- package/dist/sentry.js.map +1 -0
- package/dist/trace.d.ts +25 -0
- package/dist/trace.d.ts.map +1 -0
- package/dist/trace.js +32 -0
- package/dist/trace.js.map +1 -0
- package/dist/types.d.ts +373 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/encryption.d.ts +9 -0
- package/dist/utils/encryption.d.ts.map +1 -0
- package/dist/utils/encryption.js +107 -0
- package/dist/utils/encryption.js.map +1 -0
- package/dist/utils/env.d.ts +20 -0
- package/dist/utils/env.d.ts.map +1 -0
- package/dist/utils/env.js +50 -0
- package/dist/utils/env.js.map +1 -0
- package/dist/utils/json.d.ts +11 -0
- package/dist/utils/json.d.ts.map +1 -0
- package/dist/utils/json.js +38 -0
- package/dist/utils/json.js.map +1 -0
- package/dist/utils/lock.d.ts +34 -0
- package/dist/utils/lock.d.ts.map +1 -0
- package/dist/utils/lock.js +66 -0
- package/dist/utils/lock.js.map +1 -0
- package/dist/utils/mcp-tool-instructions.d.ts +6 -0
- package/dist/utils/mcp-tool-instructions.d.ts.map +1 -0
- package/dist/utils/mcp-tool-instructions.js +3 -0
- package/dist/utils/mcp-tool-instructions.js.map +1 -0
- package/dist/utils/retry.d.ts +40 -0
- package/dist/utils/retry.d.ts.map +1 -0
- package/dist/utils/retry.js +67 -0
- package/dist/utils/retry.js.map +1 -0
- package/dist/utils/sanitize.d.ts +55 -0
- package/dist/utils/sanitize.d.ts.map +1 -0
- package/dist/utils/sanitize.js +111 -0
- package/dist/utils/sanitize.js.map +1 -0
- package/dist/worker/auth.d.ts +34 -0
- package/dist/worker/auth.d.ts.map +1 -0
- package/dist/worker/auth.js +63 -0
- package/dist/worker/auth.js.map +1 -0
- package/dist/worker/transport.d.ts +86 -0
- package/dist/worker/transport.d.ts.map +1 -0
- package/dist/worker/transport.js +13 -0
- package/dist/worker/transport.js.map +1 -0
- package/package.json +40 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encryption.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/encryption.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const bun_test_1 = require("bun:test");
|
|
4
|
+
const encryption_1 = require("../utils/encryption");
|
|
5
|
+
(0, bun_test_1.describe)("encryption", () => {
|
|
6
|
+
let originalKey;
|
|
7
|
+
(0, bun_test_1.beforeEach)(() => {
|
|
8
|
+
originalKey = process.env.ENCRYPTION_KEY;
|
|
9
|
+
// 32-byte hex key
|
|
10
|
+
process.env.ENCRYPTION_KEY =
|
|
11
|
+
"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef";
|
|
12
|
+
});
|
|
13
|
+
(0, bun_test_1.afterEach)(() => {
|
|
14
|
+
if (originalKey !== undefined) {
|
|
15
|
+
process.env.ENCRYPTION_KEY = originalKey;
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
delete process.env.ENCRYPTION_KEY;
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
(0, bun_test_1.test)("encrypt/decrypt round-trip preserves plaintext", () => {
|
|
22
|
+
const plaintext = "hello world";
|
|
23
|
+
const encrypted = (0, encryption_1.encrypt)(plaintext);
|
|
24
|
+
(0, bun_test_1.expect)((0, encryption_1.decrypt)(encrypted)).toBe(plaintext);
|
|
25
|
+
});
|
|
26
|
+
(0, bun_test_1.test)("encrypt/decrypt works with empty string", () => {
|
|
27
|
+
const encrypted = (0, encryption_1.encrypt)("");
|
|
28
|
+
(0, bun_test_1.expect)((0, encryption_1.decrypt)(encrypted)).toBe("");
|
|
29
|
+
});
|
|
30
|
+
(0, bun_test_1.test)("encrypt/decrypt works with unicode", () => {
|
|
31
|
+
const text = "こんにちは 🌍 émojis";
|
|
32
|
+
(0, bun_test_1.expect)((0, encryption_1.decrypt)((0, encryption_1.encrypt)(text))).toBe(text);
|
|
33
|
+
});
|
|
34
|
+
(0, bun_test_1.test)("encrypt/decrypt works with long text", () => {
|
|
35
|
+
const text = "x".repeat(10000);
|
|
36
|
+
(0, bun_test_1.expect)((0, encryption_1.decrypt)((0, encryption_1.encrypt)(text))).toBe(text);
|
|
37
|
+
});
|
|
38
|
+
(0, bun_test_1.test)("each encryption produces different ciphertext (random IV)", () => {
|
|
39
|
+
const plaintext = "same input";
|
|
40
|
+
const a = (0, encryption_1.encrypt)(plaintext);
|
|
41
|
+
const b = (0, encryption_1.encrypt)(plaintext);
|
|
42
|
+
(0, bun_test_1.expect)(a).not.toBe(b);
|
|
43
|
+
// Both should still decrypt to the same value
|
|
44
|
+
(0, bun_test_1.expect)((0, encryption_1.decrypt)(a)).toBe(plaintext);
|
|
45
|
+
(0, bun_test_1.expect)((0, encryption_1.decrypt)(b)).toBe(plaintext);
|
|
46
|
+
});
|
|
47
|
+
(0, bun_test_1.test)("encrypted format is iv:tag:ciphertext (3 hex parts)", () => {
|
|
48
|
+
const encrypted = (0, encryption_1.encrypt)("test");
|
|
49
|
+
const parts = encrypted.split(":");
|
|
50
|
+
(0, bun_test_1.expect)(parts).toHaveLength(3);
|
|
51
|
+
// Each part should be valid hex
|
|
52
|
+
for (const part of parts) {
|
|
53
|
+
(0, bun_test_1.expect)(part).toMatch(/^[0-9a-f]+$/);
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
(0, bun_test_1.test)("decrypt throws on invalid format (wrong number of parts)", () => {
|
|
57
|
+
(0, bun_test_1.expect)(() => (0, encryption_1.decrypt)("only-one-part")).toThrow("Invalid encrypted format");
|
|
58
|
+
(0, bun_test_1.expect)(() => (0, encryption_1.decrypt)("a:b")).toThrow("Invalid encrypted format");
|
|
59
|
+
(0, bun_test_1.expect)(() => (0, encryption_1.decrypt)("a:b:c:d")).toThrow("Invalid encrypted format");
|
|
60
|
+
});
|
|
61
|
+
(0, bun_test_1.test)("decrypt throws on tampered ciphertext", () => {
|
|
62
|
+
const encrypted = (0, encryption_1.encrypt)("secret");
|
|
63
|
+
const parts = encrypted.split(":");
|
|
64
|
+
// Tamper with the ciphertext
|
|
65
|
+
parts[2] = "ff".repeat(parts[2].length / 2);
|
|
66
|
+
(0, bun_test_1.expect)(() => (0, encryption_1.decrypt)(parts.join(":"))).toThrow();
|
|
67
|
+
});
|
|
68
|
+
(0, bun_test_1.test)("throws when ENCRYPTION_KEY is missing", () => {
|
|
69
|
+
delete process.env.ENCRYPTION_KEY;
|
|
70
|
+
(0, bun_test_1.expect)(() => (0, encryption_1.encrypt)("test")).toThrow("ENCRYPTION_KEY environment variable is required");
|
|
71
|
+
});
|
|
72
|
+
(0, bun_test_1.test)("throws when ENCRYPTION_KEY has wrong length", () => {
|
|
73
|
+
process.env.ENCRYPTION_KEY = "too-short";
|
|
74
|
+
(0, bun_test_1.expect)(() => (0, encryption_1.encrypt)("test")).toThrow("base64 or hex encoded 32-byte key");
|
|
75
|
+
});
|
|
76
|
+
(0, bun_test_1.test)("accepts base64-encoded 32-byte key", () => {
|
|
77
|
+
// 32 bytes → 44 chars in base64
|
|
78
|
+
process.env.ENCRYPTION_KEY = Buffer.alloc(32, 7).toString("base64");
|
|
79
|
+
const encrypted = (0, encryption_1.encrypt)("base64 key test");
|
|
80
|
+
(0, bun_test_1.expect)((0, encryption_1.decrypt)(encrypted)).toBe("base64 key test");
|
|
81
|
+
});
|
|
82
|
+
(0, bun_test_1.test)("rejects utf8 32-byte key (only base64 and hex accepted)", () => {
|
|
83
|
+
process.env.ENCRYPTION_KEY = "abcdefghijklmnopqrstuvwxyz012345";
|
|
84
|
+
// 32 ASCII chars = 32 bytes in utf8, but utf8 keys are no longer accepted
|
|
85
|
+
(0, bun_test_1.expect)(() => (0, encryption_1.encrypt)("utf8 key test")).toThrow("base64 or hex encoded 32-byte key");
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
//# sourceMappingURL=encryption.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encryption.test.js","sourceRoot":"","sources":["../../src/__tests__/encryption.test.ts"],"names":[],"mappings":";;AAAA,uCAAyE;AACzE,oDAAuD;AAEvD,IAAA,mBAAQ,EAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,IAAI,WAA+B,CAAC;IAEpC,IAAA,qBAAU,EAAC,GAAG,EAAE;QACd,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;QACzC,kBAAkB;QAClB,OAAO,CAAC,GAAG,CAAC,cAAc;YACxB,kEAAkE,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,IAAA,oBAAS,EAAC,GAAG,EAAE;QACb,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,cAAc,GAAG,WAAW,CAAC;QAC3C,CAAC;aAAM,CAAC;YACN,OAAO,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;QACpC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAA,eAAI,EAAC,gDAAgD,EAAE,GAAG,EAAE;QAC1D,MAAM,SAAS,GAAG,aAAa,CAAC;QAChC,MAAM,SAAS,GAAG,IAAA,oBAAO,EAAC,SAAS,CAAC,CAAC;QACrC,IAAA,iBAAM,EAAC,IAAA,oBAAO,EAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,IAAA,eAAI,EAAC,yCAAyC,EAAE,GAAG,EAAE;QACnD,MAAM,SAAS,GAAG,IAAA,oBAAO,EAAC,EAAE,CAAC,CAAC;QAC9B,IAAA,iBAAM,EAAC,IAAA,oBAAO,EAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,IAAA,eAAI,EAAC,oCAAoC,EAAE,GAAG,EAAE;QAC9C,MAAM,IAAI,GAAG,iBAAiB,CAAC;QAC/B,IAAA,iBAAM,EAAC,IAAA,oBAAO,EAAC,IAAA,oBAAO,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,IAAA,eAAI,EAAC,sCAAsC,EAAE,GAAG,EAAE;QAChD,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,KAAM,CAAC,CAAC;QAChC,IAAA,iBAAM,EAAC,IAAA,oBAAO,EAAC,IAAA,oBAAO,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,IAAA,eAAI,EAAC,2DAA2D,EAAE,GAAG,EAAE;QACrE,MAAM,SAAS,GAAG,YAAY,CAAC;QAC/B,MAAM,CAAC,GAAG,IAAA,oBAAO,EAAC,SAAS,CAAC,CAAC;QAC7B,MAAM,CAAC,GAAG,IAAA,oBAAO,EAAC,SAAS,CAAC,CAAC;QAC7B,IAAA,iBAAM,EAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACtB,8CAA8C;QAC9C,IAAA,iBAAM,EAAC,IAAA,oBAAO,EAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACnC,IAAA,iBAAM,EAAC,IAAA,oBAAO,EAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,IAAA,eAAI,EAAC,qDAAqD,EAAE,GAAG,EAAE;QAC/D,MAAM,SAAS,GAAG,IAAA,oBAAO,EAAC,MAAM,CAAC,CAAC;QAClC,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnC,IAAA,iBAAM,EAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC9B,gCAAgC;QAChC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAA,iBAAM,EAAC,IAAI,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QACtC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAA,eAAI,EAAC,0DAA0D,EAAE,GAAG,EAAE;QACpE,IAAA,iBAAM,EAAC,GAAG,EAAE,CAAC,IAAA,oBAAO,EAAC,eAAe,CAAC,CAAC,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC;QAC3E,IAAA,iBAAM,EAAC,GAAG,EAAE,CAAC,IAAA,oBAAO,EAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC;QACjE,IAAA,iBAAM,EAAC,GAAG,EAAE,CAAC,IAAA,oBAAO,EAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,IAAA,eAAI,EAAC,uCAAuC,EAAE,GAAG,EAAE;QACjD,MAAM,SAAS,GAAG,IAAA,oBAAO,EAAC,QAAQ,CAAC,CAAC;QACpC,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnC,6BAA6B;QAC7B,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC7C,IAAA,iBAAM,EAAC,GAAG,EAAE,CAAC,IAAA,oBAAO,EAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,IAAA,eAAI,EAAC,uCAAuC,EAAE,GAAG,EAAE;QACjD,OAAO,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;QAClC,IAAA,iBAAM,EAAC,GAAG,EAAE,CAAC,IAAA,oBAAO,EAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CACnC,iDAAiD,CAClD,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,IAAA,eAAI,EAAC,6CAA6C,EAAE,GAAG,EAAE;QACvD,OAAO,CAAC,GAAG,CAAC,cAAc,GAAG,WAAW,CAAC;QACzC,IAAA,iBAAM,EAAC,GAAG,EAAE,CAAC,IAAA,oBAAO,EAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,mCAAmC,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;IAEH,IAAA,eAAI,EAAC,oCAAoC,EAAE,GAAG,EAAE;QAC9C,gCAAgC;QAChC,OAAO,CAAC,GAAG,CAAC,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACpE,MAAM,SAAS,GAAG,IAAA,oBAAO,EAAC,iBAAiB,CAAC,CAAC;QAC7C,IAAA,iBAAM,EAAC,IAAA,oBAAO,EAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,IAAA,eAAI,EAAC,yDAAyD,EAAE,GAAG,EAAE;QACnE,OAAO,CAAC,GAAG,CAAC,cAAc,GAAG,kCAAkC,CAAC;QAChE,0EAA0E;QAC1E,IAAA,iBAAM,EAAC,GAAG,EAAE,CAAC,IAAA,oBAAO,EAAC,eAAe,CAAC,CAAC,CAAC,OAAO,CAC5C,mCAAmC,CACpC,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared factory functions for test data.
|
|
3
|
+
*
|
|
4
|
+
* All factories accept a partial override object so tests only specify
|
|
5
|
+
* the fields they care about while getting sensible defaults for the rest.
|
|
6
|
+
*/
|
|
7
|
+
import type { InstructionContext } from "../../types";
|
|
8
|
+
export interface TestWorkerConfig {
|
|
9
|
+
sessionKey: string;
|
|
10
|
+
userId: string;
|
|
11
|
+
agentId: string;
|
|
12
|
+
channelId: string;
|
|
13
|
+
conversationId: string;
|
|
14
|
+
userPrompt: string;
|
|
15
|
+
responseChannel: string;
|
|
16
|
+
responseId: string;
|
|
17
|
+
platform: string;
|
|
18
|
+
agentOptions: string;
|
|
19
|
+
teamId?: string;
|
|
20
|
+
workspace: {
|
|
21
|
+
baseDirectory: string;
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export declare function createWorkerConfig(overrides?: Partial<TestWorkerConfig>): TestWorkerConfig;
|
|
25
|
+
export declare function createInstructionContext(overrides?: Partial<InstructionContext>): InstructionContext;
|
|
26
|
+
export declare function createMockJob(overrides?: Record<string, any>): {
|
|
27
|
+
id: string;
|
|
28
|
+
data: Record<string, any>;
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=factories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factories.d.ts","sourceRoot":"","sources":["../../../src/__tests__/fixtures/factories.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAItD,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE;QAAE,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC;CACtC;AAED,wBAAgB,kBAAkB,CAChC,SAAS,GAAE,OAAO,CAAC,gBAAgB,CAAM,GACxC,gBAAgB,CAmBlB;AAED,wBAAgB,wBAAwB,CACtC,SAAS,GAAE,OAAO,CAAC,kBAAkB,CAAM,GAC1C,kBAAkB,CASpB;AAED,wBAAgB,aAAa,CAAC,SAAS,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,GAAG;IAClE,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC3B,CAUA"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Shared factory functions for test data.
|
|
4
|
+
*
|
|
5
|
+
* All factories accept a partial override object so tests only specify
|
|
6
|
+
* the fields they care about while getting sensible defaults for the rest.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.createWorkerConfig = createWorkerConfig;
|
|
10
|
+
exports.createInstructionContext = createInstructionContext;
|
|
11
|
+
exports.createMockJob = createMockJob;
|
|
12
|
+
function createWorkerConfig(overrides = {}) {
|
|
13
|
+
return {
|
|
14
|
+
sessionKey: "test-session-key",
|
|
15
|
+
userId: "U1234567890",
|
|
16
|
+
agentId: "agent-test",
|
|
17
|
+
channelId: "C1234567890",
|
|
18
|
+
conversationId: "1234567890.123456",
|
|
19
|
+
userPrompt: Buffer.from("Test user prompt").toString("base64"),
|
|
20
|
+
responseChannel: "C1234567890",
|
|
21
|
+
responseId: "1234567890.123457",
|
|
22
|
+
platform: "slack",
|
|
23
|
+
agentOptions: JSON.stringify({
|
|
24
|
+
model: "claude-sonnet-4-20250514",
|
|
25
|
+
max_tokens: 8192,
|
|
26
|
+
}),
|
|
27
|
+
teamId: "T1234567890",
|
|
28
|
+
workspace: { baseDirectory: "/tmp/test-workspace" },
|
|
29
|
+
...overrides,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
function createInstructionContext(overrides = {}) {
|
|
33
|
+
return {
|
|
34
|
+
userId: "U1234567890",
|
|
35
|
+
agentId: "agent-test",
|
|
36
|
+
sessionKey: "test-session-key",
|
|
37
|
+
workingDirectory: "/tmp/test-workspace/test-thread",
|
|
38
|
+
availableProjects: [],
|
|
39
|
+
...overrides,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
function createMockJob(overrides = {}) {
|
|
43
|
+
return {
|
|
44
|
+
id: `job-${Date.now()}-${Math.random().toString(36).substring(7)}`,
|
|
45
|
+
data: {
|
|
46
|
+
sessionKey: "test-session-key",
|
|
47
|
+
userId: "U123",
|
|
48
|
+
prompt: "test prompt",
|
|
49
|
+
...overrides,
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=factories.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factories.js","sourceRoot":"","sources":["../../../src/__tests__/fixtures/factories.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAqBH,gDAqBC;AAED,4DAWC;AAED,sCAaC;AAjDD,SAAgB,kBAAkB,CAChC,YAAuC,EAAE;IAEzC,OAAO;QACL,UAAU,EAAE,kBAAkB;QAC9B,MAAM,EAAE,aAAa;QACrB,OAAO,EAAE,YAAY;QACrB,SAAS,EAAE,aAAa;QACxB,cAAc,EAAE,mBAAmB;QACnC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC9D,eAAe,EAAE,aAAa;QAC9B,UAAU,EAAE,mBAAmB;QAC/B,QAAQ,EAAE,OAAO;QACjB,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC;YAC3B,KAAK,EAAE,0BAA0B;YACjC,UAAU,EAAE,IAAI;SACjB,CAAC;QACF,MAAM,EAAE,aAAa;QACrB,SAAS,EAAE,EAAE,aAAa,EAAE,qBAAqB,EAAE;QACnD,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED,SAAgB,wBAAwB,CACtC,YAAyC,EAAE;IAE3C,OAAO;QACL,MAAM,EAAE,aAAa;QACrB,OAAO,EAAE,YAAY;QACrB,UAAU,EAAE,kBAAkB;QAC9B,gBAAgB,EAAE,iCAAiC;QACnD,iBAAiB,EAAE,EAAE;QACrB,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED,SAAgB,aAAa,CAAC,YAAiC,EAAE;IAI/D,OAAO;QACL,EAAE,EAAE,OAAO,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;QAClE,IAAI,EAAE;YACJ,UAAU,EAAE,kBAAkB;YAC9B,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,aAAa;YACrB,GAAG,SAAS;SACb;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { createInstructionContext, createMockJob, createWorkerConfig, type TestWorkerConfig, } from "./factories";
|
|
2
|
+
export { mockFetch } from "./mock-fetch";
|
|
3
|
+
export { MockMessageQueue } from "./mock-queue";
|
|
4
|
+
export { MockRedisClient } from "./mock-redis";
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/__tests__/fixtures/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,aAAa,EACb,kBAAkB,EAClB,KAAK,gBAAgB,GACtB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MockRedisClient = exports.MockMessageQueue = exports.mockFetch = exports.createWorkerConfig = exports.createMockJob = exports.createInstructionContext = void 0;
|
|
4
|
+
var factories_1 = require("./factories");
|
|
5
|
+
Object.defineProperty(exports, "createInstructionContext", { enumerable: true, get: function () { return factories_1.createInstructionContext; } });
|
|
6
|
+
Object.defineProperty(exports, "createMockJob", { enumerable: true, get: function () { return factories_1.createMockJob; } });
|
|
7
|
+
Object.defineProperty(exports, "createWorkerConfig", { enumerable: true, get: function () { return factories_1.createWorkerConfig; } });
|
|
8
|
+
var mock_fetch_1 = require("./mock-fetch");
|
|
9
|
+
Object.defineProperty(exports, "mockFetch", { enumerable: true, get: function () { return mock_fetch_1.mockFetch; } });
|
|
10
|
+
var mock_queue_1 = require("./mock-queue");
|
|
11
|
+
Object.defineProperty(exports, "MockMessageQueue", { enumerable: true, get: function () { return mock_queue_1.MockMessageQueue; } });
|
|
12
|
+
var mock_redis_1 = require("./mock-redis");
|
|
13
|
+
Object.defineProperty(exports, "MockRedisClient", { enumerable: true, get: function () { return mock_redis_1.MockRedisClient; } });
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/__tests__/fixtures/index.ts"],"names":[],"mappings":";;;AAAA,yCAKqB;AAJnB,qHAAA,wBAAwB,OAAA;AACxB,0GAAA,aAAa,OAAA;AACb,+GAAA,kBAAkB,OAAA;AAGpB,2CAAyC;AAAhC,uGAAA,SAAS,OAAA;AAClB,2CAAgD;AAAvC,8GAAA,gBAAgB,OAAA;AACzB,2CAA+C;AAAtC,6GAAA,eAAe,OAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified fetch mock for testing.
|
|
3
|
+
* Replaces TestHelpers.mockFetch from worker setup.ts.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Install a mock global.fetch that returns pre-configured responses.
|
|
7
|
+
* Returns a cleanup function that restores the original fetch.
|
|
8
|
+
*
|
|
9
|
+
* @param responses - Map of URL → response body (JSON-serialisable).
|
|
10
|
+
* Unmatched URLs return `{ success: true }`.
|
|
11
|
+
*/
|
|
12
|
+
export declare function mockFetch(responses?: Record<string, any>): () => void;
|
|
13
|
+
//# sourceMappingURL=mock-fetch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock-fetch.d.ts","sourceRoot":"","sources":["../../../src/__tests__/fixtures/mock-fetch.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,SAAS,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,GAAG,MAAM,IAAI,CAmBzE"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Unified fetch mock for testing.
|
|
4
|
+
* Replaces TestHelpers.mockFetch from worker setup.ts.
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.mockFetch = mockFetch;
|
|
8
|
+
/**
|
|
9
|
+
* Install a mock global.fetch that returns pre-configured responses.
|
|
10
|
+
* Returns a cleanup function that restores the original fetch.
|
|
11
|
+
*
|
|
12
|
+
* @param responses - Map of URL → response body (JSON-serialisable).
|
|
13
|
+
* Unmatched URLs return `{ success: true }`.
|
|
14
|
+
*/
|
|
15
|
+
function mockFetch(responses = {}) {
|
|
16
|
+
const originalFetch = globalThis.fetch;
|
|
17
|
+
globalThis.fetch = (async (url, _options) => {
|
|
18
|
+
const urlString = url instanceof Request ? url.url : url.toString();
|
|
19
|
+
const body = responses[urlString] ?? { success: true };
|
|
20
|
+
return new Response(JSON.stringify(body), {
|
|
21
|
+
status: 200,
|
|
22
|
+
headers: { "Content-Type": "application/json" },
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
return () => {
|
|
26
|
+
globalThis.fetch = originalFetch;
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=mock-fetch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock-fetch.js","sourceRoot":"","sources":["../../../src/__tests__/fixtures/mock-fetch.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AASH,8BAmBC;AA1BD;;;;;;GAMG;AACH,SAAgB,SAAS,CAAC,YAAiC,EAAE;IAC3D,MAAM,aAAa,GAAG,UAAU,CAAC,KAAK,CAAC;IAEvC,UAAU,CAAC,KAAK,GAAG,CAAC,KAAK,EACvB,GAA2B,EAC3B,QAAsB,EACtB,EAAE;QACF,MAAM,SAAS,GAAG,GAAG,YAAY,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAEpE,MAAM,IAAI,GAAG,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QACvD,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;YACxC,MAAM,EAAE,GAAG;YACX,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;SAChD,CAAC,CAAC;IACL,CAAC,CAAiB,CAAC;IAEnB,OAAO,GAAG,EAAE;QACV,UAAU,CAAC,KAAK,GAAG,aAAa,CAAC;IACnC,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified mock message queue for testing.
|
|
3
|
+
* Replaces MockMessageQueue from gateway setup.ts.
|
|
4
|
+
*/
|
|
5
|
+
import { MockRedisClient } from "./mock-redis";
|
|
6
|
+
export declare class MockMessageQueue {
|
|
7
|
+
private queues;
|
|
8
|
+
private workers;
|
|
9
|
+
private redisClient;
|
|
10
|
+
createQueue(queueName: string): Promise<void>;
|
|
11
|
+
work(queueName: string, handler: (job: any) => Promise<void>, _options?: {
|
|
12
|
+
startPaused?: boolean;
|
|
13
|
+
}): Promise<void>;
|
|
14
|
+
addJob(queueName: string, job: any): Promise<void>;
|
|
15
|
+
getRedisClient(): MockRedisClient;
|
|
16
|
+
getQueue(queueName: string): any[] | undefined;
|
|
17
|
+
clearQueues(): void;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=mock-queue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock-queue.d.ts","sourceRoot":"","sources":["../../../src/__tests__/fixtures/mock-queue.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,OAAO,CAAkD;IACjE,OAAO,CAAC,WAAW,CAAyB;IAEtC,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM7C,IAAI,CACR,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,EACpC,QAAQ,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE,GACnC,OAAO,CAAC,IAAI,CAAC;IAIV,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IASxD,cAAc,IAAI,eAAe;IAMjC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,GAAG,EAAE,GAAG,SAAS;IAI9C,WAAW,IAAI,IAAI;CAIpB"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Unified mock message queue for testing.
|
|
4
|
+
* Replaces MockMessageQueue from gateway setup.ts.
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.MockMessageQueue = void 0;
|
|
8
|
+
const mock_redis_1 = require("./mock-redis");
|
|
9
|
+
class MockMessageQueue {
|
|
10
|
+
constructor() {
|
|
11
|
+
this.queues = new Map();
|
|
12
|
+
this.workers = new Map();
|
|
13
|
+
this.redisClient = new mock_redis_1.MockRedisClient();
|
|
14
|
+
}
|
|
15
|
+
async createQueue(queueName) {
|
|
16
|
+
if (!this.queues.has(queueName)) {
|
|
17
|
+
this.queues.set(queueName, []);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
async work(queueName, handler, _options) {
|
|
21
|
+
this.workers.set(queueName, handler);
|
|
22
|
+
}
|
|
23
|
+
async addJob(queueName, job) {
|
|
24
|
+
const queue = this.queues.get(queueName);
|
|
25
|
+
if (!queue)
|
|
26
|
+
throw new Error(`Queue ${queueName} does not exist`);
|
|
27
|
+
queue.push(job);
|
|
28
|
+
const handler = this.workers.get(queueName);
|
|
29
|
+
if (handler)
|
|
30
|
+
await handler(job);
|
|
31
|
+
}
|
|
32
|
+
getRedisClient() {
|
|
33
|
+
return this.redisClient;
|
|
34
|
+
}
|
|
35
|
+
// --- Test helpers ---
|
|
36
|
+
getQueue(queueName) {
|
|
37
|
+
return this.queues.get(queueName);
|
|
38
|
+
}
|
|
39
|
+
clearQueues() {
|
|
40
|
+
this.queues.clear();
|
|
41
|
+
this.workers.clear();
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
exports.MockMessageQueue = MockMessageQueue;
|
|
45
|
+
//# sourceMappingURL=mock-queue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock-queue.js","sourceRoot":"","sources":["../../../src/__tests__/fixtures/mock-queue.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,6CAA+C;AAE/C,MAAa,gBAAgB;IAA7B;QACU,WAAM,GAAG,IAAI,GAAG,EAAiB,CAAC;QAClC,YAAO,GAAG,IAAI,GAAG,EAAuC,CAAC;QACzD,gBAAW,GAAG,IAAI,4BAAe,EAAE,CAAC;IAuC9C,CAAC;IArCC,KAAK,CAAC,WAAW,CAAC,SAAiB;QACjC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CACR,SAAiB,EACjB,OAAoC,EACpC,QAAoC;QAEpC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,SAAiB,EAAE,GAAQ;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACzC,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,SAAS,SAAS,iBAAiB,CAAC,CAAC;QACjE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEhB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC5C,IAAI,OAAO;YAAE,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;IAClC,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,uBAAuB;IAEvB,QAAQ,CAAC,SAAiB;QACxB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACpC,CAAC;IAED,WAAW;QACT,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACpB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;CACF;AA1CD,4CA0CC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified in-memory Redis mock for testing.
|
|
3
|
+
*
|
|
4
|
+
* Replaces three duplicated implementations:
|
|
5
|
+
* - MockRedisClient in gateway setup.ts
|
|
6
|
+
* - FakeRedis in system-message-limiter.test.ts
|
|
7
|
+
* - queue mock getRedisClient
|
|
8
|
+
*
|
|
9
|
+
* Supports string, set, list, and hash operations with TTL tracking.
|
|
10
|
+
*/
|
|
11
|
+
type SetMode = "NX" | undefined;
|
|
12
|
+
export declare class MockRedisClient {
|
|
13
|
+
private store;
|
|
14
|
+
private sets;
|
|
15
|
+
private lists;
|
|
16
|
+
private currentTime;
|
|
17
|
+
exists(key: string): Promise<number>;
|
|
18
|
+
get(key: string): Promise<string | null>;
|
|
19
|
+
/**
|
|
20
|
+
* ioredis-compatible set with optional EX / NX flags.
|
|
21
|
+
* Supports: set(key, value), set(key, value, "EX", sec), set(key, value, "EX", sec, "NX")
|
|
22
|
+
*/
|
|
23
|
+
set(key: string, value: string, exTokenOrTtl?: "EX" | number, exSeconds?: number, mode?: SetMode): Promise<"OK" | null>;
|
|
24
|
+
setex(key: string, ttlSeconds: number, value: string): Promise<void>;
|
|
25
|
+
incr(key: string): Promise<number>;
|
|
26
|
+
del(...keys: string[]): Promise<number>;
|
|
27
|
+
getdel(key: string): Promise<string | null>;
|
|
28
|
+
expire(key: string, seconds: number): Promise<number>;
|
|
29
|
+
ttl(key: string): Promise<number>;
|
|
30
|
+
sadd(key: string, ...members: string[]): Promise<number>;
|
|
31
|
+
srem(key: string, ...members: string[]): Promise<number>;
|
|
32
|
+
smembers(key: string): Promise<string[]>;
|
|
33
|
+
sismember(key: string, member: string): Promise<number>;
|
|
34
|
+
rpush(key: string, ...values: string[]): Promise<number>;
|
|
35
|
+
lrange(key: string, start: number, stop: number): Promise<string[]>;
|
|
36
|
+
scan(_cursor: string, ...args: (string | number)[]): Promise<[string, string[]]>;
|
|
37
|
+
mget(...keys: string[]): Promise<(string | null)[]>;
|
|
38
|
+
watch(..._keys: string[]): Promise<"OK">;
|
|
39
|
+
unwatch(): Promise<"OK">;
|
|
40
|
+
multi(): {
|
|
41
|
+
set(key: string, value: string): any;
|
|
42
|
+
exec(): Promise<[null, string][]>;
|
|
43
|
+
};
|
|
44
|
+
pipeline(): {
|
|
45
|
+
setex(key: string, ttl: number, value: string): any;
|
|
46
|
+
del(...keys: string[]): any;
|
|
47
|
+
exec(): Promise<Array<[null, any]>>;
|
|
48
|
+
};
|
|
49
|
+
advanceTime(ms: number): void;
|
|
50
|
+
has(key: string): boolean;
|
|
51
|
+
clear(): void;
|
|
52
|
+
}
|
|
53
|
+
export {};
|
|
54
|
+
//# sourceMappingURL=mock-redis.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock-redis.d.ts","sourceRoot":"","sources":["../../../src/__tests__/fixtures/mock-redis.ts"],"names":[],"mappings":"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"}
|