@rool-dev/sdk 0.12.5 → 2.0.0-dev.03df95a

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/README.md +460 -783
  2. package/dist/agents.d.ts +138 -0
  3. package/dist/agents.d.ts.map +1 -0
  4. package/dist/agents.js +563 -0
  5. package/dist/agents.js.map +1 -0
  6. package/dist/auth-base.d.ts +43 -88
  7. package/dist/auth-base.d.ts.map +1 -1
  8. package/dist/auth-base.js +178 -302
  9. package/dist/auth-base.js.map +1 -1
  10. package/dist/auth-browser.d.ts +7 -25
  11. package/dist/auth-browser.d.ts.map +1 -1
  12. package/dist/auth-browser.js +45 -82
  13. package/dist/auth-browser.js.map +1 -1
  14. package/dist/auth-native.d.ts +9 -56
  15. package/dist/auth-native.d.ts.map +1 -1
  16. package/dist/auth-native.js +88 -177
  17. package/dist/auth-native.js.map +1 -1
  18. package/dist/auth-node.d.ts +32 -36
  19. package/dist/auth-node.d.ts.map +1 -1
  20. package/dist/auth-node.js +338 -265
  21. package/dist/auth-node.js.map +1 -1
  22. package/dist/auth-url.d.ts +6 -0
  23. package/dist/auth-url.d.ts.map +1 -0
  24. package/dist/auth-url.js +30 -0
  25. package/dist/auth-url.js.map +1 -0
  26. package/dist/client.d.ts +37 -290
  27. package/dist/client.d.ts.map +1 -1
  28. package/dist/client.js +331 -635
  29. package/dist/client.js.map +1 -1
  30. package/dist/events.d.ts +40 -0
  31. package/dist/events.d.ts.map +1 -0
  32. package/dist/events.js +175 -0
  33. package/dist/events.js.map +1 -0
  34. package/dist/files.d.ts +174 -0
  35. package/dist/files.d.ts.map +1 -0
  36. package/dist/files.js +846 -0
  37. package/dist/files.js.map +1 -0
  38. package/dist/index.d.ts +16 -19
  39. package/dist/index.d.ts.map +1 -1
  40. package/dist/index.js +7 -20
  41. package/dist/index.js.map +1 -1
  42. package/dist/machine.d.ts +51 -0
  43. package/dist/machine.d.ts.map +1 -0
  44. package/dist/machine.js +142 -0
  45. package/dist/machine.js.map +1 -0
  46. package/dist/problem.d.ts +11 -0
  47. package/dist/problem.d.ts.map +1 -0
  48. package/dist/problem.js +20 -0
  49. package/dist/problem.js.map +1 -0
  50. package/dist/structured.d.ts +84 -0
  51. package/dist/structured.d.ts.map +1 -0
  52. package/dist/structured.js +405 -0
  53. package/dist/structured.js.map +1 -0
  54. package/dist/types.d.ts +131 -520
  55. package/dist/types.d.ts.map +1 -1
  56. package/package.json +11 -16
  57. package/dist/auth.d.ts +0 -99
  58. package/dist/auth.d.ts.map +0 -1
  59. package/dist/auth.js +0 -217
  60. package/dist/auth.js.map +0 -1
  61. package/dist/client-info.d.ts +0 -18
  62. package/dist/client-info.d.ts.map +0 -1
  63. package/dist/client-info.js +0 -25
  64. package/dist/client-info.js.map +0 -1
  65. package/dist/event-emitter.d.ts +0 -45
  66. package/dist/event-emitter.d.ts.map +0 -1
  67. package/dist/event-emitter.js +0 -86
  68. package/dist/event-emitter.js.map +0 -1
  69. package/dist/graphql.d.ts +0 -90
  70. package/dist/graphql.d.ts.map +0 -1
  71. package/dist/graphql.js +0 -471
  72. package/dist/graphql.js.map +0 -1
  73. package/dist/logger.d.ts +0 -13
  74. package/dist/logger.d.ts.map +0 -1
  75. package/dist/logger.js +0 -17
  76. package/dist/logger.js.map +0 -1
  77. package/dist/path.d.ts +0 -6
  78. package/dist/path.d.ts.map +0 -1
  79. package/dist/path.js +0 -47
  80. package/dist/path.js.map +0 -1
  81. package/dist/reroute.d.ts +0 -22
  82. package/dist/reroute.d.ts.map +0 -1
  83. package/dist/reroute.js +0 -70
  84. package/dist/reroute.js.map +0 -1
  85. package/dist/rest.d.ts +0 -54
  86. package/dist/rest.d.ts.map +0 -1
  87. package/dist/rest.js +0 -171
  88. package/dist/rest.js.map +0 -1
  89. package/dist/router.d.ts +0 -20
  90. package/dist/router.d.ts.map +0 -1
  91. package/dist/router.js +0 -54
  92. package/dist/router.js.map +0 -1
  93. package/dist/space-session.d.ts +0 -30
  94. package/dist/space-session.d.ts.map +0 -1
  95. package/dist/space-session.js +0 -83
  96. package/dist/space-session.js.map +0 -1
  97. package/dist/space.d.ts +0 -161
  98. package/dist/space.d.ts.map +0 -1
  99. package/dist/space.js +0 -618
  100. package/dist/space.js.map +0 -1
  101. package/dist/subscription.d.ts +0 -36
  102. package/dist/subscription.d.ts.map +0 -1
  103. package/dist/subscription.js +0 -419
  104. package/dist/subscription.js.map +0 -1
  105. package/dist/webdav.d.ts +0 -171
  106. package/dist/webdav.d.ts.map +0 -1
  107. package/dist/webdav.js +0 -481
  108. package/dist/webdav.js.map +0 -1
