@njdamstra/appwrite-utils-cli 1.8.9 → 1.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (285) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/CONFIG_TODO.md +1189 -0
  3. package/SELECTION_DIALOGS.md +146 -0
  4. package/SERVICE_IMPLEMENTATION_REPORT.md +462 -0
  5. package/dist/adapters/index.d.ts +7 -8
  6. package/dist/adapters/index.js +7 -9
  7. package/dist/backups/operations/bucketBackup.js +2 -2
  8. package/dist/backups/operations/collectionBackup.d.ts +1 -1
  9. package/dist/backups/operations/collectionBackup.js +3 -3
  10. package/dist/backups/operations/comprehensiveBackup.d.ts +1 -1
  11. package/dist/backups/operations/comprehensiveBackup.js +2 -2
  12. package/dist/backups/tracking/centralizedTracking.d.ts +1 -1
  13. package/dist/backups/tracking/centralizedTracking.js +2 -2
  14. package/dist/cli/commands/configCommands.js +51 -7
  15. package/dist/cli/commands/databaseCommands.d.ts +1 -0
  16. package/dist/cli/commands/databaseCommands.js +119 -9
  17. package/dist/cli/commands/functionCommands.js +3 -3
  18. package/dist/cli/commands/importFileCommands.d.ts +7 -0
  19. package/dist/cli/commands/importFileCommands.js +674 -0
  20. package/dist/cli/commands/schemaCommands.js +3 -3
  21. package/dist/cli/commands/storageCommands.js +2 -3
  22. package/dist/cli/commands/transferCommands.js +3 -5
  23. package/dist/collections/attributes.d.ts +1 -1
  24. package/dist/collections/attributes.js +85 -35
  25. package/dist/collections/indexes.js +2 -4
  26. package/dist/collections/methods.d.ts +1 -1
  27. package/dist/collections/methods.js +111 -192
  28. package/dist/collections/tableOperations.d.ts +1 -0
  29. package/dist/collections/tableOperations.js +90 -23
  30. package/dist/collections/transferOperations.d.ts +1 -1
  31. package/dist/collections/transferOperations.js +3 -4
  32. package/dist/collections/wipeOperations.d.ts +4 -3
  33. package/dist/collections/wipeOperations.js +112 -39
  34. package/dist/databases/methods.js +2 -2
  35. package/dist/databases/setup.js +2 -2
  36. package/dist/examples/yamlTerminologyExample.js +2 -2
  37. package/dist/functions/deployments.d.ts +1 -1
  38. package/dist/functions/deployments.js +5 -5
  39. package/dist/functions/fnConfigDiscovery.js +2 -2
  40. package/dist/functions/methods.js +16 -4
  41. package/dist/init.js +1 -1
  42. package/dist/interactiveCLI.d.ts +6 -1
  43. package/dist/interactiveCLI.js +64 -10
  44. package/dist/main.js +130 -177
  45. package/dist/migrations/afterImportActions.js +2 -3
  46. package/dist/migrations/appwriteToX.d.ts +97 -1
  47. package/dist/migrations/appwriteToX.js +9 -7
  48. package/dist/migrations/comprehensiveTransfer.js +3 -5
  49. package/dist/migrations/dataLoader.d.ts +194 -2
  50. package/dist/migrations/dataLoader.js +2 -5
  51. package/dist/migrations/importController.js +3 -4
  52. package/dist/migrations/importDataActions.js +3 -3
  53. package/dist/migrations/relationships.js +1 -2
  54. package/dist/migrations/services/DataTransformationService.js +2 -2
  55. package/dist/migrations/services/FileHandlerService.js +1 -1
  56. package/dist/migrations/services/ImportOrchestrator.js +4 -4
  57. package/dist/migrations/services/RateLimitManager.js +1 -1
  58. package/dist/migrations/services/RelationshipResolver.js +1 -1
  59. package/dist/migrations/services/UserMappingService.js +1 -1
  60. package/dist/migrations/services/ValidationService.js +1 -1
  61. package/dist/migrations/transfer.d.ts +8 -4
  62. package/dist/migrations/transfer.js +106 -55
  63. package/dist/migrations/yaml/YamlImportConfigLoader.js +1 -1
  64. package/dist/migrations/yaml/YamlImportIntegration.js +2 -2
  65. package/dist/migrations/yaml/generateImportSchemas.js +1 -1
  66. package/dist/setupCommands.d.ts +1 -1
  67. package/dist/setupCommands.js +5 -6
  68. package/dist/setupController.js +1 -1
  69. package/dist/shared/backupTracking.d.ts +1 -1
  70. package/dist/shared/backupTracking.js +2 -2
  71. package/dist/shared/confirmationDialogs.js +1 -1
  72. package/dist/shared/migrationHelpers.d.ts +1 -1
  73. package/dist/shared/migrationHelpers.js +3 -3
  74. package/dist/shared/operationQueue.d.ts +1 -1
  75. package/dist/shared/operationQueue.js +2 -3
  76. package/dist/shared/operationsTable.d.ts +1 -1
  77. package/dist/shared/operationsTable.js +2 -2
  78. package/dist/shared/progressManager.js +1 -1
  79. package/dist/shared/selectionDialogs.js +9 -8
  80. package/dist/storage/methods.js +4 -4
  81. package/dist/storage/schemas.d.ts +386 -2
  82. package/dist/tables/indexManager.d.ts +65 -0
  83. package/dist/tables/indexManager.js +294 -0
  84. package/dist/types.d.ts +2 -2
  85. package/dist/types.js +1 -1
  86. package/dist/users/methods.js +2 -3
  87. package/dist/utils/configMigration.js +1 -1
  88. package/dist/utils/index.d.ts +1 -1
  89. package/dist/utils/index.js +1 -1
  90. package/dist/utils/loadConfigs.d.ts +2 -2
  91. package/dist/utils/loadConfigs.js +6 -7
  92. package/dist/utils/setupFiles.js +5 -7
  93. package/dist/utilsController.d.ts +15 -8
  94. package/dist/utilsController.js +57 -28
  95. package/package.json +8 -4
  96. package/src/adapters/index.ts +8 -34
  97. package/src/backups/operations/bucketBackup.ts +2 -2
  98. package/src/backups/operations/collectionBackup.ts +4 -4
  99. package/src/backups/operations/comprehensiveBackup.ts +3 -3
  100. package/src/backups/tracking/centralizedTracking.ts +3 -3
  101. package/src/cli/commands/configCommands.ts +72 -8
  102. package/src/cli/commands/databaseCommands.ts +161 -9
  103. package/src/cli/commands/functionCommands.ts +4 -3
  104. package/src/cli/commands/importFileCommands.ts +815 -0
  105. package/src/cli/commands/schemaCommands.ts +3 -3
  106. package/src/cli/commands/storageCommands.ts +2 -3
  107. package/src/cli/commands/transferCommands.ts +3 -6
  108. package/src/collections/attributes.ts +155 -39
  109. package/src/collections/indexes.ts +5 -7
  110. package/src/collections/methods.ts +115 -150
  111. package/src/collections/tableOperations.ts +92 -21
  112. package/src/collections/transferOperations.ts +4 -5
  113. package/src/collections/wipeOperations.ts +154 -51
  114. package/src/databases/methods.ts +2 -2
  115. package/src/databases/setup.ts +2 -2
  116. package/src/examples/yamlTerminologyExample.ts +2 -2
  117. package/src/functions/deployments.ts +6 -5
  118. package/src/functions/fnConfigDiscovery.ts +2 -2
  119. package/src/functions/methods.ts +19 -6
  120. package/src/init.ts +1 -1
  121. package/src/interactiveCLI.ts +78 -13
  122. package/src/main.ts +143 -287
  123. package/src/migrations/afterImportActions.ts +2 -3
  124. package/src/migrations/appwriteToX.ts +12 -8
  125. package/src/migrations/comprehensiveTransfer.ts +6 -6
  126. package/src/migrations/dataLoader.ts +2 -5
  127. package/src/migrations/importController.ts +3 -4
  128. package/src/migrations/importDataActions.ts +3 -3
  129. package/src/migrations/relationships.ts +1 -2
  130. package/src/migrations/services/DataTransformationService.ts +2 -2
  131. package/src/migrations/services/FileHandlerService.ts +1 -1
  132. package/src/migrations/services/ImportOrchestrator.ts +4 -4
  133. package/src/migrations/services/RateLimitManager.ts +1 -1
  134. package/src/migrations/services/RelationshipResolver.ts +1 -1
  135. package/src/migrations/services/UserMappingService.ts +1 -1
  136. package/src/migrations/services/ValidationService.ts +1 -1
  137. package/src/migrations/transfer.ts +126 -83
  138. package/src/migrations/yaml/YamlImportConfigLoader.ts +1 -1
  139. package/src/migrations/yaml/YamlImportIntegration.ts +2 -2
  140. package/src/migrations/yaml/generateImportSchemas.ts +1 -1
  141. package/src/setupCommands.ts +5 -6
  142. package/src/setupController.ts +1 -1
  143. package/src/shared/backupTracking.ts +3 -3
  144. package/src/shared/confirmationDialogs.ts +1 -1
  145. package/src/shared/migrationHelpers.ts +4 -4
  146. package/src/shared/operationQueue.ts +3 -4
  147. package/src/shared/operationsTable.ts +3 -3
  148. package/src/shared/progressManager.ts +1 -1
  149. package/src/shared/selectionDialogs.ts +9 -8
  150. package/src/storage/methods.ts +4 -4
  151. package/src/tables/indexManager.ts +409 -0
  152. package/src/types.ts +2 -2
  153. package/src/users/methods.ts +2 -3
  154. package/src/utils/configMigration.ts +1 -1
  155. package/src/utils/index.ts +1 -1
  156. package/src/utils/loadConfigs.ts +15 -7
  157. package/src/utils/setupFiles.ts +5 -7
  158. package/src/utilsController.ts +86 -32
  159. package/dist/adapters/AdapterFactory.d.ts +0 -94
  160. package/dist/adapters/AdapterFactory.js +0 -405
  161. package/dist/adapters/DatabaseAdapter.d.ts +0 -233
  162. package/dist/adapters/DatabaseAdapter.js +0 -50
  163. package/dist/adapters/LegacyAdapter.d.ts +0 -50
  164. package/dist/adapters/LegacyAdapter.js +0 -612
  165. package/dist/adapters/TablesDBAdapter.d.ts +0 -45
  166. package/dist/adapters/TablesDBAdapter.js +0 -571
  167. package/dist/config/ConfigManager.d.ts +0 -445
  168. package/dist/config/ConfigManager.js +0 -625
  169. package/dist/config/configMigration.d.ts +0 -87
  170. package/dist/config/configMigration.js +0 -390
  171. package/dist/config/configValidation.d.ts +0 -66
  172. package/dist/config/configValidation.js +0 -358
  173. package/dist/config/index.d.ts +0 -8
  174. package/dist/config/index.js +0 -7
  175. package/dist/config/services/ConfigDiscoveryService.d.ts +0 -126
  176. package/dist/config/services/ConfigDiscoveryService.js +0 -374
  177. package/dist/config/services/ConfigLoaderService.d.ts +0 -129
  178. package/dist/config/services/ConfigLoaderService.js +0 -540
  179. package/dist/config/services/ConfigMergeService.d.ts +0 -208
  180. package/dist/config/services/ConfigMergeService.js +0 -308
  181. package/dist/config/services/ConfigValidationService.d.ts +0 -214
  182. package/dist/config/services/ConfigValidationService.js +0 -310
  183. package/dist/config/services/SessionAuthService.d.ts +0 -225
  184. package/dist/config/services/SessionAuthService.js +0 -456
  185. package/dist/config/services/__tests__/ConfigMergeService.test.d.ts +0 -1
  186. package/dist/config/services/__tests__/ConfigMergeService.test.js +0 -271
  187. package/dist/config/services/index.d.ts +0 -13
  188. package/dist/config/services/index.js +0 -10
  189. package/dist/config/yamlConfig.d.ts +0 -722
  190. package/dist/config/yamlConfig.js +0 -702
  191. package/dist/functions/pathResolution.d.ts +0 -37
  192. package/dist/functions/pathResolution.js +0 -185
  193. package/dist/shared/attributeMapper.d.ts +0 -20
  194. package/dist/shared/attributeMapper.js +0 -203
  195. package/dist/shared/errorUtils.d.ts +0 -54
  196. package/dist/shared/errorUtils.js +0 -95
  197. package/dist/shared/functionManager.d.ts +0 -48
  198. package/dist/shared/functionManager.js +0 -336
  199. package/dist/shared/indexManager.d.ts +0 -24
  200. package/dist/shared/indexManager.js +0 -151
  201. package/dist/shared/jsonSchemaGenerator.d.ts +0 -50
  202. package/dist/shared/jsonSchemaGenerator.js +0 -290
  203. package/dist/shared/logging.d.ts +0 -61
  204. package/dist/shared/logging.js +0 -116
  205. package/dist/shared/messageFormatter.d.ts +0 -39
  206. package/dist/shared/messageFormatter.js +0 -162
  207. package/dist/shared/pydanticModelGenerator.d.ts +0 -17
  208. package/dist/shared/pydanticModelGenerator.js +0 -615
  209. package/dist/shared/schemaGenerator.d.ts +0 -40
  210. package/dist/shared/schemaGenerator.js +0 -556
  211. package/dist/utils/ClientFactory.d.ts +0 -87
  212. package/dist/utils/ClientFactory.js +0 -212
  213. package/dist/utils/configDiscovery.d.ts +0 -78
  214. package/dist/utils/configDiscovery.js +0 -472
  215. package/dist/utils/constantsGenerator.d.ts +0 -31
  216. package/dist/utils/constantsGenerator.js +0 -321
  217. package/dist/utils/dataConverters.d.ts +0 -46
  218. package/dist/utils/dataConverters.js +0 -139
  219. package/dist/utils/directoryUtils.d.ts +0 -22
  220. package/dist/utils/directoryUtils.js +0 -59
  221. package/dist/utils/getClientFromConfig.d.ts +0 -39
  222. package/dist/utils/getClientFromConfig.js +0 -199
  223. package/dist/utils/helperFunctions.d.ts +0 -63
  224. package/dist/utils/helperFunctions.js +0 -156
  225. package/dist/utils/pathResolvers.d.ts +0 -53
  226. package/dist/utils/pathResolvers.js +0 -72
  227. package/dist/utils/projectConfig.d.ts +0 -119
  228. package/dist/utils/projectConfig.js +0 -171
  229. package/dist/utils/retryFailedPromises.d.ts +0 -2
  230. package/dist/utils/retryFailedPromises.js +0 -23
  231. package/dist/utils/sessionAuth.d.ts +0 -48
  232. package/dist/utils/sessionAuth.js +0 -164
  233. package/dist/utils/typeGuards.d.ts +0 -35
  234. package/dist/utils/typeGuards.js +0 -57
  235. package/dist/utils/validationRules.d.ts +0 -43
  236. package/dist/utils/validationRules.js +0 -42
  237. package/dist/utils/versionDetection.d.ts +0 -58
  238. package/dist/utils/versionDetection.js +0 -251
  239. package/dist/utils/yamlConverter.d.ts +0 -100
  240. package/dist/utils/yamlConverter.js +0 -428
  241. package/dist/utils/yamlLoader.d.ts +0 -70
  242. package/dist/utils/yamlLoader.js +0 -267
  243. package/src/adapters/AdapterFactory.ts +0 -510
  244. package/src/adapters/DatabaseAdapter.ts +0 -306
  245. package/src/adapters/LegacyAdapter.ts +0 -841
  246. package/src/adapters/TablesDBAdapter.ts +0 -773
  247. package/src/config/ConfigManager.ts +0 -808
  248. package/src/config/README.md +0 -274
  249. package/src/config/configMigration.ts +0 -575
  250. package/src/config/configValidation.ts +0 -445
  251. package/src/config/index.ts +0 -10
  252. package/src/config/services/ConfigDiscoveryService.ts +0 -463
  253. package/src/config/services/ConfigLoaderService.ts +0 -740
  254. package/src/config/services/ConfigMergeService.ts +0 -388
  255. package/src/config/services/ConfigValidationService.ts +0 -394
  256. package/src/config/services/SessionAuthService.ts +0 -565
  257. package/src/config/services/__tests__/ConfigMergeService.test.ts +0 -351
  258. package/src/config/services/index.ts +0 -29
  259. package/src/config/yamlConfig.ts +0 -761
  260. package/src/functions/pathResolution.ts +0 -227
  261. package/src/shared/attributeMapper.ts +0 -229
  262. package/src/shared/errorUtils.ts +0 -110
  263. package/src/shared/functionManager.ts +0 -525
  264. package/src/shared/indexManager.ts +0 -254
  265. package/src/shared/jsonSchemaGenerator.ts +0 -383
  266. package/src/shared/logging.ts +0 -149
  267. package/src/shared/messageFormatter.ts +0 -208
  268. package/src/shared/pydanticModelGenerator.ts +0 -618
  269. package/src/shared/schemaGenerator.ts +0 -644
  270. package/src/utils/ClientFactory.ts +0 -240
  271. package/src/utils/configDiscovery.ts +0 -557
  272. package/src/utils/constantsGenerator.ts +0 -369
  273. package/src/utils/dataConverters.ts +0 -159
  274. package/src/utils/directoryUtils.ts +0 -61
  275. package/src/utils/getClientFromConfig.ts +0 -257
  276. package/src/utils/helperFunctions.ts +0 -228
  277. package/src/utils/pathResolvers.ts +0 -81
  278. package/src/utils/projectConfig.ts +0 -299
  279. package/src/utils/retryFailedPromises.ts +0 -29
  280. package/src/utils/sessionAuth.ts +0 -230
  281. package/src/utils/typeGuards.ts +0 -65
  282. package/src/utils/validationRules.ts +0 -88
  283. package/src/utils/versionDetection.ts +0 -292
  284. package/src/utils/yamlConverter.ts +0 -542
  285. package/src/utils/yamlLoader.ts +0 -371
