@stigmer/sdk 3.1.7 → 3.1.8
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/__tests__/errors.test.js +42 -0
- package/__tests__/errors.test.js.map +1 -1
- package/__tests__/guest-auth.test.d.ts +2 -0
- package/__tests__/guest-auth.test.d.ts.map +1 -0
- package/__tests__/guest-auth.test.js +223 -0
- package/__tests__/guest-auth.test.js.map +1 -0
- package/__tests__/sharing.test.d.ts +2 -0
- package/__tests__/sharing.test.d.ts.map +1 -0
- package/__tests__/sharing.test.js +106 -0
- package/__tests__/sharing.test.js.map +1 -0
- package/gen/agent.d.ts +20 -1
- package/gen/agent.d.ts.map +1 -1
- package/gen/agent.js +54 -1
- package/gen/agent.js.map +1 -1
- package/gen/client.d.ts +1 -1
- package/gen/client.d.ts.map +1 -1
- package/gen/environment.d.ts +2 -0
- package/gen/environment.d.ts.map +1 -1
- package/gen/environment.js +8 -0
- package/gen/environment.js.map +1 -1
- package/gen/platformclient.d.ts +2 -1
- package/gen/platformclient.d.ts.map +1 -1
- package/gen/platformclient.js +8 -0
- package/gen/platformclient.js.map +1 -1
- package/gen/session.d.ts +2 -2
- package/gen/session.d.ts.map +1 -1
- package/gen/session.js +2 -2
- package/gen/session.js.map +1 -1
- package/guest-auth.d.ts +172 -0
- package/guest-auth.d.ts.map +1 -0
- package/guest-auth.js +227 -0
- package/guest-auth.js.map +1 -0
- package/index.d.ts +2 -0
- package/index.d.ts.map +1 -1
- package/index.js +4 -0
- package/index.js.map +1 -1
- package/package.json +2 -2
- package/sharing.d.ts +75 -0
- package/sharing.d.ts.map +1 -0
- package/sharing.js +116 -0
- package/sharing.js.map +1 -0
- package/src/__tests__/errors.test.ts +56 -0
- package/src/__tests__/guest-auth.test.ts +287 -0
- package/src/__tests__/sharing.test.ts +159 -0
- package/src/gen/agent.ts +61 -2
- package/src/gen/client.ts +1 -1
- package/src/gen/environment.ts +7 -1
- package/src/gen/platformclient.ts +7 -1
- package/src/gen/session.ts +3 -3
- package/src/guest-auth.ts +331 -0
- package/src/index.ts +20 -0
- package/src/sharing.ts +134 -0
package/__tests__/errors.test.js
CHANGED
|
@@ -2,6 +2,48 @@ import { describe, it, expect } from "vitest";
|
|
|
2
2
|
import { ConnectError, Code } from "@connectrpc/connect";
|
|
3
3
|
import { StigmerError } from "../gen/errors";
|
|
4
4
|
import { classifyError, isRetryableError, isTransientStreamError, getUserMessage, annotateRpcError, getRpcMetadata, } from "../errors";
|
|
5
|
+
/**
|
|
6
|
+
* Guest launch-gate refusal contract (shared-agent abuse controls).
|
|
7
|
+
*
|
|
8
|
+
* The cloud backend resolves owner-customizable refusal copy server-side and
|
|
9
|
+
* carries it in the gRPC status description; the SDK must surface that copy
|
|
10
|
+
* VERBATIM through getUserMessage — no client-side mapping exists by design.
|
|
11
|
+
* These tests pin the two halves of that contract:
|
|
12
|
+
*
|
|
13
|
+
* 1. RESOURCE_EXHAUSTED / FAILED_PRECONDITION descriptions pass through
|
|
14
|
+
* getUserMessage untouched.
|
|
15
|
+
* 2. The platform-default copy (mirrors GuestLimitReason in the cloud
|
|
16
|
+
* backend) never collides with the sanitizer's rewrite patterns.
|
|
17
|
+
*/
|
|
18
|
+
describe("guest launch-gate refusal copy passthrough", () => {
|
|
19
|
+
// Mirrors GuestLimitReason default copy in the cloud stigmer-service.
|
|
20
|
+
// If those strings change, update here — this guardrail exists to catch a
|
|
21
|
+
// default that a sanitizer pattern would silently rewrite.
|
|
22
|
+
const platformDefaultCopy = [
|
|
23
|
+
"You\u2019re sending messages too quickly. Please wait a moment before sending another.",
|
|
24
|
+
"This agent is currently unavailable. Please check back later.",
|
|
25
|
+
"This conversation has ended. Please start a new conversation to continue.",
|
|
26
|
+
"This agent can\u2019t be embedded on this site.",
|
|
27
|
+
];
|
|
28
|
+
const refusalCodes = [
|
|
29
|
+
["ResourceExhausted (rate limit)", Code.ResourceExhausted],
|
|
30
|
+
["FailedPrecondition (fail-closed / bounds)", Code.FailedPrecondition],
|
|
31
|
+
["PermissionDenied (embed origin)", Code.PermissionDenied],
|
|
32
|
+
];
|
|
33
|
+
it.each(refusalCodes)("surfaces a %s status description verbatim", (_label, code) => {
|
|
34
|
+
for (const copy of platformDefaultCopy) {
|
|
35
|
+
expect(getUserMessage(new ConnectError(copy, code))).toBe(copy);
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
it("surfaces owner-customized copy verbatim", () => {
|
|
39
|
+
const ownerCopy = "Whoa, slow down! Try again in a minute or two.";
|
|
40
|
+
expect(getUserMessage(new ConnectError(ownerCopy, Code.ResourceExhausted))).toBe(ownerCopy);
|
|
41
|
+
});
|
|
42
|
+
it("classifies rate-limit refusals as retryable and bounds refusals as not", () => {
|
|
43
|
+
expect(isRetryableError(new ConnectError("copy", Code.ResourceExhausted))).toBe(true);
|
|
44
|
+
expect(isRetryableError(new ConnectError("copy", Code.FailedPrecondition))).toBe(false);
|
|
45
|
+
});
|
|
46
|
+
});
|
|
5
47
|
describe("classifyError", () => {
|
|
6
48
|
const stigmerMappings = [
|
|
7
49
|
["unauthenticated", "auth"],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.test.js","sourceRoot":"","sources":["../../src/__tests__/errors.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"errors.test.js","sourceRoot":"","sources":["../../src/__tests__/errors.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guest-auth.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/guest-auth.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
|
|
2
|
+
import { create } from "@bufbuild/protobuf";
|
|
3
|
+
import { MintGuestTokenResponseSchema } from "@stigmer/protos/ai/stigmer/iam/platformclient/v1/token_pb";
|
|
4
|
+
import { ConnectError, Code } from "@connectrpc/connect";
|
|
5
|
+
// Intercept the token client so no transport is exercised. The mock
|
|
6
|
+
// preserves the real module (create/Code/ConnectError) and only stubs
|
|
7
|
+
// createClient, which GuestAuth uses to build its RPC client.
|
|
8
|
+
const mintGuestToken = vi.fn();
|
|
9
|
+
vi.mock("@connectrpc/connect", async (importOriginal) => {
|
|
10
|
+
const actual = await importOriginal();
|
|
11
|
+
return {
|
|
12
|
+
...actual,
|
|
13
|
+
createClient: () => ({ mintGuestToken }),
|
|
14
|
+
};
|
|
15
|
+
});
|
|
16
|
+
import { createGuestAuth, GuestAuth } from "../guest-auth";
|
|
17
|
+
const CONFIG = {
|
|
18
|
+
baseUrl: "https://api.stigmer.ai",
|
|
19
|
+
org: "acme",
|
|
20
|
+
slug: "support-agent",
|
|
21
|
+
};
|
|
22
|
+
function createMemoryStorage() {
|
|
23
|
+
const store = new Map();
|
|
24
|
+
return {
|
|
25
|
+
store,
|
|
26
|
+
getItem: (key) => store.get(key) ?? null,
|
|
27
|
+
setItem: (key, value) => {
|
|
28
|
+
store.set(key, value);
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
function mintResponse(overrides) {
|
|
33
|
+
return create(MintGuestTokenResponseSchema, {
|
|
34
|
+
accessToken: overrides?.accessToken ?? "guest-jwt-1",
|
|
35
|
+
tokenType: "Bearer",
|
|
36
|
+
expiresIn: overrides?.expiresIn ?? 900,
|
|
37
|
+
guestCookieId: overrides?.guestCookieId ?? "cookie-abc",
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
beforeEach(() => {
|
|
41
|
+
mintGuestToken.mockReset();
|
|
42
|
+
vi.useFakeTimers();
|
|
43
|
+
});
|
|
44
|
+
afterEach(() => {
|
|
45
|
+
vi.useRealTimers();
|
|
46
|
+
});
|
|
47
|
+
describe("createGuestAuth", () => {
|
|
48
|
+
it("throws when baseUrl is missing", () => {
|
|
49
|
+
expect(() => createGuestAuth({ ...CONFIG, baseUrl: "" })).toThrow("baseUrl is required");
|
|
50
|
+
});
|
|
51
|
+
it("throws when org is missing", () => {
|
|
52
|
+
expect(() => createGuestAuth({ ...CONFIG, org: "" })).toThrow("org is required");
|
|
53
|
+
});
|
|
54
|
+
it("throws when slug is missing", () => {
|
|
55
|
+
expect(() => createGuestAuth({ ...CONFIG, slug: "" })).toThrow("slug is required");
|
|
56
|
+
});
|
|
57
|
+
it("returns a GuestAuth instance with valid config", () => {
|
|
58
|
+
expect(createGuestAuth(CONFIG)).toBeInstanceOf(GuestAuth);
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
describe("GuestAuth.getAccessToken", () => {
|
|
62
|
+
it("mints on first call and sends an empty guest id", async () => {
|
|
63
|
+
mintGuestToken.mockResolvedValue(mintResponse());
|
|
64
|
+
const auth = createGuestAuth({ ...CONFIG, storage: createMemoryStorage() });
|
|
65
|
+
const token = await auth.getAccessToken();
|
|
66
|
+
expect(token).toBe("guest-jwt-1");
|
|
67
|
+
expect(mintGuestToken).toHaveBeenCalledTimes(1);
|
|
68
|
+
expect(mintGuestToken.mock.calls[0][0]).toMatchObject({
|
|
69
|
+
org: "acme",
|
|
70
|
+
slug: "support-agent",
|
|
71
|
+
guestCookieId: "",
|
|
72
|
+
// No embedOrigin configured (the unframed hosted page): the field
|
|
73
|
+
// must stay empty so the server's absence-means-exempt rule applies.
|
|
74
|
+
embedOrigin: "",
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
it("passes the configured embedOrigin through to every mint", async () => {
|
|
78
|
+
mintGuestToken.mockResolvedValue(mintResponse());
|
|
79
|
+
const auth = createGuestAuth({
|
|
80
|
+
...CONFIG,
|
|
81
|
+
storage: createMemoryStorage(),
|
|
82
|
+
embedOrigin: "https://docs.example.com",
|
|
83
|
+
});
|
|
84
|
+
await auth.getAccessToken();
|
|
85
|
+
// Expire the cached token, forcing a re-mint — the origin must persist.
|
|
86
|
+
vi.advanceTimersByTime(900_000);
|
|
87
|
+
await auth.getAccessToken();
|
|
88
|
+
expect(mintGuestToken).toHaveBeenCalledTimes(2);
|
|
89
|
+
for (const call of mintGuestToken.mock.calls) {
|
|
90
|
+
expect(call[0]).toMatchObject({ embedOrigin: "https://docs.example.com" });
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
it("passes the configured linkToken through to every mint", async () => {
|
|
94
|
+
mintGuestToken.mockResolvedValue(mintResponse());
|
|
95
|
+
const auth = createGuestAuth({
|
|
96
|
+
...CONFIG,
|
|
97
|
+
storage: createMemoryStorage(),
|
|
98
|
+
linkToken: "tok123",
|
|
99
|
+
});
|
|
100
|
+
await auth.getAccessToken();
|
|
101
|
+
// Expire the cached token, forcing a re-mint — the token must persist
|
|
102
|
+
// so a locked link keeps working across silent re-mints.
|
|
103
|
+
vi.advanceTimersByTime(900_000);
|
|
104
|
+
await auth.getAccessToken();
|
|
105
|
+
expect(mintGuestToken).toHaveBeenCalledTimes(2);
|
|
106
|
+
for (const call of mintGuestToken.mock.calls) {
|
|
107
|
+
expect(call[0]).toMatchObject({ linkToken: "tok123" });
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
it("sends an empty linkToken when none is configured (plain link)", async () => {
|
|
111
|
+
mintGuestToken.mockResolvedValue(mintResponse());
|
|
112
|
+
const auth = createGuestAuth({ ...CONFIG, storage: createMemoryStorage() });
|
|
113
|
+
await auth.getAccessToken();
|
|
114
|
+
expect(mintGuestToken.mock.calls[0][0]).toMatchObject({ linkToken: "" });
|
|
115
|
+
});
|
|
116
|
+
it("rejects with permission-denied when the embed origin is refused", async () => {
|
|
117
|
+
mintGuestToken.mockRejectedValue(new ConnectError("This agent can\u2019t be embedded on this site.", Code.PermissionDenied));
|
|
118
|
+
const auth = createGuestAuth({
|
|
119
|
+
...CONFIG,
|
|
120
|
+
storage: createMemoryStorage(),
|
|
121
|
+
embedOrigin: "https://evil.example.com",
|
|
122
|
+
});
|
|
123
|
+
await expect(auth.getAccessToken()).rejects.toMatchObject({
|
|
124
|
+
code: "permission-denied",
|
|
125
|
+
});
|
|
126
|
+
});
|
|
127
|
+
it("persists the server-issued guest id and presents it on re-mint", async () => {
|
|
128
|
+
const storage = createMemoryStorage();
|
|
129
|
+
mintGuestToken.mockResolvedValue(mintResponse({ guestCookieId: "cookie-abc" }));
|
|
130
|
+
const auth = createGuestAuth({ ...CONFIG, storage });
|
|
131
|
+
await auth.getAccessToken();
|
|
132
|
+
expect(storage.store.get("stigmer:guest-id:acme")).toBe("cookie-abc");
|
|
133
|
+
expect(auth.guestCookieId).toBe("cookie-abc");
|
|
134
|
+
// Expire the cached token, forcing a second mint.
|
|
135
|
+
vi.advanceTimersByTime(900_000);
|
|
136
|
+
await auth.getAccessToken();
|
|
137
|
+
expect(mintGuestToken).toHaveBeenCalledTimes(2);
|
|
138
|
+
expect(mintGuestToken.mock.calls[1][0]).toMatchObject({
|
|
139
|
+
guestCookieId: "cookie-abc",
|
|
140
|
+
});
|
|
141
|
+
});
|
|
142
|
+
it("restores a persisted guest id from a prior visit", async () => {
|
|
143
|
+
const storage = createMemoryStorage();
|
|
144
|
+
storage.setItem("stigmer:guest-id:acme", "cookie-from-last-visit");
|
|
145
|
+
mintGuestToken.mockResolvedValue(mintResponse());
|
|
146
|
+
const auth = createGuestAuth({ ...CONFIG, storage });
|
|
147
|
+
await auth.getAccessToken();
|
|
148
|
+
expect(mintGuestToken.mock.calls[0][0]).toMatchObject({
|
|
149
|
+
guestCookieId: "cookie-from-last-visit",
|
|
150
|
+
});
|
|
151
|
+
});
|
|
152
|
+
it("returns the cached token while it is fresh", async () => {
|
|
153
|
+
mintGuestToken.mockResolvedValue(mintResponse());
|
|
154
|
+
const auth = createGuestAuth({ ...CONFIG, storage: createMemoryStorage() });
|
|
155
|
+
await auth.getAccessToken();
|
|
156
|
+
// 13 minutes into a 15-minute token: still beyond the 60s skew.
|
|
157
|
+
vi.advanceTimersByTime(13 * 60_000);
|
|
158
|
+
const token = await auth.getAccessToken();
|
|
159
|
+
expect(token).toBe("guest-jwt-1");
|
|
160
|
+
expect(mintGuestToken).toHaveBeenCalledTimes(1);
|
|
161
|
+
});
|
|
162
|
+
it("re-mints when the cached token is within the expiry skew", async () => {
|
|
163
|
+
mintGuestToken
|
|
164
|
+
.mockResolvedValueOnce(mintResponse({ accessToken: "guest-jwt-1" }))
|
|
165
|
+
.mockResolvedValueOnce(mintResponse({ accessToken: "guest-jwt-2" }));
|
|
166
|
+
const auth = createGuestAuth({ ...CONFIG, storage: createMemoryStorage() });
|
|
167
|
+
await auth.getAccessToken();
|
|
168
|
+
// 30 seconds of life left — inside the 60s skew window.
|
|
169
|
+
vi.advanceTimersByTime(900_000 - 30_000);
|
|
170
|
+
const token = await auth.getAccessToken();
|
|
171
|
+
expect(token).toBe("guest-jwt-2");
|
|
172
|
+
expect(mintGuestToken).toHaveBeenCalledTimes(2);
|
|
173
|
+
});
|
|
174
|
+
it("collapses concurrent callers into a single mint", async () => {
|
|
175
|
+
let release;
|
|
176
|
+
mintGuestToken.mockImplementation(() => new Promise((resolve) => { release = resolve; }));
|
|
177
|
+
const auth = createGuestAuth({ ...CONFIG, storage: createMemoryStorage() });
|
|
178
|
+
const first = auth.getAccessToken();
|
|
179
|
+
const second = auth.getAccessToken();
|
|
180
|
+
release(mintResponse());
|
|
181
|
+
await expect(first).resolves.toBe("guest-jwt-1");
|
|
182
|
+
await expect(second).resolves.toBe("guest-jwt-1");
|
|
183
|
+
expect(mintGuestToken).toHaveBeenCalledTimes(1);
|
|
184
|
+
});
|
|
185
|
+
it("rejects with a wrapped StigmerError when sharing is revoked", async () => {
|
|
186
|
+
mintGuestToken.mockRejectedValue(new ConnectError("agent not found", Code.NotFound));
|
|
187
|
+
const auth = createGuestAuth({ ...CONFIG, storage: createMemoryStorage() });
|
|
188
|
+
try {
|
|
189
|
+
await auth.getAccessToken();
|
|
190
|
+
expect.fail("should have thrown");
|
|
191
|
+
}
|
|
192
|
+
catch (e) {
|
|
193
|
+
expect(e).toHaveProperty("name", "StigmerError");
|
|
194
|
+
expect(e).toHaveProperty("code", "not-found");
|
|
195
|
+
}
|
|
196
|
+
});
|
|
197
|
+
it("recovers after a failed mint instead of caching the failure", async () => {
|
|
198
|
+
mintGuestToken
|
|
199
|
+
.mockRejectedValueOnce(new ConnectError("unavailable", Code.Unavailable))
|
|
200
|
+
.mockResolvedValueOnce(mintResponse());
|
|
201
|
+
const auth = createGuestAuth({ ...CONFIG, storage: createMemoryStorage() });
|
|
202
|
+
await expect(auth.getAccessToken()).rejects.toMatchObject({
|
|
203
|
+
code: "unavailable",
|
|
204
|
+
});
|
|
205
|
+
await expect(auth.getAccessToken()).resolves.toBe("guest-jwt-1");
|
|
206
|
+
expect(mintGuestToken).toHaveBeenCalledTimes(2);
|
|
207
|
+
});
|
|
208
|
+
it("still mints when storage throws", async () => {
|
|
209
|
+
const brokenStorage = {
|
|
210
|
+
getItem: () => {
|
|
211
|
+
throw new Error("storage disabled");
|
|
212
|
+
},
|
|
213
|
+
setItem: () => {
|
|
214
|
+
throw new Error("storage disabled");
|
|
215
|
+
},
|
|
216
|
+
};
|
|
217
|
+
mintGuestToken.mockResolvedValue(mintResponse());
|
|
218
|
+
const auth = createGuestAuth({ ...CONFIG, storage: brokenStorage });
|
|
219
|
+
await expect(auth.getAccessToken()).resolves.toBe("guest-jwt-1");
|
|
220
|
+
expect(auth.guestCookieId).toBeNull();
|
|
221
|
+
});
|
|
222
|
+
});
|
|
223
|
+
//# sourceMappingURL=guest-auth.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guest-auth.test.js","sourceRoot":"","sources":["../../src/__tests__/guest-auth.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,4BAA4B,EAAE,MAAM,2DAA2D,CAAC;AACzG,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAEzD,oEAAoE;AACpE,sEAAsE;AACtE,8DAA8D;AAC9D,MAAM,cAAc,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;AAC/B,EAAE,CAAC,IAAI,CAAC,qBAAqB,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE;IACtD,MAAM,MAAM,GAAG,MAAM,cAAc,EAAwC,CAAC;IAC5E,OAAO;QACL,GAAG,MAAM;QACT,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC;KACzC,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,OAAO,EAAE,eAAe,EAAE,SAAS,EAAuB,MAAM,eAAe,CAAC;AAEhF,MAAM,MAAM,GAAG;IACb,OAAO,EAAE,wBAAwB;IACjC,GAAG,EAAE,MAAM;IACX,IAAI,EAAE,eAAe;CACtB,CAAC;AAEF,SAAS,mBAAmB;IAC1B,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IACxC,OAAO;QACL,KAAK;QACL,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI;QACxC,OAAO,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;YACtB,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACxB,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,SAIrB;IACC,OAAO,MAAM,CAAC,4BAA4B,EAAE;QAC1C,WAAW,EAAE,SAAS,EAAE,WAAW,IAAI,aAAa;QACpD,SAAS,EAAE,QAAQ;QACnB,SAAS,EAAE,SAAS,EAAE,SAAS,IAAI,GAAG;QACtC,aAAa,EAAE,SAAS,EAAE,aAAa,IAAI,YAAY;KACxD,CAAC,CAAC;AACL,CAAC;AAED,UAAU,CAAC,GAAG,EAAE;IACd,cAAc,CAAC,SAAS,EAAE,CAAC;IAC3B,EAAE,CAAC,aAAa,EAAE,CAAC;AACrB,CAAC,CAAC,CAAC;AAEH,SAAS,CAAC,GAAG,EAAE;IACb,EAAE,CAAC,aAAa,EAAE,CAAC;AACrB,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,CAAC,GAAG,EAAE,CACV,eAAe,CAAC,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAC5C,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,MAAM,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAC3D,iBAAiB,CAClB,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAC5D,kBAAkB,CACnB,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;QAC/D,cAAc,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC,CAAC;QACjD,MAAM,IAAI,GAAG,eAAe,CAAC,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,mBAAmB,EAAE,EAAE,CAAC,CAAC;QAE5E,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAE1C,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAClC,MAAM,CAAC,cAAc,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAChD,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;YACpD,GAAG,EAAE,MAAM;YACX,IAAI,EAAE,eAAe;YACrB,aAAa,EAAE,EAAE;YACjB,kEAAkE;YAClE,qEAAqE;YACrE,WAAW,EAAE,EAAE;SAChB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;QACvE,cAAc,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC,CAAC;QACjD,MAAM,IAAI,GAAG,eAAe,CAAC;YAC3B,GAAG,MAAM;YACT,OAAO,EAAE,mBAAmB,EAAE;YAC9B,WAAW,EAAE,0BAA0B;SACxC,CAAC,CAAC;QAEH,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,wEAAwE;QACxE,EAAE,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAChC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAE5B,MAAM,CAAC,cAAc,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAChD,KAAK,MAAM,IAAI,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAC7C,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,WAAW,EAAE,0BAA0B,EAAE,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;QACrE,cAAc,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC,CAAC;QACjD,MAAM,IAAI,GAAG,eAAe,CAAC;YAC3B,GAAG,MAAM;YACT,OAAO,EAAE,mBAAmB,EAAE;YAC9B,SAAS,EAAE,QAAQ;SACpB,CAAC,CAAC;QAEH,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,sEAAsE;QACtE,yDAAyD;QACzD,EAAE,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAChC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAE5B,MAAM,CAAC,cAAc,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAChD,KAAK,MAAM,IAAI,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAC7C,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;QACzD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;QAC7E,cAAc,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC,CAAC;QACjD,MAAM,IAAI,GAAG,eAAe,CAAC,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,mBAAmB,EAAE,EAAE,CAAC,CAAC;QAE5E,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAE5B,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iEAAiE,EAAE,KAAK,IAAI,EAAE;QAC/E,cAAc,CAAC,iBAAiB,CAC9B,IAAI,YAAY,CACd,iDAAiD,EACjD,IAAI,CAAC,gBAAgB,CACtB,CACF,CAAC;QACF,MAAM,IAAI,GAAG,eAAe,CAAC;YAC3B,GAAG,MAAM;YACT,OAAO,EAAE,mBAAmB,EAAE;YAC9B,WAAW,EAAE,0BAA0B;SACxC,CAAC,CAAC;QAEH,MAAM,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;YACxD,IAAI,EAAE,mBAAmB;SAC1B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;QAC9E,MAAM,OAAO,GAAG,mBAAmB,EAAE,CAAC;QACtC,cAAc,CAAC,iBAAiB,CAAC,YAAY,CAAC,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC;QAChF,MAAM,IAAI,GAAG,eAAe,CAAC,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;QAErD,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACtE,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAE9C,kDAAkD;QAClD,EAAE,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAChC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAE5B,MAAM,CAAC,cAAc,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAChD,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;YACpD,aAAa,EAAE,YAAY;SAC5B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;QAChE,MAAM,OAAO,GAAG,mBAAmB,EAAE,CAAC;QACtC,OAAO,CAAC,OAAO,CAAC,uBAAuB,EAAE,wBAAwB,CAAC,CAAC;QACnE,cAAc,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC,CAAC;QACjD,MAAM,IAAI,GAAG,eAAe,CAAC,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;QAErD,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAE5B,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;YACpD,aAAa,EAAE,wBAAwB;SACxC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QAC1D,cAAc,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC,CAAC;QACjD,MAAM,IAAI,GAAG,eAAe,CAAC,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,mBAAmB,EAAE,EAAE,CAAC,CAAC;QAE5E,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,gEAAgE;QAChE,EAAE,CAAC,mBAAmB,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC;QACpC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAE1C,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAClC,MAAM,CAAC,cAAc,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;QACxE,cAAc;aACX,qBAAqB,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC,CAAC;aACnE,qBAAqB,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC;QACvE,MAAM,IAAI,GAAG,eAAe,CAAC,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,mBAAmB,EAAE,EAAE,CAAC,CAAC;QAE5E,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,wDAAwD;QACxD,EAAE,CAAC,mBAAmB,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC;QACzC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAE1C,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAClC,MAAM,CAAC,cAAc,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;QAC/D,IAAI,OAA0D,CAAC;QAC/D,cAAc,CAAC,kBAAkB,CAC/B,GAAG,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,GAAG,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CACvD,CAAC;QACF,MAAM,IAAI,GAAG,eAAe,CAAC,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,mBAAmB,EAAE,EAAE,CAAC,CAAC;QAE5E,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QACrC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;QAExB,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACjD,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAClD,MAAM,CAAC,cAAc,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;QAC3E,cAAc,CAAC,iBAAiB,CAC9B,IAAI,YAAY,CAAC,iBAAiB,EAAE,IAAI,CAAC,QAAQ,CAAC,CACnD,CAAC;QACF,MAAM,IAAI,GAAG,eAAe,CAAC,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,mBAAmB,EAAE,EAAE,CAAC,CAAC;QAE5E,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;YAC5B,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACpC,CAAC;QAAC,OAAO,CAAU,EAAE,CAAC;YACpB,MAAM,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;YACjD,MAAM,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAChD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;QAC3E,cAAc;aACX,qBAAqB,CAAC,IAAI,YAAY,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;aACxE,qBAAqB,CAAC,YAAY,EAAE,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,eAAe,CAAC,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,mBAAmB,EAAE,EAAE,CAAC,CAAC;QAE5E,MAAM,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;YACxD,IAAI,EAAE,aAAa;SACpB,CAAC,CAAC;QACH,MAAM,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACjE,MAAM,CAAC,cAAc,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;QAC/C,MAAM,aAAa,GAAmB;YACpC,OAAO,EAAE,GAAG,EAAE;gBACZ,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;YACtC,CAAC;YACD,OAAO,EAAE,GAAG,EAAE;gBACZ,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;YACtC,CAAC;SACF,CAAC;QACF,cAAc,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC,CAAC;QACjD,MAAM,IAAI,GAAG,eAAe,CAAC,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC;QAEpE,MAAM,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACjE,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,QAAQ,EAAE,CAAC;IACxC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sharing.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/sharing.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
// Unit tests for the framework-free agent-sharing helpers: origin
|
|
2
|
+
// validation (mirror of the proto CEL rule) and the hosted-link / embed
|
|
3
|
+
// snippet builders shared by the web console, desktop app, and CLI.
|
|
4
|
+
import { describe, expect, it } from "vitest";
|
|
5
|
+
import { LINK_TOKEN_PARAM, MAX_ALLOWED_ORIGINS, appendLinkToken, buildChatUrl, buildEmbedLoaderUrl, buildEmbedSnippet, chatPath, validateOrigin, } from "../sharing";
|
|
6
|
+
describe("validateOrigin", () => {
|
|
7
|
+
it("accepts exact web origins", () => {
|
|
8
|
+
expect(validateOrigin("https://example.com")).toBeNull();
|
|
9
|
+
expect(validateOrigin("http://example.com")).toBeNull();
|
|
10
|
+
expect(validateOrigin("https://sub.example.com")).toBeNull();
|
|
11
|
+
expect(validateOrigin("https://example.com:8443")).toBeNull();
|
|
12
|
+
expect(validateOrigin("http://localhost:3000")).toBeNull();
|
|
13
|
+
});
|
|
14
|
+
it("trims surrounding whitespace before validating", () => {
|
|
15
|
+
expect(validateOrigin(" https://example.com ")).toBeNull();
|
|
16
|
+
});
|
|
17
|
+
it("rejects empty input with guidance", () => {
|
|
18
|
+
expect(validateOrigin("")).toMatch(/Enter an origin/);
|
|
19
|
+
expect(validateOrigin(" ")).toMatch(/Enter an origin/);
|
|
20
|
+
});
|
|
21
|
+
it("rejects trailing slashes, paths, queries, and fragments", () => {
|
|
22
|
+
for (const bad of [
|
|
23
|
+
"https://example.com/",
|
|
24
|
+
"https://example.com/path",
|
|
25
|
+
"https://example.com?q=1",
|
|
26
|
+
"https://example.com#top",
|
|
27
|
+
]) {
|
|
28
|
+
expect(validateOrigin(bad)).toMatch(/exact web origin/);
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
it("rejects non-http(s) schemes and bare hosts", () => {
|
|
32
|
+
expect(validateOrigin("ftp://example.com")).toMatch(/exact web origin/);
|
|
33
|
+
expect(validateOrigin("example.com")).toMatch(/exact web origin/);
|
|
34
|
+
});
|
|
35
|
+
it("rejects hostname labels with leading/trailing hyphens", () => {
|
|
36
|
+
expect(validateOrigin("https://-bad.example.com")).toMatch(/exact web origin/);
|
|
37
|
+
expect(validateOrigin("https://bad-.example.com")).toMatch(/exact web origin/);
|
|
38
|
+
});
|
|
39
|
+
it("exposes the proto max_items bound", () => {
|
|
40
|
+
expect(MAX_ALLOWED_ORIGINS).toBe(32);
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
describe("chatPath / buildChatUrl", () => {
|
|
44
|
+
it("builds the canonical /chat/<org>/<slug> path", () => {
|
|
45
|
+
expect(chatPath("acme", "support-agent")).toBe("/chat/acme/support-agent");
|
|
46
|
+
});
|
|
47
|
+
it("builds the absolute hosted chat URL", () => {
|
|
48
|
+
expect(buildChatUrl("https://app.stigmer.ai", "acme", "support-agent")).toBe("https://app.stigmer.ai/chat/acme/support-agent");
|
|
49
|
+
});
|
|
50
|
+
it("tolerates a trailing slash on the origin", () => {
|
|
51
|
+
expect(buildChatUrl("https://app.stigmer.ai/", "acme", "support-agent")).toBe("https://app.stigmer.ai/chat/acme/support-agent");
|
|
52
|
+
});
|
|
53
|
+
it("works with localhost origins (local backend)", () => {
|
|
54
|
+
expect(buildChatUrl("http://localhost:8234", "stigmer", "helper")).toBe("http://localhost:8234/chat/stigmer/helper");
|
|
55
|
+
});
|
|
56
|
+
it("appends ?k= when the share link is locked with a token", () => {
|
|
57
|
+
expect(chatPath("acme", "support-agent", "tok123")).toBe("/chat/acme/support-agent?k=tok123");
|
|
58
|
+
expect(buildChatUrl("https://app.stigmer.ai", "acme", "support-agent", "tok123")).toBe("https://app.stigmer.ai/chat/acme/support-agent?k=tok123");
|
|
59
|
+
});
|
|
60
|
+
it("url-encodes the token (defense in depth; generated tokens are url-safe)", () => {
|
|
61
|
+
expect(chatPath("acme", "bot", "a+b/c")).toBe("/chat/acme/bot?k=a%2Bb%2Fc");
|
|
62
|
+
});
|
|
63
|
+
it("omits ?k= for an empty/undefined token (plain link)", () => {
|
|
64
|
+
expect(chatPath("acme", "bot", "")).toBe("/chat/acme/bot");
|
|
65
|
+
expect(chatPath("acme", "bot", undefined)).toBe("/chat/acme/bot");
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
describe("appendLinkToken", () => {
|
|
69
|
+
it("appends the identical ?k= shape chatPath emits", () => {
|
|
70
|
+
expect(appendLinkToken("https://app.stigmer.ai/chat/acme/bot", "tok123")).toBe(buildChatUrl("https://app.stigmer.ai", "acme", "bot", "tok123"));
|
|
71
|
+
});
|
|
72
|
+
it("uses & when the URL already carries a query", () => {
|
|
73
|
+
expect(appendLinkToken("/chat/acme/bot?theme=dark", "tok123")).toBe(`/chat/acme/bot?theme=dark&${LINK_TOKEN_PARAM}=tok123`);
|
|
74
|
+
});
|
|
75
|
+
it("returns the URL unchanged for a null/empty token", () => {
|
|
76
|
+
expect(appendLinkToken("/chat/acme/bot", null)).toBe("/chat/acme/bot");
|
|
77
|
+
expect(appendLinkToken("/chat/acme/bot", undefined)).toBe("/chat/acme/bot");
|
|
78
|
+
expect(appendLinkToken("/chat/acme/bot", "")).toBe("/chat/acme/bot");
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
describe("buildEmbedLoaderUrl", () => {
|
|
82
|
+
it("points at embed.js on the app origin root", () => {
|
|
83
|
+
expect(buildEmbedLoaderUrl("https://app.stigmer.ai")).toBe("https://app.stigmer.ai/embed.js");
|
|
84
|
+
});
|
|
85
|
+
it("tolerates a trailing slash on the origin", () => {
|
|
86
|
+
expect(buildEmbedLoaderUrl("https://app.stigmer.ai/")).toBe("https://app.stigmer.ai/embed.js");
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
describe("buildEmbedSnippet", () => {
|
|
90
|
+
it("emits exactly the two-line loader + element snippet", () => {
|
|
91
|
+
expect(buildEmbedSnippet("https://app.stigmer.ai", "acme", "support-agent")).toBe([
|
|
92
|
+
`<script src="https://app.stigmer.ai/embed.js" async></script>`,
|
|
93
|
+
`<stigmer-agent org="acme" agent="support-agent"></stigmer-agent>`,
|
|
94
|
+
].join("\n"));
|
|
95
|
+
});
|
|
96
|
+
it("adds the token attribute when the share link is locked", () => {
|
|
97
|
+
expect(buildEmbedSnippet("https://app.stigmer.ai", "acme", "support-agent", "tok123")).toBe([
|
|
98
|
+
`<script src="https://app.stigmer.ai/embed.js" async></script>`,
|
|
99
|
+
`<stigmer-agent org="acme" agent="support-agent" token="tok123"></stigmer-agent>`,
|
|
100
|
+
].join("\n"));
|
|
101
|
+
});
|
|
102
|
+
it("omits the token attribute for an empty token (plain link)", () => {
|
|
103
|
+
expect(buildEmbedSnippet("https://app.stigmer.ai", "acme", "bot", "")).toBe(buildEmbedSnippet("https://app.stigmer.ai", "acme", "bot"));
|
|
104
|
+
});
|
|
105
|
+
});
|
|
106
|
+
//# sourceMappingURL=sharing.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sharing.test.js","sourceRoot":"","sources":["../../src/__tests__/sharing.test.ts"],"names":[],"mappings":"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"}
|
package/gen/agent.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { type ListParams, type ListResult, type ResourceRef } from "./types.js";
|
|
2
2
|
import { type Transport } from "@connectrpc/connect";
|
|
3
3
|
import { type Agent } from "@stigmer/protos/ai/stigmer/agentic/agent/v1/api_pb";
|
|
4
|
-
import { type GetDefaultAgentRequest } from "@stigmer/protos/ai/stigmer/agentic/agent/v1/io_pb";
|
|
4
|
+
import { type UpdateAgentSharingInput, type RotateShareLinkInput, type GetDefaultAgentRequest, type GetSharedProfileRequest, type SharedAgentProfile } from "@stigmer/protos/ai/stigmer/agentic/agent/v1/io_pb";
|
|
5
|
+
import { AgentSharingAudience } from "@stigmer/protos/ai/stigmer/agentic/agent/v1/spec_pb";
|
|
5
6
|
import { ApiResourceVisibility } from "@stigmer/protos/ai/stigmer/commons/apiresource/enum_pb";
|
|
6
7
|
import { type UpdateVisibilityInput } from "@stigmer/protos/ai/stigmer/commons/apiresource/io_pb";
|
|
7
8
|
/** Provides operations on agent resources. */
|
|
@@ -14,10 +15,14 @@ export declare class AgentClient {
|
|
|
14
15
|
create(input: AgentInput): Promise<Agent>;
|
|
15
16
|
update(input: AgentInput): Promise<Agent>;
|
|
16
17
|
updateVisibility(input: UpdateVisibilityInput): Promise<Agent>;
|
|
18
|
+
updateSharing(input: UpdateAgentSharingInput): Promise<Agent>;
|
|
19
|
+
rotateShareLink(input: RotateShareLinkInput): Promise<Agent>;
|
|
17
20
|
delete(id: string): Promise<Agent>;
|
|
18
21
|
get(id: string): Promise<Agent>;
|
|
19
22
|
getByReference(ref: ResourceRef): Promise<Agent>;
|
|
20
23
|
getDefault(input: GetDefaultAgentRequest): Promise<Agent>;
|
|
24
|
+
getSharedProfile(input: GetSharedProfileRequest): Promise<SharedAgentProfile>;
|
|
25
|
+
getSharedProfileForMember(ref: ResourceRef): Promise<SharedAgentProfile>;
|
|
21
26
|
list(params: ListParams): Promise<ListResult>;
|
|
22
27
|
}
|
|
23
28
|
/** Input for creating/updating a Agent. */
|
|
@@ -34,6 +39,7 @@ export interface AgentInput {
|
|
|
34
39
|
skillRefs?: ResourceRef[];
|
|
35
40
|
subAgents?: SubAgentInput[];
|
|
36
41
|
env?: Record<string, EnvVarDeclarationInput>;
|
|
42
|
+
sharing?: AgentSharingInput;
|
|
37
43
|
}
|
|
38
44
|
/** SDK input type for McpServerUsage. */
|
|
39
45
|
export interface McpServerUsageInput {
|
|
@@ -67,5 +73,18 @@ export interface EnvVarDeclarationInput {
|
|
|
67
73
|
description?: string;
|
|
68
74
|
optional?: boolean;
|
|
69
75
|
}
|
|
76
|
+
/** SDK input type for AgentSharing. */
|
|
77
|
+
export interface AgentSharingInput {
|
|
78
|
+
enabled?: boolean;
|
|
79
|
+
allowedOrigins?: string[];
|
|
80
|
+
messages?: AgentSharingMessagesInput;
|
|
81
|
+
audience?: AgentSharingAudience;
|
|
82
|
+
}
|
|
83
|
+
/** SDK input type for AgentSharingMessages. */
|
|
84
|
+
export interface AgentSharingMessagesInput {
|
|
85
|
+
rateLimited?: string;
|
|
86
|
+
unavailable?: string;
|
|
87
|
+
conversationEnded?: string;
|
|
88
|
+
}
|
|
70
89
|
export declare function buildAgentProto(input: AgentInput): Agent;
|
|
71
90
|
//# sourceMappingURL=agent.d.ts.map
|
package/gen/agent.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/gen/agent.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,UAAU,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAEhF,OAAO,EAA6B,KAAK,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChF,OAAO,EAAe,KAAK,KAAK,EAAE,MAAM,oDAAoD,CAAC;AAE7F,OAAO,
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/gen/agent.ts"],"names":[],"mappings":"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"}
|
package/gen/agent.js
CHANGED
|
@@ -7,7 +7,7 @@ import { AgentSchema } from "@stigmer/protos/ai/stigmer/agentic/agent/v1/api_pb"
|
|
|
7
7
|
import { AgentCommandController } from "@stigmer/protos/ai/stigmer/agentic/agent/v1/command_pb";
|
|
8
8
|
import { AgentIdSchema } from "@stigmer/protos/ai/stigmer/agentic/agent/v1/io_pb";
|
|
9
9
|
import { AgentQueryController } from "@stigmer/protos/ai/stigmer/agentic/agent/v1/query_pb";
|
|
10
|
-
import { AgentSpecSchema, ToolApprovalOverrideSchema, McpServerUsageSchema, McpAccessSchema, SubAgentSchema } from "@stigmer/protos/ai/stigmer/agentic/agent/v1/spec_pb";
|
|
10
|
+
import { AgentSpecSchema, ToolApprovalOverrideSchema, McpServerUsageSchema, McpAccessSchema, SubAgentSchema, AgentSharingMessagesSchema, AgentSharingSchema } from "@stigmer/protos/ai/stigmer/agentic/agent/v1/spec_pb";
|
|
11
11
|
import { EnvVarDeclarationSchema } from "@stigmer/protos/ai/stigmer/agentic/environment/v1/spec_pb";
|
|
12
12
|
import { ApiResourceKind } from "@stigmer/protos/ai/stigmer/commons/apiresource/apiresourcekind/api_resource_kind_pb";
|
|
13
13
|
import { ApiResourceReferenceSchema } from "@stigmer/protos/ai/stigmer/commons/apiresource/io_pb";
|
|
@@ -57,6 +57,22 @@ export class AgentClient {
|
|
|
57
57
|
throw wrapError(e);
|
|
58
58
|
}
|
|
59
59
|
}
|
|
60
|
+
async updateSharing(input) {
|
|
61
|
+
try {
|
|
62
|
+
return await this.command.updateSharing(input);
|
|
63
|
+
}
|
|
64
|
+
catch (e) {
|
|
65
|
+
throw wrapError(e);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
async rotateShareLink(input) {
|
|
69
|
+
try {
|
|
70
|
+
return await this.command.rotateShareLink(input);
|
|
71
|
+
}
|
|
72
|
+
catch (e) {
|
|
73
|
+
throw wrapError(e);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
60
76
|
async delete(id) {
|
|
61
77
|
try {
|
|
62
78
|
return await this.command.delete(create(AgentIdSchema, { value: id }));
|
|
@@ -89,6 +105,22 @@ export class AgentClient {
|
|
|
89
105
|
throw wrapError(e);
|
|
90
106
|
}
|
|
91
107
|
}
|
|
108
|
+
async getSharedProfile(input) {
|
|
109
|
+
try {
|
|
110
|
+
return await this.query.getSharedProfile(input);
|
|
111
|
+
}
|
|
112
|
+
catch (e) {
|
|
113
|
+
throw wrapError(e);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
async getSharedProfileForMember(ref) {
|
|
117
|
+
try {
|
|
118
|
+
return await this.query.getSharedProfileForMember(create(ApiResourceReferenceSchema, { ...ref, kind: ApiResourceKind.agent }));
|
|
119
|
+
}
|
|
120
|
+
catch (e) {
|
|
121
|
+
throw wrapError(e);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
92
124
|
async list(params) {
|
|
93
125
|
try {
|
|
94
126
|
const resp = await this.search.search(create(SearchRequestSchema, {
|
|
@@ -156,6 +188,25 @@ function buildEnvVarDeclarationProto(input) {
|
|
|
156
188
|
optional: input.optional,
|
|
157
189
|
}));
|
|
158
190
|
}
|
|
191
|
+
function buildAgentSharingMessagesProto(input) {
|
|
192
|
+
return Object.assign(create(AgentSharingMessagesSchema), stripUndefined({
|
|
193
|
+
rateLimited: input.rateLimited,
|
|
194
|
+
unavailable: input.unavailable,
|
|
195
|
+
conversationEnded: input.conversationEnded,
|
|
196
|
+
}));
|
|
197
|
+
}
|
|
198
|
+
function buildAgentSharingProto(input) {
|
|
199
|
+
const msg = create(AgentSharingSchema);
|
|
200
|
+
if (input.enabled !== undefined)
|
|
201
|
+
msg.enabled = input.enabled;
|
|
202
|
+
if (input.allowedOrigins)
|
|
203
|
+
msg.allowedOrigins = input.allowedOrigins;
|
|
204
|
+
if (input.messages)
|
|
205
|
+
msg.messages = buildAgentSharingMessagesProto(input.messages);
|
|
206
|
+
if (input.audience !== undefined)
|
|
207
|
+
msg.audience = input.audience;
|
|
208
|
+
return msg;
|
|
209
|
+
}
|
|
159
210
|
export function buildAgentProto(input) {
|
|
160
211
|
const mcpServerUsages = input.mcpServerUsages?.map(buildMcpServerUsageProto);
|
|
161
212
|
const skillRefs = input.skillRefs?.map(r => create(ApiResourceReferenceSchema, { ...r, kind: 43 }));
|
|
@@ -164,6 +215,7 @@ export function buildAgentProto(input) {
|
|
|
164
215
|
if (input.env) {
|
|
165
216
|
env = Object.fromEntries(Object.entries(input.env).map(([k, v]) => [k, buildEnvVarDeclarationProto(v)]));
|
|
166
217
|
}
|
|
218
|
+
const sharing = input.sharing ? buildAgentSharingProto(input.sharing) : undefined;
|
|
167
219
|
return Object.assign(create(AgentSchema), {
|
|
168
220
|
apiVersion: "agentic.stigmer.ai/v1",
|
|
169
221
|
kind: "Agent",
|
|
@@ -182,6 +234,7 @@ export function buildAgentProto(input) {
|
|
|
182
234
|
skillRefs,
|
|
183
235
|
subAgents,
|
|
184
236
|
env,
|
|
237
|
+
sharing,
|
|
185
238
|
})),
|
|
186
239
|
});
|
|
187
240
|
}
|