trello-cli-unofficial 0.7.6 → 0.8.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 (31) hide show
  1. package/README.md +27 -0
  2. package/bun.lock +225 -2
  3. package/dist/main.js +26490 -25401
  4. package/main.ts +6 -3
  5. package/package.json +15 -3
  6. package/src/application/use-cases/AuthenticateUserUseCase.ts +7 -6
  7. package/src/application/use-cases/CreateBoardUseCase.ts +19 -0
  8. package/src/application/use-cases/CreateCardUseCase.ts +2 -1
  9. package/src/application/use-cases/CreateListUseCase.ts +19 -0
  10. package/src/application/use-cases/GetBoardDetailsUseCase.ts +41 -0
  11. package/src/application/use-cases/UpdateCardUseCase.ts +2 -1
  12. package/src/application/use-cases/index.ts +3 -0
  13. package/src/domain/entities/Board.ts +10 -2
  14. package/src/domain/entities/Card.ts +12 -1
  15. package/src/domain/entities/Config.ts +3 -1
  16. package/src/domain/entities/List.ts +14 -2
  17. package/src/domain/repositories/TrelloRepository.ts +4 -0
  18. package/src/i18n/index.ts +62 -5
  19. package/src/i18n/locales/en.json +154 -17
  20. package/src/i18n/locales/pt-BR.json +154 -17
  21. package/src/infrastructure/repositories/FileConfigRepository.ts +6 -3
  22. package/src/infrastructure/repositories/TrelloApiRepository.ts +155 -10
  23. package/src/presentation/cli/AuthController.ts +2 -1
  24. package/src/presentation/cli/BoardController.ts +160 -17
  25. package/src/presentation/cli/CardController.ts +169 -45
  26. package/src/presentation/cli/CommandController.ts +293 -27
  27. package/src/presentation/cli/ConfigController.ts +4 -3
  28. package/src/presentation/cli/TrelloCliController.ts +10 -2
  29. package/src/shared/ErrorHandler.ts +233 -0
  30. package/src/shared/OutputFormatter.ts +210 -0
  31. package/src/shared/index.ts +2 -0
@@ -7,7 +7,8 @@
7
7
  "exit": "Exit",
8
8
  "success": "✅ Success!",
9
9
  "error": "❌ Error!",
10
- "loading": "⏳ Loading..."
10
+ "loading": "⏳ Loading...",
11
+ "noData": "No data to display"
11
12
  },
12
13
  "auth": {
13
14
  "notAuthenticated": "🔐 You are not authenticated!",
@@ -32,9 +33,14 @@
32
33
  "configBack": "⬅️ Back",
33
34
  "currentConfig": "� Current configuration:",
34
35
  "tokenConfigured": "Token configured:",
36
+ "apiKey": "API Key:",
35
37
  "configFile": "Config file: ~/.trello-cli-unofficial/config.json",
36
38
  "confirmReset": "Are you sure you want to reset all configuration?",
37
39
  "configResetted": "✅ Configuration resetted!",
40
+ "errors": {
41
+ "loadConfig": "Error loading config:",
42
+ "saveConfig": "Error saving config:"
43
+ },
38
44
  "selectBoard": "Select a board:",
39
45
  "selectList": "Select a list:",
40
46
  "selectCard": "Select a card:"
@@ -43,15 +49,41 @@
43
49
  "loading": "⏳ Loading boards...",
44
50
  "empty": "📋 No boards found.",
45
51
  "notFound": "❌ Board \"{{name}}\" not found",
52
+ "notFoundById": "❌ Board with ID '{{id}}' not found",
46
53
  "lists": "📝 Lists of Board: {{name}}",
47
- "yourBoards": "📋 Your Trello Boards:"
54
+ "listsHeaders": {
55
+ "name": "List Name",
56
+ "id": "List ID"
57
+ },
58
+ "listsTitle": "📝 Lists:",
59
+ "listsEmpty": "📝 No lists found in this board",
60
+ "listId": "🆔 {{id}}",
61
+ "yourBoards": "📋 Your Trello Boards:",
62
+ "created": "✅ Board \"{{name}}\" created successfully!",
63
+ "boardName": "📋 Board: {{name}}",
64
+ "boardUrl": "🔗 URL: {{url}}",
65
+ "boardId": "🆔 ID: {{id}}",
66
+ "boardStats": "📊 Statistics: {{lists}} lists, {{cards}} cards",
67
+ "validation": {
68
+ "nameRequired": "Board name is required",
69
+ "nameTooLong": "Board name is too long (max 16384 characters)"
70
+ }
48
71
  },
