@rool-dev/client 0.4.6 → 0.4.7-dev.1c001a6
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 +45 -4
- package/dist/client.d.ts +18 -14
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +38 -74
- package/dist/client.js.map +1 -1
- package/dist/graphql.d.ts +12 -13
- package/dist/graphql.d.ts.map +1 -1
- package/dist/graphql.js +58 -50
- package/dist/graphql.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/space.d.ts +23 -17
- package/dist/space.d.ts.map +1 -1
- package/dist/space.js +66 -33
- package/dist/space.js.map +1 -1
- package/dist/subscription.d.ts +34 -7
- package/dist/subscription.d.ts.map +1 -1
- package/dist/subscription.js +152 -18
- package/dist/subscription.js.map +1 -1
- package/dist/types.d.ts +10 -4
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -142,6 +142,47 @@ const client = new RoolClient({
|
|
|
142
142
|
});
|
|
143
143
|
```
|
|
144
144
|
|
|
145
|
+
---
|
|
146
|
+
|
|
147
|
+
## Sessions and AI Context
|
|
148
|
+
|
|
149
|
+
Each `RoolSpace` instance has a `sessionId` that tracks conversation history with the AI. This enables multi-turn interactions where the AI understands references like "it", "them", or "the one I just created".
|
|
150
|
+
|
|
151
|
+
AI operations (`prompt`, `createObject`, `updateObject`, `findObjects`) automatically receive:
|
|
152
|
+
|
|
153
|
+
- **Conversation history** — Previous prompts and responses from this session
|
|
154
|
+
- **Recently modified objects** — Objects created or changed during this session
|
|
155
|
+
- **Selected objects** — Objects passed via `objectIds` are given primary focus
|
|
156
|
+
|
|
157
|
+
This context flows automatically — no configuration needed. The AI sees enough history to maintain coherent interactions while respecting the `_`-prefixed field hiding rules.
|
|
158
|
+
|
|
159
|
+
### Session Isolation
|
|
160
|
+
|
|
161
|
+
By default, each call to `openSpace()` or `createSpace()` generates a new `sessionId`. This means:
|
|
162
|
+
- Opening a space twice gives you two independent AI context histories
|
|
163
|
+
- Closing and reopening a space starts fresh
|
|
164
|
+
|
|
165
|
+
### Resuming Sessions
|
|
166
|
+
|
|
167
|
+
Pass a `sessionId` to continue a previous session's AI context:
|
|
168
|
+
|
|
169
|
+
```typescript
|
|
170
|
+
// First session - save the sessionId
|
|
171
|
+
const space = await client.openSpace('abc123');
|
|
172
|
+
const savedSessionId = space.sessionId;
|
|
173
|
+
space.close();
|
|
174
|
+
|
|
175
|
+
// Later - resume the same session
|
|
176
|
+
const resumedSpace = await client.openSpace('abc123', { sessionId: savedSessionId });
|
|
177
|
+
// AI now has access to conversation history from the previous session
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
**Use cases:**
|
|
181
|
+
- **Page refresh** — Store `sessionId` in localStorage to maintain context across reloads
|
|
182
|
+
- **Multi-step workflows** — Keep context when orchestrating multiple AI operations
|
|
183
|
+
- **Debugging** — Resume a session to reproduce specific AI behaviors
|
|
184
|
+
|
|
185
|
+
Note: Sessions are not persisted indefinitely server-side. For long-term context, rely on the space data itself.
|
|
145
186
|
|
|
146
187
|
---
|
|
147
188
|
|
|
@@ -163,8 +204,8 @@ const client = new RoolClient({
|
|
|
163
204
|
| Method | Description |
|
|
164
205
|
|--------|-------------|
|
|
165
206
|
| `listSpaces(): Promise<RoolSpaceInfo[]>` | List available spaces |
|
|
166
|
-
| `openSpace(id): Promise<RoolSpace>` | Open a space for editing |
|
|
167
|
-
| `createSpace(name?): Promise<RoolSpace>` | Create a new space |
|
|
207
|
+
| `openSpace(id, options?): Promise<RoolSpace>` | Open a space for editing. Options: `{ sessionId?: string }` |
|
|
208
|
+
| `createSpace(name?, options?): Promise<RoolSpace>` | Create a new space. Options: `{ sessionId?: string }` |
|
|
168
209
|
| `deleteSpace(id): Promise<void>` | Delete a space |
|
|
169
210
|
|
|
170
211
|
### Account & Users
|
|
@@ -178,7 +219,6 @@ const client = new RoolClient({
|
|
|
178
219
|
|
|
179
220
|
| Method | Description |
|
|
180
221
|
|--------|-------------|
|
|
181
|
-
| `getConnectionId(): string` | Get connection ID (for echo suppression) |
|
|
182
222
|
| `RoolClient.generateId(): string` | Generate 6-char alphanumeric ID (static) |
|
|
183
223
|
| `graphql<T>(query, variables?): Promise<T>` | Execute raw GraphQL |
|
|
184
224
|
| `destroy(): void` | Clean up resources |
|
|
@@ -207,6 +247,7 @@ Spaces are first-class objects with built-in undo/redo, event emission, and real
|
|
|
207
247
|
| `id: string` | Space ID |
|
|
208
248
|
| `name: string` | Space name |
|
|
209
249
|
| `role: RoolUserRole` | User's role (`'owner' \| 'editor' \| 'viewer'`) |
|
|
250
|
+
| `sessionId: string` | Unique connection ID for this space instance (used for AI context tracking) |
|
|
210
251
|
| `isReadOnly(): boolean` | True if viewer role |
|
|
211
252
|
|
|
212
253
|
### Lifecycle
|
|
@@ -399,7 +440,7 @@ Store arbitrary data alongside the Space without it being part of the graph cont
|
|
|
399
440
|
|
|
400
441
|
| Method | Description |
|
|
401
442
|
|--------|-------------|
|
|
402
|
-
| `prompt(prompt, options?): Promise<string
|
|
443
|
+
| `prompt(prompt, options?): Promise<string \| null>` | Invoke the AI agent to manipulate the space |
|
|
403
444
|
|
|
404
445
|
The agent has editor-level capabilities — it can create, modify, delete, link, and research — but cannot modify `_`-prefixed fields. Use `checkpoint()` before prompting to make operations undoable.
|
|
405
446
|
|
package/dist/client.d.ts
CHANGED
|
@@ -9,7 +9,7 @@ import type { RoolClientConfig, RoolClientEvents, RoolSpaceInfo, Account, UserRe
|
|
|
9
9
|
* Features:
|
|
10
10
|
* - Authentication (login, logout, token management)
|
|
11
11
|
* - Spaces lifecycle (list, open, create, delete)
|
|
12
|
-
* -
|
|
12
|
+
* - Client-level subscription for lifecycle events
|
|
13
13
|
* - Media operations
|
|
14
14
|
* - AI operations (prompt, image generation)
|
|
15
15
|
*/
|
|
@@ -18,7 +18,6 @@ export declare class RoolClient extends EventEmitter<RoolClientEvents> {
|
|
|
18
18
|
private authManager;
|
|
19
19
|
private graphqlClient;
|
|
20
20
|
private subscriptionManager;
|
|
21
|
-
private connectionId;
|
|
22
21
|
private openSpaces;
|
|
23
22
|
constructor(config: RoolClientConfig);
|
|
24
23
|
/**
|
|
@@ -65,15 +64,25 @@ export declare class RoolClient extends EventEmitter<RoolClientEvents> {
|
|
|
65
64
|
/**
|
|
66
65
|
* Open an existing space.
|
|
67
66
|
* Loads the space data from the server and returns a Space instance.
|
|
68
|
-
*
|
|
67
|
+
* The space manages its own real-time subscription.
|
|
68
|
+
*
|
|
69
|
+
* @param spaceId - The ID of the space to open
|
|
70
|
+
* @param options.sessionId - Optional session ID for AI context continuity. If not provided, a new session is created.
|
|
69
71
|
*/
|
|
70
|
-
openSpace(spaceId: string
|
|
72
|
+
openSpace(spaceId: string, options?: {
|
|
73
|
+
sessionId?: string;
|
|
74
|
+
}): Promise<RoolSpace>;
|
|
71
75
|
/**
|
|
72
76
|
* Create a new space.
|
|
73
77
|
* Creates on server and returns a Space instance.
|
|
74
|
-
*
|
|
78
|
+
* The space manages its own real-time subscription.
|
|
79
|
+
*
|
|
80
|
+
* @param name - Optional name for the space
|
|
81
|
+
* @param options.sessionId - Optional session ID for AI context continuity. If not provided, a new session is created.
|
|
75
82
|
*/
|
|
76
|
-
createSpace(name?: string
|
|
83
|
+
createSpace(name?: string, options?: {
|
|
84
|
+
sessionId?: string;
|
|
85
|
+
}): Promise<RoolSpace>;
|
|
77
86
|
/**
|
|
78
87
|
* Delete a space.
|
|
79
88
|
* Note: This does not affect any open Space instances - they become stale.
|
|
@@ -89,7 +98,7 @@ export declare class RoolClient extends EventEmitter<RoolClientEvents> {
|
|
|
89
98
|
searchUser(email: string): Promise<UserResult | null>;
|
|
90
99
|
private get mediaClient();
|
|
91
100
|
/**
|
|
92
|
-
* Ensure the
|
|
101
|
+
* Ensure the client-level event subscription is active.
|
|
93
102
|
* Called automatically when opening spaces.
|
|
94
103
|
* @internal
|
|
95
104
|
*/
|
|
@@ -99,11 +108,6 @@ export declare class RoolClient extends EventEmitter<RoolClientEvents> {
|
|
|
99
108
|
* @internal
|
|
100
109
|
*/
|
|
101
110
|
private unsubscribe;
|
|
102
|
-
/**
|
|
103
|
-
* Get the connection ID used for subscriptions.
|
|
104
|
-
* Events triggered by this connection won't be echoed back.
|
|
105
|
-
*/
|
|
106
|
-
getConnectionId(): string;
|
|
107
111
|
/**
|
|
108
112
|
* Generate a unique entity ID.
|
|
109
113
|
* 6-character alphanumeric string (62^6 = 56.8 billion possible values).
|
|
@@ -124,9 +128,9 @@ export declare class RoolClient extends EventEmitter<RoolClientEvents> {
|
|
|
124
128
|
private registerSpace;
|
|
125
129
|
private unregisterSpace;
|
|
126
130
|
/**
|
|
127
|
-
* Handle a
|
|
131
|
+
* Handle a client-level event from the subscription.
|
|
128
132
|
* @internal
|
|
129
133
|
*/
|
|
130
|
-
private
|
|
134
|
+
private handleClientEvent;
|
|
131
135
|
}
|
|
132
136
|
//# sourceMappingURL=client.d.ts.map
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAKlD,OAAO,EAAE,SAAS,EAAoB,MAAM,YAAY,CAAC;AACzD,OAAO,KAAK,EACV,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,EAGb,OAAO,EACP,UAAU,EACV,QAAQ,EAET,MAAM,YAAY,CAAC;AAUpB;;;;;;;;;;;GAWG;AACH,qBAAa,UAAW,SAAQ,YAAY,CAAC,gBAAgB,CAAC;IAC5D,OAAO,CAAC,IAAI,CAAe;IAC3B,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,mBAAmB,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAKlD,OAAO,EAAE,SAAS,EAAoB,MAAM,YAAY,CAAC;AACzD,OAAO,KAAK,EACV,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,EAGb,OAAO,EACP,UAAU,EACV,QAAQ,EAET,MAAM,YAAY,CAAC;AAUpB;;;;;;;;;;;GAWG;AACH,qBAAa,UAAW,SAAQ,YAAY,CAAC,gBAAgB,CAAC;IAC5D,OAAO,CAAC,IAAI,CAAe;IAC3B,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,mBAAmB,CAA0C;IAGrE,OAAO,CAAC,UAAU,CAAgC;gBAEtC,MAAM,EAAE,gBAAgB;IA4BpC;;;;;OAKG;IACH,UAAU,IAAI,OAAO;IAWrB;;OAEG;IACH,OAAO,IAAI,IAAI;IAiBf;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B;;OAEG;IACH,MAAM,IAAI,IAAI;IAWd;;;OAGG;IACH,mBAAmB,IAAI,OAAO;IAI9B;;OAEG;IACH,eAAe,IAAI,OAAO;IAI1B;;;OAGG;IACG,QAAQ,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAI7C;;OAEG;IACH,OAAO,IAAI,QAAQ;IAQnB;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAI5C;;;;;;;OAOG;IACG,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,SAAS,CAAC;IA8BtF;;;;;;;OAOG;IACG,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,SAAS,CAAC;IA8BtF;;;OAGG;IACG,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUjD;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;IAIpC;;OAEG;IACG,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAQ3D,OAAO,KAAK,WAAW,GAMtB;IAMD;;;;OAIG;YACW,gBAAgB;IAkB9B;;;OAGG;IACH,OAAO,CAAC,WAAW;IAWnB;;;;OAIG;IACH,MAAM,CAAC,UAAU,IAAI,MAAM;IAI3B;;;;;;;;;OASG;IACG,OAAO,CAAC,CAAC,EACb,KAAK,EAAE,MAAM,EACb,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAClC,OAAO,CAAC,CAAC,CAAC;IAQb,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,eAAe;IAQvB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;CAe1B"}
|
package/dist/client.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
import { EventEmitter } from './event-emitter.js';
|
|
5
5
|
import { AuthManager } from './auth.js';
|
|
6
6
|
import { GraphQLClient } from './graphql.js';
|
|
7
|
-
import {
|
|
7
|
+
import { ClientSubscriptionManager } from './subscription.js';
|
|
8
8
|
import { MediaClient } from './media.js';
|
|
9
9
|
import { RoolSpace, generateEntityId } from './space.js';
|
|
10
10
|
/**
|
|
@@ -15,7 +15,7 @@ import { RoolSpace, generateEntityId } from './space.js';
|
|
|
15
15
|
* Features:
|
|
16
16
|
* - Authentication (login, logout, token management)
|
|
17
17
|
* - Spaces lifecycle (list, open, create, delete)
|
|
18
|
-
* -
|
|
18
|
+
* - Client-level subscription for lifecycle events
|
|
19
19
|
* - Media operations
|
|
20
20
|
* - AI operations (prompt, image generation)
|
|
21
21
|
*/
|
|
@@ -24,8 +24,7 @@ export class RoolClient extends EventEmitter {
|
|
|
24
24
|
authManager;
|
|
25
25
|
graphqlClient;
|
|
26
26
|
subscriptionManager = null;
|
|
27
|
-
|
|
28
|
-
// Registry of open spaces
|
|
27
|
+
// Registry of open spaces (for cleanup on logout/destroy)
|
|
29
28
|
openSpaces = new Map();
|
|
30
29
|
constructor(config) {
|
|
31
30
|
super();
|
|
@@ -35,7 +34,6 @@ export class RoolClient extends EventEmitter {
|
|
|
35
34
|
media: config.mediaUrl ?? `${baseUrl}/media`,
|
|
36
35
|
auth: config.authUrl ?? `${baseUrl}/auth`,
|
|
37
36
|
};
|
|
38
|
-
this.connectionId = generateEntityId();
|
|
39
37
|
this.authManager = new AuthManager({
|
|
40
38
|
authUrl: this.urls.auth,
|
|
41
39
|
authProvider: config.authProvider,
|
|
@@ -46,7 +44,6 @@ export class RoolClient extends EventEmitter {
|
|
|
46
44
|
this.graphqlClient = new GraphQLClient({
|
|
47
45
|
graphqlUrl: this.urls.graphql,
|
|
48
46
|
authManager: this.authManager,
|
|
49
|
-
getConnectionId: () => this.connectionId,
|
|
50
47
|
});
|
|
51
48
|
}
|
|
52
49
|
// ===========================================================================
|
|
@@ -138,10 +135,13 @@ export class RoolClient extends EventEmitter {
|
|
|
138
135
|
/**
|
|
139
136
|
* Open an existing space.
|
|
140
137
|
* Loads the space data from the server and returns a Space instance.
|
|
141
|
-
*
|
|
138
|
+
* The space manages its own real-time subscription.
|
|
139
|
+
*
|
|
140
|
+
* @param spaceId - The ID of the space to open
|
|
141
|
+
* @param options.sessionId - Optional session ID for AI context continuity. If not provided, a new session is created.
|
|
142
142
|
*/
|
|
143
|
-
async openSpace(spaceId) {
|
|
144
|
-
// Ensure subscription is active
|
|
143
|
+
async openSpace(spaceId, options) {
|
|
144
|
+
// Ensure client subscription is active (for lifecycle events)
|
|
145
145
|
void this.ensureSubscribed();
|
|
146
146
|
const [spaceData, spaceList] = await Promise.all([
|
|
147
147
|
this.graphqlClient.getSpace(spaceId),
|
|
@@ -153,37 +153,46 @@ export class RoolClient extends EventEmitter {
|
|
|
153
153
|
name: spaceInfo?.name ?? spaceId,
|
|
154
154
|
role: spaceInfo?.role ?? 'viewer',
|
|
155
155
|
initialData: spaceData,
|
|
156
|
+
sessionId: options?.sessionId,
|
|
156
157
|
graphqlClient: this.graphqlClient,
|
|
157
158
|
mediaClient: this.mediaClient,
|
|
159
|
+
graphqlUrl: this.urls.graphql,
|
|
160
|
+
authManager: this.authManager,
|
|
158
161
|
onClose: (id) => this.unregisterSpace(id),
|
|
159
162
|
});
|
|
160
|
-
// Register for
|
|
163
|
+
// Register for cleanup
|
|
161
164
|
this.registerSpace(spaceId, space);
|
|
162
165
|
return space;
|
|
163
166
|
}
|
|
164
167
|
/**
|
|
165
168
|
* Create a new space.
|
|
166
169
|
* Creates on server and returns a Space instance.
|
|
167
|
-
*
|
|
170
|
+
* The space manages its own real-time subscription.
|
|
171
|
+
*
|
|
172
|
+
* @param name - Optional name for the space
|
|
173
|
+
* @param options.sessionId - Optional session ID for AI context continuity. If not provided, a new session is created.
|
|
168
174
|
*/
|
|
169
|
-
async createSpace(name) {
|
|
170
|
-
// Ensure subscription is active
|
|
175
|
+
async createSpace(name, options) {
|
|
176
|
+
// Ensure client subscription is active (for lifecycle events)
|
|
171
177
|
void this.ensureSubscribed();
|
|
172
178
|
const spaceId = generateEntityId();
|
|
173
179
|
const spaceName = name ?? spaceId;
|
|
174
180
|
const initialData = { objects: {}, meta: {} };
|
|
175
|
-
// Create on server with name
|
|
176
|
-
await this.graphqlClient.createSpace(spaceId, spaceName);
|
|
181
|
+
// Create on server with name (use a temporary sessionId for lifecycle ops)
|
|
182
|
+
await this.graphqlClient.createSpace(spaceId, spaceName, generateEntityId());
|
|
177
183
|
const space = new RoolSpace({
|
|
178
184
|
id: spaceId,
|
|
179
185
|
name: spaceName,
|
|
180
186
|
role: 'owner',
|
|
181
187
|
initialData,
|
|
188
|
+
sessionId: options?.sessionId,
|
|
182
189
|
graphqlClient: this.graphqlClient,
|
|
183
190
|
mediaClient: this.mediaClient,
|
|
191
|
+
graphqlUrl: this.urls.graphql,
|
|
192
|
+
authManager: this.authManager,
|
|
184
193
|
onClose: (id) => this.unregisterSpace(id),
|
|
185
194
|
});
|
|
186
|
-
// Register for
|
|
195
|
+
// Register for cleanup
|
|
187
196
|
this.registerSpace(spaceId, space);
|
|
188
197
|
return space;
|
|
189
198
|
}
|
|
@@ -192,7 +201,8 @@ export class RoolClient extends EventEmitter {
|
|
|
192
201
|
* Note: This does not affect any open Space instances - they become stale.
|
|
193
202
|
*/
|
|
194
203
|
async deleteSpace(spaceId) {
|
|
195
|
-
|
|
204
|
+
// Use a temporary sessionId for lifecycle ops
|
|
205
|
+
await this.graphqlClient.deleteSpace(spaceId, generateEntityId());
|
|
196
206
|
// Client-level event will be emitted via SSE subscription
|
|
197
207
|
}
|
|
198
208
|
// ===========================================================================
|
|
@@ -224,18 +234,17 @@ export class RoolClient extends EventEmitter {
|
|
|
224
234
|
// Subscriptions (internal - auto-managed)
|
|
225
235
|
// ===========================================================================
|
|
226
236
|
/**
|
|
227
|
-
* Ensure the
|
|
237
|
+
* Ensure the client-level event subscription is active.
|
|
228
238
|
* Called automatically when opening spaces.
|
|
229
239
|
* @internal
|
|
230
240
|
*/
|
|
231
241
|
async ensureSubscribed() {
|
|
232
242
|
if (this.subscriptionManager)
|
|
233
243
|
return;
|
|
234
|
-
this.subscriptionManager = new
|
|
244
|
+
this.subscriptionManager = new ClientSubscriptionManager({
|
|
235
245
|
graphqlUrl: this.urls.graphql,
|
|
236
246
|
authManager: this.authManager,
|
|
237
|
-
|
|
238
|
-
onEvent: (event) => this.handleEvent(event),
|
|
247
|
+
onEvent: (event) => this.handleClientEvent(event),
|
|
239
248
|
onConnectionStateChanged: (state) => {
|
|
240
249
|
this.emit('connectionStateChanged', state);
|
|
241
250
|
},
|
|
@@ -258,13 +267,6 @@ export class RoolClient extends EventEmitter {
|
|
|
258
267
|
// ===========================================================================
|
|
259
268
|
// Utilities
|
|
260
269
|
// ===========================================================================
|
|
261
|
-
/**
|
|
262
|
-
* Get the connection ID used for subscriptions.
|
|
263
|
-
* Events triggered by this connection won't be echoed back.
|
|
264
|
-
*/
|
|
265
|
-
getConnectionId() {
|
|
266
|
-
return this.connectionId;
|
|
267
|
-
}
|
|
268
270
|
/**
|
|
269
271
|
* Generate a unique entity ID.
|
|
270
272
|
* 6-character alphanumeric string (62^6 = 56.8 billion possible values).
|
|
@@ -299,57 +301,19 @@ export class RoolClient extends EventEmitter {
|
|
|
299
301
|
// Private Methods - Event Handling
|
|
300
302
|
// ===========================================================================
|
|
301
303
|
/**
|
|
302
|
-
* Handle a
|
|
304
|
+
* Handle a client-level event from the subscription.
|
|
303
305
|
* @internal
|
|
304
306
|
*/
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
switch (type) {
|
|
308
|
-
case 'space_patched':
|
|
309
|
-
// Route to open Space instance
|
|
310
|
-
if (patch) {
|
|
311
|
-
const space = this.openSpaces.get(spaceId);
|
|
312
|
-
if (space) {
|
|
313
|
-
space.handleRemotePatch(patch, source);
|
|
314
|
-
}
|
|
315
|
-
}
|
|
316
|
-
break;
|
|
317
|
-
case 'space_changed':
|
|
318
|
-
// Route to open Space instance
|
|
319
|
-
{
|
|
320
|
-
const space = this.openSpaces.get(spaceId);
|
|
321
|
-
if (space) {
|
|
322
|
-
// Reload space data and notify
|
|
323
|
-
void this.graphqlClient.getSpace(spaceId).then((data) => {
|
|
324
|
-
space.handleRemoteChange(data);
|
|
325
|
-
});
|
|
326
|
-
}
|
|
327
|
-
}
|
|
328
|
-
break;
|
|
329
|
-
case 'space_name_changed':
|
|
330
|
-
// Emit client-level event and update any open Space
|
|
331
|
-
{
|
|
332
|
-
// Fetch updated name
|
|
333
|
-
void this.graphqlClient.listSpaces().then((spaces) => {
|
|
334
|
-
const info = spaces.find(s => s.id === spaceId);
|
|
335
|
-
if (info) {
|
|
336
|
-
const space = this.openSpaces.get(spaceId);
|
|
337
|
-
if (space) {
|
|
338
|
-
space.handleRemoteRename(info.name);
|
|
339
|
-
}
|
|
340
|
-
this.emit('spaceRenamed', spaceId, info.name);
|
|
341
|
-
}
|
|
342
|
-
});
|
|
343
|
-
}
|
|
344
|
-
break;
|
|
307
|
+
handleClientEvent(event) {
|
|
308
|
+
switch (event.type) {
|
|
345
309
|
case 'space_created':
|
|
346
|
-
|
|
347
|
-
this.emit('spaceCreated', spaceId, event.name ?? spaceId);
|
|
310
|
+
this.emit('spaceCreated', event.spaceId, event.name ?? event.spaceId);
|
|
348
311
|
break;
|
|
349
312
|
case 'space_deleted':
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
313
|
+
this.emit('spaceDeleted', event.spaceId);
|
|
314
|
+
break;
|
|
315
|
+
case 'space_renamed':
|
|
316
|
+
this.emit('spaceRenamed', event.spaceId, event.name ?? event.spaceId);
|
|
353
317
|
break;
|
|
354
318
|
}
|
|
355
319
|
}
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,cAAc;AACd,gFAAgF;AAEhF,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,cAAc;AACd,gFAAgF;AAEhF,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAqBzD;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,UAAW,SAAQ,YAA8B;IACpD,IAAI,CAAe;IACnB,WAAW,CAAc;IACzB,aAAa,CAAgB;IAC7B,mBAAmB,GAAqC,IAAI,CAAC;IAErE,0DAA0D;IAClD,UAAU,GAAG,IAAI,GAAG,EAAqB,CAAC;IAElD,YAAY,MAAwB;QAClC,KAAK,EAAE,CAAC;QAER,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,0BAA0B;QAC9E,IAAI,CAAC,IAAI,GAAG;YACV,OAAO,EAAE,MAAM,CAAC,UAAU,IAAI,GAAG,OAAO,UAAU;YAClD,KAAK,EAAE,MAAM,CAAC,QAAQ,IAAI,GAAG,OAAO,QAAQ;YAC5C,IAAI,EAAE,MAAM,CAAC,OAAO,IAAI,GAAG,OAAO,OAAO;SAC1C,CAAC;QAEF,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC;YACjC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI;YACvB,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,kBAAkB,EAAE,CAAC,aAAa,EAAE,EAAE;gBACpC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,aAAa,CAAC,CAAC;YAC/C,CAAC;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,CAAC;YACrC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO;YAC7B,WAAW,EAAE,IAAI,CAAC,WAAW;SAC9B,CAAC,CAAC;IACL,CAAC;IAED,8EAA8E;IAC9E,iBAAiB;IACjB,8EAA8E;IAE9E;;;;;OAKG;IACH,UAAU;QACR,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC;QAE7C,sDAAsD;QACtD,IAAI,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,EAAE,CAAC;YACvC,KAAK,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC/B,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,OAAO;QACL,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QAC3B,IAAI,CAAC,mBAAmB,EAAE,OAAO,EAAE,CAAC;QAEpC,wBAAwB;QACxB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;YAC7C,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QAExB,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;IAED,8EAA8E;IAC9E,iBAAiB;IACjB,8EAA8E;IAE9E;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;QAC1B,IAAI,CAAC,WAAW,EAAE,CAAC;QAEnB,wBAAwB;QACxB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;YAC7C,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC;IAED;;;OAGG;IACH,mBAAmB;QACjB,OAAO,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,eAAe;QACb,OAAO,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,CAAC;IAC5C,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,QAAQ;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,OAAO;QACL,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;IACpC,CAAC;IAED,8EAA8E;IAC9E,kBAAkB;IAClB,8EAA8E;IAE9E;;OAEG;IACH,KAAK,CAAC,UAAU;QACd,OAAO,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,CAAC;IACzC,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,SAAS,CAAC,OAAe,EAAE,OAAgC;QAC/D,8DAA8D;QAC9D,KAAK,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAE7B,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAC/C,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC;YACpC,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE;SAChC,CAAC,CAAC;QAEH,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC;QAExD,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC;YAC1B,EAAE,EAAE,OAAO;YACX,IAAI,EAAE,SAAS,EAAE,IAAI,IAAI,OAAO;YAChC,IAAI,EAAE,SAAS,EAAE,IAAI,IAAI,QAAQ;YACjC,WAAW,EAAE,SAAS;YACtB,SAAS,EAAE,OAAO,EAAE,SAAS;YAC7B,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO;YAC7B,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;SAC1C,CAAC,CAAC;QAEH,uBAAuB;QACvB,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAEnC,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,WAAW,CAAC,IAAa,EAAE,OAAgC;QAC/D,8DAA8D;QAC9D,KAAK,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAE7B,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAC;QACnC,MAAM,SAAS,GAAG,IAAI,IAAI,OAAO,CAAC;QAClC,MAAM,WAAW,GAAkB,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;QAE7D,2EAA2E;QAC3E,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,CAAC;QAE7E,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC;YAC1B,EAAE,EAAE,OAAO;YACX,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,OAAO;YACb,WAAW;YACX,SAAS,EAAE,OAAO,EAAE,SAAS;YAC7B,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO;YAC7B,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;SAC1C,CAAC,CAAC;QAEH,uBAAuB;QACvB,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAEnC,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,WAAW,CAAC,OAAe;QAC/B,8CAA8C;QAC9C,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC;QAClE,0DAA0D;IAC5D,CAAC;IAED,8EAA8E;IAC9E,kBAAkB;IAClB,8EAA8E;IAE9E;;OAEG;IACH,KAAK,CAAC,UAAU;QACd,OAAO,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,KAAa;QAC5B,OAAO,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAC9C,CAAC;IAED,8EAA8E;IAC9E,oDAAoD;IACpD,8EAA8E;IAE9E,IAAY,WAAW;QACrB,OAAO,IAAI,WAAW,CAAC;YACrB,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK;YACzB,aAAa,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM;YAC9C,WAAW,EAAE,IAAI,CAAC,WAAW;SAC9B,CAAC,CAAC;IACL,CAAC;IAED,8EAA8E;IAC9E,0CAA0C;IAC1C,8EAA8E;IAE9E;;;;OAIG;IACK,KAAK,CAAC,gBAAgB;QAC5B,IAAI,IAAI,CAAC,mBAAmB;YAAE,OAAO;QAErC,IAAI,CAAC,mBAAmB,GAAG,IAAI,yBAAyB,CAAC;YACvD,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO;YAC7B,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;YACjD,wBAAwB,EAAE,CAAC,KAAsB,EAAE,EAAE;gBACnD,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;YAC7C,CAAC;YACD,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;gBACjB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC;YAC5C,CAAC;SACF,CAAC,CAAC;QAEH,MAAM,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,CAAC;IAC7C,CAAC;IAED;;;OAGG;IACK,WAAW;QACjB,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC7B,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,CAAC;YACnC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAClC,CAAC;IACH,CAAC;IAED,8EAA8E;IAC9E,YAAY;IACZ,8EAA8E;IAE9E;;;;OAIG;IACH,MAAM,CAAC,UAAU;QACf,OAAO,gBAAgB,EAAE,CAAC;IAC5B,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,OAAO,CACX,KAAa,EACb,SAAmC;QAEnC,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,CAAI,KAAK,EAAE,SAAS,CAAC,CAAC;IACvD,CAAC;IAED,8EAA8E;IAC9E,mCAAmC;IACnC,8EAA8E;IAEtE,aAAa,CAAC,OAAe,EAAE,KAAgB;QACrD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACtC,CAAC;IAEO,eAAe,CAAC,OAAe;QACrC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;IAED,8EAA8E;IAC9E,mCAAmC;IACnC,8EAA8E;IAE9E;;;OAGG;IACK,iBAAiB,CAAC,KAAkB;QAC1C,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,eAAe;gBAClB,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;gBACtE,MAAM;YAER,KAAK,eAAe;gBAClB,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;gBACzC,MAAM;YAER,KAAK,eAAe;gBAClB,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;gBACtE,MAAM;QACV,CAAC;IACH,CAAC;CACF"}
|
package/dist/graphql.d.ts
CHANGED
|
@@ -3,7 +3,6 @@ import type { AuthManager } from './auth.js';
|
|
|
3
3
|
export interface GraphQLClientConfig {
|
|
4
4
|
graphqlUrl: string;
|
|
5
5
|
authManager: AuthManager;
|
|
6
|
-
getConnectionId: () => string;
|
|
7
6
|
}
|
|
8
7
|
export declare class GraphQLClient {
|
|
9
8
|
private config;
|
|
@@ -11,21 +10,21 @@ export declare class GraphQLClient {
|
|
|
11
10
|
private get graphqlUrl();
|
|
12
11
|
listSpaces(): Promise<RoolSpaceInfo[]>;
|
|
13
12
|
getSpace(spaceId: string): Promise<RoolSpaceData>;
|
|
14
|
-
createSpace(spaceId: string, name: string): Promise<void>;
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
setSpaceMeta(spaceId: string, meta: Record<string, unknown
|
|
19
|
-
link(spaceId: string, source: string, target: string, type: string): Promise<void>;
|
|
20
|
-
unlink(spaceId: string, source: string, target: string): Promise<void>;
|
|
21
|
-
deleteObjects(spaceId: string, ids: string[]): Promise<void>;
|
|
22
|
-
createObject(spaceId: string, data: Record<string, unknown>, prompt?: string): Promise<string>;
|
|
23
|
-
updateObject(spaceId: string, id: string, data?: Record<string, unknown>, prompt?: string): Promise<string>;
|
|
24
|
-
findObjects(spaceId: string, options: FindObjectsOptions): Promise<{
|
|
13
|
+
createSpace(spaceId: string, name: string, sessionId: string): Promise<void>;
|
|
14
|
+
deleteSpace(spaceId: string, sessionId: string): Promise<void>;
|
|
15
|
+
renameSpace(spaceId: string, name: string, sessionId: string): Promise<void>;
|
|
16
|
+
setSpace(spaceId: string, space: RoolSpaceData, sessionId: string): Promise<void>;
|
|
17
|
+
setSpaceMeta(spaceId: string, meta: Record<string, unknown>, sessionId: string): Promise<void>;
|
|
18
|
+
link(spaceId: string, source: string, target: string, type: string, sessionId: string): Promise<void>;
|
|
19
|
+
unlink(spaceId: string, source: string, target: string, sessionId: string): Promise<void>;
|
|
20
|
+
deleteObjects(spaceId: string, ids: string[], sessionId: string): Promise<void>;
|
|
21
|
+
createObject(spaceId: string, data: Record<string, unknown>, sessionId: string, prompt?: string): Promise<string>;
|
|
22
|
+
updateObject(spaceId: string, id: string, sessionId: string, data?: Record<string, unknown>, prompt?: string): Promise<string>;
|
|
23
|
+
findObjects(spaceId: string, options: FindObjectsOptions, sessionId: string): Promise<{
|
|
25
24
|
objects: RoolObject[];
|
|
26
25
|
message: string;
|
|
27
26
|
}>;
|
|
28
|
-
prompt(spaceId: string, prompt: string, options?: PromptOptions): Promise<string | null>;
|
|
27
|
+
prompt(spaceId: string, prompt: string, sessionId: string, options?: PromptOptions): Promise<string | null>;
|
|
29
28
|
getAccount(): Promise<Account>;
|
|
30
29
|
searchUser(email: string): Promise<UserResult | null>;
|
|
31
30
|
listSpaceUsers(spaceId: string): Promise<RoolUser[]>;
|
package/dist/graphql.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graphql.d.ts","sourceRoot":"","sources":["../src/graphql.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,aAAa,EACb,kBAAkB,EAClB,aAAa,EACb,aAAa,EACb,QAAQ,EACR,OAAO,EACP,UAAU,EACV,UAAU,EACX,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAI7C,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"graphql.d.ts","sourceRoot":"","sources":["../src/graphql.ts"],"names":[],"mappings":"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"}
|