logos-bancos-br 0.1.0 → 0.2.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 (71) hide show
  1. package/README.en.md +43 -11
  2. package/README.md +47 -14
  3. package/data/bancos.json +540 -45
  4. package/dist/{chunk-ZGDTPJIV.cjs → chunk-43N2EZJR.cjs} +541 -46
  5. package/dist/{chunk-SPP4OABR.js → chunk-6ZLP4OY5.js} +1 -1
  6. package/dist/{chunk-BIKMT23N.cjs → chunk-7QU5WW5A.cjs} +6 -6
  7. package/dist/{chunk-S4JZVP5E.js → chunk-RKLZTMIS.js} +541 -46
  8. package/dist/cli.cjs +5 -5
  9. package/dist/cli.js +2 -2
  10. package/dist/index.cjs +2 -2
  11. package/dist/index.js +1 -1
  12. package/dist/node.cjs +3 -3
  13. package/dist/node.js +2 -2
  14. package/llms.txt +6 -3
  15. package/logos/png/00556603.png +0 -0
  16. package/logos/png/00714671.png +0 -0
  17. package/logos/png/00806535.png +0 -0
  18. package/logos/png/00954288.png +0 -0
  19. package/logos/png/01858774.png +0 -0
  20. package/logos/png/02801938.png +0 -0
  21. package/logos/png/02819125.png +0 -0
  22. package/logos/png/02992317.png +0 -0
  23. package/logos/png/03609817.png +0 -0
  24. package/logos/png/04332281.png +0 -0
  25. package/logos/png/07652226.png +0 -0
  26. package/logos/png/09274232.png +0 -0
  27. package/logos/png/14388334.png +0 -0
  28. package/logos/png/14511781.png +0 -0
  29. package/logos/png/15173776.png +0 -0
  30. package/logos/png/18520834.png +0 -0
  31. package/logos/png/22610500.png +0 -0
  32. package/logos/png/28195667.png +0 -0
  33. package/logos/png/28650236.png +0 -0
  34. package/logos/png/32062580.png +0 -0
  35. package/logos/png/33172537.png +0 -0
  36. package/logos/png/33603457.png +0 -0
  37. package/logos/png/33644196.png +0 -0
  38. package/logos/png/33667205.png +0 -0
  39. package/logos/png/33737818.png +0 -0
  40. package/logos/png/36113876.png +0 -0
  41. package/logos/png/42272526.png +0 -0
  42. package/logos/png/46518205.png +0 -0
  43. package/logos/png/47381104.png +0 -0
  44. package/logos/png/53908413.png +0 -0
  45. package/logos/png/54811417.png +0 -0
  46. package/logos/png/58616418.png +0 -0
  47. package/logos/png/59109165.png +0 -0
  48. package/logos/png/60394079.png +0 -0
  49. package/logos/png/60814191.png +0 -0
  50. package/logos/png/60850229.png +0 -0
  51. package/logos/png/61088183.png +0 -0
  52. package/logos/png/61809182.png +0 -0
  53. package/logos/png/62144175.png +0 -0
  54. package/logos/png/62287735.png +0 -0
  55. package/logos/png/62331228.png +0 -0
  56. package/logos/png/71027866.png +0 -0
  57. package/logos/png/78632767.png +0 -0
  58. package/logos/png/80230774.png +0 -0
  59. package/logos/png/87437687.png +0 -0
  60. package/logos/svg/00954288.svg +14 -0
  61. package/logos/svg/01858774.svg +13 -0
  62. package/logos/svg/28195667.svg +3 -0
  63. package/logos/svg/33667205.svg +24 -0
  64. package/logos/svg/33737818.svg +24 -0
  65. package/logos/svg/53908413.svg +1 -0
  66. package/logos/svg/60394079.svg +16 -0
  67. package/logos/svg/62144175.svg +13 -0
  68. package/logos/svg/80230774.svg +24 -0
  69. package/logos/svg/87437687.svg +24 -0
  70. package/package.json +4 -1
  71. package/react-native.js +90 -0
package/README.en.md CHANGED
@@ -32,9 +32,11 @@
32
32
  Central Bank of Brazil STR participants list (currently 470), with official name, short name,
33
33
  COMPE code and ISPB, in [`data/bancos.json`](data/bancos.json). You never hand-maintain a
34
34
  bank list again.
