memax-sdk 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client.d.ts +2 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +8 -1
- package/dist/client.js.map +1 -1
- package/dist/errors.d.ts +129 -2
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +177 -3
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/resources/bar.d.ts +18 -0
- package/dist/resources/bar.d.ts.map +1 -0
- package/dist/resources/bar.js +19 -0
- package/dist/resources/bar.js.map +1 -0
- package/dist/resources/dreams.d.ts +16 -2
- package/dist/resources/dreams.d.ts.map +1 -1
- package/dist/resources/dreams.js +23 -5
- package/dist/resources/dreams.js.map +1 -1
- package/dist/resources/memories.d.ts +9 -4
- package/dist/resources/memories.d.ts.map +1 -1
- package/dist/resources/memories.js +10 -5
- package/dist/resources/memories.js.map +1 -1
- package/dist/transport.d.ts +1 -1
- package/dist/transport.d.ts.map +1 -1
- package/dist/transport.js +34 -3
- package/dist/transport.js.map +1 -1
- package/dist/types.d.ts +139 -5
- package/dist/types.d.ts.map +1 -1
- package/package.json +3 -2
- package/dist/client.test.d.ts +0 -2
- package/dist/client.test.d.ts.map +0 -1
- package/dist/client.test.js +0 -290
- package/dist/client.test.js.map +0 -1
- package/dist/transport.test.d.ts +0 -2
- package/dist/transport.test.d.ts.map +0 -1
- package/dist/transport.test.js +0 -95
- package/dist/transport.test.js.map +0 -1
package/dist/client.test.js
DELETED
|
@@ -1,290 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from "vitest";
|
|
2
|
-
import { Memax } from "./client.js";
|
|
3
|
-
describe("Memax client resources", () => {
|
|
4
|
-
it("exposes shared API resources", () => {
|
|
5
|
-
const client = new Memax({
|
|
6
|
-
apiUrl: "https://api.memax.test",
|
|
7
|
-
fetch: async () => new Response(JSON.stringify({ data: {} }), {
|
|
8
|
-
status: 200,
|
|
9
|
-
headers: { "Content-Type": "application/json" },
|
|
10
|
-
}),
|
|
11
|
-
});
|
|
12
|
-
expect(client.memories).toBeDefined();
|
|
13
|
-
expect(client.configs).toBeDefined();
|
|
14
|
-
expect(client.agentSessions).toBeDefined();
|
|
15
|
-
expect(client.uploads).toBeDefined();
|
|
16
|
-
expect(client.account).toBeDefined();
|
|
17
|
-
expect(client.dreams).toBeDefined();
|
|
18
|
-
expect(client.notifications).toBeDefined();
|
|
19
|
-
expect(client.agents).toBeDefined();
|
|
20
|
-
expect(client.invites).toBeDefined();
|
|
21
|
-
});
|
|
22
|
-
it("builds provider auth URLs", () => {
|
|
23
|
-
const client = new Memax({
|
|
24
|
-
apiUrl: "https://api.memax.test/",
|
|
25
|
-
fetch: async () => new Response(JSON.stringify({ data: {} })),
|
|
26
|
-
});
|
|
27
|
-
expect(client.auth.providerLoginURL("github", "http://localhost/cb")).toBe("https://api.memax.test/v1/auth/github?redirect_uri=http%3A%2F%2Flocalhost%2Fcb");
|
|
28
|
-
expect(client.auth.providerLoginURL("google", "http://localhost/cb")).toBe("https://api.memax.test/v1/auth/google?redirect_uri=http%3A%2F%2Flocalhost%2Fcb");
|
|
29
|
-
expect(client.auth.linkProviderURL("google", "https://memax.app/settings")).toBe("https://api.memax.test/v1/auth/link/google?redirect_uri=https%3A%2F%2Fmemax.app%2Fsettings");
|
|
30
|
-
});
|
|
31
|
-
it("lists and unlinks auth identities", async () => {
|
|
32
|
-
const calls = [];
|
|
33
|
-
const client = new Memax({
|
|
34
|
-
apiUrl: "https://api.memax.test",
|
|
35
|
-
fetch: async (input, init) => {
|
|
36
|
-
calls.push([String(input), init]);
|
|
37
|
-
if (String(input).endsWith("/v1/auth/identities")) {
|
|
38
|
-
return new Response(JSON.stringify({
|
|
39
|
-
data: [
|
|
40
|
-
{
|
|
41
|
-
id: "identity-1",
|
|
42
|
-
user_id: "user-1",
|
|
43
|
-
provider: "google",
|
|
44
|
-
provider_id: "google-1",
|
|
45
|
-
provider_email: "user@example.com",
|
|
46
|
-
provider_name: "User",
|
|
47
|
-
created_at: "2026-04-13T00:00:00Z",
|
|
48
|
-
},
|
|
49
|
-
],
|
|
50
|
-
}));
|
|
51
|
-
}
|
|
52
|
-
return new Response(JSON.stringify({ data: { status: "unlinked" } }));
|
|
53
|
-
},
|
|
54
|
-
});
|
|
55
|
-
await expect(client.auth.listIdentities()).resolves.toHaveLength(1);
|
|
56
|
-
await expect(client.auth.unlinkProvider("google")).resolves.toEqual({
|
|
57
|
-
status: "unlinked",
|
|
58
|
-
});
|
|
59
|
-
expect(calls.map(([url, init]) => [url, init?.method])).toEqual([
|
|
60
|
-
["https://api.memax.test/v1/auth/identities", "GET"],
|
|
61
|
-
["https://api.memax.test/v1/auth/link/google", "DELETE"],
|
|
62
|
-
]);
|
|
63
|
-
});
|
|
64
|
-
it("sends notifications hub scope as a query param on list", async () => {
|
|
65
|
-
const calls = [];
|
|
66
|
-
const client = new Memax({
|
|
67
|
-
apiUrl: "https://api.memax.test",
|
|
68
|
-
fetch: async (input, init) => {
|
|
69
|
-
calls.push([String(input), init]);
|
|
70
|
-
return new Response(JSON.stringify({
|
|
71
|
-
data: {
|
|
72
|
-
notifications: [],
|
|
73
|
-
has_more: false,
|
|
74
|
-
},
|
|
75
|
-
}), { headers: { "Content-Type": "application/json" } });
|
|
76
|
-
},
|
|
77
|
-
});
|
|
78
|
-
await client.notifications.list({ hub: "hub-alpha", status: "pending" });
|
|
79
|
-
expect(calls).toHaveLength(1);
|
|
80
|
-
expect(calls[0][0]).toBe("https://api.memax.test/v1/notifications?hub=hub-alpha&status=pending");
|
|
81
|
-
const headers = new Headers(calls[0][1]?.headers);
|
|
82
|
-
expect(headers.get("X-Hub-ID")).toBeNull();
|
|
83
|
-
});
|
|
84
|
-
it("sends notifications hub scope as a query param on summary", async () => {
|
|
85
|
-
const calls = [];
|
|
86
|
-
const client = new Memax({
|
|
87
|
-
apiUrl: "https://api.memax.test",
|
|
88
|
-
fetch: async (input, init) => {
|
|
89
|
-
calls.push([String(input), init]);
|
|
90
|
-
return new Response(JSON.stringify({
|
|
91
|
-
data: {
|
|
92
|
-
needs_action_pending: 0,
|
|
93
|
-
updates_pending: 0,
|
|
94
|
-
updates_unseen: 0,
|
|
95
|
-
by_kind: {},
|
|
96
|
-
},
|
|
97
|
-
}), { headers: { "Content-Type": "application/json" } });
|
|
98
|
-
},
|
|
99
|
-
});
|
|
100
|
-
await client.notifications.summary("hub-beta");
|
|
101
|
-
expect(calls).toHaveLength(1);
|
|
102
|
-
expect(calls[0][0]).toBe("https://api.memax.test/v1/notifications/summary?hub=hub-beta");
|
|
103
|
-
const headers = new Headers(calls[0][1]?.headers);
|
|
104
|
-
expect(headers.get("X-Hub-ID")).toBeNull();
|
|
105
|
-
});
|
|
106
|
-
// ── Batch result normalization (Bug 2 regression) ────────────────────────
|
|
107
|
-
//
|
|
108
|
-
// The SDK guarantees `skipped` is always a real array on BatchMoveResult /
|
|
109
|
-
// BatchDeleteResult, even if the server response omits the field, encodes
|
|
110
|
-
// an empty slice as JSON null, or sends only the count field. This matches
|
|
111
|
-
// the compile-time type contract (`skipped: BatchMoveSkippedMemory[]`) and
|
|
112
|
-
// lets callers read `.skipped.length` / `.skipped.map(...)` without a
|
|
113
|
-
// defensive guard at every callsite.
|
|
114
|
-
//
|
|
115
|
-
// Caught live: Derek's drag-to-topic move crashed with
|
|
116
|
-
// "Cannot read properties of undefined (reading 'length')" at
|
|
117
|
-
// use-memory-move.ts:759 when the response arrived without a `skipped`
|
|
118
|
-
// field. The fix normalizes at the SDK boundary so every downstream
|
|
119
|
-
// consumer benefits.
|
|
120
|
-
it("normalizes batchMove response when skipped is missing", async () => {
|
|
121
|
-
const client = new Memax({
|
|
122
|
-
apiUrl: "https://api.memax.test",
|
|
123
|
-
fetch: async () => new Response(JSON.stringify({ data: { moved: 3 } }), {
|
|
124
|
-
headers: { "Content-Type": "application/json" },
|
|
125
|
-
}),
|
|
126
|
-
});
|
|
127
|
-
const result = await client.memories.batchMove(["a", "b", "c"], {
|
|
128
|
-
topicId: "topic-1",
|
|
129
|
-
});
|
|
130
|
-
expect(result.moved).toBe(3);
|
|
131
|
-
expect(result.skipped).toEqual([]);
|
|
132
|
-
expect(Array.isArray(result.skipped)).toBe(true);
|
|
133
|
-
});
|
|
134
|
-
it("normalizes batchMove response when skipped is JSON null", async () => {
|
|
135
|
-
const client = new Memax({
|
|
136
|
-
apiUrl: "https://api.memax.test",
|
|
137
|
-
fetch: async () => new Response(JSON.stringify({ data: { moved: 1, skipped: null } }), {
|
|
138
|
-
headers: { "Content-Type": "application/json" },
|
|
139
|
-
}),
|
|
140
|
-
});
|
|
141
|
-
const result = await client.memories.batchMove(["a"], {
|
|
142
|
-
topicId: "topic-1",
|
|
143
|
-
});
|
|
144
|
-
expect(result.moved).toBe(1);
|
|
145
|
-
expect(result.skipped).toEqual([]);
|
|
146
|
-
});
|
|
147
|
-
it("preserves batchMove skipped entries when the server populates them", async () => {
|
|
148
|
-
const client = new Memax({
|
|
149
|
-
apiUrl: "https://api.memax.test",
|
|
150
|
-
fetch: async () => new Response(JSON.stringify({
|
|
151
|
-
data: {
|
|
152
|
-
moved: 2,
|
|
153
|
-
skipped: [
|
|
154
|
-
{ id: "a", reason: "not_owned" },
|
|
155
|
-
{ id: "b", reason: "already_at_target" },
|
|
156
|
-
],
|
|
157
|
-
},
|
|
158
|
-
}), { headers: { "Content-Type": "application/json" } }),
|
|
159
|
-
});
|
|
160
|
-
const result = await client.memories.batchMove(["a", "b", "c", "d"], {
|
|
161
|
-
topicId: "topic-1",
|
|
162
|
-
});
|
|
163
|
-
expect(result.moved).toBe(2);
|
|
164
|
-
expect(result.skipped).toHaveLength(2);
|
|
165
|
-
expect(result.skipped[0]).toEqual({ id: "a", reason: "not_owned" });
|
|
166
|
-
expect(result.skipped[1]).toEqual({
|
|
167
|
-
id: "b",
|
|
168
|
-
reason: "already_at_target",
|
|
169
|
-
});
|
|
170
|
-
});
|
|
171
|
-
it("normalizes batchMove response when moved is missing", async () => {
|
|
172
|
-
const client = new Memax({
|
|
173
|
-
apiUrl: "https://api.memax.test",
|
|
174
|
-
fetch: async () => new Response(JSON.stringify({ data: {} }), {
|
|
175
|
-
headers: { "Content-Type": "application/json" },
|
|
176
|
-
}),
|
|
177
|
-
});
|
|
178
|
-
const result = await client.memories.batchMove(["a"], {
|
|
179
|
-
topicId: "topic-1",
|
|
180
|
-
});
|
|
181
|
-
expect(result.moved).toBe(0);
|
|
182
|
-
expect(result.skipped).toEqual([]);
|
|
183
|
-
});
|
|
184
|
-
it("normalizes batchDelete response when skipped is missing", async () => {
|
|
185
|
-
const client = new Memax({
|
|
186
|
-
apiUrl: "https://api.memax.test",
|
|
187
|
-
fetch: async () => new Response(JSON.stringify({ data: { deleted: 5 } }), {
|
|
188
|
-
headers: { "Content-Type": "application/json" },
|
|
189
|
-
}),
|
|
190
|
-
});
|
|
191
|
-
const result = await client.memories.batchDelete(["a", "b", "c", "d", "e"]);
|
|
192
|
-
expect(result.deleted).toBe(5);
|
|
193
|
-
expect(result.skipped).toEqual([]);
|
|
194
|
-
expect(Array.isArray(result.skipped)).toBe(true);
|
|
195
|
-
});
|
|
196
|
-
it("preserves batchDelete skipped entries when the server populates them", async () => {
|
|
197
|
-
const client = new Memax({
|
|
198
|
-
apiUrl: "https://api.memax.test",
|
|
199
|
-
fetch: async () => new Response(JSON.stringify({
|
|
200
|
-
data: {
|
|
201
|
-
deleted: 1,
|
|
202
|
-
skipped: [
|
|
203
|
-
{ id: "b", reason: "not_owned" },
|
|
204
|
-
{ id: "c", reason: "not_found" },
|
|
205
|
-
],
|
|
206
|
-
},
|
|
207
|
-
}), { headers: { "Content-Type": "application/json" } }),
|
|
208
|
-
});
|
|
209
|
-
const result = await client.memories.batchDelete(["a", "b", "c"]);
|
|
210
|
-
expect(result.deleted).toBe(1);
|
|
211
|
-
expect(result.skipped).toHaveLength(2);
|
|
212
|
-
expect(result.skipped.map((s) => s.reason)).toEqual([
|
|
213
|
-
"not_owned",
|
|
214
|
-
"not_found",
|
|
215
|
-
]);
|
|
216
|
-
});
|
|
217
|
-
// ── Agent config batch-delete normalization ─────────────────────────────
|
|
218
|
-
//
|
|
219
|
-
// `configs.batchDelete` is a greenfield endpoint introduced in the agent
|
|
220
|
-
// delete hardening work. It shares the normalization contract with
|
|
221
|
-
// `memories.batchDelete`: `skipped` is always a real array, `deleted` is
|
|
222
|
-
// always a number, even when the server response is partial. The web
|
|
223
|
-
// hook's rollback rule (throw on full-skip with real failures) depends
|
|
224
|
-
// on this shape — if the SDK leaked `undefined` through, the hook's
|
|
225
|
-
// `result.skipped.filter(...)` would crash before reaching the throw.
|
|
226
|
-
it("normalizes configs.batchDelete response when skipped is missing", async () => {
|
|
227
|
-
const client = new Memax({
|
|
228
|
-
apiUrl: "https://api.memax.test",
|
|
229
|
-
fetch: async () => new Response(JSON.stringify({ data: { deleted: 3 } }), {
|
|
230
|
-
headers: { "Content-Type": "application/json" },
|
|
231
|
-
}),
|
|
232
|
-
});
|
|
233
|
-
const result = await client.configs.batchDelete([
|
|
234
|
-
"cfg-1",
|
|
235
|
-
"cfg-2",
|
|
236
|
-
"cfg-3",
|
|
237
|
-
]);
|
|
238
|
-
expect(result.deleted).toBe(3);
|
|
239
|
-
expect(result.skipped).toEqual([]);
|
|
240
|
-
expect(Array.isArray(result.skipped)).toBe(true);
|
|
241
|
-
});
|
|
242
|
-
it("normalizes configs.batchDelete response when skipped is JSON null", async () => {
|
|
243
|
-
const client = new Memax({
|
|
244
|
-
apiUrl: "https://api.memax.test",
|
|
245
|
-
fetch: async () => new Response(JSON.stringify({ data: { deleted: 1, skipped: null } }), {
|
|
246
|
-
headers: { "Content-Type": "application/json" },
|
|
247
|
-
}),
|
|
248
|
-
});
|
|
249
|
-
const result = await client.configs.batchDelete(["cfg-1"]);
|
|
250
|
-
expect(result.deleted).toBe(1);
|
|
251
|
-
expect(result.skipped).toEqual([]);
|
|
252
|
-
});
|
|
253
|
-
it("preserves configs.batchDelete skipped entries when the server populates them", async () => {
|
|
254
|
-
const client = new Memax({
|
|
255
|
-
apiUrl: "https://api.memax.test",
|
|
256
|
-
fetch: async () => new Response(JSON.stringify({
|
|
257
|
-
data: {
|
|
258
|
-
deleted: 1,
|
|
259
|
-
skipped: [
|
|
260
|
-
{ id: "cfg-2", reason: "not_found" },
|
|
261
|
-
{ id: "cfg-3", reason: "delete_failed" },
|
|
262
|
-
],
|
|
263
|
-
},
|
|
264
|
-
}), { headers: { "Content-Type": "application/json" } }),
|
|
265
|
-
});
|
|
266
|
-
const result = await client.configs.batchDelete([
|
|
267
|
-
"cfg-1",
|
|
268
|
-
"cfg-2",
|
|
269
|
-
"cfg-3",
|
|
270
|
-
]);
|
|
271
|
-
expect(result.deleted).toBe(1);
|
|
272
|
-
expect(result.skipped).toHaveLength(2);
|
|
273
|
-
expect(result.skipped.map((s) => s.reason)).toEqual([
|
|
274
|
-
"not_found",
|
|
275
|
-
"delete_failed",
|
|
276
|
-
]);
|
|
277
|
-
});
|
|
278
|
-
it("normalizes configs.batchDelete response when deleted is missing", async () => {
|
|
279
|
-
const client = new Memax({
|
|
280
|
-
apiUrl: "https://api.memax.test",
|
|
281
|
-
fetch: async () => new Response(JSON.stringify({ data: {} }), {
|
|
282
|
-
headers: { "Content-Type": "application/json" },
|
|
283
|
-
}),
|
|
284
|
-
});
|
|
285
|
-
const result = await client.configs.batchDelete(["cfg-1"]);
|
|
286
|
-
expect(result.deleted).toBe(0);
|
|
287
|
-
expect(result.skipped).toEqual([]);
|
|
288
|
-
});
|
|
289
|
-
});
|
|
290
|
-
//# sourceMappingURL=client.test.js.map
|
package/dist/client.test.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client.test.js","sourceRoot":"","sources":["../src/client.test.ts"],"names":[],"mappings":"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"}
|
package/dist/transport.test.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"transport.test.d.ts","sourceRoot":"","sources":["../src/transport.test.ts"],"names":[],"mappings":""}
|
package/dist/transport.test.js
DELETED
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it, vi } from "vitest";
|
|
2
|
-
import { ApiTransport } from "./transport.js";
|
|
3
|
-
function jsonResponse(body, init) {
|
|
4
|
-
return new Response(JSON.stringify(body), {
|
|
5
|
-
status: 200,
|
|
6
|
-
headers: { "Content-Type": "application/json" },
|
|
7
|
-
...init,
|
|
8
|
-
});
|
|
9
|
-
}
|
|
10
|
-
describe("ApiTransport", () => {
|
|
11
|
-
it("uses apiKey auth and merges query params", async () => {
|
|
12
|
-
const fetchMock = vi.fn(async () => jsonResponse({ data: { ok: true } }));
|
|
13
|
-
const transport = new ApiTransport({
|
|
14
|
-
apiUrl: "https://api.memax.app/",
|
|
15
|
-
apiKey: "test-key",
|
|
16
|
-
fetch: fetchMock,
|
|
17
|
-
headers: { "X-Test": "1" },
|
|
18
|
-
});
|
|
19
|
-
await transport.request("GET", "/v1/test", {
|
|
20
|
-
query: { a: 1, b: "two", skip: undefined },
|
|
21
|
-
hubId: "hub-1",
|
|
22
|
-
});
|
|
23
|
-
expect(fetchMock).toHaveBeenCalledWith("https://api.memax.app/v1/test?a=1&b=two", expect.objectContaining({
|
|
24
|
-
method: "GET",
|
|
25
|
-
headers: expect.objectContaining({
|
|
26
|
-
Authorization: "Bearer test-key",
|
|
27
|
-
"X-Hub-ID": "hub-1",
|
|
28
|
-
"X-Test": "1",
|
|
29
|
-
"Content-Type": "application/json",
|
|
30
|
-
}),
|
|
31
|
-
}));
|
|
32
|
-
});
|
|
33
|
-
it("returns undefined for empty successful responses", async () => {
|
|
34
|
-
const fetchMock = vi.fn(async () => new Response(null, { status: 204 }));
|
|
35
|
-
const transport = new ApiTransport({ fetch: fetchMock });
|
|
36
|
-
await expect(transport.request("DELETE", "/v1/test")).resolves.toBeUndefined();
|
|
37
|
-
});
|
|
38
|
-
it("retries not_ready responses", async () => {
|
|
39
|
-
const fetchMock = vi
|
|
40
|
-
.fn()
|
|
41
|
-
.mockResolvedValueOnce(jsonResponse({ error: { code: "not_ready", message: "warming up" } }, { status: 503 }))
|
|
42
|
-
.mockResolvedValueOnce(jsonResponse({ data: { ok: true } }));
|
|
43
|
-
const transport = new ApiTransport({
|
|
44
|
-
fetch: fetchMock,
|
|
45
|
-
maxRetries: 1,
|
|
46
|
-
retryDelayMs: 0,
|
|
47
|
-
});
|
|
48
|
-
await expect(transport.request("GET", "/v1/test")).resolves.toEqual({ ok: true });
|
|
49
|
-
expect(fetchMock).toHaveBeenCalledTimes(2);
|
|
50
|
-
});
|
|
51
|
-
it("maps unauthorized non-json responses", async () => {
|
|
52
|
-
const fetchMock = vi.fn(async () => new Response("unauthorized", { status: 401 }));
|
|
53
|
-
const transport = new ApiTransport({ fetch: fetchMock });
|
|
54
|
-
await expect(transport.request("GET", "/v1/test")).rejects.toMatchObject({
|
|
55
|
-
code: "unauthorized",
|
|
56
|
-
status: 401,
|
|
57
|
-
});
|
|
58
|
-
});
|
|
59
|
-
it("throws network_error when fetch fails", async () => {
|
|
60
|
-
const fetchMock = vi.fn(async () => {
|
|
61
|
-
throw new Error("boom");
|
|
62
|
-
});
|
|
63
|
-
const transport = new ApiTransport({ fetch: fetchMock });
|
|
64
|
-
await expect(transport.request("GET", "/v1/test")).rejects.toMatchObject({
|
|
65
|
-
code: "network_error",
|
|
66
|
-
status: 0,
|
|
67
|
-
});
|
|
68
|
-
});
|
|
69
|
-
it("parses stream events", async () => {
|
|
70
|
-
const payload = [
|
|
71
|
-
"event: delta\n",
|
|
72
|
-
'data: {"text":"Hello"}\n\n',
|
|
73
|
-
"event: done\n",
|
|
74
|
-
'data: {"ok":true}\n\n',
|
|
75
|
-
].join("");
|
|
76
|
-
const fetchMock = vi.fn(async () => new Response(payload, {
|
|
77
|
-
status: 200,
|
|
78
|
-
headers: { "Content-Type": "text/event-stream" },
|
|
79
|
-
}));
|
|
80
|
-
const transport = new ApiTransport({ fetch: fetchMock });
|
|
81
|
-
const events = [];
|
|
82
|
-
transport.stream("POST", "/v1/ask", {
|
|
83
|
-
body: { query: "hi" },
|
|
84
|
-
onEvent: (event, data) => {
|
|
85
|
-
events.push([event, data]);
|
|
86
|
-
},
|
|
87
|
-
});
|
|
88
|
-
await new Promise((resolve) => setTimeout(resolve, 0));
|
|
89
|
-
expect(events).toEqual([
|
|
90
|
-
["delta", { text: "Hello" }],
|
|
91
|
-
["done", { ok: true }],
|
|
92
|
-
]);
|
|
93
|
-
});
|
|
94
|
-
});
|
|
95
|
-
//# sourceMappingURL=transport.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"transport.test.js","sourceRoot":"","sources":["../src/transport.test.ts"],"names":[],"mappings":"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"}
|