@@ -15,7 +15,7 @@ import {
15
15
  findAppwriteConfig,
16
16
  findFunctionsDir,
17
17
  } from "./utils/loadConfigs.js";
18
- import { normalizeFunctionName, validateFunctionDirectory } from './functions/pathResolution.js';
18
+ import { normalizeFunctionName, validateFunctionDirectory } from '@njdamstra/appwrite-utils-helpers';
19
19
  import { UsersController } from "./users/methods.js";
20
20
  import { AppwriteToX } from "./migrations/appwriteToX.js";
21
21
  import { ImportController } from "./migrations/importController.js";
@@ -56,10 +56,10 @@ import {
56
56
  transferUsersLocalToRemote,
57
57
  type TransferOptions,
58
58
  } from "./migrations/transfer.js";
59
- import { getClient, getClientWithAuth } from "./utils/getClientFromConfig.js";
60
- import { getAdapterFromConfig } from "./utils/getClientFromConfig.js";
61
- import type { DatabaseAdapter } from './adapters/DatabaseAdapter.js';
62
- import { hasSessionAuth, findSessionByEndpointAndProject, isValidSessionCookie, type SessionAuthInfo } from "./utils/sessionAuth.js";
59
+ import { getClient, getClientWithAuth } from "@njdamstra/appwrite-utils-helpers";
60
+ import { getAdapterFromConfig } from "@njdamstra/appwrite-utils-helpers";
61
+ import type { DatabaseAdapter } from '@njdamstra/appwrite-utils-helpers';
62
+ import { hasSessionAuth, findSessionByEndpointAndProject, isValidSessionCookie, type SessionAuthInfo } from "@njdamstra/appwrite-utils-helpers";
63
63
  import { fetchAllDatabases } from "./databases/methods.js";
