npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

firma-gob

v1.4.2

Published

Firma documentos con plataforma Firma.Gob del gobierno Chile

Downloads

32

Readme

Firma Gob

Librería javascript para firmar documentos usando la API de Firma.Gob (Chile)

instalar

// npm
npm install firma-gob

// yarn
yarn add firma-gob

Importa la librería en tu código

FirmaGob

const { FirmaGob, File } = require("firma-gob");

Por defecto la librería inicia con los parámetros de desarrollo (certificado desatendido), por lo que puedes comenzar a usarla para pruebas directamente

// tuarchivo.js
// Ejemplo firma archivos PDF, firma gob recomienda firmar un hash

const { FirmaGob, File } = new FirmaGob();

const gob = new FirmaGob();
const file = new File();

const remote = await file.fromRemote("linkToPdf");
gob.addPDF(remote.base64, remote.checksum); // agrega pdf

// o también desde un archivo local

const local = file.fromLocal("pathToPdf");
gob.addPDF(local.base64, local.checksum); // agrega pdf

// firmar documentos y recibir respuesta
const output = await gob.signFiles();

// guarda archivos con la clase File
output.files.forEach((item) => {
  file.base64ToDisk(`file_${item.checksum_original}.pdf`, item.content);
});

luego ya puedes ejecutar node tuarchivo.js

Firmar un hash

// tuarchivo.js

const { FirmaGob, File } = new FirmaGob();

const gob = new FirmaGob();
const file = new File();

const hash = await file.fromRemoteToHash("linkToPdf"); // agrega hash
gob.addHash(hash);

// o también desde un archivo local

const hash = file.fromLocalToHash("pathToPdf");
gob.addHash(hash); // agrega hash

// firmar documentos y recibir respuesta
const output = await gob.signHashes();

// agregar firma a archivo PDF
const hashes = output.hashes; // array de hashes

FirmaGob

Actualmente la clase FirmaGob cuenta con los siguientes métodos

setConfig

modifica los parametros de configuración de la librería.

Al modificar estos parámetros automáticamente la librería pasa a modo producción

  • run identificador del titular de firma, no debe contener puntos, guión ni tampoco el dígito verificador
  • entity código asociado a la institución a la cual pertenece el titular
  • api_token campo no encriptado de tipo string que contiene el código único generado a partir del registro de la aplicación
  • secret secreto generado por firma.gob al registrar la aplicación
gob.setConfig(run: string, entity: string, api_token: string, secret: string)

setPurpose (Propósito Desatendido por defecto)

Establece si el certificado es de proposito general o desatendido

  • purpose código asociado al tipo de certificado a utilizar

Parámetros permitidos:

  • Purpose.ATENDIDO (Propósito general)

  • Purpose.DESATENDIDO (Desatendido)

gob.setPurpose(purpose: Purpose)

addJSON

Agrega un archivo JSON a la lista de archivos

  • content Archivo en base64
  • checksum SHA256 del archivo
gob.addJSON(content: string, checksum: string)

addPDF

Agrega un archivo PDF a la lista de archivos

  • content Archivo en base64
  • checksum SHA256 del archivo
  • layout string opcional en caso de desear incrustar elemento al archivo PDF
gob.addPDF(content: string, checksum: string, layout?: string)

addHash

Agrega un hash a la lista de archivos

  • hash hash del archivo a firmar
gob.addHash(hash: string)

addXML

Agrega un archivo PDF a la lista de archivos

  • content Archivo en base64
  • checksum SHA256 del archivo
  • references array de string con la identificación del nodo a firmar en caso de ser un archivo XML ejemplo: [“#nodo1”, “#nodo2”]
  • xmlObjects array de string con los pie de firma en un archivo XML ejemplo: ["<a></a>","<b/>”]
  gob.addXML(content: string, checksum: string, references: string[], xmlObjects: string[])

addFiles

Agrega multiples archivos a la lista de archivos a ser firmados

  • files Lista de archivos a firmar
gob.addFiles(files: FileProps[])

signFiles

Firma los archivos previamente establecidos

  • otp Si la firma es de propósito general necesitas enviar el código OTP

  • Respuesta con documentos firmados o errores, para este método siempre existirá una clave files con los archivos firmados

gob.signFiles(otp?: string)

signHashes

Firma los hashes previamente establecidos con addHash

  • otp Si la firma es de propósito general necesitas enviar el código OTP

  • Respuesta con documentos firmados o errores, para este método siempre existirá una clave hashes con los certificados que deben ser agregados al archivo PDF

gob.signHashes(otp?: string)

File

La clase File te ayudará a manipular tus archivos para ser usados con FirmaGob

// crea una instancia de la clase File
const file = new File();

fromLocal

Obtiene los datos de un archivo local y los convierte en base64

  • path Ruta del archivo en tu disco

  • Respuesta objeto { base64, checksum }

pdf.fromLocal(path: string)

fromLocalToHash

Obtiene los datos de un archivo local y calcula su hash (cheksum)

  • path Ruta del archivo en tu disco

  • Respuesta string hash (checksum)

pdf.fromLocalToHash(path: string)

fromRemote

Obtiene un archivo pdf desde un servidor remoto y lo convierte a base64

  • url URL del archivo PDF

  • Respuesta objeto { base64, checksum }

pdf.fromRemote(url: string)

fromRemoteToHash

Obtiene los datos de un archivo desde un servidor remoto y calcula su hash (cheksum)

  • path Ruta del archivo en tu disco

  • Respuesta string hash (checksum)

pdf.fromRemoteToHash(url: string)

base64ToBuffer

Convierte un archivo en base64 a buffer

  • base64 archivo en base64

  • Respuesta buffer de archivo

pdf.base64ToBuffer(base64: string)

bufferToDisk

Usa el buffer dado y lo almacena en el disco con el nombre especificado

  • filename nombre del archivo a guardar

  • buffer buffer de archivo

pdf.bufferToDisk(filename: string, buffer: Buffer)

base64ToDisk

Almacena en el disco un archivo en base64

  • filename nombre del archivo a guardar

  • base64 archivo en base64

pdf.base64ToDisk(filename: string, base64: string)

Desarrollo

La librería está escrita con typescript, al modificar el index.ts debes ejecutar tsc para recompilar el archivo index.js (debes tener instalado tsc)

Todos los comentarios y PR son bienvenidos.

La idea es ir complementando la librería para poder manejar con mayor facilidad cada archivo

Más información

Para obtener más información acerca de esta API pudes descargar los manuales en https://firma.digital.gob.cl/biblioteca/manuales-firmagob/

Licencia

Este proyecto está liberado bajo la licencia MIT, quiere decir que puedes hacer lo que quieras (incluso comercialmente)