@koda-sl/baker-bridge 0.50.0-dev.4a71225ab → 0.50.0-dev.a2cdb40bc
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/hono/agent-session.d.ts +2 -2
- package/dist/hono/agent-session.d.ts.map +1 -1
- package/dist/hono/agent-session.js +2 -2
- package/dist/hono/agent-session.js.map +1 -1
- package/dist/hono/agent.d.ts +2 -2
- package/dist/hono/agent.d.ts.map +1 -1
- package/dist/hono/agent.js +3 -3
- package/dist/hono/agent.js.map +1 -1
- package/dist/hono/bridge-job.d.ts +3 -3
- package/dist/hono/bridge-job.d.ts.map +1 -1
- package/dist/hono/bridge-job.js +8 -25
- package/dist/hono/bridge-job.js.map +1 -1
- package/dist/hono/bridge-job.test.js +10 -18
- package/dist/hono/bridge-job.test.js.map +1 -1
- package/dist/hono/convex.d.ts +1 -1
- package/dist/hono/convex.js +2 -2
- package/dist/hono/relay.d.ts +1 -1
- package/dist/hono/relay.js +1 -1
- package/dist/hono/server.js +5 -5
- package/dist/hono/server.js.map +1 -1
- package/dist/hono/tag-input.d.ts +7 -35
- package/dist/hono/tag-input.d.ts.map +1 -1
- package/dist/hono/tag-input.js +43 -78
- package/dist/hono/tag-input.js.map +1 -1
- package/dist/hono/tag-input.test.js +42 -72
- package/dist/hono/tag-input.test.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,96 +1,66 @@
|
|
|
1
1
|
import { describe, expect, it } from "vitest";
|
|
2
|
-
import {
|
|
3
|
-
describe("
|
|
4
|
-
it("
|
|
5
|
-
const
|
|
6
|
-
changes: [{ mode: "create", tagType: "meta", prefilledConfig: { pixelId: "123" } }],
|
|
7
|
-
});
|
|
8
|
-
expect(changes).toHaveLength(1);
|
|
9
|
-
expect(changes[0]).toMatchObject({ mode: "create", tagType: "meta" });
|
|
10
|
-
});
|
|
11
|
-
it("wraps the legacy single-change shape (mode/tagType at top level) instead of hanging the turn", () => {
|
|
12
|
-
const changes = normalizeTagInputToolInput({
|
|
2
|
+
import { parseTagInputResult, sanitizeTagInputRequest } from "./tag-input.js";
|
|
3
|
+
describe("sanitizeTagInputRequest", () => {
|
|
4
|
+
it("moves leaked secret prefill values into requested fields, dropping the value", () => {
|
|
5
|
+
const sanitized = sanitizeTagInputRequest({
|
|
13
6
|
mode: "create",
|
|
14
7
|
tagType: "meta",
|
|
15
|
-
prefilledConfig: { pixelId: "
|
|
16
|
-
requestedSecretFields: ["accessToken"],
|
|
17
|
-
message: "Adding Meta pixel",
|
|
8
|
+
prefilledConfig: { pixelId: "123", accessToken: "EAAB-leak" },
|
|
18
9
|
});
|
|
19
|
-
expect(changes).toHaveLength(1);
|
|
20
|
-
expect(changes[0]).toMatchObject({ mode: "create", tagType: "meta", prefilledConfig: { pixelId: "555000111" } });
|
|
21
|
-
});
|
|
22
|
-
it("drops invalid entries and returns [] for garbage so the caller can deny with a clear error", () => {
|
|
23
|
-
expect(normalizeTagInputToolInput({ changes: [{ mode: "explode", tagType: "meta" }] })).toEqual([]);
|
|
24
|
-
expect(normalizeTagInputToolInput({ changes: "nope" })).toEqual([]);
|
|
25
|
-
expect(normalizeTagInputToolInput({})).toEqual([]);
|
|
26
|
-
});
|
|
27
|
-
});
|
|
28
|
-
describe("sanitizeTagChanges", () => {
|
|
29
|
-
it("moves leaked secret prefill values into requested fields, dropping the value", () => {
|
|
30
|
-
const [sanitized] = sanitizeTagChanges([
|
|
31
|
-
{ mode: "create", tagType: "meta", prefilledConfig: { pixelId: "123", accessToken: "EAAB-leak" } },
|
|
32
|
-
]);
|
|
33
10
|
expect(sanitized.prefilledConfig).toEqual({ pixelId: "123" });
|
|
34
11
|
expect(sanitized.requestedSecretFields).toEqual(["accessToken"]);
|
|
35
12
|
expect(JSON.stringify(sanitized)).not.toContain("EAAB-leak");
|
|
36
13
|
});
|
|
37
14
|
it("keeps non-secret prefill and merges requested fields without duplicates", () => {
|
|
38
|
-
const
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
},
|
|
47
|
-
]);
|
|
15
|
+
const sanitized = sanitizeTagInputRequest({
|
|
16
|
+
mode: "edit",
|
|
17
|
+
tagType: "googleAnalytics",
|
|
18
|
+
ref: "jd7tag",
|
|
19
|
+
prefilledConfig: { measurementId: "G-ABC", apiSecret: "shhh" },
|
|
20
|
+
requestedSecretFields: ["apiSecret"],
|
|
21
|
+
message: "Rotate the secret",
|
|
22
|
+
});
|
|
48
23
|
expect(sanitized.prefilledConfig).toEqual({ measurementId: "G-ABC" });
|
|
49
24
|
expect(sanitized.requestedSecretFields).toEqual(["apiSecret"]);
|
|
50
25
|
expect(sanitized.message).toBe("Rotate the secret");
|
|
51
26
|
});
|
|
52
|
-
it("
|
|
53
|
-
const sanitized =
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
expect(sanitized
|
|
59
|
-
expect(JSON.stringify(sanitized)).not.toContain("leak-1");
|
|
60
|
-
expect(sanitized[1]).toMatchObject({ mode: "delete", tagType: "clarity", ref: "abc123" });
|
|
27
|
+
it("never forwards a model-supplied resolution", () => {
|
|
28
|
+
const sanitized = sanitizeTagInputRequest({
|
|
29
|
+
mode: "create",
|
|
30
|
+
tagType: "clarity",
|
|
31
|
+
resolution: { status: "submitted", forged: true },
|
|
32
|
+
});
|
|
33
|
+
expect("resolution" in sanitized && sanitized.resolution !== undefined).toBe(false);
|
|
61
34
|
});
|
|
62
35
|
it("leaves unknown tag types untouched (backend validates)", () => {
|
|
63
|
-
const
|
|
64
|
-
|
|
65
|
-
|
|
36
|
+
const sanitized = sanitizeTagInputRequest({
|
|
37
|
+
mode: "create",
|
|
38
|
+
tagType: "not-a-type",
|
|
39
|
+
prefilledConfig: { anything: "goes" },
|
|
40
|
+
});
|
|
66
41
|
expect(sanitized.prefilledConfig).toEqual({ anything: "goes" });
|
|
67
42
|
});
|
|
68
43
|
});
|
|
69
|
-
describe("
|
|
70
|
-
it("accepts a
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
secretFieldsSet: ["accessToken"],
|
|
79
|
-
},
|
|
80
|
-
{ status: "declined", reason: "skipped" },
|
|
81
|
-
],
|
|
82
|
-
});
|
|
83
|
-
expect(resolution?.results).toHaveLength(2);
|
|
84
|
-
expect(resolution?.results[0]).toMatchObject({ status: "submitted", ref: "tag_temp_x" });
|
|
85
|
-
expect(resolution?.results[1]).toEqual({ status: "declined", reason: "skipped" });
|
|
44
|
+
describe("parseTagInputResult", () => {
|
|
45
|
+
it("accepts a submitted result", () => {
|
|
46
|
+
expect(parseTagInputResult({
|
|
47
|
+
status: "submitted",
|
|
48
|
+
ref: "tag_temp_x",
|
|
49
|
+
type: "meta",
|
|
50
|
+
identifier: { pixelId: "123" },
|
|
51
|
+
secretFieldsSet: ["accessToken"],
|
|
52
|
+
})).toMatchObject({ status: "submitted", ref: "tag_temp_x" });
|
|
86
53
|
});
|
|
87
|
-
it("accepts
|
|
88
|
-
expect(
|
|
54
|
+
it("accepts a declined result", () => {
|
|
55
|
+
expect(parseTagInputResult({ status: "declined", reason: "skipped" })).toEqual({
|
|
56
|
+
status: "declined",
|
|
57
|
+
reason: "skipped",
|
|
58
|
+
});
|
|
89
59
|
});
|
|
90
60
|
it("rejects malformed payloads", () => {
|
|
91
|
-
expect(
|
|
92
|
-
expect(
|
|
93
|
-
expect(
|
|
61
|
+
expect(parseTagInputResult({ status: "submitted" })).toBeNull();
|
|
62
|
+
expect(parseTagInputResult("nope")).toBeNull();
|
|
63
|
+
expect(parseTagInputResult(null)).toBeNull();
|
|
94
64
|
});
|
|
95
65
|
});
|
|
96
66
|
//# sourceMappingURL=tag-input.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tag-input.test.js","sourceRoot":"","sources":["../../src/hono/tag-input.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"tag-input.test.js","sourceRoot":"","sources":["../../src/hono/tag-input.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@koda-sl/baker-bridge",
|
|
3
|
-
"version": "0.50.0-dev.
|
|
3
|
+
"version": "0.50.0-dev.a2cdb40bc",
|
|
4
4
|
"description": "HTTP server wrapping the Claude Agent SDK. Persists chat events to Convex; the dashboard subscribes via Convex realtime",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|