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.
- package/README.en.md +43 -11
- package/README.md +47 -14
- package/data/bancos.json +540 -45
- package/dist/{chunk-ZGDTPJIV.cjs → chunk-43N2EZJR.cjs} +541 -46
- package/dist/{chunk-SPP4OABR.js → chunk-6ZLP4OY5.js} +1 -1
- package/dist/{chunk-BIKMT23N.cjs → chunk-7QU5WW5A.cjs} +6 -6
- package/dist/{chunk-S4JZVP5E.js → chunk-RKLZTMIS.js} +541 -46
- package/dist/cli.cjs +5 -5
- package/dist/cli.js +2 -2
- package/dist/index.cjs +2 -2
- package/dist/index.js +1 -1
- package/dist/node.cjs +3 -3
- package/dist/node.js +2 -2
- package/llms.txt +6 -3
- package/logos/png/00556603.png +0 -0
- package/logos/png/00714671.png +0 -0
- package/logos/png/00806535.png +0 -0
- package/logos/png/00954288.png +0 -0
- package/logos/png/01858774.png +0 -0
- package/logos/png/02801938.png +0 -0
- package/logos/png/02819125.png +0 -0
- package/logos/png/02992317.png +0 -0
- package/logos/png/03609817.png +0 -0
- package/logos/png/04332281.png +0 -0
- package/logos/png/07652226.png +0 -0
- package/logos/png/09274232.png +0 -0
- package/logos/png/14388334.png +0 -0
- package/logos/png/14511781.png +0 -0
- package/logos/png/15173776.png +0 -0
- package/logos/png/18520834.png +0 -0
- package/logos/png/22610500.png +0 -0
- package/logos/png/28195667.png +0 -0
- package/logos/png/28650236.png +0 -0
- package/logos/png/32062580.png +0 -0
- package/logos/png/33172537.png +0 -0
- package/logos/png/33603457.png +0 -0
- package/logos/png/33644196.png +0 -0
- package/logos/png/33667205.png +0 -0
- package/logos/png/33737818.png +0 -0
- package/logos/png/36113876.png +0 -0
- package/logos/png/42272526.png +0 -0
- package/logos/png/46518205.png +0 -0
- package/logos/png/47381104.png +0 -0
- package/logos/png/53908413.png +0 -0
- package/logos/png/54811417.png +0 -0
- package/logos/png/58616418.png +0 -0
- package/logos/png/59109165.png +0 -0
- package/logos/png/60394079.png +0 -0
- package/logos/png/60814191.png +0 -0
- package/logos/png/60850229.png +0 -0
- package/logos/png/61088183.png +0 -0
- package/logos/png/61809182.png +0 -0
- package/logos/png/62144175.png +0 -0
- package/logos/png/62287735.png +0 -0
- package/logos/png/62331228.png +0 -0
- package/logos/png/71027866.png +0 -0
- package/logos/png/78632767.png +0 -0
- package/logos/png/80230774.png +0 -0
- package/logos/png/87437687.png +0 -0
- package/logos/svg/00954288.svg +14 -0
- package/logos/svg/01858774.svg +13 -0
- package/logos/svg/28195667.svg +3 -0
- package/logos/svg/33667205.svg +24 -0
- package/logos/svg/33737818.svg +24 -0
- package/logos/svg/53908413.svg +1 -0
- package/logos/svg/60394079.svg +16 -0
- package/logos/svg/62144175.svg +13 -0
- package/logos/svg/80230774.svg +24 -0
- package/logos/svg/87437687.svg +24 -0
- package/package.json +4 -1
- 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
|
|
36
|
-
|
|
37
|
-
|
|
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)
|
|
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** —
|
|
62
|
-
|
|
63
|
-
|
|
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…).
|
|
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
|
|
141
|
-
edited by hand. Maintenance details:
|
|
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
|
|
35
|
-
|
|
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)
|
|
53
|
-
|
|
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** —
|
|
63
|
-
|
|
64
|
-
|
|
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. **
|
|
186
|
-
|
|
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,
|
|
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
|
|
197
|
-
|
|
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.
|