@@ -0,0 +1,405 @@
1
+ import { RoolFileError, } from "./files.js";
2
+ const META_PATH = "/space/.meta.json";
3
+ const METADATA_WRITE_ATTEMPTS = 5;
4
+ const COLLECTION_RE = /^[a-zA-Z][a-zA-Z0-9_-]*$/;
5
+ const OBJECT_RE = /^\/space\/([a-zA-Z][a-zA-Z0-9_-]*)\/([a-zA-Z0-9][a-zA-Z0-9_-]*)\.json$/;
6
+ const READ_MULTIPLE_FILE_LIMIT = 128;
7
+ const READ_MULTIPLE_BYTE_LIMIT = 16 * 1024 * 1024;
8
+ const UNKNOWN_FILE_BYTES = 2 * 1024 * 1024;
9
+ const MULTIPLE_REMOVE_CONCURRENCY = 8;
10
+ class StructuredMachineState {
11
+ files;
12
+ isWatching;
13
+ metadata;
14
+ collections;
15
+ objects;
16
+ constructor(files, isWatching) {
17
+ this.files = files;
18
+ this.isWatching = isWatching;
19
+ this.metadata = {
20
+ get: (options) => this.getMetadata(options),
21
+ set: (key, value, options) => this.setMetadata(key, value, options),
22
+ delete: (key, options) => this.deleteMetadata(key, options),
23
+ };
24
+ this.collections = {
25
+ list: (options) => this.listCollections(options),
26
+ get: (name, options) => this.getCollection(name, options),
27
+ create: (name, definition, options) => this.createCollection(name, definition, options),
28
+ replace: (name, definition, options) => this.replaceCollection(name, definition, options),
29
+ remove: (name, options) => this.removeCollection(name, options),
30
+ };
31
+ this.objects = {
32
+ list: (options) => this.listObjects(options),
33
+ get: (path, options) => this.getObject(path, options),
34
+ getMultiple: (paths, options) => this.getMultipleObjects(paths, options),
35
+ create: (path, body, options) => this.createObject(path, body, options),
36
+ replace: (path, body, options) => this.replaceObject(path, body, options),
37
+ patch: (path, patch, options) => this.patchObject(path, patch, options),
38
+ move: (source, destination, options) => this.moveObject(source, destination, options),
39
+ remove: (path, options) => this.removeObject(path, options),
40
+ removeMultiple: (paths, options) => this.removeMultipleObjects(paths, options),
41
+ };
42
+ }
43
+ async getMetadata(options = {}) {
44
+ const file = await this.readOptionalFile(META_PATH, options.signal);
45
+ if (!file)
46
+ return {};
47
+ return parseJsonObject(file, "Machine metadata");
48
+ }
49
+ setMetadata(key, value, options = {}) {
50
+ return this.writeMetadata(key, value, false, options.signal);
51
+ }
52
+ deleteMetadata(key, options = {}) {
53
+ return this.writeMetadata(key, null, true, options.signal);
54
+ }
55
+ async writeMetadata(key, value, remove, signal) {
56
+ if (!key)
57
+ throw new Error("Machine metadata key is required");
58
+ for (let attempt = 1; attempt <= METADATA_WRITE_ATTEMPTS; attempt += 1) {
59
+ const file = await this.readOptionalFile(META_PATH, signal);
60
+ const current = file ? parseJsonObject(file, "Machine metadata") : {};
61
+ const hasKey = Object.hasOwn(current, key);
62
+ if (remove && !hasKey)
63
+ return current;
64
+ if (!remove &&
65
+ hasKey &&
66
+ JSON.stringify(current[key]) === JSON.stringify(value)) {
67
+ return current;
68
+ }
69
+ const next = remove ? { ...current } : { ...current, [key]: value };
70
+ if (remove)
71
+ delete next[key];
72
+ try {
73
+ await this.files.write(META_PATH, serializeJsonObject(next, "Machine metadata"), {
74
+ contentType: "application/json",
75
+ ...(file ? { ifMatch: file.etag } : { ifNoneMatch: "*" }),
76
+ signal,
77
+ });
78
+ return next;
79
+ }
80
+ catch (error) {
81
+ const conflict = error instanceof RoolFileError && error.status === 412;
82
+ if (!conflict || attempt === METADATA_WRITE_ATTEMPTS)
83
+ throw error;
84
+ }
85
+ }
86
+ throw new Error("Machine metadata update exhausted its attempts");
87
+ }
88
+ async listCollections(options = {}) {
89
+ const entries = await this.spaceEntries(options.signal);
90
+ const schemaPaths = entries.flatMap((entry) => {
91
+ const name = collectionNameFromSchemaPath(entry.path);
92
+ return name && entry.kind === "file" ? [entry.path] : [];
93
+ });
94
+ const filesByPath = await this.readFiles(schemaPaths, options.signal);
95
+ return schemaPaths.flatMap((path) => {
96
+ const file = filesByPath.get(path);
97
+ return file ? [collectionFromFile(file)] : [];
98
+ });
99
+ }
100
+ async getCollection(name, options = {}) {
101
+ const path = schemaPath(name);
102
+ const file = await this.readOptionalFile(path, options.signal);
103
+ return file ? collectionFromFile(file) : undefined;
104
+ }
105
+ async createCollection(name, definition, options = {}) {
106
+ const path = schemaPath(name);
107
+ await this.files.write(path, serializeJsonObject(definition, `Collection ${name}`), {
108
+ contentType: "application/json",
109
+ createParents: true,
110
+ ifNoneMatch: "*",
111
+ signal: options.signal,
112
+ });
113
+ return collectionFromFile(await this.readFile(path, options.signal));
114
+ }
115
+ async replaceCollection(name, definition, options = {}) {
116
+ const path = schemaPath(name);
117
+ const etag = await this.etag(path, options.signal);
118
+ await this.files.write(path, serializeJsonObject(definition, `Collection ${name}`), {
119
+ contentType: "application/json",
120
+ ifMatch: etag,
121
+ signal: options.signal,
122
+ });
123
+ return collectionFromFile(await this.readFile(path, options.signal));
124
+ }
125
+ async removeCollection(name, options = {}) {
126
+ const path = collectionPath(name);
127
+ await this.files.delete(path, { signal: options.signal });
128
+ }
129
+ listObjects(options = {}) {
130
+ if (options.collection)
131
+ validateCollectionName(options.collection);
132
+ return this.files.tree
133
+ .list("/space", { recursive: true })
134
+ .flatMap((entry) => {
135
+ const parsed = parseObjectPath(entry.path);
136
+ if (!parsed || entry.kind !== "file")
137
+ return [];
138
+ if (options.collection && parsed.collection !== options.collection) {
139
+ return [];
140
+ }
141
+ return [entry.path];
142
+ });
143
+ }
144
+ async getObject(path, options = {}) {
145
+ requireObjectPath(path);
146
+ const file = await this.readOptionalFile(path, options.signal);
147
+ return file ? objectFromFile(file) : undefined;
148
+ }
149
+ async getMultipleObjects(paths, options = {}) {
150
+ const uniquePaths = [];
151
+ const seen = new Set();
152
+ for (const path of paths) {
153
+ requireObjectPath(path);
154
+ if (seen.has(path))
155
+ continue;
156
+ seen.add(path);
157
+ uniquePaths.push(path);
158
+ }
159
+ const filesByPath = await this.readFiles(uniquePaths, options.signal);
160
+ return paths.map((path) => {
161
+ const file = filesByPath.get(path);
162
+ return file ? objectFromFile(file) : undefined;
163
+ });
164
+ }
165
+ async createObject(path, objectBody, options = {}) {
166
+ requireObjectPath(path);
167
+ await this.files.write(path, serializeJsonObject(objectBody, `Object ${path}`), {
168
+ contentType: "application/json",
169
+ ifNoneMatch: "*",
170
+ signal: options.signal,
171
+ });
172
+ return objectFromFile(await this.readFile(path, options.signal));
173
+ }
174
+ async replaceObject(path, objectBody, options = {}) {
175
+ requireObjectPath(path);
176
+ const etag = await this.etag(path, options.signal);
177
+ await this.files.write(path, serializeJsonObject(objectBody, `Object ${path}`), {
178
+ contentType: "application/json",
179
+ ifMatch: etag,
180
+ signal: options.signal,
181
+ });
182
+ return objectFromFile(await this.readFile(path, options.signal));
183
+ }
184
+ async patchObject(path, patch, options = {}) {
185
+ requireObjectPath(path);
186
+ const current = await this.readFile(path, options.signal);
187
+ const body = parseJsonObject(current, `Object ${path}`);
188
+ for (const [key, value] of Object.entries(patch)) {
189
+ if (value === null || value === undefined)
190
+ delete body[key];
191
+ else
192
+ body[key] = value;
193
+ }
194
+ await this.files.write(path, serializeJsonObject(body, `Object ${path}`), {
195
+ contentType: "application/json",
196
+ ifMatch: current.etag,
197
+ signal: options.signal,
198
+ });
199
+ return objectFromFile(await this.readFile(path, options.signal));
200
+ }
201
+ async moveObject(source, destination, options = {}) {
202
+ requireObjectPath(source);
203
+ requireObjectPath(destination);
204
+ const sourceEtag = await this.etag(source, options.signal);
205
+ await this.files.move(source, destination, {
206
+ ifMatch: sourceEtag,
207
+ overwrite: options.overwrite ?? false,
208
+ signal: options.signal,
209
+ });
210
+ return objectFromFile(await this.readFile(destination, options.signal));
211
+ }
212
+ async removeObject(path, options = {}) {
213
+ requireObjectPath(path);
214
+ const etag = await this.etag(path, options.signal);
215
+ await this.files.delete(path, {
216
+ ifMatch: etag,
217
+ signal: options.signal,
218
+ });
219
+ }
220
+ async removeMultipleObjects(paths, options = {}) {
221
+ for (const path of paths)
222
+ requireObjectPath(path);
223
+ const results = new Array(paths.length);
224
+ const targets = [];
225
+ for (let start = 0; start < paths.length; start += MULTIPLE_REMOVE_CONCURRENCY) {
226
+ const batch = paths.slice(start, start + MULTIPLE_REMOVE_CONCURRENCY);
227
+ const etags = await Promise.all(batch.map(async (path, offset) => {
228
+ try {
229
+ return {
230
+ index: start + offset,
231
+ target: { path, ifMatch: await this.etag(path, options.signal) },
232
+ };
233
+ }
234
+ catch (error) {
235
+ if (options.signal?.aborted)
236
+ throw options.signal.reason;
237
+ results[start + offset] = { ok: false, path, error };
238
+ return undefined;
239
+ }
240
+ }));
241
+ targets.push(...etags.filter((target) => target !== undefined));
242
+ }
243
+ const deleted = await this.files.deleteMultiple(targets.map(({ target }) => target), options);
244
+ for (const [deletedIndex, result] of deleted.entries()) {
245
+ results[targets[deletedIndex].index] = result;
246
+ }
247
+ return results.map((result) => {
248
+ if (!result)
249
+ throw new Error("BUG: object removal omitted a result");
250
+ return result;
251
+ });
252
+ }
253
+ async spaceEntries(signal) {
254
+ if (this.isWatching()) {
255
+ return this.files.tree.list("/space", { recursive: true });
256
+ }
257
+ return this.files.list("/space", { recursive: true, signal });
258
+ }
259
+ async readOptionalFile(path, signal) {
260
+ try {
261
+ return await this.readFile(path, signal);
262
+ }
263
+ catch (error) {
264
+ if (error instanceof RoolFileError && error.status === 404) {
265
+ return undefined;
266
+ }
267
+ throw error;
268
+ }
269
+ }
270
+ async readFile(path, signal) {
271
+ const response = await this.files.read(path, { signal });
272
+ const etag = response.headers.get("ETag");
273
+ if (!etag)
274
+ throw new Error(`Machine file response omitted ETag for ${path}`);
275
+ return {
276
+ path,
277
+ etag,
278
+ body: new Uint8Array(await response.arrayBuffer()),
279
+ };
280
+ }
281
+ async readFiles(paths, signal) {
282
+ const filesByPath = new Map();
283
+ for (const batch of this.readMultipleBatches(paths)) {
284
+ await this.readFileBatch(batch, filesByPath, signal);
285
+ }
286
+ return filesByPath;
287
+ }
288
+ *readMultipleBatches(paths) {
289
+ let batch = [];
290
+ let bytes = 0;
291
+ for (const path of paths) {
292
+ const info = this.files.tree.get(path);
293
+ const fileBytes = info?.kind === "file" ? info.size : UNKNOWN_FILE_BYTES;
294
+ const exceedsCount = batch.length === READ_MULTIPLE_FILE_LIMIT;
295
+ const exceedsBytes = batch.length > 0 && bytes + fileBytes > READ_MULTIPLE_BYTE_LIMIT;
296
+ if (exceedsCount || exceedsBytes) {
297
+ yield batch;
298
+ batch = [];
299
+ bytes = 0;
300
+ }
301
+ batch.push(path);
302
+ bytes += fileBytes;
303
+ }
304
+ if (batch.length > 0)
305
+ yield batch;
306
+ }
307
+ async readFileBatch(paths, filesByPath, signal) {
308
+ let results;
309
+ try {
310
+ results = await this.files.readMultiple(paths, { signal });
311
+ }
312
+ catch (error) {
313
+ const canSplit = error instanceof RoolFileError &&
314
+ error.status === 413 &&
315
+ paths.length > 1;
316
+ if (!canSplit)
317
+ throw error;
318
+ const middle = Math.ceil(paths.length / 2);
319
+ await this.readFileBatch(paths.slice(0, middle), filesByPath, signal);
320
+ await this.readFileBatch(paths.slice(middle), filesByPath, signal);
321
+ return;
322
+ }
323
+ for (const result of results) {
324
+ if (result.ok) {
325
+ filesByPath.set(result.path, {
326
+ path: result.path,
327
+ etag: result.etag,
328
+ body: result.body,
329
+ });
330
+ continue;
331
+ }
332
+ if (result.status === 404)
333
+ continue;
334
+ filesByPath.set(result.path, await this.readFile(result.path, signal));
335
+ }
336
+ }
337
+ async etag(path, signal) {
338
+ return (await this.files.stat(path, signal)).etag;
339
+ }
340
+ }
341
+ export function createMachineStructuredApis(files, isWatching) {
342
+ return new StructuredMachineState(files, isWatching);
343
+ }
344
+ function collectionPath(name) {
345
+ validateCollectionName(name);
346
+ return `/space/${name}`;
347
+ }
348
+ function schemaPath(name) {
349
+ return `${collectionPath(name)}/.schema.json`;
350
+ }
351
+ function validateCollectionName(name) {
352
+ if (!COLLECTION_RE.test(name)) {
353
+ throw new Error(`Collection name must start with a letter and contain only letters, digits, hyphens, and underscores: ${name}`);
354
+ }
355
+ }
356
+ function collectionNameFromSchemaPath(path) {
357
+ const match = /^\/space\/([^/]+)\/\.schema\.json$/.exec(path);
358
+ if (!match || !COLLECTION_RE.test(match[1]))
359
+ return null;
360
+ return match[1];
361
+ }
362
+ export function isRoolObjectPath(path) {
363
+ return OBJECT_RE.test(path);
364
+ }
365
+ function parseObjectPath(path) {
366
+ const match = OBJECT_RE.exec(path);
367
+ return match ? { collection: match[1], basename: match[2] } : null;
368
+ }
369
+ function requireObjectPath(path) {
370
+ if (isRoolObjectPath(path))
371
+ return;
372
+ throw new Error(`Object path must be /space/<collection>/<basename>.json: ${path}`);
373
+ }
374
+ function collectionFromFile(file) {
375
+ const name = collectionNameFromSchemaPath(file.path);
376
+ if (!name) {
377
+ throw new Error(`Invalid collection schema path: ${file.path}`);
378
+ }
379
+ return {
380
+ name,
381
+ path: collectionPath(name),
382
+ definition: parseJsonObject(file, `Collection ${name}`),
383
+ etag: file.etag,
384
+ };
385
+ }
386
+ function objectFromFile(file) {
387
+ return {
388
+ path: file.path,
389
+ body: parseJsonObject(file, `Object ${file.path}`),
390
+ };
391
+ }
392
+ function serializeJsonObject(value, label) {
393
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
394
+ throw new Error(`${label} must be a JSON object`);
395
+ }
396
+ return JSON.stringify(value);
397
+ }
398
+ function parseJsonObject(file, label) {
399
+ const value = JSON.parse(new TextDecoder("utf-8", { fatal: true }).decode(file.body));
400
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
401
+ throw new Error(`${label} must be a JSON object`);
402
+ }
403
+ return value;
404
+ }
405
+ //# sourceMappingURL=structured.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structured.js","sourceRoot":"","sources":["../src/structured.ts"],"names":[],"mappings":"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"}