Comparing version 0.0.9-0 to 1.0.0-0
declare enum ValidationTypes { | ||
None = 0, | ||
Full = 1 | ||
Full = 5 | ||
} | ||
@@ -5,0 +5,0 @@ declare var ID_LENGHT: number; |
@@ -7,3 +7,3 @@ "use strict"; | ||
ValidationTypes[ValidationTypes["None"] = 0] = "None"; | ||
ValidationTypes[ValidationTypes["Full"] = 1] = "Full"; | ||
ValidationTypes[ValidationTypes["Full"] = 5] = "Full"; | ||
})(ValidationTypes || (ValidationTypes = {})); | ||
@@ -10,0 +10,0 @@ exports.ValidationTypes = ValidationTypes; |
@@ -21,11 +21,8 @@ "use strict"; | ||
}; | ||
var __importDefault = (this && this.__importDefault) || function (mod) { | ||
return (mod && mod.__esModule) ? mod : { "default": mod }; | ||
}; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.toPNG = exports.toDataURL = void 0; | ||
const Utils = __importStar(require("./pix.utils")); | ||
const qrcode_1 = __importDefault(require("qrcode")); | ||
const QRCode = __importStar(require("qrcode")); | ||
function toDataURL(msg, callback) { | ||
qrcode_1.default.toDataURL(msg, function (err, url) { | ||
QRCode.toDataURL(msg, function (err, url) { | ||
if (err) { | ||
@@ -39,3 +36,3 @@ throw err; | ||
function toPNG(msg, callback) { | ||
qrcode_1.default.toDataURL(msg, function (err, url) { | ||
QRCode.toDataURL(msg, function (err, url) { | ||
if (err) { | ||
@@ -42,0 +39,0 @@ throw err; |
declare enum ValidationTypes { | ||
None = 0, | ||
Full = 1 | ||
Full = 5 | ||
} | ||
@@ -5,0 +5,0 @@ declare var ID_LENGHT: number; |
var ValidationTypes; | ||
(function (ValidationTypes) { | ||
ValidationTypes[ValidationTypes["None"] = 0] = "None"; | ||
ValidationTypes[ValidationTypes["Full"] = 1] = "Full"; | ||
ValidationTypes[ValidationTypes["Full"] = 5] = "Full"; | ||
})(ValidationTypes || (ValidationTypes = {})); | ||
@@ -6,0 +6,0 @@ var ID_LENGHT = 2; |
import * as Utils from './pix.utils'; | ||
import QRCode from 'qrcode'; | ||
import * as QRCode from 'qrcode'; | ||
function toDataURL(msg, callback) { | ||
@@ -4,0 +4,0 @@ QRCode.toDataURL(msg, function (err, url) { |
{ | ||
"name": "pixbr", | ||
"version": "0.0.9-0", | ||
"version": "1.0.0-0", | ||
"description": "Typescript library to generate QR Code of PIX (Brazilian Central Bank) payment method.", | ||
@@ -12,5 +12,5 @@ "main": "./lib/cjs/index.js", | ||
"test": "mocha -r ts-node/register ./test/test.ts", | ||
"tsc": "tsc -p tsconfig_esm.json && tsc -p tsconfig_cjs.json", | ||
"prepublishOnly": "npm run tsc", | ||
"tsc": "tsc -p tsconfig_2.json && tsc -p tsconfig_3.json", | ||
"clean": "rimraf dist && rimraf index.js && rimraf index.d.ts && rimraf lib" | ||
"clean": "rimraf lib" | ||
}, | ||
@@ -44,3 +44,2 @@ "repository": { | ||
"devDependencies": { | ||
"@rollup/plugin-node-resolve": "^11.2.0", | ||
"@types/chai": "^4.2.15", | ||
@@ -53,4 +52,2 @@ "@types/mocha": "^8.2.1", | ||
"rimraf": "^3.0.2", | ||
"rollup": "^2.41.4", | ||
"rollup-plugin-dts": "^3.0.1", | ||
"ts-node": "^9.1.1", | ||
@@ -57,0 +54,0 @@ "typescript": "^4.2.3" |
159
README.md
# pixbr | ||
Typescript library to generate QR Code of PIX (Brazilian Central Bank) payment method. | ||
Biblioteca TypeScript para gerar QR Code do PIX, de acordo com as regras do Banco Central Brasileiro. | ||
Na versão 1.0 está implementado todas as regras de negócio de uma mensagem estática, de acordo com o padrão descrito [nesse](https://www.bcb.gov.br/content/estabilidadefinanceira/forumpireunioes/Anexo%20I%20-%20Padr%C3%B5es%20para%20Inicia%C3%A7%C3%A3o%20do%20PIX.pdf)documento do BCB. | ||
# Instalação | ||
Para usar a biblioteca, basta instalá-la pelo npm, com o seguinte comando. | ||
```bash | ||
npm i pixbr | ||
``` | ||
# Uso básico | ||
Importar a biblioteca | ||
```js | ||
import * as PIX from 'pixbr'; | ||
``` | ||
Criação da mensagem estática | ||
```js | ||
var msg = new PIX.Messages.Static('fulano2019@example.com', /* chave PIX do recebedor*/ | ||
'FULANO DE TAL', /* Nome do Recebedor */ | ||
'BRASILIA' /* Cidade do Recebedor */ ); | ||
``` | ||
Adicionando valor de um novo campo, no caso, valor a ser cobrado | ||
```js | ||
msg.setField(new PIX.Fields.Transaction_Amount(1234.17)); | ||
``` | ||
E por último, gerar o QRCode, como um buffer de bytes: | ||
```js | ||
PIX.QRCode.toPNG(msg.getStringValue(), function (data) { | ||
console.log(data); | ||
}); | ||
``` | ||
ou como uma string de dataURL: | ||
```js | ||
PIX.QRCode.toDataURL(msg.getStringValue(), function (data) { | ||
console.log(data); | ||
}); | ||
``` | ||
# Detalhes de implementação | ||
## PIX.Fields | ||
Definição de campos. | ||
### Interface padrão. | ||
A interface `PIX.Fields.IField<T>` deve ser implementada por todo campo, onde `<T>` é o tipo do valor. Define que o campo tem que ter os seguintes atributos. | ||
| Propriedade | Tipo | Descrição | | ||
| --- | --- | --- | | ||
| `ID` | String | ID do campo de acordo com a documentação de origem| | ||
| `Value` | `<T>` | Valor do campo| | ||
| `TextValue` | String | Valor do campo como texto, que será implementado na mensagem final| | ||
| `Min_length` | Number | Tamanho mínimo do valor em formato texto| | ||
| `Max_length` | Number | Tamanho máximo do valor em formato texto| | ||
| `setValue(value : T) : void` | Função | Função para alterar o valor do campo | | ||
| `validate() : void` | Função | Função de validação do campo | | ||
| `getStringValue() : string` | Função | Função que retorna o campo em texto para utilizar na formação da mensagem | | ||
### Implementações genéricas tipadas | ||
| Classe | Descrição | | ||
| --- | --- | | ||
| `abstract class Field<T>` | Implementação abstrata e incompleta de `IField` | | ||
| `class StrField` | Campo com valor do tipo String | | ||
| `class NumField` | Campo com valor do tipo Numérico | | ||
`NumField` adiciona também a possibilidade de se colocar um limite máximo e mínimo ao valor, e o número de casas decimais relevantes, nos parâmetros `Min_Value`, `Max_Value` e `Decimals`, respectivamente | ||
### Implementações específicas | ||
Campos com definições de tipos e valores já foram implementados, e recomendá-se usá-los sempre que possível. | ||
* `PIX.Fields.Payload_Format_Indicator` | ||
* `PIX.Fields.Point_Of_Initiation_Method` | ||
* `PIX.Fields.Merchant_Account_Information` | ||
* `PIX.Fields.Merchant_Category_Code` | ||
* `PIX.Fields.Transaction_Currency` | ||
* `PIX.Fields.Transaction_Amount` | ||
* `PIX.Fields.Country_Code` | ||
* `PIX.Fields.Merchant_Name` | ||
* `PIX.Fields.Merchant_City` | ||
* `PIX.Fields.Postal_Code` | ||
* `PIX.Fields.CRC16` | ||
* `PIX.Fields.Additional_Data_Field` | ||
* `PIX.Fields.Unreserved_Templates` | ||
Para saber mais detalhes de cada campo, consulte a documentação do Banco Central. | ||
O campo `PIX.Fields.CRC16` deve receber como parâmetro na função 'setValue' o texto da mensagem até imediatamente antes dele de acordo com a ordem apresentada dos campos. | ||
## PIX.Groups | ||
Alguns campos aceitam mais de um valor subcampo, e com isso são chamados de grupos. O tipo genérico é | ||
`class Group<T extends Fields.IField<any>>`, que por sua vez, também é uma implementação de `IField<undefined>`. | ||
A diferença principal é que existe a propriedade `Children : Array<T>`, que contém a lista de campos filhos aceitos. | ||
### Implementações específicas | ||
Assim como no caso dos campos, existem grupos já implementados: | ||
* `PIX.Groups.Grp_Merchant_Account_Information` | ||
* `PIX.Groups.Grp_Additional_Data_Field` | ||
* `PIX.Groups.Grp_Unreserved_Templates` | ||
Um exemplo de uso de grupo: | ||
```JS | ||
var grpfield = new PIX.Groups.Grp_Merchant_Account_Information(); | ||
grpfield.Children.push(new PIX.Fields.Merchant_Account_Information('01', 'fulano2019@example.com')); | ||
``` | ||
O grupo `Grp_Merchant_Account_Information` já inclui por definição um campo filho, com ID *'00'* e valor *'br.gov.bcb.pix'*, conforme a definição do Banco Central. | ||
## PIX.Messages | ||
Mensagem é o conteúdo de todos os campos que serão utilizados para gerar o QRCode. | ||
Para isso, foi criada a classe genérica `PIX.Messages.Message`: | ||
| Propriedade | Tipo | Descrição | | ||
| --- | --- | --- | | ||
| `validate() : void` | Função | Validação da mensagem | | ||
| `getStringValue() : string` | Função | Retorna o texto final da mensagem, que deverá ser convetido para QRCode | | ||
| `existsField(field_type : any) : boolean` | Função | Verifica se já existe um campo do tipo passado. | | ||
| `getField(field_type : any) : any` | boolean | Retorna o campo da mensagem do tipo passado. | | ||
| `setField(field : Fields.IField<any>, order_override : number = -1) : void ` | Função | Adiciona um novo campo à mensagem. | | ||
| `AcceptedFieldList` | `Map<any, AcceptedFieldDefinitions>` | Lista de campos aceitos na mensagem, com Ordem e obrigatoriedade do campo. <br/> Campo que define a mensagem, e serve como base para validação | | ||
| `FieldList` | `Array<MessageFields>` | Campos existentes na mensagem, com sua respectiva ordem | | ||
### Implementações específicas | ||
A mensagem do tipo QR Code estático é a única atualmente implementada, e deve ser usada sempre que possível. | ||
* `PIX.Messages.Static` | ||
## PIX.Config | ||
PIX.Config é utilizado para configurações que podem ser modificadas em runtime. | ||
Objeto | Valores | Descrição | ||
--- | --- | --- | ||
`PIX.Config.ValidationType` | `ValidationTypes.Full` **(default)** <br/> `ValidationTypes.None` | Verifica campos nas mensagens, valores dos campos, e CheckSum, ou não realiza nenhuma verificação. | ||
`PIX.Config.ID_LENGHT` | Int **(default = 2)** | Tamanho do ID do campo. | ||
--- | ||
A implementação de validação segue o protocolod o Banco Central caso os tipos específicos de mensagem e campo implementados sejam seguidos. Ao se implementar tipos genéricos (Ex: PIX.Message, ou PIX.Field). | ||
Recomenda-se não alterar o `PIX.Config.ID_LENGHT`, caso contrário o padrão do Bacen não será seguido, e a mensagem será inválida. |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
94330
9
160
0
1261