funifier-mcp 0.2.0 → 0.2.3

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 (64) hide show
  1. package/.cursor/rules/funifier.mdc +91 -0
  2. package/.github/copilot-instructions.md +83 -0
  3. package/AGENTS.md +97 -0
  4. package/README.md +247 -78
  5. package/datasource-funifier-docs/knowledge/guides/aggregates.md +152 -152
  6. package/datasource-funifier-docs/knowledge/guides/database-access.md +132 -132
  7. package/datasource-funifier-docs/knowledge/guides/java-entities.md +373 -373
  8. package/datasource-funifier-docs/knowledge/guides/java-libraries.md +330 -330
  9. package/datasource-funifier-docs/knowledge/guides/java-managers.md +509 -509
  10. package/datasource-funifier-docs/knowledge/guides/triggers-guide.md +271 -271
  11. package/datasource-funifier-docs/knowledge/index.md +121 -121
  12. package/datasource-funifier-docs/knowledge/modules/achievement.md +46 -46
  13. package/datasource-funifier-docs/knowledge/modules/action-log.md +88 -88
  14. package/datasource-funifier-docs/knowledge/modules/action.md +80 -80
  15. package/datasource-funifier-docs/knowledge/modules/auth.md +104 -104
  16. package/datasource-funifier-docs/knowledge/modules/avatar.md +28 -28
  17. package/datasource-funifier-docs/knowledge/modules/backup.md +40 -40
  18. package/datasource-funifier-docs/knowledge/modules/challenge.md +91 -91
  19. package/datasource-funifier-docs/knowledge/modules/compact.md +40 -40
  20. package/datasource-funifier-docs/knowledge/modules/competition.md +149 -149
  21. package/datasource-funifier-docs/knowledge/modules/crossword.md +41 -41
  22. package/datasource-funifier-docs/knowledge/modules/csv-data.md +30 -30
  23. package/datasource-funifier-docs/knowledge/modules/custom-object.md +53 -53
  24. package/datasource-funifier-docs/knowledge/modules/database.md +241 -241
  25. package/datasource-funifier-docs/knowledge/modules/folder.md +111 -111
  26. package/datasource-funifier-docs/knowledge/modules/kpi-formulas.md +23 -23
  27. package/datasource-funifier-docs/knowledge/modules/lastmile.md +45 -45
  28. package/datasource-funifier-docs/knowledge/modules/leaderboard.md +98 -98
  29. package/datasource-funifier-docs/knowledge/modules/level.md +83 -83
  30. package/datasource-funifier-docs/knowledge/modules/lottery.md +112 -112
  31. package/datasource-funifier-docs/knowledge/modules/marketplace.md +27 -27
  32. package/datasource-funifier-docs/knowledge/modules/mystery.md +82 -82
  33. package/datasource-funifier-docs/knowledge/modules/notification.md +40 -40
  34. package/datasource-funifier-docs/knowledge/modules/patterns.md +1096 -1096
  35. package/datasource-funifier-docs/knowledge/modules/player.md +101 -101
  36. package/datasource-funifier-docs/knowledge/modules/point.md +67 -67
  37. package/datasource-funifier-docs/knowledge/modules/public.md +253 -253
  38. package/datasource-funifier-docs/knowledge/modules/question.md +136 -136
  39. package/datasource-funifier-docs/knowledge/modules/quiz.md +163 -163
  40. package/datasource-funifier-docs/knowledge/modules/scheduler.md +58 -58
  41. package/datasource-funifier-docs/knowledge/modules/security.md +169 -169
  42. package/datasource-funifier-docs/knowledge/modules/staging.md +28 -28
  43. package/datasource-funifier-docs/knowledge/modules/static-repo.md +41 -41
  44. package/datasource-funifier-docs/knowledge/modules/story.md +42 -42
  45. package/datasource-funifier-docs/knowledge/modules/studio-page.md +180 -180
  46. package/datasource-funifier-docs/knowledge/modules/swap.md +132 -132
  47. package/datasource-funifier-docs/knowledge/modules/team.md +75 -75
  48. package/datasource-funifier-docs/knowledge/modules/trigger.md +189 -189
  49. package/datasource-funifier-docs/knowledge/modules/upload.md +155 -155
  50. package/datasource-funifier-docs/knowledge/modules/virtual-good.md +99 -99
  51. package/datasource-funifier-docs/knowledge/modules/webhook.md +41 -41
  52. package/datasource-funifier-docs/knowledge/modules/websocket.md +41 -41
  53. package/datasource-funifier-docs/knowledge/modules/widget.md +42 -42
  54. package/datasource-funifier-docs/process-gtm-saas.md +143 -143
  55. package/datasource-funifier-docs/process-instagram.md +88 -88
  56. package/datasource-funifier-docs/process.md +1826 -1826
  57. package/datasource-funifier-docs/readme.md +132 -132
  58. package/dist/cli/config-writers.js +11 -11
  59. package/dist/mcp/bundle.js +55 -52
  60. package/package.json +70 -67
  61. package/skills/funifier-create-aggregate/SKILL.md +126 -126
  62. package/skills/funifier-create-custom-page/SKILL.md +126 -126
  63. package/skills/funifier-create-scheduler/SKILL.md +126 -126
  64. package/skills/funifier-create-trigger/SKILL.md +127 -127
