@beworke/pixel-bemony 0.1.0-rc.1

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 (67) hide show
  1. package/CHANGELOG.md +157 -0
  2. package/README.md +176 -0
  3. package/RELEASE_CANDIDATE.md +37 -0
  4. package/dist/browser/index.cjs.js +2598 -0
  5. package/dist/browser/index.cjs.js.map +1 -0
  6. package/dist/browser/index.d.mts +184 -0
  7. package/dist/browser/index.d.ts +184 -0
  8. package/dist/browser/index.esm.js +2557 -0
  9. package/dist/browser/index.esm.js.map +1 -0
  10. package/dist/browser/pixel-bemony.global.js +9848 -0
  11. package/dist/browser/pixel-bemony.global.js.map +1 -0
  12. package/dist/createBemonyPixel-BGRD66p-.d.mts +474 -0
  13. package/dist/createBemonyPixel-BGRD66p-.d.ts +474 -0
  14. package/dist/index.cjs.js +2154 -0
  15. package/dist/index.cjs.js.map +1 -0
  16. package/dist/index.d.mts +320 -0
  17. package/dist/index.d.ts +320 -0
  18. package/dist/index.esm.js +2081 -0
  19. package/dist/index.esm.js.map +1 -0
  20. package/docs/BACKEND_PURCHASE_AND_REDIRECTS.md +125 -0
  21. package/docs/BROWSER_EVENT_ENRICHMENT.md +116 -0
  22. package/docs/SCENARIOS.md +92 -0
  23. package/docs/SECURITY_LIMITATIONS.md +45 -0
  24. package/docs/TEST_MATRIX.md +39 -0
  25. package/docs/TROUBLESHOOTING.md +81 -0
  26. package/examples/README.md +73 -0
  27. package/examples/browser-bootstrap.html +47 -0
  28. package/examples/checkout-price-code.html +37 -0
  29. package/examples/funnel/donsell/downsell_1.html +130 -0
  30. package/examples/funnel/donsell/downsell_2.html +130 -0
  31. package/examples/funnel/donsell/downsell_3.html +130 -0
  32. package/examples/funnel/offer-page.html +105 -0
  33. package/examples/funnel/upsell/upsell_1.html +130 -0
  34. package/examples/funnel/upsell/upsell_2.html +130 -0
  35. package/examples/funnel/upsell/upsell_3.html +139 -0
  36. package/examples/offer-page-price-code.html +22 -0
  37. package/examples/one-click-price-code.html +38 -0
  38. package/examples/security/checkout-sim.css +408 -0
  39. package/examples/security/checkout-sim.js +414 -0
  40. package/examples/security/one-click/pri_downsell_1.html +85 -0
  41. package/examples/security/one-click/pri_downsell_1a.html +85 -0
  42. package/examples/security/one-click/pri_downsell_1b.html +78 -0
  43. package/examples/security/one-click/pri_downsell_2.html +78 -0
  44. package/examples/security/one-click/pri_downsell_2a.html +78 -0
  45. package/examples/security/one-click/pri_downsell_2b.html +78 -0
  46. package/examples/security/one-click/pri_downsell_3.html +78 -0
  47. package/examples/security/one-click/pri_downsell_3a.html +78 -0
  48. package/examples/security/one-click/pri_downsell_3b.html +78 -0
  49. package/examples/security/one-click/pri_upsell_1.html +78 -0
  50. package/examples/security/one-click/pri_upsell_1a.html +78 -0
  51. package/examples/security/one-click/pri_upsell_1b.html +78 -0
  52. package/examples/security/one-click/pri_upsell_2.html +78 -0
  53. package/examples/security/one-click/pri_upsell_2a.html +78 -0
  54. package/examples/security/one-click/pri_upsell_2b.html +78 -0
  55. package/examples/security/one-click/pri_upsell_3.html +78 -0
  56. package/examples/security/one-click/pri_upsell_3a.html +78 -0
  57. package/examples/security/one-click/pri_upsell_3b.html +78 -0
  58. package/examples/security/one-click/pri_upsell_3c.html +78 -0
  59. package/examples/security/pri1766322.html +333 -0
  60. package/examples/security/pri5529930.html +333 -0
  61. package/examples/security/pri6670988.html +334 -0
  62. package/examples/security/thank-you.html +65 -0
  63. package/examples/sim/funnel-flow.js +258 -0
  64. package/examples/sim/one-click-sim.js +167 -0
  65. package/examples/upsell-price-code.html +41 -0
  66. package/examples/url-context-navigation.html +96 -0
  67. package/package.json +63 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,157 @@