49
72
  "list": {
50
73
  "loading": "⏳ Loading lists...",
51
74
  "empty": "📝 No lists found in this board.",
52
75
  "notFound": "❌ List \"{{listName}}\" not found in board \"{{boardName}}\"",
53
76
  "cards": "🃏 Cards of List: {{name}}",
54
- "boardLists": "📋 Lists from board \"{{boardName}}\":"
77
+ "boardLists": "📋 Lists from board \"{{boardName}}\":",
78
+ "cardsEmpty": "No cards found in this list",
79
+ "created": "✅ List \"{{name}}\" created successfully!",
80
+ "deleted": "✅ List deleted successfully!",
81
+ "moved": "✅ List moved to position {{position}}!",
82
+ "notEmpty": "❌ Cannot delete list \"{{listName}}\" because it contains cards. Move or delete the cards first.",
83
+ "validation": {
84
+ "nameCannotBeEmpty": "List name cannot be empty",
85
+ "nameTooLong": "List name cannot be longer than 16384 characters"
86
+ }
55
87
  },
56
88
  "card": {
57
89
  "loading": "⏳ Loading cards...",
@@ -66,6 +98,8 @@
66
98
  "confirmDelete": "Are you sure you want to delete \"{{name}}\"?",
67
99
  "listCards": "📋 Cards from list \"{{listName}}\" in board \"{{boardName}}\":",
68
100
  "emptyList": "📭 This list is empty.",
101
+ "cardsInList": "🃏 Cards in \"{{listName}}\":",
102
+ "cardDescription": "📝 {{description}}",
69
103
  "selectBoard": "Select board:",
70
104
  "selectList": "Select list:",
71
105
  "selectCard": "Select a card:",
@@ -77,13 +111,19 @@
77
111
  "cardUrl": "🔗 URL: {{url}}",
78
112
  "cardId": "🆔 ID: {{id}}",
79
113
  "movedTo": "➡️ To: {{listName}}",
114
+ "validation": {
115
+ "requiredName": "Name is required",
116
+ "requiredCardName": "Card name is required",
117
+ "cardNameCannotBeEmpty": "Card name cannot be empty"
118
+ },
80
119
  "actions": {
81
120
  "view": "👁️ View Details",
82
121
  "create": "➕ Create Card",
83
122
  "edit": "✏️ Edit Card",
84
123
  "move": "🔄 Move Card",
85
124
  "delete": "🗑️ Delete Card",
86
- "back": "⬅️ Back"
125
+ "back": "⬅️ Back",
126
+ "moveCard": "📦 Move card"
87
127
  }
88
128
  },
89
129
  "errors": {
@@ -91,23 +131,86 @@
91
131
  "generic": "❌ Error:",
92
132
  "network": "❌ Network error. Check your connection.",
93
133
  "invalidInput": "❌ Invalid input: {{field}}",
94
- "required": "❌ Required field: {{field}}"
134
+ "required": "❌ Required field: {{field}}",
135
+ "translationLoadError": "Error loading translation files:",
136
+ "authFailed": "❌ Authentication failed: {{message}}",
137
+ "trySetup": "💡 Try running: trello-cli-unofficial setup",
138
+ "apiError": "❌ API Error ({{statusCode}}): {{message}}",
139
+ "endpoint": "📍 Endpoint: {{endpoint}}",
140
+ "validationError": "❌ Validation Error: {{message}}",
141
+ "field": "📝 Field: {{field}}",
142
+ "notFound": "❌ Not Found: {{message}}",
143
+ "resourceType": "🔍 Resource Type: {{resourceType}}",
144
+ "resourceId": "🆔 Resource ID: {{resourceId}}",
145
+ "configError": "❌ Configuration Error: {{message}}",
146
+ "checkConfig": "💡 Check your configuration file: ~/.trello-cli-unofficial/config.json",
147
+ "networkError": "❌ Network Error: {{message}}",
148
+ "checkConnection": "💡 Check your internet connection and try again",
149
+ "unexpectedError": "❌ Unexpected error: {{message}}",
150
+ "stackTrace": "Stack trace:",
151
+ "unknownError": "❌ Unknown error occurred:",
152
+ "unknownApiError": "Unknown API error",
153
+ "invalidToken": "Invalid or expired token"
154
+ },
155
+ "api": {
156
+ "trelloError": "Trello API Error:",
157
+ "defaultApiKey": "630a01228b85df706aa520f3611e6490",
158
+ "networkConnectionFailed": "Network connection failed",
159
+ "unknownApiError": "Unknown API error",
160
+ "invalidToken": "Invalid or expired token",
161
+ "resourceNotFound": "Resource not found",
162
+ "rateLimitExceeded": "Rate limit exceeded. Please try again later.",
163
+ "internalServerError": "Internal server error. Please try again later."
95
164
  },