@@ -1,58 +1,58 @@
1
- # Scheduler (Scheduler)
2
-
3
- **Acesso Studio:** `/studio/scheduler`
4
- **API Endpoint:** `/v3/scheduler`
5
-
6
- ## O que é
7
-
8
- Execução de códigos JAVA em datas e horários agendados (expressões CRON). Permite agendar tarefas e automações para rodar em horários ou intervalos pré-definidos.
9
-
10
- ## Quando usar
11
-
12
- - Para gerar relatórios automatizados (ex: toda sexta às 10h)
13
- - Para debitar pontos de jogadores inativos
14
- - Para enviar lembretes automáticos de metas
15
- - Para campanhas temporais com início/fim automático
16
-
17
- ## Script Runtime Environment (Wrapper Class)
18
-
19
- O script do scheduler **não é standalone** — ele é inserido dentro de uma classe Java wrapper gerada pelo Funifier, idêntica à do Public Endpoint (ver `public.md` para a lista completa de imports).
20
-
21
- ### Regras
22
-
23
- 1. **NÃO use `import`** — todos os imports já estão no wrapper (Unirest, Groovy JSON, Funifier entities/utils, Apache HTTP, Simple Java Mail, etc.)
24
- 2. Se precisar de uma classe não importada, use o nome completo: `com.example.MinhaClasse`
25
- 3. **`manager`** (ManagerFactory) está disponível como campo da classe
26
- 4. **Método principal:** `void execute()` (sem parâmetros)
27
- 5. **Timeout padrão de 10 segundos** — pode ser customizado via campo `timeout` (em **segundos**) na API: `POST /v3/scheduler` com `{"_id": "scheduler_id", "timeout": 30}`. Este campo não aparece no Studio.
28
- 6. Scripts rodam em **Groovy** — cuidado com `$` em GStrings
29
- 7. Use apenas **ASCII em comentários**
30
-
31
- > 📖 Ver `public.md` → **Script Runtime Environment** para a lista completa de imports e bibliotecas disponíveis.
32
-
33
- ## Checklist de Configuração no Studio
34
-
35
- - [ ] Definir nome e descrição do scheduler
36
- - [ ] Definir expressão CRON
37
- - [ ] Escrever script Java
38
- - [ ] Testar em ambiente de homologação
39
-
40
- ## API Endpoints
41
-
42
- ### Listar Schedulers
43
- **Método:** GET
44
- **Endpoint:** `/v3/scheduler`
45
-
46
- ### Criar Scheduler
47
- **Método:** POST
48
- **Endpoint:** `/v3/scheduler`
49
-
50
- ### Deletar Scheduler
51
- **Método:** DELETE
52
- **Endpoint:** `/v3/scheduler/:id`
53
-
54
- ## Validações e Testes
55
-
56
- - [ ] Scheduler aparece na lista
57
- - [ ] Expressão CRON é válida
58
- - [ ] Script executa no horário configurado
1
+ # Scheduler (Scheduler)
2
+
3
+ **Acesso Studio:** `/studio/scheduler`
4
+ **API Endpoint:** `/v3/scheduler`
5
+
6
+ ## O que é
7
+
8
+ Execução de códigos JAVA em datas e horários agendados (expressões CRON). Permite agendar tarefas e automações para rodar em horários ou intervalos pré-definidos.
9
+
10
+ ## Quando usar
11
+
12
+ - Para gerar relatórios automatizados (ex: toda sexta às 10h)
13
+ - Para debitar pontos de jogadores inativos
14
+ - Para enviar lembretes automáticos de metas
15
+ - Para campanhas temporais com início/fim automático
16
+
17
+ ## Script Runtime Environment (Wrapper Class)
18
+
19
+ O script do scheduler **não é standalone** — ele é inserido dentro de uma classe Java wrapper gerada pelo Funifier, idêntica à do Public Endpoint (ver `public.md` para a lista completa de imports).
20
+
21
+ ### Regras
22
+
23
+ 1. **NÃO use `import`** — todos os imports já estão no wrapper (Unirest, Groovy JSON, Funifier entities/utils, Apache HTTP, Simple Java Mail, etc.)
24
+ 2. Se precisar de uma classe não importada, use o nome completo: `com.example.MinhaClasse`
25
+ 3. **`manager`** (ManagerFactory) está disponível como campo da classe
26
+ 4. **Método principal:** `void execute()` (sem parâmetros)
27
+ 5. **Timeout padrão de 10 segundos** — pode ser customizado via campo `timeout` (em **segundos**) na API: `POST /v3/scheduler` com `{"_id": "scheduler_id", "timeout": 30}`. Este campo não aparece no Studio.
28
+ 6. Scripts rodam em **Groovy** — cuidado com `$` em GStrings
29
+ 7. Use apenas **ASCII em comentários**
30
+
31
+ > 📖 Ver `public.md` → **Script Runtime Environment** para a lista completa de imports e bibliotecas disponíveis.
32
+
33
+ ## Checklist de Configuração no Studio
34
+
35
+ - [ ] Definir nome e descrição do scheduler
36
+ - [ ] Definir expressão CRON
37
+ - [ ] Escrever script Java
38
+ - [ ] Testar em ambiente de homologação
39
+
40
+ ## API Endpoints
41
+
42
+ ### Listar Schedulers
43
+ **Método:** GET
44
+ **Endpoint:** `/v3/scheduler`
45
+
46
+ ### Criar Scheduler
47
+ **Método:** POST
48
+ **Endpoint:** `/v3/scheduler`
49
+
50
+ ### Deletar Scheduler
51
+ **Método:** DELETE
52
+ **Endpoint:** `/v3/scheduler/:id`
53
+
54
+ ## Validações e Testes
55
+
56
+ - [ ] Scheduler aparece na lista
57
+ - [ ] Expressão CRON é válida
58
+ - [ ] Script executa no horário configurado
@@ -1,169 +1,169 @@
1
- # Security (Segurança)
2
-
3
- **Acesso Studio:** Gamification Settings → "Mais" → Security → "Change your gamification security settings"
4
- **Armazenamento:** Coleção `security`, documento com `_id` = API Key da gamificação
5
-
6
- ## Estrutura do Documento
7
-
8
- ```json
9
- {
10
- "_id": "API_KEY_DA_GAMIFICACAO",
11
- "roles": [
12
- { "name": "public", "scope": "read_all", "timeout": "" },
13
- { "name": "player", "scope": "read_all, write_all, delete_all, database", "timeout": "" }
14
- ],
15
- "apps": [
16
- { "name": "Nome do App", "app_secret": "GUID_GERADO", "scope": "read_all, write_all, delete_all, database" }
17
- ]
18
- }
19
- ```
20
-
21
- ## Roles
22
-
23
- Definem o nível de acesso dos tokens Bearer (jogadores logados) e Basic (acesso público).
24
-
25
- ### Campos
26
- - `name` — Identificador da role (ex: `public`, `player`, `admin`)
27
- - `scope` — Permissões separadas por vírgula
28
- - `timeout` — Tempo de expiração do token (ex: `7d`, `1h`). **⚠️ NÃO usar string vazia `""`** — causa NPE no auth. Omitir o campo ou usar `null` para timeout padrão (7 dias).
29
-
30
- ### Scopes Disponíveis
31
- | Scope | Descrição |
32
- |-------|-----------|
33
- | `read_all` | Leitura em todas as coleções |
34
- | `write_all` | Escrita em todas as coleções |
35
- | `delete_all` | Exclusão em todas as coleções |
36
- | `database` | **Obrigatório** para acessar `/v3/database`. Sem ele, POST retorna 201 mas não persiste |
37
-
38
- ### Roles Comuns
39
- - **`public`** — `read_all, write_database_signup__c` — Para acesso não autenticado (signup, landing page). Usa token Basic. Precisa de `write_database_signup__c` para o signup pattern funcionar.
40
- - **`player`** — `read_all, write_all, delete_all, database` — Para usuários logados. Usa token Bearer.
41
-
42
- ### ⚠️ Lição Crítica
43
- A palavra **`database`** deve estar literalmente no scope para que `/v3/database` funcione. Mesmo com `write_all` e `read_all`, sem `database` as operações falham silenciosamente.
44
-
45
- ## Apps
46
-
47
- Apps geram tokens Basic não-expirantes para uso em triggers, endpoints públicos e integrações server-side.
48
-
49
- ### Campos
50
- - `name` — Nome descritivo do app
51
- - `app_secret` — GUID gerado pelo Funifier (via `/v3/util/guid/new`)
52
- - `scope` — Permissões (mesmo formato das roles)
53
-
54
- ### Token Basic do App
55
- ```
56
- Basic base64(API_KEY + ":" + APP_SECRET)
57
- ```
58
-
59
- Exemplo:
60
- ```javascript
61
- var basicToken = 'Basic ' + btoa('69ab1a9a607db81962b92cd2:69ab3566607db81962b9686e');
62
- ```
63
-
64
- ## Como Criar via API (sem Studio UI)
65
-
66
- ### 1. Obter token de autenticação do Studio
67
- O Studio armazena o token em `localStorage` com a chave `marketplace_authorization`:
68
- ```javascript
69
- var auth = localStorage.getItem('marketplace_authorization');
70
- // Retorna: "Bearer eyJ..."
71
- ```
72
-
73
- ### 2. Gerar GUID para App Secret
74
- ```
75
- GET https://service2.funifier.com/v3/util/guid/new
76
- Authorization: Bearer <studio_token>
77
- ```
78
- Retorna: `{ "guid": "69ab3566607db81962b9686e" }`
79
-
80
- ### 3. Criar/Atualizar Security Document
81
- ```
82
- PUT https://service2.funifier.com/v3/database/security
83
- Authorization: Bearer <studio_token>
84
- Content-Type: application/json
85
-
86
- {
87
- "_id": "API_KEY",
88
- "roles": [...],
89
- "apps": [...]
90
- }
91
- ```
92
-
93
- **⚠️ PUT é upsert** — substitui o documento inteiro. Sempre incluir roles E apps existentes.
94
-
95
- ### 4. Verificar
96
- ```
97
- GET https://service2.funifier.com/v3/database/security/API_KEY?strict=true
98
- Authorization: Bearer <studio_token>
99
- ```
100
-
101
- ## Navegação no Studio (Browser Automation)
102
-
103
- 1. Abrir `https://my.funifier.com`
104
- 2. Selecionar a gamificação desejada (botão "Select")
105
- 3. Se gamificação nova, clicar "Começar do Zero" para inicializar
106
- 4. Clicar no nome da gamificação na sidebar (link para `/studio/gamification/me`)
107
- 5. Expandir seção "Mais"
108
- 6. Clicar "Change your gamification security settings"
109
- 7. Na página Security: botão "Apps" expande a seção de Apps, botão "Roles" expande Roles
110
-
111
- **⚠️ SPA Redirect:** Se a gamificação não foi inicializada (wizard "Escolha o melhor caminho"), qualquer navegação para `/studio/security` redireciona para o wizard. Primeiro clicar "Começar do Zero".
112
-
113
- ## Token Basic da Gamificação (público)
114
- Para acesso público sem App (signup, leitura):
115
- ```
116
- Basic base64(API_KEY + ":")
117
- ```
118
- Nota: dois-pontos no final, sem app_secret. Usa a role `public` se existir.
119
-
120
- ## Auth Token (`/v3/auth/token`)
121
-
122
- ### Request (JSON body)
123
- ```json
124
- {
125
- "grant_type": "password",
126
- "apiKey": "API_KEY",
127
- "username": "player_email",
128
- "password": "plain_text_password"
129
- }
130
- ```
131
-
132
- **⚠️ Campos obrigatórios:**
133
- - `grant_type` — DEVE ser `"password"` (sem isso, retorna `invalid_grant`)
134
- - `username` — NÃO `login` (campo frontend pode usar `login` mas API espera `username`)
135
- - A senha do Player no banco DEVE ser BCrypt hash (`$2a$...`). Senha em texto plano causa `"Invalid salt version"`
136
-
137
- ### Response
138
- ```json
139
- {
140
- "access_token": "eyJ...",
141
- "token_type": "Bearer",
142
- "expires_in": "1772..."
143
- }
144
- ```
145
-
146
- ### Campos da Security que afetam auth
147
- | Campo | Tipo | Descrição |
148
- |-------|------|-----------|
149
- | `requirePassword` | boolean | Se `true`, valida senha BCrypt. **NÃO** é `passwordRequired` |
150
- | `createPlayerIfDontExist` | boolean | Se `true`, cria player automaticamente no login. **NÃO** é `autoCreatePlayer` |
151
-
152
- ### ⚠️ Role timeout NUNCA string vazia
153
- ```json
154
- // ❌ ERRADO — causa NPE no auth (DateUtil.fromKeyword("+") falha)
155
- { "name": "player", "scope": "...", "timeout": "" }
156
-
157
- // ✅ CORRETO — omitir campo para timeout padrão (7 dias)
158
- { "name": "player", "scope": "..." }
159
-
160
- // ✅ CORRETO — valor explícito
161
- { "name": "player", "scope": "...", "timeout": "7d" }
162
- ```
163
-
164
- ## Validações e Testes
165
- - [ ] Role `public` criada com scope `read_all`
166
- - [ ] Role `player` criada com scope incluindo `database`
167
- - [ ] App criada com secret gerado
168
- - [ ] Token Basic do App acessa `/v3/database/collections`
169
- - [ ] Token Basic público (sem app) acessa endpoints de leitura
1
+ # Security (Segurança)
2
+
3
+ **Acesso Studio:** Gamification Settings → "Mais" → Security → "Change your gamification security settings"
4
+ **Armazenamento:** Coleção `security`, documento com `_id` = API Key da gamificação
5
+
6
+ ## Estrutura do Documento
7
+
8
+ ```json
9
+ {
10
+ "_id": "API_KEY_DA_GAMIFICACAO",
11
+ "roles": [
12
+ { "name": "public", "scope": "read_all", "timeout": "" },
13
+ { "name": "player", "scope": "read_all, write_all, delete_all, database", "timeout": "" }
14
+ ],
15
+ "apps": [
16
+ { "name": "Nome do App", "app_secret": "GUID_GERADO", "scope": "read_all, write_all, delete_all, database" }
17
+ ]
18
+ }
19
+ ```
20
+
21
+ ## Roles
22
+
23
+ Definem o nível de acesso dos tokens Bearer (jogadores logados) e Basic (acesso público).
24
+
25
+ ### Campos
26
+ - `name` — Identificador da role (ex: `public`, `player`, `admin`)
27
+ - `scope` — Permissões separadas por vírgula
28
+ - `timeout` — Tempo de expiração do token (ex: `7d`, `1h`). **⚠️ NÃO usar string vazia `""`** — causa NPE no auth. Omitir o campo ou usar `null` para timeout padrão (7 dias).
29
+
30
+ ### Scopes Disponíveis
31
+ | Scope | Descrição |
32
+ |-------|-----------|
33
+ | `read_all` | Leitura em todas as coleções |
34
+ | `write_all` | Escrita em todas as coleções |
35
+ | `delete_all` | Exclusão em todas as coleções |
36
+ | `database` | **Obrigatório** para acessar `/v3/database`. Sem ele, POST retorna 201 mas não persiste |
37
+
38
+ ### Roles Comuns
39
+ - **`public`** — `read_all, write_database_signup__c` — Para acesso não autenticado (signup, landing page). Usa token Basic. Precisa de `write_database_signup__c` para o signup pattern funcionar.
40
+ - **`player`** — `read_all, write_all, delete_all, database` — Para usuários logados. Usa token Bearer.
41
+
42
+ ### ⚠️ Lição Crítica
43
+ A palavra **`database`** deve estar literalmente no scope para que `/v3/database` funcione. Mesmo com `write_all` e `read_all`, sem `database` as operações falham silenciosamente.
44
+
45
+ ## Apps
46
+
47
+ Apps geram tokens Basic não-expirantes para uso em triggers, endpoints públicos e integrações server-side.
48
+
49
+ ### Campos
50
+ - `name` — Nome descritivo do app
51
+ - `app_secret` — GUID gerado pelo Funifier (via `/v3/util/guid/new`)
52
+ - `scope` — Permissões (mesmo formato das roles)
53
+
54
+ ### Token Basic do App
55
+ ```
56
+ Basic base64(API_KEY + ":" + APP_SECRET)
57
+ ```
58
+
59
+ Exemplo:
60
+ ```javascript
61
+ var basicToken = 'Basic ' + btoa('69ab1a9a607db81962b92cd2:69ab3566607db81962b9686e');
62
+ ```
63
+
64
+ ## Como Criar via API (sem Studio UI)
65
+
66
+ ### 1. Obter token de autenticação do Studio
67
+ O Studio armazena o token em `localStorage` com a chave `marketplace_authorization`:
68
+ ```javascript
69
+ var auth = localStorage.getItem('marketplace_authorization');
70
+ // Retorna: "Bearer eyJ..."
71
+ ```
72
+
73
+ ### 2. Gerar GUID para App Secret
74
+ ```
75
+ GET https://service2.funifier.com/v3/util/guid/new
76
+ Authorization: Bearer <studio_token>
77
+ ```
78
+ Retorna: `{ "guid": "69ab3566607db81962b9686e" }`
79
+
80
+ ### 3. Criar/Atualizar Security Document
81
+ ```
82
+ PUT https://service2.funifier.com/v3/database/security
83
+ Authorization: Bearer <studio_token>
84
+ Content-Type: application/json
85
+
86
+ {
87
+ "_id": "API_KEY",
88
+ "roles": [...],
89
+ "apps": [...]
90
+ }
91
+ ```
92
+
93
+ **⚠️ PUT é upsert** — substitui o documento inteiro. Sempre incluir roles E apps existentes.
94
+
95
+ ### 4. Verificar
96
+ ```
97
+ GET https://service2.funifier.com/v3/database/security/API_KEY?strict=true
98
+ Authorization: Bearer <studio_token>
99
+ ```
100
+
101
+ ## Navegação no Studio (Browser Automation)
102
+
103
+ 1. Abrir `https://my.funifier.com`
104
+ 2. Selecionar a gamificação desejada (botão "Select")
105
+ 3. Se gamificação nova, clicar "Começar do Zero" para inicializar
106
+ 4. Clicar no nome da gamificação na sidebar (link para `/studio/gamification/me`)
107
+ 5. Expandir seção "Mais"
108
+ 6. Clicar "Change your gamification security settings"
109
+ 7. Na página Security: botão "Apps" expande a seção de Apps, botão "Roles" expande Roles
110
+
111
+ **⚠️ SPA Redirect:** Se a gamificação não foi inicializada (wizard "Escolha o melhor caminho"), qualquer navegação para `/studio/security` redireciona para o wizard. Primeiro clicar "Começar do Zero".
112
+
113
+ ## Token Basic da Gamificação (público)
114
+ Para acesso público sem App (signup, leitura):
115
+ ```
116
+ Basic base64(API_KEY + ":")
117
+ ```
118
+ Nota: dois-pontos no final, sem app_secret. Usa a role `public` se existir.
119
+
120
+ ## Auth Token (`/v3/auth/token`)
121
+
122
+ ### Request (JSON body)
123
+ ```json
124
+ {
125
+ "grant_type": "password",
126
+ "apiKey": "API_KEY",
127
+ "username": "player_email",
128
+ "password": "plain_text_password"
129
+ }
130
+ ```
131
+
132
+ **⚠️ Campos obrigatórios:**
133
+ - `grant_type` — DEVE ser `"password"` (sem isso, retorna `invalid_grant`)
134
+ - `username` — NÃO `login` (campo frontend pode usar `login` mas API espera `username`)
135
+ - A senha do Player no banco DEVE ser BCrypt hash (`$2a$...`). Senha em texto plano causa `"Invalid salt version"`
136
+
137
+ ### Response
138
+ ```json
139
+ {
140
+ "access_token": "eyJ...",
141
+ "token_type": "Bearer",
142
+ "expires_in": "1772..."
143
+ }
144
+ ```
145
+
146
+ ### Campos da Security que afetam auth
147
+ | Campo | Tipo | Descrição |
148
+ |-------|------|-----------|
149
+ | `requirePassword` | boolean | Se `true`, valida senha BCrypt. **NÃO** é `passwordRequired` |
150
+ | `createPlayerIfDontExist` | boolean | Se `true`, cria player automaticamente no login. **NÃO** é `autoCreatePlayer` |
151
+
152
+ ### ⚠️ Role timeout NUNCA string vazia
153
+ ```json
154
+ // ❌ ERRADO — causa NPE no auth (DateUtil.fromKeyword("+") falha)
155
+ { "name": "player", "scope": "...", "timeout": "" }
156
+
157
+ // ✅ CORRETO — omitir campo para timeout padrão (7 dias)
158
+ { "name": "player", "scope": "..." }
159
+
160
+ // ✅ CORRETO — valor explícito
161
+ { "name": "player", "scope": "...", "timeout": "7d" }
162
+ ```
163
+
164
+ ## Validações e Testes
165
+ - [ ] Role `public` criada com scope `read_all`
166
+ - [ ] Role `player` criada com scope incluindo `database`
167
+ - [ ] App criada com secret gerado
168
+ - [ ] Token Basic do App acessa `/v3/database/collections`
169
+ - [ ] Token Basic público (sem app) acessa endpoints de leitura
@@ -1,28 +1,28 @@
1
- # Staging (Staging)
2
-
3
- **Acesso Studio:** `/studio/integration/staging`
4
-
5
- ## O que é
6
-
7
- Gerenciamento de ambientes de homologação e produção, com clonagem e migração de dados. Permite criar e gerenciar ambientes de homologação (staging) separados do ambiente de produção. Possibilita clonar o ambiente produtivo para testes e migrar dados entre servidores.
8
-
9
- ## Quando usar
10
-
11
- - Para testar novas funcionalidades sem impactar produção
12
- - Para validar atualizações antes do go-live
13
- - Para migrar dados entre servidores de diferentes regiões
14
- - Para criar ambientes espelho de produção
15
-
16
- ## Checklist de Configuração no Studio
17
-
18
- - [ ] Criar ambiente de staging
19
- - [ ] Clonar dados de produção para staging
20
- - [ ] Testar novas funcionalidades em staging
21
- - [ ] Migrar alterações aprovadas para produção
22
-
23
- ## Validações e Testes
24
-
25
- - [ ] Ambiente de staging é criado corretamente
26
- - [ ] Dados são clonados sem perda
27
- - [ ] Alterações em staging não afetam produção
28
- - [ ] Migração para produção funciona
1
+ # Staging (Staging)
2
+
3
+ **Acesso Studio:** `/studio/integration/staging`
4
+
5
+ ## O que é
6
+
7
+ Gerenciamento de ambientes de homologação e produção, com clonagem e migração de dados. Permite criar e gerenciar ambientes de homologação (staging) separados do ambiente de produção. Possibilita clonar o ambiente produtivo para testes e migrar dados entre servidores.
8
+
9
+ ## Quando usar
10
+
11
+ - Para testar novas funcionalidades sem impactar produção
12
+ - Para validar atualizações antes do go-live
13
+ - Para migrar dados entre servidores de diferentes regiões
14
+ - Para criar ambientes espelho de produção
15
+
16
+ ## Checklist de Configuração no Studio
17
+
18
+ - [ ] Criar ambiente de staging
19
+ - [ ] Clonar dados de produção para staging
20
+ - [ ] Testar novas funcionalidades em staging
21
+ - [ ] Migrar alterações aprovadas para produção
22
+
23
+ ## Validações e Testes
24
+
25
+ - [ ] Ambiente de staging é criado corretamente
26
+ - [ ] Dados são clonados sem perda
27
+ - [ ] Alterações em staging não afetam produção
28
+ - [ ] Migração para produção funciona
@@ -1,41 +1,41 @@
1
- # Static Repo (Repositório Estático)
2
-
3
- **Acesso Studio:** `/studio/static`
4
- **API Endpoint:** `/v3/static`
5
-
6
- ## O que é
7
-
8
- Hospedagem de interfaces e conteúdos estáticos em subdomínios Funifier. Permite criar repositórios públicos nos servidores da Funifier para hospedar interfaces gráficas customizadas. Os conteúdos podem ser enviados manualmente, sincronizados via Git ou upload de arquivos.
9
-
10
- ## Quando usar
11
-
12
- - Para hospedar interface exclusiva da gamificação
13
- - Para criar páginas personalizadas em subdomínio (ex: seugame.funifier.app)
14
- - Para deploy de frontends customizados
15
-
16
- ## Checklist de Configuração no Studio
17
-
18
- - [ ] Criar repositório estático
19
- - [ ] Fazer upload dos arquivos (HTML, CSS, JS)
20
- - [ ] Configurar subdomínio
21
- - [ ] Testar acesso público
22
-
23
- ## API Endpoints
24
-
25
- ### Listar Repositórios
26
- **Método:** GET
27
- **Endpoint:** `/v3/static`
28
-
29
- ### Criar Repositório
30
- **Método:** POST
31
- **Endpoint:** `/v3/static`
32
-
33
- ### Deletar Repositório
34
- **Método:** DELETE
35
- **Endpoint:** `/v3/static/:id`
36
-
37
- ## Validações e Testes
38
-
39
- - [ ] Repositório é criado com sucesso
40
- - [ ] Arquivos são acessíveis via URL pública
41
- - [ ] Subdomínio funciona corretamente
1
+ # Static Repo (Repositório Estático)
2
+
3
+ **Acesso Studio:** `/studio/static`
4
+ **API Endpoint:** `/v3/static`
5
+
6
+ ## O que é
7
+
8
+ Hospedagem de interfaces e conteúdos estáticos em subdomínios Funifier. Permite criar repositórios públicos nos servidores da Funifier para hospedar interfaces gráficas customizadas. Os conteúdos podem ser enviados manualmente, sincronizados via Git ou upload de arquivos.
9
+
10
+ ## Quando usar
11
+
12
+ - Para hospedar interface exclusiva da gamificação
13
+ - Para criar páginas personalizadas em subdomínio (ex: seugame.funifier.app)
14
+ - Para deploy de frontends customizados
15
+
16
+ ## Checklist de Configuração no Studio
17
+
18
+ - [ ] Criar repositório estático
19
+ - [ ] Fazer upload dos arquivos (HTML, CSS, JS)
20
+ - [ ] Configurar subdomínio
21
+ - [ ] Testar acesso público
22
+
23
+ ## API Endpoints
24
+
25
+ ### Listar Repositórios
26
+ **Método:** GET
27
+ **Endpoint:** `/v3/static`
28
+
29
+ ### Criar Repositório
30
+ **Método:** POST
31
+ **Endpoint:** `/v3/static`
32
+
33
+ ### Deletar Repositório
34
+ **Método:** DELETE
35
+ **Endpoint:** `/v3/static/:id`
36
+
37
+ ## Validações e Testes
38
+
39
+ - [ ] Repositório é criado com sucesso
40
+ - [ ] Arquivos são acessíveis via URL pública
41
+ - [ ] Subdomínio funciona corretamente