64
64
  import {
65
65
  listFunctions,
@@ -68,20 +68,24 @@ import {
68
68
  import chalk from "chalk";
69
69
  import { deployLocalFunction } from "./functions/deployments.js";
70
70
  import fs from "node:fs";
71
- import { configureLogging, updateLogger, logger } from "./shared/logging.js";
72
- import { MessageFormatter, Messages } from "./shared/messageFormatter.js";
73
- import { SchemaGenerator } from "./shared/schemaGenerator.js";
74
- import { findYamlConfig } from "./config/yamlConfig.js";
75
- import { createImportSchemas } from "./migrations/yaml/generateImportSchemas.js";
76
71
  import {
72
+ configureLogging,
73
+ updateLogger,
74
+ logger,
75
+ MessageFormatter,
76
+ Messages,
77
+ SchemaGenerator,
78
+ findYamlConfig,
77
79
  validateCollectionsTablesConfig,
78
80
  reportValidationResults,
79
81
  validateWithStrictMode,
82
+ ConfigManager,
80
83
  type ValidationResult
81
- } from "./config/configValidation.js";
82
- import { ConfigManager } from "./config/ConfigManager.js";
83
- import { ClientFactory } from "./utils/ClientFactory.js";
84
+ } from "@njdamstra/appwrite-utils-helpers";
85
+ import { createImportSchemas } from "./migrations/yaml/generateImportSchemas.js";
86
+ import { ClientFactory } from "@njdamstra/appwrite-utils-helpers";
84
87
  import type { DatabaseSelection, BucketSelection } from "./shared/selectionDialogs.js";
88
+ import { clearProcessingState, processQueue } from "./shared/operationQueue.js";
85
89
 
86
90
  export interface SetupOptions {
87
91
  databases?: Models.Database[];
@@ -98,6 +102,19 @@ export interface SetupOptions {
98
102
  shouldWriteFile?: boolean;
99
103
  }
100
104
 
105
+ export interface ControllerInitOptions {
106
+ validate?: boolean;
107
+ strictMode?: boolean;
108
+ useSession?: boolean;
109
+ sessionCookie?: string;
110
+ preferJson?: boolean;
111
+ overrides?: {
112
+ appwriteEndpoint?: string;
113
+ appwriteProject?: string;
114
+ appwriteKey?: string;
115
+ };
116
+ }
117
+
101
118
  export class UtilsController {
102
119
  // ──────────────────────────────────────────────────
103
120
  // SINGLETON PATTERN
@@ -247,8 +264,8 @@ export class UtilsController {
247
264
  }
248
265
  }
249
266
 
250
- async init(options: { validate?: boolean; strictMode?: boolean; useSession?: boolean; sessionCookie?: string } = {}) {
251
- const { validate = false, strictMode = false } = options;
267
+ async init(options: ControllerInitOptions = {}) {
268
+ const { validate = false, strictMode = false, preferJson = false, useSession, sessionCookie, overrides } = options;
252
269
  const configManager = ConfigManager.getInstance();
253
270
 
254
271
  // Load config if not already loaded
@@ -257,6 +274,10 @@ export class UtilsController {
257
274
  configDir: this.currentUserDir,
258
275
  validate,
259
276
  strictMode,
277
+ preferJson,
278
+ useSession,
279
+ explicitSessionCookie: sessionCookie,
280
+ overrides,
260
281
  });
261
282
  }
262
283
 
@@ -504,7 +525,8 @@ export class UtilsController {
504
525
  this.appwriteServer,
505
526
  functionName,
506
527
  functionConfig,
507
- functionPath
528
+ functionPath,
529
+ this.appwriteFolderPath
508
530
  );
509
531
  }
510
532
 
@@ -628,7 +650,6 @@ export class UtilsController {
628
650
  // Ensure we don't carry state between databases in a multi-db push
629
651
  // This resets processed sets and name->id mapping per database
630
652
  try {
631
- const { clearProcessingState } = await import('./shared/operationQueue.js');
632
653
  clearProcessingState();
633
654
  } catch {}
634
655
 
@@ -656,6 +677,15 @@ export class UtilsController {
656
677
  collections
657
678
  );
658
679
  }
680
+
681
+ // Safety net: Process any remaining queued operations to complete relationship sync
682
+ try {
683
+ MessageFormatter.info(`🔄 Processing final operation queue for database ${database.$id}`, { prefix: "UtilsController" });
684
+ await processQueue(this.adapter || this.database!, database.$id);
685
+ MessageFormatter.info(`✅ Operation queue processing completed`, { prefix: "UtilsController" });
686
+ } catch (error) {
687
+ MessageFormatter.error(`Failed to process operation queue`, error instanceof Error ? error : new Error(String(error)), { prefix: 'UtilsController' });
688
+ }
659
689
  }
