@xpert-ai/xpert-sdk 0.0.14 → 0.0.16

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.
Files changed (61) hide show
  1. package/dist/auth/types.d.ts +1 -0
  2. package/dist/client.d.ts +34 -0
  3. package/dist/client.js +210 -25
  4. package/dist/client.js.map +1 -1
  5. package/dist/client.mjs +210 -25
  6. package/dist/client.mjs.map +1 -1
  7. package/dist/index.d.ts +4 -0
  8. package/dist/index.js +2 -0
  9. package/dist/index.js.map +1 -1
  10. package/dist/index.mjs +2 -0
  11. package/dist/index.mjs.map +1 -1
  12. package/dist/mcp/apps.d.ts +11 -0
  13. package/dist/mcp/apps.js +49 -0
  14. package/dist/mcp/apps.js.map +1 -0
  15. package/dist/mcp/apps.mjs +49 -0
  16. package/dist/mcp/apps.mjs.map +1 -0
  17. package/dist/mcp/apps.test.d.ts +1 -0
  18. package/dist/mcp/apps.test.js +77 -0
  19. package/dist/mcp/apps.test.js.map +1 -0
  20. package/dist/mcp/apps.test.mjs +77 -0
  21. package/dist/mcp/apps.test.mjs.map +1 -0
  22. package/dist/mcp/index.d.ts +11 -0
  23. package/dist/mcp/index.js +13 -0
  24. package/dist/mcp/index.js.map +1 -0
  25. package/dist/mcp/index.mjs +13 -0
  26. package/dist/mcp/index.mjs.map +1 -0
  27. package/dist/mcp/publications.d.ts +27 -0
  28. package/dist/mcp/publications.js +101 -0
  29. package/dist/mcp/publications.js.map +1 -0
  30. package/dist/mcp/publications.mjs +101 -0
  31. package/dist/mcp/publications.mjs.map +1 -0
  32. package/dist/mcp/publications.test.d.ts +1 -0
  33. package/dist/mcp/publications.test.js +176 -0
  34. package/dist/mcp/publications.test.js.map +1 -0
  35. package/dist/mcp/publications.test.mjs +176 -0
  36. package/dist/mcp/publications.test.mjs.map +1 -0
  37. package/dist/mcp/transport.d.ts +10 -0
  38. package/dist/mcp/transport.js +2 -0
  39. package/dist/mcp/transport.js.map +1 -0
  40. package/dist/mcp/transport.mjs +2 -0
  41. package/dist/mcp/transport.mjs.map +1 -0
  42. package/dist/mcp/types.d.ts +326 -0
  43. package/dist/mcp/types.js +2 -0
  44. package/dist/mcp/types.js.map +1 -0
  45. package/dist/mcp/types.mjs +2 -0
  46. package/dist/mcp/types.mjs.map +1 -0
  47. package/dist/tests/fetch.test.js +16 -0
  48. package/dist/tests/fetch.test.js.map +1 -1
  49. package/dist/tests/fetch.test.mjs +16 -0
  50. package/dist/tests/fetch.test.mjs.map +1 -1
  51. package/dist/tests/view-hosts.test.d.ts +1 -0
  52. package/dist/tests/view-hosts.test.js +222 -0
  53. package/dist/tests/view-hosts.test.js.map +1 -0
  54. package/dist/tests/view-hosts.test.mjs +222 -0
  55. package/dist/tests/view-hosts.test.mjs.map +1 -0
  56. package/dist/view-extension.d.ts +428 -0
  57. package/dist/view-extension.js +10 -0
  58. package/dist/view-extension.js.map +1 -0
  59. package/dist/view-extension.mjs +10 -0
  60. package/dist/view-extension.mjs.map +1 -0
  61. package/package.json +5 -5
