primitive-admin 1.1.0-alpha.4 → 1.1.0-alpha.41
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 +325 -31
- package/assets/skill/skills/primitive-platform/SKILL.md +281 -0
- package/dist/bin/primitive.d.ts +2 -0
- package/dist/bin/primitive.js +268 -16
- package/dist/bin/primitive.js.map +1 -1
- package/dist/src/commands/admins.d.ts +2 -0
- package/dist/src/commands/admins.js +123 -18
- package/dist/src/commands/admins.js.map +1 -1
- package/dist/src/commands/analytics.d.ts +2 -0
- package/dist/src/commands/analytics.js +464 -55
- package/dist/src/commands/analytics.js.map +1 -1
- package/dist/src/commands/apps.d.ts +2 -0
- package/dist/src/commands/apps.js +55 -13
- package/dist/src/commands/apps.js.map +1 -1
- package/dist/src/commands/auth.d.ts +2 -0
- package/dist/src/commands/auth.js +177 -7
- package/dist/src/commands/auth.js.map +1 -1
- package/dist/src/commands/blob-buckets.d.ts +2 -0
- package/dist/src/commands/blob-buckets.js +422 -0
- package/dist/src/commands/blob-buckets.js.map +1 -0
- package/dist/src/commands/catalog.d.ts +2 -0
- package/dist/src/commands/catalog.js +34 -35
- package/dist/src/commands/catalog.js.map +1 -1
- package/dist/src/commands/collection-type-configs.d.ts +2 -0
- package/dist/src/commands/collection-type-configs.js +178 -0
- package/dist/src/commands/collection-type-configs.js.map +1 -0
- package/dist/src/commands/collections.d.ts +2 -0
- package/dist/src/commands/collections.js +515 -0
- package/dist/src/commands/collections.js.map +1 -0
- package/dist/src/commands/comparisons.d.ts +2 -0
- package/dist/src/commands/comparisons.js +6 -6
- package/dist/src/commands/comparisons.js.map +1 -1
- package/dist/src/commands/cron-triggers.d.ts +2 -0
- package/dist/src/commands/cron-triggers.js +357 -0
- package/dist/src/commands/cron-triggers.js.map +1 -0
- package/dist/src/commands/database-types.d.ts +2 -0
- package/dist/src/commands/database-types.js +471 -0
- package/dist/src/commands/database-types.js.map +1 -0
- package/dist/src/commands/databases.d.ts +2 -0
- package/dist/src/commands/databases.js +1462 -83
- package/dist/src/commands/databases.js.map +1 -1
- package/dist/src/commands/documents.d.ts +2 -0
- package/dist/src/commands/documents.js +518 -11
- package/dist/src/commands/documents.js.map +1 -1
- package/dist/src/commands/email-templates.d.ts +2 -0
- package/dist/src/commands/email-templates.js +281 -0
- package/dist/src/commands/email-templates.js.map +1 -0
- package/dist/src/commands/env.d.ts +12 -0
- package/dist/src/commands/env.js +260 -0
- package/dist/src/commands/env.js.map +1 -0
- package/dist/src/commands/group-type-configs.d.ts +2 -0
- package/dist/src/commands/group-type-configs.js +181 -0
- package/dist/src/commands/group-type-configs.js.map +1 -0
- package/dist/src/commands/groups.d.ts +2 -0
- package/dist/src/commands/groups.js +48 -45
- package/dist/src/commands/groups.js.map +1 -1
- package/dist/src/commands/guides.d.ts +159 -0
- package/dist/src/commands/guides.js +449 -35
- package/dist/src/commands/guides.js.map +1 -1
- package/dist/src/commands/init.d.ts +17 -0
- package/dist/src/commands/init.js +811 -201
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/commands/integrations.d.ts +2 -0
- package/dist/src/commands/integrations.js +533 -46
- package/dist/src/commands/integrations.js.map +1 -1
- package/dist/src/commands/llm.d.ts +2 -0
- package/dist/src/commands/llm.js +4 -2
- package/dist/src/commands/llm.js.map +1 -1
- package/dist/src/commands/metadata.d.ts +2 -0
- package/dist/src/commands/metadata.js +194 -0
- package/dist/src/commands/metadata.js.map +1 -0
- package/dist/src/commands/prompts.d.ts +2 -0
- package/dist/src/commands/prompts.js +50 -52
- package/dist/src/commands/prompts.js.map +1 -1
- package/dist/src/commands/rule-sets.d.ts +3 -0
- package/dist/src/commands/rule-sets.js +388 -0
- package/dist/src/commands/rule-sets.js.map +1 -0
- package/dist/src/commands/scripts.d.ts +2 -0
- package/dist/src/commands/scripts.js +667 -0
- package/dist/src/commands/scripts.js.map +1 -0
- package/dist/src/commands/secrets.d.ts +2 -0
- package/dist/src/commands/secrets.js +108 -0
- package/dist/src/commands/secrets.js.map +1 -0
- package/dist/src/commands/skill.d.ts +2 -0
- package/dist/src/commands/skill.js +29 -0
- package/dist/src/commands/skill.js.map +1 -0
- package/dist/src/commands/sync.d.ts +175 -0
- package/dist/src/commands/sync.js +4412 -233
- package/dist/src/commands/sync.js.map +1 -1
- package/dist/src/commands/tokens.d.ts +2 -0
- package/dist/src/commands/tokens.js +122 -19
- package/dist/src/commands/tokens.js.map +1 -1
- package/dist/src/commands/users.d.ts +2 -0
- package/dist/src/commands/users.js +440 -22
- package/dist/src/commands/users.js.map +1 -1
- package/dist/src/commands/waitlist.d.ts +2 -0
- package/dist/src/commands/waitlist.js +10 -10
- package/dist/src/commands/waitlist.js.map +1 -1
- package/dist/src/commands/webhooks.d.ts +2 -0
- package/dist/src/commands/webhooks.js +391 -0
- package/dist/src/commands/webhooks.js.map +1 -0
- package/dist/src/commands/workflows.d.ts +49 -0
- package/dist/src/commands/workflows.js +1009 -123
- package/dist/src/commands/workflows.js.map +1 -1
- package/dist/src/lib/api-client.d.ts +1283 -0
- package/dist/src/lib/api-client.js +1129 -83
- package/dist/src/lib/api-client.js.map +1 -1
- package/dist/src/lib/auth-flow.d.ts +8 -0
- package/dist/src/lib/block-layout.d.ts +160 -0
- package/dist/src/lib/block-layout.js +451 -0
- package/dist/src/lib/block-layout.js.map +1 -0
- package/dist/src/lib/cli-manifest.d.ts +60 -0
- package/dist/src/lib/cli-manifest.js +70 -0
- package/dist/src/lib/cli-manifest.js.map +1 -0
- package/dist/src/lib/config.d.ts +53 -0
- package/dist/src/lib/config.js +92 -53
- package/dist/src/lib/config.js.map +1 -1
- package/dist/src/lib/confirm-prompt.d.ts +83 -0
- package/dist/src/lib/confirm-prompt.js +110 -0
- package/dist/src/lib/confirm-prompt.js.map +1 -0
- package/dist/src/lib/constants.d.ts +2 -0
- package/dist/src/lib/constants.js +3 -0
- package/dist/src/lib/constants.js.map +1 -0
- package/dist/src/lib/crash-handlers.d.ts +20 -0
- package/dist/src/lib/crash-handlers.js +49 -0
- package/dist/src/lib/crash-handlers.js.map +1 -0
- package/dist/src/lib/credentials-store.d.ts +79 -0
- package/dist/src/lib/credentials-store.js +307 -0
- package/dist/src/lib/credentials-store.js.map +1 -0
- package/dist/src/lib/csv.d.ts +48 -0
- package/dist/src/lib/csv.js +177 -0
- package/dist/src/lib/csv.js.map +1 -0
- package/dist/src/lib/db-codegen/dbFingerprint.d.ts +10 -0
- package/dist/src/lib/db-codegen/dbFingerprint.js +17 -0
- package/dist/src/lib/db-codegen/dbFingerprint.js.map +1 -0
- package/dist/src/lib/db-codegen/dbGenerator.d.ts +111 -0
- package/dist/src/lib/db-codegen/dbGenerator.js +371 -0
- package/dist/src/lib/db-codegen/dbGenerator.js.map +1 -0
- package/dist/src/lib/db-codegen/dbNaming.d.ts +45 -0
- package/dist/src/lib/db-codegen/dbNaming.js +104 -0
- package/dist/src/lib/db-codegen/dbNaming.js.map +1 -0
- package/dist/src/lib/db-codegen/dbTemplates.d.ts +97 -0
- package/dist/src/lib/db-codegen/dbTemplates.js +159 -0
- package/dist/src/lib/db-codegen/dbTemplates.js.map +1 -0
- package/dist/src/lib/db-codegen/dbTsTypes.d.ts +78 -0
- package/dist/src/lib/db-codegen/dbTsTypes.js +112 -0
- package/dist/src/lib/db-codegen/dbTsTypes.js.map +1 -0
- package/dist/src/lib/env-resolver.d.ts +62 -0
- package/dist/src/lib/env-resolver.js +121 -0
- package/dist/src/lib/env-resolver.js.map +1 -0
- package/dist/src/lib/fetch.d.ts +5 -0
- package/dist/src/lib/generated-allowlist.d.ts +28 -0
- package/dist/src/lib/generated-allowlist.js +220 -0
- package/dist/src/lib/generated-allowlist.js.map +1 -0
- package/dist/src/lib/init-config.d.ts +59 -0
- package/dist/src/lib/init-config.js +113 -0
- package/dist/src/lib/init-config.js.map +1 -0
- package/dist/src/lib/migration-nag.d.ts +49 -0
- package/dist/src/lib/migration-nag.js +163 -0
- package/dist/src/lib/migration-nag.js.map +1 -0
- package/dist/src/lib/output.d.ts +86 -0
- package/dist/src/lib/output.js +150 -8
- package/dist/src/lib/output.js.map +1 -1
- package/dist/src/lib/paginate.d.ts +33 -0
- package/dist/src/lib/paginate.js +42 -0
- package/dist/src/lib/paginate.js.map +1 -0
- package/dist/src/lib/project-config.d.ts +97 -0
- package/dist/src/lib/project-config.js +209 -0
- package/dist/src/lib/project-config.js.map +1 -0
- package/dist/src/lib/query-operators.d.ts +43 -0
- package/dist/src/lib/query-operators.js +80 -0
- package/dist/src/lib/query-operators.js.map +1 -0
- package/dist/src/lib/refresh-admin-credentials.d.ts +65 -0
- package/dist/src/lib/refresh-admin-credentials.js +103 -0
- package/dist/src/lib/refresh-admin-credentials.js.map +1 -0
- package/dist/src/lib/resolve-platform.d.ts +45 -0
- package/dist/src/lib/resolve-platform.js +43 -0
- package/dist/src/lib/resolve-platform.js.map +1 -0
- package/dist/src/lib/skill-installer.d.ts +23 -0
- package/dist/src/lib/skill-installer.js +135 -0
- package/dist/src/lib/skill-installer.js.map +1 -0
- package/dist/src/lib/snapshots.d.ts +99 -0
- package/dist/src/lib/snapshots.js +357 -0
- package/dist/src/lib/snapshots.js.map +1 -0
- package/dist/src/lib/sync-paths.d.ts +72 -0
- package/dist/src/lib/sync-paths.js +130 -0
- package/dist/src/lib/sync-paths.js.map +1 -0
- package/dist/src/lib/template.d.ts +97 -0
- package/dist/src/lib/template.js +336 -62
- package/dist/src/lib/template.js.map +1 -1
- package/dist/src/lib/token-inject.d.ts +56 -0
- package/dist/src/lib/token-inject.js +204 -0
- package/dist/src/lib/token-inject.js.map +1 -0
- package/dist/src/lib/toml-database-config.d.ts +152 -0
- package/dist/src/lib/toml-database-config.js +600 -0
- package/dist/src/lib/toml-database-config.js.map +1 -0
- package/dist/src/lib/toml-metadata-config.d.ts +139 -0
- package/dist/src/lib/toml-metadata-config.js +427 -0
- package/dist/src/lib/toml-metadata-config.js.map +1 -0
- package/dist/src/lib/toml-params-validator.d.ts +129 -0
- package/dist/src/lib/toml-params-validator.js +298 -0
- package/dist/src/lib/toml-params-validator.js.map +1 -0
- package/dist/src/lib/version-check.d.ts +10 -0
- package/dist/src/lib/version-check.js +172 -0
- package/dist/src/lib/version-check.js.map +1 -0
- package/dist/src/lib/workflow-apply.d.ts +66 -0
- package/dist/src/lib/workflow-apply.js +117 -0
- package/dist/src/lib/workflow-apply.js.map +1 -0
- package/dist/src/lib/workflow-fragments.d.ts +41 -0
- package/dist/src/lib/workflow-fragments.js +121 -0
- package/dist/src/lib/workflow-fragments.js.map +1 -0
- package/dist/src/lib/workflow-toml-validator.d.ts +95 -0
- package/dist/src/lib/workflow-toml-validator.js +323 -0
- package/dist/src/lib/workflow-toml-validator.js.map +1 -0
- package/dist/src/types/index.d.ts +520 -0
- package/dist/src/validators.d.ts +64 -0
- package/dist/src/validators.js +63 -0
- package/dist/src/validators.js.map +1 -0
- package/package.json +18 -4
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { ApiClient } from "../lib/api-client.js";
|
|
2
2
|
import { resolveAppId } from "../lib/config.js";
|
|
3
|
-
import { success, error, info, json } from "../lib/output.js";
|
|
3
|
+
import { success, error, info, formatTable, formatDate, json, keyValue, warn, } from "../lib/output.js";
|
|
4
|
+
import { confirmPrompt } from "../lib/confirm-prompt.js";
|
|
5
|
+
import * as fs from "fs";
|
|
6
|
+
import * as path from "path";
|
|
4
7
|
export function registerDocumentsCommands(program) {
|
|
5
8
|
const documents = program
|
|
6
9
|
.command("documents")
|
|
@@ -8,7 +11,7 @@ export function registerDocumentsCommands(program) {
|
|
|
8
11
|
.addHelpText("after", `
|
|
9
12
|
Examples:
|
|
10
13
|
$ primitive documents transfer-owner <document-id> <new-owner-id>
|
|
11
|
-
$ primitive documents
|
|
14
|
+
$ primitive documents group-permissions list <document-id>
|
|
12
15
|
`);
|
|
13
16
|
// Transfer document ownership
|
|
14
17
|
documents
|
|
@@ -43,15 +46,14 @@ Examples:
|
|
|
43
46
|
process.exit(1);
|
|
44
47
|
}
|
|
45
48
|
if (!options.yes) {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
{
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
]);
|
|
49
|
+
let confirm;
|
|
50
|
+
try {
|
|
51
|
+
confirm = await confirmPrompt(`Transfer ownership of document ${documentId} to user ${newOwnerId}? This cannot be undone.`);
|
|
52
|
+
}
|
|
53
|
+
catch (err) {
|
|
54
|
+
error(err.message);
|
|
55
|
+
process.exit(1);
|
|
56
|
+
}
|
|
55
57
|
if (!confirm) {
|
|
56
58
|
info("Cancelled.");
|
|
57
59
|
return;
|
|
@@ -71,5 +73,510 @@ Examples:
|
|
|
71
73
|
process.exit(1);
|
|
72
74
|
}
|
|
73
75
|
});
|
|
76
|
+
// ---- Group Permissions subcommand group ----
|
|
77
|
+
const groupPermissions = documents
|
|
78
|
+
.command("group-permissions")
|
|
79
|
+
.description("Manage group permissions on a document");
|
|
80
|
+
// List group permissions
|
|
81
|
+
groupPermissions
|
|
82
|
+
.command("list")
|
|
83
|
+
.description("List group permissions for a document")
|
|
84
|
+
.argument("<document-id>", "Document ID")
|
|
85
|
+
.option("--app <app-id>", "App ID")
|
|
86
|
+
.option("--json", "Output as JSON")
|
|
87
|
+
.action(async (documentId, options) => {
|
|
88
|
+
const resolvedAppId = resolveAppId(undefined, options);
|
|
89
|
+
const client = new ApiClient();
|
|
90
|
+
try {
|
|
91
|
+
const result = await client.listDocumentGroupPermissions(resolvedAppId, documentId);
|
|
92
|
+
const list = Array.isArray(result) ? result : result?.permissions ?? [];
|
|
93
|
+
if (options.json) {
|
|
94
|
+
json(list);
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
if (list.length === 0) {
|
|
98
|
+
info("No group permissions found.");
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
console.log(formatTable(list, [
|
|
102
|
+
{ header: "GROUP_TYPE", key: "groupType" },
|
|
103
|
+
{ header: "GROUP_ID", key: "groupId" },
|
|
104
|
+
{ header: "PERMISSION", key: "permission" },
|
|
105
|
+
{ header: "GRANTED", key: "grantedAt", format: formatDate },
|
|
106
|
+
]));
|
|
107
|
+
}
|
|
108
|
+
catch (err) {
|
|
109
|
+
error(err.message);
|
|
110
|
+
process.exit(1);
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
// Grant group permission
|
|
114
|
+
groupPermissions
|
|
115
|
+
.command("grant")
|
|
116
|
+
.description("Grant a group permission on a document")
|
|
117
|
+
.argument("<document-id>", "Document ID")
|
|
118
|
+
.requiredOption("--group-type <type>", "Group type")
|
|
119
|
+
.requiredOption("--group-id <id>", "Group ID")
|
|
120
|
+
.requiredOption("--permission <permission>", "Permission level: read-write or reader")
|
|
121
|
+
.option("--app <app-id>", "App ID")
|
|
122
|
+
.option("--json", "Output as JSON")
|
|
123
|
+
.action(async (documentId, options) => {
|
|
124
|
+
const resolvedAppId = resolveAppId(undefined, options);
|
|
125
|
+
const client = new ApiClient();
|
|
126
|
+
try {
|
|
127
|
+
const result = await client.grantDocumentGroupPermission(resolvedAppId, documentId, {
|
|
128
|
+
groupType: options.groupType,
|
|
129
|
+
groupId: options.groupId,
|
|
130
|
+
permission: options.permission,
|
|
131
|
+
});
|
|
132
|
+
if (options.json) {
|
|
133
|
+
json(result);
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
success(`Permission '${options.permission}' granted to group ${options.groupType}/${options.groupId}.`);
|
|
137
|
+
}
|
|
138
|
+
catch (err) {
|
|
139
|
+
error(err.message);
|
|
140
|
+
process.exit(1);
|
|
141
|
+
}
|
|
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("--owner <userId-or-email>", "User ID or email to set as document owner (admin only)")
|
|
246
|
+
.option("--json", "Output as JSON")
|
|
247
|
+
.action(async (first, second, options) => {
|
|
248
|
+
let resolvedAppId;
|
|
249
|
+
let importPath;
|
|
250
|
+
if (second && !second.startsWith("-")) {
|
|
251
|
+
resolvedAppId = resolveAppId(first, options);
|
|
252
|
+
importPath = second;
|
|
253
|
+
}
|
|
254
|
+
else {
|
|
255
|
+
resolvedAppId = resolveAppId(undefined, options);
|
|
256
|
+
importPath = first;
|
|
257
|
+
}
|
|
258
|
+
if (!importPath) {
|
|
259
|
+
error("Import path is required.");
|
|
260
|
+
process.exit(1);
|
|
261
|
+
}
|
|
262
|
+
const client = new ApiClient();
|
|
263
|
+
// Resolve --owner to a userId
|
|
264
|
+
let ownerUserId;
|
|
265
|
+
if (options.owner) {
|
|
266
|
+
if (options.owner.includes("@")) {
|
|
267
|
+
const user = await client.findUserByEmail(resolvedAppId, options.owner);
|
|
268
|
+
if (!user) {
|
|
269
|
+
error(`No user found with email "${options.owner}" in app ${resolvedAppId}.`);
|
|
270
|
+
process.exit(1);
|
|
271
|
+
}
|
|
272
|
+
ownerUserId = user.userId || user.id;
|
|
273
|
+
info(`Resolved owner email to userId: ${ownerUserId}`);
|
|
274
|
+
}
|
|
275
|
+
else {
|
|
276
|
+
ownerUserId = options.owner;
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
try {
|
|
280
|
+
// Determine if this is a manifest-based export or a single document
|
|
281
|
+
const manifestPath = path.join(importPath, "manifest.json");
|
|
282
|
+
let docDirs = [];
|
|
283
|
+
if (fs.existsSync(manifestPath)) {
|
|
284
|
+
const manifest = JSON.parse(fs.readFileSync(manifestPath, "utf-8"));
|
|
285
|
+
for (const docId of manifest.documents) {
|
|
286
|
+
const docDir = path.join(importPath, "documents", docId);
|
|
287
|
+
if (fs.existsSync(docDir)) {
|
|
288
|
+
docDirs.push(docDir);
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
else if (fs.existsSync(path.join(importPath, "metadata.json"))) {
|
|
293
|
+
// Single document directory
|
|
294
|
+
docDirs = [importPath];
|
|
295
|
+
}
|
|
296
|
+
else if (fs.existsSync(path.join(importPath, "documents"))) {
|
|
297
|
+
// Export directory without manifest — discover documents
|
|
298
|
+
const entries = fs.readdirSync(path.join(importPath, "documents"), { withFileTypes: true });
|
|
299
|
+
for (const entry of entries) {
|
|
300
|
+
if (entry.isDirectory()) {
|
|
301
|
+
docDirs.push(path.join(importPath, "documents", entry.name));
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
else {
|
|
306
|
+
error("No valid export data found at the specified path.");
|
|
307
|
+
process.exit(1);
|
|
308
|
+
}
|
|
309
|
+
if (docDirs.length === 0) {
|
|
310
|
+
info("No documents to import.");
|
|
311
|
+
return;
|
|
312
|
+
}
|
|
313
|
+
const summary = {
|
|
314
|
+
created: 0,
|
|
315
|
+
updated: 0,
|
|
316
|
+
skipped: 0,
|
|
317
|
+
blobsUploaded: 0,
|
|
318
|
+
aliasesSet: 0,
|
|
319
|
+
aliasesSkipped: 0,
|
|
320
|
+
};
|
|
321
|
+
for (const docDir of docDirs) {
|
|
322
|
+
await importSingleDocument(client, resolvedAppId, docDir, options.overwrite || false, options.aliases || "skip", options.dryRun || false, summary, ownerUserId);
|
|
323
|
+
}
|
|
324
|
+
if (options.json) {
|
|
325
|
+
json(summary);
|
|
326
|
+
}
|
|
327
|
+
else {
|
|
328
|
+
success(`Import complete:`);
|
|
329
|
+
keyValue(" Documents created", String(summary.created));
|
|
330
|
+
if (summary.updated > 0)
|
|
331
|
+
keyValue(" Documents updated", String(summary.updated));
|
|
332
|
+
if (summary.skipped > 0)
|
|
333
|
+
keyValue(" Documents skipped", String(summary.skipped));
|
|
334
|
+
if (summary.blobsUploaded > 0)
|
|
335
|
+
keyValue(" Blobs uploaded", String(summary.blobsUploaded));
|
|
336
|
+
if (summary.aliasesSet > 0)
|
|
337
|
+
keyValue(" Aliases set", String(summary.aliasesSet));
|
|
338
|
+
if (summary.aliasesSkipped > 0)
|
|
339
|
+
keyValue(" Aliases skipped", String(summary.aliasesSkipped));
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
catch (err) {
|
|
343
|
+
error(err.message);
|
|
344
|
+
process.exit(1);
|
|
345
|
+
}
|
|
346
|
+
});
|
|
347
|
+
// Revoke group permission
|
|
348
|
+
groupPermissions
|
|
349
|
+
.command("revoke")
|
|
350
|
+
.description("Revoke a group's permission on a document")
|
|
351
|
+
.argument("<document-id>", "Document ID")
|
|
352
|
+
.argument("<group-type>", "Group type")
|
|
353
|
+
.argument("<group-id>", "Group ID")
|
|
354
|
+
.option("--app <app-id>", "App ID")
|
|
355
|
+
.option("-y, --yes", "Skip confirmation prompt")
|
|
356
|
+
.action(async (documentId, groupType, groupId, options) => {
|
|
357
|
+
const resolvedAppId = resolveAppId(undefined, options);
|
|
358
|
+
if (!options.yes) {
|
|
359
|
+
let confirm;
|
|
360
|
+
try {
|
|
361
|
+
confirm = await confirmPrompt(`Revoke permission for group ${groupType}/${groupId} on document ${documentId}?`);
|
|
362
|
+
}
|
|
363
|
+
catch (err) {
|
|
364
|
+
error(err.message);
|
|
365
|
+
process.exit(1);
|
|
366
|
+
}
|
|
367
|
+
if (!confirm) {
|
|
368
|
+
info("Cancelled.");
|
|
369
|
+
return;
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
const client = new ApiClient();
|
|
373
|
+
try {
|
|
374
|
+
await client.revokeDocumentGroupPermission(resolvedAppId, documentId, groupType, groupId);
|
|
375
|
+
success(`Permission revoked for group ${groupType}/${groupId}.`);
|
|
376
|
+
}
|
|
377
|
+
catch (err) {
|
|
378
|
+
error(err.message);
|
|
379
|
+
process.exit(1);
|
|
380
|
+
}
|
|
381
|
+
});
|
|
382
|
+
}
|
|
383
|
+
// ============================================
|
|
384
|
+
// Helper functions for export/import
|
|
385
|
+
// ============================================
|
|
386
|
+
async function exportSingleDocument(client, appId, documentId, outputDir, includeBlobs, jsonOutput) {
|
|
387
|
+
const docDir = path.join(outputDir, "documents", documentId);
|
|
388
|
+
fs.mkdirSync(docDir, { recursive: true });
|
|
389
|
+
// 1. Fetch document metadata
|
|
390
|
+
const docMeta = await client.getDocument(appId, documentId);
|
|
391
|
+
// 2. Export Yjs state
|
|
392
|
+
const stateResult = await client.exportDocumentState(appId, documentId);
|
|
393
|
+
fs.writeFileSync(path.join(docDir, "document.yjs"), Buffer.from(stateResult.state, "base64"));
|
|
394
|
+
// 3. Fetch permissions
|
|
395
|
+
let permissions = [];
|
|
396
|
+
try {
|
|
397
|
+
const permResult = await client.listDocumentPermissions(appId, documentId);
|
|
398
|
+
permissions = Array.isArray(permResult) ? permResult : permResult?.permissions || [];
|
|
399
|
+
}
|
|
400
|
+
catch {
|
|
401
|
+
// Permissions endpoint might not return data for all docs
|
|
402
|
+
}
|
|
403
|
+
// 4. Fetch invitations
|
|
404
|
+
let invitations = [];
|
|
405
|
+
try {
|
|
406
|
+
const invResult = await client.listDocumentInvitations(appId, documentId);
|
|
407
|
+
invitations = Array.isArray(invResult) ? invResult : invResult?.invitations || [];
|
|
408
|
+
}
|
|
409
|
+
catch {
|
|
410
|
+
// May not have invitations
|
|
411
|
+
}
|
|
412
|
+
// Merge permissions and invitations into a single list with email identifiers
|
|
413
|
+
const permissionsExport = [
|
|
414
|
+
...permissions.map((p) => ({
|
|
415
|
+
email: p.email,
|
|
416
|
+
permission: p.permission,
|
|
417
|
+
grantedAt: p.grantedAt,
|
|
418
|
+
})),
|
|
419
|
+
...invitations
|
|
420
|
+
.filter((i) => !i.accepted && new Date(i.expiresAt) > new Date())
|
|
421
|
+
.map((i) => ({
|
|
422
|
+
email: i.email,
|
|
423
|
+
permission: i.permission,
|
|
424
|
+
source: "invitation",
|
|
425
|
+
status: "pending",
|
|
426
|
+
})),
|
|
427
|
+
];
|
|
428
|
+
fs.writeFileSync(path.join(docDir, "permissions.json"), JSON.stringify(permissionsExport, null, 2));
|
|
429
|
+
// 5. Fetch aliases (user-scoped only)
|
|
430
|
+
let aliases = [];
|
|
431
|
+
try {
|
|
432
|
+
const aliasResult = await client.listDocumentAliases(appId, documentId);
|
|
433
|
+
aliases = (Array.isArray(aliasResult) ? aliasResult : aliasResult?.aliases || [])
|
|
434
|
+
.filter((a) => (a.scope || a.aliasScope) === "user");
|
|
435
|
+
}
|
|
436
|
+
catch {
|
|
437
|
+
// May not have aliases
|
|
438
|
+
}
|
|
439
|
+
// 6. Write metadata
|
|
440
|
+
const metadata = {
|
|
441
|
+
documentId: docMeta.documentId || documentId,
|
|
442
|
+
title: docMeta.title,
|
|
443
|
+
tags: docMeta.tags || [],
|
|
444
|
+
createdAt: docMeta.createdAt,
|
|
445
|
+
createdBy: docMeta.createdByEmail || docMeta.createdBy,
|
|
446
|
+
aliases: aliases.map((a) => ({
|
|
447
|
+
aliasScope: a.scope || a.aliasScope,
|
|
448
|
+
aliasKey: a.aliasKey,
|
|
449
|
+
})),
|
|
450
|
+
};
|
|
451
|
+
fs.writeFileSync(path.join(docDir, "metadata.json"), JSON.stringify(metadata, null, 2));
|
|
452
|
+
// 7. Blobs
|
|
453
|
+
if (includeBlobs) {
|
|
454
|
+
let blobs = [];
|
|
455
|
+
try {
|
|
456
|
+
const blobResult = await client.listDocumentBlobs(appId, documentId);
|
|
457
|
+
blobs = Array.isArray(blobResult) ? blobResult : blobResult?.items || blobResult?.blobs || [];
|
|
458
|
+
}
|
|
459
|
+
catch {
|
|
460
|
+
// May not have blobs
|
|
461
|
+
}
|
|
462
|
+
if (blobs.length > 0) {
|
|
463
|
+
const blobsDir = path.join(docDir, "blobs");
|
|
464
|
+
fs.mkdirSync(blobsDir, { recursive: true });
|
|
465
|
+
const blobIndex = blobs.map((b) => ({
|
|
466
|
+
blobId: b.blobId,
|
|
467
|
+
filename: b.filename,
|
|
468
|
+
contentType: b.contentType,
|
|
469
|
+
sha256: b.sha256,
|
|
470
|
+
numBytes: b.numBytes,
|
|
471
|
+
}));
|
|
472
|
+
fs.writeFileSync(path.join(blobsDir, "index.json"), JSON.stringify(blobIndex, null, 2));
|
|
473
|
+
// Download blobs (sequentially to avoid overwhelming the server)
|
|
474
|
+
for (const blob of blobs) {
|
|
475
|
+
const data = await client.downloadBlob(appId, documentId, blob.blobId);
|
|
476
|
+
fs.writeFileSync(path.join(blobsDir, `${blob.blobId}.bin`), data);
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
if (jsonOutput) {
|
|
481
|
+
json({
|
|
482
|
+
documentId,
|
|
483
|
+
title: metadata.title,
|
|
484
|
+
stateBytes: stateResult.byteLength,
|
|
485
|
+
permissions: permissionsExport.length,
|
|
486
|
+
aliases: aliases.length,
|
|
487
|
+
exportPath: docDir,
|
|
488
|
+
});
|
|
489
|
+
}
|
|
490
|
+
else {
|
|
491
|
+
success(`Exported document ${documentId} (${metadata.title || "untitled"}) to ${docDir}`);
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
async function importSingleDocument(client, appId, docDir, overwrite, aliasMode, dryRun, summary, ownerUserId) {
|
|
495
|
+
const metadataPath = path.join(docDir, "metadata.json");
|
|
496
|
+
if (!fs.existsSync(metadataPath)) {
|
|
497
|
+
warn(`Skipping ${docDir}: no metadata.json found`);
|
|
498
|
+
summary.skipped++;
|
|
499
|
+
return;
|
|
500
|
+
}
|
|
501
|
+
const metadata = JSON.parse(fs.readFileSync(metadataPath, "utf-8"));
|
|
502
|
+
const documentId = metadata.documentId;
|
|
503
|
+
if (dryRun) {
|
|
504
|
+
info(`[dry-run] Would import document ${documentId} (${metadata.title || "untitled"})`);
|
|
505
|
+
summary.created++;
|
|
506
|
+
return;
|
|
507
|
+
}
|
|
508
|
+
// Check if document exists
|
|
509
|
+
let exists = false;
|
|
510
|
+
try {
|
|
511
|
+
await client.getDocument(appId, documentId);
|
|
512
|
+
exists = true;
|
|
513
|
+
}
|
|
514
|
+
catch {
|
|
515
|
+
exists = false;
|
|
516
|
+
}
|
|
517
|
+
if (exists && !overwrite) {
|
|
518
|
+
warn(`Skipping ${documentId}: already exists (use --overwrite to replace)`);
|
|
519
|
+
summary.skipped++;
|
|
520
|
+
return;
|
|
521
|
+
}
|
|
522
|
+
// Create document if it doesn't exist
|
|
523
|
+
if (!exists) {
|
|
524
|
+
await client.createDocument(appId, {
|
|
525
|
+
title: metadata.title || "Imported Document",
|
|
526
|
+
documentId,
|
|
527
|
+
tags: metadata.tags,
|
|
528
|
+
...(ownerUserId ? { createdBy: ownerUserId } : {}),
|
|
529
|
+
});
|
|
530
|
+
summary.created++;
|
|
531
|
+
}
|
|
532
|
+
else {
|
|
533
|
+
summary.updated++;
|
|
534
|
+
}
|
|
535
|
+
// Import Yjs state
|
|
536
|
+
const yjsPath = path.join(docDir, "document.yjs");
|
|
537
|
+
if (fs.existsSync(yjsPath)) {
|
|
538
|
+
const stateBuffer = fs.readFileSync(yjsPath);
|
|
539
|
+
const stateBase64 = stateBuffer.toString("base64");
|
|
540
|
+
await client.importDocumentState(appId, documentId, stateBase64);
|
|
541
|
+
}
|
|
542
|
+
// Upload blobs
|
|
543
|
+
const blobIndexPath = path.join(docDir, "blobs", "index.json");
|
|
544
|
+
if (fs.existsSync(blobIndexPath)) {
|
|
545
|
+
const blobIndex = JSON.parse(fs.readFileSync(blobIndexPath, "utf-8"));
|
|
546
|
+
for (const blob of blobIndex) {
|
|
547
|
+
const blobPath = path.join(docDir, "blobs", `${blob.blobId}.bin`);
|
|
548
|
+
if (fs.existsSync(blobPath)) {
|
|
549
|
+
const data = fs.readFileSync(blobPath);
|
|
550
|
+
await client.uploadBlob(appId, documentId, blob.blobId, data, {
|
|
551
|
+
filename: blob.filename,
|
|
552
|
+
contentType: blob.contentType,
|
|
553
|
+
sha256: blob.sha256,
|
|
554
|
+
});
|
|
555
|
+
summary.blobsUploaded++;
|
|
556
|
+
}
|
|
557
|
+
}
|
|
558
|
+
}
|
|
559
|
+
// Permissions are exported for reference but not restored during import.
|
|
560
|
+
// The importing admin is the new owner; sharing is managed in the target app.
|
|
561
|
+
// Restore aliases
|
|
562
|
+
if (metadata.aliases && Array.isArray(metadata.aliases)) {
|
|
563
|
+
for (const alias of metadata.aliases) {
|
|
564
|
+
if (alias.aliasScope !== "user")
|
|
565
|
+
continue;
|
|
566
|
+
if (!ownerUserId) {
|
|
567
|
+
summary.aliasesSkipped++;
|
|
568
|
+
continue;
|
|
569
|
+
}
|
|
570
|
+
try {
|
|
571
|
+
await client.setDocumentAlias(appId, alias.aliasScope, alias.aliasKey, documentId, ownerUserId, aliasMode === "skip" // mustNotExist: true for skip mode, false for overwrite
|
|
572
|
+
);
|
|
573
|
+
summary.aliasesSet++;
|
|
574
|
+
}
|
|
575
|
+
catch {
|
|
576
|
+
summary.aliasesSkipped++;
|
|
577
|
+
}
|
|
578
|
+
}
|
|
579
|
+
}
|
|
580
|
+
info(`Imported document ${documentId} (${metadata.title || "untitled"})`);
|
|
74
581
|
}
|
|
75
582
|
//# 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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"}
|