@danhachuel/thunderbolt 0.4.99 → 0.5.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/app/main.py CHANGED
@@ -8007,6 +8007,22 @@ def render_supabase_tutorial():
8007
8007
  st.markdown(tutorial_content, unsafe_allow_html=True)
8008
8008
 
8009
8009
 
8010
+ def render_canvas_api_tutorial():
8011
+ """Render the Canva Connect API setup guide supplied for Thunderbolt."""
8012
+ tutorial_path = ROOT / "seed" / "references" / "tutorial-api-canvas.md"
8013
+ st.title("Tutorial API Canvas")
8014
+ st.caption("Guia para configurar as credenciais Canva Connect API usadas pelo Thunderbolt.")
8015
+ st.markdown("[Abrir documentação oficial da Canva](https://www.canva.dev/docs/connect/)")
8016
+ try:
8017
+ tutorial_content = tutorial_path.read_text(encoding="utf-8").strip()
8018
+ except OSError:
8019
+ tutorial_content = ""
8020
+ if not tutorial_content:
8021
+ st.error("O conteúdo local do tutorial não está disponível. Consulte a documentação oficial da Canva.")
8022
+ return
8023
+ st.markdown(tutorial_content, unsafe_allow_html=False)
8024
+
8025
+
8010
8026
  def render_google_oauth_tutorial():
8011
8027
  """Render the Google OAuth setup guide supplied for Thunderbolt."""
8012
8028
  tutorial_path = ROOT / "seed" / "references" / "tutorial-oauth-google.md"
