@stigmer/sdk 3.1.7 → 3.1.9
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/agentshare.d.ts +45 -0
- package/gen/agentshare.d.ts.map +1 -0
- package/gen/agentshare.js +142 -0
- package/gen/agentshare.js.map +1 -0
- package/gen/authorization-config.d.ts.map +1 -1
- package/gen/authorization-config.js +1 -0
- package/gen/authorization-config.js.map +1 -1
- package/gen/client.d.ts +4 -0
- package/gen/client.d.ts.map +1 -1
- package/gen/client.js +4 -0
- package/gen/client.js.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 +175 -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 +3 -0
- package/index.d.ts.map +1 -1
- package/index.js +5 -0
- package/index.js.map +1 -1
- package/package.json +2 -2
- package/sharing.d.ts +76 -0
- package/sharing.d.ts.map +1 -0
- package/sharing.js +117 -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/agentshare.ts +148 -0
- package/src/gen/authorization-config.ts +1 -0
- package/src/gen/client.ts +5 -0
- 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 +334 -0
- package/src/index.ts +25 -0
- package/src/sharing.ts +135 -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":"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"}
|
|
@@ -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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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { type ResourceRef } from "./types.js";
|
|
2
|
+
import { type Transport } from "@connectrpc/connect";
|
|
3
|
+
import { type AgentShare } from "@stigmer/protos/ai/stigmer/agentic/agentshare/v1/api_pb";
|
|
4
|
+
import { type RotateShareLinkInput, type GetAgentSharesByAgentRequest, type AgentShareList, type ListAgentSharesRequest, type GetSharedProfileRequest, type SharedAgentProfile } from "@stigmer/protos/ai/stigmer/agentic/agentshare/v1/io_pb";
|
|
5
|
+
import { AgentShareAudience } from "@stigmer/protos/ai/stigmer/agentic/agentshare/v1/spec_pb";
|
|
6
|
+
import { ApiResourceVisibility } from "@stigmer/protos/ai/stigmer/commons/apiresource/enum_pb";
|
|
7
|
+
/** Provides operations on agentshare resources. */
|
|
8
|
+
export declare class AgentShareClient {
|
|
9
|
+
private readonly command;
|
|
10
|
+
private readonly query;
|
|
11
|
+
constructor(transport: Transport);
|
|
12
|
+
apply(input: AgentShareInput): Promise<AgentShare>;
|
|
13
|
+
create(input: AgentShareInput): Promise<AgentShare>;
|
|
14
|
+
update(input: AgentShareInput): Promise<AgentShare>;
|
|
15
|
+
rotateShareLink(input: RotateShareLinkInput): Promise<AgentShare>;
|
|
16
|
+
delete(id: string): Promise<AgentShare>;
|
|
17
|
+
get(id: string): Promise<AgentShare>;
|
|
18
|
+
getByReference(ref: ResourceRef): Promise<AgentShare>;
|
|
19
|
+
getByAgent(input: GetAgentSharesByAgentRequest): Promise<AgentShareList>;
|
|
20
|
+
list(input: ListAgentSharesRequest): Promise<AgentShareList>;
|
|
21
|
+
getSharedProfile(input: GetSharedProfileRequest): Promise<SharedAgentProfile>;
|
|
22
|
+
getSharedProfileForMember(ref: ResourceRef): Promise<SharedAgentProfile>;
|
|
23
|
+
}
|
|
24
|
+
/** Input for creating/updating a AgentShare. */
|
|
25
|
+
export interface AgentShareInput {
|
|
26
|
+
name: string;
|
|
27
|
+
slug?: string;
|
|
28
|
+
org: string;
|
|
29
|
+
labels?: Record<string, string>;
|
|
30
|
+
visibility?: ApiResourceVisibility;
|
|
31
|
+
agentRef: ResourceRef;
|
|
32
|
+
enabled?: boolean;
|
|
33
|
+
audience?: AgentShareAudience;
|
|
34
|
+
allowedOrigins?: string[];
|
|
35
|
+
messages?: AgentShareMessagesInput;
|
|
36
|
+
environmentRefs?: ResourceRef[];
|
|
37
|
+
}
|
|
38
|
+
/** SDK input type for AgentShareMessages. */
|
|
39
|
+
export interface AgentShareMessagesInput {
|
|
40
|
+
rateLimited?: string;
|
|
41
|
+
unavailable?: string;
|
|
42
|
+
conversationEnded?: string;
|
|
43
|
+
}
|
|
44
|
+
export declare function buildAgentShareProto(input: AgentShareInput): AgentShare;
|
|
45
|
+
//# sourceMappingURL=agentshare.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agentshare.d.ts","sourceRoot":"","sources":["../../src/gen/agentshare.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,OAAO,EAA6B,KAAK,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChF,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,yDAAyD,CAAC;AAE5G,OAAO,EAAmM,KAAK,oBAAoB,EAAE,KAAK,4BAA4B,EAAE,KAAK,cAAc,EAAE,KAAK,sBAAsB,EAAE,KAAK,uBAAuB,EAAE,KAAK,kBAAkB,EAAE,MAAM,wDAAwD,CAAC;AAEhb,OAAO,EAAwB,kBAAkB,EAA4B,MAAM,0DAA0D,CAAC;AAE9I,OAAO,EAAE,qBAAqB,EAAE,MAAM,wDAAwD,CAAC;AAI/F,mDAAmD;AACnD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6C;IACrE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA2C;gBAErD,SAAS,EAAE,SAAS;IAK1B,KAAK,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC;IAMlD,MAAM,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC;IAMnD,MAAM,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC;IAMnD,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,UAAU,CAAC;IAMjE,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAMvC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAMpC,cAAc,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAMrD,UAAU,CAAC,KAAK,EAAE,4BAA4B,GAAG,OAAO,CAAC,cAAc,CAAC;IAMxE,IAAI,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,cAAc,CAAC;IAM5D,gBAAgB,CAAC,KAAK,EAAE,uBAAuB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAM7E,yBAAyB,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAK/E;AAED,gDAAgD;AAChD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,UAAU,CAAC,EAAE,qBAAqB,CAAC;IACnC,QAAQ,EAAE,WAAW,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,QAAQ,CAAC,EAAE,uBAAuB,CAAC;IACnC,eAAe,CAAC,EAAE,WAAW,EAAE,CAAC;CACjC;AAED,6CAA6C;AAC7C,MAAM,WAAW,uBAAuB;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAUD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,eAAe,GAAG,UAAU,CAuBvE"}
|