appwrite-utils-cli 1.9.7 → 1.12.0
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 +1004 -1004
- package/dist/adapters/index.d.ts +7 -8
- package/dist/adapters/index.js +7 -9
- package/dist/backups/operations/bucketBackup.js +2 -2
- package/dist/backups/operations/collectionBackup.d.ts +1 -1
- package/dist/backups/operations/collectionBackup.js +3 -3
- package/dist/backups/operations/comprehensiveBackup.d.ts +1 -1
- package/dist/backups/operations/comprehensiveBackup.js +2 -2
- package/dist/backups/tracking/centralizedTracking.d.ts +1 -1
- package/dist/backups/tracking/centralizedTracking.js +2 -2
- package/dist/cli/commands/configCommands.js +51 -7
- package/dist/cli/commands/databaseCommands.js +156 -104
- package/dist/cli/commands/functionCommands.js +3 -3
- package/dist/cli/commands/importFileCommands.d.ts +7 -0
- package/dist/cli/commands/importFileCommands.js +674 -0
- package/dist/cli/commands/schemaCommands.js +3 -3
- package/dist/cli/commands/storageCommands.js +2 -3
- package/dist/cli/commands/transferCommands.js +3 -5
- package/dist/collections/{attributes.d.ts → columns.d.ts} +1 -1
- package/dist/collections/{attributes.js → columns.js} +15 -9
- package/dist/collections/indexes.js +1 -3
- package/dist/collections/methods.d.ts +1 -1
- package/dist/collections/methods.js +38 -20
- package/dist/collections/tableOperations.d.ts +1 -0
- package/dist/collections/tableOperations.js +30 -11
- package/dist/collections/transferOperations.d.ts +1 -1
- package/dist/collections/transferOperations.js +3 -4
- package/dist/collections/wipeOperations.d.ts +4 -3
- package/dist/collections/wipeOperations.js +112 -39
- package/dist/databases/methods.js +2 -2
- package/dist/databases/setup.js +2 -2
- package/dist/examples/yamlTerminologyExample.js +2 -2
- package/dist/functions/deployments.d.ts +1 -1
- package/dist/functions/deployments.js +6 -6
- package/dist/functions/fnConfigDiscovery.js +2 -2
- package/dist/functions/methods.js +2 -2
- package/dist/functions/templates/count-docs-in-collection/README.md +53 -53
- package/dist/functions/templates/count-docs-in-collection/src/main.ts +159 -159
- package/dist/functions/templates/count-docs-in-collection/src/request.ts +8 -8
- package/dist/functions/templates/hono-typescript/README.md +285 -285
- package/dist/functions/templates/hono-typescript/src/adapters/request.ts +73 -73
- package/dist/functions/templates/hono-typescript/src/adapters/response.ts +105 -105
- package/dist/functions/templates/hono-typescript/src/app.ts +179 -179
- package/dist/functions/templates/hono-typescript/src/context.ts +102 -102
- package/{src/functions/templates/hono-typescript/src/index.ts → dist/functions/templates/hono-typescript/src/main.ts} +53 -53
- package/dist/functions/templates/hono-typescript/src/middleware/appwrite.ts +118 -118
- package/dist/functions/templates/typescript-node/README.md +31 -31
- package/dist/functions/templates/typescript-node/src/context.ts +102 -102
- package/dist/functions/templates/typescript-node/src/{index.ts → main.ts} +29 -29
- package/dist/functions/templates/uv/README.md +30 -30
- package/dist/functions/templates/uv/pyproject.toml +29 -29
- package/dist/functions/templates/uv/src/context.py +124 -124
- package/dist/functions/templates/uv/src/{index.py → main.py} +45 -45
- package/dist/init.js +1 -1
- package/dist/interactiveCLI.d.ts +6 -1
- package/dist/interactiveCLI.js +79 -25
- package/dist/main.js +125 -180
- package/dist/migrations/afterImportActions.js +2 -3
- package/dist/migrations/appwriteToX.d.ts +1 -1
- package/dist/migrations/appwriteToX.js +10 -8
- package/dist/migrations/comprehensiveTransfer.js +3 -5
- package/dist/migrations/dataLoader.d.ts +4 -2
- package/dist/migrations/dataLoader.js +42 -20
- package/dist/migrations/importController.d.ts +2 -0
- package/dist/migrations/importController.js +39 -24
- package/dist/migrations/importDataActions.js +3 -3
- package/dist/migrations/relationships.js +1 -2
- package/dist/migrations/services/DataTransformationService.js +2 -2
- package/dist/migrations/services/FileHandlerService.js +1 -1
- package/dist/migrations/services/ImportOrchestrator.d.ts +2 -0
- package/dist/migrations/services/ImportOrchestrator.js +15 -7
- package/dist/migrations/services/RateLimitManager.js +1 -1
- package/dist/migrations/services/RelationshipResolver.js +1 -1
- package/dist/migrations/services/UserMappingService.js +1 -1
- package/dist/migrations/services/ValidationService.js +1 -1
- package/dist/migrations/transfer.d.ts +8 -4
- package/dist/migrations/transfer.js +108 -55
- package/dist/migrations/yaml/YamlImportConfigLoader.js +52 -52
- package/dist/migrations/yaml/YamlImportIntegration.js +2 -2
- package/dist/migrations/yaml/generateImportSchemas.js +174 -174
- package/dist/setupCommands.d.ts +1 -1
- package/dist/setupCommands.js +5 -6
- package/dist/setupController.js +1 -1
- package/dist/shared/backupTracking.d.ts +1 -1
- package/dist/shared/backupTracking.js +2 -2
- package/dist/shared/confirmationDialogs.js +1 -1
- package/dist/shared/migrationHelpers.d.ts +1 -1
- package/dist/shared/migrationHelpers.js +4 -4
- package/dist/shared/operationQueue.d.ts +1 -1
- package/dist/shared/operationQueue.js +3 -4
- package/dist/shared/operationsTable.d.ts +1 -1
- package/dist/shared/operationsTable.js +35 -34
- package/dist/shared/operationsTableSchema.d.ts +3 -3
- package/dist/shared/operationsTableSchema.js +2 -2
- package/dist/shared/progressManager.js +1 -1
- package/dist/shared/selectionDialogs.d.ts +6 -0
- package/dist/shared/selectionDialogs.js +56 -12
- package/dist/storage/methods.d.ts +12 -0
- package/dist/storage/methods.js +92 -89
- package/dist/storage/schemas.d.ts +2 -2
- package/dist/tables/indexManager.d.ts +1 -1
- package/dist/tables/indexManager.js +2 -2
- package/dist/types.d.ts +2 -2
- package/dist/types.js +1 -1
- package/dist/users/methods.js +2 -3
- package/dist/utils/configMigration.js +1 -1
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.js +1 -1
- package/dist/utils/loadConfigs.d.ts +2 -2
- package/dist/utils/loadConfigs.js +6 -7
- package/dist/utils/setupFiles.js +139 -141
- package/dist/utilsController.d.ts +16 -9
- package/dist/utilsController.js +93 -68
- package/package.json +9 -3
- package/.appwrite/.yaml_schemas/appwrite-config.schema.json +0 -380
- package/.appwrite/.yaml_schemas/collection.schema.json +0 -255
- package/.appwrite/collections/Categories.yaml +0 -182
- package/.appwrite/collections/ExampleCollection.yaml +0 -36
- package/.appwrite/collections/Posts.yaml +0 -227
- package/.appwrite/collections/Users.yaml +0 -149
- package/.appwrite/config.yaml +0 -109
- package/.appwrite/import/README.md +0 -148
- package/.appwrite/import/categories-import.yaml +0 -129
- package/.appwrite/import/posts-import.yaml +0 -208
- package/.appwrite/import/users-import.yaml +0 -130
- package/.appwrite/importData/categories.json +0 -194
- package/.appwrite/importData/posts.json +0 -270
- package/.appwrite/importData/users.json +0 -220
- package/.appwrite/schemas/categories.json +0 -128
- package/.appwrite/schemas/exampleCollection.json +0 -52
- package/.appwrite/schemas/posts.json +0 -173
- package/.appwrite/schemas/users.json +0 -125
- package/CHANGELOG.md +0 -35
- package/CONFIG_TODO.md +0 -1189
- package/SELECTION_DIALOGS.md +0 -146
- package/SERVICE_IMPLEMENTATION_REPORT.md +0 -462
- package/dist/adapters/AdapterFactory.d.ts +0 -94
- package/dist/adapters/AdapterFactory.js +0 -420
- package/dist/adapters/DatabaseAdapter.d.ts +0 -243
- package/dist/adapters/DatabaseAdapter.js +0 -50
- package/dist/adapters/LegacyAdapter.d.ts +0 -50
- package/dist/adapters/LegacyAdapter.js +0 -615
- package/dist/adapters/TablesDBAdapter.d.ts +0 -45
- package/dist/adapters/TablesDBAdapter.js +0 -611
- package/dist/config/ConfigManager.d.ts +0 -450
- package/dist/config/ConfigManager.js +0 -650
- package/dist/config/configMigration.d.ts +0 -87
- package/dist/config/configMigration.js +0 -390
- package/dist/config/configValidation.d.ts +0 -66
- package/dist/config/configValidation.js +0 -358
- package/dist/config/index.d.ts +0 -8
- package/dist/config/index.js +0 -7
- package/dist/config/services/ConfigDiscoveryService.d.ts +0 -122
- package/dist/config/services/ConfigDiscoveryService.js +0 -322
- package/dist/config/services/ConfigLoaderService.d.ts +0 -129
- package/dist/config/services/ConfigLoaderService.js +0 -535
- package/dist/config/services/ConfigMergeService.d.ts +0 -208
- package/dist/config/services/ConfigMergeService.js +0 -308
- package/dist/config/services/ConfigValidationService.d.ts +0 -214
- package/dist/config/services/ConfigValidationService.js +0 -310
- package/dist/config/services/SessionAuthService.d.ts +0 -225
- package/dist/config/services/SessionAuthService.js +0 -456
- package/dist/config/services/__tests__/ConfigMergeService.test.d.ts +0 -1
- package/dist/config/services/__tests__/ConfigMergeService.test.js +0 -271
- package/dist/config/services/index.d.ts +0 -13
- package/dist/config/services/index.js +0 -10
- package/dist/config/yamlConfig.d.ts +0 -722
- package/dist/config/yamlConfig.js +0 -702
- package/dist/functions/pathResolution.d.ts +0 -37
- package/dist/functions/pathResolution.js +0 -185
- package/dist/functions/templates/count-docs-in-collection/package.json +0 -25
- package/dist/functions/templates/count-docs-in-collection/tsconfig.json +0 -28
- package/dist/functions/templates/hono-typescript/package.json +0 -26
- package/dist/functions/templates/hono-typescript/src/index.ts +0 -54
- package/dist/functions/templates/hono-typescript/tsconfig.json +0 -20
- package/dist/functions/templates/typescript-node/package.json +0 -25
- package/dist/functions/templates/typescript-node/tsconfig.json +0 -28
- package/dist/shared/attributeMapper.d.ts +0 -20
- package/dist/shared/attributeMapper.js +0 -203
- package/dist/shared/errorUtils.d.ts +0 -54
- package/dist/shared/errorUtils.js +0 -95
- package/dist/shared/functionManager.d.ts +0 -48
- package/dist/shared/functionManager.js +0 -348
- package/dist/shared/jsonSchemaGenerator.d.ts +0 -50
- package/dist/shared/jsonSchemaGenerator.js +0 -290
- package/dist/shared/logging.d.ts +0 -61
- package/dist/shared/logging.js +0 -116
- package/dist/shared/messageFormatter.d.ts +0 -39
- package/dist/shared/messageFormatter.js +0 -162
- package/dist/shared/pydanticModelGenerator.d.ts +0 -17
- package/dist/shared/pydanticModelGenerator.js +0 -615
- package/dist/shared/schemaGenerator.d.ts +0 -40
- package/dist/shared/schemaGenerator.js +0 -556
- package/dist/utils/ClientFactory.d.ts +0 -87
- package/dist/utils/ClientFactory.js +0 -212
- package/dist/utils/configDiscovery.d.ts +0 -78
- package/dist/utils/configDiscovery.js +0 -472
- package/dist/utils/constantsGenerator.d.ts +0 -31
- package/dist/utils/constantsGenerator.js +0 -321
- package/dist/utils/dataConverters.d.ts +0 -46
- package/dist/utils/dataConverters.js +0 -139
- package/dist/utils/directoryUtils.d.ts +0 -22
- package/dist/utils/directoryUtils.js +0 -59
- package/dist/utils/getClientFromConfig.d.ts +0 -39
- package/dist/utils/getClientFromConfig.js +0 -199
- package/dist/utils/helperFunctions.d.ts +0 -63
- package/dist/utils/helperFunctions.js +0 -156
- package/dist/utils/pathResolvers.d.ts +0 -53
- package/dist/utils/pathResolvers.js +0 -72
- package/dist/utils/projectConfig.d.ts +0 -122
- package/dist/utils/projectConfig.js +0 -206
- package/dist/utils/retryFailedPromises.d.ts +0 -2
- package/dist/utils/retryFailedPromises.js +0 -23
- package/dist/utils/sessionAuth.d.ts +0 -48
- package/dist/utils/sessionAuth.js +0 -164
- package/dist/utils/typeGuards.d.ts +0 -35
- package/dist/utils/typeGuards.js +0 -57
- package/dist/utils/validationRules.d.ts +0 -43
- package/dist/utils/validationRules.js +0 -42
- package/dist/utils/versionDetection.d.ts +0 -58
- package/dist/utils/versionDetection.js +0 -251
- package/dist/utils/yamlConverter.d.ts +0 -100
- package/dist/utils/yamlConverter.js +0 -428
- package/dist/utils/yamlLoader.d.ts +0 -70
- package/dist/utils/yamlLoader.js +0 -267
- package/scripts/copy-templates.ts +0 -23
- package/src/adapters/AdapterFactory.ts +0 -529
- package/src/adapters/DatabaseAdapter.ts +0 -319
- package/src/adapters/LegacyAdapter.ts +0 -844
- package/src/adapters/TablesDBAdapter.ts +0 -823
- package/src/adapters/index.ts +0 -37
- package/src/backups/operations/bucketBackup.ts +0 -277
- package/src/backups/operations/collectionBackup.ts +0 -310
- package/src/backups/operations/comprehensiveBackup.ts +0 -342
- package/src/backups/schemas/bucketManifest.ts +0 -78
- package/src/backups/schemas/comprehensiveManifest.ts +0 -76
- package/src/backups/tracking/centralizedTracking.ts +0 -352
- package/src/cli/commands/configCommands.ts +0 -201
- package/src/cli/commands/databaseCommands.ts +0 -879
- package/src/cli/commands/functionCommands.ts +0 -418
- package/src/cli/commands/schemaCommands.ts +0 -200
- package/src/cli/commands/storageCommands.ts +0 -152
- package/src/cli/commands/transferCommands.ts +0 -457
- package/src/collections/attributes.ts +0 -2020
- package/src/collections/attributes.ts.backup +0 -1555
- package/src/collections/indexes.ts +0 -352
- package/src/collections/methods.ts +0 -700
- package/src/collections/tableOperations.ts +0 -521
- package/src/collections/transferOperations.ts +0 -590
- package/src/collections/wipeOperations.ts +0 -346
- package/src/config/ConfigManager.ts +0 -849
- package/src/config/README.md +0 -274
- package/src/config/configMigration.ts +0 -575
- package/src/config/configValidation.ts +0 -445
- package/src/config/index.ts +0 -10
- package/src/config/services/ConfigDiscoveryService.ts +0 -410
- package/src/config/services/ConfigLoaderService.ts +0 -732
- package/src/config/services/ConfigMergeService.ts +0 -388
- package/src/config/services/ConfigValidationService.ts +0 -394
- package/src/config/services/SessionAuthService.ts +0 -565
- package/src/config/services/__tests__/ConfigMergeService.test.ts +0 -351
- package/src/config/services/index.ts +0 -29
- package/src/config/yamlConfig.ts +0 -761
- package/src/databases/methods.ts +0 -49
- package/src/databases/setup.ts +0 -77
- package/src/examples/yamlTerminologyExample.ts +0 -346
- package/src/functions/deployments.ts +0 -220
- package/src/functions/fnConfigDiscovery.ts +0 -103
- package/src/functions/methods.ts +0 -284
- package/src/functions/pathResolution.ts +0 -227
- package/src/functions/templates/count-docs-in-collection/README.md +0 -54
- package/src/functions/templates/count-docs-in-collection/package.json +0 -25
- package/src/functions/templates/count-docs-in-collection/src/main.ts +0 -159
- package/src/functions/templates/count-docs-in-collection/src/request.ts +0 -9
- package/src/functions/templates/count-docs-in-collection/tsconfig.json +0 -28
- package/src/functions/templates/hono-typescript/README.md +0 -286
- package/src/functions/templates/hono-typescript/package.json +0 -26
- package/src/functions/templates/hono-typescript/src/adapters/request.ts +0 -74
- package/src/functions/templates/hono-typescript/src/adapters/response.ts +0 -106
- package/src/functions/templates/hono-typescript/src/app.ts +0 -180
- package/src/functions/templates/hono-typescript/src/context.ts +0 -103
- package/src/functions/templates/hono-typescript/src/middleware/appwrite.ts +0 -119
- package/src/functions/templates/hono-typescript/tsconfig.json +0 -20
- package/src/functions/templates/typescript-node/README.md +0 -32
- package/src/functions/templates/typescript-node/package.json +0 -25
- package/src/functions/templates/typescript-node/src/context.ts +0 -103
- package/src/functions/templates/typescript-node/src/index.ts +0 -29
- package/src/functions/templates/typescript-node/tsconfig.json +0 -28
- package/src/functions/templates/uv/README.md +0 -31
- package/src/functions/templates/uv/pyproject.toml +0 -30
- package/src/functions/templates/uv/src/__init__.py +0 -0
- package/src/functions/templates/uv/src/context.py +0 -125
- package/src/functions/templates/uv/src/index.py +0 -46
- package/src/init.ts +0 -62
- package/src/interactiveCLI.ts +0 -1136
- package/src/main.ts +0 -1670
- package/src/migrations/afterImportActions.ts +0 -580
- package/src/migrations/appwriteToX.ts +0 -664
- package/src/migrations/comprehensiveTransfer.ts +0 -2285
- package/src/migrations/dataLoader.ts +0 -1702
- package/src/migrations/importController.ts +0 -428
- package/src/migrations/importDataActions.ts +0 -315
- package/src/migrations/relationships.ts +0 -334
- package/src/migrations/services/DataTransformationService.ts +0 -196
- package/src/migrations/services/FileHandlerService.ts +0 -311
- package/src/migrations/services/ImportOrchestrator.ts +0 -666
- package/src/migrations/services/RateLimitManager.ts +0 -363
- package/src/migrations/services/RelationshipResolver.ts +0 -461
- package/src/migrations/services/UserMappingService.ts +0 -345
- package/src/migrations/services/ValidationService.ts +0 -349
- package/src/migrations/transfer.ts +0 -1068
- package/src/migrations/yaml/YamlImportConfigLoader.ts +0 -439
- package/src/migrations/yaml/YamlImportIntegration.ts +0 -446
- package/src/migrations/yaml/generateImportSchemas.ts +0 -1354
- package/src/schemas/authUser.ts +0 -23
- package/src/setup.ts +0 -8
- package/src/setupCommands.ts +0 -603
- package/src/setupController.ts +0 -43
- package/src/shared/attributeMapper.ts +0 -229
- package/src/shared/backupMetadataSchema.ts +0 -93
- package/src/shared/backupTracking.ts +0 -211
- package/src/shared/confirmationDialogs.ts +0 -327
- package/src/shared/errorUtils.ts +0 -110
- package/src/shared/functionManager.ts +0 -537
- package/src/shared/jsonSchemaGenerator.ts +0 -383
- package/src/shared/logging.ts +0 -149
- package/src/shared/messageFormatter.ts +0 -208
- package/src/shared/migrationHelpers.ts +0 -232
- package/src/shared/operationLogger.ts +0 -20
- package/src/shared/operationQueue.ts +0 -377
- package/src/shared/operationsTable.ts +0 -338
- package/src/shared/operationsTableSchema.ts +0 -60
- package/src/shared/progressManager.ts +0 -278
- package/src/shared/pydanticModelGenerator.ts +0 -618
- package/src/shared/relationshipExtractor.ts +0 -214
- package/src/shared/schemaGenerator.ts +0 -644
- package/src/shared/selectionDialogs.ts +0 -749
- package/src/storage/backupCompression.ts +0 -88
- package/src/storage/methods.ts +0 -698
- package/src/storage/schemas.ts +0 -205
- package/src/tables/indexManager.ts +0 -409
- package/src/types/node-appwrite-tablesdb.d.ts +0 -44
- package/src/types.ts +0 -9
- package/src/users/methods.ts +0 -359
- package/src/utils/ClientFactory.ts +0 -240
- package/src/utils/configDiscovery.ts +0 -557
- package/src/utils/configMigration.ts +0 -348
- package/src/utils/constantsGenerator.ts +0 -369
- package/src/utils/dataConverters.ts +0 -159
- package/src/utils/directoryUtils.ts +0 -61
- package/src/utils/getClientFromConfig.ts +0 -257
- package/src/utils/helperFunctions.ts +0 -228
- package/src/utils/index.ts +0 -2
- package/src/utils/loadConfigs.ts +0 -449
- package/src/utils/pathResolvers.ts +0 -81
- package/src/utils/projectConfig.ts +0 -340
- package/src/utils/retryFailedPromises.ts +0 -29
- package/src/utils/sessionAuth.ts +0 -230
- package/src/utils/setupFiles.ts +0 -1238
- package/src/utils/typeGuards.ts +0 -65
- package/src/utils/validationRules.ts +0 -88
- package/src/utils/versionDetection.ts +0 -292
- package/src/utils/yamlConverter.ts +0 -542
- package/src/utils/yamlLoader.ts +0 -371
- package/src/utilsController.ts +0 -1213
- package/tests/README.md +0 -497
- package/tests/adapters/AdapterFactory.test.ts +0 -277
- package/tests/integration/syncOperations.test.ts +0 -463
- package/tests/jest.config.js +0 -25
- package/tests/migration/configMigration.test.ts +0 -546
- package/tests/setup.ts +0 -62
- package/tests/testUtils.ts +0 -340
- package/tests/utils/loadConfigs.test.ts +0 -350
- package/tests/validation/configValidation.test.ts +0 -412
- package/tmp-sync-test/.appwrite/collections/TestCollection.yaml +0 -7
- package/tsconfig.json +0 -44
package/dist/main.js
CHANGED
|
@@ -5,22 +5,18 @@ import { hideBin } from "yargs/helpers";
|
|
|
5
5
|
import { InteractiveCLI } from "./interactiveCLI.js";
|
|
6
6
|
import { UtilsController } from "./utilsController.js";
|
|
7
7
|
import { Databases, Storage } from "node-appwrite";
|
|
8
|
-
import { getClient } from "
|
|
8
|
+
import { getClient } from "appwrite-utils-helpers";
|
|
9
9
|
import { fetchAllDatabases } from "./databases/methods.js";
|
|
10
10
|
import { setupDirsFiles } from "./utils/setupFiles.js";
|
|
11
11
|
import { fetchAllCollections } from "./collections/methods.js";
|
|
12
12
|
import chalk from "chalk";
|
|
13
13
|
import { listSpecifications } from "./functions/methods.js";
|
|
14
|
-
import { MessageFormatter } from "
|
|
14
|
+
import { MessageFormatter, logger, AuthenticationError } from "appwrite-utils-helpers";
|
|
15
15
|
import { ConfirmationDialogs } from "./shared/confirmationDialogs.js";
|
|
16
16
|
import { SelectionDialogs } from "./shared/selectionDialogs.js";
|
|
17
|
-
import { logger } from "./shared/logging.js";
|
|
18
17
|
import path from "path";
|
|
19
18
|
import fs from "fs";
|
|
20
19
|
import { createRequire } from "node:module";
|
|
21
|
-
import { loadAppwriteProjectConfig, findAppwriteProjectConfig, projectConfigToAppwriteConfig, } from "./utils/projectConfig.js";
|
|
22
|
-
import { hasSessionAuth, getAvailableSessions, getAuthenticationStatus, } from "./utils/sessionAuth.js";
|
|
23
|
-
import { findYamlConfig, loadYamlConfigWithSession, } from "./config/yamlConfig.js";
|
|
24
20
|
const require = createRequire(import.meta.url);
|
|
25
21
|
if (!globalThis.require) {
|
|
26
22
|
globalThis.require = require;
|
|
@@ -443,137 +439,85 @@ const argv = yargs(hideBin(process.argv))
|
|
|
443
439
|
.option("sessionCookie", {
|
|
444
440
|
type: "string",
|
|
445
441
|
description: "Explicit session cookie to use for authentication",
|
|
442
|
+
})
|
|
443
|
+
.option("importFile", {
|
|
444
|
+
alias: ["import-file"],
|
|
445
|
+
type: "string",
|
|
446
|
+
description: "Import a CSV or JSON file directly into a table (no config needed)",
|
|
447
|
+
})
|
|
448
|
+
.option("targetDb", {
|
|
449
|
+
alias: ["target-db"],
|
|
450
|
+
type: "string",
|
|
451
|
+
description: "Target database ID for --importFile (prompted if omitted)",
|
|
452
|
+
})
|
|
453
|
+
.option("targetTable", {
|
|
454
|
+
alias: ["target-table"],
|
|
455
|
+
type: "string",
|
|
456
|
+
description: "Target table ID for --importFile (prompted if omitted)",
|
|
446
457
|
})
|
|
447
458
|
.parse();
|
|
448
459
|
async function main() {
|
|
449
460
|
const startTime = Date.now();
|
|
450
461
|
const operationStats = {};
|
|
451
|
-
// Early session detection for better user guidance
|
|
452
|
-
const availableSessions = getAvailableSessions();
|
|
453
|
-
let hasAnyValidSessions = availableSessions.length > 0;
|
|
454
462
|
if (argv.it) {
|
|
455
|
-
const cli = new InteractiveCLI(process.cwd()
|
|
463
|
+
const cli = new InteractiveCLI(process.cwd(), {
|
|
464
|
+
useSession: argv.useSession,
|
|
465
|
+
sessionCookie: argv.sessionCookie
|
|
466
|
+
});
|
|
456
467
|
await cli.run();
|
|
457
468
|
}
|
|
458
469
|
else {
|
|
459
|
-
//
|
|
460
|
-
|
|
461
|
-
//
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
else {
|
|
476
|
-
MessageFormatter.info("No active Appwrite sessions found", {
|
|
477
|
-
prefix: "Auth",
|
|
478
|
-
});
|
|
479
|
-
MessageFormatter.info("\u2022 Run 'appwrite login' to authenticate with session", { prefix: "Auth" });
|
|
480
|
-
MessageFormatter.info("\u2022 Or provide --apiKey for API key authentication", { prefix: "Auth" });
|
|
481
|
-
}
|
|
482
|
-
}
|
|
483
|
-
// Priority 1: Check for appwrite.json project configuration
|
|
484
|
-
const projectConfigPath = findAppwriteProjectConfig(process.cwd());
|
|
485
|
-
if (projectConfigPath) {
|
|
486
|
-
const projectConfig = loadAppwriteProjectConfig(projectConfigPath);
|
|
487
|
-
if (projectConfig) {
|
|
488
|
-
directConfig = projectConfigToAppwriteConfig(projectConfig);
|
|
489
|
-
MessageFormatter.info(`Loaded project configuration from ${projectConfigPath}`, { prefix: "CLI" });
|
|
490
|
-
}
|
|
491
|
-
}
|
|
492
|
-
// Priority 2: CLI arguments override project config
|
|
493
|
-
if (argv.endpoint ||
|
|
494
|
-
argv.projectId ||
|
|
495
|
-
argv.apiKey ||
|
|
496
|
-
argv.useSession ||
|
|
497
|
-
argv.sessionCookie) {
|
|
498
|
-
directConfig = {
|
|
499
|
-
...directConfig,
|
|
500
|
-
appwriteEndpoint: argv.endpoint || directConfig?.appwriteEndpoint,
|
|
501
|
-
appwriteProject: argv.projectId || directConfig?.appwriteProject,
|
|
502
|
-
appwriteKey: argv.apiKey || directConfig?.appwriteKey,
|
|
470
|
+
// Non-interactive mode - pass auth flags through to controller
|
|
471
|
+
// ConfigManager will handle config discovery and auth decisions
|
|
472
|
+
// Users can provide credentials via CLI flags even without a config file
|
|
473
|
+
const controller = UtilsController.getInstance(process.cwd());
|
|
474
|
+
// Build init options from CLI flags
|
|
475
|
+
const initOptions = {
|
|
476
|
+
useSession: argv.useSession,
|
|
477
|
+
sessionCookie: argv.sessionCookie,
|
|
478
|
+
preferJson: argv.appwriteConfig,
|
|
479
|
+
};
|
|
480
|
+
// Add CLI overrides if provided - these can work even without a config file
|
|
481
|
+
if (argv.endpoint || argv.projectId || argv.apiKey) {
|
|
482
|
+
initOptions.overrides = {
|
|
483
|
+
appwriteEndpoint: argv.endpoint,
|
|
484
|
+
appwriteProject: argv.projectId,
|
|
485
|
+
appwriteKey: argv.apiKey,
|
|
503
486
|
};
|
|
504
487
|
}
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
if (directConfig?.appwriteEndpoint && directConfig?.appwriteProject) {
|
|
508
|
-
sessionAuthAvailable = hasSessionAuth(directConfig.appwriteEndpoint, directConfig.appwriteProject);
|
|
488
|
+
try {
|
|
489
|
+
await controller.init(initOptions);
|
|
509
490
|
}
|
|
510
|
-
|
|
511
|
-
if (
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
}
|
|
515
|
-
else if (sessionAuthAvailable) {
|
|
516
|
-
MessageFormatter.info("Session authentication detected and will be used", { prefix: "Auth" });
|
|
517
|
-
}
|
|
518
|
-
else {
|
|
519
|
-
MessageFormatter.warning("Session authentication requested but no valid session found", { prefix: "Auth" });
|
|
520
|
-
const availableSessions = getAvailableSessions();
|
|
521
|
-
if (availableSessions.length > 0) {
|
|
522
|
-
MessageFormatter.info(`Available sessions: ${availableSessions
|
|
523
|
-
.map((s) => `${s.projectId} (${s.email || "unknown"})`)
|
|
524
|
-
.join(", ")}`, { prefix: "Auth" });
|
|
525
|
-
MessageFormatter.info("Use --session flag to enable session authentication", { prefix: "Auth" });
|
|
526
|
-
}
|
|
527
|
-
else {
|
|
528
|
-
MessageFormatter.warning("No Appwrite CLI sessions found. Please run 'appwrite login' first.", { prefix: "Auth" });
|
|
529
|
-
}
|
|
530
|
-
MessageFormatter.error("Session authentication requested but not available", undefined, { prefix: "Auth" });
|
|
531
|
-
return; // Exit early if session auth was requested but not available
|
|
491
|
+
catch (error) {
|
|
492
|
+
if (error instanceof AuthenticationError) {
|
|
493
|
+
MessageFormatter.error(error.getFormattedMessage(), undefined, { prefix: "Auth" });
|
|
494
|
+
process.exit(1);
|
|
532
495
|
}
|
|
496
|
+
// Re-throw other errors
|
|
497
|
+
throw error;
|
|
533
498
|
}
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
MessageFormatter.
|
|
537
|
-
MessageFormatter.info("
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
// 1. If session auth is explicitly requested via flags, use it
|
|
541
|
-
// 2. If no API key is provided but sessions are available, offer to use session auth
|
|
542
|
-
// 3. Auto-detect session authentication when possible
|
|
543
|
-
let finalDirectConfig = directConfig;
|
|
544
|
-
if ((argv.useSession || argv.sessionCookie) &&
|
|
545
|
-
(!directConfig ||
|
|
546
|
-
!directConfig.appwriteEndpoint ||
|
|
547
|
-
!directConfig.appwriteProject)) {
|
|
548
|
-
// Don't pass incomplete directConfig - let UtilsController load YAML config normally
|
|
549
|
-
finalDirectConfig = null;
|
|
499
|
+
// After init, check if we have a valid config (from file OR CLI overrides)
|
|
500
|
+
if (!controller.config) {
|
|
501
|
+
MessageFormatter.error("No Appwrite configuration available", undefined, { prefix: "CLI" });
|
|
502
|
+
MessageFormatter.info("Provide credentials via CLI flags (--endpoint, --projectId, --apiKey or --session)", { prefix: "CLI" });
|
|
503
|
+
MessageFormatter.info("Or create a config file using --setup", { prefix: "CLI" });
|
|
504
|
+
return;
|
|
550
505
|
}
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
!
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
MessageFormatter.info("No API key provided, but session authentication is available", { prefix: "Auth" });
|
|
558
|
-
MessageFormatter.info("Automatically using session authentication (add --session to suppress this message)", { prefix: "Auth" });
|
|
559
|
-
// Implicitly enable session authentication
|
|
560
|
-
argv.useSession = true;
|
|
506
|
+
const parsedArgv = argv;
|
|
507
|
+
if (argv.importFile) {
|
|
508
|
+
const { importFileFromPath, importFilePromptMissing } = await import("./cli/commands/importFileCommands.js");
|
|
509
|
+
if (!controller.adapter) {
|
|
510
|
+
MessageFormatter.error("No adapter available — check your credentials", undefined, { prefix: "Import" });
|
|
511
|
+
return;
|
|
561
512
|
}
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
const controller = UtilsController.getInstance(process.cwd(), finalDirectConfig);
|
|
565
|
-
// Pass session authentication and config options to the controller
|
|
566
|
-
const initOptions = {};
|
|
567
|
-
if (argv.useSession || argv.sessionCookie) {
|
|
568
|
-
initOptions.useSession = true;
|
|
569
|
-
if (argv.sessionCookie) {
|
|
570
|
-
initOptions.sessionCookie = argv.sessionCookie;
|
|
513
|
+
if (parsedArgv.targetDb && parsedArgv.targetTable) {
|
|
514
|
+
await importFileFromPath(controller.adapter, argv.importFile, parsedArgv.targetDb, parsedArgv.targetTable);
|
|
571
515
|
}
|
|
516
|
+
else {
|
|
517
|
+
await importFilePromptMissing(controller.adapter, controller.database, argv.importFile, parsedArgv.targetDb, parsedArgv.targetTable);
|
|
518
|
+
}
|
|
519
|
+
return;
|
|
572
520
|
}
|
|
573
|
-
if (argv.appwriteConfig) {
|
|
574
|
-
initOptions.preferJson = true;
|
|
575
|
-
}
|
|
576
|
-
await controller.init(initOptions);
|
|
577
521
|
if (argv.setup) {
|
|
578
522
|
await setupDirsFiles(false, process.cwd());
|
|
579
523
|
return;
|
|
@@ -584,7 +528,7 @@ async function main() {
|
|
|
584
528
|
return;
|
|
585
529
|
}
|
|
586
530
|
if (argv.generateConstants) {
|
|
587
|
-
const { ConstantsGenerator } = await import("
|
|
531
|
+
const { ConstantsGenerator } = await import("appwrite-utils-helpers");
|
|
588
532
|
if (!controller.config) {
|
|
589
533
|
MessageFormatter.error("No Appwrite configuration found", undefined, {
|
|
590
534
|
prefix: "Constants",
|
|
@@ -650,7 +594,7 @@ async function main() {
|
|
|
650
594
|
MessageFormatter.info(" • tables/ folder must not exist or be empty", { prefix: "Migration" });
|
|
651
595
|
return;
|
|
652
596
|
}
|
|
653
|
-
const { migrateCollectionsToTables } = await import("
|
|
597
|
+
const { migrateCollectionsToTables } = await import("appwrite-utils-helpers");
|
|
654
598
|
MessageFormatter.info("Starting collections to tables migration...", {
|
|
655
599
|
prefix: "Migration",
|
|
656
600
|
});
|
|
@@ -674,41 +618,9 @@ async function main() {
|
|
|
674
618
|
}
|
|
675
619
|
return;
|
|
676
620
|
}
|
|
677
|
-
if (!controller.config) {
|
|
678
|
-
// Provide better guidance based on available authentication methods
|
|
679
|
-
const availableSessions = getAvailableSessions();
|
|
680
|
-
if (availableSessions.length > 0) {
|
|
681
|
-
MessageFormatter.error("No Appwrite configuration found", undefined, {
|
|
682
|
-
prefix: "CLI",
|
|
683
|
-
});
|
|
684
|
-
MessageFormatter.info("Available authentication options:", {
|
|
685
|
-
prefix: "Auth",
|
|
686
|
-
});
|
|
687
|
-
MessageFormatter.info("• Session authentication: Add --session flag", {
|
|
688
|
-
prefix: "Auth",
|
|
689
|
-
});
|
|
690
|
-
MessageFormatter.info("• API key authentication: Add --apiKey YOUR_API_KEY", { prefix: "Auth" });
|
|
691
|
-
MessageFormatter.info(`• Available sessions: ${availableSessions
|
|
692
|
-
.map((s) => `${s.projectId} (${s.email || "unknown"})`)
|
|
693
|
-
.join(", ")}`, { prefix: "Auth" });
|
|
694
|
-
}
|
|
695
|
-
else {
|
|
696
|
-
MessageFormatter.error("No Appwrite configuration found", undefined, {
|
|
697
|
-
prefix: "CLI",
|
|
698
|
-
});
|
|
699
|
-
MessageFormatter.info("Authentication options:", { prefix: "Auth" });
|
|
700
|
-
MessageFormatter.info("• Login with Appwrite CLI: Run 'appwrite login' then use --session flag", { prefix: "Auth" });
|
|
701
|
-
MessageFormatter.info("• Use API key: Add --apiKey YOUR_API_KEY", {
|
|
702
|
-
prefix: "Auth",
|
|
703
|
-
});
|
|
704
|
-
MessageFormatter.info("• Create config file: Run with --setup to initialize project configuration", { prefix: "Auth" });
|
|
705
|
-
}
|
|
706
|
-
return;
|
|
707
|
-
}
|
|
708
|
-
const parsedArgv = argv;
|
|
709
621
|
// List backups if requested
|
|
710
622
|
if (parsedArgv.listBackups) {
|
|
711
|
-
const { AdapterFactory } = await import("
|
|
623
|
+
const { AdapterFactory } = await import("appwrite-utils-helpers");
|
|
712
624
|
const { listBackups } = await import("./shared/backupTracking.js");
|
|
713
625
|
if (!controller.config) {
|
|
714
626
|
MessageFormatter.error("No Appwrite configuration found", undefined, {
|
|
@@ -797,7 +709,7 @@ async function main() {
|
|
|
797
709
|
// Comprehensive backup (all databases + all buckets)
|
|
798
710
|
if (parsedArgv.comprehensiveBackup) {
|
|
799
711
|
const { comprehensiveBackup } = await import("./backups/operations/comprehensiveBackup.js");
|
|
800
|
-
const { AdapterFactory } = await import("
|
|
712
|
+
const { AdapterFactory } = await import("appwrite-utils-helpers");
|
|
801
713
|
// Get tracking database ID (interactive prompt if not specified)
|
|
802
714
|
let trackingDatabaseId = parsedArgv.trackingDatabaseId;
|
|
803
715
|
if (!trackingDatabaseId) {
|
|
@@ -971,7 +883,10 @@ async function main() {
|
|
|
971
883
|
}
|
|
972
884
|
// Build DatabaseSelection[] with tableIds per DB
|
|
973
885
|
const databaseSelections = [];
|
|
974
|
-
const allConfigItems =
|
|
886
|
+
const allConfigItems = [
|
|
887
|
+
...(controller.config.collections || []),
|
|
888
|
+
...(controller.config.tables || [])
|
|
889
|
+
];
|
|
975
890
|
let lastSelectedTableIds = null;
|
|
976
891
|
for (const dbId of selectedDbIds) {
|
|
977
892
|
const db = availableDatabases.find(d => d.$id === dbId);
|
|
@@ -987,8 +902,16 @@ async function main() {
|
|
|
987
902
|
return one === dbId;
|
|
988
903
|
return true; // eligible everywhere if unspecified
|
|
989
904
|
});
|
|
990
|
-
// Fetch available tables from remote for
|
|
905
|
+
// Fetch available tables from remote for status/context
|
|
991
906
|
const availableTables = await fetchAllCollections(dbId, controller.database);
|
|
907
|
+
const remoteTableIds = new Set(availableTables.map(table => table.$id));
|
|
908
|
+
const localItems = eligibleConfigItems;
|
|
909
|
+
const localItemIds = localItems.map(item => item.$id || item.id || item.tableId || item.name);
|
|
910
|
+
const localNewItems = localItems.filter(item => {
|
|
911
|
+
const itemId = item.$id || item.id || item.tableId || item.name;
|
|
912
|
+
return !remoteTableIds.has(itemId);
|
|
913
|
+
});
|
|
914
|
+
const localNewIds = localNewItems.map(item => item.$id || item.id || item.tableId || item.name);
|
|
992
915
|
// Determine selected table IDs
|
|
993
916
|
let selectedTableIds = [];
|
|
994
917
|
if (parsedArgv.collectionIds) {
|
|
@@ -996,35 +919,57 @@ async function main() {
|
|
|
996
919
|
selectedTableIds = parsedArgv.collectionIds.split(/[\,\s]+/).filter(Boolean);
|
|
997
920
|
}
|
|
998
921
|
else {
|
|
999
|
-
|
|
922
|
+
const inquirer = (await import("inquirer")).default;
|
|
923
|
+
const choices = [];
|
|
1000
924
|
if (lastSelectedTableIds && lastSelectedTableIds.length > 0) {
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
925
|
+
choices.push({
|
|
926
|
+
name: `Use same selection as previous (${lastSelectedTableIds.length} items)`,
|
|
927
|
+
value: "same"
|
|
928
|
+
});
|
|
929
|
+
}
|
|
930
|
+
if (localItemIds.length > 0) {
|
|
931
|
+
choices.push({
|
|
932
|
+
name: `Select all local items for ${db.name} (${localItemIds.length} items)`,
|
|
933
|
+
value: "all_local"
|
|
934
|
+
});
|
|
935
|
+
}
|
|
936
|
+
if (localNewIds.length > 0) {
|
|
937
|
+
choices.push({
|
|
938
|
+
name: `Select only new local items (not on remote) (${localNewIds.length} items)`,
|
|
939
|
+
value: "new_only"
|
|
940
|
+
});
|
|
941
|
+
}
|
|
942
|
+
choices.push({
|
|
943
|
+
name: "Manual selection",
|
|
944
|
+
value: "manual"
|
|
945
|
+
});
|
|
946
|
+
const { selectionMode } = await inquirer.prompt([
|
|
947
|
+
{
|
|
948
|
+
type: "list",
|
|
949
|
+
name: "selectionMode",
|
|
950
|
+
message: `How do you want to select tables for ${db.name}?`,
|
|
951
|
+
choices,
|
|
952
|
+
default: choices[0]?.value || "manual"
|
|
1017
953
|
}
|
|
1018
|
-
|
|
1019
|
-
|
|
954
|
+
]);
|
|
955
|
+
if (selectionMode === "same") {
|
|
956
|
+
selectedTableIds = [...(lastSelectedTableIds || [])];
|
|
957
|
+
}
|
|
958
|
+
else if (selectionMode === "all_local") {
|
|
959
|
+
selectedTableIds = [...localItemIds];
|
|
960
|
+
}
|
|
961
|
+
else if (selectionMode === "new_only") {
|
|
962
|
+
selectedTableIds = [...localNewIds];
|
|
963
|
+
}
|
|
964
|
+
else {
|
|
965
|
+
if (localItems.length === 0) {
|
|
966
|
+
MessageFormatter.warning(`No local tables/collections available for ${db.name}`, { prefix: "Push" });
|
|
967
|
+
selectedTableIds = [];
|
|
1020
968
|
}
|
|
1021
969
|
else {
|
|
1022
|
-
selectedTableIds = await SelectionDialogs.selectTablesForDatabase(dbId, db.name,
|
|
970
|
+
selectedTableIds = await SelectionDialogs.selectTablesForDatabase(dbId, db.name, localItems, availableTables, { showSelectAll: localItems.length > 1, allowNewOnly: false, defaultSelected: lastSelectedTableIds || [] });
|
|
1023
971
|
}
|
|
1024
972
|
}
|
|
1025
|
-
else {
|
|
1026
|
-
selectedTableIds = await SelectionDialogs.selectTablesForDatabase(dbId, db.name, availableTables, eligibleConfigItems, { showSelectAll: false, allowNewOnly: true, defaultSelected: [] });
|
|
1027
|
-
}
|
|
1028
973
|
}
|
|
1029
974
|
databaseSelections.push({
|
|
1030
975
|
databaseId: db.$id,
|
|
@@ -3,10 +3,9 @@ import { InputFile } from "node-appwrite/file";
|
|
|
3
3
|
import path from "path";
|
|
4
4
|
import fs from "fs";
|
|
5
5
|
import os from "os";
|
|
6
|
-
import { logger } from "
|
|
6
|
+
import { logger, MessageFormatter } from "appwrite-utils-helpers";
|
|
7
7
|
import { tryAwaitWithRetry, } from "appwrite-utils";
|
|
8
|
-
import { getClientFromConfig } from "
|
|
9
|
-
import { MessageFormatter } from "../shared/messageFormatter.js";
|
|
8
|
+
import { getClientFromConfig } from "appwrite-utils-helpers";
|
|
10
9
|
export const getDatabaseFromConfig = (config) => {
|
|
11
10
|
getClientFromConfig(config); // Sets config.appwriteClient if missing
|
|
12
11
|
return new Databases(config.appwriteClient);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Storage, type Models } from "node-appwrite";
|
|
2
2
|
import { type AppwriteConfig } from "appwrite-utils";
|
|
3
|
-
import type { DatabaseAdapter } from "
|
|
3
|
+
import type { DatabaseAdapter } from "appwrite-utils-helpers";
|
|
4
4
|
import type { DatabaseSelection, BucketSelection } from "../shared/selectionDialogs.js";
|
|
5
5
|
export declare class AppwriteToX {
|
|
6
6
|
config: AppwriteConfig;
|
|
@@ -1,15 +1,14 @@
|
|
|
1
|
-
import { SchemaGenerator } from "
|
|
2
|
-
import { findYamlConfig } from "../config/yamlConfig.js";
|
|
1
|
+
import { SchemaGenerator, findYamlConfig } from "appwrite-utils-helpers";
|
|
3
2
|
import { Client, Compression, Databases, Query, Storage, } from "node-appwrite";
|
|
4
3
|
import { fetchAllCollections } from "../collections/methods.js";
|
|
5
4
|
import { fetchAllDatabases } from "../databases/methods.js";
|
|
6
5
|
import { CollectionSchema, attributeSchema, AppwriteConfigSchema, permissionsSchema, attributesSchema, indexesSchema, parseAttribute, } from "appwrite-utils";
|
|
7
6
|
import { getDatabaseFromConfig } from "./afterImportActions.js";
|
|
8
|
-
import { getAdapterFromConfig } from "
|
|
7
|
+
import { getAdapterFromConfig } from "appwrite-utils-helpers";
|
|
9
8
|
import { listBuckets } from "../storage/methods.js";
|
|
10
9
|
import { listFunctions, listFunctionDeployments, getFunction } from "../functions/methods.js";
|
|
11
|
-
import { MessageFormatter } from "
|
|
12
|
-
import { isLegacyDatabases } from "
|
|
10
|
+
import { MessageFormatter } from "appwrite-utils-helpers";
|
|
11
|
+
import { isLegacyDatabases } from "appwrite-utils-helpers";
|
|
13
12
|
/**
|
|
14
13
|
* Convert between collection and table terminology based on data structure
|
|
15
14
|
*/
|
|
@@ -80,8 +79,11 @@ export class AppwriteToX {
|
|
|
80
79
|
const client = new Client();
|
|
81
80
|
client
|
|
82
81
|
.setEndpoint(this.config.appwriteEndpoint)
|
|
83
|
-
.setProject(this.config.appwriteProject)
|
|
84
|
-
|
|
82
|
+
.setProject(this.config.appwriteProject);
|
|
83
|
+
// Only set API key if provided (session auth is alternative)
|
|
84
|
+
if (this.config.appwriteKey) {
|
|
85
|
+
client.setKey(this.config.appwriteKey);
|
|
86
|
+
}
|
|
85
87
|
this.config.appwriteClient = client;
|
|
86
88
|
}
|
|
87
89
|
}
|
|
@@ -441,7 +443,7 @@ export class AppwriteToX {
|
|
|
441
443
|
timeout: func.timeout || 15,
|
|
442
444
|
enabled: func.enabled !== false,
|
|
443
445
|
logging: func.logging !== false,
|
|
444
|
-
entrypoint: func.entrypoint || "src/
|
|
446
|
+
entrypoint: func.entrypoint || "src/main.ts",
|
|
445
447
|
commands: func.commands || "npm install",
|
|
446
448
|
scopes: Array.isArray(func.scopes) ? func.scopes : [],
|
|
447
449
|
dirPath: `functions/${func.name}`,
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { converterFunctions, tryAwaitWithRetry, parseAttribute, objectNeedsUpdate, } from "appwrite-utils";
|
|
2
2
|
import { Client, Databases, Storage, Users, Functions, Teams, Query, AppwriteException, } from "node-appwrite";
|
|
3
3
|
import { InputFile } from "node-appwrite/file";
|
|
4
|
-
import { MessageFormatter } from "
|
|
4
|
+
import { MessageFormatter, getClient } from "appwrite-utils-helpers";
|
|
5
5
|
import { processQueue, queuedOperations } from "../shared/operationQueue.js";
|
|
6
6
|
import { ProgressManager } from "../shared/progressManager.js";
|
|
7
|
-
import { getClient } from "../utils/getClientFromConfig.js";
|
|
8
7
|
import { transferDatabaseLocalToLocal, transferDatabaseLocalToRemote, transferStorageLocalToLocal, transferStorageLocalToRemote, transferUsersLocalToRemote, } from "./transfer.js";
|
|
9
8
|
import { deployLocalFunction } from "../functions/deployments.js";
|
|
10
9
|
import { listFunctions, downloadLatestFunctionDeployment, } from "../functions/methods.js";
|
|
@@ -12,8 +11,7 @@ import pLimit from "p-limit";
|
|
|
12
11
|
import chalk from "chalk";
|
|
13
12
|
import { join } from "node:path";
|
|
14
13
|
import fs from "node:fs";
|
|
15
|
-
import { getAdapter } from "
|
|
16
|
-
import { mapToCreateAttributeParams } from "../shared/attributeMapper.js";
|
|
14
|
+
import { getAdapter, mapToCreateAttributeParams } from "appwrite-utils-helpers";
|
|
17
15
|
export class ComprehensiveTransfer {
|
|
18
16
|
options;
|
|
19
17
|
sourceClient;
|
|
@@ -714,7 +712,7 @@ export class ComprehensiveTransfer {
|
|
|
714
712
|
specification: func.specification,
|
|
715
713
|
dirPath: functionPath,
|
|
716
714
|
};
|
|
717
|
-
await deployLocalFunction(this.targetClient, func.name, functionConfig);
|
|
715
|
+
await deployLocalFunction(this.targetClient, func.name, functionConfig, undefined, this.tempDir);
|
|
718
716
|
this.results.functions.transferred++;
|
|
719
717
|
MessageFormatter.success(`Function ${func.name} transferred successfully`, { prefix: "Transfer" });
|
|
720
718
|
}
|
|
@@ -606,6 +606,8 @@ export declare class DataLoader {
|
|
|
606
606
|
private userIdSet;
|
|
607
607
|
userExistsMap: Map<string, boolean>;
|
|
608
608
|
private shouldWriteFile;
|
|
609
|
+
private _adapter;
|
|
610
|
+
private getAdapter;
|
|
609
611
|
constructor(appwriteFolderPath: string, importDataActions: ImportDataActions, database: Databases, config: AppwriteConfig, shouldWriteFile?: boolean);
|
|
610
612
|
getCollectionKey(name: string): string;
|
|
611
613
|
/**
|
|
@@ -633,9 +635,9 @@ export declare class DataLoader {
|
|
|
633
635
|
* @returns The transformed item.
|
|
634
636
|
*/
|
|
635
637
|
transformData(item: any, attributeMappings: AttributeMappings): any;
|
|
636
|
-
setupMaps(dbId: string): Promise<void>;
|
|
638
|
+
setupMaps(dbId: string, specificCollections?: string[]): Promise<void>;
|
|
637
639
|
getAllUsers(): Promise<import("node-appwrite").Models.User<import("node-appwrite").Models.Preferences>[]>;
|
|
638
|
-
start(dbId: string): Promise<void>;
|
|
640
|
+
start(dbId: string, specificCollections?: string[]): Promise<void>;
|
|
639
641
|
/**
|
|
640
642
|
* Deals with merged users by iterating through all collections in the configuration.
|
|
641
643
|
* We have merged users if there are duplicate emails or phones in the import data.
|