96
165
  "commands": {
97
- "boards": {
98
- "description": "List all available boards",
99
- "success": "📋 Boards loaded successfully!"
166
+ "description": "Unofficial Trello CLI using Power-Up authentication",
167
+ "formatOption": "Output format: table, json, csv",
168
+ "deprecated": {
169
+ "boardsLegacyDescription": "[DEPRECATED] Use \"boards list\" instead",
170
+ "boardsLegacyWarning": "⚠️ Warning: \"boards\" command is deprecated. Use \"boards list\" instead.",
171
+ "boardsLegacyError": "❌ Error:",
172
+ "listsLegacyDescription": "[DEPRECATED] Use \"lists list <boardId>\" instead",
173
+ "listsLegacyWarning": "⚠️ Warning: \"lists <boardName>\" command is deprecated. Use \"lists list <boardId>\" instead.",
174
+ "listsLegacyError": "❌ Error:",
175
+ "cardsLegacyDescription": "[DEPRECATED] Use \"cards list <listId>\" instead",
176
+ "cardsLegacyWarning": "⚠️ Warning: \"cards <boardName> <listName>\" command is deprecated. Use \"cards list <listId>\" instead.",
177
+ "cardsLegacyError": "❌ Error:",
178
+ "createCardLegacyDescription": "[DEPRECATED] Use \"cards create <listId> <name>\" instead",
179
+ "createCardLegacyWarning": "⚠️ Warning: \"create-card\" command is deprecated. Use \"cards create <listId> <name>\" instead.",
180
+ "moveCardLegacyDescription": "[DEPRECATED] Use \"cards move <cardId> --to <listId>\" instead",
181
+ "moveCardLegacyWarning": "⚠️ Warning: \"move-card\" command is deprecated. Use \"cards move <cardId> --to <listId>\" instead.",
182
+ "deleteCardLegacyDescription": "[DEPRECATED] Use \"cards delete <cardId>\" instead",
183
+ "deleteCardLegacyWarning": "⚠️ Warning: \"delete-card\" command is deprecated. Use \"cards delete <cardId>\" instead."
100
184
  },
101
- "lists": {
102
- "description": "List the lists of a specific board",
103
- "boardRequired": "❌ Board name is required",
104
- "success": "📝 Lists loaded successfully!"
185
+ "commandErrors": {
186
+ "genericError": " Error:"
105
187
  },
106
- "cards": {
107
- "description": "List the cards of a specific list",
108
- "boardRequired": " Board name is required",
109
- "listRequired": " List name is required",
110
- "success": "🃏 Cards loaded successfully!"
188
+ "options": {
189
+ "cardDescription": "Card description",
190
+ "targetListId": "Target list ID",
191
+ "newCardName": "New card name",
192
+ "newCardDescription": "New card description"
193
+ },
194
+ "interactive": {
195
+ "description": "Start interactive mode"
196
+ },
197
+ "setup": {
198
+ "description": "Setup Trello authentication"
199
+ },
200
+ "boards": {
201
+ "description": "Manage Trello boards",
202
+ "manage": "Manage Trello boards",
203
+ "list": {
204
+ "description": "List all your Trello boards"
205
+ },
206
+ "show": {
207
+ "description": "Show detailed information about a specific board"
208
+ },
209
+ "create": {
210
+ "description": "Create a new Trello board",
211
+ "descOption": "Board description"
212
+ },
213
+ "success": "📋 Boards loaded successfully!"
111
214
  },
112
215
  "createCard": {
113
216
  "description": "Create a new card in a list",
@@ -124,6 +227,40 @@
124
227
  "description": "Delete a card",
125
228
  "cardIdRequired": "❌ Card ID is required",
126
229
  "success": "✅ Card deleted successfully!"
230
+ },
231
+ "lists": {
232
+ "description": "Manage Trello lists",
233
+ "list": {
234
+ "description": "List all lists in a specific board"
235
+ },
236
+ "create": {
237
+ "description": "Create a new list in a board"
238
+ },
239
+ "delete": {
240
+ "description": "Delete a list"
241
+ },
242
+ "move": {
243
+ "description": "Move a list to a new position"
244
+ }
245
+ },
246
+ "cards": {
247
+ "description": "Manage Trello cards",
248
+ "manage": "Manage Trello cards",
249
+ "list": {
250
+ "description": "List all cards in a specific list"
251
+ },
252
+ "create": {
253
+ "description": "Create a new card in a list"
254
+ },
255
+ "move": {
256
+ "description": "Move a card to another list"
257
+ },
258
+ "update": {
259
+ "description": "Update an existing card"
260
+ },
261
+ "delete": {
262
+ "description": "Delete a card"
263
+ }
127
264
  }
128
265
  }
129
266
  }
@@ -7,7 +7,8 @@
7
7
  "exit": "Sair",
8
8
  "success": "✅ Sucesso!",
9
9
  "error": "❌ Erro!",
10
- "loading": "⏳ Carregando..."
10
+ "loading": "⏳ Carregando...",
11
+ "noData": "Nenhum dado para exibir"
11
12
  },
12
13
  "auth": {
13
14
  "notAuthenticated": "🔐 Você não está autenticado!",
@@ -32,9 +33,14 @@
32
33
  "configBack": "⬅️ Voltar",
33
34
  "currentConfig": "� Configuração atual:",
34
35
  "tokenConfigured": "Token configurado:",
36
+ "apiKey": "Chave da API:",
35
37
  "configFile": "Arquivo de config: ~/.trello-cli-unofficial/config.json",
36
38
  "confirmReset": "Tem certeza que deseja resetar toda a configuração?",
37
39
  "configResetted": "✅ Configuração resetada!",
40
+ "errors": {
41
+ "loadConfig": "Erro ao carregar configuração:",
42
+ "saveConfig": "Erro ao salvar configuração:"
43
+ },
38
44
  "selectBoard": "Selecione um board:",
39
45
  "selectList": "Selecione uma lista:",
40
46
  "selectCard": "Selecione um card:"
@@ -43,15 +49,41 @@
43
49
  "loading": "⏳ Carregando boards...",
44
50
  "empty": "📋 Nenhum board encontrado.",
45
51
  "notFound": "❌ Quadro \"{{name}}\" não encontrado",
52
+ "notFoundById": "❌ Quadro com ID '{{id}}' não encontrado",
46
53
  "lists": "📝 Listas do Board: {{name}}",
47
- "yourBoards": "📋 Seus Quadros do Trello:"
54
+ "listsTitle": "📝 Listas:",
55
+ "listsHeaders": {
56
+ "name": "Nome da Lista",
57
+ "id": "ID da Lista"
58
+ },
59
+ "listsEmpty": "📝 Nenhuma lista encontrada neste quadro",
60
+ "listId": "🆔 {{id}}",
61
+ "yourBoards": "📋 Seus Quadros do Trello:",
62
+ "created": "✅ Quadro \"{{name}}\" criado com sucesso!",
63
+ "boardName": "📋 Quadro: {{name}}",
64
+ "boardUrl": "🔗 URL: {{url}}",
65
+ "boardId": "🆔 ID: {{id}}",
66
+ "boardStats": "📊 Estatísticas: {{lists}} listas, {{cards}} cards",
67
+ "validation": {
68
+ "nameRequired": "Nome do quadro é obrigatório",
69
+ "nameTooLong": "Nome do quadro é muito longo (máximo 16384 caracteres)"
70
+ }
48
71
  },
49
72
  "list": {
50
73
  "loading": "⏳ Carregando listas...",
51
74
  "empty": "📝 Nenhuma lista encontrada neste board.",
52
75
  "notFound": "❌ Lista \"{{listName}}\" não encontrada no quadro \"{{boardName}}\"",
53
76
  "cards": "🃏 Cards da Lista: {{name}}",
54
- "boardLists": "📋 Listas do quadro \"{{boardName}}\":"
77
+ "boardLists": "📋 Listas do quadro \"{{boardName}}\":",
78
+ "cardsEmpty": "Nenhum card encontrado nesta lista",
79
+ "created": "✅ Lista \"{{name}}\" criada com sucesso!",
80
+ "deleted": "✅ Lista deletada com sucesso!",
81
+ "moved": "✅ Lista movida para a posição {{position}}!",
82
+ "notEmpty": "❌ Não é possível deletar a lista \"{{listName}}\" porque ela contém cards. Mova ou delete os cards primeiro.",
83
+ "validation": {
84
+ "nameCannotBeEmpty": "Nome da lista não pode estar vazio",
85
+ "nameTooLong": "Nome da lista não pode ter mais de 16384 caracteres"
86
+ }
55
87
  },
56
88
  "card": {
57
89
  "loading": "⏳ Carregando cards...",
@@ -66,6 +98,8 @@
66
98
  "confirmDelete": "Tem certeza que deseja deletar \"{{name}}\"?",
67
99
  "listCards": "📋 Cartões da lista \"{{listName}}\" no quadro \"{{boardName}}\":",
68
100
  "emptyList": "📭 Esta lista está vazia.",
101
+ "cardsInList": "🃏 Cartões em \"{{listName}}\":",
102
+ "cardDescription": "📝 {{description}}",
69
103
  "selectBoard": "Selecione o quadro:",
70
104
  "selectList": "Selecione a lista:",
71
105
  "selectCard": "Selecione um cartão:",
@@ -77,13 +111,19 @@
77
111
  "cardUrl": "🔗 URL: {{url}}",
78
112
  "cardId": "🆔 ID: {{id}}",
79
113
  "movedTo": "➡️ Para: {{listName}}",
114
+ "validation": {
115
+ "requiredName": "Nome é obrigatório",
116
+ "requiredCardName": "Nome do cartão é obrigatório",
117
+ "cardNameCannotBeEmpty": "Nome do cartão não pode estar vazio"
118
+ },
80
119
  "actions": {
81
120
  "view": "👁️ Ver Detalhes",
82
121
  "create": "➕ Criar Card",
83
122
  "edit": "✏️ Editar Card",
84
123
  "move": "🔄 Mover Card",
85
124
  "delete": "🗑️ Deletar Card",
86
- "back": "⬅️ Voltar"
125
+ "back": "⬅️ Voltar",
126
+ "moveCard": "📦 Mover cartão"
87
127
  }
88
128
  },
89
129
  "errors": {
@@ -91,23 +131,86 @@
91
131
  "generic": "❌ Erro:",
92
132
  "network": "❌ Erro de rede. Verifique sua conexão.",
93
133
  "invalidInput": "❌ Entrada inválida: {{field}}",
94
- "required": "❌ Campo obrigatório: {{field}}"
134
+ "required": "❌ Campo obrigatório: {{field}}",
135
+ "translationLoadError": "Erro ao carregar arquivos de tradução:",
136
+ "authFailed": "❌ Falha na autenticação: {{message}}",
137
+ "trySetup": "💡 Tente executar: trello-cli-unofficial setup",
138
+ "apiError": "❌ Erro da API ({{statusCode}}): {{message}}",
139
+ "endpoint": "📍 Endpoint: {{endpoint}}",
140
+ "validationError": "❌ Erro de validação: {{message}}",
141
+ "field": "📝 Campo: {{field}}",
142
+ "notFound": "❌ Não encontrado: {{message}}",
143
+ "resourceType": "🔍 Tipo de recurso: {{resourceType}}",
144
+ "resourceId": "🆔 ID do recurso: {{resourceId}}",
145
+ "configError": "❌ Erro de configuração: {{message}}",
146
+ "checkConfig": "💡 Verifique seu arquivo de configuração: ~/.trello-cli-unofficial/config.json",
147
+ "networkError": "❌ Erro de rede: {{message}}",
148
+ "checkConnection": "💡 Verifique sua conexão com a internet e tente novamente",
149
+ "unexpectedError": "❌ Erro inesperado: {{message}}",
150
+ "stackTrace": "Rastreamento de pilha:",
151
+ "unknownError": "❌ Erro desconhecido ocorreu:",
152
+ "unknownApiError": "Erro desconhecido da API",
153
+ "invalidToken": "Token inválido ou expirado"
154
+ },
155
+ "api": {
156
+ "trelloError": "Erro da API do Trello:",
157
+ "defaultApiKey": "630a01228b85df706aa520f3611e6490",
158
+ "networkConnectionFailed": "Falha na conexão de rede",
159
+ "unknownApiError": "Erro desconhecido da API",
160
+ "invalidToken": "Token inválido ou expirado",
161
+ "resourceNotFound": "Recurso não encontrado",
162
+ "rateLimitExceeded": "Limite de taxa excedido. Tente novamente mais tarde.",
163
+ "internalServerError": "Erro interno do servidor. Tente novamente mais tarde."
95
164
  },
96
165
  "commands": {
97
- "boards": {
98
- "description": "Lista todos os boards disponíveis",
99
- "success": "📋 Boards carregados com sucesso!"
166
+ "description": "CLI não oficial do Trello usando autenticação Power-Up",
167
+ "formatOption": "Formato de saída: table, json, csv",
168
+ "deprecated": {
169
+ "boardsLegacyDescription": "[DEPRECIADO] Use \"boards list\" ao invés disso",
170
+ "boardsLegacyWarning": "⚠️ Aviso: comando \"boards\" está depreciado. Use \"boards list\" ao invés disso.",
171
+ "boardsLegacyError": "❌ Erro:",
172
+ "listsLegacyDescription": "[DEPRECIADO] Use \"lists list <boardId>\" ao invés disso",
173
+ "listsLegacyWarning": "⚠️ Aviso: comando \"lists <boardName>\" está depreciado. Use \"lists list <boardId>\" ao invés disso.",
174
+ "listsLegacyError": "❌ Erro:",
175
+ "cardsLegacyDescription": "[DEPRECIADO] Use \"cards list <listId>\" ao invés disso",
176
+ "cardsLegacyWarning": "⚠️ Aviso: comando \"cards <boardName> <listName>\" está depreciado. Use \"cards list <listId>\" ao invés disso.",
177
+ "cardsLegacyError": "❌ Erro:",
178
+ "createCardLegacyDescription": "[DEPRECIADO] Use \"cards create <listId> <name>\" ao invés disso",
179
+ "createCardLegacyWarning": "⚠️ Aviso: comando \"create-card\" está depreciado. Use \"cards create <listId> <name>\" ao invés disso.",
180
+ "moveCardLegacyDescription": "[DEPRECIADO] Use \"cards move <cardId> --to <listId>\" ao invés disso",
181
+ "moveCardLegacyWarning": "⚠️ Aviso: comando \"move-card\" está depreciado. Use \"cards move <cardId> --to <listId>\" ao invés disso.",
182
+ "deleteCardLegacyDescription": "[DEPRECIADO] Use \"cards delete <cardId>\" ao invés disso",
183
+ "deleteCardLegacyWarning": "⚠️ Aviso: comando \"delete-card\" está depreciado. Use \"cards delete <cardId>\" ao invés disso."
100
184
  },
101
- "lists": {
102
- "description": "Lista as listas de um board específico",
103
- "boardRequired": "❌ Nome do board é obrigatório",
104
- "success": "📝 Listas carregadas com sucesso!"
185
+ "commandErrors": {
186
+ "genericError": " Erro:"
105
187
  },
106
- "cards": {
107
- "description": "Lista os cards de uma lista específica",
108
- "boardRequired": " Nome do board é obrigatório",
109
- "listRequired": " Nome da lista é obrigatório",
110
- "success": "🃏 Cards carregados com sucesso!"
188
+ "options": {
189
+ "cardDescription": "Descrição do card",
190
+ "targetListId": "ID da lista de destino",
191
+ "newCardName": "Novo nome do card",
192
+ "newCardDescription": "Nova descrição do card"
193
+ },
194
+ "interactive": {
195
+ "description": "Inicia o modo interativo"
196
+ },
197
+ "setup": {
198
+ "description": "Configura a autenticação do Trello"
199
+ },
200
+ "boards": {
201
+ "description": "Gerencia os boards do Trello",
202
+ "manage": "Gerencia os boards do Trello",
203
+ "list": {
204
+ "description": "Lista todos os seus boards do Trello"
205
+ },
206
+ "show": {
207
+ "description": "Mostra informações detalhadas sobre um board específico"
208
+ },
209
+ "create": {
210
+ "description": "Cria um novo board do Trello",
211
+ "descOption": "Descrição do board"
212
+ },
213
+ "success": "📋 Boards carregados com sucesso!"
111
214
  },
112
215
  "createCard": {
113
216
  "description": "Cria um novo card em uma lista",
@@ -124,6 +227,40 @@
124
227
  "description": "Deleta um card",
125
228
  "cardIdRequired": "❌ ID do card é obrigatório",
126
229
  "success": "✅ Card deletado com sucesso!"
230
+ },
231
+ "lists": {
232
+ "description": "Gerencia as listas do Trello",
233
+ "list": {
234
+ "description": "Lista todas as listas em um board específico"
235
+ },
236
+ "create": {
237
+ "description": "Cria uma nova lista em um board"
238
+ },
239
+ "delete": {
240
+ "description": "Deleta uma lista"
241
+ },
242
+ "move": {
243
+ "description": "Move uma lista para uma nova posição"
244
+ }
245
+ },
246
+ "cards": {
247
+ "description": "Gerencia os cards do Trello",
248
+ "manage": "Gerencia os cards do Trello",
249
+ "list": {
250
+ "description": "Lista todos os cards em uma lista específica"
251
+ },
252
+ "create": {
253
+ "description": "Cria um novo card em uma lista"
254
+ },
255
+ "move": {
256
+ "description": "Move um card para outra lista"
257
+ },
258
+ "update": {
259
+ "description": "Atualiza um card existente"
260
+ },
261
+ "delete": {
262
+ "description": "Deleta um card"
263
+ }
127
264
  }
128
265
  }
129
266
  }
@@ -2,6 +2,7 @@ import type { ConfigRepository } from '@domain/repositories';
2
2
  import path from 'node:path';
3
3
  import { ConfigEntity } from '@domain/entities';
4
4
  import fs from 'fs-extra';
5
+ import { t } from '@/i18n';
5
6
 
6
7
  export class FileConfigRepository implements ConfigRepository {
7
8
  private readonly configDir: string;
@@ -20,12 +21,14 @@ export class FileConfigRepository implements ConfigRepository {
20
21
  if (await fs.pathExists(this.configFile)) {
21
22
  const data = await fs.readJson(this.configFile);
22
23
  return new ConfigEntity(
23
- data.apiKey || '630a01228b85df706aa520f3611e6490',
24
+ data.apiKey
25
+ || process.env.TRELLO_API_KEY
26
+ || '630a01228b85df706aa520f3611e6490',
24
27
  data.token || process.env.TRELLO_TOKEN,
25
28
  );
26
29
  }
27
30
  } catch (error) {
28
- console.error('Error loading config:', (error as Error).message);
31
+ console.error(t('menu.errors.loadConfig'), (error as Error).message);
29
32
  }
30
33
 
31
34
  return ConfigEntity.createDefault();
@@ -43,7 +46,7 @@ export class FileConfigRepository implements ConfigRepository {
43
46
  { spaces: 2 },
44
47
  );
45
48
  } catch (error) {
46
- console.error('Error saving config:', (error as Error).message);
49
+ console.error(t('menu.errors.saveConfig'), (error as Error).message);
47
50
  }
48
51
  }
49
52
  }