1
+ # Changelog — `@beworke/pixel-bemony`
2
+
3
+ ## 0.1.0-rc.1 — First public RC
4
+
5
+ Primeira publicação npm para validação em funis reais.
6
+
7
+ ### Highlights
8
+
9
+ - Cenários: `offer-page`, `checkout`, `upsell-offer`, `one-click-checkout`, `thank-you`
10
+ - Auto-init browser (IIFE): `data-funnel-id` como chave do pixel; `data-pixel-id` com precedência no checkout
11
+ - Dependência de runtime: `@beworke/pixel` `>=0.1.0-rc.7`
12
+ - Tags npm: `rc` + `latest`
13
+
14
+ ## Unreleased — Remoção do enriquecimento browser / catálogo
15
+
16
+ ### Breaking
17
+
18
+ - Removida toda a infraestrutura de resolução remota de contexto/catálogo (`src/context/`)
19
+ - Removidos `getResolvedContext`, `getPriceCatalog`, `BEMONY_SCENARIO_AUTO_RESOLVE_CONTEXT`, mock resolver
20
+ - Identidade comercial canônica: `priceCode` (`priceId` deprecated)
21
+ - `declineUpsell` não consulta navegação remota — usar `navigateTo`
22
+
23
+ ### Added
24
+
25
+ - `resolvePriceCode`, `extractPriceCodeFromUrl`
26
+ - Docs `BROWSER_EVENT_ENRICHMENT.md`
27
+ - Exemplos `*-price-code.html`
28
+ - Testes `browser-price-code.test.ts`
29
+
30
+ ### Changed
31
+
32
+ - Bootstrap: journey → config → Core init (sem fase de resolução)
33
+ - Eventos browser transportam `priceCode` via `productId` genérico do Core
34
+
35
+ ## Unreleased — B11 URL context + LinkAutoSource + afid
36
+
37
+ ### Added
38
+
39
+ - `BEMONY_DEFAULT_ALLOWED_DOMAINS` (`security.bemony.com`)
40
+ - Managed param `afid` (lê/persiste/propaga; **nunca gera**)
41
+ - `createBemonyOfferLinkSource` — ADD_TO_CART por destino `/offer_*` sem data attributes
42
+ - Decoração de links somente por `allowedDomains` (sem selector Bemony)
43
+ - Exemplos `url-context-navigation.html` e CTAs HTML puros
44
+ - Testes `browser.url-context-propagation.test.ts`
45
+ - Hardening Core: `LinkDecorator` managed vs forwarded; prefix pathname `/offer_`
46
+
47
+ ### Changed
48
+
49
+ - `configureBemonyLinks`: denylist Bemony aplicada; `mergeDefaultDenylist: true`; sem `allowlist: ['*']`
50
+ - `offer-page` habilita auto `ADD_TO_CART` via LinkAutoSource
51
+ - Docs: sid vs afid vs session_id; CTAs sem data-*
52
+
53
+ ## Unreleased — B10 Default global auto-init + HTTP
54
+
55
+ ### Added
56
+
57
+ - Defaults públicos: `BEMONY_DEFAULT_API_ENDPOINT`, `BEMONY_BROWSER_AUTO_INIT_DEFAULTS`
58
+ - Auto-init por padrão no IIFE `pixel-bemony.global.js` (opt-out `data-auto-init="false"`)
59
+ - `window.BemonyPixel.ready` / `whenReady()`
60
+ - Eventos `bemony:pixel:ready` / `bemony:pixel:error`
61
+ - Leitura de `data-funnel-step-id`
62
+ - `resolveBemonyExecutingScript` (currentScript → src → legado)
63
+ - Testes `browser.default-autoinit-http.test.ts` (HTTP com fetch mock)
64
+ - Smoke opt-in `BEMONY_REAL_API_SMOKE=1`
65
+
66
+ ### Changed
67
+
68
+ - Precedência: defaults → window config → data-* → explicit (merge campo a campo)
69
+ - Exemplos HTML mínimos sem markers obrigatórios
70
+ - Docs: README, TROUBLESHOOTING, TEST_MATRIX, lifecycle package doc
71
+
72
+ ### Notes
73
+
74
+ - Factory programática `development` + mock preservada
75
+ - Endpoint padrão é infraestrutura pública (não credencial)
76
+ - Core continua compondo `/pixels/public/event` e `/batch`
77
+
78
+ ## Unreleased — B9 Hardening / docs / release interno
79
+
80
+ ### Added
81
+
82
+ - README completo (cenários, segurança, exports, quick start)
83
+ - `docs/SCENARIOS.md`, `docs/TROUBLESHOOTING.md`, `docs/SECURITY_LIMITATIONS.md`, `docs/TEST_MATRIX.md`
84
+ - `RELEASE_CANDIDATE.md` (proposta `0.1.0-rc.1`, compat Core, naming)
85
+ - Export `./global` (IIFE)
86
+ - Pack/validate/smoke internos (`pack:pixel-bemony`, etc.)
87
+ - `examples/` e `docs/` incluídos no tarball (`files`)
88
+
89
+ ### Changed
90
+
91
+ - `clearBootstrapStoreForTests` removido da API pública de `/browser` (permanece interno ao módulo)
92
+
93
+ ### Notes
94
+
95
+ - Sem publish npm
96
+ - Sem alteração de `version` (`0.0.0`)
97
+ - Gates B1–B8 + B9 verdes
98
+
99
+ ## Unreleased — B8 Browser bootstrap / auto-init
100
+
101
+ ### Added
102
+
103
+ - `@beworke/pixel-bemony/browser` — `bootstrapBemonyPixel`, `installBemonyPixelAutoInit`
104
+ - IIFE `dist/browser/pixel-bemony.global.js` → `window.BemonyPixel`
105
+ - Precedência: explicit → `data-*` → `window.BemonyPixelConfig`
106
+ - Exemplo `examples/browser-bootstrap.html`
107
+
108
+ ## Unreleased — B7 Thank-you + contrato backend
109
+
110
+ ### Added
111
+
112
+ - Cenário `thank-you` (PAGE_VIEW only)
113
+ - Tipos PLACEHOLDER + validators de redirect/purchase server
114
+ - `docs/BACKEND_PURCHASE_AND_REDIRECTS.md`
115
+ - Exemplo `examples/thank-you.html`
116
+
117
+ ## Unreleased — B6 One-click checkout
118
+
119
+ ### Added
120
+
121
+ - Cenário `one-click-checkout`
122
+ - `trackOneClickConfirmation`, `withOneClickPaymentContext`
123
+ - Token efêmero privado (não em config/snapshot)
124
+
125
+ ## Unreleased — B5 Upsell / downsell
126
+
127
+ ### Added
128
+
129
+ - Cenário `upsell-offer`
130
+ - `viewUpsell`, `acceptUpsell`, `declineUpsell` (decline sem evento Core)
131
+
132
+ ## Unreleased — B4 Checkout
133
+
134
+ ### Added
135
+
136
+ - Cenário `checkout`
137
+ - Lead, order bumps, `trackPaymentMethod` (enum only)
138
+
139
+ ## Unreleased — B3 Offer page
140
+
141
+ ### Added
142
+
143
+ - Cenário `offer-page`
144
+ - `viewOffer`, `selectOffer`, `getPublicSessionId`
145
+
146
+ ## Unreleased — B2 Lifecycle / factory
147
+
148
+ ### Added
149
+
150
+ - `BemonyPixel`, `createBemonyPixel`
151
+ - Estados `created` … `destroyed` / `failed`
152
+
153
+ ## Unreleased — B1 Fundação
154
+
155
+ ### Added
156
+
157
+ - `createBemonyPixelConfig`, contratos de página, link policy, ambientes
package/README.md ADDED
@@ -0,0 +1,176 @@
1
+ # @beworke/pixel-bemony
2
+
3
+ Camada tipada da **Bemony** sobre [`@beworke/pixel`](../pixel).
4
+
5
+ | Campo | Valor |
6
+ |---|---|
7
+ | Status | **privado** (`private: true`) — não publicar |
8
+ | Versão no workspace | `0.0.0` |
9
+ | RC proposta | `0.1.0-rc.1` (ver [`RELEASE_CANDIDATE.md`](./RELEASE_CANDIDATE.md)) |
10
+ | Core mínimo proposto | `@beworke/pixel@0.1.0-rc.6` |
11
+
12
+ ## Objetivo
13
+
14
+ API de domínio para os cinco cenários do funil Bemony, lifecycle explícito e bootstrap browser com auto-init HTTP no bundle global — sem duplicar visitor/session/attribution do Core e sem purchase no browser por default.
15
+
16
+ ## Instalação (interna / monorepo)
17
+
18
+ ```bash
19
+ pnpm --filter @beworke/pixel-bemony build
20
+ # Artifact interno (não npm publish):
21
+ pnpm pack:pixel-bemony
22
+ pnpm validate:pixel-bemony-package
23
+ pnpm smoke:pixel-bemony-package
24
+ ```
25
+
26
+ Dependência atual no workspace: `"@beworke/pixel": "workspace:*"`.
27
+
28
+ ## Quick start (script mínimo)
29
+
30
+ ```html
31
+ <script
32
+ src="pixel-bemony.global.js"
33
+ data-funnel-id="funnel_1"
34
+ data-funnel-step-id="step_1"
35
+ ></script>
36
+
37
+ <a href="https://security.bemony.com/pri6670988">Comprar agora</a>
38
+ ```
39
+
40
+ Isso inicializa automaticamente com:
41
+
42
+ - `environment: production`
43
+ - `scenario: offer-page`
44
+ - `pixelId: pix_7704308` / `namespace: bemony-web`
45
+ - transport HTTP + `BEMONY_DEFAULT_API_ENDPOINT`
46
+ - `allowedDomains: [security.bemony.com]`
47
+ - `sid` gerado/lido + `afid` lido (nunca gerado)
48
+ - `PAGE_VIEW` inicial via Core
49
+ - clique em `/pri*` → ADD_TO_CART (`productId` = último segmento do path)
50
+
51
+ CTAs **não** usam `data-bemony-offer`. Decoração = hostname permitido; evento = `LinkAutoSource`.
52
+
53
+ ```js
54
+ const pixel = await window.BemonyPixel.whenReady();
55
+ ```
56
+
57
+ Opt-out: `data-auto-init="false"`.
58
+
59
+ Servir exemplos por HTTP local (não `file://`):
60
+
61
+ ```bash
62
+ pnpm dlx serve packages/pixel-bemony
63
+ ```
64
+
65
+ ## Quick start (programático)
66
+
67
+ ```typescript
68
+ import { createBemonyPixel } from '@beworke/pixel-bemony';
69
+
70
+ const pixel = await createBemonyPixel({
71
+ environment: 'development',
72
+ scenario: 'offer-page',
73
+ platform: {
74
+ pixelId: 'bemony-web',
75
+ allowedDomains: ['checkout.bemony.com'],
76
+ },
77
+ page: { public: { pageId: 'vsl-main', funnelId: 'funnel_1' } },
78
+ });
79
+
80
+ pixel.selectOffer({ priceCode: 'pri_123' });
81
+ ```
82
+
83
+ > O Pixel extrai `priceCode` do link ou da API de domínio.
84
+ > Nenhuma consulta de catálogo é executada; o backend enriquece o evento.
85
+ > Ver [`docs/BROWSER_EVENT_ENRICHMENT.md`](./docs/BROWSER_EVENT_ENRICHMENT.md).
86
+
87
+ Entry principal **sem side effects**. Bootstrap/auto-init ESM:
88
+
89
+ ```typescript
90
+ import { bootstrapBemonyPixel } from '@beworke/pixel-bemony/browser';
91
+ ```
92
+
93
+ Global IIFE: `@beworke/pixel-bemony/global` → `window.BemonyPixel`.
94
+
95
+ ## Defaults públicos
96
+
97
+ | Constante | Valor |
98
+ |---|---|
99
+ | `BEMONY_DEFAULT_API_ENDPOINT` | `https://micro-service-pixel-production-4826.up.railway.app` |
100
+ | `BEMONY_DEFAULT_PIXEL_ID` | `pix_7704308` |
101
+ | `BEMONY_DEFAULT_NAMESPACE` | `bemony-web` |
102
+ | `BEMONY_DEFAULT_ALLOWED_DOMAINS` | `['security.bemony.com']` |
103
+ | `BEMONY_DEFAULT_BROWSER_ENVIRONMENT` | `production` |
104
+ | `BEMONY_DEFAULT_BROWSER_SCENARIO` | `offer-page` |
105
+
106
+ O endpoint é configuração pública de infraestrutura (não credencial). O Core acrescenta `/pixels/public/event` e `/pixels/public/event/batch`.
107
+
108
+ ## Cenários
109
+
110
+ | Cenário | Métodos principais | Notas |
111
+ |---|---|---|
112
+ | `offer-page` | `selectOffer`, `getPublicSessionId` | links `/pri*` → ADD_TO_CART |
113
+ | `checkout` | `startCheckout`, `captureLead`, bumps, `trackPaymentMethod` | auto INITIATE_CHECKOUT |
114
+ | `upsell-offer` | `viewUpsell`, `acceptUpsell`, `declineUpsell` | upsell e downsell |
115
+ | `one-click-checkout` | `trackOneClickConfirmation`, `setPublicOrderId` | sem token no Pixel |
116
+ | `thank-you` | `getPublicOrderId` | PAGE_VIEW; sem purchase browser |
117
+
118
+ Guias: [`docs/SCENARIOS.md`](./docs/SCENARIOS.md).
119
+ Browser → backend: [`docs/BROWSER_EVENT_ENRICHMENT.md`](./docs/BROWSER_EVENT_ENRICHMENT.md).
120
+ Backend / redirects: [`docs/BACKEND_PURCHASE_AND_REDIRECTS.md`](./docs/BACKEND_PURCHASE_AND_REDIRECTS.md).
121
+
122
+ > O Pixel Bemony não consulta catálogo durante a inicialização.
123
+ > Os eventos transportam o `priceCode` observado; o backend enriquece.
124
+
125
+ ## Segurança (resumo)
126
+
127
+ - Token one-click **nunca** no Pixel (pagamento no backend/app).
128
+ - Purchase browser **desabilitado** em todos os presets.
129
+ - Sem dados de cartão no Pixel.
130
+ - Detalhes: [`docs/SECURITY_LIMITATIONS.md`](./docs/SECURITY_LIMITATIONS.md).
131
+
132
+ ## Relação com o Core
133
+
134
+ | Responsabilidade | Onde |
135
+ |---|---|
136
+ | Visitor / session / sid / UrlContext | `@beworke/pixel` |
137
+ | Domínio Bemony + cenários + bootstrap | `@beworke/pixel-bemony` |
138
+ | PURCHASE de pagamento | Backend (não browser) |
139
+
140
+ Sem imports `@beworke/pixel/src/*`.
141
+
142
+ ## Exports
143
+
144
+ | Subpath | Conteúdo |
145
+ |---|---|
146
+ | `.` | factory, `BemonyPixel`, contratos, helpers, defaults públicos |
147
+ | `./browser` | bootstrap + auto-init (sem side effect no import) |
148
+ | `./global` | IIFE `dist/browser/pixel-bemony.global.js` (auto-init por padrão) |
149
+
150
+ ## Exemplos HTML
151
+
152
+ Ver guia do funil ponta a ponta: [`examples/README.md`](./examples/README.md).
153
+
154
+ Em [`examples/`](./examples/): `funnel/` (páginas externas), `security/` (checkout + one-click),
155
+ `*-price-code.html` (sem catálogo), browser-bootstrap.
156
+
157
+ ## Troubleshooting
158
+
159
+ [`docs/TROUBLESHOOTING.md`](./docs/TROUBLESHOOTING.md)
160
+
161
+ ## Matriz de testes
162
+
163
+ [`docs/TEST_MATRIX.md`](./docs/TEST_MATRIX.md)
164
+
165
+ ## Changelog
166
+
167
+ [`CHANGELOG.md`](./CHANGELOG.md)
168
+
169
+ ## Scripts do pacote
170
+
171
+ ```bash
172
+ pnpm --filter @beworke/pixel-bemony lint
173
+ pnpm --filter @beworke/pixel-bemony type-check
174
+ pnpm --filter @beworke/pixel-bemony test
175
+ pnpm --filter @beworke/pixel-bemony build
176
+ ```
@@ -0,0 +1,37 @@
1
+ # Release Candidate — `@beworke/pixel-bemony`
2
+
3
+ ## Status
4
+
5
+ | Item | Decisão |
6
+ |---|---|
7
+ | Publish npm | **Sim** — RC pública para validação |
8
+ | Versão | `0.1.0-rc.1` |
9
+ | Naming | `@beworke/pixel-bemony` |
10
+ | Tags npm | `rc` + `latest` (ambas apontam para a RC atual) |
11
+
12
+ ## Compatibilidade com o Core
13
+
14
+ | Pacote | Intervalo |
15
+ |---|---|
16
+ | `@beworke/pixel` (peer) | `>=0.1.0-rc.7` |
17
+ | Dependência no workspace | `workspace:*` (pnpm publish reescreve para a versão concreta do Core) |
18
+
19
+ ## Checklist
20
+
21
+ 1. `pnpm verify:pixel-bemony-rc`
22
+ 2. Confirmar: sem token em artefatos, sem purchase browser, entry `.` sem side effects
23
+ 3. `pnpm --filter @beworke/pixel-bemony publish:rc`
24
+ 4. `npm view @beworke/pixel-bemony dist-tags` → `rc` e `latest` = `0.1.0-rc.1`
25
+
26
+ ## Artifact local
27
+
28
+ ```text
29
+ artifacts/beworke-pixel-bemony-0.1.0-rc.1.tgz
30
+ artifacts/latest-pixel-bemony-package.json
31
+ ```
32
+
33
+ ## Fora desta RC
34
+
35
+ - Versão estável `0.1.0` (sem sufixo)
36
+ - Alias de marca `bemony-pixel`
37
+ - CMP completo / purchase browser