assistant-cloud 0.1.27 → 0.1.28
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/README.md +42 -0
- package/dist/AssistantCloudAPI.d.ts +1 -0
- package/dist/AssistantCloudAPI.d.ts.map +1 -1
- package/dist/AssistantCloudAPI.js +1 -1
- package/dist/AssistantCloudAPI.js.map +1 -1
- package/package.json +3 -3
- package/src/AssistantCloudAPI.ts +4 -1
- package/src/tests/AssistantCloudAPI.test.ts +42 -0
package/README.md
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# `assistant-cloud`
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/assistant-cloud)
|
|
4
|
+
[](https://www.npmjs.com/package/assistant-cloud)
|
|
5
|
+
[](https://github.com/assistant-ui/assistant-ui)
|
|
6
|
+
|
|
7
|
+
Server- and client-side SDK for [Assistant Cloud](https://cloud.assistant-ui.com), the managed thread-history, telemetry, and file-storage backend for `@assistant-ui/react`.
|
|
8
|
+
|
|
9
|
+
## Installation
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
npm install @assistant-ui/react @assistant-ui/react-ai-sdk assistant-cloud
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Usage
|
|
16
|
+
|
|
17
|
+
Pass an `AssistantCloud` instance to your runtime hook (typically `useChatRuntime` from `@assistant-ui/react-ai-sdk`):
|
|
18
|
+
|
|
19
|
+
```tsx
|
|
20
|
+
import { AssistantCloud, AssistantRuntimeProvider } from "@assistant-ui/react";
|
|
21
|
+
import { useChatRuntime } from "@assistant-ui/react-ai-sdk";
|
|
22
|
+
|
|
23
|
+
const cloud = new AssistantCloud({
|
|
24
|
+
baseUrl: process.env.NEXT_PUBLIC_ASSISTANT_BASE_URL!,
|
|
25
|
+
anonymous: true,
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
export function Provider({ children }: { children: React.ReactNode }) {
|
|
29
|
+
const runtime = useChatRuntime({ cloud });
|
|
30
|
+
return <AssistantRuntimeProvider runtime={runtime}>{children}</AssistantRuntimeProvider>;
|
|
31
|
+
}
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Authentication
|
|
35
|
+
|
|
36
|
+
| Mode | Required fields | Use case |
|
|
37
|
+
| ---------------- | ------------------------------------------------------- | ------------------------------------- |
|
|
38
|
+
| Anonymous | `baseUrl`, `anonymous: true` | Demos and unauthenticated playgrounds.|
|
|
39
|
+
| JWT | `baseUrl`, `authToken: () => Promise<string \| null>` | Browser apps with their own auth. |
|
|
40
|
+
| API key (server) | `apiKey`, `userId`, `workspaceId` | Server-side admin and data-plane jobs.|
|
|
41
|
+
|
|
42
|
+
For advanced persistence adapters and MCP sampling instrumentation, see the [docs](https://www.assistant-ui.com/docs/cloud).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AssistantCloudAPI.d.ts","sourceRoot":"","sources":["../src/AssistantCloudAPI.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,0BAA0B,EAIhC,wCAAqC;AACtC,OAAO,KAAK,EAAE,uBAAuB,EAAE,gCAA6B;AAEpE,MAAM,MAAM,6BAA6B,GAAG;IAC1C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;OAIG;IACH,YAAY,CAAC,EAAE,CACb,MAAM,EAAE,uBAAuB,KAC5B,uBAAuB,GAAG,IAAI,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,CAC/B;IACE,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CACzC,GACD;IACE,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB,GACD;IACE,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB,CACJ,GAAG;IACF;;;;;;;;;;OAUG;IACH,SAAS,CAAC,EAAE,OAAO,GAAG,6BAA6B,CAAC;CACrD,CAAC;AASF,KAAK,kBAAkB,GAAG;IACxB,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,SAAS,CAAC;IAC9D,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3B,CAAC;AAEF,qBAAa,iBAAiB;IACrB,KAAK,EAAE,0BAA0B,CAAC;IAClC,QAAQ,SAAC;gBAEJ,MAAM,EAAE,oBAAoB;
|
|
1
|
+
{"version":3,"file":"AssistantCloudAPI.d.ts","sourceRoot":"","sources":["../src/AssistantCloudAPI.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,0BAA0B,EAIhC,wCAAqC;AACtC,OAAO,KAAK,EAAE,uBAAuB,EAAE,gCAA6B;AAEpE,MAAM,MAAM,6BAA6B,GAAG;IAC1C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;OAIG;IACH,YAAY,CAAC,EAAE,CACb,MAAM,EAAE,uBAAuB,KAC5B,uBAAuB,GAAG,IAAI,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,CAC/B;IACE,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CACzC,GACD;IACE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB,GACD;IACE,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB,CACJ,GAAG;IACF;;;;;;;;;;OAUG;IACH,SAAS,CAAC,EAAE,OAAO,GAAG,6BAA6B,CAAC;CACrD,CAAC;AASF,KAAK,kBAAkB,GAAG;IACxB,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,SAAS,CAAC;IAC9D,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3B,CAAC;AAEF,qBAAa,iBAAiB;IACrB,KAAK,EAAE,0BAA0B,CAAC;IAClC,QAAQ,SAAC;gBAEJ,MAAM,EAAE,oBAAoB;IAuB3B,cAAc;IAId,cAAc,CACzB,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,kBAAuB;IAkDrB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,kBAAuB;CAI5E"}
|
|
@@ -14,7 +14,7 @@ export class AssistantCloudAPI {
|
|
|
14
14
|
this._auth = new AssistantCloudJWTAuthStrategy(config.authToken);
|
|
15
15
|
}
|
|
16
16
|
else if ("apiKey" in config) {
|
|
17
|
-
this._baseUrl = "https://backend.assistant-api.com";
|
|
17
|
+
this._baseUrl = (config.baseUrl ?? "https://backend.assistant-api.com").replace(/\/$/, "");
|
|
18
18
|
this._auth = new AssistantCloudAPIKeyAuthStrategy(config.apiKey, config.userId, config.workspaceId);
|
|
19
19
|
}
|
|
20
20
|
else if ("anonymous" in config) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AssistantCloudAPI.js","sourceRoot":"","sources":["../src/AssistantCloudAPI.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,6BAA6B,EAC7B,gCAAgC,EAChC,mCAAmC,GACpC,wCAAqC;
|
|
1
|
+
{"version":3,"file":"AssistantCloudAPI.js","sourceRoot":"","sources":["../src/AssistantCloudAPI.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "assistant-cloud",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.28",
|
|
4
4
|
"description": "Cloud integration for assistant-ui",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"assistant",
|
|
@@ -27,12 +27,12 @@
|
|
|
27
27
|
],
|
|
28
28
|
"sideEffects": false,
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"assistant-stream": "^0.3.
|
|
30
|
+
"assistant-stream": "^0.3.15"
|
|
31
31
|
},
|
|
32
32
|
"devDependencies": {
|
|
33
33
|
"@types/node": "^25.6.0",
|
|
34
34
|
"vitest": "^4.1.5",
|
|
35
|
-
"@assistant-ui/x-buildutils": "0.0.
|
|
35
|
+
"@assistant-ui/x-buildutils": "0.0.8"
|
|
36
36
|
},
|
|
37
37
|
"publishConfig": {
|
|
38
38
|
"access": "public",
|
package/src/AssistantCloudAPI.ts
CHANGED
|
@@ -24,6 +24,7 @@ export type AssistantCloudConfig = (
|
|
|
24
24
|
authToken: () => Promise<string | null>;
|
|
25
25
|
}
|
|
26
26
|
| {
|
|
27
|
+
baseUrl?: string;
|
|
27
28
|
apiKey: string;
|
|
28
29
|
userId: string;
|
|
29
30
|
workspaceId: string;
|
|
@@ -70,7 +71,9 @@ export class AssistantCloudAPI {
|
|
|
70
71
|
this._baseUrl = config.baseUrl;
|
|
71
72
|
this._auth = new AssistantCloudJWTAuthStrategy(config.authToken);
|
|
72
73
|
} else if ("apiKey" in config) {
|
|
73
|
-
this._baseUrl =
|
|
74
|
+
this._baseUrl = (
|
|
75
|
+
config.baseUrl ?? "https://backend.assistant-api.com"
|
|
76
|
+
).replace(/\/$/, "");
|
|
74
77
|
this._auth = new AssistantCloudAPIKeyAuthStrategy(
|
|
75
78
|
config.apiKey,
|
|
76
79
|
config.userId,
|
|
@@ -48,6 +48,48 @@ describe("AssistantCloudAPI", () => {
|
|
|
48
48
|
expect(init.body).toBe(JSON.stringify({ hello: "world" }));
|
|
49
49
|
});
|
|
50
50
|
|
|
51
|
+
it("uses custom baseUrl when provided with apiKey config", async () => {
|
|
52
|
+
const fetchMock = vi.fn().mockResolvedValue({
|
|
53
|
+
ok: true,
|
|
54
|
+
headers: new Headers(),
|
|
55
|
+
json: vi.fn().mockResolvedValue({}),
|
|
56
|
+
});
|
|
57
|
+
vi.stubGlobal("fetch", fetchMock);
|
|
58
|
+
|
|
59
|
+
const api = new AssistantCloudAPI({
|
|
60
|
+
baseUrl: "https://custom.example.com",
|
|
61
|
+
apiKey: "test-key",
|
|
62
|
+
userId: "u-1",
|
|
63
|
+
workspaceId: "w-1",
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
await api.makeRawRequest("/threads");
|
|
67
|
+
|
|
68
|
+
const [url] = fetchMock.mock.calls[0]!;
|
|
69
|
+
expect(url.toString()).toBe("https://custom.example.com/v1/threads");
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
it("strips a trailing slash from a custom baseUrl", async () => {
|
|
73
|
+
const fetchMock = vi.fn().mockResolvedValue({
|
|
74
|
+
ok: true,
|
|
75
|
+
headers: new Headers(),
|
|
76
|
+
json: vi.fn().mockResolvedValue({}),
|
|
77
|
+
});
|
|
78
|
+
vi.stubGlobal("fetch", fetchMock);
|
|
79
|
+
|
|
80
|
+
const api = new AssistantCloudAPI({
|
|
81
|
+
baseUrl: "https://custom.example.com/",
|
|
82
|
+
apiKey: "test-key",
|
|
83
|
+
userId: "u-1",
|
|
84
|
+
workspaceId: "w-1",
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
await api.makeRawRequest("/threads");
|
|
88
|
+
|
|
89
|
+
const [url] = fetchMock.mock.calls[0]!;
|
|
90
|
+
expect(url.toString()).toBe("https://custom.example.com/v1/threads");
|
|
91
|
+
});
|
|
92
|
+
|
|
51
93
|
it("rejects before fetch when auth token callback returns null", async () => {
|
|
52
94
|
const fetchMock = vi.fn();
|
|
53
95
|
vi.stubGlobal("fetch", fetchMock);
|