@akross/artemis-ads-sdk 3.7.8 → 3.7.10

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/CHANGELOG.md CHANGED
@@ -5,6 +5,37 @@ Todas as mudanças notáveis do projeto são documentadas neste arquivo.
5
5
  O formato é baseado em [Keep a Changelog](https://keepachangelog.com/pt-BR/1.0.0/),
6
6
  e este projeto adere ao [Versionamento Semântico](https://semver.org/lang/pt-BR/).
7
7
 
8
+ ## [3.7.10] - 2026-04-10
9
+
10
+ ### Corrigido
11
+
12
+ - **PPID não aparecia nos relatórios do Google Ad Manager**: O `userId` era enviado como PPID diretamente ao GPT, mas o Google Ad Manager exige PPIDs com 32–150 caracteres. Como a maioria dos userIds internos tem menos de 32 chars, o GAM descartava silenciosamente o valor — sem erro, mas sem efeito em frequency capping, segmentação ou relatórios. Agora o SDK deriva o PPID via SHA-256 do userId (hex de 64 chars), garantindo conformidade com a faixa exigida.
13
+ - **`saveConfig` persistia config sem defaults**: `AAManager.initialize` salvava o objeto de config original no localStorage em vez do objeto com defaults aplicados (`ConfigUtils.applyDefaults`). Campos como `timeout`, `proxyExternalScripts` e `enableGPTPpid` não ficavam persistidos quando o publisher não os setava explicitamente.
14
+
15
+ ### Adicionado
16
+
17
+ - **SHA-256 puro-JS** (`src/utils/sha256.ts`): Implementação síncrona sem dependência de `crypto.subtle`, permitindo uso em ambientes HTTP (não apenas HTTPS). Validada contra vetores FIPS 180-4.
18
+ - **`sdk.setPublisherProvidedId(ppid)`**: Escape hatch para publishers que já possuem um PPID canônico de 32–150 chars e preferem não usar o hash automático do SDK. Requer `enableGPTPpid: true`.
19
+ - **Restauração de PPID no boot**: Ao inicializar o SDK com um userId já persistido de sessão anterior, o PPID é derivado e enviado ao GPT automaticamente — sem necessidade de nova chamada a `setUserId`.
20
+ - **Logs de diagnóstico no fluxo de PPID**: `catch` silenciosos substituídos por `logger.warn` / `logger.debug`, facilitando troubleshooting em ambientes com `debug: true`.
21
+
22
+ ### Alterado
23
+
24
+ - **Validação de PPID**: Limite mínimo de tamanho ajustado de 1 para 32 caracteres, alinhado à exigência real do Google Ad Manager.
25
+ - **`GPTPublisherProvidedId.ts`**: Toda a lógica de derivação, persistência e envio de PPID centralizada neste utilitário. `AAManager` ficou como fachada fina, sem lógica de PPID.
26
+ - **`UserDataCache`**: Novo campo opcional `ppid` para persistir o PPID derivado entre sessões. Retrocompatível — caches legados sem o campo são migrados automaticamente no primeiro boot.
27
+
28
+ ---
29
+
30
+ ## [3.7.9] - 2026-03-12
31
+
32
+ ### Corrigido
33
+
34
+ - **AAVastPlayer (video_v2 / IMA SDK)**: O último evento de tracking VAST ficava pendente porque `finishWithResult` chamava `cleanup()` imediatamente, destruindo o modal e os elementos DOM antes do delay de 1 segundo previsto para dar tempo aos pixels de tracking do IMA SDK e aos requests HTTP em voo. O fluxo de conclusão normal (REWARDED) — tanto via IMA SDK quanto via fallback `vast-client` — passou a resolver a promise diretamente sem acionar o cleanup, que agora ocorre exclusivamente pelo `setTimeout` de 1 segundo.
35
+ - **AAVastPlayer**: `finishWithResult` não executa mais `cleanup()` internamente. O cleanup passou a ser responsabilidade explícita de cada call site: chamado imediatamente nos fluxos de erro/cancelamento, e diferido via `setTimeout` nos fluxos de conclusão normal, garantindo que os recursos do IMA SDK só sejam destruídos após os pixels de tracking terem tempo de ser enviados.
36
+
37
+ ---
38
+
8
39
  ## [3.7.8] - 2026-03-04
9
40
 
10
41
  Atualização de versão para sincronização com iOS e Android
package/README.md CHANGED
@@ -245,6 +245,32 @@ if (media) {
245
245
  }
246
246
  ```
247
247
 
248
+ ### Publisher Provided ID (PPID)
249
+
250
+ Quando `enableGPTPpid: true`, o SDK envia automaticamente um PPID ao Google Ad Manager via GPT para frequency capping, segmentação de audiência e targeting.
251
+
252
+ O Google Ad Manager exige PPIDs com **32–150 caracteres**. Como userIds internos geralmente não atingem 32 chars, o SDK deriva o PPID via **SHA-256 do userId** (hex de 64 chars), garantindo conformidade. O hash é determinístico: o mesmo userId sempre gera o mesmo PPID, preservando frequency capping entre sessões.
253
+
254
+ ```javascript
255
+ // Uso automático — basta ligar enableGPTPpid na config
256
+ const sdk = await init({
257
+ baseUrl: 'https://ads.timfun.com.br/adserver/',
258
+ enableGPTPpid: true,
259
+ // ...
260
+ });
261
+
262
+ await sdk.setUserId('user_12345');
263
+ // PPID derivado automaticamente: SHA-256("user_12345") = "d04c992200c84b44..."
264
+ ```
265
+
266
+ Se você já possui um PPID canônico de 32–150 chars, use o escape hatch:
267
+
268
+ ```javascript
269
+ sdk.setPublisherProvidedId('seu-ppid-canonico-com-32-ou-mais-chars');
270
+ ```
271
+
272
+ O PPID também é restaurado automaticamente entre sessões: se o userId já está persistido e `enableGPTPpid` está ligado, o SDK aplica o PPID no GPT durante o `initialize()`, sem necessidade de chamar `setUserId` novamente.
273
+
248
274
  ## 🔧 Configuração
249
275
 
250
276
  ### Configuração do SDK
@@ -262,7 +288,7 @@ const SDK_CONFIG = {
262
288
  primaryColor: '#ff0000', // Cor primária do projeto (formato hexadecimal)
263
289
  luminaToken: 'QQDCYMdFh2AJqwP', // Token do Lumina SDK (opcional - usa valor padrão se não fornecido)
264
290
  proxyExternalScripts: false, // Carregar scripts externos (GPT, IMA, Lumina) via proxy (opcional)
265
- enableGPTPpid: false // Enviar userId como PPID para Google Ads via GPT (opcional)
291
+ enableGPTPpid: true // Enviar SHA-256 do userId como PPID para Google Ads via GPT (opcional)
266
292
  };
267
293
  ```
268
294
 
@@ -279,7 +305,7 @@ interface SDKConfig {
279
305
  primaryColor?: string;
280
306
  luminaToken?: string;
281
307
  proxyExternalScripts?: boolean;
282
- enableGPTPpid?: boolean; // Publisher Provided ID para GPT
308
+ enableGPTPpid?: boolean; // Envia SHA-256 do userId como PPID para Google Ads via GPT
283
309
  cdnBaseUrl?: string;
284
310
  }
285
311
  ```
@@ -696,8 +722,10 @@ src/
696
722
  │ ├── DeviceUtil.ts
697
723
  │ ├── ExternalJsLoader.ts # Carregamento de scripts (GPT, IMA, Lumina)
698
724
  │ ├── GlobalLoadingOverlay.ts
725
+ │ ├── GPTPublisherProvidedId.ts # PPID: derivação, persistência e envio ao GPT
699
726
  │ ├── logger.ts # Sistema de logging
700
727
  │ ├── PreferencesUtil.ts
728
+ │ ├── sha256.ts # SHA-256 puro-JS (para derivação de PPID)
701
729
  │ ├── version.ts
702
730
  │ └── index.ts
703
731
  └── index.ts # Ponto de entrada principal
@@ -771,7 +799,7 @@ interface SDKConfig {
771
799
  primaryColor?: string;
772
800
  luminaToken?: string;
773
801
  proxyExternalScripts?: boolean;
774
- enableGPTPpid?: boolean; // Publisher Provided ID para GPT
802
+ enableGPTPpid?: boolean; // Envia SHA-256 do userId como PPID para Google Ads via GPT
775
803
  cdnBaseUrl?: string;
776
804
  }
777
805
  ```