@@ -0,0 +1,222 @@
1
+ import { describe, expect, it, vi } from "vitest";
2
+ import { ASSISTANT_CHAT_SEND_MESSAGE_COMMAND, ASSISTANT_CITATION_OPEN_EVENT, ASSISTANT_CONTEXT_SET_COMMAND, Client, } from "../index.js";
3
+ function jsonResponse(value) {
4
+ return new Response(JSON.stringify(value), {
5
+ status: 200,
6
+ headers: { "content-type": "application/json" },
7
+ });
8
+ }
9
+ describe("ViewHostsClient", () => {
10
+ it("exports Remote View runtime constants and public contract types", () => {
11
+ const inputSchema = {
12
+ type: "object",
13
+ properties: {
14
+ approved: { type: "boolean" },
15
+ },
16
+ };
17
+ const manifest = {
18
+ key: "provider__view",
19
+ title: { en_US: "View" },
20
+ hostType: "agent",
21
+ slot: "agent.workbench.fixed",
22
+ source: { provider: "provider" },
23
+ view: { type: "raw_json" },
24
+ dataSource: { mode: "platform" },
25
+ actions: [
26
+ {
27
+ key: "approve",
28
+ label: { en_US: "Approve" },
29
+ actionType: "invoke",
30
+ inputSchema,
31
+ },
32
+ ],
33
+ };
34
+ expect(manifest.actions?.[0]?.inputSchema).toBe(inputSchema);
35
+ expect(ASSISTANT_CHAT_SEND_MESSAGE_COMMAND).toBe("assistant.chat.send_message");
36
+ expect(ASSISTANT_CONTEXT_SET_COMMAND).toBe("assistant.context.set");
37
+ expect(ASSISTANT_CITATION_OPEN_EVENT).toBe("assistant.citation.open");
38
+ });
39
+ it("loads slot manifests and an individual manifest", async () => {
40
+ const manifest = {
41
+ key: "provider__view",
42
+ title: { en_US: "View" },
43
+ hostType: "agent",
44
+ slot: "agent.workbench.fixed",
45
+ source: { provider: "provider" },
46
+ view: { type: "raw_json" },
47
+ dataSource: { mode: "platform" },
48
+ };
49
+ const fetchMock = vi
50
+ .fn()
51
+ .mockResolvedValueOnce(jsonResponse([manifest]))
52
+ .mockResolvedValueOnce(jsonResponse(manifest));
53
+ const client = new Client({
54
+ apiUrl: "https://xpert.example/api/ai",
55
+ callerOptions: { fetch: fetchMock },
56
+ });
57
+ await expect(client.viewHosts.listSlotViews("agent", "agent/1", "agent.workbench.fixed")).resolves.toEqual([manifest]);
58
+ await expect(client.viewHosts.getManifest("agent", "agent/1", "provider__view")).resolves.toEqual(manifest);
59
+ expect((fetchMock.mock.calls[0]?.[0]).pathname).toBe("/api/view-hosts/agent/agent%2F1/slots/agent.workbench.fixed/views");
60
+ expect((fetchMock.mock.calls[1]?.[0]).pathname).toBe("/api/view-hosts/agent/agent%2F1/views/provider__view/manifest");
61
+ });
62
+ it("derives service URLs, encodes path/query values, and preserves request hooks", async () => {
63
+ const signal = new AbortController().signal;
64
+ const fetchMock = vi.fn().mockResolvedValue(jsonResponse([]));
65
+ const onRequest = vi.fn((_url, init) => ({
66
+ ...init,
67
+ headers: { ...init.headers, "x-workspace": "workspace-1" },
68
+ }));
69
+ const client = new Client({
70
+ apiUrl: "https://xpert.example/api/ai/",
71
+ callerOptions: { fetch: fetchMock },
72
+ onRequest,
73
+ });
74
+ await client.viewHosts.getData("agent", "agent/1", "provider__view 1", {
75
+ page: 2,
76
+ pageSize: 25,
77
+ search: "quarterly report",
78
+ filters: [{ key: "status", operator: "eq", value: "ready" }],
79
+ parameters: { table: "documents", enabled: true },
80
+ }, { signal });
81
+ const [url, init] = fetchMock.mock.calls[0] ?? [];
82
+ expect(url).toBeInstanceOf(URL);
83
+ expect(url.origin).toBe("https://xpert.example");
84
+ expect(url.pathname).toBe("/api/view-hosts/agent/agent%2F1/views/provider__view%201/data");
85
+ expect(url.searchParams.get("page")).toBe("2");
86
+ expect(url.searchParams.get("pageSize")).toBe("25");
87
+ expect(url.searchParams.get("search")).toBe("quarterly report");
88
+ expect(JSON.parse(url.searchParams.get("filters") ?? "")).toEqual([
89
+ { key: "status", operator: "eq", value: "ready" },
90
+ ]);
91
+ expect(JSON.parse(url.searchParams.get("parameters") ?? "")).toEqual({
92
+ table: "documents",
93
+ enabled: true,
94
+ });
95
+ expect(init?.signal).toBe(signal);
96
+ expect(new Headers(init?.headers).get("x-workspace")).toBe("workspace-1");
97
+ expect(onRequest).toHaveBeenCalledOnce();
98
+ });
99
+ it("returns remote component entry HTML as text", async () => {
100
+ const fetchMock = vi
101
+ .fn()
102
+ .mockResolvedValue(new Response('<!doctype html><div id="root"></div>', { status: 200 }));
103
+ const client = new Client({
104
+ apiUrl: "https://xpert.example/api/ai",
105
+ callerOptions: { fetch: fetchMock },
106
+ });
107
+ await expect(client.viewHosts.getRemoteComponentEntry("agent", "agent-1", "view-1")).resolves.toContain('id="root"');
108
+ const [, init] = fetchMock.mock.calls[0] ?? [];
109
+ expect(new Headers(init?.headers).get("accept")).toBe("text/html");
110
+ });
111
+ it("serializes JSON actions and multipart file actions", async () => {
112
+ const fetchMock = vi
113
+ .fn()
114
+ .mockImplementation(async () => jsonResponse({ success: true }));
115
+ const client = new Client({
116
+ apiUrl: "https://xpert.example/api/ai",
117
+ callerOptions: { fetch: fetchMock },
118
+ });
119
+ await client.viewHosts.executeAction("agent", "agent-1", "view-1", "approve", {
120
+ targetId: "doc-1",
121
+ input: { approved: true },
122
+ parameters: { source: "review" },
123
+ });
124
+ await client.viewHosts.executeFileAction("agent", "agent-1", "view-1", "upload", {
125
+ file: new Uint8Array([1, 2, 3]),
126
+ fileName: "evidence.bin",
127
+ targetId: "doc-1",
128
+ input: { replace: true },
129
+ parameters: { source: "review" },
130
+ });
131
+ const [, jsonInit] = fetchMock.mock.calls[0] ?? [];
132
+ expect(jsonInit?.body).toBe(JSON.stringify({
133
+ targetId: "doc-1",
134
+ input: { approved: true },
135
+ parameters: { source: "review" },
136
+ }));
137
+ const [, fileInit] = fetchMock.mock.calls[1] ?? [];
138
+ expect(fileInit?.body).toBeInstanceOf(FormData);
139
+ const formData = fileInit?.body;
140
+ expect(formData.get("targetId")).toBe("doc-1");
141
+ expect(formData.get("input")).toBe(JSON.stringify({ replace: true }));
142
+ expect(formData.get("parameters")).toBe(JSON.stringify({ source: "review" }));
143
+ const file = formData.get("file");
144
+ expect(file).toBeInstanceOf(Blob);
145
+ expect(file.name).toBe("evidence.bin");
146
+ });
147
+ it("uses the workspace-files service and credentials for file sessions", async () => {
148
+ const fetchMock = vi
149
+ .fn()
150
+ .mockResolvedValueOnce(jsonResponse({
151
+ sessionId: "session/1",
152
+ expiresAt: "2030-01-01T00:00:00.000Z",
153
+ }))
154
+ .mockResolvedValueOnce(jsonResponse({
155
+ url: "/content/session-1/grant-1/report.pdf",
156
+ expiresAt: "2030-01-01T00:00:00.000Z",
157
+ fileName: "report.pdf",
158
+ mimeType: "application/pdf",
159
+ }))
160
+ .mockResolvedValueOnce(jsonResponse({ success: true }));
161
+ const client = new Client({
162
+ apiUrl: "https://xpert.example/api/ai",
163
+ callerOptions: { fetch: fetchMock },
164
+ });
165
+ await client.viewHosts.createFileAccessSession("agent", "agent-1", "view-1");
166
+ await client.viewHosts.createFileAccessGrant("session/1", {
167
+ fileKey: "report",
168
+ purpose: "preview",
169
+ });
170
+ await client.viewHosts.revokeFileAccessSession("session/1");
171
+ const [createUrl, createInit] = fetchMock.mock.calls[0] ?? [];
172
+ expect(createUrl.pathname).toBe("/api/workspace-files/view-sessions");
173
+ expect(createInit?.credentials).toBe("include");
174
+ const [grantUrl] = fetchMock.mock.calls[1] ?? [];
175
+ expect(grantUrl.pathname).toBe("/api/workspace-files/view-sessions/session%2F1/grants");
176
+ const [revokeUrl, revokeInit] = fetchMock.mock.calls[2] ?? [];
177
+ expect(revokeUrl.pathname).toBe("/api/workspace-files/view-sessions/session%2F1");
178
+ expect(revokeInit?.credentials).toBe("include");
179
+ expect(revokeInit?.method).toBe("DELETE");
180
+ });
181
+ it("reuses API key, authentication, and organization headers across both services", async () => {
182
+ const fetchMock = vi
183
+ .fn()
184
+ .mockResolvedValueOnce(jsonResponse([]))
185
+ .mockResolvedValueOnce(jsonResponse({
186
+ sessionId: "session-1",
187
+ expiresAt: "2030-01-01T00:00:00.000Z",
188
+ }));
189
+ const client = new Client({
190
+ apiUrl: "https://xpert.example/api/ai",
191
+ apiKey: "api-key-secret",
192
+ defaultHeaders: {
193
+ authorization: "Bearer secret",
194
+ "organization-id": "organization-1",
195
+ },
196
+ callerOptions: { fetch: fetchMock },
197
+ });
198
+ await client.viewHosts.listSlotViews("agent", "agent-1", "agent.workbench.fixed");
199
+ await client.viewHosts.createFileAccessSession("agent", "agent-1", "view-1");
200
+ for (const [, init] of fetchMock.mock.calls) {
201
+ const headers = new Headers(init?.headers);
202
+ expect(headers.get("authorization")).toBe("Bearer secret");
203
+ expect(headers.get("x-api-key")).toBe("api-key-secret");
204
+ expect(headers.get("organization-id")).toBe("organization-1");
205
+ }
206
+ });
207
+ it("converts remote entry HTTP errors through the shared caller", async () => {
208
+ const fetchMock = vi.fn().mockResolvedValue(new Response("remote entry unavailable", {
209
+ status: 503,
210
+ statusText: "Service Unavailable",
211
+ }));
212
+ const client = new Client({
213
+ apiUrl: "https://xpert.example/api/ai",
214
+ callerOptions: { fetch: fetchMock, maxRetries: 0 },
215
+ });
216
+ await expect(client.viewHosts.getRemoteComponentEntry("agent", "agent-1", "view-1")).rejects.toMatchObject({
217
+ status: 503,
218
+ message: expect.stringContaining("remote entry unavailable"),
219
+ });
220
+ });
221
+ });
222
+ //# sourceMappingURL=view-hosts.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view-hosts.test.js","sourceRoot":"","sources":["../../src/tests/view-hosts.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,222 @@
1
+ import { describe, expect, it, vi } from "vitest";
2
+ import { ASSISTANT_CHAT_SEND_MESSAGE_COMMAND, ASSISTANT_CITATION_OPEN_EVENT, ASSISTANT_CONTEXT_SET_COMMAND, Client, } from "../index.mjs";
3
+ function jsonResponse(value) {
4
+ return new Response(JSON.stringify(value), {
5
+ status: 200,
6
+ headers: { "content-type": "application/json" },
7
+ });
8
+ }
9
+ describe("ViewHostsClient", () => {
10
+ it("exports Remote View runtime constants and public contract types", () => {
11
+ const inputSchema = {
12
+ type: "object",
13
+ properties: {
14
+ approved: { type: "boolean" },
15
+ },
16
+ };
17
+ const manifest = {
18
+ key: "provider__view",
19
+ title: { en_US: "View" },
20
+ hostType: "agent",
21
+ slot: "agent.workbench.fixed",
22
+ source: { provider: "provider" },
23
+ view: { type: "raw_json" },
24
+ dataSource: { mode: "platform" },
25
+ actions: [
26
+ {
27
+ key: "approve",
28
+ label: { en_US: "Approve" },
29
+ actionType: "invoke",
30
+ inputSchema,
31
+ },
32
+ ],
33
+ };
34
+ expect(manifest.actions?.[0]?.inputSchema).toBe(inputSchema);
35
+ expect(ASSISTANT_CHAT_SEND_MESSAGE_COMMAND).toBe("assistant.chat.send_message");
36
+ expect(ASSISTANT_CONTEXT_SET_COMMAND).toBe("assistant.context.set");
37
+ expect(ASSISTANT_CITATION_OPEN_EVENT).toBe("assistant.citation.open");
38
+ });
39
+ it("loads slot manifests and an individual manifest", async () => {
40
+ const manifest = {
41
+ key: "provider__view",
42
+ title: { en_US: "View" },
43
+ hostType: "agent",
44
+ slot: "agent.workbench.fixed",
45
+ source: { provider: "provider" },
46
+ view: { type: "raw_json" },
47
+ dataSource: { mode: "platform" },
48
+ };
49
+ const fetchMock = vi
50
+ .fn()
51
+ .mockResolvedValueOnce(jsonResponse([manifest]))
52
+ .mockResolvedValueOnce(jsonResponse(manifest));
53
+ const client = new Client({
54
+ apiUrl: "https://xpert.example/api/ai",
55
+ callerOptions: { fetch: fetchMock },
56
+ });
57
+ await expect(client.viewHosts.listSlotViews("agent", "agent/1", "agent.workbench.fixed")).resolves.toEqual([manifest]);
58
+ await expect(client.viewHosts.getManifest("agent", "agent/1", "provider__view")).resolves.toEqual(manifest);
59
+ expect((fetchMock.mock.calls[0]?.[0]).pathname).toBe("/api/view-hosts/agent/agent%2F1/slots/agent.workbench.fixed/views");
60
+ expect((fetchMock.mock.calls[1]?.[0]).pathname).toBe("/api/view-hosts/agent/agent%2F1/views/provider__view/manifest");
61
+ });
62
+ it("derives service URLs, encodes path/query values, and preserves request hooks", async () => {
63
+ const signal = new AbortController().signal;
64
+ const fetchMock = vi.fn().mockResolvedValue(jsonResponse([]));
65
+ const onRequest = vi.fn((_url, init) => ({
66
+ ...init,
67
+ headers: { ...init.headers, "x-workspace": "workspace-1" },
68
+ }));
69
+ const client = new Client({
70
+ apiUrl: "https://xpert.example/api/ai/",
71
+ callerOptions: { fetch: fetchMock },
72
+ onRequest,
73
+ });
74
+ await client.viewHosts.getData("agent", "agent/1", "provider__view 1", {
75
+ page: 2,
76
+ pageSize: 25,
77
+ search: "quarterly report",
78
+ filters: [{ key: "status", operator: "eq", value: "ready" }],
79
+ parameters: { table: "documents", enabled: true },
80
+ }, { signal });
81
+ const [url, init] = fetchMock.mock.calls[0] ?? [];
82
+ expect(url).toBeInstanceOf(URL);
83
+ expect(url.origin).toBe("https://xpert.example");
84
+ expect(url.pathname).toBe("/api/view-hosts/agent/agent%2F1/views/provider__view%201/data");
85
+ expect(url.searchParams.get("page")).toBe("2");
86
+ expect(url.searchParams.get("pageSize")).toBe("25");
87
+ expect(url.searchParams.get("search")).toBe("quarterly report");
88
+ expect(JSON.parse(url.searchParams.get("filters") ?? "")).toEqual([
89
+ { key: "status", operator: "eq", value: "ready" },
90
+ ]);
91
+ expect(JSON.parse(url.searchParams.get("parameters") ?? "")).toEqual({
92
+ table: "documents",
93
+ enabled: true,
94
+ });
95
+ expect(init?.signal).toBe(signal);
96
+ expect(new Headers(init?.headers).get("x-workspace")).toBe("workspace-1");
97
+ expect(onRequest).toHaveBeenCalledOnce();
98
+ });
99
+ it("returns remote component entry HTML as text", async () => {
100
+ const fetchMock = vi
101
+ .fn()
102
+ .mockResolvedValue(new Response('<!doctype html><div id="root"></div>', { status: 200 }));
103
+ const client = new Client({
104
+ apiUrl: "https://xpert.example/api/ai",
105
+ callerOptions: { fetch: fetchMock },
106
+ });
107
+ await expect(client.viewHosts.getRemoteComponentEntry("agent", "agent-1", "view-1")).resolves.toContain('id="root"');
108
+ const [, init] = fetchMock.mock.calls[0] ?? [];
109
+ expect(new Headers(init?.headers).get("accept")).toBe("text/html");
110
+ });
111
+ it("serializes JSON actions and multipart file actions", async () => {
112
+ const fetchMock = vi
113
+ .fn()
114
+ .mockImplementation(async () => jsonResponse({ success: true }));
115
+ const client = new Client({
116
+ apiUrl: "https://xpert.example/api/ai",
117
+ callerOptions: { fetch: fetchMock },
118
+ });
119
+ await client.viewHosts.executeAction("agent", "agent-1", "view-1", "approve", {
120
+ targetId: "doc-1",
121
+ input: { approved: true },
122
+ parameters: { source: "review" },
123
+ });
124
+ await client.viewHosts.executeFileAction("agent", "agent-1", "view-1", "upload", {
125
+ file: new Uint8Array([1, 2, 3]),
126
+ fileName: "evidence.bin",
127
+ targetId: "doc-1",
128
+ input: { replace: true },
129
+ parameters: { source: "review" },
130
+ });
131
+ const [, jsonInit] = fetchMock.mock.calls[0] ?? [];
132
+ expect(jsonInit?.body).toBe(JSON.stringify({
133
+ targetId: "doc-1",
134
+ input: { approved: true },
135
+ parameters: { source: "review" },
136
+ }));
137
+ const [, fileInit] = fetchMock.mock.calls[1] ?? [];
138
+ expect(fileInit?.body).toBeInstanceOf(FormData);
139
+ const formData = fileInit?.body;
140
+ expect(formData.get("targetId")).toBe("doc-1");
141
+ expect(formData.get("input")).toBe(JSON.stringify({ replace: true }));
142
+ expect(formData.get("parameters")).toBe(JSON.stringify({ source: "review" }));
143
+ const file = formData.get("file");
144
+ expect(file).toBeInstanceOf(Blob);
145
+ expect(file.name).toBe("evidence.bin");
146
+ });
147
+ it("uses the workspace-files service and credentials for file sessions", async () => {
148
+ const fetchMock = vi
149
+ .fn()
150
+ .mockResolvedValueOnce(jsonResponse({
151
+ sessionId: "session/1",
152
+ expiresAt: "2030-01-01T00:00:00.000Z",
153
+ }))
154
+ .mockResolvedValueOnce(jsonResponse({
155
+ url: "/content/session-1/grant-1/report.pdf",
156
+ expiresAt: "2030-01-01T00:00:00.000Z",
157
+ fileName: "report.pdf",
158
+ mimeType: "application/pdf",
159
+ }))
160
+ .mockResolvedValueOnce(jsonResponse({ success: true }));
161
+ const client = new Client({
162
+ apiUrl: "https://xpert.example/api/ai",
163
+ callerOptions: { fetch: fetchMock },
164
+ });
165
+ await client.viewHosts.createFileAccessSession("agent", "agent-1", "view-1");
166
+ await client.viewHosts.createFileAccessGrant("session/1", {
167
+ fileKey: "report",
168
+ purpose: "preview",
169
+ });
170
+ await client.viewHosts.revokeFileAccessSession("session/1");
171
+ const [createUrl, createInit] = fetchMock.mock.calls[0] ?? [];
172
+ expect(createUrl.pathname).toBe("/api/workspace-files/view-sessions");
173
+ expect(createInit?.credentials).toBe("include");
174
+ const [grantUrl] = fetchMock.mock.calls[1] ?? [];
175
+ expect(grantUrl.pathname).toBe("/api/workspace-files/view-sessions/session%2F1/grants");
176
+ const [revokeUrl, revokeInit] = fetchMock.mock.calls[2] ?? [];
177
+ expect(revokeUrl.pathname).toBe("/api/workspace-files/view-sessions/session%2F1");
178
+ expect(revokeInit?.credentials).toBe("include");
179
+ expect(revokeInit?.method).toBe("DELETE");
180
+ });
181
+ it("reuses API key, authentication, and organization headers across both services", async () => {
182
+ const fetchMock = vi
183
+ .fn()
184
+ .mockResolvedValueOnce(jsonResponse([]))
185
+ .mockResolvedValueOnce(jsonResponse({
186
+ sessionId: "session-1",
187
+ expiresAt: "2030-01-01T00:00:00.000Z",
188
+ }));
189
+ const client = new Client({
190
+ apiUrl: "https://xpert.example/api/ai",
191
+ apiKey: "api-key-secret",
192
+ defaultHeaders: {
193
+ authorization: "Bearer secret",
194
+ "organization-id": "organization-1",
195
+ },
196
+ callerOptions: { fetch: fetchMock },
197
+ });
198
+ await client.viewHosts.listSlotViews("agent", "agent-1", "agent.workbench.fixed");
199
+ await client.viewHosts.createFileAccessSession("agent", "agent-1", "view-1");
200
+ for (const [, init] of fetchMock.mock.calls) {
201
+ const headers = new Headers(init?.headers);
202
+ expect(headers.get("authorization")).toBe("Bearer secret");
203
+ expect(headers.get("x-api-key")).toBe("api-key-secret");
204
+ expect(headers.get("organization-id")).toBe("organization-1");
205
+ }
206
+ });
207
+ it("converts remote entry HTTP errors through the shared caller", async () => {
208
+ const fetchMock = vi.fn().mockResolvedValue(new Response("remote entry unavailable", {
209
+ status: 503,
210
+ statusText: "Service Unavailable",
211
+ }));
212
+ const client = new Client({
213
+ apiUrl: "https://xpert.example/api/ai",
214
+ callerOptions: { fetch: fetchMock, maxRetries: 0 },
215
+ });
216
+ await expect(client.viewHosts.getRemoteComponentEntry("agent", "agent-1", "view-1")).rejects.toMatchObject({
217
+ status: 503,
218
+ message: expect.stringContaining("remote entry unavailable"),
219
+ });
220
+ });
221
+ });
222
+ //# sourceMappingURL=view-hosts.test.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view-hosts.test.mjs","sourceRoot":"","sources":["../../src/tests/view-hosts.test.ts"],"names":[],"mappings":"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"}