@@ -8437,6 +8453,7 @@ def main():
8437
8453
  documentation_items = [
8438
8454
  ("Tutorial Meta", ":material/menu_book:", "Tutorial Meta"),
8439
8455
  ("Tutorial Supabase", ":material/storage:", "Tutorial Supabase"),
8456
+ ("Tutorial API Canvas", ":material/design_services:", "Tutorial API Canvas"),
8440
8457
  ("Tutorial Kaggle", ":material/menu_book:", "Tutorial Kaggle"),
8441
8458
  ("Tutorial Apify", ":material/menu_book:", "Tutorial Apify"),
8442
8459
  ("Tutorial YouTube Video-Upload Frontend", ":material/video_library:", "Tutorial YouTube Video-Upload Frontend"),
@@ -8616,6 +8633,7 @@ def main():
8616
8633
  "Documentação": lambda: render_edit_placeholder("Documentação", "Seleccione um tutorial no menu expansível."),
8617
8634
  "Tutorial Meta": render_models_ai_tutorial,
8618
8635
  "Tutorial Supabase": render_supabase_tutorial,
8636
+ "Tutorial API Canvas": render_canvas_api_tutorial,
8619
8637
  "Tutorial YouTube Video-Upload Frontend": render_youtube_frontend_upload_tutorial,
8620
8638
  "Tutorial OAuth do Google": render_google_oauth_tutorial,
8621
8639
  "Configurações": lambda: render_edit_placeholder("Configurações", "Seleccione uma opção no menu expansível."),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@danhachuel/thunderbolt",
3
- "version": "0.4.99",
3
+ "version": "0.5.0",
4
4
  "description": "Thunderbolt — interface local para operação de canais faceless e motor MoneyPrinterTurbo",
5
5
  "license": "MIT",
6
6
  "main": "scripts/cli.mjs",
@@ -0,0 +1,112 @@
1
+ # Guia de Configuração: API Keys da Canva para o Thunderbolt
2
+
3
+ Este guia explica como criar e configurar uma integração no **Canva Developer Portal** para obter as credenciais (`Client ID` e `Client Secret`) usadas pelo módulo de geração de thumbnails do Thunderbolt.
4
+
5
+ ## Pré-requisitos
6
+
7
+ É necessária uma conta Canva activa, gratuita ou paga, com **autenticação de dois factores (MFA)** activada. Sem MFA, o Developer Portal não permite criar a integração.
8
+
9
+ ## 1. Aceder ao Developer Portal
10
+
11
+ 1. Abra o [Canva Developer Portal](https://www.canva.com/developers/) e inicie sessão.
12
+ 2. No menu superior, abra **Your integrations** ou aceda directamente a [https://www.canva.com/developers/integrations](https://www.canva.com/developers/integrations).
13
+
14
+ ## 2. Criar uma integração
15
+
16
+ 1. Clique em **Create an integration**.
17
+ 2. Escolha **Public** ou **Private**. A opção Public requer revisão da Canva; a opção Private está disponível apenas para equipas Canva Enterprise. Para testes, use Private quando tiver acesso ao Canva Enterprise; caso contrário, use uma integração Public em modo de desenvolvimento.
18
+ 3. Aceite os **Canva Developer Terms** e clique em **Create integration**.
19
+
20
+ ## 3. Obter o Client ID e o Client Secret
21
+
22
+ Na configuração da integração, defina um nome como `Thunderbolt Thumbnail Generator`, copie o **Client ID** e clique em **Generate secret** para criar o **Client Secret**. Guarde o secret imediatamente num local seguro, pois a Canva não o volta a apresentar.
23
+
24
+ > Nunca publique estas credenciais, nem as inclua em commits, screenshots ou mensagens. Se forem expostas, revogue-as e gere um novo secret.
25
+
26
+ ## 4. Configurar os scopes
27
+
28
+ No menu **Scopes**, active apenas as permissões necessárias:
29
+
30
+ | Scope | Acesso | Finalidade |
31
+ | --- | --- | --- |
32
+ | `design:content` | Read and Write | Criar, editar e exportar designs |
33
+ | `design:meta` | Read | Ler metadados dos designs |
34
+ | `asset:content` | Read and Write | Gerir imagens, fontes e outros assets |
35
+ | `profile` | Read | Ler informações básicas do perfil |
36
+
37
+ Para Brand Templates com Autofill, pode activar opcionalmente `brandtemplate:meta` (Read) e `brandtemplate:content` (Read). Integrações públicas devem justificar cada scope durante a revisão.
38
+
39
+ ## 5. Configurar as URLs de redireccionamento
40
+
41
+ A Canva Connect API usa OAuth 2.0 com PKCE. Em **Authentication > Authorized redirects**, adicione exactamente:
42
+
43
+ ```text
44
+ http://127.0.0.1:3001/oauth/redirect
45
+ ```
46
+
47
+ Para activar o retorno de navegação, habilite **Enable return navigation** e use:
48
+
49
+ ```text
50
+ http://127.0.0.1:3001/return-nav
51
+ ```
52
+
53
+ É possível adicionar até dez URLs. O protocolo, host, porta e caminho devem coincidir exactamente com os valores usados pelo Thunderbolt.
54
+
55
+ ## 6. Configurar as credenciais no Thunderbolt
56
+
57
+ Na raiz do projecto, localize ou crie o ficheiro `.env` e adicione:
58
+
59
+ ```dotenv
60
+ CANVA_CLIENT_ID=seu_client_id_aqui
61
+ CANVA_CLIENT_SECRET=seu_client_secret_aqui
62
+ ```
63
+
64
+ O `.env` já deve estar protegido pelo `.gitignore`. Não faça commit deste ficheiro.
65
+
66
+ ## 7. Configurar um template de thumbnails (opcional)
67
+
68
+ Se utilizar a skill `bulk-create` com templates predefinidos, adicione também:
69
+
70
+ ```dotenv
71
+ CANVA_THUMBNAIL_TEMPLATE_ID=id_do_template_canva
72
+ ```
73
+
74
+ O ID pode ser obtido na URL do design no Canva ou através de `GET /v1/brand-templates`.
75
+
76
+ ## 8. Testar a integração
77
+
78
+ 1. Inicie o Thunderbolt.
79
+ 2. Abra **Canva Skills** no Streamlit.
80
+ 3. Seleccione uma skill, como **Resize for Social Media**.
81
+ 4. Introduza um `design_id` válido e execute a operação.
82
+ 5. Autorize o Thunderbolt quando o fluxo OAuth 2.0 com PKCE o redireccionar para a Canva.
83
+
84
+ Após a autorização, o Thunderbolt recebe e armazena o token necessário para executar as operações.
85
+
86
+ ## Dados necessários
87
+
88
+ | Variável | Onde encontrar | Exemplo |
89
+ | --- | --- | --- |
90
+ | `CANVA_CLIENT_ID` | Developer Portal → integração → Credentials | `1234567890abcdef` |
91
+ | `CANVA_CLIENT_SECRET` | Gerado no Developer Portal; guardar imediatamente | `ghi_jklmnopqrstuvwxyz123456` |
92
+ | `CANVA_THUMBNAIL_TEMPLATE_ID` | URL do template ou `GET /v1/brand-templates` | `DAF1234567890` |
93
+
94
+ ## Diagnóstico rápido
95
+
96
+ | Problema | Solução |
97
+ | --- | --- |
98
+ | **MFA required** | Active a autenticação de dois factores nas definições da conta Canva. |
99
+ | Erro 401 ou token expirado | Verifique o armazenamento do `refresh_token`; o Thunderbolt implementa refresh automático. |
100
+ | Erro 429 | Aguarde e tente novamente; a API aplica limites de frequência. |
101
+ | Design não encontrado | Confirme o `design_id`; designs criados via API e não editados durante sete dias podem ser eliminados permanentemente. |
102
+ | URL de redireccionamento inválida | Compare a URL do Developer Portal com a usada pelo Thunderbolt, incluindo protocolo e porta. |
103
+
104
+ ## Referências
105
+
106
+ - [Canva Developer Portal](https://www.canva.com/developers/)
107
+ - [Criar integrações](https://www.canva.dev/docs/connect/creating-integrations/)
108
+ - [Autenticação OAuth 2.0 com PKCE](https://www.canva.dev/docs/connect/authentication/)
109
+ - [Scopes disponíveis](https://www.canva.dev/docs/connect/appendix/scopes/)
110
+ - [Canva Connect API Starter Kit](https://github.com/canva-sdks/canva-connect-api-starter-kit)
111
+
112
+ Depois de configurar as credenciais, é possível testar a geração de thumbnails na interface Streamlit, integrar a operação ao callback `on_video_completed` e ajustar as dimensões das plataformas em `app/modules/canva_skills/resize.py`.