* Migrates scripts from local storage to server storage * @param {string} appId - The application ID * @param {boolean} overwriteConflicts - If true, overwrite server scripts with same ID * @returns {Promise<{success: boolean, scriptCount: number, conflicts?: Array}>}
(appId, overwriteConflicts = false)
| 196 | * @returns {Promise<{success: boolean, scriptCount: number, conflicts?: Array}>} |
| 197 | */ |
| 198 | async migrateToServer(appId, overwriteConflicts = false) { |
| 199 | if (!this.serverStorage.isServerConfigEnabled()) { |
| 200 | throw new Error('Server configuration is not enabled for this app'); |
| 201 | } |
| 202 | |
| 203 | // Get scripts from local storage only (legacy scripts are handled by getScripts as unsaved tabs) |
| 204 | const localScripts = this._getScriptsFromLocal(appId); |
| 205 | |
| 206 | if (!localScripts || localScripts.length === 0) { |
| 207 | return { success: true, scriptCount: 0 }; |
| 208 | } |
| 209 | |
| 210 | try { |
| 211 | // Get existing scripts from server to detect conflicts |
| 212 | const existingScriptConfigs = await this.serverStorage.getConfigsByPrefix('console.js.script.', appId); |
| 213 | const existingScriptIds = Object.keys(existingScriptConfigs).map(key => |
| 214 | key.replace('console.js.script.', '') |
| 215 | ); |
| 216 | |
| 217 | // Check for conflicts |
| 218 | const localScriptIds = localScripts.map(script => script.id).filter(Boolean); |
| 219 | const conflictingIds = localScriptIds.filter(id => existingScriptIds.includes(id)); |
| 220 | |
| 221 | if (conflictingIds.length > 0 && !overwriteConflicts) { |
| 222 | // Return conflicts for user decision |
| 223 | const conflicts = conflictingIds.map(id => { |
| 224 | const localScript = localScripts.find(s => s.id === id); |
| 225 | const serverScriptKey = `console.js.script.${id}`; |
| 226 | const serverScript = existingScriptConfigs[serverScriptKey]; |
| 227 | return { |
| 228 | id, |
| 229 | type: 'script', |
| 230 | local: localScript, |
| 231 | server: serverScript |
| 232 | }; |
| 233 | }); |
| 234 | |
| 235 | return { |
| 236 | success: false, |
| 237 | scriptCount: 0, |
| 238 | conflicts |
| 239 | }; |
| 240 | } |
| 241 | |
| 242 | // Proceed with migration (merge mode) |
| 243 | await this._migrateScriptsToServer(appId, localScripts, overwriteConflicts); |
| 244 | return { success: true, scriptCount: localScripts.length }; |
| 245 | } catch (error) { |
| 246 | console.error('Failed to migrate scripts to server:', error); |
| 247 | throw error; |
| 248 | } |
| 249 | } |
| 250 | |
| 251 | /** |
| 252 | * Deletes scripts from local storage |
no test coverage detected