primitive-admin 1.0.26 → 1.0.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 +18 -1
- package/dist/src/commands/databases.js +399 -3
- package/dist/src/commands/databases.js.map +1 -1
- package/dist/src/commands/documents.js +391 -1
- package/dist/src/commands/documents.js.map +1 -1
- package/dist/src/lib/api-client.js +124 -0
- package/dist/src/lib/api-client.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { ApiClient } from "../lib/api-client.js";
|
|
2
2
|
import { resolveAppId } from "../lib/config.js";
|
|
3
|
-
import { success, error, info, formatTable, formatDate, json, } from "../lib/output.js";
|
|
3
|
+
import { success, error, info, formatTable, formatDate, json, keyValue, warn, } from "../lib/output.js";
|
|
4
|
+
import * as fs from "fs";
|
|
5
|
+
import * as path from "path";
|
|
4
6
|
export function registerDocumentsCommands(program) {
|
|
5
7
|
const documents = program
|
|
6
8
|
.command("documents")
|
|
@@ -138,6 +140,193 @@ Examples:
|
|
|
138
140
|
process.exit(1);
|
|
139
141
|
}
|
|
140
142
|
});
|
|
143
|
+
// ---- Export / Import commands ----
|
|
144
|
+
documents
|
|
145
|
+
.command("export")
|
|
146
|
+
.description("Export a document (Yjs state, blobs, permissions, aliases)")
|
|
147
|
+
.argument("[app-id]", "App ID (uses current app if not specified)")
|
|
148
|
+
.argument("<document-id>", "Document ID to export")
|
|
149
|
+
.option("--app <app-id>", "App ID")
|
|
150
|
+
.option("--output <dir>", "Output directory", "./primitive-export")
|
|
151
|
+
.option("--no-blobs", "Skip blob data")
|
|
152
|
+
.option("--json", "Output as JSON")
|
|
153
|
+
.action(async (first, second, options) => {
|
|
154
|
+
let resolvedAppId;
|
|
155
|
+
let documentId;
|
|
156
|
+
if (second && !second.startsWith("-")) {
|
|
157
|
+
resolvedAppId = resolveAppId(first, options);
|
|
158
|
+
documentId = second;
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
resolvedAppId = resolveAppId(undefined, options);
|
|
162
|
+
documentId = first;
|
|
163
|
+
}
|
|
164
|
+
if (!documentId) {
|
|
165
|
+
error("Document ID is required.");
|
|
166
|
+
process.exit(1);
|
|
167
|
+
}
|
|
168
|
+
const client = new ApiClient();
|
|
169
|
+
try {
|
|
170
|
+
await exportSingleDocument(client, resolvedAppId, documentId, options.output, options.blobs !== false ? true : false, options.json);
|
|
171
|
+
}
|
|
172
|
+
catch (err) {
|
|
173
|
+
error(err.message);
|
|
174
|
+
process.exit(1);
|
|
175
|
+
}
|
|
176
|
+
});
|
|
177
|
+
documents
|
|
178
|
+
.command("export-all")
|
|
179
|
+
.description("Export all documents for a user")
|
|
180
|
+
.argument("[app-id]", "App ID (uses current app if not specified)")
|
|
181
|
+
.requiredOption("--user-id <id>", "User ID to export documents for")
|
|
182
|
+
.option("--app <app-id>", "App ID")
|
|
183
|
+
.option("--owned-only", "Only export documents owned by the user")
|
|
184
|
+
.option("--output <dir>", "Output directory", "./primitive-export")
|
|
185
|
+
.option("--no-blobs", "Skip blob data")
|
|
186
|
+
.option("--json", "Output as JSON")
|
|
187
|
+
.action(async (appIdArg, options) => {
|
|
188
|
+
const resolvedAppId = resolveAppId(appIdArg, options);
|
|
189
|
+
const client = new ApiClient();
|
|
190
|
+
const includeBlobs = options.blobs !== false;
|
|
191
|
+
try {
|
|
192
|
+
const documents = await client.listAdminDocuments(resolvedAppId, options.userId);
|
|
193
|
+
let docList = Array.isArray(documents) ? documents : [];
|
|
194
|
+
if (options.ownedOnly) {
|
|
195
|
+
docList = docList.filter((d) => d.permission === "owner");
|
|
196
|
+
}
|
|
197
|
+
if (docList.length === 0) {
|
|
198
|
+
info("No documents found.");
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
info(`Exporting ${docList.length} document(s)...`);
|
|
202
|
+
const exportedIds = [];
|
|
203
|
+
for (const doc of docList) {
|
|
204
|
+
const docId = doc.documentId || doc.id;
|
|
205
|
+
try {
|
|
206
|
+
await exportSingleDocument(client, resolvedAppId, docId, options.output, includeBlobs, false);
|
|
207
|
+
exportedIds.push(docId);
|
|
208
|
+
}
|
|
209
|
+
catch (err) {
|
|
210
|
+
warn(`Failed to export ${docId}: ${err.message}`);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
// Write manifest
|
|
214
|
+
const manifestPath = path.join(options.output, "manifest.json");
|
|
215
|
+
const manifest = {
|
|
216
|
+
version: 1,
|
|
217
|
+
exportedAt: new Date().toISOString(),
|
|
218
|
+
sourceAppId: resolvedAppId,
|
|
219
|
+
documentCount: exportedIds.length,
|
|
220
|
+
documents: exportedIds,
|
|
221
|
+
};
|
|
222
|
+
fs.mkdirSync(path.dirname(manifestPath), { recursive: true });
|
|
223
|
+
fs.writeFileSync(manifestPath, JSON.stringify(manifest, null, 2));
|
|
224
|
+
if (options.json) {
|
|
225
|
+
json(manifest);
|
|
226
|
+
}
|
|
227
|
+
else {
|
|
228
|
+
success(`Exported ${exportedIds.length} document(s) to ${options.output}`);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
catch (err) {
|
|
232
|
+
error(err.message);
|
|
233
|
+
process.exit(1);
|
|
234
|
+
}
|
|
235
|
+
});
|
|
236
|
+
documents
|
|
237
|
+
.command("import")
|
|
238
|
+
.description("Import documents from an export directory")
|
|
239
|
+
.argument("[app-id]", "App ID (uses current app if not specified)")
|
|
240
|
+
.argument("<path>", "Path to export directory or single document directory")
|
|
241
|
+
.option("--app <app-id>", "App ID")
|
|
242
|
+
.option("--aliases <mode>", "Alias conflict handling: overwrite or skip", "skip")
|
|
243
|
+
.option("--overwrite", "Replace existing documents if IDs collide")
|
|
244
|
+
.option("--dry-run", "Show what would be imported without making changes")
|
|
245
|
+
.option("--json", "Output as JSON")
|
|
246
|
+
.action(async (first, second, options) => {
|
|
247
|
+
let resolvedAppId;
|
|
248
|
+
let importPath;
|
|
249
|
+
if (second && !second.startsWith("-")) {
|
|
250
|
+
resolvedAppId = resolveAppId(first, options);
|
|
251
|
+
importPath = second;
|
|
252
|
+
}
|
|
253
|
+
else {
|
|
254
|
+
resolvedAppId = resolveAppId(undefined, options);
|
|
255
|
+
importPath = first;
|
|
256
|
+
}
|
|
257
|
+
if (!importPath) {
|
|
258
|
+
error("Import path is required.");
|
|
259
|
+
process.exit(1);
|
|
260
|
+
}
|
|
261
|
+
const client = new ApiClient();
|
|
262
|
+
try {
|
|
263
|
+
// Determine if this is a manifest-based export or a single document
|
|
264
|
+
const manifestPath = path.join(importPath, "manifest.json");
|
|
265
|
+
let docDirs = [];
|
|
266
|
+
if (fs.existsSync(manifestPath)) {
|
|
267
|
+
const manifest = JSON.parse(fs.readFileSync(manifestPath, "utf-8"));
|
|
268
|
+
for (const docId of manifest.documents) {
|
|
269
|
+
const docDir = path.join(importPath, "documents", docId);
|
|
270
|
+
if (fs.existsSync(docDir)) {
|
|
271
|
+
docDirs.push(docDir);
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
else if (fs.existsSync(path.join(importPath, "metadata.json"))) {
|
|
276
|
+
// Single document directory
|
|
277
|
+
docDirs = [importPath];
|
|
278
|
+
}
|
|
279
|
+
else if (fs.existsSync(path.join(importPath, "documents"))) {
|
|
280
|
+
// Export directory without manifest — discover documents
|
|
281
|
+
const entries = fs.readdirSync(path.join(importPath, "documents"), { withFileTypes: true });
|
|
282
|
+
for (const entry of entries) {
|
|
283
|
+
if (entry.isDirectory()) {
|
|
284
|
+
docDirs.push(path.join(importPath, "documents", entry.name));
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
else {
|
|
289
|
+
error("No valid export data found at the specified path.");
|
|
290
|
+
process.exit(1);
|
|
291
|
+
}
|
|
292
|
+
if (docDirs.length === 0) {
|
|
293
|
+
info("No documents to import.");
|
|
294
|
+
return;
|
|
295
|
+
}
|
|
296
|
+
const summary = {
|
|
297
|
+
created: 0,
|
|
298
|
+
updated: 0,
|
|
299
|
+
skipped: 0,
|
|
300
|
+
blobsUploaded: 0,
|
|
301
|
+
aliasesSet: 0,
|
|
302
|
+
aliasesSkipped: 0,
|
|
303
|
+
};
|
|
304
|
+
for (const docDir of docDirs) {
|
|
305
|
+
await importSingleDocument(client, resolvedAppId, docDir, options.overwrite || false, options.aliases || "skip", options.dryRun || false, summary);
|
|
306
|
+
}
|
|
307
|
+
if (options.json) {
|
|
308
|
+
json(summary);
|
|
309
|
+
}
|
|
310
|
+
else {
|
|
311
|
+
success(`Import complete:`);
|
|
312
|
+
keyValue(" Documents created", String(summary.created));
|
|
313
|
+
if (summary.updated > 0)
|
|
314
|
+
keyValue(" Documents updated", String(summary.updated));
|
|
315
|
+
if (summary.skipped > 0)
|
|
316
|
+
keyValue(" Documents skipped", String(summary.skipped));
|
|
317
|
+
if (summary.blobsUploaded > 0)
|
|
318
|
+
keyValue(" Blobs uploaded", String(summary.blobsUploaded));
|
|
319
|
+
if (summary.aliasesSet > 0)
|
|
320
|
+
keyValue(" Aliases set", String(summary.aliasesSet));
|
|
321
|
+
if (summary.aliasesSkipped > 0)
|
|
322
|
+
keyValue(" Aliases skipped", String(summary.aliasesSkipped));
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
catch (err) {
|
|
326
|
+
error(err.message);
|
|
327
|
+
process.exit(1);
|
|
328
|
+
}
|
|
329
|
+
});
|
|
141
330
|
// Revoke group permission
|
|
142
331
|
groupPermissions
|
|
143
332
|
.command("revoke")
|
|
@@ -175,4 +364,205 @@ Examples:
|
|
|
175
364
|
}
|
|
176
365
|
});
|
|
177
366
|
}
|
|
367
|
+
// ============================================
|
|
368
|
+
// Helper functions for export/import
|
|
369
|
+
// ============================================
|
|
370
|
+
async function exportSingleDocument(client, appId, documentId, outputDir, includeBlobs, jsonOutput) {
|
|
371
|
+
const docDir = path.join(outputDir, "documents", documentId);
|
|
372
|
+
fs.mkdirSync(docDir, { recursive: true });
|
|
373
|
+
// 1. Fetch document metadata
|
|
374
|
+
const docMeta = await client.getDocument(appId, documentId);
|
|
375
|
+
// 2. Export Yjs state
|
|
376
|
+
const stateResult = await client.exportDocumentState(appId, documentId);
|
|
377
|
+
fs.writeFileSync(path.join(docDir, "document.yjs"), Buffer.from(stateResult.state, "base64"));
|
|
378
|
+
// 3. Fetch permissions
|
|
379
|
+
let permissions = [];
|
|
380
|
+
try {
|
|
381
|
+
const permResult = await client.listDocumentPermissions(appId, documentId);
|
|
382
|
+
permissions = Array.isArray(permResult) ? permResult : permResult?.permissions || [];
|
|
383
|
+
}
|
|
384
|
+
catch {
|
|
385
|
+
// Permissions endpoint might not return data for all docs
|
|
386
|
+
}
|
|
387
|
+
// 4. Fetch invitations
|
|
388
|
+
let invitations = [];
|
|
389
|
+
try {
|
|
390
|
+
const invResult = await client.listDocumentInvitations(appId, documentId);
|
|
391
|
+
invitations = Array.isArray(invResult) ? invResult : invResult?.invitations || [];
|
|
392
|
+
}
|
|
393
|
+
catch {
|
|
394
|
+
// May not have invitations
|
|
395
|
+
}
|
|
396
|
+
// Merge permissions and invitations into a single list with email identifiers
|
|
397
|
+
const permissionsExport = [
|
|
398
|
+
...permissions.map((p) => ({
|
|
399
|
+
email: p.email,
|
|
400
|
+
permission: p.permission,
|
|
401
|
+
grantedAt: p.grantedAt,
|
|
402
|
+
})),
|
|
403
|
+
...invitations
|
|
404
|
+
.filter((i) => !i.accepted && new Date(i.expiresAt) > new Date())
|
|
405
|
+
.map((i) => ({
|
|
406
|
+
email: i.email,
|
|
407
|
+
permission: i.permission,
|
|
408
|
+
source: "invitation",
|
|
409
|
+
status: "pending",
|
|
410
|
+
})),
|
|
411
|
+
];
|
|
412
|
+
fs.writeFileSync(path.join(docDir, "permissions.json"), JSON.stringify(permissionsExport, null, 2));
|
|
413
|
+
// 5. Fetch aliases (user-scoped only)
|
|
414
|
+
let aliases = [];
|
|
415
|
+
try {
|
|
416
|
+
const aliasResult = await client.listDocumentAliases(appId, documentId);
|
|
417
|
+
aliases = (Array.isArray(aliasResult) ? aliasResult : aliasResult?.aliases || [])
|
|
418
|
+
.filter((a) => a.aliasScope === "user");
|
|
419
|
+
}
|
|
420
|
+
catch {
|
|
421
|
+
// May not have aliases
|
|
422
|
+
}
|
|
423
|
+
// 6. Write metadata
|
|
424
|
+
const metadata = {
|
|
425
|
+
documentId: docMeta.documentId || documentId,
|
|
426
|
+
title: docMeta.title,
|
|
427
|
+
tags: docMeta.tags || [],
|
|
428
|
+
createdAt: docMeta.createdAt,
|
|
429
|
+
createdBy: docMeta.createdByEmail || docMeta.createdBy,
|
|
430
|
+
aliases: aliases.map((a) => ({
|
|
431
|
+
aliasScope: a.aliasScope,
|
|
432
|
+
aliasKey: a.aliasKey,
|
|
433
|
+
ownerEmail: a.ownerEmail || a.ownerUserId,
|
|
434
|
+
})),
|
|
435
|
+
};
|
|
436
|
+
fs.writeFileSync(path.join(docDir, "metadata.json"), JSON.stringify(metadata, null, 2));
|
|
437
|
+
// 7. Blobs
|
|
438
|
+
if (includeBlobs) {
|
|
439
|
+
let blobs = [];
|
|
440
|
+
try {
|
|
441
|
+
const blobResult = await client.listDocumentBlobs(appId, documentId);
|
|
442
|
+
blobs = Array.isArray(blobResult) ? blobResult : blobResult?.blobs || [];
|
|
443
|
+
}
|
|
444
|
+
catch {
|
|
445
|
+
// May not have blobs
|
|
446
|
+
}
|
|
447
|
+
if (blobs.length > 0) {
|
|
448
|
+
const blobsDir = path.join(docDir, "blobs");
|
|
449
|
+
fs.mkdirSync(blobsDir, { recursive: true });
|
|
450
|
+
const blobIndex = blobs.map((b) => ({
|
|
451
|
+
blobId: b.blobId,
|
|
452
|
+
filename: b.filename,
|
|
453
|
+
contentType: b.contentType,
|
|
454
|
+
sha256: b.sha256,
|
|
455
|
+
numBytes: b.numBytes,
|
|
456
|
+
}));
|
|
457
|
+
fs.writeFileSync(path.join(blobsDir, "index.json"), JSON.stringify(blobIndex, null, 2));
|
|
458
|
+
// Download blobs (sequentially to avoid overwhelming the server)
|
|
459
|
+
for (const blob of blobs) {
|
|
460
|
+
const data = await client.downloadBlob(appId, documentId, blob.blobId);
|
|
461
|
+
fs.writeFileSync(path.join(blobsDir, `${blob.blobId}.bin`), data);
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
if (jsonOutput) {
|
|
466
|
+
json({
|
|
467
|
+
documentId,
|
|
468
|
+
title: metadata.title,
|
|
469
|
+
stateBytes: stateResult.byteLength,
|
|
470
|
+
permissions: permissionsExport.length,
|
|
471
|
+
aliases: aliases.length,
|
|
472
|
+
exportPath: docDir,
|
|
473
|
+
});
|
|
474
|
+
}
|
|
475
|
+
else {
|
|
476
|
+
success(`Exported document ${documentId} (${metadata.title || "untitled"}) to ${docDir}`);
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
async function importSingleDocument(client, appId, docDir, overwrite, aliasMode, dryRun, summary) {
|
|
480
|
+
const metadataPath = path.join(docDir, "metadata.json");
|
|
481
|
+
if (!fs.existsSync(metadataPath)) {
|
|
482
|
+
warn(`Skipping ${docDir}: no metadata.json found`);
|
|
483
|
+
summary.skipped++;
|
|
484
|
+
return;
|
|
485
|
+
}
|
|
486
|
+
const metadata = JSON.parse(fs.readFileSync(metadataPath, "utf-8"));
|
|
487
|
+
const documentId = metadata.documentId;
|
|
488
|
+
if (dryRun) {
|
|
489
|
+
info(`[dry-run] Would import document ${documentId} (${metadata.title || "untitled"})`);
|
|
490
|
+
summary.created++;
|
|
491
|
+
return;
|
|
492
|
+
}
|
|
493
|
+
// Check if document exists
|
|
494
|
+
let exists = false;
|
|
495
|
+
try {
|
|
496
|
+
await client.getDocument(appId, documentId);
|
|
497
|
+
exists = true;
|
|
498
|
+
}
|
|
499
|
+
catch {
|
|
500
|
+
exists = false;
|
|
501
|
+
}
|
|
502
|
+
if (exists && !overwrite) {
|
|
503
|
+
warn(`Skipping ${documentId}: already exists (use --overwrite to replace)`);
|
|
504
|
+
summary.skipped++;
|
|
505
|
+
return;
|
|
506
|
+
}
|
|
507
|
+
// Create document if it doesn't exist
|
|
508
|
+
if (!exists) {
|
|
509
|
+
await client.createDocument(appId, {
|
|
510
|
+
title: metadata.title || "Imported Document",
|
|
511
|
+
documentId,
|
|
512
|
+
tags: metadata.tags,
|
|
513
|
+
});
|
|
514
|
+
summary.created++;
|
|
515
|
+
}
|
|
516
|
+
else {
|
|
517
|
+
summary.updated++;
|
|
518
|
+
}
|
|
519
|
+
// Import Yjs state
|
|
520
|
+
const yjsPath = path.join(docDir, "document.yjs");
|
|
521
|
+
if (fs.existsSync(yjsPath)) {
|
|
522
|
+
const stateBuffer = fs.readFileSync(yjsPath);
|
|
523
|
+
const stateBase64 = stateBuffer.toString("base64");
|
|
524
|
+
await client.importDocumentState(appId, documentId, stateBase64);
|
|
525
|
+
}
|
|
526
|
+
// Upload blobs
|
|
527
|
+
const blobIndexPath = path.join(docDir, "blobs", "index.json");
|
|
528
|
+
if (fs.existsSync(blobIndexPath)) {
|
|
529
|
+
const blobIndex = JSON.parse(fs.readFileSync(blobIndexPath, "utf-8"));
|
|
530
|
+
for (const blob of blobIndex) {
|
|
531
|
+
const blobPath = path.join(docDir, "blobs", `${blob.blobId}.bin`);
|
|
532
|
+
if (fs.existsSync(blobPath)) {
|
|
533
|
+
const data = fs.readFileSync(blobPath);
|
|
534
|
+
await client.uploadBlob(appId, documentId, blob.blobId, data, {
|
|
535
|
+
filename: blob.filename,
|
|
536
|
+
contentType: blob.contentType,
|
|
537
|
+
sha256: blob.sha256,
|
|
538
|
+
});
|
|
539
|
+
summary.blobsUploaded++;
|
|
540
|
+
}
|
|
541
|
+
}
|
|
542
|
+
}
|
|
543
|
+
// Permissions are exported for reference but not restored during import.
|
|
544
|
+
// The importing admin is the new owner; sharing is managed in the target app.
|
|
545
|
+
// Restore aliases
|
|
546
|
+
if (metadata.aliases && Array.isArray(metadata.aliases)) {
|
|
547
|
+
for (const alias of metadata.aliases) {
|
|
548
|
+
if (alias.aliasScope !== "user")
|
|
549
|
+
continue;
|
|
550
|
+
// Resolve owner email to userId
|
|
551
|
+
const owner = alias.ownerEmail ? await client.findUserByEmail(appId, alias.ownerEmail) : null;
|
|
552
|
+
if (!owner) {
|
|
553
|
+
summary.aliasesSkipped++;
|
|
554
|
+
continue;
|
|
555
|
+
}
|
|
556
|
+
try {
|
|
557
|
+
await client.setDocumentAlias(appId, alias.aliasScope, alias.aliasKey, documentId, owner.userId || owner.id, aliasMode === "skip" // mustNotExist: true for skip mode, false for overwrite
|
|
558
|
+
);
|
|
559
|
+
summary.aliasesSet++;
|
|
560
|
+
}
|
|
561
|
+
catch {
|
|
562
|
+
summary.aliasesSkipped++;
|
|
563
|
+
}
|
|
564
|
+
}
|
|
565
|
+
}
|
|
566
|
+
info(`Imported document ${documentId} (${metadata.title || "untitled"})`);
|
|
567
|
+
}
|
|
178
568
|
//# sourceMappingURL=documents.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"documents.js","sourceRoot":"","sources":["../../../src/commands/documents.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"documents.js","sourceRoot":"","sources":["../../../src/commands/documents.ts"],"names":[],"mappings":"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"}
|
|
@@ -749,6 +749,19 @@ export class ApiClient {
|
|
|
749
749
|
async describeDatabaseModel(appId, databaseId, modelName) {
|
|
750
750
|
return this.get(`/app/${appId}/api/databases/${databaseId}/records/describe`, { modelName });
|
|
751
751
|
}
|
|
752
|
+
async queryDatabaseRecords(appId, databaseId, modelName, queryOptions) {
|
|
753
|
+
const body = { modelName };
|
|
754
|
+
if (queryOptions?.filter)
|
|
755
|
+
body.filter = queryOptions.filter;
|
|
756
|
+
const options = {};
|
|
757
|
+
if (queryOptions?.limit)
|
|
758
|
+
options.limit = queryOptions.limit;
|
|
759
|
+
if (queryOptions?.cursor)
|
|
760
|
+
options.uniqueStartKey = queryOptions.cursor;
|
|
761
|
+
if (Object.keys(options).length > 0)
|
|
762
|
+
body.options = options;
|
|
763
|
+
return this.post(`/app/${appId}/api/databases/${databaseId}/admin-data/query`, body);
|
|
764
|
+
}
|
|
752
765
|
// ============================================
|
|
753
766
|
// DATABASE OPERATIONS (registered operations)
|
|
754
767
|
// ============================================
|
|
@@ -1050,6 +1063,117 @@ export class ApiClient {
|
|
|
1050
1063
|
async deleteGroupTypeConfig(appId, groupType) {
|
|
1051
1064
|
return this.delete(`/app/${appId}/api/group-type-configs/${groupType}`);
|
|
1052
1065
|
}
|
|
1066
|
+
// ============================================
|
|
1067
|
+
// DOCUMENT EXPORT / IMPORT
|
|
1068
|
+
// ============================================
|
|
1069
|
+
async exportDocumentState(appId, documentId) {
|
|
1070
|
+
return this.get(`/app/${appId}/api/documents/${documentId}/export/state`);
|
|
1071
|
+
}
|
|
1072
|
+
async importDocumentState(appId, documentId, stateBase64) {
|
|
1073
|
+
return this.post(`/app/${appId}/api/documents/${documentId}/import/state`, { state: stateBase64 });
|
|
1074
|
+
}
|
|
1075
|
+
async getDocument(appId, documentId) {
|
|
1076
|
+
return this.get(`/app/${appId}/api/documents/${documentId}`);
|
|
1077
|
+
}
|
|
1078
|
+
async createDocument(appId, data) {
|
|
1079
|
+
return this.post(`/app/${appId}/api/documents`, data);
|
|
1080
|
+
}
|
|
1081
|
+
async listDocumentPermissions(appId, documentId) {
|
|
1082
|
+
return this.get(`/app/${appId}/api/documents/${documentId}/permissions`);
|
|
1083
|
+
}
|
|
1084
|
+
async grantDocumentPermission(appId, documentId, permissions) {
|
|
1085
|
+
return this.put(`/app/${appId}/api/documents/${documentId}/permissions`, { permissions });
|
|
1086
|
+
}
|
|
1087
|
+
async listDocumentInvitations(appId, documentId) {
|
|
1088
|
+
return this.get(`/app/${appId}/api/documents/${documentId}/invitations`);
|
|
1089
|
+
}
|
|
1090
|
+
async listDocumentBlobs(appId, documentId) {
|
|
1091
|
+
return this.get(`/app/${appId}/api/documents/${documentId}/blobs`);
|
|
1092
|
+
}
|
|
1093
|
+
async downloadBlob(appId, documentId, blobId) {
|
|
1094
|
+
const credentials = await this.ensureAuthenticated();
|
|
1095
|
+
const url = `${credentials.serverUrl}/app/${appId}/api/documents/${documentId}/blobs/${blobId}/download`;
|
|
1096
|
+
const headers = {
|
|
1097
|
+
Authorization: `Bearer ${credentials.accessToken}`,
|
|
1098
|
+
};
|
|
1099
|
+
if (credentials.globalAdminAppId) {
|
|
1100
|
+
headers["X-Global-Admin-App-Id"] = credentials.globalAdminAppId;
|
|
1101
|
+
}
|
|
1102
|
+
const response = await fetchWithTLS(url, { headers });
|
|
1103
|
+
if (!response.ok) {
|
|
1104
|
+
throw new ApiError(`Failed to download blob: ${response.statusText}`, response.status);
|
|
1105
|
+
}
|
|
1106
|
+
const arrayBuffer = await response.arrayBuffer();
|
|
1107
|
+
return Buffer.from(arrayBuffer);
|
|
1108
|
+
}
|
|
1109
|
+
async uploadBlob(appId, documentId, blobId, data, meta) {
|
|
1110
|
+
const credentials = await this.ensureAuthenticated();
|
|
1111
|
+
const url = `${credentials.serverUrl}/app/${appId}/api/documents/${documentId}/blobs/${blobId}`;
|
|
1112
|
+
const headers = {
|
|
1113
|
+
Authorization: `Bearer ${credentials.accessToken}`,
|
|
1114
|
+
"Content-Type": meta.contentType,
|
|
1115
|
+
"X-Blob-Filename": encodeURIComponent(meta.filename),
|
|
1116
|
+
"X-Blob-Size": String(data.length),
|
|
1117
|
+
"X-Blob-Sha256": meta.sha256,
|
|
1118
|
+
};
|
|
1119
|
+
if (credentials.globalAdminAppId) {
|
|
1120
|
+
headers["X-Global-Admin-App-Id"] = credentials.globalAdminAppId;
|
|
1121
|
+
}
|
|
1122
|
+
const response = await fetchWithTLS(url, {
|
|
1123
|
+
method: "PUT",
|
|
1124
|
+
headers,
|
|
1125
|
+
body: data,
|
|
1126
|
+
});
|
|
1127
|
+
if (!response.ok) {
|
|
1128
|
+
const text = await response.text();
|
|
1129
|
+
throw new ApiError(`Failed to upload blob: ${text}`, response.status);
|
|
1130
|
+
}
|
|
1131
|
+
return response.json();
|
|
1132
|
+
}
|
|
1133
|
+
async listDocumentAliases(appId, documentId) {
|
|
1134
|
+
return this.get(`/app/${appId}/api/documents/${documentId}/aliases`);
|
|
1135
|
+
}
|
|
1136
|
+
async setDocumentAlias(appId, aliasScope, aliasKey, documentId, ownerUserId, mustNotExist) {
|
|
1137
|
+
return this.put(`/app/${appId}/api/document-aliases/${aliasScope}/${encodeURIComponent(aliasKey)}`, {
|
|
1138
|
+
documentId,
|
|
1139
|
+
userId: ownerUserId,
|
|
1140
|
+
mustNotExist,
|
|
1141
|
+
});
|
|
1142
|
+
}
|
|
1143
|
+
async findUserByEmail(appId, email) {
|
|
1144
|
+
try {
|
|
1145
|
+
const result = await this.get(`/app/${appId}/api/users`, { email });
|
|
1146
|
+
const items = result?.items || (Array.isArray(result) ? result : []);
|
|
1147
|
+
return items[0] || null;
|
|
1148
|
+
}
|
|
1149
|
+
catch {
|
|
1150
|
+
return null;
|
|
1151
|
+
}
|
|
1152
|
+
}
|
|
1153
|
+
async listAdminDocuments(appId, userId) {
|
|
1154
|
+
const result = await this.get(`/admin/api/apps/${appId}/documents`, { userId });
|
|
1155
|
+
return result?.documents || result || [];
|
|
1156
|
+
}
|
|
1157
|
+
// ============================================
|
|
1158
|
+
// DATABASE EXPORT / IMPORT
|
|
1159
|
+
// ============================================
|
|
1160
|
+
async saveDatabaseRecord(appId, databaseId, modelName, id, data) {
|
|
1161
|
+
return this.post(`/app/${appId}/api/databases/${databaseId}/admin-data/save`, {
|
|
1162
|
+
modelName,
|
|
1163
|
+
id,
|
|
1164
|
+
data,
|
|
1165
|
+
});
|
|
1166
|
+
}
|
|
1167
|
+
async batchDatabaseRecords(appId, databaseId, ops) {
|
|
1168
|
+
return this.post(`/app/${appId}/api/databases/${databaseId}/admin-data/batch`, { ops });
|
|
1169
|
+
}
|
|
1170
|
+
async listDatabaseUniqueConstraints(appId, databaseId) {
|
|
1171
|
+
const result = await this.get(`/app/${appId}/api/databases/${databaseId}/records/unique-constraints`);
|
|
1172
|
+
return result?.constraints || result || [];
|
|
1173
|
+
}
|
|
1174
|
+
async registerDatabaseUniqueConstraint(appId, databaseId, constraint) {
|
|
1175
|
+
return this.post(`/app/${appId}/api/databases/${databaseId}/records/unique-constraint/register`, constraint);
|
|
1176
|
+
}
|
|
1053
1177
|
}
|
|
1054
1178
|
// Export a singleton instance
|
|
1055
1179
|
export const apiClient = new ApiClient();
|