@njdamstra/appwrite-utils-cli 1.8.9 → 1.10.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.
Files changed (284) 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 +2 -35
  25. package/dist/collections/indexes.js +1 -3
  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 +55 -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 +63 -9
  44. package/dist/main.js +130 -177
  45. package/dist/migrations/afterImportActions.js +2 -3
  46. package/dist/migrations/appwriteToX.d.ts +1 -1
  47. package/dist/migrations/appwriteToX.js +9 -7
  48. package/dist/migrations/comprehensiveTransfer.js +3 -5
  49. package/dist/migrations/dataLoader.js +2 -5
  50. package/dist/migrations/importController.js +3 -4
  51. package/dist/migrations/importDataActions.js +3 -3
  52. package/dist/migrations/relationships.js +1 -2
  53. package/dist/migrations/services/DataTransformationService.js +2 -2
  54. package/dist/migrations/services/FileHandlerService.js +1 -1
  55. package/dist/migrations/services/ImportOrchestrator.js +4 -4
  56. package/dist/migrations/services/RateLimitManager.js +1 -1
  57. package/dist/migrations/services/RelationshipResolver.js +1 -1
  58. package/dist/migrations/services/UserMappingService.js +1 -1
  59. package/dist/migrations/services/ValidationService.js +1 -1
  60. package/dist/migrations/transfer.d.ts +8 -4
  61. package/dist/migrations/transfer.js +106 -55
  62. package/dist/migrations/yaml/YamlImportConfigLoader.js +1 -1
  63. package/dist/migrations/yaml/YamlImportIntegration.js +2 -2
  64. package/dist/migrations/yaml/generateImportSchemas.js +1 -1
  65. package/dist/setupCommands.d.ts +1 -1
  66. package/dist/setupCommands.js +5 -6
  67. package/dist/setupController.js +1 -1
  68. package/dist/shared/backupTracking.d.ts +1 -1
  69. package/dist/shared/backupTracking.js +2 -2
  70. package/dist/shared/confirmationDialogs.js +1 -1
  71. package/dist/shared/migrationHelpers.d.ts +1 -1
  72. package/dist/shared/migrationHelpers.js +3 -3
  73. package/dist/shared/operationQueue.d.ts +1 -1
  74. package/dist/shared/operationQueue.js +2 -3
  75. package/dist/shared/operationsTable.d.ts +1 -1
  76. package/dist/shared/operationsTable.js +2 -2
  77. package/dist/shared/progressManager.js +1 -1
  78. package/dist/shared/selectionDialogs.js +9 -8
  79. package/dist/storage/methods.js +4 -4
  80. package/dist/storage/schemas.d.ts +2 -2
  81. package/dist/tables/indexManager.d.ts +65 -0
  82. package/dist/tables/indexManager.js +294 -0
  83. package/dist/types.d.ts +2 -2
  84. package/dist/types.js +1 -1
  85. package/dist/users/methods.js +2 -3
  86. package/dist/utils/configMigration.js +1 -1
  87. package/dist/utils/index.d.ts +1 -1
  88. package/dist/utils/index.js +1 -1
  89. package/dist/utils/loadConfigs.d.ts +2 -2
  90. package/dist/utils/loadConfigs.js +6 -7
  91. package/dist/utils/setupFiles.js +5 -7
  92. package/dist/utilsController.d.ts +15 -8
  93. package/dist/utilsController.js +57 -28
  94. package/package.json +7 -3
  95. package/src/adapters/index.ts +8 -34
  96. package/src/backups/operations/bucketBackup.ts +2 -2
  97. package/src/backups/operations/collectionBackup.ts +4 -4
  98. package/src/backups/operations/comprehensiveBackup.ts +3 -3
  99. package/src/backups/tracking/centralizedTracking.ts +3 -3
  100. package/src/cli/commands/configCommands.ts +72 -8
  101. package/src/cli/commands/databaseCommands.ts +161 -9
  102. package/src/cli/commands/functionCommands.ts +4 -3
  103. package/src/cli/commands/importFileCommands.ts +815 -0
  104. package/src/cli/commands/schemaCommands.ts +3 -3
  105. package/src/cli/commands/storageCommands.ts +2 -3
  106. package/src/cli/commands/transferCommands.ts +3 -6
  107. package/src/collections/attributes.ts +3 -39
  108. package/src/collections/indexes.ts +2 -4
  109. package/src/collections/methods.ts +115 -150
  110. package/src/collections/tableOperations.ts +57 -21
  111. package/src/collections/transferOperations.ts +4 -5
  112. package/src/collections/wipeOperations.ts +154 -51
  113. package/src/databases/methods.ts +2 -2
  114. package/src/databases/setup.ts +2 -2
  115. package/src/examples/yamlTerminologyExample.ts +2 -2
  116. package/src/functions/deployments.ts +6 -5
  117. package/src/functions/fnConfigDiscovery.ts +2 -2
  118. package/src/functions/methods.ts +17 -4
  119. package/src/init.ts +1 -1
  120. package/src/interactiveCLI.ts +75 -10
  121. package/src/main.ts +143 -287
  122. package/src/migrations/afterImportActions.ts +2 -3
  123. package/src/migrations/appwriteToX.ts +12 -8
  124. package/src/migrations/comprehensiveTransfer.ts +6 -6
  125. package/src/migrations/dataLoader.ts +2 -5
  126. package/src/migrations/importController.ts +3 -4
  127. package/src/migrations/importDataActions.ts +3 -3
  128. package/src/migrations/relationships.ts +1 -2
  129. package/src/migrations/services/DataTransformationService.ts +2 -2
  130. package/src/migrations/services/FileHandlerService.ts +1 -1
  131. package/src/migrations/services/ImportOrchestrator.ts +4 -4
  132. package/src/migrations/services/RateLimitManager.ts +1 -1
  133. package/src/migrations/services/RelationshipResolver.ts +1 -1
  134. package/src/migrations/services/UserMappingService.ts +1 -1
  135. package/src/migrations/services/ValidationService.ts +1 -1
  136. package/src/migrations/transfer.ts +126 -83
  137. package/src/migrations/yaml/YamlImportConfigLoader.ts +1 -1
  138. package/src/migrations/yaml/YamlImportIntegration.ts +2 -2
  139. package/src/migrations/yaml/generateImportSchemas.ts +1 -1
  140. package/src/setupCommands.ts +5 -6
  141. package/src/setupController.ts +1 -1
  142. package/src/shared/backupTracking.ts +3 -3
  143. package/src/shared/confirmationDialogs.ts +1 -1
  144. package/src/shared/migrationHelpers.ts +4 -4
  145. package/src/shared/operationQueue.ts +3 -4
  146. package/src/shared/operationsTable.ts +3 -3
  147. package/src/shared/progressManager.ts +1 -1
  148. package/src/shared/selectionDialogs.ts +9 -8
  149. package/src/storage/methods.ts +4 -4
  150. package/src/tables/indexManager.ts +409 -0
  151. package/src/types.ts +2 -2
  152. package/src/users/methods.ts +2 -3
  153. package/src/utils/configMigration.ts +1 -1
  154. package/src/utils/index.ts +1 -1
  155. package/src/utils/loadConfigs.ts +15 -7
  156. package/src/utils/setupFiles.ts +5 -7
  157. package/src/utilsController.ts +86 -32
  158. package/dist/adapters/AdapterFactory.d.ts +0 -94
  159. package/dist/adapters/AdapterFactory.js +0 -405
  160. package/dist/adapters/DatabaseAdapter.d.ts +0 -233
  161. package/dist/adapters/DatabaseAdapter.js +0 -50
  162. package/dist/adapters/LegacyAdapter.d.ts +0 -50
  163. package/dist/adapters/LegacyAdapter.js +0 -612
  164. package/dist/adapters/TablesDBAdapter.d.ts +0 -45
  165. package/dist/adapters/TablesDBAdapter.js +0 -571
  166. package/dist/config/ConfigManager.d.ts +0 -445
  167. package/dist/config/ConfigManager.js +0 -625
  168. package/dist/config/configMigration.d.ts +0 -87
  169. package/dist/config/configMigration.js +0 -390
  170. package/dist/config/configValidation.d.ts +0 -66
  171. package/dist/config/configValidation.js +0 -358
  172. package/dist/config/index.d.ts +0 -8
  173. package/dist/config/index.js +0 -7
  174. package/dist/config/services/ConfigDiscoveryService.d.ts +0 -126
  175. package/dist/config/services/ConfigDiscoveryService.js +0 -374
  176. package/dist/config/services/ConfigLoaderService.d.ts +0 -129
  177. package/dist/config/services/ConfigLoaderService.js +0 -540
  178. package/dist/config/services/ConfigMergeService.d.ts +0 -208
  179. package/dist/config/services/ConfigMergeService.js +0 -308
  180. package/dist/config/services/ConfigValidationService.d.ts +0 -214
  181. package/dist/config/services/ConfigValidationService.js +0 -310
  182. package/dist/config/services/SessionAuthService.d.ts +0 -225
  183. package/dist/config/services/SessionAuthService.js +0 -456
  184. package/dist/config/services/__tests__/ConfigMergeService.test.d.ts +0 -1
  185. package/dist/config/services/__tests__/ConfigMergeService.test.js +0 -271
  186. package/dist/config/services/index.d.ts +0 -13
  187. package/dist/config/services/index.js +0 -10
  188. package/dist/config/yamlConfig.d.ts +0 -722
  189. package/dist/config/yamlConfig.js +0 -702
  190. package/dist/functions/pathResolution.d.ts +0 -37
  191. package/dist/functions/pathResolution.js +0 -185
  192. package/dist/shared/attributeMapper.d.ts +0 -20
  193. package/dist/shared/attributeMapper.js +0 -203
  194. package/dist/shared/errorUtils.d.ts +0 -54
  195. package/dist/shared/errorUtils.js +0 -95
  196. package/dist/shared/functionManager.d.ts +0 -48
  197. package/dist/shared/functionManager.js +0 -336
  198. package/dist/shared/indexManager.d.ts +0 -24
  199. package/dist/shared/indexManager.js +0 -151
  200. package/dist/shared/jsonSchemaGenerator.d.ts +0 -50
  201. package/dist/shared/jsonSchemaGenerator.js +0 -290
  202. package/dist/shared/logging.d.ts +0 -61
  203. package/dist/shared/logging.js +0 -116
  204. package/dist/shared/messageFormatter.d.ts +0 -39
  205. package/dist/shared/messageFormatter.js +0 -162
  206. package/dist/shared/pydanticModelGenerator.d.ts +0 -17
  207. package/dist/shared/pydanticModelGenerator.js +0 -615
  208. package/dist/shared/schemaGenerator.d.ts +0 -40
  209. package/dist/shared/schemaGenerator.js +0 -556
  210. package/dist/utils/ClientFactory.d.ts +0 -87
  211. package/dist/utils/ClientFactory.js +0 -212
  212. package/dist/utils/configDiscovery.d.ts +0 -78
  213. package/dist/utils/configDiscovery.js +0 -472
  214. package/dist/utils/constantsGenerator.d.ts +0 -31
  215. package/dist/utils/constantsGenerator.js +0 -321
  216. package/dist/utils/dataConverters.d.ts +0 -46
  217. package/dist/utils/dataConverters.js +0 -139
  218. package/dist/utils/directoryUtils.d.ts +0 -22
  219. package/dist/utils/directoryUtils.js +0 -59
  220. package/dist/utils/getClientFromConfig.d.ts +0 -39
  221. package/dist/utils/getClientFromConfig.js +0 -199
  222. package/dist/utils/helperFunctions.d.ts +0 -63
  223. package/dist/utils/helperFunctions.js +0 -156
  224. package/dist/utils/pathResolvers.d.ts +0 -53
  225. package/dist/utils/pathResolvers.js +0 -72
  226. package/dist/utils/projectConfig.d.ts +0 -119
  227. package/dist/utils/projectConfig.js +0 -171
  228. package/dist/utils/retryFailedPromises.d.ts +0 -2
  229. package/dist/utils/retryFailedPromises.js +0 -23
  230. package/dist/utils/sessionAuth.d.ts +0 -48
  231. package/dist/utils/sessionAuth.js +0 -164
  232. package/dist/utils/typeGuards.d.ts +0 -35
  233. package/dist/utils/typeGuards.js +0 -57
  234. package/dist/utils/validationRules.d.ts +0 -43
  235. package/dist/utils/validationRules.js +0 -42
  236. package/dist/utils/versionDetection.d.ts +0 -58
  237. package/dist/utils/versionDetection.js +0 -251
  238. package/dist/utils/yamlConverter.d.ts +0 -100
  239. package/dist/utils/yamlConverter.js +0 -428
  240. package/dist/utils/yamlLoader.d.ts +0 -70
  241. package/dist/utils/yamlLoader.js +0 -267
  242. package/src/adapters/AdapterFactory.ts +0 -510
  243. package/src/adapters/DatabaseAdapter.ts +0 -306
  244. package/src/adapters/LegacyAdapter.ts +0 -841
  245. package/src/adapters/TablesDBAdapter.ts +0 -773
  246. package/src/config/ConfigManager.ts +0 -808
  247. package/src/config/README.md +0 -274
  248. package/src/config/configMigration.ts +0 -575
  249. package/src/config/configValidation.ts +0 -445
  250. package/src/config/index.ts +0 -10
  251. package/src/config/services/ConfigDiscoveryService.ts +0 -463
  252. package/src/config/services/ConfigLoaderService.ts +0 -740
  253. package/src/config/services/ConfigMergeService.ts +0 -388
  254. package/src/config/services/ConfigValidationService.ts +0 -394
  255. package/src/config/services/SessionAuthService.ts +0 -565
  256. package/src/config/services/__tests__/ConfigMergeService.test.ts +0 -351
  257. package/src/config/services/index.ts +0 -29
  258. package/src/config/yamlConfig.ts +0 -761
  259. package/src/functions/pathResolution.ts +0 -227
  260. package/src/shared/attributeMapper.ts +0 -229
  261. package/src/shared/errorUtils.ts +0 -110
  262. package/src/shared/functionManager.ts +0 -525
  263. package/src/shared/indexManager.ts +0 -254
  264. package/src/shared/jsonSchemaGenerator.ts +0 -383
  265. package/src/shared/logging.ts +0 -149
  266. package/src/shared/messageFormatter.ts +0 -208
  267. package/src/shared/pydanticModelGenerator.ts +0 -618
  268. package/src/shared/schemaGenerator.ts +0 -644
  269. package/src/utils/ClientFactory.ts +0 -240
  270. package/src/utils/configDiscovery.ts +0 -557
  271. package/src/utils/constantsGenerator.ts +0 -369
  272. package/src/utils/dataConverters.ts +0 -159
  273. package/src/utils/directoryUtils.ts +0 -61
  274. package/src/utils/getClientFromConfig.ts +0 -257
  275. package/src/utils/helperFunctions.ts +0 -228
  276. package/src/utils/pathResolvers.ts +0 -81
  277. package/src/utils/projectConfig.ts +0 -299
  278. package/src/utils/retryFailedPromises.ts +0 -29
  279. package/src/utils/sessionAuth.ts +0 -230
  280. package/src/utils/typeGuards.ts +0 -65
  281. package/src/utils/validationRules.ts +0 -88
  282. package/src/utils/versionDetection.ts +0 -292
  283. package/src/utils/yamlConverter.ts +0 -542
  284. 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
- }>;