{"id":15994149,"url":"https://github.com/gepd/firmagob","last_synced_at":"2025-05-07T04:02:16.192Z","repository":{"id":45823254,"uuid":"507425801","full_name":"gepd/FirmaGob","owner":"gepd","description":"Librería para utilizar la API FirmaGob del Gobierno de Chile con NodeJs","archived":false,"fork":false,"pushed_at":"2024-05-17T16:56:15.000Z","size":314,"stargazers_count":3,"open_issues_count":1,"forks_count":4,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-05-07T04:02:06.784Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gepd.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2022-06-25T22:04:35.000Z","updated_at":"2024-10-28T11:04:18.000Z","dependencies_parsed_at":"2024-04-23T17:47:25.365Z","dependency_job_id":"75adff62-539c-433f-814f-005e1bda347b","html_url":"https://github.com/gepd/FirmaGob","commit_stats":{"total_commits":39,"total_committers":1,"mean_commits":39.0,"dds":0.0,"last_synced_commit":"020f09a7280ebf962b3626d509d8ed1565115452"},"previous_names":[],"tags_count":13,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gepd%2FFirmaGob","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gepd%2FFirmaGob/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gepd%2FFirmaGob/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gepd%2FFirmaGob/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gepd","download_url":"https://codeload.github.com/gepd/FirmaGob/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252810271,"owners_count":21807759,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-08T07:06:31.130Z","updated_at":"2025-05-07T04:02:15.929Z","avatar_url":"https://github.com/gepd.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Firma Gob\n\nLibrería javascript para firmar documentos usando la API de Firma.Gob (Chile)\n\ninstalar\n\n```js\n// npm\nnpm install firma-gob\n\n// yarn\nyarn add firma-gob\n```\n\nImporta la librería en tu código\n\n## FirmaGob\n\n```js\nconst { FirmaGob, File } = require(\"firma-gob\");\n```\n\nPor defecto la librería inicia con los parámetros de desarrollo (certificado desatendido), por lo que puedes comenzar a usarla para pruebas directamente\n\n```js\n// tuarchivo.js\n// Ejemplo firma archivos PDF, firma gob recomienda firmar un hash\n\nconst { FirmaGob, File } = new FirmaGob();\n\nconst gob = new FirmaGob();\nconst file = new File();\n\nconst remote = await file.fromRemote(\"linkToPdf\");\ngob.addPDF(remote.base64, remote.checksum); // agrega pdf\n\n// o también desde un archivo local\n\nconst local = file.fromLocal(\"pathToPdf\");\ngob.addPDF(local.base64, local.checksum); // agrega pdf\n\n// firmar documentos y recibir respuesta\nconst output = await gob.signFiles();\n\n// guarda archivos con la clase File\noutput.files.forEach((item) =\u003e {\n  file.base64ToDisk(`file_${item.checksum_original}.pdf`, item.content);\n});\n```\n\nluego ya puedes ejecutar `node tuarchivo.js`\n\n## Firmar un hash\n\n```js\n// tuarchivo.js\n\nconst { FirmaGob, File } = new FirmaGob();\n\nconst gob = new FirmaGob();\nconst file = new File();\n\nconst hash = await file.fromRemoteToHash(\"linkToPdf\"); // agrega hash\ngob.addHash(hash);\n\n// o también desde un archivo local\n\nconst hash = file.fromLocalToHash(\"pathToPdf\");\ngob.addHash(hash); // agrega hash\n\n// firmar documentos y recibir respuesta\nconst output = await gob.signHashes();\n\n// agregar firma a archivo PDF\nconst hashes = output.hashes; // array de hashes\n```\n\n# FirmaGob\n\nActualmente la clase `FirmaGob` cuenta con los siguientes métodos\n\n### setConfig\n\nmodifica los parametros de configuración de la librería.\n\n\u003e Al modificar estos parámetros automáticamente la librería pasa a modo **producción**\n\n- **run** identificador del titular de firma, no debe contener puntos, guión ni tampoco el dígito verificador\n- **entity** código asociado a la institución a la cual pertenece el titular\n- **api_token** campo no encriptado de tipo string que contiene el código único generado a partir del registro de la aplicación\n- **secret** secreto generado por firma.gob al registrar la aplicación\n\n```ts\ngob.setConfig(run: string, entity: string, api_token: string, secret: string)\n```\n\n### setPurpose (Propósito Desatendido por defecto)\n\nEstablece si el certificado es de proposito general o desatendido\n\n- **purpose** código asociado al tipo de certificado a utilizar\n\nParámetros permitidos:\n\n- Purpose.ATENDIDO (Propósito general)\n\n- Purpose.DESATENDIDO (Desatendido)\n\n```ts\ngob.setPurpose(purpose: Purpose)\n```\n\n### addJSON\n\nAgrega un archivo JSON a la lista de archivos\n\n- **content** Archivo en base64\n- **checksum** SHA256 del archivo\n\n```ts\ngob.addJSON(content: string, checksum: string)\n```\n\n### addPDF\n\nAgrega un archivo PDF a la lista de archivos\n\n- **content** Archivo en base64\n- **checksum** SHA256 del archivo\n- **layout** string opcional en caso de desear incrustar elemento al archivo PDF\n\n```ts\ngob.addPDF(content: string, checksum: string, layout?: string)\n```\n\n### addHash\n\nAgrega un hash a la lista de archivos\n\n- **hash** hash del archivo a firmar\n\n```ts\ngob.addHash(hash: string)\n```\n\n### addXML\n\nAgrega un archivo PDF a la lista de archivos\n\n- **content** Archivo en base64\n- **checksum** SHA256 del archivo\n- **references** array de string con la identificación del nodo a firmar en caso de ser un archivo XML ejemplo: [“#nodo1”, “#nodo2”]\n- **xmlObjects** array de string con los pie de firma en un archivo XML ejemplo: `[\"\u003ca\u003e\u003c/a\u003e\",\"\u003cb/\u003e”]`\n\n```ts\n  gob.addXML(content: string, checksum: string, references: string[], xmlObjects: string[])\n```\n\n### addFiles\n\nAgrega multiples archivos a la lista de archivos a ser firmados\n\n- **files** Lista de archivos a firmar\n\n```ts\ngob.addFiles(files: FileProps[])\n```\n\n### signFiles\n\nFirma los archivos previamente establecidos\n\n- **otp** Si la firma es de propósito general necesitas enviar el código OTP\n\n- **Respuesta** con documentos firmados o errores, para este método siempre existirá una clave **files** con los archivos firmados\n\n```ts\ngob.signFiles(otp?: string)\n\n```\n\n### signHashes\n\nFirma los hashes previamente establecidos con `addHash`\n\n- **otp** Si la firma es de propósito general necesitas enviar el código OTP\n\n- **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\n\n```ts\ngob.signHashes(otp?: string)\n\n```\n\n# File\n\nLa clase `File` te ayudará a manipular tus archivos para ser usados con `FirmaGob`\n\n```js\n// crea una instancia de la clase File\nconst file = new File();\n```\n\n### fromLocal\n\nObtiene los datos de un archivo local y los convierte en base64\n\n- **path** Ruta del archivo en tu disco\n\n- **Respuesta** objeto { base64, checksum }\n\n```ts\npdf.fromLocal(path: string)\n\n```\n\n### fromLocalToHash\n\nObtiene los datos de un archivo local y calcula su hash (cheksum)\n\n- **path** Ruta del archivo en tu disco\n\n- **Respuesta** string hash (checksum)\n\n```ts\npdf.fromLocalToHash(path: string)\n\n```\n\n### fromRemote\n\nObtiene un archivo pdf desde un servidor remoto y lo convierte a base64\n\n- **url** URL del archivo PDF\n\n- **Respuesta** objeto { base64, checksum }\n\n```ts\npdf.fromRemote(url: string)\n\n```\n\n### fromRemoteToHash\n\nObtiene los datos de un archivo desde un servidor remoto y calcula su hash (cheksum)\n\n- **path** Ruta del archivo en tu disco\n\n- **Respuesta** string hash (checksum)\n\n```ts\npdf.fromRemoteToHash(url: string)\n\n```\n\n### base64ToBuffer\n\nConvierte un archivo en base64 a buffer\n\n- **base64** archivo en base64\n\n- **Respuesta** buffer de archivo\n\n```ts\npdf.base64ToBuffer(base64: string)\n\n```\n\n### bufferToDisk\n\nUsa el buffer dado y lo almacena en el disco con el nombre especificado\n\n- **filename** nombre del archivo a guardar\n\n- **buffer** buffer de archivo\n\n```ts\npdf.bufferToDisk(filename: string, buffer: Buffer)\n\n```\n\n### base64ToDisk\n\nAlmacena en el disco un archivo en base64\n\n- **filename** nombre del archivo a guardar\n\n- **base64** archivo en base64\n\n```ts\npdf.base64ToDisk(filename: string, base64: string)\n\n```\n\n# Desarrollo\n\nLa librería está escrita con typescript, al modificar el `index.ts` debes ejecutar `tsc` para recompilar el archivo `index.js` (debes tener instalado tsc)\n\nTodos los comentarios y PR son bienvenidos.\n\nLa idea es ir complementando la librería para poder manejar con mayor facilidad cada archivo\n\n# Más información\n\nPara obtener más información acerca de esta API pudes descargar los manuales en https://firma.digital.gob.cl/biblioteca/manuales-firmagob/\n\n# Licencia\n\nEste proyecto está liberado bajo la licencia MIT, quiere decir que puedes hacer lo que quieras (incluso comercialmente)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgepd%2Ffirmagob","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgepd%2Ffirmagob","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgepd%2Ffirmagob/lists"}