660
690
 
661
691
  async generateSchemas() {
@@ -878,22 +908,40 @@ export class UtilsController {
878
908
 
879
909
  // Convert database selections to Models.Database format
880
910
  const selectedDatabases: Models.Database[] = [];
911
+ const serverDatabases = await fetchAllDatabases(this.database);
912
+ const configuredDatabases = this.config?.databases || [];
881
913
 
882
914
  for (const dbSelection of databaseSelections) {
883
- // Get the full database object from the controller
884
- const databases = await fetchAllDatabases(this.database);
885
- const database = databases.find(db => db.$id === dbSelection.databaseId);
886
-
887
- if (database) {
888
- selectedDatabases.push(database);
889
- MessageFormatter.info(`Selected database: ${database.name} (${database.$id})`, { prefix: "Controller" });
915
+ // First try to find on server
916
+ const serverDb = serverDatabases.find(db => db.$id === dbSelection.databaseId);
890
917
 
891
- // Log selected tables for this database
892
- if (dbSelection.tableIds && dbSelection.tableIds.length > 0) {
893
- MessageFormatter.info(` Tables: ${dbSelection.tableIds.join(', ')}`, { prefix: "Controller" });
894
- }
918
+ if (serverDb) {
919
+ selectedDatabases.push(serverDb);
920
+ MessageFormatter.info(`Selected database: ${serverDb.name} (${serverDb.$id})`, { prefix: "Controller" });
895
921
  } else {
896
- MessageFormatter.warning(`Database with ID ${dbSelection.databaseId} not found`, { prefix: "Controller" });
922
+ // Database doesn't exist on server - check if it's in local config
923
+ const configDb = configuredDatabases.find((db: any) => db.$id === dbSelection.databaseId);
924
+
925
+ if (configDb) {
926
+ // Create a pseudo-database object that ensureDatabasesExist will create
927
+ const dbId = configDb.$id;
928
+ selectedDatabases.push({
929
+ $id: dbId,
930
+ name: configDb.name || dbId,
931
+ $createdAt: new Date().toISOString(),
932
+ $updatedAt: new Date().toISOString(),
933
+ enabled: true,
934
+ } as Models.Database);
935
+ MessageFormatter.info(`Selected database: ${configDb.name || dbId} (${dbId}) [will be created]`, { prefix: "Controller" });
936
+ } else {
937
+ MessageFormatter.warning(`Database with ID ${dbSelection.databaseId} not found in server or local config`, { prefix: "Controller" });
938
+ continue;
939
+ }
940
+ }
941
+
942
+ // Log selected tables for this database
943
+ if (dbSelection.tableIds && dbSelection.tableIds.length > 0) {
944
+ MessageFormatter.info(` Tables: ${dbSelection.tableIds.join(', ')}`, { prefix: "Controller" });
897
945
  }
898
946
  }
899
947
 
@@ -916,7 +964,10 @@ export class UtilsController {
916
964
  const databaseCollectionsMap = new Map<string, any[]>();
917
965
 
918
966
  // Get all collections/tables from config (they're at the root level, not nested in databases)
919
- const allCollections = this.config?.collections || this.config?.tables || [];
967
+ const allCollections = [
968
+ ...(this.config?.collections || []),
969
+ ...(this.config?.tables || [])
970
+ ];
920
971
 
921
972
  // Create database-specific collection mapping to preserve relationships
922
973
  for (const dbSelection of databaseSelections) {
@@ -1044,13 +1095,16 @@ export class UtilsController {
1044
1095
  options.transferProject!,
1045
1096
  options.transferKey!,
1046
1097
  fromDb.$id,
1047
- targetDb.$id
1098
+ targetDb.$id,
1099
+ options.collections
1048
1100
  );
1049
1101
  } else {
1050
1102
  await transferDatabaseLocalToLocal(
1051
1103
  sourceClient,
1052
1104
  fromDb.$id,
1053
- targetDb.$id
1105
+ targetDb.$id,
1106
+ options.collections,
1107
+ this.adapter
1054
1108
  );
1055
1109
  }
1056
1110
  }
@@ -1,94 +0,0 @@
1
- /**
2
- * AdapterFactory - Unified Client Creation with Automatic API Detection
3
- *
4
- * This factory creates the appropriate database adapter (TablesDB or Legacy)
5
- * based on version detection and configuration. It handles dynamic SDK imports
6
- * and provides a single entry point for all database operations.
7
- */
8
- import type { AppwriteConfig } from "@njdamstra/appwrite-utils";
9
- import { type ApiMode, type VersionDetectionResult } from "../utils/versionDetection.js";
10
- import type { DatabaseAdapter } from './DatabaseAdapter.js';
11
- export interface AdapterFactoryConfig {
12
- appwriteEndpoint: string;
13
- appwriteProject: string;
14
- appwriteKey?: string;
15
- apiMode?: 'auto' | 'legacy' | 'tablesdb';
16
- forceRefresh?: boolean;
17
- sessionCookie?: string;
18
- authMethod?: 'session' | 'apikey' | 'auto';
19
- preConfiguredClient?: any;
20
- }
21
- export interface AdapterFactoryResult {
22
- adapter: DatabaseAdapter;
23
- apiMode: ApiMode;
24
- detectionResult?: VersionDetectionResult;
25
- client: any;
26
- }
27
- /**
28
- * AdapterFactory - Main factory class for creating database adapters
29
- */
30
- export declare class AdapterFactory {
31
- private static cache;
32
- private static readonly CACHE_DURATION;
33
- /**
34
- * Create a database adapter based on configuration and detection
35
- */
36
- static create(config: AdapterFactoryConfig): Promise<AdapterFactoryResult>;
37
- /**
38
- * Create adapter from AppwriteConfig (convenience method)
39
- */
40
- static createFromConfig(config: AppwriteConfig, forceRefresh?: boolean): Promise<AdapterFactoryResult>;
41
- /**
42
- * Create specific adapter type (internal method)
43
- */
44
- private static createAdapter;
45
- /**
46
- * Create TablesDB adapter with dynamic import
47
- */
48
- private static createTablesDBAdapter;
49
- /**
50
- * Create Legacy adapter with dynamic import
51
- */
52
- private static createLegacyAdapter;
53
- /**
54
- * Get cached adapter if available and not expired
55
- */
56
- private static getCachedAdapter;
57
- /**
58
- * Cache adapter instance
59
- */
60
- private static setCachedAdapter;
61
- /**
62
- * Clear adapter cache (useful for testing)
63
- */
64
- static clearCache(): void;
65
- /**
66
- * Validate authentication configuration
67
- */
68
- private static validateAuthConfig;
69
- /**
70
- * Test connection and API capabilities
71
- */
72
- static testConnection(config: AdapterFactoryConfig): Promise<{
73
- success: boolean;
74
- apiMode: ApiMode;
75
- capabilities: string[];
76
- error?: string;
77
- }>;
78
- }
79
- /**
80
- * Convenience function for quick adapter creation
81
- */
82
- export declare function createDatabaseAdapter(endpoint: string, project: string, apiKey?: string, mode?: 'auto' | 'legacy' | 'tablesdb', sessionCookie?: string): Promise<DatabaseAdapter>;
83
- /**
84
- * Helper function to get adapter metadata without creating full adapter
85
- */
86
- export declare function getApiCapabilities(endpoint: string, project: string, apiKey?: string, sessionCookie?: string): Promise<{
87
- apiMode: ApiMode;
88
- terminology: {
89
- container: string;
90
- item: string;
91
- service: string;
92
- };
93
- capabilities: string[];
94
- }>;