35
- 2. **Official logos.** Currently 107, as 256×256 PNGs (+ SVG when available), sourced from the
36
- public **Open Finance Brasil** directory — where each institution publishes and maintains its
37
- own brand. Every file carries provenance: source URI, SHA-256 and date.
35
+ 2. **Official logos.** Currently 152, as 256×256 PNGs (+ SVG when available), from two origins —
36
+ both official and identified in the dataset (`logo.source.type`): the public **Open Finance
37
+ Brasil** directory (`openfinance`), where each institution publishes its own brand, and the
38
+ **institution's own official website** (`direct-uri`), visually curated before shipping.
39
+ Every file carries provenance: source URI, SHA-256 and date.
38
40
  3. **Automatic updates, no manual curation.** Every Monday a GitHub Action
39
41
  ([`update-logos.yml`](.github/workflows/update-logos.yml)) rebuilds **both the list AND the
40
42
  logos** from the sources and opens a PR with the visual diff. A bank created, renamed or
@@ -50,7 +52,10 @@ and banks redesign their brands. Existing libraries ship either **data only** (n
50
52
  logos **hand-collected** from assorted websites with no traceability. The approach here:
51
53
 
52
54
  - **Official sources, and only them** — the STR participants CSV (updated daily by the Central
53
- Bank itself) and the Open Finance Brasil participants directory. No images "found on Google".
55
+ Bank itself), the Open Finance Brasil participants directory and, for non-participants, the
56
+ icon the institution publishes **on its own official website** (hand-reviewed). No images
57
+ "found on Google" or from aggregators. Open Finance purists can filter:
58
+ `banks().filter(b => b.logo?.source.type === 'openfinance')`.
54
59
  - **Per-logo provenance** — `data/bancos.json` records each logo's source URI, SHA-256 of the
55
60
  original artwork and last-change date. The git diff is the audit trail.
56
61
  - **Safe matching** — automatic matches happen **only via ISPB** (= first 8 digits of the CNPJ).
@@ -58,9 +63,10 @@ logos **hand-collected** from assorted websites with no traceability. The approa
58
63
  In a banking context, a wrong logo is worse than no logo.
59
64
  - **Safe assets** — https-only downloads with size/pixel caps; SVGs redistributed only after
60
65
  sanitization (no scripts, event handlers, `foreignObject` or external references).
61
- - **Honest trade-off** — 107 of the 470 institutions have a logo (the Open Finance participants,
62
- which cover the vast majority of accounts in Brazil). The rest are small credit unions/SCDs
63
- with no officially published logo — your app picks the fallback.
66
+ - **Honest trade-off** — 152 of the 470 institutions have a logo (all Open Finance participants
67
+ plus ~45 banks/payment institutions covered via official sites — the vast majority of accounts
68
+ in Brazil). The rest are small credit unions/SCDs/brokers — your app picks the fallback, and
69
+ coverage grows every release.
64
70
 
65
71
  ## Install & use
66
72
 
@@ -68,6 +74,10 @@ logos **hand-collected** from assorted websites with no traceability. The approa
68
74
  npm install logos-bancos-br
69
75
  ```
70
76
 
77
+ Requires **Node ≥ 20** for Node/CLI usage (web and React Native follow your bundler's
78
+ environment). Zero runtime dependencies. Published with **npm provenance** — verify integrity
79
+ with `npm audit signatures`.
80
+
71
81
  Files are named by **ISPB** (8 digits). Lookups accept **COMPE or ISPB**.
72
82
 
73
83
  ```ts
@@ -78,7 +88,8 @@ byIspb('00000000'); // Banco do Brasil
78
88
  logoCdnUrl(341); // https://cdn.jsdelivr.net/npm/logos-bancos-br@x.y.z/logos/png/60701190.png
79
89
  ```
80
90
 
81
- **React Native (Expo/Metro)** — static require() map (bundles all logos, ~1.3 MB):
91
+ **React Native (Expo/Metro)** — static require() map (bundles all logos, ~1.3 MB; keys accept
92
+ both the 4-digit COMPE and the 8-digit ISPB):
82
93
 
83
94
  ```tsx
84
95
  import logos from 'logos-bancos-br/react-native';
@@ -111,6 +122,23 @@ https://cdn.jsdelivr.net/npm/logos-bancos-br@0.1.0/logos/png/60701190.png
111
122
  import data from 'logos-bancos-br/data/bancos.json';
