@rool-dev/sdk 0.12.5 → 2.0.0-dev.4adc2c2
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 +434 -786
- package/dist/agents.d.ts +130 -0
- package/dist/agents.d.ts.map +1 -0
- package/dist/agents.js +348 -0
- package/dist/agents.js.map +1 -0
- package/dist/auth-base.d.ts +43 -88
- package/dist/auth-base.d.ts.map +1 -1
- package/dist/auth-base.js +178 -302
- package/dist/auth-base.js.map +1 -1
- package/dist/auth-browser.d.ts +7 -25
- package/dist/auth-browser.d.ts.map +1 -1
- package/dist/auth-browser.js +45 -82
- package/dist/auth-browser.js.map +1 -1
- package/dist/auth-native.d.ts +9 -56
- package/dist/auth-native.d.ts.map +1 -1
- package/dist/auth-native.js +88 -177
- package/dist/auth-native.js.map +1 -1
- package/dist/auth-node.d.ts +32 -36
- package/dist/auth-node.d.ts.map +1 -1
- package/dist/auth-node.js +338 -265
- package/dist/auth-node.js.map +1 -1
- package/dist/auth-url.d.ts +6 -0
- package/dist/auth-url.d.ts.map +1 -0
- package/dist/auth-url.js +30 -0
- package/dist/auth-url.js.map +1 -0
- package/dist/client.d.ts +35 -290
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +275 -637
- package/dist/client.js.map +1 -1
- package/dist/events.d.ts +40 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +175 -0
- package/dist/events.js.map +1 -0
- package/dist/files.d.ts +170 -0
- package/dist/files.d.ts.map +1 -0
- package/dist/files.js +846 -0
- package/dist/files.js.map +1 -0
- package/dist/index.d.ts +16 -19
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -20
- package/dist/index.js.map +1 -1
- package/dist/machine.d.ts +49 -0
- package/dist/machine.d.ts.map +1 -0
- package/dist/machine.js +142 -0
- package/dist/machine.js.map +1 -0
- package/dist/problem.d.ts +11 -0
- package/dist/problem.d.ts.map +1 -0
- package/dist/problem.js +20 -0
- package/dist/problem.js.map +1 -0
- package/dist/structured.d.ts +84 -0
- package/dist/structured.d.ts.map +1 -0
- package/dist/structured.js +405 -0
- package/dist/structured.js.map +1 -0
- package/dist/types.d.ts +119 -520
- package/dist/types.d.ts.map +1 -1
- package/package.json +11 -16
- package/dist/auth.d.ts +0 -99
- package/dist/auth.d.ts.map +0 -1
- package/dist/auth.js +0 -217
- package/dist/auth.js.map +0 -1
- package/dist/client-info.d.ts +0 -18
- package/dist/client-info.d.ts.map +0 -1
- package/dist/client-info.js +0 -25
- package/dist/client-info.js.map +0 -1
- package/dist/event-emitter.d.ts +0 -45
- package/dist/event-emitter.d.ts.map +0 -1
- package/dist/event-emitter.js +0 -86
- package/dist/event-emitter.js.map +0 -1
- package/dist/graphql.d.ts +0 -90
- package/dist/graphql.d.ts.map +0 -1
- package/dist/graphql.js +0 -471
- package/dist/graphql.js.map +0 -1
- package/dist/logger.d.ts +0 -13
- package/dist/logger.d.ts.map +0 -1
- package/dist/logger.js +0 -17
- package/dist/logger.js.map +0 -1
- package/dist/path.d.ts +0 -6
- package/dist/path.d.ts.map +0 -1
- package/dist/path.js +0 -47
- package/dist/path.js.map +0 -1
- package/dist/reroute.d.ts +0 -22
- package/dist/reroute.d.ts.map +0 -1
- package/dist/reroute.js +0 -70
- package/dist/reroute.js.map +0 -1
- package/dist/rest.d.ts +0 -54
- package/dist/rest.d.ts.map +0 -1
- package/dist/rest.js +0 -171
- package/dist/rest.js.map +0 -1
- package/dist/router.d.ts +0 -20
- package/dist/router.d.ts.map +0 -1
- package/dist/router.js +0 -54
- package/dist/router.js.map +0 -1
- package/dist/space-session.d.ts +0 -30
- package/dist/space-session.d.ts.map +0 -1
- package/dist/space-session.js +0 -83
- package/dist/space-session.js.map +0 -1
- package/dist/space.d.ts +0 -161
- package/dist/space.d.ts.map +0 -1
- package/dist/space.js +0 -618
- package/dist/space.js.map +0 -1
- package/dist/subscription.d.ts +0 -36
- package/dist/subscription.d.ts.map +0 -1
- package/dist/subscription.js +0 -419
- package/dist/subscription.js.map +0 -1
- package/dist/webdav.d.ts +0 -171
- package/dist/webdav.d.ts.map +0 -1
- package/dist/webdav.js +0 -481
- package/dist/webdav.js.map +0 -1
package/dist/space.js
DELETED
|
@@ -1,618 +0,0 @@
|
|
|
1
|
-
import { EventEmitter } from './event-emitter.js';
|
|
2
|
-
import { SpaceSubscriptionManager } from './subscription.js';
|
|
3
|
-
import { ConversationHandle, generateEntityId } from './space-session.js';
|
|
4
|
-
import { RoolWebDAV, WebDAVError } from './webdav.js';
|
|
5
|
-
import { isObjectPath, machinePath, machineUri } from './path.js';
|
|
6
|
-
const GET_OBJECTS_CHUNK_SIZE = 500;
|
|
7
|
-
function objectPath(input) {
|
|
8
|
-
const path = machinePath(input);
|
|
9
|
-
if (!isObjectPath(path)) {
|
|
10
|
-
throw new Error(`Object path must be /space/<collection>/<name>.json without dotfiles: ${input}`);
|
|
11
|
-
}
|
|
12
|
-
return path;
|
|
13
|
-
}
|
|
14
|
-
function collectionPath(name) {
|
|
15
|
-
return machinePath(`/space/${name}`);
|
|
16
|
-
}
|
|
17
|
-
function schemaPath(name) {
|
|
18
|
-
return `${collectionPath(name)}/.schema.json`;
|
|
19
|
-
}
|
|
20
|
-
function objectFromBody(path, body) {
|
|
21
|
-
return { path, body };
|
|
22
|
-
}
|
|
23
|
-
function jsonObject(value, label) {
|
|
24
|
-
if (!value || typeof value !== 'object' || Array.isArray(value)) {
|
|
25
|
-
throw new Error(`${label} must be a JSON object`);
|
|
26
|
-
}
|
|
27
|
-
return value;
|
|
28
|
-
}
|
|
29
|
-
function patchBody(current, patch) {
|
|
30
|
-
const next = { ...current };
|
|
31
|
-
for (const [key, value] of Object.entries(patch)) {
|
|
32
|
-
if (value === null || value === undefined)
|
|
33
|
-
delete next[key];
|
|
34
|
-
else
|
|
35
|
-
next[key] = value;
|
|
36
|
-
}
|
|
37
|
-
return next;
|
|
38
|
-
}
|
|
39
|
-
function collectionDef(input, options) {
|
|
40
|
-
const base = Array.isArray(input)
|
|
41
|
-
? { fields: input }
|
|
42
|
-
: { fields: input.fields, schemaOrgType: input.schemaOrgType };
|
|
43
|
-
const schemaOrgType = options?.schemaOrgType ?? base.schemaOrgType;
|
|
44
|
-
return schemaOrgType ? { fields: base.fields, schemaOrgType } : { fields: base.fields };
|
|
45
|
-
}
|
|
46
|
-
function attachmentBody(file) {
|
|
47
|
-
if (isFile(file)) {
|
|
48
|
-
return {
|
|
49
|
-
filename: safeAttachmentFilename(file.name, file.type),
|
|
50
|
-
contentType: file.type || 'application/octet-stream',
|
|
51
|
-
body: file,
|
|
52
|
-
};
|
|
53
|
-
}
|
|
54
|
-
if (isBlob(file)) {
|
|
55
|
-
const contentType = file.type || 'application/octet-stream';
|
|
56
|
-
return {
|
|
57
|
-
filename: safeAttachmentFilename('attachment', contentType),
|
|
58
|
-
contentType,
|
|
59
|
-
body: file,
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
return {
|
|
63
|
-
filename: safeAttachmentFilename(file.filename ?? 'attachment', file.contentType),
|
|
64
|
-
contentType: file.contentType,
|
|
65
|
-
body: base64Body(file.data),
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
function isFile(value) {
|
|
69
|
-
return typeof File !== 'undefined' && value instanceof File;
|
|
70
|
-
}
|
|
71
|
-
function isBlob(value) {
|
|
72
|
-
return typeof Blob !== 'undefined' && value instanceof Blob;
|
|
73
|
-
}
|
|
74
|
-
function safeAttachmentFilename(name, contentType) {
|
|
75
|
-
const fallback = `attachment.${extensionForContentType(contentType)}`;
|
|
76
|
-
const leaf = name.split(/[/\\]/).pop() || fallback;
|
|
77
|
-
const cleaned = leaf.replace(/[\x00-\x1f\x7f]/g, '').replace(/\s+/g, '_');
|
|
78
|
-
return cleaned.replace(/[^A-Za-z0-9._-]/g, '_').replace(/^\.+$/, '') || fallback;
|
|
79
|
-
}
|
|
80
|
-
function extensionForContentType(contentType) {
|
|
81
|
-
if (contentType === 'image/png')
|
|
82
|
-
return 'png';
|
|
83
|
-
if (contentType === 'image/jpeg')
|
|
84
|
-
return 'jpg';
|
|
85
|
-
if (contentType === 'image/gif')
|
|
86
|
-
return 'gif';
|
|
87
|
-
if (contentType === 'image/webp')
|
|
88
|
-
return 'webp';
|
|
89
|
-
if (contentType === 'image/svg+xml')
|
|
90
|
-
return 'svg';
|
|
91
|
-
if (contentType === 'application/pdf')
|
|
92
|
-
return 'pdf';
|
|
93
|
-
if (contentType === 'text/markdown')
|
|
94
|
-
return 'md';
|
|
95
|
-
if (contentType === 'text/plain')
|
|
96
|
-
return 'txt';
|
|
97
|
-
if (contentType === 'text/csv')
|
|
98
|
-
return 'csv';
|
|
99
|
-
if (contentType === 'text/html')
|
|
100
|
-
return 'html';
|
|
101
|
-
if (contentType === 'application/json')
|
|
102
|
-
return 'json';
|
|
103
|
-
if (contentType === 'application/xml')
|
|
104
|
-
return 'xml';
|
|
105
|
-
return 'bin';
|
|
106
|
-
}
|
|
107
|
-
function base64Body(data) {
|
|
108
|
-
const clean = data.includes(',') ? data.slice(data.indexOf(',') + 1) : data;
|
|
109
|
-
if (typeof Buffer !== 'undefined') {
|
|
110
|
-
const buffer = Buffer.from(clean, 'base64');
|
|
111
|
-
return buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength);
|
|
112
|
-
}
|
|
113
|
-
const binary = atob(clean);
|
|
114
|
-
const bytes = new Uint8Array(binary.length);
|
|
115
|
-
for (let i = 0; i < binary.length; i++)
|
|
116
|
-
bytes[i] = binary.charCodeAt(i);
|
|
117
|
-
return bytes.buffer;
|
|
118
|
-
}
|
|
119
|
-
/** An imperative API handle for one open space. */
|
|
120
|
-
export class RoolSpace extends EventEmitter {
|
|
121
|
-
_id;
|
|
122
|
-
_openSpaceResult;
|
|
123
|
-
_connectionState = 'reconnecting';
|
|
124
|
-
_closed = false;
|
|
125
|
-
_graphqlClient;
|
|
126
|
-
_restClient;
|
|
127
|
-
_webdav;
|
|
128
|
-
_logger;
|
|
129
|
-
authManager;
|
|
130
|
-
router;
|
|
131
|
-
_route;
|
|
132
|
-
onCloseCallback;
|
|
133
|
-
clientInfo;
|
|
134
|
-
subscriptionManager = null;
|
|
135
|
-
constructor(config) {
|
|
136
|
-
super();
|
|
137
|
-
this._id = config.id;
|
|
138
|
-
this._openSpaceResult = config.openSpaceResult;
|
|
139
|
-
this._graphqlClient = config.graphqlClient;
|
|
140
|
-
this._restClient = config.restClient;
|
|
141
|
-
this._logger = config.logger;
|
|
142
|
-
this._emitterLogger = config.logger;
|
|
143
|
-
this.authManager = config.authManager;
|
|
144
|
-
this.router = config.router;
|
|
145
|
-
this._route = config.initialRoute;
|
|
146
|
-
this.onCloseCallback = config.onClose;
|
|
147
|
-
this.clientInfo = config.clientInfo;
|
|
148
|
-
this._webdav = new RoolWebDAV({
|
|
149
|
-
webdavUrl: config.initialRoute.server,
|
|
150
|
-
spaceId: config.id,
|
|
151
|
-
authManager: config.authManager,
|
|
152
|
-
clientInfo: config.clientInfo,
|
|
153
|
-
onRefused: async () => {
|
|
154
|
-
await this.reroute();
|
|
155
|
-
return this._route.server;
|
|
156
|
-
},
|
|
157
|
-
});
|
|
158
|
-
this._graphqlClient.setOnRefused(() => this.reroute());
|
|
159
|
-
this._restClient.setOnRefused(async () => {
|
|
160
|
-
await this.reroute();
|
|
161
|
-
return this._route.server;
|
|
162
|
-
});
|
|
163
|
-
this.startSubscription();
|
|
164
|
-
}
|
|
165
|
-
get id() { return this._id; }
|
|
166
|
-
get name() { return this._openSpaceResult.name; }
|
|
167
|
-
get role() { return this._openSpaceResult.role; }
|
|
168
|
-
get isReadOnly() { return this.role === 'viewer'; }
|
|
169
|
-
get memberCount() { return this._openSpaceResult.memberCount; }
|
|
170
|
-
get openSpaceResult() { return this._openSpaceResult; }
|
|
171
|
-
get connectionState() { return this._connectionState; }
|
|
172
|
-
get route() { return this._route; }
|
|
173
|
-
get webdav() { return this._webdav; }
|
|
174
|
-
async refresh() {
|
|
175
|
-
this._openSpaceResult = await this._graphqlClient.openSpace(this._id);
|
|
176
|
-
return this._openSpaceResult;
|
|
177
|
-
}
|
|
178
|
-
async listConversations() {
|
|
179
|
-
return (await this.refresh()).conversationMeta;
|
|
180
|
-
}
|
|
181
|
-
conversation(conversationId) {
|
|
182
|
-
if (!conversationId || conversationId.length > 32 || !/^[a-zA-Z0-9_-]+$/.test(conversationId)) {
|
|
183
|
-
throw new Error('conversationId must be 1–32 characters containing only alphanumeric characters, hyphens, and underscores');
|
|
184
|
-
}
|
|
185
|
-
return new ConversationHandle(this, conversationId);
|
|
186
|
-
}
|
|
187
|
-
async getConversation(conversationId) {
|
|
188
|
-
return this._graphqlClient.getConversation(this._id, conversationId);
|
|
189
|
-
}
|
|
190
|
-
async deleteConversation(conversationId) {
|
|
191
|
-
await this._graphqlClient.deleteConversation(this._id, conversationId);
|
|
192
|
-
}
|
|
193
|
-
async createConversation(agent, visibility) {
|
|
194
|
-
return this._graphqlClient.createConversation(this._id, agent, visibility);
|
|
195
|
-
}
|
|
196
|
-
async listAgents() {
|
|
197
|
-
return this._graphqlClient.listAgents(this._id);
|
|
198
|
-
}
|
|
199
|
-
async deleteAgent(agent) {
|
|
200
|
-
await this._graphqlClient.deleteAgent(this._id, agent);
|
|
201
|
-
}
|
|
202
|
-
async canUndo() {
|
|
203
|
-
return (await this._graphqlClient.checkpointStatus(this._id)).canUndo;
|
|
204
|
-
}
|
|
205
|
-
async canRedo() {
|
|
206
|
-
return (await this._graphqlClient.checkpointStatus(this._id)).canRedo;
|
|
207
|
-
}
|
|
208
|
-
async undo() {
|
|
209
|
-
return (await this._graphqlClient.undo(this._id)).success;
|
|
210
|
-
}
|
|
211
|
-
async redo() {
|
|
212
|
-
return (await this._graphqlClient.redo(this._id)).success;
|
|
213
|
-
}
|
|
214
|
-
davHeaders(interactionId) {
|
|
215
|
-
const headers = new Headers();
|
|
216
|
-
if (interactionId)
|
|
217
|
-
headers.set('X-Rool-Interaction-Id', interactionId);
|
|
218
|
-
return headers;
|
|
219
|
-
}
|
|
220
|
-
async readObject(path) {
|
|
221
|
-
const canonical = objectPath(path);
|
|
222
|
-
try {
|
|
223
|
-
const response = await this._webdav.get(canonical);
|
|
224
|
-
const body = jsonObject(await response.json(), `Object ${canonical}`);
|
|
225
|
-
return { object: objectFromBody(canonical, body), etag: response.headers.get('ETag') };
|
|
226
|
-
}
|
|
227
|
-
catch (error) {
|
|
228
|
-
if (error instanceof WebDAVError && error.status === 404)
|
|
229
|
-
return undefined;
|
|
230
|
-
if (error instanceof SyntaxError)
|
|
231
|
-
throw new Error(`Object ${canonical} did not contain valid JSON`);
|
|
232
|
-
throw error;
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
/** Get an object JSON file by machine path. Fetches from the server on each call. */
|
|
236
|
-
async getObject(path) {
|
|
237
|
-
return (await this.readObject(path))?.object;
|
|
238
|
-
}
|
|
239
|
-
/** Get object JSON files by machine path in bulk. Duplicate paths are fetched once. */
|
|
240
|
-
async getObjects(paths) {
|
|
241
|
-
const canonical = [];
|
|
242
|
-
const seen = new Set();
|
|
243
|
-
for (const path of paths) {
|
|
244
|
-
const normalized = objectPath(path);
|
|
245
|
-
if (seen.has(normalized))
|
|
246
|
-
continue;
|
|
247
|
-
seen.add(normalized);
|
|
248
|
-
canonical.push(normalized);
|
|
249
|
-
}
|
|
250
|
-
const result = { objects: [], missing: [] };
|
|
251
|
-
for (let i = 0; i < canonical.length; i += GET_OBJECTS_CHUNK_SIZE) {
|
|
252
|
-
const chunk = canonical.slice(i, i + GET_OBJECTS_CHUNK_SIZE);
|
|
253
|
-
const partial = await this._restClient.getObjects(this._id, chunk);
|
|
254
|
-
result.objects.push(...partial.objects);
|
|
255
|
-
result.missing.push(...partial.missing);
|
|
256
|
-
}
|
|
257
|
-
return result;
|
|
258
|
-
}
|
|
259
|
-
/** Create or replace an object JSON file. */
|
|
260
|
-
async putObject(path, body) {
|
|
261
|
-
const canonical = objectPath(path);
|
|
262
|
-
const optimistic = objectFromBody(canonical, body);
|
|
263
|
-
try {
|
|
264
|
-
const interactionId = generateEntityId();
|
|
265
|
-
await this._webdav.put(canonical, JSON.stringify(body), {
|
|
266
|
-
contentType: 'application/json',
|
|
267
|
-
headers: this.davHeaders(interactionId),
|
|
268
|
-
});
|
|
269
|
-
const fresh = await this.getObject(canonical) ?? optimistic;
|
|
270
|
-
return { object: fresh, message: `Put ${canonical}` };
|
|
271
|
-
}
|
|
272
|
-
catch (error) {
|
|
273
|
-
this._logger.error('[RoolSpace] Failed to put object:', error);
|
|
274
|
-
this.emit('syncError', error instanceof Error ? error : new Error(String(error)));
|
|
275
|
-
throw error;
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
|
-
/** Patch an existing object JSON file. */
|
|
279
|
-
async patchObject(path, options) {
|
|
280
|
-
const canonical = objectPath(path);
|
|
281
|
-
const data = options.data ?? {};
|
|
282
|
-
const current = await this.readObject(canonical);
|
|
283
|
-
if (!current)
|
|
284
|
-
throw new Error(`Object ${canonical} not found`);
|
|
285
|
-
const body = patchBody(current.object.body, data);
|
|
286
|
-
const optimistic = objectFromBody(canonical, body);
|
|
287
|
-
try {
|
|
288
|
-
const interactionId = generateEntityId();
|
|
289
|
-
await this._webdav.put(canonical, JSON.stringify(body), {
|
|
290
|
-
contentType: 'application/json',
|
|
291
|
-
ifMatch: current.etag ?? undefined,
|
|
292
|
-
headers: this.davHeaders(interactionId),
|
|
293
|
-
});
|
|
294
|
-
const fresh = await this.getObject(canonical) ?? optimistic;
|
|
295
|
-
return { object: fresh, message: `Patched ${canonical}` };
|
|
296
|
-
}
|
|
297
|
-
catch (error) {
|
|
298
|
-
this._logger.error('[RoolSpace] Failed to patch object:', error);
|
|
299
|
-
this.emit('syncError', error instanceof Error ? error : new Error(String(error)));
|
|
300
|
-
throw error;
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
|
-
/** Move (rename/relocate) an object. */
|
|
304
|
-
async moveObject(from, to, options) {
|
|
305
|
-
const fromPath = objectPath(from);
|
|
306
|
-
const toPath = objectPath(to);
|
|
307
|
-
const optimistic = objectFromBody(toPath, options?.body ?? {});
|
|
308
|
-
try {
|
|
309
|
-
const interactionId = generateEntityId();
|
|
310
|
-
await this._webdav.move(fromPath, toPath, {
|
|
311
|
-
headers: this.davHeaders(interactionId),
|
|
312
|
-
});
|
|
313
|
-
if (options?.body) {
|
|
314
|
-
await this._webdav.put(toPath, JSON.stringify(options.body), {
|
|
315
|
-
contentType: 'application/json',
|
|
316
|
-
headers: this.davHeaders(interactionId),
|
|
317
|
-
});
|
|
318
|
-
}
|
|
319
|
-
const fresh = await this.getObject(toPath) ?? optimistic;
|
|
320
|
-
return { object: fresh, message: `Moved ${fromPath} to ${toPath}` };
|
|
321
|
-
}
|
|
322
|
-
catch (error) {
|
|
323
|
-
this._logger.error('[RoolSpace] Failed to move object:', error);
|
|
324
|
-
this.emit('syncError', error instanceof Error ? error : new Error(String(error)));
|
|
325
|
-
throw error;
|
|
326
|
-
}
|
|
327
|
-
}
|
|
328
|
-
/** Delete object JSON files by path. */
|
|
329
|
-
async deleteObjects(paths) {
|
|
330
|
-
if (paths.length === 0)
|
|
331
|
-
return;
|
|
332
|
-
const canonical = paths.map(objectPath);
|
|
333
|
-
try {
|
|
334
|
-
const interactionId = generateEntityId();
|
|
335
|
-
for (const path of canonical) {
|
|
336
|
-
await this._webdav.delete(path, {
|
|
337
|
-
headers: this.davHeaders(interactionId),
|
|
338
|
-
});
|
|
339
|
-
}
|
|
340
|
-
}
|
|
341
|
-
catch (error) {
|
|
342
|
-
this._logger.error('[RoolSpace] Failed to delete paths:', error);
|
|
343
|
-
this.emit('syncError', error instanceof Error ? error : new Error(String(error)));
|
|
344
|
-
throw error;
|
|
345
|
-
}
|
|
346
|
-
}
|
|
347
|
-
/**
|
|
348
|
-
* Read space metadata from `/space/.meta.json`. Returns `{}` when the space has
|
|
349
|
-
* no metadata file yet. Stateless — callers (e.g. a reactive wrapper) cache and
|
|
350
|
-
* re-fetch this on their own schedule, typically when a file-tree sync reports
|
|
351
|
-
* the node changed.
|
|
352
|
-
*/
|
|
353
|
-
async readMeta() {
|
|
354
|
-
try {
|
|
355
|
-
const response = await this._webdav.get('/space/.meta.json');
|
|
356
|
-
return jsonObject(await response.json(), 'space meta');
|
|
357
|
-
}
|
|
358
|
-
catch (error) {
|
|
359
|
-
if (error instanceof WebDAVError && error.status === 404)
|
|
360
|
-
return {};
|
|
361
|
-
throw error;
|
|
362
|
-
}
|
|
363
|
-
}
|
|
364
|
-
/**
|
|
365
|
-
* Write the full metadata blob to `/space/.meta.json`, attributed to a
|
|
366
|
-
* conversation. Callers compose the blob (e.g. read-merge-write) — this does no
|
|
367
|
-
* merging.
|
|
368
|
-
*/
|
|
369
|
-
async writeMeta(meta) {
|
|
370
|
-
await this._webdav.put('/space/.meta.json', JSON.stringify(meta), {
|
|
371
|
-
contentType: 'application/json',
|
|
372
|
-
headers: this.davHeaders(generateEntityId()),
|
|
373
|
-
});
|
|
374
|
-
}
|
|
375
|
-
/**
|
|
376
|
-
* Read the collection schema: one `/space/<name>/.schema.json` per collection
|
|
377
|
-
* directory under `/space`. Returns `{}` for a space with no collections.
|
|
378
|
-
* Stateless — reactive callers re-fetch when a `.schema.json` node changes.
|
|
379
|
-
*/
|
|
380
|
-
async readSchema() {
|
|
381
|
-
const listing = await this._webdav.propfind('/space', { depth: '1', props: ['resourcetype'] });
|
|
382
|
-
const collections = listing.responses
|
|
383
|
-
.filter((r) => r.isCollection && r.path !== '/space')
|
|
384
|
-
.map((r) => r.path.split('/').pop());
|
|
385
|
-
const entries = await Promise.all(collections.map(async (name) => {
|
|
386
|
-
try {
|
|
387
|
-
const response = await this._webdav.get(`/space/${name}/.schema.json`);
|
|
388
|
-
return [name, jsonObject(await response.json(), `schema ${name}`)];
|
|
389
|
-
}
|
|
390
|
-
catch (error) {
|
|
391
|
-
if (error instanceof WebDAVError && error.status === 404)
|
|
392
|
-
return null;
|
|
393
|
-
throw error;
|
|
394
|
-
}
|
|
395
|
-
}));
|
|
396
|
-
const schema = {};
|
|
397
|
-
for (const entry of entries)
|
|
398
|
-
if (entry)
|
|
399
|
-
schema[entry[0]] = entry[1];
|
|
400
|
-
return schema;
|
|
401
|
-
}
|
|
402
|
-
/** Create a new collection (MKCOL + schema JSON). */
|
|
403
|
-
async createCollection(name, fields, options) {
|
|
404
|
-
const def = collectionDef(fields, options);
|
|
405
|
-
await this._webdav.mkcol(collectionPath(name), { headers: this.davHeaders(generateEntityId()) });
|
|
406
|
-
await this._webdav.put(schemaPath(name), JSON.stringify(def), {
|
|
407
|
-
contentType: 'application/json',
|
|
408
|
-
headers: this.davHeaders(generateEntityId()),
|
|
409
|
-
});
|
|
410
|
-
return def;
|
|
411
|
-
}
|
|
412
|
-
/** Alter an existing collection's schema JSON. */
|
|
413
|
-
async alterCollection(name, fields, options) {
|
|
414
|
-
const def = collectionDef(fields, options);
|
|
415
|
-
await this._webdav.put(schemaPath(name), JSON.stringify(def), {
|
|
416
|
-
contentType: 'application/json',
|
|
417
|
-
headers: this.davHeaders(generateEntityId()),
|
|
418
|
-
});
|
|
419
|
-
return def;
|
|
420
|
-
}
|
|
421
|
-
/** Drop a collection (DELETE). */
|
|
422
|
-
async dropCollection(name) {
|
|
423
|
-
await this._webdav.delete(collectionPath(name), { collection: true, headers: this.davHeaders(generateEntityId()) });
|
|
424
|
-
}
|
|
425
|
-
/** @internal */
|
|
426
|
-
async _updateConversation(conversationId, options) {
|
|
427
|
-
await this._graphqlClient.updateConversation(this._id, conversationId, options);
|
|
428
|
-
}
|
|
429
|
-
/** @internal */
|
|
430
|
-
async _prompt(prompt, conversationId, options) {
|
|
431
|
-
const { attachments, signal, interactionId = generateEntityId(), parentInteractionId = null, ...rest } = options ?? {};
|
|
432
|
-
let attachmentRefs;
|
|
433
|
-
if (attachments?.length) {
|
|
434
|
-
attachmentRefs = await Promise.all(attachments.map(async (attachment) => {
|
|
435
|
-
const path = typeof attachment === 'string' ? machinePath(attachment) : await this.uploadAttachment(attachment, conversationId);
|
|
436
|
-
return machineUri(path);
|
|
437
|
-
}));
|
|
438
|
-
}
|
|
439
|
-
let onAbort;
|
|
440
|
-
if (signal) {
|
|
441
|
-
if (signal.aborted) {
|
|
442
|
-
this.stopConversation(conversationId).catch(() => { });
|
|
443
|
-
}
|
|
444
|
-
else {
|
|
445
|
-
onAbort = () => {
|
|
446
|
-
this.stopConversation(conversationId).catch(() => { });
|
|
447
|
-
};
|
|
448
|
-
signal.addEventListener('abort', onAbort, { once: true });
|
|
449
|
-
}
|
|
450
|
-
}
|
|
451
|
-
let result;
|
|
452
|
-
try {
|
|
453
|
-
result = await this._graphqlClient.prompt(this._id, prompt, conversationId, {
|
|
454
|
-
...rest,
|
|
455
|
-
attachmentRefs,
|
|
456
|
-
interactionId,
|
|
457
|
-
parentInteractionId,
|
|
458
|
-
});
|
|
459
|
-
}
|
|
460
|
-
finally {
|
|
461
|
-
if (onAbort)
|
|
462
|
-
signal.removeEventListener('abort', onAbort);
|
|
463
|
-
}
|
|
464
|
-
const objects = [];
|
|
465
|
-
const fetched = await Promise.all(result.modifiedObjectPaths.map((path) => this.getObject(path)));
|
|
466
|
-
for (const object of fetched) {
|
|
467
|
-
if (object)
|
|
468
|
-
objects.push(object);
|
|
469
|
-
}
|
|
470
|
-
return {
|
|
471
|
-
message: result.message,
|
|
472
|
-
objects,
|
|
473
|
-
creditsUsed: result.creditsUsed,
|
|
474
|
-
};
|
|
475
|
-
}
|
|
476
|
-
/**
|
|
477
|
-
* Stop whatever is running in a conversation. A conversation processes one
|
|
478
|
-
* run at a time, so no interaction handle is needed.
|
|
479
|
-
*
|
|
480
|
-
* Returns whether anything was actually running.
|
|
481
|
-
*/
|
|
482
|
-
async stopConversation(conversationId) {
|
|
483
|
-
return this._graphqlClient.stopConversation(this._id, conversationId);
|
|
484
|
-
}
|
|
485
|
-
/**
|
|
486
|
-
* Fetch an external URL via the server proxy, bypassing CORS restrictions.
|
|
487
|
-
*/
|
|
488
|
-
async fetch(url, init) {
|
|
489
|
-
return this._restClient.proxyFetch(this._id, url, init);
|
|
490
|
-
}
|
|
491
|
-
async uploadAttachment(file, conversationId) {
|
|
492
|
-
const attachment = attachmentBody(file);
|
|
493
|
-
const path = `/rool-drive/attachments/${conversationId}/${attachment.filename}`;
|
|
494
|
-
// createParents avoids racing MKCOLs when multiple attachments upload concurrently.
|
|
495
|
-
await this._webdav.put(path, attachment.body, {
|
|
496
|
-
contentType: attachment.contentType,
|
|
497
|
-
createParents: true,
|
|
498
|
-
});
|
|
499
|
-
return path;
|
|
500
|
-
}
|
|
501
|
-
async fetchPath(path, options) {
|
|
502
|
-
const canonical = machinePath(path);
|
|
503
|
-
if (!canonical.startsWith('/rool-drive/'))
|
|
504
|
-
throw new Error('Path is not a fetchable file');
|
|
505
|
-
return this._webdav.get(canonical, options);
|
|
506
|
-
}
|
|
507
|
-
async rename(newName) {
|
|
508
|
-
await this._graphqlClient.renameSpace(this._id, newName);
|
|
509
|
-
this._openSpaceResult = { ...this._openSpaceResult, name: newName };
|
|
510
|
-
}
|
|
511
|
-
async delete() {
|
|
512
|
-
await this._graphqlClient.deleteSpace(this._id);
|
|
513
|
-
}
|
|
514
|
-
async listUsers() {
|
|
515
|
-
return this._graphqlClient.listSpaceUsers(this._id);
|
|
516
|
-
}
|
|
517
|
-
async setUserRole(userId, role) {
|
|
518
|
-
await this._graphqlClient.setSpaceUserRole(this._id, userId, role);
|
|
519
|
-
}
|
|
520
|
-
async removeUser(userId) {
|
|
521
|
-
await this._graphqlClient.removeSpaceUser(this._id, userId);
|
|
522
|
-
}
|
|
523
|
-
async createInvite(role, options) {
|
|
524
|
-
return this._graphqlClient.createSpaceInvite(this._id, role, options);
|
|
525
|
-
}
|
|
526
|
-
async listInvites() {
|
|
527
|
-
return this._graphqlClient.listSpaceInvites(this._id);
|
|
528
|
-
}
|
|
529
|
-
async revokeInvite(inviteId) {
|
|
530
|
-
return this._graphqlClient.revokeSpaceInvite(this._id, inviteId);
|
|
531
|
-
}
|
|
532
|
-
async exportArchive() {
|
|
533
|
-
const tokens = await this.authManager.getTokens();
|
|
534
|
-
if (!tokens)
|
|
535
|
-
throw new Error('Not authenticated');
|
|
536
|
-
const headers = {
|
|
537
|
-
Authorization: `Bearer ${tokens.accessToken}`,
|
|
538
|
-
'X-Rool-Token': tokens.roolToken,
|
|
539
|
-
};
|
|
540
|
-
const path = `/spaces/${encodeURIComponent(this._id)}/export`;
|
|
541
|
-
const buildUrl = () => `${this._route.server.replace(/\/+$/, '')}${path}`;
|
|
542
|
-
let response = await fetch(buildUrl(), { method: 'GET', headers });
|
|
543
|
-
if (response.status === 421) {
|
|
544
|
-
await this.reroute();
|
|
545
|
-
response = await fetch(buildUrl(), { method: 'GET', headers });
|
|
546
|
-
}
|
|
547
|
-
if (!response.ok) {
|
|
548
|
-
const errorText = await response.text().catch(() => response.statusText);
|
|
549
|
-
throw new Error(`Failed to export space: ${response.status} ${errorText}`);
|
|
550
|
-
}
|
|
551
|
-
return response.blob();
|
|
552
|
-
}
|
|
553
|
-
close() {
|
|
554
|
-
if (this._closed)
|
|
555
|
-
return;
|
|
556
|
-
this._closed = true;
|
|
557
|
-
this.subscriptionManager?.destroy();
|
|
558
|
-
this.subscriptionManager = null;
|
|
559
|
-
this.removeAllListeners();
|
|
560
|
-
this.onCloseCallback();
|
|
561
|
-
}
|
|
562
|
-
startSubscription() {
|
|
563
|
-
let firstProbe = true;
|
|
564
|
-
this.subscriptionManager = new SpaceSubscriptionManager({
|
|
565
|
-
getGraphqlUrl: async () => {
|
|
566
|
-
if (firstProbe) {
|
|
567
|
-
firstProbe = false;
|
|
568
|
-
return this._graphqlClient.graphqlUrl;
|
|
569
|
-
}
|
|
570
|
-
return this.reroute();
|
|
571
|
-
},
|
|
572
|
-
authManager: this.authManager,
|
|
573
|
-
logger: this._logger,
|
|
574
|
-
clientInfo: this.clientInfo,
|
|
575
|
-
spaceId: this._id,
|
|
576
|
-
onEvent: (event) => this.handleSpaceEvent(event),
|
|
577
|
-
onConnectionStateChanged: (state) => {
|
|
578
|
-
this._connectionState = state;
|
|
579
|
-
this.emit('connectionStateChanged', state);
|
|
580
|
-
},
|
|
581
|
-
onError: (error) => this._logger.error(`[RoolSpace] Space ${this._id} subscription error:`, error),
|
|
582
|
-
});
|
|
583
|
-
void this.subscriptionManager.subscribe().catch((error) => {
|
|
584
|
-
if (!this._closed)
|
|
585
|
-
this._logger.error(`[RoolSpace] Space ${this._id} subscription failed:`, error);
|
|
586
|
-
});
|
|
587
|
-
}
|
|
588
|
-
async reroute() {
|
|
589
|
-
const route = await this.router.resolve(this._id);
|
|
590
|
-
this._route = route;
|
|
591
|
-
this._webdav.setWebDAVUrl(route.server);
|
|
592
|
-
this._restClient.setApiUrl(route.server);
|
|
593
|
-
const url = `${route.server.replace(/\/+$/, '')}/graphql`;
|
|
594
|
-
this._graphqlClient.setGraphqlUrl(url);
|
|
595
|
-
return url;
|
|
596
|
-
}
|
|
597
|
-
handleSpaceEvent(event) {
|
|
598
|
-
if (this._closed || event.type === 'connected')
|
|
599
|
-
return;
|
|
600
|
-
if (event.type === 'space_files_changed') {
|
|
601
|
-
this.emit('filesChanged', { spaceId: event.spaceId, source: event.source, timestamp: event.timestamp });
|
|
602
|
-
return;
|
|
603
|
-
}
|
|
604
|
-
if (event.type === 'space_files_reset') {
|
|
605
|
-
this.emit('filesReset', { spaceId: event.spaceId, source: event.source, timestamp: event.timestamp });
|
|
606
|
-
return;
|
|
607
|
-
}
|
|
608
|
-
if (event.type !== 'conversation_updated' || !event.conversationId)
|
|
609
|
-
return;
|
|
610
|
-
this.emit('conversationUpdated', {
|
|
611
|
-
conversationId: event.conversationId,
|
|
612
|
-
conversation: event.conversation ?? null,
|
|
613
|
-
source: event.source === 'agent' ? 'remote_agent' : 'remote_user',
|
|
614
|
-
timestamp: event.timestamp,
|
|
615
|
-
});
|
|
616
|
-
}
|
|
617
|
-
}
|
|
618
|
-
//# sourceMappingURL=space.js.map
|
package/dist/space.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"space.js","sourceRoot":"","sources":["../src/space.ts"],"names":[],"mappings":"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"}
|