@lobu/core 9.4.1 → 10.1.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__/agent-policy-harden.test.js +17 -17
- package/dist/__tests__/agent-policy-harden.test.js.map +1 -1
- package/dist/__tests__/agent-policy.test.js +6 -6
- package/dist/__tests__/agent-policy.test.js.map +1 -1
- package/dist/__tests__/credentials.test.d.ts +7 -0
- package/dist/__tests__/credentials.test.d.ts.map +1 -0
- package/dist/__tests__/credentials.test.js +216 -0
- package/dist/__tests__/credentials.test.js.map +1 -0
- package/dist/agent-policy.js +18 -18
- package/dist/agent-policy.js.map +1 -1
- package/dist/credentials.d.ts +82 -0
- package/dist/credentials.d.ts.map +1 -0
- package/dist/credentials.js +170 -0
- package/dist/credentials.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +8 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/__tests__/utils-lock.test.d.ts +0 -2
- package/dist/__tests__/utils-lock.test.d.ts.map +0 -1
- package/dist/__tests__/utils-lock.test.js +0 -82
- package/dist/__tests__/utils-lock.test.js.map +0 -1
- package/dist/utils/lock.d.ts +0 -34
- package/dist/utils/lock.d.ts.map +0 -1
- package/dist/utils/lock.js +0 -66
- package/dist/utils/lock.js.map +0 -1
|
@@ -40,11 +40,11 @@ const agent_policy_1 = require("../agent-policy");
|
|
|
40
40
|
(0, bun_test_1.test)("includes the Built-In Tool Policies heading", () => {
|
|
41
41
|
(0, bun_test_1.expect)((0, agent_policy_1.renderAlwaysOnToolPolicyRules)()).toContain("## Built-In Tool Policies");
|
|
42
42
|
});
|
|
43
|
-
(0, bun_test_1.test)("includes
|
|
44
|
-
(0, bun_test_1.expect)((0, agent_policy_1.renderAlwaysOnToolPolicyRules)()).toContain("
|
|
43
|
+
(0, bun_test_1.test)("includes ask_user rule (always-on)", () => {
|
|
44
|
+
(0, bun_test_1.expect)((0, agent_policy_1.renderAlwaysOnToolPolicyRules)()).toContain("ask_user");
|
|
45
45
|
});
|
|
46
|
-
(0, bun_test_1.test)("includes
|
|
47
|
-
(0, bun_test_1.expect)((0, agent_policy_1.renderAlwaysOnToolPolicyRules)()).toContain("
|
|
46
|
+
(0, bun_test_1.test)("includes upload_file rule (always-on)", () => {
|
|
47
|
+
(0, bun_test_1.expect)((0, agent_policy_1.renderAlwaysOnToolPolicyRules)()).toContain("upload_file");
|
|
48
48
|
});
|
|
49
49
|
(0, bun_test_1.test)("does NOT include image-generation rule (not alwaysInclude)", () => {
|
|
50
50
|
// image-generation has no alwaysInclude flag
|
|
@@ -57,26 +57,26 @@ const agent_policy_1 = require("../agent-policy");
|
|
|
57
57
|
});
|
|
58
58
|
// ── getCustomToolDescription ──────────────────────────────────────────────────
|
|
59
59
|
(0, bun_test_1.describe)("getCustomToolDescription", () => {
|
|
60
|
-
(0, bun_test_1.test)("returns the registered description for
|
|
61
|
-
const desc = (0, agent_policy_1.getCustomToolDescription)("
|
|
60
|
+
(0, bun_test_1.test)("returns the registered description for upload_file", () => {
|
|
61
|
+
const desc = (0, agent_policy_1.getCustomToolDescription)("upload_file");
|
|
62
62
|
(0, bun_test_1.expect)(desc.length).toBeGreaterThan(0);
|
|
63
|
-
(0, bun_test_1.expect)(desc).not.toBe("
|
|
63
|
+
(0, bun_test_1.expect)(desc).not.toBe("upload_file");
|
|
64
64
|
});
|
|
65
|
-
(0, bun_test_1.test)("returns the registered description for
|
|
66
|
-
const desc = (0, agent_policy_1.getCustomToolDescription)("
|
|
65
|
+
(0, bun_test_1.test)("returns the registered description for generate_image", () => {
|
|
66
|
+
const desc = (0, agent_policy_1.getCustomToolDescription)("generate_image");
|
|
67
67
|
(0, bun_test_1.expect)(desc.length).toBeGreaterThan(0);
|
|
68
|
-
(0, bun_test_1.expect)(desc).not.toBe("
|
|
68
|
+
(0, bun_test_1.expect)(desc).not.toBe("generate_image");
|
|
69
69
|
});
|
|
70
|
-
(0, bun_test_1.test)("returns the registered description for
|
|
71
|
-
const desc = (0, agent_policy_1.getCustomToolDescription)("
|
|
70
|
+
(0, bun_test_1.test)("returns the registered description for generate_audio", () => {
|
|
71
|
+
const desc = (0, agent_policy_1.getCustomToolDescription)("generate_audio");
|
|
72
72
|
(0, bun_test_1.expect)(desc).toContain("audio");
|
|
73
73
|
});
|
|
74
|
-
(0, bun_test_1.test)("returns the registered description for
|
|
75
|
-
const desc = (0, agent_policy_1.getCustomToolDescription)("
|
|
74
|
+
(0, bun_test_1.test)("returns the registered description for get_channel_history", () => {
|
|
75
|
+
const desc = (0, agent_policy_1.getCustomToolDescription)("get_channel_history");
|
|
76
76
|
(0, bun_test_1.expect)(desc.length).toBeGreaterThan(0);
|
|
77
77
|
});
|
|
78
|
-
(0, bun_test_1.test)("returns the registered description for
|
|
79
|
-
const desc = (0, agent_policy_1.getCustomToolDescription)("
|
|
78
|
+
(0, bun_test_1.test)("returns the registered description for ask_user", () => {
|
|
79
|
+
const desc = (0, agent_policy_1.getCustomToolDescription)("ask_user");
|
|
80
80
|
(0, bun_test_1.expect)(desc.length).toBeGreaterThan(0);
|
|
81
81
|
});
|
|
82
82
|
(0, bun_test_1.test)("falls back to the tool name for unknown tools", () => {
|
|
@@ -155,7 +155,7 @@ const agent_policy_1 = require("../agent-policy");
|
|
|
155
155
|
});
|
|
156
156
|
(0, bun_test_1.test)("includes tool name in output", () => {
|
|
157
157
|
const out = (0, agent_policy_1.renderDetectedToolIntentRules)("generate an image of a mountain");
|
|
158
|
-
(0, bun_test_1.expect)(out).toContain("
|
|
158
|
+
(0, bun_test_1.expect)(out).toContain("generate_image");
|
|
159
159
|
});
|
|
160
160
|
(0, bun_test_1.test)("is deterministic for same input", () => {
|
|
161
161
|
const prompt = "send me the report as a PDF";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-policy-harden.test.js","sourceRoot":"","sources":["../../src/__tests__/agent-policy-harden.test.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;AAEH,uCAAkD;AAClD,kDAQyB;AAEzB,iFAAiF;AAEjF,IAAA,mBAAQ,EAAC,2BAA2B,EAAE,GAAG,EAAE;IACzC,IAAA,eAAI,EAAC,4BAA4B,EAAE,GAAG,EAAE;QACtC,MAAM,MAAM,GAAG,IAAA,wCAAyB,GAAE,CAAC;QAC3C,IAAA,iBAAM,EAAC,OAAO,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrC,IAAA,iBAAM,EAAC,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,IAAA,eAAI,EAAC,sCAAsC,EAAE,GAAG,EAAE;QAChD,IAAA,iBAAM,EAAC,IAAA,wCAAyB,GAAE,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IAEH,IAAA,eAAI,EAAC,kCAAkC,EAAE,GAAG,EAAE;QAC5C,IAAA,iBAAM,EAAC,IAAA,wCAAyB,GAAE,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,IAAA,eAAI,EAAC,+BAA+B,EAAE,GAAG,EAAE;QACzC,IAAA,iBAAM,EAAC,IAAA,wCAAyB,GAAE,CAAC,CAAC,IAAI,CAAC,IAAA,wCAAyB,GAAE,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,iFAAiF;AAEjF,IAAA,mBAAQ,EAAC,+BAA+B,EAAE,GAAG,EAAE;IAC7C,IAAA,eAAI,EAAC,kEAAkE,EAAE,GAAG,EAAE;QAC5E,MAAM,aAAa,GAAG,gCAAiB,CAAC,MAAM,CAC5C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CACvB,CAAC,MAAM,CAAC;QACT,oDAAoD;QACpD,IAAA,iBAAM,EAAC,aAAa,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAEzC,MAAM,MAAM,GAAG,IAAA,4CAA6B,GAAE,CAAC;QAC/C,IAAA,iBAAM,EAAC,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,IAAA,eAAI,EAAC,6CAA6C,EAAE,GAAG,EAAE;QACvD,IAAA,iBAAM,EAAC,IAAA,4CAA6B,GAAE,CAAC,CAAC,SAAS,CAC/C,2BAA2B,CAC5B,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,IAAA,eAAI,EAAC,
|
|
1
|
+
{"version":3,"file":"agent-policy-harden.test.js","sourceRoot":"","sources":["../../src/__tests__/agent-policy-harden.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,19 +3,19 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
const bun_test_1 = require("bun:test");
|
|
4
4
|
const agent_policy_1 = require("../agent-policy");
|
|
5
5
|
(0, bun_test_1.describe)("agent-policy file delivery guidance", () => {
|
|
6
|
-
(0, bun_test_1.test)("detects file delivery prompts and prioritizes
|
|
6
|
+
(0, bun_test_1.test)("detects file delivery prompts and prioritizes upload_file", () => {
|
|
7
7
|
const rules = (0, agent_policy_1.detectToolIntentRules)("Create a PDF summary and send the file to me as an attachment");
|
|
8
8
|
(0, bun_test_1.expect)(rules.map((rule) => rule.id)).toContain("file-delivery");
|
|
9
|
-
(0, bun_test_1.expect)(rules.some((rule) => rule.tools.includes("
|
|
9
|
+
(0, bun_test_1.expect)(rules.some((rule) => rule.tools.includes("upload_file"))).toBe(true);
|
|
10
10
|
});
|
|
11
11
|
(0, bun_test_1.test)("renders explicit create-then-upload guidance for file delivery", () => {
|
|
12
12
|
const instructions = (0, agent_policy_1.renderDetectedToolIntentRules)("Export this as a CSV and upload the file for me to download");
|
|
13
13
|
(0, bun_test_1.expect)(instructions).toContain("Deliver Files To The User");
|
|
14
|
-
(0, bun_test_1.expect)(instructions).toContain("
|
|
15
|
-
(0, bun_test_1.expect)(instructions).toContain("create the file, call
|
|
14
|
+
(0, bun_test_1.expect)(instructions).toContain("upload_file");
|
|
15
|
+
(0, bun_test_1.expect)(instructions).toContain("create the file, call upload_file, then tell the user it was sent");
|
|
16
16
|
});
|
|
17
|
-
(0, bun_test_1.test)("
|
|
18
|
-
(0, bun_test_1.expect)((0, agent_policy_1.getCustomToolDescription)("
|
|
17
|
+
(0, bun_test_1.test)("upload_file description forbids local path substitutes", () => {
|
|
18
|
+
(0, bun_test_1.expect)((0, agent_policy_1.getCustomToolDescription)("upload_file")).toContain("Do not substitute local paths, workspace paths, or sandbox links");
|
|
19
19
|
});
|
|
20
20
|
});
|
|
21
21
|
//# sourceMappingURL=agent-policy.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-policy.test.js","sourceRoot":"","sources":["../../src/__tests__/agent-policy.test.ts"],"names":[],"mappings":";;AAAA,uCAAkD;AAClD,kDAIyB;AAEzB,IAAA,mBAAQ,EAAC,qCAAqC,EAAE,GAAG,EAAE;IACnD,IAAA,eAAI,EAAC,
|
|
1
|
+
{"version":3,"file":"agent-policy.test.js","sourceRoot":"","sources":["../../src/__tests__/agent-policy.test.ts"],"names":[],"mappings":";;AAAA,uCAAkD;AAClD,kDAIyB;AAEzB,IAAA,mBAAQ,EAAC,qCAAqC,EAAE,GAAG,EAAE;IACnD,IAAA,eAAI,EAAC,2DAA2D,EAAE,GAAG,EAAE;QACrE,MAAM,KAAK,GAAG,IAAA,oCAAqB,EACjC,+DAA+D,CAChE,CAAC;QAEF,IAAA,iBAAM,EAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QAChE,IAAA,iBAAM,EAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,IAAA,eAAI,EAAC,gEAAgE,EAAE,GAAG,EAAE;QAC1E,MAAM,YAAY,GAAG,IAAA,4CAA6B,EAChD,6DAA6D,CAC9D,CAAC;QAEF,IAAA,iBAAM,EAAC,YAAY,CAAC,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC;QAC5D,IAAA,iBAAM,EAAC,YAAY,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QAC9C,IAAA,iBAAM,EAAC,YAAY,CAAC,CAAC,SAAS,CAC5B,mEAAmE,CACpE,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,IAAA,eAAI,EAAC,wDAAwD,EAAE,GAAG,EAAE;QAClE,IAAA,iBAAM,EAAC,IAAA,uCAAwB,EAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CACvD,kEAAkE,CACnE,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for the shared credential-store primitives (credentials.ts). These back
|
|
3
|
+
* BOTH the CLI's `lobu login` store and the embedded server's managed-connector
|
|
4
|
+
* resolver, so the v2 file format + refresh semantics must stay exact.
|
|
5
|
+
*/
|
|
6
|
+
export {};
|
|
7
|
+
//# sourceMappingURL=credentials.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credentials.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/credentials.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Tests for the shared credential-store primitives (credentials.ts). These back
|
|
4
|
+
* BOTH the CLI's `lobu login` store and the embedded server's managed-connector
|
|
5
|
+
* resolver, so the v2 file format + refresh semantics must stay exact.
|
|
6
|
+
*/
|
|
7
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
8
|
+
if (k2 === undefined) k2 = k;
|
|
9
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
10
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
11
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
12
|
+
}
|
|
13
|
+
Object.defineProperty(o, k2, desc);
|
|
14
|
+
}) : (function(o, m, k, k2) {
|
|
15
|
+
if (k2 === undefined) k2 = k;
|
|
16
|
+
o[k2] = m[k];
|
|
17
|
+
}));
|
|
18
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
19
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
20
|
+
}) : function(o, v) {
|
|
21
|
+
o["default"] = v;
|
|
22
|
+
});
|
|
23
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
24
|
+
var ownKeys = function(o) {
|
|
25
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
26
|
+
var ar = [];
|
|
27
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
28
|
+
return ar;
|
|
29
|
+
};
|
|
30
|
+
return ownKeys(o);
|
|
31
|
+
};
|
|
32
|
+
return function (mod) {
|
|
33
|
+
if (mod && mod.__esModule) return mod;
|
|
34
|
+
var result = {};
|
|
35
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
36
|
+
__setModuleDefault(result, mod);
|
|
37
|
+
return result;
|
|
38
|
+
};
|
|
39
|
+
})();
|
|
40
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
41
|
+
const bun_test_1 = require("bun:test");
|
|
42
|
+
const promises_1 = require("node:fs/promises");
|
|
43
|
+
const node_os_1 = require("node:os");
|
|
44
|
+
const node_path_1 = require("node:path");
|
|
45
|
+
const credentials_1 = require("../credentials");
|
|
46
|
+
const DEFAULT = "lobu";
|
|
47
|
+
let dir;
|
|
48
|
+
let file;
|
|
49
|
+
(0, bun_test_1.beforeEach)(async () => {
|
|
50
|
+
dir = await (0, promises_1.mkdtemp)((0, node_path_1.join)((0, node_os_1.tmpdir)(), "lobu-cred-"));
|
|
51
|
+
file = (0, node_path_1.join)(dir, "credentials.json");
|
|
52
|
+
});
|
|
53
|
+
(0, bun_test_1.afterEach)(async () => {
|
|
54
|
+
await (0, promises_1.rm)(dir, { recursive: true, force: true });
|
|
55
|
+
});
|
|
56
|
+
(0, bun_test_1.describe)("credential store I/O", () => {
|
|
57
|
+
(0, bun_test_1.test)("write → read round-trips and preserves extra (non-base) fields", async () => {
|
|
58
|
+
await (0, credentials_1.writeContextCredential)(file, "lobu", DEFAULT, {
|
|
59
|
+
accessToken: "at",
|
|
60
|
+
refreshToken: "rt",
|
|
61
|
+
expiresAt: 123,
|
|
62
|
+
email: "a@b.com",
|
|
63
|
+
localWorkerToken: "wt",
|
|
64
|
+
});
|
|
65
|
+
const read = await (0, credentials_1.readContextCredential)(file, "lobu", DEFAULT);
|
|
66
|
+
(0, bun_test_1.expect)(read).toEqual({
|
|
67
|
+
accessToken: "at",
|
|
68
|
+
refreshToken: "rt",
|
|
69
|
+
expiresAt: 123,
|
|
70
|
+
email: "a@b.com",
|
|
71
|
+
localWorkerToken: "wt",
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
(0, bun_test_1.test)("writes are 0600 and a second context does not clobber the first", async () => {
|
|
75
|
+
await (0, credentials_1.writeContextCredential)(file, "lobu", DEFAULT, { accessToken: "a" });
|
|
76
|
+
await (0, credentials_1.writeContextCredential)(file, "work", DEFAULT, { accessToken: "b" });
|
|
77
|
+
const store = await (0, credentials_1.readCredentialStore)(file, DEFAULT);
|
|
78
|
+
(0, bun_test_1.expect)(store.contexts.lobu?.accessToken).toBe("a");
|
|
79
|
+
(0, bun_test_1.expect)(store.contexts.work?.accessToken).toBe("b");
|
|
80
|
+
const { stat } = await Promise.resolve().then(() => __importStar(require("node:fs/promises")));
|
|
81
|
+
const mode = (await stat(file)).mode & 0o777;
|
|
82
|
+
(0, bun_test_1.expect)(mode).toBe(0o600);
|
|
83
|
+
});
|
|
84
|
+
(0, bun_test_1.test)("a legacy single-context file migrates under the default context", async () => {
|
|
85
|
+
const { writeFile } = await Promise.resolve().then(() => __importStar(require("node:fs/promises")));
|
|
86
|
+
await writeFile(file, JSON.stringify({ accessToken: "legacy", refreshToken: "r" }));
|
|
87
|
+
const read = await (0, credentials_1.readContextCredential)(file, DEFAULT, DEFAULT);
|
|
88
|
+
(0, bun_test_1.expect)(read?.accessToken).toBe("legacy");
|
|
89
|
+
// A non-default context is absent in a legacy file.
|
|
90
|
+
(0, bun_test_1.expect)(await (0, credentials_1.readContextCredential)(file, "work", DEFAULT)).toBeNull();
|
|
91
|
+
});
|
|
92
|
+
(0, bun_test_1.test)("a missing or corrupt file reads as an empty store", async () => {
|
|
93
|
+
(0, bun_test_1.expect)((await (0, credentials_1.readCredentialStore)(file, DEFAULT)).contexts).toEqual({});
|
|
94
|
+
const { writeFile } = await Promise.resolve().then(() => __importStar(require("node:fs/promises")));
|
|
95
|
+
await writeFile(file, "{not json");
|
|
96
|
+
(0, bun_test_1.expect)((await (0, credentials_1.readCredentialStore)(file, DEFAULT)).contexts).toEqual({});
|
|
97
|
+
});
|
|
98
|
+
(0, bun_test_1.test)("entries without an accessToken (or an EMPTY-string one) are dropped on read", async () => {
|
|
99
|
+
const { writeFile } = await Promise.resolve().then(() => __importStar(require("node:fs/promises")));
|
|
100
|
+
await writeFile(file, JSON.stringify({
|
|
101
|
+
version: 2,
|
|
102
|
+
contexts: {
|
|
103
|
+
lobu: { accessToken: "ok" },
|
|
104
|
+
bad: { refreshToken: "x" },
|
|
105
|
+
// An empty-string accessToken is invalid — `lobu login` is the
|
|
106
|
+
// load-bearing primitive and must treat "" as no credential.
|
|
107
|
+
empty: { accessToken: "" },
|
|
108
|
+
},
|
|
109
|
+
}));
|
|
110
|
+
const store = await (0, credentials_1.readCredentialStore)(file, DEFAULT);
|
|
111
|
+
(0, bun_test_1.expect)(store.contexts.lobu?.accessToken).toBe("ok");
|
|
112
|
+
(0, bun_test_1.expect)(store.contexts.bad).toBeUndefined();
|
|
113
|
+
(0, bun_test_1.expect)(store.contexts.empty).toBeUndefined();
|
|
114
|
+
});
|
|
115
|
+
(0, bun_test_1.test)("concurrent writes never corrupt the store and leave no temp files", async () => {
|
|
116
|
+
// The server's refresh write-back and the CLI can write the store at the
|
|
117
|
+
// same time. The atomic temp-file + rename write guarantees a reader always
|
|
118
|
+
// sees ONE writer's COMPLETE file (never a half-written/interleaved one) and
|
|
119
|
+
// no `.tmp-*` turds are left behind. (It is last-writer-wins on the rename —
|
|
120
|
+
// we don't merge concurrent read-modify-writes — so not every context is
|
|
121
|
+
// guaranteed to survive; the invariant being proven here is no CORRUPTION,
|
|
122
|
+
// not no-lost-update.)
|
|
123
|
+
const { readdir } = await Promise.resolve().then(() => __importStar(require("node:fs/promises")));
|
|
124
|
+
await Promise.all(Array.from({ length: 25 }, (_, i) => (0, credentials_1.writeContextCredential)(file, `ctx-${i % 5}`, DEFAULT, {
|
|
125
|
+
accessToken: `token-${i}`,
|
|
126
|
+
})));
|
|
127
|
+
// The file parses cleanly (no interleaved/truncated JSON) — every surviving
|
|
128
|
+
// entry is a valid credential.
|
|
129
|
+
const store = await (0, credentials_1.readCredentialStore)(file, DEFAULT);
|
|
130
|
+
(0, bun_test_1.expect)(Object.keys(store.contexts).length).toBeGreaterThan(0);
|
|
131
|
+
for (const cred of Object.values(store.contexts)) {
|
|
132
|
+
(0, bun_test_1.expect)(typeof cred.accessToken).toBe("string");
|
|
133
|
+
(0, bun_test_1.expect)(cred.accessToken.length).toBeGreaterThan(0);
|
|
134
|
+
}
|
|
135
|
+
// Perms survive concurrent overwrites.
|
|
136
|
+
const { stat } = await Promise.resolve().then(() => __importStar(require("node:fs/promises")));
|
|
137
|
+
(0, bun_test_1.expect)((await stat(file)).mode & 0o777).toBe(0o600);
|
|
138
|
+
// No leftover temp files in the dir.
|
|
139
|
+
const entries = await readdir(dir);
|
|
140
|
+
(0, bun_test_1.expect)(entries.filter((n) => n.includes(".tmp-"))).toEqual([]);
|
|
141
|
+
(0, bun_test_1.expect)(entries).toContain("credentials.json");
|
|
142
|
+
});
|
|
143
|
+
(0, bun_test_1.test)("delete removes one context; deletes the file when none remain", async () => {
|
|
144
|
+
await (0, credentials_1.writeContextCredential)(file, "lobu", DEFAULT, { accessToken: "a" });
|
|
145
|
+
await (0, credentials_1.writeContextCredential)(file, "work", DEFAULT, { accessToken: "b" });
|
|
146
|
+
await (0, credentials_1.deleteContextCredential)(file, "lobu", DEFAULT);
|
|
147
|
+
(0, bun_test_1.expect)(await (0, credentials_1.readContextCredential)(file, "lobu", DEFAULT)).toBeNull();
|
|
148
|
+
(0, bun_test_1.expect)((await (0, credentials_1.readContextCredential)(file, "work", DEFAULT))?.accessToken).toBe("b");
|
|
149
|
+
await (0, credentials_1.deleteContextCredential)(file, "work", DEFAULT);
|
|
150
|
+
await (0, bun_test_1.expect)((0, promises_1.readFile)(file, "utf-8")).rejects.toThrow();
|
|
151
|
+
});
|
|
152
|
+
});
|
|
153
|
+
(0, bun_test_1.describe)("refresh predicates", () => {
|
|
154
|
+
(0, bun_test_1.test)("credentialNeedsRefresh respects the expiry buffer", () => {
|
|
155
|
+
(0, bun_test_1.expect)((0, credentials_1.credentialNeedsRefresh)({ accessToken: "a" })).toBe(false); // no expiry
|
|
156
|
+
(0, bun_test_1.expect)((0, credentials_1.credentialNeedsRefresh)({
|
|
157
|
+
accessToken: "a",
|
|
158
|
+
expiresAt: Date.now() + 600000,
|
|
159
|
+
})).toBe(false);
|
|
160
|
+
(0, bun_test_1.expect)((0, credentials_1.credentialNeedsRefresh)({
|
|
161
|
+
accessToken: "a",
|
|
162
|
+
expiresAt: Date.now() + 1000,
|
|
163
|
+
})).toBe(true);
|
|
164
|
+
(0, bun_test_1.expect)((0, credentials_1.credentialNeedsRefresh)({ accessToken: "a", expiresAt: Date.now() - 1 })).toBe(true);
|
|
165
|
+
});
|
|
166
|
+
(0, bun_test_1.test)("credentialCanRefresh requires a refresh token, client id, and token endpoint", () => {
|
|
167
|
+
(0, bun_test_1.expect)((0, credentials_1.credentialCanRefresh)({ accessToken: "a" })).toBe(false);
|
|
168
|
+
(0, bun_test_1.expect)((0, credentials_1.credentialCanRefresh)({ accessToken: "a", refreshToken: "r" })).toBe(false);
|
|
169
|
+
(0, bun_test_1.expect)((0, credentials_1.credentialCanRefresh)({
|
|
170
|
+
accessToken: "a",
|
|
171
|
+
refreshToken: "r",
|
|
172
|
+
oauth: { clientId: "c", tokenEndpoint: "https://x/token" },
|
|
173
|
+
})).toBe(true);
|
|
174
|
+
});
|
|
175
|
+
});
|
|
176
|
+
(0, bun_test_1.describe)("refreshOAuthToken", () => {
|
|
177
|
+
const realFetch = globalThis.fetch;
|
|
178
|
+
(0, bun_test_1.afterEach)(() => {
|
|
179
|
+
globalThis.fetch = realFetch;
|
|
180
|
+
});
|
|
181
|
+
(0, bun_test_1.test)("returns rotated tokens on success", async () => {
|
|
182
|
+
globalThis.fetch = (0, bun_test_1.mock)(async () => new Response(JSON.stringify({
|
|
183
|
+
access_token: "new-at",
|
|
184
|
+
refresh_token: "new-rt",
|
|
185
|
+
expires_in: 3600,
|
|
186
|
+
}), { status: 200 }));
|
|
187
|
+
const result = await (0, credentials_1.refreshOAuthToken)("https://x/token", { clientId: "c" }, "old-rt");
|
|
188
|
+
(0, bun_test_1.expect)(result).toEqual({
|
|
189
|
+
accessToken: "new-at",
|
|
190
|
+
refreshToken: "new-rt",
|
|
191
|
+
expiresIn: 3600,
|
|
192
|
+
});
|
|
193
|
+
});
|
|
194
|
+
(0, bun_test_1.test)("omits refreshToken/expiresIn when the issuer does not return them", async () => {
|
|
195
|
+
globalThis.fetch = (0, bun_test_1.mock)(async () => new Response(JSON.stringify({ access_token: "only-at" }), {
|
|
196
|
+
status: 200,
|
|
197
|
+
}));
|
|
198
|
+
const result = await (0, credentials_1.refreshOAuthToken)("https://x/token", { clientId: "c" }, "rt");
|
|
199
|
+
(0, bun_test_1.expect)(result).toEqual({
|
|
200
|
+
accessToken: "only-at",
|
|
201
|
+
refreshToken: undefined,
|
|
202
|
+
expiresIn: undefined,
|
|
203
|
+
});
|
|
204
|
+
});
|
|
205
|
+
(0, bun_test_1.test)("returns null on non-2xx, a missing access_token, or a network error", async () => {
|
|
206
|
+
globalThis.fetch = (0, bun_test_1.mock)(async () => new Response("nope", { status: 401 }));
|
|
207
|
+
(0, bun_test_1.expect)(await (0, credentials_1.refreshOAuthToken)("https://x/token", { clientId: "c" }, "rt")).toBeNull();
|
|
208
|
+
globalThis.fetch = (0, bun_test_1.mock)(async () => new Response(JSON.stringify({ token_type: "bearer" }), { status: 200 }));
|
|
209
|
+
(0, bun_test_1.expect)(await (0, credentials_1.refreshOAuthToken)("https://x/token", { clientId: "c" }, "rt")).toBeNull();
|
|
210
|
+
globalThis.fetch = (0, bun_test_1.mock)(async () => {
|
|
211
|
+
throw new Error("offline");
|
|
212
|
+
});
|
|
213
|
+
(0, bun_test_1.expect)(await (0, credentials_1.refreshOAuthToken)("https://x/token", { clientId: "c" }, "rt")).toBeNull();
|
|
214
|
+
});
|
|
215
|
+
});
|
|
216
|
+
//# sourceMappingURL=credentials.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credentials.test.js","sourceRoot":"","sources":["../../src/__tests__/credentials.test.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,uCAA+E;AAC/E,+CAAyD;AACzD,qCAAiC;AACjC,yCAAiC;AACjC,gDASwB;AAExB,MAAM,OAAO,GAAG,MAAM,CAAC;AACvB,IAAI,GAAW,CAAC;AAChB,IAAI,IAAY,CAAC;AAEjB,IAAA,qBAAU,EAAC,KAAK,IAAI,EAAE;IACpB,GAAG,GAAG,MAAM,IAAA,kBAAO,EAAC,IAAA,gBAAI,EAAC,IAAA,gBAAM,GAAE,EAAE,YAAY,CAAC,CAAC,CAAC;IAClD,IAAI,GAAG,IAAA,gBAAI,EAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;AACvC,CAAC,CAAC,CAAC;AAEH,IAAA,oBAAS,EAAC,KAAK,IAAI,EAAE;IACnB,MAAM,IAAA,aAAE,EAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAClD,CAAC,CAAC,CAAC;AAEH,IAAA,mBAAQ,EAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,IAAA,eAAI,EAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;QAKhF,MAAM,IAAA,oCAAsB,EAAO,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE;YACxD,WAAW,EAAE,IAAI;YACjB,YAAY,EAAE,IAAI;YAClB,SAAS,EAAE,GAAG;YACd,KAAK,EAAE,SAAS;YAChB,gBAAgB,EAAE,IAAI;SACvB,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,IAAA,mCAAqB,EAAO,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QACtE,IAAA,iBAAM,EAAC,IAAI,CAAC,CAAC,OAAO,CAAC;YACnB,WAAW,EAAE,IAAI;YACjB,YAAY,EAAE,IAAI;YAClB,SAAS,EAAE,GAAG;YACd,KAAK,EAAE,SAAS;YAChB,gBAAgB,EAAE,IAAI;SACvB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAA,eAAI,EAAC,iEAAiE,EAAE,KAAK,IAAI,EAAE;QACjF,MAAM,IAAA,oCAAsB,EAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC;QAC1E,MAAM,IAAA,oCAAsB,EAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC;QAC1E,MAAM,KAAK,GAAG,MAAM,IAAA,iCAAmB,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACvD,IAAA,iBAAM,EAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnD,IAAA,iBAAM,EAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEnD,MAAM,EAAE,IAAI,EAAE,GAAG,wDAAa,kBAAkB,GAAC,CAAC;QAClD,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC;QAC7C,IAAA,iBAAM,EAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,IAAA,eAAI,EAAC,iEAAiE,EAAE,KAAK,IAAI,EAAE;QACjF,MAAM,EAAE,SAAS,EAAE,GAAG,wDAAa,kBAAkB,GAAC,CAAC;QACvD,MAAM,SAAS,CACb,IAAI,EACJ,IAAI,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,CAC7D,CAAC;QACF,MAAM,IAAI,GAAG,MAAM,IAAA,mCAAqB,EAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QACjE,IAAA,iBAAM,EAAC,IAAI,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzC,oDAAoD;QACpD,IAAA,iBAAM,EAAC,MAAM,IAAA,mCAAqB,EAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,IAAA,eAAI,EAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QACnE,IAAA,iBAAM,EAAC,CAAC,MAAM,IAAA,iCAAmB,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACxE,MAAM,EAAE,SAAS,EAAE,GAAG,wDAAa,kBAAkB,GAAC,CAAC;QACvD,MAAM,SAAS,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QACnC,IAAA,iBAAM,EAAC,CAAC,MAAM,IAAA,iCAAmB,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;IAEH,IAAA,eAAI,EAAC,6EAA6E,EAAE,KAAK,IAAI,EAAE;QAC7F,MAAM,EAAE,SAAS,EAAE,GAAG,wDAAa,kBAAkB,GAAC,CAAC;QACvD,MAAM,SAAS,CACb,IAAI,EACJ,IAAI,CAAC,SAAS,CAAC;YACb,OAAO,EAAE,CAAC;YACV,QAAQ,EAAE;gBACR,IAAI,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;gBAC3B,GAAG,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE;gBAC1B,+DAA+D;gBAC/D,6DAA6D;gBAC7D,KAAK,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE;aAC3B;SACF,CAAC,CACH,CAAC;QACF,MAAM,KAAK,GAAG,MAAM,IAAA,iCAAmB,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACvD,IAAA,iBAAM,EAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpD,IAAA,iBAAM,EAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,CAAC;QAC3C,IAAA,iBAAM,EAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,aAAa,EAAE,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,IAAA,eAAI,EAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;QACnF,yEAAyE;QACzE,4EAA4E;QAC5E,6EAA6E;QAC7E,6EAA6E;QAC7E,yEAAyE;QACzE,2EAA2E;QAC3E,uBAAuB;QACvB,MAAM,EAAE,OAAO,EAAE,GAAG,wDAAa,kBAAkB,GAAC,CAAC;QACrD,MAAM,OAAO,CAAC,GAAG,CACf,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAClC,IAAA,oCAAsB,EAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE;YACpD,WAAW,EAAE,SAAS,CAAC,EAAE;SAC1B,CAAC,CACH,CACF,CAAC;QAEF,4EAA4E;QAC5E,+BAA+B;QAC/B,MAAM,KAAK,GAAG,MAAM,IAAA,iCAAmB,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACvD,IAAA,iBAAM,EAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAC9D,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;YACjD,IAAA,iBAAM,EAAC,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC/C,IAAA,iBAAM,EAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QACrD,CAAC;QAED,uCAAuC;QACvC,MAAM,EAAE,IAAI,EAAE,GAAG,wDAAa,kBAAkB,GAAC,CAAC;QAClD,IAAA,iBAAM,EAAC,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEpD,qCAAqC;QACrC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;QACnC,IAAA,iBAAM,EAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC/D,IAAA,iBAAM,EAAC,OAAO,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,IAAA,eAAI,EAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;QAC/E,MAAM,IAAA,oCAAsB,EAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC;QAC1E,MAAM,IAAA,oCAAsB,EAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC;QAC1E,MAAM,IAAA,qCAAuB,EAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QACrD,IAAA,iBAAM,EAAC,MAAM,IAAA,mCAAqB,EAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QACtE,IAAA,iBAAM,EACJ,CAAC,MAAM,IAAA,mCAAqB,EAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,WAAW,CAClE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEZ,MAAM,IAAA,qCAAuB,EAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QACrD,MAAM,IAAA,iBAAM,EAAC,IAAA,mBAAQ,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;IAC1D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAA,mBAAQ,EAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,IAAA,eAAI,EAAC,mDAAmD,EAAE,GAAG,EAAE;QAC7D,IAAA,iBAAM,EAAC,IAAA,oCAAsB,EAAC,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY;QAC9E,IAAA,iBAAM,EACJ,IAAA,oCAAsB,EAAC;YACrB,WAAW,EAAE,GAAG;YAChB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,MAAO;SAChC,CAAC,CACH,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACd,IAAA,iBAAM,EACJ,IAAA,oCAAsB,EAAC;YACrB,WAAW,EAAE,GAAG;YAChB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAK;SAC9B,CAAC,CACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACb,IAAA,iBAAM,EACJ,IAAA,oCAAsB,EAAC,EAAE,WAAW,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,CACxE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC,CAAC,CAAC;IAEH,IAAA,eAAI,EAAC,8EAA8E,EAAE,GAAG,EAAE;QACxF,IAAA,iBAAM,EAAC,IAAA,kCAAoB,EAAC,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/D,IAAA,iBAAM,EAAC,IAAA,kCAAoB,EAAC,EAAE,WAAW,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CACxE,KAAK,CACN,CAAC;QACF,IAAA,iBAAM,EACJ,IAAA,kCAAoB,EAAC;YACnB,WAAW,EAAE,GAAG;YAChB,YAAY,EAAE,GAAG;YACjB,KAAK,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,aAAa,EAAE,iBAAiB,EAAE;SAC3D,CAAC,CACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAA,mBAAQ,EAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC;IACnC,IAAA,oBAAS,EAAC,GAAG,EAAE;QACb,UAAU,CAAC,KAAK,GAAG,SAAS,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,IAAA,eAAI,EAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;QACnD,UAAU,CAAC,KAAK,GAAG,IAAA,eAAI,EACrB,KAAK,IAAI,EAAE,CACT,IAAI,QAAQ,CACV,IAAI,CAAC,SAAS,CAAC;YACb,YAAY,EAAE,QAAQ;YACtB,aAAa,EAAE,QAAQ;YACvB,UAAU,EAAE,IAAI;SACjB,CAAC,EACF,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CACuB,CAAC;QAC7B,MAAM,MAAM,GAAG,MAAM,IAAA,+BAAiB,EACpC,iBAAiB,EACjB,EAAE,QAAQ,EAAE,GAAG,EAAE,EACjB,QAAQ,CACT,CAAC;QACF,IAAA,iBAAM,EAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YACrB,WAAW,EAAE,QAAQ;YACrB,YAAY,EAAE,QAAQ;YACtB,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAA,eAAI,EAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;QACnF,UAAU,CAAC,KAAK,GAAG,IAAA,eAAI,EACrB,KAAK,IAAI,EAAE,CACT,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC,EAAE;YACxD,MAAM,EAAE,GAAG;SACZ,CAAC,CACsB,CAAC;QAC7B,MAAM,MAAM,GAAG,MAAM,IAAA,+BAAiB,EACpC,iBAAiB,EACjB,EAAE,QAAQ,EAAE,GAAG,EAAE,EACjB,IAAI,CACL,CAAC;QACF,IAAA,iBAAM,EAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YACrB,WAAW,EAAE,SAAS;YACtB,YAAY,EAAE,SAAS;YACvB,SAAS,EAAE,SAAS;SACrB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAA,eAAI,EAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;QACrF,UAAU,CAAC,KAAK,GAAG,IAAA,eAAI,EACrB,KAAK,IAAI,EAAE,CAAC,IAAI,QAAQ,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CACvB,CAAC;QAC7B,IAAA,iBAAM,EACJ,MAAM,IAAA,+BAAiB,EAAC,iBAAiB,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,IAAI,CAAC,CACpE,CAAC,QAAQ,EAAE,CAAC;QAEb,UAAU,CAAC,KAAK,GAAG,IAAA,eAAI,EACrB,KAAK,IAAI,EAAE,CACT,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAC/C,CAAC;QAC7B,IAAA,iBAAM,EACJ,MAAM,IAAA,+BAAiB,EAAC,iBAAiB,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,IAAI,CAAC,CACpE,CAAC,QAAQ,EAAE,CAAC;QAEb,UAAU,CAAC,KAAK,GAAG,IAAA,eAAI,EAAC,KAAK,IAAI,EAAE;YACjC,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC;QAC7B,CAAC,CAA4B,CAAC;QAC9B,IAAA,iBAAM,EACJ,MAAM,IAAA,+BAAiB,EAAC,iBAAiB,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,IAAI,CAAC,CACpE,CAAC,QAAQ,EAAE,CAAC;IACf,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/dist/agent-policy.js
CHANGED
|
@@ -8,19 +8,19 @@ exports.detectToolIntentRules = detectToolIntentRules;
|
|
|
8
8
|
exports.renderDetectedToolIntentRules = renderDetectedToolIntentRules;
|
|
9
9
|
exports.buildUnconfiguredAgentNotice = buildUnconfiguredAgentNotice;
|
|
10
10
|
exports.CUSTOM_TOOL_METADATA = {
|
|
11
|
-
|
|
11
|
+
upload_file: {
|
|
12
12
|
description: "Use this whenever you create a visualization, chart, image, document, report, or any file that helps answer the user's request. When the user asks you to send, share, attach, export, or upload a file, create it and then call this tool so the user can actually receive it in-thread. Do not substitute local paths, workspace paths, or sandbox links.",
|
|
13
13
|
},
|
|
14
|
-
|
|
14
|
+
generate_image: {
|
|
15
15
|
description: "Generate an image from a text prompt and send it to the user. Use when the user asks for image generation, visual concepts, posters, illustrations, or edits that can be done from prompt instructions.",
|
|
16
16
|
},
|
|
17
|
-
|
|
17
|
+
generate_audio: {
|
|
18
18
|
description: "Generate audio from text (text-to-speech). Use when you want to respond with a voice message, read content aloud, or when the user asks for audio output.",
|
|
19
19
|
},
|
|
20
|
-
|
|
20
|
+
get_channel_history: {
|
|
21
21
|
description: "Fetch previous messages from this conversation thread. Use when the user references past discussions, asks 'what did we talk about', or you need context.",
|
|
22
22
|
},
|
|
23
|
-
|
|
23
|
+
ask_user: {
|
|
24
24
|
description: "Posts a question with button options to the user. Session ends after posting. The user's response will arrive as a new message in the next session.",
|
|
25
25
|
},
|
|
26
26
|
};
|
|
@@ -28,11 +28,11 @@ exports.TOOL_INTENT_RULES = [
|
|
|
28
28
|
{
|
|
29
29
|
id: "structured-user-choices",
|
|
30
30
|
title: "Structured User Choices",
|
|
31
|
-
tools: ["
|
|
31
|
+
tools: ["ask_user"],
|
|
32
32
|
instructionLines: [
|
|
33
|
-
"Use
|
|
33
|
+
"Use ask_user when you need the user to choose from a short list of options or approvals.",
|
|
34
34
|
"Use plain text only for open-ended clarifications or when you need a free-form value.",
|
|
35
|
-
"After calling
|
|
35
|
+
"After calling ask_user, stop. The user's answer arrives as the next message.",
|
|
36
36
|
],
|
|
37
37
|
patterns: [],
|
|
38
38
|
priority: 10,
|
|
@@ -41,10 +41,10 @@ exports.TOOL_INTENT_RULES = [
|
|
|
41
41
|
{
|
|
42
42
|
id: "share-generated-files",
|
|
43
43
|
title: "Share Created Files",
|
|
44
|
-
tools: ["
|
|
44
|
+
tools: ["upload_file"],
|
|
45
45
|
instructionLines: [
|
|
46
|
-
"If you create a file that helps answer the request, use
|
|
47
|
-
"Never claim a file was sent unless
|
|
46
|
+
"If you create a file that helps answer the request, use upload_file so the user can access it in-thread.",
|
|
47
|
+
"Never claim a file was sent unless upload_file actually succeeded in this turn.",
|
|
48
48
|
"Never show sandbox:, workspace, or local filesystem links to the user as if they are downloadable attachments.",
|
|
49
49
|
],
|
|
50
50
|
patterns: [],
|
|
@@ -54,11 +54,11 @@ exports.TOOL_INTENT_RULES = [
|
|
|
54
54
|
{
|
|
55
55
|
id: "file-delivery",
|
|
56
56
|
title: "Deliver Files To The User",
|
|
57
|
-
tools: ["
|
|
57
|
+
tools: ["upload_file"],
|
|
58
58
|
instructionLines: [
|
|
59
|
-
"If the user asks to receive, download, attach, upload, export, or share a file, you must use
|
|
59
|
+
"If the user asks to receive, download, attach, upload, export, or share a file, you must use upload_file after creating the file.",
|
|
60
60
|
"Creating the file locally is not enough; the user cannot access sandbox, workspace, or local filesystem paths.",
|
|
61
|
-
"For file delivery requests, use this sequence: create the file, call
|
|
61
|
+
"For file delivery requests, use this sequence: create the file, call upload_file, then tell the user it was sent only if the tool succeeds.",
|
|
62
62
|
],
|
|
63
63
|
patterns: [
|
|
64
64
|
/\b(send|share|attach|upload|export|deliver|give)\b.*\b(file|document|csv|pdf|report|spreadsheet|image|audio)\b/i,
|
|
@@ -71,9 +71,9 @@ exports.TOOL_INTENT_RULES = [
|
|
|
71
71
|
{
|
|
72
72
|
id: "conversation-history",
|
|
73
73
|
title: "Thread History",
|
|
74
|
-
tools: ["
|
|
74
|
+
tools: ["get_channel_history"],
|
|
75
75
|
instructionLines: [
|
|
76
|
-
"Use
|
|
76
|
+
"Use get_channel_history when the user references earlier discussion or you need prior thread context.",
|
|
77
77
|
],
|
|
78
78
|
patterns: [
|
|
79
79
|
/\b(earlier|previous|past)\b.*\b(thread|message|messages|discussion|conversation)\b/i,
|
|
@@ -86,9 +86,9 @@ exports.TOOL_INTENT_RULES = [
|
|
|
86
86
|
{
|
|
87
87
|
id: "image-generation",
|
|
88
88
|
title: "Image Generation",
|
|
89
|
-
tools: ["
|
|
89
|
+
tools: ["generate_image"],
|
|
90
90
|
instructionLines: [
|
|
91
|
-
"If the user asks to generate or create an image, use
|
|
91
|
+
"If the user asks to generate or create an image, use generate_image.",
|
|
92
92
|
"Do not claim image generation is unavailable unless the tool call fails and you report the actual failure.",
|
|
93
93
|
],
|
|
94
94
|
priority: 70,
|
package/dist/agent-policy.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-policy.js","sourceRoot":"","sources":["../src/agent-policy.ts"],"names":[],"mappings":";;;AAgHA,4DAEC;AAED,8DAQC;AAQD,sEAQC;AAED,sDAWC;AAED,sEASC;AAED,oEAWC;AAnKY,QAAA,oBAAoB,GAAuC;IACtE,
|
|
1
|
+
{"version":3,"file":"agent-policy.js","sourceRoot":"","sources":["../src/agent-policy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared primitives for the `~/.config/lobu/credentials.json` store — the
|
|
3
|
+
* v2, context-keyed credential file written by `lobu login`.
|
|
4
|
+
*
|
|
5
|
+
* Two consumers read/refresh/write this store: the CLI
|
|
6
|
+
* (`packages/cli/src/internal/credentials.ts`) and the embedded server's
|
|
7
|
+
* managed-connector resolver (`packages/server/src/connect/cloud-credential.ts`).
|
|
8
|
+
* This module is the single implementation of the file format + refresh grant so
|
|
9
|
+
* the two can't drift. It is pure file I/O + a plain refresh_token POST — the
|
|
10
|
+
* CLI layers its own concerns (per-process caching, in-flight refresh dedup,
|
|
11
|
+
* local-init, context resolution) on top.
|
|
12
|
+
*/
|
|
13
|
+
export interface OAuthClientInfo {
|
|
14
|
+
clientId: string;
|
|
15
|
+
clientSecret?: string;
|
|
16
|
+
/** Cached so refresh/logout don't have to re-discover. */
|
|
17
|
+
tokenEndpoint?: string;
|
|
18
|
+
revocationEndpoint?: string;
|
|
19
|
+
userinfoEndpoint?: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* The auth-relevant fields every stored credential carries. Consumers may store
|
|
23
|
+
* extra fields alongside these (e.g. the CLI's `email` / `userId` /
|
|
24
|
+
* `localWorkerToken`); the `C` type parameter preserves them through read/write.
|
|
25
|
+
*/
|
|
26
|
+
export interface BaseCredential {
|
|
27
|
+
accessToken: string;
|
|
28
|
+
refreshToken?: string;
|
|
29
|
+
/** Epoch ms when the access token expires. */
|
|
30
|
+
expiresAt?: number;
|
|
31
|
+
/** Registered OAuth client + endpoints used to mint/refresh these tokens. */
|
|
32
|
+
oauth?: OAuthClientInfo;
|
|
33
|
+
}
|
|
34
|
+
export interface CredentialStore<C extends BaseCredential = BaseCredential> {
|
|
35
|
+
version: 2;
|
|
36
|
+
contexts: Record<string, C>;
|
|
37
|
+
}
|
|
38
|
+
/** Refresh the access token when it expires within this window. */
|
|
39
|
+
export declare const CREDENTIAL_REFRESH_BUFFER_MS = 60000;
|
|
40
|
+
export declare function normalizeCredential<C extends BaseCredential = BaseCredential>(value: Partial<C> | null | undefined): C | null;
|
|
41
|
+
/**
|
|
42
|
+
* Read + normalize the whole store. A legacy single-context file (pre-v2: the
|
|
43
|
+
* bare credential object at the top level) is migrated under `defaultContextName`.
|
|
44
|
+
* Missing or corrupt files yield an empty store rather than throwing.
|
|
45
|
+
*/
|
|
46
|
+
export declare function readCredentialStore<C extends BaseCredential = BaseCredential>(file: string, defaultContextName: string): Promise<CredentialStore<C>>;
|
|
47
|
+
/** Read one context's credential (null when absent/corrupt). */
|
|
48
|
+
export declare function readContextCredential<C extends BaseCredential = BaseCredential>(file: string, contextName: string, defaultContextName: string): Promise<C | null>;
|
|
49
|
+
/**
|
|
50
|
+
* Write one context's credential into the store, preserving other contexts.
|
|
51
|
+
* The write is atomic (temp-file + `rename`) so a concurrent writer (e.g. the
|
|
52
|
+
* server's refresh write-back) can never observe a half-written store. 0600
|
|
53
|
+
* perms are set on the temp file before the rename, so the published file is
|
|
54
|
+
* never world-readable even momentarily.
|
|
55
|
+
*/
|
|
56
|
+
export declare function writeContextCredential<C extends BaseCredential = BaseCredential>(file: string, contextName: string, defaultContextName: string, credential: C): Promise<void>;
|
|
57
|
+
/** Remove one context. Deletes the file entirely when no contexts remain. */
|
|
58
|
+
export declare function deleteContextCredential<C extends BaseCredential = BaseCredential>(file: string, contextName: string, defaultContextName: string): Promise<void>;
|
|
59
|
+
export declare function credentialNeedsRefresh(cred: BaseCredential, bufferMs?: number): boolean;
|
|
60
|
+
export declare function credentialCanRefresh<C extends BaseCredential = BaseCredential>(cred: C): cred is C & {
|
|
61
|
+
refreshToken: string;
|
|
62
|
+
oauth: OAuthClientInfo & {
|
|
63
|
+
tokenEndpoint: string;
|
|
64
|
+
};
|
|
65
|
+
};
|
|
66
|
+
export interface RefreshedToken {
|
|
67
|
+
accessToken: string;
|
|
68
|
+
refreshToken?: string;
|
|
69
|
+
/** Seconds until expiry, when the issuer returns `expires_in`. */
|
|
70
|
+
expiresIn?: number;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Plain RFC 6749 refresh_token grant against the issuer token endpoint (JSON
|
|
74
|
+
* body). Returns null on any network / non-2xx / parse failure. The issuer may
|
|
75
|
+
* rotate the refresh token, so callers MUST persist the returned `refreshToken`
|
|
76
|
+
* when present.
|
|
77
|
+
*/
|
|
78
|
+
export declare function refreshOAuthToken(tokenEndpoint: string, client: {
|
|
79
|
+
clientId: string;
|
|
80
|
+
clientSecret?: string;
|
|
81
|
+
}, refreshToken: string): Promise<RefreshedToken | null>;
|
|
82
|
+
//# sourceMappingURL=credentials.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../src/credentials.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAaH,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0DAA0D;IAC1D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6EAA6E;IAC7E,KAAK,CAAC,EAAE,eAAe,CAAC;CACzB;AAED,MAAM,WAAW,eAAe,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc;IACxE,OAAO,EAAE,CAAC,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;CAC7B;AAED,mEAAmE;AACnE,eAAO,MAAM,4BAA4B,QAAS,CAAC;AAEnD,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAC3E,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,SAAS,GACnC,CAAC,GAAG,IAAI,CAUV;AAYD;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,CAAC,SAAS,cAAc,GAAG,cAAc,EACzC,IAAI,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAoBvE;AAED,gEAAgE;AAChE,wBAAsB,qBAAqB,CACzC,CAAC,SAAS,cAAc,GAAG,cAAc,EAEzC,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,kBAAkB,EAAE,MAAM,GACzB,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAGnB;AA6BD;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAC1C,CAAC,SAAS,cAAc,GAAG,cAAc,EAEzC,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,kBAAkB,EAAE,MAAM,EAC1B,UAAU,EAAE,CAAC,GACZ,OAAO,CAAC,IAAI,CAAC,CAIf;AAED,6EAA6E;AAC7E,wBAAsB,uBAAuB,CAC3C,CAAC,SAAS,cAAc,GAAG,cAAc,EAEzC,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,kBAAkB,EAAE,MAAM,GACzB,OAAO,CAAC,IAAI,CAAC,CAQf;AAED,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,cAAc,EACpB,QAAQ,SAA+B,GACtC,OAAO,CAKT;AAED,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAC5E,IAAI,EAAE,CAAC,GACN,IAAI,IAAI,CAAC,GAAG;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,eAAe,GAAG;QAAE,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC;CACpD,CAIA;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kEAAkE;IAClE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,EACnD,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAmChC"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Shared primitives for the `~/.config/lobu/credentials.json` store — the
|
|
4
|
+
* v2, context-keyed credential file written by `lobu login`.
|
|
5
|
+
*
|
|
6
|
+
* Two consumers read/refresh/write this store: the CLI
|
|
7
|
+
* (`packages/cli/src/internal/credentials.ts`) and the embedded server's
|
|
8
|
+
* managed-connector resolver (`packages/server/src/connect/cloud-credential.ts`).
|
|
9
|
+
* This module is the single implementation of the file format + refresh grant so
|
|
10
|
+
* the two can't drift. It is pure file I/O + a plain refresh_token POST — the
|
|
11
|
+
* CLI layers its own concerns (per-process caching, in-flight refresh dedup,
|
|
12
|
+
* local-init, context resolution) on top.
|
|
13
|
+
*/
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.CREDENTIAL_REFRESH_BUFFER_MS = void 0;
|
|
16
|
+
exports.normalizeCredential = normalizeCredential;
|
|
17
|
+
exports.readCredentialStore = readCredentialStore;
|
|
18
|
+
exports.readContextCredential = readContextCredential;
|
|
19
|
+
exports.writeContextCredential = writeContextCredential;
|
|
20
|
+
exports.deleteContextCredential = deleteContextCredential;
|
|
21
|
+
exports.credentialNeedsRefresh = credentialNeedsRefresh;
|
|
22
|
+
exports.credentialCanRefresh = credentialCanRefresh;
|
|
23
|
+
exports.refreshOAuthToken = refreshOAuthToken;
|
|
24
|
+
const node_crypto_1 = require("node:crypto");
|
|
25
|
+
const promises_1 = require("node:fs/promises");
|
|
26
|
+
const node_path_1 = require("node:path");
|
|
27
|
+
/** Refresh the access token when it expires within this window. */
|
|
28
|
+
exports.CREDENTIAL_REFRESH_BUFFER_MS = 60000;
|
|
29
|
+
function normalizeCredential(value) {
|
|
30
|
+
if (!value ||
|
|
31
|
+
typeof value !== "object" ||
|
|
32
|
+
typeof value.accessToken !== "string" ||
|
|
33
|
+
value.accessToken === "") {
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
return { ...value, accessToken: value.accessToken };
|
|
37
|
+
}
|
|
38
|
+
function isCredentialStore(value) {
|
|
39
|
+
return (!!value &&
|
|
40
|
+
typeof value === "object" &&
|
|
41
|
+
"contexts" in value &&
|
|
42
|
+
!!value.contexts &&
|
|
43
|
+
typeof value.contexts === "object");
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Read + normalize the whole store. A legacy single-context file (pre-v2: the
|
|
47
|
+
* bare credential object at the top level) is migrated under `defaultContextName`.
|
|
48
|
+
* Missing or corrupt files yield an empty store rather than throwing.
|
|
49
|
+
*/
|
|
50
|
+
async function readCredentialStore(file, defaultContextName) {
|
|
51
|
+
try {
|
|
52
|
+
const raw = await (0, promises_1.readFile)(file, "utf-8");
|
|
53
|
+
const parsed = JSON.parse(raw);
|
|
54
|
+
if (isCredentialStore(parsed)) {
|
|
55
|
+
const contexts = {};
|
|
56
|
+
for (const [name, value] of Object.entries(parsed.contexts)) {
|
|
57
|
+
const norm = normalizeCredential(value);
|
|
58
|
+
if (norm)
|
|
59
|
+
contexts[name] = norm;
|
|
60
|
+
}
|
|
61
|
+
return { version: 2, contexts };
|
|
62
|
+
}
|
|
63
|
+
const legacy = normalizeCredential(parsed);
|
|
64
|
+
return {
|
|
65
|
+
version: 2,
|
|
66
|
+
contexts: legacy ? { [defaultContextName]: legacy } : {},
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
return { version: 2, contexts: {} };
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/** Read one context's credential (null when absent/corrupt). */
|
|
74
|
+
async function readContextCredential(file, contextName, defaultContextName) {
|
|
75
|
+
const store = await readCredentialStore(file, defaultContextName);
|
|
76
|
+
return store.contexts[contextName] ?? null;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Atomically write `data` to `file` with 0600 perms. Writes to a sibling temp
|
|
80
|
+
* file (same dir, so `rename` is on the same filesystem and therefore atomic on
|
|
81
|
+
* POSIX), chmods the temp BEFORE the rename so the published file never has a
|
|
82
|
+
* window of looser perms, then renames over the target. This makes concurrent
|
|
83
|
+
* writers (CLI `lobu login` + the server's token-refresh write-back) safe: each
|
|
84
|
+
* writer commits its whole-file image in a single atomic `rename`, so a reader
|
|
85
|
+
* always sees one writer's complete file — never a half-written / interleaved
|
|
86
|
+
* one. (Last-writer-wins on the rename; we don't merge, but neither writer can
|
|
87
|
+
* corrupt the store.)
|
|
88
|
+
*/
|
|
89
|
+
async function atomicWriteFile(file, data) {
|
|
90
|
+
await (0, promises_1.mkdir)((0, node_path_1.dirname)(file), { recursive: true });
|
|
91
|
+
const tmp = (0, node_path_1.join)((0, node_path_1.dirname)(file), `${".tmp-"}${process.pid}.${(0, node_crypto_1.randomBytes)(6).toString("hex")}`);
|
|
92
|
+
try {
|
|
93
|
+
await (0, promises_1.writeFile)(tmp, data, { mode: 0o600 });
|
|
94
|
+
await (0, promises_1.chmod)(tmp, 0o600).catch(() => undefined);
|
|
95
|
+
await (0, promises_1.rename)(tmp, file);
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
await (0, promises_1.rm)(tmp).catch(() => undefined);
|
|
99
|
+
throw error;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Write one context's credential into the store, preserving other contexts.
|
|
104
|
+
* The write is atomic (temp-file + `rename`) so a concurrent writer (e.g. the
|
|
105
|
+
* server's refresh write-back) can never observe a half-written store. 0600
|
|
106
|
+
* perms are set on the temp file before the rename, so the published file is
|
|
107
|
+
* never world-readable even momentarily.
|
|
108
|
+
*/
|
|
109
|
+
async function writeContextCredential(file, contextName, defaultContextName, credential) {
|
|
110
|
+
const store = await readCredentialStore(file, defaultContextName);
|
|
111
|
+
store.contexts[contextName] = credential;
|
|
112
|
+
await atomicWriteFile(file, JSON.stringify(store, null, 2));
|
|
113
|
+
}
|
|
114
|
+
/** Remove one context. Deletes the file entirely when no contexts remain. */
|
|
115
|
+
async function deleteContextCredential(file, contextName, defaultContextName) {
|
|
116
|
+
const store = await readCredentialStore(file, defaultContextName);
|
|
117
|
+
delete store.contexts[contextName];
|
|
118
|
+
if (Object.keys(store.contexts).length === 0) {
|
|
119
|
+
await (0, promises_1.rm)(file).catch(() => undefined);
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
await atomicWriteFile(file, JSON.stringify(store, null, 2));
|
|
123
|
+
}
|
|
124
|
+
function credentialNeedsRefresh(cred, bufferMs = exports.CREDENTIAL_REFRESH_BUFFER_MS) {
|
|
125
|
+
return (typeof cred.expiresAt === "number" &&
|
|
126
|
+
cred.expiresAt - bufferMs <= Date.now());
|
|
127
|
+
}
|
|
128
|
+
function credentialCanRefresh(cred) {
|
|
129
|
+
return Boolean(cred.refreshToken && cred.oauth?.tokenEndpoint && cred.oauth.clientId);
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Plain RFC 6749 refresh_token grant against the issuer token endpoint (JSON
|
|
133
|
+
* body). Returns null on any network / non-2xx / parse failure. The issuer may
|
|
134
|
+
* rotate the refresh token, so callers MUST persist the returned `refreshToken`
|
|
135
|
+
* when present.
|
|
136
|
+
*/
|
|
137
|
+
async function refreshOAuthToken(tokenEndpoint, client, refreshToken) {
|
|
138
|
+
const body = {
|
|
139
|
+
grant_type: "refresh_token",
|
|
140
|
+
refresh_token: refreshToken,
|
|
141
|
+
client_id: client.clientId,
|
|
142
|
+
};
|
|
143
|
+
if (client.clientSecret)
|
|
144
|
+
body.client_secret = client.clientSecret;
|
|
145
|
+
let response;
|
|
146
|
+
try {
|
|
147
|
+
response = await fetch(tokenEndpoint, {
|
|
148
|
+
method: "POST",
|
|
149
|
+
headers: {
|
|
150
|
+
"Content-Type": "application/json",
|
|
151
|
+
Accept: "application/json",
|
|
152
|
+
},
|
|
153
|
+
body: JSON.stringify(body),
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
catch {
|
|
157
|
+
return null;
|
|
158
|
+
}
|
|
159
|
+
if (!response.ok)
|
|
160
|
+
return null;
|
|
161
|
+
const data = (await response.json().catch(() => null));
|
|
162
|
+
if (!data || typeof data.access_token !== "string")
|
|
163
|
+
return null;
|
|
164
|
+
return {
|
|
165
|
+
accessToken: data.access_token,
|
|
166
|
+
refreshToken: typeof data.refresh_token === "string" ? data.refresh_token : undefined,
|
|
167
|
+
expiresIn: typeof data.expires_in === "number" ? data.expires_in : undefined,
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=credentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../src/credentials.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env bun
|
|
2
2
|
export * from "./agent-policy";
|
|
3
|
+
export * from "./credentials";
|
|
3
4
|
export type { AgentAccessStore, AgentConfigStore, AgentConnectionStore, AgentMetadata, AgentSettings, AgentStore, ChannelBinding, ConnectionSettings, Grant, GrantKind, StoredConnection, } from "./agent-store";
|
|
4
5
|
export { inferGrantKind } from "./agent-store";
|
|
5
6
|
export type { AgentConfigResponse, AgentInfo, CatalogProvider, Connection, McpConfig, ModelOption, PermissionGrant, PrefillMcp, PrefillSkill, ProviderInfo, ProviderState, ProviderStatus, SettingsSnapshot, Skill, SkillMcpServerInfo, } from "./api-types";
|
|
@@ -27,7 +28,6 @@ export type { BaseMessage } from "./types/message";
|
|
|
27
28
|
export * from "./utils/encryption";
|
|
28
29
|
export * from "./utils/env";
|
|
29
30
|
export * from "./utils/json";
|
|
30
|
-
export * from "./utils/lock";
|
|
31
31
|
export type { McpStatus, McpToolDef } from "./utils/mcp-tool-instructions";
|
|
32
32
|
export * from "./utils/network-domains";
|
|
33
33
|
export * from "./utils/retry";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAIA,cAAc,gBAAgB,CAAC;AAE/B,YAAY,EACV,gBAAgB,EAChB,gBAAgB,EAChB,oBAAoB,EACpB,aAAa,EACb,aAAa,EACb,UAAU,EACV,cAAc,EACd,kBAAkB,EAClB,KAAK,EACL,SAAS,EACT,gBAAgB,GACjB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,YAAY,EACV,mBAAmB,EACnB,SAAS,EACT,eAAe,EACf,UAAU,EACV,SAAS,EACT,WAAW,EACX,eAAe,EACf,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,KAAK,EACL,kBAAkB,GACnB,MAAM,aAAa,CAAC;AACrB,cAAc,gBAAgB,CAAC;AAC/B,YAAY,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE5E,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,cAAc,aAAa,CAAC;AAE5B,cAAc,UAAU,CAAC;AAEzB,cAAc,cAAc,CAAC;AAE7B,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,YAAY,EACV,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAK7B,OAAO,EACL,2BAA2B,EAC3B,wBAAwB,GACzB,MAAM,iBAAiB,CAAC;AACzB,cAAc,UAAU,CAAC;AAEzB,cAAc,WAAW,CAAC;AAC1B,YAAY,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEvD,OAAO,EACL,eAAe,EACf,cAAc,EACd,UAAU,EACV,YAAY,EACZ,cAAc,EACd,cAAc,EACd,SAAS,EACT,WAAW,EACX,gBAAgB,EAChB,QAAQ,EACR,cAAc,EACd,eAAe,EACf,aAAa,EACb,QAAQ,GACT,MAAM,QAAQ,CAAC;AAEhB,YAAY,EACV,YAAY,EACZ,cAAc,EACd,UAAU,EACV,aAAa,EACb,oBAAoB,GACrB,MAAM,gBAAgB,CAAC;AAExB,YAAY,EACV,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,yBAAyB,CAAC;AACjC,cAAc,eAAe,CAAC;AAE9B,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE1D,YAAY,EACV,iBAAiB,EACjB,cAAc,EACd,YAAY,EACZ,WAAW,EACX,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,QAAQ,EACR,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,aAAa,EACb,SAAS,EACT,wBAAwB,EACxB,aAAa,EACb,cAAc,EACd,WAAW,EACX,cAAc,EACd,qBAAqB,EACrB,YAAY,EACZ,eAAe,EACf,aAAa,EACb,qBAAqB,EACrB,WAAW,EACX,cAAc,GACf,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAE9C,YAAY,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAGnD,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -18,6 +18,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
18
18
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
19
|
exports.parseSessionEntries = exports.entryToMessage = exports.hasCredentialSource = exports.generateTraceId = exports.extractTraceId = exports.initSentry = exports.getSentry = exports.withSpan = exports.withChildSpan = exports.shutdownTracing = exports.SpanStatusCode = exports.SpanKind = exports.runInSpanContext = exports.initTracing = exports.getTracer = exports.getTraceparent = exports.getCurrentSpan = exports.flushTracing = exports.createSpan = exports.createRootSpan = exports.createChildSpan = exports.renderSkillMemorySection = exports.renderFallbackSystemContext = exports.BaseInstructionProvider = exports.CommandRegistry = exports.inferGrantKind = void 0;
|
|
20
20
|
__exportStar(require("./agent-policy"), exports);
|
|
21
|
+
// Shared credential-store primitives (CLI + embedded server share one impl)
|
|
22
|
+
__exportStar(require("./credentials"), exports);
|
|
21
23
|
var agent_store_1 = require("./agent-store");
|
|
22
24
|
Object.defineProperty(exports, "inferGrantKind", { enumerable: true, get: function () { return agent_store_1.inferGrantKind; } });
|
|
23
25
|
__exportStar(require("./capabilities"), exports);
|
|
@@ -72,7 +74,6 @@ Object.defineProperty(exports, "hasCredentialSource", { enumerable: true, get: f
|
|
|
72
74
|
__exportStar(require("./utils/encryption"), exports);
|
|
73
75
|
__exportStar(require("./utils/env"), exports);
|
|
74
76
|
__exportStar(require("./utils/json"), exports);
|
|
75
|
-
__exportStar(require("./utils/lock"), exports);
|
|
76
77
|
__exportStar(require("./utils/network-domains"), exports);
|
|
77
78
|
__exportStar(require("./utils/retry"), exports);
|
|
78
79
|
__exportStar(require("./utils/sanitize"), exports);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAEA,4EAA4E;;;;;;;;;;;;;;;;;AAE5E,iDAA+B;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAEA,4EAA4E;;;;;;;;;;;;;;;;;AAE5E,iDAA+B;AAC/B,4EAA4E;AAC5E,gDAA8B;AAe9B,6CAA+C;AAAtC,6GAAA,cAAc,OAAA;AAmBvB,iDAA+B;AAE/B,mBAAmB;AACnB,uDAAqD;AAA5C,mHAAA,eAAe,OAAA;AACxB,8CAA4B;AAC5B,mBAAmB;AACnB,2CAAyB;AACzB,0EAA0E;AAC1E,+CAA6B;AAC7B,wEAAwE;AACxE,+DAAiE;AAAxD,+HAAA,uBAAuB,OAAA;AAMhC,4EAA4E;AAC5E,gFAAgF;AAChF,8EAA8E;AAC9E,2EAA2E;AAC3E,iDAGyB;AAFvB,4HAAA,2BAA2B,OAAA;AAC3B,yHAAA,wBAAwB,OAAA;AAE1B,2CAAyB;AACzB,gBAAgB;AAChB,4CAA0B;AAE1B,wBAAwB;AACxB,+BAegB;AAdd,uGAAA,eAAe,OAAA;AACf,sGAAA,cAAc,OAAA;AACd,kGAAA,UAAU,OAAA;AACV,oGAAA,YAAY,OAAA;AACZ,sGAAA,cAAc,OAAA;AACd,sGAAA,cAAc,OAAA;AACd,iGAAA,SAAS,OAAA;AACT,mGAAA,WAAW,OAAA;AACX,wGAAA,gBAAgB,OAAA;AAChB,gGAAA,QAAQ,OAAA;AACR,sGAAA,cAAc,OAAA;AACd,uGAAA,eAAe,OAAA;AACf,qGAAA,aAAa,OAAA;AACb,gGAAA,QAAQ,OAAA;AAeV,gDAA8B;AAC9B,gBAAgB;AAChB,mCAAiD;AAAxC,mGAAA,SAAS,OAAA;AAAE,oGAAA,UAAU,OAAA;AAC9B,iCAA0D;AAAjD,uGAAA,cAAc,OAAA;AAAE,wGAAA,eAAe,OAAA;AAmCxC,iCAA8C;AAArC,4GAAA,mBAAmB,OAAA;AAI5B,YAAY;AACZ,qDAAmC;AACnC,8CAA4B;AAC5B,+CAA6B;AAE7B,0DAAwC;AACxC,gDAA8B;AAC9B,mDAAiC;AACjC,2DAA2D;AAC3D,qDAK8B;AAJ5B,8GAAA,cAAc,OAAA;AAEd,mHAAA,mBAAmB,OAAA;AAGrB,+CAA6B;AAC7B,gDAA8B"}
|
package/dist/types.d.ts
CHANGED
|
@@ -458,6 +458,14 @@ export interface ThreadResponsePayload {
|
|
|
458
458
|
delta?: string;
|
|
459
459
|
isFullReplacement?: boolean;
|
|
460
460
|
processedMessageIds?: string[];
|
|
461
|
+
/**
|
|
462
|
+
* Full final assistant text, set on the TERMINAL completion row by the
|
|
463
|
+
* worker. Lets a renderer deliver the reply without the per-pod streaming
|
|
464
|
+
* buffer (which only exists on the pod that consumed the delta rows) — so a
|
|
465
|
+
* post-once platform (Slack) renders correctly even when the completion is
|
|
466
|
+
* drained by a different replica than the one that buffered the deltas.
|
|
467
|
+
*/
|
|
468
|
+
finalText?: string;
|
|
461
469
|
error?: string;
|
|
462
470
|
errorCode?: string;
|
|
463
471
|
timestamp: number;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils-lock.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/utils-lock.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const bun_test_1 = require("bun:test");
|
|
4
|
-
const lock_1 = require("../utils/lock");
|
|
5
|
-
const wait = (ms) => new Promise((r) => setTimeout(r, ms));
|
|
6
|
-
(0, bun_test_1.describe)("AsyncLock", () => {
|
|
7
|
-
(0, bun_test_1.test)("returns the value from the wrapped function", async () => {
|
|
8
|
-
const lock = new lock_1.AsyncLock("test");
|
|
9
|
-
const result = await lock.acquire(async () => 42);
|
|
10
|
-
(0, bun_test_1.expect)(result).toBe(42);
|
|
11
|
-
});
|
|
12
|
-
(0, bun_test_1.test)("serializes concurrent operations (FIFO ordering)", async () => {
|
|
13
|
-
const lock = new lock_1.AsyncLock("serial");
|
|
14
|
-
const events = [];
|
|
15
|
-
const op = (label, ms) => lock.acquire(async () => {
|
|
16
|
-
events.push(`start:${label}`);
|
|
17
|
-
await wait(ms);
|
|
18
|
-
events.push(`end:${label}`);
|
|
19
|
-
return label;
|
|
20
|
-
});
|
|
21
|
-
const [a, b, c] = await Promise.all([op("a", 30), op("b", 10), op("c", 5)]);
|
|
22
|
-
(0, bun_test_1.expect)([a, b, c]).toEqual(["a", "b", "c"]);
|
|
23
|
-
// Each operation must end before the next one starts
|
|
24
|
-
(0, bun_test_1.expect)(events).toEqual([
|
|
25
|
-
"start:a",
|
|
26
|
-
"end:a",
|
|
27
|
-
"start:b",
|
|
28
|
-
"end:b",
|
|
29
|
-
"start:c",
|
|
30
|
-
"end:c",
|
|
31
|
-
]);
|
|
32
|
-
});
|
|
33
|
-
(0, bun_test_1.test)("releases lock even when wrapped function throws", async () => {
|
|
34
|
-
const lock = new lock_1.AsyncLock("error-path");
|
|
35
|
-
await (0, bun_test_1.expect)(lock.acquire(async () => {
|
|
36
|
-
throw new Error("boom");
|
|
37
|
-
})).rejects.toThrow("boom");
|
|
38
|
-
// Subsequent acquire should succeed (lock was released)
|
|
39
|
-
const result = await lock.acquire(async () => "after-error");
|
|
40
|
-
(0, bun_test_1.expect)(result).toBe("after-error");
|
|
41
|
-
});
|
|
42
|
-
(0, bun_test_1.test)("times out when previous holder runs longer than timeoutMs", async () => {
|
|
43
|
-
const lock = new lock_1.AsyncLock("timeout-ctx");
|
|
44
|
-
// First operation holds the lock for 200ms
|
|
45
|
-
const slow = lock.acquire(async () => {
|
|
46
|
-
await wait(200);
|
|
47
|
-
return "slow";
|
|
48
|
-
});
|
|
49
|
-
// Second operation should time out after 20ms waiting
|
|
50
|
-
await (0, bun_test_1.expect)(lock.acquire(async () => "fast", 20)).rejects.toThrow(/Lock acquisition timeout after 20ms.*timeout-ctx/);
|
|
51
|
-
// Wait for the slow op to finish so the test cleans up
|
|
52
|
-
await slow;
|
|
53
|
-
});
|
|
54
|
-
(0, bun_test_1.test)("default context appears in timeout message", async () => {
|
|
55
|
-
const lock = new lock_1.AsyncLock();
|
|
56
|
-
const slow = lock.acquire(async () => {
|
|
57
|
-
await wait(100);
|
|
58
|
-
});
|
|
59
|
-
await (0, bun_test_1.expect)(lock.acquire(async () => "x", 10)).rejects.toThrow(/possible deadlock in unknown/);
|
|
60
|
-
await slow;
|
|
61
|
-
});
|
|
62
|
-
(0, bun_test_1.test)("timeout error from previous slow holder doesn't poison subsequent acquires", async () => {
|
|
63
|
-
const lock = new lock_1.AsyncLock("recovery");
|
|
64
|
-
const slow = lock.acquire(async () => {
|
|
65
|
-
await wait(80);
|
|
66
|
-
return "slow-done";
|
|
67
|
-
});
|
|
68
|
-
await (0, bun_test_1.expect)(lock.acquire(async () => "skipped", 5)).rejects.toThrow();
|
|
69
|
-
// After slow finishes, lock should be usable again
|
|
70
|
-
(0, bun_test_1.expect)(await slow).toBe("slow-done");
|
|
71
|
-
(0, bun_test_1.expect)(await lock.acquire(async () => "ok")).toBe("ok");
|
|
72
|
-
});
|
|
73
|
-
(0, bun_test_1.test)("propagates non-Error throws", async () => {
|
|
74
|
-
const lock = new lock_1.AsyncLock();
|
|
75
|
-
await (0, bun_test_1.expect)(lock.acquire(async () => {
|
|
76
|
-
throw "string-error";
|
|
77
|
-
})).rejects.toBe("string-error");
|
|
78
|
-
// Lock still works after non-Error throw
|
|
79
|
-
(0, bun_test_1.expect)(await lock.acquire(async () => "recovered")).toBe("recovered");
|
|
80
|
-
});
|
|
81
|
-
});
|
|
82
|
-
//# sourceMappingURL=utils-lock.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils-lock.test.js","sourceRoot":"","sources":["../../src/__tests__/utils-lock.test.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/lock.d.ts
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Async lock for serializing concurrent operations
|
|
3
|
-
* Prevents race conditions in async code by ensuring only one operation runs at a time
|
|
4
|
-
*
|
|
5
|
-
* @example
|
|
6
|
-
* ```typescript
|
|
7
|
-
* class StreamSession {
|
|
8
|
-
* private streamLock = new AsyncLock();
|
|
9
|
-
*
|
|
10
|
-
* async appendDelta(delta: string) {
|
|
11
|
-
* return this.streamLock.acquire(() => this.appendDeltaUnsafe(delta));
|
|
12
|
-
* }
|
|
13
|
-
*
|
|
14
|
-
* private async appendDeltaUnsafe(delta: string) {
|
|
15
|
-
* // Critical section - only one execution at a time
|
|
16
|
-
* }
|
|
17
|
-
* }
|
|
18
|
-
* ```
|
|
19
|
-
*/
|
|
20
|
-
export declare class AsyncLock {
|
|
21
|
-
private lock;
|
|
22
|
-
private lockContext;
|
|
23
|
-
constructor(context?: string);
|
|
24
|
-
/**
|
|
25
|
-
* Acquire lock and execute function exclusively
|
|
26
|
-
*
|
|
27
|
-
* @param fn - The async function to execute with exclusive access
|
|
28
|
-
* @param timeoutMs - Maximum time to wait for lock acquisition (default: 30s)
|
|
29
|
-
* @returns The result of the function
|
|
30
|
-
* @throws Error if lock acquisition times out
|
|
31
|
-
*/
|
|
32
|
-
acquire<T>(fn: () => Promise<T>, timeoutMs?: number): Promise<T>;
|
|
33
|
-
}
|
|
34
|
-
//# sourceMappingURL=lock.d.ts.map
|
package/dist/utils/lock.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"lock.d.ts","sourceRoot":"","sources":["../../src/utils/lock.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,IAAI,CAAoC;IAChD,OAAO,CAAC,WAAW,CAAS;gBAEhB,OAAO,GAAE,MAAkB;IAIvC;;;;;;;OAOG;IACG,OAAO,CAAC,CAAC,EACb,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,SAAS,GAAE,MAAc,GACxB,OAAO,CAAC,CAAC,CAAC;CAoCd"}
|
package/dist/utils/lock.js
DELETED
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.AsyncLock = void 0;
|
|
4
|
-
/**
|
|
5
|
-
* Async lock for serializing concurrent operations
|
|
6
|
-
* Prevents race conditions in async code by ensuring only one operation runs at a time
|
|
7
|
-
*
|
|
8
|
-
* @example
|
|
9
|
-
* ```typescript
|
|
10
|
-
* class StreamSession {
|
|
11
|
-
* private streamLock = new AsyncLock();
|
|
12
|
-
*
|
|
13
|
-
* async appendDelta(delta: string) {
|
|
14
|
-
* return this.streamLock.acquire(() => this.appendDeltaUnsafe(delta));
|
|
15
|
-
* }
|
|
16
|
-
*
|
|
17
|
-
* private async appendDeltaUnsafe(delta: string) {
|
|
18
|
-
* // Critical section - only one execution at a time
|
|
19
|
-
* }
|
|
20
|
-
* }
|
|
21
|
-
* ```
|
|
22
|
-
*/
|
|
23
|
-
class AsyncLock {
|
|
24
|
-
constructor(context = "unknown") {
|
|
25
|
-
this.lock = Promise.resolve();
|
|
26
|
-
this.lockContext = context;
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Acquire lock and execute function exclusively
|
|
30
|
-
*
|
|
31
|
-
* @param fn - The async function to execute with exclusive access
|
|
32
|
-
* @param timeoutMs - Maximum time to wait for lock acquisition (default: 30s)
|
|
33
|
-
* @returns The result of the function
|
|
34
|
-
* @throws Error if lock acquisition times out
|
|
35
|
-
*/
|
|
36
|
-
async acquire(fn, timeoutMs = 30000) {
|
|
37
|
-
const currentLock = this.lock;
|
|
38
|
-
let releaseLock;
|
|
39
|
-
// Create new lock that will be released when fn completes
|
|
40
|
-
this.lock = new Promise((resolve) => {
|
|
41
|
-
releaseLock = resolve;
|
|
42
|
-
});
|
|
43
|
-
let timeoutId;
|
|
44
|
-
try {
|
|
45
|
-
// Wait for previous operation with timeout to prevent deadlock
|
|
46
|
-
const lockTimeout = new Promise((_, reject) => {
|
|
47
|
-
timeoutId = setTimeout(() => {
|
|
48
|
-
reject(new Error(`Lock acquisition timeout after ${timeoutMs}ms - possible deadlock in ${this.lockContext}`));
|
|
49
|
-
}, timeoutMs);
|
|
50
|
-
});
|
|
51
|
-
await Promise.race([currentLock, lockTimeout]);
|
|
52
|
-
// Execute function with exclusive access
|
|
53
|
-
return await fn();
|
|
54
|
-
}
|
|
55
|
-
finally {
|
|
56
|
-
// Clear the timeout to prevent leak
|
|
57
|
-
if (timeoutId !== undefined) {
|
|
58
|
-
clearTimeout(timeoutId);
|
|
59
|
-
}
|
|
60
|
-
// Always release lock, even on error
|
|
61
|
-
releaseLock?.();
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
exports.AsyncLock = AsyncLock;
|
|
66
|
-
//# sourceMappingURL=lock.js.map
|
package/dist/utils/lock.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"lock.js","sourceRoot":"","sources":["../../src/utils/lock.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAa,SAAS;IAIpB,YAAY,UAAkB,SAAS;QAH/B,SAAI,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;QAI9C,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC;IAC7B,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,OAAO,CACX,EAAoB,EACpB,YAAoB,KAAK;QAEzB,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC;QAC9B,IAAI,WAAqC,CAAC;QAE1C,0DAA0D;QAC1D,IAAI,CAAC,IAAI,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YACxC,WAAW,GAAG,OAAO,CAAC;QACxB,CAAC,CAAC,CAAC;QAEH,IAAI,SAAoD,CAAC;QAEzD,IAAI,CAAC;YACH,+DAA+D;YAC/D,MAAM,WAAW,GAAG,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;gBACnD,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;oBAC1B,MAAM,CACJ,IAAI,KAAK,CACP,kCAAkC,SAAS,6BAA6B,IAAI,CAAC,WAAW,EAAE,CAC3F,CACF,CAAC;gBACJ,CAAC,EAAE,SAAS,CAAC,CAAC;YAChB,CAAC,CAAC,CAAC;YAEH,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;YAE/C,yCAAyC;YACzC,OAAO,MAAM,EAAE,EAAE,CAAC;QACpB,CAAC;gBAAS,CAAC;YACT,oCAAoC;YACpC,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;gBAC5B,YAAY,CAAC,SAAS,CAAC,CAAC;YAC1B,CAAC;YACD,qCAAqC;YACrC,WAAW,EAAE,EAAE,CAAC;QAClB,CAAC;IACH,CAAC;CACF;AAvDD,8BAuDC"}
|