112
123
  ```
113
124
 
125
+ ### API quick reference
126
+
127
+ | Import | Function | Returns |
128
+ |---|---|---|
129
+ | `logos-bancos-br` | `banks()` | every institution (`Bank[]`) |
130
+ | | `byCompe(code)` | `Bank \| undefined` — `341`, `'341'` and `'0341'` are equivalent |
131
+ | | `byIspb(ispb)` | `Bank \| undefined` |
132
+ | | `findBank(code)` | `Bank \| undefined` — more than 4 digits is treated as ISPB |
133
+ | | `logoCdnUrl(code, { format?, version? })` | jsDelivr URL, or `null` when there is no logo |
134
+ | | `normalizeCompe(x)` · `normalizeIspb(x)` | `'0341'` · `'60701190'` |
135
+ | | `version` | package version (string) |
136
+ | `logos-bancos-br/node` | `logoPngPath(code)` · `logoSvgPath(code)` | absolute asset path, or `null` |
137
+ | | `copyLogos({ dest, format?, by?, only? })` | copies assets into a directory (what the CLI uses) |
138
+ | `logos-bancos-br/react-native` | `logos` (default export) | require() map keyed by COMPE4 **and** ISPB |
139
+
140
+ Exported TypeScript types: `Bank`, `BankLogo`, `BankLogoSource`.
141
+
114
142
  ## Dataset shape
115
143
 
116
144
  ```json
@@ -135,10 +163,14 @@ redistributable; `logo: null` means the institution has no logo in the official
135
163
 
136
164
  The pipeline joins the STR list (which institutions exist) with the Open Finance directory
137
165
  (their logos), bridged by `ISPB == first 8 digits of the CNPJ`; hand-reviewed `forcedMatches`
138
- cover second brands (XP CCTVM, Nu Invest, Bradesco BBI…). The weekly workflow regenerates
166
+ cover second brands (XP CCTVM, Nu Invest, Bradesco BBI…). For institutions outside Open Finance,
167
+ discovery tools (`npm run discover` / `discover:ai`) find the icon published on the institution's
168
+ official website — nothing ships without visual curation (brand + domain reviewed); approvals
169
+ become `forcedUris` (`source.type: "direct-uri"`). The weekly workflow regenerates
139
170
  `data/bancos.json`, `logos/`, `PREVIEW.md` and `react-native.js` and opens a PR with the report
140
- and the visual PNG diff. After review and merge, a new version is published to npm. Nothing is
141
- edited by hand. Maintenance details: [CONTRIBUTING.md](CONTRIBUTING.md).
171
+ and the visual PNG diff. After review and merge, the maintainer publishes a new version to npm
172
+ (GitHub Release). Nothing is edited by hand. Maintenance details:
173
+ [CONTRIBUTING.md](CONTRIBUTING.md).
142
174
 
143
175
  ## Trademarks
144
176
 
package/README.md CHANGED
@@ -31,8 +31,10 @@
31
31
  COMPE da lista de participantes do STR do **Banco Central** (hoje 470), com nome oficial,
32
32
  nome reduzido, código COMPE e ISPB, em [`data/bancos.json`](data/bancos.json). Você nunca
33
33
  mais mantém uma lista de bancos à mão.
34
- 2. **Logos oficiais.** Hoje 107, em PNG 256×256 (+ SVG quando disponível), vindos do diretório
35
- público do **Open Finance Brasil** — onde cada instituição publica e mantém a própria marca.
34
+ 2. **Logos oficiais.** Hoje 152, em PNG 256×256 (+ SVG quando disponível), de duas origens —
35
+ ambas oficiais e identificadas no dataset (`logo.source.type`): o diretório público do
36
+ **Open Finance Brasil** (`openfinance`), onde cada instituição publica a própria marca, e o
37
+ **site oficial da própria instituição** (`direct-uri`), com curadoria visual antes de entrar.
36
38
  Cada arquivo carrega proveniência: URI de origem, SHA-256 e data.
37
39
  3. **Atualização automática, sem curadoria manual.** Toda segunda-feira um GitHub Action
38
40
  ([`update-logos.yml`](.github/workflows/update-logos.yml)) reconstrói **a lista E os logos**
@@ -49,8 +51,10 @@ redesenham suas marcas. As bibliotecas existentes ou trazem **só dados** (sem l
49
51
  **coletados manualmente** de sites variados, sem rastreabilidade. A abordagem aqui:
50
52
 
51
53
  - **Fontes oficiais, e apenas elas** — o CSV de participantes do STR (que o próprio BCB atualiza
52
- diariamente) e o diretório de participantes do Open Finance Brasil. Nenhuma imagem "achada no
53
- Google".
54
+ diariamente), o diretório de participantes do Open Finance Brasil e, para quem não participa do
55
+ Open Finance, o ícone que a própria instituição publica **no site oficial dela** (revisado à
56
+ mão). Nenhuma imagem "achada no Google" ou de agregador. Quem quiser só a fonte Open Finance
57
+ filtra: `banks().filter(b => b.logo?.source.type === 'openfinance')`.
54
58
  - **Proveniência por logo** — `data/bancos.json` registra a URI de origem, o SHA-256 do arquivo
55
59
  original e a data de cada logo. O diff do git é a auditoria.
56
60
  - **Correspondência segura** — match automático **somente por ISPB** (= raiz do CNPJ).
@@ -59,9 +63,10 @@ redesenham suas marcas. As bibliotecas existentes ou trazem **só dados** (sem l
59
63
  - **Assets seguros** — download só via https com teto de tamanho e de pixels; SVGs
60
64
  redistribuídos apenas após sanitização (sem `script`, event handlers, `foreignObject` ou
61
65
  referências externas).
62
- - **Trade-off honesto** — 107 das 470 instituições têm logo (as participantes do Open Finance,
63
- que cobrem a esmagadora maioria das contas do país). As demais são SCDs/cooperativas pequenas
64
- sem logo oficial publicado; para elas seu app usa o fallback que preferir.
66
+ - **Trade-off honesto** — 152 das 470 instituições têm logo (todas as participantes do Open
67
+ Finance + ~45 bancos e IPs cobertos pelos sites oficiais, o que inclui a esmagadora maioria
68
+ das contas do país). As demais são SCDs/cooperativas/corretoras pequenas; para elas seu app
69
+ usa o fallback que preferir — e a cobertura cresce a cada release.
65
70
 
66
71
  ## Instalação e uso
67
72
 
@@ -69,6 +74,10 @@ redesenham suas marcas. As bibliotecas existentes ou trazem **só dados** (sem l
69
74
  npm install logos-bancos-br
70
75
  ```
71
76
 
77
+ Requer **Node ≥ 20** para uso via Node/CLI (em web e React Native vale o ambiente do seu
78
+ bundler). Zero dependências de runtime. Publicado com **npm provenance** — verifique a
79
+ integridade com `npm audit signatures`.
80
+
72
81
  Os arquivos são nomeados pelo **ISPB** (8 dígitos, estável e universal — inclusive para
73
82
  instituições Pix sem COMPE, no roadmap). As consultas aceitam **COMPE ou ISPB**.
74
83
 
@@ -100,6 +109,7 @@ import logos from 'logos-bancos-br/react-native'; // mapa require() estático
100
109
  <Image source={logos[codigoBanco.padStart(4, '0')]} style={{ width: 40, height: 40 }} />
101
110
  ```
102
111
 
112
+ > As chaves do mapa aceitam o COMPE com 4 dígitos (`'0341'`) **e** o ISPB (`'60701190'`).
103
113
  > Importar esse entry adiciona **todos** os logos (~1,3 MB) ao bundle. Se preferir empacotar só
104
114
  > alguns, use o CLI abaixo e faça `require()` dos arquivos copiados.
105
115
 
@@ -141,6 +151,23 @@ import dados from 'logos-bancos-br/data/bancos.json';
141
151
  // todas as instituições: ispb, compe, compe4, nome oficial, nome reduzido, logo (ou null)
142
152
  ```
143
153
 
154
+ ### Referência rápida da API
155
+
156
+ | Import | Função | Retorna |
157
+ |---|---|---|
158
+ | `logos-bancos-br` | `banks()` | todas as instituições (`Bank[]`) |
159
+ | | `byCompe(codigo)` | `Bank \| undefined` — `341`, `'341'` e `'0341'` são equivalentes |
160
+ | | `byIspb(ispb)` | `Bank \| undefined` |
161
+ | | `findBank(codigo)` | `Bank \| undefined` — mais de 4 dígitos trata como ISPB |
162
+ | | `logoCdnUrl(codigo, { format?, version? })` | URL do jsDelivr, ou `null` se não houver logo |
163
+ | | `normalizeCompe(x)` · `normalizeIspb(x)` | `'0341'` · `'60701190'` |
164
+ | | `version` | versão do pacote (string) |
165
+ | `logos-bancos-br/node` | `logoPngPath(codigo)` · `logoSvgPath(codigo)` | caminho absoluto do asset, ou `null` |
166
+ | | `copyLogos({ dest, format?, by?, only? })` | copia os assets para um diretório (o que o CLI usa) |
167
+ | `logos-bancos-br/react-native` | `logos` (default export) | mapa `require()` com chaves COMPE4 **e** ISPB |
168
+
169
+ Tipos TypeScript exportados: `Bank`, `BankLogo`, `BankLogoSource`.
170
+
144
171
  ## O dataset
145
172
 
146
173
  Um registro de `data/bancos.json`:
@@ -169,7 +196,9 @@ Um registro de `data/bancos.json`:
169
196
 
170
197
  - `logo.png` — PNG normalizado **256×256**, fundo transparente, `fit: contain`.
171
198
  - `logo.svg` — vetor original, presente só quando passa na sanitização.
172
- - `logo.source` — proveniência completa: de onde veio, hash e quando mudou.
199
+ - `logo.source` — proveniência completa: de onde veio, hash e quando mudou. `source.type`:
200
+ `openfinance` (diretório Open Finance, match automático por ISPB ou revisado), `direct-uri`
201
+ (URL no site oficial da instituição, revisada à mão) ou `override` (arte mantida no repo).
173
202
  - `logo: null` — instituição sem logo nas fontes oficiais (use seu fallback).
174
203
 
175
204
  ## Como funciona a atualização automática
@@ -182,19 +211,23 @@ Um registro de `data/bancos.json`:
182
211
  3. **Ponte**: `ISPB == 8 primeiros dígitos do CNPJ` (é assim que o BCB os atribui na esmagadora
183
212
  maioria dos casos). Quando não bate — segundas marcas como XP CCTVM, Nu Invest, Bradesco BBI —
184
213
  entra o `forcedMatches`, revisado à mão a partir das sugestões do relatório.
185
- 4. **Normalização**: cada arte vira PNG 256×256; o SVG original é mantido quando seguro.
186
- 5. **Cadência**: o workflow roda **toda segunda-feira** (e sob demanda), regenera
214
+ 4. **Fora do Open Finance**: ferramentas de descoberta (`npm run discover` e `discover:ai`)
215
+ acham o ícone publicado no site oficial da instituição; **nada entra sem curadoria visual**
216
+ (o revisor confere marca e domínio) — aprovados viram `forcedUris`.
217
+ 5. **Normalização**: cada arte vira PNG 256×256; o SVG original é mantido quando seguro.
218
+ 6. **Cadência**: o workflow roda **toda segunda-feira** (e sob demanda), regenera
187
219
  `data/bancos.json`, `logos/`, `PREVIEW.md` e `react-native.js`, e **abre um PR** com o
188
- relatório e o diff visual dos PNGs. Depois da revisão e merge, uma nova versão vai para o
189
- npm. Nada é editado à mão.
220
+ relatório e o diff visual dos PNGs. Depois da revisão e merge, o mantenedor publica uma
221
+ nova versão no npm (Release no GitHub). Nada é editado à mão.
190
222
 
191
223
  Detalhes de manutenção (rodar o pipeline localmente, promover sugestões, overrides, denylist):
192
224
  **[CONTRIBUTING.md](CONTRIBUTING.md)**.
193
225
 
194
226
  ## Limitações conhecidas
195
227
 
196
- - Cobertura de logos = instituições ativas no Open Finance com URL de logo válida. Hoje são 107;
197
- o número cresce conforme o ecossistema.
228
+ - Cobertura de logos: 152 hoje (Open Finance + sites oficiais curados); cresce conforme o
229
+ ecossistema e a curadoria. **Sua instituição está sem logo?** Abra uma issue com o template
230
+ "Sugestão de match"/"Adicionar logo" apontando a URL no domínio oficial — promovemos rápido.
198
231
  - Algumas instituições publicam no diretório o logo da sua **marca de produto** (ex.: Banco CSF →
199
232
  cartão Atacadão). É a escolha oficial da própria instituição; se preferir outra arte no seu app,
200
233
  use um override local seu.